Index: shaders/shader.vert
===================================================================
--- shaders/shader.vert	(revision 9cd92aef818abe78918773da116184a750feadfb)
+++ shaders/shader.vert	(revision c8b0357ff69bc64f21dd13f33b82bb4455bde02c)
@@ -17,5 +17,5 @@
 
 void main() {
-   if (gl_VertexIndex < 8 ) {
+   if (gl_VertexIndex < 8) {
       gl_Position = ubo.proj * ubo.view * ubo.model * vec4(inPosition, 1.0);
       fragColor = inColor;
Index: vulkan-game.cpp
===================================================================
--- vulkan-game.cpp	(revision 9cd92aef818abe78918773da116184a750feadfb)
+++ vulkan-game.cpp	(revision c8b0357ff69bc64f21dd13f33b82bb4455bde02c)
@@ -111,25 +111,12 @@
 };
 
-const vector<Vertex> vertices = {
-   {{-0.5f, -0.5f, -0.5f}, {1.0f, 0.0f, 0.0f}, {0.0f, 1.0f}},
-   {{ 0.5f, -0.5f, -0.5f}, {0.0f, 1.0f, 0.0f}, {1.0f, 1.0f}},
-   {{ 0.5f,  0.5f, -0.5f}, {0.0f, 0.0f, 1.0f}, {1.0f, 0.0f}},
-   {{-0.5f,  0.5f, -0.5f}, {1.0f, 1.0f, 1.0f}, {0.0f, 0.0f}},
-
-   {{-0.5f, -0.5f,  0.0f}, {1.0f, 0.0f, 0.0f}, {0.0f, 1.0f}},
-   {{ 0.5f, -0.5f,  0.0f}, {0.0f, 1.0f, 0.0f}, {1.0f, 1.0f}},
-   {{ 0.5f,  0.5f,  0.0f}, {0.0f, 0.0f, 1.0f}, {1.0f, 0.0f}},
-   {{-0.5f,  0.5f,  0.0f}, {1.0f, 1.0f, 1.0f}, {0.0f, 0.0f}},
-
-   {{-1.0f,  1.0f,  0.0f}, {1.0f, 0.0f, 0.0f}, {0.0f, 1.0f}},
-   {{ 1.0f,  1.0f,  0.0f}, {0.0f, 1.0f, 0.0f}, {1.0f, 1.0f}},
-   {{ 1.0f, -1.0f,  0.0f}, {0.0f, 0.0f, 1.0f}, {1.0f, 0.0f}},
-   {{-1.0f, -1.0f,  0.0f}, {1.0f, 1.0f, 1.0f}, {0.0f, 0.0f}}
-};
-
-const vector<uint16_t> indices = {
-    0,  1,  2,  2,  3,  0,
-    4,  5,  6,  6,  7,  4,
-    8,  9, 10, 10, 11,  8
+struct BufferInfo {
+   VkBuffer vertexBuffer;
+   VkDeviceMemory vertexBufferMemory;
+   size_t numVertices;
+
+   VkBuffer indexBuffer;
+   VkDeviceMemory indexBufferMemory;
+   size_t numIndices;
 };
 
@@ -224,9 +211,6 @@
       VkSampler textureSampler;
 
-      VkBuffer vertexBuffer;
-      VkDeviceMemory vertexBufferMemory;
-
-      VkBuffer indexBuffer;
-      VkDeviceMemory indexBufferMemory;
+      BufferInfo sceneBuffers;
+      BufferInfo overlayBuffers;
 
       vector<VkBuffer> uniformBuffers;
@@ -336,6 +320,39 @@
          createImageResourcesFromSDLTexture(uiOverlay, sdlOverlayImage, sdlOverlayImageMemory, sdlOverlayImageView);
          createTextureSampler();
-         createVertexBuffer();
-         createIndexBuffer();
+
+         createShaderBuffers(sceneBuffers, {
+            {{-0.5f, -0.5f, -0.5f}, {1.0f, 0.0f, 0.0f}, {0.0f, 1.0f}},
+            {{ 0.5f, -0.5f, -0.5f}, {0.0f, 1.0f, 0.0f}, {1.0f, 1.0f}},
+            {{ 0.5f,  0.5f, -0.5f}, {0.0f, 0.0f, 1.0f}, {1.0f, 0.0f}},
+            {{-0.5f,  0.5f, -0.5f}, {1.0f, 1.0f, 1.0f}, {0.0f, 0.0f}},
+
+            {{-0.5f, -0.5f,  0.0f}, {1.0f, 0.0f, 0.0f}, {0.0f, 1.0f}},
+            {{ 0.5f, -0.5f,  0.0f}, {0.0f, 1.0f, 0.0f}, {1.0f, 1.0f}},
+            {{ 0.5f,  0.5f,  0.0f}, {0.0f, 0.0f, 1.0f}, {1.0f, 0.0f}},
+            {{-0.5f,  0.5f,  0.0f}, {1.0f, 1.0f, 1.0f}, {0.0f, 0.0f}}
+         }, {
+            0,  1,  2,  2,  3,  0,
+            4,  5,  6,  6,  7,  4
+         });
+
+         createShaderBuffers(overlayBuffers, {
+            // Filler vertices to increase the overlay vertex indices to at least 8
+            {{-1.0f, -1.0f,  3.0f}, {1.0f, 1.0f, 1.0f}, {0.0f, 0.0f}},
+            {{-1.0f, -1.0f,  3.0f}, {1.0f, 1.0f, 1.0f}, {0.0f, 0.0f}},
+            {{-1.0f, -1.0f,  3.0f}, {1.0f, 1.0f, 1.0f}, {0.0f, 0.0f}},
+            {{-1.0f, -1.0f,  3.0f}, {1.0f, 1.0f, 1.0f}, {0.0f, 0.0f}},
+            {{-1.0f, -1.0f,  3.0f}, {1.0f, 1.0f, 1.0f}, {0.0f, 0.0f}},
+            {{-1.0f, -1.0f,  3.0f}, {1.0f, 1.0f, 1.0f}, {0.0f, 0.0f}},
+            {{-1.0f, -1.0f,  3.0f}, {1.0f, 1.0f, 1.0f}, {0.0f, 0.0f}},
+            {{-1.0f, -1.0f,  3.0f}, {1.0f, 1.0f, 1.0f}, {0.0f, 0.0f}},
+
+            {{-1.0f,  1.0f,  0.0f}, {1.0f, 0.0f, 0.0f}, {0.0f, 1.0f}},
+            {{ 1.0f,  1.0f,  0.0f}, {0.0f, 1.0f, 0.0f}, {1.0f, 1.0f}},
+            {{ 1.0f, -1.0f,  0.0f}, {0.0f, 0.0f, 1.0f}, {1.0f, 0.0f}},
+            {{-1.0f, -1.0f,  0.0f}, {1.0f, 1.0f, 1.0f}, {0.0f, 0.0f}}
+         }, {
+            8,  9, 10, 10, 11,  8
+         });
+
          createUniformBuffers();
          createDescriptorPool();
@@ -1317,5 +1334,14 @@
       }
 
-      void createVertexBuffer() {
+      void createShaderBuffers(BufferInfo& info, const vector<Vertex>& vertices, const vector<uint16_t>& indices) {
+         createVertexBuffer(info.vertexBuffer, info.vertexBufferMemory, vertices);
+         info.numVertices = vertices.size();
+
+         createIndexBuffer(info.indexBuffer, info.indexBufferMemory, indices);
+         info.numIndices = indices.size();
+      }
+
+      void createVertexBuffer(VkBuffer& vertexBuffer, VkDeviceMemory& vertexBufferMemory,
+            const vector<Vertex>& vertices) {
          VkDeviceSize bufferSize = sizeof(vertices[0]) * vertices.size();
 
@@ -1340,5 +1366,6 @@
       }
 
-      void createIndexBuffer() {
+      void createIndexBuffer(VkBuffer& indexBuffer, VkDeviceMemory& indexBufferMemory,
+            const vector<uint16_t>& indices) {
          VkDeviceSize bufferSize = sizeof(indices[0]) * indices.size();
 
@@ -1585,12 +1612,22 @@
             vkCmdBindPipeline(commandBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, graphicsPipeline);
 
-            VkBuffer vertexBuffers[] = { vertexBuffer };
+            vkCmdBindDescriptorSets(commandBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayout, 0, 1, &descriptorSets[i], 0, nullptr);
+
+            VkBuffer vertexBuffers[] = { sceneBuffers.vertexBuffer };
             VkDeviceSize offsets[] = { 0 };
             vkCmdBindVertexBuffers(commandBuffers[i], 0, 1, vertexBuffers, offsets);
 
-            vkCmdBindIndexBuffer(commandBuffers[i], indexBuffer, 0, VK_INDEX_TYPE_UINT16);
-            vkCmdBindDescriptorSets(commandBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayout, 0, 1, &descriptorSets[i], 0, nullptr);
-
-            vkCmdDrawIndexed(commandBuffers[i], static_cast<uint32_t>(indices.size()), 1, 0, 0, 0);
+            vkCmdBindIndexBuffer(commandBuffers[i], sceneBuffers.indexBuffer, 0, VK_INDEX_TYPE_UINT16);
+
+            vkCmdDrawIndexed(commandBuffers[i], static_cast<uint32_t>(sceneBuffers.numIndices), 1, 0, 0, 0);
+
+            vkCmdBindPipeline(commandBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, graphicsPipeline);
+
+            VkBuffer vertexBuffersOverlay[] = { overlayBuffers.vertexBuffer };
+            vkCmdBindVertexBuffers(commandBuffers[i], 0, 1, vertexBuffersOverlay, offsets);
+
+            vkCmdBindIndexBuffer(commandBuffers[i], overlayBuffers.indexBuffer, 0, VK_INDEX_TYPE_UINT16);
+
+            vkCmdDrawIndexed(commandBuffers[i], static_cast<uint32_t>(overlayBuffers.numIndices), 1, 0, 0, 0);
 
             vkCmdEndRenderPass(commandBuffers[i]);
@@ -1813,9 +1850,13 @@
          vkDestroyDescriptorSetLayout(device, descriptorSetLayout, nullptr);
 
-         vkDestroyBuffer(device, indexBuffer, nullptr);
-         vkFreeMemory(device, indexBufferMemory, nullptr);
-
-         vkDestroyBuffer(device, vertexBuffer, nullptr);
-         vkFreeMemory(device, vertexBufferMemory, nullptr);
+         vkDestroyBuffer(device, sceneBuffers.vertexBuffer, nullptr);
+         vkFreeMemory(device, sceneBuffers.vertexBufferMemory, nullptr);
+         vkDestroyBuffer(device, sceneBuffers.indexBuffer, nullptr);
+         vkFreeMemory(device, sceneBuffers.indexBufferMemory, nullptr);
+
+         vkDestroyBuffer(device, overlayBuffers.vertexBuffer, nullptr);
+         vkFreeMemory(device, overlayBuffers.vertexBufferMemory, nullptr);
+         vkDestroyBuffer(device, overlayBuffers.indexBuffer, nullptr);
+         vkFreeMemory(device, overlayBuffers.indexBufferMemory, nullptr);
 
          for (size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++) {
