Практическое руководство. Создание буфера индекса

Буферы индекса содержат данные индекса. В этом разделе показано, как инициализировать буфер индекса при подготовке к отрисовке.

Инициализация буфера индекса

  1. Создайте буфер, содержащий сведения об индексе.
  2. Создайте описание буфера, заполнив структуру D3D11_BUFFER_DESC . Передайте флаг D3D11_BIND_INDEX_BUFFER члену BindFlags и передайте размер буфера в байтах члену ByteWidth .
  3. Создайте описание данных подресурса, заполнив структуру D3D11_SUBRESOURCE_DATA . Элемент pSysMem должен указывать непосредственно на данные индекса, созданные на шаге 1.
  4. Вызовите ID3D11Device::CreateBuffer при передаче структуры D3D11_BUFFER_DESC , структуры D3D11_SUBRESOURCE_DATA и адреса указателя на интерфейс ID3D11Buffer для инициализации.

В следующем примере кода показано, как создать буфер индекса. В этом примере предполагается, что

g_pd3dDevice

является допустимым объектом ID3D11Device и

g_pd3dContext

является допустимым объектом ID3D11DeviceContext .

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

Использование Direct3D 11