GPU手动Mipmap生成[OpenGL 2.x]

GPU手动Mipmap生成[OpenGL 2.x],opengl,gpu,shader,mipmaps,Opengl,Gpu,Shader,Mipmaps,我想使用特定的自定义算法为一些可渲染纹理(R16F和RGBA16F)生成mipmap 所有需要的纹理的mipmap都是通过使用glgenerateMipAppExt()预先启用的 到目前为止,最大的问题是渲染到1+mipmap级别。 更准确地说, 这很有魅力: ... glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT); glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, target, texType, texId, 0 );

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

所有需要的纹理的mipmap都是通过使用glgenerateMipAppExt()预先启用的

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

...
glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, target, texType, texId, 0 );
checkFBOStatus();
...
render();
但在检查fbo状态时,这会给我一个GL\u帧缓冲区\u不完整\u附件\u EXT

...
glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, target, texType, texId, 1 );
checkFBOStatus();
...
render();
代码中的所有差异都是用于将纹理附加到FBO上的lod级别参数。

在经历了很多狂热的搔头之后,我仍然无法让它工作。 因此,我们非常感谢您的回答

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

问题已解决
FBO不完全的原因是由于纹理的一致性。 使用glGenerateMipmapEXT/glGenerateMipmap时,必须确保纹理的基本级别包含有效数据;否则,该调用将在没有任何错误通知的情况下失败

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

  • 使用TexImage或TexSubImage 填充可渲染纹理 在生成EMIPMAP之前

  • 将可渲染纹理附着到渲染对象 GLPMAP前的虚拟FBO

  • 任何一种方法都有效(在GF8和GF9上测试) 未在ATI卡上测试。

    如果有人能在ATI GPU上进行测试,那就太好了


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

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


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

    我期待着看到你的虚拟FBO实验结果。实际上我放弃了这个,用硬件mipmap来制作这些卡。关于ATI GPU,特别是旧的R300系列(在Radeon 9700到x700上测试):不能渲染到NPOT纹理|不能在片段着色器中使用texture2DLod |必须坚持使用|版本110才能使用它们|不能有常数矩阵数组|不能在数组中有动态索引|也不能切换大小写(x700)|必须调用glEnable(GL_TEXTURE_xD)绑定纹理或GLSL采样器时将返回黑色