c++ - glGenBuffers returning non-unique names -


i thought impossible i'm seeing software. have built wrapper object manage buffer objects (i working shared contexts can't use vaos), , vbo side of things working fine until starting testing ibos (gldrawelements(), i'm using pure opengl 3+ environment).

here code adding buffer object (sy_globject):

qlist< uint > sy_globject::addbuffers( uint numbuffers, glenum target,                                        glenum numerictype, glenum usage ) {     uint* adds = new uint[numbuffers];     glgenbuffers( numbuffers, adds );      qlist< uint > l;     ( uint = 0; < numbuffers; ++i ) {             buffer buffer( target, adds[i], 0, numerictype, usage );             buffers_ << buffer;              l << i;     }     delete[] adds;      sy_gl::checkerror();     return l; } 

and buffer names returned function fine, until called code:

void sy_bvh::initialiseglobject() {     sy_application::getmainwindow()->getactiveproject(                                         )->getmodelcontext()->makecurrent();      gluint vloc = sy_settings::get( "shader/flat/vertexloc" ).touint();     drawbbs_ = sy_globject::createobject();      //  add vertex array.     drawbbs_->addbuffers( 1 );     drawbbs_->buffers()[0].setvertexpointer( vloc );      //  add indices array.     drawbbs_->addbuffers( 1, gl_element_array_buffer, gl_unsigned_int ); } 

for reason indices array , vertex array names both same! setvertexpointer() not call glvertexattribpointer(), stores parameters in pod class - so no opengl calls made between 2 addbuffers() commands. vertex call 'correct' 1 higher previous glgenbuffers() result, addbuffers() point of view there should no difference between calls.

are there circumstances glgenbuffers can possibly return name of buffer in use!?

thanks!

update
make sure threading not factor, wrapped static mutex around glgenbuffers() block.

qmutexlocker locker( &mutex_ ); // mutex_ qmutex static class member. uint* adds = new uint[numbuffers]; glgenbuffers( numbuffers, adds ); locker.unlock(); 

but had absolutely no effect...

thanks ilian dinev on @ opengl.org forums pointing out stupid error. created buffer object on stack , conveniently had it's destructor call gldeletebuffers(). fantastic bit of design.


Comments