1#include <dol/mLib/m_wipe_fader.hpp>
2#include <lib/rvl/sc/SC.h>
3#include <lib/rvl/vi/VI.h>
7 mpTextureData(nullptr) {
12 if (SCGetAspectRatio() == 1) {
15 mAspectRatioFactor = 1.36842095f;
17 mAspectRatioFactor = 1;
21mWipeFader_c::~mWipeFader_c() {
34 }
else if (status ==
HIDDEN) {
70 float scrH = VI_VIRTUAL_HEIGHT;
71 PSMTXScale(&scaleMtx, scale, scale * scrH / scrW, 0.0f);
86 C_MTXOrtho(&projMtx, -VI_VIRTUAL_HALF_HEIGHT, VI_VIRTUAL_HALF_HEIGHT, -width, width, 0.0, 1.0);
87 GXSetProjection(&projMtx, 1);
91 GXLoadPosMtxImm(&posMtx, 0);
95 GXInvalidateVtxCache();
97 GXSetVtxDesc(GX_VA_POS, GX_VA_TEX0MTXIDX);
98 GXSetVtxAttrFmt(0, GX_VA_POS, 1, 4, 0);
102 GXSetChanCtrl(GX_COLOR0A0, 0, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE);
105 GXSetNumIndStages(0);
106 __GXSetIndirectMask(0);
108 GXSetNumTevStages(1);
109 GXSetTevOp(GX_TEVSTAGE0, 4);
110 GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
112 GXSetBlendMode(GX_BM_NONE, GX_BL_ONE, GX_BL_ZERO, GX_LO_SET);
116 GXSetZMode(0, GX_NEVER, 0);
119 GXBegin(GX_QUADS, GX_VTXFMT0, 4);
121 GXPosition3f32(-width, -VI_VIRTUAL_HALF_HEIGHT, 0);
122 GXPosition3f32(width, -VI_VIRTUAL_HALF_HEIGHT, 0);
123 GXPosition3f32(width, VI_VIRTUAL_HALF_HEIGHT, 0);
124 GXPosition3f32(-width, VI_VIRTUAL_HALF_HEIGHT, 0);
129 GXInvalidateVtxCache();
131 GXSetVtxDesc(GX_VA_POS, GX_VA_TEX0MTXIDX);
132 GXSetVtxDesc(GX_VA_TEX0, GX_VA_TEX0MTXIDX);
133 GXSetVtxAttrFmt(0, GX_VA_POS, 1, 4, 0);
134 GXSetVtxAttrFmt(0, GX_VA_TEX0, 1, 4, 0);
138 GXSetChanCtrl(GX_COLOR0A0, 0, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE);
142 GXLoadTexObj(&texObj, GX_TEXMAP0);
146 GXLoadTexMtxImm(&texMtx, 30, GX_MTX_2x4);
147 GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 30, 0, 125);
150 GXSetNumIndStages(0);
151 __GXSetIndirectMask(0);
153 GXSetNumTevStages(1);
154 GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO);
155 GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_TEV_SCALE_0, 1, GX_TEVPREV);
156 GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_TEXA);
157 GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_TEV_SCALE_0, 1, GX_TEVPREV);
158 GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
160 GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_SET);
163 GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
164 GXSetZMode(0, GX_NEVER, 0);
167 GXBegin(GX_QUADS, GX_VTXFMT0, 4);
169 GXPosition3f32(-width, -VI_VIRTUAL_HALF_HEIGHT, 0);
170 GXTexCoord2f32(0, 0);
171 GXPosition3f32(width, -VI_VIRTUAL_HALF_HEIGHT, 0);
172 GXTexCoord2f32(1, 0);
173 GXPosition3f32(width, VI_VIRTUAL_HALF_HEIGHT, 0);
174 GXTexCoord2f32(1, 1);
175 GXPosition3f32(-width, VI_VIRTUAL_HALF_HEIGHT, 0);
176 GXTexCoord2f32(0, 1);
Base fader implementation.
u16 mCurrFrame
The fader's current frame.
EStatus mStatus
The fader's status.
u16 mFrameCount
The fader's duration.
mColor mFaderColor
The fader's color.
EStatus
The fader's status.
@ FADE_IN
Transition from OPAQUE to HIDDEN.
@ FADE_OUT
Transition from HIDDEN to OPAQUE.
@ HIDDEN
The screen is completely unblocked.
@ OPAQUE
The screen is completely blacked out.
virtual int calc()
Calculates the fader at the current frame.
int mTexWidth
The width of the texture.
virtual void draw()
Draws the fader.
Mtx mTexMtx
The texture matrix.
int mTexHeight
The height of the texture.
virtual void setStatus(EStatus status)
Sets the fader's status.
virtual int calc()
Calculates the fader at the current frame.
float mAspectRatioFactor
How much to stretch the texture horizontally to compensate for the screen's aspect ratio.
void * mpTextureData
The texture data.
virtual void calcMtx()
Calculates the texture matrix needed for drawing the texture to the screen.
virtual void setTexture(void *data, int width, int height)
Sets the texture to use for the fader.
u8 mProgress
A value from 0 to 255 that represents the current progress of the fader.
void PSMTXScale(Mtx *mtx, float x, float y, float z)
Sets a scaling matrix with the given components.
float Mtx44[4][4]
A 4x4 matrix.
void PSMTXTrans(Mtx *mtx, float x, float y, float z)
Sets a translation matrix with the given components.
void PSMTXConcat(const Mtx *a, const Mtx *b, Mtx *out)
Concatenates two matrices.
void PSMTXCopy(const Mtx *src, Mtx *dst)
Copies a matrix.
float Mtx[3][4]
A 3x4 matrix.
void PSMTXIdentity(Mtx *mtx)
Sets the given matrix to the identity matrix.