cocos2d-x源码分析之Director::drawScene()
2014-12-16 20:31
295 查看
寄语:选择可能就意味着孤独,我们只有不懈的坚持方能看见曙光!最近比较郁闷,上一个项目还是黄了,自己加入了新的团队,在工作之余打算看看cocos的源代码,于是这一系列的文章便诞生了。通过源代码分析,可以看到整个cocos引擎的渲染控制函数是:Director::drawScene()
// calculate "global" dtcalculateDeltaTime();// skip one flame when _deltaTime equal to zero.if(_deltaTime < FLT_EPSILON){return;}if (_openGLView){_openGLView->pollEvents();}//tick before glClear: issue #533if (! _paused){_scheduler->update(_deltaTime);_eventDispatcher->dispatchEvent(_eventAfterUpdate);}glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);/* to avoid flickr, nextScene MUST be here: after tick and before draw.* FIXME: Which bug is this one. It seems that it can't be reproduced with v0.9*/if (_nextScene){setNextScene();}pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);if (_runningScene){//clear draw stats_renderer->clearDrawStats();//render the scene_runningScene->render(_renderer);_eventDispatcher->dispatchEvent(_eventAfterVisit);}// draw the notifications nodeif (_notificationNode){_notificationNode->visit(_renderer, Mat4::IDENTITY, 0);}if (_displayStats){showStats();}_renderer->render();_eventDispatcher->dispatchEvent(_eventAfterDraw);popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);_totalFrames++;// swap buffersif (_openGLView){_openGLView->swapBuffers();}if (_displayStats){calculateMPF();}在上面的代码中,我觉的最先开始和渲染有关系的是:glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);有关此函数的详细解释,可参考这篇:http://blog.csdn.net/shuaihj/article/details/7230138清除完缓存区之后:if (_nextScene){setNextScene();}如果需要切换场景,就设置下一个要渲染的场景。if (_runningScene){//clear draw stats_renderer->clearDrawStats();//render the scene_runningScene->render(_renderer);_eventDispatcher->dispatchEvent(_eventAfterVisit);}上面的代码中_renderer 先不做详细解释,_runningScene->render(_renderer)便可以看出是渲染当前场景的主要 函数。_eventDispatcher->dispatchEvent(_eventAfterDraw);事件分发_openGLView->swapBuffers()的实现代码为:if(_mainWindow)glfwSwapBuffers(_mainWindow);glfwSwapBuffers这个函数的命名就可以看出是opengl的api此函数的作用参照:http://blog.csdn.net/shuaihj/article/details/7231913交换缓存之后,drawScene的主要功能就完成了。从上面的代码可以看出cocos渲染的循环体就是这么函数了,所有的渲染的驱动都是在这里开始的。下篇文章我们去看看coocs的render对象。
相关文章推荐
- cocos2d-iphone源码分析(2):Director
- Cocos2d-X3.0 刨根问底(九)----- 场景切换(TransitionScene)源码分析
- Cocos2d-X3.0 刨根问底(八)----- 场景(Scene)、层(Layer)相关源码分析
- cocos2d-iphone源码分析(2):Director
- cocos2d-x源码分析-----入口分析(android)
- cocos2d-x源码分析::内存管理机制
- 子类、变换-cocos2d-x 学习点滴(5) Scene,Director, Layer 和 Sprite-by小雨
- cocos2d-x 笔记(五) TestCpp源码分析:Actions
- Android4.2源码View.draw(Canvas canvas)中canvas分析
- [置顶] Cocos2d-x 实例源码分析之二 小实例的主框架
- Cocos2d-x 2.0 TestCpp框架源码分析
- cocos2d-x源码分析::触屏分发器(touch_dispatcher)
- Android中draw过程分析 (结合Android 4.0.4 最新源码)
- COCOS2D-X源码分析之初始化游戏
- cocos2D-x demo 的源码分析 #define ..##.. 的妙用.
- Cocos2d-x 实例源码分析之三 ActionTest ( Manual Transformation )
- cocos2d-x 笔记(四) TestCpp源码分析:control
- cocos2d-x CCDirector在Windows平台,Android平台,ios平台分析和用途-沈大海cocos2d-x教程10
- cocos2d-iphone源码分析(1):场景
- Cocos2d-x 2.0 TestCpp框架源码分析