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

标签 opengl textures render-to-texture off-screen

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

似乎 FBO 属于 OpenGL 上下文,并且上下文不可在进程之间共享。我绝对理解允许多个进程在同一上下文中混淆是邪恶的。但就我的具体情况而言,我认为认为它可能非常安全是合理的

编辑:

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

最佳答案

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

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

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

关于opengl - 在两个应用程序之间共享 OpenGL 帧缓冲区/渲染缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6387049/

相关文章:

windows - 在 Windows 上混合使用 OpenGL 和 GDI

iphone - 解释 OpenGL ES 背景图像的工作原理

c++ - 实时更改纹理sdl

iphone - 渲染到纹理或离屏帧缓冲区

java - 纹理映射的奇怪问题

c - 在 OpenGL C Linux 中移动特定对象

opengl - GL_PROJECTION矩阵或GL_MODELVIEW矩阵上的gluLookAt()最佳用法

java - LWJGL 中的纹理球体

java - OpenGL LWJGL 可调整大小的纹理立方体

javascript - 在 Three.js 中嵌套 WebGLRenderTargets