1
2/*
3 * Mesa 3-D graphics library
4 * Version:  5.1
5 *
6 * Copyright (C) 1999-2002  Brian Paul   All Rights Reserved.
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a
9 * copy of this software and associated documentation files (the "Software"),
10 * to deal in the Software without restriction, including without limitation
11 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
12 * and/or sell copies of the Software, and to permit persons to whom the
13 * Software is furnished to do so, subject to the following conditions:
14 *
15 * The above copyright notice and this permission notice shall be included
16 * in all copies or substantial portions of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
21 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
22 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
23 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 */
25
26
27#include <assert.h>
28#include <GL/glx.h>
29#include "realglx.h"
30#include "glxapi.h"
31
32
33struct _glxapi_table *
34_real_GetGLXDispatchTable(void)
35{
36   static struct _glxapi_table glx;
37
38   /* be sure our dispatch table size <= libGL's table */
39   {
40      GLuint size = sizeof(struct _glxapi_table) / sizeof(void *);
41      (void) size;
42      assert(_glxapi_get_dispatch_table_size() >= size);
43   }
44
45   /* initialize the whole table to no-ops */
46   _glxapi_set_no_op_table(&glx);
47
48   /* now initialize the table with the functions I implement */
49
50   /*** GLX_VERSION_1_0 ***/
51   glx.ChooseVisual = _real_glXChooseVisual;
52   glx.CopyContext = _real_glXCopyContext;
53   glx.CreateContext = _real_glXCreateContext;
54   glx.CreateGLXPixmap = _real_glXCreateGLXPixmap;
55   glx.DestroyContext = _real_glXDestroyContext;
56   glx.DestroyGLXPixmap = _real_glXDestroyGLXPixmap;
57   glx.GetConfig = _real_glXGetConfig;
58   /*glx.GetCurrentContext = _real_glXGetCurrentContext;*/
59   /*glx.GetCurrentDrawable = _real_glXGetCurrentDrawable;*/
60   glx.IsDirect = _real_glXIsDirect;
61   glx.MakeCurrent = _real_glXMakeCurrent;
62   glx.QueryExtension = _real_glXQueryExtension;
63   glx.QueryVersion = _real_glXQueryVersion;
64   glx.SwapBuffers = _real_glXSwapBuffers;
65   glx.UseXFont = _real_glXUseXFont;
66   glx.WaitGL = _real_glXWaitGL;
67   glx.WaitX = _real_glXWaitX;
68
69   /*** GLX_VERSION_1_1 ***/
70   glx.GetClientString = _real_glXGetClientString;
71   glx.QueryExtensionsString = _real_glXQueryExtensionsString;
72   glx.QueryServerString = _real_glXQueryServerString;
73
74   /*** GLX_VERSION_1_2 ***/
75   /*glx.GetCurrentDisplay = _real_glXGetCurrentDisplay;*/
76
77   /*** GLX_VERSION_1_3 ***/
78   glx.ChooseFBConfig = _real_glXChooseFBConfig;
79   glx.CreateNewContext = _real_glXCreateNewContext;
80   glx.CreatePbuffer = _real_glXCreatePbuffer;
81   glx.CreatePixmap = _real_glXCreatePixmap;
82   glx.CreateWindow = _real_glXCreateWindow;
83   glx.DestroyPbuffer = _real_glXDestroyPbuffer;
84   glx.DestroyPixmap = _real_glXDestroyPixmap;
85   glx.DestroyWindow = _real_glXDestroyWindow;
86   /*glx.GetCurrentReadDrawable = _real_glXGetCurrentReadDrawable;*/
87   glx.GetFBConfigAttrib = _real_glXGetFBConfigAttrib;
88   glx.GetFBConfigs = _real_glXGetFBConfigs;
89   glx.GetSelectedEvent = _real_glXGetSelectedEvent;
90   glx.GetVisualFromFBConfig = _real_glXGetVisualFromFBConfig;
91   glx.MakeContextCurrent = _real_glXMakeContextCurrent;
92   glx.QueryContext = _real_glXQueryContext;
93   glx.QueryDrawable = _real_glXQueryDrawable;
94   glx.SelectEvent = _real_glXSelectEvent;
95
96   /*** GLX_SGI_swap_control ***/
97   glx.SwapIntervalSGI = _real_glXSwapIntervalSGI;
98
99   /*** GLX_SGI_video_sync ***/
100   glx.GetVideoSyncSGI = _real_glXGetVideoSyncSGI;
101   glx.WaitVideoSyncSGI = _real_glXWaitVideoSyncSGI;
102
103   /*** GLX_SGI_make_current_read ***/
104   glx.MakeCurrentReadSGI = _real_glXMakeCurrentReadSGI;
105   /*glx.GetCurrentReadDrawableSGI = _real_glXGetCurrentReadDrawableSGI;*/
106
107#if defined(_VL_H)
108   /*** GLX_SGIX_video_source ***/
109   glx.CreateGLXVideoSourceSGIX = _real_glXCreateGLXVideoSourceSGIX;
110   glx.DestroyGLXVideoSourceSGIX = _real_glXDestroyGLXVideoSourceSGIX;
111#endif
112
113   /*** GLX_EXT_import_context ***/
114   glx.FreeContextEXT = _real_glXFreeContextEXT;
115   /*glx.GetContextIDEXT = _real_glXGetContextIDEXT;*/
116   /*glx.GetCurrentDisplayEXT = _real_glXGetCurrentDisplayEXT;*/
117   glx.ImportContextEXT = _real_glXImportContextEXT;
118   glx.QueryContextInfoEXT = _real_glXQueryContextInfoEXT;
119
120   /*** GLX_SGIX_fbconfig ***/
121   glx.GetFBConfigAttribSGIX = _real_glXGetFBConfigAttribSGIX;
122   glx.ChooseFBConfigSGIX = _real_glXChooseFBConfigSGIX;
123   glx.CreateGLXPixmapWithConfigSGIX = _real_glXCreateGLXPixmapWithConfigSGIX;
124   glx.CreateContextWithConfigSGIX = _real_glXCreateContextWithConfigSGIX;
125   glx.GetVisualFromFBConfigSGIX = _real_glXGetVisualFromFBConfigSGIX;
126   glx.GetFBConfigFromVisualSGIX = _real_glXGetFBConfigFromVisualSGIX;
127
128   /*** GLX_SGIX_pbuffer ***/
129   glx.CreateGLXPbufferSGIX = _real_glXCreateGLXPbufferSGIX;
130   glx.DestroyGLXPbufferSGIX = _real_glXDestroyGLXPbufferSGIX;
131   glx.QueryGLXPbufferSGIX = _real_glXQueryGLXPbufferSGIX;
132   glx.SelectEventSGIX = _real_glXSelectEventSGIX;
133   glx.GetSelectedEventSGIX = _real_glXGetSelectedEventSGIX;
134
135   /*** GLX_SGI_cushion ***/
136   glx.CushionSGI = _real_glXCushionSGI;
137
138   /*** GLX_SGIX_video_resize ***/
139   glx.BindChannelToWindowSGIX = _real_glXBindChannelToWindowSGIX;
140   glx.ChannelRectSGIX = _real_glXChannelRectSGIX;
141   glx.QueryChannelRectSGIX = _real_glXQueryChannelRectSGIX;
142   glx.QueryChannelDeltasSGIX = _real_glXQueryChannelDeltasSGIX;
143   glx.ChannelRectSyncSGIX = _real_glXChannelRectSyncSGIX;
144
145#if defined(_DM_BUFFER_H_)
146   /*** (GLX_SGIX_dmbuffer ***/
147   glx.AssociateDMPbufferSGIX = NULL;
148#endif
149
150   /*** GLX_SGIX_swap_group ***/
151   glx.JoinSwapGroupSGIX = _real_glXJoinSwapGroupSGIX;
152
153   /*** GLX_SGIX_swap_barrier ***/
154   glx.BindSwapBarrierSGIX = _real_glXBindSwapBarrierSGIX;
155   glx.QueryMaxSwapBarriersSGIX = _real_glXQueryMaxSwapBarriersSGIX;
156
157   /*** GLX_SUN_get_transparent_index ***/
158   glx.GetTransparentIndexSUN = _real_glXGetTransparentIndexSUN;
159
160   /*** GLX_MESA_copy_sub_buffer ***/
161   glx.CopySubBufferMESA = _real_glXCopySubBufferMESA;
162
163   /*** GLX_MESA_release_buffers ***/
164   glx.ReleaseBuffersMESA = _real_glXReleaseBuffersMESA;
165
166   /*** GLX_MESA_pixmap_colormap ***/
167   glx.CreateGLXPixmapMESA = _real_glXCreateGLXPixmapMESA;
168
169   /*** GLX_MESA_set_3dfx_mode ***/
170   glx.Set3DfxModeMESA = _real_glXSet3DfxModeMESA;
171
172   /*** GLX_NV_vertex_array_range ***/
173   glx.AllocateMemoryNV = _real_glXAllocateMemoryNV;
174   glx.FreeMemoryNV = _real_glXFreeMemoryNV;
175
176   /*** GLX_MESA_agp_offset ***/
177   glx.GetAGPOffsetMESA = _real_glXGetAGPOffsetMESA;
178
179   return &glx;
180}
181