GNU/Linux >> Linux Esercitazione >  >> Linux

OpenGL senza X.org in Linux

Potresti essere interessato a un progetto chiamato Wayland

http://en.wikipedia.org/wiki/Wayland_%28display_server%29


Aggiornamento (17 settembre 2017):

NVIDIA ha recentemente pubblicato un articolo che descrive in dettaglio come utilizzare OpenGL su sistemi headless, che è un caso d'uso molto simile a quello descritto dalla domanda.

In sintesi:

  • Link a libOpenGL.so e libEGL.so invece di libGL.so . (Le opzioni del tuo linker dovrebbero quindi essere -lOpenGL -lEGL
  • Chiama eglGetDisplay , quindi eglInitialize per inizializzare EGL.
  • Chiama eglChooseConfig con l'attributo di configurazione EGL_SURFACE_TYPE seguito da EGL_PBUFFER_BIT .
  • Chiama eglCreatePbufferSurface , quindi eglBindApi(EGL_OPENGL_API); , quindi eglCreateContext e eglMakeCurrent .

Da quel momento in poi, esegui il rendering OpenGL come al solito e puoi cancellare la superficie del buffer dei pixel dove preferisci. Questo articolo supplementare di NVIDIA include un esempio di base e un esempio per più GPU. La superficie PBuffer può anche essere sostituita con una superficie finestra o una superficie pixmap, a seconda delle esigenze dell'applicazione.

Mi dispiace di non aver fatto ulteriori ricerche su questo nella mia modifica precedente, ma vabbè. Risposte migliori sono risposte migliori.

Dalla mia risposta nel 2010, ci sono stati una serie di importanti cambiamenti nello spazio grafico di Linux. Quindi, una risposta aggiornata:

Oggi, nouveau e gli altri driver DRI sono maturati al punto in cui il software OpenGL è stabile e funziona abbastanza bene in generale. Con l'introduzione dell'API EGL in Mesa, è ora possibile scrivere applicazioni OpenGL e OpenGL ES anche su desktop Linux.

Puoi scrivere la tua applicazione per indirizzare EGL e può essere eseguita senza la presenza di un gestore di finestre o persino di un compositore. Per farlo, devi chiamare eglGetDisplay , eglInitialize e infine eglCreateContext e eglMakeCurrent , invece delle solite chiamate glx per fare lo stesso.

Non conosco il percorso del codice specifico per lavorare senza un server di visualizzazione, ma EGL accetta sia i display X11 che i display Wayland e so che è possibile che EGL funzioni senza uno. È possibile creare contesti GL ES 1.1, ES 2.0, ES 3.0 (se si dispone di Mesa 9.1 o versioni successive) e OpenGL 3.1 (Mesa 9.0 o versioni successive). Mesa non ha (a partire da settembre 2013) ancora implementato OpenGL 3.2 Core.

In particolare, su Raspberry Pi e su Android, EGL e GL ES 2.0 (1.1 su Android <3.0) sono supportati per impostazione predefinita. Sul Raspberry Pi, non credo che Wayland funzioni ancora (a partire da settembre 2013), ma ottieni EGL senza un server di visualizzazione utilizzando i driver binari inclusi. Il tuo codice EGL dovrebbe anche essere portabile (con modifiche minime) su iOS, se questo ti interessa.

Di seguito è riportato il post obsoleto precedentemente accettato:

Mi piacerebbe aprire un contesto OpenGL senza X in Linux. C'è un modo per farlo?

Credo che Mesa fornisca un obiettivo framebuffer. Se fornisce un'accelerazione hardware, sarà solo con hardware per il quale esistono driver open source che sono stati adattati per supportare tale utilizzo.

Anche Gallium3D è immaturo e il supporto per questo non è nemmeno sulla tabella di marcia, per quanto ne so.

Mi piacerebbe avere una soluzione che funzioni con le schede nvidia.

Non ce n'è uno. Punto.

NVIDIA fornisce solo un driver X e il progetto Nouveau è ancora immaturo e non supporta il tipo di utilizzo che stai cercando, poiché attualmente sono focalizzati solo sul driver X11.


Linux
  1. I moduli del kernel Linux di cui non possiamo fare a meno

  2. Spostare file su Linux senza mv

  3. Come usare dd in Linux senza distruggere il tuo disco

  4. Malloc su Linux senza eseguire l'overcommit

  5. Port forwarding su Linux senza iptables?

Storia delle patch live del kernel Linux

11 comandi Linux di cui non posso fare a meno

HOWTO:eseguire Linux su Android senza root

Linux:non è possibile aggiungere un utente al gruppo senza un riavvio?

Obarun – Una distribuzione Linux basata su Arch senza Systemd

Come sviluppare applicazioni OpenGL ES (GLES) 2.0 su Linux?