Ответ 1
В Windows есть метод расширения OpenGL wglSwapIntervalEXT.
Из сообщения b2b3 http://www.gamedev.net/community/forums/topic.asp?topic_id=360862:
---- цитата начинается -----
Если вы работаете в Windows, вам нужно использовать расширения для использования Функция wglSwapIntervalExt. это определенный в wglext.h. Вы также захотите Загрузите файл glext.h. В wglext файле все точки входа для Windows-расширений объявлен. Все такие функции начинаются с префиксом wgl. Чтобы получить дополнительную информацию обо всех опубликованных расширениях, вы можете изучить OpenGL Extension Registry.
wglSwapIntervalEXT имеет расширение WGL_EXT_swap_control. Это позволяет указать минимальное количество кадры перед каждой заменой буфера. Обычно он используется для вертикального синхронизация (если вы установите swap интервал до 1). Больше информации о целом расширение можно найти здесь. Перед использованием этой функции вам необходимо запросить, имеет ли ваша карта поддержка WGL_EXT_swap_control и затем получить указатель на функцию используя функцию wglGetProcAddress.
Чтобы проверить поддержку данного расширения, вы можете использовать такую функцию:
#include <windows.h>
#include "wglext.h"
bool WGLExtensionSupported(const char *extension_name)
{
// this is pointer to function which returns pointer to string with list of all wgl extensions
PFNWGLGETEXTENSIONSSTRINGEXTPROC _wglGetExtensionsStringEXT = NULL;
// determine pointer to wglGetExtensionsStringEXT function
_wglGetExtensionsStringEXT = (PFNWGLGETEXTENSIONSSTRINGEXTPROC) wglGetProcAddress("wglGetExtensionsStringEXT");
if (strstr(_wglGetExtensionsString(), extension_name) == NULL)
{
// string was not found
return false;
}
// extension is supported
return true;
}
Чтобы инициализировать указатели на функции, вам необходимо:
PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT = NULL;
PFNWGLGETSWAPINTERVALEXTPROC wglGetSwapIntervalEXT = NULL;
if (WGLExtensionSupported("WGL_EXT_swap_control"))
{
// Extension is supported, init pointers.
wglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC) LogGetProcAddress("wglSwapIntervalEXT");
// this is another function from WGL_EXT_swap_control extension
wglGetSwapIntervalEXT = (PFNWGLGETSWAPINTERVALEXTPROC) LogGetProcAddress("wglGetSwapIntervalEXT");
}
Затем вы можете использовать эти указатели как любой другой указатель на функцию. Чтобы включить vync, вы можете вызвать wglSwapIntervalEXT (1), чтобы отключить его, вы вызываете wglSwapIntervalEXT (0).
Чтобы получить текущий интервал подкачки, вам нужно вызвать wglGetSwapIntervalEXT().
---- цитаты заканчиваются -----