Stockage de variables et de types pour les nuanceurs à partager

L’objet de liaison de classes est un espace de noms pour les variables et les types que plusieurs nuanceurs peuvent partager. Lorsque vous passez un objet de liaison de classes dans un appel pour créer un nuanceur, le runtime rassemble une liste de variables et de types qui peuvent implémenter chaque interface dans le nuanceur et stocke les noms de ces variables et types dans l’objet de liaison de classes.

Par conséquent, lorsque vous appelez la méthode ID3D11ClassLinkage::GetClassInstance pour générer des instances de classe à partir de l’objet de liaison de classes, le runtime peut récupérer la variable ou le type qui correspond au nom fourni dans chaque nuanceur (si ce nom est valide pour un nuanceur donné) et qui est créé avec l’objet de liaison de classes donné.

Par exemple, supposons que vous ayez une classe Light qui implémente une interface Color et que vous utilisez cette classe dans votre nuanceur de vertex et votre nuanceur de pixels. Lorsque vous créez un nuanceur (par exemple, en appelant ID3D11Device::CreatePixelShader), le runtime détermine que le type de classe Light est disponible dans les nuanceurs de vertex et de pixels et ajoute le type de classe Light à l’objet de liaison de classes. Vous pouvez ensuite créer un instance Light à l’emplacement souhaité, lier les ressources des deux nuanceurs et passer cette instance dans le tableau d’instances de classes lorsque vous définissez le nuanceur sur l’appareil (par exemple, en appelant ID3D11DeviceContext::P SSetShader). Le runtime effectue ensuite la séquence suivante :

  1. Vérifie que le instance a été créé avec le même objet de liaison de classes.
  2. Vérifie que le type de classe Light est availabe dans les nuanceurs de vertex et de pixels.
  3. Sélectionne les tables de fonctions appropriées, qui peuvent être différentes pour les nuanceurs de vertex et de pixels.
  4. Envoie les décalages que le instance fournit.

L’objet de liaison de classes est finalement un dépôt de noms de type et de variables. Le nombre maximal de noms disponibles pour chaque élément (type et variable) est de 64 Ko. Plus les noms de type et de variable sont longs, plus l’exigence de stockage est élevée pour les métadonnées d’interface stockées par nuanceur. En effet, le runtime doit stocker un mappage pour ces noms pour chaque nuanceur.

Liaison dynamique

Liaison dynamique