From b45a089e15d79821b07be020db628e01a49b1fd2 Mon Sep 17 00:00:00 2001 From: TakaRikka <38417346+TakaRikka@users.noreply.github.com> Date: Thu, 4 Sep 2025 07:56:59 -0700 Subject: some J3D/misc cleanup (#2628) * some j3d cleanup * begin using uintptr_t * j3dgraphbase cleanup * j3dgraphanimator cleanup --- src/JSystem/J3DGraphBase/J3DShape.cpp | 114 +++++++++++++++++----------------- 1 file changed, 56 insertions(+), 58 deletions(-) (limited to 'src/JSystem/J3DGraphBase/J3DShape.cpp') diff --git a/src/JSystem/J3DGraphBase/J3DShape.cpp b/src/JSystem/J3DGraphBase/J3DShape.cpp index fee08feb08..b825f095b1 100644 --- a/src/JSystem/J3DGraphBase/J3DShape.cpp +++ b/src/JSystem/J3DGraphBase/J3DShape.cpp @@ -1,18 +1,13 @@ #include "JSystem/J3DGraphBase/J3DShape.h" #include "JSystem/J3DGraphBase/J3DPacket.h" #include "JSystem/J3DGraphBase/J3DVertex.h" -#include "dolphin/gd.h" -#include "dolphin/os.h" +#include "JSystem/J3DGraphBase/J3DFifo.h" +#include void J3DGDSetVtxAttrFmtv(_GXVtxFmt, GXVtxAttrFmtList const*, bool); void J3DFifoLoadPosMtxImm(Mtx, u32); void J3DFifoLoadNrmMtxImm(Mtx, u32); - -enum { - kVcdVatDLSize = 0xC0, -}; - void J3DShape::initialize() { mMaterial = NULL; mIndex = -1; @@ -62,19 +57,24 @@ void J3DShape::addTexMtxIndexInDL(GXAttr attr, u32 valueBase) { if (pnmtxidxOffs == -1) return; - for (u16 i = 0; i < getMtxGroupNum(); i++) + for (u16 i = 0; i < (u16)getMtxGroupNum(); i++) getShapeDraw(i)->addTexMtxIndexInDL(stride, attrOffs, (s32)valueBase); } /* 80314CBC-80314DA8 30F5FC 00EC+00 0/0 1/1 0/0 .text addTexMtxIndexInVcd__8J3DShapeF7_GXAttr */ void J3DShape::addTexMtxIndexInVcd(GXAttr attr) { + u32 kSize[] = {0, 1, 1, 2}; // stripped data + s32 attrIdx = -1; - GXVtxDescList* vtxDesc = mVtxDesc; + s32 attrOffs = -1; + s32 stride = 0; + + GXVtxDescList* vtxDesc = getVtxDesc(); s32 attrCount = 0; for (; vtxDesc->attr != GX_VA_NULL; attrCount++, vtxDesc++) { if (vtxDesc->attr == GX_VA_PNMTXIDX) - attrIdx = 0; + attrIdx = stride; } if (attrIdx == -1) @@ -83,17 +83,21 @@ void J3DShape::addTexMtxIndexInVcd(GXAttr attr) { GXVtxDescList* newVtxDesc = new GXVtxDescList[attrCount + 2]; bool inserted = false; - vtxDesc = mVtxDesc; + vtxDesc = getVtxDesc(); GXVtxDescList* dst = newVtxDesc; for (; vtxDesc->attr != GX_VA_NULL; dst++, vtxDesc++) { if ((attr < vtxDesc->attr) && !inserted) { dst->attr = attr; dst->type = GX_DIRECT; - inserted = true; + attrOffs = stride; dst++; + + inserted = true; } - *dst = *vtxDesc; + dst->attr = vtxDesc->attr; + dst->type = vtxDesc->type; + stride = stride + kSize[vtxDesc->type]; } dst->attr = GX_VA_NULL; @@ -104,7 +108,7 @@ void J3DShape::addTexMtxIndexInVcd(GXAttr attr) { /* 80314DA8-80314E28 30F6E8 0080+00 0/0 1/1 0/0 .text * calcNBTScale__8J3DShapeFRC3VecPA3_A3_fPA3_A3_f */ -void J3DShape::calcNBTScale(Vec const& param_0, f32 (*param_1)[3][3], f32 (*param_2)[3][3]) { +void J3DShape::calcNBTScale(const Vec& param_0, f32 (*param_1)[3][3], f32 (*param_2)[3][3]) { for (u16 i = 0; i < mMtxGroupNum; i++) mShapeMtx[i]->calcNBTScale(param_0, param_1, param_2); } @@ -114,28 +118,31 @@ u16 J3DShape::countBumpMtxNum() const { u16 num = 0; for (u16 i = 0; i < mMtxGroupNum; i++) num += mShapeMtx[i]->getUseMtxNum(); + return num; } /* 80314E98-80314EB0 30F7D8 0018+00 1/1 0/0 0/0 .text J3DLoadCPCmd__FUcUl */ -void J3DLoadCPCmd(u8 cmd, u32 param) { - GXWGFifo.u8 = GX_LOAD_CP_REG; - GXWGFifo.u8 = cmd; - GXWGFifo.u32 = param; +void J3DLoadCPCmd(u8 addr, u32 val) { + GXCmd1u8(GX_LOAD_CP_REG); + GXCmd1u8(addr); + GXCmd1u32(val); } /* 80314EB0-80314EEC 30F7F0 003C+00 1/1 0/0 0/0 .text J3DLoadArrayBasePtr__F7_GXAttrPv */ -static void J3DLoadArrayBasePtr(_GXAttr attr, void* data) { +static void J3DLoadArrayBasePtr(GXAttr attr, void* data) { u32 idx = (attr == GX_VA_NBT) ? 1 : (attr - GX_VA_POS); - J3DLoadCPCmd(0xA0 + idx, ((u32)data & 0x7FFFFFFF)); + J3DLoadCPCmd(0xA0 + idx, ((uintptr_t)data & 0x7FFFFFFF)); } /* 80314EEC-80314F5C 30F82C 0070+00 3/3 0/0 0/0 .text loadVtxArray__8J3DShapeCFv */ void J3DShape::loadVtxArray() const { J3DLoadArrayBasePtr(GX_VA_POS, j3dSys.getVtxPos()); + if (!mHasNBT) { J3DLoadArrayBasePtr(GX_VA_NRM, j3dSys.getVtxNrm()); } + J3DLoadArrayBasePtr(GX_VA_CLR0, j3dSys.getVtxCol()); } @@ -146,6 +153,7 @@ bool J3DShape::isSameVcdVatCmd(J3DShape* other) { for (u32 i = 0; i < kVcdVatDLSize; i++) if (a[i] != b[i]) return false; + return true; } @@ -153,9 +161,9 @@ bool J3DShape::isSameVcdVatCmd(J3DShape* other) { void J3DShape::makeVtxArrayCmd() { GXVtxAttrFmtList* vtxAttr = mVertexData->getVtxAttrFmtList(); - u8 stride[0x0C]; - void* array[0x0C]; - for (u32 i = 0; i < 0x0C; i++) { + u8 stride[12]; + void* array[12]; + for (u32 i = 0; i < 12; i++) { stride[i] = 0; array[i] = 0; } @@ -164,27 +172,28 @@ void J3DShape::makeVtxArrayCmd() { switch (vtxAttr->attr) { case GX_VA_POS: { if (vtxAttr->type == GX_F32) - stride[vtxAttr->attr - GX_VA_POS] = 0x0C; + stride[vtxAttr->attr - GX_VA_POS] = 12; else - stride[vtxAttr->attr - GX_VA_POS] = 0x06; + stride[vtxAttr->attr - GX_VA_POS] = 6; + array[vtxAttr->attr - GX_VA_POS] = mVertexData->getVtxPosArray(); - mVertexData->setVtxPosFrac(vtxAttr->frac); + mVertexData->setVtxPosFrac((u8)vtxAttr->frac); mVertexData->setVtxPosType((GXCompType)vtxAttr->type); } break; case GX_VA_NRM: { if (vtxAttr->type == GX_F32) - stride[vtxAttr->attr - GX_VA_POS] = 0x0C; + stride[vtxAttr->attr - GX_VA_POS] = 12; else - stride[vtxAttr->attr - GX_VA_POS] = 0x06; + stride[vtxAttr->attr - GX_VA_POS] = 6; + array[vtxAttr->attr - GX_VA_POS] = mVertexData->getVtxNrmArray(); - mVertexData->setVtxNrmFrac(vtxAttr->frac); + mVertexData->setVtxNrmFrac((u8)vtxAttr->frac); mVertexData->setVtxNrmType((GXCompType)vtxAttr->type); } break; case GX_VA_CLR0: case GX_VA_CLR1: { - stride[vtxAttr->attr - GX_VA_POS] = 0x04; - array[vtxAttr->attr - GX_VA_POS] = - mVertexData->getVtxColorArray(vtxAttr->attr - GX_VA_CLR0); + stride[vtxAttr->attr - GX_VA_POS] = 4; + array[vtxAttr->attr - GX_VA_POS] = mVertexData->getVtxColorArray(vtxAttr->attr - GX_VA_CLR0); } break; case GX_VA_TEX0: case GX_VA_TEX1: @@ -195,11 +204,11 @@ void J3DShape::makeVtxArrayCmd() { case GX_VA_TEX6: case GX_VA_TEX7: { if (vtxAttr->type == GX_F32) - stride[vtxAttr->attr - GX_VA_POS] = 0x08; + stride[vtxAttr->attr - GX_VA_POS] = 8; else - stride[vtxAttr->attr - GX_VA_POS] = 0x04; - array[vtxAttr->attr - GX_VA_POS] = - mVertexData->getVtxTexCoordArray(vtxAttr->attr - GX_VA_TEX0); + stride[vtxAttr->attr - GX_VA_POS] = 4; + + array[vtxAttr->attr - GX_VA_POS] = mVertexData->getVtxTexCoordArray(vtxAttr->attr - GX_VA_TEX0); } break; default: break; @@ -218,7 +227,7 @@ void J3DShape::makeVtxArrayCmd() { } } - for (u32 i = 0; i < 0x0C; i++) { + for (u32 i = 0; i < 12; i++) { if (array[i] != 0) GDSetArray((GXAttr)(i + GX_VA_POS), array[i], stride[i]); else @@ -226,19 +235,9 @@ void J3DShape::makeVtxArrayCmd() { } } -/* ############################################################################################## */ -/* 804515C8-804515CC 000AC8 0004+00 1/1 0/0 0/0 .sbss sInterruptFlag$903 */ -static s32 sInterruptFlag; - -/* 804515CC-804515D0 000ACC 0004+00 1/1 0/0 0/0 .sbss None */ -static s8 sInitInterruptFlag; - /* 80315260-80315300 30FBA0 00A0+00 1/1 2/2 0/0 .text makeVcdVatCmd__8J3DShapeFv */ void J3DShape::makeVcdVatCmd() { - if (!sInitInterruptFlag) { - sInterruptFlag = OSDisableInterrupts(); - sInitInterruptFlag = true; - } + static BOOL sInterruptFlag = OSDisableInterrupts(); OSDisableScheduler(); GDLObj gdl_obj; @@ -254,10 +253,13 @@ void J3DShape::makeVcdVatCmd() { OSRestoreInterrupts(sInterruptFlag); } -/* ############################################################################################## */ /* 804515D0-804515D4 000AD0 0004+00 5/5 25/25 9/9 .sbss sOldVcdVatCmd__8J3DShape */ void* J3DShape::sOldVcdVatCmd; +void J3DShape::loadCurrentMtx() const { + mCurrentMtx.load(); +} + /* 80315300-80315398 30FC40 0098+00 2/2 6/6 3/3 .text loadPreDrawSetting__8J3DShapeCFv */ void J3DShape::loadPreDrawSetting() const { if (sOldVcdVatCmd != mVcdVatCmd) { @@ -268,9 +270,8 @@ void J3DShape::loadPreDrawSetting() const { mCurrentMtx.load(); } -/* ############################################################################################## */ /* 804515D4-804515D8 000AD4 0004+00 3/3 0/0 0/0 .sbss None */ -static u8 data_804515D4[4]; +bool J3DShape::sEnvelopeFlag; /* 80315398-8031544C 30FCD8 00B4+00 1/1 0/0 0/0 .text setArrayAndBindPipeline__8J3DShapeCFv */ void J3DShape::setArrayAndBindPipeline() const { @@ -279,10 +280,8 @@ void J3DShape::setArrayAndBindPipeline() const { j3dSys.setModelDrawMtx(mDrawMtx[*mCurrentViewNo]); j3dSys.setModelNrmMtx(mNrmMtx[*mCurrentViewNo]); J3DShapeMtx::sCurrentScaleFlag = mScaleFlagArray; - // The below struct_804515B0 is actually a continuation of sCurrentScaleFlag, I believe? - // Also, there seems to be an extra entry in the array that's only there in DEBUG builds. J3DShapeMtx::sNBTFlag = mHasNBT; - data_804515D4[0] = mHasPNMTXIdx; + sEnvelopeFlag = mHasPNMTXIdx; J3DShapeMtx::sTexMtxLoadType = getTexMtxLoadType(); } @@ -293,13 +292,12 @@ void J3DShape::drawFast() const { sOldVcdVatCmd = mVcdVatCmd; } - if (data_804515D4[0] != 0 && !mHasPNMTXIdx) + if (sEnvelopeFlag != 0 && !mHasPNMTXIdx) mCurrentMtx.load(); setArrayAndBindPipeline(); if (!checkFlag(J3DShpFlag_NoMtx)) { - // LOD flag shenanigans - if (J3DShapeMtx::getLODFlag() != 0) + if (J3DShapeMtx::getLODFlag()) J3DShapeMtx::resetMtxLoadCache(); for (u16 n = mMtxGroupNum, i = 0; i < n; i++) { @@ -344,7 +342,7 @@ void J3DShape::simpleDrawCache() const { sOldVcdVatCmd = mVcdVatCmd; } - if (data_804515D4[0] != 0 && !mHasPNMTXIdx) + if (sEnvelopeFlag && !mHasPNMTXIdx) mCurrentMtx.load(); loadVtxArray(); -- cgit v1.2.3