您的位置:首页 > 移动开发 > Cocos引擎

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