Partager via


Casting et conversion

Lors du transfert de valeurs entre l’application hôte et un paramètre d’effet, les données sont écrites comme prévu lorsque le type de données source (dans l’application hôte) correspond au type de données de destination (dans le paramètre d’effet). Lorsque les types de données diffèrent, la conversion se produit lorsque les données sources sont réorganées pour s’adapter à la destination.

DXSAS définit les règles de conversion de type suivantes. Il s’agit d’un sur-ensemble des règles de conversion de type effet (.fx) et HLSL. DXSAS définit également certains modificateurs de valeur de paramètre qui peuvent affecter la valeur transférée de l’application hôte vers un paramètre lié.

Cast de type

Le tableau suivant répertorie le cast qui se produit lorsqu’un type de données est transféré vers un autre type de données :

Type de source Type de destination Comportement
float int Arrondi à zéro.
float, int bool Les valeurs non égales à 0 (basées sur une comparaison non égale à 0 (int) ou 0.0 (float) - sont considérées comme vraies, sinon la valeur est considérée comme false.
int float
bool int, float False est converti en zéro. True est converti en un.
texture1D, texture2D, texture3D, textureCUBE texture La texture de destination est traitée comme le type de texture source.
string texture1D, texture2D, texture3D, textureCUBE La valeur de chaîne est traitée comme une adresse de ressource et résolue de la même manière que l’annotation d’initialisation de paramètre. Si l’adresse de ressource ne peut pas être résolue, la cast n’est pas valide et les applications hôtes doivent retourner une erreur. Si la ressource est correctement résolue, le type de l’expression est traité comme le même type que la ressource résolue.

 

Casting de classes

En plus des règles de conversion de type décrites ci-dessus, DXSAS définit l’ensemble des règles de casting nécessaires à la conversion entre les types de classes. Les matrices de colonnes (N x 1), les matrices de ligne (1 x N) et les structures numériques sont traitées comme des vecteurs.

Les paramètres de matrice d’effet et les variables de matrice HLSL peuvent définir si la valeur est une matrice principale de ligne ou de colonne; toutefois, les API DirectX traitent toujours D3DMATRIX et D3DXMATRIX comme des lignes majeures.

Classe source Classe de destination Comportement
Scalaire Scalaire Appliquer le casting de type.
Scalaire Vecteur Répliquez la valeur source scalaire dans chaque composant du vecteur de destination après avoir appliqué le comportement de conversion et de conversion de type décrit dans Type Casting.
Scalaire Matrice Répliquez la valeur source scalaire dans chaque composant de la matrice de destination après avoir appliqué le comportement de conversion et de conversion de type décrit dans Type Casting.
Scalaire Object Cast non valide. Les applications hôtes doivent retourner une erreur.
Scalaire Structure Valide uniquement si la structure de destination contient uniquement des éléments numériques. Si elle est valide, répliquez la valeur source scalaire dans chaque composant de la structure de destination après avoir appliqué le comportement de conversion et de conversion de type décrit dans Type Casting.
Vecteur Scalaire Le scalaire de destination reçoit la valeur du premier composant du vecteur source après avoir appliqué le comportement de conversion et de conversion de type décrit dans Type Casting.
Vecteur Vecteur Cast non valide si le vecteur de destination a plus de composants que le vecteur source. Le vecteur de destination reçoit les valeurs les plus à gauche du vecteur source après avoir appliqué le comportement de conversion et de conversion de type décrit dans Type Casting. Les composants les plus à droite restants du vecteur source sont perdus.
Vecteur Matrix Cast non valide, sauf si le vecteur source a le même nombre de composants que la matrice de destination. Si le cast est valide, le comportement du cast de vecteur à vecteur est ensuite appliqué.
Vecteur Object Cast non valide. Les applications hôtes doivent retourner une erreur.
Vecteur Structure Valide uniquement si la structure de destination contient uniquement des éléments numériques et ne contient pas plus d’éléments que le vecteur source a des composants. Les éléments de la structure de destination reçoivent les composants les plus à gauche du vecteur source après avoir appliqué le comportement de conversion et de conversion de type décrit dans Casting de type.
Matrice Scalaire Le scalaire de destination reçoit la valeur de la valeur la plus à gauche supérieure de la matrice source après avoir appliqué le comportement de conversion et de conversion de type décrit dans Type Casting.
Matrice Vecteur Cast non valide, sauf si la matrice source a le même nombre de composants que le vecteur de destination. Si le cast est valide, le comportement du cast de vecteur à vecteur ci-dessus est ensuite appliqué.
Matrice Matrice Cast non valide si la matrice de destination a plus de composants que la matrice source. La matrice de destination reçoit les valeurs les plus en haut à gauche de la matrice source après avoir appliqué le comportement de conversion et de conversion de type décrit dans Type Casting. Les autres composants les plus à droite de la matrice source sont perdus.
Matrix Object Cast non valide. Les applications hôtes doivent retourner une erreur.
Matrice Structure La taille de la structure doit être égale à la taille de la matrice et tous les composants de la structure doivent être numériques.
Object Scalaire Cast non valide. Les applications hôtes doivent retourner une erreur.
Object Vecteur Cast non valide. Les applications hôtes doivent retourner une erreur.
Object Matrice Cast non valide. Les applications hôtes doivent retourner une erreur.
Object Object Valide si les types des objets sont identiques et conformément au comportement défini dans Type Casting.
Structure Scalaire Valide si la structure source contient au moins un membre numérique. Le scalaire de destination reçoit la valeur du premier membre numérique de la structure source après avoir appliqué le comportement de conversion et de conversion de type décrit dans Type Casting.
Structure Vecteur La structure source doit avoir au moins la taille du vecteur. Les premiers composants doivent être numériques jusqu’à la taille du vecteur de destination.
Structure Matrice La structure source doit avoir au moins la taille du vecteur. Les premiers composants doivent être numériques jusqu’à la taille du vecteur de destination.
Structure Structure La structure de destination ne doit pas être supérieure à la structure source. Un cast valide doit exister entre tous les composants source et de destination respectifs.

 

Modificateurs de valeur de paramètre

Les annotations de modificateur de paramètre ajoutent des informations supplémentaires à un paramètre afin que les données du paramètre puissent être interprétées correctement. Pour instance, un vecteur peut avoir besoin d’être exprimé avec des données normalisées ou une longueur peut être mesurée en pouces. Les annotations du modificateur de valeur de paramètre expriment ces informations supplémentaires afin que les applications hôtes puissent transformer les valeurs correctement lorsque des données sont transférées vers un paramètre d’effet.

Voici les modificateurs de paramètres :

Annotations du modificateur de valeur de paramètre Description
SasNormalize Spécifiez si un vecteur est normalisé ou non.
SasUnits Spécifiez les unités de mesure d’un paramètre.

 

SasNormalize

L’annotation SasNormalize indique que le paramètre associé doit être une valeur normalisée chaque fois qu’il est affecté. Cette annotation affecte uniquement les paramètres float2, float3 et float4.

string SasNormalize = "Value";

où Value a la valeur True ou False.

Voici un exemple :

float3 UpNormal
<
  bool SasNormalize = "True";
>;

SasUnits

Les données du paramètre d’effet se situent dans les unités suivantes :

string SasUnits = "Value";

où Value est l’un des éléments suivants :

Type de mesure Valeur Description
Aucune unité chaîne vide Aucune unité
Distance MM Millimètres
cm Centimètres
m Mètres
km Kilomètres
Angle rad Radians
Temps ms Millisecondes
s Secondes
minute(s) Minutes
heure(s) Heures
Vitesse linéaire mm/s Millimètres par seconde
cm/s Centimètres par seconde
m/s Compteurs par seconde
m/h Compteurs par heure
km/h Kilomètres par heure
Accélération linéaire mm/s² Millimètres par seconde carré
cm/s² Centimètres par seconde carré
m/s² Mètres par seconde au carré
m/hr² Mètres par heure au carré
km/h² Kilomètres par heure au carré
vitesse Angular rad/s Radians par seconde
accélération Angular rad/s² Radians par seconde carré
Domaine mm² Millimètres carrés
cm² Centimètres carrés
Mètres carrés
Km² Kilomètres carrés
Volume mm³ Millimètres en cube
Cm3 Centimètres cubes
Compteurs cubes
km³ Kilomètres en cube

 

Informations de référence sur les annotations et la sémantique standard DirectX