05363f94b7
Now, the batch subclasses define the Element specification and the elements are not stored in the main Batch class. It is suggested that the batch subclasses use vectors of the different element types per requested VBO and offer a function to return a reference to one of the elements by index. This functionality is implemented in the current version of MyBatch. A test for the movement needs to be completed
41 lines
2.0 KiB
C++
41 lines
2.0 KiB
C++
#include "MyBatch.h"
|
|
|
|
void MyBatch::setup_element_buffers()
|
|
{
|
|
glBindBuffer(GL_ARRAY_BUFFER, m_element_buffers[COLOR_VBO_INDEX]);
|
|
glBufferData(GL_ARRAY_BUFFER, m_color_elements.size() * sizeof(MyBatchTestShaderProgram::Color), NULL, GL_STREAM_DRAW);
|
|
|
|
glBindBuffer(GL_ARRAY_BUFFER, m_element_buffers[OFFSET_VBO_INDEX]);
|
|
glBufferData(GL_ARRAY_BUFFER, m_offset_elements.size() * sizeof(MyBatchTestShaderProgram::Offset), NULL, GL_STREAM_DRAW);
|
|
}
|
|
|
|
void MyBatch::setup_vao()
|
|
{
|
|
glBindBuffer(GL_ARRAY_BUFFER, m_vertex_vbo);
|
|
glEnableVertexAttribArray(0);
|
|
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
|
|
glBindBuffer(GL_ARRAY_BUFFER, m_element_buffers[COLOR_VBO_INDEX]);
|
|
glEnableVertexAttribArray(1);
|
|
glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 0, NULL);
|
|
glBindBuffer(GL_ARRAY_BUFFER, m_element_buffers[OFFSET_VBO_INDEX]);
|
|
glEnableVertexAttribArray(2);
|
|
glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, 0, NULL);
|
|
|
|
glVertexAttribDivisor(0, 0); // Only need to send the mesh data once (This should probably be done every time)
|
|
glVertexAttribDivisor(1, 1); // Send the color data for each instance drawn
|
|
glVertexAttribDivisor(2, 1); // Send the offset data for each instance drawn
|
|
}
|
|
|
|
void MyBatch::update_element_buffers()
|
|
{
|
|
// TODO: There are probably better ways to do this. Should check with the old engine to see what I did there.
|
|
glBindBuffer(GL_ARRAY_BUFFER, m_element_buffers[COLOR_VBO_INDEX]);
|
|
glBufferData(GL_ARRAY_BUFFER, m_color_elements.size() * sizeof(MyBatchTestShaderProgram::Color), NULL, GL_STREAM_DRAW);
|
|
glBufferSubData(GL_ARRAY_BUFFER, 0, m_color_elements.size() * sizeof(MyBatchTestShaderProgram::Color), m_color_elements.data());
|
|
|
|
glBindBuffer(GL_ARRAY_BUFFER, m_element_buffers[OFFSET_VBO_INDEX]);
|
|
glBufferData(GL_ARRAY_BUFFER, m_offset_elements.size() * sizeof(MyBatchTestShaderProgram::Offset), NULL, GL_STREAM_DRAW);
|
|
glBufferSubData(GL_ARRAY_BUFFER, 0, m_offset_elements.size() * sizeof(MyBatchTestShaderProgram::Offset), m_offset_elements.data());
|
|
}
|
|
|