OpenGL mal rendimiento en Android Gingerbread
Estoy trabajando en un videojuego para Android usando OpenGL 1.0.
He seguido este tutorial: http://www.javacodegeeks.com/2011/06/android-game-development-tutorials.html
- ¿Cómo comenzar a crear GUIs 3D (Game-) para aplicaciones Android (por ejemplo, con OpenGL)?
- ¿Cómo puedo utilizar varios componentes GLSurfaceView en el mismo Layout?
- HTC sólo Hard Crash dentro de OpenGL
- Captura de pantalla de Android OpenGL
- OpenGL ES 2 - un gran vs múltiples texturas pequeñas atlas. ¿Cuál es el mejor rendimiento?
He creado una pequeña demostración que funciona muy bien y fluida (limitada a 30 FPS) en mi móvil actual: HTC Sensation (Android 4.0.3 Ice Cream Sandwich).
Además, probé mi juego en los móviles de mi amigo con los siguientes resultados:
- Galaxy S2 = perfecto! (30 FPS)
- Nota de la galaxia = perfecto! (30 FPS)
- HTC One S = perfecto! (30 FPS)
- Sony Xperia Tipo = perfecto! (30 FPS)
- Samsung Galaxy Ace GT-S5830 = muy mal rendimiento> _ <'(<10FPS y probado en dos móviles)
Si comparas las especificaciones entre Xperia Tipo y Samsung Ace puedes ver que son casi el mismo móvil.
XPERIA TIPO:
- 320 x 480 de resolución
- 512 MB de RAM
- Qualcomm MSM7227A 800MHz, GPU Adreno 200
SAMSUNG GALAXY ACE:
- 320 x 480 de resolución
- 278MB RAM
- Qualcomm MSM7227 800 MHz, GPU Adreno 200
Aceptar, la memoria RAM es diferente, pero mi juego es muy simple, no consumir más de 200 MB! Pero el rendimiento es totalmente diferente. ¡Sin sentido!
Sin embargo … sólo una cosa es diferente! Samsung Galaxy Ace utiliza Android 2.3.X (Gingerbread) y Xperia Tipo utiliza Android 4.0.3 (ICS).
Por lo tanto, mi punta de lanza está apuntando que el problema es con Android 2.3.X – Gingerbread o Galaxy Ace es un móvil basura.
Pero … Obligé a mis amigos a instalar los Ejemplos de AndEngine y probarlo, con el resultado de que la prueba Nexus ParticleSystem funciona muy bien y fluida.
¡Estoy totalmente perdido! ¿Por qué este diferente en el rendimiento? ¿Qué estoy haciendo mal?
Información adicional:
- Sigo todos los pasos de ese tutorial.
- Utilizo GL10 (OpenGL 1.0).
- Sin shaders.
- No hay tiempo delta para FPS perdido (no creo que esta cosa va a resolver mi problema).
- No código nativo, sólo Java.
- SystemClock.uptimemillis () y sleep () para controlar FPS.
- MediaPlayer para reproducir una canción MIDI (no más sonidos).
- Texturas con mucho alfa (juego 2D, es necesario para sprites).
- MinSDKversion = 8
Si necesita más información, por favor dígame.
- ¿Cómo aprender y usar OpenGL ES 2.0? Simplemente no lo entiendo - Qn serio.
- Cómo tratar NaN o inf en los shaders de OpenGL ES 2.0
- Android OpenGL2.0 que muestra texturas negras
- Obtener el máximo límite de tamaño de textura de OpenGL ES 2.0 en Android
- Dibuja animaciones de alta resolución con alta velocidad de fotogramas en Android
- Android OpenGL - ES Sangrado de textura
- Perfiles de GPU y callbacks en OpenGL ES
- Android: ¿Cómo crear VR-controles parecidos a YouTube?
La RAM puede ser el cuello de botella. Sabes que Android no maneja imágenes muy bien. ¿Estás reciclando tus mapas de bits? ¿Por qué no utiliza OpenGL ES 2.0? Estoy desarrollando juegos y pruebas en un Samsung Galaxy Ace y LG p500 (ambos con Gingerbread) sin problemas. Puedo obtener casi 50 FPS.
-
Nunca use
Thread.sleep
en el hilo UI, es muy, muy malo. -
Usar la
statics
; Esta es una mala práctica de OOP, pero útil aquí. -
Usar
vertex-buffer objects
-
Inicializar en
onSurfaceChanged
y buscar ubicaciones (glget***location
) aquí también. -
No es su culpa siempre porque en Froyo, el recolector de basura es malo y luego en Gingerbread,
the touch drivers fire way too many events
(Google I_O 2011_ Gestión de la memoria para aplicaciones de Android). Por lo tanto, cambiar gradualmente a otros métodos de entrada para su aplicación / juego que no utilizan el tacto como el androide de movimiento y sensores de posición
- La API de Google Docs devuelve un servicio 503 no disponible al cargar un archivo. ¿Ha cambiado algo?
- OpenGL ES 2.0 artefactos / dithering en FBO en Mali-400