ios – 更新Metal中MTLBuffer的内容

我需要帮助来替换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的内容.

提前致谢!

解决方法

您可以使用memcpy执行此操作,但稍微Swiftier的方法是:

buffer.contents().copyBytes(from: vector2,count: vector2.count * MemoryLayout<Float>.stride)

通常,在计算数组的长度(以字节为单位)时,首选stride over size.如果类型不是原始类型并且有任何填充,则大小不会考虑到这一点,并且您将复制比预期更少的字节.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...