991b52b233
Builtin general structure created. Added a builtin::BasicScene class for quick general testing of the engine on different systems. The builtin::BasicScene class greatly reduces the amount of code needed to be handled by the developer by offering a pre-made way to handle it. It even includes pre-made shaders!
43 lines
1.8 KiB
C++
43 lines
1.8 KiB
C++
#include "BasicBatch.h"
|
|
|
|
namespace charcoal
|
|
{
|
|
namespace builtin
|
|
{
|
|
void BasicBatch::setup_element_buffers()
|
|
{
|
|
glBindBuffer(GL_ARRAY_BUFFER, m_element_buffers[0]);
|
|
glBufferData(GL_ARRAY_BUFFER, m_pose_elements.size() * sizeof(Poseable), NULL, GL_STREAM_DRAW);
|
|
}
|
|
|
|
void BasicBatch::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[0]);
|
|
glEnableVertexAttribArray(1);
|
|
glEnableVertexAttribArray(2);
|
|
glEnableVertexAttribArray(3);
|
|
glEnableVertexAttribArray(4);
|
|
glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, sizeof(Poseable), (void*)(0 * sizeof(vec4)));
|
|
glVertexAttribPointer(2, 4, GL_FLOAT, GL_FALSE, sizeof(Poseable), (void*)(1 * sizeof(vec4)));
|
|
glVertexAttribPointer(3, 4, GL_FLOAT, GL_FALSE, sizeof(Poseable), (void*)(2 * sizeof(vec4)));
|
|
glVertexAttribPointer(4, 4, GL_FLOAT, GL_FALSE, sizeof(Poseable), (void*)(3 * sizeof(vec4)));
|
|
|
|
glVertexAttribDivisor(0, 0); // Send the mesh data once
|
|
glVertexAttribDivisor(1, 1); // Send the offset data for each instance drawn
|
|
glVertexAttribDivisor(2, 1); // Send the offset data for each instance drawn
|
|
glVertexAttribDivisor(3, 1); // Send the offset data for each instance drawn
|
|
glVertexAttribDivisor(4, 1); // Send the offset data for each instance drawn
|
|
}
|
|
|
|
void BasicBatch::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[0]);
|
|
glBufferData(GL_ARRAY_BUFFER, m_pose_elements.size() * sizeof(Poseable), NULL, GL_STREAM_DRAW);
|
|
glBufferSubData(GL_ARRAY_BUFFER, 0, m_pose_elements.size() * sizeof(Poseable), m_pose_elements.data());
|
|
}
|
|
}
|
|
} |