diff options
Diffstat (limited to 'gsk/vulkan/resources/color-matrix.frag')
-rw-r--r-- | gsk/vulkan/resources/color-matrix.frag | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/gsk/vulkan/resources/color-matrix.frag b/gsk/vulkan/resources/color-matrix.frag new file mode 100644 index 0000000000..8787eb443f --- /dev/null +++ b/gsk/vulkan/resources/color-matrix.frag @@ -0,0 +1,33 @@ +#version 420 core + +#include "clip.frag.glsl" + +layout(location = 0) in vec2 inPos; +layout(location = 1) in vec2 inTexCoord; +layout(location = 2) in flat mat4 inColorMatrix; +layout(location = 6) in flat vec4 inColorOffset; + +layout(set = 0, binding = 0) uniform sampler2D inTexture; + +layout(location = 0) out vec4 color; + +vec4 +color_matrix (vec4 color, mat4 color_matrix, vec4 color_offset) +{ + /* unpremultiply */ + if (color.a != 0.0) + color.rgb /= color.a; + + color = color_matrix * color + color_offset; + color = clamp(color, 0.0, 1.0); + + /* premultiply */ + color.rgb *= color.a; + + return color; +} + +void main() +{ + color = clip (inPos, color_matrix (texture (inTexture, inTexCoord), inColorMatrix, inColorOffset)); +} |