我试图将纹理从在一个上下文中创建的FBO复制到另一个上下文中。我正在使用Qt 4.8.3和QGLFramebufferObject类,OpenGL 2.1。
我使用qt类QGLWidget用小部件创建了两个上下文

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

使用此类参数创建FBO

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

最佳答案

我有两个解决方案

  • 使用 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);
  • 正如Mateusz Grzejek所说,
  • 共享资源:
    在Qt中,您必须将参数放入shareWidget的构造函数QGLWidget,了解更多 here QGLWidget
    例如GLWidget(QWidget *parent = 0, QGLWidget * shareWidget = 0);然后当您创建两个GL小部件时,请使用像
  • 这样的样式
    GLWidget *glWidget = new GLWidget(this);GLWidget *glWidget2 = new GLWidget(this, glWidget);

    关于c++ - 将绑定(bind)到FBO的纹理复制到另一个OpenGL上下文,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29487670/

    10-11 19:00