Changes in / [bebfd5c:ae0c7f4] in opengl-game
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
explosion.vert
rbebfd5c rae0c7f4 41 41 42 42 //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); 44 44 gl_PointSize = 15.0; // size in pixels 45 45 } -
new-game.cpp
rbebfd5c rae0c7f4 70 70 vector<GLfloat> texcoords; 71 71 vector<GLfloat> normals; 72 vector<GLfloat> selected_colors;73 72 bool deleted; 74 73 vec3 bounding_center; … … 92 91 SceneObject* effectedObject; 93 92 93 // TODO: Why not just use an initializer list for all the instance variables 94 94 EffectOverTime(float& effectedValue, float changePerSecond, SceneObject* object) 95 95 : effectedValue(effectedValue), changePerSecond(changePerSecond), effectedObject(object) { … … 139 139 GLuint points_vbo, 140 140 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,188 141 GLuint texcoords_vbo, 189 142 GLuint normals_vbo, … … 191 144 GLuint model_mat_idx_vbo, 192 145 GLuint asteroid_sp); 146 void removeObjectFromScene(SceneObject& obj, GLuint ubo); 147 148 void calculateObjectBoundingBox(SceneObject* obj); 149 150 void 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 158 GLuint 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 167 void 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 177 void 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); 193 186 194 187 void transformObject(SceneObject& obj, const mat4& transform, GLuint ubo); 195 188 196 // instead of using these methods, create constructors for these189 // TODO: instead of using these methods, create constructors for these 197 190 SceneObject* createShip(GLuint shader); 198 191 Asteroid* createAsteroid(vec3 pos, GLuint shader); … … 208 201 209 202 void 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); 214 206 215 207 void renderSceneGui(); … … 262 254 263 255 SceneObject* objExplosion; 264 SceneObject* objFirst; // TODO: Set this, probably in populateBuffers and wherever else is appropriate.256 SceneObject* objFirst; 265 257 266 258 /* … … 453 445 map<GLuint, BufferInfo> shaderBufferInfo; 454 446 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"); 458 448 GLuint asteroid_sp = loadShaderProgram("./asteroid.vert", "./asteroid.frag"); 459 GLuint texture_sp = loadShaderProgram("./texture.vert", "./texture.frag");460 449 GLuint laser_sp = loadShaderProgram("./laser.vert", "./laser.frag"); 461 450 GLuint explosion_sp = loadShaderProgram("./explosion.vert", "./explosion.frag"); 462 451 463 shaderBufferInfo[ color_sp] = BufferInfo();452 shaderBufferInfo[ship_sp] = BufferInfo(); 464 453 shaderBufferInfo[asteroid_sp] = BufferInfo(); 465 shaderBufferInfo[texture_sp] = BufferInfo();466 454 shaderBufferInfo[laser_sp] = BufferInfo(); 467 455 shaderBufferInfo[explosion_sp] = BufferInfo(); … … 472 460 473 461 // player ship 474 SceneObject* ship = createShip( color_sp);462 SceneObject* ship = createShip(ship_sp); 475 463 objects.push_back(ship); 476 464 477 465 vector<SceneObject>::iterator obj_it; 478 466 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; 481 468 482 469 initializeBuffers( 483 470 &points_vbo, 484 471 &colors_vbo, 485 &selected_colors_vbo,486 472 &texcoords_vbo, 487 473 &normals_vbo, … … 493 479 points_vbo, 494 480 colors_vbo, 495 selected_colors_vbo,496 481 texcoords_vbo, 497 482 normals_vbo, 498 483 ubo, 499 484 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); 506 490 507 491 glEnableVertexAttribArray(0); … … 537 521 glBindBuffer(GL_ARRAY_BUFFER, colors_vbo); 538 522 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);560 523 561 524 glBindBuffer(GL_ARRAY_BUFFER, normals_vbo); … … 619 582 points_vbo, 620 583 colors_vbo, 621 selected_colors_vbo,622 584 texcoords_vbo, 623 585 normals_vbo, … … 661 623 GLuint ub_binding_point = 0; 662 624 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"); 667 628 668 629 GLuint asteroid_view_mat_loc = glGetUniformLocation(asteroid_sp, "view"); 669 630 GLuint asteroid_proj_mat_loc = glGetUniformLocation(asteroid_sp, "proj"); 670 631 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");675 632 676 633 GLuint laser_view_mat_loc = glGetUniformLocation(laser_sp, "view"); … … 684 641 685 642 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); 691 648 glBindBufferRange(GL_UNIFORM_BUFFER, ub_binding_point, ubo, 0, GL_MAX_UNIFORM_BLOCK_SIZE); 692 649 … … 697 654 698 655 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);707 656 glBindBufferRange(GL_UNIFORM_BUFFER, ub_binding_point, ubo, 0, GL_MAX_UNIFORM_BLOCK_SIZE); 708 657 … … 793 742 points_vbo, 794 743 colors_vbo, 795 selected_colors_vbo,796 744 texcoords_vbo, 797 745 normals_vbo, 798 746 ubo, 799 747 model_mat_idx_vbo, 800 asteroid_sp, 801 explosion_sp); 748 asteroid_sp); 802 749 803 750 elapsed_seconds_spawn -= 0.5f; … … 854 801 points_vbo, 855 802 colors_vbo, 856 selected_colors_vbo,857 803 texcoords_vbo, 858 804 normals_vbo, 859 805 ubo, 860 806 model_mat_idx_vbo, 861 asteroid_sp, 862 explosion_sp); 807 asteroid_sp); 863 808 } else if (key_state[GLFW_KEY_Z] == GLFW_RELEASE) { 864 809 removeObjectFromScene(*leftLaser, ubo); … … 873 818 points_vbo, 874 819 colors_vbo, 875 selected_colors_vbo,876 820 texcoords_vbo, 877 821 normals_vbo, 878 822 ubo, 879 823 model_mat_idx_vbo, 880 asteroid_sp, 881 explosion_sp); 824 asteroid_sp); 882 825 } else if (key_state[GLFW_KEY_X] == GLFW_RELEASE) { 883 826 removeObjectFromScene(*rightLaser, ubo); … … 895 838 } 896 839 if (((Asteroid*)objects[i])->hp <= 0) { 897 printVector("center", objects[i]->bounding_center);898 899 840 // TODO: Optimize this so I don't recalculate the camera rotation every time 900 841 float cam_pitch = -50.0f * 2.0f * 3.14159f / 360.0f; … … 909 850 // initiate an explosion 910 851 glUseProgram(explosion_sp); 911 852 912 853 GLuint model_mat_loc = glGetUniformLocation(explosion_sp, "model_mat"); 913 854 glUniformMatrix4fv(model_mat_loc, 1, GL_FALSE, value_ptr(objExplosion->model_mat)); 914 855 915 // TODO: To get ubos working for the explosion,916 // I need to calculate the correct ubo index for the model matrix917 // Then I need to copy the matrix into the right place in the ubo and918 // copy the index into the correct uniform919 920 // STEP 1: Make sure the UBO offset for the explosion shader is correct921 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 926 856 glUniform1f(explosion_start_time_loc, (GLfloat)glfwGetTime()); 927 928 // generic code used to change a matrix in the ubo929 // we need to know the matrix of the first object in the ubo so we can save it and move it back930 // after the explosion is rendered931 // However, that should be done in the render loop, not here932 // Here, we are already saving the explosion model mat in objExplosion->model_mat, so that is all we need933 glBindBuffer(GL_UNIFORM_BUFFER, ubo);934 glBufferSubData(GL_UNIFORM_BUFFER, obj.ubo_offset * sizeof(mat4), sizeof(mat4), value_ptr(obj.model_mat));935 857 } 936 858 } … … 1015 937 //printVector("cam pos", cam_pos); 1016 938 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)); 1022 941 1023 942 glUseProgram(laser_sp); … … 1041 960 case STATE_GAME: 1042 961 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); 1047 965 renderSceneGui(); 1048 966 break; … … 1398 1316 GLuint points_vbo, 1399 1317 GLuint colors_vbo, 1400 GLuint selected_colors_vbo,1401 1318 GLuint texcoords_vbo, 1402 1319 GLuint normals_vbo, 1403 1320 GLuint ubo, 1404 1321 GLuint model_mat_idx_vbo, 1405 GLuint asteroid_sp, 1406 GLuint explosion_sp) { 1322 GLuint asteroid_sp) { 1407 1323 objects.push_back(obj); 1408 1324 … … 1424 1340 points_vbo, 1425 1341 colors_vbo, 1426 selected_colors_vbo,1427 1342 texcoords_vbo, 1428 1343 normals_vbo, 1429 1344 ubo, 1430 1345 model_mat_idx_vbo, 1431 asteroid_sp, 1432 explosion_sp); 1346 asteroid_sp); 1433 1347 } else { 1434 1348 copyObjectDataToBuffers(*objects.back(), shaderBufferInfo, 1435 1349 points_vbo, 1436 1350 colors_vbo, 1437 selected_colors_vbo,1438 1351 texcoords_vbo, 1439 1352 normals_vbo, … … 1880 1793 }; 1881 1794 ship->texcoords = { 0.0f }; 1882 ship->selected_colors = { 0.0f };1883 1795 1884 1796 mat4 T_model = translate(mat4(1.0f), vec3(0.0f, -1.2f, 1.65f)); … … 1985 1897 GLuint* points_vbo, 1986 1898 GLuint* colors_vbo, 1987 GLuint* selected_colors_vbo,1988 1899 GLuint* texcoords_vbo, 1989 1900 GLuint* normals_vbo, … … 1996 1907 glGenBuffers(1, colors_vbo); 1997 1908 1998 *selected_colors_vbo = 0;1999 glGenBuffers(1, selected_colors_vbo);2000 2001 1909 *texcoords_vbo = 0; 2002 1910 glGenBuffers(1, texcoords_vbo); … … 2016 1924 GLuint points_vbo, 2017 1925 GLuint colors_vbo, 2018 GLuint selected_colors_vbo,2019 1926 GLuint texcoords_vbo, 2020 1927 GLuint normals_vbo, 2021 1928 GLuint ubo, 2022 1929 GLuint model_mat_idx_vbo) { 2023 //unsigned int num_explosions = 1;2024 2025 1930 float vv[EXPLOSION_PARTICLE_COUNT * 3]; // initial velocities vec3 2026 1931 float vt[EXPLOSION_PARTICLE_COUNT]; // initial times … … 2052 1957 glUniformMatrix4fv(model_mat_loc, 1, GL_FALSE, value_ptr(model_mat)); 2053 1958 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 2065 1959 GLuint velocity_vbo; 2066 1960 glGenBuffers(1, &velocity_vbo); … … 2079 1973 glEnableVertexAttribArray(0); 2080 1974 glEnableVertexAttribArray(1); 2081 glEnableVertexAttribArray(2);2082 1975 2083 1976 glBindBuffer(GL_ARRAY_BUFFER, velocity_vbo); … … 2087 1980 glVertexAttribPointer(1, 1, GL_FLOAT, GL_FALSE, 0, NULL); 2088 1981 2089 // TODO: I think I can call glVertexAttribIPointer whenever the vbo_base changes2090 // to rebind the ubo index vbo2091 glBindBuffer(GL_ARRAY_BUFFER, model_mat_idx_vbo);2092 glVertexAttribIPointer(2, 1, GL_UNSIGNED_INT, 0, NULL);2093 2094 1982 objExplosion = createExplosion(explosion_sp); 2095 objExplosion->num_points = EXPLOSION_PARTICLE_COUNT;2096 1983 addObjectToScene(objExplosion, shaderBufferInfo, 2097 1984 points_vbo, 2098 1985 colors_vbo, 2099 selected_colors_vbo,2100 1986 texcoords_vbo, 2101 1987 normals_vbo, 2102 1988 ubo, 2103 1989 model_mat_idx_vbo, 2104 0, 2105 explosion_sp); 1990 0); 2106 1991 2107 1992 return vao; … … 2112 1997 GLuint points_vbo, 2113 1998 GLuint colors_vbo, 2114 GLuint selected_colors_vbo,2115 1999 GLuint texcoords_vbo, 2116 2000 GLuint normals_vbo, 2117 2001 GLuint ubo, 2118 2002 GLuint ubo_idx_vbo, 2119 GLuint asteroid_sp, 2120 GLuint explosion_sp) { 2003 GLuint asteroid_sp) { 2121 2004 GLsizeiptr num_points = 0; 2122 2005 GLsizeiptr num_objects = 0; … … 2176 2059 shaderBufferInfo[shaderCountIt->first].ubo_base = lastShaderUboCount * 2; 2177 2060 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 2190 2061 shaderBufferInfo[shaderCountIt->first].vbo_offset = 0; 2191 2062 shaderBufferInfo[shaderCountIt->first].ubo_offset = 0; … … 2204 2075 2205 2076 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);2209 2077 glBufferData(GL_ARRAY_BUFFER, num_points * sizeof(GLfloat) * 3, NULL, GL_DYNAMIC_DRAW); 2210 2078 … … 2225 2093 points_vbo, 2226 2094 colors_vbo, 2227 selected_colors_vbo,2228 2095 texcoords_vbo, 2229 2096 normals_vbo, … … 2238 2105 GLuint points_vbo, 2239 2106 GLuint colors_vbo, 2240 GLuint selected_colors_vbo,2241 2107 GLuint texcoords_vbo, 2242 2108 GLuint normals_vbo, … … 2249 2115 obj.ubo_offset = bufferInfo->ubo_base + bufferInfo->ubo_offset; 2250 2116 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; 2257 2119 } 2258 2120 2259 2121 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 2260 2127 glBindBuffer(GL_ARRAY_BUFFER, points_vbo); 2261 2128 glBufferSubData(GL_ARRAY_BUFFER, obj.vertex_vbo_offset * sizeof(GLfloat) * 3, obj.points.size() * sizeof(GLfloat), &obj.points[0]); … … 2267 2134 glBindBuffer(GL_ARRAY_BUFFER, colors_vbo); 2268 2135 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]);2272 2136 2273 2137 glBindBuffer(GL_ARRAY_BUFFER, normals_vbo); … … 2453 2317 2454 2318 void 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); 2477 2327 2478 2328 glUseProgram(asteroid_sp); … … 2481 2331 glDrawArrays(GL_TRIANGLES, shaderBufferInfo[asteroid_sp].vbo_base, shaderBufferInfo[asteroid_sp].vbo_offset); 2482 2332 2483 glUseProgram(texture_sp);2484 glBindVertexArray(texture_vao);2485 2486 glDrawArrays(GL_TRIANGLES, shaderBufferInfo[texture_sp].vbo_base, shaderBufferInfo[texture_sp].vbo_offset);2487 2488 2333 glEnable(GL_BLEND); 2489 2334 … … 2493 2338 glDrawArrays(GL_TRIANGLES, shaderBufferInfo[laser_sp].vbo_base, shaderBufferInfo[laser_sp].vbo_offset); 2494 2339 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 2495 2343 glUseProgram(explosion_sp); 2496 2497 //glActiveTexture(GL_TEXTURE1);2498 //glBindTexture(GL_TEXTURE_2D, tex); // tex is 0 here2499 2344 2500 2345 glEnable(GL_PROGRAM_POINT_SIZE); 2501 2346 glBindVertexArray(explosion_vao); 2502 2347 2348 glBindBuffer(GL_UNIFORM_BUFFER, ubo); 2349 glBufferSubData(GL_UNIFORM_BUFFER, 0, sizeof(mat4), value_ptr(objExplosion->model_mat)); 2350 2503 2351 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)); 2506 2355 2507 2356 glDisable(GL_PROGRAM_POINT_SIZE); … … 2710 2559 }; 2711 2560 obj->texcoords = { 0.0f }; 2712 obj->selected_colors = { 0.0f };2713 2561 2714 2562 mat4 T = translate(mat4(1.0f), pos); … … 2738 2586 2739 2587 initObject(obj); 2588 obj->num_points = EXPLOSION_PARTICLE_COUNT; 2740 2589 2741 2590 return obj;
Note:
See TracChangeset
for help on using the changeset viewer.