2011-03-08 19 views
9

He estado viendo este problema por un tiempo en mi aplicación. Se muestra bloqueando aleatoriamente o reiniciando teléfonos HTC cuando se procesan con OpenGL. Comprobación de la Logcat que parece ser un problema de bloqueo como se verá este impreso ...HTC Only Hard Crash dentro de OpenGL

waitForCondition(LockCondition) timed out (identity=9, status=0). CPU may be pegged. trying again. 

La mejor fuente de información que he podido encontrar hasta ahora ha terminado aquí: http://groups.google.com/group/android-developers/browse_thread/thread/d5b7e87f4b42fa8f/d6214ed7a02efc98?q=freeze&lnk=ol&

Dónde sugieren agregar glFinish al final de la función OnDraw de su glSurface. No estoy obteniendo buenos resultados con esta solución (todavía se bloquea, pero con menos frecuencia). ¿Alguien más ha oído sobre este problema? ¿Encontró alguna solución mejor?

+0

Esto será de poco consuelo, pero siento tu dolor. Tengo 2 comentarios en el mercado "Teléfono bloqueado, tuve que quitar la batería. HTC Desire". No tengo idea de qué causa esto, y he visto que el juego funciona bien en el deseo de un amigo. – richq

+0

Sí lo he tenido en varios teléfonos HTC, pero principalmente durante las pruebas de estrés (deje que la aplicación se ejecute durante la noche). Hasta ahora no hay solución, hago una búsqueda en la web cada pocas semanas para buscar actualizaciones. – TurqMage

Respuesta

1

Hemos obtenido exactamente este problema en nuestro juego con dispositivos HTC Sensation y Android 2.3.4, así que fuimos a comprar el dispositivo y experimentamos un poco. Una de las soluciones fue llamar al egl.eglWaitGL() al final del método onDraw() pero eso redujo a la mitad la velocidad de cuadros, sorprendentemente solo en ese dispositivo, pero lo conservé como una mala solución y seguí buscando.

La segunda solución y la que estamos usando en la actualidad que casi no tuvo ninguna penalización de rendimiento fue dejar de usar glBufferSubData para actualizar nuestras matrices de vértices y seguir cargando toda la matriz con glBufferData. Si está utilizando VBO's y glBufferSubData para actualizarlos, intente cambiarlo.