cocos渲染引擎分析(一)-----渲染启动流程

做了两年的cocos引擎底3D层优化和特效,以及对应的编辑器开发。原本的计划中,参考Unity3D引擎,优化cocos渲染流程,实现批次渲染,BRDF渲染,卡通渲染,多材质渲染,延迟渲染,模型阴影,以及HDR,次表面散射,中国风特效,砖石特效等,并制作对应的编辑器。而今只实现了底层优化,批次渲染,BRDF渲染,卡通渲染,多材质渲以及对应编辑器制作。自感部门危险,这几天整理下做过的工作,记录下来,也算对自己工作一个回顾总结。

windows系统中,首先进入main()函数:

 // create the application instance
    AppDelegate app;
    int ret = Application::getInstance()->run();

           然后,进入run函数:

    //初始引擎环境,包括GLView创建(最终实现根据不同的平台进入不同实现),目录设置,LUA绑定C++实现 
   (cocos自身实现和项目加入的三方SDK实现)
    if (!applicationDidFinishLaunching())
        return 1;
    。。。。。。。
    //渲染主循环,根据设置的FPS,while函数每隔一定时间执行一次,执行内容包括项目设置的各种定时器 
   (scheduler,update函数),以及最重要的渲染刷新。
    while(!glview->windowShouldClose())
    {
        QueryPerformanceCounter(&nNow);
        if (nNow.QuadPart - nLast.QuadPart > _animationInterval.QuadPart)
            director->mainLoop();
    }

android环境中,Cocos2dxRenderer继承自GLSurfaceView.Renderer,andriod启动后主循环进入Render的OnDrawFrame(此为android开发的知识):

 public void onDrawFrame(final GL10 gl) {
        //类似winodws的while主循环函数,每隔一定时间进行调用一次nativeRender
        if (sAnimationInterval <= 1.0 / 60 * Cocos2dxRenderer.NANOSECONDSPERSECOND) {
            Cocos2dxRenderer.nativeRender();
        } else {
            final long now = System.nanoTime();
            final long interval = now - this.mLastTickInNanoSeconds;
            if (interval < Cocos2dxRenderer.sAnimationInterval) {
                try {
                    Thread.sleep();
                } catch (final Exception e) {
                }
            }   
            this.mLastTickInNanoSeconds = System.nanoTime();
            Cocos2dxRenderer.nativeRender();
        }
    }

nativeRender是一个静态函数,在Java_org_cocos2dx_lib_Cocos2dxRenderer中实现,通过JNI转换后调用C++也调用mainLoop函数。

JNIEXPORT void JNICALL Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeRender(JNIEnv* env) {
        cocos2d::Director::getInstance()->mainLoop();
    }

mainLoop中执行drawScene功能:

   //此处的update函数是各种update,action,动画,定时器的入口,如果项目的网络接口部分也是在cocos的 
   update函数实现,此时也是网络接收的入口,这就是为什么进入后台后网络阻塞,进入前台后一下接收到很多
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值