Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Дескриптора предоставляют эффективные средства для ссылки на методы, передачи, заметки и параметры с ID3DXEffectCompiler или ID3DXEffect. Они создаются динамически при вызове функций формы Get[Parameter|Заметка|Функция |Метод|Pass][ByName|BySemantic|Элемент].
При выполнении программы создание дескриптора для одного объекта несколько раз будет возвращать один и тот же дескриптор каждый раз. Но не полагаться на дескриптор постоянной при выполнении программы несколько раз. Также следует помнить, что дескриптор, созданный различными экземплярами ID3DXEffect и ID3DXEffectCompiler будет отличаться.
Если вы просматриваете файлы заголовков, вы заметите, что дескрипторы (D3DXHANDLEs) являются технически строковыми указателями.
Дескриптор, который передается в такие функции, как GetParameter[ByName|Элемент |BySemantic] или GetAnnotation[ByName] могут быть в трех формах следующим образом:
- Дескриптор, возвращаемый функциями, такими как GetParameter[ByName|Элемент |BySemantic].
- Строки, такие как MyVariableName, MyTechniqueName или MyArray[0].
- Handle = NULL. Существует четыре случая.
- Если это возвращаемое значение метода, метод не удалось найти дескриптор.
- Если дескриптор NULL передается в качестве первого параметра GetParameter[ByName|Элемент |BySemantic], функция возвращает параметр верхнего уровня. И наоборот, если дескриптор неNULL, функция возвращает элемент структуры или элемент, определенный дескриптором.
- Если дескриптор null передается в качестве первого аргумента ValidateTechnique или второго аргумента IsParameterUsed, текущий метод проверяется.
- Если дескриптор NULL передается в качестве первого аргумента FindNextValidTechnique, поиск допустимого метода начинается с первого метода в эффекте.
Совет по производительности в начале приложения выполните инициализацию, чтобы создать дескриптор из строк. С этого момента используйте только дескрипторы. Передача строк вместо созданных дескрипторов медленнее.
Примеры
Ниже приведены некоторые примеры использования get[Parameter|Заметка|Функция |Метод|Pass][ByName|BySemantic|Элементы] функции для создания дескрипторов.
// 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");
Связанные разделы