5db5ce971c
Also added a copy pre-build even for .h files into the include directory for charcoal and charcoal-builtin
54 lines
1.9 KiB
C++
54 lines
1.9 KiB
C++
#pragma once
|
|
|
|
#include "Batch.h"
|
|
#include "BuiltinBatch.h"
|
|
#include "Renderable.h"
|
|
#include "Poseable.h"
|
|
|
|
namespace charcoal
|
|
{
|
|
namespace builtin
|
|
{
|
|
// Note: If anything is changed in this file, it must also be changed in Poseable2DBatch
|
|
template <typename VertexType, typename IndexType, typename RenderableT = RenderableT<VertexType, IndexType> >
|
|
class PoseableBatch : public builtin::Batch<VertexType, IndexType, 1, RenderableT>
|
|
{
|
|
public:
|
|
// TODO: Figure out how to get rid of this typename garbage. If that it figured out, m_element_buffers should get fixed.
|
|
PoseableBatch(
|
|
RenderableT* renderable,
|
|
int element_count
|
|
) : PoseableBatch(renderable, element_count, element_count)
|
|
{}
|
|
|
|
PoseableBatch(
|
|
RenderableT* renderable,
|
|
int element_count,
|
|
int element_render_count
|
|
) : builtin::Batch<VertexType, IndexType, 1, RenderableT>(renderable, element_render_count), m_pose_elements(element_count)
|
|
{}
|
|
|
|
virtual ~PoseableBatch() {}
|
|
|
|
Poseable& get_pose(int index) { return m_pose_elements[index]; }
|
|
const Poseable& get_pose(int index) const { return m_pose_elements[index]; }
|
|
|
|
protected:
|
|
void setup_element_buffers()
|
|
{
|
|
glBindBuffer(GL_ARRAY_BUFFER, charcoal::Batch<VertexType, IndexType, 1, RenderableT>::m_element_buffers[0]);
|
|
glBufferData(GL_ARRAY_BUFFER, m_pose_elements.size() * sizeof(Poseable), NULL, GL_STREAM_DRAW);
|
|
}
|
|
|
|
void 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, charcoal::Batch<VertexType, IndexType, 1, RenderableT>::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());
|
|
}
|
|
|
|
std::vector<Poseable> m_pose_elements;
|
|
};
|
|
}
|
|
} |