(1)构建OpenGL ES运行环境
来源:互联网 发布:跳跃网络 中青宝 编辑:程序博客网 时间:2024/05/16 00:30
Android 包含了支持高性能2D和3D图形的开放图形库,具体来说就是OpenGL ES API。OpenGL是一种跨平台图形API,用于指定一个标准的3D图形硬件处理的软件接口。
OpenGL ES是一种适用于嵌入式设备的OpenGL规范。Android支持OpenGL ES API的几个版本:
OpenGL ES 1.0 and 1.1 - This API specification is supported by Android 1.0 and higher.
OpenGL ES 2.0 - This API specification is supported by Android 2.2 (API level 8) and higher.
OpenGL ES 3.0 - This API specification is supported by Android 4.3 (API level 18) and higher.
OpenGL ES 3.1 - This API specification is supported by Android 5.0 (API level 21) and higher.
Android 通过NDK和Framework API来实现对OpenGL的支持,Android框架提供了GLSurfaceView和GLSurfaceView.Renderer这两个基础类,来创建和操作OpenGL ES API,
为了使你的应用程序可以使用OpenGL ES API来绘制图形,你必须创建一个Android框架层的View容器,因此Android框架提供了GLSurfaceView作为OpenGL绘制所在的容器,而实际的图形渲染是在GLSurfaceView.Renderer发生的。
GLSurfaceView几乎是Android提供给OpenGL绘制的唯一容器,对于全屏或近似全屏的图形View来说,这是一种比较合理的方案,如果开发者只是想在布局中的一小部分整合OpenGL ES图形,则可以考虑看一下TextureView。事实上你也可以使用SurfaceView来构建OpenGL ES ,但是那可能需要你写更多的代码。
这篇文章将描述如何在一个简单应用的Activity里完成GLSurfaceView和GLSurfaceView.Renderer的最小实现。
(1)在Manifest中声明使用OpenGLES
为了能使用OpenGLES 2.0 API,你必须在你的manifest中添加以下声明:
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
如果你的应用要使用纹理压缩功能,你必须还要声明设备需要支持什么样的压缩格式:
<supports-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" /><supports-gl-texture android:name="GL_OES_compressed_paletted_texture" />
(2)为OpenGLES Graphics创建一个Activity
使用OpenGLES Graphics的Activity和普通Activity没有什么不同,主要差别是该Activity的布局里有绘制OpenGLES图形的容器GLSurfaceView。代码如下:
public class OpenGLES20 extends Activity { private GLSurfaceView mGLView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //创建一个GLSurfaceView实例然后设置为activity的ContentView. mGLView = new MyGLSurfaceView(this); setContentView(mGLView); }}
(3)构建定制的GLSurfaceView类
GLSurfaceView是专门用于绘制OpenGLES图形的,它本身做的事情很少,主要由GLSurfaceView.Renderer来控制图形的渲染操作,事实你可以直接使用GLSurfaceView类,而不用自定义,但一般不建议这样做,
本demo实现了图形的拖动显示,因此定制了自己的GLSurfaceView类。关键代码如下:
class MyGLSurfaceView extends GLSurfaceView { public MyGLSurfaceView(Context context) { super(context); // 创建一个OpenGL ES 2.0 context setEGLContextClientVersion(2); // Set the Renderer for drawing on the GLSurfaceView mRenderer = new MyGLRenderer(); setRenderer(mRenderer); // Render the view only when there is a change in the drawing data setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); }}
1.当使用OpenGLES 2.0时,你必须在GLSurfaceView构造器中调用setEGLContextClientVersion(2),它说明了你将要使用2.0版的API。
2.设置Render模式为GLSurfaceView.RENDERMODE_WHEN_DIRTY,表示只在绘制数据发生改变时才绘制view。此设置会阻止绘制GLSurfaceView的帧,直到你调用了requestRender(),这样会非常高效。Render模式默认值为GLSurfaceView.RENDERMODE_CONTINUOUSLY,Render接口的onDrawFrame()方法每隔16ms都会回调一次完成刷新绘制。
(4)实现Render接口类
这个接口类控制着在GLSurfaceView上的绘制,Render类有三个被Android系统回调的接口方法,它们用以描述在GLSurfaceView上绘制什么以及如何绘制,从而你可以定义自己的实现来达到想要的绘制效果。
onSurfaceCreated()- 仅调用一次,用于设置view的OpenGLES环境。
onDrawFrame()- 每次View被重绘时被调用。
onSurfaceChanged()- 如果view的几和形状发生变化了就调用,例如当竖屏变为横屏时。
至此,使用Android OpenGL ES的准备工作都已经完成,下面章节就可以直接使用OpenGL来绘制图形了。
- (1)构建OpenGL ES运行环境
- OpenGL ES(1) - 构建OpenGL ES环境
- Android Training - 使用OpenGL ES(1) - 构建OpenGL ES环境
- OpenGL ES(1)——构建OpenGL ES环境
- Displaying Graphics with OpenGL ES(一)——构建一个OpenGL ES环境
- Building an OpenGL ES Environment 构建一个OpenGL ES环境
- Android OpenGL ES绘图教程之一 : 构建OpenGL ES 环境
- Android---构建一个OpenGL ES环境
- Android OpenGL ES 开发(二): OpenGL ES 环境搭建
- iOS下OpenGL ES 3.0编程入门(一):构建Hello World环境
- iOS下OpenGL ES 3.0编程入门(一):构建Hello World环境
- Android官网培训课:构建OpenGL ES环境
- 建立OpenGL ES环境
- opengl es 2.0环境
- 建立OpenGL ES环境
- android studio | openGL es 3.0增强现实(AR)开发 (1) 建立一个openGL es 3.0开发环境
- 建立一个OpenGL ES环境
- OpenGLES---初始化OpenGL-ES环境
- 百度地图api调试问题解决,有时莫名奇妙的问题得考虑jar版本的问题。
- Xcode8 TableView使用静态表单页面显示空白的问题
- QT安装问题及解决笨办法
- MagicButton
- C++标准库 阅读笔记
- (1)构建OpenGL ES运行环境
- Linux flash 文件系统剖析【转】
- css无刷新改变地址栏参数
- Hackerrank Week of Code 25 Stone Division(SG 博弈)
- iOS10的推送框架UserNotifications
- 将字符串转化为数字与将数字转化为字符串
- Spring定义bean的三种方式和自动注入
- Android 平台下的原生 Markdown 解析器
- android 间 通信