3

我想使用特定的自定义算法为某些可渲染纹理(R16F 和 RGBA16F)生成 mipmap。

使用 glGenerateMipmapEXT() 预先启用所有需要的纹理的 mipmap。

到目前为止最大的问题是渲染到 1+ mipmap 级别。 更准确地说,这就像一个魅力:

...
glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, target, texType, texId, 0 );
checkFBOStatus();
...
render();

但这在检查 fbo 状态时给了我一个 GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT

...
glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, target, texType, texId, 1 );
checkFBOStatus();
...
render();

代码的所有区别在于将纹理附加到 FBO 的 lod 级别参数。

经过大量的发烧头抓挠后,我仍然无法正常工作。因此,非常感谢任何答案。

[注意:目标平台是带有 FBO 扩展的 OpenGL 2.x]

4

2 回答 2

2

问题解决了


FBO不完整的原因是由于纹理一致性。使用 glGenerateMipmapEXT/glGenerateMipmap 时,您必须确保纹理的基础级别包含VALID DATA;否则,该调用将失败而没有任何错误通知。

有两种可能的解决方案供您参考:

  1. 在 glGenerateMipmap 之前使用 TexImage 或 TexSubImage 填充您的可渲染纹理

  2. 在 glGenerateMipmap 之前将可渲染纹理附加到虚拟 FBO

无论哪种方式都有效(在 GF8、GF9 上测试) 未在 ATI 卡上测试。

如果有人可以在 ATI GPU 上测试它,那就太好了。

PS。如果您在使用这些解决方案时遇到问题,请告诉我。

于 2010-02-16T04:07:46.420 回答
0

哇,我在 ATI Radeon 9800 上遇到了同样的问题。但我用 gltexImage2D 打了个电话。

可以渲染到第一级,但不能渲染到其他级别。也许我应该尝试虚拟 FBO 方法。

于 2010-03-05T11:12:05.637 回答