一
首先讲一下, Android端 GLSurfaceView的渲染机制
CrossApp是基于Cocos2d-x引擎的, 而Cocos2d-x是彻底基于 OpenGL的 。
通常基于OpenGL的引擎 整个渲染机制 为:
1 用EGL 库建立 窗口,关联OpenGL 上下文到该窗口
2 设置窗口大小 以及 glViewPort(...)
3 while循环里 , 写OpenGL渲染程序,渲染你想要的东西
那么, 在Android端以上过程,都包含在了GLSurfaceView中。它提供了一个 Renderer接口, 其中使用最频繁的onDrawFrame就是用来,渲染咱们想要的东西的。
其实,编译成Android 版本的整个CrossApp都是 运行在 这个GLSurfaceView里面的, 其中 的渲染以及 触屏机制 都是 经过jni来调用的, jni所使用的类都 在
CrossApp/platform/android/jni/在目录下。 这些 jni native方法再去调用引擎里的其它方法,从而, 在OnDrawFrame里经过 native CocosRender()方法渲染到GLSurfaceView上,呈如今咱们的眼前
二
以一个 例子,CrossApp如何作一个 简单ListView的:
如何 配置CrossApp, 及建立Android工程,并运行工程的默认Demo,以及如何写一个简单的ListView请参考,
CrossApp官网无脑码农的帖子和视频,在此就不罗嗦了,
在这里支持下无脑码农。
若是,以上您都成功了,
那么,咱们主要讲解下如何将App的画面分屏。
首先,看一下,Android工程目录:
HelloCApp是我用 CrossApp建立的工程, 它依赖于CrossApp\platform\android\下的工程,主要是org.CrossApp.lib下的文件,它有
为咱们建立好的 Cocos2dxActivity, Cocos2dxGLSurfaceView, 和 Cocos2dxRenderer。
HelloCApp 与 org.CrossApp.lib的依赖关系以下:
其次,看一下, org.CrossApp.lib下的 类:
Cocos2dxActivity 是咱们程序的主界面, 在这个类中 init方法里,会将Cocos2dxGLSurfaceView 视图添加到 一个frameLayout, 而后将该frameLayout做为界面的主视图。
Cocos2dxGLSurfaceView 会经过setRenderer 将Cocos2dxRenderer 设置它的渲染接口。
这样,当整个程序运行起来时, Cocos2dxRenderer的 onDrawFrame 会经过nativeRender()方法将 CrossApp建立的UI 渲染出来。
最后,如何分屏:
看到这里,咱们基本已经知道,CrossApp的UI 都是 经过nativeRender()渲染出来的,即 在Cocos2dxRender.java 类的 onDrawFrame方法里:
Cocos2dxRender.nativeRender() 是最终渲染到屏幕的纹理。
咱们若是可以拿到该纹理,则能够将纹理渲染到咱们本身的面板上,
即
先建立一个纹理依附的 FrameBuffer, 而后nativeRender()将纹理渲染到这个依附的纹理上,这个依附的纹理就是咱们想要的纹理,而后咱们本身将屏幕分为左右两个面板,将该纹理分别渲染在这两个面板上,就达到了左右分屏的目的。
VRSDK 是我本身写的SDK, bindOffSFrame() 就是绑定到纹理依附的FrameBuffer上, showStereo() 是分屏的操做。
如何使用VrSDK。
而后, 让 org.CrossApp.lib所在的工程,依赖于 VrSDK工程。
最后, 在 Cocos2dxActivity的 onCreate(...)方法里,添加 VrSDK.getInstance().setContext(sContext);
在 Cocos2dxRenderer里 的 onSurfaceChanged(...)方法里添加VrSDK.getInstance().init(pWidth, pHeight);
Okay, 看一下效果:
这样就分屏了。 能够带上VR盒子体验了。
提示: 因为CrossApp是 App级的渲染引擎,不是游戏级的。所以,它在咱们对App没有操做时, 在C++ 层,是再也不渲染的, UI会固定在最新的渲染出来的画面上。 可是,在Java层onDrawFrame仍是在不停的绘制的,这时,咱们本身创建的FrameBuffer是拿不到图的,会出现黑屏的现象。在下一贴,我会分析,CrossApp的渲染机制,来解决这一问题。
ARVR技术交流群:129340649java
欢迎加入!android