| 16 | } |
| 17 | |
| 18 | void 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); |
nothing calls this directly
no test coverage detected