OpenGL版本450引入了一个新函数,可用于为纹理2D分配内存:
glTextureStorage2D(textureObj,levels,internal_format,width,height);
//here, parameter 'levels' refers to the levels of mipmaps
//we need to set it 1 if we only want to use the original texture we loaded because then there is only one mipmap level
并且,有一个函数可以帮助我们方便地为一个纹理生成mipmap:
glGenerateTextureMipmap(textureObj);
所以,我有一个问题:当我使用glTextureStorage2D时,需要指定存储空间的大小,是否需要为以后使用glGenerateTextureMipmap预留额外的空间,因为mipmap需要额外的内存?我知道我可以使用glTexImage2D来避免这个问题,我可以先将纹理绑定到目标GL_TEXTURE_2D,然后使用glTexImage2D将图像的数据复制到纹理的内存中,glTexImage2D只要求我给予目标mipmap级别,而不是mipmap级别的数量,最后使用glGenerateMipmap(GL_TEXTURE_2D)。
我对glGenerateMipmap有点困惑,它会为生成的mipmap级别分配额外的空间吗?
1条答案
按热度按时间oyxsuwqo1#
你说的“保留额外内存”是什么意思?当你使用
glTextureStorage2D
时,你告诉OpenGL你想要多少mipmap。当涉及到不可变的存储时,你不能食言。如果你说一个纹理有宽度W,高度H,mipmap计数L,那么这就是那个纹理所拥有的。永远。因此,
glGenerateTextureMipmaps
将仅生成您放入纹理中的mipmap数量的数据(减去基础级别)。