From 8541761fe79bf493a632fd250851a0e442ad727f Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Wed, 13 Jan 2010 18:46:52 +0000 Subject: [PATCH] For backwards compatiblity add a staic void BufferObject::deleteBufferObject(unsigned int contextID,GLuint globj) method. --- include/osg/BufferObject | 5 ++++- src/osg/BufferObject.cpp | 38 ++++++++++++++++++++++++++++++++++---- 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/include/osg/BufferObject b/include/osg/BufferObject index 9cf15be18..10a7bd21a 100644 --- a/include/osg/BufferObject +++ b/include/osg/BufferObject @@ -168,7 +168,7 @@ class OSG_EXPORT GLBufferObject : public Referenced { public: - GLBufferObject(unsigned int contextID, BufferObject* bufferObject=0); + GLBufferObject(unsigned int contextID, BufferObject* bufferObject, unsigned int glObjectID=0); void setProfile(const BufferObjectProfile& profile) { _profile = profile; } const BufferObjectProfile& getProfile() const { return _profile; } @@ -531,6 +531,9 @@ class OSG_EXPORT BufferObject : public Object unsigned int computeRequiredBufferSize() const; + /** deprecated, provided for backwards compatibility.*/ + static void deleteBufferObject(unsigned int contextID,GLuint globj); + protected: ~BufferObject(); diff --git a/src/osg/BufferObject.cpp b/src/osg/BufferObject.cpp index 5032a66de..3cbe15b69 100644 --- a/src/osg/BufferObject.cpp +++ b/src/osg/BufferObject.cpp @@ -45,9 +45,9 @@ unsigned int s_minimumNumberOfGLBufferObjectsToRetainInCache = 1000; // // GLBufferObject // -GLBufferObject::GLBufferObject(unsigned int contextID, BufferObject* bufferObject): +GLBufferObject::GLBufferObject(unsigned int contextID, BufferObject* bufferObject, unsigned int glObjectID): _contextID(contextID), - _glObjectID(0), + _glObjectID(glObjectID), _profile(0,0,0), _allocatedSize(0), _dirty(true), @@ -58,8 +58,13 @@ GLBufferObject::GLBufferObject(unsigned int contextID, BufferObject* bufferObjec _extensions(0) { assign(bufferObject); + _extensions = GLBufferObject::getExtensions(contextID, true); - _extensions->glGenBuffers(1, &_glObjectID); + + if (glObjectID==0) + { + _extensions->glGenBuffers(1, &_glObjectID); + } // osg::notify(osg::NOTICE)<<"Constucting BufferObject "<glDeleteBuffers(1, &_glObjectID); @@ -1257,6 +1262,30 @@ unsigned int BufferObject::computeRequiredBufferSize() const return newTotalSize; } +void BufferObject::deleteBufferObject(unsigned int contextID,GLuint globj) +{ + // implement deleteBufferObject for backwards compatibility by adding + // a GLBufferObject for the globj id to BufferObjectManager/Set for the specified context. + + osg::ref_ptr& bufferObjectManager = GLBufferObjectManager::getGLBufferObjectManager(contextID); + if (!bufferObjectManager) + { + osg::notify(osg::NOTICE)<<"Warning::BufferObject::deleteBufferObject("< glBufferObject = new GLBufferObject(contextID, 0, globj); + + GLBufferObjectSet* bufferObjectSet = bufferObjectManager->getGLBufferObjectSet(glBufferObject->getProfile()); + if (!bufferObjectSet) + { + osg::notify(osg::NOTICE)<<"Warning::BufferObject::deleteBufferObject("<orphan(glBufferObject.get()); +} + ////////////////////////////////////////////////////////////////////////////////////////////////////// // // BufferData @@ -1504,3 +1533,4 @@ void PixelDataBufferObject::resizeGLObjectBuffers(unsigned int maxSize) _mode.resize(maxSize); } +