mirror of https://github.com/zeldaret/tp.git
J3DShape: OK progress
This commit is contained in:
parent
d954f9348c
commit
2358fd042d
|
|
@ -1,18 +0,0 @@
|
|||
lbl_80314F5C:
|
||||
/* 80314F5C 80 84 00 2C */ lwz r4, 0x2c(r4)
|
||||
/* 80314F60 80 63 00 2C */ lwz r3, 0x2c(r3)
|
||||
/* 80314F64 38 00 00 C0 */ li r0, 0xc0
|
||||
/* 80314F68 7C 09 03 A6 */ mtctr r0
|
||||
lbl_80314F6C:
|
||||
/* 80314F6C 88 A4 00 00 */ lbz r5, 0(r4)
|
||||
/* 80314F70 88 03 00 00 */ lbz r0, 0(r3)
|
||||
/* 80314F74 7C 05 00 40 */ cmplw r5, r0
|
||||
/* 80314F78 41 82 00 0C */ beq lbl_80314F84
|
||||
/* 80314F7C 38 60 00 00 */ li r3, 0
|
||||
/* 80314F80 4E 80 00 20 */ blr
|
||||
lbl_80314F84:
|
||||
/* 80314F84 38 63 00 01 */ addi r3, r3, 1
|
||||
/* 80314F88 38 84 00 01 */ addi r4, r4, 1
|
||||
/* 80314F8C 42 00 FF E0 */ bdnz lbl_80314F6C
|
||||
/* 80314F90 38 60 00 01 */ li r3, 1
|
||||
/* 80314F94 4E 80 00 20 */ blr
|
||||
|
|
@ -1,42 +0,0 @@
|
|||
lbl_80315260:
|
||||
/* 80315260 94 21 FF E0 */ stwu r1, -0x20(r1)
|
||||
/* 80315264 7C 08 02 A6 */ mflr r0
|
||||
/* 80315268 90 01 00 24 */ stw r0, 0x24(r1)
|
||||
/* 8031526C 93 E1 00 1C */ stw r31, 0x1c(r1)
|
||||
/* 80315270 7C 7F 1B 78 */ mr r31, r3
|
||||
/* 80315274 88 0D 90 4C */ lbz r0, data_804515CC(r13)
|
||||
/* 80315278 7C 00 07 75 */ extsb. r0, r0
|
||||
/* 8031527C 40 82 00 14 */ bne lbl_80315290
|
||||
/* 80315280 48 02 84 75 */ bl OSDisableInterrupts
|
||||
/* 80315284 90 6D 90 48 */ stw r3, sInterruptFlag(r13)
|
||||
/* 80315288 38 00 00 01 */ li r0, 1
|
||||
/* 8031528C 98 0D 90 4C */ stb r0, data_804515CC(r13)
|
||||
lbl_80315290:
|
||||
/* 80315290 48 02 BA 35 */ bl OSDisableScheduler
|
||||
/* 80315294 38 61 00 08 */ addi r3, r1, 8
|
||||
/* 80315298 80 9F 00 2C */ lwz r4, 0x2c(r31)
|
||||
/* 8031529C 38 A0 00 C0 */ li r5, 0xc0
|
||||
/* 803152A0 48 04 BC F9 */ bl GDInitGDLObj
|
||||
/* 803152A4 38 01 00 08 */ addi r0, r1, 8
|
||||
/* 803152A8 90 0D 94 00 */ stw r0, __GDCurrentDL(r13)
|
||||
/* 803152AC 80 7F 00 30 */ lwz r3, 0x30(r31)
|
||||
/* 803152B0 48 04 BE 55 */ bl GDSetVtxDescv
|
||||
/* 803152B4 7F E3 FB 78 */ mr r3, r31
|
||||
/* 803152B8 4B FF FC E1 */ bl makeVtxArrayCmd__8J3DShapeFv
|
||||
/* 803152BC 80 7F 00 4C */ lwz r3, 0x4c(r31)
|
||||
/* 803152C0 80 83 00 14 */ lwz r4, 0x14(r3)
|
||||
/* 803152C4 38 60 00 00 */ li r3, 0
|
||||
/* 803152C8 88 BF 00 34 */ lbz r5, 0x34(r31)
|
||||
/* 803152CC 4B FF 88 39 */ bl J3DGDSetVtxAttrFmtv__F9_GXVtxFmtPC17_GXVtxAttrFmtListb
|
||||
/* 803152D0 48 04 BD 0D */ bl GDPadCurr32
|
||||
/* 803152D4 48 04 BC DD */ bl GDFlushCurrToMem
|
||||
/* 803152D8 38 00 00 00 */ li r0, 0
|
||||
/* 803152DC 90 0D 94 00 */ stw r0, __GDCurrentDL(r13)
|
||||
/* 803152E0 48 02 BA 25 */ bl OSEnableScheduler
|
||||
/* 803152E4 80 6D 90 48 */ lwz r3, sInterruptFlag(r13)
|
||||
/* 803152E8 48 02 84 35 */ bl OSRestoreInterrupts
|
||||
/* 803152EC 83 E1 00 1C */ lwz r31, 0x1c(r1)
|
||||
/* 803152F0 80 01 00 24 */ lwz r0, 0x24(r1)
|
||||
/* 803152F4 7C 08 03 A6 */ mtlr r0
|
||||
/* 803152F8 38 21 00 20 */ addi r1, r1, 0x20
|
||||
/* 803152FC 4E 80 00 20 */ blr
|
||||
|
|
@ -56,7 +56,7 @@ public:
|
|||
void setDrawMtxDataPointer(J3DDrawMtxData* pMtxData) { mDrawMtxData = pMtxData; }
|
||||
void setVertexDataPointer(J3DVertexData* pVtxData) { mVertexData = pVtxData; }
|
||||
void* getVcdVatCmd() const { return mVcdVatCmd; }
|
||||
void setVcdVatCmd(void* pVatCmd) { mVcdVatCmd = pVatCmd; }
|
||||
void setVcdVatCmd(void* pVatCmd) { mVcdVatCmd = (u8*)pVatCmd; }
|
||||
void show() { offFlag(J3DShpFlag_Visible); }
|
||||
void hide() { onFlag(J3DShpFlag_Visible); }
|
||||
void setCurrentViewNoPtr(u32* pViewNoPtr) { mCurrentViewNo = pViewNoPtr; }
|
||||
|
|
@ -81,7 +81,7 @@ private:
|
|||
/* 0x10 */ f32 mRadius;
|
||||
/* 0x14 */ Vec mMin;
|
||||
/* 0x20 */ Vec mMax;
|
||||
/* 0x2C */ void* mVcdVatCmd;
|
||||
/* 0x2C */ u8* mVcdVatCmd;
|
||||
/* 0x30 */ GXVtxDescList* mVtxDesc;
|
||||
/* 0x34 */ bool mHasNBT;
|
||||
/* 0x38 */ J3DShapeMtx** mShapeMtx;
|
||||
|
|
|
|||
|
|
@ -30,22 +30,24 @@ public:
|
|||
|
||||
u32 getVtxNum() const { return mVtxNum; }
|
||||
|
||||
GXVtxAttrFmtList* getVtxAttrFmtList() { return mVtxAttrFmtList; }
|
||||
|
||||
private:
|
||||
/* 0x00 */ u32 mVtxNum;
|
||||
/* 0x04 */ u32 mNrmNum;
|
||||
/* 0x08 */ u32 mColNum;
|
||||
/* 0x0C */ u32 field_0xc;
|
||||
/* 0x10 */ u32 field_0x10;
|
||||
/* 0x14 */ void* mVtxAttrFmtList;
|
||||
/* 0x14 */ GXVtxAttrFmtList* mVtxAttrFmtList;
|
||||
/* 0x18 */ void* mVtxPosArray;
|
||||
/* 0x1C */ void* mVtxNrmArray;
|
||||
/* 0x20 */ void* mVtxNBTArray;
|
||||
/* 0x24 */ _GXColor* mVtxColorArray[2];
|
||||
/* 0x24 */ GXColor* mVtxColorArray[2];
|
||||
/* 0x2C */ void* mVtxTexCoordArray[8];
|
||||
/* 0x4C */ u8 mVtxPosFrac;
|
||||
/* 0x50 */ _GXCompType mVtxPosType;
|
||||
/* 0x50 */ GXCompType mVtxPosType;
|
||||
/* 0x54 */ u8 mVtxNrmFrac;
|
||||
/* 0x58 */ _GXCompType mVtxNrmType;
|
||||
/* 0x58 */ GXCompType mVtxNrmType;
|
||||
};
|
||||
|
||||
class J3DVertexBuffer {
|
||||
|
|
@ -64,7 +66,7 @@ public:
|
|||
|
||||
void setCurrentVtxNrm(void* pVtxNrm) { mCurrentVtxNrm = pVtxNrm; }
|
||||
|
||||
void setCurrentVtxCol(_GXColor* pVtxCol) { mCurrentVtxCol = pVtxCol; }
|
||||
void setCurrentVtxCol(GXColor* pVtxCol) { mCurrentVtxCol = pVtxCol; }
|
||||
|
||||
void frameInit() {
|
||||
setCurrentVtxPos(mVtxPosArray[0]);
|
||||
|
|
@ -76,12 +78,12 @@ private:
|
|||
/* 0x00 */ J3DVertexData* mVtxData;
|
||||
/* 0x04 */ void* mVtxPosArray[2];
|
||||
/* 0x0C */ void* mVtxNrmArray[2];
|
||||
/* 0x14 */ _GXColor* mVtxColArray[2];
|
||||
/* 0x14 */ GXColor* mVtxColArray[2];
|
||||
/* 0x1C */ void* mTransformedVtxPosArray[2];
|
||||
/* 0x24 */ void* mTransformedVtxNrmArray[2];
|
||||
/* 0x2C */ void* mCurrentVtxPos;
|
||||
/* 0x30 */ void* mCurrentVtxNrm;
|
||||
/* 0x34 */ _GXColor* mCurrentVtxCol;
|
||||
/* 0x34 */ GXColor* mCurrentVtxCol;
|
||||
}; // Size: 0x38
|
||||
|
||||
struct VertexNormal {
|
||||
|
|
|
|||
|
|
@ -10,8 +10,6 @@ struct GDLObj {
|
|||
/* 0xC */ u8* end;
|
||||
}; // Size: 0x10
|
||||
|
||||
extern "C" void GDInitGDLObj(GDLObj*, u8*, u32);
|
||||
|
||||
extern GDLObj* __GDCurrentDL;
|
||||
|
||||
inline void GDSetCurrent(GDLObj* obj) {
|
||||
|
|
@ -22,4 +20,12 @@ inline u32 GDGetGDLObjOffset(GDLObj* obj) {
|
|||
return (u32)(obj->ptr - obj->start);
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
|
||||
void GDInitGDLObj(GDLObj*, u8*, u32);
|
||||
void GDFlushCurrToMem();
|
||||
void GDPadCurr32();
|
||||
|
||||
}
|
||||
|
||||
#endif /* GDBASE_H */
|
||||
|
|
|
|||
|
|
@ -2,5 +2,14 @@
|
|||
#define GDGEOMETRY_H
|
||||
|
||||
#include "dolphin/types.h"
|
||||
#include "dolphin/gx/GX.h"
|
||||
|
||||
extern "C" {
|
||||
|
||||
void GDSetVtxDescv(GXVtxDescList*);
|
||||
void GDSetArray(GXAttr attr, const void* data, u8 stride);
|
||||
void GDSetArrayRaw(GXAttr attr, u32 data, u8 stride);
|
||||
|
||||
}
|
||||
|
||||
#endif /* GDGEOMETRY_H */
|
||||
|
|
|
|||
|
|
@ -85,6 +85,13 @@ typedef struct _GXTexRegion {
|
|||
/* 0x00 */ u8 dummy[0x10];
|
||||
} GXTexRegion; // Size: 0x10
|
||||
|
||||
typedef struct _GXVtxAttrFmtList {
|
||||
/* 0x00 */ u32 mAttrib; // GXAttr
|
||||
/* 0x04 */ u32 mCompCnt; // GXCompCnt
|
||||
/* 0x08 */ u32 mCompType; // GXCompType
|
||||
/* 0x0C */ u8 mCompShift;
|
||||
} GXVtxAttrFmtList; // Size: 0x10
|
||||
|
||||
typedef enum _GXPrimitive {
|
||||
/* 0x80 */ GX_QUADS = 0x80,
|
||||
/* 0x90 */ GX_TRIANGLES = 0x90,
|
||||
|
|
|
|||
|
|
@ -5,15 +5,13 @@
|
|||
|
||||
#include "JSystem/J3DGraphBase/J3DShape.h"
|
||||
#include "JSystem/J3DGraphBase/J3DSys.h"
|
||||
#include "JSystem/J3DGraphBase/J3DVertex.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/gd/GDBase.h"
|
||||
#include "dolphin/gd/GDGeometry.h"
|
||||
#include "dolphin/os/OS.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct _GXVtxAttrFmtList {};
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
|
|
@ -42,6 +40,8 @@ extern "C" u8 sOldVcdVatCmd__8J3DShape[4];
|
|||
// External References:
|
||||
//
|
||||
|
||||
void J3DGDSetVtxAttrFmtv(_GXVtxFmt, GXVtxAttrFmtList const*, bool);
|
||||
|
||||
extern "C" void* __nwa__FUl();
|
||||
extern "C" void J3DGDSetVtxAttrFmtv__F9_GXVtxFmtPC17_GXVtxAttrFmtListb();
|
||||
extern "C" void J3DFifoLoadPosMtxImm__FPA4_fUl();
|
||||
|
|
@ -49,16 +49,6 @@ extern "C" void J3DFifoLoadNrmMtxImm__FPA4_fUl();
|
|||
extern "C" void resetMtxLoadCache__11J3DShapeMtxFv();
|
||||
extern "C" void addTexMtxIndexInDL__12J3DShapeDrawFUlUlUl();
|
||||
extern "C" void draw__12J3DShapeDrawCFv();
|
||||
extern "C" void OSDisableInterrupts();
|
||||
extern "C" void OSRestoreInterrupts();
|
||||
extern "C" void OSDisableScheduler();
|
||||
extern "C" void OSEnableScheduler();
|
||||
extern "C" void GDInitGDLObj();
|
||||
extern "C" void GDFlushCurrToMem();
|
||||
extern "C" void GDPadCurr32();
|
||||
extern "C" void GDSetVtxDescv();
|
||||
extern "C" void GDSetArray();
|
||||
extern "C" void GDSetArrayRaw();
|
||||
extern "C" void _savegpr_27();
|
||||
extern "C" void _savegpr_28();
|
||||
extern "C" void _savegpr_29();
|
||||
|
|
@ -70,7 +60,6 @@ extern "C" u32 sCurrentPipeline__11J3DShapeMtx;
|
|||
extern "C" u32 sCurrentScaleFlag__11J3DShapeMtx;
|
||||
extern "C" extern u8 struct_804515B0[4];
|
||||
extern "C" u32 sTexMtxLoadType__11J3DShapeMtx;
|
||||
extern "C" extern u8 __GDCurrentDL[4];
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
|
|
@ -165,14 +154,14 @@ void J3DShape::loadVtxArray() const {
|
|||
}
|
||||
|
||||
/* 80314F5C-80314F98 30F89C 003C+00 0/0 1/1 0/0 .text isSameVcdVatCmd__8J3DShapeFP8J3DShape */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm bool J3DShape::isSameVcdVatCmd(J3DShape* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/J3DGraphBase/J3DShape/isSameVcdVatCmd__8J3DShapeFP8J3DShape.s"
|
||||
bool J3DShape::isSameVcdVatCmd(J3DShape* other) {
|
||||
u8 *a = other->mVcdVatCmd;
|
||||
u8 *b = mVcdVatCmd;
|
||||
for (u32 i = 0; i < 0xC0; i++)
|
||||
if (a[i] != b[i])
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 80314F98-80315260 30F8D8 02C8+00 1/1 0/0 0/0 .text makeVtxArrayCmd__8J3DShapeFv */
|
||||
#pragma push
|
||||
|
|
@ -186,20 +175,31 @@ asm void J3DShape::makeVtxArrayCmd() {
|
|||
|
||||
/* ############################################################################################## */
|
||||
/* 804515C8-804515CC 000AC8 0004+00 1/1 0/0 0/0 .sbss sInterruptFlag$903 */
|
||||
static u8 sInterruptFlag[4];
|
||||
static s32 sInterruptFlag;
|
||||
|
||||
/* 804515CC-804515D0 000ACC 0004+00 1/1 0/0 0/0 .sbss None */
|
||||
static u8 data_804515CC[4];
|
||||
static s8 sInitInterruptFlag;
|
||||
|
||||
/* 80315260-80315300 30FBA0 00A0+00 1/1 2/2 0/0 .text makeVcdVatCmd__8J3DShapeFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void J3DShape::makeVcdVatCmd() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/J3DGraphBase/J3DShape/makeVcdVatCmd__8J3DShapeFv.s"
|
||||
void J3DShape::makeVcdVatCmd() {
|
||||
if (!sInitInterruptFlag) {
|
||||
sInterruptFlag = OSDisableInterrupts();
|
||||
sInitInterruptFlag = true;
|
||||
}
|
||||
OSDisableScheduler();
|
||||
|
||||
GDLObj gdl_obj;
|
||||
GDInitGDLObj(&gdl_obj, mVcdVatCmd, 0xC0);
|
||||
GDSetCurrent(&gdl_obj);
|
||||
GDSetVtxDescv(mVtxDesc);
|
||||
makeVtxArrayCmd();
|
||||
J3DGDSetVtxAttrFmtv(GX_VTXFMT0, mVertexData->getVtxAttrFmtList(), mHasNBT);
|
||||
GDPadCurr32();
|
||||
GDFlushCurrToMem();
|
||||
GDSetCurrent(NULL);
|
||||
OSEnableScheduler();
|
||||
OSRestoreInterrupts(sInterruptFlag);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 804515D0-804515D4 000AD0 0004+00 5/5 25/25 9/9 .sbss sOldVcdVatCmd__8J3DShape */
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
// Translation Unit: GDGeometry
|
||||
//
|
||||
|
||||
#include "dolphin/gd/GDGeometry.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue