Mercurial > sdl-ios-xcode
annotate src/video/wincommon/SDL_wingl.c @ 1525:23a347cfbed8
Fixed bug #38
I'm using SDL 1.2.9 with Visual C++ 7.0 on Windows 2000.
Here's the setup: my game starts in a window, with
SDL_WM_GrabInput(SDL_GRAB_ON) to constrain the cursor to the game window. The
mouse cursor is outside of the window when the game launches, and when the
window appears the cursor is grabbed and placed at the top left corner of the
inside of the game window. At this point, if I click the mouse without moving
it, the SDL_MOUSEBUTTONDOWN event's mouse coordinates are (65535,65535).
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Tue, 14 Mar 2006 06:00:30 +0000 |
parents | 21b1fbb53f4a |
children | ce84e28c2c07 |
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 |
889
eac8c69b5706
ate: Fri, 09 Apr 2004 20:07:10 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
41 #if 0 /* This doesn't work with DirectX code (see CVS comments) */ |
373
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
42 #ifndef _WIN32_WCE /* FIXME WinCE needs the UNICODE version of CreateWindow() */ |
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 */ |
f61f045343d3
Re-query the SDL_WINDOWID each time we initialize the video
Sam Lantinga <slouken@libsdl.org>
parents:
1261
diff
changeset
|
44 if ( !SDL_windowid ) { |
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 */ |
889
eac8c69b5706
ate: Fri, 09 Apr 2004 20:07:10 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
69 #endif |
373
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
70 { |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
71 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
|
72 status = -1; |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
73 } |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
74 return(status); |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
75 } |
0 | 76 |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
77 #if SDL_VIDEO_OPENGL |
1315
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
78 |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
79 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
|
80 { |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
81 const char *start; |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
82 const char *where, *terminator; |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
83 |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
84 /* 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
|
85 where = SDL_strchr(extension, ' '); |
1315
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
86 if ( where || *extension == '\0' ) |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
87 return 0; |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
88 |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
89 if ( ! extensions ) |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
90 return 0; |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
91 |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
92 /* 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
|
93 * 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
|
94 * etc. */ |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
95 |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
96 start = extensions; |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
97 |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
98 for (;;) |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
99 { |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
100 where = SDL_strstr(start, extension); |
1315
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
101 if (!where) break; |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
102 |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
103 terminator = where + SDL_strlen(extension); |
1315
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
104 if (where == start || *(where - 1) == ' ') |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
105 if (*terminator == ' ' || *terminator == '\0') return 1; |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
106 |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
107 start = terminator; |
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 |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
110 return 0; |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
111 } |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
112 |
677
92a933bf2f0f
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
671
diff
changeset
|
113 static void Init_WGL_ARB_extensions(_THIS) |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
114 { |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
115 HWND hwnd; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
116 HDC hdc; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
117 HGLRC hglrc; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
118 int pformat; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
119 const char * (WINAPI *wglGetExtensionsStringARB)(HDC) = 0; |
1315
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
120 const char *extensions; |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
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 |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
129 pformat = ChoosePixelFormat(hdc, &GL_pfd); |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
130 SetPixelFormat(hdc, pformat, &GL_pfd); |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
131 |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
132 hglrc = this->gl_data->wglCreateContext(hdc); |
671
338a62f9a528
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
656
diff
changeset
|
133 if ( hglrc ) { |
338a62f9a528
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
656
diff
changeset
|
134 this->gl_data->wglMakeCurrent(hdc, hglrc); |
338a62f9a528
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
656
diff
changeset
|
135 } |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
136 |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
137 wglGetExtensionsStringARB = (const char * (WINAPI *)(HDC)) |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
138 this->gl_data->wglGetProcAddress("wglGetExtensionsStringARB"); |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
139 |
1315
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
140 if( wglGetExtensionsStringARB ) { |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
141 extensions = wglGetExtensionsStringARB(hdc); |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
142 } else { |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
143 extensions = NULL; |
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 |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
146 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
|
147 if( ExtensionSupported("WGL_ARB_pixel_format", extensions) ) { |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
148 this->gl_data->wglChoosePixelFormatARB = |
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"); |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
151 this->gl_data->wglGetPixelFormatAttribivARB = |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
152 (BOOL (WINAPI *)(HDC, int, int, UINT, const int *, int *)) |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
153 this->gl_data->wglGetProcAddress("wglGetPixelFormatAttribivARB"); |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
154 |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
155 if( (this->gl_data->wglChoosePixelFormatARB != NULL) && |
1315
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
156 (this->gl_data->wglGetPixelFormatAttribivARB != NULL) ) { |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
157 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
|
158 } |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
159 } |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
160 |
671
338a62f9a528
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
656
diff
changeset
|
161 if ( hglrc ) { |
338a62f9a528
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
656
diff
changeset
|
162 this->gl_data->wglMakeCurrent(NULL, NULL); |
338a62f9a528
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
656
diff
changeset
|
163 this->gl_data->wglDeleteContext(hglrc); |
338a62f9a528
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
656
diff
changeset
|
164 } |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
165 ReleaseDC(hwnd, hdc); |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
166 DestroyWindow(hwnd); |
1523 | 167 WIN_FlushMessageQueue(); |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
168 } |
1315
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
169 |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
170 #endif /* SDL_VIDEO_OPENGL */ |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
171 |
0 | 172 int WIN_GL_SetupWindow(_THIS) |
173 { | |
174 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
|
175 #if SDL_VIDEO_OPENGL |
373
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
176 int i; |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
177 unsigned int matching; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
178 int iAttribs[64]; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
179 int *iAttr; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
180 float fAttribs[1] = { 0 }; |
0 | 181 |
182 /* load the gl driver from a default path */ | |
183 if ( ! this->gl_config.driver_loaded ) { | |
184 /* no driver has been loaded, use default (ourselves) */ | |
185 if ( WIN_GL_LoadLibrary(this, NULL) < 0 ) { | |
186 return(-1); | |
187 } | |
188 } | |
189 | |
373
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
190 for ( i=0; ; ++i ) { |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
191 /* 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
|
192 GL_hdc = GetDC(SDL_Window); |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
193 if ( GL_hdc == NULL ) { |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
194 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
|
195 return(-1); |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
196 } |
0 | 197 |
373
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
198 /* Set up the pixel format descriptor with our needed format */ |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
199 SDL_memset(&GL_pfd, 0, sizeof(GL_pfd)); |
373
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
200 GL_pfd.nSize = sizeof(GL_pfd); |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
201 GL_pfd.nVersion = 1; |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
202 GL_pfd.dwFlags = (PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL); |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
203 if ( this->gl_config.double_buffer ) { |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
204 GL_pfd.dwFlags |= PFD_DOUBLEBUFFER; |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
205 } |
450
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
373
diff
changeset
|
206 if ( this->gl_config.stereo ) { |
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
373
diff
changeset
|
207 GL_pfd.dwFlags |= PFD_STEREO; |
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
373
diff
changeset
|
208 } |
373
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
209 GL_pfd.iPixelType = PFD_TYPE_RGBA; |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
210 GL_pfd.cColorBits = this->gl_config.buffer_size; |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
211 GL_pfd.cRedBits = this->gl_config.red_size; |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
212 GL_pfd.cGreenBits = this->gl_config.green_size; |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
213 GL_pfd.cBlueBits = this->gl_config.blue_size; |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
214 GL_pfd.cAlphaBits = this->gl_config.alpha_size; |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
215 GL_pfd.cAccumRedBits = this->gl_config.accum_red_size; |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
216 GL_pfd.cAccumGreenBits = this->gl_config.accum_green_size; |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
217 GL_pfd.cAccumBlueBits = this->gl_config.accum_blue_size; |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
218 GL_pfd.cAccumAlphaBits = this->gl_config.accum_alpha_size; |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
219 GL_pfd.cAccumBits = |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
220 (GL_pfd.cAccumRedBits + GL_pfd.cAccumGreenBits + |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
221 GL_pfd.cAccumBlueBits + GL_pfd.cAccumAlphaBits); |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
222 GL_pfd.cDepthBits = this->gl_config.depth_size; |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
223 GL_pfd.cStencilBits = this->gl_config.stencil_size; |
0 | 224 |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
225 /* initialize WGL_ARB_pixel_format */ |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
226 Init_WGL_ARB_extensions(this); |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
227 |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
228 /* setup WGL_ARB_pixel_format attribs */ |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
229 iAttr = &iAttribs[0]; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
230 |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
231 *iAttr++ = WGL_DRAW_TO_WINDOW_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
232 *iAttr++ = GL_TRUE; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
233 *iAttr++ = WGL_ACCELERATION_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
234 *iAttr++ = WGL_FULL_ACCELERATION_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
235 *iAttr++ = WGL_RED_BITS_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
236 *iAttr++ = this->gl_config.red_size; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
237 *iAttr++ = WGL_GREEN_BITS_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
238 *iAttr++ = this->gl_config.green_size; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
239 *iAttr++ = WGL_BLUE_BITS_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
240 *iAttr++ = this->gl_config.blue_size; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
241 |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
242 if ( this->gl_config.alpha_size ) { |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
243 *iAttr++ = WGL_ALPHA_BITS_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
244 *iAttr++ = this->gl_config.alpha_size; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
245 } |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
246 |
1315
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
247 *iAttr++ = WGL_DOUBLE_BUFFER_ARB; |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
248 *iAttr++ = this->gl_config.double_buffer; |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
249 |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
250 *iAttr++ = WGL_DEPTH_BITS_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
251 *iAttr++ = this->gl_config.depth_size; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
252 |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
253 if ( this->gl_config.stencil_size ) { |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
254 *iAttr++ = WGL_STENCIL_BITS_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
255 *iAttr++ = this->gl_config.stencil_size; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
256 } |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
257 |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
258 if ( this->gl_config.accum_red_size ) { |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
259 *iAttr++ = WGL_ACCUM_RED_BITS_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
260 *iAttr++ = this->gl_config.accum_red_size; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
261 } |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
262 |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
263 if ( this->gl_config.accum_green_size ) { |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
264 *iAttr++ = WGL_ACCUM_GREEN_BITS_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
265 *iAttr++ = this->gl_config.accum_green_size; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
266 } |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
267 |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
268 if ( this->gl_config.accum_blue_size ) { |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
269 *iAttr++ = WGL_ACCUM_BLUE_BITS_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
270 *iAttr++ = this->gl_config.accum_blue_size; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
271 } |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
272 |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
273 if ( this->gl_config.accum_alpha_size ) { |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
274 *iAttr++ = WGL_ACCUM_ALPHA_BITS_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
275 *iAttr++ = this->gl_config.accum_alpha_size; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
276 } |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
277 |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
278 if ( this->gl_config.stereo ) { |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
279 *iAttr++ = WGL_STEREO_ARB; |
1315
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
280 *iAttr++ = GL_TRUE; |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
281 } |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
282 |
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
|
283 if ( this->gl_config.multisamplebuffers ) { |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
284 *iAttr++ = WGL_SAMPLE_BUFFERS_ARB; |
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
|
285 *iAttr++ = this->gl_config.multisamplebuffers; |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
286 } |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
287 |
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
|
288 if ( this->gl_config.multisamplesamples ) { |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
289 *iAttr++ = WGL_SAMPLES_ARB; |
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
|
290 *iAttr++ = this->gl_config.multisamplesamples; |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
291 } |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
292 |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
293 *iAttr = 0; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
294 |
373
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
295 /* Choose and set the closest available pixel format */ |
1315
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
296 if ( !this->gl_data->WGL_ARB_pixel_format || |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
297 !this->gl_data->wglChoosePixelFormatARB(GL_hdc, iAttribs, fAttribs, 1, &pixel_format, &matching) || |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
298 !matching ) { |
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); |
1315
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
300 this->gl_data->WGL_ARB_pixel_format = 0; |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
301 } |
373
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
302 if ( !pixel_format ) { |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
303 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
|
304 return(-1); |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
305 } |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
306 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
|
307 if ( i == 0 ) { |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
308 /* 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
|
309 if ( WIN_GL_ResetWindow(this) < 0 ) { |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
310 return(-1); |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
311 } |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
312 continue; |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
313 } |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
314 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
|
315 return(-1); |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
316 } |
c638fde8a824
Fixed setting OpenGL mode multiple times on Windows
Sam Lantinga <slouken@libsdl.org>
parents:
327
diff
changeset
|
317 /* 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
|
318 break; |
0 | 319 } |
320 DescribePixelFormat(GL_hdc, pixel_format, sizeof(GL_pfd), &GL_pfd); | |
321 | |
322 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
|
323 if ( GL_hrc == NULL ) { |
0 | 324 SDL_SetError("Unable to create GL context"); |
325 return(-1); | |
326 } | |
327 gl_active = 1; | |
328 #else | |
329 SDL_SetError("WIN driver not configured with OpenGL"); | |
330 #endif | |
331 if ( gl_active ) { | |
332 retval = 0; | |
333 } else { | |
334 retval = -1; | |
335 } | |
336 return(retval); | |
337 } | |
338 | |
339 void WIN_GL_ShutDown(_THIS) | |
340 { | |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
341 #if SDL_VIDEO_OPENGL |
0 | 342 /* Clean up OpenGL */ |
343 if ( GL_hrc ) { | |
344 this->gl_data->wglMakeCurrent(NULL, NULL); | |
345 this->gl_data->wglDeleteContext(GL_hrc); | |
346 GL_hrc = NULL; | |
347 } | |
348 if ( GL_hdc ) { | |
349 ReleaseDC(SDL_Window, GL_hdc); | |
350 GL_hdc = NULL; | |
351 } | |
352 gl_active = 0; | |
353 | |
354 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
|
355 #endif /* SDL_VIDEO_OPENGL */ |
0 | 356 } |
357 | |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
358 #if SDL_VIDEO_OPENGL |
0 | 359 |
360 /* Make the current context active */ | |
361 int WIN_GL_MakeCurrent(_THIS) | |
362 { | |
363 int retval; | |
364 | |
365 retval = 0; | |
366 if ( ! this->gl_data->wglMakeCurrent(GL_hdc, GL_hrc) ) { | |
367 SDL_SetError("Unable to make GL context current"); | |
368 retval = -1; | |
369 } | |
370 return(retval); | |
371 } | |
372 | |
373 /* Get attribute data from glX. */ | |
374 int WIN_GL_GetAttribute(_THIS, SDL_GLattr attrib, int* value) | |
375 { | |
376 int retval; | |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
377 |
1315
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
378 if ( this->gl_data->WGL_ARB_pixel_format ) { |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
379 int wgl_attrib; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
380 |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
381 switch(attrib) { |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
382 case SDL_GL_RED_SIZE: |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
383 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
|
384 break; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
385 case SDL_GL_GREEN_SIZE: |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
386 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
|
387 break; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
388 case SDL_GL_BLUE_SIZE: |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
389 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
|
390 break; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
391 case SDL_GL_ALPHA_SIZE: |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
392 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
|
393 break; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
394 case SDL_GL_DOUBLEBUFFER: |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
395 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
|
396 break; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
397 case SDL_GL_BUFFER_SIZE: |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
398 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
|
399 break; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
400 case SDL_GL_DEPTH_SIZE: |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
401 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
|
402 break; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
403 case SDL_GL_STENCIL_SIZE: |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
404 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
|
405 break; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
406 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
|
407 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
|
408 break; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
409 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
|
410 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
|
411 break; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
412 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
|
413 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
|
414 break; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
415 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
|
416 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
|
417 break; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
418 case SDL_GL_STEREO: |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
419 wgl_attrib = WGL_STEREO_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
420 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
|
421 case SDL_GL_MULTISAMPLEBUFFERS: |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
422 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
|
423 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
|
424 case SDL_GL_MULTISAMPLESAMPLES: |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
425 wgl_attrib = WGL_SAMPLES_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
426 break; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
427 default: |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
428 return(-1); |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
429 } |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
430 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
|
431 |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
432 return 0; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
433 } |
0 | 434 |
435 retval = 0; | |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
436 switch ( attrib ) { |
0 | 437 case SDL_GL_RED_SIZE: |
438 *value = GL_pfd.cRedBits; | |
439 break; | |
440 case SDL_GL_GREEN_SIZE: | |
441 *value = GL_pfd.cGreenBits; | |
442 break; | |
443 case SDL_GL_BLUE_SIZE: | |
444 *value = GL_pfd.cBlueBits; | |
445 break; | |
446 case SDL_GL_ALPHA_SIZE: | |
447 *value = GL_pfd.cAlphaBits; | |
448 break; | |
449 case SDL_GL_DOUBLEBUFFER: | |
450 if ( GL_pfd.dwFlags & PFD_DOUBLEBUFFER ) { | |
451 *value = 1; | |
452 } else { | |
453 *value = 0; | |
454 } | |
455 break; | |
456 case SDL_GL_BUFFER_SIZE: | |
457 *value = GL_pfd.cColorBits; | |
458 break; | |
459 case SDL_GL_DEPTH_SIZE: | |
460 *value = GL_pfd.cDepthBits; | |
461 break; | |
462 case SDL_GL_STENCIL_SIZE: | |
463 *value = GL_pfd.cStencilBits; | |
464 break; | |
465 case SDL_GL_ACCUM_RED_SIZE: | |
466 *value = GL_pfd.cAccumRedBits; | |
467 break; | |
468 case SDL_GL_ACCUM_GREEN_SIZE: | |
469 *value = GL_pfd.cAccumGreenBits; | |
470 break; | |
471 case SDL_GL_ACCUM_BLUE_SIZE: | |
472 *value = GL_pfd.cAccumBlueBits; | |
473 break; | |
474 case SDL_GL_ACCUM_ALPHA_SIZE: | |
475 *value = GL_pfd.cAccumAlphaBits; | |
476 break; | |
450
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
373
diff
changeset
|
477 case SDL_GL_STEREO: |
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
373
diff
changeset
|
478 if ( GL_pfd.dwFlags & PFD_STEREO ) { |
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
373
diff
changeset
|
479 *value = 1; |
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
373
diff
changeset
|
480 } else { |
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
373
diff
changeset
|
481 *value = 0; |
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
373
diff
changeset
|
482 } |
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
373
diff
changeset
|
483 break; |
1261
031e093ba2a5
Date: Thu, 04 Sep 2003 02:12:35 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
889
diff
changeset
|
484 case SDL_GL_MULTISAMPLEBUFFERS: |
031e093ba2a5
Date: Thu, 04 Sep 2003 02:12:35 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
889
diff
changeset
|
485 *value = 0; |
031e093ba2a5
Date: Thu, 04 Sep 2003 02:12:35 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
889
diff
changeset
|
486 break; |
031e093ba2a5
Date: Thu, 04 Sep 2003 02:12:35 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
889
diff
changeset
|
487 case SDL_GL_MULTISAMPLESAMPLES: |
031e093ba2a5
Date: Thu, 04 Sep 2003 02:12:35 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
889
diff
changeset
|
488 *value = 1; |
031e093ba2a5
Date: Thu, 04 Sep 2003 02:12:35 +0200
Sam Lantinga <slouken@libsdl.org>
parents:
889
diff
changeset
|
489 break; |
0 | 490 default: |
491 retval = -1; | |
492 break; | |
493 } | |
494 return retval; | |
495 } | |
496 | |
497 void WIN_GL_SwapBuffers(_THIS) | |
498 { | |
499 SwapBuffers(GL_hdc); | |
500 } | |
501 | |
502 void WIN_GL_UnloadLibrary(_THIS) | |
503 { | |
504 if ( this->gl_config.driver_loaded ) { | |
505 FreeLibrary((HMODULE)this->gl_config.dll_handle); | |
506 | |
507 this->gl_data->wglGetProcAddress = NULL; | |
508 this->gl_data->wglCreateContext = NULL; | |
509 this->gl_data->wglDeleteContext = NULL; | |
510 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
|
511 this->gl_data->wglChoosePixelFormatARB = NULL; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
453
diff
changeset
|
512 this->gl_data->wglGetPixelFormatAttribivARB = NULL; |
0 | 513 |
514 this->gl_config.dll_handle = NULL; | |
515 this->gl_config.driver_loaded = 0; | |
516 } | |
517 } | |
518 | |
519 /* Passing a NULL path means load pointers from the application */ | |
520 int WIN_GL_LoadLibrary(_THIS, const char* path) | |
521 { | |
522 HMODULE handle; | |
523 | |
524 if ( gl_active ) { | |
525 SDL_SetError("OpenGL context already created"); | |
526 return -1; | |
527 } | |
528 | |
529 if ( path == NULL ) { | |
530 path = DEFAULT_GL_DRIVER_PATH; | |
531 } | |
532 handle = LoadLibrary(path); | |
533 if ( handle == NULL ) { | |
534 SDL_SetError("Could not load OpenGL library"); | |
535 return -1; | |
536 } | |
537 | |
538 /* Unload the old driver and reset the pointers */ | |
539 WIN_GL_UnloadLibrary(this); | |
540 | |
541 /* Load new function pointers */ | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1330
diff
changeset
|
542 SDL_memset(this->gl_data, 0, sizeof(*this->gl_data)); |
0 | 543 this->gl_data->wglGetProcAddress = (void * (WINAPI *)(const char *)) |
544 GetProcAddress(handle, "wglGetProcAddress"); | |
545 this->gl_data->wglCreateContext = (HGLRC (WINAPI *)(HDC)) | |
546 GetProcAddress(handle, "wglCreateContext"); | |
547 this->gl_data->wglDeleteContext = (BOOL (WINAPI *)(HGLRC)) | |
548 GetProcAddress(handle, "wglDeleteContext"); | |
549 this->gl_data->wglMakeCurrent = (BOOL (WINAPI *)(HDC, HGLRC)) | |
550 GetProcAddress(handle, "wglMakeCurrent"); | |
551 | |
552 if ( (this->gl_data->wglGetProcAddress == NULL) || | |
553 (this->gl_data->wglCreateContext == NULL) || | |
554 (this->gl_data->wglDeleteContext == NULL) || | |
555 (this->gl_data->wglMakeCurrent == NULL) ) { | |
556 SDL_SetError("Could not retrieve OpenGL functions"); | |
557 FreeLibrary(handle); | |
558 return -1; | |
559 } | |
560 | |
561 this->gl_config.dll_handle = handle; | |
1379
c0a74f199ecf
Use only safe string functions
Sam Lantinga <slouken@libsdl.org>
parents:
1361
diff
changeset
|
562 SDL_strlcpy(this->gl_config.driver_path, path, SDL_arraysize(this->gl_config.driver_path)); |
0 | 563 this->gl_config.driver_loaded = 1; |
564 return 0; | |
565 } | |
566 | |
567 void *WIN_GL_GetProcAddress(_THIS, const char* proc) | |
568 { | |
569 void *func; | |
570 | |
571 /* This is to pick up extensions */ | |
572 func = this->gl_data->wglGetProcAddress(proc); | |
573 if ( ! func ) { | |
574 /* This is probably a normal GL function */ | |
575 func = GetProcAddress(this->gl_config.dll_handle, proc); | |
576 } | |
577 return func; | |
578 } | |
579 | |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
580 #endif /* SDL_VIDEO_OPENGL */ |