MCPcopy Create free account
hub / github.com/doldecomp/mkdd / draw

Method draw

src/Osako/shadowScr.cpp:18–93  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

16}
17
18void ShadowScreen::draw()
19{
20 ShadowManager *shadowMgr = ShadowManager::ptr();
21
22 u8 mode = shadowMgr->getDepthMode();
23 switch (mode)
24 {
25 case 1:
26 mTexture.capture(0, 0, GX_CTF_A8, true, 0);
27 mTexture.load(GX_TEXMAP0);
28 }
29
30 GXSetViewport(System::get2DVpX(), System::get2DVpY(), System::get2DVpW(), System::get2DVpH(), 0.0f, 1.0f);
31 GXSetScissor(System::get2DScisX(), System::get2DScisY(), System::get2DScisW(), System::get2DScisH());
32 GXLoadPosMtxImm(mPosMtx, 0);
33 GXSetCurrentMtx(0);
34 GXSetProjection(mProjMtx, GX_ORTHOGRAPHIC);
35 GXSetNumChans(1);
36 GXSetChanMatColor(GX_COLOR0A0, shadowMgr->getShadowColor());
37 GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_NONE, GX_AF_NONE);
38 GXSetZMode(GX_FALSE, GX_NEVER, GX_FALSE);
39
40 switch (mode)
41 {
42 case 0:
43 GXSetNumTevStages(1);
44 GXSetNumTexGens(0);
45 GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
46 GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR);
47 GXSetBlendMode(GX_BM_BLEND, GX_BL_INVDSTALPHA, GX_BL_DSTALPHA, GX_LO_NOOP);
48 GXClearVtxDesc();
49 GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
50 GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_U16, 0);
51
52 // Fifo Writes
53 GXBegin(GX_QUADS, GX_VTXFMT0, 4);
54 GXPosition3u16(mStartX, mStartY, 0);
55 GXPosition3u16(mEndX, mStartY, 0);
56 GXPosition3u16(mEndX, mEndY, 0);
57 GXPosition3u16(mStartX, mEndY, 0);
58 GXEnd();
59 break;
60 case 1:
61 GXColorS10 color = {0, 0, 0, (shadowMgr->getDepth(1) & 0xfc) - 0xff};
62
63 GXSetNumTevStages(1);
64 GXSetNumTexGens(1);
65 GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 60, GX_FALSE, 125);
66 GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0);
67 GXSetTevColorS10(GX_TEVREG0, color);
68 GXSetTevColor(GX_TEVREG1, shadowMgr->getShadowColor());
69 GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_C1);
70 GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
71 GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_TEXA, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0);
72 GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_4, GX_TRUE, GX_TEVPREV);
73 GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP);
74 GXClearVtxDesc();
75 GXSetVtxDesc(GX_VA_POS, GX_DIRECT);

Callers

nothing calls this directly

Calls 15

get2DVpXFunction · 0.85
get2DVpYFunction · 0.85
get2DVpWFunction · 0.85
get2DVpHFunction · 0.85
get2DScisXFunction · 0.85
get2DScisYFunction · 0.85
get2DScisWFunction · 0.85
get2DScisHFunction · 0.85
GXPosition3u16Function · 0.85
GXEndFunction · 0.85
GXTexCoord2u8Function · 0.85
getDepthModeMethod · 0.80

Tested by

no test coverage detected