Cocos2dx多线程渲染安卓启动流程

注释部分很重要,不可遗漏!

MainActivity的实现: 

class MyGame extends Cocos2dxActivity{
    void onCreate(Bundle savedInstanceState){
          requestPermission();
          unObbZip();//这里应该改为requestPermission的result回调成功时调用

          super.onCreate(savedInstanceState);//该方法调用了Cocos2dxActivity的onCreate方法,实现如下
          
          NativeCode.It().Init(this);//该方法调用了SDK.getInstance().Init()
    }
}

class Cocos2dxActivity extends Activity{
   void onCreate(Bundle savedInstanceState){
         load游戏主体.so;
         super.onCreate(savedInstanceState);
         this.init();//该方法调用了 new Cocos2dxRender()
         Cocos2dxHelper.init(this,this,this);
   }
}

Cocos2dxRender的实现: 

class Cocos2dxRender implements GLSurfaceView.Render{

     @Override
     public void onSurfaceCreated(final GL10 pGL10,final EGLConfig pEGLConfig){

          Cocos2dxRender.nativeInit(this.mScreenWidth,this.mScreenHeight);

          //该方法调用了C++里实现的jni接口,其中调用了 ioThreadRenderInit(),该接口启用了OnMainLoopThread线程

          //OnMainLoopThread 调用了 real_applicationInit()和 g_pWindowswLayer->OnMainLoopThread()

          //real_applicationInit在安卓的Main.cpp中有定义,该方法调用了 CCApplication->run()

          //安卓的CCApplication.cpp中run()调用了 applicationDidFinishLaunching()

          //applicationDidFinishLaunching 在 AppDelegate中定义,
          //调用了 pDirector->runWithScene(CGameScene), 
          //CGameScene::scene()创建了 CXWindowswLayer,
          //CXWindowswLayer构造函数里设置了 g_pWindowswLayer= this,并且设置了 
          //CIOJavaCallManager::It()->nativeOnRender = callback_nativeOnRender(该函数被渲染线程调用)

         //g_pWindowswLayer->OnMainLoopThread()开始循环,调用了CCDirector::sharedDirector()->mainLoop
         //其中结点先Update,然后调用所有结点的visit渲染
         //由于打开了多线程渲染开关,所以只是把OpenGL命令加入到了渲染队列里,让渲染线程使用。
    }


    @Override
    public void onDrawFrame(final GL10 gl){
        Cocos2dxRender.nativeRender();
        //该方法调用了C++里的 Java_org_cocos2dx_lib_Cocos2dxRender_nativeRender()
        //其中当多线程渲染开关开启时调用 CIOJavaCallManager::It()->NativeOnRender渲染
        //调用了初始化流程中设置的 callback_nativeOnRender进行渲染。
        //没有启用多线程渲染时,该Jni接口直接调用 CCDirector::sharedDirector()->mainLoop,
        //里面调用了drawScene,先Update所有结点,再调用visit渲染。
   }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逍遥游侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值