• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2     SDL - Simple DirectMedia Layer
3     Copyright (C) 1997-2012 Sam Lantinga
4 
5     This library is free software; you can redistribute it and/or
6     modify it under the terms of the GNU Lesser General Public
7     License as published by the Free Software Foundation; either
8     version 2.1 of the License, or (at your option) any later version.
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
13     Lesser General Public License for more details.
14 
15     You should have received a copy of the GNU Lesser General Public
16     License along with this library; if not, write to the Free Software
17     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18 
19     Sam Lantinga
20     slouken@libsdl.org
21 */
22 #include "SDL_config.h"
23 
24 #if SDL_VIDEO_OPENGL_GLX
25 #include <GL/glx.h>
26 #include "SDL_loadso.h"
27 #endif
28 
29 #include "../SDL_sysvideo.h"
30 
31 struct SDL_PrivateGLData {
32     int gl_active; /* to stop switching drivers while we have a valid context */
33 
34 #if SDL_VIDEO_OPENGL_GLX
35     GLXContext glx_context;	/* Current GL context */
36     XVisualInfo* glx_visualinfo; /* XVisualInfo* returned by glXChooseVisual */
37 
38     void * (*glXGetProcAddress)(const GLubyte *procName);
39 
40     XVisualInfo* (*glXChooseVisual)
41 		( Display*		dpy,
42 		  int			screen,
43 		  int*			attribList );
44 
45     GLXContext (*glXCreateContext)
46 		( Display*		dpy,
47 		  XVisualInfo*		vis,
48 		  GLXContext		shareList,
49 		  Bool			direct );
50 
51     void (*glXDestroyContext)
52 		( Display* 		dpy,
53 		  GLXContext		ctx );
54 
55     Bool (*glXMakeCurrent)
56 		( Display*		dpy,
57 		  GLXDrawable		drawable,
58 		  GLXContext		ctx );
59 
60     void (*glXSwapBuffers)
61 		( Display*		dpy,
62 		  GLXDrawable		drawable );
63 
64     int (*glXGetConfig)
65 	 ( Display* dpy,
66 	   XVisualInfo* visual_info,
67 	   int attrib,
68 	   int* value );
69 
70     const char *(*glXQueryExtensionsString)
71 	    ( Display* dpy,
72 	      int screen );
73 
74     int (*glXSwapIntervalSGI) ( int interval );
75     GLint (*glXSwapIntervalMESA) ( unsigned interval );
76     int (*glXSwapIntervalEXT)( Display *dpy, GLXDrawable drw, int interval);
77     int swap_interval;
78 #endif /* SDL_VIDEO_OPENGL_GLX */
79 };
80 
81 /* Old variable names */
82 #define gl_active		(this->gl_data->gl_active)
83 #define glx_context		(this->gl_data->glx_context)
84 #define glx_visualinfo		(this->gl_data->glx_visualinfo)
85 
86 /* OpenGL functions */
87 extern XVisualInfo *X11_GL_GetVisual(_THIS);
88 extern int X11_GL_CreateWindow(_THIS, int w, int h);
89 extern int X11_GL_CreateContext(_THIS);
90 extern void X11_GL_Shutdown(_THIS);
91 #if SDL_VIDEO_OPENGL_GLX
92 extern int X11_GL_MakeCurrent(_THIS);
93 extern int X11_GL_GetAttribute(_THIS, SDL_GLattr attrib, int* value);
94 extern void X11_GL_SwapBuffers(_THIS);
95 extern int X11_GL_LoadLibrary(_THIS, const char* path);
96 extern void *X11_GL_GetProcAddress(_THIS, const char* proc);
97 #endif
98 extern void X11_GL_UnloadLibrary(_THIS);
99 
100