Ios 为什么';是否有rgb8Unorm MTLPixelFormat?
我有许多不需要alpha通道的纹理。目前,我正在使用Ios 为什么';是否有rgb8Unorm MTLPixelFormat?,ios,metal,Ios,Metal,我有许多不需要alpha通道的纹理。目前,我正在使用MTLPixelFormatrgba8Unorm选项加载这些文件,但这似乎有些浪费。是否有我遗漏的一个选项,或者在省略纹理数据的3个8位组件的格式背后的一些其他理由 这可能是因为rgb8使用24位,这不是一个很好的2次幂,而计算机喜欢使用2次幂,尤其是用于寻址数据。这可能是因为rgb8使用24位,这不是一个很好的2次幂,而计算机喜欢使用2次幂,尤其是在数据寻址方面。我不确定这是否有责任,因为这需要了解苹果员工的意图,而我们无法确定这一点。我们只
MTLPixelFormat
rgba8Unorm
选项加载这些文件,但这似乎有些浪费。是否有我遗漏的一个选项,或者在省略纹理数据的3个8位组件的格式背后的一些其他理由 这可能是因为rgb8使用24位,这不是一个很好的2次幂,而计算机喜欢使用2次幂,尤其是用于寻址数据。这可能是因为rgb8使用24位,这不是一个很好的2次幂,而计算机喜欢使用2次幂,尤其是在数据寻址方面。我不确定这是否有责任,因为这需要了解苹果员工的意图,而我们无法确定这一点。我们只能猜测
其中一个猜测是,它们只支持在通用GPU上具有直接硬件支持的像素格式。请注意,a)Metal设计理念的一部分是消除API和驱动程序的隐式工作,其中包括格式转换。这样的工作留给应用程序代码本身去做。b)并非他们在某处支持的所有格式都在任何地方得到支持。例如,为什么macOS上不支持
BGR5A1Unorm
?它当然可以转换为BGRA8Unorm
,但它们不能。我不确定这是否有责任,因为这需要了解苹果员工的意图,我们无法确定。我们只能猜测
其中一个猜测是,它们只支持在通用GPU上具有直接硬件支持的像素格式。请注意,a)Metal设计理念的一部分是消除API和驱动程序的隐式工作,其中包括格式转换。这样的工作留给应用程序代码本身去做。b)并非他们在某处支持的所有格式都在任何地方得到支持。例如,为什么macOS上不支持
BGR5A1Unorm
?它当然可以转换为BGRA8Unorm
,但它们不能。这是正确的答案,每个像素都表示为BGRA(32位),在没有alpha的情况下,alpha通道始终仅为0xFF。当将图像数据以24 BPP的速度写入文件时,可以节省空间,但当存储在内存中时,每个像素始终为32位。这是正确的答案,每个像素表示为BGRA(32位),在没有alpha的情况下,alpha通道始终仅为0xFF。当以24 BPP的速度将图像数据写入文件时,可能会节省空间,但当存储在内存中时,每个像素总是32位。