Metal - 如何从预定的处理程序回调中呈现可绘制对象

Metal - How to present drawable from scheduled handler callback

我在 MacOS 上使用 Metal,但似乎找不到任何关于在不使用 MTLCommandBuffer 上的辅助函数 presentDrawable 的情况下呈现可绘制对象的正确方法的明确文档(由于该应用程序也试图支持多个渲染器,并且不允许 class 管理命令缓冲区直接了解可绘制对象。

Apple's docs 状态 "The presentDrawable: method is a convenience method that calls addScheduledHandler: to present one drawable object." 这似乎暗示 presentDrawable 就是这样做的:

[buf addScheduledHandler:^(id<MTLCommandBuffer> buf)
{
   [drawable present];
}];

虽然这似乎确实呈现了渲染结果,但似乎缺少 Metal 框架期望指示帧结束的内容,因为 Xcode 的 "Capture GPU Frame" 仍然禁用应用程序的生命周期和 Xcode 中的 FPS 计数器保持为空。

我一直在网上寻找 presentDrawable 的真正作用,但除了仅使用 presentDrawable 和 MetalKit 的极其琐碎的示例之外,似乎找不到任何使用 Metal 的示例。

我不确定呈现可绘制对象的两种方式在实现方面的差异,但 present 调用可能不会发出帧边界信号。呈现可绘制对象后,您是否尝试过在命令队列中显式调用 insertDebugCaptureBoundary()