繁体   English   中英

渲染到纹理的mipmap级别

[英]Rendering to the mipmap level of a texture

我想写一个特定的纹理mipmap级别。 问题是如果我之前不生成mipmap(glGenerateMipmap(GL_TEXTURE_2D);),则OpenGL会显示“ GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT”和“ Framebuffer未完成”。

在将mipmap写入之前可以生成mipmap,但这是愚蠢的性能代价,因为永远不会使用自动生成的mipmap级别。

有可能避免这种情况吗?

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

似乎您只是没有为尝试渲染到的Mipmap级别创建存储, glTexImage[n]D()没有这样做-它仅为一个Mipmap级别创建了一个存储。 您需要分别创建每个mipmap级别。 glGenerateMipmaps隐式地执行此操作。 但是,您实际上只需要执行此操作的一小部分,因此最好避免在此使用它。 最好的选择是创建从级别0到您需要的级别的mipmap链。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM