Compartilhar via


Separando declarações e código para sombreadores de vértice

No DirectX 9.0, as declarações e o código de um sombreador de vértice não são mais associados quando o sombreador de vértice é criado. Um driver de versão do DirectX 9.0 para um dispositivo que dá suporte a sombreadores de vértice deve lidar com criações separadas e o gerenciamento de objetos de declaração e código. No entanto, esse driver DirectX 9.0 ainda deve ser capaz de gerenciar um objeto de sombreador de vértice, que combina declarações e código, porque o runtime do DirectX 8.0 pode solicitar a criação desse objeto de sombreador de vértice. Para obter mais informações, consulte Sombreadores de vértice.

O runtime do DirectX 9.0 atribui identificadores de pools de identificadores separados a objetos de declaração e de código. O driver DirectX 9.0 deve armazenar esses identificadores em matrizes separadas. Assim como o sombreador de vértice manipula o espaço no DirectX 8.0, o DirectX 9.0 compartilha o espaço de identificador de declaração do sombreador de vértice com códigos FVF (formato de vértice flexível). Definir o bit zero do identificador indica uma declaração de sombreador de vértice, caso contrário, um código FVF. Para obter mais informações, consulte o rasterizador de referência (código de exemplo refrast.cpp ).

O driver DirectX 9.0 recebe uma declaração de sombreador de vértice quando processa o código de operação D3DDP2OP_CREATEVERTEXSHADERDECL em sua função D3dDrawPrimitives2 . Uma estrutura D3DHAL_DP2CREATEVERTEXSHADERDECL e uma matriz de estruturas D3DVERTEXELEMENT9 que definem os elementos de vértice que compõem a declaração de sombreador seguem o código de operação no fluxo de comandos. Se o driver DirectX 9.0 for implementado para processar elementos de vértice da declaração de sombreador, ele deverá dar suporte a todos os usos possíveis dos dados de vértice. Ou seja, ele deve dar suporte a todos os tipos D3DDECLUSAGE, juntamente com vários significados (valores de índice de uso) para esses tipos. Para obter mais informações sobre D3DVERTEXELEMENT9 e D3DDECLUSAGE, consulte a documentação mais recente do SDK do DirectX.

O driver DirectX 9.0 recebe código de sombreador de vértice quando processa o código de operação D3DDP2OP_CREATEVERTEXSHADERFUNC. Uma estrutura D3DHAL_DP2CREATEVERTEXSHADERFUNC e o código do sombreador de vértice seguem o código de operação no fluxo de comandos. Para obter mais informações sobre o formato do código de sombreador individual e os tokens que compõem cada código de sombreador, consulte Códigos de sombreador de driver Direct3D.

O driver DirectX 9.0 processa os códigos de operação D3DDP2OP_SETVERTEXSHADERDECL e D3DDP2OP_SETVERTEXSHADERFUNC para tornar a declaração de sombreador de vértice específica e o código atuais no assembler de sombreador de vértice. O driver processa os códigos de operação D3DDP2OP_DELETEVERTEXSHADERDECL e D3DDP2OP_DELETEVERTEXSHADERFUNC para remover essas declarações de sombreador de vértice e o código do assembler de sombreador de vértice. Para cada um desses códigos de operações, uma estrutura de D3DHAL_DP2VERTEXSHADER segue no fluxo de comandos. Essa estrutura contém apenas um membro que identifica o identificador para a declaração ou código a ser definido ou excluído.