Rendu d’un effet (Direct3D 11)
Un effet peut être utilisé pour stocker des informations ou pour effectuer un rendu à l’aide d’un groupe d’états. Chaque technique spécifie un ensemble de nuanceurs de vertex, de nuanceurs de coque, de nuanceurs de domaine, de nuanceurs de géométrie, de nuanceurs de pixels, de nuanceurs de calcul, d’état du nuanceur, d’échantillonneur et d’état de texture, d’état de vue d’accès non ordonné et d’autres états de pipeline. Ainsi, une fois que vous avez organisé l’état dans un effet, vous pouvez encapsuler l’effet de rendu qui résulte de cet état en créant et en rendant l’effet.
Il existe quelques étapes pour préparer un effet pour le rendu. La première est la compilation, qui vérifie le code HLSL comme le code par rapport à la syntaxe du langage HLSL et aux règles d’infrastructure d’effet. Vous pouvez compiler un effet à partir de votre application à l’aide d’appels d’API ou vous pouvez compiler un effet hors connexion à l’aide de l’utilitaire de compilateur d’effetfxc.exe. Une fois votre effet correctement compilé, créez-le en appelant un ensemble d’API différent (mais très similaire).
Une fois l’effet créé, il reste deux étapes pour l’utiliser. Tout d’abord, vous devez initialiser les valeurs d’état d’effet (valeurs des variables d’effet) à l’aide d’un certain nombre de méthodes pour définir l’état si elles ne sont pas initialisées dans HLSL. Pour certaines variables, cette opération peut être effectuée une seule fois lorsqu’un effet est créé ; d’autres doivent être mis à jour chaque fois que votre application appelle la boucle de rendu. Une fois les variables d’effet définies, vous indiquez au runtime d’afficher l’effet en appliquant une technique. Ces sujets sont tous abordés plus en détail ci-dessous.
Naturellement, il existe des considérations relatives aux performances pour l’utilisation des effets. Ces considérations sont en grande partie les mêmes si vous n’utilisez pas d’effet. Des éléments tels que la réduction du nombre de changements d’état et l’organisation des variables par fréquence de mise à jour. Ces tactiques sont utilisées pour réduire la quantité de données qui doivent être envoyées de l’UC vers le GPU, et donc réduire les problèmes de synchronisation potentiels.
Contenu de cette section
Rubrique | Description |
---|---|
Compiler un effet |
Une fois qu’un effet a été créé, l’étape suivante consiste à compiler le code pour case activée pour les problèmes de syntaxe. |
Créer un effet |
Un effet est créé en chargeant le bytecode d’effet compilé dans l’infrastructure des effets. Contrairement aux effets 10, l’effet doit être compilé avant de créer l’effet. Les effets chargés en mémoire peuvent être créés en appelant D3DX11CreateEffectFromMemory. |
Définir l’état de l’effet |
Certaines constantes d’effet doivent uniquement être initialisées. Une fois initialisé, l’état d’effet est défini sur l’appareil pour l’ensemble de la boucle de rendu. D’autres variables doivent être mises à jour chaque fois que la boucle de rendu est appelée. Le code de base pour la définition des variables d’effet est illustré ci-dessous, pour chacun des types de variables. |
Appliquer une technique |
Une fois les constantes, les textures et l’état du nuanceur déclarés et initialisés, il ne reste plus qu’à définir l’état d’effet dans l’appareil. |