#version 430 layout (binding = 0) uniform sampler2D sprite; layout (location = 0) in vec4 color; layout (location = 1) in vec2 uv; layout (location = 0) out vec4 texel; layout (binding = 0) readonly buffer Camera { mat4 projection_matrix; }; layout (binding = 1) readonly buffer Material { float effect_magnitude; }; void main() { const vec2 red_channel_uv = uv + vec2(effect_magnitude, 0.0); const vec2 blue_channel_uv = uv + vec2(-effect_magnitude, 0.0); const vec4 original_texel = texture(sprite, uv); texel = vec4(texture(sprite, red_channel_uv).r, original_texel.g, texture(sprite, blue_channel_uv).b, original_texel.a) * color; if (texel.a == 0) { discard; } }