Mit Ausnahme von OpenGL habe ich diese Bibliotheken nie benutzt, aber ich werde versuchen, durch Lesen von Wikipedia-Seiten zu erraten, wie Sie es getan haben.
Sie scheinen recht mit Mesa zu haben. Hier sind die zusätzlichen Informationen, die wir haben:
"Das X-Window-System ist ein Computersoftwaresystem und ein Netzwerkprotokoll, das eine Basis-GUI für vernetzte Computer bereitstellt. Es erstellt eine Hardwareabstraktionsschicht."
"Mit GLX können Programme OpenGL in einem vom X Window System bereitgestellten Fenster verwenden.
GLX besteht aus drei Teilen:
- Eine API, die OpenGL-Funktionen bereitstellt.
- Eine Erweiterung des X-Protokolls, mit der der Client 3D senden kann Rendering-Befehle - Eine Erweiterung des X-Servers, der die Rendering-Befehle vom Client empfängt und an die installierte OpenGL-Bibliothek
weiterleitet. Wenn Client und Server auf demselben Computer ausgeführt werden und eine beschleunigte 3D-Grafikkarte verfügbar ist, können die beiden vorherigen Komponenten werden von DRI umgangen. Das Client-Programm kann dann direkt auf die Grafikhardware zugreifen. "
"Direct Rendering Infrastructure (DRI) ist eine Schnittstelle, die im X Window System verwendet wird, um Benutzeranwendungen den Zugriff auf die Video-Hardware zu ermöglichen, ohne dass Daten über den X-Server übertragen werden müssen."
"Open Inventor ist eine C ++ 3D-Grafik-API, die eine höhere Programmierschicht für OpenGL bietet."
Stellen wir uns zur Vereinfachung einen vereinfachten Datenfluss (und Befehlsfluss) vor, der an den Ein- und Ausgängen jeder dieser APIs stattfindet. Ganz am Anfang haben wir Ihr Anwendungsprogramm (kompilierter Code), das Sie von Ihrem Computer ausführen. Am Ende haben wir Bilder, die auf Ihrem Bildschirm angezeigt werden.
Es gibt mehrere Fälle, die ich auf die Antworten auf diese Fragen beschränken werde: -
Verfügt Ihr Computer über eine Grafikkarte (GPU) oder nur über eine CPU, um Grafikfunktionen zu verarbeiten?
- Ist Ihre Anwendung in ein Fenster des X-Window-Systems eingebettet?
-wenn Sie das x-Window-System verwenden, wird der "x-Server" auf Ihrem Computer oder einem anderen Computer im Netzwerk ausgeführt?
Ich gehe davon aus, dass Sie die Treiber für Ihre GPU haben, wenn Sie einen haben, und dass Sie Mesa für das Software-Rendering haben.
Erstes Szenario: Sie führen eine mit OpenInventor geschriebene Grafikanwendung aus, ohne das X Window System zu verwenden, und Sie haben keine Grafikkarte. Der Programmablauf würde ungefähr so aussehen:
Your application
↓ (uses functions of)
OpenInventor
↓ (calls functions declared by)
OpenGL
↓ (redirects function calls to implementation defined by)
Mesa
↓ (implemented OpenGL functions to be run on the CPU)
[Probably] Operating System rendering API
↓
3D Images on your screen
Was hier passiert, wird als "Software-Rendering" bezeichnet: Die Grafikbefehle werden nicht von Grafikhardware verarbeitet, sondern von Ihrer normalen CPU, dem Prozessor, auf dem normalerweise Software ausgeführt wird.
Zweites Szenario: Stellen Sie sich jetzt vor, dass Sie unter den gleichen Bedingungen wie oben eine Grafikkarte haben. Der Ablauf würde ungefähr so aussehen:
Your application
↓ (uses functions of)
OpenInventor
↓ (calls functions declared by)
OpenGL
↓ (redirects function calls to implementation defined by)
Proprietary Drivers
↓ (converts OpenGL commands to GPU commands)
Graphic Card
↓
3D Images on your screen
Was jetzt passiert, wird als "Hardwarebeschleunigung" bezeichnet und ist normalerweise schneller als das erste Szenario.
Drittes Szenario: Lassen Sie uns nun anhand der wenigen von mir gelesenen Wikipedia-Zeilen den Ablauf des X-Window-Systems vorstellen, oder zumindest, wie ich denke.
Vergessen wir die Grafikhardware und die API für eine Weile. Der Ablauf sollte wie folgt aussehen:
Your application (X Window System sees it as an "X Client")
↓ (sends requests defined by the X Window System Core Protocol)
X Server
↓ (convert your request to graphic commands)
[Probably] Operating System rendering API
↓
Windows or 2D images on your screen
Beachten Sie, dass bei Verwendung des X Window-Systems Ihr Bildschirm und der Computer, auf dem Sie Ihre Anwendung ausführen, möglicherweise nicht "direkt" verbunden sind, sondern über ein Netzwerk verbunden sein können.
Viertes Szenario: Angenommen, Sie möchten Ihrer X Client-Anwendung aus dem vorherigen Beispiel ausgefallene 3D-Grafik-Renderings hinzufügen. Es scheint mir, dass das X Window System dies ursprünglich nicht kann, oder es würde zumindest viel verschlungenen Code erfordern, um das Äquivalent einer OpenGL-API-Funktion auszuführen.
Glücklicherweise können Sie GLX verwenden, um dem System Unterstützung für OpenGL-Befehle hinzuzufügen. Sie haben jetzt:
Your application
↓ (sends graphic requests defined by the "GLX extension to the X Protocol")
X Server with the GLX extension
↓ (convert your request to OpenGL commands)
OpenGL
↓ (redirects function calls to implementation defined by)
...
Jetzt können Sie diesen letzten Pfeil wieder mit dem Pfeil nach "OpenGL" im ersten Szenario verbinden: Sie können 3D-Bilder auf Ihrem Bildschirm erhalten!
Abschließend zu dem, was ich unter DRI verstehe:
Es scheint Mesa den Zugriff auf die GPU zu ermöglichen, sodass sich der Ablauf unseres ersten Szenarios ändern würde in:
...
↓
Mesa
↓ (forwards OpenGL commands)
DRI
↓ (converts OpenGL commands to GPU commands)
Graphic Card
↓
3D Images on your screen
Außerdem scheint es den Datenfluss bei der Verwendung von GLX kurzzuschließen, vorausgesetzt, Server und Client befinden sich auf demselben Computer und Sie haben eine GPU. In diesem Fall würde das Diagramm unseres vierten Szenarios einfach wie folgt aussehen:
Your application
↓ (sends graphic requests defined by the "GLX extension to the X Protocol")
DRI
↓ ("catches" OpenGL commands and converts them to GPU commands)
Graphic Card
↓
3D Images on your screen
Das ist es !
Denken Sie jetzt daran, dass ich kein Experte für Unix-Umgebungen bin. Daher ist es mein bester Rat, die Dokumentation jeder dieser APIs zu studieren, um genau zu wissen, was sie können.
Wenn Sie das vorherige Diagramm zu einem einzigen Diagramm kombinieren, wird das Verständnis möglicherweise erleichtert. Ich lasse dir das als Übung zu!