Index: resources/shader.frag
===================================================================
--- resources/shader.frag	(revision c205c3a8a3acc0125b6b0cea26e2879f383b1889)
+++ resources/shader.frag	(revision c205c3a8a3acc0125b6b0cea26e2879f383b1889)
@@ -0,0 +1,16 @@
+#version 450
+#extension GL_ARB_separate_shader_objects : enable
+
+layout(binding = 1) uniform sampler2D texSampler;
+
+layout(location = 0) in vec4 fragColor;
+layout(location = 1) in vec2 fragTexCoord;
+
+layout(location = 0) out vec4 outColor;
+
+void main() {
+    outColor = fragColor * texture(texSampler, fragTexCoord);
+
+    if (outColor.a < 0.5)
+        discard;
+}
Index: resources/shader.vert
===================================================================
--- resources/shader.vert	(revision c205c3a8a3acc0125b6b0cea26e2879f383b1889)
+++ resources/shader.vert	(revision c205c3a8a3acc0125b6b0cea26e2879f383b1889)
@@ -0,0 +1,25 @@
+#version 450
+#extension GL_ARB_separate_shader_objects : enable
+
+layout(binding = 0) uniform UniformBufferObject {
+    mat4 model;
+    mat4 view;
+    mat4 proj;
+} ubo;
+
+layout(location = 0) in vec3 inPosition;
+layout(location = 1) in vec4 inColor;
+layout(location = 2) in vec2 inTexCoord;
+
+layout(location = 0) out vec4 fragColor;
+layout(location = 1) out vec2 fragTexCoord;
+
+out gl_PerVertex {
+    vec4 gl_Position;
+};
+
+void main() {
+    gl_Position = ubo.proj * ubo.view * ubo.model * vec4(inPosition, 1.0);
+    fragColor = inColor;
+    fragTexCoord = inTexCoord;
+}
