GLBufferObject* GLBufferObjectManager::generateGLBufferObject(const BufferObject* bufferObject) { ElapsedTime elapsedTime(&(getGenerateTime())); ++getNumberGenerated(); BufferObjectProfile profile(bufferObject->getTarget(), bufferObject->getUsage(), bufferObject->computeRequiredBufferSize()); // OSG_NOTIFY(osg::NOTICE)<<"GLBufferObjectManager::generateGLBufferObject size="<<bufferObject->computeRequiredBufferSize()<<std::endl; GLBufferObjectSet* glbos = getGLBufferObjectSet(profile); return glbos->takeOrGenerate(const_cast<BufferObject*>(bufferObject)); }
osg::ref_ptr<GLBufferObject> GLBufferObjectManager::generateGLBufferObject(const BufferObject* bufferObject) { ElapsedTime elapsedTime(&(getGenerateTime())); ++getNumberGenerated(); unsigned int requiredBufferSize = osg::maximum(bufferObject->computeRequiredBufferSize(), bufferObject->getProfile()._size); BufferObjectProfile profile(bufferObject->getTarget(), bufferObject->getUsage(), requiredBufferSize); // OSG_NOTICE<<"GLBufferObjectManager::generateGLBufferObject size="<<requiredBufferSize<<std::endl; GLBufferObjectSet* glbos = getGLBufferObjectSet(profile); return glbos->takeOrGenerate(const_cast<BufferObject*>(bufferObject)); }
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<GLBufferObjectManager>& bufferObjectManager = GLBufferObjectManager::getGLBufferObjectManager(contextID); if (!bufferObjectManager) { OSG_NOTIFY(osg::NOTICE)<<"Warning::BufferObject::deleteBufferObject("<<contextID<<", "<<globj<<") unable to get GLBufferObjectManager for context."<<std::endl; return; } osg::ref_ptr<GLBufferObject> glBufferObject = new GLBufferObject(contextID, 0, globj); GLBufferObjectSet* bufferObjectSet = bufferObjectManager->getGLBufferObjectSet(glBufferObject->getProfile()); if (!bufferObjectSet) { OSG_NOTIFY(osg::NOTICE)<<"Warning::BufferObject::deleteBufferObject("<<contextID<<", "<<globj<<") unable to get GLBufferObjectSet for context."<<std::endl; return; } // do the adding of the wrapper buffer object. bufferObjectSet->orphan(glBufferObject.get()); }