如何:创建索引缓冲区

索引缓冲区 包含索引数据。 本主题说明如何在准备呈现时初始化 索引缓冲区

初始化索引缓冲区

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

缓冲区

如何使用 Direct3D 11