Die Anfänge
Vor etwa 25 Jahren fing es an. Computergrafik war eigentlich der Grund, mich mit Programmierung zu
beschäftigen. Wer entwickelt schon freiwillig Datenbanken oder Textverarbeitungen? Es muss knallen
und blinken! Meine ersten Schritte waren in Turbo Pascal. Während in der Schule Konsolenprogramme
entwickelt wurden, habe ich zu Hause den
Grafik-Modus für mich entdeckt. Dabei kam ein 2D Space-Shooter heraus. Eine Enterprise (Bitmap
via Suchmaschine Altavista gefunden), die Asteroiden ausweicht und abknallt. Leider sind die Quellen
verloren gegangen - oder sie sind auf den Disketten im Keller, für die ich kein Laufwerk mehr habe.
Irgendwann kam der Wechsel auf Delphi und da stellte sich heraus, dass mein Ansatz von Computergrafik
nicht performant war. Ich denke, im Hintergrund werkelte dort
GDI. Der Engpass führte
mich jedenfalls zu:
DirectX
Wenn man von Windows und Delphi kommt, ist DirectX als Grafikschnittstelle naheliegend. Ich hatte inzwischen
C++ gelernt und Microsoft DirectX war
quasi alternativlos. Ernstzunehmenden Kontakt hatte ich mit Version 7
(SameGame) und Version 8.1
(Superball). Hier lernte ich, wie das mit
dem Rendering in Spielen funktioniert: man zeichnet x mal pro Sekunde die komplette Szene, weil schnell genug.
In Turbo Pascal habe ich noch maximal effizient nur die Rechtecke aktualisiert, in denen sich etwas geändert
hat. Außerdem kam ich hier in Kontakt mit Transformationen, Projektionen und Matrizen. Erstaunlich viel
wurde jedoch von DirectX und Hilfsbibliotheken abgenommen. Rückblickend war DirectX 8 ein guter Einstieg.
In die folgenden Versionen habe ich nur noch sporadisch geschaut. Richtig entwickelt habe ich dort nichts mehr,
denn an der Universität kam ich zu:
OpenGL
Das war das erste API, das ich nicht autodidaktisch erlernt habe (naja, einen kurzen Ausflug zu
NeHe's Tutorials mal ausgenommen -
wer hat die nicht gelesen?). Stattdessen habe ich einige Semester sehr hilfreiche Einführung genossen und
die dann mit der hervorragenden
OpenGL Superbible vertieft. Die wurde mit
Neuauflagen leider immer schlechter. Richtig angefangen habe ich mit Version 2.0
(
Bildschirmschoner) und das dann weiter verfolgt
bis zur Version 4.x (
Quake 3 Model Viewer). Die
Evolution von
OpenGL schrittweise mitzumachen war übrigens
goldrichtig. Das Ding ist nämlich immer komplizierter geworden. Ich habe mir nach v3 in meinem jugendlichen
Leichtsinn mal kurz Vulkan angeschaut, bin aber kläglich gescheitert. Dann zurück zu OpenGL v4 und
schwupps war viel klarer, was in Vulkan vor sich geht. Der nächsten Evolutionsstufe der Computergrafik.
Vulkan
Vulkan (direkter Konkurrent von DirectX 12) ist verdammt kompliziert
und ich hatte auch noch eines der schlechtesten Bücher aller Zeiten dazu. Es gibt auch einfach zu wenig
gedruckte Literatur. So brauchte ich gute drei Jahre bis ich es noch einmal wagte. Ohne Bücher. Nur mit der Spec
und Beispielen von AMD und LunarG auf Github. Ich konnte das nicht auf mir sitzen lassen und diesmal habe ich es
geschafft (Shapefile Viewer). Der Pfad zu Vulkan
ist aber wirklich steinig. Ich kann mir schwer vorstellen, wie ambitionierte Hobby-Entwickler von Null auf Vulkan
kommen sollen. Nun muss man sich nicht wie ich über DirectX und mehrere Generationen OpenGL anpirschen,
aber die mathematische und technische Schwelle ist enorm. Ich kann jedoch bestätigen, was ID-Software auf
einer Konferenz gesagt hat: man muss die Hürde nur
einmal nehmen und den Boilerplate schreiben. Dann stehen einem alle hochperformanten Türen offen.
Ausblick
OpenGL ist einfach der Platzhirsch. Mächtig, etabliert und gut erlernbar. Wenn man sich um die komplizierten
Features nicht kümmern möchte, nimmt man einfach die aus den frühen 2000ern. Oder man mischt ein
paar moderne rein, die man für beherrschbar hält (beispielsweise multi sample anti aliasing).
In Vulkan wird man schonungslos aktueller Grafikkartenarchitektur ausgesetzt, um am Ende ein Quentchen schneller
zu sein. Lernaufwand und Schwierigkeitsgrad sind hoch. Das Erfolgsgefühl dementsprechend auch.
Ergo: Für einfache und schnelle Ergebnisse setze man auf OpenGL. Will man statt mit 200 lieber mit 210 FPS
rendern und sich dafür wahnsinnig verrenken dann auf Vulkan. Das ist verrückt, denn eigentlich geht
der Trend in der gesamten Softwarebranche in die entgegengesetzte Richtung: man stapelt so lange Wrapper und
Abstraktionen, bis man keine Details mehr sehen kann und verstehen muss. Erfrischend altmodisch, in Vulkan die
volle Kontrolle und Verantwortung zu haben. Ab jetzt nur noch das bei mir ;-)