Grundlagen

DirectX

WPF ist das neue grafische Darstellungssystem für Windows und ein Bestandteil von .NET. Hardwarebeschleunigt und beeinflusst von HTML und Flash ist es ein radikaler Wechsel der UI seit Windows 95.

Erst seit WPF wird nicht mehr das urgestein User32 und GDI/GDI+ verwendet. Während DirectX ursprünglich nur für die Games-Programmierung vorgesehen war, wird es nun durchgehend auch für die GUI Darstellung mit WPF verwendet. Dies ist ein viel effizienterer Weg, weil Elemente direkt durch die Hardware (Grafikkarte) gerendert werden kann. GDI/GDI+ basiert auf Pixel-für-Pixel Instruktionen, die sehr viel langsamer gerendert werden, insbesondere von modernen Grafikkarten wie sie heute verbreitet sind.

WPF ist kein wrapper für GDI/GDI+ sondern ein kompletter Ersatz, ein separater Layer der DirectX nutzt. Das Ziel von WPF ist es möglichst viel Arbeit der Grafikkarte zu überlassen und somit eine grösstmögliche Entlastung für den Hauptprozessor zu erreichen.

Higher-Level API

Die Verwendung von DirectX ist zwar ein bestechender Vorteil, aber die Revolution ist die Sammlung von Higher-Level Services, die den Programmierern zur Verfügung gestellt werden.

  • Webähnliches Layout Modell, flexibles flow Layout
  • Umfangreiches Drawing-Model, neue Features wie transparenz, multiple Layers und 3-D Support
  • Rich-Text Model, viele Möglichkeite Styles und lange Texte zu auf einfache Weise zu verwenden
  • Animationen, sind ein integraler Bestandteil und können deklarativ mit tags definiert werden
  • Audio- Video Unterstützung
  • Styles und Templates, unterstützen ähnlich HTML/CSS die skinned Control Darstellung
  • Commands
  • Deklaratives UI, Fenster und Controls werden mit XAML Tags programmiert. Eine komplette Trennung von GUI und Programmcode ist der resultierende Vorteil daraus
  • Seiten-Basierende Anwendungen, es können Browserähnliche Anwendungen programmiert werden. In Seiten kann vorwärts- rückwärts

Unabhängig von der Bildschirmauflösung

Auch wenn User32, GDI/GDI+ GUI’s grafische Inhalte in der Grösse ändern können, es handelt sich nicht um ein echtes scaling. WPF ist nicht von diesem Problem betroffen, den es rendert alle Elemente selbst. Das Resultat davon ist, dass ein Control mit einer Breite von 1 inch auf einem niedrig auflösenden Monitor dargestellt gleich Breit dargestellt wird, wie auf einem Monitor mit einer höheren Pixeldichte. WPF rendert dann das Control mit grösserer Detailtiefe und mehr Pixeln.

WPF basiert nicht auf der DPI des Ausgabegerätes bzw. Monitors, sondern auf der System-Auflösung.

WPF Einheiten

Ein WPF Fenster und alle Elemente darin haben ausgabegeräteunabhängige Masseinheiten. WPF bezieht seine Berechnung immer auf die System-Auflösung. Die Masseinheit ist definiert als 1 / 96 eines Inch. Das heisst, dass ein Control mit 96 Pixel Breite exakt ein Inch Breit am Monitor dargestellt wird.

Architektur

Während die Top-Level Services komplett mit managed C# code geschrieben sind, handelt es sich bei den Low-Lewel Komponenten um unmanaged Code. milcore.dll ist extrem performance sensitiven und deshalb mit unmanaged Code umgesetzt.

2013-01-09_09h50_18

Die milcore.dll ist das Herz des WPF Rendering Systems. Man kann sie als die Engine für „managed graphics“ betrachten, so wie die CLR die .NET Anwendung verwaltet. milcore.dll verwaltet den display state.

Kommentare

Schreibe einen Kommentar

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

*