gpt4 book ai didi

ios - 在 Metal 中手动设置一维纹理

转载 作者:行者123 更新时间:2023-11-28 09:17:39 25 4
gpt4 key购买 nike

我正在尝试用值手动填充1D 纹理,并将该纹理传递给计算着色器(这些是我想通过代码设置的 2 个像素,它们不代表任何图像).

由于当前的 Metal 示例数量很少,我能找到的所有示例都处理通过将加载的 UIImage 转换为原始字节数据来加载纹理的 2D 纹理,但是创建一个虚拟的 UIImage 对我来说感觉像是一个 hack。

这是我开始的“天真”方式-

...
var manualTextureData: [Float] = [ 1.0, 0.0, 0.0, 1.0,
0.0, 0.0, 1.0, 1.0 ];
let region: MTLRegion = MTLRegionMake1D(0, textureDescriptor.width);
myTexture.replaceRegion(region, mipmapLevel: 0, withBytes: &manualTextureData, bytesPerRow: 0);

但 Metal 无法识别着色器中的这些值(它得到一个空纹理,第一个值除外)。

我很快意识到 Float 数组可能必须转换为字节数组(例如 UInt8),但找不到从 [Float] 转换的方法> 到 [UInt8]

我考虑的另一种可能的选择是使用 CVPixelBuffer 对象,但这也感觉像是解决问题的方法。

那么解决这个问题的正确方法是什么?

提前致谢。

  • 请注意我不熟悉 Objective-C,因此我不确定使用 CVPixelBuffer/UIImage 是否夸大了一些应该直截了当的东西。

最佳答案

请原谅我的简短回复,但您可能会发现看一下我对 Swift 和 Metal 的实验很有用。我在 Swift 中创建了一个粒子系统,它作为粒子结构的一维数组传递给 Metal 计算着色器。通过使用 posix_memalign,我能够消除在 Metal 和 Swift 之间传递数组所造成的瓶颈。

我在博客上广泛讨论了这个:http://flexmonkey.blogspot.co.uk/search/label/Metal

希望对您有所帮助。

西蒙

关于ios - 在 Metal 中手动设置一维纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26694821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com