Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么';是否有rgb8Unorm MTLPixelFormat?_Ios_Metal - Fatal编程技术网

Ios 为什么';是否有rgb8Unorm MTLPixelFormat?

Ios 为什么';是否有rgb8Unorm MTLPixelFormat?,ios,metal,Ios,Metal,我有许多不需要alpha通道的纹理。目前,我正在使用MTLPixelFormatrgba8Unorm选项加载这些文件,但这似乎有些浪费。是否有我遗漏的一个选项,或者在省略纹理数据的3个8位组件的格式背后的一些其他理由 这可能是因为rgb8使用24位,这不是一个很好的2次幂,而计算机喜欢使用2次幂,尤其是用于寻址数据。这可能是因为rgb8使用24位,这不是一个很好的2次幂,而计算机喜欢使用2次幂,尤其是在数据寻址方面。我不确定这是否有责任,因为这需要了解苹果员工的意图,而我们无法确定这一点。我们只

我有许多不需要alpha通道的纹理。目前,我正在使用
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位。