Mercurial > sdl-ios-xcode
annotate src/video/wincommon/SDL_wingl.c @ 4066:58a5055da431 SDL-1.2
More improvements for bug #373
Show the SDL cursor in the window and the arrow cursor outside the window.
This is also supposed to show the SDL cursor when activated, but that code
isn't working yet...
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sat, 14 Jul 2007 08:27:06 +0000 |
parents | 5c890883360f |
children | 01dbf7134045 |
rev | line source |
---|---|
0 | 1 /* |
2 SDL - Simple DirectMedia Layer | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1280
diff
changeset
|
3 Copyright (C) 1997-2006 Sam Lantinga |
0 | 4 |
5 This library is free software; you can redistribute it and/or | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1280
diff
changeset
|
6 modify it under the terms of the GNU Lesser General Public |
0 | 7 License as published by the Free Software Foundation; either |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1280
diff
changeset
|
8 version 2.1 of the License, or (at your option) any later version. |
0 | 9 |
10 This library is distributed in the hope that it will be useful, | |
11 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1280
diff
changeset
|
13 Lesser General Public License for more details. |
0 | 14 |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1280
diff
changeset
|
15 You should have received a copy of the GNU Lesser General Public |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1280
diff
changeset
|
16 License along with this library; if not, write to the Free Software |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1280
diff
changeset
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
0 | 18 |
19 Sam Lantinga | |
252
e8157fcb3114
Updated the source with the correct e-mail address
Sam Lantinga <slouken@libsdl.org>
parents:
0
diff
changeset
|
20 slouken@libsdl.org |
0 | 21 */ |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1379
diff
changeset
|
22 #include "SDL_config.h" |
0 | 23 |
24 /* WGL implementation of SDL OpenGL support */ | |
25 | |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
26 #if SDL_VIDEO_OPENGL |
327
13fc64213765
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
27 #include "SDL_opengl.h" |
453
a6fa62b1be09
Updated for embedded Visual C++ 4.0
Sam Lantinga <slouken@libsdl.org>
parents:
450
diff
changeset
|
28 #endif |
0 | 29 #include "SDL_lowvideo.h" |
30 #include "SDL_wingl_c.h" | |
31 | |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
32 #if SDL_VIDEO_OPENGL |
0 | 33 #define DEFAULT_GL_DRIVER_PATH "OPENGL32.DLL" |
34 #endif | |
35 | |
373
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
36 /* If setting the HDC fails, we may need to recreate the window (MSDN) */ |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
37 static int WIN_GL_ResetWindow(_THIS) |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
38 { |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
39 int status = 0; |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
40 |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
41 #ifndef _WIN32_WCE /* FIXME WinCE needs the UNICODE version of CreateWindow() */ |
1527 | 42 /* This doesn't work with DirectX code (see CVS comments) */ |
1280
f61f045343d3
Re-query the SDL_WINDOWID each time we initialize the video
Sam Lantinga <slouken@libsdl.org>
parents:
1261
diff
changeset
|
43 /* If we were passed a window, then we can't create a new one */ |
1527 | 44 if ( !SDL_windowid && SDL_strcmp(this->name, "windib") == 0 ) { |
373
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
45 /* Save the existing window attributes */ |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
46 LONG style; |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
47 RECT rect = { 0, 0, 0, 0 }; |
1480 | 48 style = GetWindowLong(SDL_Window, GWL_STYLE); |
373
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
49 GetWindowRect(SDL_Window, &rect); |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
50 DestroyWindow(SDL_Window); |
1523 | 51 WIN_FlushMessageQueue(); |
52 | |
373
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
53 SDL_Window = CreateWindow(SDL_Appname, SDL_Appname, |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
54 style, |
1316
0781906086fa
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1315
diff
changeset
|
55 rect.left, rect.top, |
0781906086fa
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1315
diff
changeset
|
56 (rect.right-rect.left)+1, |
0781906086fa
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
1315
diff
changeset
|
57 (rect.top-rect.bottom)+1, |
373
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
58 NULL, NULL, SDL_Instance, NULL); |
1523 | 59 WIN_FlushMessageQueue(); |
60 | |
373
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
61 if ( SDL_Window ) { |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
62 this->SetCaption(this, this->wm_title, this->wm_icon); |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
63 } else { |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
64 SDL_SetError("Couldn't create window"); |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
65 status = -1; |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
66 } |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
67 } else |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
68 #endif /* !_WIN32_WCE */ |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
69 { |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
70 SDL_SetError("Unable to reset window for OpenGL context"); |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
71 status = -1; |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
72 } |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
73 return(status); |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
74 } |
0 | 75 |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
76 #if SDL_VIDEO_OPENGL |
1315
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
77 |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
78 static int ExtensionSupported(const char *extension, const char *extensions) |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
79 { |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
80 const char *start; |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
81 const char *where, *terminator; |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
82 |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
83 /* Extension names should not have spaces. */ |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
84 where = SDL_strchr(extension, ' '); |
1315
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
85 if ( where || *extension == '\0' ) |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
86 return 0; |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
87 |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
88 if ( ! extensions ) |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
89 return 0; |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
90 |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
91 /* It takes a bit of care to be fool-proof about parsing the |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
92 * OpenGL extensions string. Don't be fooled by sub-strings, |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
93 * etc. */ |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
94 |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
95 start = extensions; |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
96 |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
97 for (;;) |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
98 { |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
99 where = SDL_strstr(start, extension); |
1315
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
100 if (!where) break; |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
101 |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
102 terminator = where + SDL_strlen(extension); |
1315
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
103 if (where == start || *(where - 1) == ' ') |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
104 if (*terminator == ' ' || *terminator == '\0') return 1; |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
105 |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
106 start = terminator; |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
107 } |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
108 |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
109 return 0; |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
110 } |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
111 |
4042
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
112 static int ChoosePixelFormatARB(_THIS, const int *iAttribs, const FLOAT *fAttribs) |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
113 { |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
114 HWND hwnd; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
115 HDC hdc; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
116 HGLRC hglrc; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
117 const char * (WINAPI *wglGetExtensionsStringARB)(HDC) = 0; |
1315
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
118 const char *extensions; |
4042
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
119 int pformat = 0; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
120 UINT matches = 0; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
121 |
671
338a62f9a528
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
656
diff
changeset
|
122 hwnd = CreateWindow(SDL_Appname, SDL_Appname, WS_POPUP | WS_DISABLED, |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
123 0, 0, 10, 10, |
1315
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
124 NULL, NULL, SDL_Instance, NULL); |
1523 | 125 WIN_FlushMessageQueue(); |
126 | |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
127 hdc = GetDC(hwnd); |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
128 |
4042
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
129 SetPixelFormat(hdc, ChoosePixelFormat(hdc, &GL_pfd), &GL_pfd); |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
130 |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
131 hglrc = this->gl_data->wglCreateContext(hdc); |
671
338a62f9a528
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
656
diff
changeset
|
132 if ( hglrc ) { |
338a62f9a528
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
656
diff
changeset
|
133 this->gl_data->wglMakeCurrent(hdc, hglrc); |
338a62f9a528
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
656
diff
changeset
|
134 } |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
135 |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
136 wglGetExtensionsStringARB = (const char * (WINAPI *)(HDC)) |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
137 this->gl_data->wglGetProcAddress("wglGetExtensionsStringARB"); |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
138 |
1315
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
139 if( wglGetExtensionsStringARB ) { |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
140 extensions = wglGetExtensionsStringARB(hdc); |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
141 } else { |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
142 extensions = NULL; |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
143 } |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
144 |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
145 this->gl_data->WGL_ARB_pixel_format = 0; |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
146 if( ExtensionSupported("WGL_ARB_pixel_format", extensions) ) { |
4042
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
147 BOOL (WINAPI *wglChoosePixelFormatARB)(HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
148 wglChoosePixelFormatARB = |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
149 (BOOL (WINAPI *)(HDC, const int *, const FLOAT *, UINT, int *, UINT *)) |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
150 this->gl_data->wglGetProcAddress("wglChoosePixelFormatARB"); |
4042
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
151 if( wglChoosePixelFormatARB && |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
152 wglChoosePixelFormatARB(hdc, iAttribs, fAttribs, 1, &pformat, &matches) && pformat ) { |
1315
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
153 this->gl_data->WGL_ARB_pixel_format = 1; |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
154 } |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
155 } |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
156 |
671
338a62f9a528
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
656
diff
changeset
|
157 if ( hglrc ) { |
338a62f9a528
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
656
diff
changeset
|
158 this->gl_data->wglMakeCurrent(NULL, NULL); |
338a62f9a528
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
656
diff
changeset
|
159 this->gl_data->wglDeleteContext(hglrc); |
338a62f9a528
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
656
diff
changeset
|
160 } |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
161 ReleaseDC(hwnd, hdc); |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
162 DestroyWindow(hwnd); |
1523 | 163 WIN_FlushMessageQueue(); |
4042
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
164 |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
165 return pformat; |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
166 } |
1315
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
167 |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
168 #endif /* SDL_VIDEO_OPENGL */ |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
169 |
0 | 170 int WIN_GL_SetupWindow(_THIS) |
171 { | |
172 int retval; | |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
173 #if SDL_VIDEO_OPENGL |
373
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
174 int i; |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
175 int iAttribs[64]; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
176 int *iAttr; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
177 float fAttribs[1] = { 0 }; |
1769 | 178 const GLubyte *(WINAPI *glGetStringFunc)(GLenum); |
1736
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1527
diff
changeset
|
179 const char *wglext; |
0 | 180 |
181 /* load the gl driver from a default path */ | |
182 if ( ! this->gl_config.driver_loaded ) { | |
183 /* no driver has been loaded, use default (ourselves) */ | |
184 if ( WIN_GL_LoadLibrary(this, NULL) < 0 ) { | |
185 return(-1); | |
186 } | |
187 } | |
188 | |
4042
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
189 /* Set up the pixel format descriptor with our needed format */ |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
190 SDL_memset(&GL_pfd, 0, sizeof(GL_pfd)); |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
191 GL_pfd.nSize = sizeof(GL_pfd); |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
192 GL_pfd.nVersion = 1; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
193 GL_pfd.dwFlags = (PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL); |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
194 if ( this->gl_config.double_buffer ) { |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
195 GL_pfd.dwFlags |= PFD_DOUBLEBUFFER; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
196 } |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
197 if ( this->gl_config.stereo ) { |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
198 GL_pfd.dwFlags |= PFD_STEREO; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
199 } |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
200 GL_pfd.iPixelType = PFD_TYPE_RGBA; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
201 GL_pfd.cColorBits = this->gl_config.buffer_size; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
202 GL_pfd.cRedBits = this->gl_config.red_size; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
203 GL_pfd.cGreenBits = this->gl_config.green_size; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
204 GL_pfd.cBlueBits = this->gl_config.blue_size; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
205 GL_pfd.cAlphaBits = this->gl_config.alpha_size; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
206 GL_pfd.cAccumRedBits = this->gl_config.accum_red_size; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
207 GL_pfd.cAccumGreenBits = this->gl_config.accum_green_size; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
208 GL_pfd.cAccumBlueBits = this->gl_config.accum_blue_size; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
209 GL_pfd.cAccumAlphaBits = this->gl_config.accum_alpha_size; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
210 GL_pfd.cAccumBits = |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
211 (GL_pfd.cAccumRedBits + GL_pfd.cAccumGreenBits + |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
212 GL_pfd.cAccumBlueBits + GL_pfd.cAccumAlphaBits); |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
213 GL_pfd.cDepthBits = this->gl_config.depth_size; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
214 GL_pfd.cStencilBits = this->gl_config.stencil_size; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
215 |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
216 /* setup WGL_ARB_pixel_format attribs */ |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
217 iAttr = &iAttribs[0]; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
218 |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
219 *iAttr++ = WGL_DRAW_TO_WINDOW_ARB; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
220 *iAttr++ = GL_TRUE; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
221 *iAttr++ = WGL_ACCELERATION_ARB; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
222 *iAttr++ = WGL_FULL_ACCELERATION_ARB; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
223 *iAttr++ = WGL_RED_BITS_ARB; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
224 *iAttr++ = this->gl_config.red_size; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
225 *iAttr++ = WGL_GREEN_BITS_ARB; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
226 *iAttr++ = this->gl_config.green_size; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
227 *iAttr++ = WGL_BLUE_BITS_ARB; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
228 *iAttr++ = this->gl_config.blue_size; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
229 |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
230 if ( this->gl_config.alpha_size ) { |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
231 *iAttr++ = WGL_ALPHA_BITS_ARB; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
232 *iAttr++ = this->gl_config.alpha_size; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
233 } |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
234 |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
235 *iAttr++ = WGL_DOUBLE_BUFFER_ARB; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
236 *iAttr++ = this->gl_config.double_buffer; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
237 |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
238 *iAttr++ = WGL_DEPTH_BITS_ARB; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
239 *iAttr++ = this->gl_config.depth_size; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
240 |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
241 if ( this->gl_config.stencil_size ) { |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
242 *iAttr++ = WGL_STENCIL_BITS_ARB; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
243 *iAttr++ = this->gl_config.stencil_size; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
244 } |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
245 |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
246 if ( this->gl_config.accum_red_size ) { |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
247 *iAttr++ = WGL_ACCUM_RED_BITS_ARB; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
248 *iAttr++ = this->gl_config.accum_red_size; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
249 } |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
250 |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
251 if ( this->gl_config.accum_green_size ) { |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
252 *iAttr++ = WGL_ACCUM_GREEN_BITS_ARB; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
253 *iAttr++ = this->gl_config.accum_green_size; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
254 } |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
255 |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
256 if ( this->gl_config.accum_blue_size ) { |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
257 *iAttr++ = WGL_ACCUM_BLUE_BITS_ARB; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
258 *iAttr++ = this->gl_config.accum_blue_size; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
259 } |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
260 |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
261 if ( this->gl_config.accum_alpha_size ) { |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
262 *iAttr++ = WGL_ACCUM_ALPHA_BITS_ARB; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
263 *iAttr++ = this->gl_config.accum_alpha_size; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
264 } |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
265 |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
266 if ( this->gl_config.stereo ) { |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
267 *iAttr++ = WGL_STEREO_ARB; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
268 *iAttr++ = GL_TRUE; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
269 } |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
270 |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
271 if ( this->gl_config.multisamplebuffers ) { |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
272 *iAttr++ = WGL_SAMPLE_BUFFERS_ARB; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
273 *iAttr++ = this->gl_config.multisamplebuffers; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
274 } |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
275 |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
276 if ( this->gl_config.multisamplesamples ) { |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
277 *iAttr++ = WGL_SAMPLES_ARB; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
278 *iAttr++ = this->gl_config.multisamplesamples; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
279 } |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
280 |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
281 if ( this->gl_config.accelerated >= 0 ) { |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
282 *iAttr++ = WGL_ACCELERATION_ARB; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
283 *iAttr++ = (this->gl_config.accelerated ? WGL_GENERIC_ACCELERATION_ARB : WGL_NO_ACCELERATION_ARB); |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
284 } |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
285 |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
286 *iAttr = 0; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
287 |
373
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
288 for ( i=0; ; ++i ) { |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
289 /* Get the window device context for our OpenGL drawing */ |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
290 GL_hdc = GetDC(SDL_Window); |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
291 if ( GL_hdc == NULL ) { |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
292 SDL_SetError("Unable to get DC for SDL_Window"); |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
293 return(-1); |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
294 } |
0 | 295 |
373
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
296 /* Choose and set the closest available pixel format */ |
4042
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
297 pixel_format = ChoosePixelFormatARB(this, iAttribs, fAttribs); |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
298 if ( !pixel_format ) { |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
299 pixel_format = ChoosePixelFormat(GL_hdc, &GL_pfd); |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
300 } |
373
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
301 if ( !pixel_format ) { |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
302 SDL_SetError("No matching GL pixel format available"); |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
303 return(-1); |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
304 } |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
305 if ( !SetPixelFormat(GL_hdc, pixel_format, &GL_pfd) ) { |
373
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
306 if ( i == 0 ) { |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
307 /* First time through, try resetting the window */ |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
308 if ( WIN_GL_ResetWindow(this) < 0 ) { |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
309 return(-1); |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
310 } |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
311 continue; |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
312 } |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
313 SDL_SetError("Unable to set HDC pixel format"); |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
314 return(-1); |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
315 } |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
316 /* We either succeeded or failed by this point */ |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
317 break; |
0 | 318 } |
319 DescribePixelFormat(GL_hdc, pixel_format, sizeof(GL_pfd), &GL_pfd); | |
320 | |
321 GL_hrc = this->gl_data->wglCreateContext(GL_hdc); | |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
322 if ( GL_hrc == NULL ) { |
0 | 323 SDL_SetError("Unable to create GL context"); |
324 return(-1); | |
325 } | |
1736
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1527
diff
changeset
|
326 if ( WIN_GL_MakeCurrent(this) < 0 ) { |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1527
diff
changeset
|
327 return(-1); |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1527
diff
changeset
|
328 } |
0 | 329 gl_active = 1; |
1736
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1527
diff
changeset
|
330 |
4042
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
331 /* Get the wglGetPixelFormatAttribivARB pointer for the context */ |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
332 if ( this->gl_data->WGL_ARB_pixel_format ) { |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
333 this->gl_data->wglGetPixelFormatAttribivARB = |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
334 (BOOL (WINAPI *)(HDC, int, int, UINT, const int *, int *)) |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
335 this->gl_data->wglGetProcAddress("wglGetPixelFormatAttribivARB"); |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
336 } else { |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
337 this->gl_data->wglGetPixelFormatAttribivARB = NULL; |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
338 } |
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
339 |
1736
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1527
diff
changeset
|
340 /* Vsync control under Windows. Checking glGetString here is |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1527
diff
changeset
|
341 * somewhat a documented and reliable hack - it was originally |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1527
diff
changeset
|
342 * as a feature added by mistake, but since so many people rely |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1527
diff
changeset
|
343 * on it, it will not be removed. strstr should be safe here.*/ |
1754
c67921b517c3
Date: Sun, 30 Apr 2006 14:20:05 +1000
Sam Lantinga <slouken@libsdl.org>
parents:
1737
diff
changeset
|
344 glGetStringFunc = WIN_GL_GetProcAddress(this, "glGetString"); |
c67921b517c3
Date: Sun, 30 Apr 2006 14:20:05 +1000
Sam Lantinga <slouken@libsdl.org>
parents:
1737
diff
changeset
|
345 if ( glGetStringFunc ) { |
1757
ac282d472a2e
Yeah, that's what I meant. :)
Sam Lantinga <slouken@libsdl.org>
parents:
1754
diff
changeset
|
346 wglext = (const char *)glGetStringFunc(GL_EXTENSIONS); |
1754
c67921b517c3
Date: Sun, 30 Apr 2006 14:20:05 +1000
Sam Lantinga <slouken@libsdl.org>
parents:
1737
diff
changeset
|
347 } else { |
c67921b517c3
Date: Sun, 30 Apr 2006 14:20:05 +1000
Sam Lantinga <slouken@libsdl.org>
parents:
1737
diff
changeset
|
348 /* Uh oh, something is seriously wrong here... */ |
c67921b517c3
Date: Sun, 30 Apr 2006 14:20:05 +1000
Sam Lantinga <slouken@libsdl.org>
parents:
1737
diff
changeset
|
349 wglext = NULL; |
c67921b517c3
Date: Sun, 30 Apr 2006 14:20:05 +1000
Sam Lantinga <slouken@libsdl.org>
parents:
1737
diff
changeset
|
350 } |
1880 | 351 if ( wglext && SDL_strstr(wglext, "WGL_EXT_swap_control") ) { |
352 this->gl_data->wglSwapIntervalEXT = WIN_GL_GetProcAddress(this, "wglSwapIntervalEXT"); | |
353 this->gl_data->wglGetSwapIntervalEXT = WIN_GL_GetProcAddress(this, "wglGetSwapIntervalEXT"); | |
354 } else { | |
1736
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1527
diff
changeset
|
355 this->gl_data->wglSwapIntervalEXT = NULL; |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1527
diff
changeset
|
356 this->gl_data->wglGetSwapIntervalEXT = NULL; |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1527
diff
changeset
|
357 } |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1527
diff
changeset
|
358 if ( this->gl_config.swap_control >= 0 ) { |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1527
diff
changeset
|
359 if ( this->gl_data->wglSwapIntervalEXT ) { |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1527
diff
changeset
|
360 this->gl_data->wglSwapIntervalEXT(this->gl_config.swap_control); |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1527
diff
changeset
|
361 } |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1527
diff
changeset
|
362 } |
0 | 363 #else |
364 SDL_SetError("WIN driver not configured with OpenGL"); | |
365 #endif | |
366 if ( gl_active ) { | |
367 retval = 0; | |
368 } else { | |
369 retval = -1; | |
370 } | |
371 return(retval); | |
372 } | |
373 | |
374 void WIN_GL_ShutDown(_THIS) | |
375 { | |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
376 #if SDL_VIDEO_OPENGL |
0 | 377 /* Clean up OpenGL */ |
378 if ( GL_hrc ) { | |
379 this->gl_data->wglMakeCurrent(NULL, NULL); | |
380 this->gl_data->wglDeleteContext(GL_hrc); | |
381 GL_hrc = NULL; | |
382 } | |
383 if ( GL_hdc ) { | |
384 ReleaseDC(SDL_Window, GL_hdc); | |
385 GL_hdc = NULL; | |
386 } | |
387 gl_active = 0; | |
388 | |
389 WIN_GL_UnloadLibrary(this); | |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
390 #endif /* SDL_VIDEO_OPENGL */ |
0 | 391 } |
392 | |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
393 #if SDL_VIDEO_OPENGL |
0 | 394 |
395 /* Make the current context active */ | |
396 int WIN_GL_MakeCurrent(_THIS) | |
397 { | |
398 int retval; | |
399 | |
400 retval = 0; | |
401 if ( ! this->gl_data->wglMakeCurrent(GL_hdc, GL_hrc) ) { | |
402 SDL_SetError("Unable to make GL context current"); | |
403 retval = -1; | |
404 } | |
405 return(retval); | |
406 } | |
407 | |
3937
5c6e937518c6
Let Windows OpenGL users use SDL_GL_SWAP_CONTROL even if WGL_ARB_pixel_format
Ryan C. Gordon <icculus@icculus.org>
parents:
1880
diff
changeset
|
408 /* Get attribute data from wgl. */ |
0 | 409 int WIN_GL_GetAttribute(_THIS, SDL_GLattr attrib, int* value) |
410 { | |
411 int retval; | |
3937
5c6e937518c6
Let Windows OpenGL users use SDL_GL_SWAP_CONTROL even if WGL_ARB_pixel_format
Ryan C. Gordon <icculus@icculus.org>
parents:
1880
diff
changeset
|
412 |
5c6e937518c6
Let Windows OpenGL users use SDL_GL_SWAP_CONTROL even if WGL_ARB_pixel_format
Ryan C. Gordon <icculus@icculus.org>
parents:
1880
diff
changeset
|
413 if (attrib == SDL_GL_SWAP_CONTROL) { |
5c6e937518c6
Let Windows OpenGL users use SDL_GL_SWAP_CONTROL even if WGL_ARB_pixel_format
Ryan C. Gordon <icculus@icculus.org>
parents:
1880
diff
changeset
|
414 if ( this->gl_data->wglGetSwapIntervalEXT ) { |
5c6e937518c6
Let Windows OpenGL users use SDL_GL_SWAP_CONTROL even if WGL_ARB_pixel_format
Ryan C. Gordon <icculus@icculus.org>
parents:
1880
diff
changeset
|
415 *value = this->gl_data->wglGetSwapIntervalEXT(); |
5c6e937518c6
Let Windows OpenGL users use SDL_GL_SWAP_CONTROL even if WGL_ARB_pixel_format
Ryan C. Gordon <icculus@icculus.org>
parents:
1880
diff
changeset
|
416 return 0; |
5c6e937518c6
Let Windows OpenGL users use SDL_GL_SWAP_CONTROL even if WGL_ARB_pixel_format
Ryan C. Gordon <icculus@icculus.org>
parents:
1880
diff
changeset
|
417 } |
5c6e937518c6
Let Windows OpenGL users use SDL_GL_SWAP_CONTROL even if WGL_ARB_pixel_format
Ryan C. Gordon <icculus@icculus.org>
parents:
1880
diff
changeset
|
418 return -1; |
5c6e937518c6
Let Windows OpenGL users use SDL_GL_SWAP_CONTROL even if WGL_ARB_pixel_format
Ryan C. Gordon <icculus@icculus.org>
parents:
1880
diff
changeset
|
419 } |
5c6e937518c6
Let Windows OpenGL users use SDL_GL_SWAP_CONTROL even if WGL_ARB_pixel_format
Ryan C. Gordon <icculus@icculus.org>
parents:
1880
diff
changeset
|
420 |
4042
f9d0b64cc7b9
I think this fixes bug #261
Sam Lantinga <slouken@libsdl.org>
parents:
3937
diff
changeset
|
421 if ( this->gl_data->wglGetPixelFormatAttribivARB ) { |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
422 int wgl_attrib; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
423 |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
424 switch(attrib) { |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
425 case SDL_GL_RED_SIZE: |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
426 wgl_attrib = WGL_RED_BITS_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
427 break; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
428 case SDL_GL_GREEN_SIZE: |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
429 wgl_attrib = WGL_GREEN_BITS_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
430 break; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
431 case SDL_GL_BLUE_SIZE: |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
432 wgl_attrib = WGL_BLUE_BITS_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
433 break; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
434 case SDL_GL_ALPHA_SIZE: |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
435 wgl_attrib = WGL_ALPHA_BITS_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
436 break; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
437 case SDL_GL_DOUBLEBUFFER: |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
438 wgl_attrib = WGL_DOUBLE_BUFFER_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
439 break; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
440 case SDL_GL_BUFFER_SIZE: |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
441 wgl_attrib = WGL_COLOR_BITS_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
442 break; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
443 case SDL_GL_DEPTH_SIZE: |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
444 wgl_attrib = WGL_DEPTH_BITS_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
445 break; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
446 case SDL_GL_STENCIL_SIZE: |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
447 wgl_attrib = WGL_STENCIL_BITS_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
448 break; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
449 case SDL_GL_ACCUM_RED_SIZE: |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
450 wgl_attrib = WGL_ACCUM_RED_BITS_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
451 break; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
452 case SDL_GL_ACCUM_GREEN_SIZE: |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
453 wgl_attrib = WGL_ACCUM_GREEN_BITS_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
454 break; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
455 case SDL_GL_ACCUM_BLUE_SIZE: |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
456 wgl_attrib = WGL_ACCUM_BLUE_BITS_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
457 break; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
458 case SDL_GL_ACCUM_ALPHA_SIZE: |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
459 wgl_attrib = WGL_ACCUM_ALPHA_BITS_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
460 break; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
461 case SDL_GL_STEREO: |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
462 wgl_attrib = WGL_STEREO_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
463 break; |
656
864e2d2a9a55
Merged in Ryan's multisample code for MacOS, and changed the constants to match.
Sam Lantinga <slouken@libsdl.org>
parents:
655
diff
changeset
|
464 case SDL_GL_MULTISAMPLEBUFFERS: |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
465 wgl_attrib = WGL_SAMPLE_BUFFERS_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
466 break; |
656
864e2d2a9a55
Merged in Ryan's multisample code for MacOS, and changed the constants to match.
Sam Lantinga <slouken@libsdl.org>
parents:
655
diff
changeset
|
467 case SDL_GL_MULTISAMPLESAMPLES: |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
468 wgl_attrib = WGL_SAMPLES_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
469 break; |
1737 | 470 case SDL_GL_ACCELERATED_VISUAL: |
471 wgl_attrib = WGL_ACCELERATION_ARB; | |
472 this->gl_data->wglGetPixelFormatAttribivARB(GL_hdc, pixel_format, 0, 1, &wgl_attrib, value); | |
473 if ( *value == WGL_NO_ACCELERATION_ARB ) { | |
474 *value = SDL_FALSE; | |
475 } else { | |
476 *value = SDL_TRUE; | |
477 } | |
478 return 0; | |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
479 default: |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
480 return(-1); |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
481 } |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
482 this->gl_data->wglGetPixelFormatAttribivARB(GL_hdc, pixel_format, 0, 1, &wgl_attrib, value); |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
483 |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
484 return 0; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
485 } |
0 | 486 |
487 retval = 0; | |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
488 switch ( attrib ) { |
0 | 489 case SDL_GL_RED_SIZE: |
490 *value = GL_pfd.cRedBits; | |
491 break; | |
492 case SDL_GL_GREEN_SIZE: | |
493 *value = GL_pfd.cGreenBits; | |
494 break; | |
495 case SDL_GL_BLUE_SIZE: | |
496 *value = GL_pfd.cBlueBits; | |
497 break; | |
498 case SDL_GL_ALPHA_SIZE: | |
499 *value = GL_pfd.cAlphaBits; | |
500 break; | |
501 case SDL_GL_DOUBLEBUFFER: | |
502 if ( GL_pfd.dwFlags & PFD_DOUBLEBUFFER ) { | |
503 *value = 1; | |
504 } else { | |
505 *value = 0; | |
506 } | |
507 break; | |
508 case SDL_GL_BUFFER_SIZE: | |
509 *value = GL_pfd.cColorBits; | |
510 break; | |
511 case SDL_GL_DEPTH_SIZE: | |
512 *value = GL_pfd.cDepthBits; | |
513 break; | |
514 case SDL_GL_STENCIL_SIZE: | |
515 *value = GL_pfd.cStencilBits; | |
516 break; | |
517 case SDL_GL_ACCUM_RED_SIZE: | |
518 *value = GL_pfd.cAccumRedBits; | |
519 break; | |
520 case SDL_GL_ACCUM_GREEN_SIZE: | |
521 *value = GL_pfd.cAccumGreenBits; | |
522 break; | |
523 case SDL_GL_ACCUM_BLUE_SIZE: | |
524 *value = GL_pfd.cAccumBlueBits; | |
525 break; | |
526 case SDL_GL_ACCUM_ALPHA_SIZE: | |
527 *value = GL_pfd.cAccumAlphaBits; | |
528 break; | |
450
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
373
diff
changeset
|
529 case SDL_GL_STEREO: |
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
373
diff
changeset
|
530 if ( GL_pfd.dwFlags & PFD_STEREO ) { |
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
373
diff
changeset
|
531 *value = 1; |
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
373
diff
changeset
|
532 } else { |
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
373
diff
changeset
|
533 *value = 0; |
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
373
diff
changeset
|
534 } |
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
373
diff
changeset
|
535 break; |
1261
031e093ba2a5
Date: Thu, 04 Sep 2003 02:12:35 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
889
diff
changeset
|
536 case SDL_GL_MULTISAMPLEBUFFERS: |
031e093ba2a5
Date: Thu, 04 Sep 2003 02:12:35 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
889
diff
changeset
|
537 *value = 0; |
031e093ba2a5
Date: Thu, 04 Sep 2003 02:12:35 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
889
diff
changeset
|
538 break; |
031e093ba2a5
Date: Thu, 04 Sep 2003 02:12:35 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
889
diff
changeset
|
539 case SDL_GL_MULTISAMPLESAMPLES: |
031e093ba2a5
Date: Thu, 04 Sep 2003 02:12:35 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
889
diff
changeset
|
540 *value = 1; |
031e093ba2a5
Date: Thu, 04 Sep 2003 02:12:35 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
889
diff
changeset
|
541 break; |
1880 | 542 case SDL_GL_SWAP_CONTROL: |
543 if ( this->gl_data->wglGetSwapIntervalEXT ) { | |
544 *value = this->gl_data->wglGetSwapIntervalEXT(); | |
545 return 0; | |
546 } else { | |
547 return -1; | |
548 } | |
549 break; | |
0 | 550 default: |
551 retval = -1; | |
552 break; | |
553 } | |
554 return retval; | |
555 } | |
556 | |
557 void WIN_GL_SwapBuffers(_THIS) | |
558 { | |
559 SwapBuffers(GL_hdc); | |
560 } | |
561 | |
562 void WIN_GL_UnloadLibrary(_THIS) | |
563 { | |
564 if ( this->gl_config.driver_loaded ) { | |
565 FreeLibrary((HMODULE)this->gl_config.dll_handle); | |
566 | |
567 this->gl_data->wglGetProcAddress = NULL; | |
568 this->gl_data->wglCreateContext = NULL; | |
569 this->gl_data->wglDeleteContext = NULL; | |
570 this->gl_data->wglMakeCurrent = NULL; | |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
571 this->gl_data->wglGetPixelFormatAttribivARB = NULL; |
1736
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1527
diff
changeset
|
572 this->gl_data->wglSwapIntervalEXT = NULL; |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1527
diff
changeset
|
573 this->gl_data->wglGetSwapIntervalEXT = NULL; |
0 | 574 |
575 this->gl_config.dll_handle = NULL; | |
576 this->gl_config.driver_loaded = 0; | |
577 } | |
578 } | |
579 | |
580 /* Passing a NULL path means load pointers from the application */ | |
581 int WIN_GL_LoadLibrary(_THIS, const char* path) | |
582 { | |
583 HMODULE handle; | |
584 | |
585 if ( gl_active ) { | |
586 SDL_SetError("OpenGL context already created"); | |
587 return -1; | |
588 } | |
589 | |
590 if ( path == NULL ) { | |
591 path = DEFAULT_GL_DRIVER_PATH; | |
592 } | |
593 handle = LoadLibrary(path); | |
594 if ( handle == NULL ) { | |
595 SDL_SetError("Could not load OpenGL library"); | |
596 return -1; | |
597 } | |
598 | |
599 /* Unload the old driver and reset the pointers */ | |
600 WIN_GL_UnloadLibrary(this); | |
601 | |
602 /* Load new function pointers */ | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
603 SDL_memset(this->gl_data, 0, sizeof(*this->gl_data)); |
0 | 604 this->gl_data->wglGetProcAddress = (void * (WINAPI *)(const char *)) |
605 GetProcAddress(handle, "wglGetProcAddress"); | |
606 this->gl_data->wglCreateContext = (HGLRC (WINAPI *)(HDC)) | |
607 GetProcAddress(handle, "wglCreateContext"); | |
608 this->gl_data->wglDeleteContext = (BOOL (WINAPI *)(HGLRC)) | |
609 GetProcAddress(handle, "wglDeleteContext"); | |
610 this->gl_data->wglMakeCurrent = (BOOL (WINAPI *)(HDC, HGLRC)) | |
611 GetProcAddress(handle, "wglMakeCurrent"); | |
1736
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1527
diff
changeset
|
612 this->gl_data->wglSwapIntervalEXT = (void (WINAPI *)(int)) |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1527
diff
changeset
|
613 GetProcAddress(handle, "wglSwapIntervalEXT"); |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1527
diff
changeset
|
614 this->gl_data->wglGetSwapIntervalEXT = (int (WINAPI *)(void)) |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1527
diff
changeset
|
615 GetProcAddress(handle, "wglGetSwapIntervalEXT"); |
0 | 616 |
617 if ( (this->gl_data->wglGetProcAddress == NULL) || | |
618 (this->gl_data->wglCreateContext == NULL) || | |
619 (this->gl_data->wglDeleteContext == NULL) || | |
620 (this->gl_data->wglMakeCurrent == NULL) ) { | |
621 SDL_SetError("Could not retrieve OpenGL functions"); | |
622 FreeLibrary(handle); | |
623 return -1; | |
624 } | |
625 | |
626 this->gl_config.dll_handle = handle; | |
1379
c0a74f199ecf
Use only safe string functions
Sam Lantinga <slouken@libsdl.org>
parents:
1361
diff
changeset
|
627 SDL_strlcpy(this->gl_config.driver_path, path, SDL_arraysize(this->gl_config.driver_path)); |
0 | 628 this->gl_config.driver_loaded = 1; |
629 return 0; | |
630 } | |
631 | |
632 void *WIN_GL_GetProcAddress(_THIS, const char* proc) | |
633 { | |
634 void *func; | |
635 | |
636 /* This is to pick up extensions */ | |
637 func = this->gl_data->wglGetProcAddress(proc); | |
638 if ( ! func ) { | |
639 /* This is probably a normal GL function */ | |
640 func = GetProcAddress(this->gl_config.dll_handle, proc); | |
641 } | |
642 return func; | |
643 } | |
644 | |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
645 #endif /* SDL_VIDEO_OPENGL */ |