fixed mesh template issue

This commit is contained in:
Anselme 2016-04-26 22:03:55 +02:00
parent 72466f7ef7
commit c07c9e54a9
3 changed files with 38 additions and 30 deletions

View File

@ -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")

View File

@ -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 <typename T>
class TBuffer : public Buffer
{
public:
enum BufferType
{
VBO,
EBO,
UBO
};
class BufferEditor
{
GLenum m_typeEnum;

View File

@ -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<glm::vec3>(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<glm::vec3>(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>(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<glm::vec2>(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<glm::vec2>(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<glm::vec3>(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<GLuint>(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();
}