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