Dibujar mapa de bits utilizando Opengl es en Android

Tengo una aplicación de Android que está dibujando una imagen de 800 * 480 en la pantalla. Mi teléfono también es 800 * 480 px. El teléfono es capaz de hacer el dibujo en unos 25 ms. Cada pocos segundos quiero pasar a otra imagen que también es de 800 * 480 por el desvanecimiento de la alfa de la primera imagen y el aumento de la alfa de la segunda imagen. Mientras que hace esto la llamada drawable.draw (lona) tarda cerca de 75 ms.

¿Qué puedo hacer para reducir el tiempo de dibujo durante la fase de transición? He considerado el uso de OPENGL, pero no puedo entenderlo.

Tuve el mismo problema y encontré mi rendimiento en opengl. Este tutorial me inició: http://obviam.net/index.php/texture-mapping-opengl-android-displaying-images-using-opengl-and-squares/

Aquí está un ejemplo simple con OpenGL ES 1.0/1.1 y textura para dibujar bitmap a GLSurfaceView .

  private static class BitmapRenderer implements GLSurfaceView.Renderer { private int[] textures; private Resources resources; public BitmapRenderer(Resources resources) { this.resources = resources; } private static final float[] VERTEX_COORDINATES = new float[] { -1.0f, +1.0f, 0.0f, +1.0f, +1.0f, 0.0f, -1.0f, -1.0f, 0.0f, +1.0f, -1.0f, 0.0f }; private static final float[] TEXTURE_COORDINATES = new float[] { 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f }; private static final Buffer TEXCOORD_BUFFER = ByteBuffer.allocateDirect(TEXTURE_COORDINATES.length * 4) .order(ByteOrder.nativeOrder()).asFloatBuffer().put(TEXTURE_COORDINATES).rewind(); private static final Buffer VERTEX_BUFFER = ByteBuffer.allocateDirect(VERTEX_COORDINATES.length * 4) .order(ByteOrder.nativeOrder()).asFloatBuffer().put(VERTEX_COORDINATES).rewind(); @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { textures = new int[1]; gl.glEnable(GL10.GL_TEXTURE_2D); gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY); gl.glGenTextures(1, textures, 0); gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]); gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR); gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE); gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE); GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, BitmapFactory.decodeResource(resources, R.mipmap.ic_launcher), 0); } @Override public void onSurfaceChanged(GL10 gl, int width, int height) { gl.glViewport(0, 0, width, height); } @Override public void onDrawFrame(GL10 gl) { gl.glActiveTexture(GL10.GL_TEXTURE0); gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]); gl.glVertexPointer(3, GL10.GL_FLOAT, 0, VERTEX_BUFFER); gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, TEXCOORD_BUFFER); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); } } 

A continuación, sólo tiene que utilizar este GLSurfaceView en su GLSurfaceView

 glSurfaceView.setEGLContextClientVersion(1); glSurfaceView.setRenderer(new BitmapRenderer(getResources())); glSurfaceView.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); 

Espero que sea útil.

  • XML FrameLayout ha bajado mi framerate OpenGL SurfaceView (fps)
  • Android NDK - OpenGL ES Tutorial / Bibliotecas
  • Diferencia entre OpenGL SL y OpenGL ES 2.0 SL
  • Compartir el contexto EGL2.0 entre 2 GLSurfaceViews causó EGL_BAD_ACCESS en las tabletas Android
  • Textura transparente en OpenGL ES para Android
  • ¿Por qué FloatBuffer en lugar de float ?
  • ¿Cómo dibujo una malla wireframe con líneas ocultas eliminadas en OpenGL ES?
  • Android Opengl ES: GLUtils.glTexImage2D causando GL_INVALID_ENUM
  • SurfaceTexture.OnFrameAvailableListener deja de ser llamado
  • GL_OUT_OF_MEMORY después de una llamada a glDrawArrays. ¿Por qué?
  • Triangle opengl en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.