Cast 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éorganisées pour s’adapter à la destination.
DXSAS définit les règles de conversion de type suivantes. Il s’agit d’un sur-ensemble de l’effet (. FX) et des règles de conversion de type HLSL. DXSAS définit également des 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 qui ne sont pas égales à 0, basées sur une comparaison « différent de » à 0 (int) ou 0,0 (float), sont considérées comme étant vraies ; sinon, la valeur est considérée comme false. |
| int | float | |
| bool | int, float | La valeur false est convertie 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 façon que l' annotation d’initialisation de paramètre. Si l’adresse de la ressource ne peut pas être résolue, le 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. |
Cast de classe
Outre les règles de conversion de type décrites ci-dessus, DXSAS définit l’ensemble des règles de cast nécessaires à la conversion entre les types de classe. Les matrices de colonnes (N x 1), les matrices de lignes (1 x N) et les structures numériques sont traitées comme des vecteurs.
Les paramètres de matrice Effect et les variables de matrice HLSL peuvent définir si la valeur est une matrice ligne-principale ou colonne-principale ; Toutefois, les API DirectX traitent toujours D3DMATRIX et D3DXMATRIX en ligne-major.
| Classe source | Classe de destination | Comportement |
|---|---|---|
| Scalaire | Scalaire | Appliquez la conversion de type. |
| Scalaire | Vecteur | Répliquez la valeur source scalaire dans chaque composant du vecteur de destination après avoir appliqué le cast de type et le comportement de conversion décrits dans type casting. |
| Scalaire | Matrix | Répliquez la valeur source scalaire dans chaque composant de la matrice de destination après avoir appliqué le cast de type et le comportement de conversion décrits 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. S’il est valide, répliquez la valeur source scalaire dans chaque composant de la structure de destination après avoir appliqué le cast de type et le comportement de conversion décrits dans type casting. |
| Vecteur | Scalaire | Le scalaire de destination reçoit la valeur du premier composant du vecteur source après avoir appliqué le cast de type et le comportement de conversion décrits dans la conversion de type. |
| 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 cast de type et le comportement de conversion décrits dans la conversion de type. Les composants restants situés le plus à droite 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 de vector-to-vector cast 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 ne possède des composants. Les éléments de la structure de destination reçoivent les composants les plus à gauche du vecteur source après l’application du cast de type et du comportement de conversion décrits dans type casting. |
| Matrix | Scalaire | L’scalaire de destination reçoit la valeur de la valeur supérieure gauche de la matrice source après avoir appliqué le cast de type et le comportement de conversion décrits dans type casting. |
| Matrix | 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 de la conversion de vecteur à vecteur ci-dessus est ensuite appliqué. |
| Matrix | Matrix | Cast non valide si la matrice de destination a plus de composants que la matrice source. La matrice de destination reçoit les valeurs supérieures à gauche de la matrice source après avoir appliqué le cast de type et le comportement de conversion décrits dans la conversion de type. Les composants inférieurs situés en bas à droite de la matrice source sont perdus. |
| Matrix | Object | Cast non valide. Les applications hôtes doivent retourner une erreur. |
| Matrix | 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 | Matrix | 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 le cast de type. |
| 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 cast de type et le comportement de conversion décrits dans la conversion de type. |
| Structure | Vecteur | La structure source doit être au moins égale à la taille du vecteur. Les premiers composants doivent être numériques jusqu’à la taille du vecteur de destination. |
| Structure | Matrix | La structure source doit être au moins égale à 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. Par exemple, un vecteur peut devoir être exprimé avec des données normalisées ou une longueur peut être mesurée en pouces. Les annotations de modificateur de valeur de paramètre expriment ces informations supplémentaires afin que les applications hôtes puissent transformer les valeurs correctement lorsque les données sont transférées à un paramètre d’effet.
Il s’agit des modificateurs de paramètres suivants :
| Annotations de 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’elle est assignée. Cette annotation affecte uniquement les paramètres float2, float3 et float4.
string SasNormalize = "Value";
où la valeur est true ou false.
Voici un exemple :
float3 UpNormal
<
bool SasNormalize = "True";
>;
SasUnits
Les données des paramètres d’effet sont dans les unités suivantes :
string SasUnits = "Value";
où la valeur est l’une des suivantes :
| Type de mesure | Valeur | Description |
|---|---|---|
| Aucune unité | chaîne vide | Aucune unité |
| Distance | MM | Millimètres |
| cm | Centimètres | |
| m | Mètres | |
| kilomètres | Kilomètres | |
| Angle | rad | Radians |
| Temps | ms | Millisecondes |
| Archiv | Secondes | |
| minute(s) | Minutes | |
| heure(s) | Heures | |
| Vélocité linéaire | mm/s | Millimètres par seconde |
| cm/s | Centimètres par seconde | |
| m/s | Mètres par seconde | |
| m/h | Mètres par heure | |
| km/h | Kilomètres par heure | |
| Accélération linéaire | mm/s ² | Millimètres par seconde au carré |
| cm/s ² | Centimètres par seconde au carré | |
| m/s ² | Mètres par seconde au carré | |
| m/h ² | Mètres par heure au carré | |
| km/h ² | Kilomètres par heure au carré | |
| Vélocité angulaire | rad/s | Radians par seconde |
| Accélération angulaire | rad/s ² | Radians par seconde au carré |
| Domaine | mm ² | Millimètres au carré |
| cm ² | Centimètres au carré | |
| grammes | Mètres carrés | |
| km² | Kilomètres carrés | |
| Volume | mm ³ | Millimètres cube |
| ³ | Cubes en centimètres | |
| Cube | Compteurs cubes | |
| km ³ | Kilomètres cubes |