Vsync を OpenGL アプリケーションで動作させるのに必死に苦労しています。重要な統計は次のとおりです。
私は Windows を使用しており、C++ OpenGL でコーディングしています。また、OpenGL コンテキスト (ダブル バッファリング) に FreeGLUT を使用しています。Windows でスワップ バッファが垂直同期を待機するには、wglSwapIntervalEXT() を呼び出す必要があることを認識しています。
私のコードはこれを呼び出します (以下で説明します) が、まだ縦方向の引き裂きが発生しています。私がそれを止めることができた唯一の方法は glFinish() を呼び出すことです。もちろん、これには重大なパフォーマンスのペナルティが伴います。
main() 関数の関連部分は次のようになります。
//Initiating glut window
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
glutInitWindowSize (initial_window_width, initial_window_height);
glutInitWindowPosition (100, 100);
int glut_window_hWnd = glutCreateWindow(window_title.c_str());
//Setting up swap intervals
PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT = NULL;
PFNWGLGETSWAPINTERVALEXTPROC wglGetSwapIntervalEXT = NULL;
if (WGLExtensionSupported("WGL_EXT_swap_control"))
{
// Extension is supported, init pointers.
wglSwapIntervalEXT = PFNWGLSWAPINTERVALEXTPROC)wglGetProcAddress("wglSwapIntervalEXT");
// this is another function from WGL_EXT_swap_control extension
wglGetSwapIntervalEXT = (PFNWGLGETSWAPINTERVALEXTPROC)wglGetProcAddress("wglGetSwapIntervalEXT");
}
wglSwapIntervalEXT (1)
init ();
glutMainLoop(); ///Starting the glut loop
return(0);
wglInitSwapControlARB 関数からの戻り値は true であるため、拡張機能がサポートされていることを指摘しておく必要があります。