C++学习(三三一)有关osgUtil::SceneView

Posted hankern

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++学习(三三一)有关osgUtil::SceneView相关的知识,希望对你有一定的参考价值。

每个渲染器会有两个osgUtil::SceneView,两个是便于在多线程时,一个线程在一个SceneView做裁减,另一个线程在另一个SceneView做绘制,可以并行操作。

osgViewer/Renderer.cpp
Renderer::Renderer(osg::Camera* camera):
    osg::Referenced(true),
    osg::GraphicsOperation("Renderer",true),
    _camera(camera),
    _done(false),
    _graphicsThreadDoesCull(true),
    _compileOnNextDraw(true),
    _serializeDraw(false),
    _initialized(false),
    _startTick(0)
{
    _sceneView[0] = new osgUtil::SceneView;
    _sceneView[1] = new osgUtil::SceneView;
    _availableQueue.add(_sceneView[0].get());
    _availableQueue.add(_sceneView[1].get());
}
void Renderer::cull()
{
    osgUtil::SceneView* sceneView = _availableQueue.takeFront();
    sceneView->cull();
    _drawQueue.add(sceneView);
}

void Renderer::draw()
{
    osgUtil::SceneView* sceneView = _drawQueue.takeFront();
    sceneView->draw();
    _availableQueue.add(sceneView);
}

osgUtil::SceneView负责执行裁减和绘制操作。

osgViewer/Renderer.cpp
void Renderer::cull_draw()
{
    osgUtil::SceneView* sceneView = _sceneView[0].get();
    sceneView->cull();
    sceneView->draw();
}

以上是关于C++学习(三三一)有关osgUtil::SceneView的主要内容,如果未能解决你的问题,请参考以下文章

C++学习(三一六)事件响应返回值

C++学习(四三一)nostdlib作用

C++学习(三一二)glVertexAttribPointer和glVertexAttrib*的关系

C++学习(三一零)glEnableVertexAttribArray和glVertexAttribPointer的顺序关系

C++学习(三一三)EventQueue创建时机

C++学习(三一四)osg漫游器Manipulator例子