Mercurial > sdl-ios-xcode
annotate src/video/x11/SDL_x11gl.c @ 4207:a673f44949d6 SDL-1.2
Fixed bug #562
this patch by Diego Pettenò <flameeyes@gentoo.org> for SDL-1.2:
The attached patch applies over latest ~arch SDL version, and allows to use the
xinerama support to launch an application full screened on the head "0".
The SDL_VIDEO_FULLSCREEN_HEAD environment variable sets the head on which the
full screen will be displayed, but if you set it to 0, the code simply ignores
it as unset. My patch changes the unset value to -1, so that the 0 value can be
used correctly. Without this, trying to get fullscreen on head 0 would get the
same result than not having xinerama enabled at all.
http://sources.gentoo.org/media-libs/libsdl/files/libsdl-1.2.11-xinerama-head-0.patch
SDL-1.3 doesnt seem to have any code like this, but it's still good for SDL-1.2
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 21 Sep 2009 07:20:51 +0000 |
parents | 39e748f251c6 |
children | d48035d857d3 |
rev | line source |
---|---|
0 | 1 /* |
2 SDL - Simple DirectMedia Layer | |
4159 | 3 Copyright (C) 1997-2009 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:
1247
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:
1247
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:
1247
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:
1247
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:
1247
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:
1247
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:
180
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 #include "SDL_x11video.h" | |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
25 #include "../../events/SDL_events_c.h" |
0 | 26 #include "SDL_x11dga_c.h" |
27 #include "SDL_x11gl_c.h" | |
28 | |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1379
diff
changeset
|
29 #if defined(__IRIX__) |
862
f7a8b0ca2ae3
IRIX doesn't have a GL library versioning system
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
30 /* IRIX doesn't have a GL library versioning system */ |
f7a8b0ca2ae3
IRIX doesn't have a GL library versioning system
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
31 #define DEFAULT_OPENGL "libGL.so" |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1379
diff
changeset
|
32 #elif defined(__MACOSX__) |
1191
2bd4cec0de63
Seperate glX from HAVE_OPENGL, for platforms that have both an X server and
Ryan C. Gordon <icculus@icculus.org>
parents:
1182
diff
changeset
|
33 #define DEFAULT_OPENGL "/usr/X11R6/lib/libGL.1.dylib" |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1379
diff
changeset
|
34 #elif defined(__QNXNTO__) |
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1379
diff
changeset
|
35 #define DEFAULT_OPENGL "libGL.so.3" |
4023
5ec68276e4de
Applied patch from OpenBSD ports package
Sam Lantinga <slouken@libsdl.org>
parents:
3940
diff
changeset
|
36 #elif defined(__OpenBSD__) |
5ec68276e4de
Applied patch from OpenBSD ports package
Sam Lantinga <slouken@libsdl.org>
parents:
3940
diff
changeset
|
37 #define DEFAULT_OPENGL "libGL.so.4.0" |
862
f7a8b0ca2ae3
IRIX doesn't have a GL library versioning system
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
38 #else |
0 | 39 #define DEFAULT_OPENGL "libGL.so.1" |
862
f7a8b0ca2ae3
IRIX doesn't have a GL library versioning system
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
40 #endif |
0 | 41 |
667
adbed8d7a991
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
656
diff
changeset
|
42 #ifndef GLX_ARB_multisample |
adbed8d7a991
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
656
diff
changeset
|
43 #define GLX_ARB_multisample |
adbed8d7a991
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
656
diff
changeset
|
44 #define GLX_SAMPLE_BUFFERS_ARB 100000 |
adbed8d7a991
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
656
diff
changeset
|
45 #define GLX_SAMPLES_ARB 100001 |
adbed8d7a991
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
656
diff
changeset
|
46 #endif |
adbed8d7a991
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
656
diff
changeset
|
47 |
4183
39e748f251c6
Patched X11 code to compile on Mac OS X 10.6 SDK.
Ryan C. Gordon <icculus@icculus.org>
parents:
4159
diff
changeset
|
48 /* GLX_EXT_visual_rating stuff that might not be in the system headers... */ |
39e748f251c6
Patched X11 code to compile on Mac OS X 10.6 SDK.
Ryan C. Gordon <icculus@icculus.org>
parents:
4159
diff
changeset
|
49 #ifndef GLX_VISUAL_CAVEAT_EXT |
1737 | 50 #define GLX_VISUAL_CAVEAT_EXT 0x20 |
4183
39e748f251c6
Patched X11 code to compile on Mac OS X 10.6 SDK.
Ryan C. Gordon <icculus@icculus.org>
parents:
4159
diff
changeset
|
51 #endif |
39e748f251c6
Patched X11 code to compile on Mac OS X 10.6 SDK.
Ryan C. Gordon <icculus@icculus.org>
parents:
4159
diff
changeset
|
52 #ifndef GLX_NONE_EXT |
1841
0495a8e98595
Use the correct parameter for GLX_VISUAL_CAVEAT_EXT
Sam Lantinga <slouken@libsdl.org>
parents:
1737
diff
changeset
|
53 #define GLX_NONE_EXT 0x8000 |
4183
39e748f251c6
Patched X11 code to compile on Mac OS X 10.6 SDK.
Ryan C. Gordon <icculus@icculus.org>
parents:
4159
diff
changeset
|
54 #endif |
39e748f251c6
Patched X11 code to compile on Mac OS X 10.6 SDK.
Ryan C. Gordon <icculus@icculus.org>
parents:
4159
diff
changeset
|
55 #ifndef GLX_SLOW_VISUAL_EXT |
1737 | 56 #define GLX_SLOW_VISUAL_EXT 0x8001 |
4183
39e748f251c6
Patched X11 code to compile on Mac OS X 10.6 SDK.
Ryan C. Gordon <icculus@icculus.org>
parents:
4159
diff
changeset
|
57 #endif |
39e748f251c6
Patched X11 code to compile on Mac OS X 10.6 SDK.
Ryan C. Gordon <icculus@icculus.org>
parents:
4159
diff
changeset
|
58 #ifndef GLX_NON_CONFORMANT_VISUAL_EXT |
1737 | 59 #define GLX_NON_CONFORMANT_VISUAL_EXT 0x800D |
60 #endif | |
61 | |
4183
39e748f251c6
Patched X11 code to compile on Mac OS X 10.6 SDK.
Ryan C. Gordon <icculus@icculus.org>
parents:
4159
diff
changeset
|
62 |
1737 | 63 #if SDL_VIDEO_OPENGL_GLX |
64 static int glXExtensionSupported(_THIS, const char *extension) | |
65 { | |
66 const char *extensions; | |
67 const char *start; | |
68 const char *where, *terminator; | |
69 | |
70 /* Extension names should not have spaces. */ | |
71 where = SDL_strchr(extension, ' '); | |
72 if ( where || *extension == '\0' ) { | |
73 return 0; | |
74 } | |
75 | |
76 extensions = this->gl_data->glXQueryExtensionsString(GFX_Display,SDL_Screen); | |
77 /* It takes a bit of care to be fool-proof about parsing the | |
78 * OpenGL extensions string. Don't be fooled by sub-strings, etc. | |
79 */ | |
80 | |
81 start = extensions; | |
82 | |
83 for (;;) { | |
84 where = SDL_strstr(start, extension); | |
85 if (!where) break; | |
86 | |
87 terminator = where + strlen(extension); | |
88 if (where == start || *(where - 1) == ' ') | |
89 if (*terminator == ' ' || *terminator == '\0') return 1; | |
90 | |
91 start = terminator; | |
92 } | |
93 return 0; | |
94 } | |
95 #endif /* SDL_VIDEO_OPENGL_GLX */ | |
96 | |
0 | 97 XVisualInfo *X11_GL_GetVisual(_THIS) |
98 { | |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
99 #if SDL_VIDEO_OPENGL_GLX |
0 | 100 /* 64 seems nice. */ |
101 int attribs[64]; | |
102 int i; | |
103 | |
104 /* load the gl driver from a default path */ | |
105 if ( ! this->gl_config.driver_loaded ) { | |
106 /* no driver has been loaded, use default (ourselves) */ | |
107 if ( X11_GL_LoadLibrary(this, NULL) < 0 ) { | |
108 return NULL; | |
109 } | |
110 } | |
111 | |
112 /* See if we already have a window which we must use */ | |
113 if ( SDL_windowid ) { | |
114 XWindowAttributes a; | |
115 XVisualInfo vi_in; | |
116 int out_count; | |
117 | |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
118 XGetWindowAttributes(SDL_Display, SDL_Window, &a); |
0 | 119 vi_in.screen = SDL_Screen; |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
120 vi_in.visualid = XVisualIDFromVisual(a.visual); |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
121 glx_visualinfo = XGetVisualInfo(SDL_Display, |
0 | 122 VisualScreenMask|VisualIDMask, &vi_in, &out_count); |
123 return glx_visualinfo; | |
124 } | |
125 | |
126 /* Setup our GLX attributes according to the gl_config. */ | |
450
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
127 i = 0; |
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
128 attribs[i++] = GLX_RGBA; |
0 | 129 attribs[i++] = GLX_RED_SIZE; |
130 attribs[i++] = this->gl_config.red_size; | |
131 attribs[i++] = GLX_GREEN_SIZE; | |
132 attribs[i++] = this->gl_config.green_size; | |
133 attribs[i++] = GLX_BLUE_SIZE; | |
134 attribs[i++] = this->gl_config.blue_size; | |
135 | |
136 if( this->gl_config.alpha_size ) { | |
137 attribs[i++] = GLX_ALPHA_SIZE; | |
138 attribs[i++] = this->gl_config.alpha_size; | |
139 } | |
140 | |
141 if( this->gl_config.buffer_size ) { | |
450
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
142 attribs[i++] = GLX_BUFFER_SIZE; |
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
143 attribs[i++] = this->gl_config.buffer_size; |
0 | 144 } |
145 | |
146 if( this->gl_config.double_buffer ) { | |
147 attribs[i++] = GLX_DOUBLEBUFFER; | |
148 } | |
149 | |
150 attribs[i++] = GLX_DEPTH_SIZE; | |
151 attribs[i++] = this->gl_config.depth_size; | |
152 | |
153 if( this->gl_config.stencil_size ) { | |
154 attribs[i++] = GLX_STENCIL_SIZE; | |
155 attribs[i++] = this->gl_config.stencil_size; | |
156 } | |
157 | |
158 if( this->gl_config.accum_red_size ) { | |
450
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
159 attribs[i++] = GLX_ACCUM_RED_SIZE; |
0 | 160 attribs[i++] = this->gl_config.accum_red_size; |
161 } | |
162 | |
163 if( this->gl_config.accum_green_size ) { | |
450
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
164 attribs[i++] = GLX_ACCUM_GREEN_SIZE; |
0 | 165 attribs[i++] = this->gl_config.accum_green_size; |
166 } | |
167 | |
168 if( this->gl_config.accum_blue_size ) { | |
450
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
169 attribs[i++] = GLX_ACCUM_BLUE_SIZE; |
0 | 170 attribs[i++] = this->gl_config.accum_blue_size; |
171 } | |
172 | |
173 if( this->gl_config.accum_alpha_size ) { | |
450
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
174 attribs[i++] = GLX_ACCUM_ALPHA_SIZE; |
0 | 175 attribs[i++] = this->gl_config.accum_alpha_size; |
176 } | |
177 | |
450
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
178 if( this->gl_config.stereo ) { |
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
179 attribs[i++] = GLX_STEREO; |
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
180 } |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
646
diff
changeset
|
181 |
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
|
182 if( this->gl_config.multisamplebuffers ) { |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
646
diff
changeset
|
183 attribs[i++] = GLX_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
|
184 attribs[i++] = this->gl_config.multisamplebuffers; |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
646
diff
changeset
|
185 } |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
646
diff
changeset
|
186 |
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
|
187 if( this->gl_config.multisamplesamples ) { |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
646
diff
changeset
|
188 attribs[i++] = GLX_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
|
189 attribs[i++] = this->gl_config.multisamplesamples; |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
646
diff
changeset
|
190 } |
450
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
191 |
1737 | 192 if( this->gl_config.accelerated >= 0 && |
193 glXExtensionSupported(this, "GLX_EXT_visual_rating") ) { | |
194 attribs[i++] = GLX_VISUAL_CAVEAT_EXT; | |
1841
0495a8e98595
Use the correct parameter for GLX_VISUAL_CAVEAT_EXT
Sam Lantinga <slouken@libsdl.org>
parents:
1737
diff
changeset
|
195 attribs[i++] = GLX_NONE_EXT; |
1737 | 196 } |
197 | |
0 | 198 #ifdef GLX_DIRECT_COLOR /* Try for a DirectColor visual for gamma support */ |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1315
diff
changeset
|
199 if ( !SDL_getenv("SDL_VIDEO_X11_NODIRECTCOLOR") ) { |
1060
86885b40a53b
Support SDL_VIDEO_X11_NODIRECTCOLOR for OpenGL visuals
Sam Lantinga <slouken@libsdl.org>
parents:
862
diff
changeset
|
200 attribs[i++] = GLX_X_VISUAL_TYPE; |
86885b40a53b
Support SDL_VIDEO_X11_NODIRECTCOLOR for OpenGL visuals
Sam Lantinga <slouken@libsdl.org>
parents:
862
diff
changeset
|
201 attribs[i++] = GLX_DIRECT_COLOR; |
86885b40a53b
Support SDL_VIDEO_X11_NODIRECTCOLOR for OpenGL visuals
Sam Lantinga <slouken@libsdl.org>
parents:
862
diff
changeset
|
202 } |
0 | 203 #endif |
204 attribs[i++] = None; | |
205 | |
206 glx_visualinfo = this->gl_data->glXChooseVisual(GFX_Display, | |
207 SDL_Screen, attribs); | |
208 #ifdef GLX_DIRECT_COLOR | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1315
diff
changeset
|
209 if( !glx_visualinfo && !SDL_getenv("SDL_VIDEO_X11_NODIRECTCOLOR") ) { /* No DirectColor visual? Try again.. */ |
0 | 210 attribs[i-3] = None; |
211 glx_visualinfo = this->gl_data->glXChooseVisual(GFX_Display, | |
212 SDL_Screen, attribs); | |
213 } | |
214 #endif | |
215 if( !glx_visualinfo ) { | |
216 SDL_SetError( "Couldn't find matching GLX visual"); | |
217 return NULL; | |
218 } | |
1315
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
219 /* |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
220 printf("Found GLX visual 0x%x\n", glx_visualinfo->visualid); |
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
221 */ |
0 | 222 return glx_visualinfo; |
223 #else | |
224 SDL_SetError("X11 driver not configured with OpenGL"); | |
225 return NULL; | |
226 #endif | |
227 } | |
228 | |
229 int X11_GL_CreateWindow(_THIS, int w, int h) | |
230 { | |
231 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
|
232 #if SDL_VIDEO_OPENGL_GLX |
0 | 233 XSetWindowAttributes attributes; |
234 unsigned long mask; | |
235 unsigned long black; | |
236 | |
237 black = (glx_visualinfo->visual == DefaultVisual(SDL_Display, | |
238 SDL_Screen)) | |
239 ? BlackPixel(SDL_Display, SDL_Screen) : 0; | |
240 attributes.background_pixel = black; | |
241 attributes.border_pixel = black; | |
242 attributes.colormap = SDL_XColorMap; | |
243 mask = CWBackPixel | CWBorderPixel | CWColormap; | |
244 | |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
245 SDL_Window = XCreateWindow(SDL_Display, WMwindow, |
0 | 246 0, 0, w, h, 0, glx_visualinfo->depth, |
247 InputOutput, glx_visualinfo->visual, | |
248 mask, &attributes); | |
249 if ( !SDL_Window ) { | |
250 SDL_SetError("Could not create window"); | |
251 return -1; | |
252 } | |
253 retval = 0; | |
254 #else | |
255 SDL_SetError("X11 driver not configured with OpenGL"); | |
256 retval = -1; | |
257 #endif | |
258 return(retval); | |
259 } | |
260 | |
261 int X11_GL_CreateContext(_THIS) | |
262 { | |
263 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
|
264 #if SDL_VIDEO_OPENGL_GLX |
1736
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
265 |
0 | 266 /* We do this to create a clean separation between X and GLX errors. */ |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
267 XSync( SDL_Display, False ); |
0 | 268 glx_context = this->gl_data->glXCreateContext(GFX_Display, |
269 glx_visualinfo, NULL, True); | |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
270 XSync( GFX_Display, False ); |
0 | 271 |
1736
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
272 if ( glx_context == NULL ) { |
0 | 273 SDL_SetError("Could not create GL context"); |
1736
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
274 return(-1); |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
275 } |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
276 if ( X11_GL_MakeCurrent(this) < 0 ) { |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
277 return(-1); |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
278 } |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
279 gl_active = 1; |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
280 |
3940
cb04355ffec4
Check correct glX extension name for swap_control, but it doesn't look like
Ryan C. Gordon <icculus@icculus.org>
parents:
3905
diff
changeset
|
281 if ( !glXExtensionSupported(this, "GLX_SGI_swap_control") ) { |
1736
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
282 this->gl_data->glXSwapIntervalSGI = NULL; |
0 | 283 } |
1737 | 284 if ( !glXExtensionSupported(this, "GLX_MESA_swap_control") ) { |
1736
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
285 this->gl_data->glXSwapIntervalMESA = NULL; |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
286 this->gl_data->glXGetSwapIntervalMESA = NULL; |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
287 } |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
288 if ( this->gl_config.swap_control >= 0 ) { |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
289 if ( this->gl_data->glXSwapIntervalMESA ) { |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
290 this->gl_data->glXSwapIntervalMESA(this->gl_config.swap_control); |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
291 } else if ( this->gl_data->glXSwapIntervalSGI ) { |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
292 this->gl_data->glXSwapIntervalSGI(this->gl_config.swap_control); |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
293 } |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
294 } |
0 | 295 #else |
296 SDL_SetError("X11 driver not configured with OpenGL"); | |
297 #endif | |
298 if ( gl_active ) { | |
299 retval = 0; | |
300 } else { | |
301 retval = -1; | |
302 } | |
303 return(retval); | |
304 } | |
305 | |
306 void X11_GL_Shutdown(_THIS) | |
307 { | |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
308 #if SDL_VIDEO_OPENGL_GLX |
0 | 309 /* Clean up OpenGL */ |
310 if( glx_context ) { | |
311 this->gl_data->glXMakeCurrent(GFX_Display, None, NULL); | |
312 | |
313 if (glx_context != NULL) | |
314 this->gl_data->glXDestroyContext(GFX_Display, glx_context); | |
315 | |
316 glx_context = NULL; | |
317 } | |
318 gl_active = 0; | |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
319 #endif /* SDL_VIDEO_OPENGL_GLX */ |
0 | 320 } |
321 | |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
322 #if SDL_VIDEO_OPENGL_GLX |
0 | 323 |
324 /* Make the current context active */ | |
325 int X11_GL_MakeCurrent(_THIS) | |
326 { | |
327 int retval; | |
638
b0108e9dea53
Date: Sun, 11 May 2003 19:59:06 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
566
diff
changeset
|
328 |
0 | 329 retval = 0; |
330 if ( ! this->gl_data->glXMakeCurrent(GFX_Display, | |
331 SDL_Window, glx_context) ) { | |
332 SDL_SetError("Unable to make GL context current"); | |
333 retval = -1; | |
334 } | |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
335 XSync( GFX_Display, False ); |
0 | 336 |
337 /* More Voodoo X server workarounds... Grr... */ | |
338 SDL_Lock_EventThread(); | |
339 X11_CheckDGAMouse(this); | |
340 SDL_Unlock_EventThread(); | |
341 | |
342 return(retval); | |
343 } | |
344 | |
345 /* Get attribute data from glX. */ | |
346 int X11_GL_GetAttribute(_THIS, SDL_GLattr attrib, int* value) | |
347 { | |
4092
2b32a416d202
Set an error message when SDL_GL_SetAttribute() fails because we can't support
Ryan C. Gordon <icculus@icculus.org>
parents:
4023
diff
changeset
|
348 int retval = -1; |
2b32a416d202
Set an error message when SDL_GL_SetAttribute() fails because we can't support
Ryan C. Gordon <icculus@icculus.org>
parents:
4023
diff
changeset
|
349 int unsupported = 0; |
0 | 350 int glx_attrib = None; |
351 | |
352 switch( attrib ) { | |
353 case SDL_GL_RED_SIZE: | |
354 glx_attrib = GLX_RED_SIZE; | |
355 break; | |
356 case SDL_GL_GREEN_SIZE: | |
357 glx_attrib = GLX_GREEN_SIZE; | |
358 break; | |
359 case SDL_GL_BLUE_SIZE: | |
360 glx_attrib = GLX_BLUE_SIZE; | |
361 break; | |
362 case SDL_GL_ALPHA_SIZE: | |
363 glx_attrib = GLX_ALPHA_SIZE; | |
364 break; | |
365 case SDL_GL_DOUBLEBUFFER: | |
366 glx_attrib = GLX_DOUBLEBUFFER; | |
367 break; | |
368 case SDL_GL_BUFFER_SIZE: | |
369 glx_attrib = GLX_BUFFER_SIZE; | |
370 break; | |
371 case SDL_GL_DEPTH_SIZE: | |
372 glx_attrib = GLX_DEPTH_SIZE; | |
373 break; | |
374 case SDL_GL_STENCIL_SIZE: | |
375 glx_attrib = GLX_STENCIL_SIZE; | |
376 break; | |
377 case SDL_GL_ACCUM_RED_SIZE: | |
378 glx_attrib = GLX_ACCUM_RED_SIZE; | |
379 break; | |
380 case SDL_GL_ACCUM_GREEN_SIZE: | |
381 glx_attrib = GLX_ACCUM_GREEN_SIZE; | |
382 break; | |
383 case SDL_GL_ACCUM_BLUE_SIZE: | |
384 glx_attrib = GLX_ACCUM_BLUE_SIZE; | |
385 break; | |
386 case SDL_GL_ACCUM_ALPHA_SIZE: | |
387 glx_attrib = GLX_ACCUM_ALPHA_SIZE; | |
388 break; | |
450
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
389 case SDL_GL_STEREO: |
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
390 glx_attrib = GLX_STEREO; |
8a43e0cbf02f
Added SDL_GL_STEREO for stereoscopic OpenGL contexts
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
391 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
|
392 case SDL_GL_MULTISAMPLEBUFFERS: |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
646
diff
changeset
|
393 glx_attrib = GLX_SAMPLE_BUFFERS_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
646
diff
changeset
|
394 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
|
395 case SDL_GL_MULTISAMPLESAMPLES: |
655
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
646
diff
changeset
|
396 glx_attrib = GLX_SAMPLES_ARB; |
9c42ee1b7d77
Date: Thu, 24 Apr 2003 15:13:47 -0400
Sam Lantinga <slouken@libsdl.org>
parents:
646
diff
changeset
|
397 break; |
1737 | 398 case SDL_GL_ACCELERATED_VISUAL: |
399 if ( glXExtensionSupported(this, "GLX_EXT_visual_rating") ) { | |
400 glx_attrib = GLX_VISUAL_CAVEAT_EXT; | |
401 retval = this->gl_data->glXGetConfig(GFX_Display, glx_visualinfo, glx_attrib, value); | |
402 if ( *value == GLX_SLOW_VISUAL_EXT ) { | |
403 *value = SDL_FALSE; | |
404 } else { | |
405 *value = SDL_TRUE; | |
406 } | |
407 return retval; | |
408 } else { | |
4092
2b32a416d202
Set an error message when SDL_GL_SetAttribute() fails because we can't support
Ryan C. Gordon <icculus@icculus.org>
parents:
4023
diff
changeset
|
409 unsupported = 1; |
1737 | 410 } |
411 break; | |
1736
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
412 case SDL_GL_SWAP_CONTROL: |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
413 if ( this->gl_data->glXGetSwapIntervalMESA ) { |
1880 | 414 *value = this->gl_data->glXGetSwapIntervalMESA(); |
415 return(0); | |
1736
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
416 } else { |
4092
2b32a416d202
Set an error message when SDL_GL_SetAttribute() fails because we can't support
Ryan C. Gordon <icculus@icculus.org>
parents:
4023
diff
changeset
|
417 unsupported = 1; |
1736
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
418 } |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
419 break; |
0 | 420 default: |
4092
2b32a416d202
Set an error message when SDL_GL_SetAttribute() fails because we can't support
Ryan C. Gordon <icculus@icculus.org>
parents:
4023
diff
changeset
|
421 unsupported = 1; |
2b32a416d202
Set an error message when SDL_GL_SetAttribute() fails because we can't support
Ryan C. Gordon <icculus@icculus.org>
parents:
4023
diff
changeset
|
422 break; |
0 | 423 } |
424 | |
4092
2b32a416d202
Set an error message when SDL_GL_SetAttribute() fails because we can't support
Ryan C. Gordon <icculus@icculus.org>
parents:
4023
diff
changeset
|
425 if (unsupported) { |
2b32a416d202
Set an error message when SDL_GL_SetAttribute() fails because we can't support
Ryan C. Gordon <icculus@icculus.org>
parents:
4023
diff
changeset
|
426 SDL_SetError("OpenGL attribute is unsupported on this system"); |
2b32a416d202
Set an error message when SDL_GL_SetAttribute() fails because we can't support
Ryan C. Gordon <icculus@icculus.org>
parents:
4023
diff
changeset
|
427 } else { |
2b32a416d202
Set an error message when SDL_GL_SetAttribute() fails because we can't support
Ryan C. Gordon <icculus@icculus.org>
parents:
4023
diff
changeset
|
428 retval = this->gl_data->glXGetConfig(GFX_Display, glx_visualinfo, glx_attrib, value); |
2b32a416d202
Set an error message when SDL_GL_SetAttribute() fails because we can't support
Ryan C. Gordon <icculus@icculus.org>
parents:
4023
diff
changeset
|
429 } |
0 | 430 return retval; |
431 } | |
432 | |
433 void X11_GL_SwapBuffers(_THIS) | |
434 { | |
435 this->gl_data->glXSwapBuffers(GFX_Display, SDL_Window); | |
436 } | |
437 | |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
438 #endif /* SDL_VIDEO_OPENGL_GLX */ |
0 | 439 |
1861 | 440 #define OPENGL_REQUIRS_DLOPEN |
441 #if defined(OPENGL_REQUIRS_DLOPEN) && defined(SDL_LOADSO_DLOPEN) | |
442 #include <dlfcn.h> | |
443 #define GL_LoadObject(X) dlopen(X, (RTLD_NOW|RTLD_GLOBAL)) | |
444 #define GL_LoadFunction dlsym | |
445 #define GL_UnloadObject dlclose | |
446 #else | |
447 #define GL_LoadObject SDL_LoadObject | |
448 #define GL_LoadFunction SDL_LoadFunction | |
449 #define GL_UnloadObject SDL_UnloadObject | |
450 #endif | |
451 | |
0 | 452 void X11_GL_UnloadLibrary(_THIS) |
453 { | |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
454 #if SDL_VIDEO_OPENGL_GLX |
0 | 455 if ( this->gl_config.driver_loaded ) { |
1191
2bd4cec0de63
Seperate glX from HAVE_OPENGL, for platforms that have both an X server and
Ryan C. Gordon <icculus@icculus.org>
parents:
1182
diff
changeset
|
456 |
1861 | 457 GL_UnloadObject(this->gl_config.dll_handle); |
0 | 458 |
459 this->gl_data->glXGetProcAddress = NULL; | |
460 this->gl_data->glXChooseVisual = NULL; | |
461 this->gl_data->glXCreateContext = NULL; | |
462 this->gl_data->glXDestroyContext = NULL; | |
463 this->gl_data->glXMakeCurrent = NULL; | |
464 this->gl_data->glXSwapBuffers = NULL; | |
1736
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
465 this->gl_data->glXSwapIntervalSGI = NULL; |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
466 this->gl_data->glXSwapIntervalMESA = NULL; |
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
467 this->gl_data->glXGetSwapIntervalMESA = NULL; |
0 | 468 |
469 this->gl_config.dll_handle = NULL; | |
470 this->gl_config.driver_loaded = 0; | |
471 } | |
472 #endif | |
473 } | |
474 | |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
475 #if SDL_VIDEO_OPENGL_GLX |
1182
e8e8dcb68e7a
X11 driver now chooses "libGL.so.1" as a default when a NULL is passed to
Ryan C. Gordon <icculus@icculus.org>
parents:
1168
diff
changeset
|
476 |
0 | 477 /* Passing a NULL path means load pointers from the application */ |
478 int X11_GL_LoadLibrary(_THIS, const char* path) | |
479 { | |
1191
2bd4cec0de63
Seperate glX from HAVE_OPENGL, for platforms that have both an X server and
Ryan C. Gordon <icculus@icculus.org>
parents:
1182
diff
changeset
|
480 void* handle = NULL; |
0 | 481 |
1182
e8e8dcb68e7a
X11 driver now chooses "libGL.so.1" as a default when a NULL is passed to
Ryan C. Gordon <icculus@icculus.org>
parents:
1168
diff
changeset
|
482 if ( gl_active ) { |
e8e8dcb68e7a
X11 driver now chooses "libGL.so.1" as a default when a NULL is passed to
Ryan C. Gordon <icculus@icculus.org>
parents:
1168
diff
changeset
|
483 SDL_SetError("OpenGL context already created"); |
e8e8dcb68e7a
X11 driver now chooses "libGL.so.1" as a default when a NULL is passed to
Ryan C. Gordon <icculus@icculus.org>
parents:
1168
diff
changeset
|
484 return -1; |
e8e8dcb68e7a
X11 driver now chooses "libGL.so.1" as a default when a NULL is passed to
Ryan C. Gordon <icculus@icculus.org>
parents:
1168
diff
changeset
|
485 } |
e8e8dcb68e7a
X11 driver now chooses "libGL.so.1" as a default when a NULL is passed to
Ryan C. Gordon <icculus@icculus.org>
parents:
1168
diff
changeset
|
486 |
e8e8dcb68e7a
X11 driver now chooses "libGL.so.1" as a default when a NULL is passed to
Ryan C. Gordon <icculus@icculus.org>
parents:
1168
diff
changeset
|
487 if ( path == NULL ) { |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1315
diff
changeset
|
488 path = SDL_getenv("SDL_VIDEO_GL_DRIVER"); |
0 | 489 if ( path == NULL ) { |
490 path = DEFAULT_OPENGL; | |
491 } | |
1191
2bd4cec0de63
Seperate glX from HAVE_OPENGL, for platforms that have both an X server and
Ryan C. Gordon <icculus@icculus.org>
parents:
1182
diff
changeset
|
492 } |
2bd4cec0de63
Seperate glX from HAVE_OPENGL, for platforms that have both an X server and
Ryan C. Gordon <icculus@icculus.org>
parents:
1182
diff
changeset
|
493 |
1861 | 494 handle = GL_LoadObject(path); |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
495 if ( handle == NULL ) { |
3905
0e0883cb7137
Add error message if not using SDL_LoadObject
Patrice Mandin <patmandin@gmail.com>
parents:
1880
diff
changeset
|
496 #if defined(OPENGL_REQUIRS_DLOPEN) && defined(SDL_LOADSO_DLOPEN) |
0e0883cb7137
Add error message if not using SDL_LoadObject
Patrice Mandin <patmandin@gmail.com>
parents:
1880
diff
changeset
|
497 SDL_SetError("Failed loading %s", path); |
0e0883cb7137
Add error message if not using SDL_LoadObject
Patrice Mandin <patmandin@gmail.com>
parents:
1880
diff
changeset
|
498 #else |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
499 /* SDL_LoadObject() will call SDL_SetError() for us. */ |
3905
0e0883cb7137
Add error message if not using SDL_LoadObject
Patrice Mandin <patmandin@gmail.com>
parents:
1880
diff
changeset
|
500 #endif |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
501 return -1; |
0 | 502 } |
503 | |
504 /* Unload the old driver and reset the pointers */ | |
505 X11_GL_UnloadLibrary(this); | |
506 | |
507 /* Load new function pointers */ | |
180
578815880307
Do proper typecasting so this compiles on IRIX
Sam Lantinga <slouken@libsdl.org>
parents:
127
diff
changeset
|
508 this->gl_data->glXGetProcAddress = |
1861 | 509 (void *(*)(const GLubyte *)) GL_LoadFunction(handle, "glXGetProcAddressARB"); |
180
578815880307
Do proper typecasting so this compiles on IRIX
Sam Lantinga <slouken@libsdl.org>
parents:
127
diff
changeset
|
510 this->gl_data->glXChooseVisual = |
1861 | 511 (XVisualInfo *(*)(Display *, int, int *)) GL_LoadFunction(handle, "glXChooseVisual"); |
180
578815880307
Do proper typecasting so this compiles on IRIX
Sam Lantinga <slouken@libsdl.org>
parents:
127
diff
changeset
|
512 this->gl_data->glXCreateContext = |
1861 | 513 (GLXContext (*)(Display *, XVisualInfo *, GLXContext, int)) GL_LoadFunction(handle, "glXCreateContext"); |
180
578815880307
Do proper typecasting so this compiles on IRIX
Sam Lantinga <slouken@libsdl.org>
parents:
127
diff
changeset
|
514 this->gl_data->glXDestroyContext = |
1861 | 515 (void (*)(Display *, GLXContext)) GL_LoadFunction(handle, "glXDestroyContext"); |
180
578815880307
Do proper typecasting so this compiles on IRIX
Sam Lantinga <slouken@libsdl.org>
parents:
127
diff
changeset
|
516 this->gl_data->glXMakeCurrent = |
1861 | 517 (int (*)(Display *, GLXDrawable, GLXContext)) GL_LoadFunction(handle, "glXMakeCurrent"); |
180
578815880307
Do proper typecasting so this compiles on IRIX
Sam Lantinga <slouken@libsdl.org>
parents:
127
diff
changeset
|
518 this->gl_data->glXSwapBuffers = |
1861 | 519 (void (*)(Display *, GLXDrawable)) GL_LoadFunction(handle, "glXSwapBuffers"); |
180
578815880307
Do proper typecasting so this compiles on IRIX
Sam Lantinga <slouken@libsdl.org>
parents:
127
diff
changeset
|
520 this->gl_data->glXGetConfig = |
1861 | 521 (int (*)(Display *, XVisualInfo *, int, int *)) GL_LoadFunction(handle, "glXGetConfig"); |
638
b0108e9dea53
Date: Sun, 11 May 2003 19:59:06 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
566
diff
changeset
|
522 this->gl_data->glXQueryExtensionsString = |
1861 | 523 (const char *(*)(Display *, int)) GL_LoadFunction(handle, "glXQueryExtensionsString"); |
1736
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
524 this->gl_data->glXSwapIntervalSGI = |
1861 | 525 (int (*)(int)) GL_LoadFunction(handle, "glXSwapIntervalSGI"); |
1736
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
526 this->gl_data->glXSwapIntervalMESA = |
1861 | 527 (GLint (*)(unsigned)) GL_LoadFunction(handle, "glXSwapIntervalMESA"); |
1736
3b2a92126f4d
Implemented bug #2, 117:
Sam Lantinga <slouken@libsdl.org>
parents:
1577
diff
changeset
|
528 this->gl_data->glXGetSwapIntervalMESA = |
1861 | 529 (GLint (*)(void)) GL_LoadFunction(handle, "glXGetSwapIntervalMESA"); |
1315
e94b0d7c33bc
Merged useful fixes from 1.3 branch
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
530 |
0 | 531 if ( (this->gl_data->glXChooseVisual == NULL) || |
532 (this->gl_data->glXCreateContext == NULL) || | |
533 (this->gl_data->glXDestroyContext == NULL) || | |
534 (this->gl_data->glXMakeCurrent == NULL) || | |
535 (this->gl_data->glXSwapBuffers == NULL) || | |
638
b0108e9dea53
Date: Sun, 11 May 2003 19:59:06 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
566
diff
changeset
|
536 (this->gl_data->glXGetConfig == NULL) || |
b0108e9dea53
Date: Sun, 11 May 2003 19:59:06 +0300
Sam Lantinga <slouken@libsdl.org>
parents:
566
diff
changeset
|
537 (this->gl_data->glXQueryExtensionsString == NULL)) { |
0 | 538 SDL_SetError("Could not retrieve OpenGL functions"); |
539 return -1; | |
540 } | |
541 | |
542 this->gl_config.dll_handle = handle; | |
543 this->gl_config.driver_loaded = 1; | |
544 if ( path ) { | |
1379
c0a74f199ecf
Use only safe string functions
Sam Lantinga <slouken@libsdl.org>
parents:
1361
diff
changeset
|
545 SDL_strlcpy(this->gl_config.driver_path, path, |
c0a74f199ecf
Use only safe string functions
Sam Lantinga <slouken@libsdl.org>
parents:
1361
diff
changeset
|
546 SDL_arraysize(this->gl_config.driver_path)); |
0 | 547 } else { |
1379
c0a74f199ecf
Use only safe string functions
Sam Lantinga <slouken@libsdl.org>
parents:
1361
diff
changeset
|
548 *this->gl_config.driver_path = '\0'; |
0 | 549 } |
550 return 0; | |
551 } | |
552 | |
553 void *X11_GL_GetProcAddress(_THIS, const char* proc) | |
554 { | |
555 void* handle; | |
556 | |
557 handle = this->gl_config.dll_handle; | |
558 if ( this->gl_data->glXGetProcAddress ) { | |
1196
b81f54c3963f
Fixed compile warnings with gcc 4
Sam Lantinga <slouken@libsdl.org>
parents:
1191
diff
changeset
|
559 return this->gl_data->glXGetProcAddress((const GLubyte *)proc); |
0 | 560 } |
1861 | 561 return GL_LoadFunction(handle, proc); |
0 | 562 } |
563 | |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1358
diff
changeset
|
564 #endif /* SDL_VIDEO_OPENGL_GLX */ |