1#version 450 2 3layout(push_constant) uniform Push 4{ 5 vec4 SourceSize; 6 vec4 OriginalSize; 7 vec4 OutputSize; 8 uint FrameCount; 9} params; 10 11layout(std140, set = 0, binding = 0) uniform UBO 12{ 13 mat4 MVP; 14} global; 15 16#pragma stage vertex 17layout(location = 0) in vec4 Position; 18layout(location = 1) in vec2 TexCoord; 19layout(location = 0) out float vU; 20layout(location = 1) out float vY; 21 22void main() 23{ 24 gl_Position = global.MVP * Position; 25 vU = TexCoord.x; 26 vY = (TexCoord.y * params.OutputSize.y) - 27 round((params.OutputSize.y - params.SourceSize.y) / 2.0); 28} 29 30#pragma stage fragment 31layout(location = 0) in float vU; 32layout(location = 1) in float vY; 33layout(location = 0) out vec4 FragColor; 34layout(set = 0, binding = 2) uniform sampler2D Source; 35 36void main() 37{ 38 float clip0 = (sign(vY) + 1.0) / 2.0; 39 float clipH = (sign(params.SourceSize.y - vY) + 1.0) / 2.0; 40 vec3 col = texture(Source, vec2(vU, vY / params.SourceSize.y)).rgb; 41 FragColor = vec4(clip0 * clipH * col, 1.0); 42} 43