Mai 02

Worklog Seeing# 2: Styling für ModelViewer

Dieses Wochenende ist für mich der ModelViewer von Seeing# wieder in den Fokus gerückt. Grund war ursprünglich, dass ich mehrere Detailinformationen zum geladenen 3D-Modell anzeigen wollte (z. B. Anzahl Polygone). Da ich dazu ein neues Fenster gemacht habe, habe ich bei der Gelegenheit auch das Styling des ModelViewers etwas überarbeitet. Für mich zunächst leichtes Neuland, da ich sonst eines der großen kommerziellen UI-Frameworks für WPF gewohnt bin. Nach etwas Recherche in der OpenSource-Welt und ein paar kleinen Testprojekten bin ich aber sehr positiv überrascht, wie gut und schnell man hier auch mit OpenSource-Komponenten zum Ziel kommt.

Weiterlesen
Feb 23

Worklog Seeing# 2: Memory Management

In den letzten zwei Monaten habe ich mich intensiver mit Speicher-Management in .Net beschäftigt. Auslöser dafür war das Buch Pro .Net Memory Management von Konrad Kokosa [1]. Anhand der Erkenntnisse daraus habe ich verschiedene Stellen von Seeing# dahingehend angepasst, dass während der zyklischen Rendering- und Update-Logik insgesamt sorgsamer mit der Erzeugung von Objekten umgegangen wird. Grundsätzlich habe ich das Thema zwar schon immer beachtet, allerdings etwas unterschätzt – vor meinen Änderungen wurden im Kern von Seeing# pro Schleifendurchlauf locker 50-100 Objekte erzeugt, was bei ca. 60 Frames pro Sekunde 3.000 bis 6.000 Objekte bedeutet, um die sich der Garbage Collector kümmern muss. Und das auch ohne, dass der User irgendetwas macht (z. B. 3D-Kamera bewegen o. Ä.). Hier im Artikel stelle ich einige Anpassungen vor, die ich in den letzten Monaten gemacht habe.

Weiterlesen
Aug 19

Worklog Seeing# 2: Start

Für das Projekt Seeing# habe ich bereits sehr viele Stunden investiert. Begonnen mit dem 3D-Rendering ist das Framework über die Jahre sehr in die Breite gewachsen, etwa mit der Unterstützung für Video mit der Media Foundation oder einfachen Funktionen zur Wiedergabe von Musik und kurzen Sounds. Zudem habe ich öfters allgemeine Infrastruktur-Themen wie einen kleinen DI-Container, Übersetzungsfunktionen, etc. integriert. Der ursprüngliche Fokus auf 3D-Rendering ist dabei zum Teil stark verwässert. Aus diesem und anderen Gründen (siehe unten) habe ich mich dazu entschieden, einen größeren Breaking-Change zu machen und die Library grundsätzlich zu überarbeiten. Das Projekt befindet sich auf Github im Repository: https://github.com/RolandKoenig/SeeingSharp2. Bis Seeing# 2 aber die gleiche Funktionalität wie vorher Seeing# bietet, ziehen noch einige Wochen ins Land. Weiterlesen

Dez 17

Automatisierte Tests mit Windows.Forms UI

Vor kurzem wurde ich auf einen kleinen aber blöden Fehler in Seeing# hingewiesen. Die Rendering-Hauptschleife ist abgebrochen, sobald man ein Windows.Forms Control von einem Parent ab und an einen anderen angehängt hat. Jetzt klingt das nach einem sehr seltenen Fall, aber auch diesen hätte ich ein paar Jahre zuvor explizit behandelt – allerdings im Rahmen eines Windows.Forms Programms. Im Laufe der Zeit ist dieser Fehler wieder in den Code gewandert, ohne dass er wirklich auffällt. Wer testet sowas auch immer wieder? Aus diesem Grund habe ich versucht, diesen Fall per Testautomatisierung zu behandeln, um so automatisch genau diesen Fall immer wieder abprüfen zu lassen. Weiterlesen

Aug 13

WPF Direct3D 11 Interop Performance

13-08-_2016_08-34-26Momentan stecke ich wieder etwas mehr Zeit in die Entwicklung mit WPF. Zwar bin ich nach wie vor nicht der größte Fan davon vor allem, was die Performance und die Weiterentwicklung seitens Microsoft angeht, aber WPF ist für den Windows Desktop nun mal Stand der Dinge. Ein für mich sehr kritischer Punkt bei WPF ist die Interaktion mit Direct3D 11 Inhalten von Seeing#. Genau dieses Thema war für mich immer überraschenderweise der schwierigste Teil. Weiterlesen

Mrz 13

Seeing# in C#-Apps einbinden

wpf-component-testIn 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. Weiterlesen

Dez 18

Seeing# und .Net Native

Seeing# on .Net NativeDie 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. Weiterlesen

Aug 02

Seeing# auf Windows 10

Seeing# Sample ContainerIn 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. Weiterlesen

Jul 26

Seeing#, C# 4.6 und SIMD

ProzessorSeit 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. Weiterlesen

Mai 10

Direct2D-Integration in Seeing#

Direct2D SampleHeute 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. Weiterlesen