标签:android opengl opengl es glsurfaceview glsurfaceview.render render
为了在Android应用中使用OpenGL ES绘图,首先必须要创建一个view容器。一个最简单的方法是实现GLSurfaceView和GLSurfaceView.Renderer。GLSurfaceView一个view容器,用来显示OpenGL绘制的图形,GLSurfaceView.Renderer用来控制GLSurfaceView里面图形的绘制。更多的信息,请参考 OpenGL ES 开发向导。更多关于纹理压缩的格式,请参考OpenGL开发指南。
2. 创建一个显示OpenGL ES图形的Activity
显示OpenGL ES 的Android应用和其他有用户界面的应用一样,都有activity,和其他应用的一个主要区别就是activity中layout放置的内容。在大多数应用中可能会使用TextView,Button和ListView,在使用OpenGL ES的应用中,你也可以使用GLSurfaceView。public class OpenGLES20Activity extends Activity {
private GLSurfaceView mGLView;
@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
// Create a GLSurfaceView instance and set it// as the ContentView for this Activity.mGLView = new MyGLSurfaceView(this);setContentView(mGLView);}
}注意:OpenGL ES 2.0需要Android 2.2或者更高的版本,所以确保应用的目标API符合要求。
class MyGLSurfaceView extends GLSurfaceView {
public MyGLSurfaceView(Context context){super(context);
// Set the Renderer for drawing on the GLSurfaceViewsetRenderer(new MyRenderer());}
}当使用OpenGL ES 2.0时,必须在GLSurfaceView的构造函数中添加一个声明,指定你想要使用2.0的API:
// Create an OpenGL ES 2.0 context另一个可选的添加到GLSurfaceView实现的方法是设置渲染模式为只有在drawing数据改变的时候才画view,使用 GLSurfaceView.RENDERMODE_WHEN_DIRTY进行设置:
setEGLContextClientVersion(2);
// Render the view only when there is a change in the drawing data这个选项避免了GLSurfaceView被重新绘制,只有当你调用了requestRender()时才会重新绘制,这会提高应用的效率。
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
在使用OpenGL ES的应用中,GLSurfaceView.Renderer或者renderer是事情变得有趣的地方,这个类控制了GLSurfaceView上面画什么,renderer中有三个方法被Android系统调用来确定在GLSurfaceView中画什么和怎么画:
onSurfaceCreated() - 在设置view的OpenGL ES环境时会被调用一次
onDrawFrame() - 在每一次重新绘制view的时候被调用
onSurfaceChanged() - 在view的几何形状改变的时候调用,比如设备旋转屏幕。
下面是一个简单的OpenGL ES render实现,在GLSurfaceView中画了一个灰色的背景:
public class MyGLRenderer implements GLSurfaceView.Renderer {
public void onSurfaceCreated(GL10 unused, EGLConfig config) {// Set the background frame colorGLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);}
public void onDrawFrame(GL10 unused) {// Redraw background colorGLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);}
public void onSurfaceChanged(GL10 unused, int width, int height) {GLES20.glViewport(0, 0, width, height);}
}
Android OpenGL ES绘图教程之一 : 构建OpenGL ES 环境
标签:android opengl opengl es glsurfaceview glsurfaceview.render render
原文地址:http://blog.csdn.net/fanfanxiaozu/article/details/45193747