방법: 인덱스 버퍼 만들기

인덱스 버퍼에는 인덱스 데이터가 포함됩니다. 이 항목에서는 렌더링을 준비하기 위해 인덱스 버퍼 를 초기화하는 방법을 보여줍니다.

인덱스 버퍼를 초기화하려면

  1. 인덱스 정보가 포함된 버퍼를 만듭니다.
  2. D3D11_BUFFER_DESC 구조를 입력하여 버퍼 설명을 만듭니다. D3D11_BIND_INDEX_BUFFER 플래그를 BindFlags 멤버에 전달하고 버퍼 크기를 바이트 단위로 ByteWidth 멤버에 전달합니다.
  3. D3D11_SUBRESOURCE_DATA 구조를 입력하여 하위 리소스 데이터 설명을 만듭니다. pSysMem 멤버는 1단계에서 만든 인덱스 데이터를 직접 가리킵니다.
  4. 초기화할 ID3D11Buffer 인터페이스에 대한 D3D11_BUFFER_DESC 구조체, D3D11_SUBRESOURCE_DATA 구조체 및 포인터의 주소를 전달하면서 ID3D11Device::CreateBuffer를 호출합니다.

다음 코드 예제에서는 인덱스 버퍼를 만드는 방법을 보여 줍니다. 이 예제에서는

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을 사용하는 방법