slang-shaders/scanlines/shaders/res-independent-scanlines.slang

86 lines
2.1 KiB
Plaintext
Raw Normal View History

2016-11-24 05:11:11 +11:00
#version 450
/*
Resolution-Independent Scanlines
based on
Scanlines Sine Absolute Value
An ultra light scanline shader
by RiskyJumps
license: public domain
*/
2016-11-24 05:11:11 +11:00
layout(push_constant) uniform Push
{
vec4 SourceSize;
vec4 OriginalSize;
vec4 OutputSize;
uint FrameCount;
float amp;
float phase;
float lines_black;
float lines_white;
float mask, mask_weight, imageSize;
2016-11-24 05:11:11 +11:00
} params;
#pragma parameter amp "Amplitude" 1.2500 0.000 2.000 0.05
#pragma parameter phase "Phase" 0.5000 0.000 2.000 0.05
#pragma parameter lines_black "Lines Blacks" 0.0000 0.000 1.000 0.05
#pragma parameter lines_white "Lines Whites" 1.0000 0.000 2.000 0.05
2016-11-24 05:11:11 +11:00
#pragma parameter mask "Mask Layout" 0.0 0.0 19.0 1.0
#pragma parameter mask_weight "Mask Weight" 0.5 0.0 1.0 0.01
#pragma parameter imageSize "Simulated Image Height" 224.0 144.0 260.0 1.0
#define freq 0.500000
#define offset 0.000000
#define pi 3.141592654
2016-11-24 05:11:11 +11:00
layout(std140, set = 0, binding = 0) uniform UBO
{
mat4 MVP;
} global;
#define pi 3.141592654
#include "../../include/subpixel_masks.h"
2016-11-24 05:11:11 +11:00
#pragma stage vertex
layout(location = 0) in vec4 Position;
layout(location = 1) in vec2 TexCoord;
layout(location = 0) out vec2 vTexCoord;
layout(location = 1) out float omega;
2016-11-24 05:11:11 +11:00
void main()
{
gl_Position = global.MVP * Position;
vTexCoord = TexCoord;
omega = 2.0 * pi * freq; // Angular frequency
2016-11-24 05:11:11 +11:00
}
#pragma stage fragment
layout(location = 0) in vec2 vTexCoord;
layout(location = 1) in float omega;
2016-11-24 05:11:11 +11:00
layout(location = 0) out vec4 FragColor;
layout(set = 0, binding = 2) uniform sampler2D Source;
void main()
{
float angle = (gl_FragCoord.y * params.OutputSize.w) * omega * params.imageSize + params.phase;
vec3 color = texture(Source, vTexCoord).xyz;
float grid;
float lines;
lines = sin(angle);
lines *= params.amp;
lines += offset;
lines = abs(lines);
lines *= params.lines_white - params.lines_black;
lines += params.lines_black;
color *= lines;
FragColor = vec4(color.xyz, 1.0);
FragColor.rgb *= mask_weights(gl_FragCoord.xy, params.mask_weight, int(params.mask));
2016-11-24 05:11:11 +11:00
}