2012-12-10 58 views
0

我使用参数level = 0调用glTexImage2D。然后我调用glGenerateMipmap(GL_TEXTURE_2D)。 GL_TEXTURE_BASE_LEVEL和GL_TEXTURE_MAX_LEVEL会发生什么情况?我假设他们自动设置为这样:glGenerateMipmap如何工作?

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

后来我可以手动设置以上参数,例如降低最大电平。是对的吗 ?

回答

1

mipmap堆栈的GL_TEXTURE_BASE_LEVEL和GL_TEXTURE_MAX_LEVEL值按照您提到的方式派生。这些值定义了所谓的纹理完整性所需的mipmap级别的范围。当你要求OpenGL使用glGenerateMipmap自动生成mipmap时,整个堆栈都会被填充。如果您使用glTextureStorage来指定级别数量,则GL_TEXTURE_MAX_LEVEL设置为比调用中提供的最大级别低1。

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