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