Vorgehensweise: Erstellen eines Indexpuffers

Indexpuffer enthalten Indexdaten. In diesem Thema wird gezeigt, wie ein Indexpuffer als Vorbereitung für das Rendering initialisiert wird.

So initialisieren Sie einen Indexpuffer

  1. Erstellen Sie einen Puffer, der Ihre Indexinformationen enthält.
  2. Erstellen Sie eine Pufferbeschreibung, indem Sie eine D3D11 _ BUFFER _ DESC-Struktur ausfüllen. Übergeben Sie das BIND INDEX BUFFER-Flag D3D11 _ _ an den _ BindFlags-Member, und übergeben Sie die Größe des Puffers in Bytes an den ByteWidth-Member.
  3. Erstellen Sie eine Beschreibung der Unterressourcendaten, indem Sie eine D3D11 _ SUBRESOURCE _ DATA-Struktur ausfüllen. Der pSysMem-Member sollte direkt auf die Indexdaten verweisen, die in Schritt 1 erstellt wurden.
  4. Rufen Sie ID3D11Device::CreateBuffer auf, während Sie die D3D11 _ BUFFER _ DESC-Struktur, die D3D11 _ SUBRESOURCE _ DATA-Struktur und die Adresse eines Zeigers auf die zu initialisierende ID3D11Buffer-Schnittstelle übergeben.

Im folgenden Codebeispiel wird veranschaulicht, wie ein Indexpuffer erstellt wird. In diesem Beispiel wird davon ausgegangen, dass

g_pd3dDevice

ist ein gültiges ID3D11Device-Objekt, und das

g_pd3dContext

ist ein gültiges ID3D11DeviceContext-Objekt.

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

Puffer

Verwenden von Direct3D 11