diff options
| author | Caroline Madsen <69010899+randomsalience@users.noreply.github.com> | 2023-12-27 20:17:39 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-12-28 02:17:39 +0100 |
| commit | 9780adcc4eb5d0f13d33762e6ebaba5e0279e1d7 (patch) | |
| tree | 3b0b179ed373c2c83468908ff07fbb2b35067f00 /src | |
| parent | 83969f6dc159e572186cfd5c0427786b462243d0 (diff) | |
work on J3DMaterialFactory and J3DMaterialFactory_v21 (#2012)
Diffstat (limited to 'src')
| -rw-r--r-- | src/d/d_resorce.cpp | 2 | ||||
| -rw-r--r-- | src/m_Do/m_Do_ext.cpp | 35 | ||||
| -rw-r--r-- | src/m_Do/m_Do_lib.cpp | 258 |
3 files changed, 151 insertions, 144 deletions
diff --git a/src/d/d_resorce.cpp b/src/d/d_resorce.cpp index 948c4d069e..fb92cf9df7 100644 --- a/src/d/d_resorce.cpp +++ b/src/d/d_resorce.cpp @@ -305,7 +305,7 @@ static void addWarpMaterial(J3DModelData* param_1) { u32 texGenNum = texGenBlock->getTexGenNum(); J3DTexCoord* coord = texGenBlock->getTexCoord(texGenNum); l_texCoordInfo.mTexGenMtx = texGenNum * 3 + 0x1e; - coord->setTexCoordInfo(&l_texCoordInfo); + coord->setTexCoordInfo(l_texCoordInfo); coord->resetTexMtxReg(); texGenBlock->setTexGenNum(texGenNum + 1); texGenBlock->setTexMtx(texGenNum, texMtxInfo); diff --git a/src/m_Do/m_Do_ext.cpp b/src/m_Do/m_Do_ext.cpp index c327616247..d70a85199c 100644 --- a/src/m_Do/m_Do_ext.cpp +++ b/src/m_Do/m_Do_ext.cpp @@ -441,10 +441,6 @@ extern "C" void _restgpr_26(); extern "C" void _restgpr_27(); extern "C" void _restgpr_28(); extern "C" void _restgpr_29(); -extern "C" extern u8 const j3dDefaultTexCoordInfo[32]; -extern "C" extern u8 const j3dDefaultIndTexMtxInfo[28]; -extern "C" extern u8 const j3dDefaultTevStageInfo[20]; -extern "C" extern u8 const j3dDefaultIndTevStageInfo[12]; extern "C" extern void* __vt__9J3DPacket[5]; extern "C" extern void* __vt__8J3DModel[9]; extern "C" u8 mCurrentMtx__6J3DSys[48]; @@ -453,11 +449,7 @@ extern "C" u8 sGDLObj__17J3DDisplayListObj[16]; extern "C" u8 sCurrentHeap__7JKRHeap[4]; extern "C" u8 sOldVcdVatCmd__8J3DShape[4]; extern "C" u8 mJoint__10J3DMtxCalc[4]; -extern "C" extern u32 j3dDefaultTevOrderInfoNull; -extern "C" extern u32 j3dDefaultIndTexOrderNull; -extern "C" extern u8 j3dDefaultIndTexCoordScaleInfo[4]; extern "C" extern u8 j3dDefaultTevSwapMode[4]; -extern "C" extern u8 j3dDefaultColorChanInfo[8]; extern "C" extern u16 data_804563F8; // @@ -1859,7 +1851,8 @@ void J3DIndBlock::setIndTexCoordScale(u32 param_0, J3DIndTexCoordScale param_1) #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DIndTexCoordScale::~J3DIndTexCoordScale() { +// asm J3DIndTexCoordScale::~J3DIndTexCoordScale() { +extern "C" asm void __dt__19J3DIndTexCoordScaleFv() { nofralloc #include "asm/m_Do/m_Do_ext/__dt__19J3DIndTexCoordScaleFv.s" } @@ -1875,7 +1868,8 @@ void J3DIndBlock::setIndTexMtx(u32 param_0, J3DIndTexMtx param_1) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DIndTexMtx::~J3DIndTexMtx() { +// asm J3DIndTexMtx::~J3DIndTexMtx() { +extern "C" asm void __dt__12J3DIndTexMtxFv() { nofralloc #include "asm/m_Do/m_Do_ext/__dt__12J3DIndTexMtxFv.s" } @@ -1985,7 +1979,8 @@ void J3DColorBlock::setColorChanNum(u8 param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DIndTexCoordScale::J3DIndTexCoordScale() { +// asm J3DIndTexCoordScale::J3DIndTexCoordScale() { +extern "C" asm void __ct__19J3DIndTexCoordScaleFv() { nofralloc #include "asm/m_Do/m_Do_ext/__ct__19J3DIndTexCoordScaleFv.s" } @@ -1995,7 +1990,8 @@ asm J3DIndTexCoordScale::J3DIndTexCoordScale() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DIndTexMtx::J3DIndTexMtx() { +// asm J3DIndTexMtx::J3DIndTexMtx() { +extern "C" asm void __ct__12J3DIndTexMtxFv() { nofralloc #include "asm/m_Do/m_Do_ext/__ct__12J3DIndTexMtxFv.s" } @@ -2005,7 +2001,8 @@ asm J3DIndTexMtx::J3DIndTexMtx() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DIndTexOrder::J3DIndTexOrder() { +// asm J3DIndTexOrder::J3DIndTexOrder() { +extern "C" asm void __ct__14J3DIndTexOrderFv() { nofralloc #include "asm/m_Do/m_Do_ext/__ct__14J3DIndTexOrderFv.s" } @@ -2025,7 +2022,8 @@ asm J3DTevSwapModeTable::J3DTevSwapModeTable() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DTevOrder::J3DTevOrder() { +// asm J3DTevOrder::J3DTevOrder() { +extern "C" asm void __ct__11J3DTevOrderFv() { nofralloc #include "asm/m_Do/m_Do_ext/__ct__11J3DTevOrderFv.s" } @@ -2035,7 +2033,8 @@ asm J3DTevOrder::J3DTevOrder() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DIndTevStage::J3DIndTevStage() { +// asm J3DIndTevStage::J3DIndTevStage() { +extern "C" asm void __ct__14J3DIndTevStageFv() { nofralloc #include "asm/m_Do/m_Do_ext/__ct__14J3DIndTevStageFv.s" } @@ -2072,7 +2071,8 @@ extern "C" void __ct__13J3DGXColorS10Fv() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DTexCoord::J3DTexCoord() { +// asm J3DTexCoord::J3DTexCoord() { +extern "C" asm void __ct__11J3DTexCoordFv() { nofralloc #include "asm/m_Do/m_Do_ext/__ct__11J3DTexCoordFv.s" } @@ -2082,7 +2082,8 @@ asm J3DTexCoord::J3DTexCoord() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DColorChan::J3DColorChan() { +// asm J3DColorChan::J3DColorChan() { +extern "C" asm void __ct__12J3DColorChanFv() { nofralloc #include "asm/m_Do/m_Do_ext/__ct__12J3DColorChanFv.s" } diff --git a/src/m_Do/m_Do_lib.cpp b/src/m_Do/m_Do_lib.cpp index 449912f8a2..e6fa30cbf8 100644 --- a/src/m_Do/m_Do_lib.cpp +++ b/src/m_Do/m_Do_lib.cpp @@ -1,126 +1,132 @@ -/** - * m_Do_lib.cpp - * View and Projection Matrix Helper Functions - */ - -#include "m_Do/m_Do_lib.h" -#include "JSystem/JUtility/JUTTexture.h" -#include "SSystem/SComponent/c_math.h" -#include "d/com/d_com_inf_game.h" -#include "dolphin/types.h" - -/* 8001513C-8001528C 00FA7C 0150+00 0/0 3/3 2/2 .text - * mDoLib_setResTimgObj__FPC7ResTIMGP9_GXTexObjUlP10_GXTlutObj */ -u8 mDoLib_setResTimgObj(ResTIMG const* res, _GXTexObj* o_texObj, u32 tlut_name, - _GXTlutObj* o_tlutObj) { - ResTIMG* _res = (ResTIMG*)res; - - if (_res->indexTexture) { - GXInitTlutObj(o_tlutObj, (void*)((u8*)_res + _res->paletteOffset), - (GXTlutFmt)_res->colorFormat, _res->numColors); - GXInitTexObjCI(o_texObj, (void*)((u8*)_res + _res->imageOffset), _res->width, _res->height, - (GXCITexFmt)_res->format, (GXTexWrapMode)_res->wrapS, - (GXTexWrapMode)_res->wrapT, _res->mipmapCount > 1, tlut_name); - } else { - GXInitTexObj(o_texObj, (void*)((u8*)_res + _res->imageOffset), _res->width, _res->height, - (GXTexFmt)_res->format, (GXTexWrapMode)_res->wrapS, (GXTexWrapMode)_res->wrapT, - _res->mipmapCount > 1); - } - GXInitTexObjLOD(o_texObj, (GXTexFilter)_res->minFilter, (GXTexFilter)_res->magFilter, - (f32)_res->minLOD * 0.125f, (f32)_res->maxLOD * 0.125f, - (f32)_res->LODBias * 0.01f, (s32)_res->biasClamp, (s32)_res->doEdgeLOD, - (GXAnisotropy)_res->maxAnisotropy); - - return _res->indexTexture; -} - -/* 803DD8E4-803DD940 00A604 005C+00 2/2 5/5 5/5 .bss mClipper__14mDoLib_clipper */ -J3DUClipper mDoLib_clipper::mClipper; - -/* 80450C70-80450C74 000170 0004+00 1/1 2/2 4/4 .sbss mSystemFar__14mDoLib_clipper */ -f32 mDoLib_clipper::mSystemFar; - -/* 80450C74-80450C78 000174 0004+00 1/1 1/1 0/0 .sbss mFovyRate__14mDoLib_clipper */ -f32 mDoLib_clipper::mFovyRate; - -/* 8001528C-80015310 00FBCC 0084+00 0/0 1/1 0/0 .text setup__14mDoLib_clipperFffff */ -void mDoLib_clipper::setup(f32 fovy, f32 aspect, f32 near, f32 far) { - mClipper.setFovy(fovy); - mClipper.setAspect(aspect); - mClipper.setNear(near); - mClipper.setFar(far); - mSystemFar = far; - mClipper.calcViewFrustum(); - - s16 tmp = fovy * 182.04444885253906f; - - mFovyRate = cM_scos(tmp) / cM_ssin(tmp); -} - -/* 80015310-800154EC 00FC50 01DC+00 0/0 21/21 23/23 .text mDoLib_project__FP3VecP3Vec */ -void mDoLib_project(Vec* src, Vec* dst) { - if (dComIfGd_getView() == NULL) { - dst->x = 0.0f; - dst->y = 0.0f; - dst->z = 0.0f; - return; - } - Mtx44* projMtx = dComIfGd_getProjViewMtx(); - Vec multVec; - cMtx_multVec(*projMtx, src, &multVec); - - float calcFloat = (src->x * (*dComIfGd_getProjViewMtx())[3][0]) + - (src->y * (*dComIfGd_getProjViewMtx())[3][1]) + - (src->z * (*dComIfGd_getProjViewMtx())[3][2]) + - (*dComIfGd_getProjViewMtx())[3][3]; - if (multVec.z >= 0.0f) { - multVec.z = 0.0f; - } - float f3; - if (calcFloat <= 0.0f) { - if (calcFloat == 0.0f) { - dst->z = multVec.z * 500000.0f; - } else { - dst->z = multVec.z * (0.5f / calcFloat); - } - f3 = 500000.0f; - } else { - f3 = 0.5f / calcFloat; - dst->z = multVec.z * f3; - } - - view_port_class* viewPort = dComIfGd_getViewport(); - float xOffset; - float yOffset; - float xSize; - float ySize; - if (viewPort->mXOrig != 0.0f) { - xOffset = (0.5f * ((2.0f * viewPort->mXOrig) + viewPort->mWidth)) - 304.0f; - xSize = 608.0f; - } else { - xOffset = viewPort->mXOrig; - xSize = viewPort->mWidth; - } - - if (viewPort->mYOrig != 0.0f) { - yOffset = (0.5f * ((2.0f * viewPort->mYOrig) + viewPort->mHeight)) - 224.0f; - ySize = 448.0f; - } else { - yOffset = viewPort->mYOrig; - ySize = viewPort->mHeight; - } - - dst->x = ((0.5f + (multVec.x * f3)) * xSize) + xOffset; - dst->y = ((0.5f + (multVec.y * (-f3))) * ySize) + yOffset; -} - -/* 800154EC-80015544 00FE2C 0058+00 0/0 2/2 9/9 .text mDoLib_pos2camera__FP3VecP3Vec */ -void mDoLib_pos2camera(Vec* src, Vec* dst) { - if (dComIfGd_getView() == NULL) { - dst->x = 0.0f; - dst->y = 0.0f; - dst->z = 0.0f; - return; - } - cMtx_multVec(dComIfGd_getView()->mViewMtx, src, dst); -} +/**
+ * m_Do_lib.cpp
+ * View and Projection Matrix Helper Functions
+ */
+
+#include "m_Do/m_Do_lib.h"
+#include "JSystem/J3DGraphBase/J3DMatBlock.h"
+#include "JSystem/JUtility/JUTTexture.h"
+#include "SSystem/SComponent/c_math.h"
+#include "d/com/d_com_inf_game.h"
+#include "dolphin/types.h"
+
+/* 8001513C-8001528C 00FA7C 0150+00 0/0 3/3 2/2 .text
+ * mDoLib_setResTimgObj__FPC7ResTIMGP9_GXTexObjUlP10_GXTlutObj */
+u8 mDoLib_setResTimgObj(ResTIMG const* res, _GXTexObj* o_texObj, u32 tlut_name,
+ _GXTlutObj* o_tlutObj) {
+ ResTIMG* _res = (ResTIMG*)res;
+
+ if (_res->indexTexture) {
+ GXInitTlutObj(o_tlutObj, (void*)((u8*)_res + _res->paletteOffset),
+ (GXTlutFmt)_res->colorFormat, _res->numColors);
+ GXInitTexObjCI(o_texObj, (void*)((u8*)_res + _res->imageOffset), _res->width, _res->height,
+ (GXCITexFmt)_res->format, (GXTexWrapMode)_res->wrapS,
+ (GXTexWrapMode)_res->wrapT, _res->mipmapCount > 1, tlut_name);
+ } else {
+ GXInitTexObj(o_texObj, (void*)((u8*)_res + _res->imageOffset), _res->width, _res->height,
+ (GXTexFmt)_res->format, (GXTexWrapMode)_res->wrapS, (GXTexWrapMode)_res->wrapT,
+ _res->mipmapCount > 1);
+ }
+ GXInitTexObjLOD(o_texObj, (GXTexFilter)_res->minFilter, (GXTexFilter)_res->magFilter,
+ (f32)_res->minLOD * 0.125f, (f32)_res->maxLOD * 0.125f,
+ (f32)_res->LODBias * 0.01f, (s32)_res->biasClamp, (s32)_res->doEdgeLOD,
+ (GXAnisotropy)_res->maxAnisotropy);
+
+ return _res->indexTexture;
+}
+
+/* 803DD8E4-803DD940 00A604 005C+00 2/2 5/5 5/5 .bss mClipper__14mDoLib_clipper */
+J3DUClipper mDoLib_clipper::mClipper;
+
+/* 80450C70-80450C74 000170 0004+00 1/1 2/2 4/4 .sbss mSystemFar__14mDoLib_clipper */
+f32 mDoLib_clipper::mSystemFar;
+
+/* 80450C74-80450C78 000174 0004+00 1/1 1/1 0/0 .sbss mFovyRate__14mDoLib_clipper */
+f32 mDoLib_clipper::mFovyRate;
+
+/* 8001528C-80015310 00FBCC 0084+00 0/0 1/1 0/0 .text setup__14mDoLib_clipperFffff */
+void mDoLib_clipper::setup(f32 fovy, f32 aspect, f32 near, f32 far) {
+ mClipper.setFovy(fovy);
+ mClipper.setAspect(aspect);
+ mClipper.setNear(near);
+ mClipper.setFar(far);
+ mSystemFar = far;
+ mClipper.calcViewFrustum();
+
+ s16 tmp = fovy * 182.04444885253906f;
+
+ mFovyRate = cM_scos(tmp) / cM_ssin(tmp);
+}
+
+/* 80015310-800154EC 00FC50 01DC+00 0/0 21/21 23/23 .text mDoLib_project__FP3VecP3Vec */
+void mDoLib_project(Vec* src, Vec* dst) {
+ if (dComIfGd_getView() == NULL) {
+ dst->x = 0.0f;
+ dst->y = 0.0f;
+ dst->z = 0.0f;
+ return;
+ }
+ Mtx44* projMtx = dComIfGd_getProjViewMtx();
+ Vec multVec;
+ cMtx_multVec(*projMtx, src, &multVec);
+
+ float calcFloat = (src->x * (*dComIfGd_getProjViewMtx())[3][0]) +
+ (src->y * (*dComIfGd_getProjViewMtx())[3][1]) +
+ (src->z * (*dComIfGd_getProjViewMtx())[3][2]) +
+ (*dComIfGd_getProjViewMtx())[3][3];
+ if (multVec.z >= 0.0f) {
+ multVec.z = 0.0f;
+ }
+ float f3;
+ if (calcFloat <= 0.0f) {
+ if (calcFloat == 0.0f) {
+ dst->z = multVec.z * 500000.0f;
+ } else {
+ dst->z = multVec.z * (0.5f / calcFloat);
+ }
+ f3 = 500000.0f;
+ } else {
+ f3 = 0.5f / calcFloat;
+ dst->z = multVec.z * f3;
+ }
+
+ view_port_class* viewPort = dComIfGd_getViewport();
+ float xOffset;
+ float yOffset;
+ float xSize;
+ float ySize;
+ if (viewPort->mXOrig != 0.0f) {
+ xOffset = (0.5f * ((2.0f * viewPort->mXOrig) + viewPort->mWidth)) - 304.0f;
+ xSize = 608.0f;
+ } else {
+ xOffset = viewPort->mXOrig;
+ xSize = viewPort->mWidth;
+ }
+
+ if (viewPort->mYOrig != 0.0f) {
+ yOffset = (0.5f * ((2.0f * viewPort->mYOrig) + viewPort->mHeight)) - 224.0f;
+ ySize = 448.0f;
+ } else {
+ yOffset = viewPort->mYOrig;
+ ySize = viewPort->mHeight;
+ }
+
+ dst->x = ((0.5f + (multVec.x * f3)) * xSize) + xOffset;
+ dst->y = ((0.5f + (multVec.y * (-f3))) * ySize) + yOffset;
+}
+
+/* 800154EC-80015544 00FE2C 0058+00 0/0 2/2 9/9 .text mDoLib_pos2camera__FP3VecP3Vec */
+void mDoLib_pos2camera(Vec* src, Vec* dst) {
+ if (dComIfGd_getView() == NULL) {
+ dst->x = 0.0f;
+ dst->y = 0.0f;
+ dst->z = 0.0f;
+ return;
+ }
+ cMtx_multVec(dComIfGd_getView()->mViewMtx, src, dst);
+}
+
+// Fake function to make the weak function calcAlphaCmpID appear in this TU
+u32 mDoLib_calcAlphaCmpID(u8 param_0, u8 param_1, u8 param_2) {
+ return calcAlphaCmpID(param_0, param_1, param_2);
+}
|
