这简直让我抓狂!
我通过以下方式创建了我的 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/