# WinG

WinG (sprich: Win Gee) ist eine Grafik-Programmierschnittstelle für Windows 3.1 und Windows 95, sowie Windows NT 3.5, die bis Windows 98 Second Edition unterstützt wurde und anschließend durch DirectDraw ersetzt wurde. Grund für ihre Entwicklung waren Unzulänglichkeiten in der GDI. WinG ist als 16-Bit- und 32-Bit-Version verfügbar und erlaubte somit auch die Entwicklung von vollwertigen 32-Bit-Win32-Spielen.

## Hintergrund

Die GDI wurde mit dem Gedanken entwickelt, Grafik unabhängig vom tatsächlich verwendeten Ausgabegerät darstellen zu können. So ist es beispielsweise möglich, mit demselben Quelltext eine Grafik zu drucken oder auf den Bildschirm auszugeben. Mittels entsprechender GDI-Treiber werden die Grafikdaten umgewandelt und in einer gerätespezifischen Umgebung, dem sogenannten Device Context (DC), in einem Bildspeicher (Framebuffer) gespeichert. Von dort aus können sie dann direkt von der jeweiligen Hardware angesprochen werden. Für Animationen ist dieser Ansatz jedoch nicht geeignet, da die Bilddaten sehr häufig aktualisiert werden müssen und die Umwandlung in einen geräteabhängigen Kontext zeitaufwendig ist. Hinzu kommt, dass es nicht möglich ist, Informationen aus dem Kontext wieder auszulesen, da die Daten dort in einem Hardware-abhängigen Format vorliegen und das Auslesen keinen Sinn hätte.
Diese Problematik wird von WinG mit Hilfe von device-independent Bitmaps (DIB), also geräteunabhängigen Bildern umgangen, die in einem WinGDC abgelegt werden. Diese besitzen zwar nicht die Möglichkeit, direkt auf andere Ausgabegeräte umgeleitet zu werden, aber die zeitaufwendige Konvertierung in ein natives Format ist nicht notwendig und die Pixel können wieder ausgelesen werden.

## Geschichte

WinG wurde auf der Computer Game Developers Conference (CGDC, heute Game Developers Conference) 1994 erstmals zusammen mit WinDOOM einem breiteren Publikum an Entwicklern vorgestellt.

## Details

WinG wurde maßgeblich dafür entwickelt, eine schnelle Grafikausgabe unter Windows zu ermöglichen. DOS besaß den großen Vorteil, dass man ohne Probleme direkt auf den Grafikspeicher zugreifen konnte, was unter Windows über GDI nicht möglich war. Mit WinG wurde dies einheitlich und für spätere Windows-Versionen standardisiert ermöglicht. Die Einführung von WinG in Windows war seitens Microsoft auch nötig, da eine Nachfrage seitens 3rd Party Entwickler an einer schnellen Grafik API, die einen direkten Zugriff zur Grafikhardware erlaubt, vorhanden war und um 3rd Party Lösungen, die zu späteren Windows-Versionen inkompatibel geworden wären durch das Anbieten einer eigenen Lösung, zu verhindern. Durch WinG war es erstmals auch unter Windows möglich, komplexere Grafik-Algorithmen wie Double Buffering, Dirty Rectangles, Overdraw, und Fast Scrolling zu realisieren.
Mit BitBlt und StretchBlt führte die API zudem einige Blitting-Operationen ein, die die Anzeige von Bildern und Grafiken erleichtern sollte.
Nach der Installation führt WinG einen grafischen Performanz-Test durch, in dem es eine Reihe von Funktionsaufrufe an die Grafikkarte durchführt und deren Zeit misst. Auf dem Bildschirm ist für einige Zeit ein Muster mit verschlungenen roten Linien zu sehen, die sich hin- und herbewegen. Wenn der Test abgeschlossen ist, werden die schnellsten Funktionen, die keine Artefakte verursachen, gespeichert, so dass der Test nur einmal ausgeführt werden muss.
WinG wurde durch DirectDraw abgelöst, welches im Gegensatz zu WinG die Hardwarebeschleunigungsfunktionen der Grafikchips unterstützte.

## Verwendung

Zu den ersten Spielen die WinG verwendet haben zählen Doom für Windows und Pinball. Weitere Spiele sind bspw. Civilization 2.

## WinG Heute

Unter einem modernen Windows kann man seit Windows 95 die Funktion CreateDIBSection verwenden und StretchBlt und BitBlt darauf anwenden um im Wesentlichen die gleiche Funktionalität von WinG unter einem modernen Windows zu erhalten. Für eine Ausgabe, in der Hardwarebeschleunigung verwendet werden soll, sind modernere APIs wie bspw. Direct2D zuständig.