我正在使用Java封装的OpenGL (LWJGL)。我遇到了
GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT
如果我将FBO纹理附加格式设置为GL_RGBA16F,状态就会发生变化。实际上除了GL_RGBA之外的任何东西都会导致此错误。以下是我的FBO纹理设置:
glBindTexture(GL_TEXTURE_2D, texId);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F, _width, _height, 0, GL_RGBA, GL_FLOAT, (ByteBuffer) null);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glBindFramebuffer(GL_FRAMEBUFFER, _frameBuffer);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texId, 0);
glDrawBuffers(GL_COLOR_ATTACHMENT0);
这里是深度附件:
_depthBuffer = glGenRenderbuffers();
glBindRenderbuffer(GL_RENDERBUFFER, _depthBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, _width, _height);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, _depthBuffer);
更新:
实际上,如果我将内部格式和格式交换位置,像这样:GL_RGBA,GL_RGBA16F, 那么FBO会完成。但是在我看过的例子中,GL_RGBA16F通常放在前面。
更新1: 到目前为止,我从LWJGL论坛上没有得到任何答案。我也将此问题提交为错误,但是开发团队也没有回应。如果其他人可以测试使用浮点格式的纹理附件的FBO,并报告是否达到完整性,那将很好。目前我不认为我的代码有错误。另外,我已经在两台机器上进行了测试,并得到了相同的结果。