QOpenGLFramebufferObject绑定纹理

时间:2015-09-21 18:02:27

标签: 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()使其工作,问题是我无法绑定其纹理,如果我问它关于GLuint处理它总是在两种模式下都返回0:

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

显然我的目的是将纹理自身绑定,如:

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

关于此的任何提示?我一直在谷歌上搜索没有运气:(

我忘了说,如果我不使用.setsamples(4);得到一个!= 0 GLuit但完全是黑色。

1 个答案:

答案 0 :(得分:2)

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

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