58 lines
1.8 KiB
GLSL
58 lines
1.8 KiB
GLSL
#version 450
|
|
|
|
layout(location = 0) out vec4 fragColor;
|
|
layout(location = 0) in vec2 inUV;
|
|
|
|
layout(set = 1, binding = 0) uniform sampler2D source;
|
|
layout(set = 1, binding = 1) uniform sampler2D upscaled;
|
|
|
|
layout( push_constant ) uniform constants
|
|
{
|
|
ivec2 resolution;
|
|
} PushConstants;
|
|
|
|
/* ? - e - ?
|
|
* | a | b |
|
|
* f - ? - g
|
|
* | c | d |
|
|
* ? - h - ?
|
|
*/
|
|
vec4 upscale() {
|
|
vec2 srcTexelSize = 1.0f / PushConstants.resolution * 2.0f;
|
|
float x = srcTexelSize.x;
|
|
float y = srcTexelSize.y;
|
|
|
|
vec3 color = vec3(0.0f);
|
|
vec3 a = texture(upscaled, vec2(inUV.x - x, inUV.y + y)).rgb;
|
|
vec3 b = texture(upscaled, vec2(inUV.x + x, inUV.y + y)).rgb;
|
|
|
|
vec3 c = texture(upscaled, vec2(inUV.x - x, inUV.y - y)).rgb;
|
|
vec3 d = texture(upscaled, vec2(inUV.x + x, inUV.y - y)).rgb;
|
|
|
|
vec3 e = texture(upscaled, vec2(inUV.x, inUV.y + 2.0*y)).rgb;
|
|
vec3 h = texture(upscaled, vec2(inUV.x, inUV.y - 2.0*y)).rgb;
|
|
|
|
vec3 f = texture(upscaled, vec2(inUV.x - 2.0*x, inUV.y)).rgb;
|
|
vec3 g = texture(upscaled, vec2(inUV.x + 2.0*x, inUV.y)).rgb;
|
|
|
|
return vec4((a + b + c + d) * (1.0f/6.0f) + (e + f + g + h) * (1.0f/12.0f), 1.0);
|
|
|
|
/* vec3
|
|
color = texture(upscaled, vec2(inUV.x + x, inUV.y + y)).rgb;
|
|
color += texture(upscaled, vec2(inUV.x + x, inUV.y - y)).rgb;
|
|
color += texture(upscaled, vec2(inUV.x - x, inUV.y + y)).rgb;
|
|
color += texture(upscaled, vec2(inUV.x - x, inUV.y - y)).rgb;
|
|
|
|
color += 2.0f * texture(upscaled, vec2(inUV.x + x, inUV.y)).rgb;
|
|
color += 2.0f * texture(upscaled, vec2(inUV.x - x, inUV.y)).rgb;
|
|
color += 2.0f * texture(upscaled, vec2(inUV.x, inUV.y + y)).rgb;
|
|
color += 2.0f * texture(upscaled, vec2(inUV.x, inUV.y - y)).rgb;
|
|
|
|
color += 4.0f * texture(upscaled, inUV).rgb;
|
|
|
|
return vec4(color * (1.0f / 16.0f), 1.0f); */
|
|
}
|
|
|
|
void main() {
|
|
fragColor = texture(source, inUV) + upscale();
|
|
} |