mirror of
https://github.com/zeldaret/ss
synced 2026-05-29 16:44:44 -04:00
PostEffectMask OK
This commit is contained in:
@@ -2282,6 +2282,8 @@ egg/gfx/eggPostEffectUnk2.cpp:
|
||||
|
||||
egg/gfx/eggPostEffectMask.cpp:
|
||||
.text start:0x804B0AB0 end:0x804B0F60
|
||||
.data start:0x8056F1D0 end:0x8056F1F0
|
||||
.sdata2 start:0x8057F7C8 end:0x8057F7D0
|
||||
|
||||
egg/gfx/eggPostEffectMaskDOF.cpp:
|
||||
.text start:0x804B0F60 end:0x804B1BE8
|
||||
|
||||
@@ -26485,7 +26485,7 @@ scnProcDraw__Q23EGG12DrawPathBaseFUs = .text:0x804A0E60; // type:function size:0
|
||||
@8@__dt__Q23EGG12DrawPathBaseFv = .text:0x804A0E80; // type:function size:0x8
|
||||
@20@__dt__Q23EGG12DrawPathBaseFv = .text:0x804A0E90; // type:function size:0x8
|
||||
FUN_804a0ea0 = .text:0x804A0EA0; // type:function size:0x188
|
||||
FUN_804a1030 = .text:0x804A1030; // type:function size:0x40
|
||||
__dt__Q23EGG14PostEffectMaskFv = .text:0x804A1030; // type:function size:0x40
|
||||
FUN_804a1070 = .text:0x804A1070; // type:function size:0x40
|
||||
FUN_804a10b0 = .text:0x804A10B0; // type:function size:0x40
|
||||
FUN_804a10f0 = .text:0x804A10F0; // type:function size:0x60
|
||||
@@ -26711,8 +26711,8 @@ FUN_804b00a0 = .text:0x804B00A0; // type:function size:0x1F8
|
||||
FUN_804b02a0 = .text:0x804B02A0; // type:function size:0x80
|
||||
FUN_804b0320 = .text:0x804B0320; // type:function size:0x2D4
|
||||
FUN_804b0600 = .text:0x804B0600; // type:function size:0x4A4
|
||||
FUN_804b0ab0 = .text:0x804B0AB0; // type:function size:0x64
|
||||
FUN_804b0b20 = .text:0x804B0B20; // type:function size:0x440
|
||||
__ct__Q23EGG14PostEffectMaskFv = .text:0x804B0AB0; // type:function size:0x64
|
||||
setMaterialInternal__Q23EGG14PostEffectMaskFv = .text:0x804B0B20; // type:function size:0x440
|
||||
FUN_804b0f60 = .text:0x804B0F60; // type:function size:0x160
|
||||
FUN_804b10c0 = .text:0x804B10C0; // type:function size:0x330
|
||||
FUN_804b13f0 = .text:0x804B13F0; // type:function size:0x174
|
||||
@@ -37379,7 +37379,7 @@ __vt__Q23EGG14PostEffectBase = .data:0x8056F150; // type:object size:0x1C
|
||||
lbl_8056F170 = .data:0x8056F170; // type:object size:0x20
|
||||
lbl_8056F190 = .data:0x8056F190; // type:object size:0x20
|
||||
lbl_8056F1B0 = .data:0x8056F1B0; // type:object size:0x20
|
||||
lbl_8056F1D0 = .data:0x8056F1D0; // type:object size:0x20
|
||||
__vt__Q23EGG14PostEffectMask = .data:0x8056F1D0; // type:object size:0x1C
|
||||
lbl_8056F1F0 = .data:0x8056F1F0; // type:object size:0x20
|
||||
lbl_8056F210 = .data:0x8056F210; // type:object size:0x20
|
||||
sTVModeInfo__Q23EGG6Screen = .data:0x8056F230; // type:object size:0x24 data:2byte
|
||||
|
||||
+1
-1
@@ -893,7 +893,7 @@ config.libs = [
|
||||
Object(NonMatching, "egg/gfx/eggPostEffectBlur.cpp"),
|
||||
Object(NonMatching, "egg/gfx/eggPostEffectUnk1.cpp"), # Unknown
|
||||
Object(NonMatching, "egg/gfx/eggPostEffectUnk2.cpp"), # Unknown
|
||||
Object(NonMatching, "egg/gfx/eggPostEffectMask.cpp"),
|
||||
Object(Matching, "egg/gfx/eggPostEffectMask.cpp"),
|
||||
Object(NonMatching, "egg/gfx/eggPostEffectMaskDOF.cpp"),
|
||||
Object(NonMatching, "egg/gfx/eggPostEffectSimple.cpp"),
|
||||
Object(NonMatching, "egg/gfx/eggScreen.cpp"),
|
||||
|
||||
@@ -96,11 +96,11 @@ public:
|
||||
|
||||
static u32 s_flag;
|
||||
|
||||
static GXColor BLACK;
|
||||
static GXColor WHITE;
|
||||
static GXColor GREEN;
|
||||
static GXColor RED;
|
||||
static GXColor BLUE;
|
||||
static const GXColor BLACK;
|
||||
static const GXColor WHITE;
|
||||
static const GXColor GREEN;
|
||||
static const GXColor RED;
|
||||
static const GXColor BLUE;
|
||||
};
|
||||
|
||||
} // namespace EGG
|
||||
|
||||
@@ -1,6 +1,30 @@
|
||||
#ifndef EGG_POST_EFFECT_MASK_H
|
||||
#define EGG_POST_EFFECT_MASK_H
|
||||
|
||||
namespace EGG {} // namespace EGG
|
||||
#include "egg/gfx/eggPostEffectBase.h"
|
||||
#include "rvl/GX/GXTypes.h"
|
||||
|
||||
namespace EGG {
|
||||
|
||||
class PostEffectMask : public PostEffectBase {
|
||||
public:
|
||||
PostEffectMask();
|
||||
|
||||
virtual void setMaterialInternal() override;
|
||||
|
||||
GXTevScale GetTevScale() const {
|
||||
return static_cast<GXTevScale>(field_0x1BC);
|
||||
}
|
||||
|
||||
private:
|
||||
/* 0x2C */ int field_0x2C;
|
||||
/* 0x30 */ GXColor mColor;
|
||||
/* 0x34 */ f32 field_0x34;
|
||||
/* 0x38 */ f32 field_0x38;
|
||||
/* 0x3C */ u8 _0x3C[0x180];
|
||||
/* 0x1BC */ u8 field_0x1BC;
|
||||
};
|
||||
|
||||
} // namespace EGG
|
||||
|
||||
#endif
|
||||
|
||||
@@ -23,8 +23,8 @@ Fog::Fog() {
|
||||
void Fog::Reset() {
|
||||
// TODO
|
||||
mColor = DrawGX::WHITE;
|
||||
mNearZ = 0.0f;
|
||||
mFarZ = 0.0f;
|
||||
mNearZ = 0.0f;
|
||||
mEndZ = 0.0f;
|
||||
mStartZ = 0.0f;
|
||||
mFogType = GX_FOG_NONE;
|
||||
|
||||
@@ -1,3 +1,90 @@
|
||||
#include "egg/gfx/eggPostEffectMask.h"
|
||||
|
||||
namespace EGG {} // namespace EGG
|
||||
#include "common.h"
|
||||
#include "egg/gfx/eggDrawGX.h"
|
||||
#include "rvl/GX/GXAttr.h"
|
||||
#include "rvl/GX/GXTev.h"
|
||||
#include "rvl/GX/GXTypes.h"
|
||||
|
||||
namespace EGG {
|
||||
|
||||
PostEffectMask::PostEffectMask()
|
||||
: mColor(DrawGX::WHITE), field_0x2C(0), field_0x34(0.0f), field_0x38(1.0f), field_0x1BC(1) {}
|
||||
|
||||
void PostEffectMask::setMaterialInternal() {
|
||||
bool hasTex2 = mpCapTexture2 != nullptr;
|
||||
loadTextureInternal();
|
||||
GXColor resColor;
|
||||
fn_804AF040(resColor, mColor, false, field_0x34);
|
||||
setMatColorChannel();
|
||||
GXSetNumTexGens(2);
|
||||
|
||||
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3c, 0, 0x7d);
|
||||
GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX0, 0x3c, 0, 0x7d);
|
||||
setMatInd();
|
||||
GXSetTevSwapModeTable(GX_TEV_SWAP0, GX_CH_RED, GX_CH_GREEN, GX_CH_BLUE, GX_CH_ALPHA);
|
||||
GXSetTevDirect(GX_TEVSTAGE0);
|
||||
GXSetTevSwapMode(GX_TEVSTAGE0, GX_TEV_SWAP0, GX_TEV_SWAP0);
|
||||
GXSetTevDirect(GX_TEVSTAGE1);
|
||||
GXSetTevSwapMode(GX_TEVSTAGE1, GX_TEV_SWAP0, GX_TEV_SWAP0);
|
||||
GXTevScale scale = field_0x2C == 0 ? GetTevScale() : GX_CS_SCALE_1;
|
||||
|
||||
GXColor c = resColor;
|
||||
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, mTexMapId, GX_COLOR_NULL);
|
||||
GXSetTevKColorSel(GX_TEVSTAGE0, GX_TEV_KCSEL_K0);
|
||||
GXSetTevKAlphaSel(GX_TEVSTAGE0, GX_TEV_KASEL_K0_A);
|
||||
GXSetTevKColor(GX_KCOLOR0, c);
|
||||
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_KONST, GX_CC_ZERO, GX_CC_ZERO, GX_CC_TEXC);
|
||||
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_SUB, GX_TB_ZERO, scale, 1, GX_TEVPREV);
|
||||
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_KONST, GX_CA_ZERO, GX_CA_ZERO, GX_CA_TEXA);
|
||||
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_SUB, GX_TB_ZERO, scale, 1, GX_TEVPREV);
|
||||
|
||||
switch (field_0x2C) {
|
||||
case 0: {
|
||||
if (hasTex2) {
|
||||
GXSetNumTevStages(2);
|
||||
GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD1, mTexMapId2, GX_COLOR_NULL);
|
||||
GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_ZERO, GX_CC_TEXC, GX_CC_CPREV, GX_CC_ZERO);
|
||||
GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
|
||||
GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_TEXA, GX_CA_APREV, GX_CA_ZERO);
|
||||
GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV);
|
||||
field_0x00 = 0;
|
||||
} else {
|
||||
GXSetNumTevStages(1);
|
||||
field_0x00 = 10;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 1: {
|
||||
if (hasTex2) {
|
||||
GXSetNumTevStages(3);
|
||||
scale = GetTevScale();
|
||||
GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD0, mTexMapId, GX_COLOR_NULL);
|
||||
GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_ZERO, GX_CC_CPREV, GX_CC_TEXA, GX_CC_ZERO);
|
||||
GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, scale, 1, GX_TEVPREV);
|
||||
GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
|
||||
GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
|
||||
GXSetTevOrder(GX_TEVSTAGE2, GX_TEXCOORD1, mTexMapId2, GX_COLOR_NULL);
|
||||
GXSetTevColorIn(GX_TEVSTAGE2, GX_CC_ZERO, GX_CC_TEXC, GX_CC_CPREV, GX_CC_ZERO);
|
||||
GXSetTevColorOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
|
||||
GXSetTevAlphaIn(GX_TEVSTAGE2, GX_CA_ZERO, GX_CA_TEXA, GX_CA_APREV, GX_CA_ZERO);
|
||||
GXSetTevAlphaOp(GX_TEVSTAGE2, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
|
||||
field_0x00 = 0;
|
||||
} else {
|
||||
GXSetNumTevStages(2);
|
||||
scale = GetTevScale();
|
||||
GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD0, mTexMapId, GX_COLOR_NULL);
|
||||
GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_ZERO, GX_CC_CPREV, GX_CC_TEXA, GX_CC_ZERO);
|
||||
GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, scale, 1, GX_TEVPREV);
|
||||
GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
|
||||
GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
|
||||
field_0x00 = 10;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
setMatPE();
|
||||
}
|
||||
|
||||
} // namespace EGG
|
||||
|
||||
Reference in New Issue
Block a user