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