java - 设置 GL_RGBA16F 纹理格式时获取不完整的 FBO

标签 java opengl fbo

我正在为 OpenGL (LWJGL) 使用 Java 包装器

 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 台机器上对其进行了测试并得到了相同的结果。

最佳答案

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

关于java - 设置 GL_RGBA16F 纹理格式时获取不完整的 FBO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11581980/

相关文章:

c++ - 迭代 vector 对以绘制线条的问题

c++ - 使用 QT 的最小 OpenGL 离屏渲染

qt - 将 QWidget 渲染到 FBO

java - 对 im4java 的性能进行基准测试

java - 使用 lib 添加自定义字体 android

c++ - 具有缩放拉伸(stretch)纵横比的 glm 旋转

opengl - 如何呈现为无符号整数格式

java - 如何从org.springframework.orm.hibernate4.LocalSessionFactoryBean获取Hibernate SessionFactory?

java - 有没有办法让 Eclipse 多次运行 JUnit 测试直到失败?

iphone - 开发iPhone游戏时 "gotchas"是什么?