Index: graphics-pipeline_vulkan.hpp
===================================================================
--- graphics-pipeline_vulkan.hpp	(revision 58453c33b77d79596424d05cd7fd3cfc75574498)
+++ graphics-pipeline_vulkan.hpp	(revision 567fa8887807b77ef828d381dca5fd2d7d52078f)
@@ -63,5 +63,6 @@
       void createDescriptorSets(uint32_t size);
 
-      void createRenderCommands(VkCommandBuffer& commandBuffer, uint32_t currentImage);
+      void createRenderCommands(VkCommandBuffer& commandBuffer, uint32_t currentImage,
+                                const vector<uint32_t>& dynamicOffsets);
 
       void addObject(const vector<VertexType>& vertices, vector<uint16_t> indices, VkCommandPool commandPool,
@@ -473,9 +474,11 @@
 
 template<class VertexType>
-void GraphicsPipeline_Vulkan<VertexType>::createRenderCommands(VkCommandBuffer& commandBuffer, uint32_t currentImage) {
+void GraphicsPipeline_Vulkan<VertexType>::createRenderCommands(VkCommandBuffer& commandBuffer, uint32_t currentImage,
+                                                               const vector<uint32_t>& dynamicOffsets) {
    vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline);
 
+   // If more dynamic UBOs are added, this needs to become an array of offsets
    vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayout, 0, 1,
-      &descriptorSets[currentImage], 0, nullptr);
+      &descriptorSets[currentImage], dynamicOffsets.size(), dynamicOffsets.data());
 
    VkBuffer vertexBuffers[] = { vertexBuffer };
Index: sdl-game.cpp
===================================================================
--- sdl-game.cpp	(revision 58453c33b77d79596424d05cd7fd3cfc75574498)
+++ sdl-game.cpp	(revision 567fa8887807b77ef828d381dca5fd2d7d52078f)
@@ -1177,5 +1177,5 @@
    // TODO: Find a more elegant, per-screen solution for this
    if (currentRenderScreenFn == &VulkanGame::renderGameScreen) {
-      modelPipeline.createRenderCommands(commandBuffers[imageIndex], imageIndex);
+      modelPipeline.createRenderCommands(commandBuffers[imageIndex], imageIndex, {});
 
 
Index: vulkan-game.cpp
===================================================================
--- vulkan-game.cpp	(revision 58453c33b77d79596424d05cd7fd3cfc75574498)
+++ vulkan-game.cpp	(revision 567fa8887807b77ef828d381dca5fd2d7d52078f)
@@ -1790,9 +1790,9 @@
    // TODO: Find a more elegant, per-screen solution for this
    if (currentRenderScreenFn == &VulkanGame::renderGameScreen) {
-      modelPipeline.createRenderCommands(commandBuffers[imageIndex], imageIndex);
-      shipPipeline.createRenderCommands(commandBuffers[imageIndex], imageIndex);
-      asteroidPipeline.createRenderCommands(commandBuffers[imageIndex], imageIndex);
-      laserPipeline.createRenderCommands(commandBuffers[imageIndex], imageIndex);
-      explosionPipeline.createRenderCommands(commandBuffers[imageIndex], imageIndex);
+      modelPipeline.createRenderCommands(commandBuffers[imageIndex], imageIndex, {});
+      shipPipeline.createRenderCommands(commandBuffers[imageIndex], imageIndex, {});
+      asteroidPipeline.createRenderCommands(commandBuffers[imageIndex], imageIndex, {});
+      laserPipeline.createRenderCommands(commandBuffers[imageIndex], imageIndex, {});
+      explosionPipeline.createRenderCommands(commandBuffers[imageIndex], imageIndex, {});
    }
 
