Merge pull request #66 from nyquillerium/highp-flashlight
Fix loss of precision for flashlight smoothing distance calculationsmaster
commit
f6d3057dcc
@ -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,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…
Reference in New Issue