2 SDL - Simple DirectMedia Layer
3 Copyright (C) 1997-2009 Sam Lantinga
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.
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.
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
22 #include "SDL_config.h"
24 /* WGL implementation of SDL OpenGL support */
26 #include "../SDL_sysvideo.h"
29 struct SDL_PrivateGLData {
30 int gl_active; /* to stop switching drivers while we have a valid context */
33 PIXELFORMATDESCRIPTOR GL_pfd;
37 int WGL_ARB_pixel_format;
39 void * (WINAPI *wglGetProcAddress)(const char *proc);
41 HGLRC (WINAPI *wglCreateContext)(HDC hdc);
43 BOOL (WINAPI *wglDeleteContext)(HGLRC hglrc);
45 BOOL (WINAPI *wglMakeCurrent)(HDC hdc, HGLRC hglrc);
47 BOOL (WINAPI *wglGetPixelFormatAttribivARB)(HDC hdc, int iPixelFormat,
50 const int *piAttributes,
52 void (WINAPI *wglSwapIntervalEXT)(int interval);
53 int (WINAPI *wglGetSwapIntervalEXT)(void);
54 #endif /* SDL_VIDEO_OPENGL */
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)
64 /* OpenGL functions */
65 extern int WIN_GL_SetupWindow(_THIS);
66 extern void WIN_GL_ShutDown(_THIS);
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);
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
130 #ifndef WGL_ARB_multisample
131 #define WGL_SAMPLE_BUFFERS_ARB 0x2041
132 #define WGL_SAMPLES_ARB 0x2042