【发布时间】:2017-10-30 06:56:51
【问题描述】:
我知道可以将一维数组缓冲区传递给金属着色器,但是否可以将其输出到一维数组缓冲区?我不希望它写入纹理 - 我只需要一个处理过的值数组。
我可以使用以下代码通过着色器获取值,但它们一次只有一个值。理想情况下,我可以取出整个数组(与输入一维数组缓冲区的顺序相同)。
任何示例或指针将不胜感激!
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);
)
【问题讨论】:
标签: ios swift buffer metal compute-shader