GNU/Linux >> LINUX-Kenntnisse >  >> Linux

OpenGL ohne X.org unter Linux

Vielleicht interessieren Sie sich für ein Projekt namens Wayland

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


Aktualisierung (17. September 2017):

NVIDIA hat kürzlich einen Artikel veröffentlicht, in dem ausführlich beschrieben wird, wie OpenGL auf Headless-Systemen verwendet wird, was ein sehr ähnlicher Anwendungsfall ist, wie in der Frage beschrieben.

Zusammengefasst:

  • Link zu libOpenGL.so und libEGL.so statt libGL.so . (Ihre Linker-Optionen sollten daher -lOpenGL -lEGL sein
  • Rufen Sie eglGetDisplay an , dann eglInitialize um EGL zu initialisieren.
  • Ruf eglChooseConfig an mit dem Konfigurationsattribut EGL_SURFACE_TYPE gefolgt von EGL_PBUFFER_BIT .
  • Rufen Sie eglCreatePbufferSurface an , dann eglBindApi(EGL_OPENGL_API); , dann eglCreateContext und eglMakeCurrent .

Führen Sie von diesem Zeitpunkt an Ihr OpenGL-Rendering wie gewohnt durch, und Sie können Ihre Pixelpufferoberfläche an beliebiger Stelle blitten. Dieser ergänzende Artikel von NVIDIA enthält ein grundlegendes Beispiel und ein Beispiel für mehrere GPUs. Die PBuffer-Oberfläche kann je nach Anwendungsanforderungen auch durch eine Fensteroberfläche oder eine Pixmap-Oberfläche ersetzt werden.

Ich bedauere, dass ich bei meiner vorherigen Bearbeitung nicht mehr darüber recherchiert habe, aber na ja. Bessere Antworten sind bessere Antworten.

Seit meiner Antwort im Jahr 2010 hat es im Bereich der Linux-Grafik einige große Veränderungen gegeben. Also, eine aktualisierte Antwort:

Heute sind nouveau und die anderen DRI-Treiber so weit ausgereift, dass OpenGL-Software stabil ist und im Allgemeinen recht gut funktioniert. Mit der Einführung der EGL-API in Mesa ist es jetzt möglich, OpenGL- und OpenGL ES-Anwendungen sogar auf Linux-Desktops zu schreiben.

Sie können Ihre Anwendung für Ziel-EGL schreiben und sie kann ohne das Vorhandensein eines Fenstermanagers oder sogar eines Compositors ausgeführt werden. Dazu rufen Sie eglGetDisplay auf , eglInitialize und schließlich eglCreateContext und eglMakeCurrent , anstelle der üblichen glx-Aufrufe, um dasselbe zu tun.

Ich kenne den spezifischen Codepfad für das Arbeiten ohne einen Anzeigeserver nicht, aber EGL akzeptiert sowohl X11-Anzeigen als auch Wayland-Anzeigen, und ich weiß, dass EGL ohne Anzeigeserver arbeiten kann. Sie können GL ES 1.1-, ES 2.0-, ES 3.0- (wenn Sie über Mesa 9.1 oder höher verfügen) und OpenGL 3.1-Kontexte (Mesa 9.0 oder höher) erstellen. Mesa hat OpenGL 3.2 Core noch nicht implementiert (Stand September 2013).

Insbesondere auf dem Raspberry Pi und auf Android werden EGL und GL ES 2.0 (1.1 auf Android <3.0) standardmäßig unterstützt. Auf dem Raspberry Pi funktioniert Wayland meiner Meinung nach noch nicht (Stand Sep. 2013), aber Sie erhalten EGL ohne Anzeigeserver mit den mitgelieferten Binärtreibern. Ihr EGL-Code sollte auch (mit minimalen Änderungen) auf iOS portierbar sein, falls Sie das interessiert.

Unten ist der veraltete, zuvor akzeptierte Beitrag:

Ich möchte einen OpenGL-Kontext ohne X in Linux öffnen. Gibt es dafür überhaupt eine Möglichkeit?

Ich glaube, Mesa bietet ein Framebuffer-Ziel. Wenn es überhaupt eine Hardwarebeschleunigung gibt, dann nur mit Hardware, für die es Open-Source-Treiber gibt, die angepasst wurden, um eine solche Verwendung zu unterstützen.

Gallium3D ist auch unausgereift, und soweit ich weiß, steht die Unterstützung dafür nicht einmal auf der Roadmap.

Ich hätte gerne eine Lösung, die mit NVIDIA-Karten funktioniert.

Es gibt keinen. Punkt.

NVIDIA stellt nur einen X-Treiber bereit, und das Nouveau-Projekt ist noch unausgereift und unterstützt die Art der Verwendung, nach der Sie suchen, nicht, da sie sich derzeit nur auf den X11-Treiber konzentrieren.


Linux
  1. Führen Sie Container unter Linux ohne sudo in Podman aus

  2. So verwenden Sie dd unter Linux, ohne Ihre Festplatte zu zerstören

  3. Malloc unter Linux ohne Overcommitting

  4. Irreführung von Linux Kernel.org über Kernel Panic

  5. Portweiterleitung unter Linux ohne iptables?

Verschieben von Dateien unter Linux ohne mv

Geschichte des Linux-Kernel-Live-Patchings

11 Linux-Befehle, ohne die ich nicht leben kann

HOWTO:Führen Sie Linux auf Android ohne Root aus

Obarun – Eine Arch-basierte Linux-Distribution ohne Systemd

Wie entwickelt man OpenGL ES (GLES) 2.0-Anwendungen unter Linux?