glGenerateMipmap如何工作?

时间:2012-12-10 18:46:17

标签: opengl-4

我用参数level = 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);

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

1 个答案:

答案 0 :(得分:3)

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

你也可以在构建mipmap堆栈后修改基本和最大级别,但如果你正在使用OpenGL构建mipmap堆栈,我认为它不会让你获益匪浅。如果我没记错,你可以在加载mipmap时修改基本和最高级别(通过反复调用glTexImage*并递增级别参数),这样你就不需要了加载整个mipmap堆栈(你可能会这样做是为了保存纹理内存,或者可能是为了更好地控制更高的采样[即堆栈中更小的mipmap]级别)。您还可以使用GL_TEXTURE_MIN_LOD和GL_TEXTURE_MAX_LOD来控制mipmap堆栈中的哪些mipmap在纹理中使用。原因是允许在纹理化时异步加载mipmap级别。