2011-12-20 16 views
6

Me parece que cuando habilito esta opción de desarrollador, mi proyecto OpenGL deja de funcionar. Un poco alarmante para decir lo menos.Android ICS: ¿Qué hace realmente la opción del sistema "Forzar renderización GPU"?

Logcat muestra un trillón de estos:

E/libEGL (1022): called unimplemented OpenGL ES API 
E/libEGL (1022): called unimplemented OpenGL ES API 
E/libEGL (1022): called unimplemented OpenGL ES API 
... 

La primera escena rinde muy bien, pero después de ese primer swapbuffers(), todos susbequent API GL ES (incluso glSetMatrixMode()) no hacen más que ingrese "API sin aplicarse".

Todo esto funciona perfectamente bien (es decir, está implementado) si tengo la opción "Forzar renderización de GPU" con como.

Entonces, ¿qué hace esta opción realmente?

Respuesta

3

Esa opción está destinada a los desarrolladores, para que puedan probar fácilmente sus aplicaciones con H/W Acceleration activada. Según tengo entendido, una aplicación 2D que utiliza Canvas Apis puede beneficiarse de esta opción, ya que activarla obligará al sistema a crear un contexto nativo GLES2.0 en un hilo diferente y hacer que el Canvas Class use el acelerador GLES h/w. backend en lugar de Skia. Esta creación de contexto nativa de GLES2.0 ocurre en C Código nativo y el desarrollador de la aplicación no tiene control sobre esto.

Volviendo a su tema, el "mensaje de error no implementado llamado" básicamente dice que (1) está utilizando el contexto GL incorrecto (por ejemplo, haciendo llamadas GLES1.1 con un contexto GLES2.0 o viceversa) o (2) su dispositivo no pudo cargar los controladores GLES y, por lo tanto, el sistema no pudo encontrar el puntero real de la función GL. El sistema sabe qué cargar leyendo el egl.El archivo cfg se encuentra en/system/lib/egl/y el controlador GL se encuentra en/system/vendor/lib /.

Me gustaría seguir con Google ya que esto puede ser solo un error.

+0

Eso es lo suficientemente cerca para mí, y encaja con las observaciones y lo que he aprendido en otros lugares. Recibí un tweet de la persona de gráficos de Android, Romain Guy ... dijo que las aplicaciones OpenGL solo tendrán este problema si crean su contexto EGL en el hilo principal de la interfaz de usuario. Es más común que todas las llamadas GL se ejecuten en un hilo dedicado, una práctica que no me gusta por razones demasiado aburridas. –

+1

@ReubenScratton Estoy teniendo exactamente el mismo problema aquí, y también estoy creando el contexto EGL en el hilo principal. ¿Alguna vez encontró una solución a esto o acabó usando un hilo separado para GL? –

+1

Terminé creando un hilo dedicado de renderizado y moviendo todo el código GL en él. Esto fue excesivo para mis necesidades, y presumiblemente para usted, pero esta característica particular del sistema operativo asume que todas las aplicaciones GL procesan el hilo principal y tenemos que estar de acuerdo con eso. –

2

Fuerza la aceleración del hardware en todas las aplicaciones. Puedes leer más sobre esto aquí: http://developer.android.com/guide/topics/graphics/hardware-accel.html

Asegúrate de revisar las operaciones No admitidas, que es probable que te encuentres con problemas.

+0

Gracias por el enlace, pero mi interfaz de usuario es * completamente * OpenGL ES ... ya está acelerado. No uso ninguna API de Canvas, y no entiendo por qué esta configuración afectaría a una aplicación basada en GL. Parece que esta configuración hace que se cargue un controlador GL alternativo. –

+0

Interesante, no me sorprendería si estuviera cargando otro controlador para hacer la aceleración de hardware para las aplicaciones de lienzo. (Lo cual estoy casi 100% seguro es lo que estás forzando) Para probar mi teoría, podrías habilitar hw acc en tu manifiesto de aplicaciones con un objetivo sdk de al menos 3.0. Las instrucciones para eso están en el enlace en la respuesta de la organización. – smith324

0

El modo de aceleración en ICS no es más especial que en Honeycomd. Por defecto, el modo de aceleración está habilitado para todas las aplicaciones dirigidas a api 14 o superior. Pero al mismo tiempo, hay aplicaciones que están dirigidas a otras versiones de SDK. Por lo tanto, puede habilitar la aceleración de hardware en estas aplicaciones configurando "Forzar procesamiento de GPU". Hay un gran explanation y un post de Dianne que explica esto.

+0

Esa es de hecho una buena publicación de hackbod, pero desafortunadamente no me ayuda mucho. Cada vez tengo más la opinión de que esto es un error en ICS. La última observación es que después de que el primer cuadro dibuja (con éxito), mi EGLImpl.mEGLContext cambia. Estoy bastante seguro de que eso no debería suceder. –

+0

Intente hacer esta pregunta específica en grupos de google de android-platform. https://groups.google.com/forum/#!forum/android-platform También encontré una buena explicación de este error aquí: http://stackoverflow.com/questions/5926316/android-gles20-llamado-unimplementado- opengl-es-api – Yury

+0

Podría hacer eso, aún estoy investigando. Parece que el sistema operativo está forzando a la aplicación a cambiar a un procesador de 2.0, razón por la cual las API de glMatrixMode etc. repentinamente no son compatibles. Esto a pesar de las declaraciones manifiestas de que solo se usa 1.1. Un poco de un ICS épico falla si esta observación es correcta ... –

0

Como se ha dicho aquí, esa opción obliga a la Aceleración de Hardware de Gráficos y se supone que es un valor predeterminado en API Nivel 14 o 15, me refiero a ICS.

No recomiendo probar esto en un emulador porque hará que su computadora y Eclipse sean lentos y/o se bloqueen. He intentado esta configuración en Emuladores con una amplia gama de configuraciones de recursos (diferentes tamaños para visualización, cachés, CPU y RAM) con API Nivel 14 y 15 y que siempre falla.

Sería mejor probar su aplicación en un dispositivo Dual Core como Samsung Galaxy 10.1, 8.9 Tablet o Motorola Xoom Tablet que tienen hardware real como nVidia Tegra GPU para soportar la aceleración desde Honeycomb, haciéndolo mejor para Aplicaciones OpenGL ES ... Y dado que no hay tabletas con ICS en el mercado, no podrá hacer coincidir la configuración mencionada de API Nivel 14 e ICS.

Para terminar, estoy de acuerdo con que hay un error que Google aún no ha resuelto ni solucionado en el SDK.

Cuestiones relacionadas