Mercurial > sdl-ios-xcode
annotate src/video/win32/SDL_win32opengl.c @ 3057:089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Make sure OpenGL library is loaded before working with OpenGL windows,
even those created with SDL_CreateWindowFrom()
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 09 Feb 2009 05:32:12 +0000 |
parents | 99210400e8b9 |
children | 7dc982143c06 |
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 |
2859 | 3 Copyright (C) 1997-2009 Sam Lantinga |
1913
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 |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1936
diff
changeset
|
28 #if SDL_VIDEO_OPENGL_WGL |
1913
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 |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1936
diff
changeset
|
31 #define DEFAULT_OPENGL "OPENGL32.DLL" |
1913
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 (path == NULL) { |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1936
diff
changeset
|
41 path = SDL_getenv("SDL_OPENGL_LIBRARY"); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1936
diff
changeset
|
42 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1936
diff
changeset
|
43 if (path == NULL) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1936
diff
changeset
|
44 path = DEFAULT_OPENGL; |
1913
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
45 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
46 wpath = WIN_UTF8ToString(path); |
3057
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
47 _this->gl_config.dll_handle = LoadLibrary(wpath); |
1913
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
48 SDL_free(wpath); |
3057
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
49 if (!_this->gl_config.dll_handle) { |
1913
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
50 char message[1024]; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
51 SDL_snprintf(message, SDL_arraysize(message), "LoadLibrary(\"%s\")", |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
52 path); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
53 WIN_SetError(message); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
54 return -1; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
55 } |
3057
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
56 SDL_strlcpy(_this->gl_config.driver_path, path, |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
57 SDL_arraysize(_this->gl_config.driver_path)); |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
58 |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
59 /* Allocate OpenGL memory */ |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
60 _this->gl_data = |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
61 (struct SDL_GLDriverData *) SDL_calloc(1, |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
62 sizeof(struct |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
63 SDL_GLDriverData)); |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
64 if (!_this->gl_data) { |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
65 SDL_OutOfMemory(); |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
66 return -1; |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
67 } |
1913
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
68 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
69 /* Load function pointers */ |
3057
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
70 handle = _this->gl_config.dll_handle; |
1913
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
71 _this->gl_data->wglGetProcAddress = (void *(WINAPI *) (const char *)) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
72 GetProcAddress(handle, "wglGetProcAddress"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
73 _this->gl_data->wglCreateContext = (HGLRC(WINAPI *) (HDC)) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
74 GetProcAddress(handle, "wglCreateContext"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
75 _this->gl_data->wglDeleteContext = (BOOL(WINAPI *) (HGLRC)) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
76 GetProcAddress(handle, "wglDeleteContext"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
77 _this->gl_data->wglMakeCurrent = (BOOL(WINAPI *) (HDC, HGLRC)) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
78 GetProcAddress(handle, "wglMakeCurrent"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
79 _this->gl_data->wglSwapIntervalEXT = (void (WINAPI *) (int)) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
80 GetProcAddress(handle, "wglSwapIntervalEXT"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
81 _this->gl_data->wglGetSwapIntervalEXT = (int (WINAPI *) (void)) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
82 GetProcAddress(handle, "wglGetSwapIntervalEXT"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
83 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
84 if (!_this->gl_data->wglGetProcAddress || |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
85 !_this->gl_data->wglCreateContext || |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
86 !_this->gl_data->wglDeleteContext || |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
87 !_this->gl_data->wglMakeCurrent) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
88 SDL_SetError("Could not retrieve OpenGL functions"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
89 FreeLibrary(handle); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
90 return -1; |
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 return 0; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
94 } |
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 * |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
97 WIN_GL_GetProcAddress(_THIS, const char *proc) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
98 { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
99 void *func; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
100 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
101 /* This is to pick up extensions */ |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
102 func = _this->gl_data->wglGetProcAddress(proc); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
103 if (!func) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
104 /* This is probably a normal GL function */ |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
105 func = GetProcAddress(_this->gl_config.dll_handle, proc); |
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 return func; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
108 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
109 |
3057
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
110 void |
1913
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
111 WIN_GL_UnloadLibrary(_THIS) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
112 { |
3057
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
113 FreeLibrary((HMODULE) _this->gl_config.dll_handle); |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
114 _this->gl_config.dll_handle = NULL; |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
115 |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
116 /* Free OpenGL memory */ |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
117 SDL_free(_this->gl_data); |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
118 _this->gl_data = NULL; |
1913
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
119 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
120 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
121 static void |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
122 WIN_GL_SetupPixelFormat(_THIS, PIXELFORMATDESCRIPTOR * pfd) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
123 { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
124 SDL_zerop(pfd); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
125 pfd->nSize = sizeof(*pfd); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
126 pfd->nVersion = 1; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
127 pfd->dwFlags = (PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
128 if (_this->gl_config.double_buffer) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
129 pfd->dwFlags |= PFD_DOUBLEBUFFER; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
130 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
131 if (_this->gl_config.stereo) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
132 pfd->dwFlags |= PFD_STEREO; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
133 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
134 pfd->iLayerType = PFD_MAIN_PLANE; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
135 pfd->iPixelType = PFD_TYPE_RGBA; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
136 pfd->cRedBits = _this->gl_config.red_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
137 pfd->cGreenBits = _this->gl_config.green_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
138 pfd->cBlueBits = _this->gl_config.blue_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
139 pfd->cAlphaBits = _this->gl_config.alpha_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
140 if (_this->gl_config.buffer_size) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
141 pfd->cColorBits = |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
142 _this->gl_config.buffer_size - _this->gl_config.alpha_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
143 } else { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
144 pfd->cColorBits = (pfd->cRedBits + pfd->cGreenBits + pfd->cBlueBits); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
145 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
146 pfd->cAccumRedBits = _this->gl_config.accum_red_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
147 pfd->cAccumGreenBits = _this->gl_config.accum_green_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
148 pfd->cAccumBlueBits = _this->gl_config.accum_blue_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
149 pfd->cAccumAlphaBits = _this->gl_config.accum_alpha_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
150 pfd->cAccumBits = |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
151 (pfd->cAccumRedBits + pfd->cAccumGreenBits + pfd->cAccumBlueBits + |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
152 pfd->cAccumAlphaBits); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
153 pfd->cDepthBits = _this->gl_config.depth_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
154 pfd->cStencilBits = _this->gl_config.stencil_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
155 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
156 |
2150 | 157 /* Choose the closest pixel format that meets or exceeds the target. |
158 FIXME: Should we weight any particular attribute over any other? | |
159 */ | |
160 static int | |
161 WIN_GL_ChoosePixelFormat(HDC hdc, PIXELFORMATDESCRIPTOR * target) | |
162 { | |
163 PIXELFORMATDESCRIPTOR pfd; | |
164 int count, index, best = 0; | |
165 unsigned int dist, best_dist = ~0U; | |
166 | |
167 count = DescribePixelFormat(hdc, 1, sizeof(pfd), NULL); | |
168 | |
169 for (index = 1; index <= count; index++) { | |
170 | |
171 if (!DescribePixelFormat(hdc, index, sizeof(pfd), &pfd)) { | |
172 continue; | |
173 } | |
174 | |
175 if ((pfd.dwFlags & target->dwFlags) != target->dwFlags) { | |
176 continue; | |
177 } | |
178 | |
179 if (pfd.iLayerType != target->iLayerType) { | |
180 continue; | |
181 } | |
182 if (pfd.iPixelType != target->iPixelType) { | |
183 continue; | |
184 } | |
185 | |
186 dist = 0; | |
187 | |
188 if (pfd.cColorBits < target->cColorBits) { | |
189 continue; | |
190 } else { | |
191 dist += (pfd.cColorBits - target->cColorBits); | |
192 } | |
193 if (pfd.cRedBits < target->cRedBits) { | |
194 continue; | |
195 } else { | |
196 dist += (pfd.cRedBits - target->cRedBits); | |
197 } | |
198 if (pfd.cGreenBits < target->cGreenBits) { | |
199 continue; | |
200 } else { | |
201 dist += (pfd.cGreenBits - target->cGreenBits); | |
202 } | |
203 if (pfd.cBlueBits < target->cBlueBits) { | |
204 continue; | |
205 } else { | |
206 dist += (pfd.cBlueBits - target->cBlueBits); | |
207 } | |
208 if (pfd.cAlphaBits < target->cAlphaBits) { | |
209 continue; | |
210 } else { | |
211 dist += (pfd.cAlphaBits - target->cAlphaBits); | |
212 } | |
213 if (pfd.cAccumBits < target->cAccumBits) { | |
214 continue; | |
215 } else { | |
216 dist += (pfd.cAccumBits - target->cAccumBits); | |
217 } | |
218 if (pfd.cAccumRedBits < target->cAccumRedBits) { | |
219 continue; | |
220 } else { | |
221 dist += (pfd.cAccumRedBits - target->cAccumRedBits); | |
222 } | |
223 if (pfd.cAccumGreenBits < target->cAccumGreenBits) { | |
224 continue; | |
225 } else { | |
226 dist += (pfd.cAccumGreenBits - target->cAccumGreenBits); | |
227 } | |
228 if (pfd.cAccumBlueBits < target->cAccumBlueBits) { | |
229 continue; | |
230 } else { | |
231 dist += (pfd.cAccumBlueBits - target->cAccumBlueBits); | |
232 } | |
233 if (pfd.cAccumAlphaBits < target->cAccumAlphaBits) { | |
234 continue; | |
235 } else { | |
236 dist += (pfd.cAccumAlphaBits - target->cAccumAlphaBits); | |
237 } | |
238 if (pfd.cDepthBits < target->cDepthBits) { | |
239 continue; | |
240 } else { | |
241 dist += (pfd.cDepthBits - target->cDepthBits); | |
242 } | |
243 if (pfd.cStencilBits < target->cStencilBits) { | |
244 continue; | |
245 } else { | |
246 dist += (pfd.cStencilBits - target->cStencilBits); | |
247 } | |
248 | |
249 if (dist < best_dist) { | |
250 best = index; | |
251 best_dist = dist; | |
252 } | |
253 } | |
254 | |
255 return best; | |
256 } | |
257 | |
1913
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
258 static SDL_bool |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
259 HasExtension(const char *extension, const char *extensions) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
260 { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
261 const char *start; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
262 const char *where, *terminator; |
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 /* Extension names should not have spaces. */ |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
265 where = SDL_strchr(extension, ' '); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
266 if (where || *extension == '\0') |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
267 return SDL_FALSE; |
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 if (!extensions) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
270 return SDL_FALSE; |
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 /* 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
|
273 * OpenGL extensions string. Don't be fooled by sub-strings, |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
274 * etc. */ |
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 start = extensions; |
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 for (;;) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
279 where = SDL_strstr(start, extension); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
280 if (!where) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
281 break; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
282 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
283 terminator = where + SDL_strlen(extension); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
284 if (where == start || *(where - 1) == ' ') |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
285 if (*terminator == ' ' || *terminator == '\0') |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
286 return SDL_TRUE; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
287 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
288 start = terminator; |
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 return SDL_FALSE; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
291 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
292 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
293 static void |
2178
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
294 WIN_GL_InitExtensions(_THIS, HDC hdc) |
1913
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
295 { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
296 const char *(WINAPI * wglGetExtensionsStringARB) (HDC) = 0; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
297 const char *extensions; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
298 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
299 wglGetExtensionsStringARB = (const char *(WINAPI *) (HDC)) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
300 _this->gl_data->wglGetProcAddress("wglGetExtensionsStringARB"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
301 if (wglGetExtensionsStringARB) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
302 extensions = wglGetExtensionsStringARB(hdc); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
303 } else { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
304 extensions = NULL; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
305 } |
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 /* Check for WGL_ARB_pixel_format */ |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
308 _this->gl_data->WGL_ARB_pixel_format = 0; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
309 if (HasExtension("WGL_ARB_pixel_format", extensions)) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
310 _this->gl_data->wglChoosePixelFormatARB = (BOOL(WINAPI *) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
311 (HDC, const int *, |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
312 const FLOAT *, UINT, |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
313 int *, UINT *)) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
314 WIN_GL_GetProcAddress(_this, "wglChoosePixelFormatARB"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
315 _this->gl_data->wglGetPixelFormatAttribivARB = |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
316 (BOOL(WINAPI *) (HDC, int, int, UINT, const int *, int *)) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
317 WIN_GL_GetProcAddress(_this, "wglGetPixelFormatAttribivARB"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
318 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
319 if ((_this->gl_data->wglChoosePixelFormatARB != NULL) && |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
320 (_this->gl_data->wglGetPixelFormatAttribivARB != NULL)) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
321 _this->gl_data->WGL_ARB_pixel_format = 1; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
322 } |
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 /* Check for WGL_EXT_swap_control */ |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
326 if (HasExtension("WGL_EXT_swap_control", extensions)) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
327 _this->gl_data->wglSwapIntervalEXT = |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
328 WIN_GL_GetProcAddress(_this, "wglSwapIntervalEXT"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
329 _this->gl_data->wglGetSwapIntervalEXT = |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
330 WIN_GL_GetProcAddress(_this, "wglGetSwapIntervalEXT"); |
2178
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
331 } else { |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
332 _this->gl_data->wglSwapIntervalEXT = NULL; |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
333 _this->gl_data->wglGetSwapIntervalEXT = NULL; |
1913
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
334 } |
2178
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
335 } |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
336 |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
337 static int |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
338 WIN_GL_ChoosePixelFormatARB(_THIS, int *iAttribs, float *fAttribs) |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
339 { |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
340 HWND hwnd; |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
341 HDC hdc; |
2180
5ed37b16c1a7
Yes, you need to set the pixel format before creating a context.
Sam Lantinga <slouken@libsdl.org>
parents:
2178
diff
changeset
|
342 PIXELFORMATDESCRIPTOR pfd; |
2178
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
343 HGLRC hglrc; |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
344 int pixel_format = 0; |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
345 unsigned int matching; |
1913
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
346 |
2178
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
347 hwnd = |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
348 CreateWindow(SDL_Appname, SDL_Appname, (WS_POPUP | WS_DISABLED), 0, 0, |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
349 10, 10, NULL, NULL, SDL_Instance, NULL); |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
350 WIN_PumpEvents(_this); |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
351 |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
352 hdc = GetDC(hwnd); |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
353 |
2180
5ed37b16c1a7
Yes, you need to set the pixel format before creating a context.
Sam Lantinga <slouken@libsdl.org>
parents:
2178
diff
changeset
|
354 WIN_GL_SetupPixelFormat(_this, &pfd); |
5ed37b16c1a7
Yes, you need to set the pixel format before creating a context.
Sam Lantinga <slouken@libsdl.org>
parents:
2178
diff
changeset
|
355 |
5ed37b16c1a7
Yes, you need to set the pixel format before creating a context.
Sam Lantinga <slouken@libsdl.org>
parents:
2178
diff
changeset
|
356 SetPixelFormat(hdc, ChoosePixelFormat(hdc, &pfd), &pfd); |
5ed37b16c1a7
Yes, you need to set the pixel format before creating a context.
Sam Lantinga <slouken@libsdl.org>
parents:
2178
diff
changeset
|
357 |
2178
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
358 hglrc = _this->gl_data->wglCreateContext(hdc); |
1913
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
359 if (hglrc) { |
2178
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
360 _this->gl_data->wglMakeCurrent(hdc, hglrc); |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
361 |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
362 WIN_GL_InitExtensions(_this, hdc); |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
363 |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
364 if (_this->gl_data->WGL_ARB_pixel_format) { |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
365 _this->gl_data->wglChoosePixelFormatARB(hdc, iAttribs, fAttribs, |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
366 1, &pixel_format, |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
367 &matching); |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
368 } |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
369 |
1913
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
370 _this->gl_data->wglMakeCurrent(NULL, NULL); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
371 _this->gl_data->wglDeleteContext(hglrc); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
372 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
373 ReleaseDC(hwnd, hdc); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
374 DestroyWindow(hwnd); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
375 WIN_PumpEvents(_this); |
2178
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
376 |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
377 return pixel_format; |
1913
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
378 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
379 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
380 int |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
381 WIN_GL_SetupWindow(_THIS, SDL_Window * window) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
382 { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
383 HDC hdc = ((SDL_WindowData *) window->driverdata)->hdc; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
384 PIXELFORMATDESCRIPTOR pfd; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
385 int pixel_format; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
386 int iAttribs[64]; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
387 int *iAttr; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
388 float fAttribs[1] = { 0 }; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
389 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
390 WIN_GL_SetupPixelFormat(_this, &pfd); |
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 /* setup WGL_ARB_pixel_format attribs */ |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
393 iAttr = &iAttribs[0]; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
394 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
395 *iAttr++ = WGL_DRAW_TO_WINDOW_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
396 *iAttr++ = GL_TRUE; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
397 *iAttr++ = WGL_ACCELERATION_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
398 *iAttr++ = WGL_FULL_ACCELERATION_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
399 *iAttr++ = WGL_RED_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
400 *iAttr++ = _this->gl_config.red_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
401 *iAttr++ = WGL_GREEN_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
402 *iAttr++ = _this->gl_config.green_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
403 *iAttr++ = WGL_BLUE_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
404 *iAttr++ = _this->gl_config.blue_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
405 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
406 if (_this->gl_config.alpha_size) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
407 *iAttr++ = WGL_ALPHA_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
408 *iAttr++ = _this->gl_config.alpha_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
409 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
410 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
411 *iAttr++ = WGL_DOUBLE_BUFFER_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
412 *iAttr++ = _this->gl_config.double_buffer; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
413 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
414 *iAttr++ = WGL_DEPTH_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
415 *iAttr++ = _this->gl_config.depth_size; |
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 if (_this->gl_config.stencil_size) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
418 *iAttr++ = WGL_STENCIL_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
419 *iAttr++ = _this->gl_config.stencil_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
420 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
421 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
422 if (_this->gl_config.accum_red_size) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
423 *iAttr++ = WGL_ACCUM_RED_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
424 *iAttr++ = _this->gl_config.accum_red_size; |
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 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
427 if (_this->gl_config.accum_green_size) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
428 *iAttr++ = WGL_ACCUM_GREEN_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
429 *iAttr++ = _this->gl_config.accum_green_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
430 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
431 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
432 if (_this->gl_config.accum_blue_size) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
433 *iAttr++ = WGL_ACCUM_BLUE_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
434 *iAttr++ = _this->gl_config.accum_blue_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
435 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
436 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
437 if (_this->gl_config.accum_alpha_size) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
438 *iAttr++ = WGL_ACCUM_ALPHA_BITS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
439 *iAttr++ = _this->gl_config.accum_alpha_size; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
440 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
441 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
442 if (_this->gl_config.stereo) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
443 *iAttr++ = WGL_STEREO_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
444 *iAttr++ = GL_TRUE; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
445 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
446 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
447 if (_this->gl_config.multisamplebuffers) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
448 *iAttr++ = WGL_SAMPLE_BUFFERS_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
449 *iAttr++ = _this->gl_config.multisamplebuffers; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
450 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
451 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
452 if (_this->gl_config.multisamplesamples) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
453 *iAttr++ = WGL_SAMPLES_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
454 *iAttr++ = _this->gl_config.multisamplesamples; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
455 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
456 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
457 if (_this->gl_config.accelerated >= 0) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
458 *iAttr++ = WGL_ACCELERATION_ARB; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
459 *iAttr++ = |
2735
204be4fc2726
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
2180
diff
changeset
|
460 (_this->gl_config.accelerated ? WGL_GENERIC_ACCELERATION_ARB : |
1913
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
461 WGL_NO_ACCELERATION_ARB); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
462 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
463 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
464 *iAttr = 0; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
465 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
466 /* Choose and set the closest available pixel format */ |
2178
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
467 pixel_format = WIN_GL_ChoosePixelFormatARB(_this, iAttribs, fAttribs); |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
468 if (!pixel_format) { |
2150 | 469 pixel_format = WIN_GL_ChoosePixelFormat(hdc, &pfd); |
1913
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
470 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
471 if (!pixel_format) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
472 SDL_SetError("No matching GL pixel format available"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
473 return -1; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
474 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
475 if (!SetPixelFormat(hdc, pixel_format, &pfd)) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
476 WIN_SetError("SetPixelFormat()"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
477 return (-1); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
478 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
479 return 0; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
480 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
481 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
482 SDL_GLContext |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
483 WIN_GL_CreateContext(_THIS, SDL_Window * window) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
484 { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
485 HDC hdc = ((SDL_WindowData *) window->driverdata)->hdc; |
2178
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
486 HGLRC context; |
1913
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
487 |
2178
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
488 context = _this->gl_data->wglCreateContext(hdc); |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
489 if (!context) { |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
490 SDL_SetError("Could not create GL context"); |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
491 return NULL; |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
492 } |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
493 |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
494 if (WIN_GL_MakeCurrent(_this, window, context) < 0) { |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
495 WIN_GL_DeleteContext(_this, context); |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
496 return NULL; |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
497 } |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
498 |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
499 WIN_GL_InitExtensions(_this, hdc); |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
500 |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2150
diff
changeset
|
501 return context; |
1913
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
502 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
503 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
504 int |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
505 WIN_GL_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
506 { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
507 HDC hdc; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
508 int status; |
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 if (window) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
511 hdc = ((SDL_WindowData *) window->driverdata)->hdc; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
512 } else { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
513 hdc = NULL; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
514 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
515 if (!_this->gl_data->wglMakeCurrent(hdc, (HGLRC) context)) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
516 WIN_SetError("wglMakeCurrent()"); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
517 status = -1; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
518 } else { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
519 status = 0; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
520 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
521 return status; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
522 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
523 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
524 int |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
525 WIN_GL_SetSwapInterval(_THIS, int interval) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
526 { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
527 if (_this->gl_data->wglSwapIntervalEXT) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
528 _this->gl_data->wglSwapIntervalEXT(interval); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
529 return 0; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
530 } else { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
531 SDL_Unsupported(); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
532 return -1; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
533 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
534 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
535 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
536 int |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
537 WIN_GL_GetSwapInterval(_THIS) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
538 { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
539 if (_this->gl_data->wglGetSwapIntervalEXT) { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
540 return _this->gl_data->wglGetSwapIntervalEXT(); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
541 } else { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
542 SDL_Unsupported(); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
543 return -1; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
544 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
545 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
546 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
547 void |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
548 WIN_GL_SwapWindow(_THIS, SDL_Window * window) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
549 { |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
550 HDC hdc = ((SDL_WindowData *) window->driverdata)->hdc; |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
551 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
552 SwapBuffers(hdc); |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
553 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
554 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
555 void |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
556 WIN_GL_DeleteContext(_THIS, SDL_GLContext context) |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
557 { |
1936
83946ee0ff1f
Implemented OpenGL support on Mac OS X
Sam Lantinga <slouken@libsdl.org>
parents:
1926
diff
changeset
|
558 _this->gl_data->wglDeleteContext((HGLRC) context); |
1913
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
559 } |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
560 |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
1936
diff
changeset
|
561 #endif /* SDL_VIDEO_OPENGL_WGL */ |
1913
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
562 |
83420da906a5
Implemented Windows OpenGL support
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
563 /* vi: set ts=4 sw=4 expandtab: */ |