OpenGL ES 1.0 是以 OpenGL 1.3 规范为基础的,OpenGL ES 1.1 是以 OpenGL 1.5 规范为基础的,1.1完全兼容1.0。OpenGL ES 2.0 则是参照 OpenGL 2.0 规范定义的。简单的来说,OpenGL ES是OpenGL针对嵌入式应用的简化版,也就是android使用的标准。OpenGL ES 1.1强调api的硬件加速,OpenGL ES 2.0更强调3D能力。



OpenGL ES 1.1和OpenGL ES 2.0之间的关系并不是旧版本和新版本之间的差别,而是一个针对相对低端的应用,一个针对高级应用,OpenGL官方的roadmap也是将这两个版本并行发展的。2.X并不能百分百兼容1.X。


Android现在支持1.X和2.X。


android上opengs开发有两种方式,
1. 通过android framework 提供的接口开发
2. 通过android ndk 开发


首先看通过framework提供的java接口开发方式:
android framework层通过两个类提供opengs es开发基础,
类GLSurfaceView和GLSurfaceView.Renderer接口,


GLSurfaceView 是一个view,继承了surfaceview,surfaceview的一个重要用法是你可以单独开启线程在屏幕上渲染图像,而不像其他基于view的控件都属于ui线程。
GLSurfaceView 给opengls es 绘制线程提供surface,当创建一个glsurfaceview并绑定到到activity时需要注册在此surfaceview上渲染的Renderer对象, 通过调用setRenderer(Renderer) 完成注册,setRenderer调用时会创建绘制线程,此线程会根据ui事件及surface窗口的改变回调


GLSurfaceView.Renderer 接口的回调方法,真正的绘制动作都在此接口的回调方法里实现,接口方法包括:


//绘制帧数据
abstract void onDrawFrame(GL10 gl)
//当surface大小改变时被调用
abstract void onSurfaceChanged(GL10 gl, int width, int height)
//当surface被创建时 调用,这里可以作初始化动作。
abstract void onSurfaceCreated(GL10 gl, EGLConfig config)


所以openggl es开发通常是实现这几个接口,然后 调用setRenderer(Renderer)把 此接口注册给GLSurfaceView。


调用setRenderer(Renderer)会把Renderer对象传给绘制线程,绘制线程操作此对象,当ui线程想和绘制线程通信时可以采用java提供的线程间通信方法,也可以用GLSurfaceView 提供的queueEvent(Runnable),因为输入事件都属于ui线程,所以
如果想通过输入事件控制绘制线程queueEvent是个不错的选择。

Class Overview

java.lang.Object
android.view.View
android.view.SurfaceView
android.opengl.GLSurfaceView





更多相关文章

  1. Android能否在子线程中更新UI呢?
  2. 安卓(android)建立项目时失败,出现Android Manifest.xml file missi
  3. Android——Listview不用notifydatasetchanged更新数据的方法
  4. Android中两种使用Animation的方法
  5. 详解Android aidl的使用方法
  6. Android中自定义标题栏样式的两种方法
  7. Genymotion Android模拟器下载和找不到模拟器解决方法
  8. Android app闪退后fragment重叠bug解决方法
  9. zz:Android 测试工具Monkey & Monkeyrunner 使用方法

随机推荐

  1. JavaEye Android(安卓)客户端正式发布
  2. 5个最佳的Android测试框架(带示例)
  3. AIDL --- Android中的远程接口
  4. Android,谁动了我的内存(1)
  5. Android组件及UI框架大全
  6. Activity and Task(二)
  7. 图解Android中的Binder机制
  8. Android图像处理简介の使用内置Camera应
  9. 关于Scroller ,scrollTo,scrollBy
  10. Android(安卓)RSA与Java RSA加密不同标准