Partilhar via


Tipos de dispositivo e requisitos de processamento de vértice (Direct3D 9)

O desempenho das operações de processamento de vértices, incluindo transformação e iluminação, depende muito de onde o buffer de vértice existe na memória e que tipo de dispositivo de renderização está sendo usado. Os aplicativos controlam a alocação de memória para buffers de vértice quando eles são criados. Quando o sinalizador de memória D3DPOOL_SYSTEMMEM é definido, o buffer de vértice é criado na memória do sistema. Quando o sinalizador de memória D3DPOOL_DEFAULT é utilizado, o driver de dispositivo decide qual é o melhor local para alocar a memória do buffer de vértice, muitas vezes referido como memória otimizada pelo driver. A memória ideal do driver pode ser memória de vídeo local, memória de vídeo não local ou memória do sistema.

Definir a constante de D3DUSAGE_SOFTWAREPROCESSING com IDirect3DDevice9::CreateVertexBuffer permite o processamento de vértice de software nos dados do buffer de vértice. Este sinalizador é necessário para o processamento de vértice de software no modo misto. O sinalizador não pode ser usado para o modo de processamento de vértice de hardware. Os buffers de vértice utilizados no processamento de vértices por software incluem os seguintes:

O raciocínio que você usa para determinar o local da memória - sistema ou driver ideal - para buffers de vértice é o mesmo que para texturas. O processamento de vértice, incluindo transformação e iluminação, em hardware funciona melhor quando os buffers de vértice são alocados na memória ideal do driver, enquanto o processamento de vértice de software funciona melhor com buffers de vértice alocados na memória do sistema. Para texturas, a rasterização de hardware funciona melhor quando as texturas são alocadas na memória ideal do driver, enquanto a rasterização de software funciona melhor com texturas de memória do sistema.

O Microsoft Direct3D 9 oferece suporte ao processamento autônomo de vértices, sem renderizar nenhuma primitiva com o método IDirect3DDevice9::P rocessVertices. Esse processamento de vértice autônomo é sempre executado em software no processador host. Por isso, os buffers de vértice usados como fontes definidas com IDirect3DDevice9::SetStreamSource devem ser criados com o sinalizador D3DUSAGE_SOFTWAREPROCESSING. A funcionalidade fornecida pelo IDirect3DDevice9::ProcessVertices é idêntica à dos métodos IDirect3DDevice9::DrawPrimitive e IDirect3DDevice9::DrawIndexedPrimitive ao usar o processamento de vértices em software.

Se a sua aplicação executar o seu próprio processamento de vértices e enviar vértices transformados, iluminados e cortados para métodos de renderização, então a aplicação pode gravar vértices diretamente num buffer de vértices alocado na memória ideal do driver. Esta técnica impede uma operação de cópia redundante mais tarde. Observe que essa técnica não funcionará bem se seu aplicativo ler dados de volta de um buffer de vértice, porque as operações de leitura feitas pelo host a partir da memória ideal do driver podem ser muito lentas. Portanto, se seu aplicativo precisa ler durante o processamento ou grava dados no buffer de forma irregular, um buffer de vértice de memória do sistema é uma escolha melhor.

Ao usar os recursos de processamento de vértices do Direct3D (passando vértices não transformados para métodos de renderização do buffer de vértices), o processamento pode ocorrer em hardware ou software, dependendo do tipo de dispositivo e dos indicadores de criação do dispositivo. Recomenda-se que os buffers de vértice sejam alocados em pool D3DPOOL_DEFAULT para obter o melhor desempenho em praticamente todos os casos. Quando um dispositivo está a utilizar o processamento de vértices por hardware, existem uma série de otimizações adicionais que podem ser feitas com base nos sinalizadores D3DUSAGE_DYNAMIC e D3DUSAGE_WRITEONLY. Consulte IDirect3DDevice9::CreateVertexBuffer para obter mais informações sobre como usar esses sinalizadores.

Buffers de vértice