Administrar recursos de dispositivos

Actualización: noviembre 2007

Existen dos tipos básicos de recursos en la programación de Windows Mobile Direct3D: los que se deben volver a crear al restablecer un dispositivo y los que no lo necesitan. Los diversos tipos de objeto se pueden rellenar de datos o no al restaurarse un dispositivo. A diferencia de Direct3D en aplicaciones de equipos de escritorio, el bloque de memoria utilizado para la creación de un recurso no es un factor relacionado con si se debe volver a crear un recurso al restaurarse un dispositivo o no.

Bloque de memoria

Se dispone de tres bloques de memoria en la programación administrada con Direct3D Mobile:

  • Sistema

    Asigna en la memoria normal del sistema, por lo general más lento que usar la memoria de vídeo.

  • Vídeo

    Asigna un área de memoria destinada principalmente al hardware de vídeo del dispositivo móvil. En algunos dispositivos, la memoria de vídeo puede ser un recurso muy restringido.

  • Memoria administrada

    Asigna memoria de vídeo como caché de memoria del sistema. El controlador puede usar varios algoritmos, incluido el algoritmo de reemplazo LRU (usado menos recientemente), para implementar el esquema de almacenamiento en caché.

    Cuando una textura u otro recurso se crea en el grupo administrado, el espacio se asigna en el bloque de memoria del sistema de texturas. Cuando se asigna la textura a una fase de textura especificada con SetTexture, se carga la textura en el bloque de memoria de vídeo y se conserva hasta que se convierte en el elemento menos utilizado y finalmente se elimina con el fin de liberar espacio para otro recurso. Cuando se deba liberar espacio en la memoria de vídeo con el fin de cargar una superficie administrada y no haya ningún elemento que se ajuste a la definición LRU, el controlador deberá usar la propiedad Priority para determinar qué recurso de memoria administrada eliminar de la memoria de vídeo.

    Puede crear recursos VertexBuffer, IndexBuffer y Texture en el bloque administrado, pero no puede crear búferes de retroceso, de avance, de profundidad ni superficies de imagen.

Puede usar una instancia de la estructura SurfaceCaps para determinar qué bloques de memoria están accesibles cuando crea un recurso.

Un dispositivo móvil admite distintos bloques de memoria para distintos tipos de recursos. Los controladores de vídeo indican su compatibilidad con el grupo de recursos administrados con la propiedad SupportsManagedPool de SurfaceCaps. Si esta propiedad es true, el dispositivo admite el grupo administrado para los recursos VertexBuffer, IndexBuffer y Texture. Una aplicación no puede crear una superficie a partir del grupo administrado si el controlador no es compatible con dicho grupo. Si el dispositivo es compatible con los bloques de memoria de vídeo y de sistema para texturas, la aplicación puede implementar un esquema de almacenamiento en caché utilizando el método UpdateTexture.

La aplicación también puede forzar la carga de una superficie en la memoria de vídeo con el método PreLoad de Resource. Este método provoca la eliminación de los bytes necesarios y la carga inmediata de la superficie.

Por último, la aplicación también puede forzar el recurso administrado a que elimine un número determinado de bytes con el método ResourceManagerDiscardBytes de Device. Este método toma el número de bytes que se van a eliminar como argumento. Si la aplicación pasa 0, se descartan todos los bytes administrados de la memoria de vídeo.

Todos los métodos que controlan el administrador de recursos actúan inmediatamente; no se almacenan en el búfer de comandos. Además, se produce un error si el dispositivo no es compatible con el grupo administrado.

Períodos de duración e instancias de objetos

Cuando se administran restauraciones de dispositivos y se usan búferes de índices o de vértices, debe utilizar los constructores adecuados para que se creen los objetos con los períodos de duración correctos.

Windows Mobile Direct3D admite sólo una instancia de Device a la vez en un Smartphone o Pocket PC. Puede utilizar el método estático ReleaseD3DMobile de un Manager para quitar todos los recursos de dispositivos Direct3D a fin de poder iniciar otra aplicación para Windows Mobile Direct3D en el mismo Pocket PC o Smartphone.

Se deben volver a crear los objetos siguientes cuando se restablece Device. La nueva creación se puede llevar a cabo en un controlador de eventos para el evento DeviceReset.

Los objetos siguientes no necesitan volverse a crear cuando se restablece Device:

Los objetos Font y Sprite automáticamente realizan todas las acciones necesarias en respuesta al reinicio del dispositivo.

Los objetos IndexBuffer y VertexBuffer se vuelven a crear automáticamente cuando se restablece un dispositivo, pero no contendrán datos. Puede definir un controlador de eventos para los eventos IndexBuffer.Created o VertexBuffer.Created, con el fin de rellenar el búfer del índice o del vértice con datos después de que se restablezca el dispositivo.

Vea también

Otros recursos

Programar Mobile Direct3D en .NET Compact Framework