버퍼 소개Introduction to buffers

버퍼 리소스는 완벽하게 입력된 데이터 컬렉션이며, 요소로 그룹화됩니다.A buffer resource is a collection of fully typed data, grouped into elements. 버퍼는 꼭짓점 버퍼의 텍스처 좌표, 인덱스 버퍼의 인덱스, 상수 버퍼의 셰이더 상수 데이터, 위치 벡터, 일반 벡터, 디바이스 상태 등의 데이터를 저장합니다.Buffers store data, such as texture coordinates in a vertex buffer, indexes in an index buffer, shader constants data in a constant buffer, position vectors, normal vectors, or device state.

버퍼 요소는 1 ~ 4개 구성 요소로 이루어집니다.A buffer element is made up of 1 to 4 components. 버퍼 요소에는 압축된 데이터 값(R8G8B8A8 표면 값), 8비트 정수 하나 또는 32비트 부동 소수점 값 네 개가 포함될 수 있습니다.Buffer elements can include packed data values (like R8G8B8A8 surface values), single 8-bit integers, or four 32-bit floating point values.

버퍼는 구조화되지 않은 리소스로 생성됩니다.A buffer is created as an unstructured resource. 버퍼가 구조화되지 않았기 때문에 Mipmap 수준을 포함할 수 없고, 읽었을 때 필터링될 수 없으며 다중 샘플링될 수 없습니다.Because it is unstructured, a buffer cannot contain any mipmap levels, it cannot get filtered when read, and it cannot be multisampled.

버퍼 형식Buffer Types

Direct3D 11이 지원하는 버퍼 리소스 유형은 다음과 같습니다.The following are the buffer resource types supported by Direct3D 11.

꼭 짓 점 버퍼Vertex Buffer

꼭짓점 버퍼에 기하 도형을 정의하는 데 사용되는 꼭짓점 데이터가 포함됩니다.A vertex buffer contains the vertex data used to define your geometry. 꼭지점 데이터에는 위치 좌표, 색상 데이터, 텍스처 좌표 데이터, 법선 데이터 등이 포함되어 있습니다.Vertex data includes position coordinates, color data, texture coordinate data, normal data, and so on.

위치 데이터만 포함하는 경우가 가장 단순한 꼭짓점 버퍼의 예입니다.The simplest example of a vertex buffer is one that only contains position data. 다음 그림과 같이 표현할 수 있습니다.It can be visualized like the following illustration.

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

3D 꼭짓점을 완벽하게 지정하는 데 필요한 모든 데이터를 포함하는 경우가 더 많습니다.More often, a vertex buffer contains all the data needed to fully specify 3D vertices. 꼭짓점별 위치, 일반 및 텍스처 좌표가 포함된 꼭짓점 버퍼가 한 예입니다.An example of this could be a vertex buffer that contains per-vertex position, normal and texture coordinates. 이 데이터는 일반적으로 다음 그림과 같이 꼭짓점별 요소 집합으로 구성됩니다.This data is usually organized as sets of per-vertex elements, as shown in the following illustration.

위치, 일반 및 텍스처 데이터가 포함된 꼭짓점 버퍼의 그림

이 꼭짓점 버퍼는 꼭짓점별 데이터를 포함하고 각 꼭짓점은 세 가지 요소(위치, 일반 및 텍스처 좌표)를 저장합니다.This vertex buffer contains per-vertex data; each vertex stores three elements (position, normal, and texture coordinates). 위치 및 일반 좌표는 일반적으로 32비트 부동 소수점 3개로 지정되고 텍스처 좌표는 32비트 부동 소수점 두 개로 지정됩니다.The position and normal are each typically specified using three 32-bit floats and the texture coordinates using two 32-bit floats.

꼭짓점 버퍼에서 데이터에 액세스하려면 액세스할 꼭짓점뿐 아니라 다음과 같은 추가 버퍼 매개 변수를 알아야 합니다.To access data from a vertex buffer you need to know which vertex to access, plus the following additional buffer parameters:

  • 오프셋 - 버퍼 시작부터 첫 번째 꼭짓점의 데이터까지 바이트 수입니다.Offset - the number of bytes from the start of the buffer to the data for the first vertex.
  • BaseVertexLocation - 오프셋부터 해당 그리기 호출에 사용된 첫 번째 꼭짓점까지 바이트 수입니다.BaseVertexLocation - the number of bytes from the offset to the first vertex used by the appropriate draw call.

꼭짓점 버퍼를 만들기 전에 해당 레이아웃을 정의해야 합니다.Before you create a vertex buffer, you need to define its layout. 레이아웃 개체를 만든 후 IA(입력 어셈블러) 단계에 바인딩합니다.After the input-layout object is created, you bind it to the Input Assembler (IA) stage.

인덱스 버퍼Index Buffer

인덱스 버퍼는 꼭짓점 버퍼에 대한 정수 오프셋을 포함하며, 원형을 효율적으로 렌더링하는 데 사용됩니다.Index buffers contain integer offsets into vertex buffers and are used to render primitives more efficiently. 인덱스 버퍼는 16비트 또는 32비트 인덱스의 순차 집합을 포함하며, 각 인덱스는 꼭짓점 버퍼에서 꼭짓점을 식별하는 데 사용됩니다.An index buffer contains a sequential set of 16-bit or 32-bit indices; each index is used to identify a vertex in a vertex buffer. 인덱스 버퍼는 다음 그림과 같이 시각화할 수 있습니다.An index buffer can be visualized like the following illustration.

인덱스 버퍼의 그림

인덱스 버퍼에 저장된 순차 인덱스는 다음 매개 변수로 배치됩니다.The sequential indices stored in an index buffer are located with the following parameters:

  • 오프셋 - 인덱스 버퍼 기본 주소의 바이트 수입니다.Offset - the number of bytes from the base address of the index buffer.
  • StartIndexLocation - 오프셋과 기본 주소에서 첫 번째 인덱스 버퍼 요소를 지정합니다.StartIndexLocation - specifies the first index buffer element from the base address and the offset. 시작 위치는 렌더링할 첫 번째 인덱스를 나타냅니다.The start location represents the first index to render.
  • IndexCount - 렌더링할 인덱스 수입니다.IndexCount - the number of indices to render.

인덱스 버퍼의 시작 인덱스 버퍼 기준 주소 오프셋 (바이트) + StartIndexLocation = * ElementSize (바이트)입니다.Start of Index Buffer = Index Buffer Base Address + Offset (bytes) + StartIndexLocation * ElementSize (bytes);

이 계산에서 ElementSize는 각 인덱스 버퍼 요소의 크기로, 2바이트 또는 4바이트입니다.In this calculation, ElementSize is the size of each index buffer element, which is either two or four bytes.

상수 버퍼Constant Buffer

상수 버퍼를 통해 파이프라인에 셰이더 상수 데이터를 효율적으로 제공할 수 있습니다.A constant buffer allows you to efficiently supply shader constants data to the pipeline. 상수 버퍼를 사용해 스트림 출력 단계의 결과를 저장할 수 있습니다.You can use a constant buffer to store the results of the stream-output stage. 개념적으로 상수 버퍼는 다음 그림과 같이 단일 요소 꼭짓점 버퍼처럼 보입니다.Conceptually, a constant buffer looks just like a single-element vertex buffer, as shown in the following illustration.

셰이더 상수 버퍼의 그림

각 요소는 저장된 데이터의 형식에 의해 결정되는 1 ~4개 구성 요소 상수를 저장합니다.Each element stores a 1-to-4 component constant, determined by the format of the data stored.

상수 버퍼는 다른 바인딩 플래그와 결합할 수 없는 단일 바인딩 플래그만 사용할 수 있습니다.A constant buffer can only use a single bind flag , which cannot be combined with any other bind flag.

셰이더에서 셰이더 상수 버퍼를 읽으려면 HLSL 로드 기능을 사용합니다.To read a shader-constant buffer from a shader, use an HLSL load function. 각 셰이더 단계는 최대 15개의 셰이더 상수 버퍼를 허용하며 각 버퍼는 최대 4,096개 상수를 보관할 수 있습니다.Each shader stage allows up to 15 shader-constant buffers; each buffer can hold up to 4096 constants.

관련된 항목Related topics

꼭짓점 및 인덱스 버퍼Vertex and index buffers