You've already forked HackerSM64
mirror of
https://github.com/HackerN64/HackerSM64.git
synced 2026-01-21 10:35:32 -08:00
Fix SILHOUETTE, OBJECTS_REJ, and ucode loading, also clean up render phase system a bit.
This commit is contained in:
@@ -29,12 +29,10 @@
|
||||
// Similar to the above, but 30 FPS (Textures by InTheBeef, cleaned up by Arceveti)
|
||||
#define IA8_30FPS_COINS
|
||||
|
||||
#ifdef F3DEX_GBI_2 // !Safeguard
|
||||
// Use .rej microcode for certain objects (experimental - only should be used when F3DEX_GBI_2 is defined).
|
||||
// Use .rej microcode for certain objects (experimental - only should be used when F3DZEX_GBI_2 is defined).
|
||||
// So far - recent tests have show that this has reduced performance overall due to CPU load,
|
||||
// though in some cases it may perform better.
|
||||
// #define OBJECTS_REJ
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Mario's silhouette when behind solid objects/surfaces
|
||||
@@ -65,10 +63,27 @@
|
||||
// Uses the correct "up" vector for the guLookAtReflect call in geo_process_master_list_sub.
|
||||
// It is sideways in vanilla, and since vanilla's environment map textures are sideways too, they will appear as sideways in-game if this is enabled.
|
||||
// Make sure your custom environment map textures are the correct orientation.
|
||||
#define FIX_REFLECT_MTX
|
||||
// #define FIX_REFLECT_MTX
|
||||
|
||||
// This improves performance a bit, and does not seem to break anything.
|
||||
#define DISABLE_GRAPH_NODE_TYPE_FUNCTIONAL
|
||||
|
||||
// Disables object shadows. You'll probably only want this either as a last resort for performance or if you're making a super stylized hack.
|
||||
//#define DISABLE_SHADOWS
|
||||
// #define DISABLE_SHADOWS
|
||||
|
||||
|
||||
// -- Compatibility safeguards. Don't mess with these unless you know what you're doing.--
|
||||
|
||||
#ifndef F3DZEX_GBI_2
|
||||
#undef OBJECTS_REJ // OBJECTS_REJ requires f3dzex.
|
||||
#endif // !F3DZEX_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
|
||||
|
||||
@@ -68,6 +68,11 @@
|
||||
lib/PR/f3dex2/fifo/gspF3DEX2.Rej.fifo.o(.data);
|
||||
#endif
|
||||
|
||||
/* Fast3DLX2 Rej Data */
|
||||
#ifdef F3DLX2_REJ_GBI
|
||||
lib/PR/f3dex2/fifo/gspF3DLX2.Rej.fifo.o(.data);
|
||||
#endif
|
||||
|
||||
/* Line3DEX2 Data */
|
||||
#ifdef L3DEX2_GBI
|
||||
lib/PR/f3dex2/fifo/gspL3DEX2.fifo.o(.data);
|
||||
@@ -81,4 +86,4 @@
|
||||
/* S2DEX2 Data */
|
||||
#ifdef S2DEX_GBI_2
|
||||
lib/PR/s2dex2/fifo/gspS2DEX2.fifo.o(.data);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -68,6 +68,11 @@
|
||||
lib/PR/f3dex2/fifo/gspF3DEX2.Rej.fifo.o(.text);
|
||||
#endif
|
||||
|
||||
/* Fast3DLX2 Rej Text */
|
||||
#ifdef F3DLX2_REJ_GBI
|
||||
lib/PR/f3dex2/fifo/gspF3DLX2.Rej.fifo.o(.text);
|
||||
#endif
|
||||
|
||||
/* Line3DEX2 Text */
|
||||
#ifdef L3DEX2_GBI
|
||||
lib/PR/f3dex2/fifo/gspL3DEX2.fifo.o(.text);
|
||||
@@ -81,4 +86,4 @@
|
||||
/* S2DEX2 Text */
|
||||
#ifdef S2DEX_GBI_2
|
||||
lib/PR/s2dex2/fifo/gspS2DEX2.fifo.o(.text);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -278,31 +278,47 @@ 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);
|
||||
gGfxSPTask->task.t.flags = OS_TASK_LOADABLE | OS_TASK_DP_WAIT;
|
||||
#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;
|
||||
gGfxSPTask->task.t.ucode_size = ((u8 *) gspL3DEX2_fifoTextEnd - (u8 *) gspL3DEX2_fifoTextStart);
|
||||
gGfxSPTask->task.t.ucode_data_size = ((u8 *) gspL3DEX2_fifoDataEnd - (u8 *) gspL3DEX2_fifoDataStart);
|
||||
#elif F3DZEX_GBI_2
|
||||
gGfxSPTask->task.t.ucode = gspF3DZEX2_PosLight_fifoTextStart;
|
||||
gGfxSPTask->task.t.ucode_data = gspF3DZEX2_PosLight_fifoDataStart;
|
||||
gGfxSPTask->task.t.ucode_size = ((u8 *) gspF3DZEX2_PosLight_fifoTextEnd - (u8 *) gspF3DZEX2_PosLight_fifoTextStart);
|
||||
gGfxSPTask->task.t.ucode_data_size = ((u8 *) gspF3DZEX2_PosLight_fifoDataEnd - (u8 *) gspF3DZEX2_PosLight_fifoDataStart);
|
||||
#elif F3DEX2PL_GBI
|
||||
gGfxSPTask->task.t.ucode = gspF3DEX2_PosLight_fifoTextStart;
|
||||
gGfxSPTask->task.t.ucode_data = gspF3DEX2_PosLight_fifoDataStart;
|
||||
gGfxSPTask->task.t.ucode_size = ((u8 *) gspF3DEX2_PosLight_fifoTextEnd - (u8 *) gspF3DEX2_PosLight_fifoTextStart);
|
||||
gGfxSPTask->task.t.ucode_data_size = ((u8 *) gspF3DEX2_PosLight_fifoDataEnd - (u8 *) gspF3DEX2_PosLight_fifoDataStart);
|
||||
#elif F3DEX_GBI_2
|
||||
gGfxSPTask->task.t.ucode = gspF3DEX2_fifoTextStart;
|
||||
gGfxSPTask->task.t.ucode_data = gspF3DEX2_fifoDataStart;
|
||||
gGfxSPTask->task.t.ucode_size = ((u8 *) gspF3DEX2_fifoTextEnd - (u8 *) gspF3DEX2_fifoTextStart);
|
||||
gGfxSPTask->task.t.ucode_data_size = ((u8 *) gspF3DEX2_fifoDataEnd - (u8 *) gspF3DEX2_fifoDataStart);
|
||||
#elif F3DEX_GBI
|
||||
gGfxSPTask->task.t.ucode = gspF3DEX_fifoTextStart;
|
||||
gGfxSPTask->task.t.ucode_data = gspF3DEX_fifoDataStart;
|
||||
gGfxSPTask->task.t.ucode_size = ((u8 *) gspF3DEX_fifoTextEnd - (u8 *) gspF3DEX_fifoTextStart);
|
||||
gGfxSPTask->task.t.ucode_data_size = ((u8 *) gspF3DEX_fifoDataEnd - (u8 *) gspF3DEX_fifoDataStart);
|
||||
#elif SUPER3D_GBI
|
||||
gGfxSPTask->task.t.ucode = gspSuper3D_fifoTextStart;
|
||||
gGfxSPTask->task.t.ucode_data = gspSuper3D_fifoDataStart;
|
||||
gGfxSPTask->task.t.ucode = gspSuper3DTextStart;
|
||||
gGfxSPTask->task.t.ucode_data = gspSuper3DDataStart;
|
||||
gGfxSPTask->task.t.ucode_size = ((u8 *) gspSuper3DTextEnd - (u8 *) gspSuper3DTextStart);
|
||||
gGfxSPTask->task.t.ucode_data_size = ((u8 *) gspSuper3DDataEnd - (u8 *) gspSuper3DDataStart);
|
||||
#else
|
||||
gGfxSPTask->task.t.ucode = gspFast3D_fifoTextStart;
|
||||
gGfxSPTask->task.t.ucode_data = gspFast3D_fifoDataStart;
|
||||
gGfxSPTask->task.t.ucode_size = ((u8 *) gspFast3D_fifoTextEnd - (u8 *) gspFast3D_fifoTextStart);
|
||||
gGfxSPTask->task.t.ucode_data_size = ((u8 *) gspFast3D_fifoDataEnd - (u8 *) gspFast3D_fifoDataStart);
|
||||
#endif
|
||||
gGfxSPTask->task.t.ucode_size = SP_UCODE_SIZE; // (this size is ignored)
|
||||
gGfxSPTask->task.t.ucode_data_size = SP_UCODE_DATA_SIZE;
|
||||
gGfxSPTask->task.t.dram_stack = (u64 *) gGfxSPTaskStack;
|
||||
gGfxSPTask->task.t.dram_stack_size = SP_DRAM_STACK_SIZE8;
|
||||
gGfxSPTask->task.t.output_buff = gGfxSPTaskOutputBuffer;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -28,56 +28,65 @@ enum AnimType {
|
||||
ANIM_TYPE_ROTATION
|
||||
};
|
||||
|
||||
#define IS_LAYER_ZB( layer) (((layer) >= LAYER_ZB_FIRST ) || ((layer) <= LAYER_ZB_LAST))
|
||||
#define IS_LAYER_NON_ZB(layer) (((layer) >= LAYER_NON_ZB_FIRST) || ((layer) <= LAYER_LAST ))
|
||||
|
||||
#ifdef OBJECTS_REJ
|
||||
enum HeadsList {
|
||||
LIST_HEADS_ZEX,
|
||||
LIST_HEADS_REJ,
|
||||
};
|
||||
#endif
|
||||
|
||||
#define IS_LAYER_ZB( layer) (((layer) >= LAYER_ZB_FIRST ) || ((layer) <= LAYER_ZB_LAST))
|
||||
#define IS_LAYER_NON_ZB(layer) (((layer) >= LAYER_NON_ZB_FIRST) || ((layer) <= LAYER_LAST ))
|
||||
#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
|
||||
enum RenderPhases {
|
||||
RENDER_PHASE_ZEX_BEFORE_SILHOUETTE,
|
||||
RENDER_PHASE_ZEX_SILHOUETTE,
|
||||
RENDER_PHASE_ZEX_NON_SILHOUETTE,
|
||||
RENDER_PHASE_ZEX_OCCLUDE_SILHOUETTE,
|
||||
RENDER_PHASE_ZEX_AFTER_SILHOUETTE,
|
||||
RENDER_PHASE_END,
|
||||
};
|
||||
#define RENDER_PHASE_SILHOUETTE RENDER_PHASE_ZEX_SILHOUETTE
|
||||
#define RENDER_PHASE_NON_SILHOUETTE RENDER_PHASE_ZEX_NON_SILHOUETTE
|
||||
#else
|
||||
// No silhouette, no .rej
|
||||
enum RenderPhases {
|
||||
RENDER_PHASE_ZEX_ALL,
|
||||
RENDER_PHASE_END,
|
||||
};
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if SILHOUETTE
|
||||
#define IS_LAYER_SILHOUETTE(layer) (((layer) >= LAYER_SILHOUETTE_FIRST) || ((layer) <= LAYER_SILHOUETTE_LAST))
|
||||
#ifdef OBJECTS_REJ
|
||||
enum RenderPhase { // Silhouette, .rej
|
||||
RENDER_PHASE_ZEX_BG,
|
||||
RENDER_PHASE_REJ_ZB,
|
||||
RENDER_PHASE_ZEX_BEFORE_SILHOUETTE,
|
||||
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,
|
||||
};
|
||||
#else
|
||||
enum RenderPhase { // Silhouette, no .rej
|
||||
RENDER_PHASE_ZEX_BEFORE_SILHOUETTE,
|
||||
RENDER_PHASE_ZEX_SILHOUETTE,
|
||||
RENDER_PHASE_ZEX_NON_SILHOUETTE,
|
||||
RENDER_PHASE_ZEX_OCCLUDE_SILHOUETTE,
|
||||
RENDER_PHASE_ZEX_AFTER_SILHOUETTE,
|
||||
RENDER_PHASE_END,
|
||||
};
|
||||
#endif
|
||||
#else
|
||||
#ifdef OBJECTS_REJ
|
||||
enum RenderPhase { // No silhouette, .rej
|
||||
RENDER_PHASE_ZEX_BG,
|
||||
RENDER_PHASE_REJ_ZB,
|
||||
RENDER_PHASE_ZEX_ALL,
|
||||
RENDER_PHASE_REJ_NON_ZB,
|
||||
RENDER_PHASE_END,
|
||||
};
|
||||
#else
|
||||
enum RenderPhase { // No silhouette, no .rej
|
||||
RENDER_PHASE_ZEX_ALL,
|
||||
RENDER_PHASE_END,
|
||||
};
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define RENDER_PHASE_FIRST 0
|
||||
|
||||
void geo_process_node_and_siblings(struct GraphNode *firstNode);
|
||||
|
||||
Reference in New Issue
Block a user