From 21301652ce771fd060ec209f7fb54e5f8a698dc3 Mon Sep 17 00:00:00 2001 From: Vladislav Khorev Date: Sat, 22 Feb 2025 21:04:23 +0300 Subject: [PATCH] Minor refactoring --- Game.cpp | 10 +++---- Game.h | 10 +++---- Renderer.cpp | 83 +++++++++++++++++++++++----------------------------- Renderer.h | 6 +++- main.cpp | 31 ++++++++++---------- 5 files changed, 67 insertions(+), 73 deletions(-) diff --git a/Game.cpp b/Game.cpp index 4140289..23c6325 100755 --- a/Game.cpp +++ b/Game.cpp @@ -26,16 +26,16 @@ namespace ZL std::shared_ptr pipeTexturePtr; std::shared_ptr gameOverTexturePtr; - VertexDataStruct birdMesh; + VertexRenderStruct birdMesh; - VertexDataStruct backgroundMesh; + VertexRenderStruct backgroundMesh; - VertexDataStruct pipeMesh; + VertexRenderStruct pipeMesh; - VertexDataStruct gameOverMesh; + VertexRenderStruct gameOverMesh; VertexDataStruct colorCubeMesh; - VertexDataStruct colorCubeMeshMutable; + VertexRenderStruct colorCubeMeshMutable; } diff --git a/Game.h b/Game.h index 3bb5f69..787fbe5 100755 --- a/Game.h +++ b/Game.h @@ -98,15 +98,15 @@ namespace ZL extern std::shared_ptr pipeTexturePtr; extern std::shared_ptr gameOverTexturePtr; - extern VertexDataStruct birdMesh; + extern VertexRenderStruct birdMesh; - extern VertexDataStruct backgroundMesh; + extern VertexRenderStruct backgroundMesh; - extern VertexDataStruct pipeMesh; + extern VertexRenderStruct pipeMesh; - extern VertexDataStruct gameOverMesh; + extern VertexRenderStruct gameOverMesh; extern VertexDataStruct colorCubeMesh; - extern VertexDataStruct colorCubeMeshMutable; + extern VertexRenderStruct colorCubeMeshMutable; } } \ No newline at end of file diff --git a/Renderer.cpp b/Renderer.cpp index 17c5630..6a3d67b 100755 --- a/Renderer.cpp +++ b/Renderer.cpp @@ -72,8 +72,6 @@ namespace ZL { result.TexCoordData.push_back(texCoordPos4); result.TexCoordData.push_back(texCoordPos1); - result.RefreshVBO(); - return result; } @@ -115,8 +113,6 @@ namespace ZL { } - result.RefreshVBO(); - return result; } @@ -192,12 +188,10 @@ namespace ZL { result.ColorData.push_back(cubeColors[i]); } - result.RefreshVBO(); - return result; } - void VertexDataStruct::RefreshVBO() + void VertexRenderStruct::RefreshVBO() { //Check if main thread, check if data is not empty... @@ -216,9 +210,9 @@ namespace ZL { glBindBuffer(GL_ARRAY_BUFFER, positionVBO->getBuffer()); - glBufferData(GL_ARRAY_BUFFER, PositionData.size() * 12, &PositionData[0], GL_STATIC_DRAW); + glBufferData(GL_ARRAY_BUFFER, data.PositionData.size() * 12, &data.PositionData[0], GL_STATIC_DRAW); - if (TexCoordData.size() > 0) + if (data.TexCoordData.size() > 0) { if (!texCoordVBO) { @@ -227,11 +221,11 @@ namespace ZL { glBindBuffer(GL_ARRAY_BUFFER, texCoordVBO->getBuffer()); - glBufferData(GL_ARRAY_BUFFER, TexCoordData.size() * 8, &TexCoordData[0], GL_STATIC_DRAW); + glBufferData(GL_ARRAY_BUFFER, data.TexCoordData.size() * 8, &data.TexCoordData[0], GL_STATIC_DRAW); } - if (NormalData.size() > 0) + if (data.NormalData.size() > 0) { if (!normalVBO) { @@ -240,10 +234,10 @@ namespace ZL { glBindBuffer(GL_ARRAY_BUFFER, normalVBO->getBuffer()); - glBufferData(GL_ARRAY_BUFFER, NormalData.size() * 12, &NormalData[0], GL_STATIC_DRAW); + glBufferData(GL_ARRAY_BUFFER, data.NormalData.size() * 12, &data.NormalData[0], GL_STATIC_DRAW); } - if (TangentData.size() > 0) + if (data.TangentData.size() > 0) { if (!tangentVBO) { @@ -252,10 +246,10 @@ namespace ZL { glBindBuffer(GL_ARRAY_BUFFER, tangentVBO->getBuffer()); - glBufferData(GL_ARRAY_BUFFER, TangentData.size() * 12, &TangentData[0], GL_STATIC_DRAW); + glBufferData(GL_ARRAY_BUFFER, data.TangentData.size() * 12, &data.TangentData[0], GL_STATIC_DRAW); } - if (BinormalData.size() > 0) + if (data.BinormalData.size() > 0) { if (!binormalVBO) { @@ -264,10 +258,10 @@ namespace ZL { glBindBuffer(GL_ARRAY_BUFFER, binormalVBO->getBuffer()); - glBufferData(GL_ARRAY_BUFFER, BinormalData.size() * 12, &BinormalData[0], GL_STATIC_DRAW); + glBufferData(GL_ARRAY_BUFFER, data.BinormalData.size() * 12, &data.BinormalData[0], GL_STATIC_DRAW); } - if (ColorData.size() > 0) + if (data.ColorData.size() > 0) { if (!colorVBO) { @@ -276,45 +270,40 @@ namespace ZL { glBindBuffer(GL_ARRAY_BUFFER, colorVBO->getBuffer()); - glBufferData(GL_ARRAY_BUFFER, ColorData.size() * 12, &ColorData[0], GL_STATIC_DRAW); + glBufferData(GL_ARRAY_BUFFER, data.ColorData.size() * 12, &data.ColorData[0], GL_STATIC_DRAW); } } - void VertexDataStruct::RotateByMatrix(Matrix3f m) + void VertexRenderStruct::RotateByMatrix(Matrix3f m) { - for (int i = 0; i < PositionData.size(); i++) + for (int i = 0; i < data.PositionData.size(); i++) { - PositionData[i] = MultVectorMatrix(PositionData[i], m); + data.PositionData[i] = MultVectorMatrix(data.PositionData[i], m); } - for (int i = 0; i < NormalData.size(); i++) + for (int i = 0; i < data.NormalData.size(); i++) { - NormalData[i] = MultVectorMatrix(NormalData[i], m); + data.NormalData[i] = MultVectorMatrix(data.NormalData[i], m); } - for (int i = 0; i < TangentData.size(); i++) + for (int i = 0; i < data.TangentData.size(); i++) { - TangentData[i] = MultVectorMatrix(TangentData[i], m); + data.TangentData[i] = MultVectorMatrix(data.TangentData[i], m); } - for (int i = 0; i < BinormalData.size(); i++) + for (int i = 0; i < data.BinormalData.size(); i++) { - BinormalData[i] = MultVectorMatrix(BinormalData[i], m); + data.BinormalData[i] = MultVectorMatrix(data.BinormalData[i], m); } RefreshVBO(); } - void VertexDataStruct::AssignFrom(const VertexDataStruct& v) + void VertexRenderStruct::AssignFrom(const VertexDataStruct& v) { - PositionData = v.PositionData; - NormalData = v.NormalData; - TangentData = v.TangentData; - BinormalData = v.BinormalData; - TexCoordData = v.TexCoordData; - ColorData = v.ColorData; + data = v; RefreshVBO(); } @@ -600,7 +589,7 @@ namespace ZL { glVertexAttribPointer(shader->attribList[attribName], 3, GL_FLOAT, GL_FALSE, stride, pointer); } - void Renderer::DrawVertexDataStruct(const VertexDataStruct& vertexDataStruct) + void Renderer::DrawVertexRenderStruct(const VertexRenderStruct& VertexRenderStruct) { static const std::string vNormal("vNormal"); static const std::string vTangent("vTangent"); @@ -610,36 +599,36 @@ namespace ZL { static const std::string vPosition("vPosition"); //Check if main thread, check if data is not empty... - if (vertexDataStruct.NormalData.size() > 0) + if (VertexRenderStruct.data.NormalData.size() > 0) { - glBindBuffer(GL_ARRAY_BUFFER, vertexDataStruct.normalVBO->getBuffer()); + glBindBuffer(GL_ARRAY_BUFFER, VertexRenderStruct.normalVBO->getBuffer()); VertexAttribPointer3fv(vNormal, 0, NULL); } - if (vertexDataStruct.TangentData.size() > 0) + if (VertexRenderStruct.data.TangentData.size() > 0) { - glBindBuffer(GL_ARRAY_BUFFER, vertexDataStruct.tangentVBO->getBuffer()); + glBindBuffer(GL_ARRAY_BUFFER, VertexRenderStruct.tangentVBO->getBuffer()); VertexAttribPointer3fv(vTangent, 0, NULL); } - if (vertexDataStruct.BinormalData.size() > 0) + if (VertexRenderStruct.data.BinormalData.size() > 0) { - glBindBuffer(GL_ARRAY_BUFFER, vertexDataStruct.binormalVBO->getBuffer()); + glBindBuffer(GL_ARRAY_BUFFER, VertexRenderStruct.binormalVBO->getBuffer()); VertexAttribPointer3fv(vBinormal, 0, NULL); } - if (vertexDataStruct.ColorData.size() > 0) + if (VertexRenderStruct.data.ColorData.size() > 0) { - glBindBuffer(GL_ARRAY_BUFFER, vertexDataStruct.colorVBO->getBuffer()); + glBindBuffer(GL_ARRAY_BUFFER, VertexRenderStruct.colorVBO->getBuffer()); VertexAttribPointer3fv(vColor, 0, NULL); } - if (vertexDataStruct.TexCoordData.size() > 0) + if (VertexRenderStruct.data.TexCoordData.size() > 0) { - glBindBuffer(GL_ARRAY_BUFFER, vertexDataStruct.texCoordVBO->getBuffer()); + glBindBuffer(GL_ARRAY_BUFFER, VertexRenderStruct.texCoordVBO->getBuffer()); VertexAttribPointer2fv(vTexCoord, 0, NULL); } - glBindBuffer(GL_ARRAY_BUFFER, vertexDataStruct.positionVBO->getBuffer()); + glBindBuffer(GL_ARRAY_BUFFER, VertexRenderStruct.positionVBO->getBuffer()); VertexAttribPointer3fv(vPosition, 0, NULL); - glDrawArrays(GL_TRIANGLES, 0, static_cast(vertexDataStruct.PositionData.size())); + glDrawArrays(GL_TRIANGLES, 0, static_cast(VertexRenderStruct.data.PositionData.size())); } diff --git a/Renderer.h b/Renderer.h index e746329..631cb3c 100755 --- a/Renderer.h +++ b/Renderer.h @@ -48,7 +48,11 @@ namespace ZL { std::vector TangentData; std::vector BinormalData; std::vector ColorData; + }; + struct VertexRenderStruct + { + VertexDataStruct data; std::shared_ptr vao; std::shared_ptr positionVBO; @@ -113,7 +117,7 @@ namespace ZL { void VertexAttribPointer3fv(const std::string& attribName, int stride, const char* pointer); - void DrawVertexDataStruct(const VertexDataStruct& vertexDataStruct); + void DrawVertexRenderStruct(const VertexRenderStruct& VertexRenderStruct); }; diff --git a/main.cpp b/main.cpp index e577c8f..a1ab180 100755 --- a/main.cpp +++ b/main.cpp @@ -45,7 +45,7 @@ namespace ZL glBindTexture(GL_TEXTURE_2D, GameObjects::backgroundTexturePtr->getTexID()); - renderer.DrawVertexDataStruct(GameObjects::backgroundMesh); + renderer.DrawVertexRenderStruct(GameObjects::backgroundMesh); renderer.PopMatrix(); } @@ -64,7 +64,7 @@ namespace ZL glBindTexture(GL_TEXTURE_2D, GameObjects::birdTexturePtr->getTexID()); - renderer.DrawVertexDataStruct(GameObjects::birdMesh); + renderer.DrawVertexRenderStruct(GameObjects::birdMesh); renderer.PopMatrix(); } @@ -83,7 +83,7 @@ namespace ZL renderer.TranslateMatrix({ (pipePair.xPos), pipePair.bottomPipeVShift, 0.f }); - renderer.DrawVertexDataStruct(GameObjects::pipeMesh); + renderer.DrawVertexRenderStruct(GameObjects::pipeMesh); //Draw top pipe: @@ -94,7 +94,7 @@ namespace ZL renderer.ScaleMatrix({ 1.f, -1.f, 1.f }); - renderer.DrawVertexDataStruct(GameObjects::pipeMesh); + renderer.DrawVertexRenderStruct(GameObjects::pipeMesh); renderer.PopMatrix(); } @@ -110,7 +110,7 @@ namespace ZL glBindTexture(GL_TEXTURE_2D, GameObjects::gameOverTexturePtr->getTexID()); - renderer.DrawVertexDataStruct(GameObjects::gameOverMesh); + renderer.DrawVertexRenderStruct(GameObjects::gameOverMesh); renderer.PopMatrix(); } @@ -158,7 +158,7 @@ namespace ZL GameObjects::colorCubeMeshMutable.AssignFrom(GameObjects::colorCubeMesh); GameObjects::colorCubeMeshMutable.RotateByMatrix(QuatToMatrix(QuatFromRotateAroundZ(gs.rotateTimer * M_PI / 3.0))); - renderer.DrawVertexDataStruct(GameObjects::colorCubeMeshMutable); + renderer.DrawVertexRenderStruct(GameObjects::colorCubeMeshMutable); renderer.PopMatrix(); @@ -242,33 +242,34 @@ namespace ZL CheckGlError(); //Create bird mesh - GameObjects::birdMesh = CreateRect2D({ 0.f, 0.f }, { GameConsts::birdScale * BIRD_WIDTH, GameConsts::birdScale * BIRD_HEIGHT }, 0); + GameObjects::birdMesh.data = CreateRect2D({ 0.f, 0.f }, { GameConsts::birdScale * BIRD_WIDTH, GameConsts::birdScale * BIRD_HEIGHT }, 0); + GameObjects::birdMesh.RefreshVBO(); float backgroundTextureScale = Env::height / static_cast(BACKGROUND_HEIGHT); //Create pipe mesh - GameObjects::pipeMesh = CreateRect2D({ PIPE_WIDTH * GameConsts::pipeScale * (-0.5f), Env::getActualClientHeight() * 0.5f + PIPE_HEIGHT * GameConsts::pipeScale * (-0.5f) }, { PIPE_WIDTH * GameConsts::pipeScale * 0.5f, PIPE_HEIGHT * GameConsts::pipeScale * 0.5f }, 0); - + GameObjects::pipeMesh.data = CreateRect2D({ PIPE_WIDTH * GameConsts::pipeScale * (-0.5f), Env::getActualClientHeight() * 0.5f + PIPE_HEIGHT * GameConsts::pipeScale * (-0.5f) }, { PIPE_WIDTH * GameConsts::pipeScale * 0.5f, PIPE_HEIGHT * GameConsts::pipeScale * 0.5f }, 0); + GameObjects::pipeMesh.RefreshVBO(); //Create background mesh depending on screen size Env::backgroundSectionWidth = BACKGROUND_WIDTH * backgroundTextureScale; - GameObjects::backgroundMesh = CreateRectHorizontalSections2D({ BACKGROUND_WIDTH * backgroundTextureScale * (0.5f), BACKGROUND_HEIGHT * backgroundTextureScale * (0.5f) }, { BACKGROUND_WIDTH * backgroundTextureScale * 0.5f, BACKGROUND_HEIGHT * backgroundTextureScale * 0.5f }, -0.5, 2); - + GameObjects::backgroundMesh.data = CreateRectHorizontalSections2D({ BACKGROUND_WIDTH * backgroundTextureScale * (0.5f), BACKGROUND_HEIGHT * backgroundTextureScale * (0.5f) }, { BACKGROUND_WIDTH * backgroundTextureScale * 0.5f, BACKGROUND_HEIGHT * backgroundTextureScale * 0.5f }, -0.5, 2); + GameObjects::backgroundMesh.RefreshVBO(); CheckGlError(); //Create Game Over UI mesh depending on screen size float gameOverTextureScale = Env::height / static_cast(GAMEOVER_HEIGHT); - GameObjects::gameOverMesh = CreateRect2D({ GAMEOVER_WIDTH * gameOverTextureScale * 0.5f, GAMEOVER_HEIGHT * gameOverTextureScale * 0.5f }, { GAMEOVER_WIDTH * gameOverTextureScale * 0.5f, GAMEOVER_HEIGHT * gameOverTextureScale * 0.5f }, 0.1f); - + GameObjects::gameOverMesh.data = CreateRect2D({ GAMEOVER_WIDTH * gameOverTextureScale * 0.5f, GAMEOVER_HEIGHT * gameOverTextureScale * 0.5f }, { GAMEOVER_WIDTH * gameOverTextureScale * 0.5f, GAMEOVER_HEIGHT * gameOverTextureScale * 0.5f }, 0.1f); + GameObjects::gameOverMesh.RefreshVBO(); GameObjects::colorCubeMesh = CreateCube3D(5.0); - GameObjects::colorCubeMeshMutable = CreateCube3D(5.0); - + GameObjects::colorCubeMeshMutable.data = CreateCube3D(5.0); + GameObjects::colorCubeMeshMutable.RefreshVBO(); //Set some game values Env::birdStartPos = { Env::width * 0.2f, Env::getActualClientHeight() * 0.5f };