• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2     SDL - Simple DirectMedia Layer
3     Copyright (C) 1997-2012 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
136