단, 텍스처와 달리 1차원 배열을 사용하면 된다. (버퍼라고 부른다)
아래와 같이 CD3DX12_RESOURCE_DESC::Buffer를 통해서 단순히 크기만 전달하면 알아서 설명자를 채워서 객체를 만들어 주는 편의 기능도 있다.
앞에 C가 붙는 경우 편의용 함수임을 알 수 있다. (내부를 보면 Buffer 타입으로 생성자를 채워서 만들어 준다.
앞선 스터디에서도 말했듯이, GPU자원은 활용도에 따라 크게 세가지로 분류된다.
여기서 보통의 Vertex Buffer들의 경우 한번만 GPU에 데이터를 등록하고 나면 더이상 수정할일이 없기 때문에 보통 Default(GPU Only)로 만든다.
Heap을 Default로 만들경우 최초 한번은 CPU에 있는 데이터를 GPU에 올리기 위한 작업이 필요한데, 이때 필요한것이 Upload Type이다.
그래서 Descriptor Heap을 통해 Descriptor에 사용될 메모리를 할당받고 생성을 하는 과정을 통했지만, Vertex Buffer와 Index Buffer의 경우에는 Descriptor Heap이 필요없다.
아래 그림처럼, D3D12_VERTEX_BUFFER_VIEW 혹은, D3D12_INDEX_BUFFER_VIEW 구조체를 생성하고 값을 채워서 Command List에 넘겨주면 된다.
실제 사용할 버퍼를 등록하는 과정은 IASetVertexBuffers, IASetIndexBuffer를 통해서 하면 되고, 실제 그리길 원하는 버텍스버퍼의 범위를 설정하고 드로우 명령을 내리는것은
아래 그림과 같이 DrawInstanced, DrawIndexedInstanced를 통해서 할 수 있다.
두 과정이 나뉘어져 있음으로, 우리는 효율적으로 여러 도형들이 섞여있는 하나의 거대한 Vertex Buffer를 만들고 범위를 통해서 각각을 그려줄 수 있다.