From 32c3182b68d55a5ceb85f55cf80d24b271b11c35 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 7 Mar 2011 14:06:46 -0800 Subject: [PATCH] Fixed bug 1161 (Setting GL_ACCELERATED_VISUAL to 1 forces software rendering in Windows XP) Jesse Anders 2011-03-05 23:30:09 PST It seems that in Windows XP, setting SDL_GL_ACCELERATED_VISUAL to 1 actually disables hardware acceleration and puts OpenGL in software mode. In the source code, the corresponding WGL attribute is first set here: *iAttr++ = WGL_ACCELERATION_ARB; *iAttr++ = WGL_FULL_ACCELERATION_ARB; Later, this code: if (_this->gl_config.accelerated >= 0) { *iAttr++ = WGL_ACCELERATION_ARB; *iAttr++ = (_this->gl_config.accelerated ? WGL_GENERIC_ACCELERATION_ARB : WGL_NO_ACCELERATION_ARB); } Sets it again if SDL_GL_ACCELERATED_VISUAL has a value other than the default. More importantly, the documentation I found states that WGL_GENERIC_ACCELERATION_ARB asks for an MDC driver, which, although I don't know much about this topic, doesn't seem like the correct choice here. As mentioned previously, the end effect is that requesting hardware acceleration in Windows XP actually forces the renderer into software mode (on my system at least), which I'm guessing isn't the desired behavior. --- src/video/windows/SDL_windowsopengl.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/video/windows/SDL_windowsopengl.c b/src/video/windows/SDL_windowsopengl.c index 041a69070..0fb749538 100644 --- a/src/video/windows/SDL_windowsopengl.c +++ b/src/video/windows/SDL_windowsopengl.c @@ -409,8 +409,6 @@ WIN_GL_SetupWindow(_THIS, SDL_Window * window) *iAttr++ = WGL_DRAW_TO_WINDOW_ARB; *iAttr++ = GL_TRUE; - *iAttr++ = WGL_ACCELERATION_ARB; - *iAttr++ = WGL_FULL_ACCELERATION_ARB; *iAttr++ = WGL_RED_BITS_ARB; *iAttr++ = _this->gl_config.red_size; *iAttr++ = WGL_GREEN_BITS_ARB; @@ -469,12 +467,9 @@ WIN_GL_SetupWindow(_THIS, SDL_Window * window) *iAttr++ = _this->gl_config.multisamplesamples; } - if (_this->gl_config.accelerated >= 0) { - *iAttr++ = WGL_ACCELERATION_ARB; - *iAttr++ = - (_this->gl_config.accelerated ? WGL_GENERIC_ACCELERATION_ARB : - WGL_NO_ACCELERATION_ARB); - } + *iAttr++ = WGL_ACCELERATION_ARB; + *iAttr++ = (_this->gl_config.accelerated ? WGL_FULL_ACCELERATION_ARB : + WGL_NO_ACCELERATION_ARB); *iAttr = 0;