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
etlibEGL.so
au lieu delibGL.so
. (Vos options de lien doivent donc être-lOpenGL -lEGL
- Appelez le
eglGetDisplay
, puiseglInitialize
pour initialiser EGL. - Appelez le
eglChooseConfig
avec l'attribut de configurationEGL_SURFACE_TYPE
suivi deEGL_PBUFFER_BIT
. - Appelez le
eglCreatePbufferSurface
, puiseglBindApi(EGL_OPENGL_API);
, puiseglCreateContext
eteglMakeCurrent
.
À 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.