From a7e3003b3bc7f96d8f9cbbe955cb227cc2f90bc7 Mon Sep 17 00:00:00 2001 From: jorolf Date: Wed, 7 Nov 2018 00:47:35 +0100 Subject: [PATCH 1/3] add flashlight shader --- osu.Game.Resources/Shaders/sh_Flashlight.fs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 osu.Game.Resources/Shaders/sh_Flashlight.fs diff --git a/osu.Game.Resources/Shaders/sh_Flashlight.fs b/osu.Game.Resources/Shaders/sh_Flashlight.fs new file mode 100644 index 0000000..b8c4ec7 --- /dev/null +++ b/osu.Game.Resources/Shaders/sh_Flashlight.fs @@ -0,0 +1,21 @@ +#ifdef GL_ES + precision mediump float; +#endif + +varying vec2 v_Position; + +uniform vec2 mousePos; +uniform float flashlightSize; + +const float smoothness = 0.1; + +void main(void) +{ + vec2 diff = mousePos - v_Position; + + float dist = sqrt(diff.x * diff.x + diff.y * diff.y); + + float smoothnessRange = flashlightSize * smoothness; + + gl_FragColor = vec4(0.0, 0.0, 0.0, smoothstep(flashlightSize, flashlightSize + smoothnessRange, dist)); +} \ No newline at end of file From 74407d8c061956edfe28d4ee6de535acdaf394b4 Mon Sep 17 00:00:00 2001 From: jorolf Date: Fri, 9 Nov 2018 18:44:25 +0100 Subject: [PATCH 2/3] flashlight color can be changed --- osu.Game.Resources/Shaders/sh_Flashlight.fs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/osu.Game.Resources/Shaders/sh_Flashlight.fs b/osu.Game.Resources/Shaders/sh_Flashlight.fs index b8c4ec7..e169cfb 100644 --- a/osu.Game.Resources/Shaders/sh_Flashlight.fs +++ b/osu.Game.Resources/Shaders/sh_Flashlight.fs @@ -3,6 +3,7 @@ #endif varying vec2 v_Position; +varying vec4 v_Colour; uniform vec2 mousePos; uniform float flashlightSize; @@ -17,5 +18,5 @@ void main(void) float smoothnessRange = flashlightSize * smoothness; - gl_FragColor = vec4(0.0, 0.0, 0.0, smoothstep(flashlightSize, flashlightSize + smoothnessRange, dist)); + gl_FragColor = v_Colour * vec4(1.0, 1.0, 1.0, smoothstep(flashlightSize, flashlightSize + smoothnessRange, dist)); } \ No newline at end of file From a1fb917e1589fbdfac1aa7a3acc9ebb5a5933c89 Mon Sep 17 00:00:00 2001 From: jorolf Date: Sun, 11 Nov 2018 18:39:04 +0100 Subject: [PATCH 3/3] add sh_PositionAndColour and update sh_Flashlight --- osu.Game.Resources/Shaders/sh_Flashlight.fs | 26 ++++++++++++++----- .../Shaders/sh_PositionAndColour.vs | 14 ++++++++++ 2 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 osu.Game.Resources/Shaders/sh_PositionAndColour.vs diff --git a/osu.Game.Resources/Shaders/sh_Flashlight.fs b/osu.Game.Resources/Shaders/sh_Flashlight.fs index e169cfb..bd364fa 100644 --- a/osu.Game.Resources/Shaders/sh_Flashlight.fs +++ b/osu.Game.Resources/Shaders/sh_Flashlight.fs @@ -5,18 +5,30 @@ varying vec2 v_Position; varying vec4 v_Colour; -uniform vec2 mousePos; -uniform float flashlightSize; +uniform bool rectangular; +uniform vec2 flashlightPos; +uniform float circularFlashlightSize; +uniform vec2 rectangularFlashlightSize; -const float smoothness = 0.1; +const float smoothness = 1.1; void main(void) { - vec2 diff = mousePos - v_Position; + if(rectangular) + { + vec2 diff = abs(v_Position - flashlightPos); - float dist = sqrt(diff.x * diff.x + diff.y * diff.y); + float alpha = 1.0 - smoothstep(rectangularFlashlightSize.x, rectangularFlashlightSize.x * smoothness, diff.x); + alpha *= 1.0 - smoothstep(rectangularFlashlightSize.y, rectangularFlashlightSize.y * smoothness, diff.y); - float smoothnessRange = flashlightSize * smoothness; + gl_FragColor = v_Colour * vec4(1.0, 1.0, 1.0, 1.0 - alpha); + } + else + { + vec2 diff = flashlightPos - v_Position; - gl_FragColor = v_Colour * vec4(1.0, 1.0, 1.0, smoothstep(flashlightSize, flashlightSize + smoothnessRange, dist)); + 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_PositionAndColour.vs b/osu.Game.Resources/Shaders/sh_PositionAndColour.vs new file mode 100644 index 0000000..c267530 --- /dev/null +++ b/osu.Game.Resources/Shaders/sh_PositionAndColour.vs @@ -0,0 +1,14 @@ +attribute vec2 m_Position; +attribute vec4 m_Colour; + +varying vec2 v_Position; +varying vec4 v_Colour; + +uniform mat4 g_ProjMatrix; + +void main(void) +{ + gl_Position = g_ProjMatrix * vec4(m_Position.xy, 1.0, 1.0); + v_Position = m_Position; + v_Colour = m_Colour; +} \ No newline at end of file