GLSurfaceView clients are required to call onPause() when the activity pauses
and onResume() when the activity resumes.
class MyGLSurfaceView extends GLSurfaceView {
private MyRenderer mMyRenderer;
public void start() {
mMyRenderer = new MyRenderer();
setRenderer(mMyRenderer);
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
queueEvent(new Runnable() {
// This method will be called on the rendering thread(GLThread)
public void run() {
mMyRenderer.func();
}});
return true;
}
return super.onKeyDown(keyCode, event);
}
}
renderer draws on-demand by calling setRenderMode(RENDERMODE_WHEN_DIRTY)
public class MySurfaceView extends GLSurfaceView {
private MyRenderer mMyRenderer;
public MySurfaceView(Context context, AttributeSet attrs) {
this.setRenderer(mMyRenderer);
this.setRenderMode(RENDERMODE_WHEN_DIRTY);
}
public void request() {
// call mMyRenderer.onDrawFrame() on the rendering thread
this.requestRender();
}
}
public class MyRenderer implements GLSurfaceView.Renderer {
@Override
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
}
}
GLSurfaceView.Renderer的三个接口函数都在rendering thread(GLThread)中被调用。
@Override
public void onDrawFrame(GL10 gl) {
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
}
NDK使用opengles,需要添加:
#include <GLES/gl.h>
#include <GLES/glext.h>
LOCAL_CPPFLAGS += -D_OPENGLES
LOCAL_LDLIBS := -ljnigraphics -lGLESv1_CM -lGLESv2
参考网址:OpenGL ES