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