我在mipmapped
中将YES
设置为texture2DDescriptorWithPixelFormat
,并在给定纹理上调用generateMipmapsForTexture
的{{1}}方法以自动生成Mipmap。
问题是,如果我将MTLBlitCommandEncoder
设置为mipmapped
,不是意味着应该映射结果图像,为什么我需要YES
来显式生成mipmap?
答案 0 :(得分:1)
这有点令人困惑,所以让我们来看一下。
texture2DDescriptorWithPixelFormat
以format
,width
,height
和mipmapped
作为参数。此处的mipmapped
参数用于告诉Metal计算生成的图像将具有的Mip级别数,因为没有参数可以传递Mip级别计数。在文档中对它的描述如下:
mipmapped
一个
Boolean
,指示是否应将结果图像 被盗用。如果为YES
,则返回的mipmapLevelCount
属性 描述符是根据width
和height
计算出来的。如果NO
,则mipmapLevelCount
是1
。
如果将newTextureWithDescriptor
与显式创建的纹理描述符一起使用,则没有mipmapped
参数,因为您在mipmapLevelCount
的{{1}}属性中显式传递了Mip级别数
自创建新纹理以来,由于纹理为空,因此无需生成 mipmap。
MTLTextureDescriptor
方法用于为已经 具有mip级别的纹理生成mipmap,而您只需要使用自动生成的mipmap填充它们即可。
因此,要弄清楚这一点,generateMipmapsForTexture
参数只是告诉Metal创建具有mip级别的纹理,您以后可以(如果需要)用mipmapped
(或其他方式)填充,例如在指定级别的渲染过程中使用纹理作为颜色附件)。