Changeset 7a55b49 in opengl-game for new-game.cpp


Ignore:
Timestamp:
Jan 31, 2019, 6:09:57 AM (6 years ago)
Author:
Dmitry Portnoy <dmp1488@…>
Branches:
feature/imgui-sdl, master, points-test
Children:
0414306
Parents:
ae0c7f4
Message:

Create the ShaderModelGroup struct and start moving info required for rendering explosions into an instance of it

File:
1 edited

Legend:

Unmodified
Added
Removed
  • new-game.cpp

    rae0c7f4 r7a55b49  
    109109};
    110110
     111struct ShaderModelGroup {
     112   GLuint shaderProgram;
     113   GLuint vao;
     114   unsigned int numPoints;
     115};
     116
    111117void glfw_error_callback(int error, const char* description);
    112118
     
    146152void removeObjectFromScene(SceneObject& obj, GLuint ubo);
    147153
     154ShaderModelGroup createModelGroup(GLuint shaderProgram);
     155void removeModelFromGroup(ShaderModelGroup& modelGroup, SceneObject& model);
     156void addModelToGroup(ShaderModelGroup& modelGroup, SceneObject& model);
     157
    148158void calculateObjectBoundingBox(SceneObject* obj);
    149159
     
    156166                  GLuint* model_mat_idx_vbo);
    157167
    158 GLuint initializeParticleEffectBuffers(vec3 origin, mat4 proj, mat4 view, GLuint explosion_sp,
     168ShaderModelGroup initializeParticleEffectBuffers(vec3 origin, mat4 proj, mat4 view, GLuint explosion_sp,
    159169                  map<GLuint, BufferInfo>& shaderBufferInfo,
    160170                  GLuint points_vbo,
     
    200210void renderMainMenuGui();
    201211
    202 void renderScene(map<GLuint, BufferInfo>& shaderBufferInfo,
    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);
     212void 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);
    206216
    207217void renderSceneGui();
     
    577587   proj_mat = make_mat4(proj_arr);
    578588
    579    GLuint explosion_vao = initializeParticleEffectBuffers(vec3(0.0f, -1.2f, 0.65f), proj_mat, view_mat,
     589   ShaderModelGroup explosion_group = initializeParticleEffectBuffers(vec3(0.0f, -1.2f, 0.65f), proj_mat, view_mat,
    580590      explosion_sp,
    581591      shaderBufferInfo,
     
    959969            break;
    960970         case STATE_GAME:
    961             renderScene(shaderBufferInfo,
    962                ship_sp, asteroid_sp, laser_sp, explosion_sp,
    963                ship_vao, asteroid_vao, laser_vao, explosion_vao,
    964                colors_vbo, ubo, selectedObject);
     971            renderScene(shaderBufferInfo, ubo,
     972               ship_sp, asteroid_sp, laser_sp,
     973               ship_vao, asteroid_vao, laser_vao,
     974               explosion_group);
    965975            renderSceneGui();
    966976            break;
     
    18941904}
    18951905
     1906ShaderModelGroup createModelGroup(GLuint shaderProgram) {
     1907   ShaderModelGroup smg;
     1908
     1909   smg.shaderProgram = shaderProgram;
     1910
     1911   return smg;
     1912}
     1913
     1914void removeModelFromGroup(ShaderModelGroup& modelGroup, SceneObject& model) {
     1915   // TODO: Implement
     1916}
     1917
     1918void addModelToGroup(ShaderModelGroup& modelGroup, SceneObject& model) {
     1919   // TODO: Implement
     1920}
     1921
    18961922void initializeBuffers(
    18971923                  GLuint* points_vbo,
     
    19201946}
    19211947
    1922 GLuint initializeParticleEffectBuffers(vec3 origin, mat4 proj, mat4 view, GLuint explosion_sp,
     1948ShaderModelGroup initializeParticleEffectBuffers(vec3 origin, mat4 proj, mat4 view, GLuint explosion_sp,
    19231949                  map<GLuint, BufferInfo>& shaderBufferInfo,
    19241950                  GLuint points_vbo,
     
    19451971   mat4 model_mat = translate(mat4(1.0f), origin);
    19461972
    1947    glUseProgram(explosion_sp);
     1973   ShaderModelGroup modelGroup;
     1974   modelGroup.shaderProgram = explosion_sp;
     1975
     1976   glUseProgram(modelGroup.shaderProgram);
    19481977
    19491978   GLuint proj_mat_loc = glGetUniformLocation(explosion_sp, "proj");
     
    19671996   glBufferData(GL_ARRAY_BUFFER, sizeof(vt), vt, GL_STATIC_DRAW);
    19681997
    1969    GLuint vao;
    1970    glGenVertexArrays(1, &vao);
    1971    glBindVertexArray(vao);
     1998   glGenVertexArrays(1, &modelGroup.vao);
     1999   glBindVertexArray(modelGroup.vao);
    19722000
    19732001   glEnableVertexAttribArray(0);
     
    19802008   glVertexAttribPointer(1, 1, GL_FLOAT, GL_FALSE, 0, NULL);
    19812009
    1982    objExplosion = createExplosion(explosion_sp);
     2010   objExplosion = createExplosion(modelGroup.shaderProgram);
    19832011   addObjectToScene(objExplosion, shaderBufferInfo,
    19842012      points_vbo,
     
    19902018      0);
    19912019
    1992    return vao;
     2020   return modelGroup;
    19932021}
    19942022
     
    23162344}
    23172345
    2318 void renderScene(map<GLuint, BufferInfo>& shaderBufferInfo,
    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) {
     2346void 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) {
    23222350
    23232351   glUseProgram(ship_sp);
     
    23382366   glDrawArrays(GL_TRIANGLES, shaderBufferInfo[laser_sp].vbo_base, shaderBufferInfo[laser_sp].vbo_offset);
    23392367
    2340    // To render explosions, my new shader descriptor object needs to have a refernece to the shader and the vao
     2368   // To render explosions, my new shader descriptor object needs to have a reference to the shader and the vao
    23412369   // and know the number of points to render.
    23422370
    2343    glUseProgram(explosion_sp);
     2371   glUseProgram(explosion_group.shaderProgram);
    23442372
    23452373   glEnable(GL_PROGRAM_POINT_SIZE);
    2346    glBindVertexArray(explosion_vao);
     2374   glBindVertexArray(explosion_group.vao);
    23472375
    23482376   glBindBuffer(GL_UNIFORM_BUFFER, ubo);
    23492377   glBufferSubData(GL_UNIFORM_BUFFER, 0, sizeof(mat4), value_ptr(objExplosion->model_mat));
    23502378
    2351    glDrawArrays(GL_POINTS, 0, shaderBufferInfo[explosion_sp].vbo_offset);
     2379   glDrawArrays(GL_POINTS, 0, shaderBufferInfo[explosion_group.shaderProgram].vbo_offset);
    23522380
    23532381   glBindBuffer(GL_UNIFORM_BUFFER, ubo);
Note: See TracChangeset for help on using the changeset viewer.