diff --git a/osu.Game.Resources/Shaders/sh_CircularFlashlight.fs b/osu.Game.Resources/Shaders/sh_CircularFlashlight.fs new file mode 100644 index 0000000..84aafd5 --- /dev/null +++ b/osu.Game.Resources/Shaders/sh_CircularFlashlight.fs @@ -0,0 +1,9 @@ +#include "sh_Flashlight.h" + +vec4 getColourAt(vec2 diff, vec2 size, vec4 originalColour) +{ + float dist = length(diff); + 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.fs b/osu.Game.Resources/Shaders/sh_Flashlight.fs deleted file mode 100644 index bd364fa..0000000 --- a/osu.Game.Resources/Shaders/sh_Flashlight.fs +++ /dev/null @@ -1,34 +0,0 @@ -#ifdef GL_ES - precision mediump float; -#endif - -varying vec2 v_Position; -varying vec4 v_Colour; - -uniform bool rectangular; -uniform vec2 flashlightPos; -uniform float circularFlashlightSize; -uniform vec2 rectangularFlashlightSize; - -const float smoothness = 1.1; - -void main(void) -{ - if(rectangular) - { - vec2 diff = abs(v_Position - flashlightPos); - - float alpha = 1.0 - smoothstep(rectangularFlashlightSize.x, rectangularFlashlightSize.x * smoothness, diff.x); - alpha *= 1.0 - smoothstep(rectangularFlashlightSize.y, rectangularFlashlightSize.y * smoothness, diff.y); - - gl_FragColor = v_Colour * vec4(1.0, 1.0, 1.0, 1.0 - alpha); - } - else - { - vec2 diff = flashlightPos - v_Position; - - float dist = sqrt(diff.x * diff.x + diff.y * diff.y); - - gl_FragColor = v_Colour * vec4(1.0, 1.0, 1.0, smoothstep(circularFlashlightSize, circularFlashlightSize * 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 new file mode 100644 index 0000000..7e0f344 --- /dev/null +++ b/osu.Game.Resources/Shaders/sh_Flashlight.h @@ -0,0 +1,18 @@ +#ifdef GL_ES + precision mediump float; +#endif + +varying vec2 v_Position; +varying vec4 v_Colour; + +uniform vec2 flashlightPos; +uniform vec2 flashlightSize; + +const float smoothness = 1.1; + +vec4 getColourAt(vec2, vec2, vec4); + +void main(void) +{ + gl_FragColor = getColourAt(flashlightPos - v_Position, flashlightSize, v_Colour); +} \ No newline at end of file diff --git a/osu.Game.Resources/Shaders/sh_RectangularFlashlight.fs b/osu.Game.Resources/Shaders/sh_RectangularFlashlight.fs new file mode 100644 index 0000000..8426ca7 --- /dev/null +++ b/osu.Game.Resources/Shaders/sh_RectangularFlashlight.fs @@ -0,0 +1,10 @@ +#include "sh_Flashlight.h" + +vec4 getColourAt(vec2 diff, vec2 size, vec4 originalColour) +{ + diff = abs(diff); + + float alpha = length(smoothstep(size, size * smoothness, diff)); + + return originalColour * vec4(1.0, 1.0, 1.0, alpha); +} \ No newline at end of file