Skip to content

Commit

Permalink
Cache the swap control setting, even on Mesa.
Browse files Browse the repository at this point in the history
  • Loading branch information
icculus committed Oct 10, 2009
1 parent 2f5962c commit 04823fa
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 17 deletions.
22 changes: 9 additions & 13 deletions src/video/x11/SDL_x11gl.c
Expand Up @@ -283,15 +283,16 @@ int X11_GL_CreateContext(_THIS)
}
if ( !glXExtensionSupported(this, "GLX_MESA_swap_control") ) {
this->gl_data->glXSwapIntervalMESA = NULL;
this->gl_data->glXGetSwapIntervalMESA = NULL;
}
if ( this->gl_config.swap_control >= 0 ) {
int rc = -1;
if ( this->gl_data->glXSwapIntervalMESA ) {
this->gl_data->glXSwapIntervalMESA(this->gl_config.swap_control);
rc = this->gl_data->glXSwapIntervalMESA(this->gl_config.swap_control);
} else if ( this->gl_data->glXSwapIntervalSGI ) {
if (this->gl_data->glXSwapIntervalSGI(this->gl_config.swap_control) == 0) {
this->gl_data->sgi_swap_interval = this->gl_config.swap_control;
}
rc = this->gl_data->glXSwapIntervalSGI(this->gl_config.swap_control);
}
if (rc == 0) {
this->gl_data->swap_interval = this->gl_config.swap_control;
}
}
#else
Expand Down Expand Up @@ -412,11 +413,9 @@ int X11_GL_GetAttribute(_THIS, SDL_GLattr attrib, int* value)
}
break;
case SDL_GL_SWAP_CONTROL:
if ( this->gl_data->glXGetSwapIntervalMESA ) {
*value = this->gl_data->glXGetSwapIntervalMESA();
return 0;
} else if ( this->gl_data->glXSwapIntervalSGI ) {
*value = this->gl_data->sgi_swap_interval;
if ( ( this->gl_data->glXSwapIntervalMESA ) ||
( this->gl_data->glXSwapIntervalSGI ) ) {
*value = this->gl_data->swap_interval;
return 0;
} else {
unsupported = 1;
Expand Down Expand Up @@ -469,7 +468,6 @@ void X11_GL_UnloadLibrary(_THIS)
this->gl_data->glXSwapBuffers = NULL;
this->gl_data->glXSwapIntervalSGI = NULL;
this->gl_data->glXSwapIntervalMESA = NULL;
this->gl_data->glXGetSwapIntervalMESA = NULL;

this->gl_config.dll_handle = NULL;
this->gl_config.driver_loaded = 0;
Expand Down Expand Up @@ -530,8 +528,6 @@ int X11_GL_LoadLibrary(_THIS, const char* path)
(int (*)(int)) GL_LoadFunction(handle, "glXSwapIntervalSGI");
this->gl_data->glXSwapIntervalMESA =
(GLint (*)(unsigned)) GL_LoadFunction(handle, "glXSwapIntervalMESA");
this->gl_data->glXGetSwapIntervalMESA =
(GLint (*)(void)) GL_LoadFunction(handle, "glXGetSwapIntervalMESA");

if ( (this->gl_data->glXChooseVisual == NULL) ||
(this->gl_data->glXCreateContext == NULL) ||
Expand Down
4 changes: 1 addition & 3 deletions src/video/x11/SDL_x11gl_c.h
Expand Up @@ -73,9 +73,7 @@ struct SDL_PrivateGLData {

int (*glXSwapIntervalSGI) ( int interval );
GLint (*glXSwapIntervalMESA) ( unsigned interval );
GLint (*glXGetSwapIntervalMESA) ( void );

int sgi_swap_interval;
int swap_interval;
#endif /* SDL_VIDEO_OPENGL_GLX */
};

Expand Down
2 changes: 1 addition & 1 deletion src/video/x11/SDL_x11video.c
Expand Up @@ -122,7 +122,7 @@ static SDL_VideoDevice *X11_CreateDevice(int devindex)
SDL_memset(device->gl_data, 0, (sizeof *device->gl_data));

#if SDL_VIDEO_OPENGL_GLX
device->gl_data->sgi_swap_interval = -1;
device->gl_data->swap_interval = -1;
#endif

/* Set the driver flags */
Expand Down

0 comments on commit 04823fa

Please sign in to comment.