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

  • Error de GL de OpenGLRenderer: 0x502
  • Cómo dibujar una imagen de fondo grande con libgdx - las mejores prácticas?
  • ¿Por qué los colores de los píxeles no son correctos en OpenGL ES 2.0 en Android?
  • Diferencia en iOS OpenGl ES y Android OpenGl Es
  • Genymotion no se inicia (permiso denegado para androvm.gles.first)
  • C ++ vs Java en Android
  • glClearColor no funciona correctamente (opengl android)
  • Matriz int a la textura opengl en android
  • Threading proceso de carga de texturas para el juego opengl android
  • ¿Puedo usar gloss en Android?
  • Java.lang.RuntimeException: eglSwapBuffers falló: informe EGL_SUCCESS
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.