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