From 9fc928ed70303d101714ca76fa1dbf9888d6f86d Mon Sep 17 00:00:00 2001 From: arthurtilly <32559225+arthurtilly@users.noreply.github.com> Date: Sat, 16 Dec 2023 02:48:32 +1300 Subject: [PATCH] Remove OBJECTS_REJ and clean up core render func (By Fazana) (#735) * crowd pleaser * Fix debug boxes * fix comments * renamed temp graphics head to be consistent --------- Co-authored-by: Fazana <52551480+FazanaJ@users.noreply.github.com> --- include/config/config_safeguards.h | 20 --- include/object_constants.h | 2 - include/types.h | 3 - src/engine/behavior_script.c | 13 -- src/engine/graph_node.h | 13 +- src/game/debug_box.c | 53 +++----- src/game/debug_box.h | 12 +- src/game/game_init.c | 4 - src/game/rendering_graph_node.c | 198 +++++++---------------------- src/game/rendering_graph_node.h | 36 +----- src/game/spawn_object.c | 3 - 11 files changed, 75 insertions(+), 282 deletions(-) diff --git a/include/config/config_safeguards.h b/include/config/config_safeguards.h index 3a7b9659..27154445 100644 --- a/include/config/config_safeguards.h +++ b/include/config/config_safeguards.h @@ -49,26 +49,6 @@ #undef BETTER_REVERB #endif - -/***************** - * config_graphics.h - */ - -#ifndef F3DEX_GBI_2 - #undef OBJECTS_REJ // OBJECTS_REJ requires f3dex2. -#endif // !F3DEX_GBI_2 - -#ifndef F3DEX_GBI_SHARED - #undef OBJECTS_REJ // Non F3DEX-based ucodes do NOT support ucode switching. -#endif // !F3DEX_GBI_SHARED - -#ifdef OBJECTS_REJ - // Enable required ucodes. - #define F3DEX2_REJ_GBI - #define F3DLX2_REJ_GBI -#endif // OBJECTS_REJ - - /***************** * config_debug.h */ diff --git a/include/object_constants.h b/include/object_constants.h index 7ee6ad17..949dd8d6 100644 --- a/include/object_constants.h +++ b/include/object_constants.h @@ -49,8 +49,6 @@ enum ObjFlags { OBJ_FLAG_PERSISTENT_RESPAWN = (1 << 14), // 0x00004000 OBJ_FLAG_VELOCITY_PLATFORM = (1 << 15), // 0x00008000 OBJ_FLAG_DONT_CALC_COLL_DIST = (1 << 16), // 0x00010000 - OBJ_FLAG_UCODE_SMALL = (1 << 17), // 0x00020000 - OBJ_FLAG_UCODE_LARGE = (1 << 18), // 0x00040000 OBJ_FLAG_SILHOUETTE = (1 << 19), // 0x00080000 OBJ_FLAG_OCCLUDE_SILHOUETTE = (1 << 20), // 0x00100000 OBJ_FLAG_OPACITY_FROM_CAMERA_DIST = (1 << 21), // 0x00200000 diff --git a/include/types.h b/include/types.h index 81b4813f..eeeeac15 100644 --- a/include/types.h +++ b/include/types.h @@ -248,9 +248,6 @@ struct GraphNodeObject { /*0x4C*/ struct SpawnInfo *spawnInfo; /*0x50*/ Mat4 *throwMatrix; // matrix ptr /*0x54*/ Vec3f cameraToObject; -#ifdef OBJECTS_REJ - u16 ucode; -#endif }; struct ObjectNode { diff --git a/src/engine/behavior_script.c b/src/engine/behavior_script.c index 9ae8b900..8c918392 100644 --- a/src/engine/behavior_script.c +++ b/src/engine/behavior_script.c @@ -50,11 +50,6 @@ void obj_update_gfx_pos_and_angle(struct Object *obj) { #define OBJ_OPACITY_LENGTH 512.0f void obj_set_opacity_from_cam_dist(struct Object *obj) { s32 opacityDist = ((-obj->header.gfx.cameraToObject[2] - OBJ_OPACITY_NEAR) * (256.0f / OBJ_OPACITY_LENGTH)); -#ifdef OBJECTS_REJ - if (opacityDist > 0) { - obj->header.gfx.ucode = GRAPH_NODE_UCODE_REJ; - } -#endif obj->oOpacity = CLAMP(opacityDist, 0x00, 0xFF); } #undef OBJ_OPACITY_NEAR @@ -910,14 +905,6 @@ void cur_obj_update(void) { COND_BIT((objFlags & OBJ_FLAG_OCCLUDE_SILHOUETTE), o->header.gfx.node.flags, GRAPH_RENDER_OCCLUDE_SILHOUETTE); #endif -#ifdef OBJECTS_REJ - if ((objFlags & OBJ_FLAG_SILHOUETTE) || (objFlags & OBJ_FLAG_UCODE_SMALL)) { - o->header.gfx.ucode = GRAPH_NODE_UCODE_REJ; - } else { - o->header.gfx.ucode = GRAPH_NODE_UCODE_DEFAULT; - } -#endif - #ifdef OBJ_OPACITY_BY_CAM_DIST if (objFlags & OBJ_FLAG_OPACITY_FROM_CAMERA_DIST) { obj_set_opacity_from_cam_dist(o); diff --git a/src/engine/graph_node.h b/src/engine/graph_node.h index 4d0d4d2a..bccb8f2b 100644 --- a/src/engine/graph_node.h +++ b/src/engine/graph_node.h @@ -9,15 +9,6 @@ #include "geo_commands.h" #include "game/memory.h" -// UCode indices for listHeads & listTails -enum GraphNodeUCodes { - GRAPH_NODE_UCODE_DEFAULT, -#ifdef OBJECTS_REJ - GRAPH_NODE_UCODE_REJ, -#endif - GRAPH_NODE_NUM_UCODES, -}; - enum GraphRenderFlags { GRAPH_RENDER_ACTIVE = (1 << 0), // 0x0001 GRAPH_RENDER_CHILDREN_FIRST = (1 << 1), // 0x0002 @@ -156,8 +147,8 @@ struct DisplayListNode { */ struct GraphNodeMasterList { /*0x00*/ struct GraphNode node; - /*0x14*/ struct DisplayListNode *listHeads[GRAPH_NODE_NUM_UCODES][LAYER_COUNT]; - /*0x34*/ struct DisplayListNode *listTails[GRAPH_NODE_NUM_UCODES][LAYER_COUNT]; + /*0x14*/ struct DisplayListNode *listHeads[LAYER_COUNT]; + /*0x34*/ struct DisplayListNode *listTails[LAYER_COUNT]; }; /** Simply used as a parent to group multiple children. diff --git a/src/game/debug_box.c b/src/game/debug_box.c index cd7a9e73..f186c8e9 100644 --- a/src/game/debug_box.c +++ b/src/game/debug_box.c @@ -263,15 +263,9 @@ void iterate_surfaces_envbox(Vtx *verts) { } // VERTCOUNT = The highest number divisible by 6, which is less than the maximum vertex buffer divided by 2. -// The vertex buffer is 64 if OBJECTS_REJ is enabled, 32 otherwise. -//! TODO: Why can this only use half of the vertex buffer? -#ifdef OBJECTS_REJ #define VERTCOUNT 30 -#else -#define VERTCOUNT 12 -#endif // OBJECTS_REJ -void visual_surface_display(Vtx *verts, s32 iteration) { +void visual_surface_display(Gfx **gfx, Vtx *verts, s32 iteration) { s32 vts = (iteration ? gVisualOffset : gVisualSurfaceCount); s32 vtl = 0; s32 count = VERTCOUNT; @@ -280,13 +274,13 @@ void visual_surface_display(Vtx *verts, s32 iteration) { while (vts > 0) { if (count == VERTCOUNT) { ntx = MIN(VERTCOUNT, vts); - gSPVertex(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(verts + (gVisualSurfaceCount - vts)), ntx, 0); + gSPVertex((*gfx)++, VIRTUAL_TO_PHYSICAL(verts + (gVisualSurfaceCount - vts)), ntx, 0); count = 0; vtl = VERTCOUNT; } if (vtl >= 6) { - gSP2Triangles(gDisplayListHead++, (count + 0), + gSP2Triangles((*gfx)++, (count + 0), (count + 1), (count + 2), 0x0, (count + 3), @@ -296,7 +290,7 @@ void visual_surface_display(Vtx *verts, s32 iteration) { vtl -= 6; count += 6; } else if (vtl >= 3) { - gSP1Triangle(gDisplayListHead++, (count + 0), + gSP1Triangle((*gfx)++, (count + 0), (count + 1), (count + 2), 0x0); vts -= 3; @@ -343,7 +337,7 @@ s32 iterate_surface_count(s32 x, s32 z) { return j; } -void visual_surface_loop(void) { +void visual_surface_loop(Gfx **gfx) { if (!gSurfaceNodesAllocated || !gSurfacesAllocated || !gMarioState->marioObj) { @@ -358,19 +352,20 @@ void visual_surface_loop(void) { return; } - gSPDisplayList(gDisplayListHead++, dl_visual_surface); + gSPDisplayList((*gfx)++, dl_visual_surface); iterate_surfaces_visual(gMarioState->pos[0], gMarioState->pos[2], verts); - visual_surface_display(verts, 0); + visual_surface_display(gfx, verts, 0); + gDPPipeSync((*gfx)++); iterate_surfaces_envbox(verts); - gDPSetRenderMode(gDisplayListHead++, G_RM_ZB_XLU_SURF, G_RM_NOOP2); + gDPSetRenderMode((*gfx)++, G_RM_ZB_XLU_SURF, G_RM_NOOP2); - visual_surface_display(verts, 1); + visual_surface_display(gfx, verts, 1); - gSPDisplayList(gDisplayListHead++, dl_debug_box_end); + gSPDisplayList((*gfx)++, dl_debug_box_end); } /** @@ -388,9 +383,6 @@ static void append_debug_box(Vec3f center, Vec3f bounds, s16 yaw, s32 type) { sBoxes[sNumBoxes].yaw = yaw; sBoxes[sNumBoxes].color = sCurBoxColor; sBoxes[sNumBoxes].type = type; - if (!(sBoxes[sNumBoxes].type & (DEBUG_UCODE_REJ | DEBUG_UCODE_DEFAULT))) { - sBoxes[sNumBoxes].type |= DEBUG_UCODE_DEFAULT; - } ++sNumBoxes; } } @@ -448,7 +440,7 @@ void debug_box_pos_rot(Vec3f pMin, Vec3f pMax, s16 yaw, s32 type) { append_debug_box(center, bounds, yaw, type); } -static void render_box(int index) { +static void render_box(Gfx **gfx, int index) { struct DebugBox *box = &sBoxes[index]; s32 color = box->color; Mat4 mtxFloat; @@ -477,20 +469,20 @@ static void render_box(int index) { mtxf_to_mtx(mtx, mtxFloat); // Load the calculated matrix - gSPMatrix(gDisplayListHead++, mtx, G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_NOPUSH); + gSPMatrix((*gfx)++, mtx, G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_NOPUSH); // Set env color to the color of this box - gDPSetColor(gDisplayListHead++, G_SETENVCOLOR, color); + gDPSetColor((*gfx)++, G_SETENVCOLOR, color); if (box->type & DEBUG_SHAPE_BOX) { - gSPDisplayList(gDisplayListHead++, dl_debug_box_verts); + gSPDisplayList((*gfx)++, dl_debug_box_verts); } if (box->type & DEBUG_SHAPE_CYLINDER) { - gSPDisplayList(gDisplayListHead++, dl_debug_cylinder_verts); + gSPDisplayList((*gfx)++, dl_debug_cylinder_verts); } } -void render_debug_boxes(s32 type) { +void render_debug_boxes(Gfx **gfx) { s32 i; debug_box_color(DBG_BOX_DEF_COLOR); @@ -498,17 +490,14 @@ void render_debug_boxes(s32 type) { if (sNumBoxes == 0) return; if (gAreaUpdateCounter < 3) return; - gSPDisplayList(gDisplayListHead++, dl_debug_box_begin); + gSPDisplayList((*gfx)++, dl_debug_box_begin); for (i = 0; i < sNumBoxes; ++i) { - if ((type & DEBUG_UCODE_DEFAULT) && (sBoxes[i].type & DEBUG_UCODE_DEFAULT)) render_box(i); - if ((type & DEBUG_UCODE_REJ ) && (sBoxes[i].type & DEBUG_UCODE_REJ )) render_box(i); + render_box(gfx, i); } - if (type & DEBUG_BOX_CLEAR) { - sNumBoxes = 0; - } - gSPDisplayList(gDisplayListHead++, dl_debug_box_end); + sNumBoxes = 0; + gSPDisplayList((*gfx)++, dl_debug_box_end); } #endif diff --git a/src/game/debug_box.h b/src/game/debug_box.h index 1041c51c..0786d77b 100644 --- a/src/game/debug_box.h +++ b/src/game/debug_box.h @@ -19,13 +19,7 @@ enum DebugBoxFlags { DEBUG_SHAPE_BOX = (1 << 0), // 0x01 DEBUG_SHAPE_CYLINDER = (1 << 1), // 0x02 - DEBUG_UCODE_DEFAULT = (1 << 2), // 0x04 -#ifdef OBJECTS_REJ - DEBUG_UCODE_REJ = (1 << 3), // 0x08 -#else - DEBUG_UCODE_REJ = DEBUG_UCODE_DEFAULT, -#endif - DEBUG_BOX_CLEAR = (1 << 4), // 0x10 + DEBUG_BOX_CLEAR = (1 << 2), // 0x04 }; extern u8 hitboxView; @@ -39,8 +33,8 @@ void debug_box_rot(Vec3f center, Vec3f bounds, s16 yaw, s32 type); void debug_box_pos(Vec3f pMin, Vec3f pMax, s32 type); void debug_box_pos_rot(Vec3f pMin, Vec3f pMax, s16 yaw, s32 type); -void render_debug_boxes(s32 type); -extern void visual_surface_loop(void); +void render_debug_boxes(Gfx **gfx); +extern void visual_surface_loop(Gfx **gfx); #endif diff --git a/src/game/game_init.c b/src/game/game_init.c index 4d92e9aa..4b415138 100644 --- a/src/game/game_init.c +++ b/src/game/game_init.c @@ -277,11 +277,7 @@ void create_gfx_task_structure(void) { gGfxSPTask->task.t.type = M_GFXTASK; gGfxSPTask->task.t.ucode_boot = rspbootTextStart; gGfxSPTask->task.t.ucode_boot_size = ((u8 *) rspbootTextEnd - (u8 *) rspbootTextStart); -#if defined(F3DEX_GBI_SHARED) && defined(OBJECTS_REJ) gGfxSPTask->task.t.flags = (OS_TASK_LOADABLE | OS_TASK_DP_WAIT); -#else - gGfxSPTask->task.t.flags = 0x0; -#endif #ifdef L3DEX2_ALONE gGfxSPTask->task.t.ucode = gspL3DEX2_fifoTextStart; gGfxSPTask->task.t.ucode_data = gspL3DEX2_fifoDataStart; diff --git a/src/game/rendering_graph_node.c b/src/game/rendering_graph_node.c index 4fc8c7e5..9e33e9ad 100644 --- a/src/game/rendering_graph_node.c +++ b/src/game/rendering_graph_node.c @@ -195,76 +195,10 @@ static const Gfx dl_silhouette_end[] = { struct RenderPhase { u8 startLayer; u8 endLayer; -#ifdef OBJECTS_REJ - u8 ucode; -#endif }; static struct RenderPhase sRenderPhases[] = { -#ifdef OBJECTS_REJ - #if SILHOUETTE - // Silhouette, .rej - [RENDER_PHASE_ZEX_BEFORE_SILHOUETTE] = { - .startLayer = LAYER_FIRST, - .endLayer = LAYER_LAST_BEFORE_SILHOUETTE, - .ucode = GRAPH_NODE_UCODE_DEFAULT - }, - [RENDER_PHASE_REJ_ZB] = { - .startLayer = LAYER_ZB_FIRST, - .endLayer = LAYER_LAST_BEFORE_SILHOUETTE, - .ucode = GRAPH_NODE_UCODE_REJ - }, - [RENDER_PHASE_REJ_SILHOUETTE] = { - .startLayer = LAYER_SILHOUETTE_FIRST, - .endLayer = LAYER_SILHOUETTE_LAST, - .ucode = GRAPH_NODE_UCODE_REJ - }, - [RENDER_PHASE_REJ_NON_SILHOUETTE] = { - .startLayer = LAYER_SILHOUETTE_FIRST, - .endLayer = LAYER_SILHOUETTE_LAST, - .ucode = GRAPH_NODE_UCODE_REJ - }, - [RENDER_PHASE_REJ_OCCLUDE_SILHOUETTE] = { - .startLayer = LAYER_OCCLUDE_SILHOUETTE_FIRST, - .endLayer = LAYER_OCCLUDE_SILHOUETTE_LAST, - .ucode = GRAPH_NODE_UCODE_REJ - }, - [RENDER_PHASE_ZEX_AFTER_SILHOUETTE] = { - .startLayer = LAYER_OCCLUDE_SILHOUETTE_FIRST, - .endLayer = LAYER_LAST, - .ucode = GRAPH_NODE_UCODE_DEFAULT - }, - [RENDER_PHASE_REJ_NON_ZB] = { - .startLayer = LAYER_NON_ZB_FIRST, - .endLayer = LAYER_LAST, - .ucode = GRAPH_NODE_UCODE_REJ - }, - #else - // No silhouette, .rej - [RENDER_PHASE_ZEX_BG] = { - .startLayer = LAYER_FIRST, - .endLayer = LAYER_FIRST, - .ucode = GRAPH_NODE_UCODE_DEFAULT - }, - [RENDER_PHASE_REJ_ZB] = { - .startLayer = LAYER_ZB_FIRST, - .endLayer = LAYER_ZB_LAST, - .ucode = GRAPH_NODE_UCODE_REJ - }, - [RENDER_PHASE_ZEX_ALL] = { - .startLayer = LAYER_ZB_FIRST, - .endLayer = LAYER_LAST, - .ucode = GRAPH_NODE_UCODE_DEFAULT - }, - [RENDER_PHASE_REJ_NON_ZB] = { - .startLayer = LAYER_NON_ZB_FIRST, - .endLayer = LAYER_LAST, - .ucode = GRAPH_NODE_UCODE_REJ - }, - #endif -#else - #if SILHOUETTE - // Silhouette, no .rej +#if SILHOUETTE [RENDER_PHASE_ZEX_BEFORE_SILHOUETTE] = { .startLayer = LAYER_FIRST, .endLayer = LAYER_LAST_BEFORE_SILHOUETTE, @@ -289,46 +223,16 @@ static struct RenderPhase sRenderPhases[] = { .startLayer = LAYER_OCCLUDE_SILHOUETTE_FIRST, .endLayer = LAYER_LAST, }, - - #else - // No silhouette, no .rej +#else [RENDER_PHASE_ZEX_ALL] = { .startLayer = LAYER_FIRST, .endLayer = LAYER_LAST, }, - - #endif #endif }; extern const Gfx init_rsp[]; -#ifdef OBJECTS_REJ -void switch_ucode(s32 ucode) { - // Set the ucode and RCP settings - switch (ucode) { - default: // GRAPH_NODE_UCODE_DEFAULT - case GRAPH_NODE_UCODE_DEFAULT: - gSPLoadUcodeL(gDisplayListHead++, gspF3DZEX2_NoN_PosLight_fifo); // F3DZEX2_PosLight - // Reload the necessary RSP settings - gSPDisplayList(gDisplayListHead++, init_rsp); - break; - case GRAPH_NODE_UCODE_REJ: - // Use .rej Microcode, skip sub-pixel processing on console - if (gEmulator & EMU_CONSOLE) { - gSPLoadUcodeL(gDisplayListHead++, gspF3DLX2_Rej_fifo); // F3DLX2_Rej - } else { - gSPLoadUcodeL(gDisplayListHead++, gspF3DEX2_Rej_fifo); // F3DEX2_Rej - } - // Reload the necessary RSP settings - gSPDisplayList(gDisplayListHead++, init_rsp); - // Set the clip ratio (see init_rsp) - gSPClipRatio(gDisplayListHead++, FRUSTRATIO_2); - break; - } -} -#endif - #define UPPER_FIXED(x) ((int)((unsigned int)((x) * 0x10000) >> 16)) #define LOWER_FIXED(x) ((int)((unsigned int)((x) * 0x10000) & 0xFFFF)) @@ -357,67 +261,65 @@ void geo_process_master_list_sub(struct GraphNodeMasterList *node) { s32 currLayer = LAYER_FIRST; s32 startLayer = LAYER_FIRST; s32 endLayer = LAYER_LAST; - s32 ucode = GRAPH_NODE_UCODE_DEFAULT; s32 phaseIndex = RENDER_PHASE_FIRST; s32 enableZBuffer = (node->node.flags & GRAPH_RENDER_Z_BUFFER) != 0; + s32 finalPhase = enableZBuffer ? RENDER_PHASE_END : 1; struct RenderModeContainer *mode1List = &renderModeTable_1Cycle[enableZBuffer]; struct RenderModeContainer *mode2List = &renderModeTable_2Cycle[enableZBuffer]; + Gfx *tempGfxHead = gDisplayListHead; // Loop through the render phases - for (phaseIndex = RENDER_PHASE_FIRST; phaseIndex < RENDER_PHASE_END; phaseIndex++) { - // Get the render phase information. - renderPhase = &sRenderPhases[phaseIndex]; - startLayer = renderPhase->startLayer; - endLayer = renderPhase->endLayer; -#ifdef OBJECTS_REJ - ucode = renderPhase->ucode; - // Set the ucode for the current render phase - switch_ucode(ucode); - gSPLookAt(gDisplayListHead++, gCurLookAt); -#endif + for (phaseIndex = RENDER_PHASE_FIRST; phaseIndex < finalPhase; phaseIndex++) { if (enableZBuffer) { + // Get the render phase information. + renderPhase = &sRenderPhases[phaseIndex]; + startLayer = renderPhase->startLayer; + endLayer = renderPhase->endLayer; // Enable z buffer. - gDPPipeSync(gDisplayListHead++); - gSPSetGeometryMode(gDisplayListHead++, G_ZBUFFER); + gDPPipeSync(tempGfxHead++); + gSPSetGeometryMode(tempGfxHead++, G_ZBUFFER); + } else { + startLayer = LAYER_FORCE; + endLayer = LAYER_TRANSPARENT; } // Iterate through the layers on the current render phase. for (currLayer = startLayer; currLayer <= endLayer; currLayer++) { // Set 'currList' to the first DisplayListNode on the current layer. - currList = node->listHeads[ucode][currLayer]; + currList = node->listHeads[currLayer]; #if defined(DISABLE_AA) || !SILHOUETTE // Set the render mode for the current layer. - gDPSetRenderMode(gDisplayListHead++, mode1List->modes[currLayer], + gDPSetRenderMode(tempGfxHead++, mode1List->modes[currLayer], mode2List->modes[currLayer]); #else if (phaseIndex == RENDER_PHASE_NON_SILHOUETTE) { // To properly cover the silhouette, disable AA. // The silhouette model does not have AA due to the hack used to prevent triangle overlap. - gDPSetRenderMode(gDisplayListHead++, (mode1List->modes[currLayer] & ~IM_RD), + gDPSetRenderMode(tempGfxHead++, (mode1List->modes[currLayer] & ~IM_RD), (mode2List->modes[currLayer] & ~IM_RD)); } else { // Set the render mode for the current dl. - gDPSetRenderMode(gDisplayListHead++, mode1List->modes[currLayer], + gDPSetRenderMode(tempGfxHead++, mode1List->modes[currLayer], mode2List->modes[currLayer]); } #endif // Iterate through all the displaylists on the current layer. while (currList != NULL) { // Add the display list's transformation to the master list. - gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(currList->transform), + gSPMatrix(tempGfxHead++, VIRTUAL_TO_PHYSICAL(currList->transform), (G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_NOPUSH)); #if SILHOUETTE if (phaseIndex == RENDER_PHASE_SILHOUETTE) { // Add the current display list to the master list, with silhouette F3D. - gSPDisplayList(gDisplayListHead++, dl_silhouette_begin); - gSPDisplayList(gDisplayListHead++, currList->displayList); - gSPDisplayList(gDisplayListHead++, dl_silhouette_end); + gSPDisplayList(tempGfxHead++, dl_silhouette_begin); + gSPDisplayList(tempGfxHead++, currList->displayList); + gSPDisplayList(tempGfxHead++, dl_silhouette_end); } else { // Add the current display list to the master list. - gSPDisplayList(gDisplayListHead++, currList->displayList); + gSPDisplayList(tempGfxHead++, currList->displayList); } #else // Add the current display list to the master list. - gSPDisplayList(gDisplayListHead++, currList->displayList); + gSPDisplayList(tempGfxHead++, currList->displayList); #endif // Move to the next DisplayListNode. currList = currList->next; @@ -427,21 +329,17 @@ void geo_process_master_list_sub(struct GraphNodeMasterList *node) { if (enableZBuffer) { // Disable z buffer. - gDPPipeSync(gDisplayListHead++); - gSPClearGeometryMode(gDisplayListHead++, G_ZBUFFER); - } -#ifdef OBJECTS_REJ - #if defined(F3DEX_GBI_2) && defined(VISUAL_DEBUG) - if (hitboxView) render_debug_boxes(DEBUG_UCODE_REJ); - #endif - switch_ucode(GRAPH_NODE_UCODE_DEFAULT); -#endif + gDPPipeSync(tempGfxHead++); + gSPClearGeometryMode(tempGfxHead++, G_ZBUFFER); #ifdef VISUAL_DEBUG - if ( hitboxView) render_debug_boxes(DEBUG_UCODE_DEFAULT | DEBUG_BOX_CLEAR); - // Load the world scale identity matrix - gSPMatrix(gDisplayListHead++, &identityMatrixWorldScale, G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_NOPUSH); - if (surfaceView) visual_surface_loop(); + // Load the world scale identity matrix + gSPMatrix(tempGfxHead++, &identityMatrixWorldScale, G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_NOPUSH); + if (surfaceView) visual_surface_loop(&tempGfxHead); + render_debug_boxes(&tempGfxHead); #endif + } + + gDisplayListHead = tempGfxHead; } /** @@ -450,16 +348,11 @@ void geo_process_master_list_sub(struct GraphNodeMasterList *node) { * render modes of layers. */ void geo_append_display_list(void *displayList, s32 layer) { - s32 ucode = GRAPH_NODE_UCODE_DEFAULT; #ifdef F3DEX_GBI_2 gSPLookAt(gDisplayListHead++, gCurLookAt); #endif -#if defined(OBJECTS_REJ) || SILHOUETTE +#if SILHOUETTE if (gCurGraphNodeObject != NULL) { - #ifdef OBJECTS_REJ - ucode = gCurGraphNodeObject->ucode; - #endif - #if SILHOUETTE if (gCurGraphNodeObject->node.flags & GRAPH_RENDER_SILHOUETTE) { switch (layer) { case LAYER_OPAQUE: layer = LAYER_SILHOUETTE_OPAQUE; break; @@ -472,7 +365,6 @@ void geo_append_display_list(void *displayList, s32 layer) { case LAYER_ALPHA: layer = LAYER_OCCLUDE_SILHOUETTE_ALPHA; break; } } - #endif // SILHOUETTE } #endif // F3DEX_GBI_2 || SILHOUETTE if (gCurGraphNodeMasterList != NULL) { @@ -482,12 +374,12 @@ void geo_append_display_list(void *displayList, s32 layer) { listNode->transform = gMatStackFixed[gMatStackIndex]; listNode->displayList = displayList; listNode->next = NULL; - if (gCurGraphNodeMasterList->listHeads[ucode][layer] == NULL) { - gCurGraphNodeMasterList->listHeads[ucode][layer] = listNode; + if (gCurGraphNodeMasterList->listHeads[layer] == NULL) { + gCurGraphNodeMasterList->listHeads[layer] = listNode; } else { - gCurGraphNodeMasterList->listTails[ucode][layer]->next = listNode; + gCurGraphNodeMasterList->listTails[layer]->next = listNode; } - gCurGraphNodeMasterList->listTails[ucode][layer] = listNode; + gCurGraphNodeMasterList->listTails[layer] = listNode; } } @@ -512,14 +404,12 @@ static void append_dl_and_return(struct GraphNodeDisplayList *node) { * Process the master list node. */ void geo_process_master_list(struct GraphNodeMasterList *node) { - s32 ucode, layer; + s32 layer; if (gCurGraphNodeMasterList == NULL && node->node.children != NULL) { gCurGraphNodeMasterList = node; - for (ucode = 0; ucode < GRAPH_NODE_NUM_UCODES; ucode++) { - for (layer = LAYER_FIRST; layer < LAYER_COUNT; layer++) { - node->listHeads[ucode][layer] = NULL; - } + for (layer = LAYER_FIRST; layer < LAYER_COUNT; layer++) { + node->listHeads[layer] = NULL; } geo_process_node_and_siblings(node->node.children); geo_process_master_list_sub(gCurGraphNodeMasterList); @@ -1128,16 +1018,16 @@ void visualise_object_hitbox(struct Object *node) { debug_box_color(COLOR_RGBA32_DEBUG_HITBOX); } - debug_box(bnds1, bnds2, (DEBUG_SHAPE_CYLINDER | DEBUG_UCODE_REJ)); + debug_box(bnds1, bnds2, (DEBUG_SHAPE_CYLINDER)); vec3f_set(bnds1, node->oPosX, (node->oPosY - node->hitboxDownOffset), node->oPosZ); vec3f_set(bnds2, node->hurtboxRadius, node->hurtboxHeight, node->hurtboxRadius); debug_box_color(COLOR_RGBA32_DEBUG_HURTBOX); - debug_box(bnds1, bnds2, (DEBUG_SHAPE_CYLINDER | DEBUG_UCODE_REJ)); + debug_box(bnds1, bnds2, (DEBUG_SHAPE_CYLINDER)); } else { vec3f_set(bnds1, node->oPosX, (node->oPosY - 15), node->oPosZ); vec3f_set(bnds2, 30, 30, 30); debug_box_color(COLOR_RGBA32_DEBUG_POSITION); - debug_box(bnds1, bnds2, (DEBUG_SHAPE_BOX | DEBUG_UCODE_REJ)); + debug_box(bnds1, bnds2, (DEBUG_SHAPE_BOX)); } } #endif diff --git a/src/game/rendering_graph_node.h b/src/game/rendering_graph_node.h index f681163a..ee72feea 100644 --- a/src/game/rendering_graph_node.h +++ b/src/game/rendering_graph_node.h @@ -15,6 +15,9 @@ extern struct GraphNodeHeldObject *gCurGraphNodeHeldObject; extern u16 gAreaUpdateCounter; extern Vec3f globalLightDirection; +#define GRAPH_ROOT_PERSP 0 +#define GRAPH_ROOT_ORTHO 1 + enum AnimType { // after processing an object, the type is reset to this ANIM_TYPE_NONE, @@ -41,34 +44,7 @@ struct RenderModeContainer { u32 modes[LAYER_COUNT]; }; -#ifdef OBJECTS_REJ - #if SILHOUETTE - // Silhouette, .rej - enum RenderPhases { - RENDER_PHASE_ZEX_BEFORE_SILHOUETTE, - RENDER_PHASE_REJ_ZB, - RENDER_PHASE_REJ_SILHOUETTE, - RENDER_PHASE_REJ_NON_SILHOUETTE, - RENDER_PHASE_REJ_OCCLUDE_SILHOUETTE, - RENDER_PHASE_ZEX_AFTER_SILHOUETTE, - RENDER_PHASE_REJ_NON_ZB, - RENDER_PHASE_END, - }; - #define RENDER_PHASE_SILHOUETTE RENDER_PHASE_REJ_SILHOUETTE - #define RENDER_PHASE_NON_SILHOUETTE RENDER_PHASE_REJ_NON_SILHOUETTE - #else - // No silhouette, .rej - enum RenderPhases { - RENDER_PHASE_ZEX_BG, - RENDER_PHASE_REJ_ZB, - RENDER_PHASE_ZEX_ALL, - RENDER_PHASE_REJ_NON_ZB, - RENDER_PHASE_END, - }; - #endif -#else - #if SILHOUETTE - // Silhouette, no .rej +#if SILHOUETTE enum RenderPhases { RENDER_PHASE_ZEX_BEFORE_SILHOUETTE, RENDER_PHASE_ZEX_SILHOUETTE, @@ -79,13 +55,11 @@ struct RenderModeContainer { }; #define RENDER_PHASE_SILHOUETTE RENDER_PHASE_ZEX_SILHOUETTE #define RENDER_PHASE_NON_SILHOUETTE RENDER_PHASE_ZEX_NON_SILHOUETTE - #else - // No silhouette, no .rej +#else enum RenderPhases { RENDER_PHASE_ZEX_ALL, RENDER_PHASE_END, }; - #endif #endif #if SILHOUETTE diff --git a/src/game/spawn_object.c b/src/game/spawn_object.c index adb191bb..92f7beae 100644 --- a/src/game/spawn_object.c +++ b/src/game/spawn_object.c @@ -188,9 +188,6 @@ struct Object *allocate_object(struct ObjectNode *objList) { obj->oRoom = -1; obj->header.gfx.node.flags &= ~GRAPH_RENDER_INVISIBLE; -#ifdef OBJECTS_REJ - obj->header.gfx.ucode = GRAPH_NODE_UCODE_REJ; -#endif vec3_same(obj->header.gfx.pos, -10000.0f); obj->header.gfx.throwMatrix = NULL; #ifdef PUPPYLIGHTS