mirror of https://github.com/zeldaret/tp.git
206 lines
6.6 KiB
C++
206 lines
6.6 KiB
C++
//
|
|
// Generated By: dol2asm
|
|
// Translation Unit: JUTTexture
|
|
//
|
|
|
|
#include "JSystem/JUtility/JUTTexture.h"
|
|
#include "JSystem/JUtility/JUTPalette.h"
|
|
#include "dolphin/gx/GX.h"
|
|
|
|
//
|
|
// Forward References:
|
|
//
|
|
|
|
//
|
|
// External References:
|
|
//
|
|
|
|
//
|
|
// Declarations:
|
|
//
|
|
|
|
/* 802DE234-802DE2A8 2D8B74 0074+00 0/0 30/30 0/0 .text __dt__10JUTTextureFv */
|
|
JUTTexture::~JUTTexture() {
|
|
if (getCaptureFlag()) {
|
|
delete[] field_0x3c;
|
|
}
|
|
if (getEmbPaletteDelFlag()) {
|
|
delete mEmbPalette;
|
|
}
|
|
}
|
|
|
|
/* 802DE2A8-802DE44C 2D8BE8 01A4+00 0/0 18/18 0/0 .text storeTIMG__10JUTTextureFPC7ResTIMGUc */
|
|
void JUTTexture::storeTIMG(ResTIMG const* param_0, u8 param_1) {
|
|
_GXTlut tlut;
|
|
|
|
if (param_0 && param_1 < 0x10) {
|
|
mTexInfo = param_0;
|
|
mTexData = (void*)((int)mTexInfo + mTexInfo->imageOffset);
|
|
|
|
if (mTexInfo->imageOffset == 0) {
|
|
mTexData = (void*)((int)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 = mTexInfo->LODBias;
|
|
|
|
if (mTexInfo->numColors == 0) {
|
|
initTexObj();
|
|
} else {
|
|
if (mTexInfo->numColors > 0x100) {
|
|
tlut = (_GXTlut)((param_1 % 4) + GX_BIGTLUT0);
|
|
} else {
|
|
tlut = (_GXTlut)param_1;
|
|
}
|
|
|
|
if (mEmbPalette == NULL || !getEmbPaletteDelFlag()) {
|
|
mEmbPalette = new JUTPalette(tlut, (_GXTlutFmt)mTexInfo->colorFormat,
|
|
(JUTTransparency)mTexInfo->alphaEnabled, mTexInfo->numColors,
|
|
(void*)(&mTexInfo->format + mTexInfo->paletteOffset));
|
|
mFlags = mFlags & 1 | 2;
|
|
} else {
|
|
mEmbPalette->storeTLUT(tlut, (_GXTlutFmt)mTexInfo->colorFormat,
|
|
(JUTTransparency)mTexInfo->alphaEnabled, mTexInfo->numColors,
|
|
(void*)(&mTexInfo->format + mTexInfo->paletteOffset));
|
|
}
|
|
attachPalette(mEmbPalette);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 802DE44C-802DE480 2D8D8C 0034+00 0/0 6/6 0/0 .text
|
|
* storeTIMG__10JUTTextureFPC7ResTIMGP10JUTPalette */
|
|
void JUTTexture::storeTIMG(ResTIMG const* param_0, JUTPalette* param_1) {
|
|
_GXTlut type;
|
|
|
|
if (param_1 != NULL) {
|
|
type = (_GXTlut)param_1->getTlutName();
|
|
} else {
|
|
type = GX_TLUT0;
|
|
}
|
|
storeTIMG(param_0, param_1, type);
|
|
}
|
|
|
|
/* 802DE480-802DE5B0 2D8DC0 0130+00 1/1 3/3 0/0 .text
|
|
* storeTIMG__10JUTTextureFPC7ResTIMGP10JUTPalette7_GXTlut */
|
|
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()) {
|
|
u8 format = param_1->getFormat();
|
|
u8 transperancy = param_1->getTransparency();
|
|
u16 numColors = param_1->getNumColors();
|
|
ResTLUT* colorTable = param_1->getColorTable();
|
|
param_1->storeTLUT(param_2, (_GXTlutFmt)format,
|
|
(JUTTransparency)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();
|
|
}
|
|
|
|
/* 802DE5B0-802DE608 2D8EF0 0058+00 1/1 7/7 0/0 .text attachPalette__10JUTTextureFP10JUTPalette */
|
|
void JUTTexture::attachPalette(JUTPalette* param_0) {
|
|
if (mTexInfo->indexTexture) {
|
|
if (param_0 == NULL && mEmbPalette != NULL) {
|
|
field_0x2c = mEmbPalette;
|
|
} else {
|
|
field_0x2c = param_0;
|
|
}
|
|
_GXTlut name = (_GXTlut)field_0x2c->getTlutName();
|
|
initTexObj(name);
|
|
}
|
|
}
|
|
|
|
/* 802DE608-802DE658 2D8F48 0050+00 1/1 0/0 0/0 .text init__10JUTTextureFv */
|
|
void JUTTexture::init() {
|
|
if (mTexInfo->numColors == 0) {
|
|
initTexObj();
|
|
} else {
|
|
if (mEmbPalette != NULL) {
|
|
field_0x2c = mEmbPalette;
|
|
|
|
_GXTlut name = (_GXTlut)field_0x2c->getTlutName();
|
|
initTexObj(name);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 802DE658-802DE744 2D8F98 00EC+00 2/2 0/0 0/0 .text initTexObj__10JUTTextureFv */
|
|
void JUTTexture::initTexObj() {
|
|
GXBool mipmapEnabled;
|
|
if (mTexInfo->mipmapEnabled != 0) {
|
|
mipmapEnabled = 1;
|
|
} else {
|
|
mipmapEnabled = 0;
|
|
}
|
|
u8* image = ((u8*)mTexInfo);
|
|
image += (mTexInfo->imageOffset ? mTexInfo->imageOffset : 0x20);
|
|
GXInitTexObj(&mTexObj, image, mTexInfo->width, mTexInfo->height,
|
|
(GXTexFmt)mTexInfo->format, (GXTexWrapMode)mWrapS,
|
|
(GXTexWrapMode)mWrapT, mipmapEnabled);
|
|
GXInitTexObjLOD(&mTexObj, (GXTexFilter)mMinFilter, (GXTexFilter)mMagFilter,
|
|
mMinLOD / 8.0f, mMaxLOD / 8.0f, mLODBias / 100.0f, mTexInfo->biasClamp,
|
|
mTexInfo->doEdgeLOD, (GXAnisotropy)mTexInfo->maxAnisotropy);
|
|
}
|
|
|
|
/* 802DE744-802DE840 2D9084 00FC+00 2/2 0/0 0/0 .text initTexObj__10JUTTextureF7_GXTlut
|
|
*/
|
|
void JUTTexture::initTexObj(_GXTlut param_0) {
|
|
GXBool mipmapEnabled;
|
|
if (mTexInfo->mipmapEnabled != 0) {
|
|
mipmapEnabled = 1;
|
|
} else {
|
|
mipmapEnabled = 0;
|
|
}
|
|
mTlutName = param_0;
|
|
u8* image = ((u8*)mTexInfo);
|
|
image += (mTexInfo->imageOffset ? mTexInfo->imageOffset : 0x20);
|
|
GXInitTexObjCI(&mTexObj, image, mTexInfo->width, mTexInfo->height,
|
|
(GXCITexFmt)mTexInfo->format, (GXTexWrapMode)mWrapS,
|
|
(GXTexWrapMode)mWrapT, mipmapEnabled, param_0);
|
|
GXInitTexObjLOD(&mTexObj, (GXTexFilter)mMinFilter, (GXTexFilter)mMagFilter,
|
|
mMinLOD / 8.0f, mMaxLOD / 8.0f, mLODBias / 100.0f, mTexInfo->biasClamp,
|
|
mTexInfo->doEdgeLOD, (GXAnisotropy)mTexInfo->maxAnisotropy);
|
|
}
|
|
|
|
/* 802DE840-802DE890 2D9180 0050+00 0/0 14/14 0/0 .text load__10JUTTextureF11_GXTexMapID
|
|
*/
|
|
void JUTTexture::load(_GXTexMapID param_0) {
|
|
if (field_0x2c) {
|
|
field_0x2c->load();
|
|
}
|
|
GXLoadTexObj(&mTexObj, param_0);
|
|
}
|