Index: sdl-game.cpp
===================================================================
--- sdl-game.cpp	(revision bb76950f0466dd9cdf091f103572dec02c0f07c8)
+++ sdl-game.cpp	(revision b7fc3c2d25e78df182543b43a8d92c5666f1361a)
@@ -92,5 +92,6 @@
    vkGetPhysicalDeviceProperties(physicalDevice, &deviceProperties);
 
-   objects_modelPipeline = VulkanBuffer<SSBO_ModelObject>(10, deviceProperties.limits.minUniformBufferOffsetAlignment);
+   objects_modelPipeline = VulkanBuffer<SSBO_ModelObject>(10, deviceProperties.limits.maxStorageBufferRange,
+                                                          deviceProperties.limits.minStorageBufferOffsetAlignment);
 
    initImGuiOverlay();
@@ -448,27 +449,31 @@
 
 void VulkanGame::updateScene() {
-   // Rotate the textured squares
-   for (SceneObject<ModelVertex, SSBO_ModelObject>& model : this->modelObjects) {
-      model.model_transform =
+   // TODO: Probably move the resizing to the VulkanBuffer class
+   if (objects_modelPipeline.resized) {
+      resizeBufferSet(storageBuffers_modelPipeline, objects_modelPipeline.memorySize(), resourceCommandPool,
+                      graphicsQueue, true);
+
+      objects_modelPipeline.resize();
+
+      modelPipeline.updateDescriptorInfo(1, &storageBuffers_modelPipeline.infoSet, swapChainImages.size());
+   }
+
+   for (size_t i = 0; i < modelObjects.size(); i++) {
+      SceneObject<ModelVertex, SSBO_ModelObject>& obj = modelObjects[i];
+      SSBO_ModelObject& objData = obj.ssbo;
+
+      // Rotate the textured squares
+      obj.model_transform =
          translate(mat4(1.0f), vec3(0.0f, -2.0f, -0.0f)) *
          rotate(mat4(1.0f), curTime * radians(90.0f), vec3(0.0f, 0.0f, 1.0f));
-      model.modified = true;
-   }
-
-   // TODO: Probably move the resizing to the VulkanBuffer class
-   if (objects_modelPipeline.resized) {
-      // TODO: Also resize the dynamic ubo
-      resizeBufferSet(storageBuffers_modelPipeline, objects_modelPipeline.capacity * sizeof(SSBO_ModelObject),
-                      resourceCommandPool, graphicsQueue, true);
-
-      objects_modelPipeline.resize();
-
-      modelPipeline.updateDescriptorInfo(1, &storageBuffers_modelPipeline.infoSet, swapChainImages.size());
-   }
-
-   for (size_t i = 0; i < modelObjects.size(); i++) {
-      if (modelObjects[i].modified) {
-         updateObject(modelObjects[i]);
-         updateBufferSet(storageBuffers_modelPipeline, i, modelObjects[i].ssbo);
+      obj.modified = true;
+
+      if (obj.modified) {
+         objData.model = obj.model_transform * obj.model_base;
+         obj.center = vec3(objData.model * vec4(0.0f, 0.0f, 0.0f, 1.0f));
+
+         obj.modified = false;
+
+         updateBufferSet(storageBuffers_modelPipeline, i, objData);
       }
    }
Index: sdl-game.hpp
===================================================================
--- sdl-game.hpp	(revision bb76950f0466dd9cdf091f103572dec02c0f07c8)
+++ sdl-game.hpp	(revision b7fc3c2d25e78df182543b43a8d92c5666f1361a)
@@ -323,7 +323,4 @@
       void centerObject(SceneObject<VertexType, SSBOType>& object);
 
-      template<class VertexType, class SSBOType>
-      void updateObject(SceneObject<VertexType, SSBOType>& obj);
-
       void renderFrame(ImDrawData* draw_data);
       void presentFrame();
@@ -353,6 +350,6 @@
 }
 
-// TODO: Right now, it's basically necessary to pass the identity matrix in for ssbo.model
-// and to change the model matrix later by setting model_transform and then calling updateObject()
+// TODO: Right now, it's basically necessary to pass the identity matrix in for ssbo.model and to change
+// the model matrix later by setting model_transform and then calculating the new ssbo.model.
 // Figure out a better way to allow the model matrix to be set during object creation
 template<class VertexType, class SSBOType>
@@ -362,5 +359,5 @@
                                                          VulkanBuffer<SSBOType>& objectBuffer, SSBOType ssbo) {
    // TODO: Use the model field of ssbo to set the object's model_base
-   // currently, the passed in model is useless since it gets overridden in updateObject() anyway
+   // currently, the passed-in model is useless since it gets overridden when ssbo.model is recalculated
    size_t numVertices = pipeline.getNumVertices();
 
@@ -464,12 +461,3 @@
 }
 
-// TODO: Just pass in the single object instead of a list of all of them
-template<class VertexType, class SSBOType>
-void VulkanGame::updateObject(SceneObject<VertexType, SSBOType>& obj) {
-   obj.ssbo.model = obj.model_transform * obj.model_base;
-   obj.center = vec3(obj.ssbo.model * vec4(0.0f, 0.0f, 0.0f, 1.0f));
-
-   obj.modified = false;
-}
-
 #endif // _SDL_GAME_H
Index: vulkan-buffer.hpp
===================================================================
--- vulkan-buffer.hpp	(revision bb76950f0466dd9cdf091f103572dec02c0f07c8)
+++ vulkan-buffer.hpp	(revision b7fc3c2d25e78df182543b43a8d92c5666f1361a)
@@ -21,5 +21,5 @@
 
       VulkanBuffer();
-      VulkanBuffer(size_t capacity, size_t minOffsetAlignment);
+      VulkanBuffer(size_t capacity, size_t range, size_t minOffsetAlignment);
 
       VulkanBuffer(const VulkanBuffer<T>&) = delete;
@@ -35,9 +35,10 @@
       void add(T obj);
 
-      // TODO: Add a resize function
+      size_t memorySize();
 
    private:
 
       size_t alignment;
+      size_t range;
       size_t numObjects;
 
@@ -48,4 +49,6 @@
       // Maybe rename it to mappedData or something to make that clearer
       void* rawData;
+
+      size_t memRequirement(size_t capacity);
 };
 
@@ -66,4 +69,5 @@
 VulkanBuffer<T>::VulkanBuffer()
                               : alignment(0)
+                              , range(0)
                               , capacity(0)
                               , numObjects(0)
@@ -75,6 +79,7 @@
 
 template<class T>
-VulkanBuffer<T>::VulkanBuffer(size_t capacity, size_t minOffsetAlignment)
-                              : alignment(sizeof(T))
+VulkanBuffer<T>::VulkanBuffer(size_t capacity, size_t range, size_t minOffsetAlignment)
+                              : alignment(range)
+                              , range(range / sizeof(T))
                               , capacity(capacity)
                               , numObjects(0)
@@ -87,5 +92,5 @@
    }
 
-   srcData = (T*)malloc(capacity * alignment);
+   srcData = (T*)malloc(memRequirement(capacity));
 }
 
@@ -110,4 +115,5 @@
 
       alignment = other.alignment;
+      range = other.range;
 
       if (srcData != nullptr) {
@@ -119,5 +125,5 @@
       other.capacity = 0;
       other.numObjects = 0;
-      // TODO: Maybe set rnage to 0 as well
+      other.range = 0;
 
       other.srcData = nullptr;
@@ -144,3 +150,13 @@
 }
 
+template<class T>
+size_t VulkanBuffer<T>::memorySize() {
+   return memRequirement(capacity);
+}
+
+template<class T>
+size_t VulkanBuffer<T>::memRequirement(size_t capacity) {
+   return (capacity / range) * alignment + (capacity % range) * sizeof(T);
+}
+
 #endif // _VULKAN_BUFFER_H
Index: vulkan-game.cpp
===================================================================
--- vulkan-game.cpp	(revision bb76950f0466dd9cdf091f103572dec02c0f07c8)
+++ vulkan-game.cpp	(revision b7fc3c2d25e78df182543b43a8d92c5666f1361a)
@@ -110,9 +110,14 @@
    vkGetPhysicalDeviceProperties(physicalDevice, &deviceProperties);
 
-   objects_modelPipeline = VulkanBuffer<SSBO_ModelObject>(10, deviceProperties.limits.minUniformBufferOffsetAlignment);
-   objects_shipPipeline = VulkanBuffer<SSBO_ModelObject>(10, deviceProperties.limits.minUniformBufferOffsetAlignment);
-   objects_asteroidPipeline = VulkanBuffer<SSBO_Asteroid>(10, deviceProperties.limits.minUniformBufferOffsetAlignment);
-   objects_laserPipeline = VulkanBuffer<SSBO_Laser>(2, deviceProperties.limits.minUniformBufferOffsetAlignment);
-   objects_explosionPipeline = VulkanBuffer<SSBO_Explosion>(2, deviceProperties.limits.minUniformBufferOffsetAlignment);
+   objects_modelPipeline = VulkanBuffer<SSBO_ModelObject>(10, deviceProperties.limits.maxStorageBufferRange,
+                                                          deviceProperties.limits.minStorageBufferOffsetAlignment);
+   objects_shipPipeline = VulkanBuffer<SSBO_ModelObject>(10, deviceProperties.limits.maxStorageBufferRange,
+                                                         deviceProperties.limits.minStorageBufferOffsetAlignment);
+   objects_asteroidPipeline = VulkanBuffer<SSBO_Asteroid>(10, deviceProperties.limits.maxStorageBufferRange,
+                                                          deviceProperties.limits.minStorageBufferOffsetAlignment);
+   objects_laserPipeline = VulkanBuffer<SSBO_Laser>(2, deviceProperties.limits.maxStorageBufferRange,
+                                                    deviceProperties.limits.minStorageBufferOffsetAlignment);
+   objects_explosionPipeline = VulkanBuffer<SSBO_Explosion>(2, deviceProperties.limits.maxStorageBufferRange,
+                                                            deviceProperties.limits.minStorageBufferOffsetAlignment);
 
    initImGuiOverlay();
@@ -941,60 +946,4 @@
 // where it will run just once per frame
 void VulkanGame::updateScene() {
-   // Rotate the textured squares
-   for (SceneObject<ModelVertex, SSBO_ModelObject>& model : this->modelObjects) {
-      model.model_transform =
-         translate(mat4(1.0f), vec3(0.0f, -2.0f, -0.0f)) *
-         rotate(mat4(1.0f), curTime * radians(90.0f), vec3(0.0f, 0.0f, 1.0f));
-      model.modified = true;
-   }
-
-   if (leftLaserIdx != -1) {
-      updateLaserTarget(leftLaserIdx);
-   }
-   if (rightLaserIdx != -1) {
-      updateLaserTarget(rightLaserIdx);
-   }
-
-   for (vector<BaseEffectOverTime*>::iterator it = effects.begin(); it != effects.end(); ) {
-      if ((*it)->deleted) {
-         delete *it;
-         it = effects.erase(it);
-      } else {
-         BaseEffectOverTime* eot = *it;
-
-         eot->applyEffect(curTime);
-
-         it++;
-      }
-   }
-
-   for (SceneObject<ModelVertex, SSBO_Asteroid>& asteroid : this->asteroidObjects) {
-      if (!asteroid.ssbo.deleted) {
-         vec3 objCenter = vec3(viewMat * vec4(asteroid.center, 1.0f));
-
-         if (asteroid.ssbo.hp <= 0.0f) {
-            asteroid.ssbo.deleted = true;
-
-            // TODO: Optimize this so I don't recalculate the camera rotation every time
-            // TODO: Also, avoid re-declaring cam_pitch
-            float cam_pitch = -50.0f;
-            mat4 pitch_mat = rotate(mat4(1.0f), radians(cam_pitch), vec3(1.0f, 0.0f, 0.0f));
-            mat4 model_mat = translate(mat4(1.0f), asteroid.center) * pitch_mat;
-
-            addExplosion(model_mat, 0.5f, curTime);
-
-            this->score++;
-         } else if ((objCenter.z - asteroid.radius) > -NEAR_CLIP) {
-            asteroid.ssbo.deleted = true;
-         } else {
-            asteroid.model_transform =
-               translate(mat4(1.0f), vec3(0.0f, 0.0f, this->asteroidSpeed * this->elapsedTime)) *
-               asteroid.model_transform;
-         }
-
-         asteroid.modified = true;
-      }
-   }
-
    if (curTime - this->lastSpawn_asteroid > this->spawnRate_asteroid) {
       this->lastSpawn_asteroid = curTime;
@@ -1080,102 +1029,185 @@
    }
 
-   for (SceneObject<ExplosionVertex, SSBO_Explosion>& explosion : this->explosionObjects) {
-      if (!explosion.ssbo.deleted) {
-         if (curTime > (explosion.ssbo.explosionStartTime + explosion.ssbo.explosionDuration)) {
-            explosion.ssbo.deleted = true;
-            explosion.modified = true;
+   // TODO: Probably move the resizing to the VulkanBuffer class
+
+   // TODO: Replace updateBufferSet to one call to copyDataToMemory, using VulkanBuffer to provide the data source
+   // TODO: Figure out a way to make updateDescriptorInfo easier to use, maybe store the binding index in the buffer set
+
+   if (objects_modelPipeline.resized) {
+      resizeBufferSet(storageBuffers_modelPipeline, objects_modelPipeline.memorySize(), resourceCommandPool,
+                      graphicsQueue, true);
+
+      objects_modelPipeline.resize();
+
+      modelPipeline.updateDescriptorInfo(1, &storageBuffers_modelPipeline.infoSet, swapChainImages.size());
+   }
+
+   for (size_t i = 0; i < modelObjects.size(); i++) {
+      SceneObject<ModelVertex, SSBO_ModelObject>& obj = modelObjects[i];
+      SSBO_ModelObject& objData = obj.ssbo;
+
+      // Rotate the textured squares
+      obj.model_transform =
+         translate(mat4(1.0f), vec3(0.0f, -2.0f, -0.0f)) *
+         rotate(mat4(1.0f), curTime * radians(90.0f), vec3(0.0f, 0.0f, 1.0f));
+      obj.modified = true;
+
+      if (obj.modified) {
+         objData.model = obj.model_transform * obj.model_base;
+         obj.center = vec3(objData.model * vec4(0.0f, 0.0f, 0.0f, 1.0f));
+
+         obj.modified = false;
+
+         updateBufferSet(storageBuffers_modelPipeline, i, objData);
+      }
+   }
+
+   if (objects_shipPipeline.resized) {
+      resizeBufferSet(storageBuffers_shipPipeline, objects_shipPipeline.memorySize(), resourceCommandPool,
+                      graphicsQueue, true);
+
+      objects_shipPipeline.resize();
+
+      shipPipeline.updateDescriptorInfo(1, &storageBuffers_shipPipeline.infoSet, swapChainImages.size());
+   }
+
+   // TODO: Move ship position updates from the ui event handling code into this function
+   for (size_t i = 0; i < shipObjects.size(); i++) {
+      SceneObject<ModelVertex, SSBO_ModelObject>& obj = shipObjects[i];
+      SSBO_ModelObject& objData = obj.ssbo;
+
+      if (obj.modified) {
+         objData.model = obj.model_transform * obj.model_base;
+         obj.center = vec3(objData.model * vec4(0.0f, 0.0f, 0.0f, 1.0f));
+
+         obj.modified = false;
+
+         updateBufferSet(storageBuffers_shipPipeline, i, objData);
+      }
+   }
+
+   if (objects_asteroidPipeline.resized) {
+      resizeBufferSet(storageBuffers_asteroidPipeline, objects_asteroidPipeline.memorySize(), resourceCommandPool,
+                      graphicsQueue, true);
+
+      objects_asteroidPipeline.resize();
+
+      asteroidPipeline.updateDescriptorInfo(1, &storageBuffers_asteroidPipeline.infoSet, swapChainImages.size());
+   }
+
+   for (size_t i = 0; i < asteroidObjects.size(); i++) {
+      SceneObject<ModelVertex, SSBO_Asteroid>& obj = asteroidObjects[i];
+      SSBO_Asteroid& objData = obj.ssbo;
+
+      if (!objData.deleted) {
+         vec3 objCenter = vec3(viewMat * vec4(obj.center, 1.0f));
+
+         if (objData.hp <= 0.0f) {
+            objData.deleted = true;
+
+            // TODO: Optimize this so I don't recalculate the camera rotation every time
+            // TODO: Also, avoid re-declaring cam_pitch
+            float cam_pitch = -50.0f;
+            mat4 pitch_mat = rotate(mat4(1.0f), radians(cam_pitch), vec3(1.0f, 0.0f, 0.0f));
+            mat4 model_mat = translate(mat4(1.0f), obj.center) * pitch_mat;
+
+            addExplosion(model_mat, 0.5f, curTime);
+
+            this->score++;
+         } else if ((objCenter.z - obj.radius) > -NEAR_CLIP) {
+            objData.deleted = true;
+         } else {
+            obj.model_transform =
+               translate(mat4(1.0f), vec3(0.0f, 0.0f, this->asteroidSpeed * this->elapsedTime)) *
+               obj.model_transform;
+         }
+
+         obj.modified = true;
+      }
+
+      if (obj.modified) {
+         objData.model = obj.model_transform * obj.model_base;
+         obj.center = vec3(objData.model * vec4(0.0f, 0.0f, 0.0f, 1.0f));
+
+         obj.modified = false;
+
+         updateBufferSet(storageBuffers_asteroidPipeline, i, objData);
+      }
+   }
+
+   if (objects_laserPipeline.resized) {
+      resizeBufferSet(storageBuffers_laserPipeline, objects_laserPipeline.memorySize(), resourceCommandPool,
+                      graphicsQueue, true);
+
+      objects_laserPipeline.resize();
+
+      laserPipeline.updateDescriptorInfo(1, &storageBuffers_laserPipeline.infoSet, swapChainImages.size());
+   }
+
+   if (leftLaserIdx != -1) {
+      updateLaserTarget(leftLaserIdx);
+   }
+   if (rightLaserIdx != -1) {
+      updateLaserTarget(rightLaserIdx);
+   }
+
+   for (size_t i = 0; i < laserObjects.size(); i++) {
+      SceneObject<LaserVertex, SSBO_Laser>& obj = laserObjects[i];
+      SSBO_Laser& objData = obj.ssbo;
+
+      if (obj.modified) {
+         objData.model = obj.model_transform * obj.model_base;
+         obj.center = vec3(objData.model * vec4(0.0f, 0.0f, 0.0f, 1.0f));
+
+         obj.modified = false;
+
+         updateBufferSet(storageBuffers_laserPipeline, i, objData);
+      }
+   }
+
+   if (objects_explosionPipeline.resized) {
+      resizeBufferSet(storageBuffers_explosionPipeline, objects_explosionPipeline.memorySize(), resourceCommandPool,
+                      graphicsQueue, true);
+
+      objects_explosionPipeline.resize();
+
+      explosionPipeline.updateDescriptorInfo(1, &storageBuffers_explosionPipeline.infoSet, swapChainImages.size());
+   }
+
+   for (size_t i = 0; i < explosionObjects.size(); i++) {
+      SceneObject<ExplosionVertex, SSBO_Explosion>& obj = explosionObjects[i];
+      SSBO_Explosion& objData = obj.ssbo;
+
+      if (!objData.deleted) {
+         if (curTime > (objData.explosionStartTime + objData.explosionDuration)) {
+            objData.deleted = true;
+            obj.modified = true;
          }
       }
-   }
-
-   // TODO: Replace updateBufferSet to one call to copyDataToMemory, using VulkanBuffer to provide the data source
-   // TODO: Figure out a way to make updateDescriptorInfo easier to use, maybe store the binding index in the buffer set
-   // TODO: Probably move the resizing to the VulkanBuffer class
-
-   if (objects_modelPipeline.resized) {
-      resizeBufferSet(storageBuffers_modelPipeline, objects_modelPipeline.capacity * sizeof(SSBO_ModelObject),
-                      resourceCommandPool, graphicsQueue, true);
-
-      objects_modelPipeline.resize();
-
-      modelPipeline.updateDescriptorInfo(1, &storageBuffers_modelPipeline.infoSet, swapChainImages.size());
-   }
-
-   for (size_t i = 0; i < modelObjects.size(); i++) {
-      if (modelObjects[i].modified) {
-         updateObject(modelObjects[i]);
-         updateBufferSet(storageBuffers_modelPipeline, i, modelObjects[i].ssbo);
+
+      if (obj.modified) {
+         objData.model = obj.model_transform * obj.model_base;
+         obj.center = vec3(objData.model * vec4(0.0f, 0.0f, 0.0f, 1.0f));
+
+         obj.modified = false;
+
+         updateBufferSet(storageBuffers_explosionPipeline, i, objData);
       }
    }
 
-   // TODO: Probably move the resizing to the VulkanBuffer class
-   if (objects_shipPipeline.resized) {
-      resizeBufferSet(storageBuffers_shipPipeline, objects_shipPipeline.capacity * sizeof(SSBO_ModelObject),
-                      resourceCommandPool, graphicsQueue, true);
-
-      objects_shipPipeline.resize();
-
-      shipPipeline.updateDescriptorInfo(1, &storageBuffers_shipPipeline.infoSet, swapChainImages.size());
-   }
-
-   for (size_t i = 0; i < shipObjects.size(); i++) {
-      if (shipObjects[i].modified) {
-         updateObject(shipObjects[i]);
-         updateBufferSet(storageBuffers_shipPipeline, i, shipObjects[i].ssbo);
+   explosion_UBO.cur_time = curTime;
+
+   for (vector<BaseEffectOverTime*>::iterator it = effects.begin(); it != effects.end(); ) {
+      if ((*it)->deleted) {
+         delete *it;
+         it = effects.erase(it);
+      } else {
+         BaseEffectOverTime* eot = *it;
+
+         eot->applyEffect(curTime);
+
+         it++;
       }
    }
-
-   // TODO: Probably move the resizing to the VulkanBuffer class
-   if (objects_asteroidPipeline.resized) {
-      resizeBufferSet(storageBuffers_asteroidPipeline, objects_asteroidPipeline.capacity * sizeof(SSBO_Asteroid),
-                      resourceCommandPool, graphicsQueue, true);
-
-      objects_asteroidPipeline.resize();
-
-      asteroidPipeline.updateDescriptorInfo(1, &storageBuffers_asteroidPipeline.infoSet, swapChainImages.size());
-   }
-
-   for (size_t i = 0; i < asteroidObjects.size(); i++) {
-      if (asteroidObjects[i].modified) {
-         updateObject(asteroidObjects[i]);
-         updateBufferSet(storageBuffers_asteroidPipeline, i, asteroidObjects[i].ssbo);
-      }
-   }
-
-   // TODO: Probably move the resizing to the VulkanBuffer class
-   if (objects_laserPipeline.resized) {
-      resizeBufferSet(storageBuffers_laserPipeline, objects_laserPipeline.capacity * sizeof(SSBO_Laser),
-                      resourceCommandPool, graphicsQueue, true);
-
-      objects_laserPipeline.resize();
-
-      laserPipeline.updateDescriptorInfo(1, &storageBuffers_laserPipeline.infoSet, swapChainImages.size());
-   }
-
-   for (size_t i = 0; i < laserObjects.size(); i++) {
-      if (laserObjects[i].modified) {
-         updateObject(laserObjects[i]);
-         updateBufferSet(storageBuffers_laserPipeline, i, laserObjects[i].ssbo);
-      }
-   }
-
-   // TODO: Probably move the resizing to the VulkanBuffer class
-   if (objects_explosionPipeline.resized) {
-      resizeBufferSet(storageBuffers_explosionPipeline, objects_explosionPipeline.capacity * sizeof(SSBO_Explosion),
-                      resourceCommandPool, graphicsQueue, true);
-
-      objects_explosionPipeline.resize();
-
-      explosionPipeline.updateDescriptorInfo(1, &storageBuffers_explosionPipeline.infoSet, swapChainImages.size());
-   }
-
-   for (size_t i = 0; i < explosionObjects.size(); i++) {
-      if (explosionObjects[i].modified) {
-         updateObject(explosionObjects[i]);
-         updateBufferSet(storageBuffers_explosionPipeline, i, explosionObjects[i].ssbo);
-      }
-   }
-
-   explosion_UBO.cur_time = curTime;
 
    VulkanUtils::copyDataToMemory(device, &object_VP_mats, uniformBuffers_modelPipeline.memory[imageIndex], 0,
Index: vulkan-game.hpp
===================================================================
--- vulkan-game.hpp	(revision bb76950f0466dd9cdf091f103572dec02c0f07c8)
+++ vulkan-game.hpp	(revision b7fc3c2d25e78df182543b43a8d92c5666f1361a)
@@ -459,7 +459,4 @@
 
       template<class VertexType, class SSBOType>
-      void updateObject(SceneObject<VertexType, SSBOType>& obj);
-
-      template<class VertexType, class SSBOType>
       void updateObjectVertices(GraphicsPipeline_Vulkan<VertexType>& pipeline,
             SceneObject<VertexType, SSBOType>& obj, size_t index);
@@ -508,6 +505,6 @@
 }
 
-// TODO: Right now, it's basically necessary to pass the identity matrix in for ssbo.model
-// and to change the model matrix later by setting model_transform and then calling updateObject()
+// TODO: Right now, it's basically necessary to pass the identity matrix in for ssbo.model and to change
+// the model matrix later by setting model_transform and then calculating the new ssbo.model.
 // Figure out a better way to allow the model matrix to be set during object creation
 template<class VertexType, class SSBOType>
@@ -517,5 +514,5 @@
                                                          VulkanBuffer<SSBOType>& objectBuffer, SSBOType ssbo) {
    // TODO: Use the model field of ssbo to set the object's model_base
-   // currently, the passed in model is useless since it gets overridden in updateObject() anyway
+   // currently, the passed-in model is useless since it gets overridden when ssbo.model is recalculated
    size_t numVertices = pipeline.getNumVertices();
 
@@ -624,13 +621,4 @@
 }
 
-// TODO: Just pass in the single object instead of a list of all of them
-template<class VertexType, class SSBOType>
-void VulkanGame::updateObject(SceneObject<VertexType, SSBOType>& obj) {
-   obj.ssbo.model = obj.model_transform * obj.model_base;
-   obj.center = vec3(obj.ssbo.model * vec4(0.0f, 0.0f, 0.0f, 1.0f));
-
-   obj.modified = false;
-}
-
 template<class VertexType, class SSBOType>
 void VulkanGame::updateObjectVertices(GraphicsPipeline_Vulkan<VertexType>& pipeline,
