Graphische Ausgabe

Graphik betriebssystemunabhängig bzw. betriebssystemübergreifend zeichnen

Samstag, 29. März 2014

Wahl der Graphikbibliothek

Im Linuxumfeld beherrscht noch X11 die Fensterverwaltung. X11 unterstützt einfache 2D Zeichenoperationen und mit diversen Erweiterungen, etwa XRender, auch Transparenz und Komposition von Pixeln. Für beschleunigte 2D/3D Grafikausgabe ist die Bibliothek OpenGL zuständig. OpenGL ist eine plattform- und programmiersprachenunabhängige Programmierschnittstelle, die praktisch von allen gängigen Betriebssystem unterstützt wird. Ihr kleiner Bruder, die OpenGL ES Bibliothek — ES steht für eingebettete Systeme — wird von fast allen mobilen Geräten unterstützt, auch von Infotainment Systemen in Autos.

Einbindung von OpenGL ES

Mit der Wahl von OpenGL ES als Grafikbibliothek erreicht man die größte Plattformunabhängigkeit, mobile Plattformen eingeschlossen. Das Erzeugen von Fenstern (Windows) ist Sache der nativen Benutzeroberfläche eines Systems und nicht Bestandteil von OpenGL. Zusammen mit GLES wurde eine neue plattformübergreifende Programmschnittstelle, EGL, eingeführt. Diese verbindet OpenGL mit dem nativen Fenstersystem der Plattform — kommt aber auch ganz ohne Fenstersystem aus — und erlaubt es so, die Grafikausgabe bis auf wenige Initialisierungsanteile portabel zu gestalten.

EGL in der Version 1.4 unterstützt nicht nur OpenGL ES als API, sondern auch OpenVG zur Ausgabe von 2D Vektorgraphiken und den großen Bruder OpenGL. In Abbildung 1 ist dieser Zusammenhang nochmals graphisch veranschaulicht.

eglBindAPI()  ╭───────────╮
┌------------ │ Anwendung │ Parameter für eglBindAPI:
|             ╰───────────╯
|                  ▾ (Zeichen-API)   EGL_OPENGL_API
|   ┌───────────┬────────┬────────┐  EGL_OPENGL_ES_API
|   │ OpenGL ES │ OpenGL │ OpenVG │  EGL_OPENVG_API
|   │           │        │  (2D)  │
|   └───────────┴────────┴────────┘
|        ▾ ▴
|   ┌──────────────┐   ┌───────────────────────────┐
└-▸ │  OpenGL EGL  │ ▸ │  Natives Fenster System   │
    └──────────────┘   │  (X11 im Falle von Linux) │
                 ╲     └───────────────────────────┘
                  ╲       ╱
    ┌──────────────╲─────╱───────┐
    │               ◂───▸──────╮ │
    │  Grafikkarten │ Fenster  │ │
    │    Speicher   │ Speicher │ │
    │  (GPU Memory) ╰──────────╯ │
    └────────────────────────────┘
             ▾
    ┌──────────────────┐
    │                  │
    │  Display Monitor │
    │                  │
    └──────────────────┘
Abbildung 1: OpenGL ES / EGL Anwendungs-Architektur