Partager via


Struct Type

Utilisez la syntaxe suivante pour déclarer une structure à l’aide de HLSL.

struct Name{ [InterpolationModifier] Type[RxC] MemberName; ... };

Paramètres

Nom

Chaîne ASCII qui identifie de manière unique le nom de la structure.

[InterpolationModifier]

Modificateur facultatif qui spécifie un type d’interpolation. Pour plus d’informations, consultez Remarques.

Type[RxC]

Type de membre avec une taille de tableau de ligne (R) x colonne (C) facultative. Une structure contient au moins un élément ; s’il contient plusieurs éléments, les éléments sont tous du même type. Le nombre de lignes et de colonnes est des entiers non signés compris entre 1 et 4 inclus.

Membername

Chaîne ASCII qui identifie de manière unique le nom du membre.

Notes

Un modificateur d’interpolation peut être spécifié sur n’importe quel membre de structure ou sur un argument d’une fonction de nuanceur de pixels. Si un modificateur apparaît aux deux endroits, le modificateur extérieur (le modificateur d’argument de nuanceur de pixels) remplace le modificateur intérieur (le modificateur de structure).

Lors de la compilation d’un nuanceur ou d’un effet, le compilateur de nuanceur emballe les membres de structure en fonction des règles d’empaquetage HLSL.

Modificateurs d’interpolation introduits dans le modèle de nuanceur 4

Les sorties du nuanceur de vertex utilisées pour les entrées du nuanceur de pixels sont interpolées de manière linéaire pour obtenir des valeurs par pixel pendant la rastérisation. Pour définir la méthode d’interpolation, utilisez l’une des valeurs suivantes, qui sont prises en charge dans le modèle de nuanceur 4 ou ultérieur. Le modificateur est ignoré sur toute sortie de nuanceur de vertex qui n’est pas utilisée comme entrée de nuanceur de pixels.

Modificateur d’interpolation Description
Linéaire Interpoler entre les entrées du nuanceur ; linéaire est la valeur par défaut si aucun modificateur d’interpolation n’est spécifié.
Centroïde Interpolez entre des exemples qui se trouvent quelque part dans la zone couverte du pixel (cela peut nécessiter l’extrapolation des points de terminaison à partir d’un centre de pixels). L’échantillonnage centroïde peut améliorer l’anti-ataliasing si un pixel est partiellement couvert (même si le centre des pixels n’est pas couvert). Le modificateur centroïde doit être combiné avec le modificateur linéaire ou noperspective .
aucuneinterpolation N’interpolez pas .
noperspective N’effectuez pas de correction de perspective pendant l’interpolation. Le modificateur noperspective peut être combiné avec le modificateur centroïde .
Échantillon Disponible dans le modèle de nuanceur 4.1 et versions ultérieures Interpolez à l’emplacement de l’exemple plutôt qu’au centre des pixels. Cela entraîne l’exécution du nuanceur de pixels par exemple plutôt que par pixel. Une autre façon d’entraîner l’exécution par exemple consiste à avoir une entrée avec des SV_SampleIndex sémantiques, qui indiquent l’exemple actuel. Seules les entrées avec l’exemple spécifié (ou la saisie de SV_SampleIndex) diffèrent entre les appels de nuanceur dans le pixel, tandis que les autres entrées qui ne spécifient pas de modificateurs (par exemple, si vous mélangez des modificateurs sur différentes entrées) continuent d’interpoler au centre des pixels. L’appel du nuanceur de pixels et le test de profondeur/gabarit se produisent pour chaque échantillon couvert dans le pixel. Il s’agit parfois du suréchantillonnage. En revanche, en l’absence d’appel de fréquence d’échantillon, appelé multi-échantillonnage, le nuanceur de pixels est appelé une fois par pixel, quel que soit le nombre d’échantillons couverts, tandis que les tests de profondeur/gabarit se produisent à la fréquence de l’échantillon. Les deux modes fournissent un anti-attirail de bord équivalent. Toutefois, le suréchantillonnage offre une meilleure qualité d’ombrage en appelant le nuanceur de pixels plus fréquemment.
1. Lorsque vous utilisez un type int/uint, la seule option valide est **nointerpolation**.

Les modificateurs d’interpolation peuvent être appliqués aux membres de la structure ou aux arguments de fonction, ou aux deux.

Exemples

Voici quelques exemples de déclarations de structure.

struct struct1
{
  int    a;
}

Cette déclaration inclut un tableau.

struct struct2
{
  int    a;
  float  b;
  int4x4 iMatrix;
}

Cette déclaration inclut un modificateur d’interpolation.

struct In
{
  centroid float2 Texcoord;
};

Voir aussi

Types de données (DirectX HLSL)