From a9718b0620b3bf4a0c5b0da7da681a01232a96af Mon Sep 17 00:00:00 2001 From: z2442 Date: Thu, 5 Dec 2024 17:10:46 -0500 Subject: [PATCH] Adding hardware fog for the PSP. --- Source/HLEGraphics/BaseRenderer.h | 4 +++- Source/SysPSP/HLEGraphics/RendererPSP.cpp | 15 +++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/Source/HLEGraphics/BaseRenderer.h b/Source/HLEGraphics/BaseRenderer.h index 7fbb9974b..00ca2c1f5 100644 --- a/Source/HLEGraphics/BaseRenderer.h +++ b/Source/HLEGraphics/BaseRenderer.h @@ -268,7 +268,7 @@ class BaseRenderer // Fog stuff inline void SetFogMultOffs(f32 Mult, f32 Offs) { mTnL.FogMult=Mult/255.0f; mTnL.FogOffs=Offs/255.0f;} #ifdef DAEDALUS_PSP - inline void SetFogMinMax(f32 fog_near, f32 fog_far) { sceGuFog(fog_near, fog_far, mFogColour.GetColour()); } + inline void SetFogMinMax(f32 fog_near, f32 fog_far) { mfog_near = fog_near; mfog_far = fog_far;} inline void SetFogColour( c32 colour ) { mFogColour = colour; } #elif defined(DAEDALUS_VITA) || defined (DAEDALUS_CTR) || defined (DAEDALUS_GL) inline void SetFogMinMax(f32 fog_near, f32 fog_far) { glFogf(GL_FOG_START, fog_near); glFogf(GL_FOG_END, fog_far); } @@ -444,6 +444,8 @@ class BaseRenderer f32 mPrimDepth; f32 mPrimLODFraction; + f32 mfog_near; + f32 mfog_far; c32 mFogColour; // Blender c32 mPrimitiveColour; // Combiner diff --git a/Source/SysPSP/HLEGraphics/RendererPSP.cpp b/Source/SysPSP/HLEGraphics/RendererPSP.cpp index 758b84225..8b5ab9928 100644 --- a/Source/SysPSP/HLEGraphics/RendererPSP.cpp +++ b/Source/SysPSP/HLEGraphics/RendererPSP.cpp @@ -364,18 +364,17 @@ inline void RendererPSP::RenderFog( DaedalusVtx * p_vertices, u32 num_vertices, sceGuDisable(GU_TEXTURE_2D); //Blend triangle without a texture sceGuDisable(GU_ALPHA_TEST); sceGuBlendFunc(GU_ADD, GU_SRC_ALPHA, GU_ONE_MINUS_SRC_ALPHA, 0, 0); + // Enable PSP hardware fog + sceGuEnable(GU_FOG); - u32 FogColor {mFogColour.GetColour()}; - - //Copy fog color to vertices - for(u32 i {} ; i < num_vertices ; i++) - { - u32 alpha {p_vertices[i].Colour.GetColour() & 0xFF000000}; - p_vertices[i].Colour = (c32)(alpha | FogColor); - } + // Configure fog range and color + u32 fogColor = (mFogColour.GetColour()); // Fog color + sceGuFog(mfog_near, mfog_far, fogColor); sceGuDrawArray( triangle_mode, render_flags, num_vertices, nullptr, p_vertices ); + sceGuDisable(GU_FOG); + sceGuDepthFunc(GU_GEQUAL); //Restore default depth function } }