Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Gli oggetti vertex buffer consentono alle applicazioni di accedere direttamente alla memoria allocata per i dati dei vertici. È possibile recuperare un puntatore alla memoria del vertex buffer chiamando il metodo IDirect3DVertexBuffer9::Lock e quindi accedendo alla memoria in base alle esigenze per riempire il buffer con nuovi dati dei vertici o per leggere i dati già contenuti. Il metodo IDirect3DVertexBuffer9::Lock accetta quattro parametri. Il primo, OffsetToLock, è l'offset nei dati dei vertici. Il secondo parametro è la dimensione, misurata in byte, dei dati dei vertici. Il terzo parametro accettato è l'indirizzo di un puntatore che punta ai dati dei vertici, se la chiamata ha esito positivo.
L'ultimo parametro, Flag, indica al sistema come deve essere bloccata la memoria. Specificare le costanti per il parametro flag in base alla modalità di accesso ai dati dei vertici. Assicurarsi che il valore scelto per D3DUSAGE corrisponda al valore scelto per D3DLOCK. Ad esempio, se si sta creando un vertex buffer solo con accesso in scrittura, non è opportuno provare a leggere i dati specificando D3DLOCK_READONLY. L'uso di questi flag consente al driver di bloccare la memoria e offrire prestazioni ottimali, in base al tipo di accesso richiesto.
Dopo aver compilato o letto i dati dei vertici, chiamare il metodo IDirect3DVertexBuffer9::Unlock, come illustrato nell'esempio di codice seguente.
// This code example assumes the g_pVB is a variable of type
// LPDIRECT3DVERTEXBUFFER9 and that g_Vertices has been
// properly initialized with vertices
// Lock the buffer to gain access to the vertices
VOID* pVertices;
if(FAILED(g_pVB->Lock(0, sizeof(g_Vertices),
(BYTE**)&pVertices, 0 ) ) )
return E_FAIL;
memcpy(pVertices, g_Vertices, sizeof(g_Vertices));
g_pVB->Unlock();
Se si crea un buffer dei vertici con il flag D3DUSAGE_WRITEONLY, non usare il flag di blocco D3DLOCK_READONLY. Usare il flag D3DLOCK_READONLY quando l'applicazione deve solo leggere dalla memoria del buffer dei vertici. L'inclusione di questo flag consente a Direct3D di ottimizzare le procedure interne per migliorare l'efficienza, dato che l'accesso alla memoria sarà di sola lettura.
Fare riferimento a Using Dynamic Vertex and Index Buffers per informazioni sull'uso di D3DLOCK_DISCARD o D3DLOCK_NOOVERWRITE per il parametro Flags di IDirect3DVertexBuffer9::Lock.
In C++, poiché si accede direttamente alla memoria allocata per il vertex buffer, assicurati che l'applicazione acceda correttamente alla memoria allocata. In caso contrario, si rischia di rendere quella memoria non valida. Usare lo stride del formato dei vertici usato dall'applicazione per passare da un vertice nel buffer allocato a un altro. La memoria del buffer dei vertici è una semplice matrice di vertici specificata in FVF. Usare lo stride di qualsiasi struttura di formato vertice definita. È possibile calcolare lo stride di ogni vertice in fase di esecuzione esaminando il D3DFVF contenuto nella descrizione del buffer di vertici. La tabella seguente illustra le dimensioni per ogni componente vertice.
Indicatore di formato vertice | Grandezza |
---|---|
D3DFVF_DIFFUSE | sizeof(DWORD) |
D3DFVF_NORMAL | sizeof(float) x 3 |
D3DFVF_SPECULAR | sizeof(DWORD) |
D3DFVF_TEXn | sizeof(float) x n |
D3DFVF_XYZ | sizeof(float) x 3 |
D3DFVF_XYZRHW | sizeof(float) x 4 |
Il numero di coordinate della trama presenti nel formato dei vertici è descritto dai flag D3DFVF_TEX n (dove n è un valore compreso tra 0 e 8). Moltiplicare il numero di set di coordinate della trama in base alle dimensioni di un set di coordinate di trama, che possono variare da uno a quattro float, per calcolare la memoria necessaria per il numero di coordinate della trama.
Utilizzare il passo totale dei vertici per incrementare e decrementare il puntatore di memoria secondo necessità per accedere a vertici specifici.
Recupero delle descrizioni dei buffer dei vertici
È possibile recuperare informazioni su un vertex buffer chiamando il metodo IDirect3DVertexBuffer9::GetDesc. Questo metodo riempie i membri della struttura D3DVERTEXBUFFER_DESC con informazioni sul vertex buffer.
Argomenti correlati