2010-07-31 7 views
8

Esto es un poco raro, pero he notado que hasta un 40 por ciento del tiempo de renderización se usa dentro de glAlphaFuncx. Sé que las pruebas alfa son muy costosas, pero lo interesante es que no las uso :) Ningún lugar de código usa pruebas alfa, ni invoco esta función de ninguna otra manera.Rendimiento OpenGL en iPhone: glAlphaFuncx en la traza

También verifiqué la capa GL para mezclar en otros tipos de cosas que podrían causar que esto ocurra pero es lo que es.

Por lo tanto, si alguien sabe lo que podría causar glAlphaFuncx que aparezca en la traza de ejecución de la CPU Sampler, estaría contento de escuchar que :)

Actualización: fija el enlace de captura de pantalla: http://twitpic.com/2afxho/full

Actualización 2 : la función que lleva a la invocación de glAlpaFuncx contiene una sola línea:

[context presentRenderbuffer:GL_RENDERBUFFER_OES]; 

actualización 3: he intentado establecer el punto de interrupción dentro de esta función, pero parece que no se han invocado en absoluto. Supongo que el perfilador está jodido aquí ...

+2

Su pantalla no funciona :( – Calvin1602

+0

Lo siento por eso, fijo – Anton

Respuesta

1

Es extraño que esta función aparezca en una traza del perfilador, como dices que no la estás utilizando. Intente establecer un punto de interrupción en glAlphaFuncx para ver desde dónde se está llamando.

Pero de todos modos, eso no debería ser un problema, glAlphaFunc simplemente establecerá un estado en el lado del servidor GL, no hace (o debería) hacer más procesamiento que eso. No debería ser un problema de rendimiento, tal vez es un error en la implementación de GL o en el generador de perfiles.

Para estar seguro, puede desactivar la prueba alfa con glDisable (GL_ALPHA_TEST).

+0

He intentado su desactivación - sin suerte En cuanto al lugar de la invocación - por favor mirar mi actualización, que parece ser invocado por [contexto presentRenderbuffer: GL_RENDERBUFFER_OES]. La razón por la que estoy preocupado es que el rendimiento de la aplicación no es alto en absoluto, aunque estoy renderizando muy poca geometría, por lo que sería genial si pudiera arreglarlo ... – Anton

+0

Bueno, si esa función es realmente habilitando y utilizando la prueba alfa, no hay mucho que pueda hacer. Usaría un analizador/depurador de OpenGL, como gDebugger, para ver qué parte de la interconexión de GL es su cuello de botella. Tenga en cuenta que un perfilador de CPU es un poco inútil ya que la CPU y la GPU se ejecutan en paralelo. –

+0

El hecho es que iPod Touch ejecuta la aplicación perfectamente (FPS = 60), así que mi CPU supongo que es un cuello de botella (AFAIK tienen las mismas GPU) – Anton

0

Por lo que puedo ver, glAlphaFuncx podría estar tomando el golpe para configurar el renderizado o presionar los píxeles. Podría ser que se ejecute primero o último en el renderizado.

¿Tiene un problema de rendimiento real o simplemente está tratando de encontrar piezas de código para cortar/optimizar?

Si es así, debe establecer un punto de interrupción en glAlphaFuncx y ver de dónde se llama y por qué. Para hacer esto, solo abra la consola del depurador y escriba "break glAlphaFuncx".

+0

Bueno, quiero que la aplicación se ejecute un poco más rápido, de esta manera será lo suficientemente suave para mí. Intenté configurar el punto de interrupción dentro de esta función, pero parece que no se ha invocado en absoluto. Supongo que el generador de perfiles está jodido aquí ... – Anton

0

Independientemente del sistema, este tipo de comportamiento - el tiempo empleado presentar lo que se ha dibujado - casi siempre indica que la GPU es el cuello de botella. O está dibujando demasiado (si la velocidad de fotogramas es un problema), o la CPU no está haciendo lo suficiente (si la velocidad de fotogramas es buena).

En realidad, existe otra posibilidad: que la cantidad de trabajo de la GPU sea buena, pero el sistema está esperando algún tipo de período de retorno vertical. (Eso parece poco probable en un dispositivo que solo tiene una pantalla LCD, y no admite una pantalla de barrido de trama, pero tal vez las cosas sigan siendo conceptualmente así.) El resultado sigue siendo el mismo en la medida en que la cantidad de CPU funcione , sin embargo, en eso tienes tiempo para hacer más cosas sin afectar la velocidad de fotogramas.

No puedo explicar exactamente por qué glAlphaFuncx específicamente está apareciendo en la pila de llamadas, pero si no parece que alguna vez se llame, entonces lo consideraría una pista falsa hasta que se demuestre lo contrario. .

Cuestiones relacionadas