Default to allow either accelerated or not
authorSam Lantinga <slouken@libsdl.org>
Tue, 15 Dec 2009 20:53:09 +0000
changeset 3571 19691cebb866
parent 3570 7812d3e9564e
child 3572 6bb9952d5029
Default to allow either accelerated or not
src/video/SDL_video.c
src/video/cocoa/SDL_cocoaopengl.m
src/video/win32/SDL_win32opengl.c
src/video/x11/SDL_x11opengl.c
test/common.c
test/testgl.c
test/testgl2.c
--- a/src/video/SDL_video.c	Tue Dec 15 20:36:31 2009 +0000
+++ b/src/video/SDL_video.c	Tue Dec 15 20:53:09 2009 +0000
@@ -239,7 +239,7 @@
     _this->gl_config.multisamplebuffers = 0;
     _this->gl_config.multisamplesamples = 0;
     _this->gl_config.retained_backing = 1;
-    _this->gl_config.accelerated = 1;
+    _this->gl_config.accelerated = -1;  /* accelerated or not, both are fine */
     _this->gl_config.major_version = 2;
     _this->gl_config.minor_version = 1;
 
@@ -3274,7 +3274,7 @@
     case SDL_GL_ACCELERATED_VISUAL:
         {
             /* FIXME: How do we get this information? */
-            *value = _this->gl_config.accelerated;
+            *value = (_this->gl_config.accelerated != 0);
             return 0;
         }
     default:
--- a/src/video/cocoa/SDL_cocoaopengl.m	Tue Dec 15 20:36:31 2009 +0000
+++ b/src/video/cocoa/SDL_cocoaopengl.m	Tue Dec 15 20:53:09 2009 +0000
@@ -133,11 +133,13 @@
         attr[i++] = NSOpenGLPFANoRecovery;
     }
 
-    if (_this->gl_config.accelerated) {
-        attr[i++] = NSOpenGLPFAAccelerated;
-    } else {
-        attr[i++] = NSOpenGLPFARendererID;
-        attr[i++] = kCGLRendererGenericFloatID;
+    if (_this->gl_config.accelerated >= 0) {
+        if (_this->gl_config.accelerated) {
+            attr[i++] = NSOpenGLPFAAccelerated;
+        } else {
+            attr[i++] = NSOpenGLPFARendererID;
+            attr[i++] = kCGLRendererGenericFloatID;
+        }
     }
 
     attr[i++] = NSOpenGLPFAScreenMask;
--- a/src/video/win32/SDL_win32opengl.c	Tue Dec 15 20:36:31 2009 +0000
+++ b/src/video/win32/SDL_win32opengl.c	Tue Dec 15 20:53:09 2009 +0000
@@ -469,9 +469,12 @@
         *iAttr++ = _this->gl_config.multisamplesamples;
     }
 
-    *iAttr++ = WGL_ACCELERATION_ARB;
-    *iAttr++ = (_this->gl_config.accelerated ? WGL_GENERIC_ACCELERATION_ARB :
-                                               WGL_NO_ACCELERATION_ARB);
+    if (_this->gl_config.accelerated >= 0) {
+        *iAttr++ = WGL_ACCELERATION_ARB;
+        *iAttr++ =
+            (_this->gl_config.accelerated ? WGL_GENERIC_ACCELERATION_ARB :
+             WGL_NO_ACCELERATION_ARB);
+    }
 
     *iAttr = 0;
 
--- a/src/video/x11/SDL_x11opengl.c	Tue Dec 15 20:36:31 2009 +0000
+++ b/src/video/x11/SDL_x11opengl.c	Tue Dec 15 20:53:09 2009 +0000
@@ -359,7 +359,8 @@
         attribs[i++] = _this->gl_config.multisamplesamples;
     }
 
-    if (_this->gl_data->HAS_GLX_EXT_visual_rating) {
+    if (_this->gl_config.accelerated >= 0 &&
+        _this->gl_data->HAS_GLX_EXT_visual_rating) {
         attribs[i++] = GLX_VISUAL_CAVEAT_EXT;
         attribs[i++] = _this->gl_config.accelerated ? GLX_NONE_EXT :
                                                       GLX_SLOW_VISUAL_EXT;
--- a/test/common.c	Tue Dec 15 20:36:31 2009 +0000
+++ b/test/common.c	Tue Dec 15 20:53:09 2009 +0000
@@ -104,7 +104,7 @@
     state->gl_multisamplebuffers = 0;
     state->gl_multisamplesamples = 0;
     state->gl_retained_backing = 1;
-    state->gl_accelerated = 1;
+    state->gl_accelerated = -1;
     state->gl_major_version = 2;
     state->gl_minor_version = 1;
 
@@ -659,7 +659,10 @@
         SDL_GL_SetAttribute(SDL_GL_STEREO, state->gl_stereo);
         SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, state->gl_multisamplebuffers);
         SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, state->gl_multisamplesamples);
-        SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, state->gl_accelerated);
+        if (state->gl_accelerated >= 0) {
+            SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL,
+                                state->gl_accelerated);
+        }
         SDL_GL_SetAttribute(SDL_GL_RETAINED_BACKING, state->gl_retained_backing);
         SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, state->gl_major_version);
         SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, state->gl_minor_version);
--- a/test/testgl.c	Tue Dec 15 20:36:31 2009 +0000
+++ b/test/testgl.c	Tue Dec 15 20:53:09 2009 +0000
@@ -370,7 +370,7 @@
 int
 RunGLTest(int argc, char *argv[],
           int logo, int logocursor, int slowly, int bpp, float gamma,
-          int noframe, int fsaa, int sync, int noaccel)
+          int noframe, int fsaa, int sync, int accel)
 {
     int i;
     int rgb_size[3];
@@ -454,7 +454,9 @@
         SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
         SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, fsaa);
     }
-    SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, !noaccel);
+    if (accel >= 0) {
+        SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, accel);
+    }
     if (SDL_SetVideoMode(w, h, bpp, video_flags) == NULL) {
         fprintf(stderr, "Couldn't set GL mode: %s\n", SDL_GetError());
         SDL_Quit();
@@ -491,8 +493,11 @@
         printf("SDL_GL_MULTISAMPLESAMPLES: requested %d, got %d\n", fsaa,
                value);
     }
-    SDL_GL_GetAttribute(SDL_GL_ACCELERATED_VISUAL, &value);
-    printf("SDL_GL_ACCELERATED_VISUAL: requested %d, got %d\n", !noaccel, value);
+    if (accel >= 0) {
+        SDL_GL_GetAttribute(SDL_GL_ACCELERATED_VISUAL, &value);
+        printf("SDL_GL_ACCELERATED_VISUAL: requested %d, got %d\n", accel,
+               value);
+    }
     if (sync) {
         printf("Buffer swap interval: requested 1, got %d\n",
                SDL_GL_GetSwapInterval());
@@ -703,7 +708,7 @@
     float gamma = 0.0;
     int noframe = 0;
     int fsaa = 0;
-    int noaccel = 0;
+    int accel = -1;
     int sync = 0;
 
     logo = 0;
@@ -734,22 +739,22 @@
         if (strcmp(argv[i], "-fsaa") == 0) {
             ++fsaa;
         }
-        if (strcmp(argv[i], "-noaccel") == 0) {
-            ++noaccel;
+        if (strcmp(argv[i], "-accel") == 0) {
+            accel = atoi(argv[++i]);
         }
         if (strcmp(argv[i], "-sync") == 0) {
             ++sync;
         }
         if (strncmp(argv[i], "-h", 2) == 0) {
             printf
-                ("Usage: %s [-twice] [-logo] [-logocursor] [-slow] [-bpp n] [-gamma n] [-noframe] [-fsaa] [-noaccel] [-sync] [-fullscreen]\n",
+                ("Usage: %s [-twice] [-logo] [-logocursor] [-slow] [-bpp n] [-gamma n] [-noframe] [-fsaa] [-accel n] [-sync] [-fullscreen]\n",
                  argv[0]);
             exit(0);
         }
     }
     for (i = 0; i < numtests; ++i) {
         RunGLTest(argc, argv, logo, logocursor, slowly, bpp, gamma,
-                  noframe, fsaa, sync, noaccel);
+                  noframe, fsaa, sync, accel);
     }
     return 0;
 }
--- a/test/testgl2.c	Tue Dec 15 20:36:31 2009 +0000
+++ b/test/testgl2.c	Tue Dec 15 20:53:09 2009 +0000
@@ -162,7 +162,7 @@
 int
 main(int argc, char *argv[])
 {
-    int fsaa, noaccel;
+    int fsaa, accel;
     int value;
     int i, done;
     SDL_DisplayMode mode;
@@ -172,7 +172,7 @@
 
     /* Initialize parameters */
     fsaa = 0;
-    noaccel = 0;
+    accel = -1;
 
     /* Initialize test framework */
     state = CommonCreateState(argv, SDL_INIT_VIDEO);
@@ -187,15 +187,15 @@
             if (SDL_strcasecmp(argv[i], "--fsaa") == 0) {
                 ++fsaa;
                 consumed = 1;
-            } else if (SDL_strcasecmp(argv[i], "--noaccel") == 0) {
-                ++noaccel;
-                consumed = 1;
+            } else if (SDL_strcasecmp(argv[i], "--accel") == 0 && i+1 < argc) {
+                accel = atoi(argv[i+1]);
+                consumed = 2;
             } else {
                 consumed = -1;
             }
         }
         if (consumed < 0) {
-            fprintf(stderr, "Usage: %s %s [--fsaa] [--noaccel]\n", argv[0],
+            fprintf(stderr, "Usage: %s %s [--fsaa] [--accel n]\n", argv[0],
                     CommonUsage(state));
             quit(1);
         }
@@ -213,7 +213,9 @@
         state->gl_multisamplebuffers = 1;
         state->gl_multisamplesamples = fsaa;
     }
-    state->gl_accelerated = !noaccel;
+    if (accel >= 0) {
+        state->gl_accelerated = accel;
+    }
 
     if (!CommonInit(state)) {
         quit(2);
@@ -282,13 +284,15 @@
                    SDL_GetError());
         }
     }
-    status = SDL_GL_GetAttribute(SDL_GL_ACCELERATED_VISUAL, &value);
-    if (!status) {
-        printf("SDL_GL_ACCELERATED_VISUAL: requested %d, got %d\n", !noaccel,
-               value);
-    } else {
-        printf("Failed to get SDL_GL_ACCELERATED_VISUAL: %s\n",
-               SDL_GetError());
+    if (accel >= 0) {
+        status = SDL_GL_GetAttribute(SDL_GL_ACCELERATED_VISUAL, &value);
+        if (!status) {
+            printf("SDL_GL_ACCELERATED_VISUAL: requested %d, got %d\n", accel,
+                   value);
+        } else {
+            printf("Failed to get SDL_GL_ACCELERATED_VISUAL: %s\n",
+                   SDL_GetError());
+        }
     }
 
     /* Set rendering settings */