X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Frender%2Fprogramdata.cpp;h=e7c171754aed006dab1ecbdcedd272ddd894a396;hp=0aebdcd9a5747aa9f823ceb2a5116e3e45182560;hb=29d5fcb1674903600af6911f019641afcde1c72f;hpb=3d60c98715b1a93ae3c7b007c18557e0c2c99fc7 diff --git a/source/render/programdata.cpp b/source/render/programdata.cpp index 0aebdcd9..e7c17175 100644 --- a/source/render/programdata.cpp +++ b/source/render/programdata.cpp @@ -116,7 +116,15 @@ bool ProgramData::validate_tag(Tag tag) const void ProgramData::mark_dirty(Mask bits) { if(!dirty) + { + if(generation && !streaming) + { + streaming = true; + if(buffer && buffer->get_size()) + recreate_buffer(); + } ++generation; + } dirty |= bits; } @@ -647,15 +655,15 @@ vector::const_iterator ProgramData::prepare_program(c prog_begin->masks.dirty = 0; - if(last_buffer_block!=old_last_block) + if(last_buffer_block!=old_last_block || (buffer && !buffer->get_size())) { - unsigned required_size = last_buffer_block->get_required_buffer_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(); - buffer->storage(required_size, STREAMING); + buffer->storage(required_size, (streaming ? STREAMING : STATIC)); } } }