Index: graphics-pipeline_vulkan.hpp
===================================================================
--- graphics-pipeline_vulkan.hpp	(revision c163d8158510ee4d7f382dca6d405e0fbecdf4f3)
+++ graphics-pipeline_vulkan.hpp	(revision 58453c33b77d79596424d05cd7fd3cfc75574498)
@@ -39,10 +39,6 @@
       GraphicsPipeline_Vulkan();
 
-      // TODO: swapChainImages is only ever used to get its size. Check how that is determined and,
-      // if it will never change, just pass it in the constructor and save it
-      // If it does change, I could add an updateSwapchainImageCount() function
       GraphicsPipeline_Vulkan(VkPrimitiveTopology topology, VkPhysicalDevice physicalDevice, VkDevice device,
-         VkRenderPass renderPass, Viewport viewport, vector<VkImage>& swapChainImages,
-         size_t vertexCapacity, size_t indexCapacity);
+         VkRenderPass renderPass, Viewport viewport, size_t vertexCapacity, size_t indexCapacity);
       ~GraphicsPipeline_Vulkan();
 
@@ -60,12 +56,10 @@
       void addDescriptorInfo(VkDescriptorType type, VkShaderStageFlags stageFlags, VkDescriptorImageInfo* imageData);
 
-      void updateDescriptorInfo(uint32_t index, vector<VkDescriptorBufferInfo>* bufferData,
-                                vector<VkImage>& swapChainImages);
-      // TODO: Maybe make an analogous one for updating image info
+      void updateDescriptorInfo(uint32_t index, vector<VkDescriptorBufferInfo>* bufferData, uint32_t size);
 
       void createPipeline(string vertShaderFile, string fragShaderFile);
       void createDescriptorSetLayout();
-      void createDescriptorPool(vector<VkImage>& swapChainImages);
-      void createDescriptorSets(vector<VkImage>& swapChainImages);
+      void createDescriptorPool(uint32_t size);
+      void createDescriptorSets(uint32_t size);
 
       void createRenderCommands(VkCommandBuffer& commandBuffer, uint32_t currentImage);
@@ -128,6 +122,5 @@
                                                              VkPhysicalDevice physicalDevice, VkDevice device,
                                                              VkRenderPass renderPass, Viewport viewport,
-                                                             vector<VkImage>& swapChainImages, size_t vertexCapacity,
-                                                             size_t indexCapacity)
+                                                             size_t vertexCapacity, size_t indexCapacity)
                                                             : topology(topology)
                                                             , physicalDevice(physicalDevice)
@@ -190,24 +183,27 @@
 
 template<class VertexType>
-void GraphicsPipeline_Vulkan<VertexType>::addDescriptorInfo(VkDescriptorType type,
-      VkShaderStageFlags stageFlags, vector<VkDescriptorBufferInfo>* bufferData) {
+void GraphicsPipeline_Vulkan<VertexType>::addDescriptorInfo(VkDescriptorType type, VkShaderStageFlags stageFlags,
+                                                            vector<VkDescriptorBufferInfo>* bufferData) {
    this->descriptorInfoList.push_back({ type, stageFlags, bufferData, nullptr });
 }
 
 template<class VertexType>
-void GraphicsPipeline_Vulkan<VertexType>::addDescriptorInfo(VkDescriptorType type,
-      VkShaderStageFlags stageFlags, VkDescriptorImageInfo* imageData) {
+void GraphicsPipeline_Vulkan<VertexType>::addDescriptorInfo(VkDescriptorType type, VkShaderStageFlags stageFlags,
+                                                            VkDescriptorImageInfo* imageData) {
    this->descriptorInfoList.push_back({ type, stageFlags, nullptr, imageData });
 }
 
+// TODO: Maybe make an analogous one for updating image info
+// Also, I may want to rewrite this function to call vkUpdateDescriptorSets once and call it once
+// per swapchain image from VulkanGame
 template<class VertexType>
 void GraphicsPipeline_Vulkan<VertexType>::updateDescriptorInfo(uint32_t index,
                                                                vector<VkDescriptorBufferInfo>* bufferData,
-                                                               vector<VkImage>& swapChainImages) {
+                                                               uint32_t size) {
    this->descriptorInfoList[index].bufferDataList = bufferData;
 
    // TODO: This code was mostly copied from createDescriptorSets. I should make some common function they both use
    // for updating descriptor sets
-   for (size_t i = 0; i < swapChainImages.size(); i++) {
+   for (size_t i = 0; i < size; i++) {
       VkWriteDescriptorSet descriptorWrite = {};
 
@@ -237,6 +233,6 @@
       }
 
-      // TODO: Instead, assert that (bufferData->size() == swapChainImages.size()
-      if (bufferData->size() != swapChainImages.size()) {
+      // TODO: Instead, assert that (bufferData->size() == swapChainImages.size() (now just changed to size)
+      if (bufferData->size() != size) {
          cout << "ALERT ALERT ALERT: SIZE MISMATCH!!!!!!!" << endl;
       }
@@ -410,10 +406,10 @@
 
 template<class VertexType>
-void GraphicsPipeline_Vulkan<VertexType>::createDescriptorPool(vector<VkImage>& swapChainImages) {
+void GraphicsPipeline_Vulkan<VertexType>::createDescriptorPool(uint32_t size) {
    vector<VkDescriptorPoolSize> poolSizes(this->descriptorInfoList.size());
 
    for (size_t i = 0; i < poolSizes.size(); i++) {
       poolSizes[i].type = this->descriptorInfoList[i].type;
-      poolSizes[i].descriptorCount = static_cast<uint32_t>(swapChainImages.size());
+      poolSizes[i].descriptorCount = size;
    }
 
@@ -422,5 +418,5 @@
    poolInfo.poolSizeCount = static_cast<uint32_t>(poolSizes.size());
    poolInfo.pPoolSizes = poolSizes.data();
-   poolInfo.maxSets = static_cast<uint32_t>(swapChainImages.size());
+   poolInfo.maxSets = size;
 
    if (vkCreateDescriptorPool(this->device, &poolInfo, nullptr, &this->descriptorPool) != VK_SUCCESS) {
@@ -429,21 +425,20 @@
 }
 
-// TODO: Since I only need the size of the swapChainImages array, I should just pass that in instead of the whole array
-template<class VertexType>
-void GraphicsPipeline_Vulkan<VertexType>::createDescriptorSets(vector<VkImage>& swapChainImages) {
-   vector<VkDescriptorSetLayout> layouts(swapChainImages.size(), this->descriptorSetLayout);
+template<class VertexType>
+void GraphicsPipeline_Vulkan<VertexType>::createDescriptorSets(uint32_t size) {
+   vector<VkDescriptorSetLayout> layouts(size, this->descriptorSetLayout);
 
    VkDescriptorSetAllocateInfo allocInfo = {};
    allocInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
    allocInfo.descriptorPool = this->descriptorPool;
-   allocInfo.descriptorSetCount = static_cast<uint32_t>(swapChainImages.size());
+   allocInfo.descriptorSetCount = size;
    allocInfo.pSetLayouts = layouts.data();
 
-   this->descriptorSets.resize(swapChainImages.size());
+   this->descriptorSets.resize(size);
    if (vkAllocateDescriptorSets(device, &allocInfo, this->descriptorSets.data()) != VK_SUCCESS) {
       throw runtime_error("failed to allocate descriptor sets!");
    }
 
-   for (size_t i = 0; i < swapChainImages.size(); i++) {
+   for (size_t i = 0; i < size; i++) {
       vector<VkWriteDescriptorSet> descriptorWrites(this->descriptorInfoList.size());
 
Index: sdl-game.cpp
===================================================================
--- sdl-game.cpp	(revision c163d8158510ee4d7f382dca6d405e0fbecdf4f3)
+++ sdl-game.cpp	(revision 58453c33b77d79596424d05cd7fd3cfc75574498)
@@ -169,6 +169,6 @@
    modelPipeline.createDescriptorSetLayout();
    modelPipeline.createPipeline("shaders/model-vert.spv", "shaders/model-frag.spv");
-   modelPipeline.createDescriptorPool(swapChainImages);
-   modelPipeline.createDescriptorSets(swapChainImages);
+   modelPipeline.createDescriptorPool(swapChainImages.size());
+   modelPipeline.createDescriptorSets(swapChainImages.size());
 
    currentRenderScreenFn = &VulkanGame::renderMainScreen;
@@ -270,5 +270,5 @@
    modelPipeline = GraphicsPipeline_Vulkan<ModelVertex>(
       VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, physicalDevice, device, renderPass,
-      { 0, 0, (int)swapChainExtent.width, (int)swapChainExtent.height }, swapChainImages, 16, 24);
+      { 0, 0, (int)swapChainExtent.width, (int)swapChainExtent.height }, 16, 24);
 
    createBufferSet(objects_modelPipeline.capacity * sizeof(SSBO_ModelObject),
@@ -1266,6 +1266,6 @@
    modelPipeline.updateRenderPass(renderPass);
    modelPipeline.createPipeline("shaders/model-vert.spv", "shaders/model-frag.spv");
-   modelPipeline.createDescriptorPool(swapChainImages);
-   modelPipeline.createDescriptorSets(swapChainImages);
+   modelPipeline.createDescriptorPool(swapChainImages.size());
+   modelPipeline.createDescriptorSets(swapChainImages.size());
 
    imageIndex = 0;
Index: sdl-game.hpp
===================================================================
--- sdl-game.hpp	(revision c163d8158510ee4d7f382dca6d405e0fbecdf4f3)
+++ sdl-game.hpp	(revision 58453c33b77d79596424d05cd7fd3cfc75574498)
@@ -292,6 +292,4 @@
                            BufferSet& set);
 
-      // TODO: See if it makes sense to rename this to resizeBufferSet() and use it to resize other types of buffers as well
-      // TODO: Remove the need for templating, which is only there so a GraphicsPupeline_Vulkan can be passed in
       template<class VertexType, class SSBOType>
       void resizeBufferSet(BufferSet& set, VulkanBuffer<SSBOType>& buffer,
@@ -378,5 +376,5 @@
    // Assume the SSBO is always the 2nd binding
    // TODO: Figure out a way to make this more flexible
-   pipeline.updateDescriptorInfo(1, &set.infoSet, swapChainImages);
+   pipeline.updateDescriptorInfo(1, &set.infoSet, swapChainImages.size());
 }
 
Index: vulkan-game.cpp
===================================================================
--- vulkan-game.cpp	(revision c163d8158510ee4d7f382dca6d405e0fbecdf4f3)
+++ vulkan-game.cpp	(revision 58453c33b77d79596424d05cd7fd3cfc75574498)
@@ -194,6 +194,6 @@
    modelPipeline.createDescriptorSetLayout();
    modelPipeline.createPipeline("shaders/model-vert.spv", "shaders/model-frag.spv");
-   modelPipeline.createDescriptorPool(swapChainImages);
-   modelPipeline.createDescriptorSets(swapChainImages);
+   modelPipeline.createDescriptorPool(swapChainImages.size());
+   modelPipeline.createDescriptorSets(swapChainImages.size());
 
    // START UNREVIEWED SECTION
@@ -458,6 +458,6 @@
    shipPipeline.createDescriptorSetLayout();
    shipPipeline.createPipeline("shaders/ship-vert.spv", "shaders/ship-frag.spv");
-   shipPipeline.createDescriptorPool(swapChainImages);
-   shipPipeline.createDescriptorSets(swapChainImages);
+   shipPipeline.createDescriptorPool(swapChainImages.size());
+   shipPipeline.createDescriptorSets(swapChainImages.size());
 
    asteroidPipeline.addAttribute(VK_FORMAT_R32G32B32_SFLOAT, offset_of(&ModelVertex::pos));
@@ -478,6 +478,6 @@
    asteroidPipeline.createDescriptorSetLayout();
    asteroidPipeline.createPipeline("shaders/asteroid-vert.spv", "shaders/asteroid-frag.spv");
-   asteroidPipeline.createDescriptorPool(swapChainImages);
-   asteroidPipeline.createDescriptorSets(swapChainImages);
+   asteroidPipeline.createDescriptorPool(swapChainImages.size());
+   asteroidPipeline.createDescriptorSets(swapChainImages.size());
 
    laserPipeline.addAttribute(VK_FORMAT_R32G32B32_SFLOAT, offset_of(&LaserVertex::pos));
@@ -498,6 +498,6 @@
    laserPipeline.createDescriptorSetLayout();
    laserPipeline.createPipeline("shaders/laser-vert.spv", "shaders/laser-frag.spv");
-   laserPipeline.createDescriptorPool(swapChainImages);
-   laserPipeline.createDescriptorSets(swapChainImages);
+   laserPipeline.createDescriptorPool(swapChainImages.size());
+   laserPipeline.createDescriptorSets(swapChainImages.size());
 
    explosionPipeline.addAttribute(VK_FORMAT_R32G32B32_SFLOAT, offset_of(&ExplosionVertex::particleStartVelocity));
@@ -516,6 +516,6 @@
    explosionPipeline.createDescriptorSetLayout();
    explosionPipeline.createPipeline("shaders/explosion-vert.spv", "shaders/explosion-frag.spv");
-   explosionPipeline.createDescriptorPool(swapChainImages);
-   explosionPipeline.createDescriptorSets(swapChainImages);
+   explosionPipeline.createDescriptorPool(swapChainImages.size());
+   explosionPipeline.createDescriptorSets(swapChainImages.size());
 
    // END UNREVIEWED SECTION
@@ -619,5 +619,5 @@
    modelPipeline = GraphicsPipeline_Vulkan<ModelVertex>(
       VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, physicalDevice, device, renderPass,
-      { 0, 0, (int)swapChainExtent.width, (int)swapChainExtent.height }, swapChainImages, 24, 24);
+      { 0, 0, (int)swapChainExtent.width, (int)swapChainExtent.height }, 24, 24);
 
    createBufferSet(objects_modelPipeline.capacity * sizeof(SSBO_ModelObject),
@@ -628,5 +628,5 @@
    shipPipeline = GraphicsPipeline_Vulkan<ModelVertex>(
       VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, physicalDevice, device, renderPass,
-      { 0, 0, (int)swapChainExtent.width, (int)swapChainExtent.height }, swapChainImages, 138, 138);
+      { 0, 0, (int)swapChainExtent.width, (int)swapChainExtent.height }, 138, 138);
 
    createBufferSet(objects_shipPipeline.capacity * sizeof(SSBO_ModelObject),
@@ -637,5 +637,5 @@
    asteroidPipeline = GraphicsPipeline_Vulkan<ModelVertex>(
       VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, physicalDevice, device, renderPass,
-      { 0, 0, (int)swapChainExtent.width, (int)swapChainExtent.height }, swapChainImages, 24, 36);
+      { 0, 0, (int)swapChainExtent.width, (int)swapChainExtent.height }, 24, 36);
 
    createBufferSet(objects_asteroidPipeline.capacity * sizeof(SSBO_Asteroid),
@@ -646,5 +646,5 @@
    laserPipeline = GraphicsPipeline_Vulkan<LaserVertex>(
       VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, physicalDevice, device, renderPass,
-      { 0, 0, (int)swapChainExtent.width, (int)swapChainExtent.height }, swapChainImages, 8, 18);
+      { 0, 0, (int)swapChainExtent.width, (int)swapChainExtent.height }, 8, 18);
 
    createBufferSet(objects_laserPipeline.capacity * sizeof(SSBO_Laser),
@@ -656,5 +656,5 @@
       VK_PRIMITIVE_TOPOLOGY_POINT_LIST, physicalDevice, device, renderPass,
       { 0, 0, (int)swapChainExtent.width, (int)swapChainExtent.height },
-      swapChainImages, EXPLOSION_PARTICLE_COUNT, EXPLOSION_PARTICLE_COUNT);
+      EXPLOSION_PARTICLE_COUNT, EXPLOSION_PARTICLE_COUNT);
 
    createBufferSet(objects_explosionPipeline.capacity * sizeof(SSBO_Explosion),
@@ -2226,6 +2226,6 @@
    modelPipeline.updateRenderPass(renderPass);
    modelPipeline.createPipeline("shaders/model-vert.spv", "shaders/model-frag.spv");
-   modelPipeline.createDescriptorPool(swapChainImages);
-   modelPipeline.createDescriptorSets(swapChainImages);
+   modelPipeline.createDescriptorPool(swapChainImages.size());
+   modelPipeline.createDescriptorSets(swapChainImages.size());
 
    createBufferSet(sizeof(UBO_VP_mats),
@@ -2235,6 +2235,6 @@
    shipPipeline.updateRenderPass(renderPass);
    shipPipeline.createPipeline("shaders/ship-vert.spv", "shaders/ship-frag.spv");
-   shipPipeline.createDescriptorPool(swapChainImages);
-   shipPipeline.createDescriptorSets(swapChainImages);
+   shipPipeline.createDescriptorPool(swapChainImages.size());
+   shipPipeline.createDescriptorSets(swapChainImages.size());
 
    createBufferSet(sizeof(UBO_VP_mats),
@@ -2244,6 +2244,6 @@
    asteroidPipeline.updateRenderPass(renderPass);
    asteroidPipeline.createPipeline("shaders/asteroid-vert.spv", "shaders/asteroid-frag.spv");
-   asteroidPipeline.createDescriptorPool(swapChainImages);
-   asteroidPipeline.createDescriptorSets(swapChainImages);
+   asteroidPipeline.createDescriptorPool(swapChainImages.size());
+   asteroidPipeline.createDescriptorSets(swapChainImages.size());
 
    createBufferSet(sizeof(UBO_VP_mats),
@@ -2253,6 +2253,6 @@
    laserPipeline.updateRenderPass(renderPass);
    laserPipeline.createPipeline("shaders/laser-vert.spv", "shaders/laser-frag.spv");
-   laserPipeline.createDescriptorPool(swapChainImages);
-   laserPipeline.createDescriptorSets(swapChainImages);
+   laserPipeline.createDescriptorPool(swapChainImages.size());
+   laserPipeline.createDescriptorSets(swapChainImages.size());
 
    createBufferSet(sizeof(UBO_Explosion),
@@ -2262,6 +2262,6 @@
    explosionPipeline.updateRenderPass(renderPass);
    explosionPipeline.createPipeline("shaders/explosion-vert.spv", "shaders/explosion-frag.spv");
-   explosionPipeline.createDescriptorPool(swapChainImages);
-   explosionPipeline.createDescriptorSets(swapChainImages);
+   explosionPipeline.createDescriptorPool(swapChainImages.size());
+   explosionPipeline.createDescriptorSets(swapChainImages.size());
 
    imageIndex = 0;
Index: vulkan-game.hpp
===================================================================
--- vulkan-game.hpp	(revision c163d8158510ee4d7f382dca6d405e0fbecdf4f3)
+++ vulkan-game.hpp	(revision 58453c33b77d79596424d05cd7fd3cfc75574498)
@@ -435,6 +435,4 @@
                            BufferSet& set);
 
-      // TODO: See if it makes sense to rename this to resizeBufferSet() and use it to resize other types of buffers as well
-      // TODO: Remove the need for templating, which is only there so a GraphicsPupeline_Vulkan can be passed in
       template<class VertexType, class SSBOType>
       void resizeBufferSet(BufferSet& set, VulkanBuffer<SSBOType>& buffer,
@@ -541,5 +539,5 @@
    // Assume the SSBO is always the 2nd binding
    // TODO: Figure out a way to make this more flexible
-   pipeline.updateDescriptorInfo(1, &set.infoSet, swapChainImages);
+   pipeline.updateDescriptorInfo(1, &set.infoSet, swapChainImages.size());
 }
 
