Index: shaders/shader.frag
===================================================================
--- shaders/shader.frag	(revision adcd252eb53f4e8b018b4f9a42de8c52c66240a6)
+++ shaders/shader.frag	(revision 69dccfe34b6cde8a4c5753321f9d610fb25a1ee7)
@@ -3,11 +3,17 @@
 
 layout(binding = 1) uniform sampler2D texSampler;
+layout(binding = 2) uniform sampler2D uiTexSampler;
 
 layout(location = 0) in vec3 fragColor;
 layout(location = 1) in vec2 fragTexCoord;
+layout(location = 2) flat in uint isOverlay;
 
 layout(location = 0) out vec4 outColor;
 
 void main() {
-   outColor = vec4(fragColor * texture(texSampler, fragTexCoord).rgb, 1.0);
+   if (isOverlay == 1) {
+      outColor = vec4(fragColor * texture(uiTexSampler, fragTexCoord).rgb, 0.3);
+   } else {
+      outColor = vec4(fragColor * texture(texSampler, fragTexCoord).rgb, 1.0);
+   }
 }
Index: shaders/shader.vert
===================================================================
--- shaders/shader.vert	(revision adcd252eb53f4e8b018b4f9a42de8c52c66240a6)
+++ shaders/shader.vert	(revision 69dccfe34b6cde8a4c5753321f9d610fb25a1ee7)
@@ -14,8 +14,17 @@
 layout(location = 0) out vec3 fragColor;
 layout(location = 1) out vec2 fragTexCoord;
+layout(location = 2) out uint isOverlay;
 
 void main() {
-   gl_Position = ubo.proj * ubo.view * ubo.model * vec4(inPosition, 1.0);
-   fragColor = inColor;
+   if (gl_VertexIndex < 8 ) {
+      gl_Position = ubo.proj * ubo.view * ubo.model * vec4(inPosition, 1.0);
+      fragColor = inColor;
+      isOverlay = 0;
+   } else {
+      gl_Position = vec4(inPosition, 1.0);
+      fragColor = vec3(0.0, 1.0, 1.0);
+      isOverlay = 1;
+   }
+
    fragTexCoord = inTexCoord;
 }
