Buffers de vértice (Direct3D 9)
Os buffers de vértice, representados pela interfaceIDirect3DVertexBuffer9, são buffers de memória que contêm dados de vértice. Os buffers de vértice podem conter qualquer tipo de vértice - transformado ou não transformado, iluminado ou apagado - que pode ser renderizado através do uso dos métodos de renderização na interfaceIDirect3DDevice9 do. Você pode processar os vértices em um buffer de vértice para executar operações como transformação, iluminação ou geração de sinalizadores de recorte. A transformação é sempre realizada.
A flexibilidade dos buffers de vértices os torna pontos de parada ideais para reutilizar a geometria transformada. Você pode criar um único buffer de vértice, transformar, iluminar e cortar os vértices nele e renderizar o modelo na cena quantas vezes forem necessárias sem retransformá-lo, mesmo com alterações de estado de renderização intercaladas. Isso é útil ao renderizar modelos que usam várias texturas: a geometria é transformada apenas uma vez e, em seguida, partes dela podem ser renderizadas conforme necessário, intercaladas com as alterações de textura necessárias. As alterações de estado de renderização feitas depois que os vértices são processados entram em vigor na próxima vez que os vértices forem processados.
Descrição
Um buffer de vértice é descrito em termos de suas capacidades: se ele pode existir apenas na memória do sistema, se ele é usado apenas para operações de gravação, e o tipo e número de vértices que ele pode conter. Todas essas características são mantidas em uma estrutura D3DVERTEXBUFFER_DESC.
O membro Format é definido como D3DFMT_VERTEXDATA para indicar que este é um buffer de vértice. O Tipo identifica o tipo de recurso do buffer de vértice. O membro da estrutura de uso contém sinalizadores de capacidade geral. O sinalizador D3DUSAGE_SOFTWAREPROCESSING indica que o buffer de vértice deve ser usado com o processamento de vértice de software. A presença do sinalizador D3DUSAGE_WRITEONLY em Uso indica que a memória de buffer de vértice é usada apenas para operações de gravação. Isso libera o driver para colocar os dados de vértice no melhor local de memória para permitir o processamento e renderização rápidos. Se o sinalizador D3DUSAGE_WRITEONLY não for usado, é menos provável que o driver coloque os dados em um local ineficiente para operações de leitura. Isso sacrifica alguma velocidade de processamento e renderização. Se esse sinalizador não for especificado, presume-se que os aplicativos executam operações de leitura e gravação nos dados dentro do buffer de vértice.
Pool especifica a classe de memória alocada para o buffer de vértice. O sinalizador D3DPOOL_SYSTEMMEM indica que o sistema criou o buffer de vértice na memória do sistema.
O membro Tamanho armazena o tamanho, em bytes, dos dados do buffer de vértice. O membro FVF contém uma combinação de D3DFVF que identificam o tipo de vértices que o buffer contém.
Pool de memória e uso
Você pode criar buffers de vértice com o método IDirect3DDevice9::CreateVertexBuffer, que usa parâmetros de pool (classe de memória) e uso. IDirect3DDevice9::CreateVertexBuffer também pode ser criado com um código FVF especificado para uso no processamento de vértices de função fixa ou como a saída de vértices de processo. Para obter detalhes, consulte FVF Vertex Buffers (Direct3D 9).
O sinalizador D3DUSAGE_SOFTWAREPROCESSING pode ser definido quando o processamento de vértice de modo misto ou software (D3DCREATE_MIXED_VERTEXPROCESSING / D3DCREATE_SOFTWARE_VERTEXPROCESSING) está ativado para esse dispositivo. D3DUSAGE_SOFTWAREPROCESSING deve ser definido para buffers a serem usados com o processamento de vértice de software no modo misto, mas não deve ser definido para o melhor desempenho possível ao usar o processamento de vértice de hardware no modo misto. (D3DCREATE_HARDWARE_VERTEXPROCESSING). No entanto, definir D3DUSAGE_SOFTWAREPROCESSING é a única opção quando um único buffer deve ser usado com processamento de vértice de hardware e software. D3DUSAGE_SOFTWAREPROCESSING é permitido para dispositivos mistos e de software.
É possível forçar buffers de vértice e índice na memória do sistema especificando D3DPOOL_SYSTEMMEM, mesmo quando o processamento de vértice é feito em hardware. Esta é uma maneira de evitar grandes quantidades de memória bloqueada por página quando um driver está colocando esses buffers na memória AGP.
Esta seção apresenta os conceitos necessários para entender e usar buffers de vértice em um aplicativo Direct3D. As informações estão divididas nas seguintes secções.
- Criando um buffer de vértice (Direct3D 9)
- Acessando o conteúdo de um buffer de vértice (Direct3D 9)
- renderização a partir de um buffer de vértice (Direct3D 9)
- FVF Vertex Buffers (Direct3D 9)
- Processamento de vértice de função fixa (Direct3D 9)
- Processamento de vértice programável (Direct3D 9)
- Tipos de dispositivos e requisitos de processamento de vértice (Direct3D 9)
Tópicos relacionados