我需要帮助来替换 MTLBuffer 的内容而不创建新内容。两种情况下的内容都是Float Arrays。
let vector:[Float] = [0,1,2,3,4,5,6,7,8,9]
let byteLength = arr1.count*MemoryLayout<Float>.size
let buffer = metalDevice.makeBuffer(bytes: &vector, length: byteLength, options: MTLResourceOptions())
let vector2:[Float] = [10,20,30,40,50,60,70,80,90]
我理解 buffer.contents()为我们提供了 UnsafeMutableRawPointer 。我想从 vector2 创建一个新的UnsafeMutableRawPointer并替换buffer的内容。
提前致谢!
答案 0 :(得分:8)
您可以使用memcpy
执行此操作,但略微更快捷的方式是:
buffer.contents().copyBytes(from: vector2, count: vector2.count * MemoryLayout<Float>.stride)
通常,在计算数组的长度(以字节为单位)时,首选stride
而不是size
。如果类型不是原始类型并且有任何填充,size
将不会考虑到这一点,并且您将复制比预期更少的字节。