5

私は通常、これらの引数を使用してピクセル形式を作成しwglChoosePixelFormatARB()ます (特に):

WGL_DOUBLE_BUFFER_ARB = GL_TRUE
WGL_SAMPLE_BUFFERS_ARB = GL_TRUE
WGL_SAMPLES_ARB = 4

つまり、ダブル バッファリングと x4 マルチサンプリングです。これはうまくいきます。
しかし、ダブルバッファリングをオフにしようとすると:

WGL_DOUBLE_BUFFER_ARB = GL_FALSE
WGL_SAMPLE_BUFFERS_ARB = GL_TRUE
WGL_SAMPLES_ARB = 4

への呼び出しがwglChoosePixelFormatARB()失敗します (または、何も作成されなかったことを示します)
マルチサンプリングを効果的にオフにすると:

WGL_DOUBLE_BUFFER_ARB = GL_FALSE
WGL_SAMPLE_BUFFERS_ARB = GL_TRUE
WGL_SAMPLES_ARB = 1

また元気に働いています。

非ダブルバッファピクセルフォーマットがマルチサンプリングで動作するのを妨げる固有のものはありますか?

ダブル バッファリングをオフにする理由は、制約のないフレーム レートを実現するためです。ダブル バッファリングを使用すると、フレーム レートは最大 60 FPS になります (このラップトップ LCD は 60 Hz で動作します)。しかし、ダブル バッファリングをオフにすると、最大 1500 FPS を得ることができます。ダブルバッファリングをオンにしてこれを達成する方法はありますか?

4

1 に答える 1

9

理論的には、シングル バッファ モードで描画するということは、画面に表示されているもの (別名フロント バッファ) を直接変更していることを意味します。そのメモリはすでに特定の形式になっているため、別の形式を選択することはできません。(プラットフォームがそうするので、私は理論的に言っていますが、実際にはそれを喜ばせます。たとえば、Aeroはフロントバッファへのアクセスを許可しません)。

さらに、マルチサンプリングを行う場合、描画のために X サンプル/ピクセルを 1 ピクセルに変換するステップは、バック バッファーがフロント バッファーにコピーされるときです (これは、解決ステップと呼ばれます)。シングル バッファ モードでは、このような手順はありません。

60 fps のロックについては、 を参照してくださいWGL_EXT_swap_control。ここでの問題は、通常、画面がデータを更新している間、画面に表示されているものを更新したくないということです。それは引き裂きを生み出します。そのため、デフォルトでは、画面が垂直同期 (別名 vsync) である間のみスワップが更新されるため、画面のリフレッシュ レートにロックされてしまいます。

ディスプレイに異なるフレームの一部が表示されても構わない場合は、オフにすることができます。

完全を期すために、トリプル バッファリングと呼ばれる代替モードがあります。これは、フロント バッファが表示されている間、基本的に 2 つのバック バッファ間で GPU ピンポン レンダリングを行います。画面に表示されるもの (vsync) を変更するときに、最後に終了したバック バッファーを選択するのは GPU 次第です。残念ながら、トリプル バッファリングを要求する WGL メソッドについては知りません。

于 2009-10-18T08:24:49.247 に答える