J3DMatBlock, J3DMaterialFactory work (#2233)

This commit is contained in:
Caroline Madsen
2024-11-01 13:46:27 -07:00
committed by GitHub
parent 09423b6fa0
commit 21cb60624a
17 changed files with 896 additions and 5278 deletions
File diff suppressed because it is too large Load Diff
@@ -113,6 +113,7 @@ public:
*/
class J3DPatchedMaterial : public J3DMaterial {
public:
J3DPatchedMaterial() { initialize(); }
/* 80316FB8 */ void initialize();
/* 80316FD8 */ virtual void makeDisplayList();
+1 -1
View File
@@ -57,7 +57,7 @@ public:
void setCurrentTexMtx(u8 param_1, u8 param_2, u8 param_3, u8 param_4,
u8 param_5, u8 param_6, u8 param_7, u8 param_8) {
mMtxIdxRegA = ((param_1 & 0xff) << 6) | (param_2 << 0xc)| (param_3 << 0x12) | (param_4 << 0x18);
mMtxIdxRegA = (param_1 << 6) | (param_2 << 0xc) | (param_3 << 0x12) | (param_4 << 0x18);
mMtxIdxRegB = (param_5) | param_6 << 6 | param_7 << 0xc | param_8 << 0x12;
}
};
+1 -1
View File
@@ -65,7 +65,7 @@ public:
/* 80313BF0 */ virtual void calcNBTScale(Vec const&, f32 (*)[3][3], f32 (*)[3][3]);
static J3DShapeMtx_LoadFunc sMtxLoadPipeline[4];
static u16 sMtxLoadCache[10 + 2 /* padding */];
static u16 sMtxLoadCache[10];
static u32 sCurrentPipeline;
static u8* sCurrentScaleFlag;
static u8 sNBTFlag;
@@ -96,6 +96,7 @@ struct J3DTexCoord : public J3DTexCoordInfo {
u8 getTexGenMtx() { return mTexGenMtx & 0xff; }
u16 getTexMtxReg() { return mTexMtxReg & 0xff; }
void setTexGenMtx(u8 param_1) { mTexGenMtx = param_1; }
void setTexMtxReg(u16 reg) { mTexMtxReg = reg; }
J3DTexCoord& operator=(const J3DTexCoord& other) {
// Fake match (__memcpy or = doesn't match)
*(u32*)this = *(u32*)&other;
@@ -143,8 +143,8 @@ public:
u16 getMaterialID(int idx) const { return mpMaterialID[idx]; }
u8 getMaterialMode(int idx) const { return mpMaterialInitData[mpMaterialID[idx]].mMaterialMode; }
static u32 getMdlDataFlag_TevStageNum(u32 flags) { return (flags >> 0x10) & 0x1f; }
static u32 getMdlDataFlag_TexGenFlag(u32 flags) { return flags & 0x0c000000; }
static int getMdlDataFlag_TevStageNum(u32 flags) { return (flags >> 0x10) & 0x1f; }
static int getMdlDataFlag_TexGenFlag(u32 flags) { return flags & 0x0c000000; }
static u32 getMdlDataFlag_ColorFlag(u32 flags) { return flags & 0xc0000000; }
static u32 getMdlDataFlag_PEFlag(u32 flags) { return flags & 0x30000000; }
@@ -78,6 +78,12 @@ public:
/* 80334074 */ J3DNBTScale newNBTScale(int) const;
u16 getMaterialID(u16 idx) { return mpMaterialID[idx]; }
u8 getMaterialMode(int idx) const { return mpMaterialInitData[mpMaterialID[idx]].mMaterialMode; }
static int getMdlDataFlag_TevStageNum(u32 flags) { return (flags >> 0x10) & 0x1f; }
static int getMdlDataFlag_TexGenFlag(u32 flags) { return flags & 0x0c000000; }
static u32 getMdlDataFlag_ColorFlag(u32 flags) { return flags & 0xc0000000; }
static u32 getMdlDataFlag_PEFlag(u32 flags) { return flags & 0x30000000; }
/* 0x00 */ u16 mMaterialNum;
/* 0x04 */ J3DMaterialInitData_v21* mpMaterialInitData;
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+3 -8
View File
@@ -4,6 +4,7 @@
//
#include "JSystem/J3DGraphBase/J3DShapeDraw.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "string.h"
#include "dolphin/gx.h"
#include "dolphin/os/OSCache.h"
@@ -34,8 +35,8 @@ u32 J3DShapeDraw::countVertex(u32 stride) {
return count;
}
#ifdef NONMATCHING
/* 80314974-80314ABC 30F2B4 0148+00 0/0 1/1 0/0 .text addTexMtxIndexInDL__12J3DShapeDrawFUlUlUl */
// NONMATCHING regalloc
void J3DShapeDraw::addTexMtxIndexInDL(u32 stride, u32 attrOffs, u32 valueBase) {
u32 byteNum = countVertex(stride);
u32 newSize = ALIGN_NEXT(mDisplayListSize + byteNum, 0x20);
@@ -58,8 +59,7 @@ void J3DShapeDraw::addTexMtxIndexInDL(u32 stride, u32 attrOffs, u32 valueBase) {
newDL += 2;
for (s32 i = 0; i < (u16)vtxNum; i++) {
// mul arg swap
u8* oldDLVtx = (&oldDL[stride * i + 3]);
u8* oldDLVtx = &oldDL[stride * i + 3];
u8 pnmtxidx = *oldDLVtx;
memcpy(newDL, oldDLVtx, attrOffs);
u8* newDL1 = &newDL[attrOffs];
@@ -79,11 +79,6 @@ void J3DShapeDraw::addTexMtxIndexInDL(u32 stride, u32 attrOffs, u32 valueBase) {
mDisplayList = newDLStart;
DCStoreRange(newDLStart, mDisplayListSize);
}
#else
void J3DShapeDraw::addTexMtxIndexInDL(u32 param_0, u32 param_1, u32 param_2) {
// NONMATCHING
}
#endif
/* 80314ABC-80314AD4 30F3FC 0018+00 0/0 1/1 0/0 .text __ct__12J3DShapeDrawFPCUcUl */
J3DShapeDraw::J3DShapeDraw(u8 const* displayList, u32 displayListSize) {
+26 -190
View File
@@ -6,113 +6,12 @@
#include "JSystem/J3DGraphBase/J3DShapeMtx.h"
#include "JSystem/J3DGraphAnimator/J3DModel.h"
#include "JSystem/J3DGraphBase/J3DGD.h"
#include "dol2asm.h"
#include "JSystem/J3DGraphBase/J3DMatBlock.h"
#include "JSystem/J3DGraphBase/J3DTexture.h"
#include "dolphin/types.h"
//
// Forward References:
//
extern "C" void resetMtxLoadCache__11J3DShapeMtxFv();
extern "C" void loadMtxIndx_PNGP__11J3DShapeMtxCFiUs();
extern "C" void loadMtxIndx_PCPU__11J3DShapeMtxCFiUs();
extern "C" void loadMtxIndx_NCPU__11J3DShapeMtxCFiUs();
extern "C" void loadMtxIndx_PNCPU__11J3DShapeMtxCFiUs();
extern "C" void loadExecute__17J3DDifferedTexMtxFPA4_Cf();
extern "C" void loadMtxConcatView_PNGP__21J3DShapeMtxConcatViewCFiUs();
extern "C" void loadMtxConcatView_PCPU__21J3DShapeMtxConcatViewCFiUs();
extern "C" void loadMtxConcatView_NCPU__21J3DShapeMtxConcatViewCFiUs();
extern "C" void loadMtxConcatView_PNCPU__21J3DShapeMtxConcatViewCFiUs();
extern "C" void loadMtxConcatView_PNGP_LOD__21J3DShapeMtxConcatViewCFiUs();
extern "C" void load__11J3DShapeMtxCFv();
extern "C" void calcNBTScale__11J3DShapeMtxFRC3VecPA3_A3_fPA3_A3_f();
extern "C" void load__21J3DShapeMtxConcatViewCFv();
extern "C" void loadNrmMtx__21J3DShapeMtxConcatViewCFiUsPA4_f();
extern "C" void load__16J3DShapeMtxMultiCFv();
extern "C" void calcNBTScale__16J3DShapeMtxMultiFRC3VecPA3_A3_fPA3_A3_f();
extern "C" void load__26J3DShapeMtxMultiConcatViewCFv();
extern "C" void loadNrmMtx__26J3DShapeMtxMultiConcatViewCFiUsPA4_f();
extern "C" void load__27J3DShapeMtxBBoardConcatViewCFv();
extern "C" void load__28J3DShapeMtxYBBoardConcatViewCFv();
extern "C" void __dt__28J3DShapeMtxYBBoardConcatViewFv();
extern "C" void getType__28J3DShapeMtxYBBoardConcatViewCFv();
extern "C" void loadNrmMtx__21J3DShapeMtxConcatViewCFiUs();
extern "C" void getUseMtxIndex__11J3DShapeMtxCFUs();
extern "C" void __dt__27J3DShapeMtxBBoardConcatViewFv();
extern "C" void getType__27J3DShapeMtxBBoardConcatViewCFv();
extern "C" void __dt__26J3DShapeMtxMultiConcatViewFv();
extern "C" void getType__26J3DShapeMtxMultiConcatViewCFv();
extern "C" void getUseMtxNum__26J3DShapeMtxMultiConcatViewCFv();
extern "C" void getUseMtxIndex__26J3DShapeMtxMultiConcatViewCFUs();
extern "C" void loadNrmMtx__26J3DShapeMtxMultiConcatViewCFiUs();
extern "C" void __dt__16J3DShapeMtxMultiFv();
extern "C" void getType__16J3DShapeMtxMultiCFv();
extern "C" void getUseMtxNum__16J3DShapeMtxMultiCFv();
extern "C" void getUseMtxIndex__16J3DShapeMtxMultiCFUs();
extern "C" void __dt__21J3DShapeMtxConcatViewFv();
extern "C" void getType__21J3DShapeMtxConcatViewCFv();
extern "C" void __dt__11J3DShapeMtxFv();
extern "C" void getType__11J3DShapeMtxCFv();
extern "C" void __sinit_J3DShapeMtx_cpp();
extern "C" u8 sMtxLoadPipeline__11J3DShapeMtx[48];
extern "C" u8 sMtxLoadPipeline__21J3DShapeMtxConcatView[48];
extern "C" u8 sMtxLoadLODPipeline__21J3DShapeMtxConcatView[48];
extern "C" u8 sMtxLoadCache__11J3DShapeMtx[20 + 4 /* padding */];
extern "C" u8 sCurrentPipeline__11J3DShapeMtx[4];
extern "C" u8 sCurrentScaleFlag__11J3DShapeMtx[4];
extern "C" u8 sTexMtxLoadType__11J3DShapeMtx[4];
extern "C" u8 sMtxPtrTbl__21J3DShapeMtxConcatView[8];
extern "C" u8 sTexGenBlock__17J3DDifferedTexMtx[4];
extern "C" u8 sTexMtxObj__17J3DDifferedTexMtx[4];
//
// External References:
//
void J3DFifoLoadPosMtxImm(Mtx, u32);
void J3DFifoLoadNrmMtxImm(Mtx, u32);
void J3DFifoLoadNrmMtxImm3x3(Mtx33, u32);
void J3DFifoLoadNrmMtxToTexMtx(Mtx, u32);
void J3DFifoLoadNrmMtxToTexMtx33(Mtx33, u32);
extern "C" bool getUseMtxNum__11J3DShapeMtxCFv();
extern "C" void __dl__FPv();
extern "C" void J3DFifoLoadPosMtxImm__FPA4_fUl();
extern "C" void J3DFifoLoadNrmMtxImm__FPA4_fUl();
extern "C" void J3DFifoLoadNrmMtxImm3x3__FPA3_fUl();
extern "C" void J3DFifoLoadNrmMtxToTexMtx__FPA4_fUl();
extern "C" void J3DFifoLoadNrmMtxToTexMtx3x3__FPA3_fUl();
extern "C" void loadPosMtxIndx__6J3DSysCFiUs();
extern "C" void loadNrmMtxIndx__6J3DSysCFiUs();
extern "C" void J3DCalcBBoardMtx__FPA4_f();
extern "C" void J3DCalcYBBoardMtx__FPA4_f();
extern "C" void J3DPSCalcInverseTranspose__FPA4_fPA3_f();
extern "C" void J3DGetTextureMtx__FRC17J3DTextureSRTInfoRC3VecPA4_f();
extern "C" void J3DGetTextureMtxOld__FRC17J3DTextureSRTInfoRC3VecPA4_f();
extern "C" void J3DGetTextureMtxMaya__FRC17J3DTextureSRTInfoPA4_f();
extern "C" void J3DGetTextureMtxMayaOld__FRC17J3DTextureSRTInfoPA4_f();
extern "C" void J3DScaleNrmMtx__FPA4_fRC3Vec();
extern "C" void J3DScaleNrmMtx33__FPA3_fRC3Vec();
extern "C" void J3DMtxProjConcat__FPA4_fPA4_fPA4_f();
extern "C" void __ptmf_scall();
extern "C" void _savegpr_22();
extern "C" void _savegpr_25();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_22();
extern "C" void _restgpr_25();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
//
// Declarations:
//
/* ############################################################################################## */
/* 80434C80-80434C98 0619A0 0014+04 2/2 0/0 0/0 .bss sMtxLoadCache__11J3DShapeMtx */
u16 J3DShapeMtx::sMtxLoadCache[10 + 2 /* padding */];
u16 J3DShapeMtx::sMtxLoadCache[10];
/* 803130A8-803130E4 30D9E8 003C+00 0/0 1/1 0/0 .text resetMtxLoadCache__11J3DShapeMtxFv
*/
@@ -180,54 +79,6 @@ J3DShapeMtxConcatView_LoadFunc J3DShapeMtxConcatView::sMtxLoadLODPipeline[4] = {
&loadMtxConcatView_PNCPU,
};
#ifndef NONMATCHING
/* 803CDAB0-803CDAE0 02ABD0 0030+00 1/1 0/0 0/0 .data qMtx$895 */
SECTION_DATA static u8 qMtx[48] = {
0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xBF, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* 803CDAE0-803CDB10 02AC00 0030+00 1/1 0/0 0/0 .data qMtx2$896 */
SECTION_DATA static u8 qMtx2[48] = {
0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* 803CDB10-803CDB40 -00001 0030+00 1/1 0/0 0/0 .data @1035 */
SECTION_DATA static void* lit_1035[12] = {
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x5B4),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x390),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x3CC),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x370),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x5B4),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x3DC),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x390),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x390),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x3CC),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x370),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x510),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x46C),
};
/* 803CDB40-803CDB70 -00001 0030+00 1/1 0/0 0/0 .data @1034 */
SECTION_DATA static void* lit_1034[12] = {
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x2B8),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0xCC),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0xE0),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0xB8),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x2B8),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x110),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0xCC),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0xCC),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0xE0),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0xB8),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x224),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x190),
};
#endif
/* 804515A8-804515AC 000AA8 0004+00 4/4 2/2 0/0 .sbss sCurrentPipeline__11J3DShapeMtx */
u32 J3DShapeMtx::sCurrentPipeline;
@@ -257,18 +108,9 @@ J3DTexGenBlock* J3DDifferedTexMtx::sTexGenBlock;
/* 804515C4-804515C8 000AC4 0004+00 1/1 2/2 0/0 .sbss sTexMtxObj__17J3DDifferedTexMtx */
J3DTexMtxObj* J3DDifferedTexMtx::sTexMtxObj;
/* 80456398-8045639C 004998 0004+00 2/2 0/0 0/0 .sdata2 @1032 */
SECTION_SDATA2 static u8 lit_1032[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 8031322C-80313828 30DB6C 05FC+00 7/5 0/0 0/0 .text loadExecute__17J3DDifferedTexMtxFPA4_Cf */
#ifdef NONMATCHING
// NONMATCHING regalloc
void J3DDifferedTexMtx::loadExecute(f32 const (*param_0)[4]) {
// regalloc
static Mtx qMtx = {
{0.5f, 0.0f, 0.5f, 0.0f},
{0.0f, -0.5f, 0.5f, 0.0f},
@@ -299,16 +141,18 @@ void J3DDifferedTexMtx::loadExecute(f32 const (*param_0)[4]) {
u32 unk;
switch (tex_gen_src & 0x3f) {
case 3:
case 9:
case 9: {
Mtx& tmp5 = tex_mtx_obj->getMtx(i);
mtx = &tmp5;
break;
}
case 1:
case 6:
case 7:
case 7: {
Mtx& tmp6 = tex_mtx_obj->getMtx(i);
mtx = &tmp6;
break;
}
case 2:
case 8:
PSMTXInverse(j3dSys.mViewMtx, tmp2);
@@ -336,11 +180,11 @@ void J3DDifferedTexMtx::loadExecute(f32 const (*param_0)[4]) {
tex_mtx_info = &tex_mtx->getTexMtxInfo();
unk = (tex_gen_src & 0x80) >> 7;
if (unk == 0) {
J3DGetTextureMtxOld(tex_mtx_info->mSRT, tex_mtx_info->mCenter, tmp0);
J3DGetTextureMtx(tex_mtx_info->mSRT, tex_mtx_info->mCenter, tmp0);
} else if (unk == 1) {
J3DGetTextureMtxMayaOld(tex_mtx_info->mSRT, tmp0);
J3DGetTextureMtxMaya(tex_mtx_info->mSRT, tmp0);
}
PSMTXConcat(tmp0, qMtx2, tmp0);
PSMTXConcat(tmp0, qMtx, tmp0);
eff_mtx = &tex_mtx_obj->getEffectMtx(i);
J3DMtxProjConcat(tmp0, *eff_mtx, tmp2);
PSMTXInverse(j3dSys.mViewMtx, tmp1);
@@ -354,11 +198,11 @@ void J3DDifferedTexMtx::loadExecute(f32 const (*param_0)[4]) {
tex_mtx_info = &tex_mtx->getTexMtxInfo();
unk = (tex_gen_src & 0x80) >> 7;
if (unk == 0) {
J3DGetTextureMtxOld(tex_mtx_info->mSRT, tex_mtx_info->mCenter, tmp0);
J3DGetTextureMtx(tex_mtx_info->mSRT, tex_mtx_info->mCenter, tmp0);
} else if (unk == 1) {
J3DGetTextureMtxMayaOld(tex_mtx_info->mSRT, tmp0);
J3DGetTextureMtxMaya(tex_mtx_info->mSRT, tmp0);
}
PSMTXConcat(tmp0, qMtx, tmp0);
PSMTXConcat(tmp0, qMtx2, tmp0);
eff_mtx = &tex_mtx_obj->getEffectMtx(i);
J3DMtxProjConcat(tmp0, *eff_mtx, tmp2);
PSMTXInverse(j3dSys.mViewMtx, tmp1);
@@ -425,11 +269,11 @@ void J3DDifferedTexMtx::loadExecute(f32 const (*param_0)[4]) {
tex_mtx_info = &tex_mtx->getTexMtxInfo();
unk = (tex_gen_src & 0x80) >> 7;
if (unk == 0) {
J3DGetTextureMtxOld(tex_mtx_info->mSRT, tex_mtx_info->mCenter, tmp0);
J3DGetTextureMtx(tex_mtx_info->mSRT, tex_mtx_info->mCenter, tmp0);
} else if (unk == 1) {
J3DGetTextureMtxMayaOld(tex_mtx_info->mSRT, tmp0);
J3DGetTextureMtxMaya(tex_mtx_info->mSRT, tmp0);
}
PSMTXConcat(tmp0, qMtx2, tmp0);
PSMTXConcat(tmp0, qMtx, tmp0);
eff_mtx = &tex_mtx_obj->getEffectMtx(i);
J3DMtxProjConcat(tmp0, *eff_mtx, tmp2);
PSMTXInverse(j3dSys.mViewMtx, tmp1);
@@ -444,11 +288,11 @@ void J3DDifferedTexMtx::loadExecute(f32 const (*param_0)[4]) {
tex_mtx_info = &tex_mtx->getTexMtxInfo();
unk = (tex_gen_src & 0x80) >> 7;
if (unk == 0) {
J3DGetTextureMtxOld(tex_mtx_info->mSRT, tex_mtx_info->mCenter, tmp0);
J3DGetTextureMtx(tex_mtx_info->mSRT, tex_mtx_info->mCenter, tmp0);
} else if (unk == 1) {
J3DGetTextureMtxMayaOld(tex_mtx_info->mSRT, tmp0);
J3DGetTextureMtxMaya(tex_mtx_info->mSRT, tmp0);
}
PSMTXConcat(tmp0, qMtx, tmp0);
PSMTXConcat(tmp0, qMtx2, tmp0);
eff_mtx = &tex_mtx_obj->getEffectMtx(i);
J3DMtxProjConcat(tmp0, *eff_mtx, tmp2);
PSMTXInverse(j3dSys.mViewMtx, tmp1);
@@ -469,11 +313,6 @@ void J3DDifferedTexMtx::loadExecute(f32 const (*param_0)[4]) {
}
}
}
#else
void J3DDifferedTexMtx::loadExecute(f32 const (*param_0)[4]) {
// NONMATCHING
}
#endif
/* 80313828-803138C8 30E168 00A0+00 1/0 0/0 0/0 .text
* loadMtxConcatView_PNGP__21J3DShapeMtxConcatViewCFiUs */
@@ -702,9 +541,9 @@ void J3DShapeMtxBBoardConcatView::load() const {
mtx[0][0] = 1.0f / mtx[0][0];
mtx[1][1] = 1.0f / mtx[1][1];
mtx[2][2] = 1.0f / mtx[2][2];
mtx[0][3] = FLOAT_LABEL(lit_1032); // 0.0f;
mtx[1][3] = FLOAT_LABEL(lit_1032); // 0.0f;
mtx[2][3] = FLOAT_LABEL(lit_1032); // 0.0f;
mtx[0][3] = 0.0f;
mtx[1][3] = 0.0f;
mtx[2][3] = 0.0f;
if (!sNBTFlag) {
J3DFifoLoadNrmMtxImm(mtx, 0);
} else {
@@ -749,12 +588,9 @@ void J3DShapeMtxYBBoardConcatView::load() const {
}
}
/* ############################################################################################## */
/* 803CDB70-803CDB84 02AC90 0014+00 0/0 0/0 0/0 .data mtxCache$1263 */
#pragma push
#pragma force_active on
SECTION_DATA static u8 mtxCache[20] = {
static void dummy() {
static u8 mtxCache[20] = {
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
};
#pragma pop
}
File diff suppressed because it is too large Load Diff
@@ -4,83 +4,8 @@
//
#include "JSystem/J3DGraphLoader/J3DMaterialFactory_v21.h"
#include "JSystem/J3DGraphBase/J3DMaterial.h"
#include "JSystem/JSupport/JSupport.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" void __ct__22J3DMaterialFactory_v21FRC20J3DMaterialBlock_v21();
extern "C" void countUniqueMaterials__22J3DMaterialFactory_v21Fv();
extern "C" void countTexGens__22J3DMaterialFactory_v21CFi();
extern "C" void countStages__22J3DMaterialFactory_v21CFi();
extern "C" void create__22J3DMaterialFactory_v21CFP11J3DMaterialiUl();
extern "C" void newMatColor__22J3DMaterialFactory_v21CFii();
extern "C" void newColorChanNum__22J3DMaterialFactory_v21CFi();
extern "C" void newColorChan__22J3DMaterialFactory_v21CFii();
extern "C" void newTexGenNum__22J3DMaterialFactory_v21CFi();
extern "C" void newTexCoord__22J3DMaterialFactory_v21CFii();
extern "C" void newTexMtx__22J3DMaterialFactory_v21CFii();
extern "C" void newCullMode__22J3DMaterialFactory_v21CFi();
extern "C" void newTexNo__22J3DMaterialFactory_v21CFii();
extern "C" void newTevOrder__22J3DMaterialFactory_v21CFii();
extern "C" void newTevColor__22J3DMaterialFactory_v21CFii();
extern "C" void newTevKColor__22J3DMaterialFactory_v21CFii();
extern "C" void newTevStageNum__22J3DMaterialFactory_v21CFi();
extern "C" void newTevStage__22J3DMaterialFactory_v21CFii();
extern "C" void newTevSwapModeTable__22J3DMaterialFactory_v21CFii();
extern "C" void newFog__22J3DMaterialFactory_v21CFi();
extern "C" void newAlphaComp__22J3DMaterialFactory_v21CFi();
extern "C" void newBlend__22J3DMaterialFactory_v21CFi();
extern "C" void newZMode__22J3DMaterialFactory_v21CFi();
extern "C" void newZCompLoc__22J3DMaterialFactory_v21CFi();
extern "C" void newDither__22J3DMaterialFactory_v21CFi();
extern "C" void newNBTScale__22J3DMaterialFactory_v21CFi();
extern "C" void func_80334118(void* _this, void const*, void const*);
//
// External References:
//
extern "C" void __ct__11J3DTevStageFv();
extern "C" void __ct__11J3DTevStageFRC15J3DTevStageInfo();
extern "C" void* __nw__FUl();
extern "C" GXColorS10* func_802F41E8(void const*, void const*);
extern "C" u8* func_802F4260(void const*, void const*);
extern "C" GXColor* func_802F4278(void const*, void const*);
extern "C" GXCullMode* func_802F4290(void const*, void const*);
extern "C" u16* func_802F42C0(void const*, void const*);
extern "C" void createColorBlock__11J3DMaterialFUl();
extern "C" void createTexGenBlock__11J3DMaterialFUl();
extern "C" void createTevBlock__11J3DMaterialFi();
extern "C" void createIndBlock__11J3DMaterialFi();
extern "C" void createPEBlock__11J3DMaterialFUlUl();
extern "C" void initialize__11J3DMaterialFv();
extern "C" void __as__13J3DTexMtxInfoFRC13J3DTexMtxInfo();
extern "C" void __as__10J3DFogInfoFRC10J3DFogInfo();
extern "C" void func_80332C24(void* _this, void const*, void const*);
extern "C" void func_80332C3C(void* _this, void const*, void const*);
extern "C" void func_80332C54(void* _this, void const*, void const*);
extern "C" void func_80332C6C(void* _this, void const*, void const*);
extern "C" void func_80332C84(void* _this, void const*, void const*);
extern "C" void func_80332C9C(void* _this, void const*, void const*);
extern "C" void func_80332CB4(void* _this, void const*, void const*);
extern "C" void func_80332CCC(void* _this, void const*, void const*);
extern "C" void func_80332CE4(void* _this, void const*, void const*);
extern "C" void func_80332CFC(void* _this, void const*, void const*);
extern "C" void func_80332D14(void* _this, void const*, void const*);
extern "C" void func_80332D2C(void* _this, void const*, void const*);
extern "C" void func_80332D5C(void* _this, void const*, void const*);
extern "C" void _savegpr_19();
extern "C" void _savegpr_29();
extern "C" void _restgpr_19();
extern "C" void _restgpr_29();
extern "C" extern void* __vt__11J3DMaterial[12];
//
// Declarations:
//
/* 80332DA4-80332F84 32D6E4 01E0+00 0/0 2/2 0/0 .text
* __ct__22J3DMaterialFactory_v21FRC20J3DMaterialBlock_v21 */
@@ -158,8 +83,95 @@ u32 J3DMaterialFactory_v21::countStages(int i_idx) const {
/* 80333068-803337D8 32D9A8 0770+00 0/0 2/2 0/0 .text
* create__22J3DMaterialFactory_v21CFP11J3DMaterialiUl */
J3DMaterial* J3DMaterialFactory_v21::create(J3DMaterial* param_0, int param_1, u32 param_2) const {
// NONMATCHING
// NONMATCHINg same problems as J3DMaterialFactory::createNormalMaterial
J3DMaterial* J3DMaterialFactory_v21::create(J3DMaterial* i_material, int i_idx, u32 i_flags) const {
u32 stages = countStages(i_idx);
u32 tev_stage_num = getMdlDataFlag_TevStageNum(i_flags);
if (stages > tev_stage_num) {
tev_stage_num = stages;
}
u32 u1 = tev_stage_num <= 8 ? tev_stage_num : 8;
u32 texgens = countTexGens(i_idx);
u32 texgen_flag = texgens > 4 ? 0 : getMdlDataFlag_TexGenFlag(i_flags);
u32 color_flag = getMdlDataFlag_ColorFlag(i_flags);
u32 pe_flag = getMdlDataFlag_PEFlag(i_flags);
bool ind_flag = (i_flags & 0x1000000) != 0;
if (i_material == NULL) {
i_material = new J3DMaterial();
}
i_material->mColorBlock = J3DMaterial::createColorBlock(color_flag);
i_material->mTexGenBlock = J3DMaterial::createTexGenBlock(texgen_flag);
i_material->mTevBlock = J3DMaterial::createTevBlock((u16)tev_stage_num);
i_material->mIndBlock = J3DMaterial::createIndBlock(ind_flag);
i_material->mPEBlock = J3DMaterial::createPEBlock(pe_flag, getMaterialMode(i_idx));
i_material->mIndex = i_idx;
i_material->mMaterialMode = getMaterialMode(i_idx);
i_material->mColorBlock->setColorChanNum(newColorChanNum(i_idx));
i_material->mColorBlock->setCullMode(newCullMode(i_idx));
i_material->mTexGenBlock->setTexGenNum(newTexGenNum(i_idx));
i_material->mTexGenBlock->setNBTScale(newNBTScale(i_idx));
i_material->mPEBlock->setFog(&newFog(i_idx));
i_material->mPEBlock->setAlphaComp(newAlphaComp(i_idx));
i_material->mPEBlock->setBlend(newBlend(i_idx));
i_material->mPEBlock->setZMode(newZMode(i_idx));
i_material->mPEBlock->setZCompLoc(newZCompLoc(i_idx));
i_material->mPEBlock->setDither(newDither(i_idx));
i_material->mTevBlock->setTevStageNum(newTevStageNum(i_idx));
for (u8 i = 0; i < u1; i++) {
i_material->mTevBlock->setTexNo(i, newTexNo(i_idx, i));
}
for (u8 i = 0; i < tev_stage_num; i++) {
i_material->mTevBlock->setTevOrder(i, newTevOrder(i_idx, i));
}
for (u8 i = 0; i < tev_stage_num; i++) {
J3DMaterialInitData_v21* material_init_data = &mpMaterialInitData[mpMaterialID[i_idx]];
i_material->mTevBlock->setTevStage(i, newTevStage(i_idx, i));
if (material_init_data->mTevSwapModeIdx[i] != 0xffff) {
i_material->mTevBlock->getTevStage(i)->setTexSel(
mpTevSwapModeInfo[material_init_data->mTevSwapModeIdx[i]].mTexSel);
i_material->mTevBlock->getTevStage(i)->setRasSel(
mpTevSwapModeInfo[material_init_data->mTevSwapModeIdx[i]].mRasSel);
}
}
for (u8 i = 0; i < 4; i++) {
i_material->mTevBlock->setTevKColor(i, newTevKColor(i_idx, i));
}
for (u8 i = 0; i < 4; i++) {
i_material->mTevBlock->setTevColor(i, newTevColor(i_idx, i));
}
for (u8 i = 0; i < 4; i++) {
i_material->mTevBlock->setTevSwapModeTable(i, newTevSwapModeTable(i_idx, i));
}
for (u8 i = 0; i < 2; i++) {
i_material->mColorBlock->setMatColor(i, newMatColor(i_idx, i));
}
for (u8 i = 0; i < 4; i++) {
J3DColorChan color_chan = newColorChan(i_idx, i);
i_material->mColorBlock->setColorChan(i, color_chan);
}
for (u8 i = 0; i < texgens; i++) {
J3DTexCoord tex_coord = newTexCoord(i_idx, i);
i_material->mTexGenBlock->setTexCoord(i, &tex_coord);
}
for (u8 i = 0; i < 8; i++) {
i_material->mTexGenBlock->setTexMtx(i, newTexMtx(i_idx, i));
}
J3DMaterialInitData_v21* material_init_data = &mpMaterialInitData[mpMaterialID[i_idx]];
for (u8 i = 0; i < tev_stage_num; i++) {
if (material_init_data->mTevKColorSel[i] != 0xff) {
i_material->mTevBlock->setTevKColorSel(i, material_init_data->mTevKColorSel[i]);
} else {
i_material->mTevBlock->setTevKColorSel(i, 0xc);
}
}
for (u8 i = 0; i < tev_stage_num; i++) {
if (material_init_data->mTevKAlphaSel[i] != 0xff) {
i_material->mTevBlock->setTevKAlphaSel(i, material_init_data->mTevKAlphaSel[i]);
} else {
i_material->mTevBlock->setTevKAlphaSel(i, 0x1c);
}
}
return i_material;
}
/* 803337D8-80333834 32E118 005C+00 1/1 0/0 0/0 .text newMatColor__22J3DMaterialFactory_v21CFii */
@@ -186,8 +198,7 @@ u8 J3DMaterialFactory_v21::newColorChanNum(int i_idx) const {
/* 8033386C-80333A10 32E1AC 01A4+00 1/1 0/0 0/0 .text newColorChan__22J3DMaterialFactory_v21CFii
*/
// J3DColorChan ctor
#ifdef NONMATCHING
// NONMATCHING J3DColorChan ctor
J3DColorChan J3DMaterialFactory_v21::newColorChan(int i_idx, int i_no) const {
J3DMaterialInitData_v21* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]];
if (mtl_init_data->mColorChanIdx[i_no] != 0xffff) {
@@ -196,11 +207,6 @@ J3DColorChan J3DMaterialFactory_v21::newColorChan(int i_idx, int i_no) const {
return J3DColorChan();
}
}
#else
J3DColorChan J3DMaterialFactory_v21::newColorChan(int param_0, int param_1) const {
// NONMATCHING
}
#endif
/* 80333A10-80333A48 32E350 0038+00 1/1 0/0 0/0 .text newTexGenNum__22J3DMaterialFactory_v21CFi */
u32 J3DMaterialFactory_v21::newTexGenNum(int i_idx) const {
@@ -329,8 +335,7 @@ J3DFog J3DMaterialFactory_v21::newFog(int i_idx) const {
}
/* 80333EE0-80333F60 32E820 0080+00 1/1 0/0 0/0 .text newAlphaComp__22J3DMaterialFactory_v21CFi */
// calcAlphaCmpID issue
#ifdef NONMATCHING
// NONMATCHING calcAlphaCmpID issue
J3DAlphaComp J3DMaterialFactory_v21::newAlphaComp(int i_idx) const {
J3DMaterialInitData_v21* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]];
if (mtl_init_data->mAlphaCompIdx != 0xffff) {
@@ -338,11 +343,6 @@ J3DAlphaComp J3DMaterialFactory_v21::newAlphaComp(int i_idx) const {
}
return J3DAlphaComp(0xffff);
}
#else
J3DAlphaComp J3DMaterialFactory_v21::newAlphaComp(int param_0) const {
// NONMATCHING
}
#endif
/* 80333F60-80333FA4 32E8A0 0044+00 1/1 0/0 0/0 .text newBlend__22J3DMaterialFactory_v21CFi */
J3DBlend J3DMaterialFactory_v21::newBlend(int i_idx) const {
@@ -27,15 +27,14 @@ u16 J3DModelLoader::countMaterialNum(const void* stream) {
}
/* 803367D4-803369A0 331114 01CC+00 0/0 3/0 0/0 .text calcLoadSize__14J3DModelLoaderFPCvUl */
// NONMATCHING size load issue
u32 J3DModelLoader::calcLoadSize(void const* stream, u32 flags_) {
int flags = flags_;
const J3DModelFileData* header = static_cast<const J3DModelFileData*>(stream);
size_t size;
size_t size = 0;
const J3DModelBlock* nextBlock = header->mBlocks;
u32 i = 0;
// TODO: What sizeof will get us a size of 0xE4?
size = 0xE4;
size += 0xE4;
for (; i < header->mBlockNum; i++) {
switch (nextBlock->mBlockType) {
case 'INF1':
@@ -116,12 +115,11 @@ u32 J3DModelLoader::calcLoadMaterialTableSize(const void* stream) {
* calcLoadBinaryDisplayListSize__14J3DModelLoaderFPCvUl */
// NONMATCHING flags issue
u32 J3DModelLoader::calcLoadBinaryDisplayListSize(const void* stream, u32 flags) {
u32 size = 0;
const J3DModelFileData* header = (const J3DModelFileData*)stream;
const J3DModelBlock* nextBlock = header->mBlocks;
u32 i = 0;
u32 matFlags = flags & (J3DMLF_Material_UseIndirect | J3DMLF_26);
u32 flags2;
int size = sizeof(J3DModelData);
size += sizeof(J3DModelData);
for (; i < header->mBlockNum; i++) {
switch (nextBlock->mBlockType) {
case 'INF1':
@@ -141,18 +139,19 @@ u32 J3DModelLoader::calcLoadBinaryDisplayListSize(const void* stream, u32 flags)
break;
case 'MAT2':
break;
case 'MAT3':
flags2 = (J3DMLF_21 | J3DMLF_Material_PE_Full | J3DMLF_Material_Color_LightOn);
flags2 |= matFlags;
case 'MAT3': {
u32 flags2 = (J3DMLF_21 | J3DMLF_Material_PE_Full | J3DMLF_Material_Color_LightOn);
flags2 |= flags & (J3DMLF_Material_UseIndirect | J3DMLF_26);
mpMaterialBlock = (const J3DMaterialBlock*)nextBlock;
if ((flags & (J3DMLF_13 | J3DMLF_DoBdlMaterialCalc)) == 0) {
field_0x18 = 1;
size += calcSizeMaterial((const J3DMaterialBlock*)nextBlock, flags2);
} else if ((flags & (J3DMLF_13 | J3DMLF_DoBdlMaterialCalc)) == J3DMLF_DoBdlMaterialCalc) {
field_0x18 = 1;
size += calcSizePatchedMaterial((const J3DMaterialBlock*)nextBlock, matFlags);
size += calcSizePatchedMaterial((const J3DMaterialBlock*)nextBlock, flags2);
}
break;
}
case 'EVP1':
size += calcSizeEnvelope((const J3DEnvelopeBlock*)nextBlock);
break;
@@ -191,7 +190,6 @@ u32 J3DModelLoader::calcSizeInformation(const J3DModelInfoBlock* block, u32 flag
return size;
}
/* 80336D64-80336D90 3316A4 002C+00 2/2 0/0 0/0 .text
* calcSizeJoint__14J3DModelLoaderFPC13J3DJointBlock */
u32 J3DModelLoader::calcSizeJoint(const J3DJointBlock* block) {
-5
View File
@@ -225,11 +225,6 @@ void daAlink_c::preKandelaarDraw() {
field_0x344c = ((near + (far * near) / proj.z) / (far - near) + 1.0f) * 1.6777215E7f;
}
/* 80110E80-80110E84 10B7C0 0004+00 0/0 3/0 0/0 .text
* setTevColor__11J3DTevBlockFUlPC13J3DGXColorS10 */
void J3DTevBlock::setTevColor(u32 param_0, J3DGXColorS10 const* param_1) {}
/* 80110E84-80110F88 10B7C4 0104+00 4/4 0/0 0/0 .text setKandelaarModel__9daAlink_cFv */
void daAlink_c::setKandelaarModel() {
field_0x2f94 = 0;
-12
View File
@@ -3042,18 +3042,6 @@ static void setLightTevColorType_MAJI_sub(J3DMaterial* param_0, dKy_tevstr_c* pa
// NONMATCHING
}
/* 801A4C08-801A4C0C 19F548 0004+00 0/0 4/0 0/0 .text setLight__13J3DColorBlockFUlP11J3DLightObj
*/
void J3DColorBlock::setLight(u32 param_0, J3DLightObj* param_1) {
/* empty function */
}
/* 801A4C0C-801A4C10 19F54C 0004+00 0/0 3/0 0/0 .text
* setAmbColor__13J3DColorBlockFUlPC10J3DGXColor */
void J3DColorBlock::setAmbColor(u32 param_0, J3DGXColor const* param_1) {
/* empty function */
}
/* 801A4C10-801A4DA0 19F550 0190+00 1/1 0/0 0/0 .text
* dKy_cloudshadow_scroll__FP12J3DModelDataP12dKy_tevstr_ci */
static void dKy_cloudshadow_scroll(J3DModelData* i_modelData, dKy_tevstr_c* i_tevstr, int param_2) {
-21
View File
@@ -343,27 +343,6 @@ void mDoExt_modelTexturePatch(J3DModelData* i_modelData) {
}
}
/* 8000DBC8-8000DBCC 008508 0004+00 0/0 2/0 0/0 .text patchTexNoAndTexCoordScale__11J3DTevBlockFv
*/
void J3DTevBlock::patchTexNoAndTexCoordScale() {
/* empty function */
}
/* 8000DBCC-8000DBD0 00850C 0004+00 0/0 6/0 0/0 .text patch__10J3DPEBlockFv */
void J3DPEBlock::patch() {
/* empty function */
}
/* 8000DBD0-8000DBD4 008510 0004+00 0/0 2/0 0/0 .text patchLight__13J3DColorBlockFv */
void J3DColorBlock::patchLight() {
/* empty function */
}
/* 8000DBD4-8000DBD8 008514 0004+00 0/0 2/0 0/0 .text patch__11J3DTevBlockFv */
void J3DTevBlock::patch() {
/* empty function */
}
/* 8000DBD8-8000DC2C 008518 0054+00 3/3 0/0 0/0 .text mDoExt_modelDiff__FP8J3DModel */
static void mDoExt_modelDiff(J3DModel* i_model) {
i_model->calcMaterial();