OpenGL.org 3Dsource.de: Infos rund um 3D-Computergrafik, OpenGL und VRML
space Telefon-Tarife space VDI - Arbeitskreis Fahrzeugtechnik space Beschallungsanlagen und Elektroakustik space Heise-News space

6 Windows, Buffer und Rendering Context

6.010 Wie nutze ich Overlay Planes ?

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.

Seite durchsuchen nach:

Fragen oder Ideen an:
Thomas.Kern@3Dsource.de
Linux-Counter
(C) Thomas Kern