Vertex Buffers (Direct3D 9)

I vertex buffer, rappresentati dall'interfaccia IDirect3DVertexBuffer9 , sono buffer di memoria che contengono dati sui vertici. I buffer dei vertici possono contenere qualsiasi tipo di vertice, trasformato o non trasformato, illuminato o non illuminato, di cui è possibile eseguire il rendering tramite l'uso dei metodi di rendering nell'interfaccia IDirect3DDevice9 . È possibile elaborare i vertici in un buffer dei vertici per eseguire operazioni quali trasformazione, illuminazione o generazione di flag di ritaglio. La trasformazione viene sempre eseguita.

La flessibilità dei vertex buffer li rende i punti di staging ideali per riutilizzare la geometria trasformata. È possibile creare un singolo buffer dei vertici, trasformare, luce e ritagliare i vertici nella scena ed eseguire il rendering del modello nella scena tutte le volte necessario senza trasformarlo nuovamente, anche con modifiche dello stato di rendering interleaved. Ciò è utile quando si esegue il rendering dei modelli che usano più trame: la geometria viene trasformata una sola volta e quindi è possibile eseguirne il rendering in base alle esigenze, interleavedendo con le modifiche di trama necessarie. Le modifiche dello stato di rendering apportate dopo l'elaborazione dei vertici diventano effettive alla successiva elaborazione dei vertici.

Descrizione

Un vertex buffer viene descritto in termini di funzionalità: se può esistere solo nella memoria di sistema, se viene usato solo per le operazioni di scrittura e il tipo e il numero di vertici che può contenere. Tutti questi tratti vengono mantenuti in una struttura D3DVERTEXBUFFER_DESC .

Il membro Format è impostato su D3DFMT_VERTEXDATA per indicare che si tratta di un buffer dei vertici. Il tipo identifica il tipo di risorsa del buffer dei vertici. Il membro della struttura Usage contiene flag di funzionalità generali. Il flag D3DUSAGE_SOFTWAREPROCESSING indica che il buffer dei vertici deve essere usato con l'elaborazione dei vertici software. La presenza del flag D3DUSAGE_WRITEONLY in Usage indica che la memoria del buffer dei vertici viene usata solo per le operazioni di scrittura. In questo modo il driver consente di posizionare i dati dei vertici nella posizione di memoria migliore per consentire l'elaborazione e il rendering rapidi. Se il flag D3DUSAGE_WRITEONLY non viene usato, è meno probabile che il driver inserisca i dati in una posizione inefficiente per le operazioni di lettura. Questo sacrifica alcune velocità di elaborazione e rendering. Se questo flag non viene specificato, si presuppone che le applicazioni eseguano operazioni di lettura e scrittura sui dati all'interno del vertex buffer.

Pool specifica la classe di memoria allocata per il vertex buffer. Il flag D3DPOOL_SYSTEMMEM indica che il sistema ha creato il buffer dei vertici nella memoria di sistema.

Il membro Size archivia le dimensioni, in byte, dei dati del vertex buffer. Il membro FVF contiene una combinazione di D3DFVF che identificano il tipo di vertici contenuti nel buffer.

Pool di memoria e utilizzo

È possibile creare buffer dei vertici con il metodo IDirect3DDevice9::CreateVertexBuffer , che accetta i parametri pool (classe di memoria) e di utilizzo. IDirect3DDevice9::CreateVertexBuffer può essere creato anche con un codice FVF specificato da usare nell'elaborazione dei vertici di funzione fissa o come output dei vertici del processo. Per informazioni dettagliate, vedere FVF Vertex Buffers (Direct3D 9).For details, see FVF Vertex Buffers (Direct3D 9).

Il flag D3DUSAGE_SOFTWAREPROCESSING può essere impostato quando l'elaborazione dei vertici software o in modalità mista (D3DCREATE_MIXED_VERTEXPROCESSING/D3DCREATE_SOFTWARE_VERTEXPROCESSING) è abilitata per tale dispositivo. D3DUSAGE_SOFTWAREPROCESSING deve essere impostato per l'uso dei buffer con l'elaborazione dei vertici software in modalità mista, ma non deve essere impostata per le migliori prestazioni possibili quando si usa l'elaborazione dei vertici hardware in modalità mista. (D3DCREATE_HARDWARE_VERTEXPROCESSING). Tuttavia, l'impostazione di D3DUSAGE_SOFTWAREPROCESSING è l'unica opzione quando un singolo buffer deve essere usato con l'elaborazione dei vertici hardware e software. D3DUSAGE_SOFTWAREPROCESSING è consentito per i dispositivi misti e per i dispositivi software.

È possibile forzare i vertex buffer e index buffer nella memoria di sistema specificando D3DPOOL_SYSTEMMEM, anche quando l'elaborazione dei vertici viene eseguita nell'hardware. Questo è un modo per evitare quantità eccessivamente elevate di memoria bloccata dalla pagina quando un driver inserisce questi buffer nella memoria AGP.

Questa sezione presenta i concetti necessari per comprendere e usare i vertex buffer in un'applicazione Direct3D. Le informazioni sono suddivise nelle sezioni seguenti.

Risorse Direct3D

Rendering da vertex buffer e index buffer (Direct3D 9)

Buffer di indice (Direct3D 9)