渲染到纹理的mipmap级别

时间:2015-02-22 12:39:06

标签: opengl

我想写一个特定的纹理mipmap级别。问题是OpenGL说" GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT"和#34; Framebuffer未完成"如果我之前没有生成mipmap(glGenerateMipmap(GL_TEXTURE_2D);)。

在写入mipmap之前生成mipmap是有效的,但这是一个愚蠢的性能成本,因为永远不会使用自动生成的mipmap级别。

有可能避免这种情况吗?

注意:我知道不直接写入关卡并调用glGenerateMipmaps更快,但我需要这样做。

1 个答案:

答案 0 :(得分:3)

您似乎根本没有为您尝试渲染的mipmap级别创建存储,glTexImage[n]D() 执行此操作 - 它只为单个mipmap级别创建存储。您需要单独创建每个mipmap级别。 glGenerateMipmaps隐含地做到这一点。但是,你实际上只需要它所做的一点点,所以最好在这里避免它。您最好的选择是创建从0级到手动所需级别的mipmap链。

对于非常现代的GL,我建议您使用GL_ARB_texture_storage中的 immutable texures glTexStorage()功能允许在单个调用中为所有必需的mipmap级别创建存储。使用不可变纹理,您仍然可以随时更改内容,唯一不能创建新数据存储(可能具有不同的格式或大小),因此您无法重复调用glTexImage[n]D()在这样的纹理对象上。但是,如果需要,您仍然可以删除整个对象并创建一个新对象。

相关问题