glxapi.h revision 84cac8441fcf5f692cd220e9fa86cab398a4c159
1/* $Id: glxapi.h,v 1.11 2001/05/29 23:15:07 brianp Exp $ */ 2 3/* 4 * Mesa 3-D graphics library 5 * Version: 3.5 6 * 7 * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. 8 * 9 * Permission is hereby granted, free of charge, to any person obtaining a 10 * copy of this software and associated documentation files (the "Software"), 11 * to deal in the Software without restriction, including without limitation 12 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 13 * and/or sell copies of the Software, and to permit persons to whom the 14 * Software is furnished to do so, subject to the following conditions: 15 * 16 * The above copyright notice and this permission notice shall be included 17 * in all copies or substantial portions of the Software. 18 * 19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 20 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 22 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 23 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 24 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25 */ 26 27 28#ifndef _glxapi_h_ 29#define _glxapi_h_ 30 31 32#define GLX_GLXEXT_PROTOTYPES 33#include "GL/glx.h" 34 35 36#ifdef GLX_BUILT_IN_XMESA 37/* The GLX API dispatcher is being built into XFree86's libGL */ 38#include "glxclient.h" 39#else 40/* The GLX API dispatcher is being built into stand-alone Mesa */ 41typedef struct __GLXcontextRec { 42 Display *currentDpy; 43 GLboolean isDirect; 44 GLXDrawable currentDrawable; 45 GLXDrawable currentReadable; 46 XID xid; 47} __GLXcontext; 48#endif 49 50 51/* 52 * Almost all the GLX API functions get routed through this dispatch table. 53 * The exceptions are the glXGetCurrentXXX() functions. 54 * 55 * This dispatch table allows multiple GLX client-side modules to coexist. 56 * Specifically, a real GLX library (like SGI's or the Utah GLX) and Mesa's 57 * pseudo-GLX can be present at the same time. The former being used on 58 * GLX-enabled X servers and the later on non-GLX X servers. 59 * 60 * XXX Note that this hasn't actually been fully used yet in either Mesa or 61 * the DRI. Red Hat, however, has used it for their custom libGL. 62 */ 63struct _glxapi_table { 64 /*** GLX_VERSION_1_0 ***/ 65 XVisualInfo *(*ChooseVisual)(Display *dpy, int screen, int *list); 66 void (*CopyContext)(Display *dpy, GLXContext src, GLXContext dst, unsigned long mask); 67 GLXContext (*CreateContext)(Display *dpy, XVisualInfo *visinfo, GLXContext shareList, Bool direct); 68 GLXPixmap (*CreateGLXPixmap)(Display *dpy, XVisualInfo *visinfo, Pixmap pixmap); 69 void (*DestroyContext)(Display *dpy, GLXContext ctx); 70 void (*DestroyGLXPixmap)(Display *dpy, GLXPixmap pixmap); 71 int (*GetConfig)(Display *dpy, XVisualInfo *visinfo, int attrib, int *value); 72 /*GLXContext (*GetCurrentContext)(void);*/ 73 /*GLXDrawable (*GetCurrentDrawable)(void);*/ 74 Bool (*IsDirect)(Display *dpy, GLXContext ctx); 75 Bool (*MakeCurrent)(Display *dpy, GLXDrawable drawable, GLXContext ctx); 76 Bool (*QueryExtension)(Display *dpy, int *errorb, int *event); 77 Bool (*QueryVersion)(Display *dpy, int *maj, int *min); 78 void (*SwapBuffers)(Display *dpy, GLXDrawable drawable); 79 void (*UseXFont)(Font font, int first, int count, int listBase); 80 void (*WaitGL)(void); 81 void (*WaitX)(void); 82 83 /*** GLX_VERSION_1_1 ***/ 84 const char *(*GetClientString)(Display *dpy, int name); 85 const char *(*QueryExtensionsString)(Display *dpy, int screen); 86 const char *(*QueryServerString)(Display *dpy, int screen, int name); 87 88 /*** GLX_VERSION_1_2 ***/ 89 /*Display *(*GetCurrentDisplay)(void);*/ 90 91 /*** GLX_VERSION_1_3 ***/ 92 GLXFBConfig *(*ChooseFBConfig)(Display *dpy, int screen, const int *attribList, int *nitems); 93 GLXContext (*CreateNewContext)(Display *dpy, GLXFBConfig config, int renderType, GLXContext shareList, Bool direct); 94 GLXPbuffer (*CreatePbuffer)(Display *dpy, GLXFBConfig config, const int *attribList); 95 GLXPixmap (*CreatePixmap)(Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attribList); 96 GLXWindow (*CreateWindow)(Display *dpy, GLXFBConfig config, Window win, const int *attribList); 97 void (*DestroyPbuffer)(Display *dpy, GLXPbuffer pbuf); 98 void (*DestroyPixmap)(Display *dpy, GLXPixmap pixmap); 99 void (*DestroyWindow)(Display *dpy, GLXWindow window); 100 /*GLXDrawable (*GetCurrentReadDrawable)(void);*/ 101 int (*GetFBConfigAttrib)(Display *dpy, GLXFBConfig config, int attribute, int *value); 102 GLXFBConfig *(*GetFBConfigs)(Display *dpy, int screen, int *nelements); 103 void (*GetSelectedEvent)(Display *dpy, GLXDrawable drawable, unsigned long *mask); 104 XVisualInfo *(*GetVisualFromFBConfig)(Display *dpy, GLXFBConfig config); 105 Bool (*MakeContextCurrent)(Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); 106 int (*QueryContext)(Display *dpy, GLXContext ctx, int attribute, int *value); 107 void (*QueryDrawable)(Display *dpy, GLXDrawable draw, int attribute, unsigned int *value); 108 void (*SelectEvent)(Display *dpy, GLXDrawable drawable, unsigned long mask); 109 110 /*** GLX_SGI_swap_control ***/ 111 int (*SwapIntervalSGI)(int); 112 113 /*** GLX_SGI_video_sync ***/ 114 int (*GetVideoSyncSGI)(unsigned int *count); 115 int (*WaitVideoSyncSGI)(int divisor, int remainder, unsigned int *count); 116 117 /*** GLX_SGI_make_current_read ***/ 118 Bool (*MakeCurrentReadSGI)(Display *, GLXDrawable, GLXDrawable, GLXContext); 119 /*GLXDrawable (*GetCurrentReadDrawableSGI)(void);*/ 120 121 /*** GLX_SGIX_video_source (needs video library) ***/ 122#if defined(_VL_H_) 123 GLXVideoSourceSGIX (*CreateGLXVideoSourceSGIX)(Display *, int, VLServer, VLPath, int, VLNode); 124 void (*DestroyGLXVideoSourceSGIX)(Display *, GLXVideoSourceSGIX); 125#else 126 void *CreateGLXVideoSourceSGIX; 127 void *DestroyGLXVideoSourceSGIX; 128#endif 129 130 /*** GLX_EXT_import_context ***/ 131 void (*FreeContextEXT)(Display *dpy, GLXContext context); 132 GLXContextID (*GetContextIDEXT)(const GLXContext context); 133 /*Display *(*GetCurrentDisplayEXT)(void);*/ 134 GLXContext (*ImportContextEXT)(Display *dpy, GLXContextID contextID); 135 int (*QueryContextInfoEXT)(Display *dpy, GLXContext context, int attribute,int *value); 136 137 /*** GLX_SGIX_fbconfig ***/ 138 int (*GetFBConfigAttribSGIX)(Display *, GLXFBConfigSGIX, int, int *); 139 GLXFBConfigSGIX * (*ChooseFBConfigSGIX)(Display *, int, int *, int *); 140 GLXPixmap (*CreateGLXPixmapWithConfigSGIX)(Display *, GLXFBConfigSGIX, Pixmap); 141 GLXContext (*CreateContextWithConfigSGIX)(Display *, GLXFBConfigSGIX, int, GLXContext, Bool); 142 XVisualInfo * (*GetVisualFromFBConfigSGIX)(Display *, GLXFBConfigSGIX); 143 GLXFBConfigSGIX (*GetFBConfigFromVisualSGIX)(Display *, XVisualInfo *); 144 145 /*** GLX_SGIX_pbuffer ***/ 146 GLXPbufferSGIX (*CreateGLXPbufferSGIX)(Display *, GLXFBConfigSGIX, unsigned int, unsigned int, int *); 147 void (*DestroyGLXPbufferSGIX)(Display *, GLXPbufferSGIX); 148 int (*QueryGLXPbufferSGIX)(Display *, GLXPbufferSGIX, int, unsigned int *); 149 void (*SelectEventSGIX)(Display *, GLXDrawable, unsigned long); 150 void (*GetSelectedEventSGIX)(Display *, GLXDrawable, unsigned long *); 151 152 /*** GLX_SGI_cushion ***/ 153 void (*CushionSGI)(Display *, Window, float); 154 155 /*** GLX_SGIX_video_resize ***/ 156 int (*BindChannelToWindowSGIX)(Display *, int, int, Window); 157 int (*ChannelRectSGIX)(Display *, int, int, int, int, int, int); 158 int (*QueryChannelRectSGIX)(Display *, int, int, int *, int *, int *, int *); 159 int (*QueryChannelDeltasSGIX)(Display *, int, int, int *, int *, int *, int *); 160 int (*ChannelRectSyncSGIX)(Display *, int, int, GLenum); 161 162 /*** GLX_SGIX_dmbuffer (needs dmedia library) ***/ 163#if defined (_DM_BUFFER_H_) 164 Bool (*AssociateDMPbufferSGIX)(Display *, GLXPbufferSGIX, DMparams *, DMbuffer); 165#else 166 void *AssociciateDMPbufferSGIX; 167#endif 168 169 /*** GLX_SGIX_swap_group ***/ 170 void (*JoinSwapGroupSGIX)(Display *, GLXDrawable, GLXDrawable); 171 172 /*** GLX_SGIX_swap_barrier ***/ 173 void (*BindSwapBarrierSGIX)(Display *, GLXDrawable, int); 174 Bool (*QueryMaxSwapBarriersSGIX)(Display *, int, int *); 175 176 /*** GLX_SUN_get_transparent_index ***/ 177 Status (*GetTransparentIndexSUN)(Display *, Window, Window, long *); 178 179 /*** GLX_MESA_copy_sub_buffer ***/ 180 void (*CopySubBufferMESA)(Display *dpy, GLXDrawable drawable, int x, int y, int width, int height); 181 182 /*** GLX_MESA_release_buffers ***/ 183 Bool (*ReleaseBuffersMESA)(Display *dpy, Window w); 184 185 /*** GLX_MESA_pixmap_colormap ***/ 186 GLXPixmap (*CreateGLXPixmapMESA)(Display *dpy, XVisualInfo *visinfo, Pixmap pixmap, Colormap cmap); 187 188 /*** GLX_MESA_set_3dfx_mode ***/ 189 Bool (*Set3DfxModeMESA)(int mode); 190 191}; 192 193 194 195extern const char * 196_glxapi_get_version(void); 197 198 199extern const char ** 200_glxapi_get_extensions(void); 201 202 203extern GLuint 204_glxapi_get_dispatch_table_size(void); 205 206 207extern void 208_glxapi_set_no_op_table(struct _glxapi_table *t); 209 210 211extern const GLvoid * 212_glxapi_get_proc_address(const char *funcName); 213 214 215#endif 216