diff --git a/src/gl/renderer/gl_renderstate.cpp b/src/gl/renderer/gl_renderstate.cpp index 7f5fd3b0d..673c201b8 100644 --- a/src/gl/renderer/gl_renderstate.cpp +++ b/src/gl/renderer/gl_renderstate.cpp @@ -125,7 +125,7 @@ bool FRenderState::ApplyShader() if (gl.hasGLSL()) { FShader *activeShader; - if (mSpecialEffect > 0) + if (mSpecialEffect > EFF_NONE) { activeShader = GLRenderer->mShaderManager->BindEffect(mSpecialEffect); } @@ -151,7 +151,7 @@ bool FRenderState::ApplyShader() glColor4fv(mColor.vec); - activeShader->muDesaturation.Set(mDesaturation); + activeShader->muDesaturation.Set(mDesaturation / 255.f); activeShader->muFogEnabled.Set(fogset); activeShader->muTextureMode.Set(mTextureMode); activeShader->muCameraPos.Set(mCameraPos.vec); diff --git a/wadsrc/static/shaders/glsl/main.fp b/wadsrc/static/shaders/glsl/main.fp index db5b8cb19..35b355206 100644 --- a/wadsrc/static/shaders/glsl/main.fp +++ b/wadsrc/static/shaders/glsl/main.fp @@ -31,8 +31,13 @@ vec4 desaturate(vec4 texel) { if (uDesaturationFactor > 0.0) { - float gray = (texel.r * 0.3 + texel.g * 0.56 + texel.b * 0.14); - return mix (vec4(gray,gray,gray,texel.a), texel, uDesaturationFactor); + float gray = (texel.r * 0.3 + texel.g * 0.56 + texel.b * 0.14) * uDesaturationFactor; + + vec4 desaturated = vec4(gray,gray,gray,texel.a); + // I have absolutely no idea why this works and 'mix' doesn't... + texel *= (1.0-uDesaturationFactor); + return texel + desaturated; + //return mix (desaturated, texel, uDesaturationFactor); } else {