mirror of
https://github.com/WinampDesktop/winamp.git
synced 2025-06-17 22:55:45 -04:00
Qt: Fix builtin post shaders
This commit is contained in:
120
data/resources/shaders/dolphinfx/scanlines.glsl
Normal file
120
data/resources/shaders/dolphinfx/scanlines.glsl
Normal file
@ -0,0 +1,120 @@
|
||||
/*===============================================================================*\
|
||||
|######################## [Dolphin FX Suite 2.20] #######################|
|
||||
|########################## By Asmodean ##########################|
|
||||
|| ||
|
||||
|| This program is free software; you can redistribute it and/or ||
|
||||
|| modify it under the terms of the GNU General Public License ||
|
||||
|| as published by the Free Software Foundation; either version 2 ||
|
||||
|| of the License, or (at your option) any later version. ||
|
||||
|| ||
|
||||
|| This program is distributed in the hope that it will be useful, ||
|
||||
|| but WITHOUT ANY WARRANTY; without even the implied warranty of ||
|
||||
|| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ||
|
||||
|| GNU General Public License for more details. (C)2015 ||
|
||||
|| ||
|
||||
|#################################################################################|
|
||||
\*===============================================================================*/
|
||||
|
||||
// Sourced from https://raw.githubusercontent.com/Asmodean-/dolphin/89d640cd557189bb5f921fc219150c74c39bdc55/Data/Sys/Shaders/DolphinFX.glsl with modifications.
|
||||
|
||||
/*
|
||||
[configuration]
|
||||
|
||||
[OptionRangeInteger]
|
||||
GUIName = ScanlineType
|
||||
OptionName = A_SCANLINE_TYPE
|
||||
MinValue = 0
|
||||
MaxValue = 2
|
||||
StepAmount = 1
|
||||
DefaultValue = 0
|
||||
|
||||
[OptionRangeFloat]
|
||||
GUIName = ScanlineIntensity
|
||||
OptionName = B_SCANLINE_INTENSITY
|
||||
MinValue = 0.15
|
||||
MaxValue = 0.30
|
||||
StepAmount = 0.01
|
||||
DefaultValue = 0.18
|
||||
|
||||
[OptionRangeFloat]
|
||||
GUIName = ScanlineThickness
|
||||
OptionName = B_SCANLINE_THICKNESS
|
||||
MinValue = 0.20
|
||||
MaxValue = 0.80
|
||||
StepAmount = 0.01
|
||||
DefaultValue = 0.50
|
||||
|
||||
[OptionRangeFloat]
|
||||
GUIName = ScanlineBrightness
|
||||
OptionName = B_SCANLINE_BRIGHTNESS
|
||||
MinValue = 0.50
|
||||
MaxValue = 2.00
|
||||
StepAmount = 0.01
|
||||
DefaultValue = 1.10
|
||||
|
||||
[OptionRangeFloat]
|
||||
GUIName = ScanlineSpacing
|
||||
OptionName = B_SCANLINE_SPACING
|
||||
MinValue = 0.10
|
||||
MaxValue = 0.99
|
||||
StepAmount = 0.01
|
||||
DefaultValue = 0.25
|
||||
|
||||
[/configuration]
|
||||
*/
|
||||
|
||||
//Average relative luminance
|
||||
CONSTANT float3 lumCoeff = float3(0.2126729, 0.7151522, 0.0721750);
|
||||
float AvgLuminance(float3 color)
|
||||
{
|
||||
return sqrt(
|
||||
(color.x * color.x * lumCoeff.x) +
|
||||
(color.y * color.y * lumCoeff.y) +
|
||||
(color.z * color.z * lumCoeff.z));
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
float4 color = Sample();
|
||||
float4 intensity = float4(0.0, 0.0, 0.0, 0.0);
|
||||
|
||||
if (GetOption(A_SCANLINE_TYPE) == 0) { //X coord scanlines
|
||||
if (fract(gl_FragCoord.y * GetOption(B_SCANLINE_SPACING)) > GetOption(B_SCANLINE_THICKNESS))
|
||||
{
|
||||
intensity = float4(0.0, 0.0, 0.0, 0.0);
|
||||
}
|
||||
else
|
||||
{
|
||||
intensity = smoothstep(0.2, GetOption(B_SCANLINE_BRIGHTNESS), color) +
|
||||
normalize(float4(color.xyz, AvgLuminance(color.xyz)));
|
||||
} }
|
||||
|
||||
else if (GetOption(A_SCANLINE_TYPE) == 1) { //Y coord scanlines
|
||||
if (fract(gl_FragCoord.x * GetOption(B_SCANLINE_SPACING)) > GetOption(B_SCANLINE_THICKNESS))
|
||||
{
|
||||
intensity = float4(0.0, 0.0, 0.0, 0.0);
|
||||
}
|
||||
else
|
||||
{
|
||||
intensity = smoothstep(0.2, GetOption(B_SCANLINE_BRIGHTNESS), color) +
|
||||
normalize(float4(color.xyz, AvgLuminance(color.xyz)));
|
||||
} }
|
||||
|
||||
else if (GetOption(A_SCANLINE_TYPE) == 2) { //XY coord scanlines
|
||||
if (fract(gl_FragCoord.x * GetOption(B_SCANLINE_SPACING)) > GetOption(B_SCANLINE_THICKNESS) &&
|
||||
fract(gl_FragCoord.y * GetOption(B_SCANLINE_SPACING)) > GetOption(B_SCANLINE_THICKNESS))
|
||||
{
|
||||
intensity = float4(0.0, 0.0, 0.0, 0.0);
|
||||
}
|
||||
else
|
||||
{
|
||||
intensity = smoothstep(0.2, GetOption(B_SCANLINE_BRIGHTNESS), color) +
|
||||
normalize(float4(color.xyz, AvgLuminance(color.xyz)));
|
||||
} }
|
||||
|
||||
float level = (4.0-GetCoordinates().x) * GetOption(B_SCANLINE_INTENSITY);
|
||||
|
||||
color = intensity * (0.5 - level) + color * 1.1;
|
||||
|
||||
SetOutput(saturate(color));
|
||||
}
|
Reference in New Issue
Block a user