更新Metal中的MTLBuffer的内容
我需要帮助来replaceMTLBuffer的内容而不创build一个新的。 两种情况下的内容都是浮动数组。
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中创build一个新的UnsafeMutableRawPointer并replace缓冲区的内容。
提前致谢!
你可以用memcpy
来做到这一点,但稍微Swiftier的方式是:
buffer.contents().copyBytes(from: vector2, count: vector2.count * MemoryLayout<Float>.stride)
一般来说,当以字节为单位计算数组的长度时,最好stride
size
。 如果types不是原始的,并且有任何填充, size
将不会考虑这一点,并且您将复制比预期更less的字节。