Fixed: #1145 Implement VSync under Linux

This commit is contained in:
kervala 2010-10-30 17:03:28 +02:00
parent 6c41a99ba7
commit 69a9119603

View file

@ -2041,38 +2041,38 @@ void CDriverGL::setSwapVBLInterval(uint interval)
if (!_Initialized) if (!_Initialized)
return; return;
_Interval = interval; bool res = true;
#ifdef NL_OS_WINDOWS #ifdef NL_OS_WINDOWS
if(_Extensions.WGLEXTSwapControl) if(_Extensions.WGLEXTSwapControl)
{ {
nwglSwapIntervalEXT(_Interval); res = nwglSwapIntervalEXT(_Interval) == TRUE;
} }
#elif defined(NL_OS_MAC) #elif defined(NL_OS_MAC)
#elif defined(NL_OS_UNIX) #elif defined(NL_OS_UNIX)
if (_win && _Extensions.GLXEXTSwapControl) if (_win && _Extensions.GLXEXTSwapControl)
{ {
if (nglXSwapIntervalEXT(_dpy, _win, interval)) res = nglXSwapIntervalEXT(_dpy, _win, interval) == 0;
{
nlwarning("Could not set swap interval");
}
} }
else if (_Extensions.GLXSGISwapControl) else if (_Extensions.GLXSGISwapControl)
{ {
if (nglXSwapIntervalSGI(interval)) res = nglXSwapIntervalSGI(interval) == 0;
{
nlwarning("Could not set swap interval");
}
} }
else if (_Extensions.GLXMESASwapControl) else if (_Extensions.GLXMESASwapControl)
{ {
if (nglXSwapIntervalMESA(interval)) res = nglXSwapIntervalMESA(interval) == 0;
}
#endif
if (res)
{
_Interval = interval;
}
else
{ {
nlwarning("Could not set swap interval"); nlwarning("Could not set swap interval");
} }
} }
#endif
}
// *************************************************************************** // ***************************************************************************
uint CDriverGL::getSwapVBLInterval() uint CDriverGL::getSwapVBLInterval()
@ -2082,12 +2082,22 @@ uint CDriverGL::getSwapVBLInterval()
#ifdef NL_OS_WINDOWS #ifdef NL_OS_WINDOWS
if(_Extensions.WGLEXTSwapControl) if(_Extensions.WGLEXTSwapControl)
{ {
return _Interval; return nwglGetSwapIntervalEXT();
}
#elif defined(NL_OS_MAC)
#elif defined(NL_OS_UNIX)
if (_win && _Extensions.GLXEXTSwapControl)
{
uint swap, maxSwap;
glXQueryDrawable(_dpy, _win, GLX_SWAP_INTERVAL_EXT, &swap);
glXQueryDrawable(_dpy, _win, GLX_MAX_SWAP_INTERVAL_EXT, &maxSwap);
nlwarning("The swap interval is %u and the max swap interval is %u", swap, maxSwap);
return swap;
}
else if (_Extensions.GLXMESASwapControl)
{
return nglXGetSwapIntervalMESA();
} }
else
return 1;
#else
return 1;
#endif #endif
return _Interval; return _Interval;