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" #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); highp float dist = length(diff);
float flashlightRadius = length(size); highp float flashlightRadius = length(size);
return originalColour * vec4(1.0, 1.0, 1.0, smoothstep(flashlightRadius, flashlightRadius * smoothness, dist)); return originalColour * vec4(1.0, 1.0, 1.0, smoothstep(flashlightRadius, flashlightRadius * smoothness, dist));
} }

@ -1,18 +1,14 @@
#ifdef GL_ES varying highp vec2 v_Position;
precision mediump float; varying lowp vec4 v_Colour;
#endif
varying vec2 v_Position; uniform highp vec2 flashlightPos;
varying vec4 v_Colour; uniform highp vec2 flashlightSize;
uniform vec2 flashlightPos; uniform lowp float flashlightDim;
uniform vec2 flashlightSize;
uniform float flashlightDim;
const float smoothness = 1.1; const float smoothness = 1.1;
vec4 getColourAt(vec2, vec2, vec4); lowp vec4 getColourAt(vec2, vec2, vec4);
void main(void) void main(void)
{ {

@ -1,10 +1,10 @@
#include "sh_Flashlight.h" #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); 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); return originalColour * vec4(1.0, 1.0, 1.0, alpha);
} }
Loading…
Cancel
Save