Advertisement
PaulGalindoIsart

simple_renderer.cpp

Jun 17th, 2020
599
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.27 KB | None | 0 0
  1.     // Render meshes
  2.     {
  3.         glEnable(GL_CULL_FACE);
  4.         glEnable(GL_DEPTH_TEST);
  5.  
  6.         gl->pbrShader.Use();
  7.  
  8.         glUniformMatrix4fv(gl->pbrShader.projLoc, 1, GL_FALSE, projection.e);
  9.         glUniformMatrix4fv(gl->pbrShader.viewLoc, 1, GL_FALSE, view.e);
  10.  
  11.         mat4 viewInverse = Mat4::InverseTransformNoScale(view);
  12.        
  13.         GLMesh* lastMesh = nullptr;
  14.         GLMaterial* lastMaterial = nullptr;
  15.         for (GLDrawCall& drawCall : gl->drawList.drawCalls)
  16.         {
  17.             mat4 modelView    = view * drawCall.model;
  18.             mat4 normalMatrix = Mat4::Transpose(drawCall.modelInverse * viewInverse);
  19.  
  20.             glUniformMatrix4fv(gl->pbrShader.modelViewLoc, 1, GL_FALSE, modelView.e);
  21.             glUniformMatrix4fv(gl->pbrShader.normalMatrixLoc, 1, GL_FALSE, normalMatrix.e);
  22.            
  23.             if (drawCall.material != lastMaterial)
  24.             {
  25.                 drawCall.material->BindTo(gl->pbrShader);
  26.                 lastMaterial = drawCall.material;
  27.             }
  28.  
  29.             if (drawCall.mesh != lastMesh)
  30.             {
  31.                 drawCall.mesh->Bind();
  32.                 lastMesh = drawCall.mesh;
  33.             }
  34.  
  35.             drawCall.mesh->Draw();
  36.         }
  37.     }
  38.    
  39.     gl->skybox.Draw(projection, view);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement