다음을 통해 공유


ID3D11Device::CreateBuffer 메서드(d3d11.h)

버퍼(꼭짓점 버퍼, 인덱스 버퍼 또는 셰이더 상수 버퍼)를 만듭니다.

구문

HRESULT CreateBuffer(
  [in]            const D3D11_BUFFER_DESC      *pDesc,
  [in, optional]  const D3D11_SUBRESOURCE_DATA *pInitialData,
  [out, optional] ID3D11Buffer                 **ppBuffer
);

매개 변수

[in] pDesc

형식: const D3D11_BUFFER_DESC*

버퍼를 설명하는 D3D11_BUFFER_DESC 구조체에 대한 포인터입니다.

[in, optional] pInitialData

형식: const D3D11_SUBRESOURCE_DATA*

초기화 데이터를 설명하는 D3D11_SUBRESOURCE_DATA 구조체에 대한 포인터입니다. 사용 플래그가 D3D11_USAGE_IMMUTABLE 경우 NULL일 수 없다는 점을 제외하고 NULL을 사용하여 공간만 할당합니다.

pInitialData에 아무것도 전달하지 않으면 버퍼에 대한 메모리의 초기 콘텐츠가 정의되지 않습니다. 이 경우 리소스를 읽기 전에 다른 방법으로 버퍼 콘텐츠를 작성해야 합니다.

[out, optional] ppBuffer

형식: ID3D11Buffer**

만든 버퍼 개체의 ID3D11Buffer 인터페이스에 대한 포인터의 주소입니다. 이 매개 변수를 NULL 로 설정하여 다른 입력 매개 변수의 유효성을 검사합니다(전달을 나타내는 S_FALSE ).

반환 값

형식: HRESULT

이 메서드는 버퍼를 만들 메모리가 부족한 경우 E_OUTOFMEMORY 반환합니다. 다른 가능한 반환 값은 Direct3D 11 반환 코드를 참조하세요.

설명

예제 코드는 방법: 꼭짓점 버퍼 만들기, 방법: 인덱스 버퍼 만들기 또는 방법: 상수 버퍼 만들기를 참조하세요.

상수 버퍼(D3D11_BIND_CONSTANT_BUFFER로 설정된 D3D11_BUFFER_DESCBindFlags)의 경우D3D11_BUFFER_DESC ByteWidth 값을 16의 배수로 설정해야 하며 D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT 작거나 같아야 합니다.

Windows 8 이상 운영 체제에서 사용할 수 있는 Direct3D 11.1 런타임은 CreateBuffer에 다음과 같은 새로운 기능을 제공합니다.

셰이더가 액세스할 수 있는 최대 상수 버퍼 크기보다 큰 상수 버퍼를 만들 수 있습니다(4096 32비트*4개 구성 요소 상수 – 64KB). 상수 버퍼를 파이프라인에 바인딩하는 경우(예: PSSetConstantBuffers 또는 PSSetConstantBuffers1을 통해) 셰이더가 4096 상수 제한 내에 맞는 버퍼 범위를 정의할 수 있습니다.

Direct3D 11.1 런타임(Windows 8 이상 운영 체제에서 사용 가능)은 기능 수준 9.1, 9.2 및 9.3에 대해 이 기능을 에뮬레이트합니다. 따라서 이 기능은 기능 수준 9.1, 9.2 및 9.3에서 지원됩니다.

이 기능은 기능 수준 10 이상의 새 드라이버에서 항상 사용할 수 있습니다.

Direct3D 11.1보다 오래된 런타임에서는 4096보다 큰 상수 버퍼를 요청하는 CreateBuffer 호출이 실패합니다.

요구 사항

   
대상 플랫폼 Windows
헤더 d3d11.h
라이브러리 D3D11.lib

추가 정보

ID3D11Device