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
31struct 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 */
87extern XVisualInfo *X11_GL_GetVisual(_THIS);
88extern int X11_GL_CreateWindow(_THIS, int w, int h);
89extern int X11_GL_CreateContext(_THIS);
90extern void X11_GL_Shutdown(_THIS);
91#if SDL_VIDEO_OPENGL_GLX
92extern int X11_GL_MakeCurrent(_THIS);
93extern int X11_GL_GetAttribute(_THIS, SDL_GLattr attrib, int* value);
94extern void X11_GL_SwapBuffers(_THIS);
95extern int X11_GL_LoadLibrary(_THIS, const char* path);
96extern void *X11_GL_GetProcAddress(_THIS, const char* proc);
97#endif
98extern void X11_GL_UnloadLibrary(_THIS);
99
100