glGenerateMipmap是如何工作的



我调用参数级别为0的glTexImage2D。然后我调用glGenerateMipmap(GL_TEXTURE_2D)。GL_TEXTURE_BASE_LEVEL和GL_TEXTURE_MAX_LEVEL发生了什么?我假设它们是这样自动设置的:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, mipmapsCount - 1);

稍后我可以手动设置上述参数,例如降低最大级别。是这样吗?

正如您所提到的,mipmap堆栈的GL_TEXTURE_BASE_LEVEL和GL_TEXTURE_MAX_LEVEL值是派生的。这些值定义了所谓纹理完整性所需的mipmap级别范围。当您要求OpenGL使用glGenerateMipmap自动生成mipmaps时,会填充整个堆栈。如果使用glTextureStorage指定级别数,则GL_TEXTURE_MAX_LEVEL将设置为比调用中提供的最大级别少一级。

在构建mipmap堆栈后,您可以修改基本级别和最大级别,这也是正确的,但如果您让OpenGL构建mipmat堆栈,我认为这不会给您带来太多好处。如果我没有记错的话,您应该在加载mipmap时修改基本和最大级别(通过反复调用glTexImage*并递增级别参数),这样您就不需要加载整个mipmap堆栈(这样做可能是为了节省纹理内存,或者可能是为了更好地控制更高级别(即堆栈中较小的mipmap)的采样)。还可以使用GL_TEXTURE_MIN_LOD和GL_TEXTTURE_MAX_LOD来控制在纹理中使用mipmap堆栈中的哪些mipmap。这样做的原因是允许在纹理化时异步加载mipmap级别。

相关内容

  • 没有找到相关文章

最新更新