Archived
1
Fork 0
This repository has been archived on 2025-04-12. You can view files and clone it, but cannot push or open issues or pull requests.
prism/shaders/gaussian.frag.glsl

35 lines
1.1 KiB
Text
Raw Normal View History

2020-08-11 12:07:21 -04:00
layout (location = 0) in vec2 inUV;
layout (location = 0) out vec4 outColor;
layout(push_constant, binding = 1) uniform PushConstants {
int horizontal;
};
layout (binding = 0) uniform sampler2D image;
const float weight[5] = float[] (0.227027, 0.1945946, 0.1216216, 0.054054, 0.016216);
void main() {
vec2 tex_offset = 1.0 / textureSize(image, 0); // gets size of single texel
vec3 result = texture(image, inUV).rgb * weight[0]; // current fragment's contribution
if(horizontal == 1)
{
for(int i = 1; i < 5; ++i)
{
result += max(texture(image, inUV + vec2(tex_offset.x * i, 0.0)).rgb * weight[i], vec3(0.0));
result += max(texture(image, inUV - vec2(tex_offset.x * i, 0.0)).rgb * weight[i], vec3(0.0));
}
}
else
{
for(int i = 1; i < 5; ++i)
{
result += max(texture(image, inUV + vec2(0.0, tex_offset.y * i)).rgb * weight[i], vec3(0.0));
result += max(texture(image, inUV - vec2(0.0, tex_offset.y * i)).rgb * weight[i], vec3(0.0));
}
}
outColor = vec4(result, 1.0);
}