繁体   English   中英

Apple Metal MPSImage 内存布局

[英]Apple Metal MPSImage memory layout

我在处理 MPSImage 的底层内存时遇到问题。 我一直在使用getBytes方法并replace MPSImage 的texture成员变量来读取和写入底层数据。 问题是我找不到有关如何将内存解释为图像(即行、列和通道的布局方式)的文档。 使问题复杂化的部分原因是,无论特征通道的数量如何,数据都存储为一堆 RGBA 纹理切片,其中一些通道​​可能未被使用。 例如,对于 3 个特征通道,将有一个 RGBA 纹理切片,并且一个通道的空间将被闲置。

问题是,MPSImage 数据实际上是如何在纹理中排列的? 这似乎比我最初想象的要复杂。

经过大量实验,似乎数据的排列方式取决于特征通道的数量是 < 4 还是 > 4。但我仍然无法弄清楚。

谁能向我解释 MPSImage 数据布局?

前四个特征通道的编码方式与标准 RGBA 纹理的编码方式相同。 特征通道 0 处于“R”位置,特征通道 1 处于“G”位置,依此类推。

接下来的四个特征通道作为 texture2d_array 中的下一个切片出现。 如果您有一个具有 20 个特征通道的 100x100 图像,这将被编码为一个 100x100 纹理数组,数组中有 (20/4=) 5 个切片。

更复杂的是,您可以让 MPSImage 数组中包含多个图像,每个图像具有 4 个以上的特征通道。 这通常称为批处理。 第二个图像紧跟在第一个图像之后在纹理数组中找到。 如果我们在 MPSImage 中有多个 100x100x20 图像,那么第二个从切片 5 开始,第三个从切片 10 开始,依此类推。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM