[osg-users] bug in primitiveset.cpp?
Hello all I notice strange code at l231 of PrimitiveSet.cpp: Code: if (useVertexBufferObjects) { GLBufferObject* ebo = getOrCreateGLBufferObject(state.getContextID()); state.bindElementBufferObject(ebo); if (ebo) { if (_numInstances>=1) state.glDrawElementsInstanced(mode, size(), GL_UNSIGNED_SHORT, (const GLvoid *)(ebo->getOffset(getBufferIndex())), _numInstances); else glDrawElements(mode, size(), GL_UNSIGNED_SHORT, (const GLvoid *)(ebo->getOffset(getBufferIndex(; } else { if (_numInstances>=1) state.glDrawElementsInstanced(mode, size(), GL_UNSIGNED_SHORT, (), _numInstances); else glDrawElements(mode, size(), GL_UNSIGNED_SHORT, ()); } } else Does state.bindElementBufferObject(ebo); shouldn't be included in the if(ebo) test in case theres no index for the geometry? Thank you! Cheers, Julien[/code] -- Read this topic online here: http://forum.openscenegraph.org/viewtopic.php?p=65052#65052 ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
Re: [osg-users] bug in primitiveset.cpp?
Yes, it's a crash changing usevertexbufferobject at runtime that leads me to this observation: bindElementBufferObject(0) crashes at if(ebo->isDirty()) Code: inline void bindElementBufferObject(osg::GLBufferObject* ebo) { if (ebo == _currentEBO) return; if (ebo->isDirty()) ebo->compileBuffer(); else ebo->bindBuffer(); _currentEBO = ebo; } robertosfield wrote: > Hi Julien, > > > I've just looked at the State::bindElementBufferObject(..) implementation and > it looks like it attempts to access the ebo even if the ptr is 0 which will > cause a crash. > > > I'm guess this probably doesn't happen if the osg::Geometry is set up > correctly as the EBO should be created, as if useVertexBufferObjects is true > then the ebo "should" be non zero. > > > This doesn't mean that either the State::bindElementBufferObject(..) or the > DrawElements could should not be fixed though. > > > Are you seeing a crash? > > > > Robert. > > > > Robert. > > > On 7 September 2015 at 18:45, Julien Valentin < ()> wrote: > > > Hello all > > I notice strange code at l231 of PrimitiveSet.cpp: > > > > Code: > > if (useVertexBufferObjects) > > { > > GLBufferObject* ebo = > > getOrCreateGLBufferObject(state.getContextID()); > > state.bindElementBufferObject(ebo); > > if (ebo) > > { > > if (_numInstances>=1) state.glDrawElementsInstanced(mode, > > size(), GL_UNSIGNED_SHORT, (const GLvoid > > *)(ebo->getOffset(getBufferIndex())), _numInstances); > > else glDrawElements(mode, size(), GL_UNSIGNED_SHORT, (const > > GLvoid *)(ebo->getOffset(getBufferIndex(; > > } > > else > > { > > if (_numInstances>=1) state.glDrawElementsInstanced(mode, > > size(), GL_UNSIGNED_SHORT, (), _numInstances); > > else glDrawElements(mode, size(), GL_UNSIGNED_SHORT, ()); > > } > > } > > else > > > > > > > > Does state.bindElementBufferObject(ebo); shouldn't be included in the > > if(ebo) test in case theres no index for the geometry? > > > > Thank you! > > > > Cheers, > > Julien[/code] > > > > -- > > Read this topic online here: > > http://forum.openscenegraph.org/viewtopic.php?p=65052#65052 > > (http://forum.openscenegraph.org/viewtopic.php?p=65052#65052) > > > > > > > > > > > > ___ > > osg-users mailing list > > () > > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > (http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org) > > > > > -- > Post generated by Mail2Forum -- Read this topic online here: http://forum.openscenegraph.org/viewtopic.php?p=65055#65055 ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
Re: [osg-users] bug in primitiveset.cpp?
Hi Julien, I've just looked at the State::bindElementBufferObject(..) implementation and it looks like it attempts to access the ebo even if the ptr is 0 which will cause a crash. I'm guess this probably doesn't happen if the osg::Geometry is set up correctly as the EBO should be created, as if useVertexBufferObjects is true then the ebo "should" be non zero. This doesn't mean that either the State::bindElementBufferObject(..) or the DrawElements could should not be fixed though. Are you seeing a crash? Robert. Robert. On 7 September 2015 at 18:45, Julien Valentinwrote: > Hello all > I notice strange code at l231 of PrimitiveSet.cpp: > > Code: > if (useVertexBufferObjects) > { > GLBufferObject* ebo = > getOrCreateGLBufferObject(state.getContextID()); > state.bindElementBufferObject(ebo); > if (ebo) > { > if (_numInstances>=1) state.glDrawElementsInstanced(mode, > size(), GL_UNSIGNED_SHORT, (const GLvoid > *)(ebo->getOffset(getBufferIndex())), _numInstances); > else glDrawElements(mode, size(), GL_UNSIGNED_SHORT, (const > GLvoid *)(ebo->getOffset(getBufferIndex(; > } > else > { > if (_numInstances>=1) state.glDrawElementsInstanced(mode, > size(), GL_UNSIGNED_SHORT, (), _numInstances); > else glDrawElements(mode, size(), GL_UNSIGNED_SHORT, ()); > } > } > else > > > > Does state.bindElementBufferObject(ebo); shouldn't be included in the > if(ebo) test in case theres no index for the geometry? > > Thank you! > > Cheers, > Julien[/code] > > -- > Read this topic online here: > http://forum.openscenegraph.org/viewtopic.php?p=65052#65052 > > > > > > ___ > osg-users mailing list > osg-users@lists.openscenegraph.org > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > ___ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org