move mame_hlsl port into crt directory; I guess it's as good as it's gonna get right now

This commit is contained in:
hunterk 2019-04-19 15:52:09 -05:00
parent 77d4efd688
commit 456d7f3c5d
19 changed files with 153 additions and 151 deletions

View file

@ -1,73 +1,76 @@
# info on how the passes come together can be found in mame/src/osd/modules/render/d3d/d3dhlsl.cpp # info on how the passes come together can be found in mame/src/osd/modules/render/d3d/d3dhlsl.cpp
shaders = 12 shaders = 12
shader0 = mame_ntsc.slang shader0 = shaders/mame_hlsl/shaders/mame_ntsc.slang
filter_linear0 = true filter_linear0 = true
alias0 = NTSCPass alias0 = NTSCPass
scale_type0 = source scale_type0 = source
scale0 = 1.0 scale0 = 1.0
shader1 = mame_color.slang shader1 = shaders/mame_hlsl/shaders/mame_color.slang
alias1 = ColorPass alias1 = ColorPass
scale_type1 = source scale_type1 = source
scale1 = 1.0 scale1 = 1.0
filter_linear1 = true filter_linear1 = true
shader2 = ../../../../retro/shaders/sharp-bilinear.slang shader2 = ../retro/shaders/sharp-bilinear.slang
alias2 = PrescalePass alias2 = PrescalePass
scale_type2 = source scale_type2 = source
filter_linear2 = true filter_linear2 = true
scale2 = 4.0 scale2 = 4.0
shader3 = mame_deconverge.slang shader3 = shaders/mame_hlsl/shaders/mame_deconverge.slang
alias3 = DeconvergePass alias3 = DeconvergePass
filter_linear3 = true filter_linear3 = true
scale_type3 = source scale_type3 = source
scale3 = 0.5 scale3 = 0.5
shader4 = mame_scanline.slang shader4 = shaders/mame_hlsl/shaders/mame_scanline.slang
alias4 = ScanlinePass alias4 = ScanlinePass
filter_linear4 = true filter_linear4 = true
scale_type4 = source scale_type4 = source
scale4 = 2.0 scale4 = 2.0
shader5 = mame_focus.slang shader5 = shaders/mame_hlsl/shaders/mame_focus.slang
alias5 = FocusPass alias5 = FocusPass
filter_linear5 = true filter_linear5 = true
shader6 = mame_phosphor.slang shader6 = shaders/mame_hlsl/shaders/mame_phosphor.slang
alias6 = PhosphorPass alias6 = PhosphorPass
filter_linear6 = true filter_linear6 = true
shader7 = mame_post.slang shader7 = shaders/mame_hlsl/shaders/mame_post.slang
alias7 = PostPass alias7 = PostPass
filter_linear7 = true filter_linear7 = true
scale_type7 = viewport
shader8 = mame_chroma.slang shader8 = shaders/mame_hlsl/shaders/mame_chroma.slang
alias8 = ChromaPass alias8 = ChromaPass
filter_linear8 = true filter_linear8 = true
scale_type8 = source scale_type8 = viewport
shader9 = mame_downsample.slang shader9 = shaders/mame_hlsl/shaders/mame_downsample.slang
alias9 = DownsamplePass alias9 = DownsamplePass
filter_linear9 = true filter_linear9 = true
shader10 = mame_bloom.slang shader10 = shaders/mame_hlsl/shaders/mame_bloom.slang
alias10 = BloomPass alias10 = BloomPass
filter_linear10 = true filter_linear10 = true
mipmap_input10 = true mipmap_input10 = true
scale_type10 = source
shader11 = mame_distortion.slang shader11 = shaders/mame_hlsl/shaders/mame_distortion.slang
alias11 = DistortionPass alias11 = DistortionPass
filter_linear11 = true filter_linear11 = true
shader12 = mame_vector.slang # doesn't work, so commenting
alias12 = VectorPass # shader12 = shaders/mame_hlsl/shaders/mame_vector.slang
filter_linear12 = true # alias12 = VectorPass
# filter_linear12 = true
# mame's textures are available here: https://github.com/mamedev/mame/tree/master/artwork # mame's textures are available here: https://github.com/mamedev/mame/tree/master/artwork
textures = "MaskTexture" textures = "MaskTexture"
MaskTexture = aperture-grille.png MaskTexture = shaders/mame_hlsl/resources/aperture-grille.png
parameters = "AUTO_PRESCALE;chromaa_x;chromaa_y;chromab_x;chromab_y;chromac_x;chromac_y;ygain_r;ygain_g;ygain_b" parameters = "AUTO_PRESCALE;chromaa_x;chromaa_y;chromab_x;chromab_y;chromac_x;chromac_y;ygain_r;ygain_g;ygain_b"
chromaa_x = "0.630" chromaa_x = "0.630"

View file

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View file

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View file

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View file

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View file

@ -96,9 +96,9 @@ vec3 GetNoiseFactor(vec3 n, float random)
{ {
// smaller n become more noisy // smaller n become more noisy
vec3 NoiseFactor; vec3 NoiseFactor;
NoiseFactor.x = 1.0f + random * max(0.0f, 0.25f * pow(E, -8. * n.x)); NoiseFactor.x = 1.0 + random * max(0.0, 0.25 * pow(E, -8. * n.x));
NoiseFactor.y = 1.0f + random * max(0.0f, 0.25f * pow(E, -8. * n.y)); NoiseFactor.y = 1.0 + random * max(0.0, 0.25 * pow(E, -8. * n.y));
NoiseFactor.z = 1.0f + random * max(0.0f, 0.25f * pow(E, -8. * n.z)); NoiseFactor.z = 1.0 + random * max(0.0, 0.25 * pow(E, -8. * n.z));
return NoiseFactor; return NoiseFactor;
} }
@ -111,36 +111,36 @@ void main()
} }
else else
{ {
vec3 texel = textureLod(DiffuseSampler, vTexCoord, 0.0).rgb; vec3 texel = texture(DiffuseSampler, vTexCoord).rgb;
vec3 texelA = textureLod(BloomSamplerA, BloomCoord.xy, 1.0).rgb; vec3 texelA = texture(BloomSamplerA, BloomCoord.xy).rgb;
vec3 texelB = textureLod(BloomSamplerB, BloomCoord.xy, 2.0).rgb; vec3 texelB = texture(BloomSamplerB, BloomCoord.xy).rgb;
vec3 texelC = textureLod(BloomSamplerC, BloomCoord.xy, 3.0).rgb; vec3 texelC = texture(BloomSamplerC, BloomCoord.xy).rgb;
vec3 texelD = textureLod(BloomSamplerD, BloomCoord.xy, 4.0).rgb; vec3 texelD = texture(BloomSamplerD, BloomCoord.xy).rgb;
vec3 texelE = textureLod(BloomSamplerE, BloomCoord.xy, 5.0).rgb; vec3 texelE = texture(BloomSamplerE, BloomCoord.xy).rgb;
vec3 texelF = textureLod(BloomSamplerF, BloomCoord.xy, 6.0).rgb; vec3 texelF = texture(BloomSamplerF, BloomCoord.xy).rgb;
vec3 texelG = textureLod(BloomSamplerG, BloomCoord.xy, 7.0).rgb; vec3 texelG = texture(BloomSamplerG, BloomCoord.xy).rgb;
vec3 texelH = textureLod(BloomSamplerH, BloomCoord.xy, 8.0).rgb; vec3 texelH = texture(BloomSamplerH, BloomCoord.xy).rgb;
vec3 texelI = vec3(0.0f, 0.0f, 0.0f); vec3 texelI = vec3(0.0, 0.0, 0.0);
vec3 texelJ = vec3(0.0f, 0.0f, 0.0f); vec3 texelJ = vec3(0.0, 0.0, 0.0);
vec3 texelK = vec3(0.0f, 0.0f, 0.0f); vec3 texelK = vec3(0.0, 0.0, 0.0);
vec3 texelL = vec3(0.0f, 0.0f, 0.0f); vec3 texelL = vec3(0.0, 0.0, 0.0);
vec3 texelM = vec3(0.0f, 0.0f, 0.0f); vec3 texelM = vec3(0.0, 0.0, 0.0);
vec3 texelN = vec3(0.0f, 0.0f, 0.0f); vec3 texelN = vec3(0.0, 0.0, 0.0);
vec3 texelO = vec3(0.0f, 0.0f, 0.0f); vec3 texelO = vec3(0.0, 0.0, 0.0);
// vector screen uses twice -1 as many bloom levels // vector screen uses twice -1 as many bloom levels
if (VectorScreen) if (VectorScreen)
{ {
texelI = textureLod(BloomSamplerI, BloomCoord.xy, 1.0).rgb; texelI = texture(BloomSamplerI, BloomCoord.xy).rgb;
texelJ = textureLod(BloomSamplerJ, BloomCoord.xy, 1.0).rgb; texelJ = texture(BloomSamplerJ, BloomCoord.xy).rgb;
texelK = textureLod(BloomSamplerK, BloomCoord.xy, 1.0).rgb; texelK = texture(BloomSamplerK, BloomCoord.xy).rgb;
texelL = textureLod(BloomSamplerL, BloomCoord.xy, 1.0).rgb; texelL = texture(BloomSamplerL, BloomCoord.xy).rgb;
texelM = textureLod(BloomSamplerM, BloomCoord.xy, 1.0).rgb; texelM = texture(BloomSamplerM, BloomCoord.xy).rgb;
texelN = textureLod(BloomSamplerN, BloomCoord.xy, 1.0).rgb; texelN = texture(BloomSamplerN, BloomCoord.xy).rgb;
texelO = textureLod(BloomSamplerO, BloomCoord.xy, 1.0).rgb; texelO = texture(BloomSamplerO, BloomCoord.xy).rgb;
} }
vec3 blend; vec3 blend;
@ -148,7 +148,7 @@ void main()
// brighten // brighten
if (BloomBlendMode < 0.5) if (BloomBlendMode < 0.5)
{ {
vec3 bloom = vec3(0.0f, 0.0f, 0.0f); vec3 bloom = vec3(0.0, 0.0, 0.0);
texel *= Level0Weight; texel *= Level0Weight;
@ -167,35 +167,35 @@ void main()
else else
{ {
bloom += texelA * (Level1Weight); bloom += texelA * (Level1Weight);
bloom += texelB * (Level1Weight + Level2Weight) * 0.5f; bloom += texelB * (Level1Weight + Level2Weight) * 0.5;
bloom += texelC * (Level2Weight); bloom += texelC * (Level2Weight);
bloom += texelD * (Level2Weight + Level3Weight) * 0.5f; bloom += texelD * (Level2Weight + Level3Weight) * 0.5;
bloom += texelE * (Level3Weight); bloom += texelE * (Level3Weight);
bloom += texelF * (Level3Weight + Level4Weight) * 0.5f; bloom += texelF * (Level3Weight + Level4Weight) * 0.5;
bloom += texelG * (Level4Weight); bloom += texelG * (Level4Weight);
bloom += texelH * (Level4Weight + Level5Weight) * 0.5f; bloom += texelH * (Level4Weight + Level5Weight) * 0.5;
bloom += texelI * (Level5Weight); bloom += texelI * (Level5Weight);
bloom += texelJ * (Level5Weight + Level6Weight) * 0.5f; bloom += texelJ * (Level5Weight + Level6Weight) * 0.5;
bloom += texelK * (Level6Weight); bloom += texelK * (Level6Weight);
bloom += texelL * (Level6Weight + Level7Weight) * 0.5f; bloom += texelL * (Level6Weight + Level7Weight) * 0.5;
bloom += texelM * (Level7Weight); bloom += texelM * (Level7Weight);
bloom += texelN * (Level7Weight + Level8Weight) * 0.5f; bloom += texelN * (Level7Weight + Level8Weight) * 0.5;
bloom += texelO * (Level8Weight); bloom += texelO * (Level8Weight);
} }
bloom *= BloomScale; bloom *= BloomScale;
vec3 bloomOverdrive; vec3 bloomOverdrive;
bloomOverdrive.r = max(0.0f, texel.r + bloom.r - 1.0f) * BloomOverdrive.r; bloomOverdrive.r = max(0.0, texel.r + bloom.r - 1.0) * BloomOverdrive.r;
bloomOverdrive.g = max(0.0f, texel.g + bloom.g - 1.0f) * BloomOverdrive.g; bloomOverdrive.g = max(0.0, texel.g + bloom.g - 1.0) * BloomOverdrive.g;
bloomOverdrive.b = max(0.0f, texel.b + bloom.b - 1.0f) * BloomOverdrive.b; bloomOverdrive.b = max(0.0, texel.b + bloom.b - 1.0) * BloomOverdrive.b;
bloom.r += bloomOverdrive.g * 0.5f; bloom.r += bloomOverdrive.g * 0.5;
bloom.r += bloomOverdrive.b * 0.5f; bloom.r += bloomOverdrive.b * 0.5;
bloom.g += bloomOverdrive.r * 0.5f; bloom.g += bloomOverdrive.r * 0.5;
bloom.g += bloomOverdrive.b * 0.5f; bloom.g += bloomOverdrive.b * 0.5;
bloom.b += bloomOverdrive.r * 0.5f; bloom.b += bloomOverdrive.r * 0.5;
bloom.b += bloomOverdrive.g * 0.5f; bloom.b += bloomOverdrive.g * 0.5;
vec2 NoiseCoord = vTexCoord; vec2 NoiseCoord = vTexCoord;
vec3 NoiseFactor = GetNoiseFactor(bloom, random(NoiseCoord)); vec3 NoiseFactor = GetNoiseFactor(bloom, random(NoiseCoord));

View file

@ -34,9 +34,9 @@ layout(set = 0, binding = 2) uniform sampler2D Source;
#define DiffuseSampler Source #define DiffuseSampler Source
vec3 RedRatios = vec3(global.col_red, 0.0f, 0.0f); vec3 RedRatios = vec3(global.col_red, 0.0, 0.0);
vec3 GrnRatios = vec3(0.0f, global.col_grn, 0.0f); vec3 GrnRatios = vec3(0.0, global.col_grn, 0.0);
vec3 BluRatios = vec3(0.0f, 0.0f, global.col_blu); vec3 BluRatios = vec3(0.0, 0.0, global.col_blu);
vec3 Offset = vec3(global.col_offset_x, global.col_offset_y, global.col_offset_z); vec3 Offset = vec3(global.col_offset_x, global.col_offset_y, global.col_offset_z);
vec3 Scale = vec3(global.col_scale_x, global.col_scale_y, global.col_scale_z); vec3 Scale = vec3(global.col_scale_x, global.col_scale_y, global.col_scale_z);
float Saturation = global.col_saturation; float Saturation = global.col_saturation;

View file

@ -33,25 +33,25 @@ void main()
gl_Position = global.MVP * Position; gl_Position = global.MVP * Position;
// imaginary texel dimensions independed from screen dimension, but ratio // imaginary texel dimensions independed from screen dimension, but ratio
vec2 TexelDims = vec2(1.0f / 1024.); vec2 TexelDims = vec2(1.0 / 1024.);
TexCoordX = TexCoord.xxx; TexCoordX = TexCoord.xxx;
TexCoordY = TexCoord.yyy; TexCoordY = TexCoord.yyy;
// center coordinates // center coordinates
TexCoordX -= 0.5f; TexCoordX -= 0.5;
TexCoordY -= 0.5f; TexCoordY -= 0.5;
// radial converge offset to "translate" the most outer pixel as thay would be translated by the linar converge with the same amount // radial converge offset to "translate" the most outer pixel as thay would be translated by the linar converge with the same amount
vec2 radialConvergeOffset = vec2(2.0); vec2 radialConvergeOffset = vec2(2.0);
// radial converge // radial converge
TexCoordX *= 1.0f + RadialConvergeX * TexelDims.xxx * radialConvergeOffset.xxx; TexCoordX *= 1.0 + RadialConvergeX * TexelDims.xxx * radialConvergeOffset.xxx;
TexCoordY *= 1.0f + RadialConvergeY * TexelDims.yyy * radialConvergeOffset.yyy; TexCoordY *= 1.0 + RadialConvergeY * TexelDims.yyy * radialConvergeOffset.yyy;
// un-center coordinates // un-center coordinates
TexCoordX += 0.5f; TexCoordX += 0.5;
TexCoordY += 0.5f; TexCoordY += 0.5;
// linear converge // linear converge
TexCoordX += ConvergeX * TexelDims.xxx; TexCoordX += ConvergeX * TexelDims.xxx;

View file

@ -25,11 +25,11 @@ const int ScreenCount = 1;
// Constants // Constants
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
const float Epsilon = 1.0e-7f; const float Epsilon = 1.0e-7;
const float PI = 3.1415927f; const float PI = 3.1415927;
const float E = 2.7182817f; const float E = 2.7182817;
const float Gelfond = 23.140692f; // e^pi (Gelfond constant) const float Gelfond = 23.140692; // e^pi (Gelfond constant)
const float GelfondSchneider = 2.6651442f; // 2^sqrt(2) (Gelfond-Schneider constant) const float GelfondSchneider = 2.6651442; // 2^sqrt(2) (Gelfond-Schneider constant)
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Functions // Functions
@ -41,20 +41,20 @@ float random(vec2 seed)
// irrationals for pseudo randomness // irrationals for pseudo randomness
vec2 i = vec2(Gelfond, GelfondSchneider); vec2 i = vec2(Gelfond, GelfondSchneider);
return fract(cos(dot(seed, i)) * 123456.0f); return fract(cos(dot(seed, i)) * 123456.0);
} }
// www.dinodini.wordpress.com/2010/04/05/normalized-tunable-sigmoid-functions/ // www.dinodini.wordpress.com/2010/04/05/normalized-tunable-sigmoid-functions/
float normalizedSigmoid(float n, float k) float normalizedSigmoid(float n, float k)
{ {
// valid for n and k in range of -1.0 and 1.0 // valid for n and k in range of -1.0 and 1.0
return (n - n * k) / (k - abs(n) * 2.0f * k + 1); return (n - n * k) / (k - abs(n) * 2.0 * k + 1);
} }
// www.iquilezles.org/www/articles/distfunctions/distfunctions.htm // www.iquilezles.org/www/articles/distfunctions/distfunctions.htm
float roundBox(vec2 p, vec2 b, float r) float roundBox(vec2 p, vec2 b, float r)
{ {
return length(max(abs(p) - b + r, 0.0f)) - r; return length(max(abs(p) - b + r, 0.0)) - r;
} }
#pragma stage vertex #pragma stage vertex

View file

@ -25,10 +25,10 @@ layout(location = 1) in vec2 TexCoord;
layout(location = 0) out vec4 TexCoord01; layout(location = 0) out vec4 TexCoord01;
layout(location = 1) out vec4 TexCoord23; layout(location = 1) out vec4 TexCoord23;
const vec2 Coord0Offset = vec2(-0.5f, -0.5f); const vec2 Coord0Offset = vec2(-0.5, -0.5);
const vec2 Coord1Offset = vec2( 0.5f, -0.5f); const vec2 Coord1Offset = vec2( 0.5, -0.5);
const vec2 Coord2Offset = vec2(-0.5f, 0.5f); const vec2 Coord2Offset = vec2(-0.5, 0.5);
const vec2 Coord3Offset = vec2( 0.5f, 0.5f); const vec2 Coord3Offset = vec2( 0.5, 0.5);
void main() void main()
{ {

View file

@ -41,30 +41,30 @@ vec2 Defocus = vec2(global.defocus_x, global.defocus_y);
const vec2 CoordOffset8[8] = const vec2 CoordOffset8[8] =
vec2[8]( vec2[8](
// 0.075x² + 0.225x + 0.25 // 0.075x² + 0.225x + 0.25
vec2(-1.60f, 0.25f), vec2(-1.60, 0.25),
vec2(-1.00f, -0.55f), vec2(-1.00, -0.55),
vec2(-0.55f, 1.00f), vec2(-0.55, 1.00),
vec2(-0.25f, -1.60f), vec2(-0.25, -1.60),
vec2( 0.25f, 1.60f), vec2( 0.25, 1.60),
vec2( 0.55f, -1.00f), vec2( 0.55, -1.00),
vec2( 1.00f, 0.55f), vec2( 1.00, 0.55),
vec2( 1.60f, -0.25f) vec2( 1.60, -0.25)
); );
void main() void main()
{ {
// imaginary texel dimensions independed from source and target dimension // imaginary texel dimensions independed from source and target dimension
vec2 TexelDims = vec2(1.0f / 1024.0f); vec2 TexelDims = vec2(1.0 / 1024.0);
vec2 DefocusTexelDims = Defocus * TexelDims; vec2 DefocusTexelDims = Defocus * TexelDims;
vec3 texel = texture(DiffuseSampler, vTexCoord).rgb; vec3 texel = texture(DiffuseSampler, vTexCoord).rgb;
float samples = 1.0f; float samples = 1.0;
for (int i = 0; i < 8; i++) for (int i = 0; i < 8; i++)
{ {
texel += texture(DiffuseSampler, vTexCoord + CoordOffset8[i] * DefocusTexelDims).rgb; texel += texture(DiffuseSampler, vTexCoord + CoordOffset8[i] * DefocusTexelDims).rgb;
samples += 1.0f; samples += 1.0;
} }
FragColor = vec4(texel / samples, 1.0); FragColor = vec4(texel / samples, 1.0);

View file

@ -68,7 +68,7 @@ float YFreqResponse = global.yfreqresponse;
float IFreqResponse = global.ifreqresponse; float IFreqResponse = global.ifreqresponse;
float QFreqResponse = global.qfreqresponse; float QFreqResponse = global.qfreqresponse;
float SignalOffset = global.signaloffset; float SignalOffset = (global.signaloffset != 0.0) ? float(mod(params.FrameCount, 119)) : global.signaloffset;
vec4 GetCompositeYIQ(vec2 coord) vec4 GetCompositeYIQ(vec2 coord)
{ {

View file

@ -163,13 +163,12 @@ vec2 ScreenOffset = vec2(global.screenoffset_x, global.screenoffset_y);
bool SwapXY = bool(global.swapxy); bool SwapXY = bool(global.swapxy);
// Bloom Pass // Bloom Pass
#pragma parameter bloomtoggle "Bloom Enable" 0.0 0.0 1.0 1.0
#pragma parameter bloomblendmode "Bloom Blend Mode" 0.0 0.0 1.0 1.0 #pragma parameter bloomblendmode "Bloom Blend Mode" 0.0 0.0 1.0 1.0
#pragma parameter bloomscale "Bloom Scale" 0.06 0.0 1.0 0.01 #pragma parameter bloomscale "Bloom Scale" 0.33 0.0 1.0 0.01
#pragma parameter bloomoverdrive_r "Bloom Overdrive R" 1.0 0.0 1.0 0.01 #pragma parameter bloomoverdrive_r "Bloom Overdrive R" 1.0 0.0 2.0 0.01
#pragma parameter bloomoverdrive_g "Bloom Overdrive G" 1.0 0.0 1.0 0.01 #pragma parameter bloomoverdrive_g "Bloom Overdrive G" 1.0 0.0 2.0 0.01
#pragma parameter bloomoverdrive_b "Bloom Overdrive B" 1.0 0.0 1.0 0.01 #pragma parameter bloomoverdrive_b "Bloom Overdrive B" 1.0 0.0 2.0 0.01
#pragma parameter level0weight "Bloom Level 0 Weight" 1.0 0.0 1.0 0.01 #pragma parameter level0weight "Bloom Level 0 Weight" 0.64 0.0 1.0 0.01
#pragma parameter level1weight "Bloom Level 1 Weight" 0.64 0.0 1.0 0.01 #pragma parameter level1weight "Bloom Level 1 Weight" 0.64 0.0 1.0 0.01
#pragma parameter level2weight "Bloom Level 2 Weight" 0.32 0.0 1.0 0.01 #pragma parameter level2weight "Bloom Level 2 Weight" 0.32 0.0 1.0 0.01
#pragma parameter level3weight "Bloom Level 3 Weight" 0.16 0.0 1.0 0.01 #pragma parameter level3weight "Bloom Level 3 Weight" 0.16 0.0 1.0 0.01
@ -207,43 +206,43 @@ bool SwapXY = bool(global.swapxy);
#pragma parameter preparebloom "Prepare Bloom" 0.0 0.0 1.0 1.0 #pragma parameter preparebloom "Prepare Bloom" 0.0 0.0 1.0 1.0
// NTSC Pass // NTSC Pass
#pragma parameter avalue "A Value" 0.5 0.0 1.0 0.01 #pragma parameter avalue "A Value" 0.5 -1.0 1.0 0.01
#pragma parameter bvalue "B Value" 0.5 0.0 1.0 0.01 #pragma parameter bvalue "B Value" 0.5 -1.0 1.0 0.01
#pragma parameter ccvalue "CC Value" 3.5795454 0.0 5.0 0.1 #pragma parameter ccvalue "CC Value" 3.5795454 0.0 6.0 0.0005
#pragma parameter ovalue "O Value" 0.0 -2.0 2.0 0.1 #pragma parameter ovalue "O Value" 0.0 -3.0 3.0 0.1
#pragma parameter pvalue "P Value" 1.0 -2.0 3.0 0.1 #pragma parameter pvalue "P Value" 1.0 -3.0 3.0 0.1
#pragma parameter scantime "Scan Time" 52.6 0.0 100.0 1.0 #pragma parameter scantime "Scan Time" 52.6 0.0 100.0 0.1
#pragma parameter notchhalfwidth "Notch Half Width" 1.0 0.0 5.0 0.5 #pragma parameter notchhalfwidth "Notch Half Width" 1.0 0.0 6.0 0.05
#pragma parameter yfreqresponse "Y Freq Response" 6.0 0.0 10.0 0.1 #pragma parameter yfreqresponse "Y Freq Response" 6.0 0.0 6.0 0.05
#pragma parameter ifreqresponse "I Freq Response" 1.2 0.0 10.0 0.1 #pragma parameter ifreqresponse "I Freq Response" 1.2 0.0 6.0 0.05
#pragma parameter qfreqresponse "Q Freq Response" 0.6 0.0 10.0 0.1 #pragma parameter qfreqresponse "Q Freq Response" 0.6 0.0 6.0 0.05
#pragma parameter signaloffset "Signal Offset" 0.0 -5.0 5.0 0.01 #pragma parameter signaloffset "Signal Offset" 1.0 0.0 1.0 0.01
// Color Pass // Color Pass
#pragma parameter col_red "Red Shift" 1.0 0.0 1.0 0.01 #pragma parameter col_red "Red Shift" 1.0 0.0 2.0 0.01
#pragma parameter col_grn "Green Shift" 1.0 0.0 1.0 0.01 #pragma parameter col_grn "Green Shift" 1.0 0.0 2.0 0.01
#pragma parameter col_blu "Blue Shift" 1.0 0.0 1.0 0.01 #pragma parameter col_blu "Blue Shift" 1.0 0.0 2.0 0.01
#pragma parameter col_offset_x "Offset X" 0.0 0.0 1.0 0.01 #pragma parameter col_offset_x "Offset X" 0.0 -1.0 1.0 0.01
#pragma parameter col_offset_y "Offset Y" 0.0 0.0 1.0 0.01 #pragma parameter col_offset_y "Offset Y" 0.0 -1.0 1.0 0.01
#pragma parameter col_offset_z "Offset Z" 0.0 0.0 1.0 0.01 #pragma parameter col_offset_z "Offset Z" 0.0 -1.0 1.0 0.01
#pragma parameter col_scale_x "Scale X" 1.0 0.0 1.0 0.01 #pragma parameter col_scale_x "Scale X" 1.0 0.0 2.0 0.01
#pragma parameter col_scale_y "Scale Y" 1.0 0.0 1.0 0.01 #pragma parameter col_scale_y "Scale Y" 1.0 0.0 2.0 0.01
#pragma parameter col_scale_z "Scale Z" 1.0 0.0 1.0 0.01 #pragma parameter col_scale_z "Scale Z" 1.0 0.0 2.0 0.01
#pragma parameter col_saturation "Saturation" 1.0 0.0 0.01 #pragma parameter col_saturation "Saturation" 1.0 0.0 5.0 0.01
// Deconverge Pass // Deconverge Pass
#pragma parameter converge_x_r "Convergence X Red" 0.0 -100.0 100.0 0.5 #pragma parameter converge_x_r "Convergence X Red" 0.0 -10.0 10.0 0.05
#pragma parameter converge_x_g "Convergence X Green" 0.0 -100.0 100.0 0.5 #pragma parameter converge_x_g "Convergence X Green" 0.0 -10.0 10.0 0.05
#pragma parameter converge_x_b "Convergence X Blue" 0.0 -100.0 100.0 0.5 #pragma parameter converge_x_b "Convergence X Blue" 0.0 -10.0 10.0 0.05
#pragma parameter converge_y_r "Convergence Y Red" 0.0 -100.0 100.0 0.5 #pragma parameter converge_y_r "Convergence Y Red" 0.0 -10.0 10.0 0.05
#pragma parameter converge_y_g "Convergence Y Green" 0.0 -100.0 100.0 0.5 #pragma parameter converge_y_g "Convergence Y Green" 0.0 -10.0 10.0 0.05
#pragma parameter converge_y_b "Convergence Y Blue" 0.0 -100.0 100.0 0.5 #pragma parameter converge_y_b "Convergence Y Blue" 0.0 -10.0 10.0 0.05
#pragma parameter radial_conv_x_r "Radial Conv X Red" 0.0 -100.0 100.0 0.5 #pragma parameter radial_conv_x_r "Radial Conv X Red" 0.0 -10.0 10.0 0.05
#pragma parameter radial_conv_x_g "Radial Conv X Green" 0.0 -100.0 100.0 0.5 #pragma parameter radial_conv_x_g "Radial Conv X Green" 0.0 -10.0 10.0 0.05
#pragma parameter radial_conv_x_b "Radial Conv X Blue" 0.0 -100.0 100.0 0.5 #pragma parameter radial_conv_x_b "Radial Conv X Blue" 0.0 -10.0 10.0 0.05
#pragma parameter radial_conv_y_r "Radial Conv Y Red" 0.0 -100.0 100.0 0.5 #pragma parameter radial_conv_y_r "Radial Conv Y Red" 0.0 -10.0 10.0 0.05
#pragma parameter radial_conv_y_g "Radial Conv Y Green" 0.0 -100.0 100.0 0.5 #pragma parameter radial_conv_y_g "Radial Conv Y Green" 0.0 -10.0 10.0 0.05
#pragma parameter radial_conv_y_b "Radial Conv Y Blue" 0.0 -100.0 100.0 0.5 #pragma parameter radial_conv_y_b "Radial Conv Y Blue" 0.0 -10.0 10.0 0.05
// Scanline Pass // Scanline Pass
#pragma parameter scanlinealpha "Scanline Alpha" 0.5 0.0 1.0 0.01 #pragma parameter scanlinealpha "Scanline Alpha" 0.5 0.0 1.0 0.01

View file

@ -21,8 +21,8 @@ layout(push_constant) uniform Push
// Constants // Constants
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
const float PI = 3.1415927f; const float PI = 3.1415927;
const float HalfPI = PI * 0.5f; const float HalfPI = PI * 0.5;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Scanline Pixel Shader // Scanline Pixel Shader
@ -42,13 +42,13 @@ vec2 SourceDims = params.OriginalSize.xy;
vec2 GetAdjustedCoords(vec2 coord) vec2 GetAdjustedCoords(vec2 coord)
{ {
// center coordinates // center coordinates
coord -= 0.5f; coord -= 0.5;
// apply screen scale // apply screen scale
coord *= ScreenScale; coord *= ScreenScale;
// un-center coordinates // un-center coordinates
coord += 0.5f; coord += 0.5;
// apply screen offset // apply screen offset
coord += ScreenOffset; coord += ScreenOffset;
@ -87,38 +87,38 @@ void main()
// Color // Color
vec4 BaseColor = texture(DiffuseSampler, BaseCoord); vec4 BaseColor = texture(DiffuseSampler, BaseCoord);
BaseColor.a = 1.0f; BaseColor.a = 1.0;
/* /*
// clip border // clip border
if (BaseCoord.x < 0.0f || BaseCoord.y < 0.0f || if (BaseCoord.x < 0.0 || BaseCoord.y < 0.0 ||
BaseCoord.x > 1.0f || BaseCoord.y > 1.0f) BaseCoord.x > 1.0 || BaseCoord.y > 1.0)
{ {
// we don't use the clip function, because we don't clear the render target before // we don't use the clip function, because we don't clear the render target before
return vec4(0.0f, 0.0f, 0.0f, 1.0f); return vec4(0.0, 0.0, 0.0, 1.0);
} }
*/ */
float BrightnessOffset = (ScanlineBrightOffset * ScanlineAlpha); float BrightnessOffset = (ScanlineBrightOffset * ScanlineAlpha);
float BrightnessScale = (ScanlineBrightScale * ScanlineAlpha) + (1.0f - ScanlineAlpha); float BrightnessScale = (ScanlineBrightScale * ScanlineAlpha) + (1.0 - ScanlineAlpha);
float ColorBrightness = 0.299f * BaseColor.r + 0.587f * BaseColor.g + 0.114 * BaseColor.b; float ColorBrightness = 0.299 * BaseColor.r + 0.587 * BaseColor.g + 0.114 * BaseColor.b;
float ScanlineCoord = BaseCoord.y; float ScanlineCoord = BaseCoord.y;
ScanlineCoord += (SwapXY) ScanlineCoord += (SwapXY)
? QuadDims.x <= SourceDims.x * 2.0f ? QuadDims.x <= SourceDims.x * 2.0
? 0.5f / QuadDims.x // uncenter scanlines if the quad is less than twice the size of the source ? 0.5 / QuadDims.x // uncenter scanlines if the quad is less than twice the size of the source
: 0.0f : 0.0
: QuadDims.y <= SourceDims.y * 2.0f : QuadDims.y <= SourceDims.y * 2.0
? 0.5f / QuadDims.y // uncenter scanlines if the quad is less than twice the size of the source ? 0.5 / QuadDims.y // uncenter scanlines if the quad is less than twice the size of the source
: 0.0f; : 0.0;
ScanlineCoord *= SourceDims.y * ScanlineScale * PI; ScanlineCoord *= SourceDims.y * ScanlineScale * PI;
float ScanlineCoordJitter = ScanlineOffset * HalfPI; float ScanlineCoordJitter = ScanlineOffset * HalfPI;
float ScanlineSine = sin(ScanlineCoord + ScanlineCoordJitter); float ScanlineSine = sin(ScanlineCoord + ScanlineCoordJitter);
float ScanlineWide = ScanlineHeight + ScanlineVariation * max(1.0f, ScanlineHeight) * (1.0f - ColorBrightness); float ScanlineWide = ScanlineHeight + ScanlineVariation * max(1.0f, ScanlineHeight) * (1.0 - ColorBrightness);
float ScanlineAmount = pow(ScanlineSine * ScanlineSine, ScanlineWide); float ScanlineAmount = pow(ScanlineSine * ScanlineSine, ScanlineWide);
float ScanlineBrightness = ScanlineAmount * BrightnessScale + BrightnessOffset * BrightnessScale; float ScanlineBrightness = ScanlineAmount * BrightnessScale + BrightnessOffset * BrightnessScale;
BaseColor.rgb *= mix(1.0f, ScanlineBrightness, ScanlineAlpha); BaseColor.rgb *= mix(1.0, ScanlineBrightness, ScanlineAlpha);
FragColor = BaseColor; FragColor = BaseColor;
} }