Index: new-game.cpp
===================================================================
--- new-game.cpp	(revision b62c109ac6409e2e43e1db20ba30cddda206573d)
+++ new-game.cpp	(revision dd9771cac122d0ed1b2280c086e6bed85e6fe504)
@@ -66,5 +66,4 @@
    mat4 model_mat, model_base, model_transform;
    mat4 translate_mat; // beginning of doing what's mentioned above
-   GLuint shader_program;
    unsigned int num_points;
    GLuint vertex_vbo_offset;
@@ -202,8 +201,8 @@
 
 // TODO: instead of using these methods, create constructors for these
-SceneObject* createShip(GLuint shader);
-Asteroid* createAsteroid(vec3 pos, GLuint shader);
-Laser* createLaser(vec3 start, vec3 end, vec3 color, GLfloat width, GLuint laser_sp);
-SceneObject* createExplosion(GLuint shader);
+SceneObject* createShip();
+Asteroid* createAsteroid(vec3 pos);
+Laser* createLaser(vec3 start, vec3 end, vec3 color, GLfloat width);
+SceneObject* createExplosion();
 
 void translateLaser(Laser* laser, const vec3& translation, GLuint ubo);
@@ -479,5 +478,5 @@
 
    // player ship
-   SceneObject* ship = createShip(modelGroups[TYPE_SHIP].shaderProgram);
+   SceneObject* ship = createShip();
    objects.push_back(ship);
 
@@ -750,5 +749,5 @@
          elapsed_seconds_spawn += elapsed_seconds;
          if (elapsed_seconds_spawn > 0.5f) {
-            SceneObject* obj = createAsteroid(vec3(getRandomNum(-1.3f, 1.3f), -1.2f, getRandomNum(-5.5f, -4.5f)), modelGroups[TYPE_ASTEROID].shaderProgram);
+            SceneObject* obj = createAsteroid(vec3(getRandomNum(-1.3f, 1.3f), -1.2f, getRandomNum(-5.5f, -4.5f)));
             addObjectToScene(obj, shaderBufferInfo, modelGroups,
                points_vbo,
@@ -807,6 +806,8 @@
             vec3 offset(objects[0]->model_transform * vec4(0.0f, 0.0f, 0.0f, 1.0f));
 
-            leftLaser = createLaser(vec3(-0.21f, -1.19f, 1.76f)+offset, vec3(-0.21f, -1.19f, -3.0f)+offset,
-               vec3(0.0f, 1.0f, 0.0f), 0.03f, modelGroups[TYPE_LASER].shaderProgram);
+            leftLaser = createLaser(
+               vec3(-0.21f, -1.19f, 1.76f)+offset,
+               vec3(-0.21f, -1.19f, -3.0f)+offset,
+               vec3(0.0f, 1.0f, 0.0f), 0.03f);
             addObjectToScene(leftLaser, shaderBufferInfo, modelGroups,
                points_vbo,
@@ -823,6 +824,8 @@
             vec3 offset(objects[0]->model_transform * vec4(0.0f, 0.0f, 0.0f, 1.0f));
 
-            rightLaser = createLaser(vec3(0.21f, -1.19f, 1.76f) + offset, vec3(0.21f, -1.19f, -3.0f) + offset,
-               vec3(0.0f, 1.0f, 0.0f), 0.03f, modelGroups[TYPE_LASER].shaderProgram);
+            rightLaser = createLaser(
+               vec3(0.21f, -1.19f, 1.76f) + offset,
+               vec3(0.21f, -1.19f, -3.0f) + offset,
+               vec3(0.0f, 1.0f, 0.0f), 0.03f);
             addObjectToScene(rightLaser, shaderBufferInfo, modelGroups,
                points_vbo,
@@ -1329,5 +1332,5 @@
    objects.push_back(obj);
 
-   BufferInfo* bufferInfo = &shaderBufferInfo[obj->shader_program];
+   BufferInfo* bufferInfo = &shaderBufferInfo[modelGroups[obj->type].shaderProgram];
 
    // Check if the buffers aren't large enough to fit the new object and, if so, call
@@ -1425,9 +1428,8 @@
 }
 
-SceneObject* createShip(GLuint shader) {
+SceneObject* createShip() {
    SceneObject* ship = new SceneObject();
 
    ship->type = TYPE_SHIP;
-   ship->shader_program = shader;
 
    ship->points = {
@@ -1822,9 +1824,8 @@
 */
 // TODO: Make the color parameter have an effect
-Laser* createLaser(vec3 start, vec3 end, vec3 color, GLfloat width, GLuint laser_sp) {
+Laser* createLaser(vec3 start, vec3 end, vec3 color, GLfloat width) {
    Laser* obj = new Laser();
    obj->type = TYPE_LASER;
    obj->targetAsteroid = NULL;
-   obj->shader_program = laser_sp;
 
    vec3 ray = end - start;
@@ -2001,5 +2002,5 @@
    glVertexAttribPointer(1, 1, GL_FLOAT, GL_FALSE, 0, NULL);
 
-   objExplosion = createExplosion(modelGroups[TYPE_EXPLOSION].shaderProgram);
+   objExplosion = createExplosion();
    addObjectToScene(objExplosion, shaderBufferInfo, modelGroups,
       points_vbo,
@@ -2049,6 +2050,6 @@
          num_objects++;
 
-         shaderCounts[(*it)->shader_program] += (*it)->num_points;
-         shaderUboCounts[(*it)->shader_program]++;
+         shaderCounts[modelGroups[(*it)->type].shaderProgram] += (*it)->num_points;
+         shaderUboCounts[modelGroups[(*it)->type].shaderProgram]++;
 
          it++;
@@ -2131,5 +2132,5 @@
                   GLuint ubo,
                   GLuint model_mat_idx_vbo) {
-   BufferInfo* bufferInfo = &shaderBufferInfo[obj.shader_program];
+   BufferInfo* bufferInfo = &shaderBufferInfo[modelGroups[obj.type].shaderProgram];
 
    obj.vertex_vbo_offset = bufferInfo->vbo_base + modelGroups[obj.type].numPoints;
@@ -2470,8 +2471,7 @@
 }
 
-Asteroid* createAsteroid(vec3 pos, GLuint shader) {
+Asteroid* createAsteroid(vec3 pos) {
    Asteroid* obj = new Asteroid();
    obj->type = TYPE_ASTEROID;
-   obj->shader_program = shader;
    obj->hp = 10.0f;
 
@@ -2593,8 +2593,7 @@
 }
 
-SceneObject* createExplosion(GLuint shader) {
+SceneObject* createExplosion() {
    SceneObject* obj = new SceneObject();
    obj->type = TYPE_EXPLOSION;
-   obj->shader_program = shader;
 
    obj->points = {};
