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.