2

オペレーティングシステム上にOpenGlアプリケーションがあり、アプリケーションがメモリに残っていても、アプリケーションがフォーカスを失ったときにOpenGLコンテキストを奪うことができます。これにより、アプリケーションがフォーカスに戻ったときにテクスチャを新しいOpenGLコンテキストに再ロードすると、画面がちらつきます。

再読み込みを段階的に分割して、見栄えを良くするように取り組んでいます。しかし、私はこの可能性についても疑問に思っています:

  1. プログラムがフォーカスを失うことに気づいたら、ディスプレイの「平均的な」色(またはプライマリテクスチャ)をキャプチャします。
  2. プログラムがフォーカスを取り戻したら、手順1でキャプチャした色を使用して非常にすばやくglClearColor(r、g、b)を実行します。
  3. 次に、ユーザーが手順2で設定した色を確認しながら、通常どおりテクスチャを再読み込みします。

これは、ちらつきを目立たなくするための視覚的なトリックのようなものだと思います。落とし穴があります。すべてのピクセルを平均して集合色をキャプチャするには時間がかかりすぎて、価値がないと考えています。

それで、ユーザーが画面に表示する平均的な色の大まかな見積もりをアプリケーションに取得させるOpenGlのトリックがあるかどうか疑問に思っていますか?

4

2 に答える 2

8

画面の色を平均化するために私が聞いた最も速い方法は、それをテクスチャにコピーし、呼び出しglGenerateMipmapて、ピクセルの色の平均を含む最小のレイヤー(1x1 mipレベル)を取得することです。しかし、それは私には特に速く聞こえないので、それがあなたの目的に役立つかどうかはわかりません。

于 2012-11-02T01:25:57.583 に答える
2

ヒストグラムが必要なようですね。GPUジェムには、ジオメトリシェーダーを使用して作成する方法の説明を含む記事があります。

https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch41.html

ニコルの方法またはの変形はおそらくより速いでしょう(そして確かにはるかに少ないコードです)が、微調整するのはそれほど簡単ではありません。

于 2012-11-02T15:18:00.740 に答える