5
votes

Rendu sans tête PyOpenGL

J'utilise PyOpenGL + glfw pour le rendu.

En essayant de faire la même chose sur une machine sans tête (par exemple un serveur) glfw.init () échoue:

< pre> XXX

J'ai trouvé des informations sur le rendu sans tête, mais uniquement en utilisant OpenGL directement et non via python

EDIT: Je comprends que peut-être glfw ne peut pas le supporter. Une solution sans glfw, mais avec autre chose pourrait aussi fonctionner ...


0 commentaires

3 Réponses :


3
votes

GLFW ne prend pas du tout en charge OpenGL headless.

https://www.glfw.org/docs/latest/context .html # context_offscreen

GLFW ne prend pas en charge la création de contextes sans fenêtre associée.

Ce n’est pas une limitation inhabituelle, le problème est que la manière normale de créer un contexte OpenGL consiste à utiliser le serveur X. Il existe maintenant des alternatives utilisant EGL, ce qui est relativement nouveau. Vous devrez utiliser un wrapper EGL pour Python.

Voir: OpenGL sans X.org sous linux


0 commentaires

3
votes

La solution consiste à utiliser xvfb pour un framebuffer virtuel.

Le problème est que le glfw qui est installé dans Ubuntu en utilisant apt-get install libglfw3 libglfw3-dev est ancien et inapte, donc nous devons le compiler à partir des sources.

Voici un exemple de docker complet:

from OpenGL.GL import *
from OpenGL.GLU import *
import glfw

glfw.init()
# Set window hint NOT visible
glfw.window_hint(glfw.VISIBLE, False)
# Create a windowed mode window and its OpenGL context
window = glfw.create_window(DISPLAY_WIDTH, DISPLAY_HEIGHT, "hidden window", None, None)
# Make the window's context current
glfw.make_context_current(window)

Et voici la base du code PyOpenGL pour l'utiliser:

docker run --name headless_test -ti ubuntu /bin/bash

# Inside the ubuntu shell:
apt update && apt install -y python3 python3-pip git python-opengl xvfb xorg-dev cmake
pip3 install pyopengl glfw
mkdir /projects
git clone https://github.com/glfw/glfw.git /projects/glfw
cd /projects/glfw
cmake -DBUILD_SHARED_LIBS=ON .
make
export PYGLFW_LIBRARY=/projects/glfw/src/libglfw.so
xvfb-run python3 some_script_using_pyopengl_and_glfw.py


0 commentaires

0
votes

Si vous souhaitez utiliser OpenGL sans environnement d'affichage sous Linux (par exemple, serveur x), la meilleure approche est d'utiliser EGL . ce que fait EGL est de séparer la gestion du contexte OpenGL du système de fenêtrage, donc il vous permet de créer un contexte sans fenêtre d'affichage.

Si vous utilisez une carte graphique Nvidia, vous devez installer un pilote propriétaire pour pouvoir l'utiliser. avec le pilote, il y a une bibliothèque appelée GLVND c'est une bibliothèque qui inclut EGL votre application doit être liée.

Veuillez vous référer aux liens suivants pour savoir comment utiliser EGL :

Conseil de pro: Lier OpenGL pour le rendu côté serveur

EGL Eye: visualisation OpenGL sans service X < / a>

PS. Si votre API EGL ne trouve aucun périphérique, vous avez probablement lié une mauvaise bibliothèque EGL, la bibliothèque EGL doit correspondre au pilote.


0 commentaires