Minor refactoring
This commit is contained in:
parent
c792e50f1b
commit
21301652ce
10
Game.cpp
10
Game.cpp
@ -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
10
Game.h
@ -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;
|
||||
}
|
||||
}
|
||||
83
Renderer.cpp
83
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<GLsizei>(vertexDataStruct.PositionData.size()));
|
||||
glDrawArrays(GL_TRIANGLES, 0, static_cast<GLsizei>(VertexRenderStruct.data.PositionData.size()));
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
};
|
||||
|
||||
|
||||
|
||||
31
main.cpp
31
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<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 };
|
||||
|
||||
Loading…
Reference in New Issue
Block a user