삼각형이라는 최소 폴리곤이라도 화면에 렌더링 하기 위해서는 필수로 준비해야 하는 것이 있다. 바로 Vertex Buffer, Vertex Shader, Pixel Shader 이다. DirectX11 API를 사용해서 삼각형을 렌더링 한다는 것은 곧 DirectX11
의 렌더링 파이프라인을 사용한다는 뜻이다. 따라서 최소한으로 렌더링 파이프라인이 동작하여 결과물을 만들 수 있으려면 최소한으로 필요한 것들을 준비해서 렌더링 파이프라인에 설정해줘야 하는 것이다.

이 렌더링 파이프라인 스테이지들 중 사용을 하지 않고 넘어갈 수 있는 스테이지들도 있는 반면 최소한의 설정이 필요한 스테이지들이 있다. Input-Assembler Stage, Vertex Shader Stage, Pixel Shader Stage이다. 이를 위해 필요한 리소스들이 바로 Vertex Buffer
, Vertex Shader
, Pixel Shader
인 것이다.
Vertex Buffer
정점 버퍼는 렌더링하려는 오브젝트의 모양을 정의한다. 로컬 좌표계 내에서 좌표값들을 가지는 점들의 집합 데이터이다.

간단한 삼각형 모양을 정의하는 정점 3개이다. float vertice[ 6 ] = { 0.f, 0.5f, 0.5f, 0.f, -0.5f, 0.f };
이렇게 정의도 가능하며 이 배열을 이용해 정점 버퍼를 생성하는 것도 가능하다. DirectX11 API를 이용해서 정점 버퍼를 만드는 것에 대한 자세한 코드는 Vertex Buffer를 참고하자.
Vertex Shader
렌더링 파이프라인 스테이지에서 입력된 정점 데이터들을 가공해주는 스테이지가 바로 Vertex Shader이다. DirectX11 API에서는 Programmable Shader
라고 해서 직접 쉐이더 코드를 작성해서 이 정점들이 어떻게 처리될지를 직접 지정할 수 있다. HLSL
( High-Level Shader Language )를 통해서 쉐이더 코드를 작성하게 된다. 이 정점 쉐이더에 대해서는 Vertex Shader에서 자세히 다루도록 한다.
Input Layout
Vertex Buffer
에 있는 정점 데이터들이 Vetex Shader
로 스트리밍 되는데 각 정점 데이터의 요소마다 특성을 지정해주어야 한다. 쉐이더에서는 단순히 바이트 데이터만이 전달되기 때문에 특성이 부여되지 않으면 각 바이트 데이터가 어떤 의미로 사용되는지 알 수 없다. 이 특성들을 지정하고 쉐이더에게 알려주는 역할을 하는것이 Input Layout이다. 자세한 내용은 Input Layout에서 다루도록 한다.
Pixel Shader
렌더링 파이프라인 스테이지들을 거쳐 최종 레스터라이즈 단계까지 완료된 데이터는 최종적으로 백 버퍼에 저장되는 픽셀 하나하나에 대한 최종적인 가공을 하는데, 이 스테이지가 바로 Pixel Shader이다. 정점 쉐이더와 마찬가지로 HLSL로 작성해서 렌더링 파이프라인에 연결한다. 자세한 내용은 Pixel Shader에서 다루도록 한다.