mirror of
https://github.com/izzy2lost/2ship2harkinian-Android.git
synced 2026-06-19 01:20:08 -07:00
Fix Framebuffer and ZBuffer things (#25)
* fix the framebuffers and zbuffers * set some extra save context on load
This commit is contained in:
@@ -109,6 +109,7 @@
|
||||
// #region 2S2H [Port]
|
||||
// Compute 0x0E segment value as compile time constant for 32bit and 64bit
|
||||
#define D_0E000000_TO_SEGMENTED(member) ((0x0E000000 + offsetof(GfxMasterList, member)) | 1)
|
||||
#define D_0F000000_TO_SEGMENTED (0x0F000000 | 1)
|
||||
// #endregion
|
||||
|
||||
#endif // MACROS_H
|
||||
|
||||
@@ -20,14 +20,14 @@ extern void* gWorkBuffer;
|
||||
extern u64* gGfxSPTaskOutputBufferPtr;
|
||||
extern void* gGfxSPTaskOutputBufferEnd;
|
||||
|
||||
extern u16 (*gZBufferLoRes)[SCREEN_WIDTH * SCREEN_HEIGHT];
|
||||
extern u16 (*gWorkBufferLoRes)[SCREEN_WIDTH * SCREEN_HEIGHT];
|
||||
extern u64 (*gGfxSPTaskOutputBufferLoRes)[0x3000];
|
||||
extern u16* gZBufferLoRes[SCREEN_WIDTH * SCREEN_HEIGHT];
|
||||
extern u16* gWorkBufferLoRes[SCREEN_WIDTH * SCREEN_HEIGHT];
|
||||
extern u64* gGfxSPTaskOutputBufferLoRes[0x3000];
|
||||
extern void* gGfxSPTaskOutputBufferEndLoRes;
|
||||
|
||||
extern u16 (*gZBufferHiRes)[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT];
|
||||
extern u16 (*gWorkBufferHiRes)[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT];
|
||||
extern u64 (*gGfxSPTaskOutputBufferHiRes)[0x3000];
|
||||
extern u16* gZBufferHiRes[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT];
|
||||
extern u16* gWorkBufferHiRes[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT];
|
||||
extern u64* gGfxSPTaskOutputBufferHiRes[0x3000];
|
||||
extern void* gGfxSPTaskOutputBufferEndHiRes;
|
||||
extern s16 gCfbWidth;
|
||||
extern s16 gCfbHeight;
|
||||
|
||||
+4
-1
@@ -357,6 +357,9 @@ void Graph_Update(GraphicsContext* gfxCtx, GameState* gameState) {
|
||||
CHECK_BTN_ALL(gameState->input[0].cur.button, BTN_L | BTN_R)) {
|
||||
STOP_GAMESTATE(gameState);
|
||||
gSaveContext.gameMode = GAMEMODE_NORMAL;
|
||||
gSaveContext.nextDayTime = NEXT_TIME_NONE;
|
||||
gSaveContext.nextTransitionType = TRANS_NEXT_TYPE_DEFAULT;
|
||||
gSaveContext.prevHudVisibility = HUD_VISIBILITY_ALL;
|
||||
SET_NEXT_GAMESTATE(gameState, MapSelect_Init, sizeof(MapSelectState));
|
||||
}
|
||||
}
|
||||
@@ -386,7 +389,7 @@ void RunFrame() {
|
||||
}
|
||||
|
||||
runFrameContext.nextOvl = &gGameStateOverlayTable[0];
|
||||
|
||||
SysCfb_Init();
|
||||
Graph_Init(&runFrameContext.gfxCtx);
|
||||
while (runFrameContext.nextOvl) {
|
||||
runFrameContext.ovl = runFrameContext.nextOvl;
|
||||
|
||||
+11
-11
@@ -14,16 +14,16 @@ void* gGfxSPTaskOutputBufferEnd;
|
||||
|
||||
void* sCfbLoRes1;
|
||||
void* sCfbLoRes0;
|
||||
u16 (*gZBufferLoRes)[SCREEN_WIDTH * SCREEN_HEIGHT];
|
||||
u16 (*gWorkBufferLoRes)[SCREEN_WIDTH * SCREEN_HEIGHT];
|
||||
u64 (*gGfxSPTaskOutputBufferLoRes)[0x3000];
|
||||
u16* gZBufferLoRes[SCREEN_WIDTH * SCREEN_HEIGHT];
|
||||
u16* gWorkBufferLoRes[SCREEN_WIDTH * SCREEN_HEIGHT];
|
||||
u64* gGfxSPTaskOutputBufferLoRes[0x3000];
|
||||
void* gGfxSPTaskOutputBufferEndLoRes;
|
||||
|
||||
void* sCfbHiRes1;
|
||||
void* sCfbHiRes0;
|
||||
u16 (*gZBufferHiRes)[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT];
|
||||
u16 (*gWorkBufferHiRes)[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT];
|
||||
u64 (*gGfxSPTaskOutputBufferHiRes)[0x3000];
|
||||
u16* gZBufferHiRes[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT];
|
||||
u16* gWorkBufferHiRes[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT];
|
||||
u64* gGfxSPTaskOutputBufferHiRes[0x3000];
|
||||
void* gGfxSPTaskOutputBufferEndHiRes;
|
||||
|
||||
s16 gCfbWidth;
|
||||
@@ -46,9 +46,9 @@ extern u16 gFramebufferHiRes1[HIRES_BUFFER_WIDTH][HIRES_BUFFER_HEIGHT];
|
||||
void SysCfb_SetLoResMode(void) {
|
||||
gFramebuffers[1] = sCfbLoRes1;
|
||||
gFramebuffers[0] = sCfbLoRes0;
|
||||
gZBufferPtr = *gZBufferLoRes;
|
||||
gZBufferPtr = gZBufferLoRes;
|
||||
gWorkBuffer = gWorkBufferLoRes;
|
||||
gGfxSPTaskOutputBufferPtr = *gGfxSPTaskOutputBufferLoRes;
|
||||
gGfxSPTaskOutputBufferPtr = gGfxSPTaskOutputBufferLoRes;
|
||||
gGfxSPTaskOutputBufferEnd = gGfxSPTaskOutputBufferEndLoRes;
|
||||
gCfbWidth = SCREEN_WIDTH;
|
||||
gCfbHeight = SCREEN_HEIGHT;
|
||||
@@ -63,9 +63,9 @@ void SysCfb_SetLoResMode(void) {
|
||||
void SysCfb_SetHiResMode(void) {
|
||||
gFramebuffers[1] = sCfbHiRes1;
|
||||
gFramebuffers[0] = sCfbHiRes0;
|
||||
gZBufferPtr = *gZBufferHiRes;
|
||||
gZBufferPtr = gZBufferHiRes;
|
||||
gWorkBuffer = gWorkBufferHiRes;
|
||||
gGfxSPTaskOutputBufferPtr = *gGfxSPTaskOutputBufferHiRes;
|
||||
gGfxSPTaskOutputBufferPtr = gGfxSPTaskOutputBufferHiRes;
|
||||
gGfxSPTaskOutputBufferEnd = gGfxSPTaskOutputBufferEndHiRes;
|
||||
if (1) {}
|
||||
gCfbWidth = HIRES_BUFFER_WIDTH;
|
||||
@@ -75,7 +75,7 @@ void SysCfb_SetHiResMode(void) {
|
||||
gScreenWidth = gCfbWidth;
|
||||
gScreenHeight = gCfbHeight;
|
||||
if ((gCfbWidth == SCREEN_WIDTH_HIRES) && (gCfbHeight == SCREEN_HEIGHT_HIRES)) {
|
||||
//gActiveViMode = &osViModeNtscHpf1;
|
||||
// gActiveViMode = &osViModeNtscHpf1;
|
||||
} else {
|
||||
s32 rightAdjust;
|
||||
s32 lowerAdjust;
|
||||
|
||||
@@ -1231,15 +1231,13 @@ void Play_DrawMain(PlayState* this) {
|
||||
SET_FULLSCREEN_VIEWPORT(&spA8);
|
||||
|
||||
View_ApplyTo(&spA8, &sp218);
|
||||
// BENTODO: incorrect render
|
||||
// this->transitionCtx.draw(&this->transitionCtx.instanceData, &sp218);
|
||||
this->transitionCtx.draw(&this->transitionCtx.instanceData, &sp218);
|
||||
}
|
||||
|
||||
TransitionFade_Draw(&this->unk_18E48, &sp218);
|
||||
// BENTODO: fill framebuffer?
|
||||
if (gVisMonoColor.a != 0) {
|
||||
sPlayVisMono.primColor.rgba = gVisMonoColor.rgba;
|
||||
// VisMono_Draw(&sPlayVisMono, &sp218);
|
||||
VisMono_Draw(&sPlayVisMono, &sp218);
|
||||
}
|
||||
|
||||
gSPEndDisplayList(sp218++);
|
||||
|
||||
+4
-4
@@ -1462,11 +1462,11 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g
|
||||
|
||||
gSPDisplayList(&masterGfx[1], sFillSetupDL);
|
||||
|
||||
gDPSetColorImage(&masterGfx[2], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000);
|
||||
gDPSetColorImage(&masterGfx[2], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000_TO_SEGMENTED);
|
||||
if (zbuffer != NULL) {
|
||||
gDPSetDepthImage(&masterGfx[3], zbuffer);
|
||||
} else {
|
||||
gDPSetDepthImage(&masterGfx[3], D_0F000000);
|
||||
gDPSetDepthImage(&masterGfx[3], D_0F000000_TO_SEGMENTED);
|
||||
}
|
||||
gSPEndDisplayList(&masterGfx[4]);
|
||||
|
||||
@@ -1492,7 +1492,7 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g
|
||||
|
||||
gSPDisplayList(&masterGfx[5], D_0E000000_TO_SEGMENTED(clearFillRect));
|
||||
|
||||
gDPSetColorImage(&masterGfx[6], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000);
|
||||
gDPSetColorImage(&masterGfx[6], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000_TO_SEGMENTED);
|
||||
gSPEndDisplayList(&masterGfx[7]);
|
||||
}
|
||||
|
||||
@@ -1500,7 +1500,7 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g
|
||||
|
||||
masterGfx = gGfxMasterDL->clearFrameBuffer;
|
||||
|
||||
gDPSetColorImage(&masterGfx[0], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000);
|
||||
gDPSetColorImage(&masterGfx[0], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000_TO_SEGMENTED);
|
||||
gDPSetCycleType(&masterGfx[1], G_CYC_FILL);
|
||||
gDPSetRenderMode(&masterGfx[2], G_RM_NOOP, G_RM_NOOP2);
|
||||
gDPSetFillColor(&masterGfx[3], (GPACK_RGBA5551(r, g, b, 1) << 16) | GPACK_RGBA5551(r, g, b, 1));
|
||||
|
||||
@@ -53,7 +53,7 @@ void VisFbuf_DrawBgToColorImage(Gfx** gfxP, uObjBg* bg, void* img, s32 width, s3
|
||||
|
||||
gDPPipeSync(gfx++);
|
||||
// Reset the color image and scissor to frame's defaults
|
||||
gDPSetColorImage(gfx++, G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000);
|
||||
gDPSetColorImage(gfx++, G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000_TO_SEGMENTED);
|
||||
gSPDisplayList(gfx++, D_0E000000_TO_SEGMENTED(setScissor));
|
||||
|
||||
*gfxP = gfx;
|
||||
@@ -312,11 +312,11 @@ void VisFbuf_Draw(VisFbuf* this, Gfx** gfxP, void* img) {
|
||||
|
||||
switch (this->mode) {
|
||||
case VIS_FBUF_MODE_GENERAL:
|
||||
VisFbuf_DrawGeneral(this, &gfx, D_0F000000, img, gScreenWidth, gScreenHeight);
|
||||
VisFbuf_DrawGeneral(this, &gfx, D_0F000000_TO_SEGMENTED, img, gScreenWidth, gScreenHeight);
|
||||
break;
|
||||
|
||||
case VIS_FBUF_MODE_INTERPOLATE:
|
||||
VisFbuf_DrawInterpolate(this, &gfx, D_0F000000, gScreenWidth, gScreenHeight);
|
||||
VisFbuf_DrawInterpolate(this, &gfx, D_0F000000_TO_SEGMENTED, gScreenWidth, gScreenHeight);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
@@ -68,7 +68,7 @@ void VisMono_DesaturateTLUT(u16* tlut) {
|
||||
Gfx* VisMono_DesaturateDList(Gfx* gfx) {
|
||||
s32 y;
|
||||
s32 height = VISMONO_CFBFRAG_HEIGHT;
|
||||
u16* cfbFrag = D_0F000000;
|
||||
u16* cfbFrag = D_0F000000_TO_SEGMENTED;
|
||||
|
||||
gDPPipeSync(gfx++);
|
||||
// `G_TT_IA16`: use color-indexed images, and IA16 palettes
|
||||
|
||||
@@ -94,7 +94,7 @@ void TransitionWipe5_Draw(void* thisx, Gfx** gfxP) {
|
||||
G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_CONV | G_TF_POINT | G_TT_NONE | G_TL_TILE |
|
||||
G_TD_CLAMP | G_TP_NONE | G_CYC_COPY | G_PM_NPRIMITIVE,
|
||||
G_AC_NONE | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2);
|
||||
VisFbuf_SetBgSimple(&gfx, D_0F000000, workBuffer, width, height, VIS_FBUF_BG_CYC_COPY);
|
||||
VisFbuf_SetBgSimple(&gfx, D_0F000000_TO_SEGMENTED, workBuffer, width, height, VIS_FBUF_BG_CYC_COPY);
|
||||
} else {
|
||||
if (alpha == 255) {
|
||||
gDPSetOtherMode(gfx++,
|
||||
@@ -110,7 +110,7 @@ void TransitionWipe5_Draw(void* thisx, Gfx** gfxP) {
|
||||
gDPSetEnvColor(gfx++, 255, 255, 255, alpha);
|
||||
gDPSetCombineLERP(gfx++, TEXEL0, 0, ENVIRONMENT, 0, 0, 0, 0, ENVIRONMENT, TEXEL0, 0, ENVIRONMENT, 0, 0, 0, 0,
|
||||
ENVIRONMENT);
|
||||
VisFbuf_SetBgSimple(&gfx, workBuffer, D_0F000000, width, height, VIS_FBUF_BG_CYC_1CYC);
|
||||
VisFbuf_SetBgSimple(&gfx, workBuffer, D_0F000000_TO_SEGMENTED, width, height, VIS_FBUF_BG_CYC_1CYC);
|
||||
}
|
||||
gDPPipeSync(gfx++);
|
||||
gSPLoadUcode(gfx++, SysUcode_GetUCode(), SysUcode_GetUCodeData());
|
||||
|
||||
@@ -145,6 +145,9 @@ void ConsoleLogo_Main(GameState* thisx) {
|
||||
// #region 2S2H [Debug] Eventually we'll get rid of this
|
||||
if (CVarGetInteger("gDebugEnabled", 0)) {
|
||||
gSaveContext.gameMode = GAMEMODE_NORMAL;
|
||||
gSaveContext.nextDayTime = NEXT_TIME_NONE;
|
||||
gSaveContext.nextTransitionType = TRANS_NEXT_TYPE_DEFAULT;
|
||||
gSaveContext.prevHudVisibility = HUD_VISIBILITY_ALL;
|
||||
SET_NEXT_GAMESTATE(&this->state, MapSelect_Init, sizeof(MapSelectState));
|
||||
// #endregion
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user