mirror of
https://github.com/zeldaret/tp
synced 2026-07-09 23:01:41 -04:00
work on J3DMaterialFactory and J3DMaterialFactory_v21 (#2012)
This commit is contained in:
+1
-1
@@ -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);
|
||||
|
||||
+18
-17
@@ -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"
|
||||
}
|
||||
|
||||
+132
-126
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user