Effets (Direct3D 11)

Un effet DirectX est une collection d’état de pipeline, définie par des expressions écrites en HLSL et une syntaxe spécifique à l’infrastructure d’effets.

Après avoir compilé un effet, utilisez les API d’infrastructure d’effet pour le rendu. La fonctionnalité d’effet peut aller d’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, coque, domaine, géométrie, nuanceurs de pixels et de calcul), l’état de texture et d’échantillonneur utilisé par les nuanceurs, ainsi que d’autres états de pipeline non programmables. Vous pouvez créer un effet en mémoire sous la forme d’une chaîne de texte, mais en général, la taille est suffisamment grande pour pouvoir stocker l’état de l’effet dans un fichier d’effet (fichier texte qui se termine par une extension .fx). Pour utiliser un effet, vous devez le compiler (pour case activée la syntaxe HLSL ainsi que la syntaxe de l’infrastructure d’effet), initialiser l’état de l’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 seule fonction de rendu 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 à plusieurs passes, implémentez une ou plusieurs passes dans une technique. Par exemple, supposons que vous souhaitiez afficher une géométrie avec un ensemble de mémoires tampons de profondeur/gabarit, puis dessiner des sprites par-dessus. Vous pouvez implémenter le rendu de la géométrie dans la première passe et le dessin de sprite dans la deuxième. Pour afficher l’effet, il vous suffit de restituer 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 de l’effet est important. 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 passer normalement à une version antérieure des performances en fonction des fonctionnalités matérielles détectées.

Un ensemble de techniques peut être regroupé dans un groupe (qui utilise la syntaxe « fxgroup »). Les techniques peuvent être regroupées de n’importe quelle manière. Par exemple, plusieurs groupes peuvent être créés, un par matériau ; chaque matériau peut avoir une technique pour chaque niveau matériel ; chaque technique aurait un ensemble de passes qui définissent le matériel sur le matériel particulier.

Contenu de cette section

Rubrique Description
Organisation de l’état dans un effet
Avec Direct3D 11, l’état d’effet de certaines étapes de pipeline est organisé par structures.
Interfaces système d’effet
Le système d’effets définit plusieurs interfaces pour la gestion de l’état de l’effet.
Interfaces spécialisées
ID3DX11EffectVariable a plusieurs méthodes pour transformer l’interface dans le type particulier d’interface dont vous avez besoin.
Interfaces et classes dans les effets
Il existe de nombreuses façons d’utiliser des classes et des interfaces dans Effets 11.
Rendu d’un effet
Un effet peut être utilisé pour stocker des informations ou pour effectuer un rendu à l’aide d’un groupe d’états.
Clonage d’un effet
Le clonage d’un effet crée une deuxième copie presque identique de l’effet.
Syntaxe de flux sortant
Un nuanceur de géométrie avec flux sortant est déclaré avec une syntaxe particulière.
Différences entre les effets 10 et les effets 11
Cette rubrique montre les différences entre les effets 10 et les effets 11.

Guide de programmation pour Direct3D 11