// #type vertex #version 460 core uniform mat4 uProjectionMatrix; uniform mat4 uViewMatrix; layout (location = 0) in vec3 aPosition; layout (location = 1) in vec2 aUV; layout (location = 2) in vec4 aColor; layout (location = 3) in float aTextureId; layout (location = 4) in mat4 aModel; layout (location = 0) out vec4 oColor; layout (location = 1) out vec2 oUV; layout (location = 2) flat out float oTextureId; void main() { oColor = aColor; oUV = aUV; oTextureId = aTextureId; gl_Position = uProjectionMatrix * uViewMatrix * aModel * vec4(aPosition, 1.0); } // #type fragment #version 460 core uniform sampler2D uTexture[16]; layout (location = 0) in vec4 iColor; layout (location = 1) in vec2 iUV; layout (location = 2) flat in float iTextureId; layout (location = 0) out vec4 FragColor; void main() { FragColor = iColor; if (iTextureId >= 0) FragColor *= texture(uTexture[int(iTextureId)], iUV); if (FragColor.a == 0.0) discard; }