Merge pull request #66 from nyquillerium/highp-flashlight

Fix loss of precision for flashlight smoothing distance calculations
master
Dan Balasescu 6 years ago committed by GitHub
commit f6d3057dcc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,9 +1,10 @@
#include "sh_Flashlight.h"
vec4 getColourAt(vec2 diff, vec2 size, vec4 originalColour)
// highp precision is necessary for vertex positions to prevent catastrophic failure on GL_ES platforms
lowp vec4 getColourAt(highp vec2 diff, highp vec2 size, lowp vec4 originalColour)
{
float dist = length(diff);
float flashlightRadius = length(size);
highp float dist = length(diff);
highp float flashlightRadius = length(size);
return originalColour * vec4(1.0, 1.0, 1.0, smoothstep(flashlightRadius, flashlightRadius * smoothness, dist));
}

@ -1,20 +1,16 @@
#ifdef GL_ES
precision mediump float;
#endif
varying highp vec2 v_Position;
varying lowp vec4 v_Colour;
varying vec2 v_Position;
varying vec4 v_Colour;
uniform highp vec2 flashlightPos;
uniform highp vec2 flashlightSize;
uniform vec2 flashlightPos;
uniform vec2 flashlightSize;
uniform float flashlightDim;
uniform lowp float flashlightDim;
const float smoothness = 1.1;
vec4 getColourAt(vec2, vec2, vec4);
lowp vec4 getColourAt(vec2, vec2, vec4);
void main(void)
{
gl_FragColor = mix(getColourAt(flashlightPos - v_Position, flashlightSize, v_Colour), vec4(0.0, 0.0, 0.0, 1.0), flashlightDim);
}
}

@ -1,10 +1,10 @@
#include "sh_Flashlight.h"
vec4 getColourAt(vec2 diff, vec2 size, vec4 originalColour)
lowp vec4 getColourAt(highp vec2 diff, highp vec2 size, lowp vec4 originalColour)
{
diff = abs(diff);
float alpha = length(smoothstep(size, size * smoothness, diff));
lowp float alpha = length(smoothstep(size, size * smoothness, diff));
return originalColour * vec4(1.0, 1.0, 1.0, alpha);
}
}

Loading…
Cancel
Save