Apache2模块中的无窗口OpenGL上下文

时间:2014-03-17 03:46:36

标签: c++ opengl glx apache2-module openglcontext

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

Apache2正在Ubuntu 12.04计算机上运行,​​我创建了一个测试模块,该模块呈现四元组并使用OpenGL / GLX将帧作为映像存储到磁盘。但是当模块收到客户端请求时,它会在XOpenDisplay(0)崩溃并出现分段错误。什么可能出错的想法?​​

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

1 个答案:

答案 0 :(得分:4)

虽然从技术上来说,完全可以实现无窗口,使用OpenGL显示服务器减少屏幕外GPU加速渲染,但实际上现在几乎不可能,因为你需要一个显示环境来实际访问GPU 。幸运的是,图形系统的结构现在正在发生变化(混合图形,显示合成器)。 Mesa已经提供了一个离屏上下文创建模式(OSMesa),但它远没有完成功能。

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