0

Appleのドキュメントによると、CGLFlushDrawableまたはそれと同等のCocoaflushBufferは、いくつかの異なる方法で動作する可能性があります。通常、ウィンドウ化されたアプリケーションの場合、バック バッファーの内容は、次のように可視バッファーにコピーされます

CGLFlushDrawable

ダブル バッファリングされたコンテキストのバック バッファをフロント バッファにコピーします。

描画バッファの内容はそのまま残されていると思います (質問 1. を参照)。私が間違っていても、kCGLPFABackingStore属性を に渡すことで保証できますCGLChoosePixelFormat

しかし、さらに読むと、状況によっては、コピーが実行されるのではなく、バッファーがスワップされる可能性があることがわかります。

バッキング ストア属性が false に設定されている場合、バッファはコピーではなく交換できます。これは、フルスクリーン モードの場合によく発生します。

また、これは述べています

フルスクリーン ウィンドウの上にコンテンツがない場合、Mac OS X は自動的にこのコンテキストのパフォーマンスを最適化しようとします。たとえば、アプリケーションがオブジェクトを呼び出すflushBufferNSOpenGLContext、システムはバック バッファーの内容をフロント バッファーにコピーするのではなく、バッファーをスワップする場合があります。(...) システムはバッファーをコピーするのではなくスワップすることを選択する場合があるため、アプリケーションは を呼び出すたびにシーンを完全に再描画する必要がありますflushBuffer

そして、ここに私の質問があります:

  1. バック バッファがコピーされた場合、バッキング ストア属性がなくても内容が保持されることが保証されますか?
  2. バッファがスワップされた場合、バック バッファはフロント バッファの内容を取得しますか、それとも定義されていないため、ランダムなものを取得することもできますか?
  3. システムバッファのスワップを選択する場合がありますが、実際にスワップを選択したかどうかを判断する方法はあり ますか?
  4. これらの場合のいずれかで、バッファが保持されているか、フロントバッファと交換されているか、またはめちゃくちゃになったかを判断する方法はありますか?

また、WGL、GLX、または EGL でどのように作成されているかについての情報もいただければ幸いです。特に質問 4 の回答が必要です。

4

1 に答える 1

1
  1. いいえ、保証されません。
  2. ランダムかもしれません。
  3. いいえ、そうは思いません。
  4. kCGLPFABackingStoreいいえ。またはを指定しない場合NSOpenGLPFABackingStore、バック バッファーの内容を推測することはできません。これが、フレームごとにゼロから再描画する必要があるとドキュメントに記載されている理由です。

WGL、GLX、および EGL について何を尋ねているのかわかりません。

于 2012-06-09T15:29:20.953 に答える