第三节hellocpp整体框架(二)
来源:互联网 发布:淘宝蚂蚁花呗开通条件 编辑:程序博客网 时间:2024/05/20 21:22
我们继续来看Cocos2dxActivity.java 里面的init 函数。
主要创建Cocos2dxGLSurfaceView 和new Cocos2dxRenderer()
然后消息传递机制为:
Cocos2dxGLSurfaceView 作为android 架构的接收按键和触屏消息,然后转给Cocos2dxRenderer
去处理,这里面处理完毕,直接渲染。
Cocos2dxRenderer.java 渲染器接口,
主要的接口为onSurfaceCreated
onSurfaceChanged
onDrawFrame
关键的接口为onDrawFrame,里面调用private static native void nativeRender();
进行真正的调用接口。
JNIEXPORT void JNICALL
Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeRender(JNIEnv* env) {
cocos2d::CCDirector::sharedDirector()->mainLoop();
}
调用这个进行更新屏幕,推动游戏进展。
然后继续来看Cocos2dxGLSurfaceView 类继承的GLSurfaceView,
这个GLSurfaceView 文件在android\frameworks\base\opengl\java\android\opengl 里
面。里面我们看一下setRenderer 这个函数
这个函数是设置渲染器的地方。
checkRenderThreadState();
if (mEGLConfigChooser == null) {
mEGLConfigChooser = new SimpleEGLConfigChooser(true);
}
if (mEGLContextFactory == null) {
mEGLContextFactory = new DefaultContextFactory();
}
if (mEGLWindowSurfaceFactory == null) {
mEGLWindowSurfaceFactory = new DefaultWindowSurfaceFactory();
}
mRenderer = renderer;
mGLThread = new GLThread(renderer);
mGLThread.start();
上面的是创建EGL 的一些配置,看下createSurface 这个函数
if (!mEgl.eglMakeCurrent(mEglDisplay, mEglSurface, mEglSurface,
mEglContext)) {
throwEglException("eglMakeCurrent");
}
绑定mEglSurface 到活动mEglContext,随后的绘制便会到mEglSurface,刷新会推
动到SurfacefXX,记不得名字了,这个模块会将Surface
push 到真正屏幕,此时实现了完整绘制过程。
继续查看setRenderer 接口,里面出现了一个关键的调用
mGLThread = new GLThread(renderer);
mGLThread.start();
这个线程叫做绘制线程,负责所有绘制事件。
public void run() {
setName("GLThread " + getId());
if (LOG_THREADS) {
Log.i("GLThread", "starting tid=" + getId());
}
try {
guardedRun();
} catch (InterruptedException e) {
// fall thru and exit normally
} finally {
sGLThreadManager.threadExiting(this);
}
}
线程里面调用guardedRun 函数。
这节分析到此处。
- 第三节hellocpp整体框架(二)
- 第四节hellocpp整体框架(三)
- 第三节:引入unittest框架
- F28027第三节课---系统时钟(二)
- Filter(第三节)
- Cocos2d-x学习笔记(二) HelloCpp代码理解
- Bootstrap学习(第三节)
- Qt整体框架浅析(二) -信号机制
- Qt整体框架浅析(二) -信号机制
- ExtAspNet应用技巧(二十一) - Ext4JSLint之整体框架
- windows驱动编程(二) windows系统整体框架详解
- Cocos2d-x学习笔记(二)Cocos2d-x整体框架
- Akka并发编程——第三节:Actor模型(二)
- Akka并发编程——第三节:Actor模型(二)
- 【Struts2框架】第三节OGNL表达式-OGNL表达式例子
- 【Struts2框架】第三节OGNL表达式-OGNL表达式例子2
- 【Struts2框架】第三节OGNL表达式-projection投影
- cocos2dx 第二节 hellocpp 源码分析 整体思路
- html占位图img placeholder
- View的drawable的使用
- 密码学_概述_01
- CCScrollView 和 CCLabelTTF 组成CCScrollLabel
- MongoDB简单实例演示
- 第三节hellocpp整体框架(二)
- 第四节hellocpp整体框架(三)
- cocos2d-x 手电筒效果
- 触摸获取坐标
- nyoj-36-最长公共子序列
- 介绍谷歌推出PNaCl如何运作的
- setTimeout和setIntelval的用法
- CMAKE总结(1) .lib .dll .a .so libx.dll libx.dll.a
- 迭代器和组合模式-良好的管理集合-headfirst