mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-07-02 10:36:03 -04:00
767ba3bb14
* launch.json cwd * bodge to load gci for testing * stub card stat * gameplay bodges * viewport, ub fixes * add release with debug info cmake variant * be fixes, sound stub * viewport h * d_msg_flow BE * be fopAcM_createItemFromEnemyID * update launch configuration to use iso * more audio stubs * Attempt to set viewport and get messages for brightness check * skip opening scene again, fixed JMessage::TResourceContainer::TCResource::Do_destroy * add guards for viewport changes * moar endian swapping to get Link sitting in PROC_OPENING_SCENE and for dialogues * BE d_msg_class i_data * stub bgm start * fix div by 0 error (for now) * TEMP_BROKEN in d_menu_ring * REQUIRES_GX_LINES * properly stub renderingAmap::draw with REQUIRES_GX_LINES * better stubbing outside of stubs * fix event data getting swapped multiple times * evil draw vp fix * Stub log imgui This redirects all spammy logs to an imgui window that is cleared per frame. This fixes the serious performance dip of the logging, and makes the regular log readable. * Oops move those optimization changes I accidentally committed behind a flag DUSK_SELECTED_OPT * gx_line macro in map * fix audio stubbing * switch to CARD API aurora impl * remove kabufuda from link libs * refactor imgui stuff and add input viewer * merge stub log with refactor * accidentally committed a metaforce header shh * basic map loader * ImGuiConsole: Add missing <thread> include * you may now play as luigi (you may now load stages with bridges) * bloom fix * bloom leak fix * cloud shadow fix * add soft reset button to imgui menu * if it broke dont not fix it * i swear i committed this * BE swap indMtx in JPAResource::setPTev * wnark ct fix * frsqrte implementation from kinoko * Fix Clang compile error in JAISeq::prepare_getSeqData_ * Add endian conversions to dMsgFlow_c::getInitNodeIndex This fixes a freeze when Fado tries to stop you from leaving the starting area. * Add RAII GXTexObj wrapper; fix almost all leaks * Update aurora for indirect texturing * Update aurora for CARD fix * Fix Clang build * More d_msg_flow endian fixes Fixes softlock when trying to talk to Fado and possibly other NPCs. * no frame limiter * get pause menu working * proper frame limiting * particle pointer size fix * improve map loader a bit --------- Co-authored-by: Jasper St. Pierre <jstpierre@mecheye.net> Co-authored-by: TakaRikka <takarikka@outlook.com> Co-authored-by: CraftyBoss <talibabdulmaalik@gmail.com> Co-authored-by: Luke Street <luke@street.dev> Co-authored-by: Lurs <2795933+Lurs@users.noreply.github.com> Co-authored-by: PJB3005 <pieterjan.briers+git@gmail.com> Co-authored-by: tgsm <doodrabbit@hotmail.com> Co-authored-by: Max Roncace <me@caseif.net> Co-authored-by: Phillip Stephens <antidote.crk@gmail.com>
358 lines
9.4 KiB
C++
358 lines
9.4 KiB
C++
#ifndef M_DO_M_DO_GRAPHIC_H
|
|
#define M_DO_M_DO_GRAPHIC_H
|
|
|
|
#include "JSystem/JFramework/JFWDisplay.h"
|
|
#include "m_Do/m_Do_mtx.h"
|
|
#include "global.h"
|
|
#include "dusk/logging.h"
|
|
#if TARGET_PC
|
|
#include <aurora/aurora.h>
|
|
#endif
|
|
|
|
#if WIDESCREEN_SUPPORT
|
|
#define FB_WIDTH (640)
|
|
#define FB_HEIGHT (456)
|
|
#else
|
|
#define FB_WIDTH (608)
|
|
#define FB_HEIGHT (448)
|
|
#endif
|
|
|
|
int mDoGph_Create();
|
|
void mDoGph_drawFilterQuad(s8 param_0, s8 param_1);
|
|
|
|
struct ResTIMG;
|
|
class JKRSolidHeap;
|
|
class mDoGph_gInf_c {
|
|
public:
|
|
class bloom_c {
|
|
public:
|
|
bloom_c() { m_buffer = NULL; }
|
|
void create();
|
|
void remove();
|
|
void draw();
|
|
|
|
u8 getEnable() { return mEnable; }
|
|
void setEnable(u8 i_enable) { mEnable = i_enable; }
|
|
GXColor* getMonoColor() { return &mMonoColor; }
|
|
GXColor* getBlendColor() { return &mBlendColor; }
|
|
void setPoint(u8 i_point) { mPoint = i_point; }
|
|
void setBlureSize(u8 i_size) { mBlureSize = i_size; }
|
|
void setBlureRatio(u8 i_ratio) { mBlureRatio = i_ratio; }
|
|
void setBlendColor(GXColor i_color) { mBlendColor = i_color; }
|
|
void setMonoColor(GXColor i_color) { mMonoColor = i_color; }
|
|
void setMode(u8 i_mode) { mMode = i_mode; }
|
|
void* getBuffer() { return m_buffer; }
|
|
u8 getPoint() { return mPoint; }
|
|
u8 getBlureSize() { return mBlureSize; }
|
|
u8 getBlureRatio() { return mBlureRatio; }
|
|
|
|
/* 0x00 */ GXColor mBlendColor;
|
|
/* 0x04 */ GXColor mMonoColor;
|
|
/* 0x08 */ u8 mEnable;
|
|
/* 0x09 */ u8 mMode;
|
|
/* 0x0A */ u8 mPoint;
|
|
/* 0x0B */ u8 mBlureSize;
|
|
/* 0x0C */ u8 mBlureRatio;
|
|
/* 0x10 */ void* m_buffer;
|
|
};
|
|
|
|
#if PLATFORM_WII || PLATFORM_SHIELD
|
|
class csr_c {
|
|
public:
|
|
virtual ~csr_c() {}
|
|
virtual void draw(f32, f32) = 0;
|
|
virtual bool isPointer();
|
|
|
|
static void particleExecute();
|
|
static u32 getBlurID() { return m_blurID; }
|
|
|
|
static u32 m_blurID;
|
|
static cXyz m_oldEffPos;
|
|
static cXyz m_oldOldEffPos;
|
|
static cXyz m_nowEffPos;
|
|
};
|
|
|
|
static void entryBaseCsr(csr_c*);
|
|
static void releaseCsr(void);
|
|
static void entryCsr(csr_c*);
|
|
#endif
|
|
|
|
static void create();
|
|
static void beginRender();
|
|
static void fadeOut(f32);
|
|
static void fadeOut(f32, GXColor&);
|
|
static void fadeIn(f32 fadeSpeed, GXColor& fadeColor) {
|
|
fadeOut(-fadeSpeed, fadeColor);
|
|
}
|
|
static void fadeOut_f(f32, GXColor&);
|
|
static void onBlure(const Mtx);
|
|
static void onBlure();
|
|
static void calcFade();
|
|
|
|
static void fadeIn(f32 fadeSpeed) {
|
|
fadeOut(-fadeSpeed);
|
|
}
|
|
|
|
static JUTFader* getFader() { return mFader; }
|
|
static void setFader(JUTFader* fader) {
|
|
JFWDisplay::getManager()->setFader(fader);
|
|
mFader = fader;
|
|
}
|
|
|
|
static int startFadeOut(int param_0) { return JFWDisplay::getManager()->startFadeOut(param_0); }
|
|
static int startFadeIn(int param_0) {
|
|
DuskLog.debug("mDoGph_gInf_c::startFadeIn START");
|
|
return JFWDisplay::getManager()->startFadeIn(param_0); }
|
|
static void setFadeColor(JUtility::TColor& color) { mFader->setColor(color); }
|
|
static void setClearColor(JUtility::TColor color) { JFWDisplay::getManager()->setClearColor(color); }
|
|
static void setBackColor(GXColor& color) { mBackColor = color; }
|
|
static void endFrame() { JFWDisplay::getManager()->endFrame(); }
|
|
static void offFade() { mFade = 0; }
|
|
static u8 isFade() { return mFade; }
|
|
static void fadeIn_f(f32 i_fadeSpeed, GXColor& i_fadeColor) { fadeOut_f(-i_fadeSpeed, i_fadeColor); }
|
|
static void offBlure() { mBlureFlag = false; }
|
|
static u8 isBlure() { return mBlureFlag; }
|
|
static void setBlureRate(u8 i_rate) { mBlureRate = i_rate; }
|
|
static u8 getBlureRate() { return mBlureRate; }
|
|
static MtxP getBlureMtx() { return mBlureMtx; }
|
|
static void offAutoForcus() { mAutoForcus = 0; }
|
|
static BOOL isAutoForcus() { return mAutoForcus; }
|
|
static void setTickRate(u32 rate) { JFWDisplay::getManager()->setTickRate(rate); }
|
|
static void waitBlanking(int wait) { JFWDisplay::getManager()->waitBlanking(wait); }
|
|
|
|
static void setBlureMtx(const Mtx m) {
|
|
cMtx_copy(m, mBlureMtx);
|
|
}
|
|
|
|
static f32 getWidthF() {
|
|
#if WIDESCREEN_SUPPORT
|
|
return m_widthF;
|
|
#else
|
|
return FB_WIDTH;
|
|
#endif
|
|
}
|
|
|
|
static f32 getHeightF() {
|
|
#if WIDESCREEN_SUPPORT
|
|
return m_heightF;
|
|
#else
|
|
return FB_HEIGHT;
|
|
#endif
|
|
}
|
|
|
|
static f32 getWidth() {
|
|
#if TARGET_PC
|
|
return JUTVideo::getManager()->getFbWidth();
|
|
#else
|
|
return FB_WIDTH;
|
|
#endif
|
|
}
|
|
static f32 getHeight() {
|
|
#if TARGET_PC
|
|
return JUTVideo::getManager()->getEfbHeight();
|
|
#else
|
|
return FB_HEIGHT;
|
|
#endif
|
|
}
|
|
|
|
static f32 getMinYF() {
|
|
#if WIDESCREEN_SUPPORT
|
|
return m_minYF;
|
|
#else
|
|
return 0.0f;
|
|
#endif
|
|
}
|
|
|
|
static f32 getMinXF() {
|
|
#if WIDESCREEN_SUPPORT
|
|
return m_minXF;
|
|
#else
|
|
return 0.0f;
|
|
#endif
|
|
}
|
|
|
|
static f32 getMaxYF() {
|
|
#if WIDESCREEN_SUPPORT
|
|
return m_maxYF;
|
|
#else
|
|
return FB_HEIGHT;
|
|
#endif
|
|
}
|
|
|
|
static f32 getMaxXF() {
|
|
#if WIDESCREEN_SUPPORT
|
|
return m_maxXF;
|
|
#else
|
|
return FB_WIDTH;
|
|
#endif
|
|
}
|
|
|
|
static f32 getAspect() {
|
|
#if WIDESCREEN_SUPPORT
|
|
return m_aspect;
|
|
#else
|
|
return 1.3571428f;
|
|
#endif
|
|
}
|
|
|
|
static int getMinY() {
|
|
#if WIDESCREEN_SUPPORT
|
|
return m_minY;
|
|
#else
|
|
return 0;
|
|
#endif
|
|
}
|
|
|
|
static int getMinX() {
|
|
#if WIDESCREEN_SUPPORT
|
|
return m_minX;
|
|
#else
|
|
return 0;
|
|
#endif
|
|
}
|
|
|
|
static int getMaxY() {
|
|
#if WIDESCREEN_SUPPORT
|
|
return m_maxY;
|
|
#else
|
|
return FB_HEIGHT;
|
|
#endif
|
|
}
|
|
|
|
static int getMaxX() {
|
|
#if WIDESCREEN_SUPPORT
|
|
return m_maxX;
|
|
#else
|
|
return FB_WIDTH;
|
|
#endif
|
|
}
|
|
|
|
static ResTIMG* getFrameBufferTimg() { return mFrameBufferTimg; }
|
|
static ResTIMG* getZbufferTimg() { return mZbufferTimg; }
|
|
static void* getFrameBufferTex() { return mFrameBufferTex; }
|
|
static void* getZbufferTex() { return mZbufferTex; }
|
|
static void setFadeRate(f32 rate) { mFadeRate = rate; }
|
|
static f32 getFadeRate() { return mFadeRate; }
|
|
static bloom_c* getBloom() { return &m_bloom; }
|
|
static GXColor& getFadeColor() { return mFadeColor; }
|
|
static GXColor& getBackColor() { return mBackColor; }
|
|
static void endRender() { JFWDisplay::getManager()->endRender(); }
|
|
static TGXTexObj* getZbufferTexObj() { return &mZbufferTexObj; }
|
|
static TGXTexObj* getFrameBufferTexObj() { return &mFrameBufferTexObj; }
|
|
static void setFrameRate(u16 i_rate) { JFWDisplay::getManager()->setFrameRate(i_rate); }
|
|
|
|
static int getFrameBufferSize() {
|
|
#define RoundUp16b(x) (u16)(((u16)(x) + 16 - 1) & ~(16 - 1))
|
|
return RoundUp16b(JFWDisplay::getManager()->getEfbWidth()) * JFWDisplay::getManager()->getEfbHeight() * 2;
|
|
}
|
|
|
|
static void* getFrameBufferMemory() {
|
|
return JFWDisplay::getManager()->getXfbManager()->getDisplayingXfb();
|
|
}
|
|
|
|
static f32 getInvScale() {
|
|
#if WIDESCREEN_SUPPORT
|
|
return m_invScale;
|
|
#else
|
|
return 1.0f;
|
|
#endif
|
|
}
|
|
|
|
static f32 getScale() {
|
|
#if WIDESCREEN_SUPPORT
|
|
return m_scale;
|
|
#else
|
|
return 1.0f;
|
|
#endif
|
|
}
|
|
|
|
#if WIDESCREEN_SUPPORT
|
|
static void setTvSize();
|
|
|
|
static void onWide();
|
|
static void offWide();
|
|
static u8 isWide();
|
|
|
|
static void onWideZoom();
|
|
static void offWideZoom();
|
|
static BOOL isWideZoom();
|
|
|
|
static void setWideZoomProjection(Mtx44& m);
|
|
static void setWideZoomLightProjection(Mtx& m);
|
|
#endif
|
|
|
|
#if TARGET_PC
|
|
static void setWindowSize(AuroraWindowSize const& size);
|
|
#endif
|
|
|
|
static TGXTexObj mFrameBufferTexObj;
|
|
static TGXTexObj mZbufferTexObj;
|
|
static bloom_c m_bloom;
|
|
static Mtx mBlureMtx;
|
|
static GXColor mBackColor;
|
|
static GXColor mFadeColor;
|
|
static JUTFader* mFader;
|
|
static ResTIMG* mFrameBufferTimg;
|
|
static void* mFrameBufferTex;
|
|
static ResTIMG* mZbufferTimg;
|
|
static void* mZbufferTex;
|
|
static f32 mFadeRate;
|
|
static f32 mFadeSpeed;
|
|
static u8 mBlureFlag;
|
|
static u8 mBlureRate;
|
|
static u8 mFade;
|
|
static bool mAutoForcus;
|
|
|
|
#if PLATFORM_SHIELD
|
|
static JKRHeap* getHeap() {
|
|
return m_heap;
|
|
}
|
|
|
|
static void setHeap(JKRSolidHeap* i_heap) {
|
|
m_heap = (JKRHeap*)i_heap;
|
|
}
|
|
|
|
static JKRHeap* m_heap;
|
|
#endif
|
|
|
|
#if PLATFORM_WII || PLATFORM_SHIELD
|
|
static void resetDimming();
|
|
|
|
static csr_c* m_baseCsr;
|
|
static csr_c* m_csr;
|
|
|
|
static cXyz m_nowEffPos;
|
|
static cXyz m_oldEffPos;
|
|
static cXyz m_oldOldEffPos;
|
|
#endif
|
|
|
|
#if WIDESCREEN_SUPPORT
|
|
static u8 mWide;
|
|
static u8 mWideZoom;
|
|
static ResTIMG* m_fullFrameBufferTimg;
|
|
static void* m_fullFrameBufferTex;
|
|
static TGXTexObj m_fullFrameBufferTexObj;
|
|
|
|
static f32 m_aspect;
|
|
static f32 m_scale;
|
|
static f32 m_invScale;
|
|
|
|
static f32 m_minXF;
|
|
static f32 m_minYF;
|
|
static int m_minX;
|
|
static int m_minY;
|
|
|
|
static f32 m_maxXF;
|
|
static f32 m_maxYF;
|
|
static int m_maxX;
|
|
static int m_maxY;
|
|
|
|
static int m_width;
|
|
static int m_height;
|
|
static f32 m_heightF;
|
|
static f32 m_widthF;
|
|
#endif
|
|
};
|
|
|
|
#endif /* M_DO_M_DO_GRAPHIC_H */
|