Bitmap Caching
Esta característica permite llevar elementos que se encuentran dentro del contenido Silverlight a la memoria de la tarjeta de video. Lo que permitirá que la tarjeta video se en haga responsable de la manipulación de los Bitmap y refrescarlos en la pantalla, lo que permitirá que este proceso se ejecute más rápido que si se hace desde el runtime de Silverlight el cual debe hacer todo el trabajo y comunicarse continuamente con la tarjeta de video. Sin embargo la tarjeta de video se limita a las siguientes operaciones que se pueden realizar sobre esta.
-
Escalamiento de Bitmap usando RenderTranform.
-
Rotación de Bitmap usando RenderTranform.
-
Manipular el nivel de opacidad usando la propiedad Opacity.
-
Recorte de bitmap con regiones rectagulares de recorte usando la propiedad Clip.
Si usa animaciones que realizan escalamiento, rotación y desvanecimiento de un elemento obtendrá un gran beneficio al usar los bitmap sobre cache en la tarjeta de video a nivel de aceleración del hardware. Pero si usa otro tipo de operaciónes dentro de las animaciones como por ejemplo cambiar el color del elemento, aplicar pixer shader ó otro tipo de operación que no se encuentra soportada por Bitmap Caching decrementara significativamente el desempeño porque estas operaciones no se encuentran soportadas por bitmap caching. Por este motivo deberá tener en cuenta las operaciones que realizara su animación antes de usar las imágenes en cache.
Para colocar un elemento dentro de la cache de la tarjeta de video lo único que tienes que hacer establecer la propiedad CacheMode = “BitmapCache”. Todos los elementos que sean tipos derivados de la clase UIElement proporcionan esta propiedad. Ahora bien el plug-in de Silverlight además de permitirnos la aceleración del hardware también proporciona una importante herramienta que nos permite visualizar cuales elementos no se encuentran en cache mediante una máscara en rojo sobre los elementos para esto es importante que revises el siguiente post Utilizando la aceleración del hardware.
Sin elementos en cache.
Colocando un elemento en cache.
Ahora bien cuando colocas un elemento sobre cache. Silverlight inmediatamente realiza una réplica del elemento sobre la cache por lo que al momento de que el elemento se ve afectado por ejemplo por ScaleTransform elemento actual aumentara o disminuirá su escala pero la réplica que se almaceno sobre cache no se verá afectada. Para mitigar esto puedes definir explícitamente el tamaño ó el nivel de escala que se almacenara sobre cache mediante la propiedad BitmapCache.RenderAtScale con el valor en el que aumentar o disminuirá la escala del elemento.
Saludos,
MANUEL FERNANDO