]> git.tdb.fi Git - libs/gl.git/blobdiff - shaderlib/occluder.glsl
Implement alpha cutoff for materials
[libs/gl.git] / shaderlib / occluder.glsl
index b5d05f09ad25dee7b98563dac8564dd0ff98bb82..abd29a0aaa07dde0db265fd95eec33d4464aed9d 100644 (file)
@@ -1,5 +1,14 @@
 import msp_interface;
 
+uniform AlphaCutoff
+{
+       float alpha_cutoff;
+};
+
+uniform sampler2D alpha_map;
+
+layout(constant_id=auto) const bool use_alpha_cutoff = false;
+
 #pragma MSP stage(vertex)
 virtual vec4 get_vertex_position()
 {
@@ -20,4 +29,19 @@ void main()
        vec4 eye_vertex = eye_world_matrix*get_vertex_transform()*get_vertex_position();
        clipping(eye_vertex.xyz);
        gl_Position = clip_eye_matrix*eye_vertex;
+       passthrough;
+}
+
+#pragma MSP stage(fragment)
+layout(location=0) out vec4 frag_color;
+
+void main()
+{
+       if(use_alpha_cutoff)
+       {
+               float alpha = texture(alpha_map, texcoord.xy).a;
+               if(alpha<alpha_cutoff)
+                       discard;
+               frag_color = vec4(1.0);
+       }
 }