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



我正试图将在一个上下文中创建的FBO纹理复制到另一个上下文。我使用的是Qt4.8.3和QGLFramebufferObject类OpenGL 2.1。我使用qt类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,请在此处阅读QGLWidget例如GLWidget(QWidget *parent = 0, QGLWidget * shareWidget = 0);然后,当您创建两个GL窗口小部件时,使用类似的样式

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

最新更新