Eccetto OpenGL, non ho mai usato quelle librerie, ma cercherò di indovinare, leggendo le pagine di wikipedia, come hai fatto tu.
Sembri proprio su Mesa. Ecco le informazioni aggiuntive che abbiamo:
"Il sistema X Window è un sistema software per computer e un protocollo di rete che fornisce una GUI di base per i computer in rete. Crea un'astrazione hardware strato ".
"GLX abilita i programmi che desiderano utilizzare OpenGL per farlo all'interno di una finestra fornita dal sistema X Window.
GLX è composto da tre parti:
- Un'API che fornisce funzioni OpenGL.
- Un'estensione del protocollo X, che consente al client di inviare comandi di rendering 3D
- Un'estensione del server X che riceve i comandi di rendering dal client e li passa alla libreria OpenGL installata
Se client e server sono in esecuzione sullo stesso computer e è disponibile una scheda grafica 3D accelerata, i due componenti precedenti possono essere ignorati da DRI. Il programma client è quindi autorizzato ad accedere direttamente all'hardware grafico. "
"Direct Rendering Infrastructure (DRI) è un'interfaccia utilizzata nel sistema X Window per consentire alle applicazioni utente di accedere all'hardware video senza richiedere dati da passare attraverso il server X. "
"Open Inventor è un'API grafica C ++ 3D progettata per fornire uno strato superiore di programmazione per OpenGL"
Per semplificare le cose, immaginiamo un flusso semplificato di dati (e comandi) che avvengono alle entrate e alle uscite di ciascuna di queste API. All'inizio abbiamo il tuo programma applicativo (codice compilato), che esegui dal tuo computer. Alla fine abbiamo le immagini che vengono visualizzate sullo schermo.
Ci sono diversi casi che tratterò delle risposte a queste domande:
-Il tuo computer ha una scheda grafica (GPU), o solo una CPU, per elaborare le funzioni grafiche?
-è la tua applicazione incorporata in una finestra del sistema x-window?
-se usi il sistema x window, il "x server" è in esecuzione sul tuo computer o su un altro computer sulla rete?
Immagino che tu abbia i driver per la tua GPU se ne possiedi uno e che hai Mesa per il rendering del software).
Primo scenario: si esegue un'applicazione grafica scritta con OpenInventor, senza utilizzare il sistema X Window, e non si dispone di una scheda grafica. Il flusso del programma sarebbe abbastanza simile a:
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
Quello che succede qui si chiama "rendering del software": i comandi grafici non sono gestiti da alcun hardware grafico, ma dalla tua solita CPU, il processore che generalmente esegue il software.
Secondo scenario: ora immagina che con le stesse condizioni di cui sopra, hai una scheda grafica. Il flusso sarebbe più simile a questo:
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
Quello che succede ora è chiamato "accelerazione hardware", solitamente più veloce del primo scenario.
Terzo scenario: ora introduciamo il flusso del sistema X Window, o almeno come penso, basato sulle poche righe di Wikipedia che ho letto.
Dimentichiamo per un po 'l'hardware grafico e l'API. Il flusso dovrebbe essere simile a:
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
Si noti che quando si utilizza X Window System, lo schermo e il computer da cui viene eseguita l'applicazione potrebbero non essere collegati "direttamente", ma potrebbero essere collegati tramite una rete.
Quarto scenario: supponiamo di voler aggiungere fantastici rendering grafici 3D all'applicazione client X dell'esempio precedente. Mi sembra che l'X Window System non sia originariamente in grado di farlo, o per lo meno richiederebbe molto codice complicato per eseguire l'equivalente di una funzione API OpenGL.
Fortunatamente è possibile utilizzare GLX per aggiungere il supporto per i comandi OpenGL al sistema. Ora hai:
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)
...
Ora puoi ricollegare l'ultima freccia a quella dopo "OpenGL" nel primo scenario: puoi ottenere immagini 3D sullo schermo!
Finalmente ciò che penso capisca del DRI:
Sembra che Mesa abbia accesso alla GPU, in modo da modificare il flusso del nostro primo scenario in:
...
↓
Mesa
↓ (forwards OpenGL commands)
DRI
↓ (converts OpenGL commands to GPU commands)
Graphic Card
↓
3D Images on your screen
E sembra anche cortocircuitare il flusso quando si utilizza GLX, data la condizione che il server e il client si trovino sullo stesso computer e che si disponga di una GPU. In quel caso il grafico del nostro quarto scenario diventerebbe semplicemente:
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
Questo è tutto!
Ora tieni presente che non sono un esperto in ambienti Unix, quindi il mio miglior consiglio è di studiare la documentazione di ciascuna di queste API per sapere esattamente cosa possono fare.
Combinare il grafico precedente in un singolo potrebbe rendere le cose più facili da capire. Lo faccio come un esercizio per te!