다음을 통해 공유


버퍼 소개

버퍼 리소스는 요소로 그룹화된 완전히 형식화된 데이터의 컬렉션입니다. 버퍼는 텍스처 좌표를 저장하는 꼭짓점 버퍼, 인덱스를 위한 인덱스 버퍼, 셰이더 상수 데이터를 위한 상수 버퍼, 위치 벡터, 노말 벡터, 또는 디바이스 상태와 같은 데이터를 저장합니다.

버퍼 요소는 1~4개의 구성 요소로 구성됩니다. 버퍼 요소에는 압축된 데이터 값(예: R8G8B8A8 표면 값), 단일 8비트 정수 또는 4개의 32비트 부동 소수점 값이 포함될 수 있습니다.

버퍼는 구조화되지 않은 리소스로 만들어집니다. 구조화되지 않으므로 버퍼는 mipmap 수준을 포함할 수 없으며 읽을 때 필터링할 수 없으며 다중 샘플링할 수 없습니다.

버퍼 형식

다음은 Direct3D 11에서 지원하는 버퍼 리소스 종류입니다.

꼭짓점 버퍼

꼭짓점 버퍼에는 기하 도형을 정의하는 데 사용되는 꼭짓점 데이터가 포함됩니다. 꼭짓점 데이터에는 위치 좌표, 색 데이터, 질감 좌표 데이터, 일반 데이터 등이 포함됩니다.

꼭짓점 버퍼의 가장 간단한 예는 위치 데이터만 포함하는 것입니다. 다음 그림과 같이 시각화할 수 있습니다.

위치 데이터를 포함하는 꼭짓점 버퍼의 그림

꼭짓점 버퍼에는 3D 꼭짓점을 완전히 지정하는 데 필요한 모든 데이터가 포함되어 있는 경우가 많습니다. 예를 들어 꼭짓점당 위치, 법선 및 텍스처 좌표가 포함된 꼭짓점 버퍼가 있습니다. 이 데이터는 일반적으로 다음 그림과 같이 꼭짓점당 요소 집합으로 구성됩니다.

위치, 법선 및 텍스처 데이터를 포함하는 꼭짓점 버퍼의 그림

이 꼭짓점 버퍼에는 꼭짓점당 데이터가 포함됩니다. 각 꼭짓점은 세 가지 요소(위치, 법선 및 텍스처 좌표)를 저장합니다. 위치와 노멀 벡터는 각각 일반적으로 32비트 부동 소수점 3개를 사용하여 지정되고, 텍스처 좌표는 32비트 부동 소수점 2개를 사용하여 지정됩니다.

꼭짓점 버퍼에서 데이터에 액세스하려면 액세스할 꼭짓점과 다음 추가 버퍼 매개 변수를 알아야 합니다.

  • 오프셋 - 버퍼 시작부터 첫 번째 꼭짓점의 데이터까지의 바이트 수입니다.
  • BaseVertexLocation - 오프셋에서 적절한 그리기 호출에 사용되는 첫 번째 꼭짓점까지의 바이트 수입니다.

꼭짓점 버퍼를 만들기 전에 해당 레이아웃을 정의해야 합니다. 입력 레이아웃 개체를 만든 후 입력 어셈블러(IA) 단계에바인딩합니다.

인덱스 버퍼

인덱스 버퍼는 꼭짓점 버퍼에 정수 오프셋을 포함하며 기본 형식을 보다 효율적으로 렌더링하는 데 사용됩니다. 인덱스 버퍼에는 16비트 또는 32비트 인덱스의 순차 집합이 포함됩니다. 각 인덱스는 꼭짓점 버퍼에서 꼭짓점을 식별하는 데 사용됩니다. 인덱스 버퍼는 다음 그림과 같이 시각화할 수 있습니다.

인덱스 버퍼의 그림

인덱스 버퍼에 저장된 순차 인덱스는 다음 매개 변수와 함께 있습니다.

  • 오프셋 - 인덱스 버퍼의 기준 주소에서부터의 바이트 수입니다.
  • StartIndexLocation - 기본 주소와 오프셋의 첫 번째 인덱스 버퍼 요소를 지정합니다. 시작 위치는 렌더링할 첫 번째 인덱스를 나타냅니다.
  • IndexCount - 렌더링할 인덱스 수입니다.

인덱스 버퍼의 시작 = 인덱스 버퍼 기본 주소 + 오프셋(바이트) + StartIndexLocation * ElementSize(바이트);

이 계산에서 ElementSize는 각 인덱스 버퍼 요소의 크기로, 2바이트 또는 4바이트입니다.

상수 버퍼

상수 버퍼를 사용하면 셰이더 상수 데이터를 파이프라인에 효율적으로 제공할 수 있습니다. 상수 버퍼를 사용하여 스트림 출력 단계의 결과를 저장할 수 있습니다. 개념적으로 상수 버퍼는 다음 그림과 같이 단일 요소 꼭짓점 버퍼처럼 보입니다.

셰이더 상수 버퍼의 그림

각 요소는 저장된 데이터의 형식에 따라 결정되는 1-4개의 구성 요소 상수를 저장합니다.

상수 버퍼는 다른 바인딩 플래그와 결합할 수 없는 단일 바인딩 플래그만 사용할 수 있습니다.

셰이더에서 셰이더 상수 버퍼를 읽으려면 HLSL 로드 함수를 사용합니다. 각 셰이더 단계에서는 최대 15개의 셰이더 상수 버퍼를 허용합니다. 각 버퍼는 최대 4096개의 상수까지 보유할 수 있습니다.

버텍스 및 인덱스 버퍼