diff options
Diffstat (limited to 'src/render/shaders/glsl/CMrgbadiscard.frag')
| -rw-r--r-- | src/render/shaders/glsl/CMrgbadiscard.frag | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/render/shaders/glsl/CMrgbadiscard.frag b/src/render/shaders/glsl/CMrgbadiscard.frag new file mode 100644 index 00000000..9be2ed97 --- /dev/null +++ b/src/render/shaders/glsl/CMrgbadiscard.frag @@ -0,0 +1,44 @@ +#version 300 es +#extension GL_ARB_shading_language_include : enable + +precision highp float; +in vec2 v_texcoord; +uniform sampler2D tex; + +uniform int sourceTF; // eTransferFunction +uniform int targetTF; // eTransferFunction +uniform mat3 targetPrimariesXYZ; + +uniform float alpha; + +uniform bool discardOpaque; +uniform bool discardAlpha; +uniform float discardAlphaValue; + +uniform bool applyTint; +uniform vec3 tint; + +#include "rounding.glsl" +#include "CM.glsl" + +layout(location = 0) out vec4 fragColor; +void main() { + vec4 pixColor = texture(tex, v_texcoord); + + if (discardOpaque && pixColor.a * alpha == 1.0) + discard; + + if (discardAlpha && pixColor.a <= discardAlphaValue) + discard; + + // this shader shouldn't be used when skipCM == 1 + pixColor = doColorManagement(pixColor, sourceTF, targetTF, targetPrimariesXYZ); + + if (applyTint) + pixColor.rgb *= tint; + + if (radius > 0.0) + pixColor = rounding(pixColor); + + fragColor = pixColor * alpha; +} |
