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对象。