这完全让我发疯!

我创建了我的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,但全黑。

最佳答案

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

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

09-07 06:18