Partager via


Handles (Direct3D 9)

Les handles fournissent un moyen efficace de référencer les techniques, les passes, les annotations et les paramètres avec ID3DXEffectCompiler ou ID3DXEffect. Elles sont générées dynamiquement lorsque vous appelez des fonctions du formulaire Get[Parameter|Annotation |Fonction|Technique|Pass][ByName|BySemantic|Élément].

Lors de l’exécution d’un programme, la génération d’un handle vers le même objet plusieurs fois retourne le même handle à chaque fois. Mais ne vous fiez pas au handle qui reste constant lorsque vous exécutez votre programme plusieurs fois. Sachez également que les handles générés par différentes instances de ID3DXEffect et ID3DXEffectCompiler seront différents.

Si vous affichez les fichiers d’en-tête, vous remarquerez que les handles (D3DXHANDLEs) sont des pointeurs de chaîne techniquement.

Handles que vous passez dans des fonctions telles que GetParameter[ByName|Élément|BySemantic] ou GetAnnotation[ByName] peut se trouver sous trois formes comme suit :

  1. Handles retournés par des fonctions telles que GetParameter[ByName|Élément|BySemantic].
  2. Chaînes telles que MyVariableName, MyTechniqueName ou MyArray[0].
  3. Handle = NULL . Il y a quatre cas.
    • S’il s’agit d’une valeur de retour de méthode, la méthode n’a pas trouvé le handle.
    • Si un handle de NULL est transmis en tant que premier paramètre de GetParameter[ByName|Élément|BySemantic], la fonction retourne un paramètre de niveau supérieur. À l’inverse, si le handle n’est pasNULL, la fonction retourne un membre de structure ou un élément identifié par le handle.
    • Si un handle NULL est passé en tant que premier argument de ValidateTechnique ou le deuxième argument de IsParameterUsed, la technique actuelle est validée.
    • Si un handle NULL est transmis en tant que premier argument de FindNextValidTechnique, la recherche d’une technique valide commence à la première technique dans l’effet.

Conseil de performances Au début de votre application, effectuez une passe d’initialisation pour générer des handles à partir des chaînes. À partir de ce stade, utilisez uniquement des handles. Le passage de chaînes au lieu de handles générés est plus lent.

Exemples

Voici quelques exemples d’utilisation de Get[Parameter|Annotation |Fonction|Technique|Pass][ByName|BySemantic|Fonctions d’élément] pour générer des handles.

// Gets handle of second top-level parameter handle in the effect file
h1 = GetParameter(NULL, 1);    

// Gets handle of the third struct member of MyStruct
h2 = GetParameter("MyStruct", 2); 

// Gets handle of the third array element handle of MyArray
h3 = GetParameterElement("MyArray", 2); 

// Gets handle of first member of h1 (that is, the second top-level param)
h4 = GetParameter(h1, 0);    

// Gets handle of MyStruct.Data
h5 = GetParameterByName("MyStruct", "Data");    
// or 
h6 = GetParameterByName(NULL, "MyStruct.Data");    

// Gets handle of MyStruct.Data.SubData
h7 = GetParameterByName("MyStruct.Data", "SubData"); 
// or 
h8 = GetParameterByName(NULL, "MyStruct.Data.SubData");

// Gets handle of fifth annotation of h1 (that is, second top-level param)
h9 = GetAnnotation(h1, 4);    

// Gets handle of MyStruct's annotation, called Author
h10 = GetAnnotationByName("MyStruct", "Author");  
// or
h11 = GetParameterByName(NULL, "MyStruct@Author"); 

format d’effet