Mercurial > sdl-ios-xcode
annotate src/video/win32/SDL_win32opengl.c @ 1924:69217fdd2c0a
If the OpenGL renderer is selected for a non-OpenGL window, recreate the window with OpenGL enabled.
Added OpenGL renderer error checking.
Use fast-path texture formats in the OpenGL renderer.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sat, 22 Jul 2006 21:02:57 +0000 |
parents | 83420da906a5 |
children | 307355678142 |
rev | line source |
---|---|
1913
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1 /* |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2 SDL - Simple DirectMedia Layer |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
3 Copyright (C) 1997-2006 Sam Lantinga |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
4 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
5 This library is free software; you can redistribute it and/or |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
6 modify it under the terms of the GNU Lesser General Public |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
7 License as published by the Free Software Foundation; either |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
8 version 2.1 of the License, or (at your option) any later version. |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
9 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
10 This library is distributed in the hope that it will be useful, |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
13 Lesser General Public License for more details. |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
14 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
15 You should have received a copy of the GNU Lesser General Public |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
16 License along with this library; if not, write to the Free Software |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
18 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
19 Sam Lantinga |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
20 slouken@libsdl.org |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
21 */ |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
22 #include "SDL_config.h" |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
23 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
24 #include "SDL_win32video.h" |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
25 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
26 /* WGL implementation of SDL OpenGL support */ |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
27 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
28 #if SDL_VIDEO_OPENGL |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
29 #include "SDL_opengl.h" |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
30 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
31 #define DEFAULT_GL_DRIVER_PATH "OPENGL32.DLL" |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
32 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
33 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
34 int |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
35 WIN_GL_LoadLibrary(_THIS, const char *path) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
36 { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
37 LPTSTR wpath; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
38 HANDLE handle; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
39 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
40 if (_this->gl_config.driver_loaded) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
41 if (path) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
42 SDL_SetError("OpenGL library already loaded"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
43 return -1; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
44 } else { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
45 ++_this->gl_config.driver_loaded; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
46 return 0; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
47 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
48 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
49 if (path == NULL) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
50 path = DEFAULT_GL_DRIVER_PATH; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
51 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
52 wpath = WIN_UTF8ToString(path); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
53 handle = LoadLibrary(wpath); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
54 SDL_free(wpath); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
55 if (!handle) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
56 char message[1024]; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
57 SDL_snprintf(message, SDL_arraysize(message), "LoadLibrary(\"%s\")", |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
58 path); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
59 WIN_SetError(message); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
60 return -1; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
61 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
62 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
63 /* Load function pointers */ |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
64 _this->gl_data->wglGetProcAddress = (void *(WINAPI *) (const char *)) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
65 GetProcAddress(handle, "wglGetProcAddress"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
66 _this->gl_data->wglCreateContext = (HGLRC(WINAPI *) (HDC)) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
67 GetProcAddress(handle, "wglCreateContext"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
68 _this->gl_data->wglDeleteContext = (BOOL(WINAPI *) (HGLRC)) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
69 GetProcAddress(handle, "wglDeleteContext"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
70 _this->gl_data->wglMakeCurrent = (BOOL(WINAPI *) (HDC, HGLRC)) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
71 GetProcAddress(handle, "wglMakeCurrent"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
72 _this->gl_data->wglSwapIntervalEXT = (void (WINAPI *) (int)) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
73 GetProcAddress(handle, "wglSwapIntervalEXT"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
74 _this->gl_data->wglGetSwapIntervalEXT = (int (WINAPI *) (void)) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
75 GetProcAddress(handle, "wglGetSwapIntervalEXT"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
76 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
77 if (!_this->gl_data->wglGetProcAddress || |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
78 !_this->gl_data->wglCreateContext || |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
79 !_this->gl_data->wglDeleteContext || |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
80 !_this->gl_data->wglMakeCurrent) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
81 SDL_SetError("Could not retrieve OpenGL functions"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
82 FreeLibrary(handle); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
83 return -1; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
84 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
85 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
86 _this->gl_config.dll_handle = handle; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
87 SDL_strlcpy(_this->gl_config.driver_path, path, |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
88 SDL_arraysize(_this->gl_config.driver_path)); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
89 _this->gl_config.driver_loaded = 1; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
90 return 0; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
91 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
92 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
93 void * |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
94 WIN_GL_GetProcAddress(_THIS, const char *proc) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
95 { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
96 void *func; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
97 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
98 /* This is to pick up extensions */ |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
99 func = _this->gl_data->wglGetProcAddress(proc); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
100 if (!func) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
101 /* This is probably a normal GL function */ |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
102 func = GetProcAddress(_this->gl_config.dll_handle, proc); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
103 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
104 return func; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
105 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
106 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
107 static void |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
108 WIN_GL_UnloadLibrary(_THIS) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
109 { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
110 if (_this->gl_config.driver_loaded > 0) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
111 if (--_this->gl_config.driver_loaded > 0) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
112 return; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
113 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
114 FreeLibrary((HMODULE) _this->gl_config.dll_handle); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
115 _this->gl_config.dll_handle = NULL; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
116 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
117 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
118 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
119 static void |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
120 WIN_GL_SetupPixelFormat(_THIS, PIXELFORMATDESCRIPTOR * pfd) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
121 { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
122 SDL_zerop(pfd); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
123 pfd->nSize = sizeof(*pfd); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
124 pfd->nVersion = 1; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
125 pfd->dwFlags = (PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
126 if (_this->gl_config.double_buffer) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
127 pfd->dwFlags |= PFD_DOUBLEBUFFER; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
128 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
129 if (_this->gl_config.stereo) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
130 pfd->dwFlags |= PFD_STEREO; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
131 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
132 pfd->iLayerType = PFD_MAIN_PLANE; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
133 pfd->iPixelType = PFD_TYPE_RGBA; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
134 pfd->cRedBits = _this->gl_config.red_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
135 pfd->cGreenBits = _this->gl_config.green_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
136 pfd->cBlueBits = _this->gl_config.blue_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
137 pfd->cAlphaBits = _this->gl_config.alpha_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
138 if (_this->gl_config.buffer_size) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
139 pfd->cColorBits = |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
140 _this->gl_config.buffer_size - _this->gl_config.alpha_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
141 } else { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
142 pfd->cColorBits = (pfd->cRedBits + pfd->cGreenBits + pfd->cBlueBits); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
143 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
144 pfd->cAccumRedBits = _this->gl_config.accum_red_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
145 pfd->cAccumGreenBits = _this->gl_config.accum_green_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
146 pfd->cAccumBlueBits = _this->gl_config.accum_blue_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
147 pfd->cAccumAlphaBits = _this->gl_config.accum_alpha_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
148 pfd->cAccumBits = |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
149 (pfd->cAccumRedBits + pfd->cAccumGreenBits + pfd->cAccumBlueBits + |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
150 pfd->cAccumAlphaBits); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
151 pfd->cDepthBits = _this->gl_config.depth_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
152 pfd->cStencilBits = _this->gl_config.stencil_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
153 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
154 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
155 static SDL_bool |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
156 HasExtension(const char *extension, const char *extensions) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
157 { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
158 const char *start; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
159 const char *where, *terminator; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
160 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
161 /* Extension names should not have spaces. */ |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
162 where = SDL_strchr(extension, ' '); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
163 if (where || *extension == '\0') |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
164 return SDL_FALSE; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
165 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
166 if (!extensions) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
167 return SDL_FALSE; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
168 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
169 /* It takes a bit of care to be fool-proof about parsing the |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
170 * OpenGL extensions string. Don't be fooled by sub-strings, |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
171 * etc. */ |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
172 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
173 start = extensions; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
174 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
175 for (;;) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
176 where = SDL_strstr(start, extension); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
177 if (!where) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
178 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
179 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
180 terminator = where + SDL_strlen(extension); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
181 if (where == start || *(where - 1) == ' ') |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
182 if (*terminator == ' ' || *terminator == '\0') |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
183 return SDL_TRUE; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
184 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
185 start = terminator; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
186 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
187 return SDL_FALSE; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
188 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
189 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
190 static void |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
191 WIN_GL_InitExtensions(_THIS) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
192 { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
193 HWND hwnd; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
194 HDC hdc; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
195 PIXELFORMATDESCRIPTOR pfd; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
196 int pixel_format; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
197 HGLRC hglrc; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
198 const char *(WINAPI * wglGetExtensionsStringARB) (HDC) = 0; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
199 const GLubyte *(WINAPI * glGetStringFunc) (GLenum); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
200 const char *extensions; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
201 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
202 hwnd = |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
203 CreateWindow(SDL_Appname, SDL_Appname, (WS_POPUP | WS_DISABLED), 0, 0, |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
204 10, 10, NULL, NULL, SDL_Instance, NULL); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
205 WIN_PumpEvents(_this); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
206 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
207 hdc = GetDC(hwnd); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
208 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
209 WIN_GL_SetupPixelFormat(_this, &pfd); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
210 pixel_format = ChoosePixelFormat(hdc, &pfd); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
211 SetPixelFormat(hdc, pixel_format, &pfd); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
212 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
213 hglrc = _this->gl_data->wglCreateContext(hdc); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
214 if (hglrc) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
215 _this->gl_data->wglMakeCurrent(hdc, hglrc); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
216 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
217 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
218 wglGetExtensionsStringARB = (const char *(WINAPI *) (HDC)) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
219 _this->gl_data->wglGetProcAddress("wglGetExtensionsStringARB"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
220 if (wglGetExtensionsStringARB) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
221 extensions = wglGetExtensionsStringARB(hdc); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
222 } else { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
223 extensions = NULL; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
224 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
225 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
226 /* Check for WGL_ARB_pixel_format */ |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
227 _this->gl_data->WGL_ARB_pixel_format = 0; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
228 if (HasExtension("WGL_ARB_pixel_format", extensions)) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
229 _this->gl_data->wglChoosePixelFormatARB = (BOOL(WINAPI *) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
230 (HDC, const int *, |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
231 const FLOAT *, UINT, |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
232 int *, UINT *)) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
233 WIN_GL_GetProcAddress(_this, "wglChoosePixelFormatARB"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
234 _this->gl_data->wglGetPixelFormatAttribivARB = |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
235 (BOOL(WINAPI *) (HDC, int, int, UINT, const int *, int *)) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
236 WIN_GL_GetProcAddress(_this, "wglGetPixelFormatAttribivARB"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
237 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
238 if ((_this->gl_data->wglChoosePixelFormatARB != NULL) && |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
239 (_this->gl_data->wglGetPixelFormatAttribivARB != NULL)) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
240 _this->gl_data->WGL_ARB_pixel_format = 1; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
241 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
242 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
243 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
244 glGetStringFunc = WIN_GL_GetProcAddress(_this, "glGetString"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
245 if (glGetStringFunc) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
246 extensions = (const char *) glGetStringFunc(GL_EXTENSIONS); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
247 } else { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
248 /* Uh oh, something is seriously wrong here... */ |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
249 extensions = NULL; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
250 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
251 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
252 /* Check for WGL_EXT_swap_control */ |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
253 if (HasExtension("WGL_EXT_swap_control", extensions)) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
254 _this->gl_data->wglSwapIntervalEXT = |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
255 WIN_GL_GetProcAddress(_this, "wglSwapIntervalEXT"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
256 _this->gl_data->wglGetSwapIntervalEXT = |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
257 WIN_GL_GetProcAddress(_this, "wglGetSwapIntervalEXT"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
258 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
259 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
260 if (hglrc) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
261 _this->gl_data->wglMakeCurrent(NULL, NULL); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
262 _this->gl_data->wglDeleteContext(hglrc); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
263 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
264 ReleaseDC(hwnd, hdc); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
265 DestroyWindow(hwnd); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
266 WIN_PumpEvents(_this); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
267 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
268 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
269 static void |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
270 WIN_GL_Shutdown(_THIS) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
271 { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
272 if (!_this->gl_data || (--_this->gl_data->initialized > 0)) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
273 return; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
274 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
275 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
276 WIN_GL_UnloadLibrary(_this); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
277 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
278 SDL_free(_this->gl_data); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
279 _this->gl_data = NULL; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
280 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
281 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
282 static int |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
283 WIN_GL_Initialize(_THIS) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
284 { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
285 if (_this->gl_data) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
286 ++_this->gl_data->initialized; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
287 return 0; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
288 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
289 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
290 _this->gl_data = |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
291 (struct SDL_GLDriverData *) SDL_calloc(1, |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
292 sizeof(struct |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
293 SDL_GLDriverData)); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
294 if (!_this->gl_data) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
295 SDL_OutOfMemory(); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
296 return -1; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
297 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
298 _this->gl_data->initialized = 1; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
299 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
300 if (WIN_GL_LoadLibrary(_this, NULL) < 0) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
301 return -1; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
302 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
303 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
304 /* Initialize extensions */ |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
305 WIN_GL_InitExtensions(_this); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
306 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
307 return 0; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
308 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
309 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
310 int |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
311 WIN_GL_SetupWindow(_THIS, SDL_Window * window) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
312 { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
313 HDC hdc = ((SDL_WindowData *) window->driverdata)->hdc; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
314 PIXELFORMATDESCRIPTOR pfd; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
315 int pixel_format; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
316 unsigned int matching; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
317 int iAttribs[64]; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
318 int *iAttr; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
319 float fAttribs[1] = { 0 }; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
320 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
321 if (WIN_GL_Initialize(_this) < 0) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
322 return -1; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
323 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
324 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
325 WIN_GL_SetupPixelFormat(_this, &pfd); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
326 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
327 /* setup WGL_ARB_pixel_format attribs */ |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
328 iAttr = &iAttribs[0]; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
329 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
330 *iAttr++ = WGL_DRAW_TO_WINDOW_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
331 *iAttr++ = GL_TRUE; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
332 *iAttr++ = WGL_ACCELERATION_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
333 *iAttr++ = WGL_FULL_ACCELERATION_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
334 *iAttr++ = WGL_RED_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
335 *iAttr++ = _this->gl_config.red_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
336 *iAttr++ = WGL_GREEN_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
337 *iAttr++ = _this->gl_config.green_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
338 *iAttr++ = WGL_BLUE_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
339 *iAttr++ = _this->gl_config.blue_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
340 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
341 if (_this->gl_config.alpha_size) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
342 *iAttr++ = WGL_ALPHA_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
343 *iAttr++ = _this->gl_config.alpha_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
344 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
345 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
346 *iAttr++ = WGL_DOUBLE_BUFFER_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
347 *iAttr++ = _this->gl_config.double_buffer; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
348 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
349 *iAttr++ = WGL_DEPTH_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
350 *iAttr++ = _this->gl_config.depth_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
351 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
352 if (_this->gl_config.stencil_size) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
353 *iAttr++ = WGL_STENCIL_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
354 *iAttr++ = _this->gl_config.stencil_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
355 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
356 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
357 if (_this->gl_config.accum_red_size) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
358 *iAttr++ = WGL_ACCUM_RED_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
359 *iAttr++ = _this->gl_config.accum_red_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
360 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
361 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
362 if (_this->gl_config.accum_green_size) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
363 *iAttr++ = WGL_ACCUM_GREEN_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
364 *iAttr++ = _this->gl_config.accum_green_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
365 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
366 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
367 if (_this->gl_config.accum_blue_size) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
368 *iAttr++ = WGL_ACCUM_BLUE_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
369 *iAttr++ = _this->gl_config.accum_blue_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
370 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
371 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
372 if (_this->gl_config.accum_alpha_size) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
373 *iAttr++ = WGL_ACCUM_ALPHA_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
374 *iAttr++ = _this->gl_config.accum_alpha_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
375 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
376 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
377 if (_this->gl_config.stereo) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
378 *iAttr++ = WGL_STEREO_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
379 *iAttr++ = GL_TRUE; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
380 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
381 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
382 if (_this->gl_config.multisamplebuffers) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
383 *iAttr++ = WGL_SAMPLE_BUFFERS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
384 *iAttr++ = _this->gl_config.multisamplebuffers; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
385 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
386 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
387 if (_this->gl_config.multisamplesamples) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
388 *iAttr++ = WGL_SAMPLES_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
389 *iAttr++ = _this->gl_config.multisamplesamples; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
390 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
391 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
392 if (_this->gl_config.accelerated >= 0) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
393 *iAttr++ = WGL_ACCELERATION_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
394 *iAttr++ = |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
395 (_this->gl_config. |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
396 accelerated ? WGL_GENERIC_ACCELERATION_ARB : |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
397 WGL_NO_ACCELERATION_ARB); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
398 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
399 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
400 *iAttr = 0; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
401 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
402 /* Choose and set the closest available pixel format */ |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
403 if (!_this->gl_data->WGL_ARB_pixel_format |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
404 || !_this->gl_data->wglChoosePixelFormatARB(hdc, iAttribs, fAttribs, |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
405 1, &pixel_format, |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
406 &matching) || !matching) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
407 pixel_format = ChoosePixelFormat(hdc, &pfd); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
408 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
409 if (!pixel_format) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
410 SDL_SetError("No matching GL pixel format available"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
411 return -1; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
412 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
413 if (!SetPixelFormat(hdc, pixel_format, &pfd)) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
414 WIN_SetError("SetPixelFormat()"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
415 return (-1); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
416 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
417 return 0; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
418 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
419 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
420 void |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
421 WIN_GL_CleanupWindow(_THIS, SDL_Window * window) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
422 { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
423 WIN_GL_Shutdown(_this); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
424 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
425 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
426 int |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
427 WIN_GL_GetWindowAttribute(_THIS, SDL_Window * window, SDL_GLattr attrib, |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
428 int *value) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
429 { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
430 HDC hdc = ((SDL_WindowData *) window->driverdata)->hdc; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
431 int pixel_format; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
432 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
433 pixel_format = GetPixelFormat(hdc); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
434 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
435 if (_this->gl_data->WGL_ARB_pixel_format) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
436 int wgl_attrib; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
437 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
438 switch (attrib) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
439 case SDL_GL_RED_SIZE: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
440 wgl_attrib = WGL_RED_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
441 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
442 case SDL_GL_GREEN_SIZE: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
443 wgl_attrib = WGL_GREEN_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
444 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
445 case SDL_GL_BLUE_SIZE: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
446 wgl_attrib = WGL_BLUE_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
447 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
448 case SDL_GL_ALPHA_SIZE: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
449 wgl_attrib = WGL_ALPHA_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
450 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
451 case SDL_GL_DOUBLEBUFFER: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
452 wgl_attrib = WGL_DOUBLE_BUFFER_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
453 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
454 case SDL_GL_BUFFER_SIZE: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
455 wgl_attrib = WGL_COLOR_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
456 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
457 case SDL_GL_DEPTH_SIZE: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
458 wgl_attrib = WGL_DEPTH_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
459 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
460 case SDL_GL_STENCIL_SIZE: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
461 wgl_attrib = WGL_STENCIL_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
462 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
463 case SDL_GL_ACCUM_RED_SIZE: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
464 wgl_attrib = WGL_ACCUM_RED_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
465 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
466 case SDL_GL_ACCUM_GREEN_SIZE: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
467 wgl_attrib = WGL_ACCUM_GREEN_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
468 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
469 case SDL_GL_ACCUM_BLUE_SIZE: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
470 wgl_attrib = WGL_ACCUM_BLUE_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
471 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
472 case SDL_GL_ACCUM_ALPHA_SIZE: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
473 wgl_attrib = WGL_ACCUM_ALPHA_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
474 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
475 case SDL_GL_STEREO: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
476 wgl_attrib = WGL_STEREO_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
477 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
478 case SDL_GL_MULTISAMPLEBUFFERS: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
479 wgl_attrib = WGL_SAMPLE_BUFFERS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
480 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
481 case SDL_GL_MULTISAMPLESAMPLES: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
482 wgl_attrib = WGL_SAMPLES_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
483 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
484 case SDL_GL_ACCELERATED_VISUAL: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
485 wgl_attrib = WGL_ACCELERATION_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
486 _this->gl_data->wglGetPixelFormatAttribivARB(hdc, pixel_format, 0, |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
487 1, &wgl_attrib, |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
488 value); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
489 if (*value == WGL_NO_ACCELERATION_ARB) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
490 *value = SDL_FALSE; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
491 } else { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
492 *value = SDL_TRUE; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
493 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
494 return 0; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
495 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
496 default: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
497 return (-1); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
498 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
499 _this->gl_data->wglGetPixelFormatAttribivARB(hdc, pixel_format, 0, 1, |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
500 &wgl_attrib, value); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
501 return 0; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
502 } else { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
503 PIXELFORMATDESCRIPTOR pfd; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
504 int retval; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
505 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
506 if (!DescribePixelFormat(hdc, pixel_format, sizeof(pfd), &pfd)) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
507 WIN_SetError("DescribePixelFormat()"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
508 return -1; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
509 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
510 retval = 0; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
511 switch (attrib) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
512 case SDL_GL_RED_SIZE: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
513 *value = pfd.cRedBits; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
514 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
515 case SDL_GL_GREEN_SIZE: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
516 *value = pfd.cGreenBits; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
517 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
518 case SDL_GL_BLUE_SIZE: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
519 *value = pfd.cBlueBits; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
520 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
521 case SDL_GL_ALPHA_SIZE: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
522 *value = pfd.cAlphaBits; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
523 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
524 case SDL_GL_DOUBLEBUFFER: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
525 if (pfd.dwFlags & PFD_DOUBLEBUFFER) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
526 *value = 1; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
527 } else { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
528 *value = 0; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
529 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
530 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
531 case SDL_GL_BUFFER_SIZE: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
532 *value = pfd.cColorBits; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
533 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
534 case SDL_GL_DEPTH_SIZE: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
535 *value = pfd.cDepthBits; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
536 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
537 case SDL_GL_STENCIL_SIZE: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
538 *value = pfd.cStencilBits; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
539 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
540 case SDL_GL_ACCUM_RED_SIZE: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
541 *value = pfd.cAccumRedBits; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
542 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
543 case SDL_GL_ACCUM_GREEN_SIZE: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
544 *value = pfd.cAccumGreenBits; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
545 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
546 case SDL_GL_ACCUM_BLUE_SIZE: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
547 *value = pfd.cAccumBlueBits; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
548 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
549 case SDL_GL_ACCUM_ALPHA_SIZE: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
550 *value = pfd.cAccumAlphaBits; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
551 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
552 case SDL_GL_STEREO: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
553 if (pfd.dwFlags & PFD_STEREO) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
554 *value = 1; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
555 } else { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
556 *value = 0; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
557 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
558 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
559 case SDL_GL_MULTISAMPLEBUFFERS: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
560 *value = 0; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
561 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
562 case SDL_GL_MULTISAMPLESAMPLES: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
563 *value = 1; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
564 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
565 default: |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
566 retval = -1; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
567 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
568 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
569 return retval; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
570 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
571 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
572 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
573 SDL_GLContext |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
574 WIN_GL_CreateContext(_THIS, SDL_Window * window) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
575 { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
576 HDC hdc = ((SDL_WindowData *) window->driverdata)->hdc; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
577 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
578 return _this->gl_data->wglCreateContext(hdc); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
579 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
580 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
581 int |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
582 WIN_GL_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
583 { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
584 HDC hdc; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
585 int status; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
586 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
587 if (window) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
588 hdc = ((SDL_WindowData *) window->driverdata)->hdc; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
589 } else { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
590 hdc = NULL; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
591 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
592 if (!_this->gl_data->wglMakeCurrent(hdc, (HGLRC) context)) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
593 WIN_SetError("wglMakeCurrent()"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
594 status = -1; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
595 } else { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
596 status = 0; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
597 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
598 return status; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
599 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
600 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
601 int |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
602 WIN_GL_SetSwapInterval(_THIS, int interval) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
603 { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
604 if (_this->gl_data->wglSwapIntervalEXT) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
605 _this->gl_data->wglSwapIntervalEXT(interval); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
606 return 0; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
607 } else { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
608 SDL_Unsupported(); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
609 return -1; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
610 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
611 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
612 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
613 int |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
614 WIN_GL_GetSwapInterval(_THIS) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
615 { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
616 if (_this->gl_data->wglGetSwapIntervalEXT) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
617 return _this->gl_data->wglGetSwapIntervalEXT(); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
618 } else { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
619 SDL_Unsupported(); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
620 return -1; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
621 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
622 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
623 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
624 void |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
625 WIN_GL_SwapWindow(_THIS, SDL_Window * window) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
626 { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
627 HDC hdc = ((SDL_WindowData *) window->driverdata)->hdc; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
628 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
629 SwapBuffers(hdc); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
630 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
631 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
632 void |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
633 WIN_GL_DeleteContext(_THIS, SDL_GLContext context) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
634 { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
635 if (context) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
636 _this->gl_data->wglDeleteContext((HGLRC) context); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
637 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
638 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
639 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
640 #endif /* SDL_VIDEO_OPENGL */ |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
641 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
642 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
643 /* vi: set ts=4 sw=4 expandtab: */ |