프로그래밍/DirectX

DX11 파이프라인 - IA

초은하 2019. 10. 30. 15:04

IA(Input Assembler)는 넘겨받은 버텍스 버퍼, 인덱스 버퍼의 데이터를 읽어 지시받은 도형으로 조합하여 파이프라인의 다음 스테이지로 데이터를 넘긴다.

 

- IA에 세트하는 데이터들

InputLayOut은 입력된 데이터를 어떻게 해석할지를 정한다.

D3D11_INPUT_ELEMENT_DESC에 내용을 작성. CreateInputLayOut()을 통해 실체화. IASetInputLayOut()으로 세트.

 

버퍼 리소스는 입력되는 정점, 색인 정보를 담은 버퍼.

D3D11_BUFFER_DESC에 내용을 작성 CreateBuffer()로 버텍스, 인덱스 버퍼 실체화. IASetVertexBuffer(), IASetIndexBuffer()로 IA에 전달.

 

PrimitiveTopology는 입력된 데이터를 어떤 도형으로 조합될지. (점, 선, 삼각형 등)

별도의 실체화 과정 없이 D3D_PRIMITIVE_TOPOLOGY의 열거값을 IASetPrimitiveTopology()로 곧바로 세트한다.

 

IA에는 여러개의 입력 슬롯이 있어 슬롯 개수만큼의 버텍스 버퍼를 설정할 수 있다. 이는 피쳐 레벨에 따라 다름. (10.0이하는 16개 10.1,11에서는 32개)

인덱스 버퍼는 한개밖에 설정할 수 없으니 주의.

 

렌더링 파이프라인이 올바르게 동작하려면 IA에 입력될 데이터 구조와 버텍스셰이더에 입력될 구조가 같아야 한다.

일치를 판단하기 위해 버텍스 셰이더의 입력 정보가 필요. 이는 컴파일 된 버텍스 셰이더 개체의 바이트 코드에 포함되어있다. 그러므로 IA를 생성하는 코드의 형태는

CreateInputLayout(

인풋 속성 데스크,

데스크가 몇칸인지 크기,

버텍스버퍼 포인터,

버텍스 버퍼 크기,

인풋 레이아웃 아웃풋 포인터);