OpenGL ES应用开发实践指南(android 卷)笔记 第一章
来源:互联网 发布:unity3d人物模型 编辑:程序博客网 时间:2024/06/09 17:27
public class FirstOpenGLActivity extends Activity { private GLSurfaceView glSurfaceView; //用于记住GLSurfaceView是否处于有效状态 private boolean rendererSet = false; /** * GLSurfaceView会在一个单独的线程中调用渲染器的方法。 * 默认情况下,GLSurfaceView会以显示设备的刷新频率不断地渲染, * 当然,它也可以配置为按请求渲染,只需要用GlSurfaceView.RENDERMODE_WHEN_DIRTY作为参数调用GLSurfaceView.setRenderMode()即可 * * 既然Android的GLSurfaceView在后台线程中执行渲染,就必须要小心, * 只能在这个渲染线程中调用OpenGL,在Android主线程中使用UI(用户界面)相关的调用; * 两个线程直接的通信可以用如下方法: * 在主线程中的GLSurfaceView实例可以调用queueEvent()方法传递一个Runnable给后台渲染线程, * 渲染线程可以调用Activity的runOnUIThread()来传递事件(event)给主线程 * @param savedInstanceState */ @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); glSurfaceView = new GLSurfaceView(this); final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); final ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo(); final boolean supportsEs2 = configurationInfo.reqGlEsVersion >= 0x20000 || (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1 && (Build.FINGERPRINT.startsWith("generic") || Build.FINGERPRINT.startsWith("unknown") || Build.MODEL.contains("google_sdk") || Build.MODEL.contains("Emulator") || Build.MODEL.contains("Android SDK built for x86"))); if(supportsEs2){ glSurfaceView.setEGLContextClientVersion(2); glSurfaceView.setRenderer(new FirstOpenGLRenderer()); rendererSet = true; } else { Toast.makeText(this, "This device does not support OpenGL ES 2.0",Toast.LENGTH_SHORT).show(); return; } setContentView(glSurfaceView); } @Override protected void onPause() { super.onPause(); if(rendererSet){ glSurfaceView.onPause(); } } @Override protected void onResume() { super.onResume(); if(rendererSet){ glSurfaceView.onResume(); } }}
public class FirstOpenGLRenderer implements GLSurfaceView.Renderer{ /** * 当Surface被创建的时候,GLSurfaceView会调用这个方法; * 这发生在应用程序第一次运行的时候,并且,当设备被唤醒或者用户从其他activity切换回来时,这个方法也可能会被调用。 * 在实践中,这意味着,当应用程序运行时,本方法可能会被调用多次。 * @param gl10 * @param eglConfig */ @Override public void onSurfaceCreated(GL10 gl10, EGLConfig eglConfig) { //红绿蓝透明度,渲染后结果为红色 gl10.glClearColor(1.0f,0.0f,0.0f,0.0f); } /** * 在Surface被创建以后,每次Surface尺寸变化时,这个方法都会被GLSurfaceView调用到。在横屏、竖屏来回切换的时候,Surface尺寸会发生变化 * @param gl10 * @param width * @param height */ @Override public void onSurfaceChanged(GL10 gl10, int width, int height) { gl10.glViewport(0, 0, width, height); } /** * 当绘制一帧时,这个方法会被GLSurfaceView调用。 * 在这个方法中,我们一定要绘制一些东西,即使只是清空屏幕; * 因为,在这个方法返回后,渲染缓冲区会被交换并显示在屏幕上,如果什么都没画,可能会看到糟糕的闪烁效果 * @param gl10 */ @Override public void onDrawFrame(GL10 gl10) { gl10.glClear(GL10.GL_COLOR_BUFFER_BIT); }}
阅读全文
0 0
- OpenGL ES应用开发实践指南(android 卷)笔记 第一章
- OpenGL ES应用开发实践指南(android 卷)笔记 第二章1
- OpenGL ES应用开发实践指南(android 卷)笔记 第二章2
- OpenGL ES应用开发实践指南(android 卷)笔记 第三章1
- OpenGL ES应用开发实践指南(android 卷)笔记 第三章2
- OpenGL ES应用开发实践指南(android 卷)笔记 第四章
- OpenGL ES应用开发实践指南(android 卷)笔记 第五章1
- OpenGL ES应用开发实践指南:iOS卷
- 《OpenGL ES应用开发实践指南:iOS卷》迷你书
- Android OpenGL ES 开发(二): OpenGL ES 环境搭建
- opengl编程指南笔记(二)第一章 opengl简介
- Android Opengl es 写字 笔记(三)
- Android 应用开发揭秘(笔记) 第一章Android开发简介
- Opengl ES初识 (Opengl ES笔记)
- 【Android应用开发】 OpenGL ES -- 透视投影 和 正交投影
- 【Android应用开发】 OpenGL ES -- 透视投影 和 正交投影
- Android OpenGL ES 应用(一)
- Android Opengl es 写字 笔记
- MongoDB四(插入文档)
- Android GUI FramebufferNativeWindow ANativeWindow
- Win32 SOCKET之UDP
- 目前为止最全的微信小程序项目实例
- 理解RESTful架构
- OpenGL ES应用开发实践指南(android 卷)笔记 第一章
- HDU2333(二分答案)
- C++ 虚函数表解析
- Trailing Zeroes
- tensorflow安装记录
- java基础习题50道(六)
- android中的后退键——onBackPressed()的使用
- Python_format()格式化函数
- jni 内存溢出