From 903888e615a54035f6febf00b8510c77897749d9 Mon Sep 17 00:00:00 2001 From: jorolf Date: Thu, 15 Nov 2018 00:29:01 +0100 Subject: [PATCH 1/2] split shader and make use of more inbuilt functions --- .../Shaders/sh_CircularFlashlight.fs | 9 +++++ osu.Game.Resources/Shaders/sh_Flashlight.fs | 34 ------------------- osu.Game.Resources/Shaders/sh_Flashlight.h | 18 ++++++++++ .../Shaders/sh_RectangularFlashlight.fs | 10 ++++++ 4 files changed, 37 insertions(+), 34 deletions(-) create mode 100644 osu.Game.Resources/Shaders/sh_CircularFlashlight.fs delete mode 100644 osu.Game.Resources/Shaders/sh_Flashlight.fs create mode 100644 osu.Game.Resources/Shaders/sh_Flashlight.h create mode 100644 osu.Game.Resources/Shaders/sh_RectangularFlashlight.fs diff --git a/osu.Game.Resources/Shaders/sh_CircularFlashlight.fs b/osu.Game.Resources/Shaders/sh_CircularFlashlight.fs new file mode 100644 index 0000000..ebee31c --- /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 vec4(originalColour.xyz, 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..e1efd93 --- /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 vec4(originalColour.xyz, alpha); +} \ No newline at end of file From 13f505cd1f6f259917b383080080b55699aec9d8 Mon Sep 17 00:00:00 2001 From: jorolf Date: Thu, 15 Nov 2018 17:37:23 +0100 Subject: [PATCH 2/2] revert colour multiplication --- osu.Game.Resources/Shaders/sh_CircularFlashlight.fs | 2 +- osu.Game.Resources/Shaders/sh_RectangularFlashlight.fs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game.Resources/Shaders/sh_CircularFlashlight.fs b/osu.Game.Resources/Shaders/sh_CircularFlashlight.fs index ebee31c..84aafd5 100644 --- a/osu.Game.Resources/Shaders/sh_CircularFlashlight.fs +++ b/osu.Game.Resources/Shaders/sh_CircularFlashlight.fs @@ -5,5 +5,5 @@ vec4 getColourAt(vec2 diff, vec2 size, vec4 originalColour) float dist = length(diff); float flashlightRadius = length(size); - return vec4(originalColour.xyz, smoothstep(flashlightRadius, flashlightRadius * smoothness, dist)); + 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_RectangularFlashlight.fs b/osu.Game.Resources/Shaders/sh_RectangularFlashlight.fs index e1efd93..8426ca7 100644 --- a/osu.Game.Resources/Shaders/sh_RectangularFlashlight.fs +++ b/osu.Game.Resources/Shaders/sh_RectangularFlashlight.fs @@ -6,5 +6,5 @@ vec4 getColourAt(vec2 diff, vec2 size, vec4 originalColour) float alpha = length(smoothstep(size, size * smoothness, diff)); - return vec4(originalColour.xyz, alpha); + return originalColour * vec4(1.0, 1.0, 1.0, alpha); } \ No newline at end of file