Partager via


Gestion automatique des textures (Direct3D 9)

La gestion des textures est le processus de détermination des textures nécessaires au rendu à un moment donné et de s’assurer que ces textures sont chargées en mémoire vidéo. Comme avec n’importe quel algorithme, les schémas de gestion des textures 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 pour le rendu, et qui ne le sont pas.
  • Détermination des ressources de texture existantes pouvant ê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 suit les textures avec un horodatage qui identifie quand la texture a été utilisée pour la dernière fois. Il utilise ensuite un algorithme moins récemment 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 est supprimée. Toutefois, si deux textures ont le même horodatage, la texture dont la priorité est inférieure est supprimée en premier.

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 la 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 à une étape de la cascade de texture de l’appareil de rendu.

Vous pouvez affecter une priorité aux textures managées en appelant la méthode IDirect3DResource9 ::SetPriority pour l’aire de texture.

Direct3D télécharge automatiquement les textures en mémoire vidéo si nécessaire. Le système peut mettre en cache des textures géré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 du cache de vos textures managées n’est pas communiqué à votre application, ni ces informations ne sont nécessaires pour utiliser la gestion automatique des textures. Si votre application utilise plus de textures que possible dans la mémoire vidéo, Direct3D supprime les textures plus anciennes de la mémoire vidéo pour créer de la place pour les nouvelles textures. Si vous utilisez à nouveau une texture supprimée, le système utilise la surface de texture de la mémoire système d’origine pour recharger la texture dans le cache de mémoire vidéo. Bien que le rechargement de la texture soit nécessaire, il diminue également les performances de l’application.

Vous pouvez modifier dynamiquement la copie 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 qu’une mise à jour est 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. L’atteinte aux performances 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 managé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).

textures Direct3D