2011-03-27 6 views

Respuesta

13

La GPU de iPhone es un procesador basado en teselas. Si una capa superpuesta es completamente opaca sobre un mosaico completo, la GPU puede ignorar la configuración y el procesamiento de los comandos gráficos relacionados con la capa subyacente para ese mosaico en particular, además de no tener que componer los píxeles en ese mosaico.

Si su imagen no cubre un mosaico completo, la GPU todavía tendrá que procesar varias capas. El tamaño de un mosaico depende de la implementación, pero es mucho menos probable que las pequeñas imágenes gráficas cubran un mosaico. Las imágenes enormes que cubren varias fichas mostrarán la mayor ventaja de ser opacas.

3

Obtiene un mejor rendimiento cuando una vista o capa es opaca que cuando no lo es. Si no es opaco, el sistema de gráficos debe componer esa capa con las capas inferiores para producir la imagen final. Si es opaco, solo se trata de copiar los píxeles en el búfer de cuadros.

9

Desde el View Programming Guide for iOS:

Declarar Vistas como opaca, siempre Posible

UIKit utiliza el propiedad opaca de cada vista para determinar si la vista puede optimizar operaciones de composición. Establecer el valor de esta propiedad en SÍ para una vista personalizada le dice a UIKit que no necesita mostrar ningún contenido detrás de su vista. Menos renderización puede llevar a mayor rendimiento para su código de dibujo y generalmente se recomienda. Del curso , si establece la propiedad opaca en SÍ, su vista debe rellenar por completo su rectángulo de límites con contenido completamente opaco .

hotpaw2 señala la razón detrás de las escenas para esto, que se puede encontrar en el OpenGL ES Programming Guide for iOS:

Otra ventaja de diferido prestación es que permite a la GPU para realice superficie oculta eliminación antes de se procesan los fragmentos. Los píxeles que no son visibles se descartan sin muestreando texturas o realizando fragmento de procesamiento, significativamente reduciendo los cálculos que la GPU debe realizar para renderizar la tesela.Para obtener el mayor beneficio de esta característica , dibujar como mucho de la trama con contenido opaco como sea posible y minimizar el uso de la mezcla, las pruebas alfa , y la instrucción de descarte en shaders GLSL. Debido a que el hardware realiza la eliminación de la superficie oculta, es no necesario para su aplicación a primitivas de clasificación de adelante hacia atrás.

0

Un pequeño y complicado problema a tener en cuenta es que UIImageView restablecerá la propiedad opaca en FALSE cada vez que la propiedad de la imagen se cambie a un nuevo UIImage. Podría verificar explícitamente su código y establecer la propiedad opaca después de cualquier cambio en la propiedad de la imagen, o podría extender UIImageView y proporcionar su propia implementación de setImage que establece opaque después de llamar al método súper setImage. Solo me enteré de esto por accidente.

+0

Interesante ... entonces, ¿cómo manejas el rendimiento y mantienes el ajuste opaco en SÍ? Vuelva a establecerlo inmediatamente después de cambiar la imagen? –

+0

Sí, debe reiniciarse después de que se cambie la propiedad de la imagen. La ganancia de rendimiento ocurre dentro de la lógica de composición de vista ejecutada por el sistema operativo. Establecer la propiedad no es una preocupación de rendimiento en comparación con el trabajo adicional que se necesitaría durante la composición si la propiedad no estuviera configurada. – MoDJ

Cuestiones relacionadas