2017-03-02 11 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を与えます。私はベクトル2から新しいUnsafeMutableRawPointerを作成し、バッファの内容を置き換えたいと思います。

ありがとうございます!

答えて

3

あなたはmemcpyでこれを行うことができますが、少しSwiftier方法は次のとおりです。バイト単位で配列の長さを計算する際に一般的に

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

sizestrideを好みます。タイプがプリミティブでなくパディングがある場合、sizeはこれを考慮せず、意図したよりも少ないバイト数をコピーします。

+0

それがうまくいった!どうもありがとう! – thewebmaker

関連する問題