From c07c9e54a91afa9956e426188f6827da77b91490 Mon Sep 17 00:00:00 2001 From: Anselme Date: Tue, 26 Apr 2016 22:03:55 +0200 Subject: [PATCH] fixed mesh template issue --- CMakeLists.txt | 2 ++ src/buffer.h | 14 +++++++------- src/mesh.cpp | 52 ++++++++++++++++++++++++++++---------------------- 3 files changed, 38 insertions(+), 30 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2ce4739..d420f23 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,6 +15,8 @@ if(CMAKE_BUILD_TYPE MATCHES "Debug") endif() file(GLOB RESOURCES_FILES src/*.h shaders/*.glsl) +FILE(GLOB RES_SRC_FILE shaders/*.glsl) +SET(RESOURCE_DST_FILE shaders.cpp) set(CMAKE_TEMPLATE_PATH "../cmaketemplate") diff --git a/src/buffer.h b/src/buffer.h index 8985f60..e16b993 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -9,6 +9,13 @@ class Buffer { public: + enum BufferType + { + VBO, + EBO, + UBO + }; + virtual ~Buffer(); virtual void bind() = 0; virtual void unbind() = 0; @@ -18,13 +25,6 @@ template class TBuffer : public Buffer { public: - enum BufferType - { - VBO, - EBO, - UBO - }; - class BufferEditor { GLenum m_typeEnum; diff --git a/src/mesh.cpp b/src/mesh.cpp index 5efc443..9451a4f 100644 --- a/src/mesh.cpp +++ b/src/mesh.cpp @@ -71,36 +71,34 @@ void Mesh::initGL() glGenVertexArrays(1, &vao); glBindVertexArray(vao); - Buffer *b; - // init positions VBO if(!positions3D.empty()) { - b = new TBuffer(positions3D, TBuffer::VBO); - b->setVertexAttrib(0, 3); - addBuffer(b, POSITION_BUFFER); + auto posBuffer = new TBuffer(positions3D, Buffer::VBO); + posBuffer->setVertexAttrib(0, 3); + addBuffer(posBuffer, POSITION_BUFFER); // init normals vbo if(!normals.empty()) { - b = new TBuffer(normals, TBuffer::VBO); - b->setVertexAttrib(1, 3); - addBuffer(b, NORMAL_BUFFER); + auto normalsBuffer = new TBuffer(normals, Buffer::VBO); + normalsBuffer->setVertexAttrib(1, 3); + addBuffer(normalsBuffer, NORMAL_BUFFER); } // init tangents vbo if(!tangents.empty()) { - b = new TBuffer(tangents, TBuffer::VBO); - b->setVertexAttrib(3, 3); - b->setVertexAttrib(4, 3); - addBuffer(b, TANGENT_BUFFER); + auto tangentsBuffer = new TBuffer(tangents, Buffer::VBO); + tangentsBuffer->setVertexAttrib(3, 3); + tangentsBuffer->setVertexAttrib(4, 3); + addBuffer(tangentsBuffer, TANGENT_BUFFER); } } else if(!positions2D.empty()) { - b = new TBuffer(positions2D, TBuffer::VBO); - b->setVertexAttrib(0, 2); - addBuffer(b, POSITION_BUFFER); + auto posBuffer = new TBuffer(positions2D, Buffer::VBO); + posBuffer->setVertexAttrib(0, 2); + addBuffer(posBuffer, POSITION_BUFFER); } else { @@ -110,24 +108,24 @@ void Mesh::initGL() // init texCoords vbo if(!texCoords.empty()) { - b = new TBuffer(texCoords, TBuffer::VBO); - b->setVertexAttrib(2, 2); - addBuffer(b, TEXCOORD_BUFFER); + auto texCoordBuffer = new TBuffer(texCoords, Buffer::VBO); + texCoordBuffer->setVertexAttrib(2, 2); + addBuffer(texCoordBuffer, TEXCOORD_BUFFER); } // init instances vbo if(!instances_offsets.empty()) { - b = new TBuffer(instances_offsets, TBuffer::VBO); - b->setVertexAttrib(5, 3, 0, 1); - addBuffer(b, INSTANCE_BUFFER); + auto instancesBuffer = new TBuffer(instances_offsets, Buffer::VBO); + instancesBuffer->setVertexAttrib(5, 3, 0, 1); + addBuffer(instancesBuffer, INSTANCE_BUFFER); } // init EBO if(!indices.empty()) { - b = new TBuffer(indices, TBuffer::EBO); - addBuffer(b, INDICES_BUFFER); + auto indicesBuffer = new TBuffer(indices, Buffer::EBO); + addBuffer(indicesBuffer, INDICES_BUFFER); } // unbind vao @@ -168,18 +166,26 @@ void Mesh::draw(Shader* shader, bool drawNormals, bool drawTexCoord, bool drawTa { int size = positions3D.empty() ? positions2D.size() : positions3D.size(); if(!instances_offsets.empty() && !crappy) + { glDrawArraysInstanced(primitive_type, 0, size, instances_offsets.size()); + } else + { glDrawArrays(primitive_type, 0, size); + } } else { Buffer *b = buffers[buffersId[INDICES_BUFFER]]; b->bind(); if(!instances_offsets.empty() && !crappy) + { glDrawElementsInstanced(primitive_type, indices.size(), GL_UNSIGNED_INT, NULL, instances_offsets.size()); + } else + { glDrawElements(primitive_type, indices.size(), GL_UNSIGNED_INT, NULL); + } b->unbind(); }