Buffers de vértice (Direct3D 9)

Os buffers de vértice, representados pela interface IDirect3DVertexBuffer9 , 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 não iluminado – que possa ser renderizado por meio do uso dos métodos de renderização na interface IDirect3DDevice9 . Você pode processar os vértices de um buffer de vértice para realizar operações como transformação, iluminação ou gerar sinalizadores de recorte. A transformação sempre é executada.

A flexibilidade dos buffers de vértice os torna pontos de preparo ideais para a reutilização da geometria transformada. Você pode criar um buffer de vértice único, transformar, iluminar e recordar os vértices nele, e renderizar o modelo na cena quantas vezes forem necessárias sem transformá-lo novamente, 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 necessárias de textura. As alterações de estado de renderização feitas após os vértices serem processados entram em vigor na próxima vez em que os vértices forem processados.

Descrição

Um buffer de vértice é descrito em termos de seus recursos: se ele só puder existir na memória do sistema, se ele for usado apenas para operações de gravação e o tipo e o 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 esse é um buffer de vértice. O Tipo identifica o tipo de recurso do buffer de vértice. O membro da estrutura Uso contém sinalizadores de funcionalidade gerais. 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 do 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 habilitar o processamento e a 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, supõe-se que os aplicativos executem operações de leitura e gravação nos dados dentro do buffer de vértice.

O 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 Size armazena o tamanho, em bytes, dos dados do buffer de vértice. O membro FVF contém uma combinação de D3DFVF que identifica 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 pool (classe de memória) e parâmetros de uso. IDirect3DDevice9::CreateVertexBuffer também pode ser criado com um código FVF especificado para uso no processamento de vértice de função fixa ou como saída de vértices de processo. Para obter detalhes, consulte Buffers de vértice FVF (Direct3D 9).

O sinalizador D3DUSAGE_SOFTWAREPROCESSING pode ser definido quando o processamento de vértice de software ou modo misto (D3DCREATE_MIXED_VERTEXPROCESSING/D3DCREATE_SOFTWARE_VERTEXPROCESSING) está habilitado para esse dispositivo. D3DUSAGE_SOFTWAREPROCESSING deve ser definido para buffers a serem usados com 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 de software mistos e para dispositivos 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 no hardware. Essa é uma maneira de evitar grandes quantidades de memória bloqueada por página quando um driver está colocando esses buffers na memória do AGP.

Esta seção apresenta os conceitos necessários para entender e usar buffers de vértice em um aplicativo Direct3D. As informações são divididas nas seções a seguir.

Recursos do Direct3D

Renderização de buffers de vértice e índice (Direct3D 9)

Buffers de índice (Direct3D 9)