3

我正在为 OpenGL 使用 Java 包装器(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,它使用浮点格式并报告完整性实现的效果很好。目前我认为我的代码没有错误。另外我已经在 2 台机器上对其进行了测试并得到了相同的结果。

4

2 回答 2

2

那是我的错误。我在传递 GL_RGBA 作为格式时错误地将 GL_RGBA16F 作为内部格式参数。问题解决了。

于 2012-07-29T21:42:26.630 回答
1

您命名的纹理是“tex”,但您绑定到颜色附件的纹理是“texId”。

编辑:

我正在使用 FBO,当我在 Intel HD3000 上尝试我的应用程序时得到 GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT,但在 AMD 或 NVIDIA(OpenGL 4.2)上却没有。不同的是,Intel HD3000 只支持 OpenGL 3.1。GL_RGBA16F 在 OpenGL 3.3 中不可用,也许这是你的问题?

于 2012-07-28T07:31:50.173 回答