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完成的。
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完成的。
相关文章推荐
- Ogre2.1 分析笔记(五) 渲染流程(二)
- Ogre2.1 分析笔记(二)-程序启动流程
- Ogre内部渲染流程分析系列
- [笔记]架构探险-从零开始写JavaWeb框架-2.1. 之使框架具有aop特性-aop框架加载与切面运行流程分析
- Ogre学习笔记(3):Mesh的渲染流程
- Ogre2.1 分析笔记(六) 合成器脚本分析
- Ogre2.1 分析笔记(八) 实现天空盒
- Ogre内部渲染流程分析系列
- Ogre2.1 分析笔记(三)-场景图结构
- Ogre2.1 Hlms与渲染流程
- Ogre内部渲染流程分析系列
- Ogre内部渲染流程分析系列
- Ogre2.1 分析笔记(一)
- Ogre2.1 分析笔记(七) 材质脚本分析
- Ogre2.1 Hlms与渲染流程
- Ogre2.1 Hlms与渲染流程
- Ogre内部渲染流程分析系列
- Ogre内部渲染流程分析系列
- Ogre内部渲染流程分析系列
- 简要分析Ogre渲染队列的实现原理(一)