diff --git a/src/engine/layer/GameLayer.cpp b/src/engine/layer/GameLayer.cpp index e27dc16..539a86e 100644 --- a/src/engine/layer/GameLayer.cpp +++ b/src/engine/layer/GameLayer.cpp @@ -13,15 +13,18 @@ GameLayer::GameLayer() :model(0,0) //Platzhalter, echtes Model kommt in onAttach void GameLayer::onAttach() { std::vector vertices = { - -0.5f, 0.5f, 0.f, - -0.5f, -0.5f, 0.f, - 0.5f, -0.5f, 0.f, - 0.5f, -0.5f, 0.f, - 0.5f, 0.5f, 0.f, - -0.5f, 0.5f, 0.f + -0.5f, 0.5f, 0.f,//v0 + -0.5f, -0.5f, 0.f,//v1 + 0.5f, -0.5f, 0.f,//v2 + 0.5f, 0.5f, 0.f,//v3 }; - model = loader.loadToVAO(vertices); + std::vector indices = { + 0,1,3, + 3,1,2 + }; + + model = loader.loadToVAO(vertices, indices); } void GameLayer::onDetach() diff --git a/src/engine/renderer/Renderer.cpp b/src/engine/renderer/Renderer.cpp index 6e2033d..ef5f0d5 100644 --- a/src/engine/renderer/Renderer.cpp +++ b/src/engine/renderer/Renderer.cpp @@ -19,7 +19,7 @@ void Renderer::renderFrame(const RawModel& model) { void Renderer::renderRawModel(const RawModel& model) { glBindVertexArray(model.vaoID); glEnableVertexAttribArray(0); - glDrawArrays(GL_TRIANGLES,0 , model.vertexCount); + glDrawElements(GL_TRIANGLES , model.vertexCount, GL_UNSIGNED_INT, 0); glDisableVertexAttribArray(0); glBindVertexArray(0); diff --git a/src/engine/renderer/model/Loader.cpp b/src/engine/renderer/model/Loader.cpp index 34821ca..007d8f5 100644 --- a/src/engine/renderer/model/Loader.cpp +++ b/src/engine/renderer/model/Loader.cpp @@ -4,11 +4,12 @@ #include "Loader.h" -RawModel Loader::loadToVAO(std::vector vertices){ +RawModel Loader::loadToVAO(const std::vector& vertices, const std::vector& indices){ GLuint vaoID = createVAO(); storeDataInAttributeList(0, vertices); + bindIndicesBuffer(indices); unbindVAO(); - return {vaoID, static_cast(vertices.size() / 3)}; + return {vaoID, static_cast(indices.size())}; } Loader::~Loader() { @@ -44,6 +45,16 @@ void Loader::storeDataInAttributeList(int attributeNumber, const std::vector& indices) { + GLuint vboID; + glGenBuffers(1, &vboID); + vboIDs.push_back(vboID); + + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboID); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.size() * sizeof(int), indices.data(), GL_STATIC_DRAW); + +} + void Loader::unbindVAO() { glBindVertexArray(0); } diff --git a/src/engine/renderer/model/Loader.h b/src/engine/renderer/model/Loader.h index 3e9c452..23b0b16 100644 --- a/src/engine/renderer/model/Loader.h +++ b/src/engine/renderer/model/Loader.h @@ -13,13 +13,14 @@ class Loader { public: - RawModel loadToVAO(std::vector vertices); + RawModel loadToVAO(const std::vector& vertices, const std::vector& indices); ~Loader(); void cleanUp(); private: GLuint createVAO(); void storeDataInAttributeList(int attributeNumber, const std::vector &data); + void bindIndicesBuffer(const std::vector &indices); void unbindVAO(); std::vector vaoIDs;