В 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.
wglSwapIntervalEXT
отWGL_EXT_swap_control
расширение. Это позволяет Вам определить минимальное количество кадров перед каждой буферной подкачкой. Обычно это используется для вертикальной синхронизации (при установке интервала подкачки на 1). Больше информации о целом расширении может быть найдено здесь. Перед использованием этой функции Вы должны запросить, чешете ли Вы, имеет поддержкуWGL_EXT_swap_control
, и затем получите указатель на функцию с помощьюwglGetProcAddress
функция.Для тестирования на поддержку данного расширения можно использовать функцию как это:
#include
#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(_wglGetExtensionsStringEXT(), 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) wglGetProcAddress("wglSwapIntervalEXT");
// this is another function from WGL_EXT_swap_control extension
wglGetSwapIntervalEXT = (PFNWGLGETSWAPINTERVALEXTPROC) wglGetProcAddress("wglGetSwapIntervalEXT");
}
Тогда можно использовать эти указатели в качестве любого другого указателя на функцию. Для включения vync, можно звонить
wglSwapIntervalEXT(1)
, для отключения его Вы звонитеwglSwapIntervalEXT(0)
.Для получения текущего интервала подкачки необходимо звонить
wglGetSwapIntervalEXT()
.
Я разрешаю делать операции и сравнения в том же контексте.
Пример:
if(a = 2, a > 1) console.log('a is', a)