c++ - QOpenGLFramebufferObject绑定(bind)纹理

标签 c++ qt opengl framebuffer

这简直让我抓狂!

我通过以下方式创建了我的 fbo

QOpenGLFramebufferObjectFormat format;
format.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil);
format.setMipmap(false);
format.setSamples(4);
format.setTextureTarget(GL_TEXTURE_2D);
format.setInternalTextureFormat(GL_RGBA32F_ARB);
qfbo=new QOpenGLFramebufferObject(QSize(w,h),format);

好吧,它似乎在工作,Qt 没有声明这一点。

问题是我需要 QOpenGLFramebufferObject 作为读/写,写入它似乎很容易,只需 qfbo.bind() 就可以工作,问题是我无法绑定(bind)它的纹理,如果我问它关于 GLuint处理它在两种模式下总是返回 0:

qDebug()<<qfbo->texture();
qDebug()<<qfbo->takeTexture();

显然我的意图是像这样自己绑定(bind)纹理:

glBindTexture(GL_TEXTURE_1D, fbo->texture());

有什么建议吗?我一直在谷歌上搜索很长时间,但没有运气:(

我忘了说如果我不使用 .setsamples(4);获得 !=0 GLuit 但全黑。

最佳答案

如果您使用多重采样,则不会分配纹理,而是使用多重采样渲染缓冲区。

您需要创建另一个具有匹配维度的非多重采样 FBO,并使用 blitFramebuffer 将多重采样数据解析为单个采样。 然后您将拥有可以绑定(bind)的纹理(绑定(bind)到 2D 目标,而不是 1D!)。如果此纹理仍然是全黑,请在您的代码上运行 apitrace 并查看您做错了什么。

关于c++ - QOpenGLFramebufferObject绑定(bind)纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32701785/

相关文章:

c++ - 如何使用 std::get 在元组上赋值?

c++ - spirit X3怎么加条件期望值

c++ - QRubberBand,如何在上面画画

图像翻转,OpenGL 使用 libjpeg 输出到 JPEG

C++ OpenGL Cube 没有出现在屏幕上

c++ - 四嵌套 unordered_map 怪物的替代方案?

c++ - 有没有办法在不链接到-framework ApplicationServices 的情况下运行c 或c++ 文件?

qt - 从 qwebview 生成 PDF 不包括图像

c++ - C++ 桌面应用程序中的 Google Analytics

c++ - 阴影卷 - 最后阶段