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

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:

  1. Sigo todos los pasos de ese tutorial.
  2. Utilizo GL10 (OpenGL 1.0).
  3. Sin shaders.
  4. No hay tiempo delta para FPS perdido (no creo que esta cosa va a resolver mi problema).
  5. No código nativo, sólo Java.
  6. SystemClock.uptimemillis () y sleep () para controlar FPS.
  7. MediaPlayer para reproducir una canción MIDI (no más sonidos).
  8. Texturas con mucho alfa (juego 2D, es necesario para sprites).
  9. MinSDKversion = 8

Si necesita más información, por favor dígame.

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.

  1. Nunca use Thread.sleep en el hilo UI, es muy, muy malo.

  2. Usar la statics ; Esta es una mala práctica de OOP, pero útil aquí.

  3. Usar vertex-buffer objects

  4. Inicializar en onSurfaceChanged y buscar ubicaciones ( glget***location ) aquí también.

  5. 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

  • Android SIGSEGV al dibujar ruta mediante aceleración de hardware
  • ¿Hay algún punto en el uso de un búfer de índice con una textura en OpenGL ES (Android)?
  • Las aplicaciones de Android OpenGL dejan de funcionar después de cargarlas en el emulador
  • Cómo tratar NaN o inf en los shaders de OpenGL ES 2.0
  • Android OpenGL Renderizar a un frameBuffer en la resolución original (pequeña) y luego escalarla (viewPort) al tamaño de la pantalla
  • Transparencia de OpenGL ES 2.0 mediante pruebas alfa en shader
  • Perfiles de GPU y callbacks en OpenGL ES
  • Android Vista vs SurfaceView vs GLSurfaceView para la aplicación de dibujo 2D con Zoomable interfaz de usuario
  • Texturas en OpenGL ES 2.0 para Android
  • La previsualización de la cámara Android se extendió utilizando el código Grafika CameraCapture
  • Integración de jPCT con Vuforia / SDK de QCAR
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.