2017-02-26 17 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