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² | Mètres carrés | |
Km² | Kilomètres carrés | |
Volume | mm³ | Millimètres en cube |
Cm3 | Centimètres cubes | |
M³ | Compteurs cubes | |
km³ | Kilomètres en cube |
Rubriques connexes