메탈 쉐이더에 1D 배열 버퍼를 전달하는 것이 가능하지만 1D 배열 버퍼로 출력 할 수 있습니까? 텍스처에 쓰기를 원하지 않습니다. 단지 처리 된 값의 배열이 필요합니다.1D 데이터 버퍼가 들어갔다 나오는 금속 계산 쉐이더?
다음 코드를 사용하여 셰이더에서 값을 가져올 수 있지만 한 번에 하나의 값입니다. 이상적으로는 전체 배열을 (입력 1D 배열 버퍼와 같은 순서로) 얻을 수 있습니다.
모든 예제 또는 포인터가 크게 감사하겠습니다!
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);
)
정보 주셔서 감사합니다. 'var out : float3'을 정의하는 방법을 보여줄 수 있습니까? C 스타일 배열은 Swift에서 허용되지 않으므로 어떻게 보이는지 확신 할 수 없습니다. –
절대 신경 쓰지 마라. - 내가 지금 일하고 있다고 생각해. - 고마워! –