Changes in / [bebfd5c:ae0c7f4] in opengl-game


Ignore:
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • explosion.vert

    rbebfd5c rae0c7f4  
    4141
    4242   //gl_Position = proj * view * model_mats[ubo_index] * vec4(p, 1.0);
    43    gl_Position = proj * view * model_mat * vec4(p, 1.0);
     43   gl_Position = proj * view * model_mats[0] * vec4(p, 1.0);
    4444   gl_PointSize = 15.0; // size in pixels
    4545}
  • new-game.cpp

    rbebfd5c rae0c7f4  
    7070   vector<GLfloat> texcoords;
    7171   vector<GLfloat> normals;
    72    vector<GLfloat> selected_colors;
    7372   bool deleted;
    7473   vec3 bounding_center;
     
    9291   SceneObject* effectedObject;
    9392
     93   // TODO: Why not just use an initializer list for all the instance variables
    9494   EffectOverTime(float& effectedValue, float changePerSecond, SceneObject* object)
    9595      : effectedValue(effectedValue), changePerSecond(changePerSecond), effectedObject(object) {
     
    139139                  GLuint points_vbo,
    140140                  GLuint colors_vbo,
    141                   GLuint selected_colors_vbo,
    142                   GLuint texcoords_vbo,
    143                   GLuint normals_vbo,
    144                   GLuint ubo,
    145                   GLuint model_mat_idx_vbo,
    146                   GLuint asteroid_sp,
    147                   GLuint explosion_sp);
    148 void removeObjectFromScene(SceneObject& obj, GLuint ubo);
    149 
    150 void calculateObjectBoundingBox(SceneObject* obj);
    151 
    152 void initializeBuffers(
    153                   GLuint* points_vbo,
    154                   GLuint* colors_vbo,
    155                   GLuint* selected_colors_vbo,
    156                   GLuint* texcoords_vbo,
    157                   GLuint* normals_vbo,
    158                   GLuint* ubo,
    159                   GLuint* model_mat_idx_vbo);
    160 
    161 GLuint initializeParticleEffectBuffers(vec3 origin, mat4 proj, mat4 view, GLuint explosion_sp,
    162                   map<GLuint, BufferInfo>& shaderBufferInfo,
    163                   GLuint points_vbo,
    164                   GLuint colors_vbo,
    165                   GLuint selected_colors_vbo,
    166                   GLuint texcoords_vbo,
    167                   GLuint normals_vbo,
    168                   GLuint ubo,
    169                   GLuint model_mat_idx_vbo);
    170 
    171 void populateBuffers(vector<SceneObject*>& objects,
    172                   map<GLuint, BufferInfo>& shaderBufferInfo,
    173                   GLuint points_vbo,
    174                   GLuint colors_vbo,
    175                   GLuint selected_colors_vbo,
    176                   GLuint texcoords_vbo,
    177                   GLuint normals_vbo,
    178                   GLuint ubo,
    179                   GLuint model_mat_idx_vbo,
    180                   GLuint asteroid_sp,
    181                   GLuint explosion_sp);
    182 
    183 void copyObjectDataToBuffers(SceneObject& obj,
    184                   map<GLuint, BufferInfo>& shaderBufferInfo,
    185                   GLuint points_vbo,
    186                   GLuint colors_vbo,
    187                   GLuint selected_colors_vbo,
    188141                  GLuint texcoords_vbo,
    189142                  GLuint normals_vbo,
     
    191144                  GLuint model_mat_idx_vbo,
    192145                  GLuint asteroid_sp);
     146void removeObjectFromScene(SceneObject& obj, GLuint ubo);
     147
     148void calculateObjectBoundingBox(SceneObject* obj);
     149
     150void initializeBuffers(
     151                  GLuint* points_vbo,
     152                  GLuint* colors_vbo,
     153                  GLuint* texcoords_vbo,
     154                  GLuint* normals_vbo,
     155                  GLuint* ubo,
     156                  GLuint* model_mat_idx_vbo);
     157
     158GLuint initializeParticleEffectBuffers(vec3 origin, mat4 proj, mat4 view, GLuint explosion_sp,
     159                  map<GLuint, BufferInfo>& shaderBufferInfo,
     160                  GLuint points_vbo,
     161                  GLuint colors_vbo,
     162                  GLuint texcoords_vbo,
     163                  GLuint normals_vbo,
     164                  GLuint ubo,
     165                  GLuint model_mat_idx_vbo);
     166
     167void populateBuffers(vector<SceneObject*>& objects,
     168                  map<GLuint, BufferInfo>& shaderBufferInfo,
     169                  GLuint points_vbo,
     170                  GLuint colors_vbo,
     171                  GLuint texcoords_vbo,
     172                  GLuint normals_vbo,
     173                  GLuint ubo,
     174                  GLuint model_mat_idx_vbo,
     175                  GLuint asteroid_sp);
     176
     177void copyObjectDataToBuffers(SceneObject& obj,
     178                  map<GLuint, BufferInfo>& shaderBufferInfo,
     179                  GLuint points_vbo,
     180                  GLuint colors_vbo,
     181                  GLuint texcoords_vbo,
     182                  GLuint normals_vbo,
     183                  GLuint ubo,
     184                  GLuint model_mat_idx_vbo,
     185                  GLuint asteroid_sp);
    193186
    194187void transformObject(SceneObject& obj, const mat4& transform, GLuint ubo);
    195188
    196 // instead of using these methods, create constructors for these
     189// TODO: instead of using these methods, create constructors for these
    197190SceneObject* createShip(GLuint shader);
    198191Asteroid* createAsteroid(vec3 pos, GLuint shader);
     
    208201
    209202void renderScene(map<GLuint, BufferInfo>& shaderBufferInfo,
    210                   GLuint color_sp, GLuint asteroid_sp, GLuint texture_sp, GLuint laser_sp, GLuint explosion_sp,
    211                   GLuint color_vao, GLuint asteroid_vao, GLuint texture_vao, GLuint laser_vao, GLuint explosion_vao,
    212                   GLuint colors_vbo, GLuint selected_colors_vbo,
    213                   SceneObject* selectedObject);
     203                  GLuint ship_sp, GLuint asteroid_sp, GLuint laser_sp, GLuint explosion_sp,
     204                  GLuint ship_vao, GLuint asteroid_vao, GLuint laser_vao, GLuint explosion_vao,
     205                  GLuint colors_vbo, GLuint ubo, SceneObject* selectedObject);
    214206
    215207void renderSceneGui();
     
    262254
    263255SceneObject* objExplosion;
    264 SceneObject* objFirst; // TODO: Set this, probably in populateBuffers and wherever else is appropriate.
     256SceneObject* objFirst;
    265257
    266258/*
     
    453445   map<GLuint, BufferInfo> shaderBufferInfo;
    454446
    455    // TODO: Rename color_sp to ship_sp and comment out texture_sp)
    456 
    457    GLuint color_sp = loadShaderProgram("./ship.vert", "./ship.frag");
     447   GLuint ship_sp = loadShaderProgram("./ship.vert", "./ship.frag");
    458448   GLuint asteroid_sp = loadShaderProgram("./asteroid.vert", "./asteroid.frag");
    459    GLuint texture_sp = loadShaderProgram("./texture.vert", "./texture.frag");
    460449   GLuint laser_sp = loadShaderProgram("./laser.vert", "./laser.frag");
    461450   GLuint explosion_sp = loadShaderProgram("./explosion.vert", "./explosion.frag");
    462451
    463    shaderBufferInfo[color_sp] = BufferInfo();
     452   shaderBufferInfo[ship_sp] = BufferInfo();
    464453   shaderBufferInfo[asteroid_sp] = BufferInfo();
    465    shaderBufferInfo[texture_sp] = BufferInfo();
    466454   shaderBufferInfo[laser_sp] = BufferInfo();
    467455   shaderBufferInfo[explosion_sp] = BufferInfo();
     
    472460
    473461   // player ship
    474    SceneObject* ship = createShip(color_sp);
     462   SceneObject* ship = createShip(ship_sp);
    475463   objects.push_back(ship);
    476464
    477465   vector<SceneObject>::iterator obj_it;
    478466
    479    GLuint points_vbo, colors_vbo, selected_colors_vbo, texcoords_vbo,
    480       normals_vbo, ubo, model_mat_idx_vbo;
     467   GLuint points_vbo, colors_vbo, texcoords_vbo, normals_vbo, ubo, model_mat_idx_vbo;
    481468
    482469   initializeBuffers(
    483470      &points_vbo,
    484471      &colors_vbo,
    485       &selected_colors_vbo,
    486472      &texcoords_vbo,
    487473      &normals_vbo,
     
    493479      points_vbo,
    494480      colors_vbo,
    495       selected_colors_vbo,
    496481      texcoords_vbo,
    497482      normals_vbo,
    498483      ubo,
    499484      model_mat_idx_vbo,
    500       asteroid_sp,
    501       explosion_sp);
    502 
    503    GLuint color_vao = 0;
    504    glGenVertexArrays(1, &color_vao);
    505    glBindVertexArray(color_vao);
     485      asteroid_sp);
     486
     487   GLuint ship_vao = 0;
     488   glGenVertexArrays(1, &ship_vao);
     489   glBindVertexArray(ship_vao);
    506490
    507491   glEnableVertexAttribArray(0);
     
    537521   glBindBuffer(GL_ARRAY_BUFFER, colors_vbo);
    538522   glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, NULL);
    539 
    540    glBindBuffer(GL_ARRAY_BUFFER, normals_vbo);
    541    glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, 0, NULL);
    542 
    543    glBindBuffer(GL_ARRAY_BUFFER, model_mat_idx_vbo);
    544    glVertexAttribIPointer(3, 1, GL_UNSIGNED_INT, 0, NULL);
    545 
    546    GLuint texture_vao = 0;
    547    glGenVertexArrays(1, &texture_vao);
    548    glBindVertexArray(texture_vao);
    549 
    550    glEnableVertexAttribArray(0);
    551    glEnableVertexAttribArray(1);
    552    glEnableVertexAttribArray(2);
    553    glEnableVertexAttribArray(3);
    554 
    555    glBindBuffer(GL_ARRAY_BUFFER, points_vbo);
    556    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
    557 
    558    glBindBuffer(GL_ARRAY_BUFFER, texcoords_vbo);
    559    glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, NULL);
    560523
    561524   glBindBuffer(GL_ARRAY_BUFFER, normals_vbo);
     
    619582      points_vbo,
    620583      colors_vbo,
    621       selected_colors_vbo,
    622584      texcoords_vbo,
    623585      normals_vbo,
     
    661623   GLuint ub_binding_point = 0;
    662624
    663    // TODO: Replace test_loc and mat_loc with more descriptive names
    664    GLuint view_test_loc = glGetUniformLocation(color_sp, "view");
    665    GLuint proj_test_loc = glGetUniformLocation(color_sp, "proj");
    666    GLuint color_sp_models_ub_index = glGetUniformBlockIndex(color_sp, "models");
     625   GLuint ship_view_mat_loc = glGetUniformLocation(ship_sp, "view");
     626   GLuint ship_proj_mat_loc = glGetUniformLocation(ship_sp, "proj");
     627   GLuint ship_sp_models_ub_index = glGetUniformBlockIndex(ship_sp, "models");
    667628
    668629   GLuint asteroid_view_mat_loc = glGetUniformLocation(asteroid_sp, "view");
    669630   GLuint asteroid_proj_mat_loc = glGetUniformLocation(asteroid_sp, "proj");
    670631   GLuint asteroid_sp_models_ub_index = glGetUniformBlockIndex(asteroid_sp, "models");
    671 
    672    GLuint view_mat_loc = glGetUniformLocation(texture_sp, "view");
    673    GLuint proj_mat_loc = glGetUniformLocation(texture_sp, "proj");
    674    GLuint texture_sp_models_ub_index = glGetUniformBlockIndex(texture_sp, "models");
    675632
    676633   GLuint laser_view_mat_loc = glGetUniformLocation(laser_sp, "view");
     
    684641
    685642
    686    glUseProgram(color_sp);
    687    glUniformMatrix4fv(view_test_loc, 1, GL_FALSE, value_ptr(view_mat));
    688    glUniformMatrix4fv(proj_test_loc, 1, GL_FALSE, value_ptr(proj_mat));
    689 
    690    glUniformBlockBinding(color_sp, color_sp_models_ub_index, ub_binding_point);
     643   glUseProgram(ship_sp);
     644   glUniformMatrix4fv(ship_view_mat_loc, 1, GL_FALSE, value_ptr(view_mat));
     645   glUniformMatrix4fv(ship_proj_mat_loc, 1, GL_FALSE, value_ptr(proj_mat));
     646
     647   glUniformBlockBinding(ship_sp, ship_sp_models_ub_index, ub_binding_point);
    691648   glBindBufferRange(GL_UNIFORM_BUFFER, ub_binding_point, ubo, 0, GL_MAX_UNIFORM_BLOCK_SIZE);
    692649
     
    697654
    698655   glUniformBlockBinding(asteroid_sp, asteroid_sp_models_ub_index, ub_binding_point);
    699    glBindBufferRange(GL_UNIFORM_BUFFER, ub_binding_point, ubo, 0, GL_MAX_UNIFORM_BLOCK_SIZE);
    700 
    701 
    702    glUseProgram(texture_sp);
    703    glUniformMatrix4fv(view_mat_loc, 1, GL_FALSE, value_ptr(view_mat));
    704    glUniformMatrix4fv(proj_mat_loc, 1, GL_FALSE, value_ptr(proj_mat));
    705 
    706    glUniformBlockBinding(texture_sp, texture_sp_models_ub_index, ub_binding_point);
    707656   glBindBufferRange(GL_UNIFORM_BUFFER, ub_binding_point, ubo, 0, GL_MAX_UNIFORM_BLOCK_SIZE);
    708657
     
    793742               points_vbo,
    794743               colors_vbo,
    795                selected_colors_vbo,
    796744               texcoords_vbo,
    797745               normals_vbo,
    798746               ubo,
    799747               model_mat_idx_vbo,
    800                asteroid_sp,
    801                explosion_sp);
     748               asteroid_sp);
    802749
    803750            elapsed_seconds_spawn -= 0.5f;
     
    854801               points_vbo,
    855802               colors_vbo,
    856                selected_colors_vbo,
    857803               texcoords_vbo,
    858804               normals_vbo,
    859805               ubo,
    860806               model_mat_idx_vbo,
    861                asteroid_sp,
    862                explosion_sp);
     807               asteroid_sp);
    863808         } else if (key_state[GLFW_KEY_Z] == GLFW_RELEASE) {
    864809            removeObjectFromScene(*leftLaser, ubo);
     
    873818               points_vbo,
    874819               colors_vbo,
    875                selected_colors_vbo,
    876820               texcoords_vbo,
    877821               normals_vbo,
    878822               ubo,
    879823               model_mat_idx_vbo,
    880                asteroid_sp,
    881                explosion_sp);
     824               asteroid_sp);
    882825         } else if (key_state[GLFW_KEY_X] == GLFW_RELEASE) {
    883826            removeObjectFromScene(*rightLaser, ubo);
     
    895838               }
    896839               if (((Asteroid*)objects[i])->hp <= 0) {
    897                   printVector("center", objects[i]->bounding_center);
    898 
    899840                  // TODO: Optimize this so I don't recalculate the camera rotation every time
    900841                  float cam_pitch = -50.0f * 2.0f * 3.14159f / 360.0f;
     
    909850                  // initiate an explosion
    910851                  glUseProgram(explosion_sp);
    911                  
     852
    912853                  GLuint model_mat_loc = glGetUniformLocation(explosion_sp, "model_mat");
    913854                  glUniformMatrix4fv(model_mat_loc, 1, GL_FALSE, value_ptr(objExplosion->model_mat));
    914855
    915                   // TODO: To get ubos working for the explosion,
    916                   // I need to calculate the correct ubo index for the model matrix
    917                   // Then I need to copy the matrix into the right place in the ubo and
    918                   // copy the index into the correct uniform
    919 
    920                   // STEP 1: Make sure the UBO offset for the explosion shader is correct
    921 
    922                   cout << "UBO OFFSET: " << objExplosion->ubo_offset << endl;
    923                   //glBindBuffer(GL_UNIFORM_BUFFER, ubo);
    924                   //glBufferSubData(GL_UNIFORM_BUFFER, objExplosion->ubo_offset * sizeof(mat4), sizeof(mat4), value_ptr(objExplosion->model_mat));
    925 
    926856                  glUniform1f(explosion_start_time_loc, (GLfloat)glfwGetTime());
    927 
    928                   // generic code used to change a matrix in the ubo
    929                   // we need to know the matrix of the first object in the ubo so we can save it and move it back
    930                   // after the explosion is rendered
    931                   // However, that should be done in the render loop, not here
    932                   // Here, we are already saving the explosion model mat in objExplosion->model_mat, so that is all we need
    933                   glBindBuffer(GL_UNIFORM_BUFFER, ubo);
    934                   glBufferSubData(GL_UNIFORM_BUFFER, obj.ubo_offset * sizeof(mat4), sizeof(mat4), value_ptr(obj.model_mat));
    935857               }
    936858            }
     
    1015937         //printVector("cam pos", cam_pos);
    1016938
    1017          glUseProgram(color_sp);
    1018          glUniformMatrix4fv(view_test_loc, 1, GL_FALSE, value_ptr(view_mat));
    1019 
    1020          glUseProgram(texture_sp);
    1021          glUniformMatrix4fv(view_mat_loc, 1, GL_FALSE, value_ptr(view_mat));
     939         glUseProgram(ship_sp);
     940         glUniformMatrix4fv(ship_view_mat_loc, 1, GL_FALSE, value_ptr(view_mat));
    1022941
    1023942         glUseProgram(laser_sp);
     
    1041960         case STATE_GAME:
    1042961            renderScene(shaderBufferInfo,
    1043                color_sp, asteroid_sp, texture_sp, laser_sp, explosion_sp,
    1044                color_vao, asteroid_vao, texture_vao, laser_vao, explosion_vao,
    1045                colors_vbo, selected_colors_vbo,
    1046                selectedObject);
     962               ship_sp, asteroid_sp, laser_sp, explosion_sp,
     963               ship_vao, asteroid_vao, laser_vao, explosion_vao,
     964               colors_vbo, ubo, selectedObject);
    1047965            renderSceneGui();
    1048966            break;
     
    13981316   GLuint points_vbo,
    13991317   GLuint colors_vbo,
    1400    GLuint selected_colors_vbo,
    14011318   GLuint texcoords_vbo,
    14021319   GLuint normals_vbo,
    14031320   GLuint ubo,
    14041321   GLuint model_mat_idx_vbo,
    1405    GLuint asteroid_sp,
    1406    GLuint explosion_sp) {
     1322   GLuint asteroid_sp) {
    14071323   objects.push_back(obj);
    14081324
     
    14241340         points_vbo,
    14251341         colors_vbo,
    1426          selected_colors_vbo,
    14271342         texcoords_vbo,
    14281343         normals_vbo,
    14291344         ubo,
    14301345         model_mat_idx_vbo,
    1431          asteroid_sp,
    1432          explosion_sp);
     1346         asteroid_sp);
    14331347   } else {
    14341348      copyObjectDataToBuffers(*objects.back(), shaderBufferInfo,
    14351349         points_vbo,
    14361350         colors_vbo,
    1437          selected_colors_vbo,
    14381351         texcoords_vbo,
    14391352         normals_vbo,
     
    18801793   };
    18811794   ship->texcoords = { 0.0f };
    1882    ship->selected_colors = { 0.0f };
    18831795
    18841796   mat4 T_model = translate(mat4(1.0f), vec3(0.0f, -1.2f, 1.65f));
     
    19851897                  GLuint* points_vbo,
    19861898                  GLuint* colors_vbo,
    1987                   GLuint* selected_colors_vbo,
    19881899                  GLuint* texcoords_vbo,
    19891900                  GLuint* normals_vbo,
     
    19961907   glGenBuffers(1, colors_vbo);
    19971908
    1998    *selected_colors_vbo = 0;
    1999    glGenBuffers(1, selected_colors_vbo);
    2000 
    20011909   *texcoords_vbo = 0;
    20021910   glGenBuffers(1, texcoords_vbo);
     
    20161924                  GLuint points_vbo,
    20171925                  GLuint colors_vbo,
    2018                   GLuint selected_colors_vbo,
    20191926                  GLuint texcoords_vbo,
    20201927                  GLuint normals_vbo,
    20211928                  GLuint ubo,
    20221929                  GLuint model_mat_idx_vbo) {
    2023    //unsigned int num_explosions = 1;
    2024 
    20251930   float vv[EXPLOSION_PARTICLE_COUNT * 3]; // initial velocities vec3
    20261931   float vt[EXPLOSION_PARTICLE_COUNT]; // initial times
     
    20521957   glUniformMatrix4fv(model_mat_loc, 1, GL_FALSE, value_ptr(model_mat));
    20531958
    2054    /*
    2055    GLuint model_ubo = 0;
    2056    glGenBuffers(1, &model_ubo);
    2057 
    2058    glBindBuffer(GL_UNIFORM_BUFFER, model_ubo);
    2059    glBufferData(GL_UNIFORM_BUFFER, num_explosions * sizeof(mat4), NULL, GL_DYNAMIC_DRAW);
    2060 
    2061    //glBindBuffer(GL_UNIFORM_BUFFER, ubo);
    2062    glBufferSubData(GL_UNIFORM_BUFFER, 0, sizeof(mat4), value_ptr(model_mat));
    2063    */
    2064 
    20651959   GLuint velocity_vbo;
    20661960   glGenBuffers(1, &velocity_vbo);
     
    20791973   glEnableVertexAttribArray(0);
    20801974   glEnableVertexAttribArray(1);
    2081    glEnableVertexAttribArray(2);
    20821975
    20831976   glBindBuffer(GL_ARRAY_BUFFER, velocity_vbo);
     
    20871980   glVertexAttribPointer(1, 1, GL_FLOAT, GL_FALSE, 0, NULL);
    20881981
    2089    // TODO: I think I can call glVertexAttribIPointer whenever the vbo_base changes
    2090    // to rebind the ubo index vbo
    2091    glBindBuffer(GL_ARRAY_BUFFER, model_mat_idx_vbo);
    2092    glVertexAttribIPointer(2, 1, GL_UNSIGNED_INT, 0, NULL);
    2093 
    20941982   objExplosion = createExplosion(explosion_sp);
    2095    objExplosion->num_points = EXPLOSION_PARTICLE_COUNT;
    20961983   addObjectToScene(objExplosion, shaderBufferInfo,
    20971984      points_vbo,
    20981985      colors_vbo,
    2099       selected_colors_vbo,
    21001986      texcoords_vbo,
    21011987      normals_vbo,
    21021988      ubo,
    21031989      model_mat_idx_vbo,
    2104       0,
    2105       explosion_sp);
     1990      0);
    21061991
    21071992   return vao;
     
    21121997                  GLuint points_vbo,
    21131998                  GLuint colors_vbo,
    2114                   GLuint selected_colors_vbo,
    21151999                  GLuint texcoords_vbo,
    21162000                  GLuint normals_vbo,
    21172001                  GLuint ubo,
    21182002                  GLuint ubo_idx_vbo,
    2119                   GLuint asteroid_sp,
    2120                   GLuint explosion_sp) {
     2003                  GLuint asteroid_sp) {
    21212004   GLsizeiptr num_points = 0;
    21222005   GLsizeiptr num_objects = 0;
     
    21762059      shaderBufferInfo[shaderCountIt->first].ubo_base = lastShaderUboCount * 2;
    21772060
    2178       if (shaderCountIt->first == explosion_sp) {
    2179          cout << "EXPLOSION VBO_BASE: " << shaderBufferInfo[shaderCountIt->first].vbo_base << endl;
    2180       }
    2181 
    2182       /*
    2183       cout << "shader: " << shaderCountIt->first << endl;
    2184       cout << "point counts: " << shaderCounts[shaderCountIt->first] << endl;
    2185       cout << "object counts: " << shaderUboCounts[shaderCountIt->first] << endl;
    2186       cout << "vbo_base: " << shaderBufferInfo[shaderCountIt->first].vbo_base << endl;
    2187       cout << "ubo_base: " << shaderBufferInfo[shaderCountIt->first].ubo_base << endl;
    2188       */
    2189 
    21902061      shaderBufferInfo[shaderCountIt->first].vbo_offset = 0;
    21912062      shaderBufferInfo[shaderCountIt->first].ubo_offset = 0;
     
    22042075
    22052076   glBindBuffer(GL_ARRAY_BUFFER, colors_vbo);
    2206    glBufferData(GL_ARRAY_BUFFER, num_points * sizeof(GLfloat) * 3, NULL, GL_DYNAMIC_DRAW);
    2207 
    2208    glBindBuffer(GL_ARRAY_BUFFER, selected_colors_vbo);
    22092077   glBufferData(GL_ARRAY_BUFFER, num_points * sizeof(GLfloat) * 3, NULL, GL_DYNAMIC_DRAW);
    22102078
     
    22252093         points_vbo,
    22262094         colors_vbo,
    2227          selected_colors_vbo,
    22282095         texcoords_vbo,
    22292096         normals_vbo,
     
    22382105                  GLuint points_vbo,
    22392106                  GLuint colors_vbo,
    2240                   GLuint selected_colors_vbo,
    22412107                  GLuint texcoords_vbo,
    22422108                  GLuint normals_vbo,
     
    22492115   obj.ubo_offset = bufferInfo->ubo_base + bufferInfo->ubo_offset;
    22502116
    2251    if (obj.type == TYPE_EXPLOSION) {
    2252       cout << "UBO OFFSET: " << obj.ubo_offset << endl;
    2253    }
    2254    glBindBuffer(GL_ARRAY_BUFFER, model_mat_idx_vbo);
    2255    for (unsigned int i = 0; i < obj.num_points; i++) {
    2256       glBufferSubData(GL_ARRAY_BUFFER, (obj.vertex_vbo_offset + i) * sizeof(GLuint), sizeof(GLuint), &obj.ubo_offset);
     2117   if (obj.ubo_offset == 0) {
     2118      objFirst = &obj;
    22572119   }
    22582120
    22592121   if (obj.type != TYPE_EXPLOSION) {
     2122      glBindBuffer(GL_ARRAY_BUFFER, model_mat_idx_vbo);
     2123      for (unsigned int i = 0; i < obj.num_points; i++) {
     2124         glBufferSubData(GL_ARRAY_BUFFER, (obj.vertex_vbo_offset + i) * sizeof(GLuint), sizeof(GLuint), &obj.ubo_offset);
     2125      }
     2126
    22602127      glBindBuffer(GL_ARRAY_BUFFER, points_vbo);
    22612128      glBufferSubData(GL_ARRAY_BUFFER, obj.vertex_vbo_offset * sizeof(GLfloat) * 3, obj.points.size() * sizeof(GLfloat), &obj.points[0]);
     
    22672134         glBindBuffer(GL_ARRAY_BUFFER, colors_vbo);
    22682135         glBufferSubData(GL_ARRAY_BUFFER, obj.vertex_vbo_offset * sizeof(GLfloat) * 3, obj.colors.size() * sizeof(GLfloat), &obj.colors[0]);
    2269 
    2270          glBindBuffer(GL_ARRAY_BUFFER, selected_colors_vbo);
    2271          glBufferSubData(GL_ARRAY_BUFFER, obj.vertex_vbo_offset * sizeof(GLfloat) * 3, obj.selected_colors.size() * sizeof(GLfloat), &obj.selected_colors[0]);
    22722136
    22732137         glBindBuffer(GL_ARRAY_BUFFER, normals_vbo);
     
    24532317
    24542318void renderScene(map<GLuint, BufferInfo>& shaderBufferInfo,
    2455                   GLuint color_sp, GLuint asteroid_sp, GLuint texture_sp, GLuint laser_sp, GLuint explosion_sp,
    2456                   GLuint color_vao, GLuint asteroid_vao, GLuint texture_vao, GLuint laser_vao, GLuint explosion_vao,
    2457                   GLuint colors_vbo, GLuint selected_colors_vbo,
    2458                   SceneObject* selectedObject) {
    2459 
    2460    glUseProgram(color_sp);
    2461    glBindVertexArray(color_vao);
    2462 
    2463    /*
    2464    if (selectedObject != NULL) {
    2465       glBindBuffer(GL_ARRAY_BUFFER, selected_colors_vbo);
    2466       glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, NULL);
    2467 
    2468       glDrawArrays(GL_TRIANGLES, selectedObject->vertex_vbo_offset, selectedObject->num_points);
    2469    }
    2470    */
    2471 
    2472    // Uncomment this code when I want to use selected colors again
    2473    // glBindBuffer(GL_ARRAY_BUFFER, colors_vbo);
    2474    // glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, NULL);
    2475 
    2476    glDrawArrays(GL_TRIANGLES, shaderBufferInfo[color_sp].vbo_base, shaderBufferInfo[color_sp].vbo_offset);
     2319                  GLuint ship_sp, GLuint asteroid_sp, GLuint laser_sp, GLuint explosion_sp,
     2320                  GLuint ship_vao, GLuint asteroid_vao, GLuint laser_vao, GLuint explosion_vao,
     2321                  GLuint colors_vbo, GLuint ubo, SceneObject* selectedObject) {
     2322
     2323   glUseProgram(ship_sp);
     2324   glBindVertexArray(ship_vao);
     2325
     2326   glDrawArrays(GL_TRIANGLES, shaderBufferInfo[ship_sp].vbo_base, shaderBufferInfo[ship_sp].vbo_offset);
    24772327
    24782328   glUseProgram(asteroid_sp);
     
    24812331   glDrawArrays(GL_TRIANGLES, shaderBufferInfo[asteroid_sp].vbo_base, shaderBufferInfo[asteroid_sp].vbo_offset);
    24822332
    2483    glUseProgram(texture_sp);
    2484    glBindVertexArray(texture_vao);
    2485 
    2486    glDrawArrays(GL_TRIANGLES, shaderBufferInfo[texture_sp].vbo_base, shaderBufferInfo[texture_sp].vbo_offset);
    2487 
    24882333   glEnable(GL_BLEND);
    24892334
     
    24932338   glDrawArrays(GL_TRIANGLES, shaderBufferInfo[laser_sp].vbo_base, shaderBufferInfo[laser_sp].vbo_offset);
    24942339
     2340   // To render explosions, my new shader descriptor object needs to have a refernece to the shader and the vao
     2341   // and know the number of points to render.
     2342
    24952343   glUseProgram(explosion_sp);
    2496 
    2497    //glActiveTexture(GL_TEXTURE1);
    2498    //glBindTexture(GL_TEXTURE_2D, tex); // tex is 0 here
    24992344
    25002345   glEnable(GL_PROGRAM_POINT_SIZE);
    25012346   glBindVertexArray(explosion_vao);
    25022347
     2348   glBindBuffer(GL_UNIFORM_BUFFER, ubo);
     2349   glBufferSubData(GL_UNIFORM_BUFFER, 0, sizeof(mat4), value_ptr(objExplosion->model_mat));
     2350
    25032351   glDrawArrays(GL_POINTS, 0, shaderBufferInfo[explosion_sp].vbo_offset);
    2504    //glDrawArrays(GL_POINTS, shaderBufferInfo[explosion_sp].vbo_base, shaderBufferInfo[explosion_sp].vbo_offset);
    2505    //cout << shaderBufferInfo[explosion_sp].vbo_base << ", " << shaderBufferInfo[explosion_sp].vbo_offset << endl;
     2352
     2353   glBindBuffer(GL_UNIFORM_BUFFER, ubo);
     2354   glBufferSubData(GL_UNIFORM_BUFFER, 0, sizeof(mat4), value_ptr(objFirst->model_mat));
    25062355
    25072356   glDisable(GL_PROGRAM_POINT_SIZE);
     
    27102559   };
    27112560   obj->texcoords = { 0.0f };
    2712    obj->selected_colors = { 0.0f };
    27132561
    27142562   mat4 T = translate(mat4(1.0f), pos);
     
    27382586
    27392587   initObject(obj);
     2588   obj->num_points = EXPLOSION_PARTICLE_COUNT;
    27402589
    27412590   return obj;
Note: See TracChangeset for help on using the changeset viewer.