将绑定到 FBO 的纹理复制到另一个 OpenGL 上下文

Copy texture binded to FBO to another OpenGL context

我正在尝试将在一个上下文中创建的 FBO 中的纹理复制到另一个上下文中。我正在使用 Qt 4.8.3 和 QGLFramebufferObject class,OpenGL 2.1。 我使用 qt class QGLWidget

创建了两个带有小部件的上下文

我尝试使用 blitFramebuffer 方法将完整的 FBO 复制到另一个上下文,但没有成功。我如何从 FBO 复制纹理,或者也许有另一种方法可以从 FBO 传输视觉内容。

FBO 是用这样的参数创建的

new QGLFramebufferObject(arraySize, arraySize, QGLFramebufferObject::NoAttachment, GL_TEXTURE_2D, GL_ALPHA);

这个问题我有两个解决方案

  1. 使用 glGetTexImage 复制附加到 FBO 的纹理 uint * pixels = new uint[FBO_WIDTH * FBO_HEIGHT]; glBindTexture(GL_TEXTURE_2D, someFBO->texture()); glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);

  2. 如 Mateusz Grzejek 所说共享资源: 在 qt 中,您必须将参数传递给 QGLWidget 的构造函数 shareWidget,阅读更多内容 here QGLWidget 例如GLWidget(QWidget *parent = 0, QGLWidget * shareWidget = 0); 然后当你创建两个 GL 小部件时使用这样的样式

GLWidget *glWidget = new GLWidget(this); GLWidget *glWidget2 = new GLWidget(this, glWidget);