Mercurial > sdl-ios-xcode
annotate src/video/x11/SDL_x11opengl.c @ 3168:6338b7f2d024
Hi,
I have prepared a set of patches to readd WindowsCE support to SDL 1.3.
I've created a new GAPI/Rawframebuffer and a DirectDraw renderer.
Both renderers are work in progress and there are several unimplemented
cases. (Notably
RenderLine/RenderPoint/RenderFill/QueryTexturePixels/UpdateTexture and
texture blending )
Nevertheless I am successfully using these renderers together with the
SDL software renderer. (On most devices the SDL software renderer will
be much faster as there are only badly optimized vendor drivers available)
I send these patches now in this unpolished state because there seems to
be some interest in win ce and someone has to start supporting SDL 1.3
Now on to the patches:
wince_events_window_fixes.patch
fixes some wince incompatibilities and adds fullscreen support via
SHFullScreen. NOTE: This patch shouldn't have any side effects on
Windows, but I have NOT tested it on Windows, so please double-check.
This patch doesn't dependent on the following ones.
wince_renderers_system.patch
This patch does all necessary modifications to the SDL system.
- it adds the renderers to the configure system
- it adds the renderers to win32video
SDL_ceddrawrender.c
SDL_ceddrawrender.h
SDL_gapirender_c.h
SDL_gapirender.c
SDL_gapirender.h
these files add the new render drivers and should be placed in
src/video/win32
Some notes to people who want to test this:
- I have only compiled sdl with ming32ce, so the VisualC files are not
up to date
- As mingw32ce has no ddraw.h this file must be taken from the MS SDK
and modified to work with gcc
- I had to modify line 2611 in configure.in to
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lcoredll -lcommctrl -lmmtimer
-Wl,--image-base -Wl,0x10000"
otherwise GetCPinfo wouldn't link. If someone knows whats causing this
I'd be happy to hear about it.
It would be great if these patches could make their way into SVN as this
would make collaboration much much easier.
I'm out of office for the next week and therefore will be unavailable
via email.
Regards
Stefan
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 07 Jun 2009 02:44:46 +0000 |
parents | 7f684f249ec9 |
children | 08c5964f2a34 |
rev | line source |
---|---|
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1 /* |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2 SDL - Simple DirectMedia Layer |
2859 | 3 Copyright (C) 1997-2009 Sam Lantinga |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
4 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
5 This library is free software; you can redistribute it and/or |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
6 modify it under the terms of the GNU Lesser General Public |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
7 License as published by the Free Software Foundation; either |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
8 version 2.1 of the License, or (at your option) any later version. |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
9 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
10 This library is distributed in the hope that it will be useful, |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
13 Lesser General Public License for more details. |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
14 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
15 You should have received a copy of the GNU Lesser General Public |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
16 License along with _this library; if not, write to the Free Software |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
18 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
19 Sam Lantinga |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
20 slouken@libsdl.org |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
21 */ |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
22 #include "SDL_config.h" |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
23 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
24 #include "SDL_x11video.h" |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
25 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
26 /* GLX implementation of SDL OpenGL support */ |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
27 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
28 #if SDL_VIDEO_OPENGL_GLX |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
29 #include "SDL_loadso.h" |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
30 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
31 #if defined(__IRIX__) |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
32 /* IRIX doesn't have a GL library versioning system */ |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
33 #define DEFAULT_OPENGL "libGL.so" |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
34 #elif defined(__MACOSX__) |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
35 #define DEFAULT_OPENGL "/usr/X11R6/lib/libGL.1.dylib" |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
36 #elif defined(__QNXNTO__) |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
37 #define DEFAULT_OPENGL "libGL.so.3" |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
38 #else |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
39 #define DEFAULT_OPENGL "libGL.so.1" |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
40 #endif |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
41 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
42 #ifndef GLX_ARB_multisample |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
43 #define GLX_ARB_multisample |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
44 #define GLX_SAMPLE_BUFFERS_ARB 100000 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
45 #define GLX_SAMPLES_ARB 100001 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
46 #endif |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
47 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
48 #ifndef GLX_EXT_visual_rating |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
49 #define GLX_EXT_visual_rating |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
50 #define GLX_VISUAL_CAVEAT_EXT 0x20 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
51 #define GLX_NONE_EXT 0x8000 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
52 #define GLX_SLOW_VISUAL_EXT 0x8001 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
53 #define GLX_NON_CONFORMANT_VISUAL_EXT 0x800D |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
54 #endif |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
55 |
3100
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
56 #ifndef GLX_ARB_create_context |
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
57 #define GLX_ARB_create_context |
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
58 #define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091 |
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
59 #define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092 |
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
60 #define GLX_CONTEXT_FLAGS_ARB 0x2094 |
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
61 #define GLX_CONTEXT_DEBUG_BIT_ARB 0x0001 |
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
62 #define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 |
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
63 #endif |
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
64 |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
65 #define OPENGL_REQUIRS_DLOPEN |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
66 #if defined(OPENGL_REQUIRS_DLOPEN) && defined(SDL_LOADSO_DLOPEN) |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
67 #include <dlfcn.h> |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
68 #define GL_LoadObject(X) dlopen(X, (RTLD_NOW|RTLD_GLOBAL)) |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
69 #define GL_LoadFunction dlsym |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
70 #define GL_UnloadObject dlclose |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
71 #else |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
72 #define GL_LoadObject SDL_LoadObject |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
73 #define GL_LoadFunction SDL_LoadFunction |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
74 #define GL_UnloadObject SDL_UnloadObject |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
75 #endif |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
76 |
3057
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
77 static void X11_GL_InitExtensions(_THIS); |
2322 | 78 |
3100
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
79 /* Typedef for the GL 3.0 context creation function */ |
3139 | 80 typedef GLXContext(*PFNGLXCREATECONTEXTATTRIBSARBPROC) (Display * dpy, |
81 GLXFBConfig config, | |
82 GLXContext | |
83 share_context, | |
84 Bool direct, | |
85 const int | |
86 *attrib_list); | |
3100
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
87 |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
88 int |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
89 X11_GL_LoadLibrary(_THIS, const char *path) |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
90 { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
91 void *handle; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
92 |
3057
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
93 /* Load the OpenGL library */ |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
94 if (path == NULL) { |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
95 path = SDL_getenv("SDL_OPENGL_LIBRARY"); |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
96 } |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
97 if (path == NULL) { |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
98 path = DEFAULT_OPENGL; |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
99 } |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
100 _this->gl_config.dll_handle = SDL_LoadObject(path); |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
101 if (!_this->gl_config.dll_handle) { |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
102 return -1; |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
103 } |
3057
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
104 SDL_strlcpy(_this->gl_config.driver_path, path, |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
105 SDL_arraysize(_this->gl_config.driver_path)); |
2244 | 106 |
3057
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
107 /* Allocate OpenGL memory */ |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
108 _this->gl_data = |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
109 (struct SDL_GLDriverData *) SDL_calloc(1, |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
110 sizeof(struct |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
111 SDL_GLDriverData)); |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
112 if (!_this->gl_data) { |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
113 SDL_OutOfMemory(); |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
114 return -1; |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
115 } |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
116 |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
117 /* Load function pointers */ |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
118 handle = _this->gl_config.dll_handle; |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
119 _this->gl_data->glXGetProcAddress = |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
120 (void *(*)(const GLubyte *)) GL_LoadFunction(handle, |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
121 "glXGetProcAddressARB"); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
122 _this->gl_data->glXChooseVisual = |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
123 (XVisualInfo * (*)(Display *, int, int *)) GL_LoadFunction(handle, |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
124 "glXChooseVisual"); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
125 _this->gl_data->glXCreateContext = |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
126 (GLXContext(*)(Display *, XVisualInfo *, GLXContext, int)) |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
127 GL_LoadFunction(handle, "glXCreateContext"); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
128 _this->gl_data->glXDestroyContext = |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
129 (void (*)(Display *, GLXContext)) GL_LoadFunction(handle, |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
130 "glXDestroyContext"); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
131 _this->gl_data->glXMakeCurrent = |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
132 (int (*)(Display *, GLXDrawable, GLXContext)) GL_LoadFunction(handle, |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
133 "glXMakeCurrent"); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
134 _this->gl_data->glXSwapBuffers = |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
135 (void (*)(Display *, GLXDrawable)) GL_LoadFunction(handle, |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
136 "glXSwapBuffers"); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
137 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
138 if (!_this->gl_data->glXChooseVisual || |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
139 !_this->gl_data->glXCreateContext || |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
140 !_this->gl_data->glXDestroyContext || |
1956
ba0d62354872
Simplified driver window creation code.
Sam Lantinga <slouken@libsdl.org>
parents:
1955
diff
changeset
|
141 !_this->gl_data->glXMakeCurrent || !_this->gl_data->glXSwapBuffers) { |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
142 SDL_SetError("Could not retrieve OpenGL functions"); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
143 return -1; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
144 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
145 |
3057
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
146 /* Initialize extensions */ |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
147 X11_GL_InitExtensions(_this); |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
148 |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
149 return 0; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
150 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
151 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
152 void * |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
153 X11_GL_GetProcAddress(_THIS, const char *proc) |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
154 { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
155 void *handle; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
156 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
157 handle = _this->gl_config.dll_handle; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
158 if (_this->gl_data->glXGetProcAddress) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
159 return _this->gl_data->glXGetProcAddress((const GLubyte *) proc); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
160 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
161 return GL_LoadFunction(handle, proc); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
162 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
163 |
3057
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
164 void |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
165 X11_GL_UnloadLibrary(_THIS) |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
166 { |
3057
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
167 /* Don't actually unload the library, since it may have registered |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
168 * X11 shutdown hooks, per the notes at: |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
169 * http://dri.sourceforge.net/doc/DRIuserguide.html |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
170 */ |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
171 #if 0 |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
172 GL_UnloadObject(_this->gl_config.dll_handle); |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
173 _this->gl_config.dll_handle = NULL; |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
174 #endif |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
175 |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
176 /* Free OpenGL memory */ |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
177 SDL_free(_this->gl_data); |
089a77aebb7d
Added test program for SDL_CreateWindowFrom()
Sam Lantinga <slouken@libsdl.org>
parents:
3013
diff
changeset
|
178 _this->gl_data = NULL; |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
179 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
180 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
181 static SDL_bool |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
182 HasExtension(const char *extension, const char *extensions) |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
183 { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
184 const char *start; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
185 const char *where, *terminator; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
186 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
187 /* Extension names should not have spaces. */ |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
188 where = SDL_strchr(extension, ' '); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
189 if (where || *extension == '\0') |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
190 return SDL_FALSE; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
191 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
192 if (!extensions) |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
193 return SDL_FALSE; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
194 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
195 /* It takes a bit of care to be fool-proof about parsing the |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
196 * OpenGL extensions string. Don't be fooled by sub-strings, |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
197 * etc. */ |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
198 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
199 start = extensions; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
200 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
201 for (;;) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
202 where = SDL_strstr(start, extension); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
203 if (!where) |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
204 break; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
205 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
206 terminator = where + SDL_strlen(extension); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
207 if (where == start || *(where - 1) == ' ') |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
208 if (*terminator == ' ' || *terminator == '\0') |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
209 return SDL_TRUE; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
210 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
211 start = terminator; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
212 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
213 return SDL_FALSE; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
214 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
215 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
216 static void |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
217 X11_GL_InitExtensions(_THIS) |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
218 { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
219 Display *display = ((SDL_VideoData *) _this->driverdata)->display; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
220 int screen = ((SDL_DisplayData *) SDL_CurrentDisplay.driverdata)->screen; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
221 XVisualInfo *vinfo; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
222 XSetWindowAttributes xattr; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
223 Window w; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
224 GLXContext context; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
225 const char *(*glXQueryExtensionsStringFunc) (Display *, int); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
226 const char *extensions; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
227 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
228 vinfo = X11_GL_GetVisual(_this, display, screen); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
229 if (!vinfo) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
230 return; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
231 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
232 xattr.background_pixel = 0; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
233 xattr.border_pixel = 0; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
234 xattr.colormap = |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
235 XCreateColormap(display, RootWindow(display, screen), vinfo->visual, |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
236 AllocNone); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
237 w = XCreateWindow(display, RootWindow(display, screen), 0, 0, 32, 32, 0, |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
238 vinfo->depth, InputOutput, vinfo->visual, |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
239 (CWBackPixel | CWBorderPixel | CWColormap), &xattr); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
240 context = _this->gl_data->glXCreateContext(display, vinfo, NULL, True); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
241 if (context) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
242 _this->gl_data->glXMakeCurrent(display, w, context); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
243 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
244 XFree(vinfo); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
245 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
246 glXQueryExtensionsStringFunc = |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
247 (const char *(*)(Display *, int)) X11_GL_GetProcAddress(_this, |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
248 "glXQueryExtensionsString"); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
249 if (glXQueryExtensionsStringFunc) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
250 extensions = glXQueryExtensionsStringFunc(display, screen); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
251 } else { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
252 extensions = NULL; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
253 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
254 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
255 /* Check for SGI_swap_control */ |
2105
12bcd4fd2606
Date: Wed, 23 May 2007 00:39:47 +0300
Ryan C. Gordon <icculus@icculus.org>
parents:
1956
diff
changeset
|
256 if (HasExtension("GLX_SGI_swap_control", extensions)) { |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
257 _this->gl_data->glXSwapIntervalSGI = |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
258 (int (*)(int)) X11_GL_GetProcAddress(_this, "glXSwapIntervalSGI"); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
259 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
260 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
261 /* Check for GLX_MESA_swap_control */ |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
262 if (HasExtension("GLX_MESA_swap_control", extensions)) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
263 _this->gl_data->glXSwapIntervalMESA = |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
264 (GLint(*)(unsigned)) X11_GL_GetProcAddress(_this, |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
265 "glXSwapIntervalMESA"); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
266 _this->gl_data->glXGetSwapIntervalMESA = |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
267 (GLint(*)(void)) X11_GL_GetProcAddress(_this, |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
268 "glXGetSwapIntervalMESA"); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
269 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
270 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
271 /* Check for GLX_EXT_visual_rating */ |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
272 if (HasExtension("GLX_EXT_visual_rating", extensions)) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
273 _this->gl_data->HAS_GLX_EXT_visual_rating = SDL_TRUE; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
274 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
275 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
276 if (context) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
277 _this->gl_data->glXMakeCurrent(display, None, NULL); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
278 _this->gl_data->glXDestroyContext(display, context); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
279 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
280 XDestroyWindow(display, w); |
2323
4ac07ae446d3
Fixed many valgrind errors. But, I broke testdyngl.
Bob Pendleton <bob@pendleton.com>
parents:
2322
diff
changeset
|
281 X11_PumpEvents(_this); |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
282 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
283 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
284 XVisualInfo * |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
285 X11_GL_GetVisual(_THIS, Display * display, int screen) |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
286 { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
287 XVisualInfo *vinfo; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
288 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
289 /* 64 seems nice. */ |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
290 int attribs[64]; |
3100
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
291 int i = 0; |
3139 | 292 |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
293 /* Setup our GLX attributes according to the gl_config. */ |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
294 attribs[i++] = GLX_RGBA; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
295 attribs[i++] = GLX_RED_SIZE; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
296 attribs[i++] = _this->gl_config.red_size; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
297 attribs[i++] = GLX_GREEN_SIZE; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
298 attribs[i++] = _this->gl_config.green_size; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
299 attribs[i++] = GLX_BLUE_SIZE; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
300 attribs[i++] = _this->gl_config.blue_size; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
301 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
302 if (_this->gl_config.alpha_size) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
303 attribs[i++] = GLX_ALPHA_SIZE; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
304 attribs[i++] = _this->gl_config.alpha_size; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
305 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
306 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
307 if (_this->gl_config.buffer_size) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
308 attribs[i++] = GLX_BUFFER_SIZE; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
309 attribs[i++] = _this->gl_config.buffer_size; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
310 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
311 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
312 if (_this->gl_config.double_buffer) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
313 attribs[i++] = GLX_DOUBLEBUFFER; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
314 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
315 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
316 attribs[i++] = GLX_DEPTH_SIZE; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
317 attribs[i++] = _this->gl_config.depth_size; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
318 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
319 if (_this->gl_config.stencil_size) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
320 attribs[i++] = GLX_STENCIL_SIZE; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
321 attribs[i++] = _this->gl_config.stencil_size; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
322 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
323 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
324 if (_this->gl_config.accum_red_size) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
325 attribs[i++] = GLX_ACCUM_RED_SIZE; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
326 attribs[i++] = _this->gl_config.accum_red_size; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
327 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
328 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
329 if (_this->gl_config.accum_green_size) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
330 attribs[i++] = GLX_ACCUM_GREEN_SIZE; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
331 attribs[i++] = _this->gl_config.accum_green_size; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
332 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
333 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
334 if (_this->gl_config.accum_blue_size) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
335 attribs[i++] = GLX_ACCUM_BLUE_SIZE; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
336 attribs[i++] = _this->gl_config.accum_blue_size; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
337 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
338 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
339 if (_this->gl_config.accum_alpha_size) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
340 attribs[i++] = GLX_ACCUM_ALPHA_SIZE; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
341 attribs[i++] = _this->gl_config.accum_alpha_size; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
342 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
343 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
344 if (_this->gl_config.stereo) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
345 attribs[i++] = GLX_STEREO; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
346 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
347 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
348 if (_this->gl_config.multisamplebuffers) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
349 attribs[i++] = GLX_SAMPLE_BUFFERS_ARB; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
350 attribs[i++] = _this->gl_config.multisamplebuffers; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
351 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
352 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
353 if (_this->gl_config.multisamplesamples) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
354 attribs[i++] = GLX_SAMPLES_ARB; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
355 attribs[i++] = _this->gl_config.multisamplesamples; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
356 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
357 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
358 if (_this->gl_config.accelerated >= 0 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
359 && _this->gl_data->HAS_GLX_EXT_visual_rating) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
360 attribs[i++] = GLX_VISUAL_CAVEAT_EXT; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
361 attribs[i++] = GLX_NONE_EXT; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
362 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
363 #ifdef GLX_DIRECT_COLOR /* Try for a DirectColor visual for gamma support */ |
2963
ee331407574f
Don't use DirectColor visuals until we implement DirectColor colormap support
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
364 if (X11_UseDirectColorVisuals()) { |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
365 attribs[i++] = GLX_X_VISUAL_TYPE; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
366 attribs[i++] = GLX_DIRECT_COLOR; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
367 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
368 #endif |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
369 attribs[i++] = None; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
370 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
371 vinfo = _this->gl_data->glXChooseVisual(display, screen, attribs); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
372 #ifdef GLX_DIRECT_COLOR |
2963
ee331407574f
Don't use DirectColor visuals until we implement DirectColor colormap support
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
373 if (!vinfo && X11_UseDirectColorVisuals()) { /* No DirectColor visual? Try again.. */ |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
374 attribs[i - 3] = None; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
375 vinfo = _this->gl_data->glXChooseVisual(display, screen, attribs); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
376 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
377 #endif |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
378 if (!vinfo) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
379 SDL_SetError("Couldn't find matching GLX visual"); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
380 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
381 return vinfo; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
382 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
383 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
384 SDL_GLContext |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
385 X11_GL_CreateContext(_THIS, SDL_Window * window) |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
386 { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
387 SDL_WindowData *data = (SDL_WindowData *) window->driverdata; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
388 Display *display = data->videodata->display; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
389 int screen = |
3013
8cc00819c8d6
Reverted Bob's indent checkin
Sam Lantinga <slouken@libsdl.org>
parents:
3011
diff
changeset
|
390 ((SDL_DisplayData *) SDL_GetDisplayFromWindow(window)-> |
8cc00819c8d6
Reverted Bob's indent checkin
Sam Lantinga <slouken@libsdl.org>
parents:
3011
diff
changeset
|
391 driverdata)->screen; |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
392 XWindowAttributes xattr; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
393 XVisualInfo v, *vinfo; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
394 int n; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
395 GLXContext context = NULL; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
396 |
1955 | 397 /* We do this to create a clean separation between X and GLX errors. */ |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
398 XSync(display, False); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
399 XGetWindowAttributes(display, data->window, &xattr); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
400 v.screen = screen; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
401 v.visualid = XVisualIDFromVisual(xattr.visual); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
402 vinfo = XGetVisualInfo(display, VisualScreenMask | VisualIDMask, &v, &n); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
403 if (vinfo) { |
3139 | 404 if (_this->gl_config.major_version < 3) { |
3100
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
405 context = |
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
406 _this->gl_data->glXCreateContext(display, vinfo, NULL, True); |
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
407 } else { |
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
408 /* If we want a GL 3.0 context or later we need to get a temporary |
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
409 context to grab the new context creation function */ |
3139 | 410 GLXContext temp_context = |
411 _this->gl_data->glXCreateContext(display, vinfo, NULL, True); | |
3100
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
412 if (!temp_context) { |
3139 | 413 SDL_SetError("Could not create GL context"); |
3100
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
414 return NULL; |
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
415 } else { |
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
416 int attribs[] = { |
3139 | 417 GLX_CONTEXT_MAJOR_VERSION_ARB, |
418 _this->gl_config.major_version, | |
419 GLX_CONTEXT_MINOR_VERSION_ARB, | |
420 _this->gl_config.minor_version, | |
421 0 | |
3100
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
422 }; |
3139 | 423 |
3100
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
424 /* Get a pointer to the context creation function for GL 3.0 */ |
3139 | 425 PFNGLXCREATECONTEXTATTRIBSARBPROC glXCreateContextAttribs = |
426 (PFNGLXCREATECONTEXTATTRIBSARBPROC) _this->gl_data-> | |
427 glXGetProcAddress((GLubyte *) | |
428 "glXCreateContextAttribsARB"); | |
3100
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
429 if (!glXCreateContextAttribs) { |
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
430 SDL_SetError("GL 3.x is not supported"); |
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
431 context = temp_context; |
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
432 } else { |
3105 | 433 /* Create a GL 3.x context */ |
3100
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
434 GLXFBConfig *framebuffer_config = NULL; |
3139 | 435 int fbcount = 0; |
436 GLXFBConfig *(*glXChooseFBConfig) (Display * disp, | |
437 int screen, | |
438 const int *attrib_list, | |
439 int *nelements); | |
3105 | 440 |
3139 | 441 glXChooseFBConfig = |
442 (GLXFBConfig * | |
443 (*)(Display *, int, const int *, | |
444 int *)) _this->gl_data-> | |
445 glXGetProcAddress((GLubyte *) "glXChooseFBConfig"); | |
3105 | 446 |
3139 | 447 if (!glXChooseFBConfig |
448 || !(framebuffer_config = | |
449 glXChooseFBConfig(display, | |
450 DefaultScreen(display), NULL, | |
451 &fbcount))) { | |
452 SDL_SetError | |
453 ("No good framebuffers found. GL 3.x disabled"); | |
3100
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
454 context = temp_context; |
3139 | 455 } else { |
456 context = | |
457 glXCreateContextAttribs(display, | |
458 framebuffer_config[0], | |
459 NULL, True, attribs); | |
460 _this->gl_data->glXDestroyContext(display, | |
461 temp_context); | |
3100
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
462 } |
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
463 } |
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
464 } |
7dc982143c06
Date: Sun, 22 Mar 2009 12:52:29 +0000
Sam Lantinga <slouken@libsdl.org>
parents:
3057
diff
changeset
|
465 } |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
466 XFree(vinfo); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
467 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
468 XSync(display, False); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
469 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
470 if (!context) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
471 SDL_SetError("Could not create GL context"); |
2178
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2105
diff
changeset
|
472 return NULL; |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
473 } |
2178
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2105
diff
changeset
|
474 |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2105
diff
changeset
|
475 if (X11_GL_MakeCurrent(_this, window, context) < 0) { |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2105
diff
changeset
|
476 X11_GL_DeleteContext(_this, context); |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2105
diff
changeset
|
477 return NULL; |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2105
diff
changeset
|
478 } |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2105
diff
changeset
|
479 |
114a541cfae2
Creating a context makes it current, per the documentation.
Sam Lantinga <slouken@libsdl.org>
parents:
2105
diff
changeset
|
480 return context; |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
481 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
482 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
483 int |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
484 X11_GL_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context) |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
485 { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
486 Display *display = ((SDL_VideoData *) _this->driverdata)->display; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
487 Window drawable = |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
488 (window ? ((SDL_WindowData *) window->driverdata)->window : None); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
489 GLXContext glx_context = (GLXContext) context; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
490 int status; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
491 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
492 status = 0; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
493 if (!_this->gl_data->glXMakeCurrent(display, drawable, glx_context)) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
494 SDL_SetError("Unable to make GL context current"); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
495 status = -1; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
496 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
497 XSync(display, False); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
498 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
499 return (status); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
500 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
501 |
2327
7b53a8401195
In testdyngl.c the event type was being anded (&) with SDL_KEYDOWN and if the result was none zero the program was quiting. This is very weird because it was
Bob Pendleton <bob@pendleton.com>
parents:
2324
diff
changeset
|
502 /* |
7b53a8401195
In testdyngl.c the event type was being anded (&) with SDL_KEYDOWN and if the result was none zero the program was quiting. This is very weird because it was
Bob Pendleton <bob@pendleton.com>
parents:
2324
diff
changeset
|
503 0 is a valid argument to glxSwapIntervalMESA and setting it to 0 |
7b53a8401195
In testdyngl.c the event type was being anded (&) with SDL_KEYDOWN and if the result was none zero the program was quiting. This is very weird because it was
Bob Pendleton <bob@pendleton.com>
parents:
2324
diff
changeset
|
504 with the MESA version of the extension will undo the effect of a |
7b53a8401195
In testdyngl.c the event type was being anded (&) with SDL_KEYDOWN and if the result was none zero the program was quiting. This is very weird because it was
Bob Pendleton <bob@pendleton.com>
parents:
2324
diff
changeset
|
505 previous call with a value that is greater than zero (or at least |
7b53a8401195
In testdyngl.c the event type was being anded (&) with SDL_KEYDOWN and if the result was none zero the program was quiting. This is very weird because it was
Bob Pendleton <bob@pendleton.com>
parents:
2324
diff
changeset
|
506 that is what the FM says. OTOH, 0 is an invalid argument to |
7b53a8401195
In testdyngl.c the event type was being anded (&) with SDL_KEYDOWN and if the result was none zero the program was quiting. This is very weird because it was
Bob Pendleton <bob@pendleton.com>
parents:
2324
diff
changeset
|
507 glxSwapIntervalSGI and it returns an error if you call it with 0 as |
7b53a8401195
In testdyngl.c the event type was being anded (&) with SDL_KEYDOWN and if the result was none zero the program was quiting. This is very weird because it was
Bob Pendleton <bob@pendleton.com>
parents:
2324
diff
changeset
|
508 an argument. |
7b53a8401195
In testdyngl.c the event type was being anded (&) with SDL_KEYDOWN and if the result was none zero the program was quiting. This is very weird because it was
Bob Pendleton <bob@pendleton.com>
parents:
2324
diff
changeset
|
509 */ |
7b53a8401195
In testdyngl.c the event type was being anded (&) with SDL_KEYDOWN and if the result was none zero the program was quiting. This is very weird because it was
Bob Pendleton <bob@pendleton.com>
parents:
2324
diff
changeset
|
510 |
7b53a8401195
In testdyngl.c the event type was being anded (&) with SDL_KEYDOWN and if the result was none zero the program was quiting. This is very weird because it was
Bob Pendleton <bob@pendleton.com>
parents:
2324
diff
changeset
|
511 static int swapinterval = -1; |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
512 int |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
513 X11_GL_SetSwapInterval(_THIS, int interval) |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
514 { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
515 int status; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
516 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
517 if (_this->gl_data->glXSwapIntervalMESA) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
518 status = _this->gl_data->glXSwapIntervalMESA(interval); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
519 if (status != 0) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
520 SDL_SetError("glxSwapIntervalMESA failed"); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
521 status = -1; |
2327
7b53a8401195
In testdyngl.c the event type was being anded (&) with SDL_KEYDOWN and if the result was none zero the program was quiting. This is very weird because it was
Bob Pendleton <bob@pendleton.com>
parents:
2324
diff
changeset
|
522 } else { |
7b53a8401195
In testdyngl.c the event type was being anded (&) with SDL_KEYDOWN and if the result was none zero the program was quiting. This is very weird because it was
Bob Pendleton <bob@pendleton.com>
parents:
2324
diff
changeset
|
523 swapinterval = interval; |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
524 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
525 } else if (_this->gl_data->glXSwapIntervalSGI) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
526 status = _this->gl_data->glXSwapIntervalSGI(interval); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
527 if (status != 0) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
528 SDL_SetError("glxSwapIntervalSGI failed"); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
529 status = -1; |
2327
7b53a8401195
In testdyngl.c the event type was being anded (&) with SDL_KEYDOWN and if the result was none zero the program was quiting. This is very weird because it was
Bob Pendleton <bob@pendleton.com>
parents:
2324
diff
changeset
|
530 } else { |
7b53a8401195
In testdyngl.c the event type was being anded (&) with SDL_KEYDOWN and if the result was none zero the program was quiting. This is very weird because it was
Bob Pendleton <bob@pendleton.com>
parents:
2324
diff
changeset
|
531 swapinterval = interval; |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
532 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
533 } else { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
534 SDL_Unsupported(); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
535 status = -1; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
536 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
537 return status; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
538 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
539 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
540 int |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
541 X11_GL_GetSwapInterval(_THIS) |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
542 { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
543 if (_this->gl_data->glXGetSwapIntervalMESA) { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
544 return _this->gl_data->glXGetSwapIntervalMESA(); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
545 } else { |
2327
7b53a8401195
In testdyngl.c the event type was being anded (&) with SDL_KEYDOWN and if the result was none zero the program was quiting. This is very weird because it was
Bob Pendleton <bob@pendleton.com>
parents:
2324
diff
changeset
|
546 return swapinterval; |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
547 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
548 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
549 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
550 void |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
551 X11_GL_SwapWindow(_THIS, SDL_Window * window) |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
552 { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
553 SDL_WindowData *data = (SDL_WindowData *) window->driverdata; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
554 Display *display = data->videodata->display; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
555 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
556 _this->gl_data->glXSwapBuffers(display, data->window); |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
557 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
558 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
559 void |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
560 X11_GL_DeleteContext(_THIS, SDL_GLContext context) |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
561 { |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
562 Display *display = ((SDL_VideoData *) _this->driverdata)->display; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
563 GLXContext glx_context = (GLXContext) context; |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
564 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
565 _this->gl_data->glXDestroyContext(display, glx_context); |
2324
3202e4826c57
more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents:
2323
diff
changeset
|
566 XSync(display, False); |
1952
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
567 } |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
568 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
569 #endif /* SDL_VIDEO_OPENGL_GLX */ |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
570 |
420716272158
Implemented X11 OpenGL support.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
571 /* vi: set ts=4 sw=4 expandtab: */ |