传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229
为了能够在Android应用程序中使用OpenGL ES绘制图形,你必须创建一个视图作为容器。而更直接的做法是从GLSurfaceView和 GLSurfaceView.Renderer各派生一个实现类。GLSurfaceView作为使用OpenGL绘制的容器,GLSurfaceView.Renderer将用于控制绘图的动作。对这些类的更多信息,请参阅OpenGL ES开发人员指南。
使用GLSurfaceView几乎是整合OpenGL ES到你的应用中的唯一方式。对于一个需要全屏或近乎屏幕图形视图,它是一个合理的选择。如果开发人员只是期望借助OpenGL ES在某个布局中一小部分绘图,则应该考虑使用TextureView。如果觉得自己是“大牛”,完全可以使用SurfaceView建立一个OpenGL ES视图,但这样做需要编写相当多的额外的代码。<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" />更多关于纹理压缩格式的信息,请参阅OpenGL开发人员指南。
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); } }注:OpenGL ES 2.0需要Android2.2 (API Level 8) 及以上版本,所以请确保你的Android项目的运行目标的API等级不低于8或更高。
class MyGLSurfaceView extends GLSurfaceView { public MyGLSurfaceView(Context context){ super(context); // 设置渲染对象,用于控制在GLSurfaceView中的绘制工作 setRenderer(new MyRenderer()); } }当使用OpenGL ES 2.0时,你必须在GLSurfaceView构造器中调用另外一个方法,它指定了你将要使用2.0版的API:
// 创建一个OpenGL ES 2.0 context setEGLContextClientVersion(2);注:如果你使用的是OpenGL ES 2.0的API,那么请确保在Manifest文件中作出相关API版本声明。有关更多信息,请参见在Manifest文件中声明使用OpenGL ES。
// 只有在绘制数据改变时才绘制view setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);该设置可以防止GLSurfaceView帧重绘,直到调用requestRender()方法。这样的绘制机制更高效。
public class MyGL20Renderer implements GLSurfaceView.Renderer { public void onSurfaceCreated(GL10 unused, EGLConfig config) { // 设置背景色 GLES20.glClearColor(0.5f, 0.5f, 0.5f, 1.0f); } public void onDrawFrame(GL10 unused) { // 重绘背景色 GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); } public void onSurfaceChanged(GL10 unused, int width, int height) { GLES20.glViewport(0, 0, width, height); } }以上就是所有要做的东西!上面的代码示例创建了一个简单的Android应用,它使用OpenGL显示了一个灰色的屏幕。虽然这段代码并没有做什么有趣的事情,但是通过创建这些类,已经为你使用OpenGL绘制图形奠定了基础。