In den letzten Wochen habe ich mich darauf konzentriert, Möglichkeiten zu schaffen, um Seeing# leichter in C# Apps einbinden zu können – völlig egal ob diese am Desktop oder als Windows Universal App laufen. Ziel ist, dass die Einbindung in allen Fällen möglichst einfach und möglichst ähnlich durchgeführt werden kann. Zu diesem Zweck habe ich die verschiedenen Steuerelemente für WPF und Universal Apps modifiziert, so gibt es jetzt in WPF einen eigenen Xaml-Namespace. Der größere Punkt ist aber eine Einführung eines Komponenten-Systems, mit dem man bereits im Xaml verschiedene Aspekte der 3D-Anzeige zusammenbauen kann. Beispielweise, welche Objekte dargestellt werden sollen und wie die Bedienung der Kamera funktionieren soll.
OpenSource
SeeingSharp und .Net Native
Die letzte Zeit habe ich mich damit beschäftigt, den SampleContainer von Seeing# als App für den neuen Windows Store in Windows 10 zu veröffentlichen. Interessanterweise müssen alle Windows 10 Universal Apps mit .Net Native kompiliert sein, damit man diese hochladen kann [1]. Für kleinere Apps habe ich das vorher schon mal ausprobiert, es gab keine nennenswerten Probleme. Bei Seeing# allerdings musste ich einige Zeit rumspielen, bis es schließlich erfolgreich mit .Net Native kompiliert wurde und als Paket durch die Prüfungen des Windows Store ging. Hier in diesem Artikel habe ich ein paar Punkte zusammengestellt, die ich speziell dafür anpassen musste.
SeeingSharp auf Windows 10
In den letzten Tagen habe ich meinem PC und Tablet auf Windows 10 geupdated. Um mir einen gewissen Überblick aus Sicht der Softwareentwicklung zu machen, war ich letzten Donnerstag bei der .Net Usergroup Nürnberg, wo einige der neuen Möglichkeiten durch Daniel Meixner und Marco Richardson vorgestellt wurden [1]. Seit heute früh spiele ich entsprechend stärker mit Visual Studio rum und versuche, den SampleContainer von Seeing# für die neue „Universal Windows“ Plattform zu erstellen. Universal Windows ist hierbei sehr ähnlich den Universal-Projekten von Windows 8 / 8.1, allerdings handelt es sich jetzt nicht mehr um mehrere C#-Projekte mit einem Shared Project, sondern nur noch um ein einziges C#-Projekt, welches dann auf allen Windows Plattformen läuft – das wären dann XBox, IoC, Phone, Tablet, PC und der Surface Hub.
SeeingSharp, C# 4.6 und SIMD
Seit dem Release von .Net 4.6 am 20 Juli ist neben vielen anderen neuen Features auch der neue 64-Bit Jit Compiler RyuJIT und damit neue SIMD-Befehle (Single Instruction Multiple Data) verfügbar. Einige offizielle Infos dazu finden sich z. B. auf dem .Net Blog unter den Punkten RyuJIT und SIMD [1]. Was versteckt sich nun konkret hinter dem Stichwort SIMD bei .Net? Es handelt sich um den Namensraum System.Numerics [2]. Die darin enthaltenen Strukturen ähneln dem Vector3, Vector2, der Matrix4x4 und weiteren Strukturen, wie man sie auch in SharpDX, SlimDX oder bei mir in Seeing# wiederfindet. Der Unterschied ist, dass bei den verschiedenen Methoden – falls verfügbar – speziell optimierte Prozessorfunktionen angesprochen werden und diese damit entsprechend schneller ausgeführt werden.
Direct2D-Integration in SeeingSharp
Heute früh habe ich mir ein paar Videos von der diesjährigen Build angesehen und bin dabei auf den Talk „Introducing Win2D“ gestoßen [1]. Über diese API habe ich zwar schon vorher gelesen, habe sie mir bis jetzt aber noch nicht tiefer angeschaut, da ich Direct2D normalerweise per SharpDX direkt von C# aus verwende. Grundsätzlich finde ich es aber sehr gut, dass Microsoft selbst an einen Weg arbeitet, die Direct2D-API über Win2D auch für C#/.Net Entwickler verfügbar zu machen. Die Performance ist super und die API der von System.Drawing sehr ähnlich. Einzig die Tatsache, dass Win2D für Universal Apps ausgelegt ist, finde ich etwas schade. In Seeing# etwa binde ich auch Direct2D ein, mache das dann aber auch für Desktop-Plattformen, also Win.Forms, WPF und Universal/WinRT. Schnelles hardwarebeschleunigtes 2D-Rendering ist schließlich auch bei Desktop-Programmen interessant.
Logikbausteine in SeeingSharp
Neulich habe ich darüber geschrieben, wie Seeing# das Messenger-Pattern implementiert. Im Rahmen eines kleinen Memory-Spiels habe ich die letzten Tage damit einige kleine Logig-Komponenten umgesetzt, an denen das Pattern relativ gut funktioniert. In diesem Artikel geht es beispielsweise um eine Komponente, welche sich um das Aufdecken von Karten und das Erkennen von richtigen oder falschen Paaren kümmert und darauf entsprechend die Karten wieder verdeckt oder eine Folgelogik wie z. B. „Punktzahl hochzählen“ antriggert. Der Screenshot links gibt schon mal eine grobe Übersicht über die hier eingesetzten Klassen.
FrozenSky umbenannt in SeeingSharp
Am letzten Wochenende habe ich mein OpenSource-Projekt FrozenSky umbenannt in Seeing#. Der Grund ist schlicht der, dass der Begriff FrozenSky im Prinzip gar nichts mit der Sache zu tun hat, welche sich hinter dem Projekt verbirgt. Es geht um ein Multimedia-Toolkit für C# mit Schwerpunkt auf 2D- und 3D-Grafiken. Ich wollte einen Namen haben, der … Weiterlesen …
Einstiegs-Tutorial für SeeingSharp
Seitdem ich den Code von SeeingSharp auf Github hochgeladen habe, bastle ich daran auch relativ viel rum. Ziel ist für mich aktuell, nicht nur einen Haufen Quellcode-Dateien auf Github zu haben, stattdessen sollen auch einige Einstiegshilfen und Wiki-Einträge verfügbar sein, dass sich andere Interessenten möglichst einfach einarbeiten können. Der erste Schritt zu diesem Ziel ist ein kleines Einstiegstutorial bestehend aus vier C#-Projekten, jeweils angelegt als Windows Store Apps. Warum jetzt genau Windows Store war für mich erst einmal Nebensache, wichtig und für alle Plattformen gleich ist der Aufbau der Szene, die Konfiguration der Kamera, die Definition von Animationen oder die Suche nach Objekten unterhalb des Maus-Cursors.
3D-Engine SeeingSharp goes OpenSource #2
Endlich erledigt, heute früh habe ich SeeingSharp zusammen mit dem Quellcode von RK 2048 auf GitHub unter [1] hochgeladen. Wie im letzten Post geschrieben, steht der Code unter GPLv3 und kann somit von jedem frei eingesehen, verwendet und modifiziert werden, sofern man sich an die Bedingungen der GPL hält. Für mich soll die Library in Zukunft als Basis für weitere Hobby-Entwicklungen, meine Vorträge/Artikel und für Posts auf dieser Homepage dienen.
3D-Engine SeeingSharp goes OpenSource
Seit einer ganzen Weile schiebe ich das schon vor mir her: Das Grundgerüst, welches ich die letzten Jahre für eigene Test-Entwicklungen, kleine Spiele etc. verwendet habe, möchte ich als OpenSource bereitstellen. Die Feature-Liste kann sich hierbei sehen lassen: Integration Direct3D/Direct2D, Integration in WPF/Win.Forms/WinRT, hohe Parallelisierung (Multithreading), Software-Rendering, Unterstützung mehrerer Grafikkarten und noch vieles mehr. Nun, da ich mein Studium im Januar dieses Jahres abgeschlossen habe, kann ich mich nun um das Thema OpenSource kümmern. ABER: Ganz so einfach wie „ich lads einfach mal hoch..“ ist es leider nicht.