Index: gl-shaders/explosion.vert
===================================================================
--- gl-shaders/explosion.vert	(revision 73a10caea6c4ac9731862d7f1ed503afd065643b)
+++ gl-shaders/explosion.vert	(revision 52a02e69e392cc9a436263ac91bd0660624c2b95)
@@ -36,7 +36,9 @@
    }
 
-   vec3 p = vec3(0.0, 0.0, 0.0); //  this is the center of the explosion
-   vec3 a = vec3(0.0, 0.1, 0.0);
-   p += normalize(v_i) * mod(t, duration) / duration * 0.3; // allow time to loop around so particle emitter keeps going
+   //  this is the center of the explosion
+   vec3 p = vec3(0.0, 0.0, 0.0);
+
+   // allow time to loop around so particle emitter keeps going
+   p += normalize(v_i) * mod(t, duration) / duration * 0.3;
 
    gl_Position = proj * view * model_mats[ubo_index] * vec4(p, 1.0);
Index: graphics-pipeline_vulkan.hpp
===================================================================
--- graphics-pipeline_vulkan.hpp	(revision 73a10caea6c4ac9731862d7f1ed503afd065643b)
+++ graphics-pipeline_vulkan.hpp	(revision 52a02e69e392cc9a436263ac91bd0660624c2b95)
@@ -49,6 +49,6 @@
       // 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(VkPhysicalDevice physicalDevice, VkDevice device, VkRenderPass renderPass,
-         Viewport viewport, vector<VkImage>& swapChainImages,
+      GraphicsPipeline_Vulkan(VkPrimitiveTopology topology, VkPhysicalDevice physicalDevice, VkDevice device,
+         VkRenderPass renderPass, Viewport viewport, vector<VkImage>& swapChainImages,
          size_t vertexCapacity, size_t indexCapacity, size_t objectCapacity);
       ~GraphicsPipeline_Vulkan();
@@ -86,4 +86,5 @@
    
    private:
+      VkPrimitiveTopology topology;
       VkPhysicalDevice physicalDevice;
       VkDevice device;
@@ -136,7 +137,8 @@
 template<class VertexType, class SSBOType>
 GraphicsPipeline_Vulkan<VertexType, SSBOType>::GraphicsPipeline_Vulkan(
-      VkPhysicalDevice physicalDevice, VkDevice device,
+      VkPrimitiveTopology topology, VkPhysicalDevice physicalDevice, VkDevice device,
       VkRenderPass renderPass, Viewport viewport, vector<VkImage>& swapChainImages,
       size_t vertexCapacity, size_t indexCapacity, size_t objectCapacity) {
+   this->topology = topology;
    this->physicalDevice = physicalDevice;
    this->device = device;
@@ -274,5 +276,5 @@
    VkPipelineInputAssemblyStateCreateInfo inputAssembly = {};
    inputAssembly.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO;
-   inputAssembly.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;
+   inputAssembly.topology = this->topology;
    inputAssembly.primitiveRestartEnable = VK_FALSE;
 
Index: vulkan-game.cpp
===================================================================
--- vulkan-game.cpp	(revision 73a10caea6c4ac9731862d7f1ed503afd065643b)
+++ vulkan-game.cpp	(revision 52a02e69e392cc9a436263ac91bd0660624c2b95)
@@ -519,4 +519,9 @@
       }, false);
 
+   ship.model_base =
+      translate(mat4(1.0f), vec3(0.0f, -1.2f, 1.65f)) *
+      scale(mat4(1.0f), vec3(0.1f, 0.1f, 0.1f));
+   ship.modified = true;
+
    shipPipeline.createDescriptorSetLayout();
    shipPipeline.createPipeline("shaders/ship-vert.spv", "shaders/ship-frag.spv");
@@ -564,25 +569,25 @@
 
    createSyncObjects();
-
-   ship.model_base =
-      translate(mat4(1.0f), vec3(0.0f, -1.2f, 1.65f)) *
-      scale(mat4(1.0f), vec3(0.1f, 0.1f, 0.1f));
-   ship.modified = true;
 }
 
 void VulkanGame::initGraphicsPipelines() {
-   overlayPipeline = GraphicsPipeline_Vulkan<OverlayVertex, void*>(physicalDevice, device, renderPass,
+   overlayPipeline = GraphicsPipeline_Vulkan<OverlayVertex, void*>(
+      VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, physicalDevice, device, renderPass,
       { 0, 0, (int)swapChainExtent.width, (int)swapChainExtent.height }, swapChainImages, 4, 6, 0);
 
-   modelPipeline = GraphicsPipeline_Vulkan<ModelVertex, SSBO_ModelObject>(physicalDevice, device, renderPass,
+   modelPipeline = GraphicsPipeline_Vulkan<ModelVertex, SSBO_ModelObject>(
+      VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, physicalDevice, device, renderPass,
       { 0, 0, (int)swapChainExtent.width, (int)swapChainExtent.height }, swapChainImages, 16, 24, 10);
 
-   shipPipeline = GraphicsPipeline_Vulkan<ShipVertex, SSBO_ModelObject>(physicalDevice, device, renderPass,
+   shipPipeline = GraphicsPipeline_Vulkan<ShipVertex, SSBO_ModelObject>(
+      VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, physicalDevice, device, renderPass,
       { 0, 0, (int)swapChainExtent.width, (int)swapChainExtent.height }, swapChainImages, 138, 138, 10);
 
-   asteroidPipeline = GraphicsPipeline_Vulkan<AsteroidVertex, SSBO_Asteroid>(physicalDevice, device, renderPass,
+   asteroidPipeline = GraphicsPipeline_Vulkan<AsteroidVertex, SSBO_Asteroid>(
+      VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, physicalDevice, device, renderPass,
       { 0, 0, (int)swapChainExtent.width, (int)swapChainExtent.height }, swapChainImages, 24, 36, 10);
 
-   laserPipeline = GraphicsPipeline_Vulkan<LaserVertex, SSBO_Laser>(physicalDevice, device, renderPass,
+   laserPipeline = GraphicsPipeline_Vulkan<LaserVertex, SSBO_Laser>(
+      VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, physicalDevice, device, renderPass,
       { 0, 0, (int)swapChainExtent.width, (int)swapChainExtent.height }, swapChainImages, 8, 18, 2);
 }
@@ -1571,5 +1576,5 @@
 }
 
-void VulkanGame::addLaser( vec3 start, vec3 end, vec3 color, float width) {
+void VulkanGame::addLaser(vec3 start, vec3 end, vec3 color, float width) {
    vec3 ray = end - start;
    float length = glm::length(ray);
Index: vulkan-game.hpp
===================================================================
--- vulkan-game.hpp	(revision 73a10caea6c4ac9731862d7f1ed503afd065643b)
+++ vulkan-game.hpp	(revision 52a02e69e392cc9a436263ac91bd0660624c2b95)
@@ -57,9 +57,4 @@
 };
 
-struct UBO_VP_mats {
-   alignas(16) mat4 view;
-   alignas(16) mat4 proj;
-};
-
 struct SSBO_ModelObject {
    alignas(16) mat4 model;
@@ -76,4 +71,9 @@
    alignas(4) vec3 color;
    alignas(4) unsigned int deleted;
+};
+
+struct UBO_VP_mats {
+   alignas(16) mat4 view;
+   alignas(16) mat4 proj;
 };
 
@@ -175,4 +175,6 @@
 
    private:
+      // TODO: Make these consts static
+
       const int MAX_FRAMES_IN_FLIGHT;
 
@@ -334,10 +336,4 @@
       void createSyncObjects();
 
-      void addLaser(vec3 start, vec3 end, vec3 color, float width);
-      void translateLaser(size_t index, const vec3& translation);
-      void updateLaserTarget(size_t index);
-      bool getLaserAndAsteroidIntersection(SceneObject<AsteroidVertex, SSBO_Asteroid>& asteroid,
-            vec3& start, vec3& end, vec3& intersection);
-
       // TODO: Since addObject() returns a reference to the new object now,
       // stop using objects.back() to access the object that was just created
@@ -365,4 +361,10 @@
       template<class VertexType, class SSBOType>
       void centerObject(SceneObject<VertexType, SSBOType>& object);
+
+      void addLaser(vec3 start, vec3 end, vec3 color, float width);
+      void translateLaser(size_t index, const vec3& translation);
+      void updateLaserTarget(size_t index);
+      bool getLaserAndAsteroidIntersection(SceneObject<AsteroidVertex, SSBO_Asteroid>& asteroid,
+            vec3& start, vec3& end, vec3& intersection);
 
       void createBufferSet(VkDeviceSize bufferSize, VkBufferUsageFlags flags,
