Heute habe ich mich damit beschäftigt, eine 3D-Engine auf Windows Phone (8) zu portieren. Im Prinzip handelte es sich schon vor dieser Aktion um relativ viele Klassen, welche sauber auf Windows Desktop und WinRT laufen (auch ARM). Ich wusste zwar schon, dass die Phone-Plattform noch einmal deutlich eingeschränkter ist, als etwa die WinRT-Plattform für Tablets, das ich so viel rumbasteln muss, hätte ich aber nicht gedacht. Hier eine kurze Sammlung der Punkte, auf die ich gestoßen bin.
Threading
Etwas Blödes gleich zu Anfang: Ich verwende sehr häufig Klassen aus dem System.Threading, System.Threading.Tasks und System.Threading.Concurrent Namensräumen. An dieser Stelle schmerzt ziemlich stark, dass scheinbar viele dieser Klasse auf dem Phone nicht verfügbar sind. So kann ich beispielsweise Parallel.For, ConcurrentQueue oder ConcurrentDictionary nicht verwenden. Klar, dass dadurch der ein oder andere dumme Workaround entsteht… So habe ich anstatt der ConcurrentQeueue einfach eine normale Queue genommen und mit locks gesichert. Nicht Ideal, aber fürs erste muss es reichen. Ich hoffe, dass Microsoft in der Zukunft hier etwas ausbaut.
Direct2D
Ein weiterer Rückschlag ist das Fehlen der Direct2D-API. Zunächst dachte ich, dass liegt nur an SharpDX, aber laut diesem Link scheint es allgemein auf der Plattform zu fehlen. Das ist übel… Für mich bedeutet das im Prinzip, dass ich auf alle Funktionen verzichten muss, die von Direct2D abhängen.
MEF
Das MEF-Framework benutze ich mittlerweile sehr gerne. Zwar ist die Verwendung bereits unter Windows Store Apps deutlich eingeschränkt (ich verwende MEF 2), aber unter Windows Phone existiert dieses Framework gar nicht. Schade… Der Workaround an dieser Stelle ist für mich dann einfach, alle Komponenten manuell zu laden und nicht automatisch. Also ganz wie früher…
Neben diesen drei Punkten gibt es auch noch ein paar andere Kleinigkeiten, insgesamt ist diese Portierung also nicht ohne… Ich bin schon gespannt, auf was ich noch alles stoße.
Direct2D ist ab Windows Phone 8.1 möglich…
Jop, ist auch so.
Bin aktuell mit entsprechend mit den UniversalApp Template am Testen. Funktioniert auch mit SharpDX bereits sehr gut.
Werde in den nächsten Tagen entsprechend noch einen Blog-Eintrag dazu schreiben.
Aber: Stand Windows Phone 8.0 fand ich hier so oder so schon etwas enttäuschend. Aber gut, ist halt einfach eine frühe Version.