您的位置:首页 > 其它

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

2017-05-08 15:18 471 查看
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完成的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: