SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
BigBubbleDrawer.cpp
1#include "Game/MapObj/BigBubbleDrawer.hpp"
2
3BigBubbleDrawer::BigBubbleDrawer() {
4 mBubbleTexture = nullptr;
5 mRainbowTexture = nullptr;
6 _8 = 0.0f;
7 mBubbleTexture = new JUTTexture(MR::loadTexFromArc("BigBubble.arc", "Bubble.bti"), 0);
8 mRainbowTexture = new JUTTexture(MR::loadTexFromArc("BigBubble.arc", "Rainbow.bti"), 0);
9}
10
11void BigBubbleDrawer::setUpDraw() const {
12 setUpMaterial();
13}
14
15void BigBubbleDrawer::setUpVertexFormat() const {
16 GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
17 GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_POS_XY, GX_F32, 0);
18 GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_POS_XYZ, GX_F32, 0);
19 GXClearVtxDesc();
20 GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
21 GXSetVtxDesc(GX_VA_NRM, GX_DIRECT);
22 GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
23}
24
25void BigBubbleDrawer::setUpTexture() const {
26 GXSetNumTexGens(2);
27 GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x1E, 0, 0x7D);
28 GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX3x4, GX_TG_NRM, 0x21, 0, 0x7D);
29 TMtx34f mtx;
30 mtx.identity();
31 GXLoadTexMtxImm(mtx.toMtxPtr(), 0x1E, GX_MTX2x4);
32
33 const MtxPtr cameraMtx = MR::getCameraViewMtx();
34 mtx.setInline(cameraMtx);
35
36 mtx.mMtx[0][3] = sEnvMatTrans.x;
37 mtx.mMtx[1][3] = sEnvMatTrans.y;
38 mtx.mMtx[2][3] = sEnvMatTrans.z;
39 GXLoadTexMtxImm(mtx.toMtxPtr(), 0x21, GX_MTX3x4);
40 mRainbowTexture->load(GX_TEXMAP0);
41 mBubbleTexture->load(GX_TEXMAP1);
42}
43
44void BigBubbleDrawer::setUpTevStage() const {
45 GXSetNumTevStages(3);
46 GXSetTevColor(GX_TEVREG0, (GXColor&)sTevColor0);
47 GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
48 GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_TEXC, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO);
49 GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 0, GX_TEVPREV);
50 GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_TEXA, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
51 GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 0, GX_TEVPREV);
52 GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD1, GX_TEXMAP1, GX_COLOR_NULL);
53 GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_ZERO, GX_CC_C0, GX_CC_TEXA, GX_CC_CPREV);
54 GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
55 GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_TEXA, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
56 GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 0, GX_TEVPREV);
57 GXSetTevOrder(GX_TEVSTAGE2, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
58 GXSetTevColorIn(GX_TEVSTAGE2, GX_CC_CPREV, GX_CC_C1, GX_CC_A1, GX_CC_ZERO);
59 GXSetTevColorOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
60 GXSetTevKAlphaSel(GX_TEVSTAGE2, GX_TEV_KASEL_7_8);
61 GXSetTevAlphaIn(GX_TEVSTAGE2, GX_CA_APREV, GX_CA_KONST, GX_CA_A1, GX_CA_ZERO);
62 GXSetTevAlphaOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 0, GX_TEVPREV);
63}
64
65void BigBubbleDrawer::setUpPixelFormat() const {
66 GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR);
67 GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_AND, GX_ALWAYS, 0);
68 GXSetColorUpdate(1);
69 GXSetAlphaUpdate(0);
70 GXSetCoPlanar(0);
71 GXSetZMode(1, GX_LEQUAL, 0);
72 GXSetZCompLoc(0);
73 GXSetCullMode(GX_CULL_BACK);
74 GXSetClipMode(GX_CLIP_ENABLE);
75}
76
77void BigBubbleDrawer::setUpMaterial() const {
78 setUpVertexFormat();
79 GXSetNumChans(1);
80 GXSetChanCtrl(GX_COLOR0A0, 0, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_NONE, GX_AF_NONE);
81 GXSetChanCtrl(GX_COLOR1A1, 0, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_NONE, GX_AF_NONE);
82 setUpTexture();
83 setUpTevStage();
84 setUpPixelFormat();
85 GXLoadPosMtxImm(MR::getCameraViewMtx(), 0);
86
87 Mtx normalMtx;
88 PSMTXIdentity(normalMtx);
89 GXLoadNrmMtxImm(normalMtx, 0);
90 GXSetCurrentMtx(0);
91 MR::loadProjectionMtx();
92}