문제

나는 코딩 3d 응용 프로그램 DirectX10 는지 궁금하는 방법 tackeling 의 Shadermanagement 입니다.

그것은 가장 효과적인 미리 로드하는 모든이더가 있는 응용 프로그램에서 시작하고 다음으로 사용할 필요한 또는 이 열차는 리소스 하드웨어의 경우에는 번호가 높다.

또한 궁금하는 경우 그것은 속도를 고려하기 위해 렌더링에 의해 셰이더 그래서 셰이더 스위치를 최소화되어 있습니다.

도움이 되었습니까?

해결책

나는 DX10과 함께 일하지 않았지만 DX9 만했지만 이러한 것들이 여전히 동일하다고 생각합니다.

애플리케이션에 따라 실제로 런타임에 셰이더를 생성 할 수 있습니다 (현재의 많은 정교한 3D 게임이이를 수행합니다).

셰이더를 사전로드하는 것은 셰이더를 생성하는지, 얼마나 많은 것이 있는지, 메모리 고려 사항이 무엇인지에 따라 나쁜 생각이 아닙니다. 그러나 셰이더를 사전로드하면 (ID3DXEffect 인스턴스를 생성한다는 것을 의미한다고 가정 함) CPU 사용량이없는 런타임에서만 메모리 만 가져옵니다.

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

DrawCalls를 정렬하려면 다음을 읽으십시오. http://realtimecollisiondetection.net/blog/?p=86

다른 팁

에 D3D10,모든 장치의 자원을 가상화 그래서 당신은 밖으로 실행되지 않습니다.물론 당신은 여전히 수 있습 배출 물리적 자원을 카드에 많이 맞지 않을 경우 주의하여 당신이 무엇을하고있다.

또한,그들은 변화 장치 상태게의 비용을 감소시키는 스위칭,상태를 포함한 쉐이더.

하지만 당신이 정말로 요청은"은 방법은 X 보다 더 빨리 방법 Y 에 대한 내용까?"라고 있지만 D3D10 단순화 상태 관리를 스위칭 빠른 상태,유일한 방법은 위의 질문에 대답은 성능을 측정 귀하의 응용 프로그램과 귀하의 데이터입니다.

이 realtimecollectiondetection.net 블로그 게시물에 대해 얘기 정렬하 그리기 호출합니다.이로 이어질 것입 적은 상태로 전환합니다.얼마나 빠르게 상태를 전환하고,그것의 더 적은 항상 빠릅니다.그래서 좋은 일반적인 조언입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top