import msp_interface; layout(set=1) uniform AlphaCutoff { float alpha_cutoff; }; layout(set=1) uniform sampler2D alpha_map; layout(constant_id=auto) const bool use_alpha_cutoff = false; layout(constant_id=auto) const bool use_instancing = false; #pragma MSP stage(vertex) virtual vec4 get_vertex_position() { return vertex; } virtual mat4 get_vertex_transform() { if(use_instancing) return transpose(mat4(instance_transform[0], instance_transform[1], instance_transform[2], vec4(0.0, 0.0, 0.0, 1.0))); else return world_obj_matrix; } virtual void clipping(vec3 eye_vertex) { } 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