const Program::UniformBlockMap &prog_blocks = prog->get_uniform_blocks();
+ UniformBlock *old_last_block = last_block;
if(pu.dirty==ALL_ONES)
{
/* The set of uniforms has changed since this program was last used.
to avoid state thrashing. */
if(buffered_blocks_updated && !ARB_direct_state_access)
buffer->bind();
+
+ if(last_block!=old_last_block)
+ {
+ unsigned required_size = last_block->get_required_buffer_size();
+ if(last_block->get_required_buffer_size()>buffer->get_size())
+ buffer->data(required_size, 0);
+ }
}
for(vector<ProgramBlock>::iterator i=pu.blocks.begin(); i!=pu.blocks.end(); ++i)