É 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
.