Um die Fenstergrösse unter Win32 zu ermitteln, kann folgender Code
genutzt werden:
RECT rect;
HWND hwnd;
GetClientRect(hwnd, &rect);
/* rect.top und rect.left sind immer 0, 0.
Das heisst, die Breite bzw. Höhe findet sich in rect.right und rect.bottom. */
Die Bildschirmgrösse in Pixel:
int width = GetSystemMetrics(SM_CXSCREEN);
int height = GetSystemMetrics(SM_CYSCREEN);
bzw. mit GLUT:
int screenWidth, screenHeight, windowWidth, windowHeight;
screenWidth = glutGet(GLUT_SCREEN_WIDTH);
screenHeight = glutGet(GLUT_SCREEN_HEIGHT);
windowWidth = glutGet(GLUT_WINDOW_WIDTH);
windowHeight = glutGet(GLUT_WINDOW_HEIGHT);
Die meisten Benutzeroberflächen wie z.B. Motif werden nur unter wenigen
Betriebssystemen unterstützt.
GLUT ist für verschiedenste Plattformen verfügbar
und kann über hierarchische Menüs mit dem Anwender interagieren.
GLUI setzt auf den Funktionen von GLUT
auf und ergänzt diese um Knöpfe, Checkboxen, Radio Buttons und einiges mehr. Es ist
ebenfalls plattformunabhängig.
Eine weitere Option stellt FLTK dar, hier
kann man Oberflächen sogar grafisch zusammenstellen. Es ist ebenfalls auf
mehreren Plattformen verfügbar.
Viele OpenGL-Implementationen unterstützen den gleichzeitigen Betrieb von mehr als einem Monitor.
Werden die Monitore als Clone genutzt (d.h. zeigen immer das gleiche an), gibt es im Regelfall
keine Besonderheiten zu beachten. Im folgenden ist beim Betrieb mehrerer Monitore im Regelfall
die übergreifende Darstellung gemeint, d.h. wenn jeder Monitor nur einen bestimmten Bereich
des Desktops anzeigt (Multi-Head-Betrieb).
Folgende Varianten sind denkbar:
-
Ein Display ist hardwarebeschleunigt, die anderen laufen im Software-Modus.
-
Alle Displays sind hardwarebeschleunigt, solange kein OpenGL-Fenster die Bildschirmgrenzen
überragt.
-
Alle Displays sind hardwarebeschleunigt, auch bei Desktop-Darstellung über mehrere Displays.
-
Alle bisherigen Varianten mit zusätzlichem Stereo-Support.
-
Alle bisherigen Varianten auch für Grafikkarten unterschiedlicher Hersteller.
Einige Macintosh-Konfigurationen, wie z.B. die ATI Rage 128 Mobility, erlauben zwei Displays.
Die Harwarebeschleunigung wird aber deaktiviert, wenn das OpenGL-Fenster auf beiden Displays
dargestellt wird. Liegt das Fenster vollständig in einem der beiden Displays, ist die
volle 3D-Beschleunigung verfügbar.
Microsoft's Betriebssysteme erlauben 2 OpenGL-Geräte, allerdings ist nur das erste
Gerät hardwarebeschleunigt. Um diese Einschränkung zu umgehen, haben verschiedene
Hersteller eigene Lösungen für den Mehrfach-Monitor-Betrieb entwickelt, die dann auch
auf beiden Displays eine 3D-Beschleunigung bietet.
3Dlabs unterstützt den Multi-Head-Betrieb für die GVX1, GVX210 und
GVX420. Die beiden letztgenannten Karten sind AGP-Karten für den Einzelbetrieb mit zwei
Monitor-Ausgängen. Dagegen ist die GVX1-Karte für eine mehrfache Installation als AGP- oder
PCI-Version geeignet und hat nur einen Monitor-Ausgang, so dass für jeden Monitor eine
eigene Karte benötigt wird.
HP'sVisualize Center und Visualize Workgroup erlauben den Multi-Head-Betrieb
unter HP-UX (HP's Unix). Das Visualize Center kann einen grossen Desktop nahtlos über
mehrere Displays darstellen. Der Stereo-Modus wird auch unterstützt, so dass eine
nahezu perfekte räumliche Darstellung möglich ist.
Matrox unterstützt unter Linux und MS-Systemen mit einen Dual-Head-Betrieb,
digitale Flachbildschirme und TV-Ausgang mit der G400, Dual-Head-Betrieb mit der G450 und
den Betrieb mehrerer Monitore mit der G200. Der MS-Treiber unterstützt auch den Dual-Head-Betrieb.
NVIDIA's Quadro2 MXR und GeForce2 GTS (und bestimmte Geforce 3/4-Modelle,
aber dazu sagt die originale FAQ noch nichts) haben 2 Monitor-Ausgänge. Unter MS-Systemen
lassen sich diese über TwinView (ein Modul des Treibers) konfigurieren.
Im vertikalen Modus wird der Desktop über beide Monitore dargestellt, so dass
ein Fenster im Vollbild-Modus automatisch auf beide Monitore aufgeteilt wird.
Für Linux wird die 3D-Beschleunigung nur im Single-Betrieb unterstützt, aktuellere
Informationen hierzu sollten bei
NVIDIA zu finden sein.
Sun's OpenGL kann auf SPARC-Maschinen unter Solaris 8 und mit OpenGL 1.2.1
die Ausgabe auch auf mehreren Monitoren beschleunigen. Die aktuelle Version der Sun-OpenGL
gibt es
hier.