Como criar um buffer de índice

Os buffers de índice contêm dados de índice. Este tópico mostra como inicializar um buffer de índice em preparação para renderização.

Para inicializar um buffer de índice

  1. Crie um buffer que contenha suas informações de índice.
  2. Crie uma descrição de buffer preenchendo uma estrutura D3D11_BUFFER_DESC . Passe o sinalizador D3D11_BIND_INDEX_BUFFER para o membro BindFlags e passe o tamanho do buffer em bytes para o membro ByteWidth .
  3. Crie uma descrição de dados de sub-fonte preenchendo uma estrutura D3D11_SUBRESOURCE_DATA . O membro pSysMem deve apontar diretamente para os dados de índice criados na primeira etapa.
  4. Chamar ID3D11Device::CreateBuffer ao passar a estrutura D3D11_BUFFER_DESC , a estrutura D3D11_SUBRESOURCE_DATA e o endereço de um ponteiro para a interface ID3D11Buffer para inicializar.

O exemplo de código a seguir demonstra como criar um buffer de índice. Este exemplo pressupõe que

g_pd3dDevice

é um objeto ID3D11Device válido e que

g_pd3dContext

é um objeto ID3D11DeviceContext válido.

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 );
    

Buffers

Como usar o Direct3D 11