Ogre2.1 分析笔记(四) 渲染流程(一)

来源:互联网 发布:明星淘宝店有哪些品牌 编辑:程序博客网 时间:2024/06/08 12:22

1.      Root::renderOneFrame()完成对当前工作空间中的所有场景的帧渲染。

2.      Root::renderOneFrame()中的以下代码完成对对场景的渲染。

SceneManagerEnumerator::SceneManagerIterator itor = mSceneManagerEnum->getSceneManagerIterator();

       while( itor.hasMoreElements() )

       {

            SceneManager *sceneManager =itor.getNext();

            sceneManager->updateSceneGraph();

       }

 

       if (!_updateAllRenderTargets(evt))

            return false;

从以上代码可以看出:Ogre先对当前所有场景执行updateSceneGraph(),再更新所有渲染目标。updateSceneGraph()函数完成对场景的裁剪。所以渲染的更新由_updateAllRenderTargets()函数完成。

3. _updateAllRenderTargets()函数中以下代码完成对渲染目标的更新

       mCompositorManager2->_update( *mSceneManagerEnum, mHlmsManager );

       // give client app opportunity to usequeued GPU time

       bool ret = _fireFrameRenderingQueued(evt);

       // block for final swap

       mCompositorManager2->_swapAllFinalTargets();

    从上述代码可以看出:所有渲染的更新由CompositorManager2完成。先_update()完成渲染,再调用_swapAllFinalTargets()完成帧交换,将更新的帧交给显示窗口。

4. _swapAllFinalTargets()函数调用CompositorWorkspace:: _swapFinalTarget()函数完成帧交换。

总结一下:至此可以看出,对场景的渲染和帧交换都是由CompositorWorkspace完成的。
0 0