我使用参数级别= 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
自动生成mipmap时,将填充整个堆栈。如果使用glTextureStorage
指定级别数,则GL_TEXTURE_MAX_LEVEL设置为比调用中提供的最大级别小一。
您也很正确,可以在构建mipmap堆栈后修改基本和最大级别,但是如果您使用OpenGL构建mipmap堆栈,我认为这样做不会给您带来太大的好处。如果我没记错的话,则在加载mipmap时会修改基本和最大级别(通过反复调用glTexImage*
并增加level参数),这样就无需加载整个mipmap堆栈(您可以这样做)以节省纹理内存,或者更好地控制更高级别(即堆栈中较小的mipmap)的采样)。您还可以使用GL_TEXTURE_MIN_LOD和GL_TEXTURE_MAX_LOD来控制在纹理化过程中使用了mipmap堆栈中的哪些mipmap。这样做的原因是允许在纹理化时异步加载mipmap级别。
关于opengl-4 - glGenerateMipmap如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13807194/