Changeset 4a9416a in opengl-game for new-game.cpp


Ignore:
Timestamp:
Apr 26, 2020, 9:50:00 PM (4 years ago)
Author:
Dmitry Portnoy <dmitry.portnoy@…>
Branches:
feature/imgui-sdl, master
Children:
b8d4456
Parents:
52a02e6
git-author:
Dmitry Portnoy <dmitry.portnoy@…> (04/26/20 19:00:18)
git-committer:
Dmitry Portnoy <dmitry.portnoy@…> (04/26/20 21:50:00)
Message:

Create a pipeline and shaders to render explosions

File:
1 edited

Legend:

Unmodified
Added
Removed
  • new-game.cpp

    r52a02e6 r4a9416a  
    4747};
    4848
     49/*** START OF REFACTORED CODE ***/
    4950enum ObjectType {
    5051   TYPE_SHIP,
     
    6768   UNIFORM_3F,
    6869};
     70/*** END OF REFACTORED CODE ***/
    6971
    7072enum UIValueType {
     
    7375};
    7476
     77/*** START OF REFACTORED CODE ***/
    7578struct SceneObject {
    7679   unsigned int id;
     
    153156   unsigned int vboCapacity;
    154157};
     158/*** END OF REFACTORED CODE ***/
    155159
    156160struct UIValue {
     
    193197                  map<ObjectType, ShaderModelGroup>& modelGroups,
    194198                  GLuint ubo);
    195 /*** END OF REFACTORED CODE ***/
    196199void removeObjectFromScene(SceneObject& obj, GLuint ubo);
    197200
     
    200203void addModelToGroup(ShaderModelGroup& modelGroup, SceneObject& model);
    201204
    202 /*** START OF REFACTORED CODE ***/
    203205void defineModelGroupAttrib(ShaderModelGroup& modelGroup, string name, AttribType attribType, GLint size, GLenum type, size_t fieldOffset);
    204206void defineModelGroupUniform(ShaderModelGroup& modelGroup, string name, AttribType attribType, GLint size, UniformType type, GLfloat* data);
     
    206208void bindUniformData(AttribInfo& attrib);
    207209void bindUniformData(AttribInfo& attrib, GLfloat* data);
    208 /*** END OF REFACTORED CODE ***/
    209210
    210211size_t GLsizeof(GLenum);
     
    214215void calculateObjectBoundingBox(SceneObject* obj);
    215216
    216 /*** START OF REFACTORED CODE ***/
    217217void populateBuffers(vector<SceneObject*>& objects,
    218218                  map<GLuint, BufferInfo>& shaderBufferInfo,
     
    231231Asteroid* createAsteroid(vec3 pos);
    232232Laser* createLaser(vec3 start, vec3 end, vec3 color, GLfloat width);
    233 /*** END OF REFACTORED CODE ***/
    234233ParticleEffect* createExplosion(mat4 model_mat);
    235234
    236 /*** START OF REFACTORED CODE ***/
    237235void translateLaser(Laser* laser, const vec3& translation, GLuint ubo);
    238236void updateLaserTarget(Laser* laser, vector<SceneObject*>& objects, ShaderModelGroup& laserSmg, GLuint asteroid_sp);
     
    254252
    255253const int KEY_STATE_UNCHANGED = -1;
     254/*** START OF REFACTORED CODE ***/
    256255const bool FULLSCREEN = false;
    257256const int EXPLOSION_PARTICLE_COUNT = 300;
    258257unsigned int MAX_UNIFORMS = 0; // Requires OpenGL constants only available at runtime, so it can't be const
     258/*** END OF REFACTORED CODE ***/
    259259
    260260int key_state[NUM_KEYS];
     
    381381      cout << "OpenGL debug message callback is not supported" << endl;
    382382   }
    383 /*** END OF REFACTORED CODE ***/
    384383
    385384   srand(time(0));
     
    409408   cout << "MAX_UNIFORMS: " << MAX_UNIFORMS << endl;
    410409
    411 /*** START OF REFACTORED CODE ***/
    412410   // Setup Dear ImGui binding
    413411   IMGUI_CHECKVERSION();
     
    489487    */
    490488
     489/*** START OF REFACTORED CODE ***/
    491490   GLfloat laserColor[3] = {0.2f, 1.0f, 0.2f};
    492491   GLfloat curTime, prevTime, elapsedTime;
     
    498497   map<ObjectType, ShaderModelGroup> modelGroups;
    499498
    500 /*** START OF REFACTORED CODE ***/
    501499   modelGroups[TYPE_SHIP] = createModelGroup(
    502500      loadShaderProgram("gl-shaders/ship.vert", "gl-shaders/ship.frag"));
     
    558556
    559557   initModelGroupAttribs(modelGroups[TYPE_LASER]);
    560 /*** END OF REFACTORED CODE ***/
    561558
    562559   modelGroups[TYPE_EXPLOSION] = createModelGroup(
     
    580577   initModelGroupAttribs(modelGroups[TYPE_EXPLOSION]);
    581578
    582 /*** START OF REFACTORED CODE ***/
    583579   cam_pos = vec3(0.0f, 0.0f, 2.0f);
    584580   float cam_yaw = 0.0f * 2.0f * 3.14159f / 360.0f;
     
    666662
    667663   GLuint laser_sp_models_ub_index = glGetUniformBlockIndex(modelGroups[TYPE_LASER].shaderProgram, "models");
    668 /*** END OF REFACTORED CODE ***/
    669664
    670665   GLuint explosion_sp_models_ub_index = glGetUniformBlockIndex(modelGroups[TYPE_EXPLOSION].shaderProgram, "models");
    671666
    672667
    673 /*** START OF REFACTORED CODE ***/
    674668   glUseProgram(modelGroups[TYPE_SHIP].shaderProgram);
    675669   bindUniformData(modelGroups[TYPE_SHIP].attribs["view"]);
     
    698692   glUniformBlockBinding(modelGroups[TYPE_LASER].shaderProgram, laser_sp_models_ub_index, ub_binding_point);
    699693   glBindBufferRange(GL_UNIFORM_BUFFER, ub_binding_point, ubo, 0, GL_MAX_UNIFORM_BLOCK_SIZE);
    700 /*** END OF REFACTORED CODE ***/
    701694
    702695
     
    707700   glUniformBlockBinding(modelGroups[TYPE_EXPLOSION].shaderProgram, explosion_sp_models_ub_index, ub_binding_point);
    708701   glBindBufferRange(GL_UNIFORM_BUFFER, ub_binding_point, ubo, 0, GL_MAX_UNIFORM_BLOCK_SIZE);
     702/*** END OF REFACTORED CODE ***/
    709703
    710704
     
    881875                     score++;
    882876
     877/*** START OF REFACTORED CODE ***/
    883878                     addObjectToScene(createExplosion(model_mat), shaderBufferInfo, modelGroups, ubo);
    884879                  }
     
    889884                  }
    890885               }
    891 /*** START OF REFACTORED CODE ***/
    892886            }
    893887         }
     
    977971         cam_moved = false;
    978972      }
    979 /*** END OF REFACTORED CODE ***/
    980973
    981974      glUseProgram(modelGroups[TYPE_EXPLOSION].shaderProgram);
    982975      bindUniformData(modelGroups[TYPE_EXPLOSION].attribs["cur_time"]);
    983976
    984 /*** START OF REFACTORED CODE ***/
    985977      // Render scene
    986978
     
    12001192
    12011193
     1194/*** START OF REFACTORED CODE ***/
    12021195GLuint loadShader(GLenum type, string file) {
    12031196  cout << "Loading shader from file " << file << endl;
     
    12791272  return image_data;
    12801273}
     1274/*** END OF REFACTORED CODE ***/
    12811275
    12821276bool faceClicked(array<vec3, 3> points, SceneObject* obj, vec4 world_ray, vec4 cam, vec4& click_point) {
     
    13241318}
    13251319
     1320/*** START OF REFACTORED CODE ***/
    13261321// TODO: Pass a reference, not a pointer
    13271322void initObject(SceneObject* obj) {
     
    14461441}
    14471442
    1448 /*** START OF REFACTORED CODE ***/
    14491443SceneObject* createShip() {
    14501444   SceneObject* ship = new SceneObject();
     
    19171911   return obj;
    19181912}
    1919 /*** END OF REFACTORED CODE ***/
    19201913
    19211914ShaderModelGroup createModelGroup(GLuint shaderProgram) {
     
    19421935}
    19431936
    1944 /*** START OF REFACTORED CODE ***/
    19451937void defineModelGroupAttrib(ShaderModelGroup& modelGroup, string name, AttribType attribType,
    19461938                  GLint size, GLenum type, size_t fieldOffset) {
     
    20312023   }
    20322024}
    2033 /*** END OF REFACTORED CODE ***/
    20342025
    20352026/* The purpose of this function is to replace the use of sizeof() when calling
     
    24032394   glDisable(GL_BLEND);
    24042395}
     2396/*** END OF REFACTORED CODE ***/
    24052397
    24062398void renderSceneGui(map<string, vector<UIValue>> valueLists) {
     
    26712663   return obj;
    26722664}
    2673 /*** END OF REFACTORED CODE ***/
    26742665
    26752666// TODO: Maybe pass in startTime instead of calling glfwGetTime() here
     
    27032694   return obj;
    27042695}
     2696/*** END OF REFACTORED CODE ***/
Note: See TracChangeset for help on using the changeset viewer.