# HG changeset patch # User Bob Pendleton # Date 1204934235 0 # Node ID 7b53a8401195a6e02d522a69bd90ea358bb3b6e5 # Parent 133562468ff2690938cc1c31742baaa78a367486 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. diff -r 133562468ff2 -r 7b53a8401195 src/video/x11/SDL_x11events.c --- a/src/video/x11/SDL_x11events.c Fri Mar 07 21:01:54 2008 +0000 +++ b/src/video/x11/SDL_x11events.c Fri Mar 07 23:57:15 2008 +0000 @@ -43,8 +43,9 @@ /* 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 @@ 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 -r 133562468ff2 -r 7b53a8401195 src/video/x11/SDL_x11opengl.c --- a/src/video/x11/SDL_x11opengl.c Fri Mar 07 21:01:54 2008 +0000 +++ b/src/video/x11/SDL_x11opengl.c Fri Mar 07 23:57:15 2008 +0000 @@ -472,6 +472,16 @@ 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 @@ 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 @@ if (_this->gl_data->glXGetSwapIntervalMESA) { return _this->gl_data->glXGetSwapIntervalMESA(); } else { - SDL_Unsupported(); - return -1; + return swapinterval; } } diff -r 133562468ff2 -r 7b53a8401195 test/testdyngl.c --- a/test/testdyngl.c Fri Mar 07 21:01:54 2008 +0000 +++ b/test/testdyngl.c Fri Mar 07 23:57:15 2008 +0000 @@ -180,7 +180,7 @@ SDL_GL_SwapBuffers(); while (SDL_PollEvent(&event)) { - if (event.type & SDL_KEYDOWN) + if (event.type == SDL_KEYDOWN) done = 1; }