GNU/Linux >> Tutoriales Linux >  >> Linux

OpenGL sin X.org en Linux

Puede que te interese un proyecto llamado Wayland

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


Actualización (17 de septiembre de 2017):

NVIDIA publicó recientemente un artículo que detalla cómo usar OpenGL en sistemas sin periféricos, que es un caso de uso muy similar al que describe la pregunta.

En resumen:

  • Enlace a libOpenGL.so y libEGL.so en lugar de libGL.so . (Por lo tanto, sus opciones de enlace deben ser -lOpenGL -lEGL
  • Llamar eglGetDisplay , luego eglInitialize para inicializar EGL.
  • Llamar eglChooseConfig con el atributo de configuración EGL_SURFACE_TYPE seguido de EGL_PBUFFER_BIT .
  • Llamar eglCreatePbufferSurface , luego eglBindApi(EGL_OPENGL_API); , luego eglCreateContext y eglMakeCurrent .

A partir de ese momento, haga su renderizado OpenGL como de costumbre, y puede eliminar la superficie de su búfer de píxeles donde lo desee. Este artículo complementario de NVIDIA incluye un ejemplo básico y un ejemplo para varias GPU. La superficie PBuffer también se puede reemplazar con una superficie de ventana o una superficie de mapa de píxeles, según las necesidades de la aplicación.

Lamento no haber investigado más sobre esto en mi edición anterior, pero bueno. Mejores respuestas son mejores respuestas.

Desde mi respuesta en 2010, ha habido una serie de cambios importantes en el espacio de gráficos de Linux. Entonces, una respuesta actualizada:

Actualmente, nouveau y los demás controladores DRI han madurado hasta el punto en que el software OpenGL es estable y funciona razonablemente bien en general. Con la introducción de la API EGL en Mesa, ahora es posible escribir aplicaciones OpenGL y OpenGL ES incluso en escritorios Linux.

Puede escribir su aplicación para apuntar a EGL, y puede ejecutarse sin la presencia de un administrador de ventanas o incluso un compositor. Para hacerlo, llamarías a eglGetDisplay , eglInitialize y finalmente eglCreateContext y eglMakeCurrent , en lugar de las habituales llamadas glx para hacer lo mismo.

No conozco la ruta de código específica para trabajar sin un servidor de pantalla, pero EGL acepta pantallas X11 y pantallas Wayland, y sé que es posible que EGL funcione sin una. Puede crear contextos GL ES 1.1, ES 2.0, ES 3.0 (si tiene Mesa 9.1 o posterior) y OpenGL 3.1 (Mesa 9.0 o posterior). Mesa aún no ha implementado (hasta septiembre de 2013) OpenGL 3.2 Core.

En particular, en Raspberry Pi y en Android, EGL y GL ES 2.0 (1.1 en Android <3.0) son compatibles de forma predeterminada. En Raspberry Pi, no creo que Wayland funcione todavía (a partir de septiembre de 2013), pero obtienes EGL sin un servidor de visualización usando los controladores binarios incluidos. Su código EGL también debe ser portátil (con modificaciones mínimas) a iOS, si le interesa.

A continuación se muestra la publicación desactualizada y aceptada anteriormente:

Me gustaría abrir un contexto OpenGL sin X en Linux. ¿Hay alguna forma de hacerlo?

Creo que Mesa proporciona un objetivo de framebuffer. Si proporciona alguna aceleración de hardware, será solo con hardware para el que haya controladores de código abierto que se hayan adaptado para admitir dicho uso.

Gallium3D también es inmaduro, y el soporte para esto ni siquiera está en la hoja de ruta, que yo sepa.

Me gustaría obtener una solución que funcione con tarjetas nvidia.

No hay uno. Punto.

NVIDIA solo proporciona un controlador X, y el proyecto Nouveau aún está inmaduro y no es compatible con el tipo de uso que está buscando, ya que actualmente se centran solo en el controlador X11.


Linux
  1. Ejecute contenedores en Linux sin sudo en Podman

  2. Módulos del kernel de Linux sin los que no podemos vivir

  3. Mover archivos en Linux sin mv

  4. Cómo instalar OpenOffice.org 3.3 en Linux Mint 12 / Linux Mint11

  5. Cómo probar un paquete sin instalarlo en Linux

Historia de los parches en vivo del kernel de Linux

11 comandos de Linux sin los que no puedo vivir

CÓMO:Ejecutar Linux en Android sin root

Obarun:una distribución de Linux basada en Arch sin Systemd

¿Cómo desarrollar aplicaciones OpenGL ES (GLES) 2.0 en Linux?

Actualizaciones del kernel sin reiniciar