X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Finstancearray.cpp;h=abd9fcd0bd870d14def0192392490b09c702fa2d;hp=5c6ab423bb8981326416b718e078cd51cceac12e;hb=bec07999d95b76f4b47cffcc564d0cd0afc0435e;hpb=95a6bef6db17089d0eb82b4df005fa5f05b2f6e2 diff --git a/source/instancearray.cpp b/source/instancearray.cpp index 5c6ab423..abd9fcd0 100644 --- a/source/instancearray.cpp +++ b/source/instancearray.cpp @@ -75,7 +75,16 @@ void InstanceArray::append(ObjectInstance *inst) if(instance_data) { if(instance_data->size()append(); + unsigned req_size = instance_data->get_required_buffer_size(); + if(instance_buffer->get_size()>0 && instance_buffer->get_size()use_buffer(instance_buffer); + } + } update_instance_matrix(instances.size()-1); } } @@ -113,16 +122,18 @@ void InstanceArray::render(Renderer &renderer, const Tag &tag) const const Technique *tech = object.get_technique(); if(!tech) throw logic_error("no technique"); - if(!tech->has_pass(tag)) + const RenderPass *pass = tech->find_pass(tag); + if(!pass) return; - const RenderPass &pass = tech->get_pass(tag); const Mesh *mesh = object.get_mesh(); mesh->get_vertices().refresh(); + if(instance_buffer->get_size()==0) + instance_buffer->storage(instance_data->get_required_buffer_size()); instance_data->refresh(); Renderer::Push push(renderer); - pass.apply(renderer); + pass->apply(renderer); mesh->draw_instanced(renderer, *vtx_setup, instances.size()); } else