diff --git a/Renderer.cpp b/Renderer.cpp index a52cdeb..b62d363 100755 --- a/Renderer.cpp +++ b/Renderer.cpp @@ -142,15 +142,66 @@ namespace ZL { glBufferData(GL_ARRAY_BUFFER, PositionData.size() * 12, &PositionData[0], GL_STATIC_DRAW); - if (!texCoordVBO) + if (TexCoordData.size() > 0) { - texCoordVBO = std::make_shared(); + if (!texCoordVBO) + { + texCoordVBO = std::make_shared(); + } + + glBindBuffer(GL_ARRAY_BUFFER, texCoordVBO->getBuffer()); + + glBufferData(GL_ARRAY_BUFFER, TexCoordData.size() * 8, &TexCoordData[0], GL_STATIC_DRAW); } - glBindBuffer(GL_ARRAY_BUFFER, texCoordVBO->getBuffer()); - glBufferData(GL_ARRAY_BUFFER, TexCoordData.size() * 8, &TexCoordData[0], GL_STATIC_DRAW); + if (NormalData.size() > 0) + { + if (!normalVBO) + { + normalVBO = std::make_shared(); + } + glBindBuffer(GL_ARRAY_BUFFER, normalVBO->getBuffer()); + + glBufferData(GL_ARRAY_BUFFER, NormalData.size() * 12, &NormalData[0], GL_STATIC_DRAW); + } + + if (TangentData.size() > 0) + { + if (!tangentVBO) + { + tangentVBO = std::make_shared(); + } + + glBindBuffer(GL_ARRAY_BUFFER, tangentVBO->getBuffer()); + + glBufferData(GL_ARRAY_BUFFER, TangentData.size() * 12, &TangentData[0], GL_STATIC_DRAW); + } + + if (BinormalData.size() > 0) + { + if (!binormalVBO) + { + binormalVBO = std::make_shared(); + } + + glBindBuffer(GL_ARRAY_BUFFER, binormalVBO->getBuffer()); + + glBufferData(GL_ARRAY_BUFFER, BinormalData.size() * 12, &BinormalData[0], GL_STATIC_DRAW); + } + + if (ColorData.size() > 0) + { + if (!colorVBO) + { + colorVBO = std::make_shared(); + } + + glBindBuffer(GL_ARRAY_BUFFER, colorVBO->getBuffer()); + + glBufferData(GL_ARRAY_BUFFER, ColorData.size() * 12, &ColorData[0], GL_STATIC_DRAW); + } } void Renderer::InitOpenGL() @@ -437,12 +488,39 @@ namespace ZL { void Renderer::DrawVertexDataStruct(const VertexDataStruct& vertexDataStruct) { + static const std::string vNormal("vNormal"); + static const std::string vTangent("vTangent"); + static const std::string vBinormal("vBinormal"); + static const std::string vColor("vColor"); static const std::string vTexCoord("vTexCoord"); static const std::string vPosition("vPosition"); //Check if main thread, check if data is not empty... - glBindBuffer(GL_ARRAY_BUFFER, vertexDataStruct.texCoordVBO->getBuffer()); - VertexAttribPointer2fv(vTexCoord, 0, NULL); + if (vertexDataStruct.NormalData.size() > 0) + { + glBindBuffer(GL_ARRAY_BUFFER, vertexDataStruct.normalVBO->getBuffer()); + VertexAttribPointer2fv(vNormal, 0, NULL); + } + if (vertexDataStruct.TangentData.size() > 0) + { + glBindBuffer(GL_ARRAY_BUFFER, vertexDataStruct.tangentVBO->getBuffer()); + VertexAttribPointer2fv(vTangent, 0, NULL); + } + if (vertexDataStruct.BinormalData.size() > 0) + { + glBindBuffer(GL_ARRAY_BUFFER, vertexDataStruct.binormalVBO->getBuffer()); + VertexAttribPointer2fv(vBinormal, 0, NULL); + } + if (vertexDataStruct.ColorData.size() > 0) + { + glBindBuffer(GL_ARRAY_BUFFER, vertexDataStruct.colorVBO->getBuffer()); + VertexAttribPointer2fv(vColor, 0, NULL); + } + if (vertexDataStruct.TexCoordData.size() > 0) + { + glBindBuffer(GL_ARRAY_BUFFER, vertexDataStruct.texCoordVBO->getBuffer()); + VertexAttribPointer2fv(vTexCoord, 0, NULL); + } glBindBuffer(GL_ARRAY_BUFFER, vertexDataStruct.positionVBO->getBuffer()); VertexAttribPointer3fv(vPosition, 0, NULL); diff --git a/Renderer.h b/Renderer.h index 6f9239f..385f998 100755 --- a/Renderer.h +++ b/Renderer.h @@ -44,16 +44,25 @@ namespace ZL { { std::vector PositionData; std::vector TexCoordData; + std::vector NormalData; + std::vector TangentData; + std::vector BinormalData; + std::vector ColorData; + std::shared_ptr vao; std::shared_ptr positionVBO; std::shared_ptr texCoordVBO; - + std::shared_ptr normalVBO; + std::shared_ptr tangentVBO; + std::shared_ptr binormalVBO; + std::shared_ptr colorVBO; void RefreshVBO(); }; VertexDataStruct CreateRect2D(Vector2f center, Vector2f halfWidthHeight, float zLevel); VertexDataStruct CreateRectHorizontalSections2D(Vector2f center, Vector2f halfWidthHeight, float zLevel, size_t sectionCount); + //VertexDataStruct CreateRect2D(Vector2f center, Vector2f halfWidthHeight, float zLevel); class Renderer diff --git a/main.cpp b/main.cpp index 108aa86..7ec63c7 100755 --- a/main.cpp +++ b/main.cpp @@ -41,7 +41,7 @@ namespace ZL renderer.LoadIdentity(); - renderer.TranslateMatrix({ -gs.backgroundShift, 0.0f, 0.f }); + //renderer.TranslateMatrix({ -gs.backgroundShift, 0.0f, 0.f }); glBindTexture(GL_TEXTURE_2D, GameObjects::backgroundTexturePtr->getTexID()); @@ -123,7 +123,7 @@ namespace ZL static const std::string vTexCoordName = "vTexCoord"; static const std::string textureUniformName = "Texture"; - glClearColor(0.0f, 0.0f, 0.0f, 1.0f); + glClearColor(0.0f, 1.0f, 0.0f, 1.0f); glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); glViewport(0, 0, Env::width, Env::height); @@ -229,8 +229,8 @@ namespace ZL 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 }, -9000, 2); - + 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); + CheckGlError(); //Create Game Over UI mesh depending on screen size