You've already forked Microtransactions64
mirror of
https://github.com/Print-and-Panic/Microtransactions64.git
synced 2026-01-21 10:17:19 -08:00
F3DLX2.Rej integration
The master displaylist has been split into two, one for things to render in F3DZEX, and one that renders in F3DLX2.Rej, with the aim to save performance when rendering smaller things.
This commit is contained in:
@@ -242,6 +242,8 @@
|
|||||||
#define BEGIN_REPEAT_UNUSED(count) \
|
#define BEGIN_REPEAT_UNUSED(count) \
|
||||||
BC_BB(0x26, count)
|
BC_BB(0x26, count)
|
||||||
|
|
||||||
|
#define OR_LONG(field, value) LOAD_ANIMATIONS(field, value)
|
||||||
|
|
||||||
// Loads the animations for the object. <field> is always set to oAnimations.
|
// Loads the animations for the object. <field> is always set to oAnimations.
|
||||||
#define LOAD_ANIMATIONS(field, anims) \
|
#define LOAD_ANIMATIONS(field, anims) \
|
||||||
BC_BB(0x27, field), \
|
BC_BB(0x27, field), \
|
||||||
@@ -2657,7 +2659,7 @@ const BehaviorScript bhvBowserSubDoor[] = {
|
|||||||
|
|
||||||
const BehaviorScript bhvBowsersSub[] = {
|
const BehaviorScript bhvBowsersSub[] = {
|
||||||
BEGIN(OBJ_LIST_SURFACE),
|
BEGIN(OBJ_LIST_SURFACE),
|
||||||
OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
|
OR_LONG(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE | OBJ_FLAG_UCODE_LARGE)),
|
||||||
SET_FLOAT(oDrawingDistance, 20000),
|
SET_FLOAT(oDrawingDistance, 20000),
|
||||||
SET_FLOAT(oCollisionDistance, 20000),
|
SET_FLOAT(oCollisionDistance, 20000),
|
||||||
LOAD_COLLISION_DATA(ddd_seg7_collision_submarine),
|
LOAD_COLLISION_DATA(ddd_seg7_collision_submarine),
|
||||||
@@ -2705,7 +2707,7 @@ const BehaviorScript bhvJrbSlidingBox[] = {
|
|||||||
|
|
||||||
const BehaviorScript bhvShipPart3[] = {
|
const BehaviorScript bhvShipPart3[] = {
|
||||||
BEGIN(OBJ_LIST_DEFAULT),
|
BEGIN(OBJ_LIST_DEFAULT),
|
||||||
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
|
OR_LONG(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE | OBJ_FLAG_UCODE_LARGE),
|
||||||
SET_HOME(),
|
SET_HOME(),
|
||||||
BEGIN_LOOP(),
|
BEGIN_LOOP(),
|
||||||
CALL_NATIVE(bhv_ship_part_3_loop),
|
CALL_NATIVE(bhv_ship_part_3_loop),
|
||||||
@@ -2714,7 +2716,7 @@ const BehaviorScript bhvShipPart3[] = {
|
|||||||
|
|
||||||
const BehaviorScript bhvInSunkenShip3[] = {
|
const BehaviorScript bhvInSunkenShip3[] = {
|
||||||
BEGIN(OBJ_LIST_SURFACE),
|
BEGIN(OBJ_LIST_SURFACE),
|
||||||
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
|
OR_LONG(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE | OBJ_FLAG_UCODE_LARGE),
|
||||||
LOAD_COLLISION_DATA(jrb_seg7_collision_in_sunken_ship_3),
|
LOAD_COLLISION_DATA(jrb_seg7_collision_in_sunken_ship_3),
|
||||||
SET_HOME(),
|
SET_HOME(),
|
||||||
SET_FLOAT(oCollisionDistance, 4000),
|
SET_FLOAT(oCollisionDistance, 4000),
|
||||||
@@ -2726,7 +2728,7 @@ const BehaviorScript bhvInSunkenShip3[] = {
|
|||||||
|
|
||||||
const BehaviorScript bhvSunkenShipPart[] = {
|
const BehaviorScript bhvSunkenShipPart[] = {
|
||||||
BEGIN(OBJ_LIST_DEFAULT),
|
BEGIN(OBJ_LIST_DEFAULT),
|
||||||
OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
|
OR_LONG(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE | OBJ_FLAG_UCODE_LARGE)),
|
||||||
SCALE(/*Unused*/ 0, /*Field*/ 50),
|
SCALE(/*Unused*/ 0, /*Field*/ 50),
|
||||||
SET_HOME(),
|
SET_HOME(),
|
||||||
BEGIN_LOOP(),
|
BEGIN_LOOP(),
|
||||||
@@ -2743,7 +2745,7 @@ const BehaviorScript bhvSunkenShipSetRotation[] = {
|
|||||||
|
|
||||||
const BehaviorScript bhvSunkenShipPart2[] = {
|
const BehaviorScript bhvSunkenShipPart2[] = {
|
||||||
BEGIN(OBJ_LIST_DEFAULT),
|
BEGIN(OBJ_LIST_DEFAULT),
|
||||||
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
|
OR_LONG(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE | OBJ_FLAG_UCODE_LARGE)),
|
||||||
SCALE(/*Unused*/ 0, /*Field*/ 100),
|
SCALE(/*Unused*/ 0, /*Field*/ 100),
|
||||||
SET_FLOAT(oDrawingDistance, 6000),
|
SET_FLOAT(oDrawingDistance, 6000),
|
||||||
SET_HOME(),
|
SET_HOME(),
|
||||||
@@ -2761,7 +2763,7 @@ const BehaviorScript bhvInSunkenShip2[] = {
|
|||||||
BEGIN(OBJ_LIST_SURFACE),
|
BEGIN(OBJ_LIST_SURFACE),
|
||||||
LOAD_COLLISION_DATA(jrb_seg7_collision_in_sunken_ship_2),
|
LOAD_COLLISION_DATA(jrb_seg7_collision_in_sunken_ship_2),
|
||||||
// Sunken ship - common:
|
// Sunken ship - common:
|
||||||
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
|
OR_LONG(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE | OBJ_FLAG_UCODE_LARGE),
|
||||||
SET_FLOAT(oCollisionDistance, 4000),
|
SET_FLOAT(oCollisionDistance, 4000),
|
||||||
CALL(bhvSunkenShipSetRotation),
|
CALL(bhvSunkenShipSetRotation),
|
||||||
BEGIN_LOOP(),
|
BEGIN_LOOP(),
|
||||||
@@ -3152,7 +3154,7 @@ UNUSED static const BehaviorScript unused_1[] = {
|
|||||||
|
|
||||||
const BehaviorScript bhvStaticObject[] = {
|
const BehaviorScript bhvStaticObject[] = {
|
||||||
BEGIN(OBJ_LIST_DEFAULT),
|
BEGIN(OBJ_LIST_DEFAULT),
|
||||||
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
|
OR_LONG(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE | OBJ_FLAG_UCODE_LARGE),
|
||||||
BREAK(),
|
BREAK(),
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -3611,7 +3613,7 @@ const BehaviorScript bhvRandomAnimatedTexture[] = {
|
|||||||
|
|
||||||
const BehaviorScript bhvYellowBackgroundInMenu[] = {
|
const BehaviorScript bhvYellowBackgroundInMenu[] = {
|
||||||
BEGIN(OBJ_LIST_LEVEL),
|
BEGIN(OBJ_LIST_LEVEL),
|
||||||
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
|
OR_LONG(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE | OBJ_FLAG_UCODE_LARGE),
|
||||||
CALL_NATIVE(beh_yellow_background_menu_init),
|
CALL_NATIVE(beh_yellow_background_menu_init),
|
||||||
BEGIN_LOOP(),
|
BEGIN_LOOP(),
|
||||||
SET_INT(oIntangibleTimer, 0),
|
SET_INT(oIntangibleTimer, 0),
|
||||||
@@ -3631,7 +3633,7 @@ const BehaviorScript bhvMenuButton[] = {
|
|||||||
|
|
||||||
const BehaviorScript bhvMenuButtonManager[] = {
|
const BehaviorScript bhvMenuButtonManager[] = {
|
||||||
BEGIN(OBJ_LIST_LEVEL),
|
BEGIN(OBJ_LIST_LEVEL),
|
||||||
OR_INT(oFlags, (OBJ_FLAG_SET_THROW_MATRIX_FROM_TRANSFORM | OBJ_FLAG_UPDATE_TRANSFORM_FOR_THROW_MATRIX | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
|
OR_LONG(oFlags, (OBJ_FLAG_SET_THROW_MATRIX_FROM_TRANSFORM | OBJ_FLAG_UPDATE_TRANSFORM_FOR_THROW_MATRIX | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE | OBJ_FLAG_UCODE_LARGE)),
|
||||||
CALL_NATIVE(bhv_menu_button_manager_init),
|
CALL_NATIVE(bhv_menu_button_manager_init),
|
||||||
BEGIN_LOOP(),
|
BEGIN_LOOP(),
|
||||||
SET_INT(oIntangibleTimer, 0),
|
SET_INT(oIntangibleTimer, 0),
|
||||||
@@ -5461,7 +5463,7 @@ const BehaviorScript bhvTTCRotatingSolid[] = {
|
|||||||
const BehaviorScript bhvTTCPendulum[] = {
|
const BehaviorScript bhvTTCPendulum[] = {
|
||||||
BEGIN(OBJ_LIST_SURFACE),
|
BEGIN(OBJ_LIST_SURFACE),
|
||||||
LOAD_COLLISION_DATA(ttc_seg7_collision_clock_pendulum),
|
LOAD_COLLISION_DATA(ttc_seg7_collision_clock_pendulum),
|
||||||
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
|
OR_LONG(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE | OBJ_FLAG_UCODE_LARGE)),
|
||||||
SET_FLOAT(oCollisionDistance, 1500),
|
SET_FLOAT(oCollisionDistance, 1500),
|
||||||
CALL_NATIVE(bhv_ttc_pendulum_init),
|
CALL_NATIVE(bhv_ttc_pendulum_init),
|
||||||
SET_FLOAT(oTTCPendulumAccelDir, 1),
|
SET_FLOAT(oTTCPendulumAccelDir, 1),
|
||||||
@@ -5474,9 +5476,9 @@ const BehaviorScript bhvTTCPendulum[] = {
|
|||||||
const BehaviorScript bhvTTCTreadmill[] = {
|
const BehaviorScript bhvTTCTreadmill[] = {
|
||||||
BEGIN(OBJ_LIST_SURFACE),
|
BEGIN(OBJ_LIST_SURFACE),
|
||||||
#ifdef PLATFORM_DISPLACEMENT_2
|
#ifdef PLATFORM_DISPLACEMENT_2
|
||||||
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE | OBJ_FLAG_VELOCITY_PLATFORM)),
|
OR_LONG(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE | OBJ_FLAG_VELOCITY_PLATFORM | OBJ_FLAG_UCODE_LARGE)),
|
||||||
#else
|
#else
|
||||||
OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
|
OR_LONG(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE | OBJ_FLAG_UCODE_LARGE)),
|
||||||
#endif
|
#endif
|
||||||
SET_FLOAT(oCollisionDistance, 750),
|
SET_FLOAT(oCollisionDistance, 750),
|
||||||
CALL_NATIVE(bhv_ttc_treadmill_init),
|
CALL_NATIVE(bhv_ttc_treadmill_init),
|
||||||
|
|||||||
@@ -46,6 +46,7 @@
|
|||||||
#define OBJ_FLAG_VELOCITY_PLATFORM (1 << 15) // 0x00008000
|
#define OBJ_FLAG_VELOCITY_PLATFORM (1 << 15) // 0x00008000
|
||||||
#define OBJ_FLAG_DONT_CALC_COLL_DIST (1 << 16) // 0x00010000
|
#define OBJ_FLAG_DONT_CALC_COLL_DIST (1 << 16) // 0x00010000
|
||||||
#define OBJ_FLAG_EMIT_LIGHT (1 << 17) // 0x00020000
|
#define OBJ_FLAG_EMIT_LIGHT (1 << 17) // 0x00020000
|
||||||
|
#define OBJ_FLAG_UCODE_LARGE (1 << 18) // 0x00040000
|
||||||
#define OBJ_FLAG_HITBOX_WAS_SET (1 << 30) // 0x40000000
|
#define OBJ_FLAG_HITBOX_WAS_SET (1 << 30) // 0x40000000
|
||||||
|
|
||||||
/* oHeldState */
|
/* oHeldState */
|
||||||
|
|||||||
@@ -146,6 +146,7 @@ struct GraphNodeObject
|
|||||||
/*0x4C*/ struct SpawnInfo *unk4C;
|
/*0x4C*/ struct SpawnInfo *unk4C;
|
||||||
/*0x50*/ Mat4 *throwMatrix; // matrix ptr
|
/*0x50*/ Mat4 *throwMatrix; // matrix ptr
|
||||||
/*0x54*/ Vec3f cameraToObject;
|
/*0x54*/ Vec3f cameraToObject;
|
||||||
|
u8 uCode;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ObjectNode
|
struct ObjectNode
|
||||||
|
|||||||
@@ -40,6 +40,9 @@ glabel gspFast3D_fifoTextEnd
|
|||||||
glabel gspF3DZEX2_PosLight_fifoTextStart
|
glabel gspF3DZEX2_PosLight_fifoTextStart
|
||||||
.incbin "lib/PR/f3dzex/F3DZEX.bin"
|
.incbin "lib/PR/f3dzex/F3DZEX.bin"
|
||||||
glabel gspF3DZEX2_PosLight_fifoTextEnd
|
glabel gspF3DZEX2_PosLight_fifoTextEnd
|
||||||
|
glabel gspF3DLX2_Rej_fifoTextStart
|
||||||
|
.incbin "lib/PR/f3dex2/F3DLX2_Rej.bin"
|
||||||
|
glabel gspF3DLX2_Rej_fifoTextEnd
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -196,6 +199,9 @@ glabel gspFast3D_fifoDataEnd
|
|||||||
glabel gspF3DZEX2_PosLight_fifoDataStart
|
glabel gspF3DZEX2_PosLight_fifoDataStart
|
||||||
.incbin "lib/PR/f3dzex/F3DZEX_data.bin"
|
.incbin "lib/PR/f3dzex/F3DZEX_data.bin"
|
||||||
glabel gspF3DZEX2_PosLight_fifoDataEnd
|
glabel gspF3DZEX2_PosLight_fifoDataEnd
|
||||||
|
glabel gspF3DLX2_Rej_fifoDataStart
|
||||||
|
.incbin "lib/PR/f3dex2/F3DLX2_Rej_data.bin"
|
||||||
|
glabel gspF3DLX2_Rej_fifoDataEnd
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -907,7 +907,7 @@ static BhvCommandProc BehaviorCmdTable[] = {
|
|||||||
void cur_obj_update(void) {
|
void cur_obj_update(void) {
|
||||||
UNUSED u32 unused;
|
UNUSED u32 unused;
|
||||||
|
|
||||||
s16 objFlags = gCurrentObject->oFlags;
|
u32 objFlags = gCurrentObject->oFlags;
|
||||||
f32 distanceFromMario;
|
f32 distanceFromMario;
|
||||||
BhvCommandProc bhvCmdProc;
|
BhvCommandProc bhvCmdProc;
|
||||||
s32 bhvProcResult;
|
s32 bhvProcResult;
|
||||||
@@ -952,9 +952,6 @@ void cur_obj_update(void) {
|
|||||||
gCurrentObject->oPrevAction = gCurrentObject->oAction);
|
gCurrentObject->oPrevAction = gCurrentObject->oAction);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Execute various code based on object flags.
|
|
||||||
objFlags = (s16) gCurrentObject->oFlags;
|
|
||||||
|
|
||||||
if (objFlags & OBJ_FLAG_SET_FACE_ANGLE_TO_MOVE_ANGLE) {
|
if (objFlags & OBJ_FLAG_SET_FACE_ANGLE_TO_MOVE_ANGLE) {
|
||||||
obj_set_face_angle_to_move_angle(gCurrentObject);
|
obj_set_face_angle_to_move_angle(gCurrentObject);
|
||||||
}
|
}
|
||||||
@@ -983,6 +980,12 @@ void cur_obj_update(void) {
|
|||||||
obj_update_gfx_pos_and_angle(gCurrentObject);
|
obj_update_gfx_pos_and_angle(gCurrentObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (objFlags & OBJ_FLAG_UCODE_LARGE)
|
||||||
|
gCurrentObject->header.gfx.uCode = UCODE_DEFAULT;
|
||||||
|
else
|
||||||
|
gCurrentObject->header.gfx.uCode = UCODE_REJ;
|
||||||
|
|
||||||
#ifdef PUPPYLIGHTS
|
#ifdef PUPPYLIGHTS
|
||||||
puppylights_object_emit(gCurrentObject);
|
puppylights_object_emit(gCurrentObject);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -7,6 +7,9 @@
|
|||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "game/memory.h"
|
#include "game/memory.h"
|
||||||
|
|
||||||
|
#define UCODE_DEFAULT 0
|
||||||
|
#define UCODE_REJ 1
|
||||||
|
|
||||||
#define GRAPH_RENDER_ACTIVE (1 << 0)
|
#define GRAPH_RENDER_ACTIVE (1 << 0)
|
||||||
#define GRAPH_RENDER_CHILDREN_FIRST (1 << 1)
|
#define GRAPH_RENDER_CHILDREN_FIRST (1 << 1)
|
||||||
#define GRAPH_RENDER_BILLBOARD (1 << 2)
|
#define GRAPH_RENDER_BILLBOARD (1 << 2)
|
||||||
@@ -126,8 +129,8 @@ struct DisplayListNode
|
|||||||
struct GraphNodeMasterList
|
struct GraphNodeMasterList
|
||||||
{
|
{
|
||||||
/*0x00*/ struct GraphNode node;
|
/*0x00*/ struct GraphNode node;
|
||||||
/*0x14*/ struct DisplayListNode *listHeads[GFX_NUM_MASTER_LISTS];
|
/*0x14*/ struct DisplayListNode *listHeads[2][GFX_NUM_MASTER_LISTS];
|
||||||
/*0x34*/ struct DisplayListNode *listTails[GFX_NUM_MASTER_LISTS];
|
/*0x34*/ struct DisplayListNode *listTails[2][GFX_NUM_MASTER_LISTS];
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Simply used as a parent to group multiple children.
|
/** Simply used as a parent to group multiple children.
|
||||||
|
|||||||
@@ -963,7 +963,7 @@ struct LevelCommand *level_script_execute(struct LevelCommand *cmd) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
profiler_log_thread5_time(LEVEL_SCRIPT_EXECUTE);
|
profiler_log_thread5_time(LEVEL_SCRIPT_EXECUTE);
|
||||||
init_rcp();
|
init_rcp(1);
|
||||||
render_game();
|
render_game();
|
||||||
end_master_display_list();
|
end_master_display_list();
|
||||||
alloc_display_list(0);
|
alloc_display_list(0);
|
||||||
|
|||||||
@@ -111,9 +111,8 @@ void crash_screen_print(s32 x, s32 y, const char *fmt, ...) {
|
|||||||
u32 glyph;
|
u32 glyph;
|
||||||
s32 size;
|
s32 size;
|
||||||
char buf[0x108];
|
char buf[0x108];
|
||||||
UNUSED s32 i = 0;
|
|
||||||
|
|
||||||
memset(buf, 0, sizeof(buf));
|
bzero(&buf ,sizeof(buf));
|
||||||
|
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
|
|||||||
@@ -125,9 +125,7 @@ void init_rdp(void) {
|
|||||||
gDPSetColorDither(gDisplayListHead++, G_CD_MAGICSQ);
|
gDPSetColorDither(gDisplayListHead++, G_CD_MAGICSQ);
|
||||||
gDPSetCycleType(gDisplayListHead++, G_CYC_FILL);
|
gDPSetCycleType(gDisplayListHead++, G_CYC_FILL);
|
||||||
|
|
||||||
#ifdef VERSION_SH
|
|
||||||
gDPSetAlphaDither(gDisplayListHead++, G_AD_PATTERN);
|
gDPSetAlphaDither(gDisplayListHead++, G_AD_PATTERN);
|
||||||
#endif
|
|
||||||
gDPPipeSync(gDisplayListHead++);
|
gDPPipeSync(gDisplayListHead++);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -135,6 +133,7 @@ void init_rdp(void) {
|
|||||||
* Sets the initial RSP (Reality Signal Processor) settings.
|
* Sets the initial RSP (Reality Signal Processor) settings.
|
||||||
*/
|
*/
|
||||||
void init_rsp(void) {
|
void init_rsp(void) {
|
||||||
|
|
||||||
gSPClearGeometryMode(gDisplayListHead++, G_SHADE | G_SHADING_SMOOTH | G_CULL_BOTH | G_FOG
|
gSPClearGeometryMode(gDisplayListHead++, G_SHADE | G_SHADING_SMOOTH | G_CULL_BOTH | G_FOG
|
||||||
| G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | G_LOD);
|
| G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | G_LOD);
|
||||||
|
|
||||||
@@ -153,13 +152,15 @@ void init_rsp(void) {
|
|||||||
/**
|
/**
|
||||||
* Initialize the z buffer for the current frame.
|
* Initialize the z buffer for the current frame.
|
||||||
*/
|
*/
|
||||||
void init_z_buffer(void) {
|
void init_z_buffer(s32 resetZB) {
|
||||||
gDPPipeSync(gDisplayListHead++);
|
gDPPipeSync(gDisplayListHead++);
|
||||||
|
|
||||||
gDPSetDepthSource(gDisplayListHead++, G_ZS_PIXEL);
|
gDPSetDepthSource(gDisplayListHead++, G_ZS_PIXEL);
|
||||||
gDPSetDepthImage(gDisplayListHead++, gPhysicalZBuffer);
|
gDPSetDepthImage(gDisplayListHead++, gPhysicalZBuffer);
|
||||||
|
|
||||||
gDPSetColorImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, gPhysicalZBuffer);
|
gDPSetColorImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, gPhysicalZBuffer);
|
||||||
|
if (!resetZB)
|
||||||
|
return;
|
||||||
gDPSetFillColor(gDisplayListHead++,
|
gDPSetFillColor(gDisplayListHead++,
|
||||||
GPACK_ZDZ(G_MAXFBZ, 0) << 16 | GPACK_ZDZ(G_MAXFBZ, 0));
|
GPACK_ZDZ(G_MAXFBZ, 0) << 16 | GPACK_ZDZ(G_MAXFBZ, 0));
|
||||||
|
|
||||||
@@ -273,7 +274,7 @@ void create_gfx_task_structure(void) {
|
|||||||
gGfxSPTask->task.t.type = M_GFXTASK;
|
gGfxSPTask->task.t.type = M_GFXTASK;
|
||||||
gGfxSPTask->task.t.ucode_boot = rspbootTextStart;
|
gGfxSPTask->task.t.ucode_boot = rspbootTextStart;
|
||||||
gGfxSPTask->task.t.ucode_boot_size = ((u8 *) rspbootTextEnd - (u8 *) rspbootTextStart);
|
gGfxSPTask->task.t.ucode_boot_size = ((u8 *) rspbootTextEnd - (u8 *) rspbootTextStart);
|
||||||
gGfxSPTask->task.t.flags = 0;
|
gGfxSPTask->task.t.flags = OS_TASK_LOADABLE | OS_TASK_DP_WAIT;
|
||||||
#ifdef L3DEX2_ALONE
|
#ifdef L3DEX2_ALONE
|
||||||
gGfxSPTask->task.t.ucode = gspL3DEX2_fifoTextStart;
|
gGfxSPTask->task.t.ucode = gspL3DEX2_fifoTextStart;
|
||||||
gGfxSPTask->task.t.ucode_data = gspL3DEX2_fifoDataStart;
|
gGfxSPTask->task.t.ucode_data = gspL3DEX2_fifoDataStart;
|
||||||
@@ -312,11 +313,11 @@ void create_gfx_task_structure(void) {
|
|||||||
/**
|
/**
|
||||||
* Set default RCP (Reality Co-Processor) settings.
|
* Set default RCP (Reality Co-Processor) settings.
|
||||||
*/
|
*/
|
||||||
void init_rcp(void) {
|
void init_rcp(s32 resetZB) {
|
||||||
move_segment_table_to_dmem();
|
move_segment_table_to_dmem();
|
||||||
init_rdp();
|
init_rdp();
|
||||||
init_rsp();
|
init_rsp();
|
||||||
init_z_buffer();
|
init_z_buffer(resetZB);
|
||||||
select_frame_buffer();
|
select_frame_buffer();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -381,7 +382,7 @@ void render_init(void) {
|
|||||||
gGfxSPTask = &gGfxPool->spTask;
|
gGfxSPTask = &gGfxPool->spTask;
|
||||||
gDisplayListHead = gGfxPool->buffer;
|
gDisplayListHead = gGfxPool->buffer;
|
||||||
gGfxPoolEnd = (u8 *)(gGfxPool->buffer + GFX_POOL_SIZE);
|
gGfxPoolEnd = (u8 *)(gGfxPool->buffer + GFX_POOL_SIZE);
|
||||||
init_rcp();
|
init_rcp(1);
|
||||||
clear_frame_buffer(0);
|
clear_frame_buffer(0);
|
||||||
end_master_display_list();
|
end_master_display_list();
|
||||||
exec_display_list(&gGfxPool->spTask);
|
exec_display_list(&gGfxPool->spTask);
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ void thread5_game_loop(UNUSED void *arg);
|
|||||||
void clear_frame_buffer(s32 color);
|
void clear_frame_buffer(s32 color);
|
||||||
void clear_viewport(Vp *viewport, s32 color);
|
void clear_viewport(Vp *viewport, s32 color);
|
||||||
void make_viewport_clip_rect(Vp *viewport);
|
void make_viewport_clip_rect(Vp *viewport);
|
||||||
void init_rcp(void);
|
void init_rcp(s32 resetZB);
|
||||||
void end_master_display_list(void);
|
void end_master_display_list(void);
|
||||||
void render_init(void);
|
void render_init(void);
|
||||||
void select_gfx_pool(void);
|
void select_gfx_pool(void);
|
||||||
|
|||||||
@@ -142,7 +142,7 @@ LookAt lookAt;
|
|||||||
*/
|
*/
|
||||||
static void geo_process_master_list_sub(struct GraphNodeMasterList *node) {
|
static void geo_process_master_list_sub(struct GraphNodeMasterList *node) {
|
||||||
struct DisplayListNode *currList;
|
struct DisplayListNode *currList;
|
||||||
s32 i;
|
s32 i, j;
|
||||||
s32 enableZBuffer = (node->node.flags & GRAPH_RENDER_Z_BUFFER) != 0;
|
s32 enableZBuffer = (node->node.flags & GRAPH_RENDER_Z_BUFFER) != 0;
|
||||||
struct RenderModeContainer *modeList = &renderModeTable_1Cycle[enableZBuffer];
|
struct RenderModeContainer *modeList = &renderModeTable_1Cycle[enableZBuffer];
|
||||||
struct RenderModeContainer *mode2List = &renderModeTable_2Cycle[enableZBuffer];
|
struct RenderModeContainer *mode2List = &renderModeTable_2Cycle[enableZBuffer];
|
||||||
@@ -155,26 +155,56 @@ static void geo_process_master_list_sub(struct GraphNodeMasterList *node) {
|
|||||||
guLookAtReflect(&lMtx, &lookAt, 0, 0, 0, /* eye */ 0, 0, 1, /* at */ 1, 0, 0 /* up */);
|
guLookAtReflect(&lMtx, &lookAt, 0, 0, 0, /* eye */ 0, 0, 1, /* at */ 1, 0, 0 /* up */);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (enableZBuffer != 0) {
|
|
||||||
|
if (enableZBuffer != 0)
|
||||||
|
{
|
||||||
gDPPipeSync(gDisplayListHead++);
|
gDPPipeSync(gDisplayListHead++);
|
||||||
gSPSetGeometryMode(gDisplayListHead++, G_ZBUFFER);
|
gSPSetGeometryMode(gDisplayListHead++, G_ZBUFFER);
|
||||||
}
|
}
|
||||||
|
#ifdef F3DZEX_GBI_2
|
||||||
for (i = 0; i < GFX_NUM_MASTER_LISTS; i++) {
|
for (j = 0; j < 2; j++)
|
||||||
if ((currList = node->listHeads[i]) != NULL) {
|
{
|
||||||
gDPSetRenderMode(gDisplayListHead++, modeList->modes[i], mode2List->modes[i]);
|
//Load rejection on pass 2. ZEX is loaded afterwards.
|
||||||
while (currList != NULL) {
|
if (j == 1)
|
||||||
gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(currList->transform),
|
{
|
||||||
G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_NOPUSH);
|
gSPLoadUcodeL(gDisplayListHead++, gspF3DLX2_Rej_fifo);
|
||||||
gSPDisplayList(gDisplayListHead++, currList->displayList);
|
init_rcp(0);
|
||||||
currList = currList->next;
|
gSPClipRatio(gDisplayListHead++, FRUSTRATIO_2);
|
||||||
|
if (enableZBuffer != 0)
|
||||||
|
{
|
||||||
|
gDPPipeSync(gDisplayListHead++);
|
||||||
|
gSPSetGeometryMode(gDisplayListHead++, G_ZBUFFER);
|
||||||
|
}
|
||||||
|
guLookAtReflect(&lMtx, &lookAt, 0, 0, 0, /* eye */ 0, 0, 1, /* at */ 1, 0, 0 /* up */);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
j = 0;
|
||||||
|
#endif
|
||||||
|
for (i = 0; i < GFX_NUM_MASTER_LISTS; i++)
|
||||||
|
{
|
||||||
|
if ((currList = node->listHeads[j][i]) != NULL)
|
||||||
|
{
|
||||||
|
gDPSetRenderMode(gDisplayListHead++, modeList->modes[i], mode2List->modes[i]);
|
||||||
|
while (currList != NULL)
|
||||||
|
{
|
||||||
|
gSPMatrix(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(currList->transform), G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_NOPUSH);
|
||||||
|
gSPDisplayList(gDisplayListHead++, currList->displayList);
|
||||||
|
currList = currList->next;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef F3DZEX_GBI_2
|
||||||
}
|
}
|
||||||
if (enableZBuffer != 0) {
|
#endif
|
||||||
|
if (enableZBuffer != 0)
|
||||||
|
{
|
||||||
gDPPipeSync(gDisplayListHead++);
|
gDPPipeSync(gDisplayListHead++);
|
||||||
gSPClearGeometryMode(gDisplayListHead++, G_ZBUFFER);
|
gSPClearGeometryMode(gDisplayListHead++, G_ZBUFFER);
|
||||||
}
|
}
|
||||||
|
#ifdef F3DZEX_GBI_2
|
||||||
|
gSPLoadUcodeL(gDisplayListHead++, gspF3DZEX2_PosLight_fifo);
|
||||||
|
init_rcp(0);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -182,24 +212,35 @@ static void geo_process_master_list_sub(struct GraphNodeMasterList *node) {
|
|||||||
* parameter. Look at the RenderModeContainer struct to see the corresponding
|
* parameter. Look at the RenderModeContainer struct to see the corresponding
|
||||||
* render modes of layers.
|
* render modes of layers.
|
||||||
*/
|
*/
|
||||||
static void geo_append_display_list(void *displayList, s16 layer) {
|
static void geo_append_display_list(void *displayList, s32 layer)
|
||||||
|
{
|
||||||
|
s32 index = 0;
|
||||||
#ifdef F3DEX_GBI_2
|
#ifdef F3DEX_GBI_2
|
||||||
gSPLookAt(gDisplayListHead++, &lookAt);
|
gSPLookAt(gDisplayListHead++, &lookAt);
|
||||||
#endif
|
#endif
|
||||||
if (gCurGraphNodeMasterList != 0) {
|
#ifdef F3DZEX_GBI_2
|
||||||
struct DisplayListNode *listNode =
|
if (gCurGraphNodeObject != NULL)
|
||||||
alloc_only_pool_alloc(gDisplayListHeap, sizeof(struct DisplayListNode));
|
{
|
||||||
|
if (gCurGraphNodeObject->uCode == UCODE_REJ)
|
||||||
|
index = 1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (gCurGraphNodeMasterList != 0)
|
||||||
|
{
|
||||||
|
struct DisplayListNode *listNode = alloc_only_pool_alloc(gDisplayListHeap, sizeof(struct DisplayListNode));
|
||||||
|
|
||||||
listNode->transform = gMatStackFixed[gMatStackIndex];
|
listNode->transform = gMatStackFixed[gMatStackIndex];
|
||||||
listNode->displayList = displayList;
|
listNode->displayList = displayList;
|
||||||
listNode->next = 0;
|
listNode->next = 0;
|
||||||
if (gCurGraphNodeMasterList->listHeads[layer] == 0) {
|
if (gCurGraphNodeMasterList->listHeads[index][layer] == 0)
|
||||||
gCurGraphNodeMasterList->listHeads[layer] = listNode;
|
{
|
||||||
} else {
|
gCurGraphNodeMasterList->listHeads[index][layer] = listNode;
|
||||||
gCurGraphNodeMasterList->listTails[layer]->next = listNode;
|
|
||||||
}
|
}
|
||||||
gCurGraphNodeMasterList->listTails[layer] = listNode;
|
else
|
||||||
|
{
|
||||||
|
gCurGraphNodeMasterList->listTails[index][layer]->next = listNode;
|
||||||
|
}
|
||||||
|
gCurGraphNodeMasterList->listTails[index][layer] = listNode;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -209,13 +250,16 @@ static void geo_append_display_list(void *displayList, s16 layer) {
|
|||||||
static void geo_process_master_list(struct GraphNodeMasterList *node) {
|
static void geo_process_master_list(struct GraphNodeMasterList *node) {
|
||||||
s32 i;
|
s32 i;
|
||||||
|
|
||||||
if (gCurGraphNodeMasterList == NULL && node->node.children != NULL) {
|
if (gCurGraphNodeMasterList == NULL && node->node.children != NULL)
|
||||||
|
{
|
||||||
gCurGraphNodeMasterList = node;
|
gCurGraphNodeMasterList = node;
|
||||||
for (i = 0; i < GFX_NUM_MASTER_LISTS; i++) {
|
for (i = 0; i < GFX_NUM_MASTER_LISTS; i++)
|
||||||
node->listHeads[i] = NULL;
|
{
|
||||||
|
node->listHeads[0][i] = NULL;
|
||||||
|
node->listHeads[1][i] = NULL;
|
||||||
}
|
}
|
||||||
geo_process_node_and_siblings(node->node.children);
|
geo_process_node_and_siblings(node->node.children);
|
||||||
geo_process_master_list_sub(node);
|
geo_process_master_list_sub(gCurGraphNodeMasterList);
|
||||||
gCurGraphNodeMasterList = NULL;
|
gCurGraphNodeMasterList = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -768,8 +812,8 @@ static void geo_process_shadow(struct GraphNodeShadow *node) {
|
|||||||
* Since (0,0,0) is unaffected by rotation, columns 0, 1 and 2 are ignored.
|
* Since (0,0,0) is unaffected by rotation, columns 0, 1 and 2 are ignored.
|
||||||
*/
|
*/
|
||||||
static s32 obj_is_in_view(struct GraphNodeObject *node, Mat4 matrix) {
|
static s32 obj_is_in_view(struct GraphNodeObject *node, Mat4 matrix) {
|
||||||
s16 cullingRadius;
|
s32 cullingRadius;
|
||||||
s16 halfFov; // half of the fov in in-game angle units instead of degrees
|
s32 halfFov; // half of the fov in in-game angle units instead of degrees
|
||||||
struct GraphNode *geo;
|
struct GraphNode *geo;
|
||||||
f32 hScreenEdge;
|
f32 hScreenEdge;
|
||||||
|
|
||||||
|
|||||||
@@ -286,6 +286,7 @@ struct Object *allocate_object(struct ObjectNode *objList) {
|
|||||||
obj->header.gfx.pos[1] = -10000.0f;
|
obj->header.gfx.pos[1] = -10000.0f;
|
||||||
obj->header.gfx.pos[2] = -10000.0f;
|
obj->header.gfx.pos[2] = -10000.0f;
|
||||||
obj->header.gfx.throwMatrix = NULL;
|
obj->header.gfx.throwMatrix = NULL;
|
||||||
|
obj->header.gfx.uCode = UCODE_REJ;
|
||||||
#ifdef PUPPYLIGHTS
|
#ifdef PUPPYLIGHTS
|
||||||
obj->oLightID = 0xFFFF;
|
obj->oLightID = 0xFFFF;
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user