diff --git a/osu.Game.Resources/Shaders/sh_CircularFlashlight.fs b/osu.Game.Resources/Shaders/sh_CircularFlashlight.fs index bef9492..27a7372 100644 --- a/osu.Game.Resources/Shaders/sh_CircularFlashlight.fs +++ b/osu.Game.Resources/Shaders/sh_CircularFlashlight.fs @@ -1,10 +1,10 @@ #include "sh_Flashlight.h" // highp precision is necessary for vertex positions to prevent catastrophic failure on GL_ES platforms -vec4 getColourAt(highp vec2 diff, highp vec2 size, lowp vec4 originalColour) +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)); } \ No newline at end of file diff --git a/osu.Game.Resources/Shaders/sh_Flashlight.h b/osu.Game.Resources/Shaders/sh_Flashlight.h index c3fd4c5..3a2a258 100644 --- a/osu.Game.Resources/Shaders/sh_Flashlight.h +++ b/osu.Game.Resources/Shaders/sh_Flashlight.h @@ -1,5 +1,9 @@ #ifdef GL_ES precision mediump float; + // Not all GPUs support high precision, so we should fall back to medium precision. + #ifndef GL_FRAGMENT_PRECISION_HIGH + #define highp + #endif #else // Since glsl 1.1 doesn't define precision qualifiers but GL_ES does, // Define them as nothing to avoid compilation issues. @@ -7,17 +11,20 @@ #define highp #endif -varying vec2 v_Position; -varying vec4 v_Colour; -uniform vec2 flashlightPos; -uniform vec2 flashlightSize; -uniform float flashlightDim; + +varying highp vec2 v_Position; +varying lowp vec4 v_Colour; + +uniform highp vec2 flashlightPos; +uniform highp vec2 flashlightSize; + +uniform lowp float flashlightDim; const float smoothness = 1.1; -vec4 getColourAt(vec2, vec2, vec4); +lowp vec4 getColourAt(vec2, vec2, vec4); void main(void) {