Overlay Planes erlauben das Zeichnen in verschiedenen Ebenen.
Dabei werden als transparent definierte Farben genutzt, die die jeweils darunter liegende
Ebene durchscheinen lassen. Grundsätzlich sind zwar alle möglichen Kombinationen
denkbar, im Regelfall braucht man aber nur die Haupt-Zeichenebene und eine darüberliegende
Overlay-Ebene (im Overlay werden dann z.B. Bedienelemente abgelegt).
Im Regelfall ist die Overlay-Ebene nur im Colorindex-Modus verfügbar, eher selten im
RGB-Modus (beides unabhängig von der Haupt-Zeichenebene).
Die transparente Farbe ist meistens 0 (Colorindex) bzw. 0,0,0 (RGB). Das Zeichnen einer Ebene
beeinflusst damit die andere Ebene nicht.
Wie man auf die Overlay Planes zugreifen kann, hängt vom genutzten Betriebssystem ab.
In GLUT 3.7 sind Overlay-Funktionen zwar vorhanden, derzeit aber deaktiviert.
Man muss daher auf die plattformspezifischen Funktionen (WGL, GLX etc.) zurückgreifen.
Die Grundidee bei WGL und GLX ist die gleiche: Erzeugen von zwei Rendering Contexts, also je
einen pro Overlay-Ebene. Dann wird der jeweils benötigte Context aktiviert (makeCurrent).
Unter Windows (WGL) sollte man ChoosePixelFormat() zur Festlegung der Pixelformate der
Contexte nutzen. Dabei wird das reservierte Feld vom PIXELFORMATDESCRIPTOR "bReserved"
(direkt nach dem Eintrag PFD_MAIN_PLANE) zur Festlegung einer Haupt-Zeichenebene (Eintrag 0)
bzw. Overlay-Ebene (Eintrag 1) genutzt. Der angesprochene Eintrag PFD_MAIN_PLANE im Feld
"iLayerType" bleibt in beiden Fällen gleich.
Nachdem dass Pixelformat festgelegt wurde, wird erst der Rendering Context der Hauptebene, dann
der Context der Overlay-Ebene erzeugt:
HGLRC hORC;
hORC = wglCreateLayerContext (hDC, a);
Der Rückgabewert wird genauso wie beim Aufruf nach wglCreateContext() behandelt.
Ein Wert von NULL weist dabei auf einen Fehler hin.
Unter Unix (GLX) nutzt man glXChooseVisual(), um eine Liste mit den verfügbaren
Visuals einschl. Overlays zu erhalten. Der Attribut-Liste wird dann der Eintrag GLX_LEVEL
mit nachfolgender Bezeichnung des gewünschten Visuals hinzugefügt.
Hier stehen positive Werte für Overlays bzw. der Wert 0 für die Hauptebene.
Normalerweise wird glXChooseVisual() getrent für jede Ebene aufgerufen und direkt nach
dem Aufruf eines der gelisteten Visuals zum Erzeugen eines Rendering Context genutzt.
Falls das Programm kein geeignetes Visual findet, kann es zum einen daran liegen, dass auf dem
System keins existiert oder das für die Overlay-Ebene der RGB-Modus angefordert wurde.
Im letzteren Fall sollte der Colorindex-Modus probiert werden.