Silverlight e GPU Acceleration
Silverlight e GPU Acceleration
Você sabe quando usar?
A partir da versão Silverlight 3 é possível habilitar a aceleração de hardware. A ativação permite otimizar os recursos de hardware. Se você tiver um processador poderoso, multi-core, eu recomendo limitar o número de núcleos disponíveis para o seu navegador a 1, de modo que você veja diferença do recurso de hardware.
Para nosso exemplo, irei utilizar o controle MediaElement e atribuir as propriedades como mostra a Tabela 1.0.
| XAML
<MediaElement x:Name="_mediavideo" Width="400" Height="300"></MediaElement> C# public MainPage() { InitializeComponent(); _mediavideo.Source = new Uri("http://www.dowhile.com.br /Behavior.wmv", UriKind.RelativeOrAbsolute); } |
A aceleração GPU está desativada por padrão em Silverlight. Para habilitá-lo, você tem que em dois níveis: tanto para o plugin, e para cada elemento que você deseja acelerar.
Para habilitar a aceleração GPU para o plugin, você tem que adicionar um parâmetro para o tag <object> no seu arquivo HTML ou ASPX que hospeda o aplicativo Silverlight, como mostra o código da Tabela 2.0.
| <param name = "enableGPUAcceleration" value = "true" /> |
Tabela 2.0 – Ativando aceleração GPU
Para verificar onde os recursos da otimização está sendo aplicada você poderá usar outro param como traz a Tabela 3.0.
| <param name="enableCacheVisualization" value="true"/> |
Tabela 3.0 – Visualizar onde a otimização está sendo aplicada
Ao executar a aplicação você irá ver que sua aplicação está com background vermelho como mostra a Figura 1.0.
Figura 1.0 – Aplicação sem otimização de hardware
A cor vermelha na aplicação indica que a otimização para o recursos de hardware não está aplicado, embora esteja ativada. Isto acontece porque o elemento medialement não está definido com o modo de cache.
Então, o que pode fazer com a GPU de bitmaps em cache? No Silverlight , a GPU pode:
• Escala de bitmap - RenderTransform
• Gire o bitmap - RenderTransform
• Mude a opacidade do bitmap - Opacity
• Clip do bitmap
Então, se você está escalando, girando, desaparecendo,
você pode instruir Silverlight para fazer a animação na GPU.
Isso pode não parecer muito, mas pode realmente ajudar em muitos casos.
Para ativar a GPU no mediaelement, use a propriedade CacheMode="BitmapCache", como mostra a Tabela 4.0.
|
<MediaElement x:Name="_mediavideo" Width="400" Height="300" CacheMode="BitmapCache" > </MediaElement> |
Tabela 4.0 – Habilitando o CacheMode
Execute a aplicação novamente, e você poderá observar que a cor verlmelha não está mais presente no vídeo, como mostra a Figura 2.0.
Figura 2.0 – Aplicação com GPU
Conclusão
Aceleração GPU pode ajudar a tirar mais proveito de suas animações, mas você precisa saber os prós e contras para realmente usá-lo corretamente. A regra de ouro é apenas aplicável Bitmap Caching se você tem um conteúdo que precisa mover ou girar ao redor da cena, ou alterar sua opacidade durante uma animação.
Esperemos que este artigo ajude a compreender como a aceleração Silverlight GPU trabalha e a razão de utiliza - lá.
Não se esqueça: Deixe seus comentários e perguntas abaixo, para que possamos melhorar sempre.
