Effets (Direct3D 9)

Un effet Microsoft DirectX permet d’intégrer des nuanceurs de vertex et de pixels à l’état de pipeline pour afficher des objets. Les effets sont l’étape logique suivante de la combinaison de nuanceurs pour produire des conditions de rendu uniques.

Les effets fournissent également un moyen pratique d’écrire des nuanceurs pour différentes versions matérielles. Étant donné que différentes cartes vidéo prennent en charge différentes fonctionnalités, une application peut écrire plusieurs techniques qui s’exécuteront sur divers appareils. De cette façon, si l’application s’exécute sur le matériel le plus récent et le plus performant, l’application peut exécuter la technique d’effet la plus sophistiquée. D’autre part, des techniques d’effet moins sophistiquées peuvent automatiquement être choisies pour s’exécuter sur du matériel moins coûteux ou moins performant.

Un effet peut remplacer le traitement du vertex et une partie du traitement de pixels effectué par le pipeline graphique. Un exemple d’effet qui utilise un nuanceur de vertex et un nuanceur de pixels est dans l’exemple BasicHLSL. Vous pouvez obtenir cet exemple et en savoir plus à partir du Kit de développement logiciel (SDK) DirectX. Pour plus d’informations sur le Kit de développement logiciel (SDK) DirectX, consultez Où se trouve le Kit de développement logiciel (SDK) DirectX ?.

Pour plus d’informations sur les effets, consultez les rubriques suivantes :

Effets et pipeline 3D

Le diagramme suivant montre le pipeline.

diagramme du pipeline 3d

Le pipeline transforme les données d’entrée en pixels de sortie qui remplissent la mémoire tampon de trame. Les données d’entrée proviennent d’objets constitués de sommets dans l’espace d’objet ou de surfaces d’ordre supérieur créées à partir de N-patches, de correctifs rectangles et de correctifs triangles. Une fois que les données d’entrée ont été tessellées, le pipeline effectue le traitement du vertex, le traitement primitif et le traitement des pixels avant de générer les couleurs finales des pixels.

Le traitement des vertex et des pixels peut être effectué par le pipeline de fonction fixe ou implémenté avec des nuanceurs programmables. La mise en place des données d’entrée, le traitement primitif et les sorties de données sont contrôlés par l’état du pipeline. Tout cela peut être intégré dans un effet. Un effet définit l’état qui contrôle le fonctionnement du pipeline. Les effets gèrent les nuanceurs programmables ainsi que l’état de fonction fixe.

Les effets peuvent enregistrer et restaurer l’état, laissant l’appareil dans le même état qu’avant l’exécution de l’effet. Les types d’état qu’un effet peut gérer sont les suivants :

  • État du nuanceur. Cela inclut la création et la suppression de nuanceurs, la définition de constantes de nuanceur, la définition de l’état du nuanceur et le rendu avec des nuanceurs.
  • Texture et état de l’échantillonneur. Cela inclut la spécification de fichiers de texture, l’initialisation des phases de texture, la création d’objets sampler et la définition de l’état de l’échantillonneur.
  • Autre état du pipeline. Cela inclut les états de définition des transformations, de l’éclairage, des matériaux et des options de rendu. Il peut s’agir de variables globales ou locales. Les variables peuvent être définies par l’effet lui-même ou par l’application.

Les effets contiennent plusieurs options de rendu appelées techniques. Chaque technique encapsule des variables globales, l’état du pipeline, l’état de texture et d’échantillonneur et l’état du nuanceur. Un style unique est implémenté dans une passe de rendu. Une ou plusieurs passes peuvent être encapsulées dans une technique. Toutes les passes et techniques peuvent être validées pour voir si le code d’effet s’exécutera sur l’appareil matériel.

Effets Enregistrer et restaurer l’état

Les effets gèrent l’état. Le mot état est utilisé très largement ici, car il inclut toutes sortes d’informations dont le pipeline a besoin pour spécifier les conditions de rendu. Cela inclut presque toutes les zones fonctionnelles du pipeline.

Les options de rendu sont contrôlées par des techniques et des passes. Une application rend un effet en définissant une technique active et en rendant une ou plusieurs passes. Tout le rendu d’un effet est effectué dans une paire correspondante d’appels de début et de fin . Lorsque Begin est appelé, un stateblock est créé et l’état de l’appareil est enregistré (sauf indication contraire). Une fois qu’une technique a rendu les passes que l’application spécifie pour le rendu, End est appelé pour mettre fin à la technique active. Le système d’effet répond en restaurant automatiquement l’état du pipeline qui a été capturé dans le bloc d’état (sauf si vous choisissez de désactiver cette fonctionnalité d’enregistrement et de restauration).

Lors de la programmation de séquences de rendu à plusieurs pass, chacune d’elles nécessitant sa propre configuration d’état, les effets peuvent réduire l’entretien nécessaire au suivi des changements d’état. Pour plus d’informations sur les états qui peuvent être enregistrés et restaurés par les effets, consultez États d’effet (Direct3D 9).

Les effets peuvent partager des paramètres

Les paramètres d’effet sont toutes les variables non statiques déclarées dans un effet. Cela peut inclure des variables globales et des annotations. Les paramètres d’effet peuvent être partagés entre différents effets en déclarant des paramètres avec le mot clé partagé, puis en créant l’effet avec un pool d’effets.

Les effets clonés utilisent le même pool d’effets que l’effet à partir duquel ils sont clonés. Le clonage d’un effet effectue une copie exacte d’un effet, y compris les variables globales, les techniques, les passes et les annotations.

Guide de programmation pour Direct3D 9