0

我正在尝试开发一个 Apache2 模块,该模块利用 OpenGL 执行屏幕外渲染并动态生成图像,然后我可以将其发送回客户端。

Apache2 在 Ubuntu 12.04 机器上运行,我创建了一个测试模块,它渲染一个四边形并使用 OpenGL/GLX 将帧作为图像存储到磁盘。但是当模块收到客户端请求时,它会XOpenDisplay(0)因分段错误而崩溃。有什么想法可能会出错吗?

编辑: 我见过的所有例子都在谈论使用像素缓冲区(PBuffer)。据我所知,这些已被弃用,应该使用 FBO。有人可以解释如何创建上下文并使用 FBO 执行屏幕外渲染吗?

4

1 回答 1

4

虽然从技术上讲,使用 OpenGL 进行无窗口、显示服务器更少的离屏 GPU 加速渲染是完全可能的,但如今几乎不可能,因为您需要一个显示环境才能真正访问 GPU。幸运的是,如今图形系统的结构正在发生变化(混合图形、显示合成器)。Mesa 已经提供了屏幕外上下文创建模式 (OSMesa),但它还远未完成功能。

所以现在,您需要某种可绘制的显示服务器,您可以在其上绑定上下文。X11 提供两种 GPU 加速可绘制对象:Windows 和 PBuffers。您可以将 FBO 与任何一种一起使用(从技术上讲,PBuffer 是不能映射到根窗口并具有离屏画布的 Windows)。最简单的方法是在 X 服务器上创建一个常规窗口但不显示它;您仍然可以在其上创建 OpenGL 上下文并创建 FBO,如许多教程中所示。为了使 OpenGL 工作,您使用的 X 服务器必须处于活动状态 握住控制台并配置为使用 GPU(理论上,对于支持混合图形的较新 X 服务器和驱动程序,应该可以将 X 服务器配置为使用虚拟显示设备并配置GPU 作为加速渲染的辅助设备,但到目前为止我从未尝试过)。

于 2014-03-17T13:12:12.727 回答