Direct X에서의 버퍼(Buffer)는 형식화된 데이터의 컬렉션입니다. GPU에 전달할 데이터를 임시로 저장해 두는 메모리 공간이며 CPU가 GPU에게 건네주는 데이터 모음이라고 볼 수 있습니다. 버퍼를 사용하여 위치 벡터나 일반 벡터, 버텍스 버퍼의 텍스쳐 좌표, 인덱스 버퍼의 인덱스 또는 디바이스 상태를 비롯한 다양한 데이터를 저장할 수 있습니다. 다이렉트 X에서는 보통 `ID3D1Buffer` 인터페이스에 의해 캡슐화되어 있습니다.
Vertex Buffer
Vertex Buffer에는 3D 버텍스, 즉 3D 정점을 지정하는데 필요한 데이터가 포함되어 있습니다. 정점의 위치 좌표나 정점의 색상과 같은 데이터를 가지고 있으며 , 삼각형이나 사각형 같은 도형을 그려낼때 사용하게 됩니다.
버텍스 버퍼는 `ID3D11DeviceContext::IASetVertexBuffers` 메서드를 사용하여 오프셋(바이트 값을 가지고 시작점으로 부터 떨어진 상대적 위치를 나타내는 값)을 지정할 수 있으며 `ID3D11Device::CreateBuffer` 메서드를 호출하여 생성할 수 있습니다.
Index Buffer
Index Buffer는 버텍스 버퍼에 정수형 오프셋을 포함하여 기본 형식보다 효율적으로 랜더링 하는데 사용됩니다. 인덱스 버퍼는 정점들의 재사용을 위해 인덱스 번호를 저장한 정수형 배열이며 예를 들어 삼각형을 그릴 때, 정점을 매번 새로 정의하면 낭비가 크기에 같은 정점을 여러 삼각형이 공유할 수 있도록 생성합니다.
// 정점 버퍼
Vertex[0] = (0, 0)
Vertex[1] = (1, 0)
Vertex[2] = (1, 1)
Vertex[3] = (0, 1)
// 사각형을 2개의 삼각형으로 그리기
IndexBuffer = [0, 1, 2, 0, 2, 3]
정점을 재사용 하기에 데이터를 절약하고 더 적은 정점으로 복잡한 메시 표현이 가능해집니다. 인덱스 버퍼도 버텍스 버퍼와 마찬가지로 `ID3D11Device::CreateBuffer`로 호출하며 DeviceContext에서 `IASetIndexBuffer`를 통한 인덱스 버퍼 바인딩(연결)과 `DrawIndexed`를 통해 인덱스 기반으로 그리기를 수행할 수 있습니다.
Constant Buffer
Constant Buffer 즉, 상수 버퍼는 셰이더에 전달되는 전역 설정값을 저장하는 버퍼이며 보통 한 프레임마다 한 번 씩 갱신됩니다. 시간이나 조명과 같이 실시간 동기화가 필요한 렌더링에 사용되며 변경은 적지만 프레임단위로 갱신합니다. 상수 버퍼도 `CreateBuffer`라는 버퍼 생성 메서드와 `UpdateSubsource`를 통한 값 갱신과 `VSSetContantBuffers` 메서드로 버텍스 셰이더에 바인딩을 수행할 수 있습니다.
'DirectX > Basic' 카테고리의 다른 글
| DirectX - Input Assembler, IA 단계 (0) | 2025.07.27 |
|---|---|
| DirectX - 색상 표현의 기초 (3) | 2025.07.27 |
| DirectX - 메세지 처리부 (1) | 2025.07.27 |
| Device (0) | 2025.05.27 |
| DirectX - Vertex (1) | 2025.01.15 |
