osg.FlushDeletedGLObjectsOperation
是用于删除OpenGL对象的操作类。 它只负责立即删除所有已标记为删除的OpenGL对象以释放GPU内存。
osg::Operation
FlushDeletedGLObjectsOperation()
: 创建FlushDeletedGLObjectsOperation
对象。FlushDeletedGLObjectsOperation(const FlushDeletedGLObjectsOperation& fdo)
: 创建FlushDeletedGLObjectsOperation
对象的副本。virtual const char* className() const
: 返回类名称的字符串。virtual void operator()(osg::Object*)
: 若要执行操作,必须实现此函数。virtual void releaseGLObjects(osg::State* state = NULL) const
: 从OpenGL上下文中释放之前存储的所有GPU对象。当osg::notify
的日志级别为1时,FlushDeletedGLObjectsOperation
将向控制台输出删除的OpenGL对象列表。
osg::FlushDeletedGLObjectsVisitor
类可以遍历场景图,并在每个osg::State
对象上包含一个osg::FlushDeletedGLObjectsOperation
对象,以立即删除所有已标记为删除的OpenGL对象。
osg::ref_ptr<osg::Node> root = osgDB::readNodeFile("cow.osg");
osg::ref_ptr<osg::State> state = new osg::State;
osg::ref_ptr<osg::FlushDeletedGLObjectsOperation> flushDeletedGLObjsOp = new osg::FlushDeletedGLObjectsOperation;
state->setFlushDeletedObjectOperation(flushDeletedGLObjsOp.get());
osg::ref_ptr<osg::FlushDeletedGLObjectsVisitor> flushDeletedGLObjsVisitor = new osg::FlushDeletedGLObjectsVisitor(state.get());
root->accept(*flushDeletedGLObjsVisitor);
在上面的示例中,我们使用osgDB::readNodeFile
函数从文件中读取一个场景图。然后,我们创建一个osg::State
对象并设置它的osg::FlushDeletedGLObjectsOperation
对象,以便立即删除所有已标记为删除的OpenGL对象。 最后,我们使用osg::FlushDeletedGLObjectsVisitor
类访问场景图的每个节点,并在每个osg::State
对象上调用osg::FlushDeletedGLObjectsOperation
对象以删除所有已标记为删除的OpenGL对象。