학교에서 다이렉스X 12 프랭크 루나 책으로 수업했는데

거기서 인스턴싱 할때 예제는 렌더 아이템 하나만 있는것만 하는데

렌더 아이템 여러개일때 인스턴싱 어떻게함


예제 코드에 있는 주석에는 인스턴스 버퍼를 렌더 아이템당 하나씩 만들어야 한다는데

그러면 하드코딩 아님?


그래서 교수한테 물어보니까 렌더 아이템 A랑 B가 있을때

A는 10개 그리고 B는 15개 그릴때 인스턴스 버퍼에


        0-9                      10-24

A instance data       B instance data


이런식으로 넣어놓고


int numInstance = 0;

for(대충 렌더 아이템 갯수만큼)

{

    대충 다른 처리들

    cmdList->DrawIndexedInstanced(대충 매개변수들, numInstance);

    numInstance += 렌더 아이템 인스턴스 갯수;

}


DrawRenderItem 함수를 저렇게 만들면 A 그릴때 인스턴스 버퍼 0-9번째 가져다 쓰고

B 그릴때는 10에서부터 24까지 가져다 쓰니까 인스턴스 버퍼 하나로 할 수 있다는 거임


근데 직접 해봐도 A가 0-9, B는 0-14번째 데이터만 쓰는거야

다렉12 마소 다큐먼트를 봐도 마지막 파라미터 설명이 오프셋인데

이거는 교수도 왜안되는지 모르겠다고 하던데 이게 안되면

인스턴스 버퍼를 렌더 아이템 갯수만큼 InstanceBuffer2, 3 이런식으로 여러개 만들라는거야


교수가 제안한 다른 해결법으로는 매터리얼 다이나믹 인덱싱 할때처럼 hlsl코드에 인스턴스 버퍼를 배열로 만들고 오브젝트마다 

인덱스를 줘서 렌더 아이템마다 다른 인스턴스 버퍼를 쓰게만들래

근데 hlsl에서 스트럭처 버퍼를 배열로 만들면 거기에 값을 대체 어떻게 넘겨줌


구글에 쳐봐도 다들 하나만 인스턴싱해서 마지막 매개변수 건드릴 일이 없으니까 0만 쓰고

심지어 마소 예제를 봐도 인스턴싱 하는게 없음


다렉12 쌉고수나 이런문제 자세한 튜토리얼 아는 갤럼 도움좀