我想在屏幕上绘制一些相同的图形(具有相同的纹理)(OpenGL ES 2.0)。这些数字在放大和缩小过滤器方面会有所不同。和不同的状态mipmapping。 问题是:如果我在绘制任何图形时使用mipmapping(如果我调用了glGenerateMipmap()函数),我就无法关闭mipmapping模式。 如果我至少调用一次glGenerateMipmap(),是否可以关闭mipmapping模式?
答案 0 :(得分:2)
glGenerateMipmap
仅生成较小的mipmap图像(基于顶级图像)。但是,如果您不使用正确的mipmapping过滤器模式(通过glTexParamteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_..._MIPMAP_...)
),那些mipmap不会用于过滤。因此,如果您不希望过滤纹理mipmap,只需将GL_NEAREST
或GL_LINEAR
设置为缩小过滤器,即可为此特定纹理禁用它。同样,不调用glGenerateMipmap
并不意味着没有进行mipmapping。仍然会使用可能的mipmapping过滤器模式(也是新创建的纹理的默认模式),只是mipmap图像包含垃圾(或者纹理实际上是不完整的,导致实现定义的行为,但通常是黑色纹理)
同样,在渲染之前不应该每帧调用glGenerateMipmap
。设置纹理的基本图像后调用一次。就像它说它生成mipmap图像一样,它们在生成后不会消失。是否实际使用了mipmapping是纹理对象的过滤模式。