web-dev-qa-db-ja.com

タイトルバーがMetalでレンダリングの問題を引き起こさないようにするにはどうすればよいですか?

(テクスチャの有無にかかわらず)図形を描画すると、フルスクリーンに移動するとちらつき、マウスを上に移動するとタイトルバーが表示されます。それは軽くなり、そして一瞬のように戻ります。これが単色で発生するかどうかはわかりませんが、頂点に色を付けてグラデーションを描画したり、テクスチャを適用したりすると、これが発生します。それは微妙ですが、それは迷惑です。どうすれば修正できますか?

再現方法:Metalでシェイプを作成し、頂点に異なる色を付けてグラデーションを作成するか、テクスチャを適用してウィンドウをフルスクリーンにします。カーソルをウィンドウの上部に移動します。タイトルバーが表示されると、形状/テクスチャが一瞬点滅します。どうすれば修正できますか?

MacOS 1.15 Catalinaを使用しています。

これは、Xcodeの例のMetalゲームでも実証できます。全画面表示にして、タイトルバーを表示するだけで、タイトルバーを表示したり非表示にしたりするとスムーズでなくなります。

更新:描画コードをviewDidLoad()ではなくdraw()に配置すると、この動作が停止することに気付きました。 1つのフレームをレンダリングするだけでバグが発生しないようにするにはどうすればよいですか?

別の更新:単色で発生します。

何を試したらよいかわからないので、これは非常に難しい質問です。このバグはたまにしか発生しないため、修正も非常に困難です。

バグの例(ビデオ)

「白いちらつき」を表示するバグの別の例(ビデオ)

また、この質問は半分しか答えられませんでした。これは、タイトルバーがフレームレートをブロックする問題をなんとか修正したことが判明したためですが、それでも問題があります。白いフラッシュで。

5
user13507084

あなたの最善の策は、これをバグとしてAppleに報告することです。調査を試みましたが、このバグに関する結果はないようです。

私はあなたが修正を望んでいると思います、しかし私が得たすべては回避策です:

描画コードがviewDidLoadで1回だけ実行されている間は発生しないようです。多分あなたはそれをそこに保持し、MetalViewのdrawメソッドを毎秒60回手動で呼び出すことができます。私は自分が言ったことをうまく機能させる方法を見つけました。描画コードはdrawのままにしておきますが、必ず優先フレームレートを0に設定してください。次に、毎秒60回手動で再描画します。 drawメソッドの自動再描画は、この意味でバグがあるためです。

1
Mr Oscar