use*_*014 5 opengl pyopengl headless glfw
我正在使用PyOpenGL + glfw进行渲染。
尝试在无头计算机(例如服务器)上执行相同操作时glfw.init()失败:
glfw.GLFWError: (65544) b'X11: The DISPLAY environment variable is missing'
Fatal Python error: Couldn't create autoTLSkey mapping
Aborted (core dumped)
Run Code Online (Sandbox Code Playgroud)
我发现了有关无头渲染的一些信息,但仅在直接使用OpenGL而不是通过python时才找到
编辑:我了解,也许glfw无法支持它。没有glfw但有其他东西的解决方案也可以工作...
解决方案是使用 xvfb 作为虚拟帧缓冲区。
问题是Ubuntu中安装的glfw使用的apt-get install libglfw3 libglfw3-dev是旧的并且不适合,所以我们需要从源代码编译它。
这是一个完整的 docker 示例:
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
Run Code Online (Sandbox Code Playgroud)
这是使用它的 PyOpenGL 代码的基础:
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
615 次 |
| 最近记录: |