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
- Android Matrix multiplyMM en detalle
- Android: cómo averiguar la relación de aspecto exacta de píxeles de los dispositivos mediante programación?
- Opengl ES OES vs EXT?
- Herramienta de visualización para móviles (tableta)
- GLSurfaceView onDrawFrame comportamiento de borrado
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.
- Juego de Android, lienzo o opengl?
- Cómo hacer la detección de objetos en opengl Android?
- Fondo animado con Libgdx
- Cómo mejorar el rendimiento de la representación de ping-pong (para desenfoque) en OpenGL ES
- Problemas para que SurfaceTexture funcione con Android Videoplayer en MALI 400
- Cómo transferir texturas de un contexto de OpenGL a otro
- Cómo hacer un Libgdx Bitmapfont de modo que es el color de los píxeles es la inversa del fondo?
- Obtener las líneas de GL10 dibujo de imágenes junto a la otra, la solución?
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