diff options
author | Bruno Lourenço <madequa@users.noreply.github.com> | 2019-12-21 16:07:18 +0000 |
---|---|---|
committer | Bruno Lourenço <madequa@users.noreply.github.com> | 2019-12-21 16:55:41 +0000 |
commit | d7f9d71be23daac44c06c4f84993ceae43193b1e (patch) | |
tree | 9bd85bb801af080f3453cb12253305bec9357dca /drivers/gles3/shaders | |
parent | 78f1513928bd5a683f0a0b40d4a4fec42fb1d4f3 (diff) |
Fix contact shadow when light is outside of viewport.
Diffstat (limited to 'drivers/gles3/shaders')
-rw-r--r-- | drivers/gles3/shaders/scene.glsl | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/drivers/gles3/shaders/scene.glsl b/drivers/gles3/shaders/scene.glsl index 549a36817e..f16f798ac5 100644 --- a/drivers/gles3/shaders/scene.glsl +++ b/drivers/gles3/shaders/scene.glsl @@ -897,18 +897,22 @@ float contact_shadow_compute(vec3 pos, vec3 dir, float max_distance) { bias += incr * 2.0; vec3 uv_depth = (source.xyz / source.w) * 0.5 + 0.5; - float depth = texture(depth_buffer, uv_depth.xy).r; - - if (depth < uv_depth.z) { - if (depth > (bias.z / bias.w) * 0.5 + 0.5) { - return min(pow(ratio, 4.0), 1.0); - } else { - return 1.0; + if (uv_depth.x > 0.0 && uv_depth.x < 1.0 && uv_depth.y > 0.0 && uv_depth.y < 1.0) { + float depth = texture(depth_buffer, uv_depth.xy).r; + + if (depth < uv_depth.z) { + if (depth > (bias.z / bias.w) * 0.5 + 0.5) { + return min(pow(ratio, 4.0), 1.0); + } else { + return 1.0; + } } - } - ratio += ratio_incr; - steps -= 1.0; + ratio += ratio_incr; + steps -= 1.0; + } else { + return 1.0; + } } return 1.0; |