Diferencia de OpenGL ES para iOS y Android

Tengo una aplicación OpenGL ES que funciona tanto en iOS como en Android. La mayor parte del código fue escrito hace años por otra persona y ahora tengo que mantenerlo. El uso de OpenGL parece bastante simple (el juego es 2D y usa solo sprites texturados de una manera simple). Pero veo dos grandes diferencias en la realización de códigos charts para iOS y Android:

1) El código iOS contiene este código:

glGenFramebuffersOES(1, &m_defaultFramebuffer); glGenRenderbuffersOES(1, &m_colorRenderbuffer); glBindFramebufferOES(GL_FRAMEBUFFER_OES, m_defaultFramebuffer); glBindRenderbufferOES(GL_RENDERBUFFER_OES, m_colorRenderbuffer); glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, m_colorRenderbuffer); 

y la de Android no.

2) Cuando la aplicación de Android va al background, todas las texturas de OpenGL se destruyen ( glDeleteTextures ) y EGL se eglTerminate mediante eglTerminate . Cuando la aplicación regresa de la suspensión, EGL se reinicializa y las texturas se vuelven a crear.

El código iOS no hace estas cosas. Simplemente pausa el ciclo de renderización llamando a [m_displayLink setPaused:YES];

Otro código relacionado con OpenGL es el mismo para iOS y Android.

Todo funciona bien en ambas plataforms, pero quiero tener una comprensión completa de lo que está sucediendo. ¿Alguien puede explicarme una lógica detrás de estas dos diferencias?

1) Esto es solo una diferencia en las API. En iOS, creas tu propio framebuffer para convertirlo en cuando se inicia la aplicación. En Android, el framebuffer se crea automáticamente en GLSurfaceView, por lo que la aplicación no necesita crear la suya propia.

2) En iOS, cuando su aplicación pasa a segundo plano, se preserva el context de OpenGL, lo que significa que todas sus texturas y buffers siguen allí cuando lo devuelve al primer plano. Las versiones anteriores de Android tenían solo un context de OpenGL, por lo que se destruyó cada vez que su aplicación pasaba a segundo plano (para que otras aplicaciones pudieran usarla). Las versiones posteriores de Android tienen la opción de comportarse más como iOS llamando a setPreserveEGLContextOnPause. Sin embargo, para que esto funcione, la versión de Android debe ser 3.xo superior (API 11) y el dispositivo también debe admitirlo. Cuando no se utiliza o no se admite, la aplicación debe eliminar y volver a crear todos sus resources de OpenGL al pasar entre el background y el primer plano, que es lo que parece estar haciendo su aplicación.