2015-04-07 67 views
1

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

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

的FBO与这样的参数

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

我是否理解正确,您尝试将数据从帧缓冲区复制到纹理?如果是,为什么'blitFramebuffer'不起作用?任何错误?另外,你如何创建你的OpenGL上下文?你有没有具体说明,这两个环境应该共享资源? –

+0

我忘了提,我用qt类'QGLWidget' 使用这种方法,我试图创建块传送两个上下文: 'QGLFramebufferObject :: blitFramebuffer(targetFBO_context2,矩形,sourceFBO_context1,矩形,GL_DEPTH_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)' 比我绑定targetFBO_context2纹理和使用'glDrawArrays'我不知道在上下文之间共享资源,我会寻找这个主题 谢谢 – Storkur

回答

1

创建我使用glGetTexImage 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);

  • 共享资源,得到了这个问题

    1. 复制的纹理连接到FBO两种解决方案Mateusz Grzejek说: 在qt你必须把一个参数到QGLWidget的构造函数shareWidget,阅读更多 here QGLWidget 例如, GLWidget(QWidget *parent = 0, QGLWidget * shareWidget = 0); 然后当你创建两个GL widgets使用了风格类似这样的

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

  • +0

    我认为这种方法太慢了,它在CPU和GPU之间复制数据。 blitFramebuffer应该能够工作。至少我们成功地使用它来复制纹理。尝试调试参数的用法。 – user1914692

    相关问题