07-渲染流程-1-流程

Image(11)

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是如何执行的?

Image(12)

Image(13)

2.AppController 和 RootViewController 分析

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

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

3.app controller  didFinishLaunchingWithOptions

create window

create CCEAGLView

create RootViewController 来管理CCEAGLView

隐藏了IOS的状态条

接着进入了cocos2dx

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

Director:: setOpenGLView

cocos2d::Application -> run

4.drawScene

Image(14)

最终调用了 Node::visit

void Node::visit(Renderer* renderer, const Mat4 &parentTransform, bool parentTransformUpdated)

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

75BA4080-76ED-4C20-A2DB-9AAAEBCAFCA2

f have no child     就是叶子节点

     draw self

else

     对child按照zorder排序

     首先绘制 zorder < 0的

     然后绘制自己

     然后绘制 zorder > 0的

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

virtual void draw(Renderer *renderer, const Mat4& transform, bool transformUpdated);

完整渲染流程图

Image(15)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值