x11: fix vsync support
This commit is contained in:
parent
955ed0a95f
commit
5cd7611a9a
1 changed files with 29 additions and 5 deletions
|
@ -179,14 +179,38 @@ int ContextGL_X11::get_window_height() {
|
|||
}
|
||||
|
||||
void ContextGL_X11::set_use_vsync(bool 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, p_use?1:0);
|
||||
use_vsync=p_use;
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue