Identificadores (Direct3D 9)
Los identificadores proporcionan un medio eficaz para hacer referencia a las técnicas, pasos, anotaciones y parámetros con ID3DXEffectCompiler o ID3DXEffect. Se generan dinámicamente cuando se llama a funciones del formulario Get[Parameter| Anotación| Función | Técnica | Pass][ByName| BySemantic| Elemento].
Mientras se ejecuta un programa, la generación de un identificador para el mismo objeto varias veces devolverá el mismo identificador cada vez. Pero no confíe en el identificador que permanece constante al ejecutar el programa varias veces. Tenga en cuenta también que los identificadores generados por diferentes instancias de ID3DXEffect y ID3DXEffectCompiler serán diferentes.
Si ve los archivos de encabezado, observará que los identificadores (D3DXHANDLEs) son punteros de cadena técnicamente.
Identificadores que se pasan a funciones como GetParameter[ByName| Elemento | BySemantic] o GetAnnotation[ByName] pueden tener tres formas de la siguiente manera:
- Identificadores devueltos por funciones como GetParameter[ByName| Elemento | BySemantic].
- Cadenas como MyVariableName, MyTechniqueName o MyArray[0].
- Handle = NULL. Hay cuatro casos.
- Si es un valor devuelto de método, el método no encontró el identificador.
- Si se pasa un identificador NULL como primer parámetro de GetParameter[ByName| Elemento | BySemantic], la función devuelve un parámetro de nivel superior. Por el contrario, si el identificador no es NULL, la función devuelve un miembro de estructura o un elemento identificado por el identificador.
- Si se pasa un identificador NULL como primer argumento de ValidateTechnique o el segundo argumento de IsParameterUsed, se valida la técnica actual.
- Si se pasa un identificador NULL como primer argumento de FindNextValidTechnique, la búsqueda de una técnica válida comienza en la primera técnica del efecto.
Sugerencia de rendimiento Al principio de la aplicación, realice un paso de inicialización para generar identificadores a partir de las cadenas. Desde ese momento, use solo identificadores. Pasar cadenas en lugar de identificadores generados es más lento.
Estos son algunos ejemplos con Get[Parameter| Anotación| Función | Técnica | Pass][ByName| BySemantic| Funciones element] para generar identificadores.
// 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");