mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-05-23 06:34:18 -04:00
105 lines
3.0 KiB
C
105 lines
3.0 KiB
C
#ifndef JUTVIDEO_H
|
|
#define JUTVIDEO_H
|
|
|
|
#include "types.h"
|
|
#include "dolphin/os/OSTime.h"
|
|
#include "dolphin/os.h"
|
|
#include "dolphin/gx.h"
|
|
#include "dolphin/vi.h"
|
|
|
|
#ifdef __cplusplus
|
|
|
|
typedef u8 (*Pattern)[2];
|
|
|
|
struct JUTVideo {
|
|
JUTVideo(const GXRenderModeObj*);
|
|
|
|
virtual ~JUTVideo(); // _08
|
|
|
|
static JUTVideo* createManager(const GXRenderModeObj*);
|
|
static void destroyManager();
|
|
static void preRetraceProc(unsigned long);
|
|
static void postRetraceProc(unsigned long);
|
|
static void drawDoneCallback();
|
|
|
|
u32 getEfbHeight() const {
|
|
return mRenderModeObj->efbHeight;
|
|
}
|
|
u32 getXfbHeight() const {
|
|
return mRenderModeObj->xfbHeight & 0xffff;
|
|
}
|
|
u32 getFbWidth() const {
|
|
return (u16)mRenderModeObj->fbWidth;
|
|
}
|
|
void getBounds(u16& width, u16& height) const {
|
|
width = getFbWidth();
|
|
height = getEfbHeight();
|
|
}
|
|
GXRenderModeObj* getRenderMode() const {
|
|
return mRenderModeObj;
|
|
}
|
|
u32 isAntiAliasing() const {
|
|
return mRenderModeObj->aa;
|
|
}
|
|
Pattern getSamplePattern() const {
|
|
return mRenderModeObj->sample_pattern;
|
|
}
|
|
u8* getVFilter() const {
|
|
return mRenderModeObj->vfilter;
|
|
}
|
|
OSMessageQueue* getMessageQueue() {
|
|
return &mMessageQueue;
|
|
};
|
|
static void drawDoneStart();
|
|
static void dummyNoDrawWait();
|
|
void setRenderMode(const GXRenderModeObj*);
|
|
void waitRetraceIfNeed(); // blr, global
|
|
VIRetraceCallback setPostRetraceCallback(VIRetraceCallback);
|
|
|
|
// Unused/inlined:
|
|
void getDrawWait();
|
|
VIRetraceCallback setPreRetraceCallback(VIRetraceCallback);
|
|
void getPixelAspect(const GXRenderModeObj*);
|
|
void getPixelAspect() const;
|
|
|
|
// Static inline gets
|
|
static JUTVideo* getManager() {
|
|
return sManager;
|
|
}
|
|
static OSTick getVideoInterval() {
|
|
return sVideoInterval;
|
|
}
|
|
static OSTick getVideoLastTick() {
|
|
return sVideoLastTick;
|
|
}
|
|
|
|
// _00 VTBL
|
|
GXRenderModeObj* mRenderModeObj; // _04
|
|
u32 _08; // _08
|
|
u32 mRetraceCount; // _0C
|
|
int _10; // _10
|
|
u8 _14[4]; // _14
|
|
u32 _18; // _18
|
|
VIRetraceCallback mPreviousPreRetraceCallback; // _1C
|
|
VIRetraceCallback mPreviousPostRetraceCallback; // _20
|
|
VIRetraceCallback mPreRetraceCallback; // _24
|
|
VIRetraceCallback mPostRetraceCallback; // _28
|
|
bool mIsSetBlack; // _2C
|
|
s32 mSetBlackFrameCount; // _30
|
|
OSMessage mMessage; // _34
|
|
OSMessageQueue mMessageQueue; // _38
|
|
|
|
static JUTVideo* sManager;
|
|
static OSTick sVideoLastTick;
|
|
static OSTick sVideoInterval;
|
|
};
|
|
|
|
inline JUTVideo* JUTGetVideoManager() {
|
|
return JUTVideo::getManager();
|
|
}
|
|
|
|
extern bool sDrawWaiting;
|
|
#endif
|
|
|
|
#endif
|