Changeset 6877ef3 in opengl-game for new-game.cpp


Ignore:
Timestamp:
Jul 15, 2018, 8:44:16 PM (6 years ago)
Author:
Dmitry Portnoy <dmp1488@…>
Branches:
feature/imgui-sdl, master, points-test
Children:
9f9f9a7
Parents:
92b1e90
Message:

Finish integrating lasers into the object rendering pipeline and remove a bunch of code for creating and using laser-specific vbos.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • new-game.cpp

    r92b1e90 r6877ef3  
    4141 *    -The laser shader should take an input color to blend with the texture to give the lasers color
    4242 * -The lasers should be SceneObjects and drawn like all other objects
     43 *    -DONE
    4344 * -Make lasers shoot from the ends of the ship's wings when the user presses a button and disappear after a second or so
    4445 */
     
    116117                  GLuint normals_vbo,
    117118                  GLuint ubo,
    118                   GLuint model_mat_idx_vbo,
    119                   GLuint laser_points_vbo,
    120                   GLuint laser_colors_vbo);
     119                  GLuint model_mat_idx_vbo);
    121120void removeObjectFromScene(SceneObject& obj, GLuint ubo);
    122121
     
    132131                  GLuint* normals_vbo,
    133132                  GLuint* ubo,
    134                   GLuint* model_mat_idx_vbo,
    135                   GLuint* laser_points_vbo,
    136                   GLuint* laser_colors_vbo);
     133                  GLuint* model_mat_idx_vbo);
    137134
    138135void populateBuffers(vector<SceneObject>& objects,
     
    144141                  GLuint normals_vbo,
    145142                  GLuint ubo,
    146                   GLuint model_mat_idx_vbo,
    147                   GLuint laser_points_vbo,
    148                   GLuint laser_colors_vbo);
     143                  GLuint model_mat_idx_vbo);
    149144
    150145void copyObjectDataToBuffers(SceneObject& obj,
     
    156151                  GLuint normals_vbo,
    157152                  GLuint ubo,
    158                   GLuint model_mat_idx_vbo,
    159                   GLuint laser_points_vbo,
    160                   GLuint laser_colors_vbo);
     153                  GLuint model_mat_idx_vbo);
    161154
    162155void transformObject(SceneObject& obj, const mat4& transform, GLuint ubo);
     
    167160void renderScene(map<GLuint, BufferInfo>& shaderBufferInfo,
    168161                  GLuint color_sp, GLuint texture_sp, GLuint laser_sp,
    169                   GLuint color_vao, GLuint texture_vao, GLuint laser_vao,
     162                  GLuint color_vao, GLuint texture_vao,
    170163                  GLuint colors_vbo, GLuint selected_colors_vbo,
    171164                  SceneObject* selectedObject);
     
    180173                  GLuint normals_vbo,
    181174                  GLuint ubo,
    182                   GLuint model_mat_idx_vbo,
    183                   GLuint laser_points_vbo,
    184                   GLuint laser_colors_vbo);
     175                  GLuint model_mat_idx_vbo);
    185176
    186177float getRandomNum(float low, float high);
     
    850841
    851842   GLuint points_vbo, colors_vbo, selected_colors_vbo, texcoords_vbo,
    852       normals_vbo, ubo, model_mat_idx_vbo, laser_points_vbo, laser_colors_vbo;
     843      normals_vbo, ubo, model_mat_idx_vbo;
    853844
    854845   initializeBuffers(
     
    859850      &normals_vbo,
    860851      &ubo,
    861       &model_mat_idx_vbo,
    862       &laser_points_vbo,
    863       &laser_colors_vbo);
     852      &model_mat_idx_vbo);
    864853
    865854   populateBuffers(objects,
     
    871860      normals_vbo,
    872861      ubo,
    873       model_mat_idx_vbo,
    874       laser_points_vbo,
    875       laser_colors_vbo);
     862      model_mat_idx_vbo);
    876863
    877864   GLuint color_vao = 0;
     
    913900   glBindBuffer(GL_ARRAY_BUFFER, model_mat_idx_vbo);
    914901   glVertexAttribIPointer(3, 1, GL_UNSIGNED_INT, 0, 0);
    915 
    916    GLuint laser_vao = 0;
    917    glGenVertexArrays(1, &laser_vao);
    918    glBindVertexArray(laser_vao);
    919 
    920    glEnableVertexAttribArray(0);
    921    glEnableVertexAttribArray(1);
    922 
    923    glBindBuffer(GL_ARRAY_BUFFER, laser_points_vbo);
    924    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
    925 
    926    glBindBuffer(GL_ARRAY_BUFFER, laser_colors_vbo);
    927    glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, 0);
    928902
    929903   float cam_speed = 1.0f;
     
    10661040               normals_vbo,
    10671041               ubo,
    1068                model_mat_idx_vbo,
    1069                laser_points_vbo,
    1070                laser_colors_vbo);
     1042               model_mat_idx_vbo);
    10711043
    10721044            elapsed_seconds_spawn -= 0.5f;
     
    12011173            renderScene(shaderBufferInfo,
    12021174               color_sp, texture_sp, laser_sp,
    1203                color_vao, texture_vao, laser_vao,
     1175               color_vao, texture_vao,
    12041176               colors_vbo, selected_colors_vbo,
    12051177               selectedObject);
     
    14571429                  GLuint normals_vbo,
    14581430                  GLuint ubo,
    1459                   GLuint model_mat_idx_vbo,
    1460                   GLuint laser_points_vbo,
    1461                   GLuint laser_colors_vbo) {
     1431                  GLuint model_mat_idx_vbo) {
    14621432   addObjectToSceneDuringInit(obj);
    14631433
     
    14751445         normals_vbo,
    14761446         ubo,
    1477          model_mat_idx_vbo,
    1478          laser_points_vbo,
    1479          laser_colors_vbo);
     1447         model_mat_idx_vbo);
    14801448   } else {
    14811449      copyObjectDataToBuffers(objects.back(), shaderBufferInfo,
     
    14861454         normals_vbo,
    14871455         ubo,
    1488          model_mat_idx_vbo,
    1489          laser_points_vbo,
    1490          laser_colors_vbo);
     1456         model_mat_idx_vbo);
    14911457   }
    14921458}
     
    16211587                  GLuint* normals_vbo,
    16221588                  GLuint* ubo,
    1623                   GLuint* model_mat_idx_vbo,
    1624                   GLuint* laser_points_vbo,
    1625                   GLuint* laser_colors_vbo) {
     1589                  GLuint* model_mat_idx_vbo) {
    16261590   *points_vbo = 0;
    16271591   glGenBuffers(1, points_vbo);
     
    16441608   *model_mat_idx_vbo = 0;
    16451609   glGenBuffers(1, model_mat_idx_vbo);
    1646 
    1647    *laser_points_vbo = 0;
    1648    glGenBuffers(1, laser_points_vbo);
    1649 
    1650    *laser_colors_vbo = 0;
    1651    glGenBuffers(1, laser_colors_vbo);
    16521610}
    16531611
     
    16601618                  GLuint normals_vbo,
    16611619                  GLuint ubo,
    1662                   GLuint model_mat_idx_vbo,
    1663                   GLuint laser_points_vbo,
    1664                   GLuint laser_colors_vbo) {
     1620                  GLuint model_mat_idx_vbo) {
    16651621   GLsizeiptr points_buffer_size = 0;
    16661622   GLsizeiptr textures_buffer_size = 0;
     
    17211677      shaderBufferInfo[shaderIt->first].ubo_base = lastShaderUboCount * 2;
    17221678
    1723       if (shaderIt->first == 9) { // hack to check for laser_sp
    1724          shaderBufferInfo[shaderIt->first].vbo_base = 0;
    1725          shaderBufferInfo[shaderIt->first].ubo_base = 0; // unused now anyway
    1726       }
    1727 
    17281679      cout << "shader: " << shaderIt->first << endl;
    17291680      cout << "point counts: " << shaderCounts[shaderIt->first] << endl;
     
    17641715   glBindBuffer(GL_ARRAY_BUFFER, model_mat_idx_vbo);
    17651716   glBufferData(GL_ARRAY_BUFFER, model_mat_idx_buffer_size, NULL, GL_DYNAMIC_DRAW);
    1766 
    1767    unsigned int max_num_lasers = 20;
    1768 
    1769    glBindBuffer(GL_ARRAY_BUFFER, laser_points_vbo);
    1770    glBufferData(GL_ARRAY_BUFFER, max_num_lasers * 18 * sizeof(GLfloat) * 3, NULL, GL_DYNAMIC_DRAW);
    1771 
    1772    glBindBuffer(GL_ARRAY_BUFFER, laser_colors_vbo);
    1773    glBufferData(GL_ARRAY_BUFFER, max_num_lasers * 18 * sizeof(GLfloat) * 3, NULL, GL_DYNAMIC_DRAW);
    17741717
    17751718   for (it = objects.begin(); it != objects.end(); it++) {
     
    17811724         normals_vbo,
    17821725         ubo,
    1783          model_mat_idx_vbo,
    1784          laser_points_vbo,
    1785          laser_colors_vbo);
     1726         model_mat_idx_vbo);
    17861727   }
    17871728}
     
    17951736                  GLuint normals_vbo,
    17961737                  GLuint ubo,
    1797                   GLuint model_mat_idx_vbo,
    1798                   GLuint laser_points_vbo,
    1799                   GLuint laser_colors_vbo) {
     1738                  GLuint model_mat_idx_vbo) {
    18001739   BufferInfo* bufferInfo = &shaderBufferInfo[obj.shader_program];
    18011740
     
    18031742   obj.ubo_offset = bufferInfo->ubo_base + bufferInfo->ubo_offset;
    18041743
    1805    if (obj.type == TYPE_LASER) {
    1806       glBindBuffer(GL_ARRAY_BUFFER, laser_points_vbo);
    1807       glBufferSubData(GL_ARRAY_BUFFER, obj.vertex_vbo_offset * sizeof(GLfloat) * 3, obj.points.size() * sizeof(GLfloat), &obj.points[0]);
    1808 
    1809       glBindBuffer(GL_ARRAY_BUFFER, laser_colors_vbo);
    1810       glBufferSubData(GL_ARRAY_BUFFER, obj.vertex_vbo_offset * sizeof(GLfloat) * 3, obj.points.size() * sizeof(GLfloat), &obj.colors[0]);
    1811    } else {
    1812       glBindBuffer(GL_ARRAY_BUFFER, points_vbo);
    1813       glBufferSubData(GL_ARRAY_BUFFER, obj.vertex_vbo_offset * sizeof(GLfloat) * 3, obj.points.size() * sizeof(GLfloat), &obj.points[0]);
    1814 
    1815       glBindBuffer(GL_ARRAY_BUFFER, colors_vbo);
    1816       glBufferSubData(GL_ARRAY_BUFFER, obj.vertex_vbo_offset * sizeof(GLfloat) * 3, obj.colors.size() * sizeof(GLfloat), &obj.colors[0]);
    1817 
     1744   glBindBuffer(GL_ARRAY_BUFFER, points_vbo);
     1745   glBufferSubData(GL_ARRAY_BUFFER, obj.vertex_vbo_offset * sizeof(GLfloat) * 3, obj.points.size() * sizeof(GLfloat), &obj.points[0]);
     1746
     1747   glBindBuffer(GL_ARRAY_BUFFER, colors_vbo);
     1748   glBufferSubData(GL_ARRAY_BUFFER, obj.vertex_vbo_offset * sizeof(GLfloat) * 3, obj.colors.size() * sizeof(GLfloat), &obj.colors[0]);
     1749
     1750
     1751   if (obj.type != TYPE_LASER) {
    18181752      glBindBuffer(GL_ARRAY_BUFFER, selected_colors_vbo);
    18191753      glBufferSubData(GL_ARRAY_BUFFER, obj.vertex_vbo_offset * sizeof(GLfloat) * 3, obj.selected_colors.size() * sizeof(GLfloat), &obj.selected_colors[0]);
     
    18511785void renderScene(map<GLuint, BufferInfo>& shaderBufferInfo,
    18521786                  GLuint color_sp, GLuint texture_sp, GLuint laser_sp,
    1853                   GLuint color_vao, GLuint texture_vao, GLuint laser_vao,
     1787                  GLuint color_vao, GLuint texture_vao,
    18541788                  GLuint colors_vbo, GLuint selected_colors_vbo,
    18551789                  SceneObject* selectedObject) {
     
    18761810
    18771811   glUseProgram(laser_sp);
    1878    glBindVertexArray(laser_vao);
     1812   glBindVertexArray(color_vao);
    18791813
    18801814   glDrawArrays(GL_TRIANGLES, shaderBufferInfo[laser_sp].vbo_base, shaderBufferInfo[laser_sp].vbo_offset);
     
    19801914                  GLuint normals_vbo,
    19811915                  GLuint ubo,
    1982                   GLuint model_mat_idx_vbo,
    1983                   GLuint laser_points_vbo,
    1984                   GLuint laser_colors_vbo) {
     1916                  GLuint model_mat_idx_vbo) {
    19851917   SceneObject obj = SceneObject();
    19861918   obj.type = TYPE_ASTEROID;
     
    21012033                  normals_vbo,
    21022034                  ubo,
    2103                   model_mat_idx_vbo,
    2104                   laser_points_vbo,
    2105                   laser_colors_vbo);
     2035                  model_mat_idx_vbo);
    21062036}
    21072037
Note: See TracChangeset for help on using the changeset viewer.