You've already forked Microtransactions64
mirror of
https://github.com/Print-and-Panic/Microtransactions64.git
synced 2026-01-21 10:17:19 -08:00
Cache master displaylist on "hot" code paths (#724)
* add displaylist macros * implement displaylist macro in memory.c * API update * implement displaylist macro on all 'hot' code paths * Remove the macro entirely * rename tmpDL * remove the other two macros * catch the last 2 missing statements --------- Co-authored-by: someone2639 <someone2639@gmail.com>
This commit is contained in:
@@ -94,11 +94,13 @@ void *virtual_to_segmented(u32 segment, const void *addr) {
|
||||
}
|
||||
|
||||
void move_segment_table_to_dmem(void) {
|
||||
s32 i;
|
||||
Gfx *tempGfxHead = gDisplayListHead;
|
||||
|
||||
for (i = 0; i < 16; i++) {
|
||||
gSPSegment(gDisplayListHead++, i, sSegmentTable[i]);
|
||||
for (s32 i = 0; i < 16; i++) {
|
||||
gSPSegment(tempGfxHead++, i, sSegmentTable[i]);
|
||||
}
|
||||
|
||||
gDisplayListHead = tempGfxHead;
|
||||
}
|
||||
#else
|
||||
void *segmented_to_virtual(const void *addr) {
|
||||
|
||||
@@ -271,6 +271,8 @@ void visual_surface_display(Gfx **gfx, Vtx *verts, s32 iteration) {
|
||||
s32 count = VERTCOUNT;
|
||||
s32 ntx = 0;
|
||||
|
||||
Gfx *tempGfxHead = gDisplayListHead;
|
||||
|
||||
while (vts > 0) {
|
||||
if (count == VERTCOUNT) {
|
||||
ntx = MIN(VERTCOUNT, vts);
|
||||
@@ -298,6 +300,8 @@ void visual_surface_display(Gfx **gfx, Vtx *verts, s32 iteration) {
|
||||
count += 3;
|
||||
}
|
||||
}
|
||||
|
||||
gDisplayListHead = tempGfxHead;
|
||||
}
|
||||
|
||||
s32 iterate_surface_count(s32 x, s32 z) {
|
||||
|
||||
@@ -156,32 +156,40 @@ void my_rsp_init(void) {
|
||||
* Initialize the z buffer for the current frame.
|
||||
*/
|
||||
void init_z_buffer(s32 resetZB) {
|
||||
gDPPipeSync(gDisplayListHead++);
|
||||
Gfx *tempGfxHead = gDisplayListHead;
|
||||
|
||||
gDPSetDepthSource(gDisplayListHead++, G_ZS_PIXEL);
|
||||
gDPSetDepthImage(gDisplayListHead++, gPhysicalZBuffer);
|
||||
gDPPipeSync(tempGfxHead++);
|
||||
|
||||
gDPSetColorImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, gPhysicalZBuffer);
|
||||
gDPSetDepthSource(tempGfxHead++, G_ZS_PIXEL);
|
||||
gDPSetDepthImage(tempGfxHead++, gPhysicalZBuffer);
|
||||
|
||||
gDPSetColorImage(tempGfxHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, gPhysicalZBuffer);
|
||||
if (!resetZB)
|
||||
return;
|
||||
gDPSetFillColor(gDisplayListHead++,
|
||||
gDPSetFillColor(tempGfxHead++,
|
||||
GPACK_ZDZ(G_MAXFBZ, 0) << 16 | GPACK_ZDZ(G_MAXFBZ, 0));
|
||||
|
||||
gDPFillRectangle(gDisplayListHead++, 0, gBorderHeight, SCREEN_WIDTH - 1,
|
||||
gDPFillRectangle(tempGfxHead++, 0, gBorderHeight, SCREEN_WIDTH - 1,
|
||||
SCREEN_HEIGHT - 1 - gBorderHeight);
|
||||
|
||||
gDisplayListHead = tempGfxHead;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tells the RDP which of the three framebuffers it shall draw to.
|
||||
*/
|
||||
void select_framebuffer(void) {
|
||||
gDPPipeSync(gDisplayListHead++);
|
||||
Gfx *tempGfxHead = gDisplayListHead;
|
||||
|
||||
gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE);
|
||||
gDPSetColorImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH,
|
||||
gDPPipeSync(tempGfxHead++);
|
||||
|
||||
gDPSetCycleType(tempGfxHead++, G_CYC_1CYCLE);
|
||||
gDPSetColorImage(tempGfxHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH,
|
||||
gPhysicalFramebuffers[sRenderingFramebuffer]);
|
||||
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, gBorderHeight, SCREEN_WIDTH,
|
||||
gDPSetScissor(tempGfxHead++, G_SC_NON_INTERLACE, 0, gBorderHeight, SCREEN_WIDTH,
|
||||
SCREEN_HEIGHT - gBorderHeight);
|
||||
|
||||
gDisplayListHead = tempGfxHead;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -189,19 +197,23 @@ void select_framebuffer(void) {
|
||||
* Information about the color argument: https://jrra.zone/n64/doc/n64man/gdp/gDPSetFillColor.htm
|
||||
*/
|
||||
void clear_framebuffer(s32 color) {
|
||||
gDPPipeSync(gDisplayListHead++);
|
||||
Gfx *tempGfxHead = gDisplayListHead;
|
||||
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_OPA_SURF, G_RM_OPA_SURF2);
|
||||
gDPSetCycleType(gDisplayListHead++, G_CYC_FILL);
|
||||
gDPPipeSync(tempGfxHead++);
|
||||
|
||||
gDPSetFillColor(gDisplayListHead++, color);
|
||||
gDPFillRectangle(gDisplayListHead++,
|
||||
gDPSetRenderMode(tempGfxHead++, G_RM_OPA_SURF, G_RM_OPA_SURF2);
|
||||
gDPSetCycleType(tempGfxHead++, G_CYC_FILL);
|
||||
|
||||
gDPSetFillColor(tempGfxHead++, color);
|
||||
gDPFillRectangle(tempGfxHead++,
|
||||
GFX_DIMENSIONS_RECT_FROM_LEFT_EDGE(0), gBorderHeight,
|
||||
GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(0) - 1, SCREEN_HEIGHT - gBorderHeight - 1);
|
||||
|
||||
gDPPipeSync(gDisplayListHead++);
|
||||
gDPPipeSync(tempGfxHead++);
|
||||
|
||||
gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE);
|
||||
gDPSetCycleType(tempGfxHead++, G_CYC_1CYCLE);
|
||||
|
||||
gDisplayListHead = tempGfxHead;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -218,38 +230,46 @@ void clear_viewport(Vp *viewport, s32 color) {
|
||||
vpLrx = GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(SCREEN_WIDTH - vpLrx);
|
||||
#endif
|
||||
|
||||
gDPPipeSync(gDisplayListHead++);
|
||||
Gfx *tempGfxHead = gDisplayListHead;
|
||||
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_OPA_SURF, G_RM_OPA_SURF2);
|
||||
gDPSetCycleType(gDisplayListHead++, G_CYC_FILL);
|
||||
gDPPipeSync(tempGfxHead++);
|
||||
|
||||
gDPSetFillColor(gDisplayListHead++, color);
|
||||
gDPFillRectangle(gDisplayListHead++, vpUlx, vpUly, vpLrx, vpLry);
|
||||
gDPSetRenderMode(tempGfxHead++, G_RM_OPA_SURF, G_RM_OPA_SURF2);
|
||||
gDPSetCycleType(tempGfxHead++, G_CYC_FILL);
|
||||
|
||||
gDPPipeSync(gDisplayListHead++);
|
||||
gDPSetFillColor(tempGfxHead++, color);
|
||||
gDPFillRectangle(tempGfxHead++, vpUlx, vpUly, vpLrx, vpLry);
|
||||
|
||||
gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE);
|
||||
gDPPipeSync(tempGfxHead++);
|
||||
|
||||
gDPSetCycleType(tempGfxHead++, G_CYC_1CYCLE);
|
||||
|
||||
gDisplayListHead = tempGfxHead;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw the horizontal screen borders.
|
||||
*/
|
||||
void draw_screen_borders(void) {
|
||||
gDPPipeSync(gDisplayListHead++);
|
||||
Gfx *tempGfxHead = gDisplayListHead;
|
||||
|
||||
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_OPA_SURF, G_RM_OPA_SURF2);
|
||||
gDPSetCycleType(gDisplayListHead++, G_CYC_FILL);
|
||||
gDPPipeSync(tempGfxHead++);
|
||||
|
||||
gDPSetFillColor(gDisplayListHead++, GPACK_RGBA5551(0, 0, 0, 0) << 16 | GPACK_RGBA5551(0, 0, 0, 0));
|
||||
gDPSetScissor(tempGfxHead++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
|
||||
gDPSetRenderMode(tempGfxHead++, G_RM_OPA_SURF, G_RM_OPA_SURF2);
|
||||
gDPSetCycleType(tempGfxHead++, G_CYC_FILL);
|
||||
|
||||
gDPSetFillColor(tempGfxHead++, GPACK_RGBA5551(0, 0, 0, 0) << 16 | GPACK_RGBA5551(0, 0, 0, 0));
|
||||
|
||||
if (gBorderHeight) {
|
||||
gDPFillRectangle(gDisplayListHead++, GFX_DIMENSIONS_RECT_FROM_LEFT_EDGE(0), 0,
|
||||
gDPFillRectangle(tempGfxHead++, GFX_DIMENSIONS_RECT_FROM_LEFT_EDGE(0), 0,
|
||||
GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(0) - 1, gBorderHeight - 1);
|
||||
gDPFillRectangle(gDisplayListHead++,
|
||||
gDPFillRectangle(tempGfxHead++,
|
||||
GFX_DIMENSIONS_RECT_FROM_LEFT_EDGE(0), SCREEN_HEIGHT - gBorderHeight,
|
||||
GFX_DIMENSIONS_RECT_FROM_RIGHT_EDGE(0) - 1, SCREEN_HEIGHT - 1);
|
||||
}
|
||||
|
||||
gDisplayListHead = tempGfxHead;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -117,29 +117,37 @@ static struct CameraHUD sCameraHUD = { CAM_STATUS_NONE };
|
||||
* Renders a rgba16 16x16 glyph texture from a table list.
|
||||
*/
|
||||
void render_hud_tex_lut(s32 x, s32 y, Texture *texture) {
|
||||
gDPPipeSync(gDisplayListHead++);
|
||||
gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, texture);
|
||||
gSPDisplayList(gDisplayListHead++, &dl_hud_img_load_tex_block);
|
||||
gSPTextureRectangle(gDisplayListHead++, x << 2, y << 2, (x + 15) << 2, (y + 15) << 2,
|
||||
Gfx *tempGfxHead = gDisplayListHead;
|
||||
|
||||
gDPPipeSync(tempGfxHead++);
|
||||
gDPSetTextureImage(tempGfxHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, texture);
|
||||
gSPDisplayList(tempGfxHead++, &dl_hud_img_load_tex_block);
|
||||
gSPTextureRectangle(tempGfxHead++, x << 2, y << 2, (x + 15) << 2, (y + 15) << 2,
|
||||
G_TX_RENDERTILE, 0, 0, 4 << 10, 1 << 10);
|
||||
|
||||
gDisplayListHead = tempGfxHead;
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders a rgba16 8x8 glyph texture from a table list.
|
||||
*/
|
||||
void render_hud_small_tex_lut(s32 x, s32 y, Texture *texture) {
|
||||
gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0,
|
||||
Gfx *tempGfxHead = gDisplayListHead;
|
||||
|
||||
gDPSetTile(tempGfxHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0,
|
||||
G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD);
|
||||
gDPTileSync(gDisplayListHead++);
|
||||
gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 2, 0, G_TX_RENDERTILE, 0,
|
||||
gDPTileSync(tempGfxHead++);
|
||||
gDPSetTile(tempGfxHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 2, 0, G_TX_RENDERTILE, 0,
|
||||
G_TX_CLAMP, 3, G_TX_NOLOD, G_TX_CLAMP, 3, G_TX_NOLOD);
|
||||
gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, (8 - 1) << G_TEXTURE_IMAGE_FRAC, (8 - 1) << G_TEXTURE_IMAGE_FRAC);
|
||||
gDPPipeSync(gDisplayListHead++);
|
||||
gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, texture);
|
||||
gDPLoadSync(gDisplayListHead++);
|
||||
gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 8 * 8 - 1, CALC_DXT(8, G_IM_SIZ_16b_BYTES));
|
||||
gSPTextureRectangle(gDisplayListHead++, x << 2, y << 2, (x + 7) << 2, (y + 7) << 2, G_TX_RENDERTILE,
|
||||
gDPSetTileSize(tempGfxHead++, G_TX_RENDERTILE, 0, 0, (8 - 1) << G_TEXTURE_IMAGE_FRAC, (8 - 1) << G_TEXTURE_IMAGE_FRAC);
|
||||
gDPPipeSync(tempGfxHead++);
|
||||
gDPSetTextureImage(tempGfxHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, texture);
|
||||
gDPLoadSync(tempGfxHead++);
|
||||
gDPLoadBlock(tempGfxHead++, G_TX_LOADTILE, 0, 0, 8 * 8 - 1, CALC_DXT(8, G_IM_SIZ_16b_BYTES));
|
||||
gSPTextureRectangle(tempGfxHead++, x << 2, y << 2, (x + 7) << 2, (y + 7) << 2, G_TX_RENDERTILE,
|
||||
0, 0, 4 << 10, 1 << 10);
|
||||
|
||||
gDisplayListHead = tempGfxHead;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -147,14 +155,17 @@ void render_hud_small_tex_lut(s32 x, s32 y, Texture *texture) {
|
||||
*/
|
||||
void render_power_meter_health_segment(s16 numHealthWedges) {
|
||||
Texture *(*healthLUT)[] = segmented_to_virtual(&power_meter_health_segments_lut);
|
||||
Gfx *tempGfxHead = gDisplayListHead;
|
||||
|
||||
gDPPipeSync(gDisplayListHead++);
|
||||
gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1,
|
||||
gDPPipeSync(tempGfxHead++);
|
||||
gDPSetTextureImage(tempGfxHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1,
|
||||
(*healthLUT)[numHealthWedges - 1]);
|
||||
gDPLoadSync(gDisplayListHead++);
|
||||
gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES));
|
||||
gSP1Triangle(gDisplayListHead++, 0, 1, 2, 0);
|
||||
gSP1Triangle(gDisplayListHead++, 0, 2, 3, 0);
|
||||
gDPLoadSync(tempGfxHead++);
|
||||
gDPLoadBlock(tempGfxHead++, G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES));
|
||||
gSP1Triangle(tempGfxHead++, 0, 1, 2, 0);
|
||||
gSP1Triangle(tempGfxHead++, 0, 2, 3, 0);
|
||||
|
||||
gDisplayListHead = tempGfxHead;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -293,12 +304,16 @@ void render_hud_power_meter(void) {
|
||||
void render_breath_meter_segment(s16 numBreathWedges) {
|
||||
Texture *(*breathLUT)[];
|
||||
breathLUT = segmented_to_virtual(&breath_meter_segments_lut);
|
||||
gDPPipeSync(gDisplayListHead++);
|
||||
gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, (*breathLUT)[numBreathWedges - 1]);
|
||||
gDPLoadSync(gDisplayListHead++);
|
||||
gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES));
|
||||
gSP1Triangle(gDisplayListHead++, 0, 1, 2, 0);
|
||||
gSP1Triangle(gDisplayListHead++, 0, 2, 3, 0);
|
||||
Gfx *tempGfxHead = gDisplayListHead;
|
||||
|
||||
gDPPipeSync(tempGfxHead++);
|
||||
gDPSetTextureImage(tempGfxHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, (*breathLUT)[numBreathWedges - 1]);
|
||||
gDPLoadSync(tempGfxHead++);
|
||||
gDPLoadBlock(tempGfxHead++, G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES));
|
||||
gSP1Triangle(tempGfxHead++, 0, 1, 2, 0);
|
||||
gSP1Triangle(tempGfxHead++, 0, 2, 3, 0);
|
||||
|
||||
gDisplayListHead = tempGfxHead;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -286,19 +286,23 @@ static void puppycam_process_cutscene(void) {
|
||||
#define BLANK 0, 0, 0, ENVIRONMENT, 0, 0, 0, ENVIRONMENT
|
||||
|
||||
static void puppycam_display_box(s32 x1, s32 y1, s32 x2, s32 y2, u8 r, u8 g, u8 b, u8 a) {
|
||||
gDPSetCombineMode(gDisplayListHead++, BLANK, BLANK);
|
||||
gDPSetCycleType( gDisplayListHead++, G_CYC_1CYCLE);
|
||||
Gfx *tempGfxHead = gDisplayListHead;
|
||||
|
||||
gDPSetCombineMode(tempGfxHead++, BLANK, BLANK);
|
||||
gDPSetCycleType( tempGfxHead++, G_CYC_1CYCLE);
|
||||
if (a !=255) {
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
|
||||
gDPSetRenderMode(tempGfxHead++, G_RM_XLU_SURF, G_RM_XLU_SURF2);
|
||||
} else {
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_OPA_SURF, G_RM_OPA_SURF);
|
||||
gDPSetRenderMode(tempGfxHead++, G_RM_OPA_SURF, G_RM_OPA_SURF);
|
||||
}
|
||||
gDPSetEnvColor( gDisplayListHead++, r, g, b, a);
|
||||
gDPFillRectangle( gDisplayListHead++, x1, y1, x2, y2);
|
||||
gDPPipeSync( gDisplayListHead++);
|
||||
gDPSetEnvColor( gDisplayListHead++, 255, 255, 255, 255);
|
||||
gDPSetCycleType( gDisplayListHead++, G_CYC_1CYCLE);
|
||||
gSPDisplayList( gDisplayListHead++,dl_hud_img_end);
|
||||
gDPSetEnvColor( tempGfxHead++, r, g, b, a);
|
||||
gDPFillRectangle( tempGfxHead++, x1, y1, x2, y2);
|
||||
gDPPipeSync( tempGfxHead++);
|
||||
gDPSetEnvColor( tempGfxHead++, 255, 255, 255, 255);
|
||||
gDPSetCycleType( tempGfxHead++, G_CYC_1CYCLE);
|
||||
gSPDisplayList( tempGfxHead++,dl_hud_img_end);
|
||||
|
||||
gDisplayListHead = tempGfxHead;
|
||||
}
|
||||
|
||||
//I actually took the time to redo this, properly. Lmao. Please don't bully me over this anymore :(
|
||||
|
||||
@@ -522,12 +522,16 @@ void puppyprint_render_minimal(void) {
|
||||
}
|
||||
|
||||
void render_coverage_map(void) {
|
||||
gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE);
|
||||
gDPSetBlendColor(gDisplayListHead++, 0xFF, 0xFF, 0xFF, 0xFF);
|
||||
gDPSetPrimDepth(gDisplayListHead++, 0xFFFF, 0xFFFF);
|
||||
gDPSetDepthSource(gDisplayListHead++, G_ZS_PRIM);
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_VISCVG, G_RM_VISCVG2);
|
||||
gDPFillRectangle(gDisplayListHead++, 0,0, SCREEN_WIDTH-1, SCREEN_HEIGHT-1);
|
||||
Gfx *tempGfxHead = gDisplayListHead;
|
||||
|
||||
gDPSetCycleType(tempGfxHead++, G_CYC_1CYCLE);
|
||||
gDPSetBlendColor(tempGfxHead++, 0xFF, 0xFF, 0xFF, 0xFF);
|
||||
gDPSetPrimDepth(tempGfxHead++, 0xFFFF, 0xFFFF);
|
||||
gDPSetDepthSource(tempGfxHead++, G_ZS_PRIM);
|
||||
gDPSetRenderMode(tempGfxHead++, G_RM_VISCVG, G_RM_VISCVG2);
|
||||
gDPFillRectangle(tempGfxHead++, 0,0, SCREEN_WIDTH-1, SCREEN_HEIGHT-1);
|
||||
|
||||
gDisplayListHead = tempGfxHead;
|
||||
}
|
||||
|
||||
void puppycamera_debug_view(void) {
|
||||
|
||||
@@ -140,43 +140,47 @@ s32 render_textured_transition(s8 transTime, struct WarpTransitionData *transDat
|
||||
|
||||
|
||||
if (verts != NULL) {
|
||||
Gfx *tempGfxHead = gDisplayListHead;
|
||||
|
||||
make_tex_transition_vertices(verts, centerTransX, centerTransY, texTransRadius, transTexType);
|
||||
gSPDisplayList(gDisplayListHead++, dl_proj_mtx_fullscreen);
|
||||
gSPDisplayList(tempGfxHead++, dl_proj_mtx_fullscreen);
|
||||
|
||||
u8 r = transData->red;
|
||||
u8 g = transData->green;
|
||||
u8 b = transData->blue;
|
||||
gDPSetPrimColor(gDisplayListHead++, 0, 0, r, g, b, 255);
|
||||
gDPSetPrimColor(tempGfxHead++, 0, 0, r, g, b, 255);
|
||||
|
||||
gDPSetCombineMode(gDisplayListHead++, G_CC_PRIMITIVE, G_CC_PRIMITIVE);
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_OPA_SURF, G_RM_AA_OPA_SURF2);
|
||||
gDPSetCombineMode(tempGfxHead++, G_CC_PRIMITIVE, G_CC_PRIMITIVE);
|
||||
gDPSetRenderMode(tempGfxHead++, G_RM_AA_OPA_SURF, G_RM_AA_OPA_SURF2);
|
||||
|
||||
gSPVertex(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(verts), 8, 0);
|
||||
gSPDisplayList(gDisplayListHead++, dl_transition_draw_filled_region);
|
||||
gDPPipeSync(gDisplayListHead++);
|
||||
gSPVertex(tempGfxHead++, VIRTUAL_TO_PHYSICAL(verts), 8, 0);
|
||||
gSPDisplayList(tempGfxHead++, dl_transition_draw_filled_region);
|
||||
gDPPipeSync(tempGfxHead++);
|
||||
|
||||
gDPSetCombineLERP(gDisplayListHead++, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0,
|
||||
gDPSetCombineLERP(tempGfxHead++, 0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0,
|
||||
0, 0, 0, PRIMITIVE, 0, 0, 0, TEXEL0);
|
||||
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_XLU_SURF, G_RM_AA_XLU_SURF2);
|
||||
gDPSetTextureFilter(gDisplayListHead++, G_TF_BILERP);
|
||||
gDPSetRenderMode(tempGfxHead++, G_RM_AA_XLU_SURF, G_RM_AA_XLU_SURF2);
|
||||
gDPSetTextureFilter(tempGfxHead++, G_TF_BILERP);
|
||||
|
||||
switch (transTexType) {
|
||||
case TRANS_TYPE_MIRROR:
|
||||
gDPLoadTextureBlock(gDisplayListHead++, sTextureTransitionID[texID], G_IM_FMT_IA, G_IM_SIZ_8b, 32, 64, 0,
|
||||
gDPLoadTextureBlock(tempGfxHead++, sTextureTransitionID[texID], G_IM_FMT_IA, G_IM_SIZ_8b, 32, 64, 0,
|
||||
G_TX_WRAP | G_TX_MIRROR, G_TX_WRAP | G_TX_MIRROR, 5, 6, G_TX_NOLOD, G_TX_NOLOD);
|
||||
break;
|
||||
case TRANS_TYPE_CLAMP:
|
||||
gDPLoadTextureBlock(gDisplayListHead++, sTextureTransitionID[texID], G_IM_FMT_IA, G_IM_SIZ_8b, 64, 64, 0,
|
||||
gDPLoadTextureBlock(tempGfxHead++, sTextureTransitionID[texID], G_IM_FMT_IA, G_IM_SIZ_8b, 64, 64, 0,
|
||||
G_TX_CLAMP, G_TX_CLAMP, 6, 6, G_TX_NOLOD, G_TX_NOLOD);
|
||||
break;
|
||||
}
|
||||
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
|
||||
gSPVertex(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(verts), 4, 0);
|
||||
gSPDisplayList(gDisplayListHead++, dl_draw_quad_verts_0123);
|
||||
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF);
|
||||
gSPDisplayList(gDisplayListHead++, dl_screen_transition_end);
|
||||
gSPTexture(tempGfxHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
|
||||
gSPVertex(tempGfxHead++, VIRTUAL_TO_PHYSICAL(verts), 4, 0);
|
||||
gSPDisplayList(tempGfxHead++, dl_draw_quad_verts_0123);
|
||||
gSPTexture(tempGfxHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF);
|
||||
gSPDisplayList(tempGfxHead++, dl_screen_transition_end);
|
||||
sTransitionTextureAngle += transData->angleSpeed;
|
||||
|
||||
gDisplayListHead = tempGfxHead;
|
||||
}
|
||||
return set_and_reset_transition_fade_timer(transTime);
|
||||
}
|
||||
@@ -197,17 +201,21 @@ s32 dl_transition_color(u8 transTime, struct WarpTransitionData *transData, u8 a
|
||||
Vtx *verts = vertex_transition_color();
|
||||
|
||||
if (verts != NULL) {
|
||||
Gfx *tempGfxHead = gDisplayListHead;
|
||||
|
||||
u8 r = transData->red;
|
||||
u8 g = transData->green;
|
||||
u8 b = transData->blue;
|
||||
gDPSetPrimColor(gDisplayListHead++, 0, 0, r, g, b, alpha);
|
||||
gDPSetPrimColor(tempGfxHead++, 0, 0, r, g, b, alpha);
|
||||
|
||||
gSPDisplayList(gDisplayListHead++, dl_proj_mtx_fullscreen);
|
||||
gDPSetCombineMode(gDisplayListHead++, G_CC_PRIMITIVE, G_CC_PRIMITIVE);
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_AA_XLU_SURF, G_RM_AA_XLU_SURF2);
|
||||
gSPVertex(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(verts), 4, 0);
|
||||
gSPDisplayList(gDisplayListHead++, dl_draw_quad_verts_0123);
|
||||
gSPDisplayList(gDisplayListHead++, dl_screen_transition_end);
|
||||
gSPDisplayList(tempGfxHead++, dl_proj_mtx_fullscreen);
|
||||
gDPSetCombineMode(tempGfxHead++, G_CC_PRIMITIVE, G_CC_PRIMITIVE);
|
||||
gDPSetRenderMode(tempGfxHead++, G_RM_AA_XLU_SURF, G_RM_AA_XLU_SURF2);
|
||||
gSPVertex(tempGfxHead++, VIRTUAL_TO_PHYSICAL(verts), 4, 0);
|
||||
gSPDisplayList(tempGfxHead++, dl_draw_quad_verts_0123);
|
||||
gSPDisplayList(tempGfxHead++, dl_screen_transition_end);
|
||||
|
||||
gDisplayListHead = tempGfxHead;
|
||||
}
|
||||
return set_and_reset_transition_fade_timer(transTime);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user