x11: fix vsync support

This commit is contained in:
Andreas Haas 2016-06-07 00:19:01 +02:00
parent 955ed0a95f
commit 5cd7611a9a
1 changed files with 29 additions and 5 deletions

View File

@ -179,14 +179,38 @@ int ContextGL_X11::get_window_height() {
}
void ContextGL_X11::set_use_vsync(bool p_use) {
GLXDrawable drawable = glXGetCurrentDrawable();
//GLXSwapIntervalEXT(x11_display, drawable, p_use?1:0);
use_vsync=p_use;
static bool setup = false;
static PFNGLXSWAPINTERVALEXTPROC glXSwapIntervalEXT = NULL;
static PFNGLXSWAPINTERVALSGIPROC glXSwapIntervalMESA = NULL;
static PFNGLXSWAPINTERVALSGIPROC glXSwapIntervalSGI = NULL;
if (!setup) {
setup = true;
String extensions = glXQueryExtensionsString(x11_display, DefaultScreen(x11_display));
if (extensions.find("GLX_EXT_swap_control") != -1)
glXSwapIntervalEXT = (PFNGLXSWAPINTERVALEXTPROC) glXGetProcAddressARB((const GLubyte*)"glXSwapIntervalEXT");
if (extensions.find("GLX_MESA_swap_control") != -1)
glXSwapIntervalMESA = (PFNGLXSWAPINTERVALSGIPROC) glXGetProcAddressARB((const GLubyte*)"glXSwapIntervalMESA");
if (extensions.find("GLX_SGI_swap_control") != -1)
glXSwapIntervalSGI = (PFNGLXSWAPINTERVALSGIPROC) glXGetProcAddressARB((const GLubyte*)"glXSwapIntervalSGI");
}
int val = p_use ? 1:0;
if (glXSwapIntervalMESA) {
glXSwapIntervalMESA(val);
}
else if (glXSwapIntervalSGI) {
glXSwapIntervalSGI(val);
}
else if (glXSwapIntervalEXT) {
GLXDrawable drawable = glXGetCurrentDrawable();
glXSwapIntervalEXT(x11_display, drawable, val);
}
else return;
use_vsync = p_use;
}
bool ContextGL_X11::is_using_vsync() const {
return false;
//return use_vsync;
return use_vsync;
}