This is glxapi.c in view mode; [Download] [Up]
/* $Id: glxapi.c,v 1.1 1997/05/24 12:10:09 brianp Exp $ */ /* * Mesa 3-D graphics library * Version: 2.3 * Copyright (C) 1995-1997 Brian Paul * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* * $Log: glxapi.c,v $ * Revision 1.1 1997/05/24 12:10:09 brianp * Initial revision * */ /* * GLX API functions which either call fake or real GLX implementations * * To enable real GLX encoding the REALGLX preprocessor symbol should be * defined on the command line. */ #include <X11/Xlib.h> #include <X11/Xutil.h> #include "GL/glx.h" #include "fakeglx.h" #include "realglx.h" #ifdef REALGLX static Display *CurrentDisplay = NULL; #endif /* * This functions determines whether a call to a glX*() function should * be routed to the "fake" (Mesa) or "real" (GLX-encoder) functions. * Input: dpy - the X display. * Return: GL_TRUE if the given display supports the real GLX extension, * GL_FALSE otherwise. */ static GLboolean display_has_glx( Display *dpy ) { /* TODO: we should use a lookup table to avoid calling XQueryExtension * every time. */ int ignore; if (XQueryExtension( dpy, "GLX", &ignore, &ignore, &ignore )) { return GL_TRUE; } else { return GL_FALSE; } } XVisualInfo *glXChooseVisual( Display *dpy, int screen, int *list ) { #ifdef REALGLX if (display_has_glx(dpy)) return Real_glXChooseVisual( dpy, screen, list ); else #endif return Fake_glXChooseVisual( dpy, screen, list ); } int glXGetConfig( Display *dpy, XVisualInfo *visinfo, int attrib, int *value ) { #ifdef REALGLX if (display_has_glx(dpy)) return Real_glXGetConfig( dpy, visinfo, attrib, value ); else #endif return Fake_glXGetConfig( dpy, visinfo, attrib, value ); } GLXContext glXCreateContext( Display *dpy, XVisualInfo *visinfo, GLXContext shareList, Bool direct ) { #ifdef REALGLX if (display_has_glx(dpy)) return Real_glXCreateContext( dpy, visinfo, shareList, direct ); else #endif return Fake_glXCreateContext( dpy, visinfo, shareList, direct ); } void glXDestroyContext( Display *dpy, GLXContext ctx ) { #ifdef REALGLX if (display_has_glx(dpy)) Real_glXDestroyContext( dpy, ctx ); else #endif Fake_glXDestroyContext( dpy, ctx ); } void glXCopyContext( Display *dpy, GLXContext src, GLXContext dst, GLuint mask ) { #ifdef REALGLX if (display_has_glx(dpy)) Real_glXCopyContext( dpy, src, dst, mask ); else #endif Fake_glXCopyContext( dpy, src, dst, mask ); } Bool glXMakeCurrent( Display *dpy, GLXDrawable drawable, GLXContext ctx ) { #ifdef REALGLX if (display_has_glx(dpy)) { if (Real_glXMakeCurrent( dpy, drawable, ctx )) { CurrentDisplay = dpy; return True; } else { return False; } } else { if (Fake_glXMakeCurrent( dpy, drawable, ctx )) { CurrentDisplay = dpy; return True; } else { return False; } } #else return Fake_glXMakeCurrent( dpy, drawable, ctx ); #endif } GLXContext glXGetCurrentContext( void ) { #ifdef REALGLX if (display_has_glx(CurrentDisplay)) return Real_glXGetCurrentContext(); else #endif return Fake_glXGetCurrentContext(); } GLXDrawable glXGetCurrentDrawable( void ) { #ifdef REALGLX if (display_has_glx(CurrentDisplay)) return Real_glXGetCurrentDrawable(); else #endif return Fake_glXGetCurrentDrawable(); } GLXPixmap glXCreateGLXPixmap( Display *dpy, XVisualInfo *visinfo, Pixmap pixmap ) { #ifdef REALGLX if (display_has_glx(dpy)) return Real_glXCreateGLXPixmap( dpy, visinfo, pixmap ); else #endif return Fake_glXCreateGLXPixmap( dpy, visinfo, pixmap ); } void glXDestroyGLXPixmap( Display *dpy, GLXPixmap pixmap ) { #ifdef REALGLX if (display_has_glx(dpy)) Real_glXDestroyGLXPixmap( dpy, pixmap ); else #endif Fake_glXDestroyGLXPixmap( dpy, pixmap ); } Bool glXQueryExtension( Display *dpy, int *errorb, int *event ) { #ifdef REALGLX if (display_has_glx(dpy)) return Real_glXQueryExtension( dpy, errorb, event ); else #endif return Fake_glXQueryExtension( dpy, errorb, event ); } Bool glXIsDirect( Display *dpy, GLXContext ctx ) { #ifdef REALGLX if (display_has_glx(dpy)) return Real_glXIsDirect( dpy, ctx ); else #endif return Fake_glXIsDirect( dpy, ctx ); } void glXSwapBuffers( Display *dpy, GLXDrawable drawable ) { #ifdef REALGLX if (display_has_glx(dpy)) Real_glXSwapBuffers( dpy, drawable ); else #endif Fake_glXSwapBuffers( dpy, drawable ); } Bool glXQueryVersion( Display *dpy, int *maj, int *min ) { #ifdef REALGLX if (display_has_glx(dpy)) return Real_glXQueryVersion( dpy, maj, min ); else #endif return Fake_glXQueryVersion( dpy, maj, min ); } void glXUseXFont( Font font, int first, int count, int listBase ) { #ifdef REALGLX if (display_has_glx(CurrentDisplay)) Real_glXUseXFont( font, first, count, listBase ); else #endif Fake_glXUseXFont( font, first, count, listBase ); } void glXWaitGL( void ) { #ifdef REALGLX if (display_has_glx(CurrentDisplay)) Real_glXWaitGL(); else #endif Fake_glXWaitGL(); } void glXWaitX( void ) { #ifdef REALGLX if (display_has_glx(CurrentDisplay)) Real_glXWaitX(); else #endif Fake_glXWaitX(); } /* GLX 1.1 and later */ const char *glXQueryExtensionsString( Display *dpy, int screen ) { #ifdef REALGLX if (display_has_glx(dpy)) return Real_glXQueryExtensionsString( dpy, screen ); else #endif return Fake_glXQueryExtensionsString( dpy, screen ); } /* GLX 1.1 and later */ const char *glXQueryServerString( Display *dpy, int screen, int name ) { #ifdef REALGLX if (display_has_glx(dpy)) return Real_glXQueryServerString( dpy, screen, name ); else #endif return Fake_glXQueryServerString( dpy, screen, name ); } /* GLX 1.1 and later */ const char *glXGetClientString( Display *dpy, int name ) { #ifdef REALGLX if (display_has_glx(dpy)) return Real_glXGetClientString( dpy, name ); else #endif return Fake_glXGetClientString( dpy, name ); } #ifdef GLX_MESA_release_buffers Bool glXReleaseBuffersMESA( Display *dpy, Window w ) { #ifdef REALGLX if (display_has_glx(dpy)) return GL_FALSE; else #endif return Fake_glXReleaseBuffersMESA( dpy, w ); } #endif #ifdef GLX_MESA_pixmap_colormap GLXPixmap glXCreateGLXPixmapMESA( Display *dpy, XVisualInfo *visinfo, Pixmap pixmap, Colormap cmap ) { #ifdef REALGLX if (display_has_glx(dpy)) return 0; else #endif return Fake_glXCreateGLXPixmapMESA( dpy, visinfo, pixmap, cmap ); } #endif
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.