Sto lavorando a un'app per iPhone che fa molto affidamento su OpenGL. In questo momento funziona un po 'lento su iPhone 3G, ma sembra scattante sul nuovo iPod Touch 32G. Presumo che questo sia legato all'hardware. Ad ogni modo, voglio che le prestazioni dell'iPhone assomiglino alle prestazioni dell'iPod Touch. Credo che sto facendo un sacco di cose in modo sub-ottimale in OpenGL e mi piacerebbe ricevere consigli su quali miglioramenti mi daranno il massimo.Consigli sull'accelerazione di OpenGL ES 1.1 su iPhone
mio resa scena più o meno così:
- Ripetere 35 volte
- glPushMatrix
- glLoadIdentity
- glTranslate
- Ripetere 7 volte
- glBindTexture
- glVertexPointer
- glNormalPointer
- glTexCoordPointer
- glDrawArrays (GL_TRIANGLES, ...)
- glPopMatrix
mio Vertex, Normale e texture Coords sono già suddivise.
Quindi, quali passi devo prendere per accelerare questo? Quale passo vorresti provare prima?
Il mio primo pensiero è eliminare tutte quelle chiamate glBindTexture() utilizzando un Atlas texture.
E alcune operazioni con le matrici più efficienti? Capisco che le versioni gl *() non siano troppo efficienti.
E i VBO?
Aggiornamento
ci sono 8260 triangoli. Le dimensioni della trama sono 64 x 64 png. Ci sono 58 diverse texture.
Non ho eseguito gli strumenti.
Aggiornamento 2
Dopo l'esecuzione dello strumento ES OpenGL su iPhone 3G ho trovato che il mio Tiler utilizzo è nel range 90-100%, e il mio Render utilizzo è nel range 30%.
Aggiornamento 3
Texture Atlasing non ha avuto notevole effetto sul problema. Gli intervalli di utilizzo sono ancora come indicato sopra.
Aggiornamento 4
Conversione miei Vertex e normali puntatori a GL_SHORT sembrava migliorare FPS, ma l'utilizzo Tiler è ancora nel range 90% un sacco di tempo. Sto ancora usando GL_FLOAT per le mie coordinate di texture. Suppongo di poterli abbattere a GL_SHORT e salvare altri quattro byte per vertice.
Aggiornamento 5
Conversione coordinate mia texture per GL_SHORT prodotto un ulteriore aumento delle prestazioni. Ora sto ottenendo costantemente> 30 FPS. L'utilizzo del piastrellista è ancora attorno al 90%, ma scende frequentemente nell'intervallo del 70-80%. L'utilizzo del Renderer si aggira attorno al 50%. Suppongo che questo potrebbe avere qualcosa a che fare con il ridimensionamento delle coordinate della texture dalla modalità Matrice GL_TEXTURE.
Sto ancora cercando ulteriori miglioramenti. Mi piacerebbe avvicinarmi a 40 FPS, in quanto è ciò che ottiene il mio iPod Touch ed è liscio come la seta. Se qualcuno sta ancora prestando attenzione, quale altra frutta a bassa attaccatura posso scegliere?
quanti triangoli avete? quanto sono grandi le tue trame? la prima domanda sarebbe se si sta colpendo i limiti in base alla quantità della geometria, il numero di pixel che stai elaborazione o la CPU. Hai provato a utilizzare gli strumenti per profilare la CPU o la GPU? –
Sì, 32 bit. Come si va a RGB565? Ho usato GIMP per creare il mio atlante di texture, se questo fa la differenza. –
leggi la nuova risposta in basso su RGB565 e PVRTC –