0

AudioUnit プラグインでクラッシュが発生しました (Logic 9 および Logic X - Mac OS X 10.8.4 で実行。AU Lab では再現しません)。

私の AudioUnit プラグインは、別のスレッドで描画を実行します。プラグイン GUI が閉じられると、AU プラグインは次の呼び出しを受け取ります。まだ実行されています。ただし、この時点でいくつかのものはすでに破棄されているため、描画の試行中に openGL エラーが発生します: Invalid framebuffer operation(1286)。もちろん、これは次のプラグイン GUI 描画でグラフィックの破損につながり、GUI を何度か開いたり閉じたりしようとするとクラッシュします。

質問は次のとおりです。 1. NSView removeFromSuperviewWithoutNeedingDisplay の前に呼び出される実装可能な関数はありますか? このようにして、Logic がビューを破棄する前に、別のスレッドで描画を停止できます。2. 仕方がない場合、他に何か提案はありますか? 描画しようとするたびに何かをチェックしてください。

ありがとう!C.

4

1 に答える 1

0

removeFromSuperviewWithoutNeedingDisplay メソッドは、subView UI をシャットダウンする最適なポイントではない可能性があります。

次の 2 つのオプションがあります。

  1. プラグイン ホスト ウィンドウの NSWindowWillClose 通知をサブスクライブして反応します。

  2. NSView メソッドの場合に反応 - (void) viewWillMoveToWindow:(NSWindow)w

w==nil で呼び出されます (これは基本的に、ビューがウィンドウからすぐに削除されることを意味します)。

どちらの場合も、ウィンドウが閉じられるか、ビュー階層が変更される直前に反応することが可能であるため、SubView には「通常の」UI 環境が引き続き存在します。

于 2013-08-01T07:19:26.467 に答える