X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fprogramdata.cpp;fp=source%2Fprogramdata.cpp;h=912bc3c88a54c25a8c52199e8552a0d0a2b5eecc;hp=f454fe5145f595ed1cd6c62488c5b433aaba9a83;hb=56133280d92c08c1c649a725260a6c4d5afb5e75;hpb=9f00daecc2517aa8fd5a6e4545b2db3f2fff985d diff --git a/source/programdata.cpp b/source/programdata.cpp index f454fe51..912bc3c8 100644 --- a/source/programdata.cpp +++ b/source/programdata.cpp @@ -489,12 +489,25 @@ ProgramData::SharedBlock *ProgramData::get_shared_block(const Program::UniformBl if(i==blocks.end()) { bool any_found = false; - for(vector::const_iterator j=info.uniforms.begin(); (!any_found && j!=info.uniforms.end()); ++j) - any_found = (find_uniform_index((*j)->name)>=0); + bool all_found = true; + for(vector::const_iterator j=info.uniforms.begin(); j!=info.uniforms.end(); ++j) + { + if(find_uniform_index((*j)->name)>=0) + any_found = true; + else + all_found = false; + } - // TODO throw if all uniforms for a buffer-backed block are not found if(!any_found) return 0; + else if(!all_found && info.bind_point>=0) + { +#ifdef DEBUG + IO::print(IO::cerr, "Warning: not all uniforms for block %s are present\n", info.name); +#else + throw incomplete_uniform_block(info.name); +#endif + } UniformBlock *block; if(info.bind_point>=0)