More texture caching

This commit is contained in:
Luke Street
2026-06-04 01:21:40 -06:00
parent 08c4442fdf
commit b00b7f8f1b
10 changed files with 240 additions and 17 deletions
+4
View File
@@ -88,6 +88,10 @@ public:
/* 0x02C */ cXyz field_0x2c;
/* 0x038 */ cXyz field_0x38[60];
/* 0x308 */ cXyz field_0x308[60];
#if TARGET_PC
TGXTexObj mBlurTexObj;
ResTIMG* mpCachedBlurTex = nullptr;
#endif
}; // Size = 0x5D8
class dAlink_bottleWaterPcallBack_c : public JPAParticleCallBack {
+4
View File
@@ -50,6 +50,10 @@ public:
/* 0x14 */ Mtx mProjMtx;
/* 0x44 */ ResTIMG* mpImg;
/* 0x48 */ u8* mpData;
#if TARGET_PC
TGXTexObj mTexObj;
ResTIMG* mpCachedImg = nullptr;
#endif
};
class daPy_boomerangMove_c {
+17
View File
@@ -43,8 +43,25 @@ public:
static_assert(sizeof(GXTexObjRAII) == sizeof(GXTexObj),
"GXTexObjRAII should have the same size as GXTexObj");
typedef GXTexObjRAII TGXTexObj;
class GXTlutObjRAII : public GXTlutObj {
public:
GXTlutObjRAII() : GXTlutObj() {}
~GXTlutObjRAII() { GXDestroyTlutObj(this); }
void reset() { GXDestroyTlutObj(this); }
GXTlutObjRAII(const GXTlutObjRAII&) = delete;
GXTlutObjRAII& operator=(const GXTlutObjRAII&) = delete;
GXTlutObjRAII(GXTlutObjRAII&&) = delete;
GXTlutObjRAII& operator=(GXTlutObjRAII&&) = delete;
};
static_assert(sizeof(GXTlutObjRAII) == sizeof(GXTlutObj),
"GXTlutObjRAII should have the same size as GXTlutObj");
typedef GXTlutObjRAII TGXTlutObj;
#else
typedef GXTexObj TGXTexObj;
typedef GXTlutObj TGXTlutObj;
#endif
struct GXScopedDebugGroup {
+1 -1
View File
@@ -44,7 +44,7 @@ struct mDoLib_clipper {
void mDoLib_project(Vec* src, Vec* dst);
u32 mDoLib_setResTimgObj(ResTIMG const* res, TGXTexObj* o_texObj, u32 tlut_name,
GXTlutObj* o_tlutObj);
TGXTlutObj* o_tlutObj);
void mDoLib_pos2camera(Vec* src, Vec* dst);
#if PLATFORM_WII
+15 -3
View File
@@ -2031,9 +2031,7 @@ void daAlink_blur_c::draw() {
ZoneScoped;
j3dSys.reinitGX();
#ifdef TARGET_PC
TGXTexObj texObj;
#else
#if !TARGET_PC
static TGXTexObj texObj;
#endif
static GXColor nColor0 = {0xFF, 0xFF, 0xFF, 0x14};
@@ -2041,11 +2039,25 @@ void daAlink_blur_c::draw() {
GXSetNumIndStages(0);
nColor0.a = field_0x20;
#if TARGET_PC
if (mpCachedBlurTex != m_blurTex) {
mBlurTexObj.reset();
GXInitTexObj(&mBlurTexObj,
reinterpret_cast<void*>(
reinterpret_cast<uintptr_t>(m_blurTex) + m_blurTex->imageOffset),
16, 4, GX_TF_I4, GX_CLAMP, GX_CLAMP, GX_FALSE);
GXInitTexObjLOD(
&mBlurTexObj, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1);
mpCachedBlurTex = m_blurTex;
}
GXLoadTexObj(&mBlurTexObj, GX_TEXMAP0);
#else
GXInitTexObj(&texObj, (void*)((uintptr_t)m_blurTex + m_blurTex->imageOffset), 16, 4, GX_TF_I4,
GX_CLAMP, GX_CLAMP, GX_FALSE);
GXInitTexObjLOD(&texObj, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE,
GX_ANISO_1);
GXLoadTexObj(&texObj, GX_TEXMAP0);
#endif
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGBA4, 8);
GXClearVtxDesc();
+26 -4
View File
@@ -419,15 +419,36 @@ void daMant_packet_c::draw() {
GXSetTevKAlphaSel(GX_TEVSTAGE0, GX_TEV_KASEL_K3_A);
GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
#if TARGET_PC
static bool textureObjsInitialized = false;
static TGXTlutObj tlutObj;
static TGXTexObj mainTexObj;
static TGXTexObj undersideTexObj;
if (!textureObjsInitialized) {
GXInitTlutObj(&tlutObj, lut, GX_TL_RGB5A3, 0x100);
GXInitTexObjCI(&mainTexObj, image, 0x80, 0x80, GX_TF_C8, GX_CLAMP, GX_CLAMP, 0, 0);
GXInitTexObjLOD(&mainTexObj, GX_LINEAR, GX_LINEAR, 0.0, 0.0, 0.0, 0, 0, GX_ANISO_1);
GXInitTexObjCI(
&undersideTexObj, l_Egnd_mantTEX_U, 0x80, 0x80, GX_TF_C8, GX_CLAMP, GX_CLAMP, 0, 0);
GXInitTexObjLOD(&undersideTexObj, GX_LINEAR, GX_LINEAR, 0.0, 0.0, 0.0, 0, 0, GX_ANISO_1);
textureObjsInitialized = true;
}
#else
GXTlutObj GStack_80;
GXInitTlutObj(&GStack_80, lut, GX_TL_RGB5A3, 0x100);
TGXTexObj GStack_74;
GXInitTexObjCI(&GStack_74, image, 0x80, 0x80, GX_TF_C8, GX_CLAMP, GX_CLAMP, 0, 0);
GXInitTexObjLOD(&GStack_74, GX_LINEAR, GX_LINEAR, 0.0, 0.0, 0.0, 0, 0, GX_ANISO_1);
#endif
GXLoadTlut(&GStack_80, 0);
#if TARGET_PC
GXLoadTlut(&tlutObj, GX_TLUT0);
GXLoadTexObj(&mainTexObj, GX_TEXMAP0);
#else
GXLoadTlut(&GStack_80, GX_TLUT0);
GXLoadTexObj(&GStack_74, GX_TEXMAP0);
#endif
GXSetCullMode(GX_CULL_BACK);
@@ -443,12 +464,13 @@ void daMant_packet_c::draw() {
GXLoadNrmMtxImm(MStack_54, GX_PNMTX0);
GXCallDisplayList(l_Egnd_mantDL, 0x3e0);
#ifdef TARGET_PC
GStack_74.reset();
#endif
#if TARGET_PC
GXLoadTexObj(&undersideTexObj, GX_TEXMAP0);
#else
GXInitTexObjCI(&GStack_74, l_Egnd_mantTEX_U, 0x80, 0x80, GX_TF_C8, GX_CLAMP, GX_CLAMP, 0, 0);
GXInitTexObjLOD(&GStack_74, GX_LINEAR, GX_LINEAR, 0.0, 0.0, 0.0, 0, 0, GX_ANISO_1);
GXLoadTexObj(&GStack_74, GX_TEXMAP0);
#endif
GXSetTevColor(GX_TEVREG0, COMPOUND_LITERAL(GXColor){0, 0, 0, 0});
GXSetTevKColor(GX_KCOLOR0, COMPOUND_LITERAL(GXColor){0, 0, 0, 0});
+16
View File
@@ -393,7 +393,9 @@ static const u8* l_sightDL_get() {
void daPy_sightPacket_c::draw() {
ZoneScoped;
#if !TARGET_PC
TGXTexObj texObj;
#endif
j3dSys.reinitGX();
GXSetNumIndStages(0);
@@ -408,10 +410,24 @@ void daPy_sightPacket_c::draw() {
GXSetTevColor(GX_TEVREG0, reg0);
GXSetTevColor(GX_TEVREG1, reg1);
#if TARGET_PC
if (mpCachedImg != mpImg) {
mTexObj.reset();
GXInitTexObj(&mTexObj, mpData, mpImg->width, mpImg->height,
static_cast<GXTexFmt>(mpImg->format), static_cast<GXTexWrapMode>(mpImg->wrapS),
static_cast<GXTexWrapMode>(mpImg->wrapT),
mpImg->mipmapCount > 1 ? GX_ENABLE : GX_DISABLE);
GXInitTexObjLOD(
&mTexObj, GX_LINEAR, GX_LINEAR, 0.0, 0.0, 0.0, GX_FALSE, GX_FALSE, GX_ANISO_1);
mpCachedImg = mpImg;
}
GXLoadTexObj(&mTexObj, GX_TEXMAP0);
#else
GXInitTexObj(&texObj, mpData, mpImg->width, mpImg->height, (GXTexFmt)mpImg->format,
(GXTexWrapMode)mpImg->wrapS, (GXTexWrapMode)mpImg->wrapT, mpImg->mipmapCount > 1 ? GX_ENABLE : GX_DISABLE);
GXInitTexObjLOD(&texObj, GX_LINEAR, GX_LINEAR, 0.0, 0.0, 0.0, GX_FALSE, GX_FALSE, GX_ANISO_1);
GXLoadTexObj(&texObj, GX_TEXMAP0);
#endif
GXLoadPosMtxImm(mProjMtx, GX_PNMTX0);
GXSetCurrentMtx(0);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
+4 -4
View File
@@ -41,12 +41,12 @@ public:
/* 0x14 */ GXColor field_0x14;
/* 0x18 */ GXColor field_0x18;
/* 0x1C */ TGXTexObj field_0x1c;
/* 0x3C */ GXTlutObj field_0x3c;
/* 0x3C */ TGXTlutObj field_0x3c;
/* 0x48 */ s16 field_0x48;
/* 0x4A */ s16 field_0x4a;
/* 0x4C */ u8 field_0x4c;
/* 0x50 */ TGXTexObj field_0x50;
/* 0x70 */ GXTlutObj field_0x70;
/* 0x70 */ TGXTlutObj field_0x70;
/* 0x7C */ s16 field_0x7c;
/* 0x7E */ s16 field_0x7e;
/* 0x80 */ u8 field_0x80;
@@ -100,7 +100,7 @@ public:
u8 check() { return field_0x0; }
int getCI() { return mCI; }
TGXTexObj* getTexObj() { return &mTexObj; }
GXTlutObj* getTlutObj() { return &mTlutObj; }
TGXTlutObj* getTlutObj() { return &mTlutObj; }
GXColor* getColor() { return &mColor; }
f32 getS() { return mS; }
f32 getT() { return mT; }
@@ -110,7 +110,7 @@ public:
/* 0x00 */ u8 field_0x0;
/* 0x01 */ u8 mCI;
/* 0x04 */ TGXTexObj mTexObj;
/* 0x24 */ GXTlutObj mTlutObj;
/* 0x24 */ TGXTlutObj mTlutObj;
/* 0x30 */ GXColor mColor;
/* 0x34 */ f32 mS;
/* 0x38 */ f32 mT;
+149 -4
View File
@@ -94,6 +94,39 @@ static void dKyr_set_btitex(TGXTexObj* i_obj, ResTIMG* i_img) {
dKyr_set_btitex_common(i_obj, i_img, GX_TEXMAP0);
}
#if TARGET_PC
template <int N>
struct CachedTexObjs {
TGXTexObj texObj[N];
ResTIMG* timg[N] = {};
};
template <int N>
static GXTexObj* load_cached_tex(CachedTexObjs<N>& cache, ResTIMG* img, GXTexMapID mapID) {
for (int i = 0; i < N; i++) {
if (img != nullptr && cache.timg[i] == img) {
GXLoadTexObj(&cache.texObj[i], mapID);
return &cache.texObj[i];
}
}
int slot = 0;
for (int i = 0; i < N; i++) {
if (cache.timg[i] == nullptr) {
slot = i;
break;
}
}
if (cache.timg[slot] != nullptr) {
cache.texObj[slot].reset();
}
cache.timg[slot] = img;
dKyr_set_btitex_common(&cache.texObj[slot], img, mapID);
return &cache.texObj[slot];
}
#endif
void dKyr_lenzflare_move() {
dKankyo_sun_Packet* sun_packet = g_env_light.mpSunPacket;
dKankyo_sunlenz_Packet* lenz_packet = g_env_light.mpSunLenzPacket;
@@ -2133,10 +2166,17 @@ static void dKyr_draw_rev_moon(Mtx drawMtx, u8** tex) {
return;
}
#if TARGET_PC
static CachedTexObjs<8> texobj;
load_cached_tex(texobj, (ResTIMG*)tex[0], GX_TEXMAP0);
load_cached_tex(texobj, (ResTIMG*)tex[1], GX_TEXMAP1);
load_cached_tex(texobj, (ResTIMG*)tex[texidx + 2], GX_TEXMAP2);
#else
TGXTexObj texobj;
dKyr_set_btitex_common(&texobj, (ResTIMG*)tex[0], GX_TEXMAP0);
dKyr_set_btitex_common(&texobj, (ResTIMG*)tex[1], GX_TEXMAP1);
dKyr_set_btitex_common(&texobj, (ResTIMG*)tex[texidx + 2], GX_TEXMAP2);
#endif
GXSetNumChans(0);
GXSetTevColor(GX_TEVREG0, color_reg0);
@@ -2216,7 +2256,11 @@ static void dKyr_draw_rev_moon(Mtx drawMtx, u8** tex) {
for (int i = 0; i < 2; i++) {
if (i == 1) {
#if TARGET_PC
load_cached_tex(texobj, (ResTIMG*)lenz_packet->mpResBall, GX_TEXMAP0);
#else
dKyr_set_btitex(&texobj, (ResTIMG*)lenz_packet->mpResBall);
#endif
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
@@ -2481,10 +2525,17 @@ void dKyr_drawSun(Mtx drawMtx, cXyz* ppos, GXColor& unused, u8** tex) {
return;
}
#if TARGET_PC
static CachedTexObjs<8> texobj;
load_cached_tex(texobj, (ResTIMG*)tex[0], GX_TEXMAP0);
load_cached_tex(texobj, (ResTIMG*)tex[1], GX_TEXMAP1);
load_cached_tex(texobj, (ResTIMG*)tex[texidx + 2], GX_TEXMAP2);
#else
TGXTexObj texobj;
dKyr_set_btitex_common(&texobj, (ResTIMG*)tex[0], GX_TEXMAP0);
dKyr_set_btitex_common(&texobj, (ResTIMG*)tex[1], GX_TEXMAP1);
dKyr_set_btitex_common(&texobj, (ResTIMG*)tex[texidx + 2], GX_TEXMAP2);
#endif
GXSetNumChans(0);
GXSetTevColor(GX_TEVREG0, color_reg0);
@@ -2578,7 +2629,11 @@ void dKyr_drawSun(Mtx drawMtx, cXyz* ppos, GXColor& unused, u8** tex) {
for (int i = 0; i < 2; i++) {
if (i == 1) {
#if TARGET_PC
load_cached_tex(texobj, (ResTIMG*)lenz_packet->mpResBall, GX_TEXMAP0);
#else
dKyr_set_btitex(&texobj, (ResTIMG*)lenz_packet->mpResBall);
#endif
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
@@ -2742,8 +2797,13 @@ void dKyr_drawLenzflare(Mtx drawMtx, cXyz* ppos, GXColor& param_2, u8** tex) {
j3dSys.reinitGX();
#if TARGET_PC
static CachedTexObjs<3> texobj;
load_cached_tex(texobj, (ResTIMG*)tex[0], GX_TEXMAP0);
#else
TGXTexObj texobj;
dKyr_set_btitex(&texobj, (ResTIMG*)tex[0]);
#endif
GXSetNumChans(0);
GXSetTevColor(GX_TEVREG0, color_reg0);
GXSetTevColor(GX_TEVREG1, color_reg1);
@@ -3048,11 +3108,23 @@ void dKyr_drawLenzflare(Mtx drawMtx, cXyz* ppos, GXColor& param_2, u8** tex) {
}
if (i == 1) {
#if TARGET_PC
load_cached_tex(texobj, (ResTIMG*)tex[2], GX_TEXMAP0);
#else
dKyr_set_btitex(&texobj, (ResTIMG*)tex[2]);
#endif
} else if (i == 2) {
#if TARGET_PC
load_cached_tex(texobj, (ResTIMG*)tex[3], GX_TEXMAP0);
#else
dKyr_set_btitex(&texobj, (ResTIMG*)tex[3]);
#endif
} else {
#if TARGET_PC
load_cached_tex(texobj, (ResTIMG*)tex[0], GX_TEXMAP0);
#else
dKyr_set_btitex(&texobj, (ResTIMG*)tex[0]);
#endif
}
spE4.x = -var_f31;
@@ -3143,8 +3215,13 @@ void dKyr_drawRain(Mtx drawMtx, u8** tex) {
return;
}
#if TARGET_PC
static CachedTexObjs<1> texobj;
load_cached_tex(texobj, (ResTIMG*)tex[0], GX_TEXMAP0);
#else
TGXTexObj texobj;
dKyr_set_btitex(&texobj, (ResTIMG*)tex[0]);
#endif
GXSetNumChans(0);
GXSetTevColor(GX_TEVREG0, color_reg0);
GXSetNumTexGens(1);
@@ -3308,8 +3385,13 @@ void dKyr_drawSibuki(Mtx drawMtx, u8** tex) {
color.b = 0xC8;
color.a = rain_packet->mSibukiAlpha * alphaFade;
#if TARGET_PC
static CachedTexObjs<1> texobj;
load_cached_tex(texobj, (ResTIMG*)tex[1], GX_TEXMAP0);
#else
TGXTexObj texobj;
dKyr_set_btitex(&texobj, (ResTIMG*)tex[1]);
#endif
GXSetNumChans(0);
GXSetTevColor(GX_TEVREG0, color);
GXSetTevColor(GX_TEVREG1, color);
@@ -3397,7 +3479,11 @@ void dKyr_drawHousi(Mtx drawMtx, u8** tex) {
Mtx camMtx;
Mtx rotMtx;
cXyz pos[4];
#if TARGET_PC
static CachedTexObjs<1> texobj;
#else
TGXTexObj spDC;
#endif
cXyz spD0;
Vec spC4;
Vec spB8;
@@ -3484,7 +3570,11 @@ void dKyr_drawHousi(Mtx drawMtx, u8** tex) {
f32 temp_f24 = 6.5f;
for (int i = 0; i < 1; i++) {
dKyr_set_btitex(&spDC, (ResTIMG*)*tex);
#if TARGET_PC
load_cached_tex(texobj, (ResTIMG*)*tex, GX_TEXMAP0);
#else
dKyr_set_btitex(&texobj, (ResTIMG*)*tex);
#endif
#if TARGET_PC
GXSetNumChans(1);
GXSetChanCtrl(GX_COLOR0, GX_DISABLE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE);
@@ -3582,7 +3672,7 @@ void dKyr_drawHousi(Mtx drawMtx, u8** tex) {
block_14:
#if !TARGET_PC // GXLoadTextObj does nothing, TEV colors replaced with vertex colors
GXLoadTexObj(&spDC, GX_TEXMAP0);
GXLoadTexObj(&texobj, GX_TEXMAP0);
GXSetTevColor(GX_TEVREG0, color_reg0);
#endif
@@ -3842,8 +3932,13 @@ void dKyr_drawSnow(Mtx drawMtx, u8** tex) {
}
if (tex[0] != NULL) {
TGXTexObj spA0;
dKyr_set_btitex(&spA0, (ResTIMG*)tex[0]);
#if TARGET_PC
static CachedTexObjs<1> texobj;
load_cached_tex(texobj, (ResTIMG*)tex[0], GX_TEXMAP0);
#else
TGXTexObj texobj;
dKyr_set_btitex(&texobj, (ResTIMG*)tex[0]);
#endif
#if TARGET_PC
// Dusklight optimization: enable draw call merging
// by using vertex color instead of GX_TEVREG0
@@ -4445,7 +4540,12 @@ void drawCloudShadow(Mtx drawMtx, u8** tex) {
GXSetClipMode(GX_CLIP_DISABLE);
#if TARGET_PC
static CachedTexObjs<1> texobj;
TGXTexObj fb_texobj;
#else
TGXTexObj texobj, fb_texobj;
#endif
if (g_env_light.mMoyaMode < 50) {
dKy_ParticleColor_get_bg(&camera->view.lookat.eye, NULL, &sp48, &sp44, &sp40, &sp3C, 0.0f);
f32 temp_f30 = 0.4f;
@@ -4458,7 +4558,11 @@ void drawCloudShadow(Mtx drawMtx, u8** tex) {
color_reg1.g = (0.45f * sp38.g) + (0.55f * sp44.g);
color_reg1.b = (0.45f * sp38.b) + (0.55f * sp44.b);
#if TARGET_PC
load_cached_tex(texobj, (ResTIMG*)tex[0], GX_TEXMAP0);
#else
dKyr_set_btitex(&texobj, (ResTIMG*)tex[0]);
#endif
GXSetNumChans(0);
GXSetTevColor(GX_TEVREG0, color_reg0);
GXSetTevColor(GX_TEVREG1, color_reg1);
@@ -4503,7 +4607,11 @@ void drawCloudShadow(Mtx drawMtx, u8** tex) {
color_reg1.b = 0;
color_reg1.a = 0xFF;
#if TARGET_PC
load_cached_tex(texobj, (ResTIMG*)tex[0], GX_TEXMAP1);
#else
dKyr_set_btitex_common(&texobj, (ResTIMG*)tex[0], GX_TEXMAP1);
#endif
ResTIMG* fb_timg = mDoGph_gInf_c::getFrameBufferTimg();
dDlst_window_c* window = dComIfGp_getWindow(0);
@@ -4650,7 +4758,11 @@ void drawVrkumo(Mtx drawMtx, GXColor& color, u8** tex) {
Mtx camMtx;
Mtx rotMtx;
#if TARGET_PC
static CachedTexObjs<3> texobj;
#else
TGXTexObj texobj;
#endif
cXyz proj;
f32 rot;
@@ -4760,7 +4872,11 @@ void drawVrkumo(Mtx drawMtx, GXColor& color, u8** tex) {
color_reg1.r = 0;
color_reg1.g = 0;
color_reg1.b = 0;
#if TARGET_PC
auto* loaded_texobj = load_cached_tex(texobj, (ResTIMG*)tex[j], GX_TEXMAP0);
#else
dKyr_set_btitex(&texobj, (ResTIMG*)tex[j]);
#endif
GXSetNumChans(0);
GXSetTevColor(GX_TEVREG0, color);
@@ -4865,7 +4981,11 @@ void drawVrkumo(Mtx drawMtx, GXColor& color, u8** tex) {
}
if (!(vrkumo_packet->mVrkumoEff[k].mAlpha <= 0.000001f)) {
#if TARGET_PC
GXLoadTexObj(loaded_texobj, GX_TEXMAP0);
#else
GXLoadTexObj(&texobj, GX_TEXMAP0);
#endif
GXSetTevColor(GX_TEVREG0, color);
sp60 = sp68 * (0.2f + (0.2f * (k / 100.0f)));
@@ -5487,8 +5607,14 @@ void dKyr_odour_draw(Mtx drawMtx, u8** tex) {
break;
}
#if TARGET_PC
static CachedTexObjs<1> texobj;
TGXTexObj fb_texobj;
load_cached_tex(texobj, (ResTIMG*)tex[0], GX_TEXMAP1);
#else
TGXTexObj texobj, fb_texobj;
dKyr_set_btitex_common(&texobj, (ResTIMG*)tex[0], GX_TEXMAP1);
#endif
ResTIMG* fb_timg = mDoGph_gInf_c::getFrameBufferTimg();
dDlst_window_c* window = dComIfGp_getWindow(0);
@@ -5891,8 +6017,13 @@ void dKyr_mud_draw(Mtx drawMtx, u8** tex) {
if (g_env_light.camera_water_in_status == 0) {
for (int i = 0; i < 1; i++) {
#if TARGET_PC
static CachedTexObjs<1> texobj_cache;
auto* texobj = load_cached_tex(texobj_cache, (ResTIMG*)tex[0], GX_TEXMAP0);
#else
TGXTexObj texobj;
dKyr_set_btitex(&texobj, (ResTIMG*)tex[0]);
#endif
GXSetNumChans(0);
GXSetTevColor(GX_TEVREG0, color_reg0);
@@ -5932,7 +6063,11 @@ void dKyr_mud_draw(Mtx drawMtx, u8** tex) {
color_reg0.a = mud_packet->mEffect[j].field_0x38 * var_f31;
#if TARGET_PC
GXLoadTexObj(texobj, GX_TEXMAP0);
#else
GXLoadTexObj(&texobj, GX_TEXMAP0);
#endif
GXSetTevColor(GX_TEVREG0, color_reg0);
f32 sp30 = 1.0f;
@@ -6054,8 +6189,13 @@ static void dKyr_evil_draw2(Mtx drawMtx, u8** tex) {
color_reg0.b = 0x87;
color_reg0.a = 0xFF;
#if TARGET_PC
static CachedTexObjs<1> texobj;
load_cached_tex(texobj, (ResTIMG*)tex[1], GX_TEXMAP0);
#else
TGXTexObj texobj;
dKyr_set_btitex(&texobj, (ResTIMG*)tex[1]);
#endif
#if TARGET_PC
if (dusk::frame_interp::get_ui_tick_pending())
@@ -6293,8 +6433,13 @@ void dKyr_evil_draw(Mtx drawMtx, u8** tex) {
color_reg1.b = 10;
color_reg1.a = 255;
#if TARGET_PC
static CachedTexObjs<1> texobj;
load_cached_tex(texobj, (ResTIMG*)tex[0], GX_TEXMAP0);
#else
TGXTexObj texobj;
dKyr_set_btitex(&texobj, (ResTIMG*)tex[0]);
#endif
#if TARGET_PC
if (dusk::frame_interp::get_ui_tick_pending())
+4 -1
View File
@@ -11,12 +11,15 @@
#include <types.h>
u32 mDoLib_setResTimgObj(ResTIMG const* i_img, TGXTexObj* o_texObj, u32 tlut_name,
GXTlutObj* o_tlutObj) {
TGXTlutObj* o_tlutObj) {
#ifdef TARGET_PC
o_texObj->reset();
#endif
if (i_img->indexTexture) {
JUT_ASSERT(44, o_tlutObj != NULL);
#ifdef TARGET_PC
o_tlutObj->reset();
#endif
GXInitTlutObj(o_tlutObj, (void*)((u8*)i_img + i_img->paletteOffset),
(GXTlutFmt)i_img->colorFormat, (u16)i_img->numColors);
GXInitTexObjCI(o_texObj, (void*)((u8*)i_img + i_img->imageOffset), i_img->width, i_img->height,