Partager via


Liaison de données

Utilisez la collection SasHostParameterValue pour définir la collection de valeurs d’application hôte, ainsi que leur type et leurs membres, exposés aux effets. Utilisez l’annotation SasBindAddress dans un fichier d’effet pour associer un paramètre d’effet à son paramètre correspondant dans l’application hôte.

SasHostParameterValue Collection

SasHostParameterValue est défini à l’aide de la syntaxe de fichier d’effet (.fx). Bien que la syntaxe soit très similaire à la syntaxe du fichier d’effet, certaines différences existent. Par exemple, les types d’objets, tels que texture2d, les échantillonneurs et les chaînes, ne sont pas valides dans les fichiers d’effet réels, mais sont valides dans sasHostParameterValue. Une application hôte peut implémenter SasHostParameterValue de quelque manière que ce soit, à condition qu’elle soit conforme à la description ci-dessous . la définition réelle se trouve dans le fichier include de l’effet standard DXSAS ([Sdk Root]/Utilities/Source/Sas/Sas.fxh).

Notez que les tableaux dans SasHostParameterValue, tels que Lights ou Cameras, ont une longueur illimitée. Cela signifie que les effets peuvent être liés à n’importe quel index arbitraire dans ces tableaux et que les applications hôtes doivent fournir des valeurs par défaut significatives dans les cas où aucune valeur d’application ne peut être fournie.

Certains types et constantes doivent être définis dans la norme DXSAS incluent, comme indiqué dans la définition de la norme include. Cela permet aux effets de lier facilement des valeurs agrégées de SasHostParameterValue aux paramètres d’effet structuré.

SasHostParameterValue Collection Type Membre
Time float Sas.Time.Now
float Sas.Time.Last
int Sas.Time.FrameNumber
Carte d’environnement textureCUBE Sas.EnvironmentMap
Appareil photo SasCamera Sas.Camera
float4x4 Sas.Camera.WorldToView
float4x4 Sas.Camera.Projection
float2 Sas.Camera.NearFarClipping
Clair SasAmbientLight AmbientLight[ZeroOrMore];
int Sas.NumAmbientLights
SasAmbientLight DirectionalLight[ZeroOrMore];
int Sas.NumDirectionalLights
SasAmbientLight PointLight[ZeroOrMore];
int Sas.NumPointLights
SasAmbientLight SpotLight[ZeroOrMore];
int Sas.NumSpotLights
Shadow float4x4 Sas.Shadow[ZeroOrMore]. WorldToShadow
texture2D Sas.Shadow[ZeroOrMore]. ShadowMap
Squelette float4x4 Sas.Skeleton.MeshToJointToWorld[OneOrMore]
int Sas.Skeleton.NumJoints

 

Temps

Horloge virtuelle ou valeur d’heure de l’application hôte. Les membres sont les suivants :

  • Sas.Time.Now : valeur de l’horloge virtuelle de l’application hôte au moment où l’effet sera rendu.
  • Sas.Time.Last : valeur de Maintenant au rendu précédent.
  • Sas.Time.FrameNumber : valeur de compteur incrémentée une fois par image rendue.

Les effets doivent gérer correctement le fait que les valeurs de ces membres peuvent potentiellement être encapsulées pendant des temps d’exécution extrêmement longs. Now et Last peuvent avoir des valeurs très grandes.

Carte d’environnement

Carte d’environnement cubique. Les applications hôtes doivent fournir une texture de cube valide si un effet tente de se lier à Sas.EnvironmentMap.

Appareil photo

Caméra en cours de rendu. Les membres sont les suivants :

  • Sas.Camera.WorldToView : matrice composite de vue du monde pour l’appareil photo.
  • Sas.Camera.Projection : matrice de projection de la caméra.
  • Sas.Camera.NearFarClipping : valeurs des plans de découpage proches et lointains.

Clair

Une ou plusieurs lumières de scène. La collection de lumières est déclarée sous la forme d’un tableau où :

  • Couleur : couleur RVB. La valeur par défaut est (0,0,0).
  • Direction : direction de la lumière. La valeur par défaut est (0,0,0).
  • Range : distance de la lumière où les rayons lumineux n’ont aucun effet sur la scène. La valeur par défaut est 0.
  • Téta - l’angle de cône interne d’un projecteur, mesuré en radians. La valeur par défaut est 0.
  • Phi - angle cône externe d’un projecteur, mesuré en radians. La valeur par défaut est 0.

Le nombre de lumières doit être défini sur le nombre de lumières liées au tableau associé. Les effets peuvent choisir d’ignorer le nombre de lumières et de se lier à n’importe quel élément de l’un des tableaux de lumière. Par conséquent, les applications hôtes doivent fournir une liaison valide pour les éléments au-delà du nombre de lumières dans le tableau.

ZeroOrMore implique que le tableau peut avoir un nombre quelconque d’éléments.

Shadow

Mémoires tampons d’ombre qui se composent des éléments suivants :

  • WorldToShadow : tableau de matrices.
  • ShadowMap : fichier de texture 2D.

ZeroOrMore implique que le tableau peut avoir un nombre quelconque d’éléments (zéro signifie un tableau vide).

Un effet déclarerait un échantillonneur comme suit :

texture2D Shadow 
<
  string SasBindAddress = "Sas.Shadow[0].ShadowMap";
>;

sampler ShadowSampler = shadow_sampler(Shadow);

Squelette

Ensemble d’images qui composent l’objet de rendu actuel. Les exemples de cadres sont des os et des transformations. notamment :

  • MeshToJointToWorld : tableau de matrices.
  • NumJoints : nombre d’articulations dans le squelette.

OneOrMore implique que le tableau a au moins un et peut contenir n’importe quel nombre d’éléments.

La définition prend en charge les objets de maillage rigides et à apparence à l’aide du même ensemble de valeurs SasHostParameterValue Collection avec une interprétation différente.

SasBindAddress

Cette annotation est ajoutée en haut d’un fichier d’effet pour associer un paramètre d’effet à son paramètre correspondant défini dans la collection SasHostParameterValue. L’annotation est déclarée comme suit :

string SasBindAddress = "SasHostParameterValue";

Cet exemple lie la matrice de monde d’effet à la matrice MeshToJointToWorld :

float4x3 World
<
  string SasBindAddress = "Sas.Skeleton.MeshToJointToWorld[0]";
>;

Cette annotation indique à l’application hôte qu’elle doit définir la valeur de la matrice effect world à l’aide des données de la matrice MeshToJointToWorld.

La syntaxe d’annotation d’adresse de liaison a été définie pour être très similaire à la syntaxe utilisée par ID3DXEffect pour obtenir et définir des paramètres d’effet. La seule différence entre la grammaire DXSAS et les méthodes ID3DXEffect est l’ajout du jeton d’index astérisque. Voici un autre exemple utilisant l’index astérisque :

float3 LightColors[6]
<
  string SasBindAddress = "Sas.Light[*].Color";
>;

Le jeton d’index astérisque indique que tous les éléments du tableau de valeurs d’environnement hôte particulier (couleur dans ce cas) doivent être liés dans le paramètre associé. Plusieurs jetons d’index d’astérisque permettent aux effets de se lier à des sous-éléments d’un tableau de structures sans avoir à lier l’ensemble de la structure elle-même. Cet exemple montre comment lier les valeurs de couleur des six premières lumières à un paramètre d’effet.

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