interface GLSurfaceView.Renderer

来源:互联网 发布:维克软件 编辑:程序博客网 时间:2024/06/05 21:59
public interface GLSurfaceView.Renderer
  • 一个通用的渲染接口
  • Renderer被OpenGL调用渲染帧。
  • 和GLServiceView协同使用的时候一般开发这负责实现这个借口,并通过GLServiceView.setRenderer()方法注册自己的实现类。
  • OpenGL ES GUI-https://developer.android.com/guide/topics/graphics/opengl.html
  • Renderer运行在独立的线程中,这样渲染线程和UI现成解耦。用户的操作指令一般由UI线程接受并通过UI线程和Renderer通信。开发者可以使用任何标准的java线程间通信技术(或者queueEvent(Runnable) )完成和Renderer的信息交互。
    • OpenGL ES 是被设计运行在单线程中,而且是现成不安全的,永远不要在另一个线程中调用OpenGL ES
  • 在某些情况下会发生EGL Renderer上下文丢失的现象。(例如正在使用Renderer的设备睡眠后被唤醒)。当EGL 上下文丢失后所有和其相关的的OpenGL资源(例如纹理texture)都会被删除。
  • 为了保证正确的渲染,Renderer必须重新创建任何已经丢失了的上被需要的资源。这一操作放在 onSurfaceCreated(GL10, EGLConfig)是很方便的。
void onSurfaceCreated(GL10 gl, EGLConfig config)
  • 当serface创建和重新创建的时候被调用。
  • 当Renderer线程start以及EGL上下文丢失的时候调用。EGL上下文的丢失一般发生在Android设备息屏亮屏的过程中。
  • 因为本方法是在Renderer启动以及EGL上下文丢失的时候被调用,初始化OpenGL资源的代码放在这里就很方便了。纹理(Texture)资源的处理或许代码或许就是你想放在这里的内容。
  • 注意:当EGL上下文丢失的时候所有和上下文相关的资源都会被自动删除,你没必要去调用glDelete****()方法手动删除已丢失的资源。
  • 参数
    • gl:GL接口 GL10 表示遵从OpenGL ES 1.0 标准。
    • surface的EGLConfig,用来创建匹配的缓冲。
void onSurfaceChanged(GL10 gl, int width, int height);
  • 当surface尺寸改变的时候调用。
  • 当surface被创建时和surface尺寸改变时都会调用本方法。
  • 通常会在这里设置视口(Viewport),如果相机(Camera)是固定的,也可以在这里设置投影矩阵(projection matrix)
void onSurfaceChanged(GL10 gl, int width, int height) {               gl.glViewport(0, 0, width, height);               // for a fixed camera, set the projection too               float ratio = (float) width / height;               gl.glMatrixMode(GL10.GL_PROJECTION);               gl.glLoadIdentity();               gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);           }
  • 参数:
    • gl:GL接口 GL10 表示遵从OpenGL ES 1.0 标准。
void onDrawFrame(GL10 gl);
  • 当绘制一帧图像的时候会调用本方法。
  • 本方法通常实现如下:
void onDrawFrame(GL10 gl) {  gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);  //... other gl calls to render the scene ...           }
  • 参数
    • gl:GL接口 GL10 表示遵从OpenGL ES 1.0 标准。

3D开发教程

  1. https://developer.android.com/guide/topics/graphics/opengl.html
  2. http://blog.csdn.net/column/details/apidemoopengl.html
  3. Android4游戏入门经典(第三版)
原创粉丝点击