146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/*
246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    SDL - Simple DirectMedia Layer
346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    Copyright (C) 1997-2006 Sam Lantinga
446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    This library is free software; you can redistribute it and/or
646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    modify it under the terms of the GNU Lesser General Public
746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    License as published by the Free Software Foundation; either
846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    version 2.1 of the License, or (at your option) any later version.
946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
1046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    This library is distributed in the hope that it will be useful,
1146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    but WITHOUT ANY WARRANTY; without even the implied warranty of
1246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    Lesser General Public License for more details.
1446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
1546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    You should have received a copy of the GNU Lesser General Public
1646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    License along with this library; if not, write to the Free Software
1746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
1846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
1946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    Sam Lantinga
2046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    slouken@libsdl.org
2146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner*/
2246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_config.h"
2346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
2446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#if SDL_VIDEO_OPENGL_GLX
2546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include <GL/glx.h>
2646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_loadso.h"
2746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
2846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
2946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "../SDL_sysvideo.h"
3046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
3146be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerstruct SDL_PrivateGLData {
3246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    int gl_active; /* to stop switching drivers while we have a valid context */
3346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
3446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#if SDL_VIDEO_OPENGL_GLX
3546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    GLXContext glx_context;	/* Current GL context */
3646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    XVisualInfo* glx_visualinfo; /* XVisualInfo* returned by glXChooseVisual */
3746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
3846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    void * (*glXGetProcAddress)(const GLubyte *procName);
3946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
4046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    XVisualInfo* (*glXChooseVisual)
4146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		( Display*		dpy,
4246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		  int			screen,
4346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		  int*			attribList );
4446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
4546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    GLXContext (*glXCreateContext)
4646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		( Display*		dpy,
4746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		  XVisualInfo*		vis,
4846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		  GLXContext		shareList,
4946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		  Bool			direct );
5046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
5146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    void (*glXDestroyContext)
5246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		( Display* 		dpy,
5346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		  GLXContext		ctx );
5446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
5546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    Bool (*glXMakeCurrent)
5646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		( Display*		dpy,
5746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		  GLXDrawable		drawable,
5846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		  GLXContext		ctx );
5946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
6046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    void (*glXSwapBuffers)
6146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		( Display*		dpy,
6246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner		  GLXDrawable		drawable );
6346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
6446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    int (*glXGetConfig)
6546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	 ( Display* dpy,
6646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	   XVisualInfo* visual_info,
6746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	   int attrib,
6846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	   int* value );
6946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
7046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    const char *(*glXQueryExtensionsString)
7146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	    ( Display* dpy,
7246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner	      int screen );
7346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
7446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    int (*glXSwapIntervalSGI) ( int interval );
7546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    GLint (*glXSwapIntervalMESA) ( unsigned interval );
7646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner    GLint (*glXGetSwapIntervalMESA) ( void );
7746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
7846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif /* SDL_VIDEO_OPENGL_GLX */
7946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner};
8046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
8146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Old variable names */
8246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define gl_active		(this->gl_data->gl_active)
8346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define glx_context		(this->gl_data->glx_context)
8446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define glx_visualinfo		(this->gl_data->glx_visualinfo)
8546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
8646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* OpenGL functions */
8746be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern XVisualInfo *X11_GL_GetVisual(_THIS);
8846be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern int X11_GL_CreateWindow(_THIS, int w, int h);
8946be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern int X11_GL_CreateContext(_THIS);
9046be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern void X11_GL_Shutdown(_THIS);
9146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#if SDL_VIDEO_OPENGL_GLX
9246be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern int X11_GL_MakeCurrent(_THIS);
9346be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern int X11_GL_GetAttribute(_THIS, SDL_GLattr attrib, int* value);
9446be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern void X11_GL_SwapBuffers(_THIS);
9546be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern int X11_GL_LoadLibrary(_THIS, const char* path);
9646be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern void *X11_GL_GetProcAddress(_THIS, const char* proc);
9746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif
9846be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern void X11_GL_UnloadLibrary(_THIS);
9946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner
100