From 9de5794afed8c67e93bc9aecad6f3cb518b3d0b8 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sun, 29 Sep 2024 17:11:56 +1000 Subject: [PATCH] Data: Add replacement scanlines shader --- .../shaders/dolphinfx/scanlines.glsl | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 data/resources/shaders/dolphinfx/scanlines.glsl diff --git a/data/resources/shaders/dolphinfx/scanlines.glsl b/data/resources/shaders/dolphinfx/scanlines.glsl new file mode 100644 index 000000000..a5b41a65e --- /dev/null +++ b/data/resources/shaders/dolphinfx/scanlines.glsl @@ -0,0 +1,65 @@ +/* +[configuration] + +[OptionRangeFloat] +GUIName = Active Line Brightness +OptionName = BRIGHTEN +MinValue = 0.1 +MaxValue = 2.0 +StepAmount = 0.1 +DefaultValue = 1.1 + +[OptionRangeFloat] +GUIName = Inactive Line Darkness +OptionName = DARKEN +MinValue = 0.1 +MaxValue = 1.0 +StepAmount = 0.01 +DefaultValue = 0.5 + +[OptionRangeFloat] +GUIName = Scanline Thickness +OptionName = THICKNESS +MinValue = 0.1 +MaxValue = 1.0 +StepAmount = 0.01 +DefaultValue = 0.5 + +[OptionRangeFloat] +GUIName = Scanline Spacing +OptionName = SPACING +MinValue = 0.1 +MaxValue = 1.0 +StepAmount = 0.01 +DefaultValue = 0.25 + +[/configuration] +*/ + +float3 RGBToYUV(float3 rgb) +{ + return float3(dot(rgb.rgb, float3(0.299, 0.587, 0.114)), + dot(rgb.rgb, float3(-0.14713, -0.28886, 0.436)), + dot(rgb.rgb, float3(0.615, -0.51499, -0.10001))); +} + +float3 YUVToRGB(float3 yuv) +{ + return float3(dot(yuv, float3(1.0f, 0.0, 1.13983)), + dot(yuv, float3(1.0f, -0.39465, -0.58060)), + dot(yuv, float3(1.0f, 2.03211, 0.0))); +} + +void main() +{ + float2 pos = GetFragCoord(); + float4 color = Sample(); + float3 yuv = RGBToYUV(color.rgb); + + float thickness = GetOption(THICKNESS); + float spacing = GetOption(SPACING); + yuv.r *= (frac(pos.y * spacing) > thickness) ? (1.0 - GetOption(DARKEN)) : GetOption(BRIGHTEN); + + color.rgb = YUVToRGB(yuv); + SetOutput(color); +}