对金属中的mipmap的生成感到困惑?

时间:2019-03-27 08:31:43

标签: metal

我在mipmapped中将YES设置为texture2DDescriptorWithPixelFormat,并在给定纹理上调用generateMipmapsForTexture的{​​{1}}方法以自动生成Mipmap。

问题是,如果我将MTLBlitCommandEncoder设置为mipmapped,不是意味着应该映射结果图像,为什么我需要YES来显式生成mipmap?

1 个答案:

答案 0 :(得分:1)

这有点令人困惑,所以让我们来看一下。

texture2DDescriptorWithPixelFormatformatwidthheightmipmapped作为参数。此处的mipmapped参数用于告诉Metal计算生成的图像将具有的Mip级别数,因为没有参数可以传递Mip级别计数。在文档中对它的描述如下:

  

mipmapped

     

一个Boolean,指示是否应将结果图像   被盗用。如果为YES,则返回的mipmapLevelCount属性   描述符是根据widthheight计算出来的。如果NO,则   mipmapLevelCount1

如果将newTextureWithDescriptor与显式创建的纹理描述符一起使用,则没有mipmapped参数,因为您在mipmapLevelCount的{​​{1}}属性中显式传递了Mip级别数

自创建新纹理以来,由于纹理为空,因此无需生成 mipmap。

MTLTextureDescriptor方法用于为已经 具有mip级别的纹理生成mipmap,而您只需要使用自动生成的mipmap填充它们即可。

因此,要弄清楚这一点,generateMipmapsForTexture参数只是告诉Metal创建具有mip级别的纹理,您以后可以(如果需要)用mipmapped(或其他方式)填充,例如在指定级别的渲染过程中使用纹理作为颜色附件)。