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

  1. Creare un buffer contenente le informazioni sull'indice.
  2. 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 .
  3. 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.
  4. 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 );
    

Buffer

Come usare Direct3D 11