diff --git a/include/PICA/gpu.hpp b/include/PICA/gpu.hpp index 1e37729bc..c4c8db5c1 100644 --- a/include/PICA/gpu.hpp +++ b/include/PICA/gpu.hpp @@ -92,8 +92,8 @@ class GPU { // Set to false by the renderer when the lighting_lut is uploaded ot the GPU bool lightingLUTDirty = false; - std::array fogLUT; bool fogLUTDirty = false; + std::array fogLUT; GPU(Memory& mem, EmulatorConfig& config); void display() { renderer->display(); } diff --git a/include/PICA/pica_frag_config.hpp b/include/PICA/pica_frag_config.hpp index 32fa7aa68..337fd2116 100644 --- a/include/PICA/pica_frag_config.hpp +++ b/include/PICA/pica_frag_config.hpp @@ -235,10 +235,13 @@ namespace PICA { #undef setupTevStage fogConfig.mode = (FogMode)Helpers::getBits<0, 3>(regs[InternalRegs::TexEnvUpdateBuffer]); - fogConfig.flipDepth = Helpers::getBit<16>(regs[InternalRegs::TexEnvUpdateBuffer]); - fogConfig.fogColorR = Helpers::getBits<0, 8>(regs[InternalRegs::FogColor]); - fogConfig.fogColorG = Helpers::getBits<8, 8>(regs[InternalRegs::FogColor]); - fogConfig.fogColorB = Helpers::getBits<16, 8>(regs[InternalRegs::FogColor]); + + if (fogConfig.mode == FogMode::Fog) { + fogConfig.flipDepth = Helpers::getBit<16>(regs[InternalRegs::TexEnvUpdateBuffer]); + fogConfig.fogColorR = Helpers::getBits<0, 8>(regs[InternalRegs::FogColor]); + fogConfig.fogColorG = Helpers::getBits<8, 8>(regs[InternalRegs::FogColor]); + fogConfig.fogColorB = Helpers::getBits<16, 8>(regs[InternalRegs::FogColor]); + } } }; diff --git a/src/core/PICA/regs.cpp b/src/core/PICA/regs.cpp index 45e624ec6..995192727 100644 --- a/src/core/PICA/regs.cpp +++ b/src/core/PICA/regs.cpp @@ -143,10 +143,10 @@ void GPU::writeInternalReg(u32 index, u32 value, u32 mask) { case FogLUTData5: case FogLUTData6: case FogLUTData7: { - const uint32_t index = regs[FogLUTIndex] & 127; + const uint32_t index = regs[FogLUTIndex] & 0x7F; fogLUT[index] = value; fogLUTDirty = true; - regs[FogLUTIndex] = (index + 1) & 127; + regs[FogLUTIndex] = (index + 1) & 0x7F; break; } diff --git a/src/core/renderer_gl/renderer_gl.cpp b/src/core/renderer_gl/renderer_gl.cpp index b6c903747..5e1462b9e 100644 --- a/src/core/renderer_gl/renderer_gl.cpp +++ b/src/core/renderer_gl/renderer_gl.cpp @@ -1026,7 +1026,7 @@ void RendererGL::initUbershader(OpenGL::Program& program) { ubershaderData.depthmapEnableLoc = OpenGL::uniformLocation(program, "u_depthmapEnable"); ubershaderData.picaRegLoc = OpenGL::uniformLocation(program, "u_picaRegs"); - // Init sampler objects. Texture 0 goes in texture unit 0, texture 1 in TU 1, texture 2 in TU 2, light maps go in TU 3, and the fog map goes in TU 4 + // Init sampler objects. Texture 0 goes in texture unit 0, texture 1 in TU 1, texture 2 in TU 2 and the LUTs go in TU 3 glUniform1i(OpenGL::uniformLocation(program, "u_tex0"), 0); glUniform1i(OpenGL::uniformLocation(program, "u_tex1"), 1); glUniform1i(OpenGL::uniformLocation(program, "u_tex2"), 2);