16 Juni 2014

Portierung einer 3D-Engine auf Windows Phone #3

Phone 8.1 AppVor einigen Wochen habe ich meinen 3D-Renderer auf Windows Phone 8.0 stabil zum Laufen bekommen und bin dabei auf die eine oder andere Hürde gestoßen. Da mittlerweile das Windows Phone 8.1 SDK verfügbar ist und auch SharpDX die entsprechenden Funktionen implementiert, konnte ich nun also einen neueren Weg ausprobieren – die Universal Apps. Vorteil: Dieser Weg verspricht, dass das Coding zwischen WinRT auf normalen Windows PCs und Windows Phone fast komplett identisch ist. Auch SharpDX verspricht, dass dieser Weg damit bereits gut funktioniert und nebenbei eine ganze Liste Nachteile der vorherigen Lösung ausbügelt.

Noch einmal von vorne, was waren eigentlich die Nachteile vorher? Probleme gab es viele. Mir persönlich am meisten gestört haben folgende Punkte:

  • Keine „AnyCPU“-Version von SharpDX für Windows Phone 8.0
    Dieser Punkt führt dazu, dass jedes Projekt separat für X86 und ARM erstellt werden muss. X86 für den Fall, dass die App lokal mit dem Emulator getestet werden soll. ARM für den Fall, wenn die App auf das Handy getestet oder ausgerollt wird. Letzten Endes führte das bei mir zu zwei csproj.-Dateien pro Teilprojekt, da jeweils auch andere Dlls von SharpDX referenziert werden müssen.
  • Zahlreiche nützliche Features fehlen bei Windows Phone 8.0
    Die Liste ist lang: Direct2D, Teile der TPL (Task Parallel Library), WIC (Windows Imaging Component), MEF (Managed Extensibility Framework), …
  • Einbindung von Direct3D in die Xaml-Oberfläche wieder mal ganz anders
    Letzten Endes hatte ich durch Windows Phone neben Windows.Forms, WPF und WinRT den vierten Weg implementiert, 3D-Grafik auf die Oberfläche zu bringen. Irgendwann nervt es…

Bei der Umstellung auf Windows Phone 8.1 bin ich folgendermaßen vorgegangen. Zunächst habe ich die Teilprojekte für WinRT kopiert und auf Universal Apps umgestellt. Wichtig ist, die richtigen Templates zu verwenden. Laut sharpdx.org werden Windows Phone 8.1 Silverlight Apps nicht unterstützt. Das ist aber auch nicht schlimm, denn die Templates für Universal Apps sind darauf ausgelegt, dass diese gleichermaßen auf Windows 8.1 und Windows Phone 8.1 laufen. Bei den Verweisen auf SharpDX ist darauf zu achten, dass die Versionen für DirectX11.2_winrt verwendet werden. Die im DirectX11.2_wp81 Ordner funktionieren eben nur für das Phone und nicht für Windows PCs. Die Version für WinRT funktioniert per Universal App auf beiden Plattformen. Hier noch ein Screenshot dazu.


SharpDX Versionen

Das erste Positive nach der Umstellung: Die Projektmappe ist deutlich übersichtlicher geworden. Vorher hatte ich pro Plattform ein Teilprojekt, also insgesamt jeweils 4 (Desktop, WinRT, PhoneX86, PhoneARM). Nun habe ich nur noch zwei (Desktop und Universal). Hier ein Screenshot dazu.

Projektmappe Vorher - Nachher

Von dem Funktionsumfang des Frameworks her bin ich ebenfalls sehr positiv überrascht. Sowohl Direct2D, WIC oder die von mir vermissten Teile der TPC (z. B. ConcurrentQueue) sind allesamt vorhanden. Auch die Xaml-Oberfläche interagiert mit Direct3D auf genau die gleiche Art, wie bei Windows Store Apps bis jetzt gewohnt. So muss das aussehen!

Mein aktueller Stand ist auf den Screenshot ganz oben im Beitrag zu sehen. Viel weiter bin ich aktuell auch noch gar nicht gekommen. Mal gucken, auf was man noch so alles stößt…


Schlagwörter: , ,
Copyright 2019. All rights reserved.

Verfasst 16. Juni 2014 von Roland in category "Direct3D

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.