2009-05-08 5 views
2

저는 DirectX 10을 사용하여 3d 응용 프로그램을 코딩하고 있으며 Shadermanagement의 태클이 어떻게되는지 궁금합니다.Direct3D 10 및 Shader 관리

는 가장 효과적인 응용 프로그램 시작에이 모든 쉐이더를 미리로드 한 후 필요하거나 수를 더 얻는 경우에 하드웨어의이 열차에게 자원을 수행로를 사용하는 것입니다. 이 셰이더 스위치가 최소화되도록 셰이더 렌더링을 주문하는 속도를 고려 경우

또한 궁금.

답변

2

나는 DX10 만 DX9 함께 일한 적이 없다, 그러나 나는 이러한 일들이 여전히 동일 같은데요.

응용 프로그램에 따라, 당신은 실제로 런타임에 쉐이더를 생성 할 수 있습니다 (많은 현재의 정교한 3D 게임이 작업을 수행). 쉐이더를 미리로드

당신이 쉐이더를 생성하는 경우에 따라 나쁜 생각이 아니다, 얼마나 많은, 메모리 고려 사항이 무엇인지 - 그것은 의존한다. 그러나 셰이더를 미리로드하면 (ID3DXEffect 인스턴스를 만드는 것을 의미한다고 가정 함) 런타임에만 CPU 사용량이 필요하지 않습니다.

쉐이더로 정렬하는 것이 좋습니다. 일반적으로 재료별로 정렬하는 것이 좋습니다. 전환 쉐이더는 약간의 오버 헤드가 발생하기 때문에 (과도하지는 않지만 앱의 복잡성에 따라 눈에 띄기 때문입니다.)

당신의 drawcalls를 정렬

이 읽기 ​​: 당신이 그들 부족하지 않도록 http://realtimecollisiondetection.net/blog/?p=86

1

가 D3D10에서 모든 장치 자원을 가상화하고 있습니다. 물론, 카드의 물리적 인 자원을 고갈시킬 수 있으며, 자신이하는 일에주의를 기울이지 않으면 많은 쓰러 뜨림을 유발할 수 있습니다.

또한 장치 상태를 크게 변경하여 셰이더를 비롯한 스위칭 상태의 비용을 줄였습니다.

하지만 실제로 묻는 것은 "메서드 Y가 내 응용 프로그램의 메서드 Y보다 빠릅니까?"입니다. D3D10 빠르게 상태를 전환하기 위해 상태 관리를 단순화 있지만하고, 위의 질문에 대답 할 수있는 유일한 방법은 당신의 응용 프로그램과 당신의 데이터 성능 측정을하는 것입니다.

realtimecollectiondetection.net 블로그 게시물은 무승부 콜을 정렬하는 것에 불과합니다. 이것은 더 적은 상태 전환으로 이어질 것입니다. 얼마나 빠른 상태 스위칭이 중요하든 상관없이 항상 더 빠름을 의미합니다. 이것이 일반적인 조언입니다.