我想使用特定的自定义算法为某些可渲染纹理(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]
答案 0 :(得分:2)
FBO不完整的原因是由于纹理一致性。 使用glGenerateMipmapEXT / glGenerateMipmap时,你必须确保纹理的基本级别包含有效数据;否则,该呼叫失败,没有任何错误通知。
您的推荐有两种可能的解决方案:
使用TexImage或TexSubImage 填充你的可渲染纹理 在glGenerateMipmap之前
将可渲染纹理附加到a glGenerateMipmap之前的虚拟FBO
无论哪种方式都有效(在GF8,GF9上测试) 未在ATI卡上测试过。
如果有人可以在ATI GPU上测试它,那就太好了。
PS。如果您在使用这些解决方案时遇到问题,请告诉我。
答案 1 :(得分:0)
可以渲染到第一级但不能渲染到其他级别。也许我应该尝试虚拟FBO方法。