X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fprogramdata.cpp;h=e1b4212e9d89588f78a42baf2d3e45d5a5a321db;hp=3e3f18db0040d1b75423985a4c8ad064dc41696c;hb=ab83db6f1e31d44ced585119a57fd10896e469cb;hpb=8ff00c9663371684f69059a548f8a0addca10d5c diff --git a/source/programdata.cpp b/source/programdata.cpp index 3e3f18db..e1b4212e 100644 --- a/source/programdata.cpp +++ b/source/programdata.cpp @@ -221,10 +221,21 @@ void ProgramData::apply() const throw invalid_operation("ProgramData::apply"); const Program::UniformBlockMap &prog_blocks = prog->get_uniform_blocks(); - for(Program::UniformBlockMap::const_iterator i=prog_blocks.begin(); i!=prog_blocks.end(); ++i) + if(!prog_blocks.empty()) { - const UniformBlock &block = get_block(*prog, &i->second); - block.apply(i->second.bind_point); + typedef pair ApplyBlock; + list apply_blocks; + for(Program::UniformBlockMap::const_iterator i=prog_blocks.begin(); i!=prog_blocks.end(); ++i) + { + const UniformBlock &block = get_block(*prog, &i->second); + apply_blocks.push_back(make_pair(&block, i->second.bind_point)); + } + + if(buffer) + buffer->bind(); + + for(list::const_iterator i=apply_blocks.begin(); i!=apply_blocks.end(); ++i) + i->first->apply(i->second); } const UniformBlock &block = get_block(*prog, 0);