GNU/Linux >> Tutoriels Linux >  >> Linux

OpenGL sans X.org sous Linux

Vous pourriez être intéressé par un projet appelé Wayland

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


Mise à jour (17 septembre 2017) :

NVIDIA a récemment publié un article détaillant comment utiliser OpenGL sur des systèmes sans tête, ce qui est un cas d'utilisation très similaire à celui décrit dans la question.

En résumé :

  • Lien vers libOpenGL.so et libEGL.so au lieu de libGL.so . (Vos options de lien doivent donc être -lOpenGL -lEGL
  • Appelez le eglGetDisplay , puis eglInitialize pour initialiser EGL.
  • Appelez le eglChooseConfig avec l'attribut de configuration EGL_SURFACE_TYPE suivi de EGL_PBUFFER_BIT .
  • Appelez le eglCreatePbufferSurface , puis eglBindApi(EGL_OPENGL_API); , puis eglCreateContext et eglMakeCurrent .

À partir de ce moment, faites votre rendu OpenGL comme d'habitude et vous pouvez blit votre surface de tampon de pixels où vous le souhaitez. Cet article supplémentaire de NVIDIA comprend un exemple de base et un exemple pour plusieurs GPU. La surface PBuffer peut également être remplacée par une surface fenêtre ou une surface pixmap, selon les besoins de l'application.

Je regrette de ne pas avoir fait plus de recherches à ce sujet lors de mon édition précédente, mais bon. De meilleures réponses sont de meilleures réponses.

Depuis ma réponse en 2010, il y a eu un certain nombre de bouleversements majeurs dans l'espace graphique Linux. Donc, une réponse mise à jour :

Aujourd'hui, nouveau et les autres pilotes DRI ont mûri au point où le logiciel OpenGL est stable et fonctionne raisonnablement bien en général. Avec l'introduction de l'API EGL dans Mesa, il est désormais possible d'écrire des applications OpenGL et OpenGL ES même sur des postes de travail Linux.

Vous pouvez écrire votre application pour cibler EGL, et elle peut être exécutée sans la présence d'un gestionnaire de fenêtres ou même d'un compositeur. Pour ce faire, vous appelleriez le eglGetDisplay , eglInitialize , et finalement eglCreateContext et eglMakeCurrent , au lieu des appels glx habituels pour faire la même chose.

Je ne connais pas le chemin de code spécifique pour travailler sans serveur d'affichage, mais EGL accepte à la fois les écrans X11 et les écrans Wayland, et je sais qu'il est possible pour EGL de fonctionner sans serveur. Vous pouvez créer des contextes GL ES 1.1, ES 2.0, ES 3.0 (si vous avez Mesa 9.1 ou version ultérieure) et OpenGL 3.1 (Mesa 9.0 ou version ultérieure). Mesa n'a pas encore implémenté OpenGL 3.2 Core (en septembre 2013).

Notamment, sur le Raspberry Pi et sur Android, EGL et GL ES 2.0 (1.1 sur Android <3.0) sont supportés par défaut. Sur le Raspberry Pi, je ne pense pas que Wayland fonctionne encore (en septembre 2013), mais vous obtenez EGL sans serveur d'affichage en utilisant les pilotes binaires inclus. Votre code EGL doit également être portable (avec une modification minimale) sur iOS, si cela vous intéresse.

Vous trouverez ci-dessous la publication obsolète et précédemment acceptée :

Je voudrais ouvrir un contexte OpenGL sans X sous Linux. Y a-t-il un moyen de le faire ?

Je crois que Mesa fournit une cible framebuffer. S'il fournit une quelconque accélération matérielle, ce ne sera qu'avec du matériel pour lequel il existe des pilotes open source adaptés pour supporter une telle utilisation.

Gallium3D est également immature, et le support pour cela n'est même pas sur la feuille de route, pour autant que je sache.

J'aimerais obtenir une solution qui fonctionne avec les cartes nvidia.

Il n'y en a pas. Période.

NVIDIA ne fournit qu'un pilote X, et le projet Nouveau est encore immature et ne prend pas en charge le type d'utilisation que vous recherchez, car ils se concentrent actuellement uniquement sur le pilote X11.


Linux
  1. Exécutez des conteneurs sur Linux sans sudo dans Podman

  2. Exécuter Matlab sous Linux sans environnement graphique ?

  3. Linux :comparer la structure des répertoires sans comparer les fichiers

  4. Mises à jour du noyau sans redémarrage

  5. Linux Kernel.org trompeur sur la panique du noyau

Historique des correctifs en direct du noyau Linux

11 commandes Linux sans lesquelles je ne peux pas vivre

HOWTO :Exécuter Linux sur Android sans racine

Obarun - Une distribution Linux basée sur Arch sans Systemd

Comment développer des applications OpenGL ES (GLES) 2.0 sous Linux ?

Redirection de port sous Linux sans iptables ?