07-渲染流程-1-流程

07-渲染流程-1-流程_第1张图片
cocos2dx渲染序列图

1.AppControler完成加载后

2.调用了Director,设置了OpenglView,投影的设置就在这个过程里面。

3.调用Application::run

4.在开始运行程序之前,首先调用了基础了Application的Appdelegate的applicationDidFinishLaunching方法

5.new一个新的Scene,并runScene,此时Director中存在了一个需要渲染的树

6.然后开启一个无休止的循环mainLoop

7.在Director::mainLoop中,需要完成两件事情

1.drawScene 渲染整个场景树

2.PoolManager中clear引用计数的autoRelease

之后游戏的就全部放在了mainloop中进行处理,所以比较复杂的所有的逻辑都在drawScene中体现.

问题:

1.AppControler是如何执行的?


07-渲染流程-1-流程_第2张图片
07-渲染流程-1-流程_第3张图片

2.AppController 和 RootViewController 分析

AppController 是针对UIApplicationDelegate的处理,也就是系统加载完成后需要执行的 finish  enterBackground enterForeground 等

而 RootViewController 则是针对UIViewController,主要针对的是视图相关的,最重要的是横版和竖版的时候,修改屏幕的大小(长宽)。

3.app controllerdidFinishLaunchingWithOptions

create window

create CCEAGLView

create RootViewController 来管理CCEAGLView

隐藏了IOS的状态条

接着进入了cocos2dx

首先 create cocos2d::GLView -> 通过CCEAGLView来创建

Director:: setOpenGLView

cocos2d::Application -> run

4.drawScene


07-渲染流程-1-流程_第4张图片

最终调用了 Node::visit

voidNode::visit(Renderer* renderer,constMat4&parentTransform,boolparentTransformUpdated)

在visit内部,主要逻辑是递归访问child,处理每一个child的render

07-渲染流程-1-流程_第5张图片

f have no child    就是叶子节点

draw self

else

对child按照zorder排序

首先绘制 zorder < 0的

然后绘制自己

然后绘制 zorder > 0的

而针对每一个节点,真正的渲染,会自动进入到

virtualvoiddraw(Renderer*renderer,constMat4& transform,booltransformUpdated);

完整渲染流程图


07-渲染流程-1-流程_第6张图片

你可能感兴趣的:(07-渲染流程-1-流程)