fixed mesh template issue
This commit is contained in:
parent
72466f7ef7
commit
c07c9e54a9
@ -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")
|
||||
|
||||
|
14
src/buffer.h
14
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 <typename T>
|
||||
class TBuffer : public Buffer
|
||||
{
|
||||
public:
|
||||
enum BufferType
|
||||
{
|
||||
VBO,
|
||||
EBO,
|
||||
UBO
|
||||
};
|
||||
|
||||
class BufferEditor
|
||||
{
|
||||
GLenum m_typeEnum;
|
||||
|
52
src/mesh.cpp
52
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<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();
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user