Używanie języka XAML z holograficzne aplikacje DirectX

Uwaga

Ten artykuł dotyczy starszych natywnych interfejsów API winRT. W przypadku nowych projektów aplikacji natywnych zalecamy używanie interfejsu API OpenXR.

W tym temacie opisano wpływ przełączania między widokami XAML 2D i immersywnymi widokami w aplikacji DirectX oraz sposób efektywnego korzystania zarówno z widoku XAML, jak i widoku immersyjnego.

Omówienie przełączania widoku XAML

Na urządzeniu HoloLens aplikacja immersywna, która może później wyświetlać widok XAML 2D, musi najpierw zainicjować ten widok XAML i natychmiast przełączyć się z tego miejsca do widoku immersyjnego. Kod XAML zostanie załadowany przed wykonaniem dowolnych czynności przez aplikację, co zwiększa czas uruchamiania. Kod XAML będzie nadal zajmować miejsce na pamięci w procesie aplikacji, gdy pozostanie w tle. Ilość opóźnienia uruchamiania i użycia pamięci zależy od tego, co aplikacja robi z językiem XAML przed przełączeniem się do widoku natywnego. Jeśli nie zrobisz nic w kodzie uruchamiania XAML na początku, z wyjątkiem uruchomienia widoku immersyjnego, wpływ powinien być niewielki. Ponadto, ponieważ renderowanie holograficzne odbywa się bezpośrednio w widoku immersyjnym, należy unikać wszelkich ograniczeń związanych z językiem XAML dotyczących tego renderowania.

Użycie pamięci jest liczone zarówno dla procesora CPU, jak i procesora GPU. Funkcja Direct3D 11 może zamienić wirtualną pamięć graficzną, ale może nie być w stanie zamienić niektórych lub wszystkich zasobów procesora GPU XAML i może wystąpić zauważalna wydajność. Tak czy inaczej, nie ładujesz żadnych funkcji XAML, których nie potrzebujesz, pozostawisz więcej miejsca dla aplikacji i zapewni lepsze środowisko pracy.

Przepływ pracy przełączania widoku XAML

Przepływ pracy aplikacji, która przechodzi bezpośrednio z języka XAML do trybu immersyjnego, wygląda następująco:

  • Aplikacja zostanie uruchomiona w widoku XAML 2D.
  • Sekwencja uruchamiania XAML aplikacji wykrywa, czy bieżący system obsługuje renderowanie holograficzne:
  • Jeśli tak, aplikacja tworzy widok immersyjny i od razu przenosi go na pierwszy plan. Ładowanie kodu XAML jest pomijane dla niczego, co nie jest konieczne na urządzeniach Windows Mixed Reality, w tym wszelkie klasy renderowania i ładowanie elementów zawartości w widoku XAML. Jeśli aplikacja używa języka XAML do wprowadzania za pomocą klawiatury, ta strona wejściowa powinna być nadal tworzona.
  • Jeśli tak nie jest, widok XAML może kontynuować pracę w zwykły sposób.

Porada dotycząca renderowania grafiki w obu widokach

Jeśli aplikacja musi zaimplementować pewną ilość renderowania w programie DirectX dla widoku XAML w Windows Mixed Reality, najlepszym rozwiązaniem jest utworzenie jednego modułu renderującego, który może pracować z obydwoma widokami. Moduł renderujący powinien być jednym wystąpieniem, do którego można uzyskać dostęp z obu widoków, i powinno przełączać się między renderowaniem 2D a renderowaniem holograficznym. Dzięki temu zasoby procesora GPU są ładowane tylko raz, co zmniejsza czas ładowania, wpływ pamięci i ilość zamienionych zasobów podczas przełączania widoków.