Share via


Direct3D9 및 WPF 상호 운용성을 위한 성능 고려 사항

D3DImage 클래스를 사용하여 Direct3D9 콘텐츠를 호스트할 수 있습니다. Direct3D9 콘텐츠를 호스트하면 애플리케이션 성능이 영향을 받을 수 있습니다. 이 토픽에서는 WPF(Windows Presentation Foundation) 애플리케이션에서 Direct3D9 콘텐츠를 호스트할 때 성능을 최적화하는 모범 사례를 설명합니다. 이러한 모범 사례에는 Windows Vista, Windows XP 및 다중 모니터 디스플레이를 사용할 때 D3DImage 및 모범 사례를 사용하는 방법이 포함되어 있습니다.

참고

이러한 모범 사례를 보여주는 코드 예는 WPF 및 Direct3D9 상호 운용성을 참조하세요.

최소한으로 D3DImage 사용

D3DImage 인스턴스에서 호스트되는 Direct3D9 콘텐츠는 순수 Direct3D 애플리케이션만큼 빠르게 렌더링되지 않습니다. 표면 복사 및 명령 버퍼 플러시 작업에 비용이 많이 들 수 있습니다. D3DImage 인스턴스 수가 증가하면 더 많은 플러시가 발생하고 성능이 저하됩니다. 따라서 가능하면 D3DImage를 사용하지 않아야 합니다.

Windows Vista 모범 사례

WDDM(Windows Display Driver Model)을 사용하도록 구성된 디스플레이가 있는 Windows Vista에서 최상의 성능을 얻으려면 IDirect3DDevice9Ex 디바이스에서 Direct3D9 표면을 만듭니다. 이렇게 하면 표면 공유를 사용할 수 있습니다. Windows Vista의 비디오 카드에서는 D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURESD3DCAPS2_CANSHARERESOURCE 드라이버 기능을 지원해야 합니다. 다른 설정으로 인해 표면이 소프트웨어를 통해 복사되므로 성능이 크게 저하됩니다.

참고

Windows Vista에 XDDM(Windows XP Display Driver Model)을 사용하도록 구성된 디스플레이가 있으면 표면은 설정에 관계없이 항상 소프트웨어를 통해 복사됩니다. 적절한 설정과 비디오 카드를 사용하면 표면 복사본이 하드웨어에서 수행되므로 WDDM을 사용할 때 Windows Vista에서 더 우수한 성능을 확인할 수 있습니다.

Windows XP 모범 사례

XDDM(Windows XP Display Driver Model)을 사용하는 Windows XP에서 최상의 성능을 얻으려면 IDirect3DSurface9::GetDC 메서드가 호출될 때 올바르게 동작하는 잠글 수 있는 표면을 만듭니다. 내부적으로 BitBlt 메서드는 표면을 하드웨어의 디바이스 간에 전송합니다. GetDC 메서드는 항상 XRGB 표면에서 작동합니다. 그러나 클라이언트 컴퓨터에서 Windows XP SP3 또는 SP2가 실행 중이고 클라이언트에 계층적 창 기능에 대한 핫픽스도 있으면 이 메서드는 ARGB 표면에서만 작동합니다. 비디오 카드에서 D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES 드라이버 기능을 지원해야 합니다.

16비트 데스크톱 디스플레이 깊이는 성능을 크게 줄일 수 있습니다. 32비트 데스크톱을 사용하는 것이 좋습니다.

Windows Vista 및 Windows XP용으로 개발하는 경우 Windows XP에서 성능을 테스트합니다. Windows XP에서 비디오 메모리 부족이 발생할 수 있습니다. 또한 Windows XP의 D3DImage는 필요한 추가 비디오 메모리 복사로 인해 Windows Vista WDDM보다 더 많은 비디오 메모리와 대역폭을 사용합니다. 따라서 동일한 비디오 하드웨어의 성능이 Windows Vista보다 Windows XP에서 더 저하될 수 있습니다.

참고

XDDM을 Windows XP와 Windows Vista 모두에서 사용할 수 있지만 Windows Vista에서만 WDDM을 사용할 수 있습니다.

일반 모범 사례

디바이스를 만들 때 D3DCREATE_MULTITHREADED 생성 플래그를 사용합니다. 이렇게 하면 성능이 저하되지만 WPF 렌더링 시스템이 다른 스레드에서 이 디바이스의 메서드를 호출합니다. 두 스레드가 동시에 디바이스에 액세스하지 않도록 잠금 프로토콜을 올바르게 따라야 합니다.

WPF 관리 스레드에서 렌더링을 수행하는 경우 D3DCREATE_FPU_PRESERVE 생성 플래그를 사용하여 디바이스를 만드는 것이 좋습니다. 이 설정이 없으면 D3D 렌더링으로 인해 WPF 배정밀도 작업의 정확도가 줄어들고 렌더링 문제가 발생할 수 있습니다.

하드웨어 지원 없이 pow2가 아닌 표면을 타일로 배열하거나 D3DImage 타일이 포함된 DrawingBrush 또는 VisualBrush를 타일로 배열하지 않는 한 D3DImage가 빠르게 바둑판식으로 배열됩니다.

다중 모니터 디스플레이 모범 사례

모니터가 여러 개 있는 컴퓨터를 사용하는 경우 앞에서 설명한 모범 사례를 따라야 합니다. 다중 모니터 구성에 대한 몇 가지 추가 성능 고려 사항도 있습니다.

백 버퍼를 만들 때 백 버퍼는 특정 디바이스와 어댑터에 생성되지만 WPF에서 전면 버퍼를 모든 어댑터에 표시할 수 있습니다. 어댑터 간에 복사하여 전면 버퍼를 업데이트하면 비용이 많이 들 수 있습니다. 여러 비디오 카드와 IDirect3DDevice9Ex 디바이스와 함께 WDDM을 사용하도록 구성된 Windows Vista에서 전면 버퍼가 다른 어댑터에 있지만 여전히 같은 비디오 카드에 있으면 성능이 저하되지 않습니다. 그러나 비디오 카드가 여러 개 있는 Windows XP 및 XDDM에서는 전면 버퍼가 백 버퍼와 다른 어댑터에 표시되면 성능이 크게 저하됩니다. 자세한 내용은 WPF 및 Direct3D9 상호 운용성을 참조하세요.

성능 요약

다음 표에서는 운영 체제, 픽셀 형식 및 표면 잠금 기능으로써 전면 버퍼 업데이트의 성능을 보여줍니다. 전면 버퍼와 백 버퍼가 같은 어댑터에 있는다고 가정합니다. 어댑터 구성에 따라 하드웨어 업데이트는 일반적으로 소프트웨어 업데이트보다 훨씬 빠릅니다.

표면 픽셀 형식 Windows Vista, WDDM 및 9Ex 기타 Windows Vista 구성 Windows XP SP3 또는 SP2(핫픽스 포함) Windows XP SP2
D3DFMT_X8R8G8B8(잠글 수 없음) 하드웨어 업데이트 소프트웨어 업데이트 소프트웨어 업데이트 소프트웨어 업데이트
D3DFMT_X8R8G8B8(잠금 가능) 하드웨어 업데이트 소프트웨어 업데이트 하드웨어 업데이트 하드웨어 업데이트
D3DFMT_A8R8G8B8(잠글 수 없음) 하드웨어 업데이트 소프트웨어 업데이트 소프트웨어 업데이트 소프트웨어 업데이트
D3DFMT_A8R8G8B8(잠금 가능) 하드웨어 업데이트 소프트웨어 업데이트 하드웨어 업데이트 소프트웨어 업데이트

참고 항목