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
authorBob Pendleton <bob@pendleton.com>
Fri, 07 Mar 2008 23:57:15 +0000
changeset 2327 7b53a8401195
parent 2326 133562468ff2
child 2328 91e601d9df8b
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
src/video/x11/SDL_x11opengl.c
test/testdyngl.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? */
--- 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;
     }
 }
 
--- 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;
         }