X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fmaterials%2Fprogramdata.cpp;h=c641a7dfc9ce6061158b648f5a6defcfbfc1420d;hb=HEAD;hp=e7c171754aed006dab1ecbdcedd272ddd894a396;hpb=d548a2973f9142648cbf84e3557116b3ee4803c9;p=libs%2Fgl.git diff --git a/source/materials/programdata.cpp b/source/materials/programdata.cpp index e7c17175..c641a7df 100644 --- a/source/materials/programdata.cpp +++ b/source/materials/programdata.cpp @@ -602,6 +602,7 @@ vector::const_iterator ProgramData::prepare_program(c UniformBlock *old_last_block = last_buffer_block; auto prog_begin = get_program(prog); + bool check_buffer = (buffer && !buffer->get_size()); Mask force_dirty = (dirty==ALL_ONES ? ALL_ONES : 0U); Mask affected = (dirty&prog_begin->masks.used) | force_dirty; if(affected|prog_begin->masks.dirty) @@ -655,16 +656,19 @@ vector::const_iterator ProgramData::prepare_program(c prog_begin->masks.dirty = 0; - if(last_buffer_block!=old_last_block || (buffer && !buffer->get_size())) + if(last_buffer_block!=old_last_block) + check_buffer = true; + } + + if(check_buffer) + { + unsigned required_size = last_buffer_block->get_required_buffer_size(streaming); + if(last_buffer_block->get_required_buffer_size()>buffer->get_size()) { - unsigned required_size = last_buffer_block->get_required_buffer_size(streaming); - if(last_buffer_block->get_required_buffer_size()>buffer->get_size()) - { - if(buffer->get_size()>0) - recreate_buffer(); + if(buffer->get_size()>0) + recreate_buffer(); - buffer->storage(required_size, (streaming ? STREAMING : STATIC)); - } + buffer->storage(required_size, (streaming ? STREAMING : STATIC)); } }