changes for new GLX dispatcher
authorBrian Paul <brian.paul@tungstengraphics.com>
Sun, 28 Nov 1999 20:08:02 +0000 (20:08 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Sun, 28 Nov 1999 20:08:02 +0000 (20:08 +0000)
src/mesa/drivers/x11/fakeglx.c

index 538793f9b4615b3ff4697deaee909fbe5bfb6a11..84d95f6846372ea8c75d7f071f1362d4c4f793d0 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: fakeglx.c,v 1.17 1999/11/25 17:37:49 brianp Exp $ */
+/* $Id: fakeglx.c,v 1.18 1999/11/28 20:08:02 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -25,9 +25,6 @@
  */
 
 
-
-
-
 /*
  * A pseudo-GLX implementation to allow OpenGL/GLX programs to work with Mesa.
  * The Fake_glX*() functions implemented here are called from glxapi.c
 
 
 #include "glxheader.h"
+#include "glxapi.h"
 #include "GL/xmesa.h"
 #include "context.h"
 #include "config.h"
-#include "fakeglx.h"
 #include "macros.h"
 #include "types.h"
 #include "xmesaP.h"
@@ -851,7 +848,8 @@ static XVisualInfo *choose_x_overlay_visual( Display *dpy, int scr,
 
 
 
-XVisualInfo *Fake_glXChooseVisual( Display *dpy, int screen, int *list )
+static XVisualInfo *
+Fake_glXChooseVisual( Display *dpy, int screen, int *list )
 {
    int *parselist;
    XVisualInfo *vis;
@@ -1028,8 +1026,9 @@ XVisualInfo *Fake_glXChooseVisual( Display *dpy, int screen, int *list )
 
 
 
-GLXContext Fake_glXCreateContext( Display *dpy, XVisualInfo *visinfo,
-                                  GLXContext share_list, Bool direct )
+static GLXContext
+Fake_glXCreateContext( Display *dpy, XVisualInfo *visinfo,
+                       GLXContext share_list, Bool direct )
 {
    XMesaVisual glxvis;
    XMesaContext xmctx;
@@ -1062,57 +1061,10 @@ static GLXDrawable MakeCurrent_PrevReadable = 0;
 static XMesaBuffer MakeCurrent_PrevDrawBuffer = 0;
 static XMesaBuffer MakeCurrent_PrevReadBuffer = 0;
 
-Bool Fake_glXMakeCurrent( Display *dpy, GLXDrawable drawable, GLXContext ctx )
-{
-#if 1
-   return Fake_glXMakeContextCurrent( dpy, drawable, drawable, ctx );
-#endif
-#if 0
-   if (ctx && drawable) {
-      XMesaBuffer buffer;
-      XMesaContext xmctx = (XMesaContext) ctx;
-
-      if (drawable==MakeCurrent_PrevDrawable && ctx==MakeCurrent_PrevContext) {
-         buffer = MakeCurrent_PrevDrawBuffer;
-      }
-      else {
-         buffer = XMesaFindBuffer( dpy, drawable );
-      }
-      if (!buffer) {
-         /* drawable must be a new window! */
-         buffer = XMesaCreateWindowBuffer2( xmctx->xm_visual, drawable, ctx );
-         if (!buffer) {
-            /* Out of memory, or context/drawable depth mismatch */
-            return False;
-         }
-      }
-      MakeCurrent_PrevContext = ctx;
-      MakeCurrent_PrevDrawable = drawable;
-      MakeCurrent_PrevDrawBuffer = buffer;
-
-      /* Now make current! */
-      return (Bool) XMesaMakeCurrent( (XMesaContext) ctx, buffer );
-   }
-   else if (!ctx && !drawable) {
-      /* release current context w/out assigning new one. */
-      XMesaMakeCurrent( NULL, NULL );
-      MakeCurrent_PrevContext = 0;
-      MakeCurrent_PrevDrawable = 0;
-      MakeCurrent_PrevDrawBuffer = 0;
-      return True;
-   }
-   else {
-      /* ctx XOR drawable is NULL, this is an error */
-      return False;
-   }
-#endif
-}
-
-
-
 /* GLX 1.3 and later */
-Bool Fake_glXMakeContextCurrent( Display *dpy, GLXDrawable draw,
-                                 GLXDrawable read, GLXContext ctx )
+static Bool
+Fake_glXMakeContextCurrent( Display *dpy, GLXDrawable draw,
+                            GLXDrawable read, GLXContext ctx )
 {
    if (ctx && draw && read) {
       XMesaBuffer drawBuffer, readBuffer;
@@ -1180,8 +1132,19 @@ Bool Fake_glXMakeContextCurrent( Display *dpy, GLXDrawable draw,
 }
 
 
+
+static Bool
+Fake_glXMakeCurrent( Display *dpy, GLXDrawable drawable, GLXContext ctx )
+{
+   return Fake_glXMakeContextCurrent( dpy, drawable, drawable, ctx );
+}
+
+
+
 /* GLX 1.3 and later */
-GLXDrawable Fake_glXGetCurrentReadDrawable( void )
+#if 0
+static GLXDrawable
+Fake_glXGetCurrentReadDrawable( void )
 {
    XMesaBuffer b = XMesaGetCurrentReadBuffer();
    if (b) {
@@ -1191,11 +1154,11 @@ GLXDrawable Fake_glXGetCurrentReadDrawable( void )
       return 0;
    }
 }
+#endif
 
 
-
-GLXPixmap Fake_glXCreateGLXPixmap( Display *dpy, XVisualInfo *visinfo,
-                                   Pixmap pixmap )
+static GLXPixmap
+Fake_glXCreateGLXPixmap( Display *dpy, XVisualInfo *visinfo, Pixmap pixmap )
 {
    XMesaVisual v;
    XMesaBuffer b;
@@ -1219,8 +1182,9 @@ GLXPixmap Fake_glXCreateGLXPixmap( Display *dpy, XVisualInfo *visinfo,
 
 #ifdef GLX_MESA_pixmap_colormap
 
-GLXPixmap Fake_glXCreateGLXPixmapMESA( Display *dpy, XVisualInfo *visinfo,
-                                       Pixmap pixmap, Colormap cmap )
+static GLXPixmap
+Fake_glXCreateGLXPixmapMESA( Display *dpy, XVisualInfo *visinfo,
+                             Pixmap pixmap, Colormap cmap )
 {
    XMesaVisual v;
    XMesaBuffer b;
@@ -1244,7 +1208,8 @@ GLXPixmap Fake_glXCreateGLXPixmapMESA( Display *dpy, XVisualInfo *visinfo,
 #endif
 
 
-void Fake_glXDestroyGLXPixmap( Display *dpy, GLXPixmap pixmap )
+static void
+Fake_glXDestroyGLXPixmap( Display *dpy, GLXPixmap pixmap )
 {
    XMesaBuffer b = XMesaFindBuffer(dpy, pixmap);
    if (b) {
@@ -1256,8 +1221,9 @@ void Fake_glXDestroyGLXPixmap( Display *dpy, GLXPixmap pixmap )
 }
 
 
-void Fake_glXCopyContext( Display *dpy, GLXContext src, GLXContext dst,
-                          GLuint mask )
+static void
+Fake_glXCopyContext( Display *dpy, GLXContext src, GLXContext dst,
+                     GLuint mask )
 {
    XMesaContext xm_src = (XMesaContext) src;
    XMesaContext xm_dst = (XMesaContext) dst;
@@ -1267,7 +1233,8 @@ void Fake_glXCopyContext( Display *dpy, GLXContext src, GLXContext dst,
 
 
 
-Bool Fake_glXQueryExtension( Display *dpy, int *errorb, int *event )
+static Bool
+Fake_glXQueryExtension( Display *dpy, int *errorb, int *event )
 {
    /* Mesa's GLX isn't really an X extension but we try to act like one. */
    (void) dpy;
@@ -1284,7 +1251,8 @@ void _kw_ungrab_all( Display *dpy )
 }
 
 
-void Fake_glXDestroyContext( Display *dpy, GLXContext ctx )
+static void
+Fake_glXDestroyContext( Display *dpy, GLXContext ctx )
 {
    (void) dpy;
    MakeCurrent_PrevContext = 0;
@@ -1298,7 +1266,8 @@ void Fake_glXDestroyContext( Display *dpy, GLXContext ctx )
 
 
 
-Bool Fake_glXIsDirect( Display *dpy, GLXContext ctx )
+static Bool
+Fake_glXIsDirect( Display *dpy, GLXContext ctx )
 {
    (void) dpy;
    return ((XMesaContext) ctx)->direct;
@@ -1306,7 +1275,8 @@ Bool Fake_glXIsDirect( Display *dpy, GLXContext ctx )
 
 
 
-void Fake_glXSwapBuffers( Display *dpy, GLXDrawable drawable )
+static void
+Fake_glXSwapBuffers( Display *dpy, GLXDrawable drawable )
 {
    XMesaBuffer buffer = XMesaFindBuffer( dpy, drawable );
 
@@ -1319,8 +1289,9 @@ void Fake_glXSwapBuffers( Display *dpy, GLXDrawable drawable )
 }
 
 
-void Fake_glXCopySubBufferMESA( Display *dpy, GLXDrawable drawable,
-                               int x, int y, int width, int height )
+static void
+Fake_glXCopySubBufferMESA( Display *dpy, GLXDrawable drawable,
+                           int x, int y, int width, int height )
 {
    XMesaBuffer buffer = XMesaFindBuffer( dpy, drawable );
    if (buffer) {
@@ -1333,7 +1304,8 @@ void Fake_glXCopySubBufferMESA( Display *dpy, GLXDrawable drawable,
 
 
 
-Bool Fake_glXQueryVersion( Display *dpy, int *maj, int *min )
+static Bool
+Fake_glXQueryVersion( Display *dpy, int *maj, int *min )
 {
    (void) dpy;
    /* Return GLX version, not Mesa version */
@@ -1348,8 +1320,9 @@ Bool Fake_glXQueryVersion( Display *dpy, int *maj, int *min )
 /*
  * Query the GLX attributes of the given XVisualInfo.
  */
-int Fake_glXGetConfig( Display *dpy, XVisualInfo *visinfo,
-                       int attrib, int *value )
+static int
+Fake_glXGetConfig( Display *dpy, XVisualInfo *visinfo,
+                   int attrib, int *value )
 {
    XMesaVisual glxvis;
 
@@ -1491,14 +1464,18 @@ int Fake_glXGetConfig( Display *dpy, XVisualInfo *visinfo,
 
 
 
-GLXContext Fake_glXGetCurrentContext( void )
+#if 0
+static GLXContext
+Fake_glXGetCurrentContext( void )
 {
    return (GLXContext) XMesaGetCurrentContext();
 }
+#endif
 
 
-
-GLXDrawable Fake_glXGetCurrentDrawable( void )
+#if 0
+static GLXDrawable
+Fake_glXGetCurrentDrawable( void )
 {
    XMesaBuffer b = XMesaGetCurrentBuffer();
    if (b) {
@@ -1508,9 +1485,11 @@ GLXDrawable Fake_glXGetCurrentDrawable( void )
       return 0;
    }
 }
+#endif
 
 
-void Fake_glXWaitGL( void )
+static void
+Fake_glXWaitGL( void )
 {
    XMesaContext xmesa = XMesaGetCurrentContext();
    XMesaFlush( xmesa );
@@ -1518,7 +1497,8 @@ void Fake_glXWaitGL( void )
 
 
 
-void Fake_glXWaitX( void )
+static void
+Fake_glXWaitX( void )
 {
    XMesaContext xmesa = XMesaGetCurrentContext();
    XMesaFlush( xmesa );
@@ -1542,7 +1522,8 @@ static const char *get_extensions( void )
 
 
 /* GLX 1.1 and later */
-const char *Fake_glXQueryExtensionsString( Display *dpy, int screen )
+static const char *
+Fake_glXQueryExtensionsString( Display *dpy, int screen )
 {
    (void) dpy;
    (void) screen;
@@ -1552,7 +1533,8 @@ const char *Fake_glXQueryExtensionsString( Display *dpy, int screen )
 
 
 /* GLX 1.1 and later */
-const char *Fake_glXQueryServerString( Display *dpy, int screen, int name )
+static const char *
+Fake_glXQueryServerString( Display *dpy, int screen, int name )
 {
    static char version[1000];
    sprintf(version, "%d.%d %s", SERVER_MAJOR_VERSION, SERVER_MINOR_VERSION,
@@ -1576,7 +1558,8 @@ const char *Fake_glXQueryServerString( Display *dpy, int screen, int name )
 
 
 /* GLX 1.1 and later */
-const char *Fake_glXGetClientString( Display *dpy, int name )
+static const char *
+Fake_glXGetClientString( Display *dpy, int name )
 {
    static char version[1000];
    sprintf(version, "%d.%d %s", CLIENT_MAJOR_VERSION, CLIENT_MINOR_VERSION,
@@ -1599,7 +1582,9 @@ const char *Fake_glXGetClientString( Display *dpy, int name )
 
 
 /* GLX 1.2 and later */
-Display *Fake_glXGetCurrentDisplay( void )
+#if 0
+static Display *
+Fake_glXGetCurrentDisplay( void )
 {
    XMesaContext xmesa = XMesaGetCurrentContext();
    if (xmesa && xmesa->xm_visual)
@@ -1607,6 +1592,159 @@ Display *Fake_glXGetCurrentDisplay( void )
    else
       return NULL;
 }
+#endif
+
+
+/*
+ * GLX 1.3 and later
+ */
+
+static GLXFBConfig
+Fake_glXChooseFBConfig( Display *dpy, int screen,
+                        const int *attribList, int *nitems )
+{
+   (void) dpy;
+   (void) screen;
+   (void) attribList;
+   (void) nitems;
+   return 0;
+}
+
+
+static int
+Fake_glXGetFBConfigAttrib( Display *dpy, GLXFBConfig config,
+                           int attribute, int *value )
+{
+   (void) dpy;
+   (void) config;
+   (void) attribute;
+   (void) value;
+   return 0;
+}
+
+
+static XVisualInfo *
+Fake_glXGetVisualFromFBConfig( Display *dpy, GLXFBConfig config )
+{
+   (void) dpy;
+   (void) config;
+   return 0;
+}
+
+
+static GLXWindow
+Fake_glXCreateWindow( Display *dpy, GLXFBConfig config, Window win,
+                      const int *attribList )
+{
+   (void) dpy;
+   (void) config;
+   (void) win;
+   (void) attribList;
+   return 0;
+}
+
+
+static void
+Fake_glXDestroyWindow( Display *dpy, GLXWindow window )
+{
+   (void) dpy;
+   (void) window;
+   return;
+}
+
+
+static GLXPixmap
+Fake_glXCreatePixmap( Display *dpy, GLXFBConfig config, Pixmap pixmap,
+                      const int *attribList )
+{
+   (void) dpy;
+   (void) config;
+   (void) pixmap;
+   (void) attribList;
+   return 0;
+}
+
+
+static void
+Fake_glXDestroyPixmap( Display *dpy, GLXPixmap pixmap )
+{
+   (void) dpy;
+   (void) pixmap;
+   return;
+}
+
+
+static GLXPbuffer
+Fake_glXCreatePbuffer( Display *dpy, GLXFBConfig config,
+                       const int *attribList )
+{
+   (void) dpy;
+   (void) config;
+   (void) attribList;
+   return 0;
+}
+
+
+static void
+Fake_glXDestroyPbuffer( Display *dpy, GLXPbuffer pbuf )
+{
+   (void) dpy;
+   (void) pbuf;
+}
+
+
+static void
+Fake_glXQueryDrawable( Display *dpy, GLXDrawable draw, int attribute,
+                       unsigned int *value )
+{
+   (void) dpy;
+   (void) draw;
+   (void) attribute;
+   (void) value;
+}
+
+
+static GLXContext
+Fake_glXCreateNewContext( Display *dpy, GLXFBConfig config,
+                          int renderType, GLXContext shareList, Bool direct )
+{
+   (void) dpy;
+   (void) config;
+   (void) renderType;
+   (void) shareList;
+   (void) direct;
+   return 0;
+}
+
+
+static int
+Fake_glXQueryContext( Display *dpy, GLXContext ctx, int attribute, int *value )
+{
+   (void) dpy;
+   (void) ctx;
+   (void) attribute;
+   (void) value;
+   return 0;
+}
+
+
+static void
+Fake_glXSelectEvent( Display *dpy, GLXDrawable drawable, unsigned long mask )
+{
+   (void) dpy;
+   (void) drawable;
+   (void) mask;
+}
+
+
+static void
+Fake_glXGetSelectedEvent( Display *dpy, GLXDrawable drawable,
+                          unsigned long *mask )
+{
+   (void) dpy;
+   (void) drawable;
+   (void) mask;
+}
 
 
 
@@ -1614,7 +1752,8 @@ Display *Fake_glXGetCurrentDisplay( void )
  * Release the depth, stencil, accum buffers attached to a GLXDrawable
  * (a window or pixmap) prior to destroying the GLXDrawable.
  */
-Bool Fake_glXReleaseBuffersMESA( Display *dpy, GLXDrawable d )
+static Bool
+Fake_glXReleaseBuffersMESA( Display *dpy, GLXDrawable d )
 {
    XMesaBuffer b = XMesaFindBuffer(dpy, d);
    if (b) {
@@ -1628,15 +1767,38 @@ Bool Fake_glXReleaseBuffersMESA( Display *dpy, GLXDrawable d )
 /*
  * GLX_MESA_set_3dfx_mode
  */
-GLboolean Fake_glXSet3DfxModeMESA( GLint mode )
+static GLboolean
+Fake_glXSet3DfxModeMESA( GLint mode )
 {
    return XMesaSetFXmode( mode );
 }
 
 
+/*
+ * GLX_SGI_video_sync
+ */
+
+#ifdef GLX_SGI_video_sync
+
+static int
+Fake_glXGetVideoSyncSGI(unsigned int *count)
+{
+   return 0;
+}
+
+
+static int
+Fake_glXWaitVideoSyncSGI(int divisor, int remainder, unsigned int *count)
+{
+   return 0;
+}
+
+#endif
+
+
 
 #if 0
-/*GLfunction Fake_glXGetProcAddress( const GLubyte *procName )*/
+/*GLfunction glXGetProcAddress( const GLubyte *procName )*/
 void (*Fake_glXGetProcAddress( const GLubyte *procName ))()
 {
    typedef void (*GLfunction)();
@@ -1669,3 +1831,93 @@ void (*Fake_glXGetProcAddress( const GLubyte *procName ))()
    return NULL;
 }
 #endif
+
+
+extern void Fake_glXUseXFont( Font font, int first, int count, int listbase );
+
+
+struct _glxapi_table *_mesa_GetGLXDispatchTable(void)
+{
+   static struct _glxapi_table glx;
+
+   /* be sure our dispatch table size <= libGL's table */
+   {
+      int size = sizeof(struct _glxapi_table) / sizeof(void *);
+      (void) size;
+      assert(_glxapi_get_dispatch_table_size() >= size);
+   }
+
+   /* initialize the whole table to no-ops */
+   _glxapi_set_no_op_table(&glx);
+
+   /* now initialize the table with the functions I implement */
+   glx.ChooseVisual = Fake_glXChooseVisual;
+   glx.CopyContext = Fake_glXCopyContext;
+   glx.CreateContext = Fake_glXCreateContext;
+   glx.CreateGLXPixmap = Fake_glXCreateGLXPixmap;
+   glx.DestroyContext = Fake_glXDestroyContext;
+   glx.DestroyGLXPixmap = Fake_glXDestroyGLXPixmap;
+   glx.GetConfig = Fake_glXGetConfig;
+   /*glx.GetCurrentContext = Fake_glXGetCurrentContext;*/
+   /*glx.GetCurrentDrawable = Fake_glXGetCurrentDrawable;*/
+   glx.IsDirect = Fake_glXIsDirect;
+   glx.MakeCurrent = Fake_glXMakeCurrent;
+   glx.QueryExtension = Fake_glXQueryExtension;
+   glx.QueryVersion = Fake_glXQueryVersion;
+   glx.SwapBuffers = Fake_glXSwapBuffers;
+   glx.UseXFont = Fake_glXUseXFont;
+   glx.WaitGL = Fake_glXWaitGL;
+   glx.WaitX = Fake_glXWaitX;
+
+#ifdef _GLXAPI_VERSION_1_1
+   glx.GetClientString = Fake_glXGetClientString;
+   glx.QueryExtensionsString = Fake_glXQueryExtensionsString;
+   glx.QueryServerString = Fake_glXQueryServerString;
+#endif
+
+#ifdef _GLXAPI_VERSION_1_2
+   /*glx.GetCurrentDisplay = Fake_glXGetCurrentDisplay;*/
+#endif
+
+#ifdef _GLXAPI_VERSION_1_3
+   glx.ChooseFBConfig = Fake_glXChooseFBConfig;
+   glx.CreateNewContext = Fake_glXCreateNewContext;
+   glx.CreatePbuffer = Fake_glXCreatePbuffer;
+   glx.CreatePixmap = Fake_glXCreatePixmap;
+   glx.CreateWindow = Fake_glXCreateWindow;
+   glx.DestroyPbuffer = Fake_glXDestroyPbuffer;
+   glx.DestroyPixmap = Fake_glXDestroyPixmap;
+   glx.DestroyWindow = Fake_glXDestroyWindow;
+   /*glx.GetCurrentReadDrawable = Fake_glXGetCurrentReadDrawable;*/
+   glx.GetFBConfigAttrib = Fake_glXGetFBConfigAttrib;
+   glx.GetSelectedEvent = Fake_glXGetSelectedEvent;
+   glx.GetVisualFromFBConfig = Fake_glXGetVisualFromFBConfig;
+   glx.MakeContextCurrent = Fake_glXMakeContextCurrent;
+   glx.QueryContext = Fake_glXQueryContext;
+   glx.QueryDrawable = Fake_glXQueryDrawable;
+   glx.SelectEvent = Fake_glXSelectEvent;
+#endif
+
+#ifdef _GLXAPI_SGI_video_sync
+   glx.GetVideoSyncSGI = Fake_glXGetVideoSyncSGI;
+   glx.WaitVideoSyncSGI = Fake_glXWaitVideoSyncSGI;
+#endif
+
+#ifdef _GLXAPI_MESA_copy_sub_buffer
+   glx.CopySubBufferMESA = Fake_glXCopySubBufferMESA;
+#endif
+
+#ifdef _GLXAPI_MESA_release_buffers
+   glx.ReleaseBuffersMESA = Fake_glXReleaseBuffersMESA;
+#endif
+
+#ifdef _GLXAPI_MESA_pixmap_colormap
+   glx.CreateGLXPixmapMESA = Fake_glXCreateGLXPixmapMESA;
+#endif
+
+#ifdef _GLXAPI_MESA_set_3dfx_mode
+   glx.Set3DfxModeMESA = Fake_glXSet3DfxModeMESA;
+#endif
+
+   return &glx;
+}