gpt4 book ai didi

swift - 如何使用 UnsafeMutableRawPointer 填充数组?

转载 作者:搜寻专家 更新时间:2023-10-30 22:23:44 26 4
gpt4 key购买 nike

我有一个 Metal 纹理,我想通过将其设为 float4 数组来从 Swift 访问它的数据(这样我就可以访问每个像素的 4 个颜色分量)。

我发现了 MTLTexture 的这个方法:

getBytes(UnsafeMutableRawPointer, bytesPerRow: Int, bytesPerImage: Int, from: MTLRegion, mipmapLevel: Int, slice: Int)

我完全不知道如何使用 UnsafeMutableRawPointer,它是如何工作的,以及如何将数据返回到一个简单的 Swift 数组中。

我的第一次尝试是创建一个指针并分配足够的空间,但我什至不知道我是否应该这样做:

var pointer = UnsafeMutableRawPointer.allocate(bytes: myTextureSizeInBytes, alignedTo: 0)  

然后我完全不知道如何将这些数据返回到标准 Swift 数组中......

谢谢。

最佳答案

首先,假设您有一个 UnsafeRawPointer 和一个长度:

let ptr: UnsafeRawPointer = ...
let length: Int = ...

现在您想将其转换为 [float4]。首先,您可以通过将 UnsafeRawPointer 绑定(bind)到类型来将其转换为类型化指针:

let float4Ptr = ptr.bindMemory(to: float4.self, capacity: length)

现在您可以将其转换为类型化缓冲区指针:

let float4Buffer = UnsafeBufferPointer(start: float4Ptr, count: length)

因为缓冲区是一个集合,你可以用它来初始化一个数组:

let output = Array(float4Buffer)

有关使用 UnsafeRawPointer 的更多信息,请参阅 SE-0138 , SE-0107 , 和 UnsafeRawPointer Migration Guide .

关于swift - 如何使用 UnsafeMutableRawPointer 填充数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41574498/

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