mirror of
https://github.com/zeldaret/tp
synced 2026-05-29 08:43:05 -04:00
some J3D/misc cleanup (#2628)
* some j3d cleanup * begin using uintptr_t * j3dgraphbase cleanup * j3dgraphanimator cleanup
This commit is contained in:
@@ -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 <dolphin/gd.h>
|
||||
|
||||
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();
|
||||
|
||||
Reference in New Issue
Block a user