Changeset 0414306 in opengl-game for new-game.cpp


Ignore:
Timestamp:
Feb 6, 2019, 4:33:22 AM (6 years ago)
Author:
Dmitry Portnoy <dmp1488@…>
Branches:
feature/imgui-sdl, master, points-test
Children:
4c7cd57
Parents:
7a55b49
Message:

Create a map of ShaderModelGroups and use it for asteroids and explosions

File:
1 edited

Legend:

Unmodified
Added
Removed
  • new-game.cpp

    r7a55b49 r0414306  
    143143void addObjectToScene(SceneObject* obj,
    144144                  map<GLuint, BufferInfo>& shaderBufferInfo,
     145                  map<ObjectType, ShaderModelGroup>& modelGroups,
    145146                  GLuint points_vbo,
    146147                  GLuint colors_vbo,
     
    148149                  GLuint normals_vbo,
    149150                  GLuint ubo,
    150                   GLuint model_mat_idx_vbo,
    151                   GLuint asteroid_sp);
     151                  GLuint model_mat_idx_vbo);
    152152void removeObjectFromScene(SceneObject& obj, GLuint ubo);
    153153
     
    166166                  GLuint* model_mat_idx_vbo);
    167167
    168 ShaderModelGroup initializeParticleEffectBuffers(vec3 origin, mat4 proj, mat4 view, GLuint explosion_sp,
     168void initializeParticleEffectBuffers(vec3 origin, mat4 proj, mat4 view,
    169169                  map<GLuint, BufferInfo>& shaderBufferInfo,
     170                  map<ObjectType, ShaderModelGroup>& modelGroups,
    170171                  GLuint points_vbo,
    171172                  GLuint colors_vbo,
     
    177178void populateBuffers(vector<SceneObject*>& objects,
    178179                  map<GLuint, BufferInfo>& shaderBufferInfo,
     180                  map<ObjectType, ShaderModelGroup>& modelGroups,
    179181                  GLuint points_vbo,
    180182                  GLuint colors_vbo,
     
    182184                  GLuint normals_vbo,
    183185                  GLuint ubo,
    184                   GLuint model_mat_idx_vbo,
    185                   GLuint asteroid_sp);
     186                  GLuint model_mat_idx_vbo);
    186187
    187188void copyObjectDataToBuffers(SceneObject& obj,
    188189                  map<GLuint, BufferInfo>& shaderBufferInfo,
     190                  map<ObjectType, ShaderModelGroup>& modelGroups,
    189191                  GLuint points_vbo,
    190192                  GLuint colors_vbo,
     
    192194                  GLuint normals_vbo,
    193195                  GLuint ubo,
    194                   GLuint model_mat_idx_vbo,
    195                   GLuint asteroid_sp);
     196                  GLuint model_mat_idx_vbo);
    196197
    197198void transformObject(SceneObject& obj, const mat4& transform, GLuint ubo);
     
    210211void renderMainMenuGui();
    211212
    212 void renderScene(map<GLuint, BufferInfo>& shaderBufferInfo, GLuint ubo,
    213                   GLuint ship_sp, GLuint asteroid_sp, GLuint laser_sp,
    214                   GLuint ship_vao, GLuint asteroid_vao, GLuint laser_vao,
    215                   ShaderModelGroup& explosion_group);
     213void renderScene(map<GLuint, BufferInfo>& shaderBufferInfo,
     214                  map<ObjectType, ShaderModelGroup>& modelGroups, GLuint ubo,
     215                  GLuint ship_sp, GLuint laser_sp,
     216                  GLuint ship_vao, GLuint laser_vao);
    216217
    217218void renderSceneGui();
     
    454455
    455456   map<GLuint, BufferInfo> shaderBufferInfo;
     457   map<ObjectType, ShaderModelGroup> modelGroups;
    456458
    457459   GLuint ship_sp = loadShaderProgram("./ship.vert", "./ship.frag");
    458    GLuint asteroid_sp = loadShaderProgram("./asteroid.vert", "./asteroid.frag");
    459460   GLuint laser_sp = loadShaderProgram("./laser.vert", "./laser.frag");
    460    GLuint explosion_sp = loadShaderProgram("./explosion.vert", "./explosion.frag");
    461461
    462462   shaderBufferInfo[ship_sp] = BufferInfo();
    463    shaderBufferInfo[asteroid_sp] = BufferInfo();
    464463   shaderBufferInfo[laser_sp] = BufferInfo();
    465    shaderBufferInfo[explosion_sp] = BufferInfo();
     464
     465   modelGroups[TYPE_ASTEROID] = createModelGroup(
     466      loadShaderProgram("./asteroid.vert", "./asteroid.frag"));
     467   shaderBufferInfo[modelGroups[TYPE_ASTEROID].shaderProgram] = BufferInfo(); // temporary
     468   modelGroups[TYPE_EXPLOSION] = createModelGroup(
     469      loadShaderProgram("./explosion.vert", "./explosion.frag"));
     470   shaderBufferInfo[modelGroups[TYPE_EXPLOSION].shaderProgram] = BufferInfo(); // temporary
    466471
    467472   cam_pos = vec3(0.0f, 0.0f, 2.0f);
     
    486491
    487492   populateBuffers(objects,
    488       shaderBufferInfo,
     493      shaderBufferInfo, modelGroups,
    489494      points_vbo,
    490495      colors_vbo,
     
    492497      normals_vbo,
    493498      ubo,
    494       model_mat_idx_vbo,
    495       asteroid_sp);
     499      model_mat_idx_vbo);
    496500
    497501   GLuint ship_vao = 0;
     
    517521   glVertexAttribIPointer(3, 1, GL_UNSIGNED_INT, 0, NULL);
    518522
    519    GLuint asteroid_vao = 0;
    520    glGenVertexArrays(1, &asteroid_vao);
    521    glBindVertexArray(asteroid_vao);
     523   glBindVertexArray(modelGroups[TYPE_ASTEROID].vao);
    522524
    523525   glEnableVertexAttribArray(0);
     
    587589   proj_mat = make_mat4(proj_arr);
    588590
    589    ShaderModelGroup explosion_group = initializeParticleEffectBuffers(vec3(0.0f, -1.2f, 0.65f), proj_mat, view_mat,
    590       explosion_sp,
     591   initializeParticleEffectBuffers(vec3(0.0f, -1.2f, 0.65f), proj_mat, view_mat,
    591592      shaderBufferInfo,
     593      modelGroups,
    592594      points_vbo,
    593595      colors_vbo,
     
    637639   GLuint ship_sp_models_ub_index = glGetUniformBlockIndex(ship_sp, "models");
    638640
    639    GLuint asteroid_view_mat_loc = glGetUniformLocation(asteroid_sp, "view");
    640    GLuint asteroid_proj_mat_loc = glGetUniformLocation(asteroid_sp, "proj");
    641    GLuint asteroid_sp_models_ub_index = glGetUniformBlockIndex(asteroid_sp, "models");
     641   GLuint asteroid_view_mat_loc = glGetUniformLocation(modelGroups[TYPE_ASTEROID].shaderProgram, "view");
     642   GLuint asteroid_proj_mat_loc = glGetUniformLocation(modelGroups[TYPE_ASTEROID].shaderProgram, "proj");
     643   GLuint asteroid_sp_models_ub_index = glGetUniformBlockIndex(modelGroups[TYPE_ASTEROID].shaderProgram, "models");
    642644
    643645   GLuint laser_view_mat_loc = glGetUniformLocation(laser_sp, "view");
     
    646648   GLuint laser_sp_models_ub_index = glGetUniformBlockIndex(laser_sp, "models");
    647649
    648    GLuint explosion_start_time_loc = glGetUniformLocation(explosion_sp, "explosion_start_time");
    649    GLuint cur_time_loc = glGetUniformLocation(explosion_sp, "cur_time");
    650    GLuint explosion_sp_models_ub_index = glGetUniformBlockIndex(explosion_sp, "models");
     650   GLuint explosion_start_time_loc = glGetUniformLocation(modelGroups[TYPE_EXPLOSION].shaderProgram, "explosion_start_time");
     651   GLuint cur_time_loc = glGetUniformLocation(modelGroups[TYPE_EXPLOSION].shaderProgram, "cur_time");
     652   GLuint explosion_sp_models_ub_index = glGetUniformBlockIndex(modelGroups[TYPE_EXPLOSION].shaderProgram, "models");
    651653
    652654
     
    659661
    660662
    661    glUseProgram(asteroid_sp);
     663   glUseProgram(modelGroups[TYPE_ASTEROID].shaderProgram);
    662664   glUniformMatrix4fv(asteroid_view_mat_loc, 1, GL_FALSE, value_ptr(view_mat));
    663665   glUniformMatrix4fv(asteroid_proj_mat_loc, 1, GL_FALSE, value_ptr(proj_mat));
    664666
    665    glUniformBlockBinding(asteroid_sp, asteroid_sp_models_ub_index, ub_binding_point);
     667   glUniformBlockBinding(modelGroups[TYPE_ASTEROID].shaderProgram, asteroid_sp_models_ub_index, ub_binding_point);
    666668   glBindBufferRange(GL_UNIFORM_BUFFER, ub_binding_point, ubo, 0, GL_MAX_UNIFORM_BLOCK_SIZE);
    667669
     
    676678
    677679
    678    glUseProgram(explosion_sp);
    679    glUniformBlockBinding(explosion_sp, explosion_sp_models_ub_index, ub_binding_point);
     680   glUseProgram(modelGroups[TYPE_EXPLOSION].shaderProgram);
     681   glUniformBlockBinding(modelGroups[TYPE_EXPLOSION].shaderProgram, explosion_sp_models_ub_index, ub_binding_point);
    680682   glBindBufferRange(GL_UNIFORM_BUFFER, ub_binding_point, ubo, 0, GL_MAX_UNIFORM_BLOCK_SIZE);
    681683
     
    748750         elapsed_seconds_spawn += elapsed_seconds;
    749751         if (elapsed_seconds_spawn > 0.5f) {
    750             SceneObject* obj = createAsteroid(vec3(getRandomNum(-1.3f, 1.3f), -1.2f, getRandomNum(-5.5f, -4.5f)), asteroid_sp);
    751             addObjectToScene(obj, shaderBufferInfo,
     752            SceneObject* obj = createAsteroid(vec3(getRandomNum(-1.3f, 1.3f), -1.2f, getRandomNum(-5.5f, -4.5f)), modelGroups[TYPE_ASTEROID].shaderProgram);
     753            addObjectToScene(obj, shaderBufferInfo, modelGroups,
    752754               points_vbo,
    753755               colors_vbo,
     
    755757               normals_vbo,
    756758               ubo,
    757                model_mat_idx_vbo,
    758                asteroid_sp);
     759               model_mat_idx_vbo);
    759760
    760761            elapsed_seconds_spawn -= 0.5f;
     
    808809            leftLaser = createLaser(vec3(-0.21f, -1.19f, 1.76f)+offset, vec3(-0.21f, -1.19f, -3.0f)+offset,
    809810               vec3(0.0f, 1.0f, 0.0f), 0.03f, laser_sp);
    810             addObjectToScene(leftLaser, shaderBufferInfo,
     811            addObjectToScene(leftLaser, shaderBufferInfo, modelGroups,
    811812               points_vbo,
    812813               colors_vbo,
     
    814815               normals_vbo,
    815816               ubo,
    816                model_mat_idx_vbo,
    817                asteroid_sp);
     817               model_mat_idx_vbo);
    818818         } else if (key_state[GLFW_KEY_Z] == GLFW_RELEASE) {
    819819            removeObjectFromScene(*leftLaser, ubo);
     
    825825            rightLaser = createLaser(vec3(0.21f, -1.19f, 1.76f) + offset, vec3(0.21f, -1.19f, -3.0f) + offset,
    826826               vec3(0.0f, 1.0f, 0.0f), 0.03f, laser_sp);
    827             addObjectToScene(rightLaser, shaderBufferInfo,
     827            addObjectToScene(rightLaser, shaderBufferInfo, modelGroups,
    828828               points_vbo,
    829829               colors_vbo,
     
    831831               normals_vbo,
    832832               ubo,
    833                model_mat_idx_vbo,
    834                asteroid_sp);
     833               model_mat_idx_vbo);
    835834         } else if (key_state[GLFW_KEY_X] == GLFW_RELEASE) {
    836835            removeObjectFromScene(*rightLaser, ubo);
     
    859858
    860859                  // initiate an explosion
    861                   glUseProgram(explosion_sp);
    862 
    863                   GLuint model_mat_loc = glGetUniformLocation(explosion_sp, "model_mat");
     860                  glUseProgram(modelGroups[TYPE_EXPLOSION].shaderProgram);
     861
     862                  GLuint model_mat_loc = glGetUniformLocation(modelGroups[TYPE_EXPLOSION].shaderProgram, "model_mat");
    864863                  glUniformMatrix4fv(model_mat_loc, 1, GL_FALSE, value_ptr(objExplosion->model_mat));
    865864
     
    870869
    871870         if (leftLaser != NULL && !leftLaser->deleted) {
    872             updateLaserTarget(leftLaser, objects, points_vbo, asteroid_sp);
     871            updateLaserTarget(leftLaser, objects, points_vbo, modelGroups[TYPE_ASTEROID].shaderProgram);
    873872         }
    874873         if (rightLaser != NULL && !rightLaser->deleted) {
    875             updateLaserTarget(rightLaser, objects, points_vbo, asteroid_sp);
     874            updateLaserTarget(rightLaser, objects, points_vbo, modelGroups[TYPE_ASTEROID].shaderProgram);
    876875         }
    877876      }
     
    956955      }
    957956
    958       glUseProgram(explosion_sp);
     957      glUseProgram(modelGroups[TYPE_EXPLOSION].shaderProgram);
    959958      glUniform1f(cur_time_loc, (GLfloat)current_seconds);
    960959
     
    969968            break;
    970969         case STATE_GAME:
    971             renderScene(shaderBufferInfo, ubo,
    972                ship_sp, asteroid_sp, laser_sp,
    973                ship_vao, asteroid_vao, laser_vao,
    974                explosion_group);
     970            renderScene(shaderBufferInfo, modelGroups, ubo,
     971               ship_sp, laser_sp,
     972               ship_vao, laser_vao);
    975973            renderSceneGui();
    976974            break;
     
    13241322void addObjectToScene(SceneObject* obj,
    13251323   map<GLuint, BufferInfo>& shaderBufferInfo,
     1324   map<ObjectType, ShaderModelGroup>& modelGroups,
    13261325   GLuint points_vbo,
    13271326   GLuint colors_vbo,
     
    13291328   GLuint normals_vbo,
    13301329   GLuint ubo,
    1331    GLuint model_mat_idx_vbo,
    1332    GLuint asteroid_sp) {
     1330   GLuint model_mat_idx_vbo) {
    13331331   objects.push_back(obj);
    13341332
    13351333   BufferInfo* bufferInfo = &shaderBufferInfo[obj->shader_program];
     1334
     1335   unsigned int numPoints = obj->type == TYPE_ASTEROID || obj->type == TYPE_EXPLOSION ?
     1336      modelGroups[obj->type].numPoints :
     1337      bufferInfo->vbo_offset;
    13361338
    13371339   // Check if the buffers aren't large enough to fit the new object and, if so, call
    13381340   // populateBuffers() to resize and repopupulate them
    1339    if (bufferInfo->vbo_capacity < (bufferInfo->vbo_offset + obj->num_points) ||
     1341   if (bufferInfo->vbo_capacity < (numPoints + obj->num_points) ||
    13401342      bufferInfo->ubo_capacity < (bufferInfo->ubo_offset + 1)) {
    13411343
     
    13471349      }
    13481350
    1349       populateBuffers(objects, shaderBufferInfo,
     1351      populateBuffers(objects, shaderBufferInfo, modelGroups,
    13501352         points_vbo,
    13511353         colors_vbo,
     
    13531355         normals_vbo,
    13541356         ubo,
    1355          model_mat_idx_vbo,
    1356          asteroid_sp);
     1357         model_mat_idx_vbo);
    13571358   } else {
    1358       copyObjectDataToBuffers(*objects.back(), shaderBufferInfo,
     1359      copyObjectDataToBuffers(*objects.back(), shaderBufferInfo, modelGroups,
    13591360         points_vbo,
    13601361         colors_vbo,
     
    13621363         normals_vbo,
    13631364         ubo,
    1364          model_mat_idx_vbo,
    1365          asteroid_sp);
     1365         model_mat_idx_vbo);
    13661366   }
    13671367}
     
    19081908
    19091909   smg.shaderProgram = shaderProgram;
     1910   glGenVertexArrays(1, &smg.vao);
     1911   smg.numPoints = 0;
    19101912
    19111913   return smg;
     
    19461948}
    19471949
    1948 ShaderModelGroup initializeParticleEffectBuffers(vec3 origin, mat4 proj, mat4 view, GLuint explosion_sp,
     1950void initializeParticleEffectBuffers(vec3 origin, mat4 proj, mat4 view,
    19491951                  map<GLuint, BufferInfo>& shaderBufferInfo,
     1952                  map<ObjectType, ShaderModelGroup>& modelGroups,
    19501953                  GLuint points_vbo,
    19511954                  GLuint colors_vbo,
     
    19711974   mat4 model_mat = translate(mat4(1.0f), origin);
    19721975
    1973    ShaderModelGroup modelGroup;
    1974    modelGroup.shaderProgram = explosion_sp;
    1975 
    1976    glUseProgram(modelGroup.shaderProgram);
    1977 
    1978    GLuint proj_mat_loc = glGetUniformLocation(explosion_sp, "proj");
    1979    GLuint view_mat_loc = glGetUniformLocation(explosion_sp, "view");
     1976   glUseProgram(modelGroups[TYPE_EXPLOSION].shaderProgram);
     1977
     1978   GLuint proj_mat_loc = glGetUniformLocation(modelGroups[TYPE_EXPLOSION].shaderProgram, "proj");
     1979   GLuint view_mat_loc = glGetUniformLocation(modelGroups[TYPE_EXPLOSION].shaderProgram, "view");
    19801980
    19811981   glUniformMatrix4fv(proj_mat_loc, 1, GL_FALSE, value_ptr(proj));
    19821982   glUniformMatrix4fv(view_mat_loc, 1, GL_FALSE, value_ptr(view));
    19831983
    1984    GLuint model_mat_loc = glGetUniformLocation(explosion_sp, "model_mat");
     1984   GLuint model_mat_loc = glGetUniformLocation(modelGroups[TYPE_EXPLOSION].shaderProgram, "model_mat");
    19851985
    19861986   glUniformMatrix4fv(model_mat_loc, 1, GL_FALSE, value_ptr(model_mat));
     
    19961996   glBufferData(GL_ARRAY_BUFFER, sizeof(vt), vt, GL_STATIC_DRAW);
    19971997
    1998    glGenVertexArrays(1, &modelGroup.vao);
    1999    glBindVertexArray(modelGroup.vao);
     1998   glBindVertexArray(modelGroups[TYPE_EXPLOSION].vao);
    20001999
    20012000   glEnableVertexAttribArray(0);
     
    20082007   glVertexAttribPointer(1, 1, GL_FLOAT, GL_FALSE, 0, NULL);
    20092008
    2010    objExplosion = createExplosion(modelGroup.shaderProgram);
    2011    addObjectToScene(objExplosion, shaderBufferInfo,
     2009   objExplosion = createExplosion(modelGroups[TYPE_EXPLOSION].shaderProgram);
     2010   addObjectToScene(objExplosion, shaderBufferInfo, modelGroups,
    20122011      points_vbo,
    20132012      colors_vbo,
     
    20152014      normals_vbo,
    20162015      ubo,
    2017       model_mat_idx_vbo,
    2018       0);
    2019 
    2020    return modelGroup;
     2016      model_mat_idx_vbo);
    20212017}
    20222018
    20232019void populateBuffers(vector<SceneObject*>& objects,
    20242020                  map<GLuint, BufferInfo>& shaderBufferInfo,
     2021                  map<ObjectType, ShaderModelGroup>& modelGroups,
    20252022                  GLuint points_vbo,
    20262023                  GLuint colors_vbo,
     
    20282025                  GLuint normals_vbo,
    20292026                  GLuint ubo,
    2030                   GLuint ubo_idx_vbo,
    2031                   GLuint asteroid_sp) {
     2027                  GLuint ubo_idx_vbo) {
    20322028   GLsizeiptr num_points = 0;
    20332029   GLsizeiptr num_objects = 0;
     
    20872083      shaderBufferInfo[shaderCountIt->first].ubo_base = lastShaderUboCount * 2;
    20882084
    2089       shaderBufferInfo[shaderCountIt->first].vbo_offset = 0;
     2085      if (shaderCountIt->first != modelGroups[TYPE_ASTEROID].shaderProgram &&
     2086         shaderCountIt->first != modelGroups[TYPE_EXPLOSION].shaderProgram) {
     2087         shaderBufferInfo[shaderCountIt->first].vbo_offset = 0;
     2088      }
    20902089      shaderBufferInfo[shaderCountIt->first].ubo_offset = 0;
    20912090
     
    20972096   }
    20982097
     2098   modelGroups[TYPE_ASTEROID].numPoints = 0;
     2099   modelGroups[TYPE_EXPLOSION].numPoints = 0;
     2100
    20992101   // Allocate all the buffers using the counts calculated above
    21002102
     
    21182120
    21192121   for (it = objects.begin(); it != objects.end(); it++) {
    2120       copyObjectDataToBuffers(**it, shaderBufferInfo,
     2122      copyObjectDataToBuffers(**it, shaderBufferInfo, modelGroups,
    21212123         points_vbo,
    21222124         colors_vbo,
     
    21242126         normals_vbo,
    21252127         ubo,
    2126          ubo_idx_vbo,
    2127          asteroid_sp);
     2128         ubo_idx_vbo);
    21282129   }
    21292130}
     
    21312132void copyObjectDataToBuffers(SceneObject& obj,
    21322133                  map<GLuint, BufferInfo>& shaderBufferInfo,
     2134                  map<ObjectType, ShaderModelGroup>& modelGroups,
    21332135                  GLuint points_vbo,
    21342136                  GLuint colors_vbo,
     
    21362138                  GLuint normals_vbo,
    21372139                  GLuint ubo,
    2138                   GLuint model_mat_idx_vbo,
    2139                   GLuint asteroid_sp) {
     2140                  GLuint model_mat_idx_vbo) {
    21402141   BufferInfo* bufferInfo = &shaderBufferInfo[obj.shader_program];
    21412142
    2142    obj.vertex_vbo_offset = bufferInfo->vbo_base + bufferInfo->vbo_offset;
     2143   if (obj.type == TYPE_ASTEROID || obj.type == TYPE_EXPLOSION) {
     2144      obj.vertex_vbo_offset = bufferInfo->vbo_base + modelGroups[obj.type].numPoints;
     2145   } else {
     2146      obj.vertex_vbo_offset = bufferInfo->vbo_base + bufferInfo->vbo_offset;
     2147   }
     2148   
    21432149   obj.ubo_offset = bufferInfo->ubo_base + bufferInfo->ubo_offset;
    21442150
     
    21722178
    21732179      if (obj.type == TYPE_ASTEROID) {
    2174          glUseProgram(asteroid_sp);
     2180         glUseProgram(modelGroups[TYPE_ASTEROID].shaderProgram);
    21752181
    21762182         ostringstream oss;
    21772183         oss << "hp[" << obj.ubo_offset << "]";
    2178          glUniform1f(glGetUniformLocation(asteroid_sp, oss.str().c_str()), ((Asteroid*)&obj)->hp);
    2179       }
    2180    }
    2181 
    2182    bufferInfo->vbo_offset += obj.num_points;
     2184         glUniform1f(glGetUniformLocation(modelGroups[TYPE_ASTEROID].shaderProgram, oss.str().c_str()), ((Asteroid*)&obj)->hp);
     2185      }
     2186   }
     2187
     2188   if (obj.type == TYPE_ASTEROID || obj.type == TYPE_EXPLOSION) {
     2189      modelGroups[obj.type].numPoints += obj.num_points;
     2190   } else {
     2191      bufferInfo->vbo_offset += obj.num_points;
     2192   }
    21832193   bufferInfo->ubo_offset++;
    21842194}
     
    23442354}
    23452355
    2346 void renderScene(map<GLuint, BufferInfo>& shaderBufferInfo, GLuint ubo,
    2347                   GLuint ship_sp, GLuint asteroid_sp, GLuint laser_sp,
    2348                   GLuint ship_vao, GLuint asteroid_vao, GLuint laser_vao,
    2349                   ShaderModelGroup& explosion_group) {
     2356void renderScene(map<GLuint, BufferInfo>& shaderBufferInfo,
     2357                  map<ObjectType, ShaderModelGroup>& modelGroups, GLuint ubo,
     2358                  GLuint ship_sp, GLuint laser_sp,
     2359                  GLuint ship_vao, GLuint laser_vao) {
    23502360
    23512361   glUseProgram(ship_sp);
     
    23542364   glDrawArrays(GL_TRIANGLES, shaderBufferInfo[ship_sp].vbo_base, shaderBufferInfo[ship_sp].vbo_offset);
    23552365
    2356    glUseProgram(asteroid_sp);
    2357    glBindVertexArray(asteroid_vao);
    2358 
    2359    glDrawArrays(GL_TRIANGLES, shaderBufferInfo[asteroid_sp].vbo_base, shaderBufferInfo[asteroid_sp].vbo_offset);
     2366   glUseProgram(modelGroups[TYPE_ASTEROID].shaderProgram);
     2367   glBindVertexArray(modelGroups[TYPE_ASTEROID].vao);
     2368
     2369   glDrawArrays(GL_TRIANGLES, shaderBufferInfo[modelGroups[TYPE_ASTEROID].shaderProgram].vbo_base, modelGroups[TYPE_ASTEROID].numPoints);
    23602370
    23612371   glEnable(GL_BLEND);
     
    23662376   glDrawArrays(GL_TRIANGLES, shaderBufferInfo[laser_sp].vbo_base, shaderBufferInfo[laser_sp].vbo_offset);
    23672377
    2368    // To render explosions, my new shader descriptor object needs to have a reference to the shader and the vao
    2369    // and know the number of points to render.
    2370 
    2371    glUseProgram(explosion_group.shaderProgram);
     2378   glUseProgram(modelGroups[TYPE_EXPLOSION].shaderProgram);
     2379   glBindVertexArray(modelGroups[TYPE_EXPLOSION].vao);
    23722380
    23732381   glEnable(GL_PROGRAM_POINT_SIZE);
    2374    glBindVertexArray(explosion_group.vao);
    23752382
    23762383   glBindBuffer(GL_UNIFORM_BUFFER, ubo);
    23772384   glBufferSubData(GL_UNIFORM_BUFFER, 0, sizeof(mat4), value_ptr(objExplosion->model_mat));
    23782385
    2379    glDrawArrays(GL_POINTS, 0, shaderBufferInfo[explosion_group.shaderProgram].vbo_offset);
     2386   glDrawArrays(GL_POINTS, 0, modelGroups[TYPE_EXPLOSION].numPoints);
    23802387
    23812388   glBindBuffer(GL_UNIFORM_BUFFER, ubo);
Note: See TracChangeset for help on using the changeset viewer.