Zagadnienia dotyczące współdziałania Direct3D9 i WPF
Zawartość Direct3D9 można hostowane przy użyciu D3DImage klasy . Hostowanie zawartości Direct3D9 może mieć wpływ na wydajność aplikacji. W tym temacie opisano najlepsze rozwiązania w zakresie optymalizacji wydajności podczas hostowania zawartości Direct3D9 w Windows Presentation Foundation (WPF). Te najlepsze rozwiązania obejmują sposób użycia D3DImage i najlepsze rozwiązania w przypadku korzystania z systemu Windows Vista, Windows XP i ekranów z wieloma monitorami.
Uwaga
Przykłady kodu demonstrują te najlepsze rozwiązania, zobacz WPF and Direct3D9 Interoperation (Współdziałanie platform WPF i Direct3D9).
Oszczędne używanie funkcji D3DImage
Zawartość Direct3D9 hostowana w D3DImage wystąpieniu nie jest renderowana tak szybko, jak w czystej aplikacji Direct3D. Kopiowanie powierzchni i opróżnianie bufora poleceń może być kosztowne. Wraz ze wzrostem liczby D3DImage wystąpień następuje większe opróżnianie, a wydajność spada. W związku z tym należy używać D3DImage oszczędnie.
Najlepsze rozwiązania dotyczące systemu Windows Vista
Aby uzyskać najlepszą wydajność Windows Vista z ekranem skonfigurowanym do używania modelu sterownika wyświetlania Windows (WDDM), utwórz powierzchnię Direct3D9 IDirect3DDevice9Ex na urządzeniu. Umożliwia to udostępnianie powierzchni. Karta wideo musi obsługiwać możliwości sterowników D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES i D3DCAPS2_CANSHARERESOURCE na Windows Vista. Wszelkie inne ustawienia powodują skopiowanie powierzchni za pomocą oprogramowania, co znacznie zmniejsza wydajność.
Uwaga
Jeśli Windows Vista ma ekran skonfigurowany do używania modelu sterowników wyświetlania (XDDM) Windows XP, powierzchnia jest zawsze kopiowana za pośrednictwem oprogramowania, niezależnie od ustawień. Przy odpowiednich ustawieniach i karcie wideo zobaczysz lepszą wydajność na komputerze Windows Vista podczas korzystania z programu WDDM, ponieważ kopie powierzchni są wykonywane na sprzęcie.
Najlepsze rozwiązania dotyczące Windows XP
Aby uzyskać najlepszą wydajność Windows XP, która korzysta z modelu sterownika wyświetlania Windows XP (XDDM), utwórz zablokowaną powierzchnię, IDirect3DSurface9::GetDC która działa prawidłowo po wywołanym metodzie. Wewnętrznie metoda przenosi BitBlt powierzchnię między urządzeniami w sprzęcie. Metoda GetDC zawsze działa na powierzchniach XRGB. Jeśli jednak na komputerze klienckim działa program Windows XP z dodatkiem SP3 lub SP2, a klient ma również poprawkę dla funkcji okna warstwowego, ta metoda działa tylko na powierzchniach ARGB. Karta wideo musi obsługiwać możliwości D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES sterownika.
Głębokość wyświetlania 16-bitowego pulpitu może znacznie zmniejszyć wydajność. Zalecany jest pulpit 32-bitowy.
Jeśli opracowujesz oprogramowanie dla Windows Vista i Windows XP, przetestuj wydajność na Windows XP. Zużycie pamięci wideo na Windows XP jest problemem. Ponadto na komputerze D3DImage Windows XP używa więcej pamięci wideo i przepustowości niż Windows Vista WDDM, ze względu na niezbędne dodatkowe kopię pamięci wideo. W związku z tym można oczekiwać, że wydajność będzie wyższa na Windows XP niż na Windows Vista dla tego samego sprzętu wideo.
Uwaga
XDDM jest dostępny zarówno na Windows XP i Windows Vista, jednak WDDM jest dostępna tylko na Windows Vista.
Najlepsze rozwiązania ogólne
Podczas tworzenia urządzenia użyj flagi D3DCREATE_MULTITHREADED tworzenia. Zmniejsza to wydajność, ale system renderowania WPF wywołuje metody na tym urządzeniu z innego wątku. Pamiętaj, aby poprawnie postępować zgodnie z protokołem blokowania, dzięki czemu żadne dwa wątki nie uzyskają dostępu do urządzenia w tym samym czasie.
Jeśli renderowanie jest wykonywane w wątku zarządzanym WPF, zdecydowanie zaleca się utworzenie urządzenia z flagą D3DCREATE_FPU_PRESERVE tworzenia. Bez tego ustawienia renderowanie D3D może zmniejszyć dokładność operacji podwójnej dokładności WPF i wprowadzić problemy z renderowaniem.
Układanie kafelka jest D3DImage szybkie, chyba że kafelek powierzchni innego niż pow2 bez obsługi sprzętowej lub kafelek lub DrawingBrushVisualBrush zawierający .D3DImage
Najlepsze rozwiązania dotyczące ekranów z wieloma monitorami
Jeśli używasz komputera z wieloma monitorami, postępuj zgodnie z opisanymi wcześniej najlepszymi rozwiązaniami. Istnieją również pewne dodatkowe zagadnienia dotyczące wydajności w przypadku konfiguracji z wieloma monitorami.
Po utworzeniu buforu wstecz jest on tworzony na określonym urządzeniu i karcie, ale WPF może wyświetlać bufor przednia na dowolnej karcie sieciowej. Kopiowanie między kartami w celu zaktualizowania buforu przedniego może być bardzo kosztowne. Na Windows Vista, który jest skonfigurowany do używania WDDM IDirect3DDevice9Ex z wieloma kartami wideo i z urządzeniem, jeśli bufor przednie znajduje się na innej karcie, ale nadal tej samej karty wideo, nie ma wydajności. Jednak w przypadku Windows XP i XDDM z wieloma kartami wideo istnieje znacząca spadek wydajności, gdy bufor przednia jest wyświetlany na innej karcie niż bufor wstecz. Aby uzyskać więcej informacji, zobacz WPF and Direct3D9 Interoperation (Współdziałanie WPF i Direct3D9).
Podsumowanie wydajności
W poniższej tabeli przedstawiono wydajność aktualizacji buforu przedniego jako funkcję systemu operacyjnego, formatu pikseli i blokady powierzchni. Zakłada się, że bufor przed i z tyłu znajdują się na tej samej karcie. W zależności od konfiguracji karty aktualizacje sprzętowe są zwykle znacznie szybsze niż aktualizacje oprogramowania.
| Format pikseli powierzchni | Windows Vista, WDDM i 9Ex | Inne Windows vista | Windows XP z dodatkiem SP3 lub SP2 z poprawek | Windows XP z dodatkiem SP2 |
|---|---|---|---|---|
| D3DFMT_X8R8G8B8 (nie można zablokować) | Aktualizacja sprzętu | Aktualizacja oprogramowania | Aktualizacja oprogramowania | Aktualizacja oprogramowania |
| D3DFMT_X8R8G8B8 (z blokadą) | Aktualizacja sprzętu | Aktualizacja oprogramowania | Aktualizacja sprzętu | Aktualizacja sprzętu |
| D3DFMT_A8R8G8B8 (nie można zablokować) | Aktualizacja sprzętu | Aktualizacja oprogramowania | Aktualizacja oprogramowania | Aktualizacja oprogramowania |
| D3DFMT_A8R8G8B8 (z blokadą) | Aktualizacja sprzętu | Aktualizacja oprogramowania | Aktualizacja sprzętu | Aktualizacja oprogramowania |