Estoy trabajando en una aplicación de iPhone que se basa en gran medida en OpenGL. En este momento funciona un poco lento en el iPhone 3G, pero parece ágil en el nuevo 32G iPod Touch. Supongo que esto está relacionado con el hardware. De todos modos, quiero que el rendimiento del iPhone se parezca al rendimiento del iPod Touch. Creo que estoy haciendo muchas cosas de manera subóptima en OpenGL y me gustaría obtener consejos sobre las mejoras que me darán más por el dinero.Consejos sobre la aceleración de OpenGL ES 1.1 en el iPhone
Mi escena de representación va algo como esto:
- Repetir 35 veces
- glPushMatrix
- glLoadIdentity
- glTranslate
- Repetir 7 veces
- glBindTexture
- glVertexPointer
- glNormalPointer
- glTexCoordPointer
- glDrawArrays (GL_TRIANGLES, ...)
- glPopMatrix
Mi Vertex, Normal y textura Coords ya están intercaladas.
Entonces, ¿qué pasos debo tomar para acelerar esto? ¿Qué paso probarías primero?
Mi primer pensamiento es eliminar todas esas llamadas a glBindTexture() utilizando un Atlas de texturas.
¿Qué pasa con algunas operaciones de matriz más eficientes? Entiendo que las versiones gl *() no son demasiado eficientes.
¿Qué hay de las VBO?
actualización
Hay 8260 triángulos. Los tamaños de textura son 64x64 png. Hay 58 texturas diferentes.
No he ejecutado instrumentos.
Actualización 2
Después de ejecutar el ES Instrumento de OpenGL en el iPhone 3G encontré que mi solador Utilización estará en el rango de 90-100%, y mi Render La utilización es del orden de 30%.
Actualización 3
textura Atlasing no tenían ningún efecto notable sobre el problema. Los rangos de utilización siguen siendo los indicados anteriormente.
Actualización 4
conversión de mis punteros Vertex y normal a GL_SHORT parecía mejorar FPS, pero la utilización del solador todavía está en el rango de 90% de una gran parte del tiempo. Todavía estoy usando GL_FLOAT para mis coordenadas de textura. Supongo que podría derribarlos en GL_SHORT y guardar cuatro bytes más por vértice.
actualización 5
la conversión de mi coordenadas de textura a GL_SHORT produjo otro aumento del rendimiento. Ahora obtengo sistemáticamente> 30 FPS. La utilización de Solador sigue siendo alrededor del 90%, pero con frecuencia cae en el rango del 70-80%. La utilización de Renderer ronda el 50%. Supongo que esto podría tener algo que ver con escalar las coordenadas de textura del modo de matriz GL_TEXTURE.
Todavía estoy buscando mejoras adicionales. Me gustaría acercarme a 40 FPS, ya que eso es lo que obtiene mi iPod Touch y es muy suave allí. Si alguien todavía está prestando atención, ¿qué otra fruta barata puedo elegir?
¿cuántos triángulos tiene? ¿Qué tan grandes son tus texturas? la primera pregunta sería si está alcanzando límites basados en la cantidad de geometría, el número de píxeles que está procesando o la CPU del host. ¿Has probado usar Instruments para perfilar la CPU o GPU? –
Sí, 32 bits. ¿Cómo se puede ir a RGB565? Usé GIMP para crear mi atlas de textura, si eso hace la diferencia. –
ver la respuesta nueva a continuación acerca de RGB565 y PVRTC –