From 520e247805d471c6e831ece3461e0bae6a31df90 Mon Sep 17 00:00:00 2001 From: Bob Pendleton Date: Fri, 7 Mar 2008 23:57:15 +0000 Subject: [PATCH] In testdyngl.c the event type was being anded (&) with SDL_KEYDOWN and if the result was none zero the program was quiting. This is very weird because it was working earlier this week. I added some more trace code to SDL_x11events.c In SDL_X11opengl.c I modified SDL_GL_GetSwapInterval() so that it returns a pretty good value even if you have the SGI swap extension instead of the MESA swap extension. I just saved the value you set and return it too you. --- src/video/x11/SDL_x11events.c | 9 +++++++-- src/video/x11/SDL_x11opengl.c | 17 +++++++++++++++-- test/testdyngl.c | 2 +- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/video/x11/SDL_x11events.c b/src/video/x11/SDL_x11events.c index faad0ba86..fa65815af 100644 --- a/src/video/x11/SDL_x11events.c +++ b/src/video/x11/SDL_x11events.c @@ -43,8 +43,9 @@ X11_DispatchEvent(_THIS) /* filter events catchs XIM events and sends them to the correct handler */ if (XFilterEvent(&xevent, None) == True) { -#ifdef DEBUG_XEVENTS - printf("Filtered event of type = 0x%X\n", xevent.type); +#if 0 + printf("Filtered event type = %d display = %d window = %d\n", + xevent.type, xevent.xany.display, xevent.xany.window); #endif return; } @@ -73,6 +74,10 @@ X11_DispatchEvent(_THIS) return; } +#if 0 + printf("type = %d display = %d window = %d\n", + xevent.type, xevent.xany.display, xevent.xany.window); +#endif switch (xevent.type) { /* Gaining mouse coverage? */ diff --git a/src/video/x11/SDL_x11opengl.c b/src/video/x11/SDL_x11opengl.c index 11bf5f925..6e131e4ea 100644 --- a/src/video/x11/SDL_x11opengl.c +++ b/src/video/x11/SDL_x11opengl.c @@ -472,6 +472,16 @@ X11_GL_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context) return (status); } +/* + 0 is a valid argument to glxSwapIntervalMESA and setting it to 0 + with the MESA version of the extension will undo the effect of a + previous call with a value that is greater than zero (or at least + that is what the FM says. OTOH, 0 is an invalid argument to + glxSwapIntervalSGI and it returns an error if you call it with 0 as + an argument. +*/ + +static int swapinterval = -1; int X11_GL_SetSwapInterval(_THIS, int interval) { @@ -482,12 +492,16 @@ X11_GL_SetSwapInterval(_THIS, int interval) if (status != 0) { SDL_SetError("glxSwapIntervalMESA failed"); status = -1; + } else { + swapinterval = interval; } } else if (_this->gl_data->glXSwapIntervalSGI) { status = _this->gl_data->glXSwapIntervalSGI(interval); if (status != 0) { SDL_SetError("glxSwapIntervalSGI failed"); status = -1; + } else { + swapinterval = interval; } } else { SDL_Unsupported(); @@ -502,8 +516,7 @@ X11_GL_GetSwapInterval(_THIS) if (_this->gl_data->glXGetSwapIntervalMESA) { return _this->gl_data->glXGetSwapIntervalMESA(); } else { - SDL_Unsupported(); - return -1; + return swapinterval; } } diff --git a/test/testdyngl.c b/test/testdyngl.c index 5818bfc7c..e98ae4107 100644 --- a/test/testdyngl.c +++ b/test/testdyngl.c @@ -180,7 +180,7 @@ main(int argc, char *argv[]) SDL_GL_SwapBuffers(); while (SDL_PollEvent(&event)) { - if (event.type & SDL_KEYDOWN) + if (event.type == SDL_KEYDOWN) done = 1; }