diff options
| author | elijah-thomas774 <elijahthomas774@gmail.com> | 2025-03-23 21:01:17 -0400 |
|---|---|---|
| committer | elijah-thomas774 <elijahthomas774@gmail.com> | 2025-03-23 21:01:17 -0400 |
| commit | 31728178d9d83de43cb1dfd9a1ff1f8cf568edd6 (patch) | |
| tree | 8a8c4afe12bffc167434a88388fb8bf88b462d2c /src | |
| parent | 3ef9b0df8b956bdb3f371ee118ef6dc881ea61e6 (diff) | |
More PostEffect Progress
Diffstat (limited to 'src')
| -rw-r--r-- | src/egg/gfx/eggPostEffectBase.cpp | 5 | ||||
| -rw-r--r-- | src/egg/gfx/eggPostEffectBlur.cpp | 13 | ||||
| -rw-r--r-- | src/egg/gfx/eggPostEffectMaskDOF.cpp | 51 |
3 files changed, 61 insertions, 8 deletions
diff --git a/src/egg/gfx/eggPostEffectBase.cpp b/src/egg/gfx/eggPostEffectBase.cpp index 2b2993d7..e7dbd1cb 100644 --- a/src/egg/gfx/eggPostEffectBase.cpp +++ b/src/egg/gfx/eggPostEffectBase.cpp @@ -122,8 +122,11 @@ void PostEffectBase::lerpColor(GXColor &out, const GXColor &c1, const GXColor &c } void PostEffectBase::getBaseTexMtx(nw4r::math::MTX34 *mtx) const { + // Feels wrong -> maybe an inline with rotation and pi + f32 rot = Math<f32>::pi(); f32 sin, cos; - nw4r::math::SinCosRad(&sin, &cos, mRotation * M_PI); + nw4r::math::SinCosRad(&sin, &cos, rot * mRotation); + f32 zero = 0.0f; f32 scale = 1.0f; f32 f8 = zero - 0.5f; diff --git a/src/egg/gfx/eggPostEffectBlur.cpp b/src/egg/gfx/eggPostEffectBlur.cpp index d94e0692..79d12e8a 100644 --- a/src/egg/gfx/eggPostEffectBlur.cpp +++ b/src/egg/gfx/eggPostEffectBlur.cpp @@ -50,11 +50,12 @@ void PostEffectBlur::drawInternal(u8 kernelIdx, u8 p2, f32 f1, f32 f2) { nw4r::math::MTX34 mtx; const Stage &k = field_0x38[kernelIdx]; - f32 f4 = k.field_0x0C * f1; - f32 f3 = k.field_0x0C * f2; - f32 rad1 = k.field_0x08 - mRotation * Math<f32>::pi(); + f32 tx = k.field_0x0C * f1; + f32 ty = k.field_0x0C * f2; + f32 rad1 = k.field_0x08 - Math<f32>::pi() * mRotation; + f32 abc = 2.f * Math<f32>::pi() / k.field_0x00; + int unk_00_scale = (p2 & 0x1F) * 8; - f32 abc = (2.f * Math<f32>::pi() / k.field_0x00); u8 numTexGens = k.field_0x00 - unk_00_scale; if (numTexGens > 8) { @@ -70,8 +71,8 @@ void PostEffectBlur::drawInternal(u8 kernelIdx, u8 p2, f32 f1, f32 f2) { nw4r::math::SinCosRad(&sin, &cos, rad1 + abc * unk_00_scale); nw4r::math::MTX34 m( // clang-format off - 1.0f, 0.0f, cos * f4, 0.0f, - 0.0f, 1.0f, sin * f3, 0.0f, + 1.0f, 0.0f, cos * tx, 0.0f, + 0.0f, 1.0f, sin * ty, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f // clang-format on ); diff --git a/src/egg/gfx/eggPostEffectMaskDOF.cpp b/src/egg/gfx/eggPostEffectMaskDOF.cpp index 7e9bc43a..fce42b94 100644 --- a/src/egg/gfx/eggPostEffectMaskDOF.cpp +++ b/src/egg/gfx/eggPostEffectMaskDOF.cpp @@ -39,7 +39,56 @@ PostEffectMaskDOF::PostEffectMaskDOF() field_0x00 = 0; } -void PostEffectMaskDOF::setUpGradation() {} +void PostEffectMaskDOF::setUpGradation() { + for (int i = 0; i < 3; i++) { + const u16 width = mpCpuTexArr[i]->getWidth(); + const int mid = width / 2; + for (u16 x = 0; x < mid; x++) { + f32 val = 1.f - (f32)x / (mid - 1); + + switch (i) { + case 1: val *= val; break; + case 2: + val *= val; + val *= val; + break; + } + + GXColor clr1, clr2; + lerpColor(clr1, getCenterColor(), getNearColor(), val); + lerpColor(clr2, getCenterColor(), getFarColor(), val); + + mpCpuTexArr[i]->setColor(x, 0, clr1); + mpCpuTexArr[i]->setColor(x, 1, clr1); + mpCpuTexArr[i]->setColor((width - 1) - x, 0, clr2); + mpCpuTexArr[i]->setColor((width - 1) - x, 1, clr2); + } + mpCpuTexArr[i]->flush(); + } + + const u16 width = mpCpuTex->getWidth() / 2; + for (u16 y = 0; y < mpCpuTex->getHeight(); y++) { + const f32 fy = ((f32)y / mpCpuTex->getHeight()); + for (u16 x = 0; x < width; x++) { + f32 fx = (f32)x / width; + f32 ratio = fx / (1.f - fy); + + if (ratio > 1.f) { + ratio = 1.f; + } else if (ratio < 0.f) { + ratio = 0.f; + } + ratio *= ratio; + ratio *= ratio; + GXColor clr1, clr2; + lerpColor(clr1, getCenterColor(), getNearColor(), ratio); + lerpColor(clr2, getCenterColor(), getFarColor(), ratio); + mpCpuTex->setColor((width - 1) - x, y, clr1); + mpCpuTex->setColor(width + x, y, clr2); + } + } + mpCpuTex->flush(); +} void PostEffectMaskDOF::draw(f32 width, f32 height) { setMaterialInternal(); |
