2012-11-06 3 views
5

Sto lavorando a un videogioco per Android utilizzando OpenGL 1.0.Prestazioni errate OpenGL in Android Gingerbread

Ho seguito questo tutorial: http://www.javacodegeeks.com/2011/06/android-game-development-tutorials.html

ho creato un po 'di demo che funziona molto bene e fluida (limitato a 30 fps) nel mio cellulare attuale: HTC Sensation (Android 4.0.3 Ice Cream Sandwich).

Inoltre, ho provato il mio gioco in cellulari del mio amico con i prossimi risultati:

  • Galaxy S2 = perfetto! (30 FPS)
  • Galaxy Note = perfetto! (30 FPS)
  • HTC One S = perfetto! (30 FPS)
  • Sony Xperia Tipo = perfetto! (30FPS)
  • Samsung Galaxy Ace GT-S5830 = pessimo prestazioni> _ < '(< 10FPS e testato in due cellulari)

Se si confrontano le specifiche tra Xperia Tipo e Samsung Ace si può vedere che sono quasi lo stesso cellulare.

XPERIA TIPO:

  • 320 x 480 risoluzione
  • 512 MB di RAM
  • Qualcomm MSM7227A a 800 MHz, GPU Adreno 200

Samsung Galaxy Ace:

  • 320 x 480 risoluzione
  • 278MB RAM
  • Qualcomm MSM7227 da 800 MHz, GPU Adreno 200

OK, la RAM è diverso, ma il mio gioco è molto semplice, non consuma più di 200 MB! Ma la performance è completamente diversa. Senza senso!

Tuttavia ... solo una cosa è diversa! Samsung Galaxy Ace utilizza Android 2.3.X (Gingerbread) e Xperia Tipo utilizza Android 4.0.3 (ICS).

Quindi, la mia punta di diamante è che il problema è con Android 2.3.X - Gingerbread o Galaxy Ace è un cestino della spazzatura.

Ma ... Ho forzato i miei amici a installare gli esempi AndEngine e testarlo, con il risultato che il test Nexus ParticleSystem funziona molto bene e fluido.

Sono completamente perso! Perché questo diverso nelle prestazioni? Cosa sto facendo di sbagliato?

qualche informazione in più:

  1. Seguo tutti i passi da quel tutorial.
  2. Uso GL10 (OpenGL 1.0).
  3. Nessun shader.
  4. Nessun tempo di delta per FPS persi (non penso che questa cosa risolverà il mio problema).
  5. Nessun codice nativo, solo Java.
  6. SystemClock.uptimemillis() e sleep() per controllare FPS.
  7. MediaPlayer per riprodurre una song MIDI (non più suoni).
  8. Textures con molto alfa (gioco 2D, è necessario per gli sprite).
  9. minSDKversion = 8

Se avete bisogno di ulteriori informazioni, la prego di dirmi.

+0

Alcuni suggerimenti: Forse GC sta diventando selvaggio? Prova a rimuovere la tua app finché il problema non scompare. Prova a profilare la tua app. –

+0

Beh, penso che 200 MB non siano così piccoli. Si può provare a rilevare la capacità del ram all'inizio, quindi ridurre le dimensioni della bitmap a metà se necessario. Comunque anche questo non ha risolto il mio problema su Ace. Sembra che gli assi abbiano un problema speciale a riguardo. –

risposta

0

La RAM potrebbe essere il collo di bottiglia. Sai che Android non gestisce le immagini molto bene. Stai riciclando le tue bitmap? Perché non usi OpenGL ES 2.0? Sto sviluppando giochi e test su Samsung Galaxy Ace e LG p500 (entrambi con Gingerbread) senza problemi. Posso ottenere quasi 50 FPS.

0
  1. Non utilizzare mai Thread.sleep nel thread dell'interfaccia utente, è molto pessimo.

  2. Utilizzare statics; questa è una cattiva pratica OOP, ma utile qui.

  3. Usa vertex-buffer objects

  4. inizializzazione in onSurfaceChanged a prendere posizioni (glget***location) anche qui.

  5. Non è colpa tua sempre perché su Froyo, il garbage collector è cattivo e poi su Gingerbread, the touch drivers fire way too many events (Google I_O 2011_ Gestione della memoria per le app Android). Passa quindi gradualmente ad altri metodi di input per la tua app/gioco che non utilizzano touch come sensori movimento e posizione Android

+0

è una citazione? Fonte? – sschrass

+0

perché ho sperimentato questo e ho continuato a risolverlo usando la statica, evitando l'uso del sonno e passando a vbo – GLES