1
0
mirror of https://github.com/rwengine/openrw.git synced 2024-11-07 03:12:36 +01:00
openrw/rwengine/src/render/DrawBuffer.cpp

41 lines
931 B
C++
Raw Normal View History

2014-02-10 06:43:20 +01:00
#include <render/DrawBuffer.hpp>
#include <render/GeometryBuffer.hpp>
#include <map>
/* TODO: Come up with a more elegant solution to "WHICH ARRAY IS IT?" */
std::map<AttributeSemantic, GLuint> semantic_to_attrib_array = {
{ATRS_Position, 0},
2014-02-10 09:55:01 +01:00
{ATRS_Normal, 1},
{ATRS_Colour, 2},
{ATRS_TexCoord, 3}
2014-02-10 06:43:20 +01:00
};
DrawBuffer::DrawBuffer()
: vao(0)
{
}
DrawBuffer::~DrawBuffer()
{
if(vao) {
glDeleteVertexArrays(1, &vao);
}
}
void DrawBuffer::addGeometry(GeometryBuffer* gbuff)
{
if(vao == 0) {
glGenVertexArrays(1, &vao);
}
glBindVertexArray(vao);
glBindBuffer(GL_ARRAY_BUFFER, gbuff->getVBOName());
// Iterate the attributes present in the gbuff
for(const AttributeIndex& at : gbuff->getDataAttributes()) {
GLuint vaoindex = semantic_to_attrib_array[at.sem];
glEnableVertexAttribArray(vaoindex);
glVertexAttribPointer(vaoindex, at.size, at.type, GL_TRUE, at.stride, reinterpret_cast<GLvoid*>(at.offset));
2014-02-10 06:43:20 +01:00
}
}