Procedura: Creare un buffer di indice
I buffer di indice contengono dati di indice. Questo argomento illustra come inizializzare un buffer di indice in preparazione per il rendering.
Per inizializzare un buffer di indice
- Creare un buffer contenente le informazioni sull'indice.
- Creare una descrizione del buffer inserendo una struttura di D3D11_BUFFER_DESC . Passare il flag D3D11_BIND_INDEX_BUFFER al membro BindFlags e passare le dimensioni del buffer in byte al membro ByteWidth .
- Creare una descrizione dei dati di sottoresource inserendo una struttura di D3D11_SUBRESOURCE_DATA . Il membro pSysMem deve puntare direttamente ai dati di indice creati nel passaggio 1.
- Chiamare ID3D11Device::CreateBuffer passando la struttura di D3D11_BUFFER_DESC , la struttura D3D11_SUBRESOURCE_DATA e l'indirizzo di un puntatore all'interfaccia ID3D11Buffer per inizializzare.
Nell'esempio di codice seguente viene illustrato come creare un buffer di indice. In questo esempio si presuppone che
g_pd3dDevice
è un oggetto ID3D11Device valido e
g_pd3dContext
è un oggetto ID3D11DeviceContext valido.
ID3D11Buffer *g_pIndexBuffer = NULL;
// Create indices.
unsigned int indices[] = { 0, 1, 2 };
// Fill in a buffer description.
D3D11_BUFFER_DESC bufferDesc;
bufferDesc.Usage = D3D11_USAGE_DEFAULT;
bufferDesc.ByteWidth = sizeof( unsigned int ) * 3;
bufferDesc.BindFlags = D3D11_BIND_INDEX_BUFFER;
bufferDesc.CPUAccessFlags = 0;
bufferDesc.MiscFlags = 0;
// Define the resource data.
D3D11_SUBRESOURCE_DATA InitData;
InitData.pSysMem = indices;
InitData.SysMemPitch = 0;
InitData.SysMemSlicePitch = 0;
// Create the buffer with the device.
hr = g_pd3dDevice->CreateBuffer( &bufferDesc, &InitData, &g_pIndexBuffer );
if( FAILED( hr ) )
return hr;
// Set the buffer.
g_pd3dContext->IASetIndexBuffer( g_pIndexBuffer, DXGI_FORMAT_R32_UINT, 0 );
Argomenti correlati