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|" aufrufenAnmerkung|Funktion|Technik|Pass][ByName|BySemantic|Element].
Wenn Sie ein Programm ausführen, gibt das Generieren eines Handles für dasselbe Objekt mehrmals dasselbe Handle jedes Mal zurück. Verlassen Sie sich jedoch nicht darauf, dass der Griff konstant bleibt, wenn Sie Ihr Programm mehrmals ausführen. Beachten Sie außerdem, dass von verschiedenen Instanzen von ID3DXEffect generierte Handles und ID3DXEffectCompiler- unterschiedlich sind.
Wenn Sie die Headerdateien anzeigen, werden Sie feststellen, dass Handles (D3DXHANDLEs) technisch Zeichenfolgenzeiger sind.
Die Handles, die Sie an Funktionen wie "GetParameter[ByName|" übergebenElement|BySemantic] oder GetAnnotation[ByName] kann in drei Formen wie folgt sein:
- Handles, die von Funktionen wie GetParameter[ByName| zurückgegeben wurdenElement|BySemantic].
- Zeichenfolgen wie MyVariableName, MyTechniqueName oder MyArray[0].
- 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 ersten Parameter von GetParameter[ByName| übergeben wirdElement|BySemantic], gibt die Funktion einen Parameter der obersten Ebene zurück. Wenn das Handle dagegen nichtNULL-ist, gibt die Funktion ein Strukturelement oder element zurück, das vom 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 bei der ersten Technik im Effekt.
Leistungstipps Am Anfang der Anwendung führen Sie 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|BySemantic|Element]-Funktionen 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");
Verwandte Themen