우선 "그리기 호출"을 사용하면 특정 상태 (셰이더, 블렌드 상태 등)의 삼각형으로 특정 꼭지점 집합을 렌더링하도록 GPU에 지시하는 명령을 의미한다고 가정합니다.
그리기 호출은 반드시 비싸지는 않습니다. 이전 버전의 Direct3D에서는 컨텍스트 스위치가 많이 필요했지만 많은 비용이 듭니다. 그러나 최신 버전에서는 그렇지 않습니다.
그리기 호출을 적게하는 주된 이유는 그래픽 하드웨어가 전송할 수있는 것보다 훨씬 빨리 삼각형을 변환하고 렌더링 할 수 있기 때문입니다. 각 호출마다 삼각형을 거의 전송하지 않으면 CPU에 완전히 얽매여 있으며 GPU는 대부분 유휴 상태가됩니다. CPU는 GPU를 충분히 빠르게 공급할 수 없습니다.
두 개의 삼각형을 사용하여 한 번의 그리기 호출을 만드는 것은 저렴하지만 각 호출마다 데이터를 너무 적게 제출하면 GPU에 많은 지오메트리를 제출할 수있는 충분한 CPU 시간을 확보 할 수 없습니다.
그리기 호출을하는 데 약간의 비용이 들기 때문에 여러 가지 상태 (사용할 정점 집합, 사용할 셰이더 집합 등)를 설정해야하며 상태 변경은 하드웨어 측면 (다수의 레지스터 업데이트) 및 드라이버 측 (상태를 설정하는 호출 유효성 검사 및 변환).
각 호출이 너무 적은 데이터를 제출하는 경우에만 그리기 호출의 주 비용이 부과됩니다.이 경우 CPU 사용이 제한되어 하드웨어를 완전히 사용하지 못하게 될 수 있습니다.
그리기 호출을 사용하면 명령 버퍼가 플러시 될 수 있지만 내 경험에 따르면 일반적으로 기하학을 제출할 때가 아니라 SwapBuffers를 호출 할 때 발생합니다. 비디오 드라이버는 일반적으로 GPU에서 최대한 병렬 처리하기 위해 가능한 한 많이 버퍼링하려고합니다 (몇몇 프레임은 때로는!).
당신은 nVidia 프리젠 테이션 Batch Batch Batch!을 읽어야합니다. 상당히 오래된 것이지만이 주제를 정확하게 다루고 있습니다.
오, 네,이 Q 주셔서 감사합니다. –