Mercurial > sdl-ios-xcode
diff src/video/wincommon/SDL_wingl.c @ 1895:c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 10 Jul 2006 21:04:37 +0000 |
parents | 9d940db55a91 |
children |
line wrap: on
line diff
--- a/src/video/wincommon/SDL_wingl.c Thu Jul 06 18:01:37 2006 +0000 +++ b/src/video/wincommon/SDL_wingl.c Mon Jul 10 21:04:37 2006 +0000 @@ -34,612 +34,638 @@ #endif /* If setting the HDC fails, we may need to recreate the window (MSDN) */ -static int WIN_GL_ResetWindow(_THIS) +static int +WIN_GL_ResetWindow(_THIS) { - int status = 0; + int status = 0; -#ifndef _WIN32_WCE /* FIXME WinCE needs the UNICODE version of CreateWindow() */ - /* This doesn't work with DirectX code (see CVS comments) */ - /* If we were passed a window, then we can't create a new one */ - if ( !SDL_windowid && SDL_strcmp(this->name, "windib") == 0 ) { - /* Save the existing window attributes */ - LONG style; - RECT rect = { 0, 0, 0, 0 }; - style = GetWindowLong(SDL_Window, GWL_STYLE); - GetWindowRect(SDL_Window, &rect); - DestroyWindow(SDL_Window); - WIN_FlushMessageQueue(); +#ifndef _WIN32_WCE /* FIXME WinCE needs the UNICODE version of CreateWindow() */ + /* This doesn't work with DirectX code (see CVS comments) */ + /* If we were passed a window, then we can't create a new one */ + if (!SDL_windowid && SDL_strcmp(this->name, "windib") == 0) { + /* Save the existing window attributes */ + LONG style; + RECT rect = { 0, 0, 0, 0 }; + style = GetWindowLong(SDL_Window, GWL_STYLE); + GetWindowRect(SDL_Window, &rect); + DestroyWindow(SDL_Window); + WIN_FlushMessageQueue(); - SDL_Window = CreateWindow(SDL_Appname, SDL_Appname, - style, - rect.left, rect.top, - (rect.right-rect.left)+1, - (rect.top-rect.bottom)+1, - NULL, NULL, SDL_Instance, NULL); - WIN_FlushMessageQueue(); + SDL_Window = CreateWindow(SDL_Appname, SDL_Appname, + style, + rect.left, rect.top, + (rect.right - rect.left) + 1, + (rect.top - rect.bottom) + 1, + NULL, NULL, SDL_Instance, NULL); + WIN_FlushMessageQueue(); - if ( SDL_Window ) { - this->SetCaption(this, this->wm_title, this->wm_icon); - } else { - SDL_SetError("Couldn't create window"); - status = -1; - } - } else + if (SDL_Window) { + this->SetCaption(this, this->wm_title, this->wm_icon); + } else { + SDL_SetError("Couldn't create window"); + status = -1; + } + } else #endif /* !_WIN32_WCE */ - { - SDL_SetError("Unable to reset window for OpenGL context"); - status = -1; - } - return(status); + { + SDL_SetError("Unable to reset window for OpenGL context"); + status = -1; + } + return (status); } #if SDL_VIDEO_OPENGL -static int ExtensionSupported(const char *extension, const char *extensions) +static int +ExtensionSupported(const char *extension, const char *extensions) { - const char *start; - const char *where, *terminator; + const char *start; + const char *where, *terminator; - /* Extension names should not have spaces. */ - where = SDL_strchr(extension, ' '); - if ( where || *extension == '\0' ) - return 0; - - if ( ! extensions ) - return 0; + /* Extension names should not have spaces. */ + where = SDL_strchr(extension, ' '); + if (where || *extension == '\0') + return 0; + + if (!extensions) + return 0; - /* It takes a bit of care to be fool-proof about parsing the - * OpenGL extensions string. Don't be fooled by sub-strings, - * etc. */ - - start = extensions; - - for (;;) - { - where = SDL_strstr(start, extension); - if (!where) break; - - terminator = where + SDL_strlen(extension); - if (where == start || *(where - 1) == ' ') - if (*terminator == ' ' || *terminator == '\0') return 1; + /* It takes a bit of care to be fool-proof about parsing the + * OpenGL extensions string. Don't be fooled by sub-strings, + * etc. */ + + start = extensions; - start = terminator; - } - - return 0; + for (;;) { + where = SDL_strstr(start, extension); + if (!where) + break; + + terminator = where + SDL_strlen(extension); + if (where == start || *(where - 1) == ' ') + if (*terminator == ' ' || *terminator == '\0') + return 1; + + start = terminator; + } + + return 0; } -static void Init_WGL_ARB_extensions(_THIS) +static void +Init_WGL_ARB_extensions(_THIS) { - HWND hwnd; - HDC hdc; - HGLRC hglrc; - int pformat; - const char * (WINAPI *wglGetExtensionsStringARB)(HDC) = 0; - const char *extensions; - - hwnd = CreateWindow(SDL_Appname, SDL_Appname, WS_POPUP | WS_DISABLED, - 0, 0, 10, 10, - NULL, NULL, SDL_Instance, NULL); - WIN_FlushMessageQueue(); + HWND hwnd; + HDC hdc; + HGLRC hglrc; + int pformat; + const char *(WINAPI * wglGetExtensionsStringARB) (HDC) = 0; + const char *extensions; + + hwnd = CreateWindow(SDL_Appname, SDL_Appname, WS_POPUP | WS_DISABLED, + 0, 0, 10, 10, NULL, NULL, SDL_Instance, NULL); + WIN_FlushMessageQueue(); - hdc = GetDC(hwnd); + hdc = GetDC(hwnd); - pformat = ChoosePixelFormat(hdc, &GL_pfd); - SetPixelFormat(hdc, pformat, &GL_pfd); + pformat = ChoosePixelFormat(hdc, &GL_pfd); + SetPixelFormat(hdc, pformat, &GL_pfd); - hglrc = this->gl_data->wglCreateContext(hdc); - if ( hglrc ) { - this->gl_data->wglMakeCurrent(hdc, hglrc); - } + hglrc = this->gl_data->wglCreateContext(hdc); + if (hglrc) { + this->gl_data->wglMakeCurrent(hdc, hglrc); + } - wglGetExtensionsStringARB = (const char * (WINAPI *)(HDC)) - this->gl_data->wglGetProcAddress("wglGetExtensionsStringARB"); + wglGetExtensionsStringARB = (const char *(WINAPI *) (HDC)) + this->gl_data->wglGetProcAddress("wglGetExtensionsStringARB"); - if( wglGetExtensionsStringARB ) { - extensions = wglGetExtensionsStringARB(hdc); - } else { - extensions = NULL; - } + if (wglGetExtensionsStringARB) { + extensions = wglGetExtensionsStringARB(hdc); + } else { + extensions = NULL; + } - this->gl_data->WGL_ARB_pixel_format = 0; - if( ExtensionSupported("WGL_ARB_pixel_format", extensions) ) { - this->gl_data->wglChoosePixelFormatARB = - (BOOL (WINAPI *)(HDC, const int *, const FLOAT *, UINT, int *, UINT *)) - this->gl_data->wglGetProcAddress("wglChoosePixelFormatARB"); - this->gl_data->wglGetPixelFormatAttribivARB = - (BOOL (WINAPI *)(HDC, int, int, UINT, const int *, int *)) - this->gl_data->wglGetProcAddress("wglGetPixelFormatAttribivARB"); + this->gl_data->WGL_ARB_pixel_format = 0; + if (ExtensionSupported("WGL_ARB_pixel_format", extensions)) { + this->gl_data->wglChoosePixelFormatARB = (BOOL(WINAPI *) + (HDC, const int *, + const FLOAT *, UINT, int *, + UINT *)) + this->gl_data->wglGetProcAddress("wglChoosePixelFormatARB"); + this->gl_data->wglGetPixelFormatAttribivARB = + (BOOL(WINAPI *) (HDC, int, int, UINT, const int *, int *)) + this->gl_data->wglGetProcAddress("wglGetPixelFormatAttribivARB"); - if( (this->gl_data->wglChoosePixelFormatARB != NULL) && - (this->gl_data->wglGetPixelFormatAttribivARB != NULL) ) { - this->gl_data->WGL_ARB_pixel_format = 1; - } - } - - if ( hglrc ) { - this->gl_data->wglMakeCurrent(NULL, NULL); - this->gl_data->wglDeleteContext(hglrc); - } - ReleaseDC(hwnd, hdc); - DestroyWindow(hwnd); - WIN_FlushMessageQueue(); + if ((this->gl_data->wglChoosePixelFormatARB != NULL) && + (this->gl_data->wglGetPixelFormatAttribivARB != NULL)) { + this->gl_data->WGL_ARB_pixel_format = 1; + } + } + + if (hglrc) { + this->gl_data->wglMakeCurrent(NULL, NULL); + this->gl_data->wglDeleteContext(hglrc); + } + ReleaseDC(hwnd, hdc); + DestroyWindow(hwnd); + WIN_FlushMessageQueue(); } #endif /* SDL_VIDEO_OPENGL */ -int WIN_GL_SetupWindow(_THIS) +int +WIN_GL_SetupWindow(_THIS) { - int retval; + int retval; #if SDL_VIDEO_OPENGL - int i; - unsigned int matching; - int iAttribs[64]; - int *iAttr; - float fAttribs[1] = { 0 }; - const GLubyte *(WINAPI *glGetStringFunc)(GLenum); - const char *wglext; + int i; + unsigned int matching; + int iAttribs[64]; + int *iAttr; + float fAttribs[1] = { 0 }; + const GLubyte *(WINAPI * glGetStringFunc) (GLenum); + const char *wglext; - /* load the gl driver from a default path */ - if ( ! this->gl_config.driver_loaded ) { - /* no driver has been loaded, use default (ourselves) */ - if ( WIN_GL_LoadLibrary(this, NULL) < 0 ) { - return(-1); - } - } + /* load the gl driver from a default path */ + if (!this->gl_config.driver_loaded) { + /* no driver has been loaded, use default (ourselves) */ + if (WIN_GL_LoadLibrary(this, NULL) < 0) { + return (-1); + } + } - for ( i=0; ; ++i ) { - /* Get the window device context for our OpenGL drawing */ - GL_hdc = GetDC(SDL_Window); - if ( GL_hdc == NULL ) { - SDL_SetError("Unable to get DC for SDL_Window"); - return(-1); - } + for (i = 0;; ++i) { + /* Get the window device context for our OpenGL drawing */ + GL_hdc = GetDC(SDL_Window); + if (GL_hdc == NULL) { + SDL_SetError("Unable to get DC for SDL_Window"); + return (-1); + } - /* Set up the pixel format descriptor with our needed format */ - SDL_memset(&GL_pfd, 0, sizeof(GL_pfd)); - GL_pfd.nSize = sizeof(GL_pfd); - GL_pfd.nVersion = 1; - GL_pfd.dwFlags = (PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL); - if ( this->gl_config.double_buffer ) { - GL_pfd.dwFlags |= PFD_DOUBLEBUFFER; - } - if ( this->gl_config.stereo ) { - GL_pfd.dwFlags |= PFD_STEREO; - } - GL_pfd.iPixelType = PFD_TYPE_RGBA; - GL_pfd.cColorBits = this->gl_config.buffer_size; - GL_pfd.cRedBits = this->gl_config.red_size; - GL_pfd.cGreenBits = this->gl_config.green_size; - GL_pfd.cBlueBits = this->gl_config.blue_size; - GL_pfd.cAlphaBits = this->gl_config.alpha_size; - GL_pfd.cAccumRedBits = this->gl_config.accum_red_size; - GL_pfd.cAccumGreenBits = this->gl_config.accum_green_size; - GL_pfd.cAccumBlueBits = this->gl_config.accum_blue_size; - GL_pfd.cAccumAlphaBits = this->gl_config.accum_alpha_size; - GL_pfd.cAccumBits = - (GL_pfd.cAccumRedBits + GL_pfd.cAccumGreenBits + - GL_pfd.cAccumBlueBits + GL_pfd.cAccumAlphaBits); - GL_pfd.cDepthBits = this->gl_config.depth_size; - GL_pfd.cStencilBits = this->gl_config.stencil_size; + /* Set up the pixel format descriptor with our needed format */ + SDL_memset(&GL_pfd, 0, sizeof(GL_pfd)); + GL_pfd.nSize = sizeof(GL_pfd); + GL_pfd.nVersion = 1; + GL_pfd.dwFlags = (PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL); + if (this->gl_config.double_buffer) { + GL_pfd.dwFlags |= PFD_DOUBLEBUFFER; + } + if (this->gl_config.stereo) { + GL_pfd.dwFlags |= PFD_STEREO; + } + GL_pfd.iPixelType = PFD_TYPE_RGBA; + GL_pfd.cColorBits = this->gl_config.buffer_size; + GL_pfd.cRedBits = this->gl_config.red_size; + GL_pfd.cGreenBits = this->gl_config.green_size; + GL_pfd.cBlueBits = this->gl_config.blue_size; + GL_pfd.cAlphaBits = this->gl_config.alpha_size; + GL_pfd.cAccumRedBits = this->gl_config.accum_red_size; + GL_pfd.cAccumGreenBits = this->gl_config.accum_green_size; + GL_pfd.cAccumBlueBits = this->gl_config.accum_blue_size; + GL_pfd.cAccumAlphaBits = this->gl_config.accum_alpha_size; + GL_pfd.cAccumBits = + (GL_pfd.cAccumRedBits + GL_pfd.cAccumGreenBits + + GL_pfd.cAccumBlueBits + GL_pfd.cAccumAlphaBits); + GL_pfd.cDepthBits = this->gl_config.depth_size; + GL_pfd.cStencilBits = this->gl_config.stencil_size; - /* initialize WGL_ARB_pixel_format */ - Init_WGL_ARB_extensions(this); + /* initialize WGL_ARB_pixel_format */ + Init_WGL_ARB_extensions(this); - /* setup WGL_ARB_pixel_format attribs */ - iAttr = &iAttribs[0]; + /* setup WGL_ARB_pixel_format attribs */ + iAttr = &iAttribs[0]; - *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; - *iAttr++ = this->gl_config.green_size; - *iAttr++ = WGL_BLUE_BITS_ARB; - *iAttr++ = this->gl_config.blue_size; - - if ( this->gl_config.alpha_size ) { - *iAttr++ = WGL_ALPHA_BITS_ARB; - *iAttr++ = this->gl_config.alpha_size; - } + *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; + *iAttr++ = this->gl_config.green_size; + *iAttr++ = WGL_BLUE_BITS_ARB; + *iAttr++ = this->gl_config.blue_size; + + if (this->gl_config.alpha_size) { + *iAttr++ = WGL_ALPHA_BITS_ARB; + *iAttr++ = this->gl_config.alpha_size; + } + + *iAttr++ = WGL_DOUBLE_BUFFER_ARB; + *iAttr++ = this->gl_config.double_buffer; - *iAttr++ = WGL_DOUBLE_BUFFER_ARB; - *iAttr++ = this->gl_config.double_buffer; + *iAttr++ = WGL_DEPTH_BITS_ARB; + *iAttr++ = this->gl_config.depth_size; - *iAttr++ = WGL_DEPTH_BITS_ARB; - *iAttr++ = this->gl_config.depth_size; + if (this->gl_config.stencil_size) { + *iAttr++ = WGL_STENCIL_BITS_ARB; + *iAttr++ = this->gl_config.stencil_size; + } - if ( this->gl_config.stencil_size ) { - *iAttr++ = WGL_STENCIL_BITS_ARB; - *iAttr++ = this->gl_config.stencil_size; - } + if (this->gl_config.accum_red_size) { + *iAttr++ = WGL_ACCUM_RED_BITS_ARB; + *iAttr++ = this->gl_config.accum_red_size; + } - if ( this->gl_config.accum_red_size ) { - *iAttr++ = WGL_ACCUM_RED_BITS_ARB; - *iAttr++ = this->gl_config.accum_red_size; - } + if (this->gl_config.accum_green_size) { + *iAttr++ = WGL_ACCUM_GREEN_BITS_ARB; + *iAttr++ = this->gl_config.accum_green_size; + } - if ( this->gl_config.accum_green_size ) { - *iAttr++ = WGL_ACCUM_GREEN_BITS_ARB; - *iAttr++ = this->gl_config.accum_green_size; - } + if (this->gl_config.accum_blue_size) { + *iAttr++ = WGL_ACCUM_BLUE_BITS_ARB; + *iAttr++ = this->gl_config.accum_blue_size; + } - if ( this->gl_config.accum_blue_size ) { - *iAttr++ = WGL_ACCUM_BLUE_BITS_ARB; - *iAttr++ = this->gl_config.accum_blue_size; - } + if (this->gl_config.accum_alpha_size) { + *iAttr++ = WGL_ACCUM_ALPHA_BITS_ARB; + *iAttr++ = this->gl_config.accum_alpha_size; + } - if ( this->gl_config.accum_alpha_size ) { - *iAttr++ = WGL_ACCUM_ALPHA_BITS_ARB; - *iAttr++ = this->gl_config.accum_alpha_size; - } + if (this->gl_config.stereo) { + *iAttr++ = WGL_STEREO_ARB; + *iAttr++ = GL_TRUE; + } - if ( this->gl_config.stereo ) { - *iAttr++ = WGL_STEREO_ARB; - *iAttr++ = GL_TRUE; - } + if (this->gl_config.multisamplebuffers) { + *iAttr++ = WGL_SAMPLE_BUFFERS_ARB; + *iAttr++ = this->gl_config.multisamplebuffers; + } - if ( this->gl_config.multisamplebuffers ) { - *iAttr++ = WGL_SAMPLE_BUFFERS_ARB; - *iAttr++ = this->gl_config.multisamplebuffers; - } + if (this->gl_config.multisamplesamples) { + *iAttr++ = WGL_SAMPLES_ARB; + *iAttr++ = this->gl_config.multisamplesamples; + } - if ( this->gl_config.multisamplesamples ) { - *iAttr++ = WGL_SAMPLES_ARB; - *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); + } - 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; + *iAttr = 0; - /* Choose and set the closest available pixel format */ - if ( !this->gl_data->WGL_ARB_pixel_format || - !this->gl_data->wglChoosePixelFormatARB(GL_hdc, iAttribs, fAttribs, 1, &pixel_format, &matching) || - !matching ) { - pixel_format = ChoosePixelFormat(GL_hdc, &GL_pfd); - this->gl_data->WGL_ARB_pixel_format = 0; - } - if ( !pixel_format ) { - SDL_SetError("No matching GL pixel format available"); - return(-1); - } - if ( !SetPixelFormat(GL_hdc, pixel_format, &GL_pfd) ) { - if ( i == 0 ) { - /* First time through, try resetting the window */ - if ( WIN_GL_ResetWindow(this) < 0 ) { - return(-1); - } - continue; - } - SDL_SetError("Unable to set HDC pixel format"); - return(-1); - } - /* We either succeeded or failed by this point */ - break; - } - DescribePixelFormat(GL_hdc, pixel_format, sizeof(GL_pfd), &GL_pfd); + /* Choose and set the closest available pixel format */ + if (!this->gl_data->WGL_ARB_pixel_format || + !this->gl_data->wglChoosePixelFormatARB(GL_hdc, iAttribs, + fAttribs, 1, + &pixel_format, &matching) + || !matching) { + pixel_format = ChoosePixelFormat(GL_hdc, &GL_pfd); + this->gl_data->WGL_ARB_pixel_format = 0; + } + if (!pixel_format) { + SDL_SetError("No matching GL pixel format available"); + return (-1); + } + if (!SetPixelFormat(GL_hdc, pixel_format, &GL_pfd)) { + if (i == 0) { + /* First time through, try resetting the window */ + if (WIN_GL_ResetWindow(this) < 0) { + return (-1); + } + continue; + } + SDL_SetError("Unable to set HDC pixel format"); + return (-1); + } + /* We either succeeded or failed by this point */ + break; + } + DescribePixelFormat(GL_hdc, pixel_format, sizeof(GL_pfd), &GL_pfd); - GL_hrc = this->gl_data->wglCreateContext(GL_hdc); - if ( GL_hrc == NULL ) { - SDL_SetError("Unable to create GL context"); - return(-1); - } - if ( WIN_GL_MakeCurrent(this) < 0 ) { - return(-1); - } - gl_active = 1; + GL_hrc = this->gl_data->wglCreateContext(GL_hdc); + if (GL_hrc == NULL) { + SDL_SetError("Unable to create GL context"); + return (-1); + } + if (WIN_GL_MakeCurrent(this) < 0) { + return (-1); + } + gl_active = 1; - /* Vsync control under Windows. Checking glGetString here is - * somewhat a documented and reliable hack - it was originally - * as a feature added by mistake, but since so many people rely - * on it, it will not be removed. strstr should be safe here.*/ - glGetStringFunc = WIN_GL_GetProcAddress(this, "glGetString"); - if ( glGetStringFunc ) { - wglext = (const char *)glGetStringFunc(GL_EXTENSIONS); - } else { - /* Uh oh, something is seriously wrong here... */ - wglext = NULL; - } - if ( wglext && SDL_strstr(wglext, "WGL_EXT_swap_control") ) { - this->gl_data->wglSwapIntervalEXT = WIN_GL_GetProcAddress(this, "wglSwapIntervalEXT"); - this->gl_data->wglGetSwapIntervalEXT = WIN_GL_GetProcAddress(this, "wglGetSwapIntervalEXT"); - } else { - this->gl_data->wglSwapIntervalEXT = NULL; - this->gl_data->wglGetSwapIntervalEXT = NULL; - } - if ( this->gl_config.swap_control >= 0 ) { - if ( this->gl_data->wglSwapIntervalEXT ) { - this->gl_data->wglSwapIntervalEXT(this->gl_config.swap_control); - } - } + /* Vsync control under Windows. Checking glGetString here is + * somewhat a documented and reliable hack - it was originally + * as a feature added by mistake, but since so many people rely + * on it, it will not be removed. strstr should be safe here.*/ + glGetStringFunc = WIN_GL_GetProcAddress(this, "glGetString"); + if (glGetStringFunc) { + wglext = (const char *) glGetStringFunc(GL_EXTENSIONS); + } else { + /* Uh oh, something is seriously wrong here... */ + wglext = NULL; + } + if (wglext && SDL_strstr(wglext, "WGL_EXT_swap_control")) { + this->gl_data->wglSwapIntervalEXT = + WIN_GL_GetProcAddress(this, "wglSwapIntervalEXT"); + this->gl_data->wglGetSwapIntervalEXT = + WIN_GL_GetProcAddress(this, "wglGetSwapIntervalEXT"); + } else { + this->gl_data->wglSwapIntervalEXT = NULL; + this->gl_data->wglGetSwapIntervalEXT = NULL; + } + if (this->gl_config.swap_control >= 0) { + if (this->gl_data->wglSwapIntervalEXT) { + this->gl_data->wglSwapIntervalEXT(this->gl_config.swap_control); + } + } #else - SDL_SetError("WIN driver not configured with OpenGL"); + SDL_SetError("WIN driver not configured with OpenGL"); #endif - if ( gl_active ) { - retval = 0; - } else { - retval = -1; - } - return(retval); + if (gl_active) { + retval = 0; + } else { + retval = -1; + } + return (retval); } -void WIN_GL_ShutDown(_THIS) +void +WIN_GL_ShutDown(_THIS) { #if SDL_VIDEO_OPENGL - /* Clean up OpenGL */ - if ( GL_hrc ) { - this->gl_data->wglMakeCurrent(NULL, NULL); - this->gl_data->wglDeleteContext(GL_hrc); - GL_hrc = NULL; - } - if ( GL_hdc ) { - ReleaseDC(SDL_Window, GL_hdc); - GL_hdc = NULL; - } - gl_active = 0; + /* Clean up OpenGL */ + if (GL_hrc) { + this->gl_data->wglMakeCurrent(NULL, NULL); + this->gl_data->wglDeleteContext(GL_hrc); + GL_hrc = NULL; + } + if (GL_hdc) { + ReleaseDC(SDL_Window, GL_hdc); + GL_hdc = NULL; + } + gl_active = 0; - WIN_GL_UnloadLibrary(this); + WIN_GL_UnloadLibrary(this); #endif /* SDL_VIDEO_OPENGL */ } #if SDL_VIDEO_OPENGL /* Make the current context active */ -int WIN_GL_MakeCurrent(_THIS) +int +WIN_GL_MakeCurrent(_THIS) { - int retval; + int retval; - retval = 0; - if ( ! this->gl_data->wglMakeCurrent(GL_hdc, GL_hrc) ) { - SDL_SetError("Unable to make GL context current"); - retval = -1; - } - return(retval); + retval = 0; + if (!this->gl_data->wglMakeCurrent(GL_hdc, GL_hrc)) { + SDL_SetError("Unable to make GL context current"); + retval = -1; + } + return (retval); } /* Get attribute data from glX. */ -int WIN_GL_GetAttribute(_THIS, SDL_GLattr attrib, int* value) +int +WIN_GL_GetAttribute(_THIS, SDL_GLattr attrib, int *value) { - int retval; - - if ( this->gl_data->WGL_ARB_pixel_format ) { - int wgl_attrib; + int retval; + + if (this->gl_data->WGL_ARB_pixel_format) { + int wgl_attrib; - switch(attrib) { - case SDL_GL_RED_SIZE: - wgl_attrib = WGL_RED_BITS_ARB; - break; - case SDL_GL_GREEN_SIZE: - wgl_attrib = WGL_GREEN_BITS_ARB; - break; - case SDL_GL_BLUE_SIZE: - wgl_attrib = WGL_BLUE_BITS_ARB; - break; - case SDL_GL_ALPHA_SIZE: - wgl_attrib = WGL_ALPHA_BITS_ARB; - break; - case SDL_GL_DOUBLEBUFFER: - wgl_attrib = WGL_DOUBLE_BUFFER_ARB; - break; - case SDL_GL_BUFFER_SIZE: - wgl_attrib = WGL_COLOR_BITS_ARB; - break; - case SDL_GL_DEPTH_SIZE: - wgl_attrib = WGL_DEPTH_BITS_ARB; - break; - case SDL_GL_STENCIL_SIZE: - wgl_attrib = WGL_STENCIL_BITS_ARB; - break; - case SDL_GL_ACCUM_RED_SIZE: - wgl_attrib = WGL_ACCUM_RED_BITS_ARB; - break; - case SDL_GL_ACCUM_GREEN_SIZE: - wgl_attrib = WGL_ACCUM_GREEN_BITS_ARB; - break; - case SDL_GL_ACCUM_BLUE_SIZE: - wgl_attrib = WGL_ACCUM_BLUE_BITS_ARB; - break; - case SDL_GL_ACCUM_ALPHA_SIZE: - wgl_attrib = WGL_ACCUM_ALPHA_BITS_ARB; - break; - case SDL_GL_STEREO: - wgl_attrib = WGL_STEREO_ARB; - break; - case SDL_GL_MULTISAMPLEBUFFERS: - wgl_attrib = WGL_SAMPLE_BUFFERS_ARB; - break; - case SDL_GL_MULTISAMPLESAMPLES: - wgl_attrib = WGL_SAMPLES_ARB; - break; - case SDL_GL_ACCELERATED_VISUAL: - wgl_attrib = WGL_ACCELERATION_ARB; - this->gl_data->wglGetPixelFormatAttribivARB(GL_hdc, pixel_format, 0, 1, &wgl_attrib, value); - if ( *value == WGL_NO_ACCELERATION_ARB ) { - *value = SDL_FALSE; - } else { - *value = SDL_TRUE; - } - return 0; - break; - case SDL_GL_SWAP_CONTROL: - if ( this->gl_data->wglGetSwapIntervalEXT ) { - *value = this->gl_data->wglGetSwapIntervalEXT(); - return 0; - } else { - return -1; - } - break; - default: - return(-1); - } - this->gl_data->wglGetPixelFormatAttribivARB(GL_hdc, pixel_format, 0, 1, &wgl_attrib, value); + switch (attrib) { + case SDL_GL_RED_SIZE: + wgl_attrib = WGL_RED_BITS_ARB; + break; + case SDL_GL_GREEN_SIZE: + wgl_attrib = WGL_GREEN_BITS_ARB; + break; + case SDL_GL_BLUE_SIZE: + wgl_attrib = WGL_BLUE_BITS_ARB; + break; + case SDL_GL_ALPHA_SIZE: + wgl_attrib = WGL_ALPHA_BITS_ARB; + break; + case SDL_GL_DOUBLEBUFFER: + wgl_attrib = WGL_DOUBLE_BUFFER_ARB; + break; + case SDL_GL_BUFFER_SIZE: + wgl_attrib = WGL_COLOR_BITS_ARB; + break; + case SDL_GL_DEPTH_SIZE: + wgl_attrib = WGL_DEPTH_BITS_ARB; + break; + case SDL_GL_STENCIL_SIZE: + wgl_attrib = WGL_STENCIL_BITS_ARB; + break; + case SDL_GL_ACCUM_RED_SIZE: + wgl_attrib = WGL_ACCUM_RED_BITS_ARB; + break; + case SDL_GL_ACCUM_GREEN_SIZE: + wgl_attrib = WGL_ACCUM_GREEN_BITS_ARB; + break; + case SDL_GL_ACCUM_BLUE_SIZE: + wgl_attrib = WGL_ACCUM_BLUE_BITS_ARB; + break; + case SDL_GL_ACCUM_ALPHA_SIZE: + wgl_attrib = WGL_ACCUM_ALPHA_BITS_ARB; + break; + case SDL_GL_STEREO: + wgl_attrib = WGL_STEREO_ARB; + break; + case SDL_GL_MULTISAMPLEBUFFERS: + wgl_attrib = WGL_SAMPLE_BUFFERS_ARB; + break; + case SDL_GL_MULTISAMPLESAMPLES: + wgl_attrib = WGL_SAMPLES_ARB; + break; + case SDL_GL_ACCELERATED_VISUAL: + wgl_attrib = WGL_ACCELERATION_ARB; + this->gl_data->wglGetPixelFormatAttribivARB(GL_hdc, pixel_format, + 0, 1, &wgl_attrib, + value); + if (*value == WGL_NO_ACCELERATION_ARB) { + *value = SDL_FALSE; + } else { + *value = SDL_TRUE; + } + return 0; + break; + case SDL_GL_SWAP_CONTROL: + if (this->gl_data->wglGetSwapIntervalEXT) { + *value = this->gl_data->wglGetSwapIntervalEXT(); + return 0; + } else { + return -1; + } + break; + default: + return (-1); + } + this->gl_data->wglGetPixelFormatAttribivARB(GL_hdc, pixel_format, 0, + 1, &wgl_attrib, value); - return 0; - } + return 0; + } - retval = 0; - switch ( attrib ) { - case SDL_GL_RED_SIZE: - *value = GL_pfd.cRedBits; - break; - case SDL_GL_GREEN_SIZE: - *value = GL_pfd.cGreenBits; - break; - case SDL_GL_BLUE_SIZE: - *value = GL_pfd.cBlueBits; - break; - case SDL_GL_ALPHA_SIZE: - *value = GL_pfd.cAlphaBits; - break; - case SDL_GL_DOUBLEBUFFER: - if ( GL_pfd.dwFlags & PFD_DOUBLEBUFFER ) { - *value = 1; - } else { - *value = 0; - } - break; - case SDL_GL_BUFFER_SIZE: - *value = GL_pfd.cColorBits; - break; - case SDL_GL_DEPTH_SIZE: - *value = GL_pfd.cDepthBits; - break; - case SDL_GL_STENCIL_SIZE: - *value = GL_pfd.cStencilBits; - break; - case SDL_GL_ACCUM_RED_SIZE: - *value = GL_pfd.cAccumRedBits; - break; - case SDL_GL_ACCUM_GREEN_SIZE: - *value = GL_pfd.cAccumGreenBits; - break; - case SDL_GL_ACCUM_BLUE_SIZE: - *value = GL_pfd.cAccumBlueBits; - break; - case SDL_GL_ACCUM_ALPHA_SIZE: - *value = GL_pfd.cAccumAlphaBits; - break; - case SDL_GL_STEREO: - if ( GL_pfd.dwFlags & PFD_STEREO ) { - *value = 1; - } else { - *value = 0; - } - break; - case SDL_GL_MULTISAMPLEBUFFERS: - *value = 0; - break; - case SDL_GL_MULTISAMPLESAMPLES: - *value = 1; - break; - case SDL_GL_SWAP_CONTROL: - if ( this->gl_data->wglGetSwapIntervalEXT ) { - *value = this->gl_data->wglGetSwapIntervalEXT(); - return 0; - } else { - return -1; - } - break; - default: - retval = -1; - break; - } - return retval; + retval = 0; + switch (attrib) { + case SDL_GL_RED_SIZE: + *value = GL_pfd.cRedBits; + break; + case SDL_GL_GREEN_SIZE: + *value = GL_pfd.cGreenBits; + break; + case SDL_GL_BLUE_SIZE: + *value = GL_pfd.cBlueBits; + break; + case SDL_GL_ALPHA_SIZE: + *value = GL_pfd.cAlphaBits; + break; + case SDL_GL_DOUBLEBUFFER: + if (GL_pfd.dwFlags & PFD_DOUBLEBUFFER) { + *value = 1; + } else { + *value = 0; + } + break; + case SDL_GL_BUFFER_SIZE: + *value = GL_pfd.cColorBits; + break; + case SDL_GL_DEPTH_SIZE: + *value = GL_pfd.cDepthBits; + break; + case SDL_GL_STENCIL_SIZE: + *value = GL_pfd.cStencilBits; + break; + case SDL_GL_ACCUM_RED_SIZE: + *value = GL_pfd.cAccumRedBits; + break; + case SDL_GL_ACCUM_GREEN_SIZE: + *value = GL_pfd.cAccumGreenBits; + break; + case SDL_GL_ACCUM_BLUE_SIZE: + *value = GL_pfd.cAccumBlueBits; + break; + case SDL_GL_ACCUM_ALPHA_SIZE: + *value = GL_pfd.cAccumAlphaBits; + break; + case SDL_GL_STEREO: + if (GL_pfd.dwFlags & PFD_STEREO) { + *value = 1; + } else { + *value = 0; + } + break; + case SDL_GL_MULTISAMPLEBUFFERS: + *value = 0; + break; + case SDL_GL_MULTISAMPLESAMPLES: + *value = 1; + break; + case SDL_GL_SWAP_CONTROL: + if (this->gl_data->wglGetSwapIntervalEXT) { + *value = this->gl_data->wglGetSwapIntervalEXT(); + return 0; + } else { + return -1; + } + break; + default: + retval = -1; + break; + } + return retval; } -void WIN_GL_SwapBuffers(_THIS) +void +WIN_GL_SwapBuffers(_THIS) { - SwapBuffers(GL_hdc); + SwapBuffers(GL_hdc); } -void WIN_GL_UnloadLibrary(_THIS) +void +WIN_GL_UnloadLibrary(_THIS) { - if ( this->gl_config.driver_loaded ) { - FreeLibrary((HMODULE)this->gl_config.dll_handle); + if (this->gl_config.driver_loaded) { + FreeLibrary((HMODULE) this->gl_config.dll_handle); - this->gl_data->wglGetProcAddress = NULL; - this->gl_data->wglCreateContext = NULL; - this->gl_data->wglDeleteContext = NULL; - this->gl_data->wglMakeCurrent = NULL; - this->gl_data->wglChoosePixelFormatARB = NULL; - this->gl_data->wglGetPixelFormatAttribivARB = NULL; - this->gl_data->wglSwapIntervalEXT = NULL; - this->gl_data->wglGetSwapIntervalEXT = NULL; + this->gl_data->wglGetProcAddress = NULL; + this->gl_data->wglCreateContext = NULL; + this->gl_data->wglDeleteContext = NULL; + this->gl_data->wglMakeCurrent = NULL; + this->gl_data->wglChoosePixelFormatARB = NULL; + this->gl_data->wglGetPixelFormatAttribivARB = NULL; + this->gl_data->wglSwapIntervalEXT = NULL; + this->gl_data->wglGetSwapIntervalEXT = NULL; - this->gl_config.dll_handle = NULL; - this->gl_config.driver_loaded = 0; - } + this->gl_config.dll_handle = NULL; + this->gl_config.driver_loaded = 0; + } } /* Passing a NULL path means load pointers from the application */ -int WIN_GL_LoadLibrary(_THIS, const char* path) +int +WIN_GL_LoadLibrary(_THIS, const char *path) { - HMODULE handle; + HMODULE handle; - if ( gl_active ) { - SDL_SetError("OpenGL context already created"); - return -1; - } + if (gl_active) { + SDL_SetError("OpenGL context already created"); + return -1; + } - if ( path == NULL ) { - path = DEFAULT_GL_DRIVER_PATH; - } - handle = LoadLibrary(path); - if ( handle == NULL ) { - SDL_SetError("Could not load OpenGL library"); - return -1; - } + if (path == NULL) { + path = DEFAULT_GL_DRIVER_PATH; + } + handle = LoadLibrary(path); + if (handle == NULL) { + SDL_SetError("Could not load OpenGL library"); + return -1; + } - /* Unload the old driver and reset the pointers */ - WIN_GL_UnloadLibrary(this); + /* Unload the old driver and reset the pointers */ + WIN_GL_UnloadLibrary(this); - /* Load new function pointers */ - SDL_memset(this->gl_data, 0, sizeof(*this->gl_data)); - this->gl_data->wglGetProcAddress = (void * (WINAPI *)(const char *)) - GetProcAddress(handle, "wglGetProcAddress"); - this->gl_data->wglCreateContext = (HGLRC (WINAPI *)(HDC)) - GetProcAddress(handle, "wglCreateContext"); - this->gl_data->wglDeleteContext = (BOOL (WINAPI *)(HGLRC)) - GetProcAddress(handle, "wglDeleteContext"); - this->gl_data->wglMakeCurrent = (BOOL (WINAPI *)(HDC, HGLRC)) - GetProcAddress(handle, "wglMakeCurrent"); - this->gl_data->wglSwapIntervalEXT = (void (WINAPI *)(int)) - GetProcAddress(handle, "wglSwapIntervalEXT"); - this->gl_data->wglGetSwapIntervalEXT = (int (WINAPI *)(void)) - GetProcAddress(handle, "wglGetSwapIntervalEXT"); + /* Load new function pointers */ + SDL_memset(this->gl_data, 0, sizeof(*this->gl_data)); + this->gl_data->wglGetProcAddress = (void *(WINAPI *) (const char *)) + GetProcAddress(handle, "wglGetProcAddress"); + this->gl_data->wglCreateContext = (HGLRC(WINAPI *) (HDC)) + GetProcAddress(handle, "wglCreateContext"); + this->gl_data->wglDeleteContext = (BOOL(WINAPI *) (HGLRC)) + GetProcAddress(handle, "wglDeleteContext"); + this->gl_data->wglMakeCurrent = (BOOL(WINAPI *) (HDC, HGLRC)) + GetProcAddress(handle, "wglMakeCurrent"); + this->gl_data->wglSwapIntervalEXT = (void (WINAPI *) (int)) + GetProcAddress(handle, "wglSwapIntervalEXT"); + this->gl_data->wglGetSwapIntervalEXT = (int (WINAPI *) (void)) + GetProcAddress(handle, "wglGetSwapIntervalEXT"); - if ( (this->gl_data->wglGetProcAddress == NULL) || - (this->gl_data->wglCreateContext == NULL) || - (this->gl_data->wglDeleteContext == NULL) || - (this->gl_data->wglMakeCurrent == NULL) ) { - SDL_SetError("Could not retrieve OpenGL functions"); - FreeLibrary(handle); - return -1; - } + if ((this->gl_data->wglGetProcAddress == NULL) || + (this->gl_data->wglCreateContext == NULL) || + (this->gl_data->wglDeleteContext == NULL) || + (this->gl_data->wglMakeCurrent == NULL)) { + SDL_SetError("Could not retrieve OpenGL functions"); + FreeLibrary(handle); + return -1; + } - this->gl_config.dll_handle = handle; - SDL_strlcpy(this->gl_config.driver_path, path, SDL_arraysize(this->gl_config.driver_path)); - this->gl_config.driver_loaded = 1; - return 0; + this->gl_config.dll_handle = handle; + SDL_strlcpy(this->gl_config.driver_path, path, + SDL_arraysize(this->gl_config.driver_path)); + this->gl_config.driver_loaded = 1; + return 0; } -void *WIN_GL_GetProcAddress(_THIS, const char* proc) +void * +WIN_GL_GetProcAddress(_THIS, const char *proc) { - void *func; + void *func; - /* This is to pick up extensions */ - func = this->gl_data->wglGetProcAddress(proc); - if ( ! func ) { - /* This is probably a normal GL function */ - func = GetProcAddress(this->gl_config.dll_handle, proc); - } - return func; + /* This is to pick up extensions */ + func = this->gl_data->wglGetProcAddress(proc); + if (!func) { + /* This is probably a normal GL function */ + func = GetProcAddress(this->gl_config.dll_handle, proc); + } + return func; } #endif /* SDL_VIDEO_OPENGL */ + +/* vi: set ts=4 sw=4 expandtab: */