mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-05-23 06:34:18 -04:00
190 lines
5.5 KiB
C++
190 lines
5.5 KiB
C++
#ifndef _JSYSTEM_JFW_JFWDISPLAY_H
|
|
#define _JSYSTEM_JFW_JFWDISPLAY_H
|
|
|
|
#include <dolphin/gx.h>
|
|
#include <dolphin/mtx.h>
|
|
#include "JSystem/JKernel/JKRHeap.h"
|
|
#include "JSystem/JUtility/JUTDirectPrint.h"
|
|
#include "JSystem/JUtility/JUTFader.h"
|
|
#include "JSystem/JUtility/JUTProcBar.h"
|
|
#include "JSystem/JUtility/JUTVideo.h"
|
|
#include "JSystem/JUtility/JUTXfb.h"
|
|
#include "JSystem/JUtility/TColor.h"
|
|
#include "types.h"
|
|
|
|
typedef void (*JFWDisplayUnkFunc)(void);
|
|
|
|
extern GC_Mtx e_mtx;
|
|
|
|
class JFWAlarm : public OSAlarm { // everything here seems to be auto inlined or unused
|
|
public:
|
|
// Contructor and Destructor are both present in map but unused, not sure if it belongs here
|
|
JFWAlarm() {
|
|
}
|
|
~JFWAlarm() {
|
|
}
|
|
void createAlarm() {
|
|
OSCreateAlarm(this);
|
|
}
|
|
void cancelAlarm() {
|
|
OSCancelAlarm(this);
|
|
}
|
|
|
|
OSThread* getThread() const {
|
|
return mThread;
|
|
}
|
|
void setThread(OSThread* thread) {
|
|
mThread = thread;
|
|
}
|
|
|
|
static JSUList<JFWAlarm> sList; //
|
|
|
|
public:
|
|
/* 0x28 */ OSThread* mThread;
|
|
};
|
|
|
|
class JFWDisplay {
|
|
public:
|
|
enum EDrawDone {
|
|
/* 0x0 */ UNK_METHOD_0 = 0,
|
|
/* 0x1 */ UNK_METHOD_1 = 1
|
|
};
|
|
|
|
static JFWDisplay* createManager(const _GXRenderModeObj*, JKRHeap*, JUTXfb::EXfbNumber, bool); // 0x80015bfc
|
|
void waitBlanking(int); // 0x8001684c
|
|
void threadSleep(s64); // 0x800169fc
|
|
void clearEfb_init(); // 0x80016ab8
|
|
void clearEfb(); // 0x80016b2c
|
|
void clearEfb(_GXColor); // 0x80016b58
|
|
void clearEfb(int, int, int, int, _GXColor); // 0x80016b9c
|
|
void calcCombinationRatio(); // 0x80016f0c
|
|
|
|
void ctor_subroutine(const GXRenderModeObj*, bool);
|
|
JFWDisplay(const GXRenderModeObj*, JKRHeap*, JUTXfb::EXfbNumber, bool);
|
|
|
|
static void destroyManager();
|
|
void prepareCopyDisp();
|
|
void drawendXfb_single();
|
|
void exchangeXfb_double();
|
|
void exchangeXfb_triple();
|
|
void copyXfb_triple();
|
|
void preGX();
|
|
void endGX();
|
|
void* changeToSingleXfb(int);
|
|
void* changeToDoubleXfb();
|
|
|
|
// UNUSED
|
|
JFWDisplay(void*, bool);
|
|
JFWDisplay(void*, void*, bool);
|
|
JFWDisplay(void*, void*, void*, bool);
|
|
void createManager(const _GXRenderModeObj*, void*, bool);
|
|
void createManager(const _GXRenderModeObj*, void*, void*, bool);
|
|
void createManager(const _GXRenderModeObj*, void*, void*, void*, bool);
|
|
void deleteToSingleXfb(int);
|
|
void deleteToSingleXfb(void*);
|
|
void addToDoubleXfb(void*, bool);
|
|
void addToDoubleXfb(JKRHeap*);
|
|
void clearAllXfb();
|
|
s32 frameToTick(float);
|
|
static void setForOSResetSystem();
|
|
|
|
// Virtual functions
|
|
virtual void beginRender(); // 0x80015e0c
|
|
virtual void endRender(); // 0x8001633c
|
|
virtual void endFrame(); // 0x8001669c
|
|
virtual ~JFWDisplay(); // 0x80015b80
|
|
|
|
static JFWDisplay* getManager() {
|
|
return sManager;
|
|
}
|
|
|
|
const GXRenderModeObj* getRenderMode() const {
|
|
return mRMode;
|
|
}
|
|
|
|
int getEfbHeight() const {
|
|
return getRenderMode() ->efbHeight;
|
|
}
|
|
|
|
int getEfbWidth() const {
|
|
return getRenderMode() ->fbWidth;
|
|
}
|
|
|
|
JUTFader* getFader() const {
|
|
return mFader;
|
|
}
|
|
void setFader(JUTFader* fader) {
|
|
mFader = fader;
|
|
}
|
|
|
|
bool startFadeOut(int duration) {
|
|
if (mFader != nullptr) {
|
|
return mFader->startFadeOut(duration);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool startFadeIn(int duration) {
|
|
if (mFader != nullptr) {
|
|
return mFader->startFadeIn(duration);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
void setTickRate(u32 rate) {
|
|
mTickRate = rate;
|
|
mFrameRate = 0;
|
|
}
|
|
JUtility::TColor getClearColor() const {
|
|
return mClearColor;
|
|
}
|
|
|
|
void setClearColor(u8 r, u8 g, u8 b, u8 a) {
|
|
mClearColor.set(r, g, b, a);
|
|
}
|
|
|
|
void setClearColor(JUtility::TColor color) {
|
|
mClearColor = color;
|
|
}
|
|
|
|
void setFBAlpha(bool enable) {
|
|
mEnableAlpha = enable;
|
|
}
|
|
|
|
bool getFBAlpha() {
|
|
return mEnableAlpha;
|
|
}
|
|
|
|
void setGamma(u16 gamma) {
|
|
mGamma = gamma;
|
|
}
|
|
|
|
void setFrameRate(u16 framerate) {
|
|
mFrameRate = framerate;
|
|
mTickRate = 0;
|
|
}
|
|
|
|
static JFWDisplay* sManager; // 0x80415718
|
|
|
|
private:
|
|
JUTFader* mFader; // 04
|
|
const GXRenderModeObj* mRMode; // 08
|
|
JUtility::TColor mClearColor; // 0c
|
|
u32 mZClear; // 10
|
|
JUTXfb* mXfb; // 14
|
|
u16 mGamma; // 18
|
|
EDrawDone mDrawDoneMethod; // 1c
|
|
u16 mFrameRate; // 20
|
|
u32 mTickRate; // 24
|
|
bool mEnableAlpha; // 28
|
|
u16 mClamp; // 2a
|
|
f32 mCombinationRatio; // 2c
|
|
u32 mStartTick; // 30, tick of when the frame starts rendering
|
|
u32 mFrameTime; // 34, time it took to render a frame/amount of ticks beginRender took
|
|
u32 mVideoFrameTime; // 38, time between mStartTick and the last Video Tick
|
|
s16 mDrawingXfbNo; // 3c
|
|
bool mIsSingleXfb; // 3e
|
|
};
|
|
|
|
#endif
|