From c2b5cdcef2e70b493559398e222e380743a811af Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Tue, 29 Sep 2009 13:50:33 +0000 Subject: [PATCH] Make SDL_GL_GetAttribute(SDL_GL_SWAP_CONTROL) work with GLX_SGI_swap_control. Fixes Bugzilla #697. --- src/video/x11/SDL_x11gl.c | 9 +++++++-- src/video/x11/SDL_x11gl_c.h | 1 + src/video/x11/SDL_x11video.c | 2 ++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/video/x11/SDL_x11gl.c b/src/video/x11/SDL_x11gl.c index 78e9982bd..ca7c6a1a5 100644 --- a/src/video/x11/SDL_x11gl.c +++ b/src/video/x11/SDL_x11gl.c @@ -289,7 +289,9 @@ int X11_GL_CreateContext(_THIS) if ( this->gl_data->glXSwapIntervalMESA ) { this->gl_data->glXSwapIntervalMESA(this->gl_config.swap_control); } else if ( this->gl_data->glXSwapIntervalSGI ) { - this->gl_data->glXSwapIntervalSGI(this->gl_config.swap_control); + if (this->gl_data->glXSwapIntervalSGI(this->gl_config.swap_control) != 0) { + this->gl_data->sgi_swap_interval = this->gl_config.swap_control; + } } } #else @@ -412,7 +414,10 @@ int X11_GL_GetAttribute(_THIS, SDL_GLattr attrib, int* value) case SDL_GL_SWAP_CONTROL: if ( this->gl_data->glXGetSwapIntervalMESA ) { *value = this->gl_data->glXGetSwapIntervalMESA(); - return(0); + return 0; + } else if ( this->gl_data->glXSwapIntervalSGI ) { + *value = this->gl_data->sgi_swap_interval; + return 0; } else { unsupported = 1; } diff --git a/src/video/x11/SDL_x11gl_c.h b/src/video/x11/SDL_x11gl_c.h index 50a9a5f11..48143abe6 100644 --- a/src/video/x11/SDL_x11gl_c.h +++ b/src/video/x11/SDL_x11gl_c.h @@ -75,6 +75,7 @@ struct SDL_PrivateGLData { GLint (*glXSwapIntervalMESA) ( unsigned interval ); GLint (*glXGetSwapIntervalMESA) ( void ); + int sgi_swap_interval; #endif /* SDL_VIDEO_OPENGL_GLX */ }; diff --git a/src/video/x11/SDL_x11video.c b/src/video/x11/SDL_x11video.c index 22d125a01..7484c5f7a 100644 --- a/src/video/x11/SDL_x11video.c +++ b/src/video/x11/SDL_x11video.c @@ -121,6 +121,8 @@ static SDL_VideoDevice *X11_CreateDevice(int devindex) SDL_memset(device->hidden, 0, (sizeof *device->hidden)); SDL_memset(device->gl_data, 0, (sizeof *device->gl_data)); + device->gl_data->sgi_swap_interval = 1; + /* Set the driver flags */ device->handles_any_size = 1;