OpenGL ohne X.org in Linux
Ich möchte ein OpenGL-Kontext ohne X in linux. Gibt es eine Möglichkeit, überhaupt das zu tun?
Ich weiß, es ist bossible für die integrierte intel-Grafikkarte hardware, obwohl die meisten Leute haben nvidia-Karten in Ihrem system. Ich hätte gerne eine Lösung, die mit nvidia-Karten.
Wenn es keine andere Möglichkeit, als durch die integrierte intel-hardware, ich denke, es wäre okay, zu wissen, wie es gemacht wird mit denen.
X11-Protokoll und das Protokoll selbst ist zu groß und Komplex. Maus/Tastatur/Tablet input-multiplexing, die es bietet zu downwatered für moderne Programme. Ich denke, es ist die Schlimmste Barriere, die verhindert, dass linux-desktop zu verbessern, das ist der Grund, warum ich nach alternativen suchen.
InformationsquelleAutor der Frage Cheery | 2010-07-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Update (Sep. 17, 2017):
NVIDIA vor kurzem einen Artikel veröffentlicht,Details wie die mit OpenGL auf headless-Systemendie einen sehr ähnlichen Anwendungsfall wie die Frage beschreibt.
In der Zusammenfassung:
libOpenGL.so
undlibEGL.so
stattlibGL.so
. (Ihr linker Optionen sollte daher-lOpenGL -lEGL
eglGetDisplay
danneglInitialize
zu initialisieren EGL.eglChooseConfig
mit dem config-AttributEGL_SURFACE_TYPE
folgte mitEGL_PBUFFER_BIT
.eglCreatePbufferSurface
danneglBindApi(EGL_OPENGL_API);
danneglCreateContext
undeglMakeCurrent
.Ab diesem Zeitpunkt, tun Sie Ihre OpenGL-rendering als üblich, und Sie können blit Ihre pixel-Puffer Fläche, wo immer Sie möchten. Dieser Ergänzende Artikel von NVIDIA enthält ein einfaches Beispiel und ein Beispiel für mehrere GPUs. Die PBuffer Oberfläche kann auch ersetzt werden durch eine Fenster-Oberfläche oder pixmap-Oberfläche nach der Anwendung.
Bedauere ich, nicht mehr zu tun Forschung über diese auf meinem vorherigen edit, aber naja. Bessere Antworten sind die besseren Antworten.
Da meine Antwort im Jahr 2010, gab es eine Reihe von großen shakeups in der Linux-Grafik-Raum. So, eine aktualisierte Antwort:
Heute, nouveau und die andere DRI-Treiber ausgereift bis zu dem Punkt, wo OpenGL-software ist stabil und schneidet Recht gut im Allgemeinen. Mit der Einführung des EGL-API in Mesa, ist es nun möglich, schreiben von OpenGL und OpenGL ES-Anwendungen auch auf Linux-desktops.
Können Sie schreiben Sie Ihre Anwendung Ziel der EGL, und es kann ausgeführt werden, ohne die Anwesenheit von einem Fenster-manager oder sogar ein compositor. So zu tun, Sie nennen würde
eglGetDisplay
eglInitialize
und letztlicheglCreateContext
undeglMakeCurrent
anstelle der üblichen glx-Aufrufe, das gleiche zu tun.Ich weiß nicht, die spezifischen code-Pfad für die Arbeit, ohne ein display-server, aber EGL akzeptiert sowohl X11-displays und Wayland zeigt, und ich weiß, dass es möglich ist, für die EGL zu betreiben, ohne eine. Sie können erstellen GL ES 1.1, ES 2.0, ES 3.0 (wenn Sie Mesa 9.1 oder höher), und OpenGL 3.1 (Mesa 9.0 oder höher) zusammenhängen. Mesa hat nicht (wie von Sep. 2013) noch nicht implementiert OpenGL 3.2 Core.
Insbesondere auf dem Raspberry Pi und Android -, EGL-und GL-ES-2.0 (1.1 auf Android < 3.0) werden standardmäßig unterstützt. Auf dem Raspberry Pi, ich glaube nicht, dass Wayland noch funktioniert (Stand Sep. 2013), aber Sie bekommen, EGL, ohne einen display-server mithilfe des mitgelieferten binären Treiber. Ihre EGL-code sollte auch tragbar sein (mit minimalen änderungen) auf iOS, wenn, das Sie interessiert.
Unten ist die veraltete, früher akzeptiert post:
Ich glaube, Mesa bietet einen framebuffer Ziel. Wenn Sie keine hardware-Beschleunigung überhaupt, wird es nur mit hardware, für die es open-source-Treiber, die angepasst wurden, um eine solche Verwendung unterstützen.
Gallium3D ist auch unreif, und die Unterstützung für dieses gar nicht auf der roadmap, soweit ich weiß.
Gibt es nicht. Zeitraum.
NVIDIA stellt nur eine X-Treiber, und das Nouveau-Projekt ist noch nicht ausgereift, und bietet keine Unterstützung für die Art der Nutzung, die Sie suchen, wie Sie sich derzeit nur auf der X11-Treiber.
InformationsquelleAutor der Antwort greyfade
Du vielleicht Interesse an einem Projekt namens Wayland
http://en.wikipedia.org/wiki/Wayland_%28display_server%29
InformationsquelleAutor der Antwort Havoc P
Verwenden Sie einfach Mesa.
InformationsquelleAutor der Antwort genpfault
Haben Sie sich auf dieser Seite?
http://virtuousgeek.org/blog/index.php/jbarnes/2011/10/31/writing_stanalone_programs_with_egl_and_
Ist es wahrscheinlich ein bisschen veraltet. Ich habe nicht versucht noch, aber ich würde schätzen, mehr Dokumentation zu diesem Typ.
Wahrscheinlich eine gute Idee, wie von heute, ist zu Folgen Wayland-compositor-drm.c Umsetzung:
http://cgit.freedesktop.org/wayland/weston/tree/src/compositor-drm.c
InformationsquelleAutor der Antwort elmarco
Können Sie sich, wie Android hat das Problem gelöst-Fragen. Siehe Android-x86-Projekt.
Android nutzt mesa mit egl und opengles. Android hat seine eigenen einfachen Gralloc Komponente für die Einstellung des Modus und Grafik-Zuweisungen. Auf top von, dass Sie SurfaceFlinger-Komponente, die eine Zusammensetzung-engine, die verwendet OpenGLES für die Beschleunigung.
Nicht sehen können, warum konnte Sie nicht verwenden, diese Komponenten in ähnlicher Weise und auch die Wiederverwendung der Android-glue-code.
InformationsquelleAutor der Antwort user377178