Partilhar via


Identificadores (Direct3D 9)

Os identificadores fornecem um meio eficiente para referenciar as técnicas, passes, 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|PorSemântica|Elemento].

Ao executar um programa, gerar um identificador para o mesmo objeto várias vezes retornará o mesmo identificador de volta todas as vezes. Mas não confie que o identificador permaneça constante quando você executa 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ê visualizar os arquivos de cabeçalho, notará 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 ser em três formas da seguinte forma:

  1. Identificadores que foram retornados por funções como GetParameter[ByName|Elemento|PorSemântica].
  2. Strings como MyVariableName, MyTechniqueName ou MyArray[0].
  3. Handle = NULL. Há quatro casos.
    • Se for um valor de retorno de método, o método falhou ao localizar o identificador.
    • Se um identificador de 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 forNULL, a função retornará um membro da estrutura ou elemento identificado pelo identificador.
    • Se um identificador de NULL for passado como o primeiro argumento de ValidateTechnique ou o segundo argumento de IsParameterUsed, a técnica atual será validada.
    • Se um identificador de NULL for passado como o primeiro argumento de FindNextValidTechnique, a busca por uma técnica válida começará na primeira técnica do efeito.

Dica de desempenho No início do seu aplicativo, execute um passo de inicialização para gerar identificadores a partir das cadeias de caracteres. A partir daí, use apenas alças. A passagem de cadeias de caracteres em vez de alças geradas é mais lenta.

Exemplos

Aqui estão alguns exemplos usando o Get[Parameter|Anotação|Função|Técnica|Pass][ByName|PorSemântica|Element] 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