Aceleração por hardware

É possível usar a aceleração por hardware OpenGL ES 1.1 para aprimorar o desempenho de gráficos em alguns aplicativos. Jogos e outros aplicativos em que os objetos de exibição são animados podem tirar proveito da aceleração por hardware. Os aplicativos que usam aceleração por hardware podem transferir alguns processos de gráficos da CPU para o UPG do iPhone, o que pode melhorar bastante o desempenho.

Ao desenvolver um aplicativo para uso da GPU, é importante seguir as regras para garantir que o conteúdo seja acelerado corretamente pela GPU.

Para usar a aceleração por hardware, configure a GPU (Unidade de processamento gráfico) na guia Geral da caixa de diálogo Configurações do iPhone no Flash Professional CS5. Também é possível definir a propriedade renderMode para gpu no arquivo do descritor do aplicativo:

<initialWindow> 
    <renderMode>gpu</renderMode> 
    ...

Consulte Configuração de propriedades de aplicativos do iPhone no Flash Professional CS5 e Definição de propriedades de aplicativo do iPhone no arquivo do descritor do aplicativo .

Existem quatro classes de objetos de exibição que podem ser renderizadas rapidamente em aceleração de hardware se o conteúdo não for alterado frequentemente:

  • Objetos bitmap

  • Objetos de exibição 2D para os quais a propriedade cacheAsBitmap está definida como true e também podem ter a propriedade cacheAsBitmapMatrix definida (consulte a seguir)

  • Objetos de exibição 3D (que possuem a propriedade z definida)

  • Exibe objetos que possuem um preenchimento retangular de cor sólida e que possuem bordas que se alinham com os pixels da tela.

Os objetos com base em vetor são renderizados sempre que outra sprite é animada sobre ou sob eles. Dessa forma, qualquer objeto que atua como fundo ou primeiro plano de uma animação também deve pertencer a uma dessas categorias.

Para objetos de exibição que possuem cacheAsBitmap definido como true , definir cacheAsBitmapMatrix faz com que a UPG utilize o bitmap resultante da transformação da matriz. A UPG utilize a representação de bitmap sempre que o objeto é girado ou dimensionado. A UPG pode compor e animar este bitmap de forma mais rápida o que a CPU pode redesenhar um objeto renderizado vetor.

Definir cacheAsBitmap como true faz com que o objeto de exibição (e seus filhos) sejam armazenados em cache. O objeto de exibição não é redesenhado quando as novas regiões são expostas, ou todo o gráfico combinado é traduzido.

Quando a propriedade cacheAsBitmapMatrix do objeto de exibição é definida, o aplicativo pode criar uma representação do objeto de exibição mesmo quando não estiver visível. O aplicativo cria uma representação em cache do objeto de exibição ao início do próximo quadro. Ao adicionar o objeto de exibição ao palco, o aplicativo o renderiza de forma mais rápida. De forma similar, o aplicativo pode rapidamente girar ou dimensionar o objeto de forma animada. Não defina a propriedade cacheAsBitmap para objetos que são girados ou dimensionados sem também definir a propriedade cacheAsBitmapMatrix .

O aplicativo também pode executar transformações alfa rapidamente de um objeto armazenado em cache como bitmap. Entretanto, somente os valores alpha entre 0 e 1.0 podem ser utilizados em transformações alfa aceleradas por hardware. Isso corresponde a uma configuração colorTransform.alphaMultiplier entre 0 e 256.

Não defina a propriedade cacheAsBitmap como true para objetos atualizados com frequência, como os campos de texto.

Objetos de exibição que possuem conteúdo gráfico alterado com frequência normalmente não são bons candidatos para renderização pela GPU. Isto é verdade especialmente em dispositivos antigos com GPUs menos poderosas. A sobrecarga de carregamento dos gráficos para a GPU pode tornar a renderização por CPU uma melhor escolha.

Reestruturar objetos de exibição que possuam objetos de exibição filhos que se movem de forma relativa ao pai. Mude-os para que os objetos de exibição filhos se tornem irmãos do pai. Isto garante que eles tenham uma representação própria em bitmap. Além disso, cada objeto de exibição poderá se mover de forma relativa aos outros sem a necessidade de novos gráficos serem carregados para a GPU.

Defina a propriedade cacheAsBitmap em true no mais alto nível da lista de exibição onde os objetos de exibição filho não são animados. Em outras palavras, defina a propriedade em contêineres de objetos de exibição que não contenham partes móveis. Não defina a propriedade em objetos de exibição filho. Não defina a propriedade em sprites que possuem outros objetos de exibição que sejam animados.

Ao definir a propriedade z para um objeto de exibição, o aplicativo sempre utiliza a representação do bitmap em cache. Após definir a propriedade z para um objeto de exibição, o aplicativo utiliza a representação do bitmap em cache, mesmo que você gire ou dimensione o objeto. O aplicativo não utiliza a propriedade cacheAsBitmapMatrix para exibir objetos que possuem a propriedade z definida. Aplicam-se as mesmas regras quando você define qualquer propriedade de objeto de exibição tridimensional, incluindo as propriedades rotationX , rotationY , rotationZ , and transform.matrix3D .

Não defina a propriedade scrollRect ou mask para um contêiner de objeto de exibição no qual deseja utilizar aceleração por hardware. A definição dessas propriedades desativa a aceleração por hardware para um contêiner de objeto de exibição e seus objetos filho. Opcionalmente, para configurar a propriedade mask crie um objeto de exibição de máscara em camada sobre o objeto que está sendo posicionado na máscara.

Existem limites de tamanho dos objetos de exibição disponíveis para aceleração de hardware. Em dispositivos mais antigos, o limite é de 1024 pixels ou menos em largura e altura. Em dispositivos mais recentes, o limite é de 2048 pixels ou menos. É possível utilizar a ferramenta de diagnóstico de renderização por GPU para testar o desempenho de um dispositivo.

A GPU utiliza também iPhone RAM para armazenar imagens em bitmap. Utiliza o mínimo de memória necessária para imagens em bitmap.

A GPU utiliza distribuições de memória que são potências de 2 em cada dimensão da imagem em bitmap. Por exemplo, a GPU pode reservar memória para tamanhos 512 x 1024 ou 8 x 32. Dessa forma, uma imagem com 9 x 15 pixels ocupa a mesma quantidade de memória que uma imagem com 16 x 16 pixels. Para objetos de exibição armazenados em cache, pode ser interessante utilizar dimensões mais próximas a potências de 2 (mas não mais) em cada direção. Por exemplo, é mais eficiente utilizar um objeto de exibição com 32 x 16 pixels que um objeto de exibição de 33 x 17 pixels.

Não conte com um palco redimensionado para reduzir os ativos que foram dimensionados para outras plataformas (tais como a área de trabalho). Em vez disso, utilize a propriedade cacheAsBitmapMatrix ou redimensione os ativos antes de publicar para o iPhone. Os objetos em 3D ignoram a propriedade cacheAsBitmapMatrix ao armazenar em cache uma imagem de superfície. Por esse motivo, é melhor redimensionar os objetos antes da publicação, se forem renderizados em uma superfície em 3D.

Existe uma troca de benefícios entre a aceleração por hardware e o uso da RAM. À medida que a memória é preenchida, o iPhone OS avisa outros aplicativos nativos em execução iPhone para liberar memória. À medida que esses aplicativos processam essa notificação e trabalham para liberar memória podem concorrer com seu aplicativos para ciclos da CPU. Isso pode diminuir momentaneamente o desempenho do aplicativo. Certifique-se de testar o aplicativo em dispositivos mais antigos visto que eles possuem substancialmente menos memória disponível para o processo em execução.

Ao depurar o aplicativo no iPhone, é possível habilitar o recurso de diagnóstico de renderização por GPU. Este recurso ajuda você a ver como o aplicativo utiliza a renderização por GPU. Para obter mais informações, consulte “Depuração com diagnóstico de renderização de GPU” em Depurando um aplicativo para iPhone .

Para obter mais informações sobre como utilizar a propriedade cacheAsBitmapMatrix , consulte a seção “DisplayObject.cacheAsBitmapMatrix” em ActionScript APIs específica para aplicativos AIR móveis .