From 2a93b0e911c661168528a6996f826d93712e8cf8 Mon Sep 17 00:00:00 2001 From: XProger Date: Mon, 14 May 2018 04:56:31 +0300 Subject: [PATCH] hardware and software PCF should be the same --- src/shaders/shader.glsl | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/shaders/shader.glsl b/src/shaders/shader.glsl index c7c4904..7665f1f 100644 --- a/src/shaders/shader.glsl +++ b/src/shaders/shader.glsl @@ -306,10 +306,16 @@ uniform vec4 uFogParams; p.xy = p.xy * vec2(0.25, 0.5) + tileOffset; #endif - float rShadow =(SHADOW(SHADOW_TEXEL * vec3(-0.5, -0.5, 0.0) + p) + - SHADOW(SHADOW_TEXEL * vec3( 0.5, -0.5, 0.0) + p) + - SHADOW(SHADOW_TEXEL * vec3(-0.5, 0.5, 0.0) + p) + - SHADOW(SHADOW_TEXEL * vec3( 0.5, 0.5, 0.0) + p)) * 0.25; + #ifdef SHADOW_SAMPLER + float rShadow = SHADOW(p); + #else + vec4 samples = vec4(SHADOW(SHADOW_TEXEL * vec3(0.0, 0.0, 0.0) + p), + SHADOW(SHADOW_TEXEL * vec3(1.0, 0.0, 0.0) + p), + SHADOW(SHADOW_TEXEL * vec3(0.0, 1.0, 0.0) + p), + SHADOW(SHADOW_TEXEL * vec3(1.0, 1.0, 0.0) + p)); + vec2 f = fract(p.xy / SHADOW_TEXEL.xy); + float rShadow = mix(mix(samples.x, samples.y, f.x), mix(samples.z, samples.w, f.x), f.y); + #endif float fade = clamp(dot(lightVec, lightVec), 0.0, 1.0); return rShadow + (1.0 - rShadow) * fade;