if(ARB_vertex_array_object && ARB_instanced_arrays && ARB_draw_instanced)
{
- instance_data = new VertexArray((ATTRIB4,matrix_location, ATTRIB4,matrix_location+1, ATTRIB4,matrix_location+2));
+ instance_data = new VertexArray((RAW_ATTRIB4,matrix_location, RAW_ATTRIB4,matrix_location+1, RAW_ATTRIB4,matrix_location+2));
const VertexFormat &fmt = instance_data->get_format();
- matrix_offset = fmt.offset(make_indexed_component(ATTRIB4, matrix_location));
+ matrix_offset = fmt.offset(make_indexed_attribute(RAW_ATTRIB4, matrix_location));
- instance_buffer = new Buffer(ARRAY_BUFFER);
+ instance_buffer = new Buffer;
instance_data->use_buffer(instance_buffer);
vtx_setup = new VertexSetup;
+ vtx_setup->set_format_instanced(object.get_mesh()->get_vertices().get_format(), fmt);
vtx_setup->set_vertex_array(object.get_mesh()->get_vertices());
vtx_setup->set_index_buffer(*object.get_mesh()->get_index_buffer());
- vtx_setup->set_instance_array(instance_data);
+ vtx_setup->set_instance_array(*instance_data);
}
else
static Require req(ARB_vertex_shader);
InstanceArray::~InstanceArray()
{
- for(std::vector<ObjectInstance *>::iterator i=instances.begin(); i!=instances.end(); ++i)
+ for(vector<ObjectInstance *>::iterator i=instances.begin(); i!=instances.end(); ++i)
delete *i;
delete vtx_setup;
delete instance_data;
if(instance_buffer->get_size()>0 && instance_buffer->get_size()<req_size)
{
delete instance_buffer;
- instance_buffer = new Buffer(ARRAY_BUFFER);
+ instance_buffer = new Buffer;
instance_data->use_buffer(instance_buffer);
}
}
d[matrix_offset+i] = m(i/4, i%4);
}
-void InstanceArray::render(Renderer &renderer, const Tag &tag) const
+void InstanceArray::render(Renderer &renderer, Tag tag) const
{
if(instances.empty())
return;