首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyOpenGL无头渲染

PyOpenGL无头渲染
EN

Stack Overflow用户
提问于 2019-02-01 16:59:51
回答 3查看 6.8K关注 0票数 6

我使用PyOpenGL+glfw进行渲染。

当试图在无头计算机(例如服务器)上执行相同操作时,glfw.init()失败:

代码语言:javascript
复制
glfw.GLFWError: (65544) b'X11: The DISPLAY environment variable is missing'
Fatal Python error: Couldn't create autoTLSkey mapping
Aborted (core dumped)

我发现了一些关于无头渲染的信息,但只有在直接使用OpenGL而不是通过python时才能找到。

编辑:我知道也许glfw不能支持它。一种没有glfw的解决方案,但用其他的方法也可能有效.

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-03-30 07:37:30

解决方案是将xvfb用于虚拟框架缓冲区。

问题是使用apt-get install libglfw3 libglfw3-dev在Ubuntu中安装的glfw是旧的和不合适的,所以我们需要从源代码编译它。

下面是一个完整的工作码头示例:

代码语言:javascript
复制
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

下面是使用它的PyOpenGL代码的基础:

代码语言:javascript
复制
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)
票数 3
EN

Stack Overflow用户

发布于 2019-02-01 17:16:09

GLFW根本不支持无头OpenGL。

屏外

GLFW不支持在没有关联窗口的情况下创建上下文。

这不是一个不寻常的限制,问题是创建OpenGL上下文的正常方法是使用X服务器。现在有一些使用EGL的替代方法,这是相对较新的。您需要为Python使用EGL包装器。

请参阅:OpenGL中没有X.org的linux

票数 3
EN

Stack Overflow用户

发布于 2019-04-19 08:22:23

如果您想在linux上使用没有显示环境的OpenGL (例如。最好的方法是使用EGL。EGL所做的是将OpenGL上下文管理从窗口系统中分离出来,因此它允许您在没有显示窗口的情况下创建上下文。

如果您正在使用Nvidia显卡,您必须安装专有驱动程序才能使用它。除了驱动程序,还有一个名为GLVND的库,这是一个包含应用程序需要链接的EGL的库。

请参考以下链接了解如何使用EGL

Pro提示:将OpenGL链接到服务器端呈现

EGL眼:没有X服务的OpenGL可视化

PS。如果您的EGL找不到任何设备,您可能链接错了EGL库,EGL库必须与驱动程序匹配。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54483960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档