Kern OpenGL - Core OpenGL
| macOS- Grafikmodell |
|---|
| Rendering |
| Compositing |
Core OpenGL oder CGL ist die Macintosh Quartz Windowing System- Schnittstelle von Apple Inc. zur OS X- Implementierung der OpenGL- Spezifikation. CGL ist analog zu GLX , der X11- Schnittstelle zu OpenGL, sowie WGL , der Microsoft Windows- Schnittstelle zu OpenGL.
Geschichte
Alle Fenstersystem-Schnittstellen zu OpenGL sind aus der Migration der proprietären 3D-Grafikanwendungsprogrammierschnittstelle ( API ) IrisGL von Silicon Graphics zu seiner aktuellen offenen Standardform OpenGL hervorgegangen. Als die Entscheidung getroffen wurde, IrisGL zu einem offenen Standard zu machen, bestand die primäre erforderliche Designänderung darin, dieses Grafikstandard-API-Fenstersystem agnostisch zu machen. Beim Wechsel zu OpenGL wurde daher die gesamte Fenstersystem-spezifische Logik aus IrisGL entfernt. Die Fenstersystemlogik umfasst jeden Ereignismechanismus zum Sammeln von Eingaben von Geräten wie Tastaturen und Mäusen sowie jede Fensteranordnungs- oder -größenlogik, die beim Zeichnen auf eine moderne Fensterbenutzeroberfläche verwendet wird. Darüber hinaus wurde die gesamte interne Verwaltung von Fensterspeicherpuffern, die manchmal als Oberflächen bezeichnet werden, auch aus IrisGL entfernt, um OpenGL zu erstellen.
Mit OpenGL-Fenstersystem-Agnostik müssen Unternehmen wie Apple die Last der Konfiguration und Verwaltung der Oberflächen tragen, die als Ziel für das OpenGL-Rendering verwendet werden.
Merkmale
Windowing-Systemschnittstellen
Unter OS X ist CGL die Grundschicht der Windowing-Systemschnittstellen zu OpenGL. Sowohl AGL (Apple Graphics Library) als auch Cocoa (API) (oder AppKit) haben Schnittstellen zu OpenGL und sind logische Softwareschichten und hängen in ihrem Verhalten von CGL ab. CGL und AGL arbeiten frei zusammen. CGL und Cocoa können zusammen verwendet werden, Cocoa-Klassen können jedoch implizit Änderungen am CGL-Status vornehmen. Funktionsaufrufe von AGL und Cocoa sollten nicht gemischt werden.
Die Konfiguration dieser Oberflächen erfolgt durch einen Pixelformat-Auswahlprozess, bei dem verschiedene kompatible Ebenen von Rendering-Informationen kombiniert werden, um einen Framebuffer zu bilden . Beispiele für solche Schichten sind Farbpuffer, Transparenzpuffer (Alpha), Schablonenpuffer und Tiefenpuffer . Die CGL-Funktion CGLHoosePixelFormat wird verwendet, um diese Pufferkompatibilitätsprüfung durchzuführen. CGLChoosePixelFormat wählt basierend auf Eingabeparametern und ihrer Bewertungsrichtlinie ein Pixelformat aus, das eine kompatible Pufferkonfiguration darstellt, die vom zugrunde liegenden Renderer unterstützt wird, der zur Verarbeitung von Grafikbefehlen verwendet wird. Renderer können entweder hardwarebasiert sein, so dass sie im System installierten Grafikkarten entsprechen, oder sie können softwarebasiert sein, wobei die Haupt- CPU des Systems die gesamte Grafikbefehlsverarbeitung und die abschließende Rasterisierungsarbeit abwickelt .
Umgang mit der Heterogenität von Mac OS X
Unter Mac OS X ist CGL auch für den Umgang mit der heterogenen Natur der Installation und Konfiguration von Grafikgeräten auf Macintosh-Systemen verantwortlich. Auf Macintosh-Computern können beliebig viele Bildschirme und Grafikkarten installiert sein. In diesen Konfigurationen kann der Desktop des Benutzers virtualisiert (erweitert) oder über mehrere Displays gespiegelt werden, die mit mehreren Grafikkarten verbunden sind, die möglicherweise vom gleichen Grafikanbieter stammen oder nicht.
Steuerung des Renderings
Wenn Benutzer ihren Macintosh für die Verwendung eines virtualisierten Desktops konfigurieren und Fenster von einer Anzeige auf eine andere ziehen, übernimmt CGL die Verwaltung des OpenGL-Grafikstatus, der zwischen den Geräten gespiegelt werden muss, um die Befehlsverarbeitungskonsistenz zwischen ihnen zu gewährleisten. Das Ziehen eines Fensters über einen Macintosh-Desktop zwischen zwei verschiedenen Anzeigen, die von zwei verschiedenen Renderern unterstützt werden, wird als "Virtual Screen Change" bezeichnet.
CGL bietet auch einen Mechanismus zum Abrufen von Informationen über den derzeit verwendeten Renderer. Die primäre Datenstruktur, die den OpenGL-Zustand unter Mac OS X verwaltet, ist ein CGLContextObj . Diese CGL-Kontexte können jederzeit mit einem Aufruf von CGLGetCurrentContext abgerufen werden . Das CGLContextObj kann dann nach Einzelheiten über den ihm zugeordneten Renderer abgefragt werden.
Software-Renderer
Ebenfalls enthalten ist Apples hauseigener OpenGL- Software-Renderer . Ursprünglich war dies ein einfaches Integer-Paket, in 10.3 wurde ein neues Gleitkomma-Paket eingeführt, das es letztendlich ersetzte . Der Software - Renderer, wenn auch langsam, ist schnell genug für Basisanwendungen und gehaltene Feature-komplett mit OS X OpenGL - Implementierung für Entwicklungszwecke.
Siehe auch
- GLX : die äquivalente X11- Schnittstelle zu OpenGL
- WGL : die äquivalente Microsoft Windows- Schnittstelle zu OpenGL
- AGL
- OpenGL
- GLUT : Eine Schnittstelle auf höherer Ebene, die die Unterschiede zwischen WGL, GLX usw. verbirgt.
Externe Links
- CGL-Referenzhandbuch auf der Apple-Website (html). - Archiviert am 12. August 2014 bei der Wayback Machine
- CGL-Referenzhandbuch auf der Apple-Website (PDF). - Archiviert am 24. August 2014 bei der Wayback Machine