经过资料查询,好像是说在用于预编译,在运行时就把模型渲染到场景,居然用途未知,记录一下接口说明
osg::ref_ptr<osgUtil::IncrementalCompileOperation> incrementalCompile = new osgUtil::IncrementalCompileOperation;
//设置增量编译操作
//用于管理OpenGL对象编译和子图的合并,以避免在一帧中有太多新对象而使帧的渲染过载。
viewer.setIncrementalCompileOperation(incrementalCompile.get());
if (arguments.read("--force") || arguments.read("-f"))
{
//在每次纹理编译后,分配一个几何体和相关的StateSet,以试图强制OpenGL驱动器将纹理对象下载到OpenGL显卡。
incrementalCompile->assignForceTextureDownloadGeometry();
}
if (arguments.read("-a"))
{
//设置每帧编译和删除OpenGL对象所需的最小时间(以秒为单位)。默认值为0.001(1毫秒)。使用方法参见setTargetFrameRate中的注释。
incrementalCompile->setMinimumTimeAvailableForGLCompileAndDeletePerFrame(1);
//ConservativeTimeRatio控制每一帧中有多少测量的空闲时间用于刷新已删除的OpenGL对象和编译新的OpenGL对象。
//缺省值为0.5,有效范围为0.1 ~1.0。接近1.0的比值会导致页面数据库编译和合并更快,但会增加掉帧的几率。
//接近0.1的比率将导致页面数据库的编译和合并更紧密,但减少了丢帧的机会。
incrementalCompile->setConservativeTimeRatio(1);
//设置页面每帧尝试编译的OpenGL对象的最大数量。注意,值越小,帧丢失的几率就越低,但是数据库被页入的速率也越低。缺省值为8。
incrementalCompile->setMaximumNumOfObjectsToCompilePerFrame(100);
}
// 创建compileSet:
osg::ref_ptr<:incrementalcompileoperation::compileset> compileSet = osgUtil::IncrementalCompileOperation::CompileSet(NODE,true);
//从CompileCompletedCallback派生新类,然后重写Completed函数,在内部隐藏节点:
//将 派生类 绑定到 compileSet。
compileSet->compileSet->_compileCompletedCallback = newCompileCompletedCallback;
//设置 IncrementalCompileOperation 过期策略
pIcompOperation->setCompileAllTillFrameNumber(50);
再往下就是使鼠标聚焦到osg的绘制窗口上这个一个功能。使用增量编译osgUtil::IncrementalCompileOperation,避免加载大模型时造成的帧率下降。