2017-02-26 7 views
0

私はMacOS上でMetalを使っているので、MTLCommandBuffer、presentDrawableでヘルパ関数を使わずにdrawableを表示する正しい方法についてはっきりしたドキュメントを見つけることができません複数のレンダラーをサポートしようとしているアプリケーションの設計と、コマンドバッファにクラスを管理するクラスがドロウアブルを直接知ることはできないため、私は使用できません。メタル - スケジューリングされたハンドラのコールバックからdrawableを表示する方法

Apple's docs状態 "presentDrawable:メソッドは、addScheduledHandler:を呼び出して1つのドロウアブルオブジェクトを表示する便利なメソッドです。"

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

これは実際にレンダリング結果を提示しているように見えるんが金属製のフレームワークは、フレームの終わりを示すことを想定している欠けている何かがありますようにXcodeのの「GPUをキャプチャので、それはそうです:presentDrawableはちょうどこれを行うことを意味すると思われますフレーム "はアプリの存続期間中は無効のままであり、XcodeのFPSカウンタは空のままです。

私はpresentDrawableが実際に行っていることをオンラインで見てきましたが、presentDrawableとMetalKitを使用する非常に簡単なサンプル以外のMetalの使用例は見当たりません。

+0

Xcodeがフレームを見ていないからといって、「フレームワークがフレームの終わりを示すと期待している」というわけではありません。 Xcodeがフレームを観察するために '-presentDrawable:'メソッド自体にフックしているかもしれません。その場合、Xcodeに通知するために呼び出す以外に、文字通り何もできることはありません。そして、金属はちょうど良いでしょう。 '[drawable present]'を呼び出すコードであれば、(描画に使用しているものとは無関係の)ダミーのコマンドバッファを作成し、 '-presentDrawable:'を呼び出してコミットすることもできます。 –

+0

私はあなたが正しいかもしれないと思います。 – semafore

答えて

1

drawableを表示する2つの方法の違いはわかりませんが、present呼び出しがフレーム境界を知らせない場合があります。 drawableを提示した後、コマンドキューで明示的にinsertDebugCaptureBoundary()を呼び出してみましたか?

+0

insertDebugCaptureBoundaryはまさに必要なものでした!私はこのメソッドをドキュメントから検索することを完全に欠場していました。このメソッドの説明では、通常、XcodeはpresentDrawable – semafore

関連する問題