c++ - 将绑定(bind)到 FBO 的纹理复制到另一个 OpenGL 上下文

标签 c++ qt opengl fbo

我正在尝试将在一个上下文中创建的 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);

最佳答案

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

  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, 像素);

  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);

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

相关文章:

c++ - 如何避免由于遍历大量数据而导致应用程序死锁?

c++ - 在 QFile::setFileName 上获取段错误

python - 有没有办法更改 Pygame 中导入的 .obj 文件的位置和大小?

c++ - 为什么 GCC 认为模板参数是 int 而它是完全不同的类型?

c++ - 将 uint8* 转换为 uint32* 是如何工作的?

java - 我无法从 C++ 程序运行可执行 jar

Qt 无模式对话框销毁

c++ - 在 Open GL 2.0 和 glm 中创建第一人称相机

c++ - GLEW 1.10.0段错误

c++ - boost asio Deadline_timer async_wait(N秒)在N秒内两次导致操作取消