PostEffectMask OK

This commit is contained in:
robojumper
2025-03-16 23:30:51 +01:00
parent fd19da8ac8
commit c0dfac79f7
7 changed files with 126 additions and 13 deletions
+2
View File
@@ -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
+4 -4
View File
@@ -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
View File
@@ -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"),
+5 -5
View File
@@ -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
+25 -1
View File
@@ -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
+1 -1
View File
@@ -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;
+88 -1
View File
@@ -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