Merge remote-tracking branch 'decomp/main' into 26-02-27-pjb-dev-2

This commit is contained in:
PJB3005
2026-03-02 12:36:59 +01:00
1778 changed files with 3698 additions and 3309 deletions
+176
View File
@@ -0,0 +1,176 @@
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JUtility/JUTTexture.h"
#include "JSystem/JUtility/JUTPalette.h"
#include <gx.h>
JUTTexture::~JUTTexture() {
if (getCaptureFlag()) {
delete[] field_0x3c;
}
if (getEmbPaletteDelFlag()) {
delete mEmbPalette;
}
}
void JUTTexture::storeTIMG(ResTIMG const* param_0, u8 param_1) {
if (param_0 && param_1 < 0x10) {
mTexInfo = param_0;
u32 imgOffset = RES_U32(mTexInfo->imageOffset);
mTexData = (void*)((intptr_t)mTexInfo + imgOffset);
if (mTexInfo->imageOffset == 0) {
mTexData = (void*)((intptr_t)mTexInfo + 0x20);
}
field_0x2c = NULL;
mTlutName = 0;
mWrapS = mTexInfo->wrapS;
mWrapT = mTexInfo->wrapT;
mMinFilter = mTexInfo->minFilter;
mMagFilter = mTexInfo->magFilter;
mMinLOD = (s8)mTexInfo->minLOD;
mMaxLOD = (s8)mTexInfo->maxLOD;
mLODBias = RES_S16(mTexInfo->LODBias);
u16 numColors = RES_U16(mTexInfo->numColors);
if (numColors == 0) {
initTexObj();
} else {
GXTlut tlut;
if (numColors > 0x100) {
tlut = (GXTlut)((param_1 % 4) + GX_BIGTLUT0);
} else {
tlut = (GXTlut)param_1;
}
u32 palOffset = RES_U32(mTexInfo->paletteOffset);
if (mEmbPalette == NULL || !getEmbPaletteDelFlag()) {
mEmbPalette = new JUTPalette(tlut, (GXTlutFmt)mTexInfo->colorFormat,
(JUTTransparency)mTexInfo->alphaEnabled,
numColors,
(void*)((intptr_t)mTexInfo + palOffset));
setEmbPaletteDelFlag(true);
} else {
mEmbPalette->storeTLUT(tlut, (GXTlutFmt)mTexInfo->colorFormat,
(JUTTransparency)mTexInfo->alphaEnabled,
numColors,
(void*)((intptr_t)mTexInfo + palOffset));
}
attachPalette(mEmbPalette);
}
}
}
void JUTTexture::storeTIMG(ResTIMG const* param_0, JUTPalette* param_1) {
GXTlut type;
if (param_1 != NULL) {
type = param_1->getTlutName();
} else {
type = GX_TLUT0;
}
storeTIMG(param_0, param_1, type);
}
void JUTTexture::storeTIMG(ResTIMG const* param_0, JUTPalette* param_1, GXTlut param_2) {
GXTlut type;
if (param_0 == NULL) {
return;
}
mTexInfo = param_0;
mTexData = ((u8*)mTexInfo) + mTexInfo->imageOffset;
if (mTexInfo->imageOffset == 0) {
mTexData = ((u8*)mTexInfo) + sizeof(ResTIMG);
}
if (getEmbPaletteDelFlag()) {
delete mEmbPalette;
}
mEmbPalette = param_1;
setEmbPaletteDelFlag(false);
field_0x2c = NULL;
if (param_1 != NULL) {
mTlutName = param_2;
if (param_2 != param_1->getTlutName()) {
GXTlutFmt format = param_1->getFormat();
JUTTransparency transperancy = param_1->getTransparency();
u16 numColors = param_1->getNumColors();
ResTLUT* colorTable = param_1->getColorTable();
param_1->storeTLUT(param_2, format, transperancy, numColors, colorTable);
}
}
mWrapS = mTexInfo->wrapS;
mWrapT = mTexInfo->wrapT;
mMinFilter = mTexInfo->minFilter;
mMagFilter = mTexInfo->magFilter;
mMinLOD = mTexInfo->minLOD;
mMaxLOD = mTexInfo->maxLOD;
mLODBias = mTexInfo->LODBias;
init();
}
void JUTTexture::attachPalette(JUTPalette* param_0) {
if (mTexInfo->indexTexture) {
if (param_0 == NULL && mEmbPalette != NULL) {
field_0x2c = mEmbPalette;
} else {
field_0x2c = param_0;
}
initTexObj(field_0x2c->getTlutName());
}
}
void JUTTexture::init() {
if (mTexInfo->numColors == 0) {
initTexObj();
} else {
if (mEmbPalette != NULL) {
field_0x2c = mEmbPalette;
initTexObj(field_0x2c->getTlutName());
} else {
OS_REPORT("This texture is CI-Format, but EmbPalette is NULL.\n");
}
}
}
void JUTTexture::initTexObj() {
GXBool mipmapEnabled = mTexInfo->mipmapEnabled != 0 ? GX_TRUE : GX_FALSE;
u8* image = ((u8*)mTexInfo);
u32 imgOffset = RES_U32(mTexInfo->imageOffset);
image += (imgOffset ? imgOffset : 0x20);
GXInitTexObj(&mTexObj, image, RES_U16(mTexInfo->width), RES_U16(mTexInfo->height),
(GXTexFmt)mTexInfo->format, (GXTexWrapMode)mWrapS, (GXTexWrapMode)mWrapT,
mipmapEnabled);
GXInitTexObjLOD(&mTexObj, (GXTexFilter)mMinFilter, (GXTexFilter)mMagFilter, mMinLOD / 8.0f,
mMaxLOD / 8.0f, RES_S16(mLODBias) / 100.0f, mTexInfo->biasClamp,
mTexInfo->doEdgeLOD, (GXAnisotropy)mTexInfo->maxAnisotropy);
}
void JUTTexture::initTexObj(GXTlut param_0) {
GXBool mipmapEnabled = mTexInfo->mipmapEnabled != 0 ? GX_TRUE : GX_FALSE;
mTlutName = param_0;
u8* image = ((u8*)mTexInfo);
u32 imgOffset = RES_U32(mTexInfo->imageOffset); // Swap!
printf("[DIAG] initTexObj: Offset=%u, W=%u, H=%u, Ptr=%p\n", imgOffset, mTexInfo->width,
mTexInfo->height,
mTexInfo);
image += (imgOffset ? imgOffset : 0x20);
GXInitTexObjCI(&mTexObj, image, RES_U16(mTexInfo->width), RES_U16(mTexInfo->height),
(GXCITexFmt)mTexInfo->format, (GXTexWrapMode)mWrapS,
(GXTexWrapMode)mWrapT, mipmapEnabled, param_0);
GXInitTexObjLOD(&mTexObj, (GXTexFilter)mMinFilter, (GXTexFilter)mMagFilter, mMinLOD / 8.0f,
mMaxLOD / 8.0f, RES_S16(mLODBias) / 100.0f, mTexInfo->biasClamp,
mTexInfo->doEdgeLOD, (GXAnisotropy)mTexInfo->maxAnisotropy);
}
void JUTTexture::load(GXTexMapID param_0) {
if (field_0x2c) {
field_0x2c->load();
}
GXLoadTexObj(&mTexObj, param_0);
}