2

OpenGL を使用してレンダリングを実行する科学アプリケーションのタイム クリティカルなコードを書いています。私が制御しているデバイスは、コンピューターのモニターのように見えます。夢は、正確に 60 Hz でデバイスをリフレッシュすることです。

シングル バッファ ラスタ モードを使用しようとしましたが、vsync が機能しません。ダブルバッファモードで動作します。

単一のバッファリングされたコンテキストを vsync できますか?

作品

pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 24;
pfd.cDepthBits = 16;
pfd.iLayerType = PFD_MAIN_PLANE;

動作しません

pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 24;
pfd.cDepthBits = 16;
pfd.iLayerType = PFD_MAIN_PLANE;

編集

レンダー ループの最後に

glFlush();
glFinish();
swapBuffers();//GDI?
4

3 に答える 3

2

バッファー スワップを画面の更新 (vsync が行うこと) と同期させるには、実際に複数のバッファーをスワップする必要があります。したがって、ダブルバッファリングが必要になります。

ダブル バッファリングを行った後に vsync を有効にする方法はプラットフォームに依存しますが、a.lasram が示すように、WGL_EXT_swap_control 拡張機能は Windows でこの機能を提供します。

于 2013-07-04T21:38:30.957 に答える
1

GDI と OpenGL には VSYNC コントロールがありません。

実際、OpenGL はレンダリングされたバッファの存在を制御せず、システムに任せます。Windows では、WGL は拡張機能WGL_EXT_swap_controlを介して VSYNC を制御します

于 2013-07-04T01:43:37.550 に答える