Minor refactoring

This commit is contained in:
Vladislav Khorev 2025-02-22 21:04:23 +03:00
parent c792e50f1b
commit 21301652ce
5 changed files with 67 additions and 73 deletions

View File

@ -26,16 +26,16 @@ namespace ZL
std::shared_ptr<Texture> pipeTexturePtr;
std::shared_ptr<Texture> gameOverTexturePtr;
VertexDataStruct birdMesh;
VertexRenderStruct birdMesh;
VertexDataStruct backgroundMesh;
VertexRenderStruct backgroundMesh;
VertexDataStruct pipeMesh;
VertexRenderStruct pipeMesh;
VertexDataStruct gameOverMesh;
VertexRenderStruct gameOverMesh;
VertexDataStruct colorCubeMesh;
VertexDataStruct colorCubeMeshMutable;
VertexRenderStruct colorCubeMeshMutable;
}

10
Game.h
View File

@ -98,15 +98,15 @@ namespace ZL
extern std::shared_ptr<Texture> pipeTexturePtr;
extern std::shared_ptr<Texture> 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;
}
}

View File

@ -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<GLsizei>(vertexDataStruct.PositionData.size()));
glDrawArrays(GL_TRIANGLES, 0, static_cast<GLsizei>(VertexRenderStruct.data.PositionData.size()));
}

View File

@ -48,7 +48,11 @@ namespace ZL {
std::vector<Vector3f> TangentData;
std::vector<Vector3f> BinormalData;
std::vector<Vector3f> ColorData;
};
struct VertexRenderStruct
{
VertexDataStruct data;
std::shared_ptr<VAOHolder> vao;
std::shared_ptr<VBOHolder> 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);
};

View File

@ -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<float>(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<float>(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 };