| 1 | /* |
| 2 | SDL - Simple DirectMedia Layer |
| 3 | Copyright (C) 1997-2009 Sam Lantinga |
| 4 | |
| 5 | This library is free software; you can redistribute it and/or |
| 6 | modify it under the terms of the GNU Lesser General Public |
| 7 | License as published by the Free Software Foundation; either |
| 8 | version 2.1 of the License, or (at your option) any later version. |
| 9 | |
| 10 | This library is distributed in the hope that it will be useful, |
| 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 13 | Lesser General Public License for more details. |
| 14 | |
| 15 | You should have received a copy of the GNU Lesser General Public |
| 16 | License along with this library; if not, write to the Free Software |
| 17 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
| 18 | |
| 19 | Sam Lantinga |
| 20 | slouken@libsdl.org |
| 21 | */ |
| 22 | #include "SDL_config.h" |
| 23 | |
| 24 | /* WGL implementation of SDL OpenGL support */ |
| 25 | |
| 26 | #include "../SDL_sysvideo.h" |
| 27 | |
| 28 | |
| 29 | struct SDL_PrivateGLData { |
| 30 | int gl_active; /* to stop switching drivers while we have a valid context */ |
| 31 | |
| 32 | #if SDL_VIDEO_OPENGL |
| 33 | PIXELFORMATDESCRIPTOR GL_pfd; |
| 34 | HDC GL_hdc; |
| 35 | HGLRC GL_hrc; |
| 36 | int pixel_format; |
| 37 | int WGL_ARB_pixel_format; |
| 38 | |
| 39 | void * (WINAPI *wglGetProcAddress)(const char *proc); |
| 40 | |
| 41 | HGLRC (WINAPI *wglCreateContext)(HDC hdc); |
| 42 | |
| 43 | BOOL (WINAPI *wglDeleteContext)(HGLRC hglrc); |
| 44 | |
| 45 | BOOL (WINAPI *wglMakeCurrent)(HDC hdc, HGLRC hglrc); |
| 46 | |
| 47 | BOOL (WINAPI *wglGetPixelFormatAttribivARB)(HDC hdc, int iPixelFormat, |
| 48 | int iLayerPlane, |
| 49 | UINT nAttributes, |
| 50 | const int *piAttributes, |
| 51 | int *piValues); |
| 52 | void (WINAPI *wglSwapIntervalEXT)(int interval); |
| 53 | int (WINAPI *wglGetSwapIntervalEXT)(void); |
| 54 | #endif /* SDL_VIDEO_OPENGL */ |
| 55 | }; |
| 56 | |
| 57 | /* Old variable names */ |
| 58 | #define gl_active (this->gl_data->gl_active) |
| 59 | #define GL_pfd (this->gl_data->GL_pfd) |
| 60 | #define GL_hdc (this->gl_data->GL_hdc) |
| 61 | #define GL_hrc (this->gl_data->GL_hrc) |
| 62 | #define pixel_format (this->gl_data->pixel_format) |
| 63 | |
| 64 | /* OpenGL functions */ |
| 65 | extern int WIN_GL_SetupWindow(_THIS); |
| 66 | extern void WIN_GL_ShutDown(_THIS); |
| 67 | #if SDL_VIDEO_OPENGL |
| 68 | extern int WIN_GL_MakeCurrent(_THIS); |
| 69 | extern int WIN_GL_GetAttribute(_THIS, SDL_GLattr attrib, int* value); |
| 70 | extern void WIN_GL_SwapBuffers(_THIS); |
| 71 | extern void WIN_GL_UnloadLibrary(_THIS); |
| 72 | extern int WIN_GL_LoadLibrary(_THIS, const char* path); |
| 73 | extern void *WIN_GL_GetProcAddress(_THIS, const char* proc); |
| 74 | #endif |
| 75 | |
| 76 | #if SDL_VIDEO_OPENGL |
| 77 | |
| 78 | #ifndef WGL_ARB_pixel_format |
| 79 | #define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000 |
| 80 | #define WGL_DRAW_TO_WINDOW_ARB 0x2001 |
| 81 | #define WGL_DRAW_TO_BITMAP_ARB 0x2002 |
| 82 | #define WGL_ACCELERATION_ARB 0x2003 |
| 83 | #define WGL_NEED_PALETTE_ARB 0x2004 |
| 84 | #define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005 |
| 85 | #define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006 |
| 86 | #define WGL_SWAP_METHOD_ARB 0x2007 |
| 87 | #define WGL_NUMBER_OVERLAYS_ARB 0x2008 |
| 88 | #define WGL_NUMBER_UNDERLAYS_ARB 0x2009 |
| 89 | #define WGL_TRANSPARENT_ARB 0x200A |
| 90 | #define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037 |
| 91 | #define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038 |
| 92 | #define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039 |
| 93 | #define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A |
| 94 | #define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B |
| 95 | #define WGL_SHARE_DEPTH_ARB 0x200C |
| 96 | #define WGL_SHARE_STENCIL_ARB 0x200D |
| 97 | #define WGL_SHARE_ACCUM_ARB 0x200E |
| 98 | #define WGL_SUPPORT_GDI_ARB 0x200F |
| 99 | #define WGL_SUPPORT_OPENGL_ARB 0x2010 |
| 100 | #define WGL_DOUBLE_BUFFER_ARB 0x2011 |
| 101 | #define WGL_STEREO_ARB 0x2012 |
| 102 | #define WGL_PIXEL_TYPE_ARB 0x2013 |
| 103 | #define WGL_COLOR_BITS_ARB 0x2014 |
| 104 | #define WGL_RED_BITS_ARB 0x2015 |
| 105 | #define WGL_RED_SHIFT_ARB 0x2016 |
| 106 | #define WGL_GREEN_BITS_ARB 0x2017 |
| 107 | #define WGL_GREEN_SHIFT_ARB 0x2018 |
| 108 | #define WGL_BLUE_BITS_ARB 0x2019 |
| 109 | #define WGL_BLUE_SHIFT_ARB 0x201A |
| 110 | #define WGL_ALPHA_BITS_ARB 0x201B |
| 111 | #define WGL_ALPHA_SHIFT_ARB 0x201C |
| 112 | #define WGL_ACCUM_BITS_ARB 0x201D |
| 113 | #define WGL_ACCUM_RED_BITS_ARB 0x201E |
| 114 | #define WGL_ACCUM_GREEN_BITS_ARB 0x201F |
| 115 | #define WGL_ACCUM_BLUE_BITS_ARB 0x2020 |
| 116 | #define WGL_ACCUM_ALPHA_BITS_ARB 0x2021 |
| 117 | #define WGL_DEPTH_BITS_ARB 0x2022 |
| 118 | #define WGL_STENCIL_BITS_ARB 0x2023 |
| 119 | #define WGL_AUX_BUFFERS_ARB 0x2024 |
| 120 | #define WGL_NO_ACCELERATION_ARB 0x2025 |
| 121 | #define WGL_GENERIC_ACCELERATION_ARB 0x2026 |
| 122 | #define WGL_FULL_ACCELERATION_ARB 0x2027 |
| 123 | #define WGL_SWAP_EXCHANGE_ARB 0x2028 |
| 124 | #define WGL_SWAP_COPY_ARB 0x2029 |
| 125 | #define WGL_SWAP_UNDEFINED_ARB 0x202A |
| 126 | #define WGL_TYPE_RGBA_ARB 0x202B |
| 127 | #define WGL_TYPE_COLORINDEX_ARB 0x202C |
| 128 | #endif |
| 129 | |
| 130 | #ifndef WGL_ARB_multisample |
| 131 | #define WGL_SAMPLE_BUFFERS_ARB 0x2041 |
| 132 | #define WGL_SAMPLES_ARB 0x2042 |
| 133 | #endif |
| 134 | |
| 135 | #endif |