]> git.tdb.fi Git - libs/gl.git/blobdiff - source/render/instancearray.cpp
Store index type in VertexSetup
[libs/gl.git] / source / render / instancearray.cpp
index 4287700f0eeb768c4bbaf145fb3e463350a14786..039a50ecde32a7500850ca107f040169fe0b5692 100644 (file)
@@ -48,13 +48,16 @@ InstanceArray::InstanceArray(const Object &o):
                const VertexFormat &fmt = instance_data->get_format();
                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);
 
+               const Mesh *mesh = object.get_mesh();
+
                vtx_setup = new VertexSetup;
-               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_format_instanced(mesh->get_vertices().get_format(), fmt);
+               vtx_setup->set_vertex_array(mesh->get_vertices());
+               vtx_setup->set_index_buffer(*mesh->get_index_buffer(), mesh->get_batches().front().get_index_type());
+               vtx_setup->set_instance_array(*instance_data);
        }
        else
                static Require req(ARB_vertex_shader);
@@ -62,7 +65,7 @@ InstanceArray::InstanceArray(const Object &o):
 
 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;
@@ -81,7 +84,7 @@ void InstanceArray::append(ObjectInstance *inst)
                        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);
                        }
                }