2017-02-26 18 views
0

我与金属加工上的MacOS和似乎无法找到正确的方式任何明确的文件,以呈现绘制,而无需使用上MTLCommandBuffer,presentDrawable辅助功能目前可绘制(这我不能使用,由于应用程序,它也试图支持多个渲染器并不允许类管理命令缓冲区直接了解可绘)的设计。金属 - 如何从计划的处理程序回调

Apple's docs状态 “presentDrawable:方法是一种方便的方法,它调用addScheduledHandler:呈现一个可绘制对象。”这似乎暗示presentDrawable只是做这个的:

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

虽然这似乎到实际存在的渲染结果好像有什么东西失踪了金属框架预计将显示,因为Xcode的“捕捉GPU帧结束Frame“在应用程序的整个生命周期中保持禁用状态,并且Xcode中的FPS计数器保持空白。

我一直在寻找在线presentDrawable确实,但似乎什么都没有发现金属比只使用presentDrawable和MetalKit极其琐碎的样本之外的使用任何例子。

+0

它可能不是“铁架预计[什么]指示帧的结束”仅仅是因为Xcode的是没有看到它。可能是Xcode挂钩到'-presentDrawable:'方法本身来观察帧。在那种情况下,除了调用它来让Xcode注意外,没有什么可以做的。金属会很好。请注意,任何代码,你会想打电话'[绘制当前]'也可以只创建虚拟指令缓存(无关你使用渲染那些),调用'-presentDrawable:'就可以了,并提交。 –

+0

我想你可能是对的。 – semafore

回答

1

我不确定两种呈现drawable的方法之间的实现差异,但可能是这种情况,present调用不会发出帧边界的信号。您在呈现drawable后是否明确尝试在命令队列上调用insertDebugCaptureBoundary()

+0

insertDebugCaptureBoundary正是需要的!我完全错过了通过搜索文档的方法,这种方法的描述甚至调用Xcode通常附加到presentDrawable – semafore