정점 버터를 재사용해서 그리는 속도를 향상시키는 기법.
VertexBuffer 는 총 0 ~ 15개의 슬롯이 있고 그 중에 일부가 인스턴스 버퍼로써 사용이 가능함.
그래서 실질적으론 VertexBuffer 와 내용은 똑같고, D3D11_INPUT_ELEMENT_DESC 에서 조정만 하면 됨.
Desc 의 내용을 위처럼 순서대로 정리하면
Semantic : hlsl 에서 쓰는 거.
Semantic Index : hlsl 에서 Semanic 옆에 0, 1, 2 적는 그거.
Format : 인자만 봐도 뭔지 쉽게 알 수 있는데, 들이 넣는 데이터 구조.
Input Slot : 이게 몇번째 VertexBuffer 에 들어가는지
AlignedByteOffset : 넣는 인자의 offset. 위에서 POSITION0 은 맨 앞에 있으니 당연히 오프셋 0, POSITION1 은 위의 인자가 자동으로 offset 을 계산해줌. 굳이 계산하면, 32비트 3개니까 12.
InputSlotClass : 인스턴싱은 여기가 핵심. D3D11_INPUT_PER_INSTANCE_DATA 넣으면 인스턴싱, D3D11_INPUT_PER_VERTEX_DATA 넣으면 그냥 정점
InstanceDataStepRate : 인스턴싱 데이터 하나마다 몇개 그릴건지 결정. 지금까지 0 또는 1만 써봤는데, 인스턴싱 버퍼 내부에선 통일되야지 맞는거 같기도하고... 아닌거 같기도 하고..
이렇게 버터 띄워놓고 DrawInstanced 나 DrawIndexedInstanced 함수로 그리면 됨.
댓글 없음:
댓글 쓰기