Ich verstehe, dass es möglich ist, einen 1D-Array-Puffer an einen Metall-Shader zu übergeben, aber ist es möglich, ihn an einen 1D-Array-Puffer ausgeben zu lassen? Ich möchte nicht, dass es in eine Textur schreibt - ich brauche nur ein Array von verarbeiteten Werten.Metal Compute Shader mit 1D Datenpuffer rein und raus?
Ich kann Werte mit dem Shader mit dem folgenden Code abrufen, aber sie sind jeweils ein Wert. Im Idealfall könnte ich ein ganzes Array herausholen (in der gleichen Reihenfolge wie der Input-1D-Array-Puffer).
Alle Beispiele oder Hinweise würden sehr geschätzt werden!
var resultdata = [Float](repeating: 0, count: 3)
let outVectorBuffer = device.makeBuffer(bytes: &resultdata, length: MemoryLayout<float3>.size, options: [])
commandEncoder!.setBuffer(outVectorBuffer, offset: 0, index: 6)
commandBuffer!.addCompletedHandler {commandBuffer in
let data = NSData(bytes: outVectorBuffer!.contents(), length: MemoryLayout<float3>.size)
var out: float3 = float3(0,0,0)
data.getBytes(&out, length: MemoryLayout<float3>.size)
print("data: \(out)")
}
//In the Shader:
kernel void compute1d(
...
device float3 &outBuffer [[buffer(6)]],
outBuffer = float3(1.0, 2.0, 3.0);
)
Vielen Dank für die Info. Kannst du mir zeigen, wie ich 'var out: float3' definieren würde? C-artige Arrays sind in Swift nicht erlaubt, daher bin ich mir nicht sicher, wie das aussehen würde. –
Egal - denke, ich habe es jetzt funktioniert - danke !!! –