android opengl 原理及开发(1)

原创 2012年03月29日 16:50:30


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





版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android应用开发揭秘的第25个程序12_1_opengl修改版和高仿版的源码注释

//开始学习opengl方面的知识内容 //GfopenglActivity.java package pak.gfopengl; import android.app.Activity; i...

OpenGL10-骨骼动画原理篇(1)

本例程展示如何建立骨骼动画,有些人叫蒙皮动画 定义如下: 当前有两种模型动画的方式:顶点动画和骨骼动画。顶点动画中,每帧动画其实 就是模型特定姿态的一个“快照”。通过在帧之间插值的方法,引擎可以...

[OpenGL ES 07-1]光照原理

[OpenGL ES 07-1]光照原理 罗朝辉 (http://blog.csdn.net/kesalin/) 本文遵循“署名-非商业用途-保持一致”创作公用协议   这是《...
  • kesalin
  • kesalin
  • 2012年12月29日 21:21
  • 13029

android应用开发-从设计到实现 2-1 设计原理

设计原理设计是一门让人感觉很抽象的艺术。设计需要从两个方面来考虑问题: 实用:体现在功能上和交互性上; 美观:体现在界面的布局,色彩的搭配,字体的运用上; 对于我们的安卓应用来讲,设计的目的就是要体现...

Android系统原理及开发详解1文档

  • 2017年03月08日 20:36
  • 59MB
  • 下载

Unity3d-Android 1s短暂黑屏(原因: 两次Creating OpenGL ES 2.0 context (渲染环境))

Unity-Android,游戏运行之后,总是在Pawered byUnity splash之后,先闪一下黑屏,再出现第一个加载的场景 View。在logcat中看信息,发现,第一次开启的时候要创建一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android opengl 原理及开发(1)
举报原因:
原因补充:

(最多只允许输入30个字)