Partager via


Effets (Direct3D 10)

Un effet DirectX est une collection d’états de pipeline, définie par des expressions écrites dans HLSL et une syntaxe spécifique à l’infrastructure d’effet. Après avoir compilé un effet, utilisez les API d’infrastructure d’effet pour effectuer le rendu. Les fonctionnalités d’effet peuvent aller d’un nuanceur de vertex aussi simple qu’un nuanceur de vertex qui transforme la géométrie et un nuanceur de pixels qui génère une couleur unie, à une technique de rendu qui nécessite plusieurs passes, utilise chaque étape du pipeline graphique et manipule l’état du nuanceur ainsi que l’état du pipeline non associé aux nuanceurs programmables.

La première étape consiste à organiser l’état que vous souhaitez contrôler dans un effet. Cela inclut l’état du nuanceur (vertex, géométrie et nuanceurs de pixels), l’état de texture et d’échantillonneur utilisé par les nuanceurs et d’autres états de pipeline non programmables. Vous pouvez créer un effet en mémoire sous forme de chaîne de texte, mais en général, la taille est suffisamment grande pour stocker l’état des effets dans un fichier d’effet (fichier texte qui se termine par une extension .fx). Pour utiliser un effet, vous devez le compiler (pour vérifier la syntaxe HLSL ainsi que la syntaxe de l’infrastructure d’effet), initialiser l’état d’effet via des appels d’API et modifier votre boucle de rendu pour appeler les API de rendu.

Un effet encapsule tout l’état de rendu requis par un effet particulier dans une fonction de rendu unique appelée technique. Une passe est un sous-ensemble d’une technique qui contient l’état de rendu. Pour implémenter un effet de rendu de passe multiple, implémentez un ou plusieurs passes au sein d’une technique. Par exemple, supposons que vous vouliez afficher une géométrie avec un ensemble de mémoires tampons de profondeur/gabarit, puis dessiner des sprites au-dessus de cela. Vous pouvez implémenter le rendu géométrique dans la première passe et le dessin sprite dans la deuxième passe. Pour afficher l’effet, vous affichez simplement les deux passes dans votre boucle de rendu. Vous pouvez implémenter n’importe quel nombre de techniques dans un effet. Bien sûr, plus le nombre de techniques est élevé, plus le temps de compilation est élevé pour l’effet. Une façon d’exploiter cette fonctionnalité consiste à créer des effets avec des techniques conçues pour s’exécuter sur différents matériels. Cela permet à une application de rétrograder correctement les performances en fonction des fonctionnalités matérielles détectées.

Guide de programmation pour Direct3D 10