Changeset 92b1e90 in opengl-game for new-game.cpp


Ignore:
Timestamp:
Jul 13, 2018, 4:00:42 AM (6 years ago)
Author:
Dmitry Portnoy <dmp1488@…>
Branches:
feature/imgui-sdl, master, points-test
Children:
6877ef3
Parents:
b155f13
Message:

Add a type field to SceneObject and mostly integrate lasers into the pipeline for creating and rendering objects to the scene (Lasers currently still use their own VBOs).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • new-game.cpp

    rb155f13 r92b1e90  
    3434using namespace glm;
    3535
     36/* LASERS TODO:
     37 * -Allow lasers that face any direction
     38 * -Make the lasers rotate to always face the camera
     39 * -Use textures to draw lasers
     40 *    -The textures should be grayscale and have transparency
     41 *    -The laser shader should take an input color to blend with the texture to give the lasers color
     42 * -The lasers should be SceneObjects and drawn like all other objects
     43 * -Make lasers shoot from the ends of the ship's wings when the user presses a button and disappear after a second or so
     44 */
     45
     46enum State {
     47   STATE_MAIN_MENU,
     48   STATE_GAME,
     49};
     50
     51enum Event {
     52   EVENT_GO_TO_MAIN_MENU,
     53   EVENT_GO_TO_GAME,
     54   EVENT_QUIT,
     55};
     56
     57enum ObjectType {
     58   TYPE_SHIP,
     59   TYPE_ASTEROID,
     60   TYPE_LASER,
     61};
     62
    3663struct SceneObject {
    3764   unsigned int id;
     65   ObjectType type;
    3866
    3967   // Currently, model_transform should only have translate, and rotation and scale need to be done in model_base since
     
    6593};
    6694
    67 enum State {
    68    STATE_MAIN_MENU,
    69    STATE_GAME,
    70 };
    71 
    72 enum Event {
    73    EVENT_GO_TO_MAIN_MENU,
    74    EVENT_GO_TO_GAME,
    75    EVENT_QUIT,
    76 };
    77 
    7895void glfw_error_callback(int error, const char* description);
    7996
     
    99116                  GLuint normals_vbo,
    100117                  GLuint ubo,
    101                   GLuint model_mat_idx_vbo);
    102 void removeObjectFromScene(SceneObject& obj, GLuint ubo);
    103 
    104 void calculateObjectBoundingBox(SceneObject& obj);
    105 
    106 void addLaserToScene(vec3 start, vec3 end, vec3 color,
    107                   GLfloat width,
    108                   unsigned int& num_lasers,
     118                  GLuint model_mat_idx_vbo,
    109119                  GLuint laser_points_vbo,
    110120                  GLuint laser_colors_vbo);
     121void removeObjectFromScene(SceneObject& obj, GLuint ubo);
     122
     123void calculateObjectBoundingBox(SceneObject& obj);
     124
     125void addLaserToScene(SceneObject& obj, vec3 start, vec3 end, vec3 color, GLfloat width);
    111126
    112127void initializeBuffers(
     
    117132                  GLuint* normals_vbo,
    118133                  GLuint* ubo,
    119                   GLuint* model_mat_idx_vbo);
     134                  GLuint* model_mat_idx_vbo,
     135                  GLuint* laser_points_vbo,
     136                  GLuint* laser_colors_vbo);
    120137
    121138void populateBuffers(vector<SceneObject>& objects,
     
    127144                  GLuint normals_vbo,
    128145                  GLuint ubo,
    129                   GLuint model_mat_idx_vbo);
     146                  GLuint model_mat_idx_vbo,
     147                  GLuint laser_points_vbo,
     148                  GLuint laser_colors_vbo);
    130149
    131150void copyObjectDataToBuffers(SceneObject& obj,
     
    137156                  GLuint normals_vbo,
    138157                  GLuint ubo,
    139                   GLuint model_mat_idx_vbo);
     158                  GLuint model_mat_idx_vbo,
     159                  GLuint laser_points_vbo,
     160                  GLuint laser_colors_vbo);
    140161
    141162void transformObject(SceneObject& obj, const mat4& transform, GLuint ubo);
     
    144165void renderMainMenuGui();
    145166
    146 void renderScene(vector<SceneObject>& objects,
    147                   GLuint color_sp, GLuint texture_sp,
    148                   GLuint vao1, GLuint vao2,
     167void renderScene(map<GLuint, BufferInfo>& shaderBufferInfo,
     168                  GLuint color_sp, GLuint texture_sp, GLuint laser_sp,
     169                  GLuint color_vao, GLuint texture_vao, GLuint laser_vao,
    149170                  GLuint colors_vbo, GLuint selected_colors_vbo,
    150                   SceneObject* selectedObject,
    151                   map<GLuint, BufferInfo>& shaderBufferInfo);
    152 void renderLasers(GLuint sp, GLuint vao, unsigned int numLasers);
     171                  SceneObject* selectedObject);
    153172void renderSceneGui();
    154173
     
    161180                  GLuint normals_vbo,
    162181                  GLuint ubo,
    163                   GLuint model_mat_idx_vbo);
     182                  GLuint model_mat_idx_vbo,
     183                  GLuint laser_points_vbo,
     184                  GLuint laser_colors_vbo);
    164185
    165186float getRandomNum(float low, float high);
     
    359380   SceneObject obj;
    360381   mat4 T_model, R_model;
     382
     383   // TODO: Confirm there's nothing I need from the commented out models and delete them
     384   // (Check to make sure the textured square is drawn correctly)
    361385
    362386   /*
     
    434458   // player ship
    435459   obj = SceneObject();
     460   obj.type = TYPE_SHIP;
    436461   obj.shader_program = color_sp;
    437462   obj.points = {
     
    812837   addObjectToSceneDuringInit(obj);
    813838
     839   obj = SceneObject();
     840   obj.shader_program = laser_sp;
     841
     842   addLaserToScene(obj, vec3(0.34f, -2.0f, 1.6f), vec3(0.34f, -2.0f, -3.0f), vec3(0.0f, 1.0f, 0.0f), 0.04f);
     843
     844   obj = SceneObject();
     845   obj.shader_program = laser_sp;
     846
     847   addLaserToScene(obj, vec3(-0.34f, -2.0f, 1.6f), vec3(-0.34f, -2.0f, -3.0f), vec3(0.0f, 1.0f, 0.0f), 0.04f);
     848
    814849   vector<SceneObject>::iterator obj_it;
    815850
    816851   GLuint points_vbo, colors_vbo, selected_colors_vbo, texcoords_vbo,
    817       normals_vbo, ubo, model_mat_idx_vbo;
     852      normals_vbo, ubo, model_mat_idx_vbo, laser_points_vbo, laser_colors_vbo;
    818853
    819854   initializeBuffers(
     
    824859      &normals_vbo,
    825860      &ubo,
    826       &model_mat_idx_vbo);
     861      &model_mat_idx_vbo,
     862      &laser_points_vbo,
     863      &laser_colors_vbo);
    827864
    828865   populateBuffers(objects,
     
    834871      normals_vbo,
    835872      ubo,
    836       model_mat_idx_vbo);
    837 
    838    unsigned int max_num_lasers = 20;
    839    unsigned int num_lasers = 0;
    840 
    841    GLuint laser_points_vbo = 0;
    842    glGenBuffers(1, &laser_points_vbo);
    843    glBindBuffer(GL_ARRAY_BUFFER, laser_points_vbo);
    844    glBufferData(GL_ARRAY_BUFFER, max_num_lasers * 18 * sizeof(GLfloat) * 3, NULL, GL_DYNAMIC_DRAW);
    845 
    846    GLuint laser_colors_vbo = 0;
    847    glGenBuffers(1, &laser_colors_vbo);
    848    glBindBuffer(GL_ARRAY_BUFFER, laser_colors_vbo);
    849    glBufferData(GL_ARRAY_BUFFER, max_num_lasers * 18 * sizeof(GLfloat) * 3, NULL, GL_DYNAMIC_DRAW);
    850 
    851    addLaserToScene(vec3(0.34f, -2.0f, 1.6f), vec3(0.34f, -2.0f, -3.0f), vec3(0.0f, 1.0f, 0.0f), 0.04f,
    852       num_lasers, laser_points_vbo, laser_colors_vbo);
    853    addLaserToScene(vec3(-0.34f, -2.0f, 1.6f), vec3(-0.34f, -2.0f, -3.0f), vec3(0.0f, 1.0f, 0.0f), 0.04f,
    854       num_lasers, laser_points_vbo, laser_colors_vbo);
    855 
    856    GLuint vao = 0;
    857    glGenVertexArrays(1, &vao);
    858    glBindVertexArray(vao);
     873      model_mat_idx_vbo,
     874      laser_points_vbo,
     875      laser_colors_vbo);
     876
     877   GLuint color_vao = 0;
     878   glGenVertexArrays(1, &color_vao);
     879   glBindVertexArray(color_vao);
    859880
    860881   glEnableVertexAttribArray(0);
     
    872893   glVertexAttribIPointer(3, 1, GL_UNSIGNED_INT, 0, 0);
    873894
    874    GLuint vao2 = 0;
    875    glGenVertexArrays(1, &vao2);
    876    glBindVertexArray(vao2);
     895   GLuint texture_vao = 0;
     896   glGenVertexArrays(1, &texture_vao);
     897   glBindVertexArray(texture_vao);
    877898
    878899   glEnableVertexAttribArray(0);
     
    10451066               normals_vbo,
    10461067               ubo,
    1047                model_mat_idx_vbo);
     1068               model_mat_idx_vbo,
     1069               laser_points_vbo,
     1070               laser_colors_vbo);
    10481071
    10491072            elapsed_seconds_spawn -= 0.5f;
     
    10781101         }
    10791102
    1080          for (int i = 1; i < objects.size(); i++) {
    1081             if (!objects[i].deleted) {
     1103         // this code moves the asteroids
     1104         for (int i = 0; i < objects.size(); i++) {
     1105            if (objects[i].type == TYPE_ASTEROID && !objects[i].deleted) {
    10821106               transformObject(objects[i], translate(mat4(1.0f), vec3(0.0f, 0.0f, 0.04f)), ubo);
    10831107
     
    11751199            break;
    11761200         case STATE_GAME:
    1177             renderScene(objects,
    1178                color_sp, texture_sp,
    1179                vao, vao2,
     1201            renderScene(shaderBufferInfo,
     1202               color_sp, texture_sp, laser_sp,
     1203               color_vao, texture_vao, laser_vao,
    11801204               colors_vbo, selected_colors_vbo,
    1181                selectedObject,
    1182                shaderBufferInfo);
    1183             renderLasers(laser_sp, laser_vao, num_lasers);
     1205               selectedObject);
    11841206            renderSceneGui();
    11851207            break;
     
    12271249
    12281250      for (vector<SceneObject>::iterator it = objects.begin(); it != objects.end(); it++) {
     1251         if (it->type == TYPE_LASER) continue;
    12291252         for (unsigned int p_idx = 0; p_idx < it->points.size(); p_idx += 9) {
    12301253            if (faceClicked(
     
    14341457                  GLuint normals_vbo,
    14351458                  GLuint ubo,
    1436                   GLuint model_mat_idx_vbo) {
     1459                  GLuint model_mat_idx_vbo,
     1460                  GLuint laser_points_vbo,
     1461                  GLuint laser_colors_vbo) {
    14371462   addObjectToSceneDuringInit(obj);
    14381463
     
    14501475         normals_vbo,
    14511476         ubo,
    1452          model_mat_idx_vbo);
     1477         model_mat_idx_vbo,
     1478         laser_points_vbo,
     1479         laser_colors_vbo);
    14531480   } else {
    14541481      copyObjectDataToBuffers(objects.back(), shaderBufferInfo,
     
    14591486         normals_vbo,
    14601487         ubo,
    1461          model_mat_idx_vbo);
     1488         model_mat_idx_vbo,
     1489         laser_points_vbo,
     1490         laser_colors_vbo);
    14621491   }
    14631492}
     
    15271556
    15281557// currently only works correctly for lasers oriented along the z axis
    1529 void addLaserToScene(vec3 start, vec3 end, vec3 color, GLfloat width, unsigned int& num_lasers,
    1530                   GLuint laser_points_vbo, GLuint laser_colors_vbo) {
    1531    GLuint size_in_buffer = 18 * sizeof(GLfloat) * 3;
     1558void addLaserToScene(SceneObject& obj, vec3 start, vec3 end, vec3 color, GLfloat width) {
     1559   obj.id = objects.size(); // currently unused
     1560   obj.type = TYPE_LASER;
     1561   obj.deleted = false;
    15321562
    15331563   // I really need to create a direction vector and add/subtract that from start and end
     
    15361566   vec3 dir = end - start;
    15371567
    1538    vector<GLfloat> laser_points = {
    1539       end.x + width / 2,   end.y,  start.z - width,
    1540       end.x - width / 2,   end.y,  start.z - width,
     1568   obj.points = {
     1569      start.x + width / 2, start.y, start.z - width,
     1570      start.x - width / 2, start.y, start.z - width,
    15411571      start.x - width / 2, start.y, start.z,
    1542       end.x + width / 2,   end.y,  start.z - width,
     1572      start.x + width / 2, start.y, start.z - width,
    15431573      start.x - width / 2, start.y, start.z,
    15441574      start.x + width / 2, start.y, start.z,
     
    15511581      end.x + width / 2,   end.y,   end.z,
    15521582      end.x - width / 2,   end.y,   end.z,
    1553       start.x - width / 2, start.y, end.z + width,
     1583      end.x - width / 2,   end.y,  end.z + width,
    15541584      end.x + width / 2,   end.y,   end.z,
    1555       start.x - width / 2, start.y, end.z + width,
    1556       start.x + width / 2, start.y, end.z + width,
     1585      end.x - width / 2,   end.y,  end.z + width,
     1586      end.x + width / 2,   end.y,  end.z + width,
    15571587   };
    15581588
    15591589   vec3 end_color = vec3(1.0f, 0.0f, 0.0f); // temporary
    1560    vector<GLfloat> laser_colors = {
     1590   obj.colors = {
    15611591      end_color.x, end_color.y, end_color.z,
    15621592      end_color.x, end_color.y, end_color.z,
     
    15791609   };
    15801610
    1581    glBindBuffer(GL_ARRAY_BUFFER, laser_points_vbo);
    1582    glBufferSubData(GL_ARRAY_BUFFER, num_lasers * size_in_buffer, size_in_buffer, &laser_points[0]);
    1583 
    1584    glBindBuffer(GL_ARRAY_BUFFER, laser_colors_vbo);
    1585    glBufferSubData(GL_ARRAY_BUFFER, num_lasers * size_in_buffer, size_in_buffer, &laser_colors[0]);
    1586 
    1587    num_lasers++;
     1611   obj.num_points = obj.points.size() / 3;
     1612
     1613   objects.push_back(obj);
    15881614}
    15891615
     
    15951621                  GLuint* normals_vbo,
    15961622                  GLuint* ubo,
    1597                   GLuint* model_mat_idx_vbo) {
     1623                  GLuint* model_mat_idx_vbo,
     1624                  GLuint* laser_points_vbo,
     1625                  GLuint* laser_colors_vbo) {
    15981626   *points_vbo = 0;
    15991627   glGenBuffers(1, points_vbo);
     
    16161644   *model_mat_idx_vbo = 0;
    16171645   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);
    16181652}
    16191653
     
    16261660                  GLuint normals_vbo,
    16271661                  GLuint ubo,
    1628                   GLuint model_mat_idx_vbo) {
     1662                  GLuint model_mat_idx_vbo,
     1663                  GLuint laser_points_vbo,
     1664                  GLuint laser_colors_vbo) {
    16291665   GLsizeiptr points_buffer_size = 0;
    16301666   GLsizeiptr textures_buffer_size = 0;
     
    16371673   vector<SceneObject>::iterator it;
    16381674
    1639    /* Find all shaders that need to be used and  the number of objects and
     1675   /* Find all shaders that need to be used and the number of objects and
    16401676   * number of points for each shader. Construct a map from shader id to count
    16411677   * of points being drawn using that shader (for thw model matrix ubo, we
     
    16841720      shaderBufferInfo[shaderIt->first].vbo_base = lastShaderCount * 2;
    16851721      shaderBufferInfo[shaderIt->first].ubo_base = lastShaderUboCount * 2;
     1722
     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
    16861728      cout << "shader: " << shaderIt->first << endl;
    16871729      cout << "point counts: " << shaderCounts[shaderIt->first] << endl;
     
    17221764   glBindBuffer(GL_ARRAY_BUFFER, model_mat_idx_vbo);
    17231765   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);
    17241774
    17251775   for (it = objects.begin(); it != objects.end(); it++) {
     
    17311781         normals_vbo,
    17321782         ubo,
    1733          model_mat_idx_vbo);
     1783         model_mat_idx_vbo,
     1784         laser_points_vbo,
     1785         laser_colors_vbo);
    17341786   }
    17351787}
     
    17431795                  GLuint normals_vbo,
    17441796                  GLuint ubo,
    1745                   GLuint model_mat_idx_vbo) {
     1797                  GLuint model_mat_idx_vbo,
     1798                  GLuint laser_points_vbo,
     1799                  GLuint laser_colors_vbo) {
    17461800   BufferInfo* bufferInfo = &shaderBufferInfo[obj.shader_program];
    17471801
     
    17491803   obj.ubo_offset = bufferInfo->ubo_base + bufferInfo->ubo_offset;
    17501804
    1751    glBindBuffer(GL_ARRAY_BUFFER, points_vbo);
    1752    glBufferSubData(GL_ARRAY_BUFFER, obj.vertex_vbo_offset * sizeof(GLfloat) * 3, obj.points.size() * sizeof(GLfloat), &obj.points[0]);
    1753 
    1754    glBindBuffer(GL_ARRAY_BUFFER, colors_vbo);
    1755    glBufferSubData(GL_ARRAY_BUFFER, obj.vertex_vbo_offset * sizeof(GLfloat) * 3, obj.colors.size() * sizeof(GLfloat), &obj.colors[0]);
    1756 
    1757    glBindBuffer(GL_ARRAY_BUFFER, selected_colors_vbo);
    1758    glBufferSubData(GL_ARRAY_BUFFER, obj.vertex_vbo_offset * sizeof(GLfloat) * 3, obj.selected_colors.size() * sizeof(GLfloat), &obj.selected_colors[0]);
    1759 
    1760    glBindBuffer(GL_ARRAY_BUFFER, texcoords_vbo);
    1761    glBufferSubData(GL_ARRAY_BUFFER, obj.vertex_vbo_offset * sizeof(GLfloat) * 2, obj.texcoords.size() * sizeof(GLfloat), &obj.texcoords[0]);
    1762 
    1763    glBindBuffer(GL_ARRAY_BUFFER, normals_vbo);
    1764    glBufferSubData(GL_ARRAY_BUFFER, obj.vertex_vbo_offset * sizeof(GLfloat) * 3, obj.normals.size() * sizeof(GLfloat), &obj.normals[0]);
    1765 
    1766    glBindBuffer(GL_ARRAY_BUFFER, model_mat_idx_vbo);
    1767    for (int i = 0; i < obj.num_points; i++) {
    1768       glBufferSubData(GL_ARRAY_BUFFER, (obj.vertex_vbo_offset + i) * sizeof(GLuint), sizeof(GLuint), &obj.ubo_offset);
    1769    }
    1770 
    1771    obj.model_mat = obj.model_transform * obj.model_base;
    1772    glBindBuffer(GL_UNIFORM_BUFFER, ubo);
    1773    glBufferSubData(GL_UNIFORM_BUFFER, obj.ubo_offset * sizeof(mat4), sizeof(mat4), value_ptr(obj.model_mat));
     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
     1818      glBindBuffer(GL_ARRAY_BUFFER, selected_colors_vbo);
     1819      glBufferSubData(GL_ARRAY_BUFFER, obj.vertex_vbo_offset * sizeof(GLfloat) * 3, obj.selected_colors.size() * sizeof(GLfloat), &obj.selected_colors[0]);
     1820
     1821      glBindBuffer(GL_ARRAY_BUFFER, texcoords_vbo);
     1822      glBufferSubData(GL_ARRAY_BUFFER, obj.vertex_vbo_offset * sizeof(GLfloat) * 2, obj.texcoords.size() * sizeof(GLfloat), &obj.texcoords[0]);
     1823
     1824      glBindBuffer(GL_ARRAY_BUFFER, normals_vbo);
     1825      glBufferSubData(GL_ARRAY_BUFFER, obj.vertex_vbo_offset * sizeof(GLfloat) * 3, obj.normals.size() * sizeof(GLfloat), &obj.normals[0]);
     1826
     1827      glBindBuffer(GL_ARRAY_BUFFER, model_mat_idx_vbo);
     1828      for (int i = 0; i < obj.num_points; i++) {
     1829         glBufferSubData(GL_ARRAY_BUFFER, (obj.vertex_vbo_offset + i) * sizeof(GLuint), sizeof(GLuint), &obj.ubo_offset);
     1830      }
     1831
     1832      obj.model_mat = obj.model_transform * obj.model_base;
     1833      glBindBuffer(GL_UNIFORM_BUFFER, ubo);
     1834      glBufferSubData(GL_UNIFORM_BUFFER, obj.ubo_offset * sizeof(mat4), sizeof(mat4), value_ptr(obj.model_mat));
     1835   }
    17741836
    17751837   bufferInfo->vbo_offset += obj.num_points;
     
    17871849}
    17881850
    1789 void renderScene(vector<SceneObject>& objects,
    1790                   GLuint color_sp, GLuint texture_sp,
    1791                   GLuint vao1, GLuint vao2,
     1851void renderScene(map<GLuint, BufferInfo>& shaderBufferInfo,
     1852                  GLuint color_sp, GLuint texture_sp, GLuint laser_sp,
     1853                  GLuint color_vao, GLuint texture_vao, GLuint laser_vao,
    17921854                  GLuint colors_vbo, GLuint selected_colors_vbo,
    1793                   SceneObject* selectedObject,
    1794                   map<GLuint, BufferInfo>& shaderBufferInfo) {
     1855                  SceneObject* selectedObject) {
    17951856
    17961857   glUseProgram(color_sp);
    1797    glBindVertexArray(vao1);
     1858   glBindVertexArray(color_vao);
    17981859
    17991860   if (selectedObject != NULL) {
     
    18101871
    18111872   glUseProgram(texture_sp);
    1812    glBindVertexArray(vao2);
     1873   glBindVertexArray(texture_vao);
    18131874
    18141875   glDrawArrays(GL_TRIANGLES, shaderBufferInfo[texture_sp].vbo_base, shaderBufferInfo[texture_sp].vbo_offset);
    1815 }
    1816 
    1817 void renderLasers(GLuint sp, GLuint vao, unsigned int numLasers) {
    1818    glUseProgram(sp);
    1819    glBindVertexArray(vao);
    1820 
    1821    glDrawArrays(GL_TRIANGLES, 0, numLasers * 18);
     1876
     1877   glUseProgram(laser_sp);
     1878   glBindVertexArray(laser_vao);
     1879
     1880   glDrawArrays(GL_TRIANGLES, shaderBufferInfo[laser_sp].vbo_base, shaderBufferInfo[laser_sp].vbo_offset);
    18221881}
    18231882
     
    19211980                  GLuint normals_vbo,
    19221981                  GLuint ubo,
    1923                   GLuint model_mat_idx_vbo) {
     1982                  GLuint model_mat_idx_vbo,
     1983                  GLuint laser_points_vbo,
     1984                  GLuint laser_colors_vbo) {
    19241985   SceneObject obj = SceneObject();
     1986   obj.type = TYPE_ASTEROID;
    19251987   obj.shader_program = shader;
    19261988
     
    20392101                  normals_vbo,
    20402102                  ubo,
    2041                   model_mat_idx_vbo);
     2103                  model_mat_idx_vbo,
     2104                  laser_points_vbo,
     2105                  laser_colors_vbo);
    20422106}
    20432107
Note: See TracChangeset for help on using the changeset viewer.