[PR] JTB

OpenGLのインターバル

Windows環境前提。


インターバルを行う方法

Win環境なら拡張関数を使用します。

WINAPI BOOL wglSwapIntervalEXT(int isinterval);
// isinterval = 0: インターバルしない
// isinterval = 1: インターバルする


OpenGL初期化後に一度コールすると、以後有効になります。
毎回コールする必要はありませんが、必要に応じてコールしてください。


実行方法

先ずは拡張関数をサポートしているか調べた後、APIを取得して実行する必要があります。
以下はサンプルコードです。
// インターバル設定
// isinterval = 0: インターバルしない
// isinterval = 1: インターバルする
void glSetInterval(int isinterval)
{
	//拡張関数を受け取る関数ポインタ
	BOOL (WINAPI *wglSwapIntervalEXT)(int) = NULL;

	//拡張関数のWGL_EXT_swap_controlをサポートしているか調べる
	if( strstr( (char*)glGetString( GL_EXTENSIONS ), "WGL_EXT_swap_control") == 0)
	{
		//WGL_EXT_swap_controlをサポートしていない
		return;
	}
	else
	{
		//APIを取得して実行
		wglSwapIntervalEXT = (BOOL (WINAPI*)(int))wglGetProcAddress("wglSwapIntervalEXT");
		if( wglSwapIntervalEXT )
		{
			wglSwapIntervalEXT(isinterval);
		}
	}
}


サポートしてなければtimeGetTimeなどを使用して、タイマで同期を取るしか無いみたいです。

Back

2007/07/07 Gyabo