From 0062f82fc0f87ff4f36ab9a0d3a6c686c5f7bf02 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sun, 23 Nov 2025 11:01:42 +0100 Subject: [PATCH] Fix fog disable in OpenGL3 renderer --- irr/src/OpenGL/FixedPipelineRenderer.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/irr/src/OpenGL/FixedPipelineRenderer.cpp b/irr/src/OpenGL/FixedPipelineRenderer.cpp index 3307fd8da..640bb0246 100644 --- a/irr/src/OpenGL/FixedPipelineRenderer.cpp +++ b/irr/src/OpenGL/FixedPipelineRenderer.cpp @@ -56,16 +56,18 @@ void COpenGL3MaterialBaseCB::OnSetConstants(IMaterialRendererServices *services, services->setPixelShaderConstant(WVPMatrixID, Matrix.pointer(), 16); s32 TempEnable = FogEnable ? 1 : 0; - services->setPixelShaderConstant(FogEnableID, &TempEnable, 1); - if (FogEnable) { - SColor TempColor(0); + SColor TempColor; E_FOG_TYPE TempType = EFT_FOG_LINEAR; f32 FogStart, FogEnd, FogDensity; - bool unused = false; + bool unused; driver->getFog(TempColor, TempType, FogStart, FogEnd, FogDensity, unused, unused); + // if outside a reasonable range (for mediump float), disable directly + if (FogStart > 16384.f || FogEnd > 16384.f) + TempEnable = 0; + s32 FogType = (s32)TempType; SColorf FogColor(TempColor); @@ -75,6 +77,7 @@ void COpenGL3MaterialBaseCB::OnSetConstants(IMaterialRendererServices *services, services->setPixelShaderConstant(FogEndID, &FogEnd, 1); services->setPixelShaderConstant(FogDensityID, &FogDensity, 1); } + services->setPixelShaderConstant(FogEnableID, &TempEnable, 1); services->setPixelShaderConstant(ThicknessID, &Thickness, 1); }