diff --git a/osu.Game.Resources/Shaders/sh_Flashlight.fs b/osu.Game.Resources/Shaders/sh_Flashlight.fs new file mode 100644 index 0000000..bd364fa --- /dev/null +++ b/osu.Game.Resources/Shaders/sh_Flashlight.fs @@ -0,0 +1,34 @@ +#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_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