Úchyty (Direct3D 9)
Popisovače poskytují efektivní prostředky pro odkazování na techniky, průchody, poznámky a parametry s ID3DXEffectCompiler nebo ID3DXEffect. Při volání funkcí formuláře Get[Parameter| se generují dynamicky.Poznámka|Funkce|Technika |Pass][ByName|BySemantic|Element].
Při spuštění programu se při generování popisovače do stejného objektu několikrát vrátí stejný popisovač pokaždé. Ale nespoléhejte na to, aby se při spouštění programu vícekrát spoléhat na to, že se držte konstantního popisovače. Mějte také na paměti, že obslužné rutiny generované různými instancemi ID3DXEffect a ID3DXEffectCompiler budou odlišné.
Pokud zobrazíte soubory hlaviček, všimnete si, že popisovače (D3DXHANDLEs) jsou technicky řetězcové ukazatele.
Popisovače, které předáváte do funkcí, jako je GetParameter[ByName|Element|BySemantic] nebo GetAnnotation[ByName] mohou být ve třech formách následujícím způsobem:
- Popisovače vrácené funkcemi, jako je GetParameter[ByName|Element|BySemantic].
- Řetězce, jako jsou MyVariableName, MyTechniqueName nebo MyArray[0].
- Popisovač = NULL. Existují čtyři případy.
- Pokud se jedná o návratovou hodnotu metody, metoda se nepodařilo najít popisovač.
- Pokud se popisovač NULL předá jako první parametr GetParameter[ByName|Element|BySemantic], funkce vrátí parametr nejvyšší úrovně. Naopak pokud je popisovač ne-NULL, vrátí funkce člen struktury nebo prvek identifikovaný popisovačem.
- Pokud se popisovač NULL předává jako první argument ValidateTechnique nebo druhý argument IsParameterUsed, ověří se aktuální technika.
- Pokud je popisovač NULL předán jako první argument FindNextValidTechnique, hledání platné techniky začíná na první technice v efektu.
Tip výkonu Na začátku aplikace proveďte inicializační předání pro generování popisovačů z řetězců. Od tohoto okamžiku používejte pouze popisovače. Předávání řetězců místo vygenerovaných popisovačů je pomalejší.
Příklady
Tady je několik příkladů použití metody Get[Parameter|Poznámka|Funkce|Technika |Pass][ByName|BySemantic|Element] funkce pro generování popisovačů
// 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");
Související témata