Udostępnij przez


Uchwyty (Direct3D 9)

Obsługa zapewnia wydajny sposób odwoływania się do technik, przekazywania, adnotacji i parametrów za pomocą ID3DXEffectCompiler lub ID3DXEffect. Są one generowane dynamicznie podczas wywoływania funkcji formularza Get[Parameter|Adnotacja|Funkcja|Technika|Pass][ByName|BySemantic|Element].

Podczas uruchamiania programu generowanie dojścia do tego samego obiektu wiele razy zwróci ten sam uchwyt za każdym razem. Nie polegaj jednak na utrzymaniu stałej obsługi podczas wielokrotnego uruchamiania programu. Należy również pamiętać, że obsługa wygenerowana przez różne wystąpienia ID3DXEffect i ID3DXEffectCompiler będzie inna.

Jeśli wyświetlisz pliki nagłówka, zauważysz, że dojścia (D3DXHANDLEs) są technicznie wskaźnikami ciągów.

Dojścia przekazywane do funkcji, takich jak GetParameter[ByName|Element |BySemantic] lub GetAnnotation[ByName] może mieć trzy formy w następujący sposób:

  1. Dojścia zwracane przez funkcje, takie jak GetParameter[ByName|Element |BySemantic].
  2. Ciągi, takie jak MyVariableName, MyTechniqueName lub MyArray[0].
  3. Handle = null. Istnieją cztery przypadki.
    • Jeśli jest to wartość zwracana przez metodę, metoda nie może odnaleźć dojścia.
    • Jeśli dojście null jest przekazywane jako pierwszy parametr GetParameter[ByName|Element |BySemantic] funkcja zwraca parametr najwyższego poziomu. Z drugiej strony, jeśli dojście nie jestnull, funkcja zwraca składową struktury lub element zidentyfikowany przez uchwyt.
    • Jeśli dojście null jest przekazywane jako pierwszy argument ValidateTechnique lub drugi argument IsParameterUsed, bieżąca technika jest weryfikowana.
    • Jeśli dojście wartości null jest przekazywane jako pierwszy argument metody FindNextValidTechnique, wyszukiwanie prawidłowej techniki rozpoczyna się od pierwszej techniki w efekcie.

Porada dotycząca wydajności Na początku aplikacji wykonaj przekazywanie inicjowania, aby wygenerować dojścia z ciągów. Od tego momentu użyj tylko dojść. Przekazywanie ciągów zamiast wygenerowanych dojść jest wolniejsze.

Przykłady

Oto kilka przykładów korzystających z polecenia Get[Parameter|Adnotacja|Funkcja|Technika|Pass][ByName|BySemantic|Element] funkcje do generowania dojść.

// 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 efektu