Handles (Direct3D 9)

Handles bieten ein effizientes Mittel zum Verweisen auf die Techniken, Läufe, Anmerkungen und Parameter mit ID3DXEffectCompiler oder ID3DXEffect. Sie werden dynamisch generiert, wenn Sie Funktionen des Formulars Get[Parameter| Anmerkung| Funktion| Technik| Pass][ByName| VonSemantic| Element].

Wenn Sie beim Ausführen eines Programms mehrmals ein Handle für dasselbe Objekt generieren, wird jedes Mal derselbe Handle zurückgegeben. Verlassen Sie sich jedoch nicht darauf, dass der Handle konstant bleibt, wenn Sie Ihr Programm mehrmals ausführen. Beachten Sie auch, dass sich die von verschiedenen Instanzen von ID3DXEffect und ID3DXEffectCompiler generierten Handles unterscheiden.

Wenn Sie die Headerdateien anzeigen, werden Sie feststellen, dass Handles (D3DXHANDLEs) technisch Zeichenfolgenzeiger sind.

Die Handles, die Sie an Funktionen wie GetParameter[ByName| Element| BySemantic] oder GetAnnotation[ByName] kann in drei Formen wie folgt aussehen:

  1. Handles, die von Funktionen wie GetParameter[ByName| zurückgegeben wurden Element| VonSemantic].
  2. Zeichenfolgen wie MyVariableName, MyTechniqueName oder MyArray[0].
  3. Handle = NULL. Es gibt vier Fälle.
    • Wenn es sich um einen Methodenrückgabewert handelt, konnte die Methode das Handle nicht finden.
    • Wenn ein NULL-Handle als erster Parameter von GetParameter[ByName| Element| BySemantic], gibt die Funktion einen Parameter auf oberster Ebene zurück. Wenn das Handle dagegen nicht NULL ist, gibt die Funktion ein Strukturelement oder -element zurück, das durch das Handle identifiziert wird.
    • Wenn ein NULL-Handle als erstes Argument von ValidateTechnique oder das zweite Argument von IsParameterUsed übergeben wird, wird die aktuelle Technik überprüft.
    • Wenn ein NULL-Handle als erstes Argument von FindNextValidTechnique übergeben wird, beginnt die Suche nach einer gültigen Technik mit der ersten Technik im Effekt.

Leistungstipp Führen Sie am Anfang Ihrer Anwendung einen Initialisierungsdurchlauf aus, um Handles aus den Zeichenfolgen zu generieren. Verwenden Sie ab diesem Zeitpunkt nur Handles. Das Übergeben von Zeichenfolgen anstelle von generierten Handles ist langsamer.

Beispiele

Hier sind einige Beispiele für die Verwendung von Get[Parameter| Anmerkung| Funktion| Technik| Pass][ByName| VonSemantic| Elementfunktionen zum Generieren von 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"); 

Effektformat