summaryrefslogtreecommitdiff
path: root/drivers/gles3/shaders
diff options
context:
space:
mode:
authorJuan Linietsky <reduzio@gmail.com>2017-07-05 19:36:56 -0300
committerJuan Linietsky <reduzio@gmail.com>2017-07-05 19:39:45 -0300
commit12a8fedfe604c7b944030ba772093ac0e2a85c78 (patch)
tree4d4611324630b6e8872b9aad4ab70da976e71f81 /drivers/gles3/shaders
parent58320b7f6cfe17ad3793a9ce6981b8ce0e50ad6a (diff)
Some changes to dual paraboloid envmap generation, fixes somme bleeding
Diffstat (limited to 'drivers/gles3/shaders')
-rw-r--r--drivers/gles3/shaders/cubemap_filter.glsl5
-rw-r--r--drivers/gles3/shaders/scene.glsl8
2 files changed, 8 insertions, 5 deletions
diff --git a/drivers/gles3/shaders/cubemap_filter.glsl b/drivers/gles3/shaders/cubemap_filter.glsl
index 88a97a04aa..10a803cafe 100644
--- a/drivers/gles3/shaders/cubemap_filter.glsl
+++ b/drivers/gles3/shaders/cubemap_filter.glsl
@@ -219,9 +219,8 @@ void main() {
N.z = 0.5 - 0.5*((N.x * N.x) + (N.y * N.y));
N = normalize(N);
- if (!z_flip) {
- //N.y=-N.y; //y is flipped to improve blending between both sides
- } else {
+ if (z_flip) {
+ N.y=-N.y; //y is flipped to improve blending between both sides
N.z=-N.z;
}
diff --git a/drivers/gles3/shaders/scene.glsl b/drivers/gles3/shaders/scene.glsl
index f94ca6fcba..247d1468c3 100644
--- a/drivers/gles3/shaders/scene.glsl
+++ b/drivers/gles3/shaders/scene.glsl
@@ -429,7 +429,9 @@ vec3 textureDualParaboloid(sampler2DArray p_tex, vec3 p_vec,float p_roughness) {
// we need to lie the derivatives (normg) and assume that DP side is always the same
// to get proper texure filtering
vec2 normg=norm.xy;
- norm.y+=max(0.0,sign(norm.z))*0.5;
+ if (norm.z>0) {
+ norm.y=0.5-norm.y+0.5;
+ }
// thanks to OpenGL spec using floor(layer + 0.5) for texture arrays,
// it's easy to have precision errors using fract() to interpolate layers
@@ -451,7 +453,9 @@ vec3 textureDualParaboloid(sampler2D p_tex, vec3 p_vec,float p_roughness) {
vec3 norm = normalize(p_vec);
norm.xy/=1.0+abs(norm.z);
norm.xy=norm.xy * vec2(0.5,0.25) + vec2(0.5,0.25);
- norm.y+=max(0.0,sign(norm.z))*0.5;
+ if (norm.z>0) {
+ norm.y=0.5-norm.y+0.5;
+ }
return textureLod(p_tex, norm.xy, p_roughness * RADIANCE_MAX_LOD).xyz;
}