diff options
Diffstat (limited to 'src/d/d_menu_window.cpp')
| -rw-r--r-- | src/d/d_menu_window.cpp | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/d/d_menu_window.cpp b/src/d/d_menu_window.cpp index 19c9151844..6fb7f2624a 100644 --- a/src/d/d_menu_window.cpp +++ b/src/d/d_menu_window.cpp @@ -22,6 +22,86 @@ #include "f_op/f_op_overlap_mng.h" #include "m_Do/m_Do_controller_pad.h" +class dDlst_MENU_CAPTURE_c : public dDlst_base_c { +public: + virtual void draw() { + if (getDrawFlag() == 1) { + setDrawFlag(); + dComIfGp_onPauseFlag(); + GXSetTexCopySrc(0, 0, 608, 448); + GXSetTexCopyDst(304, 224, (GXTexFmt)mDoGph_gInf_c::getFrameBufferTimg()->format, GX_ENABLE); + GXCopyTex(mDoGph_gInf_c::getFrameBufferTex(), GX_FALSE); + GXPixModeSync(); + } else { + GXTexObj tex; + GXInitTexObj(&tex, mDoGph_gInf_c::getFrameBufferTex(), 304, 224, + (GXTexFmt)mDoGph_gInf_c::getFrameBufferTimg()->format, GX_CLAMP, GX_CLAMP, GX_FALSE); + GXInitTexObjLOD(&tex, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1); + GXLoadTexObj(&tex, GX_TEXMAP0); + GXSetNumChans(0); + GXSetNumTexGens(1); + GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 60, GX_FALSE, 125); + GXSetNumTevStages(1); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL); + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_TEXC); + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + const GXColor color = {0, 0, 0, mAlpha}; + GXSetTevColor(GX_TEVREG0, color); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetZCompLoc(GX_TRUE); + GXSetZMode(GX_FALSE, GX_ALWAYS, GX_FALSE); + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_OR); + GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0); + GXSetFog(GX_FOG_NONE, 0.0f, 0.0f, 0.0f, 0.0f, g_clearColor); + GXSetFogRangeAdj(GX_FALSE, 0, NULL); + GXSetCullMode(GX_CULL_NONE); + GXSetDither(GX_TRUE); + GXLoadPosMtxImm(g_mDoMtx_identity, GX_PNMTX0); + GXSetCurrentMtx(0); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_RGBA4, 0); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGB8, 0); + + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + GXPosition3s16(mDoGph_gInf_c::getMinX(), mDoGph_gInf_c::getMinY(), 0); + GXTexCoord2s8(0, 0); + + GXPosition3s16(mDoGph_gInf_c::getMaxX(), mDoGph_gInf_c::getMinY(), 0); + GXTexCoord2s8(1, 0); + + GXPosition3s16(mDoGph_gInf_c::getMaxX(), mDoGph_gInf_c::getMaxY(), 0); + GXTexCoord2s8(1, 1); + + GXPosition3s16(mDoGph_gInf_c::getMinX(), mDoGph_gInf_c::getMaxY(), 0); + GXTexCoord2s8(0, 1); + GXEnd(); + } + } + + virtual ~dDlst_MENU_CAPTURE_c() {} + + dDlst_MENU_CAPTURE_c() { + mFlag = 0; + mAlpha = 255; + mTopFlag = 0; + } + + void setCaptureFlag() { mFlag = 1; } + bool checkDraw() { return mFlag; } + u8 getAlpha() { return mAlpha; } + u8 getTopFlag() { return mTopFlag; } + u8 getDrawFlag() { return mFlag; } + void setDrawFlag() { mFlag = 3; } + +private: + /* 0x4 */ u8 mFlag; + /* 0x5 */ u8 mAlpha; + /* 0x6 */ u8 mTopFlag; +}; + BOOL dMw_UP_TRIGGER() { return mDoCPd_c::getTrigUp(PAD_1) != 0; } |
