2017-03-02 71 views
2

我需要幫助來替換MTLBuffer的內容而不創建新內容。兩種情況下的內容都是浮動數組。更新金屬中MTLBuffer的內容

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.contents().copyBytes(from: vector2, count: vector2.count * MemoryLayout<Float>.stride) 

一般來說,喜歡stride超過size

回答

3

你可以用memcpy做到這一點,但稍Swiftier的方式是。如果類型不是原始的並且有任何填充,則size不會對此進行解釋,並且您將複製的字節數少於預期。

+0

工作正常!非常感謝! – thewebmaker