d_drawlist work

This commit is contained in:
Jasper St. Pierre
2024-01-06 14:21:16 -08:00
parent a560e30703
commit b0b5854b98
2 changed files with 99 additions and 19 deletions
+21 -19
View File
@@ -116,25 +116,24 @@ class dDlst_2DM_c : public dDlst_base_c {
public:
virtual void draw();
s16 field_0x4;
s16 field_0x6;
s16 field_0x8;
s16 field_0xa;
u8 field_0xc;
GXColor field_0xd;
GXColor field_0x11;
void* field_0x18;
short field_0x1c;
u16 field_0x1e;
u16 field_0x20;
s16 field_0x22;
s16 field_0x24;
void* field_0x28;
short field_0x2c;
u16 field_0x2e;
u16 field_0x30;
s16 field_0x32;
s16 field_0x34;
public:
struct TexEntry {
/* 0x00 */ u8* mpData;
/* 0x04 */ u8 mFormat;
/* 0x06 */ u16 mWidth;
/* 0x08 */ u16 mHeight;
/* 0x0A */ s16 mScrollX;
/* 0x0C */ s16 mScrollY;
};
/* 0x04 */ s16 mX0;
/* 0x06 */ s16 mY0;
/* 0x08 */ s16 mX1;
/* 0x0A */ s16 mY1;
/* 0x0C */ u8 mTex1Wrap;
/* 0x0D */ GXColor mC0;
/* 0x11 */ GXColor mC1;
/* 0x18 */ TexEntry mTex[2];
};
class dDlst_2Dm_c : public dDlst_base_c {
@@ -144,6 +143,9 @@ public:
void setScale(f32, f32);
void setScroll(int, s16, s16);
virtual void draw();
void setAlpha(u8) {}
void setBlackColor(GXColor& c) { mC0 = c; }
void setWhiteColor(GXColor& c) { mC1 = c; }
public:
struct TexEntry {
+78
View File
@@ -405,6 +405,84 @@ void dDlst_2DT2_c::init(ResTIMG* tex, f32 x, f32 y, f32 w, f32 h, u8 p0, u8 p1,
/* 800812F4-800817CC .text draw__11dDlst_2DM_cFv */
void dDlst_2DM_c::draw() {
/* Nonmatching */
GXVtxAttrFmtList fmtList[GX_VA_MAX_ATTR + 1];
s16 tex0_s0 = mTex[0].mScrollX;
s16 tex0_t0 = mTex[0].mScrollY;
s16 tex0_s1 = (tex0_s0 + 256.0f);
s16 tex0_t1 = (tex0_t0 + 256.0f);
f32 scaleX = 256.0f / mTex[1].mWidth;
f32 scaleY = 256.0f / mTex[1].mHeight;
s16 tex1_s0 = mTex[1].mScrollX * scaleX;
s16 tex1_t0 = mTex[1].mScrollY * scaleY;
s16 tex1_s1 = tex1_s0 + (s16)(mTex[0].mWidth * scaleX);
s16 tex1_t1 = tex1_t0 + (s16)(mTex[0].mHeight * scaleY);
GXGetVtxAttrFmtv(GX_VTXFMT0, fmtList);
GXTexObj texObj[2];
GXInitTexObj(&texObj[0], mTex[0].mpData, mTex[0].mWidth, mTex[0].mHeight, (GXTexFmt)mTex[0].mFormat, GX_CLAMP, GX_CLAMP, GX_FALSE);
GXInitTexObjLOD(&texObj[0], GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1);
GXTexWrapMode wrap1 = mTex1Wrap ? GX_REPEAT : GX_CLAMP;
GXInitTexObj(&texObj[1], mTex[1].mpData, mTex[1].mWidth, mTex[1].mHeight, (GXTexFmt)mTex[1].mFormat, wrap1, wrap1, GX_FALSE);
GXInitTexObjLOD(&texObj[1], GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1);
GXLoadTexObj(&texObj[0], GX_TEXMAP0);
GXLoadTexObj(&texObj[1], GX_TEXMAP1);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_S16, 8);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX1, GX_TEX_ST, GX_S16, 8);
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
GXSetVtxDesc(GX_VA_TEX1, GX_DIRECT);
GXSetNumChans(0);
GXSetTevColor(GX_TEVREG0, mC0);
GXSetTevColor(GX_TEVREG1, mC1);
GXSetNumTexGens(2);
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY);
GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX1, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY);
GXSetNumTevStages(2);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C1, GX_CC_C0, GX_CC_TEXC, GX_CC_ZERO);
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_A1, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR_NULL);
GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_ZERO, GX_CC_TEXC, GX_CC_CPREV, GX_CC_ZERO);
GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_TEXA, GX_CA_APREV, GX_CA_ZERO);
GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET);
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
GXPosition3s16(mX0, mY0, 0.0f);
GXTexCoord2s16(tex0_s0, tex0_t0);
GXTexCoord2s16(tex1_s0, tex1_t0);
GXPosition3s16(mX1, mY0, 0.0f);
GXTexCoord2s16(tex0_s1, tex0_t0);
GXTexCoord2s16(tex1_s1, tex1_t0);
GXPosition3s16(mX1, mY1, 0.0f);
GXTexCoord2s16(tex0_s1, tex0_t1);
GXTexCoord2s16(tex1_s1, tex1_t1);
GXPosition3s16(mX0, mY1, 0.0f);
GXTexCoord2s16(tex0_s0, tex0_t1);
GXTexCoord2s16(tex1_s0, tex1_t1);
GXEnd();
GXSetVtxAttrFmtv(GX_VTXFMT0, fmtList);
}
/* 800817CC-80081850 .text init__11dDlst_2Dm_cFP7ResTIMGP7ResTIMGff */