Identificadores (Direct3D 9)

Os identificadores fornecem um meio eficiente para referenciar técnicas, passagens, anotações e parâmetros com ID3DXEffectCompiler ou ID3DXEffect. Eles são gerados dinamicamente quando você chama funções do formulário Get[Parameter| Anotação| Função | Técnica| Pass][ByName| BySemantic| Elemento].

Durante a execução de um programa, gerar um identificador para o mesmo objeto várias vezes retornará o mesmo identificador sempre. Mas não dependa do identificador permanecer constante quando você executar seu programa várias vezes. Lembre-se também de que os identificadores gerados por diferentes instâncias de ID3DXEffect e ID3DXEffectCompiler serão diferentes.

Se você exibir os arquivos de cabeçalho, observará que os identificadores (D3DXHANDLEs) são tecnicamente ponteiros de cadeia de caracteres.

Os identificadores que você passa para funções como GetParameter[ByName| Elemento | BySemantic] ou GetAnnotation[ByName] podem estar em três formas da seguinte maneira:

  1. Identificadores que foram retornados por funções como GetParameter[ByName| Elemento | BySemantic].
  2. Cadeias de caracteres como MyVariableName, MyTechniqueName ou MyArray[0].
  3. Handle = NULL. Há quatro casos.
    • Se for um valor retornado do método, o método não conseguiu localizar o identificador.
    • Se um identificador NULL for passado como o primeiro parâmetro de GetParameter[ByName| Elemento | BySemantic], a função retorna um parâmetro de nível superior. Por outro lado, se o identificador não for NULL, a função retornará um membro de estrutura ou elemento identificado pelo identificador.
    • Se um identificador NULL for passado como o primeiro argumento de ValidateTechnique ou o segundo argumento de IsParameterUsed, a técnica atual será validada.
    • Se um identificador NULL for passado como o primeiro argumento de FindNextValidTechnique, a pesquisa por uma técnica válida começará na primeira técnica no efeito.

Dica de desempenho No início do aplicativo, execute uma passagem de inicialização para gerar identificadores das cadeias de caracteres. Desse ponto em diante, use apenas identificadores. Passar cadeias de caracteres em vez de identificadores gerados é mais lento.

Exemplos

Aqui estão alguns exemplos usando Get[Parameter| Anotação| Função | Técnica| Pass][ByName| BySemantic| Elemento] funções para gerar 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"); 

Formato de efeito