|
|
@@ -44,6 +44,7 @@ Sprite::Sprite(RenderWorld& render_world, SceneGraph& sg, int32_t node, const Sp
|
|
|
, m_scene_graph(sg)
|
|
|
, m_node(node)
|
|
|
, m_resource(sr)
|
|
|
+ , m_frame(0)
|
|
|
{
|
|
|
m_vb = sr->vertex_buffer();
|
|
|
m_ib = sr->index_buffer();
|
|
|
@@ -108,6 +109,13 @@ void Sprite::set_local_pose(Unit* unit, const Matrix4x4& pose)
|
|
|
unit->set_local_pose(m_node, pose);
|
|
|
}
|
|
|
|
|
|
+//-----------------------------------------------------------------------------
|
|
|
+void Sprite::set_frame(uint32_t i)
|
|
|
+{
|
|
|
+ CE_ASSERT(i < m_resource->num_frames(), "Frame out of bounds");
|
|
|
+ m_frame = i;
|
|
|
+}
|
|
|
+
|
|
|
//-----------------------------------------------------------------------------
|
|
|
void Sprite::set_material(MaterialId mat)
|
|
|
{
|
|
|
@@ -127,7 +135,8 @@ void Sprite::render(Renderer& r, UniformId uniform)
|
|
|
| STATE_BLEND_EQUATION_ADD
|
|
|
| STATE_BLEND_FUNC(STATE_BLEND_FUNC_SRC_ALPHA, STATE_BLEND_FUNC_ONE_MINUS_SRC_ALPHA));
|
|
|
r.set_vertex_buffer(m_vb);
|
|
|
- r.set_index_buffer(m_ib);
|
|
|
+ const uint32_t start_index = m_frame * 6;
|
|
|
+ r.set_index_buffer(m_ib, start_index, 6);
|
|
|
r.set_pose(world_pose());
|
|
|
r.commit(0);
|
|
|
}
|