glx.h revision 8455203bc7231f4ad4ee517faef3df024bf38070
1/* $Id: glx.h,v 1.37 2002/10/08 22:47:53 brianp Exp $ */ 2 3/* 4 * Mesa 3-D graphics library 5 * Version: 4.1 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 GLX_H 29#define GLX_H 30 31 32#ifdef __VMS 33#include <GL/vms_x_fix.h> 34# ifdef __cplusplus 35/* VMS Xlib.h gives problems with C++. 36 * this avoids a bunch of trivial warnings */ 37#pragma message disable nosimpint 38#endif 39#endif 40#include <X11/Xlib.h> 41#include <X11/Xutil.h> 42#ifdef __VMS 43# ifdef __cplusplus 44#pragma message enable nosimpint 45#endif 46#endif 47#include <GL/gl.h> 48 49 50#if defined(USE_MGL_NAMESPACE) 51#include <GL/glx_mangle.h> 52#endif 53 54 55#ifdef __cplusplus 56extern "C" { 57#endif 58 59 60#define GLX_VERSION_1_1 1 61#define GLX_VERSION_1_2 1 62#define GLX_VERSION_1_3 1 63#define GLX_VERSION_1_4 1 64 65#define GLX_EXTENSION_NAME "GLX" 66 67 68 69/* 70 * Tokens for glXChooseVisual and glXGetConfig: 71 */ 72#define GLX_USE_GL 1 73#define GLX_BUFFER_SIZE 2 74#define GLX_LEVEL 3 75#define GLX_RGBA 4 76#define GLX_DOUBLEBUFFER 5 77#define GLX_STEREO 6 78#define GLX_AUX_BUFFERS 7 79#define GLX_RED_SIZE 8 80#define GLX_GREEN_SIZE 9 81#define GLX_BLUE_SIZE 10 82#define GLX_ALPHA_SIZE 11 83#define GLX_DEPTH_SIZE 12 84#define GLX_STENCIL_SIZE 13 85#define GLX_ACCUM_RED_SIZE 14 86#define GLX_ACCUM_GREEN_SIZE 15 87#define GLX_ACCUM_BLUE_SIZE 16 88#define GLX_ACCUM_ALPHA_SIZE 17 89 90 91/* 92 * Error codes returned by glXGetConfig: 93 */ 94#define GLX_BAD_SCREEN 1 95#define GLX_BAD_ATTRIBUTE 2 96#define GLX_NO_EXTENSION 3 97#define GLX_BAD_VISUAL 4 98#define GLX_BAD_CONTEXT 5 99#define GLX_BAD_VALUE 6 100#define GLX_BAD_ENUM 7 101 102 103/* 104 * GLX 1.1 and later: 105 */ 106#define GLX_VENDOR 1 107#define GLX_VERSION 2 108#define GLX_EXTENSIONS 3 109 110 111/* 112 * GLX 1.3 and later: 113 */ 114#define GLX_CONFIG_CAVEAT 0x20 115#define GLX_DONT_CARE 0xFFFFFFFF 116#define GLX_SLOW_CONFIG 0x8001 117#define GLX_NON_CONFORMANT_CONFIG 0x800D 118#define GLX_X_VISUAL_TYPE 0x22 119#define GLX_TRANSPARENT_TYPE 0x23 120#define GLX_TRANSPARENT_INDEX_VALUE 0x24 121#define GLX_TRANSPARENT_RED_VALUE 0x25 122#define GLX_TRANSPARENT_GREEN_VALUE 0x26 123#define GLX_TRANSPARENT_BLUE_VALUE 0x27 124#define GLX_TRANSPARENT_ALPHA_VALUE 0x28 125#define GLX_MAX_PBUFFER_WIDTH 0x8016 126#define GLX_MAX_PBUFFER_HEIGHT 0x8017 127#define GLX_MAX_PBUFFER_PIXELS 0x8018 128#define GLX_PRESERVED_CONTENTS 0x801B 129#define GLX_LARGEST_PBUFFER 0x801C 130#define GLX_WIDTH 0x801D 131#define GLX_HEIGHT 0x801E 132#define GLX_EVENT_MASK 0x801F 133#define GLX_DRAWABLE_TYPE 0x8010 134#define GLX_FBCONFIG_ID 0x8013 135#define GLX_VISUAL_ID 0x800B 136#define GLX_WINDOW_BIT 0x00000001 137#define GLX_PIXMAP_BIT 0x00000002 138#define GLX_PBUFFER_BIT 0x00000004 139#define GLX_AUX_BUFFERS_BIT 0x00000010 140#define GLX_FRONT_LEFT_BUFFER_BIT 0x00000001 141#define GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002 142#define GLX_BACK_LEFT_BUFFER_BIT 0x00000004 143#define GLX_BACK_RIGHT_BUFFER_BIT 0x00000008 144#define GLX_DEPTH_BUFFER_BIT 0x00000020 145#define GLX_STENCIL_BUFFER_BIT 0x00000040 146#define GLX_ACCUM_BUFFER_BIT 0x00000080 147#define GLX_DRAWABLE_TYPE 0x8010 148#define GLX_RENDER_TYPE 0x8011 149#define GLX_X_RENDERABLE 0x8012 150#define GLX_NONE 0x8000 151#define GLX_TRUE_COLOR 0x8002 152#define GLX_DIRECT_COLOR 0x8003 153#define GLX_PSEUDO_COLOR 0x8004 154#define GLX_STATIC_COLOR 0x8005 155#define GLX_GRAY_SCALE 0x8006 156#define GLX_STATIC_GRAY 0x8007 157#define GLX_TRANSPARENT_INDEX 0x8009 158#define GLX_RGBA_TYPE 0x8014 159#define GLX_COLOR_INDEX_TYPE 0x8015 160#define GLX_COLOR_INDEX_BIT 0x00000002 161#define GLX_RGBA_BIT 0x00000001 162#define GLX_SCREEN 0x800C 163#define GLX_PBUFFER_CLOBBER_MASK 0x08000000 164#define GLX_DAMAGED 0x8020 165#define GLX_SAVED 0x8021 166#define GLX_WINDOW 0x8022 167#define GLX_PBUFFER 0x8023 168#define GLX_PBUFFER_HEIGHT 0x8040 169#define GLX_PBUFFER_WIDTH 0x8041 170 171 172/* 173 * GLX 1.4 and later: 174 */ 175#define GLX_SAMPLE_BUFFERS 0x186a0 /*100000*/ 176#define GLX_SAMPLES 0x186a1 /*100001*/ 177 178 179 180typedef struct __GLXcontextRec *GLXContext; 181typedef XID GLXPixmap; 182typedef XID GLXDrawable; 183/* GLX 1.3 and later */ 184typedef struct __GLXFBConfigRec *GLXFBConfig; 185typedef XID GLXFBConfigID; 186typedef XID GLXContextID; 187typedef XID GLXWindow; 188typedef XID GLXPbuffer; 189 190 191 192extern XVisualInfo* glXChooseVisual( Display *dpy, int screen, 193 int *attribList ); 194 195extern GLXContext glXCreateContext( Display *dpy, XVisualInfo *vis, 196 GLXContext shareList, Bool direct ); 197 198extern void glXDestroyContext( Display *dpy, GLXContext ctx ); 199 200extern Bool glXMakeCurrent( Display *dpy, GLXDrawable drawable, 201 GLXContext ctx); 202 203extern void glXCopyContext( Display *dpy, GLXContext src, GLXContext dst, 204 unsigned long mask ); 205 206extern void glXSwapBuffers( Display *dpy, GLXDrawable drawable ); 207 208extern GLXPixmap glXCreateGLXPixmap( Display *dpy, XVisualInfo *visual, 209 Pixmap pixmap ); 210 211extern void glXDestroyGLXPixmap( Display *dpy, GLXPixmap pixmap ); 212 213extern Bool glXQueryExtension( Display *dpy, int *errorb, int *event ); 214 215extern Bool glXQueryVersion( Display *dpy, int *maj, int *min ); 216 217extern Bool glXIsDirect( Display *dpy, GLXContext ctx ); 218 219extern int glXGetConfig( Display *dpy, XVisualInfo *visual, 220 int attrib, int *value ); 221 222extern GLXContext glXGetCurrentContext( void ); 223 224extern GLXDrawable glXGetCurrentDrawable( void ); 225 226extern void glXWaitGL( void ); 227 228extern void glXWaitX( void ); 229 230extern void glXUseXFont( Font font, int first, int count, int list ); 231 232 233 234/* GLX 1.1 and later */ 235extern const char *glXQueryExtensionsString( Display *dpy, int screen ); 236 237extern const char *glXQueryServerString( Display *dpy, int screen, int name ); 238 239extern const char *glXGetClientString( Display *dpy, int name ); 240 241 242/* GLX 1.2 and later */ 243extern Display *glXGetCurrentDisplay( void ); 244 245 246/* GLX 1.3 and later */ 247extern GLXFBConfig *glXChooseFBConfig( Display *dpy, int screen, 248 const int *attribList, int *nitems ); 249 250extern int glXGetFBConfigAttrib( Display *dpy, GLXFBConfig config, 251 int attribute, int *value ); 252 253extern GLXFBConfig *glXGetFBConfigs( Display *dpy, int screen, 254 int *nelements ); 255 256extern XVisualInfo *glXGetVisualFromFBConfig( Display *dpy, 257 GLXFBConfig config ); 258 259extern GLXWindow glXCreateWindow( Display *dpy, GLXFBConfig config, 260 Window win, const int *attribList ); 261 262extern void glXDestroyWindow( Display *dpy, GLXWindow window ); 263 264extern GLXPixmap glXCreatePixmap( Display *dpy, GLXFBConfig config, 265 Pixmap pixmap, const int *attribList ); 266 267extern void glXDestroyPixmap( Display *dpy, GLXPixmap pixmap ); 268 269extern GLXPbuffer glXCreatePbuffer( Display *dpy, GLXFBConfig config, 270 const int *attribList ); 271 272extern void glXDestroyPbuffer( Display *dpy, GLXPbuffer pbuf ); 273 274extern void glXQueryDrawable( Display *dpy, GLXDrawable draw, int attribute, 275 unsigned int *value ); 276 277extern GLXContext glXCreateNewContext( Display *dpy, GLXFBConfig config, 278 int renderType, GLXContext shareList, 279 Bool direct ); 280 281extern Bool glXMakeContextCurrent( Display *dpy, GLXDrawable draw, 282 GLXDrawable read, GLXContext ctx ); 283 284extern GLXDrawable glXGetCurrentReadDrawable( void ); 285 286extern int glXQueryContext( Display *dpy, GLXContext ctx, int attribute, 287 int *value ); 288 289extern void glXSelectEvent( Display *dpy, GLXDrawable drawable, 290 unsigned long mask ); 291 292extern void glXGetSelectedEvent( Display *dpy, GLXDrawable drawable, 293 unsigned long *mask ); 294 295 296/* GLX 1.4 and later */ 297extern void (*glXGetProcAddress(const GLubyte *procname))(); 298 299 300#ifndef GLX_GLXEXT_LEGACY 301 302#include <GL/glxext.h> 303 304#else 305 306 307/* 308 * 28. GLX_EXT_visual_info extension 309 */ 310#ifndef GLX_EXT_visual_info 311#define GLX_EXT_visual_info 1 312 313#define GLX_X_VISUAL_TYPE_EXT 0x22 314#define GLX_TRANSPARENT_TYPE_EXT 0x23 315#define GLX_TRANSPARENT_INDEX_VALUE_EXT 0x24 316#define GLX_TRANSPARENT_RED_VALUE_EXT 0x25 317#define GLX_TRANSPARENT_GREEN_VALUE_EXT 0x26 318#define GLX_TRANSPARENT_BLUE_VALUE_EXT 0x27 319#define GLX_TRANSPARENT_ALPHA_VALUE_EXT 0x28 320#define GLX_TRUE_COLOR_EXT 0x8002 321#define GLX_DIRECT_COLOR_EXT 0x8003 322#define GLX_PSEUDO_COLOR_EXT 0x8004 323#define GLX_STATIC_COLOR_EXT 0x8005 324#define GLX_GRAY_SCALE_EXT 0x8006 325#define GLX_STATIC_GRAY_EXT 0x8007 326#define GLX_NONE_EXT 0x8000 327#define GLX_TRANSPARENT_RGB_EXT 0x8008 328#define GLX_TRANSPARENT_INDEX_EXT 0x8009 329 330#endif /* 28. GLX_EXT_visual_info extension */ 331 332 333 334/* 335 * 41. GLX_SGI_video_sync 336 */ 337#ifndef GLX_SGI_video_sync 338#define GLX_SGI_video_sync 1 339 340extern int glXGetVideoSyncSGI(unsigned int *count); 341extern int glXWaitVideoSyncSGI(int divisor, int remainder, unsigned int *count); 342 343#endif /* GLX_SGI_video_sync */ 344 345 346 347/* 348 * 42. GLX_EXT_visual_rating 349 */ 350#ifndef GLX_EXT_visual_rating 351#define GLX_EXT_visual_rating 1 352 353#define GLX_VISUAL_CAVEAT_EXT 0x20 354/*#define GLX_NONE_EXT 0x8000*/ 355#define GLX_SLOW_VISUAL_EXT 0x8001 356#define GLX_NON_CONFORMANT_VISUAL_EXT 0x800D 357 358#endif /* GLX_EXT_visual_rating */ 359 360 361 362/* 363 * 47. GLX_EXT_import_context 364 */ 365#ifndef GLX_EXT_import_context 366#define GLX_EXT_import_context 1 367 368#define GLX_SHARE_CONTEXT_EXT 0x800A 369#define GLX_VISUAL_ID_EXT 0x800B 370#define GLX_SCREEN_EXT 0x800C 371 372extern void glXFreeContextEXT(Display *dpy, GLXContext context); 373 374extern GLXContextID glXGetContextIDEXT(const GLXContext context); 375 376extern Display *glXGetCurrentDisplayEXT(void); 377 378extern GLXContext glXImportContextEXT(Display *dpy, GLXContextID contextID); 379 380extern int glXQueryContextInfoEXT(Display *dpy, GLXContext context, 381 int attribute,int *value); 382 383#endif /* GLX_EXT_import_context */ 384 385 386 387/* 388 * 215. GLX_MESA_copy_sub_buffer 389 */ 390#ifndef GLX_MESA_copy_sub_buffer 391#define GLX_MESA_copy_sub_buffer 1 392 393extern void glXCopySubBufferMESA( Display *dpy, GLXDrawable drawable, 394 int x, int y, int width, int height ); 395 396#endif 397 398 399 400/* 401 * 216. GLX_MESA_pixmap_colormap 402 */ 403#ifndef GLX_MESA_pixmap_colormap 404#define GLX_MESA_pixmap_colormap 1 405 406extern GLXPixmap glXCreateGLXPixmapMESA( Display *dpy, XVisualInfo *visual, 407 Pixmap pixmap, Colormap cmap ); 408 409#endif /* GLX_MESA_pixmap_colormap */ 410 411 412 413/* 414 * 217. GLX_MESA_release_buffers 415 */ 416#ifndef GLX_MESA_release_buffers 417#define GLX_MESA_release_buffers 1 418 419extern Bool glXReleaseBuffersMESA( Display *dpy, GLXDrawable d ); 420 421#endif /* GLX_MESA_release_buffers */ 422 423 424 425/* 426 * 218. GLX_MESA_set_3dfx_mode 427 */ 428#ifndef GLX_MESA_set_3dfx_mode 429#define GLX_MESA_set_3dfx_mode 1 430 431#define GLX_3DFX_WINDOW_MODE_MESA 0x1 432#define GLX_3DFX_FULLSCREEN_MODE_MESA 0x2 433 434extern Bool glXSet3DfxModeMESA( int mode ); 435 436#endif /* GLX_MESA_set_3dfx_mode */ 437 438 439 440/* 441 * ARB 2. GLX_ARB_get_proc_address 442 */ 443#ifndef GLX_ARB_get_proc_address 444#define GLX_ARB_get_proc_address 1 445 446extern void (*glXGetProcAddressARB(const GLubyte *procName))(); 447 448#endif /* GLX_ARB_get_proc_address */ 449 450 451 452#endif /* GLX_GLXEXT_LEGACY */ 453 454 455/** 456 ** The following aren't in glxext.h yet. 457 **/ 458 459 460/* 461 * ???. GLX_NV_vertex_array_range 462 */ 463#ifndef GLX_NV_vertex_array_range 464#define GLX_NV_vertex_array_range 465 466extern void *glXAllocateMemoryNV(GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority); 467extern void glXFreeMemoryNV(GLvoid *pointer); 468typedef void * ( * PFNGLXALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority); 469typedef void ( * PFNGLXFREEMEMORYNVPROC) (GLvoid *pointer); 470 471#endif /* GLX_NV_vertex_array_range */ 472 473 474 475/* 476 * ???. GLX_MESA_agp_offset 477 */ 478#ifndef GLX_MESA_agp_offset 479#define GLX_MESA_agp_offset 1 480 481extern GLuint glXGetAGPOffsetMESA(const GLvoid *pointer); 482typedef GLuint (* PFNGLXGETAGPOFFSETMESAPROC) (const GLvoid *pointer); 483 484#endif /* GLX_MESA_agp_offset */ 485 486 487 488#ifdef __cplusplus 489} 490#endif 491 492#endif 493