e14743d1 |
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 |