Металлический командный буфер оптимален для размытия и отображения MTLTexture
У меня есть следующий код, который размывает MTLTexture, а затем отображает его в MTKView, однако, является ли порядок буфера команд оптимальным?
Blur - это Metal Performance Shader. Вычислительный шейдер просто пишет текстуру, это простой переход.
var t: MTLTexture? = mtlLayer.currentSceneDrawable?.texture
let drawableTexture: MTLTexture? = metalView.currentDrawable!.texture
let commandBuffer: MTLCommandBuffer = commandQueue.makeCommandBuffer()!
blur.encode(commandBuffer: commandBuffer, inPlaceTexture: &t!, fallbackCopyAllocator: nil)
let commandEncoder = commandBuffer.makeComputeCommandEncoder()!
commandEncoder.setComputePipelineState(pipelineState)
commandEncoder.setTexture(t, index: 0)
commandEncoder.setTexture(drawableTexture, index: 1)
commandEncoder.dispatchThreadgroups(threadgroupsPerGrid, threadsPerThreadgroup: threadsPerThreadgroup)
commandEncoder.endEncoding()
commandBuffer.present(metalView.currentDrawable!)
metalView.draw()
commandBuffer.commit();
commandBuffer.waitUntilCompleted()