android OpenGL简介(一)

openGL是Open Graphics Library的缩写,指开源图形库。wikipedia 对其定义如下,它是一个跨语言,跨平台的应用程序接口,提供2D,3D图形渲染接口,操作在GPU之上,实现硬件加速渲染。
Open Graphics Library (OpenGL) is a cross-language, cross-platform application programming interface (API) for rendering 2D and 3D vector graphics. The API is typically used to interact with a graphics processing unit (GPU), to achieve hardware-accelerated rendering.OpenGL用于桌面系统,在移动平台上的是其嵌入式的版本,叫做OpenGL ES(OpenGL Embedded Systems)。OpenGL ES 1.0把三维带进了移动平台,2.0取代了大多数旧的API,替换为新的可编程API;2012年8月,Khronos组织确定了3.0的规范,并向后兼容了OpenGL ES 2.0。

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 Overviewjava.lang.Object ↳ android.view.View
↳ android.view.SurfaceView ↳android.opengl.GLSurfaceView

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值