GNU/Linux >> Znalost Linux >  >> Linux

OpenGL bez X.org v linuxu

Mohl by vás zajímat projekt s názvem Wayland

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


Aktualizace (17. září 2017):

NVIDIA nedávno zveřejnila článek popisující, jak používat OpenGL na bezhlavých systémech, což je velmi podobný případ použití, jaký popisuje otázka.

Shrnuto:

  • Odkaz na libOpenGL.so a libEGL.so místo libGL.so . (Vaše možnosti linkeru by proto měly být -lOpenGL -lEGL
  • Zavolejte na číslo eglGetDisplay a poté eglInitialize k inicializaci EGL.
  • Zavolejte na číslo eglChooseConfig s konfiguračním atributem EGL_SURFACE_TYPE následovaný EGL_PBUFFER_BIT .
  • Zavolejte na číslo eglCreatePbufferSurface a poté eglBindApi(EGL_OPENGL_API); a poté eglCreateContext a eglMakeCurrent .

Od té chvíle provádějte vykreslování OpenGL jako obvykle a můžete vymazat plochu vyrovnávací paměti pixelů, kdekoli budete chtít. Tento doplňkový článek od NVIDIA obsahuje základní příklad a příklad pro více GPU. Povrch PBuffer lze také nahradit povrchem okna nebo povrchem pixmap, podle potřeb aplikace.

Lituji, že jsem o tom neudělal další průzkum ve své předchozí úpravě, ale dobře. Lepší odpovědi jsou lepší odpovědi.

Od mé odpovědi v roce 2010 došlo v grafickém prostoru Linuxu k řadě velkých otřesů. Takže aktualizovaná odpověď:

Dnes nouveau a další ovladače DRI dospěly do bodu, kdy je software OpenGL stabilní a obecně funguje poměrně dobře. Se zavedením EGL API v Mesa je nyní možné psát aplikace OpenGL a OpenGL ES i na linuxových desktopech.

Svou aplikaci můžete napsat do cílového EGL a lze ji spouštět bez přítomnosti správce oken nebo dokonce compositoru. Chcete-li to provést, zavolejte eglGetDisplay , eglInitialize a nakonec eglCreateContext a eglMakeCurrent , místo obvyklých volání glx, aby udělali totéž.

Neznám konkrétní kódovou cestu pro práci bez zobrazovacího serveru, ale EGL akceptuje jak displeje X11, tak displeje Wayland, a vím, že je možné, aby EGL fungovalo i bez něj. Můžete vytvářet kontexty GL ES 1.1, ES 2.0, ES 3.0 (pokud máte Mesa 9.1 nebo novější) a OpenGL 3.1 (Mesa 9.0 nebo novější). Mesa (od září 2013) dosud neimplementovala OpenGL 3.2 Core.

Zejména na Raspberry Pi a na Androidu jsou ve výchozím nastavení podporovány EGL a GL ES 2.0 (1.1 na Androidu <3.0). Na Raspberry Pi si myslím, že Wayland ještě nefunguje (od září 2013), ale pomocí přiložených binárních ovladačů získáte EGL bez zobrazovacího serveru. Váš EGL kód by měl být také přenosný (s minimálními úpravami) na iOS, pokud vás to zajímá.

Níže je zastaralý, dříve přijatý příspěvek:

Chtěl bych otevřít kontext OpenGL bez X v linuxu. Existuje vůbec nějaký způsob, jak to udělat?

Věřím, že Mesa poskytuje cíl framebufferu. Pokud vůbec poskytuje nějakou hardwarovou akceleraci, bude to pouze s hardwarem, pro který existují ovladače s otevřeným zdrojovým kódem, které byly přizpůsobeny pro podporu takového použití.

Gallium3D je také nevyzrálé a pokud vím, jeho podpora není ani na plánu.

Chtěl bych získat řešení, které funguje s kartami nvidia.

Žádný není. Období.

NVIDIA poskytuje pouze ovladač X a projekt Nouveau je stále nezralý a nepodporuje druh použití, který hledáte, protože se v současnosti soustředí pouze na ovladač X11.


Linux
  1. Spustit Matlab v Linuxu bez grafického prostředí?

  2. Malloc na linuxu bez přetížení

  3. Linux Kernel.org zavádějící o panice jádra

  1. Spusťte kontejnery na Linuxu bez sudo v Podman

  2. Moduly linuxového jádra, bez kterých nemůžeme žít

  3. Přesměrování portů na Linuxu bez iptables?

  1. Přesouvání souborů na Linuxu bez mv

  2. Jak používat dd v Linuxu bez zničení disku

  3. Jak otestovat balíček bez jeho instalace v Linuxu