在两个应用程序之间共享OpenGL帧缓冲区/渲染缓冲区

vri*_*nce 9 c++ windows opengl qt

假设我有一个应用程序A女巫负责通过OpenGL库在屏幕上绘制内容.为了实现紧密集成,我想让这个应用程序A完成它的工作,但是在FBO中或直接在渲染缓冲区中渲染,并允许应用程序对此缓冲区B具有只读访问权限以处理屏幕上的显示(基本上将其呈现为2D纹理).

似乎FBO属于OpenGL上下文,上下文在进程之间是不可共享的.我当然明白允许多个进程两个混乱的相同上下文是邪恶的.但在我的特殊情况下,我认为认为它可能非常安全是合理的.

注意:

应用程序A是一个QApplication,应用程序Bnative win32一个

编辑:

渲染大小接近全屏,我正在考虑2048x2048 32bits缓冲区(我现在不使用alpha通道,但为什么不使用后者).

dat*_*olf 6

帧缓冲对象不能在 OpenGL 上下文之间共享,无论它们是否属于同一进程。但是纹理可以共享纹理可以用作帧缓冲区对象的颜色缓冲区附件。

如果图形系统为这项工作提供 API,那么在进程之间共享 OpenGL 上下文实际上是可能的。在 X11/GLX 的情况下,可以在多个进程之间共享间接渲染上下文。通过采用一些非常非常粗略的技巧,在 Windows 中是可能的。MacOS X,不知道如何做到这一点。

因此,最简单的方法可能是使用像素缓冲区对象来获得对渲染图片的高性能访问。然后通过共享内存将其发送到其他应用程序并将其上传到那里的纹理中(再次通过像素缓冲区对象)。

  • 好吧,您必须跨进程共享 OpenGL 上下文,如果您解除进程之间的一些保护,这实际上是可能的。不过我可以问一下你如何上传你的纹理吗?glTexImage2D 还是 glTexSubImage2D?后者快了几个数量级。 (2认同)