Administración automática de texturas (Direct3D 9)
La administración de texturas es el proceso de determinar qué texturas se necesitan para la representación en un momento dado y asegurarse de que esas texturas se cargan en la memoria de vídeo. Al igual que con cualquier algoritmo, los esquemas de administración de texturas varían en complejidad, pero cualquier enfoque para la administración de texturas implica las siguientes tareas clave.
- Seguimiento de la cantidad de memoria de textura disponible.
- Calcular qué texturas son necesarias para la representación y cuáles no.
- Determinar qué recursos de textura existentes se pueden volver a cargar con otra imagen de textura y qué superficies deben destruirse y reemplazarse por nuevos recursos de textura.
Direct3D implementa la administración de texturas compatible con el sistema para asegurarse de que las texturas se cargan para obtener un rendimiento óptimo. Los recursos de textura que administra Direct3D se conocen como texturas administradas.
El administrador de texturas realiza un seguimiento de las texturas con una marca de tiempo que identifica cuándo se usó por última vez la textura. A continuación, usa un algoritmo menos usado recientemente para determinar qué texturas se deben quitar. Las prioridades de textura se usan como separadores de corbata cuando dos texturas están destinadas a la eliminación de la memoria. Si dos texturas tienen el mismo valor de prioridad, se quita la textura menos usada recientemente. Sin embargo, si dos texturas tienen la misma marca de tiempo, primero se quita la textura que tiene una prioridad más baja.
Al crearlas, se solicita la administración automática de texturas para las superficies de textura. Para recuperar una textura administrada en una aplicación de C++, cree un recurso de textura llamando a IDirect3DDevice9::CreateTexture y especificando el D3DPOOL_MANAGED para el parámetro Pool. No se le permite especificar dónde desea crear la textura. No se pueden usar las marcas D3DPOOL_DEFAULT o D3DPOOL_SYSTEMMEM al crear una textura administrada. Después de crear la textura administrada, puedes llamar al método IDirect3DDevice9::SetTexture para establecerlo en una fase en la cascada de texturas del dispositivo de representación.
Puede asignar una prioridad a las texturas administradas llamando al método IDirect3DResource9::SetPriority para la superficie de textura.
Direct3D descarga automáticamente texturas en la memoria de vídeo según sea necesario. El sistema puede almacenar en caché las texturas administradas en la memoria de vídeo local o no local, en función de la disponibilidad de la memoria de vídeo no local u otros factores. La ubicación de caché de las texturas administradas no se comunica con la aplicación, ni esta información es necesaria para usar la administración automática de texturas. Si la aplicación usa más texturas de las que pueden caber en la memoria de vídeo, Direct3D quita las texturas más antiguas de la memoria de vídeo para dejar espacio para las nuevas texturas. Si usa una textura eliminada de nuevo, el sistema usa la superficie de textura original de memoria del sistema para volver a cargar la textura en la memoria caché de memoria de vídeo. Aunque es necesario volver a cargar la textura, también disminuye el rendimiento de la aplicación.
Puede modificar dinámicamente la copia original de memoria del sistema de la textura actualizando o bloqueando el recurso de textura. Cuando el sistema detecta una superficie sucia ( una vez completada una actualización o cuando se desbloquea la superficie), el administrador de texturas actualiza automáticamente la copia de memoria de vídeo de la textura. El impacto en el rendimiento en el que se incurre es similar a volver a cargar una textura eliminada.
Al entrar en un nuevo nivel en un juego, es posible que la aplicación tenga que vaciar todas las texturas administradas de la memoria de vídeo (llamando a IDirect3DDevice9::EvictManagedResources).
Para obtener más información sobre la administración de recursos, vea Managing Resources (Direct3D 9) (Administración de recursos [Direct3D 9]).
Temas relacionados