我对金属还不熟悉。我们可以在一个应用程序中创建多少个MTLRenderpassdescriptor任意限制?
我想有三个MTLRenderpassdescriptor是否可能。我需要根据手指的位置画四头肌。这就像是屏幕外的渲染。会有纹理输出。
我想把输出纹理传递给另一个renderpass描述符来处理它的颜色,它也类似于屏幕外渲染
我想在屏幕上显示新的输出纹理。有可能吗?当我创建三个renderpass描述符时,只有两个可用。
第一次屏幕外渲染效果很好
let renderPass = MTLRenderPassDescriptor()
renderPass.colorAttachments[0].texture = ssTexture
renderPass.colorAttachments[0].loadAction = .clear
renderPass.colorAttachments[0].clearColor = MTLClearColorMake( 0.0, 0.0, 0.0, 0.0)
renderPass.colorAttachments[0].storeAction = .store
let commandBuffer = commandQueue.makeCommandBuffer()
var commandEncoder = commandBuffer?.makeRenderCommandEncoder(descriptor: renderPass)
for scene in scenesTool{
scene.render(commandEncoder: commandEncoder!)
}
commandEncoder?.endEncoding()
此renderpass描述符在调试中也不可用。
let renderPassWC = MTLRenderPassDescriptor()
renderPassWC.colorAttachments[0].texture = ssCurrentTexture
renderPassWC.colorAttachments[0].loadAction = .clear
renderPassWC.colorAttachments[0].clearColor = MTLClearColorMake( 0.0, 0.0, 0.0, 0.0)
renderPassWC.colorAttachments[0].storeAction = .store
let commandBufferWC = commandQueue.makeCommandBuffer()
let commandEncoderWC = commandBufferWC?.makeRenderCommandEncoder(descriptor: renderPassWC)
for scene in scenesWCTool{
print(" msbksadbdksabfkasbd")
scene.render(commandEncoder: commandEncoderWC!)
}
commandEncoderWC?.endEncoding()
第三个Renderpass描述符工作正常。
let descriptor = view.currentRenderPassDescriptor
commandEncoder = commandBuffer?.makeRenderCommandEncoder(descriptor: descriptor!)
for x in canvasTemporaryScenes{
x.updateCanvas(texture: ssTexture!)
x.render(commandEncoder: commandEncoder!)
}
commandEncoder?.endEncoding()
guard let drawable = view.currentDrawable else { return }
commandBuffer?.present(drawable)
commandBuffer?.commit()
commandBuffer?.waitUntilCompleted()
最佳答案
MTLRenderPassDescriptor
对象的创建成本很低,不像金属中的其他类型的对象(例如管道状态对象)。您需要在任何时候创建描述符。你不需要长期保存它们。每次创建渲染命令编码器时,只需重新创建它们。例如,每帧创建多个渲染过程描述符是完全正常的。您可以创建的号码没有特定限制。
我不知道您所说的“当我创建三个renderpass描述符时,只有两个可用”和“这个renderpass描述符在调试中不可用”是什么意思。在这些句子中“可用”是什么意思?准确地解释你想要和期望的结果,以及实际发生的与此不同的事情。