summaryrefslogtreecommitdiff
path: root/src/JSystem/J3DGraphBase/J3DMatBlock.cpp
diff options
context:
space:
mode:
authorLuke Street <luke@street.dev>2026-03-01 15:35:36 -0700
committerGitHub <noreply@github.com>2026-03-01 14:35:36 -0800
commit9649319ec4926457ef85e6094f8207474c977c2d (patch)
tree1c5cd4c7cc4c1aee03f28921213da47f2775444d /src/JSystem/J3DGraphBase/J3DMatBlock.cpp
parent6e149819e13b1f70ecbf8a4c66b030c17ffed2bb (diff)
Reorganize library code into `libs/` (#3119)
* Reorganize files into libs/{dolphin,JSystem,PowerPC_EABI_Support,revolution,TRK_MINNOW_DOLPHIN} * Update configure.py and project.py for new libs structure * Refactor `#include <dolphin/x.h>` -> `<x.h>` * Remove `__REVOLUTION_SDK__` forwards from dolphin * Fix dolphin/ references in revolution * Wrap `#include <dolphin.h>` in `!__REVOLUTION_SDK__` * Always build TRK against dolphin headers * Resolve revolution SDK header resolution issues
Diffstat (limited to 'src/JSystem/J3DGraphBase/J3DMatBlock.cpp')
-rw-r--r--src/JSystem/J3DGraphBase/J3DMatBlock.cpp2019
1 files changed, 0 insertions, 2019 deletions
diff --git a/src/JSystem/J3DGraphBase/J3DMatBlock.cpp b/src/JSystem/J3DGraphBase/J3DMatBlock.cpp
deleted file mode 100644
index 004189a89b..0000000000
--- a/src/JSystem/J3DGraphBase/J3DMatBlock.cpp
+++ /dev/null
@@ -1,2019 +0,0 @@
-#include "JSystem/JSystem.h" // IWYU pragma: keep
-
-#include "JSystem/J3DGraphBase/J3DMatBlock.h"
-#include "JSystem/J3DGraphBase/J3DPacket.h"
-#include "JSystem/J3DGraphBase/J3DSys.h"
-#include "JSystem/J3DGraphBase/J3DTransform.h"
-#include "global.h"
-#include <cstring>
-
-inline void loadMatColors(const J3DGXColor* color) {
- J3DGDWriteXFCmdHdr(0x100C, 2);
- J3DGDWrite_u32(*(u32*)color);
- J3DGDWrite_u32(*(u32*)(color + 1));
-}
-
-inline void loadAmbColors(const J3DGXColor* color) {
- J3DGDWriteXFCmdHdr(0x100A, 2);
- J3DGDWrite_u32(*(u32*)color);
- J3DGDWrite_u32(*(u32*)(color + 1));
-}
-
-inline void loadTexCoordScale(GXTexCoordID coord, const J3DTexCoordScaleInfo& info) {
- J3DGDSetTexCoordScale2(coord, info.field_0x00, info.field_0x04 == 1, 0, info.field_0x02, info.field_0x06 == 1, 0);
-}
-
-inline void loadTevColor(u32 reg, const J3DGXColorS10& color) {
- J3DGDSetTevColorS10(GXTevRegID(reg + 1), color);
-}
-
-inline void loadTevKColor(u32 reg, const J3DGXColor& color) {
- J3DGDSetTevKColor(GXTevKColorID(reg), color);
-}
-
-void J3DColorBlockLightOff::initialize() {
- mColorChanNum = 0;
- for (int i = 0; i < ARRAY_SIZE(mMatColor); i++) {
- mMatColor[i] = j3dDefaultColInfo;
- }
- mMatColorOffset = 0;
- mColorChanOffset = 0;
-}
-
-void J3DColorBlockAmbientOn::initialize() {
- mColorChanNum = 0;
- for (int i = 0; i < ARRAY_SIZE(mMatColor); i++) {
- mMatColor[i] = j3dDefaultColInfo;
- }
- for (int i = 0; i < ARRAY_SIZE(mAmbColor); i++) {
- mAmbColor[i] = j3dDefaultAmbInfo;
- }
- mMatColorOffset = 0;
- mColorChanOffset = 0;
-}
-
-void J3DColorBlockLightOn::initialize() {
- mColorChanNum = 0;
- for (int i = 0; i < ARRAY_SIZE(mMatColor); i++) {
- mMatColor[i] = j3dDefaultColInfo;
- }
- for (int i = 0; i < ARRAY_SIZE(mAmbColor); i++) {
- mAmbColor[i] = j3dDefaultAmbInfo;
- }
- for (int i = 0; i < ARRAY_SIZE(mLight); i++) {
- mLight[i] = NULL;
- }
- mMatColorOffset = 0;
- mColorChanOffset = 0;
-}
-
-void J3DTexGenBlockPatched::initialize() {
- mTexGenNum = 0;
- for (int i = 0; i < 8; i++)
- mTexMtx[i] = NULL;
- mTexMtxOffset = 0;
-}
-
-void J3DTexGenBlock4::initialize() {
- mTexGenNum = 0;
- for (int i = 0; i < 4; i++)
- mTexMtx[i] = NULL;
- mTexMtxOffset = 0;
-}
-
-void J3DTexGenBlockBasic::initialize() {
- mTexGenNum = 0;
- for (int i = 0; i < 8; i++)
- mTexMtx[i] = NULL;
- mTexMtxOffset = 0;
-}
-
-void J3DTevBlockNull::initialize() {
- mTexNoOffset = 0;
-}
-
-void J3DTevBlockPatched::initialize() {
- for (int i = 0; i < ARRAY_SIZE(mTexNo); i++) {
- mTexNo[i] = 0xFFFF;
- }
- for (int i = 0; i < ARRAY_SIZEU(mTevStage); i++) {
- mTevStage[i].setStageNo(i);
- }
- for (int i = 0; i < 3; i++) {
- mTevColor[i] = j3dDefaultTevColor;
- }
- for (int i = 0; i < ARRAY_SIZE(mTevKColor); i++) {
- mTevKColor[i] = j3dDefaultTevKColor;
- }
- for (int i = 0; i < ARRAY_SIZE(mTevKColorSel); i++) {
- mTevKColorSel[i] = GX_TEV_KCSEL_K0;
- }
-
- mTevStageNum = 1;
- mTexNoOffset = 0;
- mTevRegOffset = 0;
-}
-
-void J3DTevBlock1::initialize() {
- mTexNo[0] = 0xFFFF;
- mTevStage[0].setStageNo(0);
- mTexNoOffset = 0;
-}
-
-void J3DTevBlock2::initialize() {
- mTexNo[0] = 0xFFFF;
- mTexNo[1] = 0xFFFF;
- mTevStageNum = 1;
-
- mTevStage[0].setStageNo(0);
- mTevStage[1].setStageNo(1);
- mTevKColorSel[0] = GX_TEV_KCSEL_K0;
- mTevKColorSel[1] = GX_TEV_KCSEL_K0;
- mTevKAlphaSel[0] = GX_TEV_KASEL_K0_A;
- mTevKAlphaSel[1] = GX_TEV_KASEL_K0_A;
-
- for (int i = 0; i < 3; i++) {
- mTevColor[i] = j3dDefaultTevColor;
- }
- for (int i = 0; i < ARRAY_SIZE(mTevKColor); i++) {
- mTevKColor[i] = j3dDefaultTevKColor;
- }
-
- mTexNoOffset = 0;
- mTevRegOffset = 0;
-}
-
-void J3DTevBlock4::initialize() {
- mTexNo[0] = 0xFFFF;
- mTexNo[1] = 0xFFFF;
- mTexNo[2] = 0xFFFF;
- mTexNo[3] = 0xFFFF;
- mTevStageNum = 1;
-
- mTevStage[0].setStageNo(0);
- mTevStage[1].setStageNo(1);
- mTevStage[2].setStageNo(2);
- mTevStage[3].setStageNo(3);
-
- mTevKColorSel[0] = GX_TEV_KCSEL_K0;
- mTevKColorSel[1] = GX_TEV_KCSEL_K0;
- mTevKColorSel[2] = GX_TEV_KCSEL_K0;
- mTevKColorSel[3] = GX_TEV_KCSEL_K0;
- mTevKAlphaSel[0] = GX_TEV_KASEL_K0_A;
- mTevKAlphaSel[1] = GX_TEV_KASEL_K0_A;
- mTevKAlphaSel[2] = GX_TEV_KASEL_K0_A;
- mTevKAlphaSel[3] = GX_TEV_KASEL_K0_A;
-
- for (int i = 0; i < 3; i++) {
- mTevColor[i] = j3dDefaultTevColor;
- }
- for (int i = 0; i < ARRAY_SIZE(mTevKColor); i++) {
- mTevKColor[i] = j3dDefaultTevKColor;
- }
-
- mTexNoOffset = 0;
- mTevRegOffset = 0;
-}
-
-void J3DTevBlock16::initialize() {
- for (int i = 0; i < ARRAY_SIZE(mTexNo); i++) {
- mTexNo[i] = 0xFFFF;
- }
-
- mTevStageNum = 1;
-
- for (int i = 0; i < 3; i++) {
- mTevColor[i] = j3dDefaultTevColor;
- }
- for (int i = 0; i < ARRAY_SIZE(mTevKColor); i++) {
- mTevKColor[i] = j3dDefaultTevKColor;
- }
- for (int i = 0; i < ARRAY_SIZE(mTevKColorSel); i++) {
- mTevKColorSel[i] = GX_TEV_KCSEL_K0;
- }
- for (int i = 0; i < ARRAY_SIZE(mTevKColorSel); i++) {
- mTevKAlphaSel[i] = GX_TEV_KASEL_K0_A;
- }
- for (int i = 0; i < ARRAY_SIZEU(mTevStage); i++) {
- mTevStage[i].setStageNo(i);
- }
-
- mTexNoOffset = 0;
- mTevRegOffset = 0;
-}
-
-void J3DIndBlockFull::initialize() {
- mIndTexStageNum = 0;
-}
-
-void J3DPEBlockFogOff::initialize() {
- mAlphaComp = 0xFFFF;
- mZMode = 0xFFFF;
- mZCompLoc = 0xFF;
- mDither = 1;
-}
-
-void J3DPEBlockFull::initialize() {
- mAlphaComp = 0xFFFF;
- mZMode = 0xFFFF;
- mZCompLoc = 0xFF;
- mDither = 1;
- mFogOffset = 0;
-}
-
-s32 J3DColorBlockLightOff::countDLSize() {
- return 34;
-}
-
-s32 J3DColorBlockAmbientOn::countDLSize() {
- return 47;
-}
-
-s32 J3DColorBlockLightOn::countDLSize() {
- return 623;
-}
-
-s32 J3DTexGenBlockPatched::countDLSize() {
- return 424;
-}
-
-s32 J3DTexGenBlock4::countDLSize() {
- return 254;
-}
-
-s32 J3DTexGenBlockBasic::countDLSize() {
- return 498;
-}
-
-s32 J3DTevBlockPatched::countDLSize() {
- return 560;
-}
-
-s32 J3DTevBlock1::countDLSize() {
- return 105;
-}
-
-s32 J3DTevBlock2::countDLSize() {
- return 335;
-}
-
-s32 J3DTevBlock4::countDLSize() {
- return 580;
-}
-
-s32 J3DTevBlock16::countDLSize() {
- return 1000;
-}
-
-s32 J3DIndBlockFull::countDLSize() {
- return 140;
-}
-
-s32 J3DPEBlockOpa::countDLSize() {
- return 30;
-}
-
-s32 J3DPEBlockTexEdge::countDLSize() {
- return 30;
-}
-
-s32 J3DPEBlockXlu::countDLSize() {
- return 30;
-}
-
-s32 J3DPEBlockFogOff::countDLSize() {
- return 30;
-}
-
-s32 J3DPEBlockFull::countDLSize() {
- return 85;
-}
-
-static u32 SizeOfLoadMatColors = 13;
-
-static u32 SizeOfLoadAmbColors = 13;
-
-static u32 SizeOfLoadColorChans = 21;
-
-static u32 SizeOfJ3DColorBlockLightOffLoad = SizeOfLoadMatColors + SizeOfLoadColorChans;
-
-void J3DColorBlockLightOff::load() {
- GDOverflowCheck(SizeOfJ3DColorBlockLightOffLoad);
- mMatColorOffset = GDGetCurrOffset();
- loadMatColors(mMatColor);
- mColorChanOffset = GDGetCurrOffset();
- J3DGDWriteXFCmdHdr(XF_REG_COLOR0CNTRL_ID, 4);
-
- mColorChan[0].load();
- mColorChan[2].load();
- mColorChan[1].load();
- mColorChan[3].load();
-}
-
-static u32 SizeOfJ3DColorBlockAmbientOnLoad = SizeOfLoadMatColors + SizeOfLoadAmbColors + SizeOfLoadColorChans;
-
-void J3DColorBlockAmbientOn::load() {
- GDOverflowCheck(SizeOfJ3DColorBlockAmbientOnLoad);
- mMatColorOffset = GDGetCurrOffset();
- loadMatColors(mMatColor);
- loadAmbColors(mAmbColor);
- mColorChanOffset = GDGetCurrOffset();
- J3DGDWriteXFCmdHdr(XF_REG_COLOR0CNTRL_ID, 4);
-
- mColorChan[0].load();
- mColorChan[2].load();
- mColorChan[1].load();
- mColorChan[3].load();
-}
-
-void J3DColorBlockLightOn::load() {
- GDOverflowCheck(SizeOfJ3DColorBlockAmbientOnLoad);
- mMatColorOffset = GDGetCurrOffset();
- loadMatColors(mMatColor);
- loadAmbColors(mAmbColor);
- mColorChanOffset = GDGetCurrOffset();
- J3DGDWriteXFCmdHdr(XF_REG_COLOR0CNTRL_ID, 4);
-
- mColorChan[0].load();
- mColorChan[2].load();
- mColorChan[1].load();
- mColorChan[3].load();
-
- for (u32 i = 0; i < 8; i++) {
- if (mLight[i] != NULL) {
- mLight[i]->load(i);
- }
- }
-}
-
-void J3DColorBlockLightOff::patch() {
- patchMatColor();
- patchLight();
-}
-
-void J3DColorBlockLightOff::patchMatColor() {
- GDSetCurrOffset(mMatColorOffset);
- void* start = GDGetCurrPointer();
- GDOverflowCheck(SizeOfLoadMatColors);
- loadMatColors(mMatColor);
- void* end = GDGetCurrPointer();
- DCStoreRange(start, (uintptr_t)end - (uintptr_t)start);
-}
-
-void J3DColorBlockLightOff::patchLight() {
- GDSetCurrOffset(mColorChanOffset);
- void* start = GDGetCurrPointer();
- GDOverflowCheck(SizeOfLoadColorChans);
- J3DGDWriteXFCmdHdr(XF_REG_COLOR0CNTRL_ID, 4);
-
- mColorChan[0].load();
- mColorChan[2].load();
- mColorChan[1].load();
- mColorChan[3].load();
-
- void* end = GDGetCurrPointer();
- DCStoreRange(start, (uintptr_t)end - (uintptr_t)start);
-}
-
-void J3DColorBlockLightOn::patch() {
- patchMatColor();
- patchLight();
-}
-
-void J3DColorBlockLightOn::patchMatColor() {
- GDSetCurrOffset(mMatColorOffset);
- void* start = GDGetCurrPointer();
- GDOverflowCheck(SizeOfLoadMatColors);
- loadMatColors(mMatColor);
- void* end = GDGetCurrPointer();
- DCStoreRange(start, (uintptr_t)end - (uintptr_t)start);
-}
-
-void J3DColorBlockLightOn::patchLight() {
- GDSetCurrOffset(mColorChanOffset);
- void* start = GDGetCurrPointer();
- GDOverflowCheck(SizeOfLoadColorChans);
- J3DGDWriteXFCmdHdr(XF_REG_COLOR0CNTRL_ID, 4);
-
- mColorChan[0].load();
- mColorChan[2].load();
- mColorChan[1].load();
- mColorChan[3].load();
-
- for (u32 i = 0; i < 8; i++) {
- if (mLight[i] != NULL) {
- mLight[i]->load(i);
- }
- }
-
- void* end = GDGetCurrPointer();
- DCStoreRange(start, (uintptr_t)end - (uintptr_t)start);
-}
-
-void J3DColorBlockLightOff::diff(u32 diffFlags) {
- if (diffFlags & J3DDiffFlag_MatColor)
- diffMatColor();
-
- if (diffFlags & J3DDiffFlag_ColorChan)
- diffColorChan();
-}
-
-void J3DColorBlockLightOff::diffMatColor() {
- GDOverflowCheck(SizeOfLoadMatColors);
- loadMatColors(mMatColor);
-}
-
-void J3DColorBlockLightOff::diffColorChan() {
- GDOverflowCheck(SizeOfLoadColorChans);
- J3DGDWriteXFCmdHdr(XF_REG_COLOR0CNTRL_ID, 4);
- mColorChan[0].load();
- mColorChan[2].load();
- mColorChan[1].load();
- mColorChan[3].load();
-}
-
-void J3DColorBlockLightOn::diff(u32 diffFlags) {
- if (diffFlags & J3DDiffFlag_AmbColor)
- diffAmbColor();
-
- if (diffFlags & J3DDiffFlag_MatColor)
- diffMatColor();
-
- if (diffFlags & J3DDiffFlag_ColorChan)
- diffColorChan();
-
- s32 lightObjNum = getDiffFlag_LightObjNum(diffFlags);
- if (lightObjNum != 0)
- diffLightObj(lightObjNum);
-}
-
-void J3DColorBlockLightOn::diffAmbColor() {
- GDOverflowCheck(SizeOfLoadAmbColors);
- loadAmbColors(mAmbColor);
-}
-
-void J3DColorBlockLightOn::diffMatColor() {
- GDOverflowCheck(SizeOfLoadMatColors);
- loadMatColors(mMatColor);
-}
-
-void J3DColorBlockLightOn::diffColorChan() {
- GDOverflowCheck(SizeOfLoadColorChans);
- J3DGDWriteXFCmdHdr(XF_REG_COLOR0CNTRL_ID, 4);
- mColorChan[0].load();
- mColorChan[2].load();
- mColorChan[1].load();
- mColorChan[3].load();
-}
-
-void J3DColorBlockLightOn::diffLightObj(u32 lightObjNum) {
- for (u32 i = 0; i < lightObjNum; i ++) {
- if (mLight[i] != NULL) {
- mLight[i]->load(i);
- }
- }
-}
-
-void J3DTexGenBlock4::load() {
- mTexMtxOffset = GDGetCurrOffset();
- for (u32 i = 0; i < 4; i++) {
- if (mTexMtx[i] && mTexCoord[i].getTexGenMtx() != GX_IDENTITY) {
- mTexMtx[i]->load(i);
- }
- }
-
- if (mTexGenNum != 0) {
- loadTexCoordGens(mTexGenNum, mTexCoord);
- }
-}
-
-void J3DTexGenBlockBasic::load() {
- mTexMtxOffset = GDGetCurrOffset();
- for (u32 i = 0; i < 8; i++) {
- if (mTexMtx[i] && mTexCoord[i].getTexGenMtx() != GX_IDENTITY) {
- mTexMtx[i]->load(i);
- }
- }
-
- if (mTexGenNum != 0) {
- loadTexCoordGens(mTexGenNum, mTexCoord);
- }
-}
-
-void J3DTexGenBlockPatched::patch() {
- GDSetCurrOffset(mTexMtxOffset);
- void* start = GDGetCurrPointer();
-
- for (u32 i = 0; i < 8; i++) {
- if (mTexMtx[i]) {
- mTexMtx[i]->load(i);
- }
- }
-
- void* end = GDGetCurrPointer();
- DCStoreRange(start, (uintptr_t)end - (uintptr_t)start);
-}
-
-void J3DTexGenBlock4::patch() {
- GDSetCurrOffset(mTexMtxOffset);
- void* start = GDGetCurrPointer();
-
- for (u32 i = 0; i < 4; i++) {
- if (mTexMtx[i] && mTexCoord[i].getTexGenMtx() != GX_IDENTITY) {
- mTexMtx[i]->load(i);
- }
- }
-
- void* end = GDGetCurrPointer();
- DCStoreRange(start, (uintptr_t)end - (uintptr_t)start);
-}
-
-void J3DTexGenBlockBasic::patch() {
- GDSetCurrOffset(mTexMtxOffset);
- void* start = GDGetCurrPointer();
-
- for (u32 i = 0; i < 8; i++) {
- if (mTexMtx[i] && mTexCoord[i].getTexGenMtx() != GX_IDENTITY) {
- mTexMtx[i]->load(i);
- }
- }
-
- void* end = GDGetCurrPointer();
- DCStoreRange(start, (uintptr_t)end - (uintptr_t)start);
-}
-
-void J3DTexGenBlockPatched::diff(u32 diffFlags) {
- if (getDiffFlag_TexGenNum(diffFlags)) {
- diffTexMtx();
-
- if (diffFlags & J3DDiffFlag_TexGen) {
- diffTexGen();
- }
- }
-}
-
-void J3DTexGenBlockPatched::diffTexMtx() {
- for (u32 i = 0; i < ARRAY_SIZEU(mTexMtx); ++i) {
- if (mTexMtx[i] != NULL) {
- mTexMtx[i]->load(i);
- }
- }
-}
-
-void J3DTexGenBlockPatched::diffTexGen() {
- if (mTexGenNum > 0) {
- loadTexCoordGens(mTexGenNum, mTexCoord);
- }
-}
-
-void J3DTevBlock1::load() {
- mTexNoOffset = GDGetCurrOffset();
- GDOverflowCheck(0x69);
-
- if (mTexNo[0] != 0xffff) {
- loadTexNo(0, mTexNo[0]);
- }
-
- J3DGDSetTevOrder(
- GX_TEVSTAGE0,
- GXTexCoordID(mTevOrder[0].getTevOrderInfo().mTexCoord),
- GXTexMapID(mTevOrder[0].getTevOrderInfo().mTexMap),
- GXChannelID(mTevOrder[0].getTevOrderInfo().mColorChan),
- GX_TEXCOORD_NULL,
- GX_TEXMAP_NULL,
- GX_COLOR_NULL
- );
-
- loadTexCoordScale(
- GXTexCoordID(mTevOrder[0].getTevOrderInfo().mTexCoord),
- J3DSys::sTexCoordScaleTable[mTevOrder[0].getTevOrderInfo().mTexMap & 7]
- );
-
- mTevStage[0].load(0);
- mIndTevStage[0].load(0);
-}
-
-void J3DTevBlock2::load() {
- u32 tevStageNum = mTevStageNum;
- mTexNoOffset = GDGetCurrOffset();
-
- for (u32 i = 0; i < 2; i++) {
- if (mTexNo[i] != 0xffff) {
- loadTexNo(i, mTexNo[i]);
- }
- }
-
- J3DGDSetTevOrder(
- GX_TEVSTAGE0,
- GXTexCoordID(mTevOrder[0].getTevOrderInfo().mTexCoord),
- GXTexMapID(mTevOrder[0].getTevOrderInfo().mTexMap),
- GXChannelID(mTevOrder[0].getTevOrderInfo().mColorChan),
- GXTexCoordID(mTevOrder[1].getTevOrderInfo().mTexCoord),
- GXTexMapID(mTevOrder[1].getTevOrderInfo().mTexMap),
- GXChannelID(mTevOrder[1].getTevOrderInfo().mColorChan)
- );
-
- loadTexCoordScale(
- GXTexCoordID(mTevOrder[0].getTevOrderInfo().mTexCoord),
- J3DSys::sTexCoordScaleTable[mTevOrder[0].getTevOrderInfo().mTexMap & 7]
- );
-
- loadTexCoordScale(
- GXTexCoordID(mTevOrder[1].getTevOrderInfo().mTexCoord & 7),
- J3DSys::sTexCoordScaleTable[mTevOrder[1].getTevOrderInfo().mTexMap & 7]
- );
-
- mTevRegOffset = GDGetCurrOffset();
-
- for (u32 i = 0; i < 3; i++) {
- loadTevColor(i, mTevColor[i]);
- }
- for (u32 i = 0; i < 4; i++) {
- loadTevKColor(i, mTevKColor[i]);
- }
- for (u32 i = 0; i < tevStageNum; i++) {
- mTevStage[i].load(i);
- mIndTevStage[i].load(i);
- }
-
- for (u32 i = 0; i < 16; i += 4) {
- J3DGDSetTevKonstantSel_SwapModeTable(
- GXTevStageID(i),
- GXTevKColorSel(mTevKColorSel[0]),
- GXTevKAlphaSel(mTevKAlphaSel[0]),
- GXTevKColorSel(mTevKColorSel[1]),
- GXTevKAlphaSel(mTevKAlphaSel[1]),
- GXTevColorChan(mTevSwapModeTable[i / 4].getR()),
- GXTevColorChan(mTevSwapModeTable[i / 4].getG())
- );
-
- J3DGDSetTevKonstantSel_SwapModeTable(
- GXTevStageID(i + 2),
- GXTevKColorSel(mTevKColorSel[0]),
- GXTevKAlphaSel(mTevKAlphaSel[0]),
- GXTevKColorSel(mTevKColorSel[1]),
- GXTevKAlphaSel(mTevKAlphaSel[1]),
- GXTevColorChan(mTevSwapModeTable[i / 4].getB()),
- GXTevColorChan(mTevSwapModeTable[i / 4].getA())
- );
- }
-}
-
-void J3DTevBlock4::load() {
- u32 tevStageNum = mTevStageNum;
- mTexNoOffset = GDGetCurrOffset();
-
- for (u32 i = 0; i < 4; i++) {
- if (mTexNo[i] != 0xffff) {
- loadTexNo(i, mTexNo[i]);
- }
- }
-
- for (u32 i = 0; i < tevStageNum; i += 2) {
- J3DGDSetTevOrder(
- GXTevStageID(i),
- GXTexCoordID(mTevOrder[i].getTevOrderInfo().mTexCoord),
- GXTexMapID(mTevOrder[i].getTevOrderInfo().mTexMap),
- GXChannelID(mTevOrder[i].getTevOrderInfo().mColorChan),
- GXTexCoordID(mTevOrder[i + 1].getTevOrderInfo().mTexCoord),
- GXTexMapID(mTevOrder[i + 1].getTevOrderInfo().mTexMap),
- GXChannelID(mTevOrder[i + 1].getTevOrderInfo().mColorChan)
- );
-
- loadTexCoordScale(
- GXTexCoordID(mTevOrder[i].getTevOrderInfo().mTexCoord & 7),
- J3DSys::sTexCoordScaleTable[mTevOrder[i].getTevOrderInfo().mTexMap & 7]
- );
-
- loadTexCoordScale(
- GXTexCoordID(mTevOrder[i + 1].getTevOrderInfo().mTexCoord & 7),
- J3DSys::sTexCoordScaleTable[mTevOrder[i + 1].getTevOrderInfo().mTexMap & 7]
- );
- }
-
- mTevRegOffset = GDGetCurrOffset();
-
- for (u32 i = 0; i < 3; i++) {
- loadTevColor(i, mTevColor[i]);
- }
- for (u32 i = 0; i < 4; i++) {
- loadTevKColor(i, mTevKColor[i]);
- }
- for (u32 i = 0; i < tevStageNum; i++) {
- mTevStage[i].load(i);
- mIndTevStage[i].load(i);
- }
-
- for (u32 i = 0; i < 16; i += 4) {
- J3DGDSetTevKonstantSel_SwapModeTable(
- GXTevStageID(i),
- GXTevKColorSel(mTevKColorSel[0]),
- GXTevKAlphaSel(mTevKAlphaSel[0]),
- GXTevKColorSel(mTevKColorSel[1]),
- GXTevKAlphaSel(mTevKAlphaSel[1]),
- GXTevColorChan(mTevSwapModeTable[i / 4].getR()),
- GXTevColorChan(mTevSwapModeTable[i / 4].getG())
- );
-
- J3DGDSetTevKonstantSel_SwapModeTable(
- GXTevStageID(i + 2),
- GXTevKColorSel(mTevKColorSel[2]),
- GXTevKAlphaSel(mTevKAlphaSel[2]),
- GXTevKColorSel(mTevKColorSel[3]),
- GXTevKAlphaSel(mTevKAlphaSel[3]),
- GXTevColorChan(mTevSwapModeTable[i / 4].getB()),
- GXTevColorChan(mTevSwapModeTable[i / 4].getA())
- );
- }
-}
-
-void J3DTevBlock16::load() {
- u32 tevStageNum = mTevStageNum;
- mTexNoOffset = GDGetCurrOffset();
-
- for (u32 i = 0; i < 8; i++) {
- if (mTexNo[i] != 0xffff) {
- loadTexNo(i, mTexNo[i]);
- }
- }
-
- for (u32 i = 0; i < tevStageNum; i += 2) {
- J3DGDSetTevOrder(
- GXTevStageID(i),
- GXTexCoordID(mTevOrder[i].getTevOrderInfo().mTexCoord),
- GXTexMapID(mTevOrder[i].getTevOrderInfo().mTexMap),
- GXChannelID(mTevOrder[i].getTevOrderInfo().mColorChan),
- GXTexCoordID(mTevOrder[i + 1].getTevOrderInfo().mTexCoord),
- GXTexMapID(mTevOrder[i + 1].getTevOrderInfo().mTexMap),
- GXChannelID(mTevOrder[i + 1].getTevOrderInfo().mColorChan)
- );
-
- loadTexCoordScale(
- GXTexCoordID(mTevOrder[i].getTevOrderInfo().mTexCoord & 7),
- J3DSys::sTexCoordScaleTable[mTevOrder[i].getTevOrderInfo().mTexMap & 7]
- );
-
- loadTexCoordScale(
- GXTexCoordID(mTevOrder[i + 1].getTevOrderInfo().mTexCoord & 7),
- J3DSys::sTexCoordScaleTable[mTevOrder[i + 1].getTevOrderInfo().mTexMap & 7]
- );
- }
-
- mTevRegOffset = GDGetCurrOffset();
-
- for (u32 i = 0; i < 3; i++) {
- loadTevColor(i, mTevColor[i]);
- }
- for (u32 i = 0; i < 4; i++) {
- loadTevKColor(i, mTevKColor[i]);
- }
- for (u32 i = 0; i < tevStageNum; i++) {
- mTevStage[i].load(i);
- mIndTevStage[i].load(i);
- }
-
- for (u32 i = 0; i < 16; i += 4) {
- J3DGDSetTevKonstantSel_SwapModeTable(
- GXTevStageID(i),
- GXTevKColorSel(mTevKColorSel[i]),
- GXTevKAlphaSel(mTevKAlphaSel[i]),
- GXTevKColorSel(mTevKColorSel[i + 1]),
- GXTevKAlphaSel(mTevKAlphaSel[i + 1]),
- GXTevColorChan(mTevSwapModeTable[i / 4].getR()),
- GXTevColorChan(mTevSwapModeTable[i / 4].getG())
- );
-
- J3DGDSetTevKonstantSel_SwapModeTable(
- GXTevStageID(i + 2),
- GXTevKColorSel(mTevKColorSel[i + 2]),
- GXTevKAlphaSel(mTevKAlphaSel[i + 2]),
- GXTevKColorSel(mTevKColorSel[i + 3]),
- GXTevKAlphaSel(mTevKAlphaSel[i + 3]),
- GXTevColorChan(mTevSwapModeTable[i / 4].getB()),
- GXTevColorChan(mTevSwapModeTable[i / 4].getA())
- );
- }
-}
-
-
-void J3DTevBlockPatched::patchTexNo() {
- GDSetCurrOffset(mTexNoOffset);
- void* start = GDGetCurrPointer();
-
- for (u32 i = 0; i < 8; i++) {
- if (mTexNo[i] != 0xffff) {
- loadTexNo(i, mTexNo[i]);
- }
- }
-
- void* end = GDGetCurrPointer();
- DCStoreRange(start, (uintptr_t)end - (uintptr_t)start);
-}
-
-void J3DTevBlockPatched::patchTevReg() {
- GDSetCurrOffset(mTevRegOffset);
- void* start = GDGetCurrPointer();
-
- for (u32 i = 0; i < ARRAY_SIZEU(mTevColor) - 1; i++) {
- loadTevColor(i, mTevColor[i]);
- }
- for (u32 i = 0; i < ARRAY_SIZEU(mTevKColor); i++) {
- loadTevKColor(i, mTevKColor[i]);
- }
-
- void* end = GDGetCurrPointer();
- DCStoreRange(start, (uintptr_t)end - (uintptr_t)start);
-}
-
-void J3DTevBlockPatched::patchTexNoAndTexCoordScale() {
- GDSetCurrOffset(mTexNoOffset);
- void* start = GDGetCurrPointer();
-
- u32 tevStageNum = mTevStageNum;
- for (u32 i = 0; i < 8; i++) {
- if (mTexNo[i] != 0xffff) {
- loadTexNo(i, mTexNo[i]);
- }
- }
-
- for (u32 i = 0; i < tevStageNum; i += 2) {
- J3DGDSetTevOrder(
- GXTevStageID(i),
- GXTexCoordID(mTevOrder[i].getTevOrderInfo().mTexCoord),
- GXTexMapID(mTevOrder[i].getTevOrderInfo().mTexMap),
- GXChannelID(mTevOrder[i].getTevOrderInfo().mColorChan),
- GXTexCoordID(mTevOrder[i + 1].getTevOrderInfo().mTexCoord),
- GXTexMapID(mTevOrder[i + 1].getTevOrderInfo().mTexMap),
- GXChannelID(mTevOrder[i + 1].getTevOrderInfo().mColorChan)
- );
-
- loadTexCoordScale(
- GXTexCoordID(mTevOrder[i].getTevOrderInfo().mTexCoord & 7),
- J3DSys::sTexCoordScaleTable[mTevOrder[i].getTevOrderInfo().mTexMap & 7]
- );
-
- loadTexCoordScale(
- GXTexCoordID(mTevOrder[i + 1].getTevOrderInfo().mTexCoord & 7),
- J3DSys::sTexCoordScaleTable[mTevOrder[i + 1].getTevOrderInfo().mTexMap & 7]
- );
- }
-
- void* end = GDGetCurrPointer();
- DCStoreRange(start, (uintptr_t)end - (uintptr_t)start);
-}
-
-void J3DTevBlockPatched::patch() {
- patchTexNo();
- patchTevReg();
-}
-
-void J3DTevBlock1::patchTexNo() {
- GDSetCurrOffset(mTexNoOffset);
- void* start = GDGetCurrPointer();
-
- if (mTexNo[0] != 0xFFFF) {
- loadTexNo(0, mTexNo[0]);
- }
-
- void* end = GDGetCurrPointer();
- DCStoreRange(start, (uintptr_t)end - (uintptr_t)start);
-}
-
-void J3DTevBlock1::patchTevReg() {}
-
-void J3DTevBlock1::patchTexNoAndTexCoordScale() {
- GDSetCurrOffset(mTexNoOffset);
- void* start = GDGetCurrPointer();
-
- if (mTexNo[0] != 0xffff) {
- loadTexNo(0, mTexNo[0]);
- }
-
- J3DGDSetTevOrder(
- GX_TEVSTAGE0,
- GXTexCoordID(mTevOrder[0].getTevOrderInfo().mTexCoord),
- GXTexMapID(mTevOrder[0].getTevOrderInfo().mTexMap),
- GXChannelID(mTevOrder[0].getTevOrderInfo().mColorChan),
- GX_TEXCOORD_NULL,
- GX_TEXMAP_NULL,
- GX_COLOR_NULL
- );
-
- loadTexCoordScale(
- GXTexCoordID(mTevOrder[0].getTevOrderInfo().mTexCoord),
- J3DSys::sTexCoordScaleTable[mTevOrder[0].getTevOrderInfo().mTexMap & 7]
- );
-
- void* end = GDGetCurrPointer();
- DCStoreRange(start, (uintptr_t)end - (uintptr_t)start);
-}
-
-void J3DTevBlock1::patch() {
- patchTexNo();
-}
-
-void J3DTevBlock2::patchTexNo() {
- GDSetCurrOffset(mTexNoOffset);
- void* start = GDGetCurrPointer();
-
- for (u32 i = 0; i < 2; i++) {
- if (mTexNo[i] != 0xffff) {
- loadTexNo(i, mTexNo[i]);
- }
- }
-
- void* end = GDGetCurrPointer();
- DCStoreRange(start, (uintptr_t)end - (uintptr_t)start);
-}
-
-void J3DTevBlock2::patchTevReg() {
- GDSetCurrOffset(mTevRegOffset);
- void* start = GDGetCurrPointer();
-
- for (u32 i = 0; i < ARRAY_SIZEU(mTevColor) - 1; i++) {
- loadTevColor(i, mTevColor[i]);
- }
- for (u32 i = 0; i < ARRAY_SIZEU(mTevKColor); i++) {
- loadTevKColor(i, mTevKColor[i]);
- }
-
- void* end = GDGetCurrPointer();
- DCStoreRange(start, (uintptr_t)end - (uintptr_t)start);
-}
-
-void J3DTevBlock2::patchTexNoAndTexCoordScale() {
- GDSetCurrOffset(mTexNoOffset);
- void* start = GDGetCurrPointer();
-
- for (u32 i = 0; i < 2; i++) {
- if (mTexNo[i] != 0xffff) {
- loadTexNo(i, mTexNo[i]);
- }
- }
-
- J3DGDSetTevOrder(
- GX_TEVSTAGE0,
- GXTexCoordID(mTevOrder[0].getTevOrderInfo().mTexCoord),
- GXTexMapID(mTevOrder[0].getTevOrderInfo().mTexMap),
- GXChannelID(mTevOrder[0].getTevOrderInfo().mColorChan),
- GXTexCoordID(mTevOrder[1].getTevOrderInfo().mTexCoord),
- GXTexMapID(mTevOrder[1].getTevOrderInfo().mTexMap),
- GXChannelID(mTevOrder[1].getTevOrderInfo().mColorChan)
- );
-
- loadTexCoordScale(
- GXTexCoordID(mTevOrder[0].getTevOrderInfo().mTexCoord),
- J3DSys::sTexCoordScaleTable[mTevOrder[0].getTevOrderInfo().mTexMap & 7]
- );
-
- loadTexCoordScale(
- GXTexCoordID(mTevOrder[1].getTevOrderInfo().mTexCoord & 7),
- J3DSys::sTexCoordScaleTable[mTevOrder[1].getTevOrderInfo().mTexMap & 7]
- );
-
- void* end = GDGetCurrPointer();
- DCStoreRange(start, (uintptr_t)end - (uintptr_t)start);
-}
-
-void J3DTevBlock2::patch() {
- patchTexNo();
- patchTevReg();
-}
-
-void J3DTevBlock4::patchTexNo() {
- GDSetCurrOffset(mTexNoOffset);
- void* start = GDGetCurrPointer();
-
- for (u32 i = 0; i < 4; i++) {
- if (mTexNo[i] != 0xffff) {
- loadTexNo(i, mTexNo[i]);
- }
- }
-
- void* end = GDGetCurrPointer();
- DCStoreRange(start, (uintptr_t)end - (uintptr_t)start);
-}
-
-void J3DTevBlock4::patchTevReg() {
- GDSetCurrOffset(mTevRegOffset);
- void* start = GDGetCurrPointer();
-
- for (u32 i = 0; i < ARRAY_SIZEU(mTevColor) - 1; i++) {
- loadTevColor(i, mTevColor[i]);
- }
- for (u32 i = 0; i < ARRAY_SIZEU(mTevKColor); i++) {
- loadTevKColor(i, mTevKColor[i]);
- }
-
- void* end = GDGetCurrPointer();
- DCStoreRange(start, (uintptr_t)end - (uintptr_t)start);
-}
-
-void J3DTevBlock4::patchTexNoAndTexCoordScale() {
- GDSetCurrOffset(mTexNoOffset);
- void* start = GDGetCurrPointer();
-
- u32 tevStageNum = mTevStageNum;
- for (u32 i = 0; i < 4; i++) {
- if (mTexNo[i] != 0xffff) {
- loadTexNo(i, mTexNo[i]);
- }
- }
-
- for (u32 i = 0; i < tevStageNum; i += 2) {
- J3DGDSetTevOrder(
- GXTevStageID(i),
- GXTexCoordID(mTevOrder[i].getTevOrderInfo().mTexCoord),
- GXTexMapID(mTevOrder[i].getTevOrderInfo().mTexMap),
- GXChannelID(mTevOrder[i].getTevOrderInfo().mColorChan),
- GXTexCoordID(mTevOrder[i + 1].getTevOrderInfo().mTexCoord),
- GXTexMapID(mTevOrder[i + 1].getTevOrderInfo().mTexMap),
- GXChannelID(mTevOrder[i + 1].getTevOrderInfo().mColorChan)
- );
-
- loadTexCoordScale(
- GXTexCoordID(mTevOrder[i].getTevOrderInfo().mTexCoord & 7),
- J3DSys::sTexCoordScaleTable[mTevOrder[i].getTevOrderInfo().mTexMap & 7]
- );
-
- loadTexCoordScale(
- GXTexCoordID(mTevOrder[i + 1].getTevOrderInfo().mTexCoord & 7),
- J3DSys::sTexCoordScaleTable[mTevOrder[i + 1].getTevOrderInfo().mTexMap & 7]
- );
- }
-
- void* end = GDGetCurrPointer();
- DCStoreRange(start, (uintptr_t)end - (uintptr_t)start);
-}
-void J3DTevBlock4::patch() {
- patchTexNo();
- patchTevReg();
-}
-
-void J3DTevBlock16::patchTexNo() {
- GDSetCurrOffset(mTexNoOffset);
- void* start = GDGetCurrPointer();
-
- for (u32 i = 0; i < 8; i++) {
- if (mTexNo[i] != 0xffff) {
- loadTexNo(i, mTexNo[i]);
- }
- }
-
- void* end = GDGetCurrPointer();
- DCStoreRange(start, (uintptr_t)end - (uintptr_t)start);
-}
-
-void J3DTevBlock16::patchTevReg() {
- GDSetCurrOffset(mTevRegOffset);
- void* start = GDGetCurrPointer();
-
- for (u32 i = 0; i < ARRAY_SIZEU(mTevColor) - 1; i++) {
- loadTevColor(i, mTevColor[i]);
- }
- for (u32 i = 0; i < ARRAY_SIZEU(mTevKColor); i++) {
- loadTevKColor(i, mTevKColor[i]);
- }
-
- void* end = GDGetCurrPointer();
- DCStoreRange(start, (uintptr_t)end - (uintptr_t)start);
-}
-
-void J3DTevBlock16::patchTexNoAndTexCoordScale() {
- GDSetCurrOffset(mTexNoOffset);
- void* start = GDGetCurrPointer();
-
- u32 tevStageNum = mTevStageNum;
- for (u32 i = 0; i < 8; i++) {
- if (mTexNo[i] != 0xffff) {
- loadTexNo(i, mTexNo[i]);
- }
- }
-
- for (u32 i = 0; i < tevStageNum; i += 2) {
- J3DGDSetTevOrder(
- GXTevStageID(i),
- GXTexCoordID(mTevOrder[i].getTevOrderInfo().mTexCoord),
- GXTexMapID(mTevOrder[i].getTevOrderInfo().mTexMap),
- GXChannelID(mTevOrder[i].getTevOrderInfo().mColorChan),
- GXTexCoordID(mTevOrder[i + 1].getTevOrderInfo().mTexCoord),
- GXTexMapID(mTevOrder[i + 1].getTevOrderInfo().mTexMap),
- GXChannelID(mTevOrder[i + 1].getTevOrderInfo().mColorChan)
- );
-
- loadTexCoordScale(
- GXTexCoordID(mTevOrder[i].getTevOrderInfo().mTexCoord & 7),
- J3DSys::sTexCoordScaleTable[mTevOrder[i].getTevOrderInfo().mTexMap & 7]
- );
-
- loadTexCoordScale(
- GXTexCoordID(mTevOrder[i + 1].getTevOrderInfo().mTexCoord & 7),
- J3DSys::sTexCoordScaleTable[mTevOrder[i + 1].getTevOrderInfo().mTexMap & 7]
- );
- }
-
- void* end = GDGetCurrPointer();
- DCStoreRange(start, (uintptr_t)end - (uintptr_t)start);
-}
-
-void J3DTevBlock16::patch() {
- patchTexNo();
- patchTevReg();
-}
-
-void J3DTevBlock::diff(u32 diffFlags) {
- if (getDiffFlag_TexNoNum(diffFlags)) {
- diffTexNo();
- }
-
- if (diffFlags & J3DDiffFlag_TexCoordScale) {
- diffTexCoordScale();
- }
-
- if (getDiffFlag_TevStageNum(diffFlags)) {
- diffTevStage();
-
- if (diffFlags & J3DDiffFlag_TevStageIndirect) {
- diffTevStageIndirect();
- }
- }
-
- if (diffFlags & J3DDiffFlag_TevReg) {
- diffTevReg();
- }
-}
-
-void J3DTevBlockPatched::diffTexNo() {
- for (u32 i = 0; i < ARRAY_SIZEU(mTexNo); i++) {
- if (mTexNo[i] != 0xFFFF) {
- loadTexNo(i, mTexNo[i]);
- }
- }
-}
-
-void J3DTevBlockPatched::diffTevStage() {
- u32 tevStageNum = mTevStageNum;
- for (u32 i = 0; i < tevStageNum; i++) {
- mTevStage[i].load(i);
- }
-}
-
-void J3DTevBlockPatched::diffTevStageIndirect() {
- u32 tevStageNum = mTevStageNum;
- for (u32 i = 0; i < tevStageNum; i++) {
- mIndTevStage[i].load(i);
- }
-}
-
-void J3DTevBlockPatched::diffTevReg() {
- for (u32 i = 0; i < ARRAY_SIZEU(mTevColor) - 1; i++) {
- loadTevColor(i, mTevColor[i]);
- }
- for (u32 i = 0; i < ARRAY_SIZEU(mTevKColor); i++) {
- loadTevKColor(i, mTevKColor[i]);
- }
-}
-
-void J3DTevBlockPatched::diffTexCoordScale() {
- u32 tevStageNum = mTevStageNum;
- for (u32 i = 0; i < tevStageNum; i += 2) {
- loadTexCoordScale(
- GXTexCoordID(mTevOrder[i].getTevOrderInfo().mTexCoord & 7),
- J3DSys::sTexCoordScaleTable[mTevOrder[i].getTevOrderInfo().mTexMap & 7]
- );
- loadTexCoordScale(
- GXTexCoordID(mTevOrder[i + 1].getTevOrderInfo().mTexCoord & 7),
- J3DSys::sTexCoordScaleTable[mTevOrder[i + 1].getTevOrderInfo().mTexMap & 7]
- );
- }
-}
-
-void J3DTevBlock1::diffTexNo() {
- if (mTexNo[0] != 0xFFFF) {
- loadTexNo(0, mTexNo[0]);
- }
-}
-
-void J3DTevBlock1::diffTevReg() {}
-
-void J3DTevBlock1::diffTevStage() {
- mTevStage[0].load(0);
-}
-
-void J3DTevBlock1::diffTevStageIndirect() {
- mIndTevStage[0].load(0);
-}
-
-void J3DTevBlock1::diffTexCoordScale() {
- loadTexCoordScale(
- GXTexCoordID(mTevOrder[0].getTevOrderInfo().mTexCoord),
- J3DSys::sTexCoordScaleTable[mTevOrder[0].getTevOrderInfo().mTexMap & 7]
- );
-}
-
-void J3DTevBlock2::diffTexNo() {
- for (u32 i = 0; i < ARRAY_SIZEU(mTexNo); i++) {
- if (mTexNo[i] != 0xFFFF) {
- loadTexNo(i, mTexNo[i]);
- }
- }
-}
-
-void J3DTevBlock2::diffTevReg() {
- for (u32 i = 0; i < ARRAY_SIZEU(mTevColor) - 1; i++) {
- loadTevColor(i, mTevColor[i]);
- }
- for (u32 i = 0; i < ARRAY_SIZEU(mTevKColor); i++) {
- loadTevKColor(i, mTevKColor[i]);
- }
-}
-
-void J3DTevBlock2::diffTevStage() {
- u32 tevStageNum = mTevStageNum;
- for (u32 i = 0; i < tevStageNum; i++) {
- mTevStage[i].load(i);
- }
-}
-
-void J3DTevBlock2::diffTevStageIndirect() {
- u32 tevStageNum = mTevStageNum;
- for (u32 i = 0; i < tevStageNum; i++) {
- mIndTevStage[i].load(i);
- }
-}
-
-void J3DTevBlock2::diffTexCoordScale() {
- loadTexCoordScale(
- GXTexCoordID(mTevOrder[0].getTevOrderInfo().mTexCoord),
- J3DSys::sTexCoordScaleTable[mTevOrder[0].getTevOrderInfo().mTexMap & 7]
- );
- loadTexCoordScale(
- GXTexCoordID(mTevOrder[1].getTevOrderInfo().mTexCoord & 7),
- J3DSys::sTexCoordScaleTable[mTevOrder[1].getTevOrderInfo().mTexMap & 7]
- );
-}
-
-void J3DTevBlock4::diffTexNo() {
- for (u32 i = 0; i < ARRAY_SIZEU(mTexNo); i++) {
- if (mTexNo[i] != 0xFFFF) {
- loadTexNo(i, mTexNo[i]);
- }
- }
-}
-
-void J3DTevBlock4::diffTevReg() {
- for (u32 i = 0; i < ARRAY_SIZEU(mTevColor) - 1; i++) {
- loadTevColor(i, mTevColor[i]);
- }
- for (u32 i = 0; i < ARRAY_SIZEU(mTevKColor); i++) {
- loadTevKColor(i, mTevKColor[i]);
- }
-}
-
-void J3DTevBlock4::diffTevStage() {
- u32 tevStageNum = mTevStageNum;
- for (u32 i = 0; i < tevStageNum; i++) {
- mTevStage[i].load(i);
- }
-}
-
-void J3DTevBlock4::diffTevStageIndirect() {
- u32 tevStageNum = mTevStageNum;
- for (u32 i = 0; i < tevStageNum; i++) {
- mIndTevStage[i].load(i);
- }
-}
-
-void J3DTevBlock4::diffTexCoordScale() {
- u32 tevStageNum = mTevStageNum;
- for (u32 i = 0; i < tevStageNum; i += 2) {
- loadTexCoordScale(
- GXTexCoordID(mTevOrder[i].getTevOrderInfo().mTexCoord & 7),
- J3DSys::sTexCoordScaleTable[mTevOrder[i].getTevOrderInfo().mTexMap & 7]
- );
- loadTexCoordScale(
- GXTexCoordID(mTevOrder[i + 1].getTevOrderInfo().mTexCoord & 7),
- J3DSys::sTexCoordScaleTable[mTevOrder[i + 1].getTevOrderInfo().mTexMap & 7]
- );
- }
-}
-void J3DTevBlock16::diffTexNo() {
- for (u32 i = 0; i < ARRAY_SIZEU(mTexNo); i++) {
- if (mTexNo[i] != 0xFFFF) {
- loadTexNo(i, mTexNo[i]);
- }
- }
-}
-
-void J3DTevBlock16::diffTevReg() {
- for (u32 i = 0; i < ARRAY_SIZEU(mTevColor) - 1; i++) {
- loadTevColor(i, mTevColor[i]);
- }
- for (u32 i = 0; i < ARRAY_SIZEU(mTevKColor); i++) {
- loadTevKColor(i, mTevKColor[i]);
- }
-}
-
-void J3DTevBlock16::diffTevStage() {
- u32 tevStageNum = mTevStageNum;
- for (u32 i = 0; i < tevStageNum; i++) {
- mTevStage[i].load(i);
- }
-}
-
-void J3DTevBlock16::diffTevStageIndirect() {
- u32 tevStageNum = mTevStageNum;
- for (u32 i = 0; i < tevStageNum; i++) {
- mIndTevStage[i].load(i);
- }
-}
-
-void J3DTevBlock16::diffTexCoordScale() {
- u32 tevStageNum = mTevStageNum;
- for (u32 i = 0; i < tevStageNum; i += 2) {
- loadTexCoordScale(
- GXTexCoordID(mTevOrder[i].getTevOrderInfo().mTexCoord & 7),
- J3DSys::sTexCoordScaleTable[mTevOrder[i].getTevOrderInfo().mTexMap & 7]
- );
- loadTexCoordScale(
- GXTexCoordID(mTevOrder[i + 1].getTevOrderInfo().mTexCoord & 7),
- J3DSys::sTexCoordScaleTable[mTevOrder[i + 1].getTevOrderInfo().mTexMap & 7]
- );
- }
-}
-
-void J3DTevBlock16::ptrToIndex() {
- GDSetCurrOffset(mTexNoOffset);
- void* start = GDGetCurrPointer();
-
- u32 offs = 0;
- for (u32 i = 0; i < 8; i++) {
- if (mTexNo[i] != 0xFFFF) {
- GDSetCurrOffset(mTexNoOffset + offs);
- patchTexNo_PtrToIdx(i, mTexNo[i]);
-
- ResTIMG* img = j3dSys.getTexture()->getResTIMG(mTexNo[i]);
- J3D_ASSERT_NULLPTR(2088, img != NULL);
-
- offs += 0x14;
- if (img->indexTexture == 1) {
- offs += 0x23;
- }
- }
- }
-
- void* end = GDGetCurrPointer();
- DCStoreRange(start, (uintptr_t)end - (uintptr_t)start);
-}
-
-void J3DTevBlockPatched::ptrToIndex() {
- GDSetCurrOffset(mTexNoOffset);
- void* start = GDGetCurrPointer();
-
- u32 offs = 0;
- for (u32 i = 0; i < 8; i++) {
- if (mTexNo[i] != 0xFFFF) {
- GDSetCurrOffset(mTexNoOffset + offs);
- patchTexNo_PtrToIdx(i, mTexNo[i]);
-
- ResTIMG* img = j3dSys.getTexture()->getResTIMG(mTexNo[i]);
- J3D_ASSERT_NULLPTR(2129, img != NULL);
-
- offs += 0x14;
- if (img->indexTexture == 1) {
- offs += 0x23;
- }
- }
- }
-
- void* end = GDGetCurrPointer();
- DCStoreRange(start, (uintptr_t)end - (uintptr_t)start);
-}
-
-void J3DTevBlock::indexToPtr_private(u32 offs) {
- GDSetCurrOffset(offs);
- void* start = GDGetCurrPointer();
-
- for (u32 i = 0; ; i++) {
- void* pDL = GDGetCurrPointer();
- if (!isTexNoReg(pDL)) {
- break;
- }
-
- u16 texNoReg = getTexNoReg(pDL);
- loadTexNo(i, texNoReg);
- }
-
- void* end = GDGetCurrPointer();
- DCStoreRange(start, (uintptr_t)end - (uintptr_t)start);
-}
-
-void J3DIndBlockFull::load() {
- int indTexStageNum = mIndTexStageNum;
- for (u32 i = 0; i < indTexStageNum; i++) {
- mIndTexMtx[i].load(i);
- }
-
- for (u32 i = 0; i < indTexStageNum; i += 2) {
- J3DGDSetIndTexCoordScale(
- GXIndTexStageID(i),
- (GXIndTexScale)mIndTexCoordScale[i].getScaleS(),
- (GXIndTexScale)mIndTexCoordScale[i].getScaleT(),
- (GXIndTexScale)mIndTexCoordScale[i + 1].getScaleS(),
- (GXIndTexScale)mIndTexCoordScale[i + 1].getScaleT()
- );
- }
-
- loadTexCoordScale((GXTexCoordID)mIndTexOrder[0].getCoord(), J3DSys::sTexCoordScaleTable[mIndTexOrder[0].getMap() & 7]);
- loadTexCoordScale((GXTexCoordID)mIndTexOrder[1].getCoord(), J3DSys::sTexCoordScaleTable[mIndTexOrder[1].getMap() & 7]);
- loadTexCoordScale((GXTexCoordID)mIndTexOrder[2].getCoord(), J3DSys::sTexCoordScaleTable[mIndTexOrder[2].getMap() & 7]);
- loadTexCoordScale((GXTexCoordID)mIndTexOrder[3].getCoord(), J3DSys::sTexCoordScaleTable[mIndTexOrder[3].getMap() & 7]);
-
- J3DGDSetIndTexOrder(
- indTexStageNum,
- (GXTexCoordID)mIndTexOrder[0].getCoord(),
- (GXTexMapID)mIndTexOrder[0].getMap(),
- (GXTexCoordID)mIndTexOrder[1].getCoord(),
- (GXTexMapID)mIndTexOrder[1].getMap(),
- (GXTexCoordID)mIndTexOrder[2].getCoord(),
- (GXTexMapID)mIndTexOrder[2].getMap(),
- (GXTexCoordID)mIndTexOrder[3].getCoord(),
- (GXTexMapID)mIndTexOrder[3].getMap()
- );
-}
-
-void J3DIndBlockFull::diff(u32 diffFlags) {
- if (diffFlags & J3DDiffFlag_TevStageIndirect) {
- u32 indTexStageNum = mIndTexStageNum;
- mIndTexMtx[0].load(0);
-
- J3DGDSetIndTexCoordScale(
- GX_INDTEXSTAGE0,
- (GXIndTexScale)mIndTexCoordScale[0].getScaleS(),
- (GXIndTexScale)mIndTexCoordScale[0].getScaleT(),
- (GXIndTexScale)mIndTexCoordScale[1].getScaleS(),
- (GXIndTexScale)mIndTexCoordScale[1].getScaleT()
- );
-
- loadTexCoordScale((GXTexCoordID)mIndTexOrder[0].getCoord(), J3DSys::sTexCoordScaleTable[mIndTexOrder[0].getMap() & 7]);
-
- J3DGDSetIndTexOrder(
- indTexStageNum,
- (GXTexCoordID)mIndTexOrder[0].getCoord(),
- (GXTexMapID)mIndTexOrder[0].getMap(),
- (GXTexCoordID)mIndTexOrder[1].getCoord(),
- (GXTexMapID)mIndTexOrder[1].getMap(),
- (GXTexCoordID)mIndTexOrder[2].getCoord(),
- (GXTexMapID)mIndTexOrder[2].getMap(),
- (GXTexCoordID)mIndTexOrder[3].getCoord(),
- (GXTexMapID)mIndTexOrder[3].getMap()
- );
- }
-}
-
-void J3DPEBlockOpa::load() {
- GDOverflowCheck(0x1e);
- J3DGDSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_AND, GX_ALWAYS, 0);
- J3DGDSetBlendMode(GX_BM_NONE, GX_BL_ONE, GX_BL_ZERO, GX_LO_COPY);
- J3DGDSetZMode(1, GX_LEQUAL, 1);
- J3DGDSetZCompLoc(1);
-}
-
-void J3DPEBlockTexEdge::load() {
- GDOverflowCheck(0x1e);
- J3DGDSetAlphaCompare(GX_GEQUAL, 0x80, GX_AOP_AND, GX_LEQUAL, 0xff);
- J3DGDSetBlendMode(GX_BM_NONE, GX_BL_ONE, GX_BL_ZERO, GX_LO_COPY);
- J3DGDSetZMode(1, GX_LEQUAL, 1);
- J3DGDSetZCompLoc(0);
-}
-
-void J3DPEBlockXlu::load() {
- GDOverflowCheck(0x1e);
- J3DGDSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_AND,GX_ALWAYS, 0);
- J3DGDSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_COPY);
- J3DGDSetZMode(1, GX_LEQUAL, 0);
- J3DGDSetZCompLoc(1);
-}
-
-inline void loadZCompLoc(u8 compLoc) {
- J3DGDSetZCompLoc(compLoc);
-}
-
-void J3DPEBlockFogOff::load() {
- GDOverflowCheck(0x1e);
- mAlphaComp.load();
- mBlend.load(mDither);
- mZMode.load();
- loadZCompLoc(mZCompLoc);
-}
-
-void J3DPEBlockFogOff::diffBlend() {
- GDOverflowCheck(0xf);
- mBlend.load(mDither);
- mZMode.load();
-}
-
-void J3DPEBlockFull::load() {
- mFogOffset = GDGetCurrOffset();
- GDOverflowCheck(0x55);
- mFog.load();
- mAlphaComp.load();
- mBlend.load(mDither);
- mZMode.load();
- loadZCompLoc(mZCompLoc);
-}
-
-void J3DPEBlockFull::patch() {
- GDSetCurrOffset(mFogOffset);
- GDOverflowCheck(0x37);
- void* start = GDGetCurrPointer();
- mFog.load();
- void* end = GDGetCurrPointer();
- DCStoreRange(start, (uintptr_t)end - (uintptr_t)start);
-}
-
-void J3DPEBlockFull::diffFog() {
- GDOverflowCheck(0x37);
- mFog.load();
-}
-
-void J3DPEBlockFull::diffBlend() {
- GDOverflowCheck(0xf);
- mBlend.load(mDither);
- mZMode.load();
-}
-
-void J3DPEBlockFull::diff(u32 diffFlags) {
- if ((diffFlags & J3DDiffFlag_Fog)) {
- diffFog();
- }
-
- if ((diffFlags & J3DDiffFlag_Blend)) {
- diffBlend();
- }
-}
-
-void J3DColorBlockLightOff::reset(J3DColorBlock* pBlock) {
- J3D_ASSERT_NULLPTR(2434, pBlock != NULL);
- mColorChanNum = pBlock->getColorChanNum();
-
- for (u32 i = 0; i < ARRAY_SIZEU(mMatColor); i++) {
- mMatColor[i] = *pBlock->getMatColor(i);
- }
- for (u32 i = 0; i < ARRAY_SIZEU(mColorChan); i++) {
- mColorChan[i] = *pBlock->getColorChan(i);
- }
-}
-
-void J3DColorBlockAmbientOn::reset(J3DColorBlock* pBlock) {
- J3D_ASSERT_NULLPTR(2451, pBlock != NULL);
- mColorChanNum = pBlock->getColorChanNum();
-
- for (u32 i = 0; i < ARRAY_SIZEU(mMatColor); i++) {
- mMatColor[i] = *pBlock->getMatColor(i);
- }
- for (u32 i = 0; i < ARRAY_SIZEU(mColorChan); i++) {
- mColorChan[i] = *pBlock->getColorChan(i);
- }
- for (u32 i = 0; i < ARRAY_SIZEU(mAmbColor); i++) {
- if (pBlock->getAmbColor(i) != NULL) {
- mAmbColor[i] = *pBlock->getAmbColor(i);
- }
- }
-}
-
-void J3DColorBlockLightOn::reset(J3DColorBlock* pBlock) {
- J3D_ASSERT_NULLPTR(2476, pBlock != NULL);
- mColorChanNum = pBlock->getColorChanNum();
-
- for (u32 i = 0; i < ARRAY_SIZEU(mMatColor); i++) {
- mMatColor[i] = *pBlock->getMatColor(i);
- }
- for (u32 i = 0; i < ARRAY_SIZEU(mColorChan); i++) {
- mColorChan[i] = *pBlock->getColorChan(i);
- }
- for (u32 i = 0; i < ARRAY_SIZEU(mAmbColor); i++) {
- if (pBlock->getAmbColor(i) != NULL) {
- mAmbColor[i] = *pBlock->getAmbColor(i);
- }
- }
-}
-
-void J3DTexGenBlockPatched::reset(J3DTexGenBlock* pBlock) {
- J3D_ASSERT_NULLPTR(2504, pBlock != NULL);
-
- mTexGenNum = pBlock->getTexGenNum();
- for (u32 i = 0; i < 8; i++) {
- mTexCoord[i] = *pBlock->getTexCoord(i);
- }
-
- for (u32 i = 0; i < 8; i++) {
- if (pBlock->getTexMtx(i) != NULL) {
- if (mTexMtx[i] != NULL) {
- memcpy(mTexMtx[i], pBlock->getTexMtx(i), sizeof(*mTexMtx[i]));
- DCStoreRange(mTexMtx[i], sizeof(*mTexMtx[i]));
- } else {
- OSReport("Error : TexMtx[%d] is Null.\n", i);
- }
- }
- }
-}
-
-void J3DTexGenBlock4::reset(J3DTexGenBlock* pBlock) {
- J3D_ASSERT_NULLPTR(2537, pBlock != NULL);
-
- mTexGenNum = pBlock->getTexGenNum();
- for (u32 i = 0; i < 4; i++) {
- mTexCoord[i] = *pBlock->getTexCoord(i);
- }
-
- for (u32 i = 0; i < 4; i++) {
- if (pBlock->getTexMtx(i) != NULL) {
- if (mTexMtx[i] != NULL) {
- memcpy(mTexMtx[i], pBlock->getTexMtx(i), sizeof(*mTexMtx[i]));
- DCStoreRange(mTexMtx[i], sizeof(*mTexMtx[i]));
- } else {
- OSReport("Error : TexMtx[%d] is Null.\n", i);
- }
- }
- }
-
- mNBTScale = *pBlock->getNBTScale();
-}
-
-void J3DTexGenBlockBasic::reset(J3DTexGenBlock* pBlock) {
- J3D_ASSERT_NULLPTR(2572, pBlock != NULL);
-
- mTexGenNum = pBlock->getTexGenNum();
- for (u32 i = 0; i < 8; i++) {
- mTexCoord[i] = *pBlock->getTexCoord(i);
- }
-
- for (u32 i = 0; i < 8; i++) {
- if (pBlock->getTexMtx(i) != NULL) {
- if (mTexMtx[i] != NULL) {
- memcpy(mTexMtx[i], pBlock->getTexMtx(i), sizeof(*mTexMtx[i]));
- DCStoreRange(mTexMtx[i], sizeof(*mTexMtx[i]));
- } else {
- OSReport("Error : TexMtx[%d] is Null.\n", i);
- }
- }
- }
-
- mNBTScale = *pBlock->getNBTScale();
-}
-
-void J3DTevBlockPatched::reset(J3DTevBlock* pBlock) {
- J3D_ASSERT_NULLPTR(2608, pBlock != NULL);
-
- mTevStageNum = pBlock->getTevStageNum();
- for (u32 i = 0; i < 8; i++) {
- mTexNo[i] = pBlock->getTexNo(i);
- }
- for (u32 i = 0; i < 4; i++) {
- mTevColor[i] = *pBlock->getTevColor(i);
- }
- for (u32 i = 0; i < 4; i++) {
- mTevKColor[i] = *pBlock->getTevKColor(i);
- }
- for (u32 i = 0; i < 8; i++) {
- mTevStage[i] = *pBlock->getTevStage(i);
- mIndTevStage[i] = *pBlock->getIndTevStage(i);
- }
-}
-
-void J3DTevBlock1::reset(J3DTevBlock* pBlock) {
- J3D_ASSERT_NULLPTR(2633, pBlock != NULL);
-
- mTexNo[0] = pBlock->getTexNo(0);
- mTevOrder[0] = *pBlock->getTevOrder(0);
- mTevStage[0] = *pBlock->getTevStage(0);
- mIndTevStage[0] = *pBlock->getIndTevStage(0);
-}
-
-void J3DTevBlock2::reset(J3DTevBlock* pBlock) {
- J3D_ASSERT_NULLPTR(2649, pBlock != NULL);
-
- mTevStageNum = pBlock->getTevStageNum();
- mTexNo[0] = pBlock->getTexNo(0);
- mTexNo[1] = pBlock->getTexNo(1);
- mTevStage[0] = *pBlock->getTevStage(0);
- mTevStage[1] = *pBlock->getTevStage(1);
- mIndTevStage[0] = *pBlock->getIndTevStage(0);
- mIndTevStage[1] = *pBlock->getIndTevStage(1);
- mTevOrder[0] = *pBlock->getTevOrder(0);
- mTevOrder[1] = *pBlock->getTevOrder(1);
- mTevKColorSel[0] = pBlock->getTevKColorSel(0);
- mTevKColorSel[1] = pBlock->getTevKColorSel(1);
- mTevKAlphaSel[0] = pBlock->getTevKAlphaSel(0);
- mTevKAlphaSel[1] = pBlock->getTevKAlphaSel(1);
-
- for (u32 i = 0; i < 4; i++) {
- mTevColor[i] = *pBlock->getTevColor(i);
- }
- for (u32 i = 0; i < 4; i++) {
- mTevKColor[i] = *pBlock->getTevKColor(i);
- }
- for (u32 i = 0; i < 4; i++) {
- mTevSwapModeTable[i] = *pBlock->getTevSwapModeTable(i);
- }
-}
-
-void J3DTevBlock4::reset(J3DTevBlock* pBlock) {
- J3D_ASSERT_NULLPTR(2682, pBlock != NULL);
-
- mTevStageNum = pBlock->getTevStageNum();
- mTexNo[0] = pBlock->getTexNo(0);
- mTexNo[1] = pBlock->getTexNo(1);
- mTexNo[2] = pBlock->getTexNo(2);
- mTexNo[3] = pBlock->getTexNo(3);
- mTevStage[0] = *pBlock->getTevStage(0);
- mTevStage[1] = *pBlock->getTevStage(1);
- mTevStage[2] = *pBlock->getTevStage(2);
- mTevStage[3] = *pBlock->getTevStage(3);
- mIndTevStage[0] = *pBlock->getIndTevStage(0);
- mIndTevStage[1] = *pBlock->getIndTevStage(1);
- mIndTevStage[2] = *pBlock->getIndTevStage(2);
- mIndTevStage[3] = *pBlock->getIndTevStage(3);
- mTevOrder[0] = *pBlock->getTevOrder(0);
- mTevOrder[1] = *pBlock->getTevOrder(1);
- mTevOrder[2] = *pBlock->getTevOrder(2);
- mTevOrder[3] = *pBlock->getTevOrder(3);
- mTevKColorSel[0] = pBlock->getTevKColorSel(0);
- mTevKColorSel[1] = pBlock->getTevKColorSel(1);
- mTevKColorSel[2] = pBlock->getTevKColorSel(2);
- mTevKColorSel[3] = pBlock->getTevKColorSel(3);
- mTevKAlphaSel[0] = pBlock->getTevKAlphaSel(0);
- mTevKAlphaSel[1] = pBlock->getTevKAlphaSel(1);
- mTevKAlphaSel[2] = pBlock->getTevKAlphaSel(2);
- mTevKAlphaSel[3] = pBlock->getTevKAlphaSel(3);
-
- for (u32 i = 0; i < 4; i++)
- mTevColor[i] = *pBlock->getTevColor(i);
- for (u32 i = 0; i < 4; i++)
- mTevKColor[i] = *pBlock->getTevKColor(i);
- for (u32 i = 0; i < 4; i++)
- mTevSwapModeTable[i] = *pBlock->getTevSwapModeTable(i);
-}
-
-void J3DTevBlock16::reset(J3DTevBlock* pBlock) {
- J3D_ASSERT_NULLPTR(2728, pBlock != NULL);
-
- mTevStageNum = pBlock->getTevStageNum();
- for (u32 i = 0; i < 8; i++) {
- mTexNo[i] = pBlock->getTexNo(i);
- }
- for (u32 i = 0; i < 16; i++) {
- mTevOrder[i] = *pBlock->getTevOrder(i);
- }
- for (u32 i = 0; i < 16; i++) {
- mTevStage[i] = *pBlock->getTevStage(i);
- mIndTevStage[i] = *pBlock->getIndTevStage(i);
- }
- for (u32 i = 0; i < 4; i++) {
- mTevColor[i] = *pBlock->getTevColor(i);
- }
- for (u32 i = 0; i < 4; i++) {
- mTevKColor[i] = *pBlock->getTevKColor(i);
- }
- for (u32 i = 0; i < 16; i++) {
- mTevKColorSel[i] = pBlock->getTevKColorSel(i);
- }
- for (u32 i = 0; i < 16; i++) {
- mTevKAlphaSel[i] = pBlock->getTevKAlphaSel(i);
- }
- for (u32 i = 0; i < 4; i++) {
- mTevSwapModeTable[i] = *pBlock->getTevSwapModeTable(i);
- }
-}
-
-void J3DIndBlockFull::reset(J3DIndBlock* pBlock) {
- J3D_ASSERT_NULLPTR(2762, pBlock != NULL);
-
- mIndTexStageNum = pBlock->getIndTexStageNum();
- for (u32 i = 0; i < 4; i++) {
- mIndTexOrder[i] = *pBlock->getIndTexOrder(i);
- }
- for (u32 i = 0; i < 3; i++) {
- mIndTexMtx[i] = *pBlock->getIndTexMtx(i);
- }
- for (u32 i = 0; i < 4; i++) {
- mIndTexCoordScale[i] = *pBlock->getIndTexCoordScale(i);
- }
-}
-
-void J3DPEBlockFogOff::reset(J3DPEBlock* pBlock) {
- J3D_ASSERT_NULLPTR(2783, pBlock != NULL);
-
- switch (pBlock->getType()) {
- case 'PEFL':
- case 'PEFG':
- mAlphaComp = *pBlock->getAlphaComp();
- mBlend = *pBlock->getBlend();
- mZMode = *pBlock->getZMode();
- mZCompLoc = pBlock->getZCompLoc();
- break;
- }
-}
-
-void J3DPEBlockFull::reset(J3DPEBlock* pBlock) {
- J3D_ASSERT_NULLPTR(2807, pBlock != NULL);
-
- if (pBlock->getFog() != NULL) {
- mFog.setFogInfo(pBlock->getFog()->getFogInfo());
- }
-
- switch (pBlock->getType()) {
- case 'PEFL':
- case 'PEFG':
- mAlphaComp = *pBlock->getAlphaComp();
- mBlend = *pBlock->getBlend();
- mZMode = *pBlock->getZMode();
- mZCompLoc = pBlock->getZCompLoc();
- break;
- }
-}
-
-void J3DTexGenBlockPatched::calc(const Mtx modelMtx) {
- Mtx viewMtx;
- for (int i = 0; i < 8; i++) {
- if (mTexMtx[i] != NULL) {
- u32 texMtxMode = mTexMtx[i]->getTexMtxInfo().mInfo & 0x3f;
- mTexCoord[i].resetTexMtxReg();
- switch (texMtxMode) {
- case J3DTexMtxMode_EnvmapBasic:
- case J3DTexMtxMode_EnvmapOld:
- case J3DTexMtxMode_Envmap:
-
- if (j3dSys.checkFlag(8) == 0) {
- MTXConcat(j3dSys.getViewMtx(), modelMtx, viewMtx);
- } else {
- MTXCopy(j3dSys.getViewMtx(), viewMtx);
- }
- viewMtx[0][3] = 0.0f;
- viewMtx[1][3] = 0.0f;
- viewMtx[2][3] = 0.0f;
- mTexMtx[i]->calc(viewMtx);
- break;
- case J3DTexMtxMode_ProjmapBasic:
- case J3DTexMtxMode_Projmap:
- if (j3dSys.checkFlag(4) == 0) {
- mTexMtx[i]->calc(modelMtx);
- } else {
- mTexMtx[i]->calc(j3dDefaultMtx);
- }
- break;
- case J3DTexMtxMode_ViewProjmapBasic:
- case J3DTexMtxMode_ViewProjmap:
- if (j3dSys.checkFlag(4) == 0) {
- MTXConcat(j3dSys.getViewMtx(), modelMtx, viewMtx);
- mTexMtx[i]->calc( viewMtx);
- } else {
- mTexMtx[i]->calc(j3dSys.getViewMtx());
- }
- break;
- case J3DTexMtxMode_Unknown5:
- case J3DTexMtxMode_EnvmapOldEffectMtx:
- case J3DTexMtxMode_EnvmapEffectMtx:
- if (j3dSys.checkFlag(8) == 0) {
- MTXCopy(modelMtx, viewMtx);
- viewMtx[0][3] = 0.0f;
- viewMtx[1][3] = 0.0f;
- viewMtx[2][3] = 0.0f;
- mTexMtx[i]->calc(viewMtx);
- } else {
- mTexMtx[i]->calc(j3dDefaultMtx);
- }
- break;
- default:
- mTexMtx[i]->calc(j3dDefaultMtx);
- break;
- }
- }
- }
-}
-
-void J3DTexGenBlockPatched::calcWithoutViewMtx(const Mtx modelMtx) {
- Mtx mtx;
- for (int i = 0; i < 8; i++) {
- if (mTexMtx[i] != NULL) {
- u32 texMtxMode = mTexMtx[i]->getTexMtxInfo().mInfo & 0x3f;
- mTexCoord[i].resetTexMtxReg();
- switch (texMtxMode) {
- case J3DTexMtxMode_EnvmapBasic:
- case J3DTexMtxMode_EnvmapOld:
- case J3DTexMtxMode_Envmap:
- mTexMtx[i]->calc(j3dDefaultMtx);
- break;
- case J3DTexMtxMode_ProjmapBasic:
- case J3DTexMtxMode_Projmap:
- if (j3dSys.checkFlag(4) == 0) {
- mTexMtx[i]->calc(modelMtx);
- } else {
- mTexMtx[i]->calc(j3dDefaultMtx);
- }
- break;
- case J3DTexMtxMode_ViewProjmapBasic:
- case J3DTexMtxMode_ViewProjmap:
- mTexMtx[i]->calc(j3dDefaultMtx);
- break;
- case J3DTexMtxMode_Unknown5:
- case J3DTexMtxMode_EnvmapOldEffectMtx:
- case J3DTexMtxMode_EnvmapEffectMtx:
- if (j3dSys.checkFlag(8) == 0) {
- MTXCopy(modelMtx, mtx);
- mtx[0][3] = 0.0f;
- mtx[1][3] = 0.0f;
- mtx[2][3] = 0.0f;
- mTexMtx[i]->calc(mtx);
- } else {
- mTexMtx[i]->calc(j3dDefaultMtx);
- }
- break;
- default:
- mTexMtx[i]->calc(j3dDefaultMtx);
- break;
- }
- }
- }
-}
-
-void J3DTexGenBlockPatched::calcPostTexMtx(const Mtx modelMtx) {
- Mtx mtx1, mtx2;
- for (int i = 0; i < 8; i++) {
- if (mTexMtx[i] != NULL) {
- u32 texMtxMode = mTexMtx[i]->getTexMtxInfo().mInfo & 0x3f;
- mTexCoord[i].resetTexMtxReg();
- switch (texMtxMode) {
- case J3DTexMtxMode_EnvmapBasic:
- case J3DTexMtxMode_EnvmapOld:
- case J3DTexMtxMode_Envmap:
- mTexCoord[i].setTexMtxReg(30);
- mTexMtx[i]->calcPostTexMtx(j3dDefaultMtx);
- break;
- case J3DTexMtxMode_ProjmapBasic:
- case J3DTexMtxMode_Projmap:
- PSMTXInverse(j3dSys.getViewMtx(), mtx1);
- mTexCoord[i].setTexMtxReg(0);
- mTexMtx[i]->calcPostTexMtx(mtx1);
- break;
- case J3DTexMtxMode_ViewProjmapBasic:
- case J3DTexMtxMode_ViewProjmap:
- mTexCoord[i].setTexMtxReg(0);
- mTexMtx[i]->calcPostTexMtx(j3dDefaultMtx);
- break;
- case J3DTexMtxMode_Unknown5:
- case J3DTexMtxMode_EnvmapOldEffectMtx:
- case J3DTexMtxMode_EnvmapEffectMtx:
- PSMTXInverse(j3dSys.getViewMtx(), mtx2);
- mtx2[0][3] = 0.0f;
- mtx2[1][3] = 0.0f;
- mtx2[2][3] = 0.0f;
- mTexCoord[i].setTexMtxReg(30);
- mTexMtx[i]->calcPostTexMtx(mtx2);
- break;
- default:
- mTexCoord[i].setTexMtxReg(60);
- mTexMtx[i]->calcPostTexMtx(j3dDefaultMtx);
- continue;
- }
- }
- }
-}
-
-void J3DTexGenBlockPatched::calcPostTexMtxWithoutViewMtx(f32 const (*param_0)[4]) {
- for (int i = 0; i < 8; i++) {
- if (mTexMtx[i] != NULL) {
- int texMtxMode = mTexMtx[i]->getTexMtxInfo().mInfo & 0x3f;
- mTexCoord[i].resetTexMtxReg();
- switch (texMtxMode) {
- case J3DTexMtxMode_EnvmapBasic:
- case J3DTexMtxMode_EnvmapOld:
- case J3DTexMtxMode_Envmap:
- mTexCoord[i].setTexMtxReg(30);
- mTexMtx[i]->calcPostTexMtx(j3dDefaultMtx);
- break;
- case J3DTexMtxMode_ProjmapBasic:
- case J3DTexMtxMode_Projmap:
- mTexCoord[i].setTexMtxReg(0);
- mTexMtx[i]->calcPostTexMtx(j3dDefaultMtx);
- break;
- case J3DTexMtxMode_ViewProjmapBasic:
- case J3DTexMtxMode_ViewProjmap:
- mTexCoord[i].setTexMtxReg(0);
- mTexMtx[i]->calcPostTexMtx(j3dDefaultMtx);
- break;
- case J3DTexMtxMode_Unknown5:
- case J3DTexMtxMode_EnvmapOldEffectMtx:
- case J3DTexMtxMode_EnvmapEffectMtx:
- mTexCoord[i].setTexMtxReg(30);
- mTexMtx[i]->calcPostTexMtx(j3dDefaultMtx);
- break;
- default:
- mTexCoord[i].setTexMtxReg(60);
- mTexMtx[i]->calcPostTexMtx(j3dDefaultMtx);
- break;
- }
- }
- }
-}