Partager via


Gestion automatique des textures (Direct3D 9)

La gestion des textures est le processus qui consiste à déterminer quelles textures sont nécessaires pour le rendu à un moment donné et à s’assurer que ces textures sont chargées dans la mémoire vidéo. Comme avec n’importe quel algorithme, les schémas de gestion de texture varient en complexité, mais toute approche de la gestion des textures implique les tâches clés suivantes.

  • Suivi de la quantité de mémoire de texture disponible.
  • Calcul des textures nécessaires au rendu, et celles qui ne le sont pas.
  • Déterminer quelles ressources de texture existantes peuvent être rechargées avec une autre image de texture et quelles surfaces doivent être détruites et remplacées par de nouvelles ressources de texture.

Direct3D implémente la gestion des textures prise en charge par le système pour s’assurer que les textures sont chargées pour des performances optimales. Les ressources de texture gérées par Direct3D sont appelées textures managées.

Le gestionnaire de textures effectue le suivi des textures avec un horodatage qui identifie le moment où la texture a été utilisée pour la dernière fois. Il utilise ensuite un algorithme le moins récent utilisé pour déterminer quelles textures doivent être supprimées. Les priorités de texture sont utilisées comme disjoncteurs lorsque deux textures sont ciblées pour la suppression de la mémoire. Si deux textures ont la même valeur de priorité, la texture la moins récente utilisée est supprimée. Toutefois, si deux textures ont le même horodatage, la texture qui a une priorité inférieure est d’abord supprimée.

Vous demandez la gestion automatique des textures pour les surfaces de texture lorsque vous les créez. Pour récupérer une texture managée dans une application C++, créez une ressource de texture en appelant IDirect3DDevice9::CreateTexture et en spécifiant le D3DPOOL_MANAGED pour le paramètre Pool. Vous n’êtes pas autorisé à spécifier l’emplacement de création de la texture. Vous ne pouvez pas utiliser les indicateurs D3DPOOL_DEFAULT ou D3DPOOL_SYSTEMMEM lors de la création d’une texture managée. Après avoir créé la texture managée, vous pouvez appeler la méthode IDirect3DDevice9::SetTexture pour la définir sur une étape dans la cascade de texture de l’appareil de rendu.

Vous pouvez attribuer une priorité aux textures managées en appelant la méthode IDirect3DResource9::SetPriority pour la surface de texture.

Direct3D télécharge automatiquement les textures dans la mémoire vidéo en fonction des besoins. Le système peut mettre en cache des textures managées dans la mémoire vidéo locale ou non locale, en fonction de la disponibilité de la mémoire vidéo non locale ou d’autres facteurs. L’emplacement de cache de vos textures managées n’est pas communiqué à votre application, et ces informations ne sont pas requises pour utiliser la gestion automatique des textures. Si votre application utilise plus de textures que ne peut tenir dans la mémoire vidéo, Direct3D supprime les anciennes textures de la mémoire vidéo pour faire de la place pour les nouvelles textures. Si vous utilisez à nouveau une texture supprimée, le système utilise la surface de texture mémoire système d’origine pour recharger la texture dans le cache vidéo-mémoire. Bien que le rechargement de la texture soit nécessaire, il diminue également les performances de l’application.

Vous pouvez modifier dynamiquement la copie en mémoire système d’origine de la texture en mettant à jour ou en verrouillant la ressource de texture. Lorsque le système détecte une surface sale une fois la mise à jour terminée ou lorsque la surface est déverrouillée, le gestionnaire de textures met automatiquement à jour la copie vidéo-mémoire de la texture. La performance rencontrée est similaire au rechargement d’une texture supprimée.

Lorsque vous entrez un nouveau niveau dans un jeu, votre application peut avoir besoin de vider toutes les textures gérées de la mémoire vidéo (en appelant IDirect3DDevice9::EvictManagedResources).

Pour plus d’informations sur la gestion des ressources, consultez Gestion des ressources (Direct3D 9).

Direct3D Textures