fixed mesh template issue
This commit is contained in:
parent
72466f7ef7
commit
c07c9e54a9
@ -15,6 +15,8 @@ if(CMAKE_BUILD_TYPE MATCHES "Debug")
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
file(GLOB RESOURCES_FILES src/*.h shaders/*.glsl)
|
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")
|
set(CMAKE_TEMPLATE_PATH "../cmaketemplate")
|
||||||
|
|
||||||
|
14
src/buffer.h
14
src/buffer.h
@ -9,6 +9,13 @@
|
|||||||
class Buffer
|
class Buffer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
enum BufferType
|
||||||
|
{
|
||||||
|
VBO,
|
||||||
|
EBO,
|
||||||
|
UBO
|
||||||
|
};
|
||||||
|
|
||||||
virtual ~Buffer();
|
virtual ~Buffer();
|
||||||
virtual void bind() = 0;
|
virtual void bind() = 0;
|
||||||
virtual void unbind() = 0;
|
virtual void unbind() = 0;
|
||||||
@ -18,13 +25,6 @@ template <typename T>
|
|||||||
class TBuffer : public Buffer
|
class TBuffer : public Buffer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum BufferType
|
|
||||||
{
|
|
||||||
VBO,
|
|
||||||
EBO,
|
|
||||||
UBO
|
|
||||||
};
|
|
||||||
|
|
||||||
class BufferEditor
|
class BufferEditor
|
||||||
{
|
{
|
||||||
GLenum m_typeEnum;
|
GLenum m_typeEnum;
|
||||||
|
52
src/mesh.cpp
52
src/mesh.cpp
@ -71,36 +71,34 @@ void Mesh::initGL()
|
|||||||
glGenVertexArrays(1, &vao);
|
glGenVertexArrays(1, &vao);
|
||||||
glBindVertexArray(vao);
|
glBindVertexArray(vao);
|
||||||
|
|
||||||
Buffer *b;
|
|
||||||
|
|
||||||
// init positions VBO
|
// init positions VBO
|
||||||
if(!positions3D.empty())
|
if(!positions3D.empty())
|
||||||
{
|
{
|
||||||
b = new TBuffer(positions3D, TBuffer::VBO);
|
auto posBuffer = new TBuffer<glm::vec3>(positions3D, Buffer::VBO);
|
||||||
b->setVertexAttrib(0, 3);
|
posBuffer->setVertexAttrib(0, 3);
|
||||||
addBuffer(b, POSITION_BUFFER);
|
addBuffer(posBuffer, POSITION_BUFFER);
|
||||||
|
|
||||||
// init normals vbo
|
// init normals vbo
|
||||||
if(!normals.empty())
|
if(!normals.empty())
|
||||||
{
|
{
|
||||||
b = new TBuffer(normals, TBuffer::VBO);
|
auto normalsBuffer = new TBuffer<glm::vec3>(normals, Buffer::VBO);
|
||||||
b->setVertexAttrib(1, 3);
|
normalsBuffer->setVertexAttrib(1, 3);
|
||||||
addBuffer(b, NORMAL_BUFFER);
|
addBuffer(normalsBuffer, NORMAL_BUFFER);
|
||||||
}
|
}
|
||||||
// init tangents vbo
|
// init tangents vbo
|
||||||
if(!tangents.empty())
|
if(!tangents.empty())
|
||||||
{
|
{
|
||||||
b = new TBuffer(tangents, TBuffer::VBO);
|
auto tangentsBuffer = new TBuffer<Tangents>(tangents, Buffer::VBO);
|
||||||
b->setVertexAttrib(3, 3);
|
tangentsBuffer->setVertexAttrib(3, 3);
|
||||||
b->setVertexAttrib(4, 3);
|
tangentsBuffer->setVertexAttrib(4, 3);
|
||||||
addBuffer(b, TANGENT_BUFFER);
|
addBuffer(tangentsBuffer, TANGENT_BUFFER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(!positions2D.empty())
|
else if(!positions2D.empty())
|
||||||
{
|
{
|
||||||
b = new TBuffer(positions2D, TBuffer::VBO);
|
auto posBuffer = new TBuffer<glm::vec2>(positions2D, Buffer::VBO);
|
||||||
b->setVertexAttrib(0, 2);
|
posBuffer->setVertexAttrib(0, 2);
|
||||||
addBuffer(b, POSITION_BUFFER);
|
addBuffer(posBuffer, POSITION_BUFFER);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -110,24 +108,24 @@ void Mesh::initGL()
|
|||||||
// init texCoords vbo
|
// init texCoords vbo
|
||||||
if(!texCoords.empty())
|
if(!texCoords.empty())
|
||||||
{
|
{
|
||||||
b = new TBuffer(texCoords, TBuffer::VBO);
|
auto texCoordBuffer = new TBuffer<glm::vec2>(texCoords, Buffer::VBO);
|
||||||
b->setVertexAttrib(2, 2);
|
texCoordBuffer->setVertexAttrib(2, 2);
|
||||||
addBuffer(b, TEXCOORD_BUFFER);
|
addBuffer(texCoordBuffer, TEXCOORD_BUFFER);
|
||||||
}
|
}
|
||||||
|
|
||||||
// init instances vbo
|
// init instances vbo
|
||||||
if(!instances_offsets.empty())
|
if(!instances_offsets.empty())
|
||||||
{
|
{
|
||||||
b = new TBuffer(instances_offsets, TBuffer::VBO);
|
auto instancesBuffer = new TBuffer<glm::vec3>(instances_offsets, Buffer::VBO);
|
||||||
b->setVertexAttrib(5, 3, 0, 1);
|
instancesBuffer->setVertexAttrib(5, 3, 0, 1);
|
||||||
addBuffer(b, INSTANCE_BUFFER);
|
addBuffer(instancesBuffer, INSTANCE_BUFFER);
|
||||||
}
|
}
|
||||||
|
|
||||||
// init EBO
|
// init EBO
|
||||||
if(!indices.empty())
|
if(!indices.empty())
|
||||||
{
|
{
|
||||||
b = new TBuffer(indices, TBuffer::EBO);
|
auto indicesBuffer = new TBuffer<GLuint>(indices, Buffer::EBO);
|
||||||
addBuffer(b, INDICES_BUFFER);
|
addBuffer(indicesBuffer, INDICES_BUFFER);
|
||||||
}
|
}
|
||||||
|
|
||||||
// unbind vao
|
// 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();
|
int size = positions3D.empty() ? positions2D.size() : positions3D.size();
|
||||||
if(!instances_offsets.empty() && !crappy)
|
if(!instances_offsets.empty() && !crappy)
|
||||||
|
{
|
||||||
glDrawArraysInstanced(primitive_type, 0, size, instances_offsets.size());
|
glDrawArraysInstanced(primitive_type, 0, size, instances_offsets.size());
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
glDrawArrays(primitive_type, 0, size);
|
glDrawArrays(primitive_type, 0, size);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Buffer *b = buffers[buffersId[INDICES_BUFFER]];
|
Buffer *b = buffers[buffersId[INDICES_BUFFER]];
|
||||||
b->bind();
|
b->bind();
|
||||||
if(!instances_offsets.empty() && !crappy)
|
if(!instances_offsets.empty() && !crappy)
|
||||||
|
{
|
||||||
glDrawElementsInstanced(primitive_type, indices.size(), GL_UNSIGNED_INT, NULL, instances_offsets.size());
|
glDrawElementsInstanced(primitive_type, indices.size(), GL_UNSIGNED_INT, NULL, instances_offsets.size());
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
glDrawElements(primitive_type, indices.size(), GL_UNSIGNED_INT, NULL);
|
glDrawElements(primitive_type, indices.size(), GL_UNSIGNED_INT, NULL);
|
||||||
|
}
|
||||||
b->unbind();
|
b->unbind();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user