diff --git a/cont/base/springcontent/shaders/GLSL/ShadowGenFragProg.glsl b/cont/base/springcontent/shaders/GLSL/ShadowGenFragProg.glsl index 5c4c18f11db..e4672920dd9 100644 --- a/cont/base/springcontent/shaders/GLSL/ShadowGenFragProg.glsl +++ b/cont/base/springcontent/shaders/GLSL/ShadowGenFragProg.glsl @@ -3,23 +3,22 @@ uniform sampler2D alphaMaskTex; varying vec4 vertexShadowClipPos; void main() { + if (texture2D(alphaMaskTex, gl_TexCoord[0].st).a <= 0.5) + discard; + #if 0 - #if 0 - float nearDepth = gl_DepthRange.near; - float farDepth = gl_DepthRange.far; - float depthRange = gl_DepthRange.diff; // far - near - float clipDepth = vertexShadowClipPos.z / vertexShadowClipPos.w; + float nearDepth = gl_DepthRange.near; + float farDepth = gl_DepthRange.far; + float depthRange = gl_DepthRange.diff; // far - near + float clipDepth = vertexShadowClipPos.z / vertexShadowClipPos.w; - // useful to keep around - gl_FragDepth = ((depthRange * clipDepth) + nearDepth + farDepth) / 2.0; + // useful to keep around + gl_FragDepth = ((depthRange * clipDepth) + nearDepth + farDepth) * 0.5; - #else + #else - // no-op, but would break early-z - // gl_FragDepth = gl_FragCoord.z; - #endif + // no-op, but breaks early-z + gl_FragDepth = gl_FragCoord.z; #endif - - gl_FragColor = texture2D(alphaMaskTex, gl_TexCoord[0].st); } diff --git a/rts/Rendering/ShadowHandler.cpp b/rts/Rendering/ShadowHandler.cpp index 309ba69a7ea..535a0537c1f 100644 --- a/rts/Rendering/ShadowHandler.cpp +++ b/rts/Rendering/ShadowHandler.cpp @@ -205,10 +205,10 @@ void CShadowHandler::LoadShadowGenShaderProgs() for (int i = 0; i < SHADOWGEN_PROGRAM_LAST; i++) { Shader::IProgramObject* po = sh->CreateProgramObject("[ShadowHandler]", shadowGenProgHandles[i] + "GLSL", false); Shader::IShaderObject* vso = sh->CreateShaderObject("GLSL/ShadowGenVertProg.glsl", shadowGenProgDefines[i] + extraDef, GL_VERTEX_SHADER); - Shader::IShaderObject* fso = sh->CreateShaderObject("GLSL/ShadowGenFragProg.glsl", shadowGenProgDefines[i] + extraDef, GL_FRAGMENT_SHADER); + // Shader::IShaderObject* fso = sh->CreateShaderObject("GLSL/ShadowGenFragProg.glsl", shadowGenProgDefines[i] + extraDef, GL_FRAGMENT_SHADER); po->AttachShaderObject(vso); - po->AttachShaderObject(fso); + // po->AttachShaderObject(fso); po->Link(); po->SetUniformLocation("shadowParams"); // idx 0 po->SetUniformLocation("cameraDirX"); // idx 1, used by SHADOWGEN_PROGRAM_TREE_NEAR