summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Pendleton <bob@pendleton.com>2008-03-07 23:57:15 +0000
committerBob Pendleton <bob@pendleton.com>2008-03-07 23:57:15 +0000
commitc80f56455ee03df5cf5dfa66c9bf0bbc83159b07 (patch)
tree78a7878b3bf998f942d4511b7ec65b19968031a1
parent6412b950b44855e94cdfa71c391e7aa8307f2c67 (diff)
downloadsdl-c80f56455ee03df5cf5dfa66c9bf0bbc83159b07.tar.gz
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.
-rw-r--r--src/video/x11/SDL_x11events.c9
-rw-r--r--src/video/x11/SDL_x11opengl.c17
-rw-r--r--test/testdyngl.c2
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;
}