1 /*
2  * Copyright (c) 2002-2008 LWJGL Project
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are
7  * met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  *   notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  *   notice, this list of conditions and the following disclaimer in the
14  *   documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of 'LWJGL' nor the names of
17  *   its contributors may be used to endorse or promote products derived
18  *   from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 #ifndef EXTGL_GLX_H
34 #define EXTGL_GLX_H
35 
36 #include <X11/Xutil.h>
37 #include "extgl.h"
38 
39 /*
40  * Names for attributes to lwjgl_glXGetConfig.
41  */
42 #define GLX_USE_GL              1       /* support GLX rendering */
43 #define GLX_BUFFER_SIZE         2       /* depth of the color buffer */
44 #define GLX_LEVEL               3       /* level in plane stacking */
45 #define GLX_RGBA                4       /* true if RGBA mode */
46 #define GLX_DOUBLEBUFFER        5       /* double buffering supported */
47 #define GLX_STEREO              6       /* stereo buffering supported */
48 #define GLX_AUX_BUFFERS         7       /* number of aux buffers */
49 #define GLX_RED_SIZE            8       /* number of red component bits */
50 #define GLX_GREEN_SIZE          9       /* number of green component bits */
51 #define GLX_BLUE_SIZE           10      /* number of blue component bits */
52 #define GLX_ALPHA_SIZE          11      /* number of alpha component bits */
53 #define GLX_DEPTH_SIZE          12      /* number of depth bits */
54 #define GLX_STENCIL_SIZE        13      /* number of stencil bits */
55 #define GLX_ACCUM_RED_SIZE      14      /* number of red accum bits */
56 #define GLX_ACCUM_GREEN_SIZE    15      /* number of green accum bits */
57 #define GLX_ACCUM_BLUE_SIZE     16      /* number of blue accum bits */
58 #define GLX_ACCUM_ALPHA_SIZE    17      /* number of alpha accum bits */
59 
60 #define GLX_SAMPLE_BUFFERS_ARB  100000  /* number of multisample buffers */
61 #define GLX_SAMPLES_ARB         100001  /* number of multisample samples */
62 
63 /*
64  * FBConfig-specific attributes
65  */
66 #define GLX_X_VISUAL_TYPE               0x22
67 #define GLX_CONFIG_CAVEAT               0x20    /* Like visual_info VISUAL_CAVEAT */
68 #define GLX_TRANSPARENT_TYPE            0x23
69 #define GLX_TRANSPARENT_INDEX_VALUE     0x24
70 #define GLX_TRANSPARENT_RED_VALUE       0x25
71 #define GLX_TRANSPARENT_GREEN_VALUE     0x26
72 #define GLX_TRANSPARENT_BLUE_VALUE      0x27
73 #define GLX_TRANSPARENT_ALPHA_VALUE     0x28
74 #define GLX_DRAWABLE_TYPE               0x8010
75 #define GLX_RENDER_TYPE                 0x8011
76 #define GLX_X_RENDERABLE                0x8012
77 #define GLX_FBCONFIG_ID                 0x8013
78 #define GLX_MAX_PBUFFER_WIDTH           0x8016
79 #define GLX_MAX_PBUFFER_HEIGHT          0x8017
80 #define GLX_MAX_PBUFFER_PIXELS          0x8018
81 #define GLX_VISUAL_ID                   0x800B
82 
83 #define GLX_DRAWABLE_TYPE_SGIX          GLX_DRAWABLE_TYPE
84 #define GLX_RENDER_TYPE_SGIX            GLX_RENDER_TYPE
85 #define GLX_X_RENDERABLE_SGIX           GLX_X_RENDERABLE
86 #define GLX_FBCONFIG_ID_SGIX            GLX_FBCONFIG_ID
87 #define GLX_MAX_PBUFFER_WIDTH_SGIX      GLX_MAX_PBUFFER_WIDTH
88 #define GLX_MAX_PBUFFER_HEIGHT_SGIX     GLX_MAX_PBUFFER_HEIGHT
89 #define GLX_MAX_PBUFFER_PIXELS_SGIX     GLX_MAX_PBUFFER_PIXELS
90 #define GLX_OPTIMAL_PBUFFER_WIDTH_SGIX  0x8019
91 #define GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX 0x801A
92 
93 /*
94  * Error return values from lwjgl_glXGetConfig.  Success is indicated by
95  * a value of 0.
96  */
97 #define GLX_BAD_SCREEN                  1  /* screen # is bad */
98 #define GLX_BAD_ATTRIBUTE               2  /* attribute to get is bad */
99 #define GLX_NO_EXTENSION                3  /* no glx extension on server */
100 #define GLX_BAD_VISUAL                  4  /* visual # not known by GLX */
101 #define GLX_BAD_CONTEXT                 5
102 #define GLX_BAD_VALUE                   6
103 #define GLX_BAD_ENUM                    7
104 
105 
106 /* FBConfig attribute values */
107 
108 /*
109  * Generic "don't care" value for lwjgl_glX ChooseFBConfig attributes (except
110  * GLX_LEVEL).
111  */
112 #define GLX_DONT_CARE                   0xFFFFFFFF
113 
114 /* GLX_RENDER_TYPE bits */
115 #define GLX_RGBA_BIT                    0x00000001
116 #define GLX_COLOR_INDEX_BIT             0x00000002
117 #define GLX_RGBA_BIT_SGIX               GLX_RGBA_BIT
118 #define GLX_COLOR_INDEX_BIT_SGIX        GLX_COLOR_INDEX_BIT
119 
120 /* GLX_DRAWABLE_TYPE bits */
121 #define GLX_WINDOW_BIT                  0x00000001
122 #define GLX_PIXMAP_BIT                  0x00000002
123 #define GLX_PBUFFER_BIT                 0x00000004
124 #define GLX_WINDOW_BIT_SGIX             GLX_WINDOW_BIT
125 #define GLX_PIXMAP_BIT_SGIX             GLX_PIXMAP_BIT
126 #define GLX_PBUFFER_BIT_SGIX            GLX_PBUFFER_BIT
127 
128 /* GLX_CONFIG_CAVEAT attribute values */
129 #define GLX_NONE                        0x8000
130 #define GLX_SLOW_CONFIG                 0x8001
131 #define GLX_NON_CONFORMANT_CONFIG       0x800D
132 
133 /* GLX_X_VISUAL_TYPE attribute values */
134 #define GLX_TRUE_COLOR                  0x8002
135 #define GLX_DIRECT_COLOR                0x8003
136 #define GLX_PSEUDO_COLOR                0x8004
137 #define GLX_STATIC_COLOR                0x8005
138 #define GLX_GRAY_SCALE                  0x8006
139 #define GLX_STATIC_GRAY                 0x8007
140 
141 /* GLX_TRANSPARENT_TYPE attribute values */
142 /* #define GLX_NONE                        0x8000 */
143 #define GLX_TRANSPARENT_RGB             0x8008
144 #define GLX_TRANSPARENT_INDEX           0x8009
145 
146 /* lwjgl_glXCreateGLXPbuffer attributes */
147 #define GLX_PRESERVED_CONTENTS          0x801B
148 #define GLX_LARGEST_PBUFFER             0x801C
149 #define GLX_PBUFFER_HEIGHT              0x8040  /* New for GLX 1.3 */
150 #define GLX_PBUFFER_WIDTH               0x8041  /* New for GLX 1.3 */
151 #define GLX_PRESERVED_CONTENTS_SGIX     GLX_PRESERVED_CONTENTS
152 #define GLX_LARGEST_PBUFFER_SGIX        GLX_LARGEST_PBUFFER
153 
154 /* lwjgl_glXQueryGLXPBuffer attributes */
155 #define GLX_WIDTH                       0x801D
156 #define GLX_HEIGHT                      0x801E
157 #define GLX_EVENT_MASK                  0x801F
158 #define GLX_WIDTH_SGIX                  GLX_WIDTH
159 #define GLX_HEIGHT_SGIX                 GLX_HEIGHT
160 #define GLX_EVENT_MASK_SGIX             GLX_EVENT_MASK
161 
162 /* lwjgl_glXCreateNewContext render_type attribute values */
163 #define GLX_RGBA_TYPE                   0x8014
164 #define GLX_COLOR_INDEX_TYPE            0x8015
165 #define GLX_RGBA_TYPE_SGIX              GLX_RGBA_TYPE
166 #define GLX_COLOR_INDEX_TYPE_SGIX       GLX_COLOR_INDEX_TYPE
167 
168 /* lwjgl_glXQueryContext attributes */
169 /* #define GLX_FBCONFIG_ID                0x8013 */
170 /* #define GLX_RENDER_TYPE                0x8011 */
171 #define GLX_SCREEN                      0x800C
172 
173 /* lwjgl_glXSelectEvent event mask bits */
174 #define GLX_PBUFFER_CLOBBER_MASK        0x08000000
175 #define GLX_PBUFFER_CLOBBER_MASK_SGIX   GLX_PBUFFER_CLOBBER_MASK
176 
177 /* GLXPbufferClobberEvent event_type values */
178 #define GLX_DAMAGED                     0x8020
179 #define GLX_SAVED                       0x8021
180 #define GLX_DAMAGED_SGIX                GLX_DAMAGED
181 #define GLX_SAVED_SGIX                  GLX_SAVED
182 
183 /* GLXPbufferClobberEvent draw_type values */
184 #define GLX_WINDOW                      0x8022
185 #define GLX_PBUFFER                     0x8023
186 #define GLX_WINDOW_SGIX                 GLX_WINDOW
187 #define GLX_PBUFFER_SGIX                GLX_PBUFFER
188 
189 /* GLXPbufferClobberEvent buffer_mask bits */
190 #define GLX_FRONT_LEFT_BUFFER_BIT       0x00000001
191 #define GLX_FRONT_RIGHT_BUFFER_BIT      0x00000002
192 #define GLX_BACK_LEFT_BUFFER_BIT        0x00000004
193 #define GLX_BACK_RIGHT_BUFFER_BIT       0x00000008
194 #define GLX_AUX_BUFFERS_BIT             0x00000010
195 #define GLX_DEPTH_BUFFER_BIT            0x00000020
196 #define GLX_STENCIL_BUFFER_BIT          0x00000040
197 #define GLX_ACCUM_BUFFER_BIT            0x00000080
198 #define GLX_FRONT_LEFT_BUFFER_BIT_SGIX  GLX_FRONT_LEFT_BUFFER_BIT
199 #define GLX_FRONT_RIGHT_BUFFER_BIT_SGIX GLX_FRONT_RIGHT_BUFFER_BIT
200 #define GLX_BACK_LEFT_BUFFER_BIT_SGIX   GLX_BACK_LEFT_BUFFER_BIT
201 #define GLX_BACK_RIGHT_BUFFER_BIT_SGIX  GLX_BACK_RIGHT_BUFFER_BIT
202 #define GLX_AUX_BUFFERS_BIT_SGIX        GLX_AUX_BUFFERS_BIT
203 #define GLX_DEPTH_BUFFER_BIT_SGIX       GLX_DEPTH_BUFFER_BIT
204 #define GLX_STENCIL_BUFFER_BIT_SGIX     GLX_STENCIL_BUFFER_BIT
205 #define GLX_ACCUM_BUFFER_BIT_SGIX       GLX_ACCUM_BUFFER_BIT
206 
207 /*
208  * Extension return values from lwjgl_glXGetConfig.  These are also
209  * accepted as parameter values for lwjgl_glXChooseVisual.
210  */
211 
212 #define GLX_X_VISUAL_TYPE_EXT           0x22    /* visual_info extension type */
213 #define GLX_TRANSPARENT_TYPE_EXT        0x23    /* visual_info extension */
214 #define GLX_TRANSPARENT_INDEX_VALUE_EXT 0x24    /* visual_info extension */
215 #define GLX_TRANSPARENT_RED_VALUE_EXT   0x25    /* visual_info extension */
216 #define GLX_TRANSPARENT_GREEN_VALUE_EXT 0x26    /* visual_info extension */
217 #define GLX_TRANSPARENT_BLUE_VALUE_EXT  0x27    /* visual_info extension */
218 #define GLX_TRANSPARENT_ALPHA_VALUE_EXT 0x28    /* visual_info extension */
219 
220 /* Property values for visual_type */
221 #define GLX_TRUE_COLOR_EXT              0x8002
222 #define GLX_DIRECT_COLOR_EXT            0x8003
223 #define GLX_PSEUDO_COLOR_EXT            0x8004
224 #define GLX_STATIC_COLOR_EXT            0x8005
225 #define GLX_GRAY_SCALE_EXT              0x8006
226 #define GLX_STATIC_GRAY_EXT             0x8007
227 
228 /* Property values for transparent pixel */
229 #define GLX_NONE_EXT                    0x8000
230 #define GLX_TRANSPARENT_RGB_EXT         0x8008
231 #define GLX_TRANSPARENT_INDEX_EXT       0x8009
232 
233 /* Property values for visual_rating */
234 #define GLX_VISUAL_CAVEAT_EXT           0x20    /* visual_rating extension type */
235 #define GLX_SLOW_VISUAL_EXT             0x8001
236 #define GLX_NON_CONFORMANT_VISUAL_EXT   0x800D
237 
238 /*
239  * Names for attributes to lwjgl_glXGetClientString.
240  */
241 #define GLX_VENDOR                      0x1
242 #define GLX_VERSION                     0x2
243 #define GLX_EXTENSIONS                  0x3
244 
245 /*
246  * Names for attributes to lwjgl_glXQueryContextInfoEXT.
247  */
248 #define GLX_SHARE_CONTEXT_EXT           0x800A  /* id of share context */
249 #define GLX_VISUAL_ID_EXT               0x800B  /* id of context's visual */
250 #define GLX_SCREEN_EXT                  0x800C  /* screen number */
251 
252 /* NV_float_buffer */
253 #define GLX_FLOAT_COMPONENTS_NV         0x20B0
254 
255 /* GLX_ARB_fbconfig_float  */
256 #define GLX_RGBA_FLOAT_TYPE             0x20B9
257 #define GLX_RGBA_FLOAT_BIT              0x0004
258 
259 /* GLX_ARB_fbconfig_float  */
260 #define GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT	0x20B1
261 #define GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT		0x00000008
262 
263 /* GLX_ARB_framebuffer_sRGB  */
264 #define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB	0x20B2
265 
266 /* GLX_ARB_create_context  */
267 #define GLX_CONTEXT_MAJOR_VERSION_ARB	0x2091
268 #define GLX_CONTEXT_MINOR_VERSION_ARB	0x2092
269 #define GLX_CONTEXT_FLAGS_ARB			0x2094
270 
271 #define GLX_CONTEXT_DEBUG_BIT_ARB				0x0001
272 #define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB	0x0002
273 
274 /* GLX_NV_multisample_coverage  */
275 #define GLX_COVERAGE_SAMPLES_NV         100001
276 #define GLX_COLOR_SAMPLES_NV            0x20B3
277 
278 /* GLX_NV_present_video  */
279 #define GLX_NUM_VIDEO_SLOTS_NV          0x20F0
280 
281 /* GLX_NV_video_capture */
282 #define GLX_DEVICE_ID_NV                0x20CD
283 #define GLX_NUM_VIDEO_CAPTURE_SLOTS_NV  0x20CF
284 #define GLX_UNIQUE_ID_NV                0x20CE
285 
286 typedef XID GLXContextID;
287 typedef XID GLXPixmap;
288 typedef XID GLXDrawable;
289 typedef XID GLXPbuffer;
290 typedef XID GLXWindow;
291 typedef XID GLXFBConfigID;
292 
293 typedef struct __GLXcontextRec *GLXContext;
294 
295 typedef struct __GLXFBConfigRec *GLXFBConfig;
296 
297 typedef GLXFBConfig * (APIENTRY * glXGetFBConfigsPROC) (Display *dpy, int screen, int *nelements);
298 typedef GLXFBConfig * (APIENTRY * glXChooseFBConfigPROC) (Display *dpy, int screen, const int *attrib_list, int *nelements);
299 typedef int (APIENTRY * glXGetFBConfigAttribPROC) (Display *dpy, GLXFBConfig config, int attribute, int *value);
300 typedef XVisualInfo * (APIENTRY * glXGetVisualFromFBConfigPROC) (Display *dpy, GLXFBConfig config);
301 typedef GLXWindow (APIENTRY * glXCreateWindowPROC) (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list);
302 typedef void (APIENTRY * glXDestroyWindowPROC) (Display *dpy, GLXWindow win);
303 typedef GLXPixmap (APIENTRY * glXCreatePixmapPROC) (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list);
304 typedef void (APIENTRY * glXDestroyPixmapPROC) (Display *dpy, GLXPixmap pixmap);
305 typedef GLXPbuffer (APIENTRY * glXCreatePbufferPROC) (Display *dpy, GLXFBConfig config, const int *attrib_list);
306 typedef void (APIENTRY * glXDestroyPbufferPROC) (Display *dpy, GLXPbuffer pbuf);
307 typedef void (APIENTRY * glXQueryDrawablePROC) (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value);
308 typedef GLXContext (APIENTRY * glXCreateNewContextPROC) (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct);
309 typedef Bool (APIENTRY * glXMakeContextCurrentPROC) (Display *display, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
310 typedef GLXDrawable (APIENTRY * glXGetCurrentReadDrawablePROC) (void);
311 typedef Display * (APIENTRY * glXGetCurrentDisplayPROC) (void);
312 typedef int (APIENTRY * glXQueryContextPROC) (Display *dpy, GLXContext ctx, int attribute, int *value);
313 typedef void (APIENTRY * glXSelectEventPROC) (Display *dpy, GLXDrawable draw, unsigned long event_mask);
314 typedef void (APIENTRY * glXGetSelectedEventPROC) (Display *dpy, GLXDrawable draw, unsigned long *event_mask);
315 
316 typedef GLXContextID (APIENTRY * glXGetContextIDEXTPROC) (const GLXContext ctx);
317 typedef GLXDrawable (APIENTRY * glXGetCurrentDrawableEXTPROC) (void);
318 typedef GLXContext (APIENTRY * glXImportContextEXTPROC) (Display *dpy, GLXContextID contextID);
319 typedef void (APIENTRY * glXFreeContextEXTPROC) (Display *dpy, GLXContext ctx);
320 typedef int (APIENTRY * glXQueryContextInfoEXTPROC) (Display *dpy, GLXContext ctx, int attribute, int *value);
321 
322 typedef XVisualInfo* (APIENTRY * glXChooseVisualPROC) (Display *dpy, int screen, int *attribList);
323 typedef void (APIENTRY * glXCopyContextPROC) (Display *dpy, GLXContext src, GLXContext dst, unsigned long mask);
324 typedef GLXContext (APIENTRY * glXCreateContextPROC) (Display *dpy, XVisualInfo *vis, GLXContext shareList, Bool direct);
325 typedef GLXPixmap (APIENTRY * glXCreateGLXPixmapPROC) (Display *dpy, XVisualInfo *vis, Pixmap pixmap);
326 typedef void (APIENTRY * glXDestroyContextPROC) (Display *dpy, GLXContext ctx);
327 typedef void (APIENTRY * glXDestroyGLXPixmapPROC) (Display *dpy, GLXPixmap pix);
328 typedef int (APIENTRY * glXGetConfigPROC) (Display *dpy, XVisualInfo *vis, int attrib, int *value);
329 typedef GLXContext (APIENTRY * glXGetCurrentContextPROC) (void);
330 typedef GLXDrawable (APIENTRY * glXGetCurrentDrawablePROC) (void);
331 typedef Bool (APIENTRY * glXIsDirectPROC) (Display *dpy, GLXContext ctx);
332 typedef Bool (APIENTRY * glXMakeCurrentPROC) (Display *dpy, GLXDrawable drawable, GLXContext ctx);
333 typedef Bool (APIENTRY * glXQueryExtensionPROC) (Display *dpy, int *errorBase, int *eventBase);
334 typedef Bool (APIENTRY * glXQueryVersionPROC) (Display *dpy, int *major, int *minor);
335 typedef void (APIENTRY * glXSwapBuffersPROC) (Display *dpy, GLXDrawable drawable);
336 typedef void (APIENTRY * glXUseXFontPROC) (Font font, int first, int count, int listBase);
337 typedef void (APIENTRY * glXWaitGLPROC) (void);
338 typedef void (APIENTRY * glXWaitXPROC) (void);
339 typedef const char * (APIENTRY * glXGetClientStringPROC) (Display *dpy, int name );
340 typedef const char * (APIENTRY * glXQueryServerStringPROC) (Display *dpy, int screen, int name );
341 typedef const char * (APIENTRY * glXQueryExtensionsStringPROC) (Display *dpy, int screen );
342 
343 /* GLX_SGI_swap_control */
344 typedef void (APIENTRY * glXSwapIntervalSGIPROC)(int interval);
345 
346 /* GLX_EXT_swap_control */
347 typedef void (APIENTRY * glXSwapIntervalEXTPROC)(Display *dpy, GLXDrawable drawable, int interval);
348 
349 /* GLX_ARB_create_context */
350 typedef GLXContext (APIENTRY * glXCreateContextAttribsARBPROC) (Display *dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list);
351 
352 /* GLX_NV_present_video */
353 typedef unsigned int * (APIENTRY * glXEnumerateVideoDevicesNVPROC) (Display *dpy, int screen, int *nelements);
354 typedef int (APIENTRY * glXBindVideoDeviceNVPROC) (Display *dpy, unsigned int video_slot, unsigned int video_device, const int *attrib_list);
355 
356 /* GLX_NV_video_capture */
357 typedef XID GLXVideoCaptureDeviceNV;
358 typedef int (APIENTRY * glXBindVideoCaptureDeviceNVPROC) (Display *dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device);
359 typedef GLXVideoCaptureDeviceNV * (APIENTRY * glXEnumerateVideoCaptureDevicesNVPROC) (Display *dpy, int screen, int *nelements);
360 typedef void (APIENTRY * glXLockVideoCaptureDeviceNVPROC) (Display *dpy, GLXVideoCaptureDeviceNV device);
361 typedef int (APIENTRY * glXQueryVideoCaptureDeviceNVPROC) (Display *dpy, GLXVideoCaptureDeviceNV device, int attribute, int *value);
362 typedef void (APIENTRY * glXReleaseVideoCaptureDeviceNVPROC) (Display *dpy, GLXVideoCaptureDeviceNV device);
363 
364 typedef struct {
365     bool GLX12;
366     bool GLX13;
367 	bool GLX14;
368 /*    bool GLX_EXT_visual_info;
369     bool GLX_EXT_visual_rating;*/
370     bool GLX_SGI_swap_control;
371     bool GLX_EXT_swap_control;
372     bool GLX_ARB_multisample;
373 	bool GLX_ARB_fbconfig_float;
374 	bool GLX_EXT_fbconfig_packed_float;
375 	bool GLX_ARB_framebuffer_sRGB;
376 	bool GLX_ARB_create_context;
377 	bool GLX_NV_multisample_coverage;
378 	bool GLX_NV_present_video;
379 	bool GLX_NV_video_capture;
380 } GLXExtensions;
381 
382 /* Add _ to global symbols to avoid symbol clash with the OpenGL library */
383 extern glXGetFBConfigsPROC lwjgl_glXGetFBConfigs;
384 extern glXChooseFBConfigPROC lwjgl_glXChooseFBConfig;
385 extern glXGetFBConfigAttribPROC lwjgl_glXGetFBConfigAttrib;
386 extern glXGetVisualFromFBConfigPROC lwjgl_glXGetVisualFromFBConfig;
387 extern glXCreateWindowPROC lwjgl_glXCreateWindow;
388 extern glXDestroyWindowPROC lwjgl_glXDestroyWindow;
389 extern glXCreatePixmapPROC lwjgl_glXCreatePixmap;
390 extern glXDestroyPixmapPROC lwjgl_glXDestroyPixmap;
391 extern glXCreatePbufferPROC lwjgl_glXCreatePbuffer;
392 extern glXDestroyPbufferPROC lwjgl_glXDestroyPbuffer;
393 extern glXQueryDrawablePROC lwjgl_glXQueryDrawable;
394 extern glXCreateNewContextPROC lwjgl_glXCreateNewContext;
395 extern glXMakeContextCurrentPROC lwjgl_glXMakeContextCurrent;
396 extern glXGetCurrentReadDrawablePROC lwjgl_glXGetCurrentReadDrawable;
397 extern glXGetCurrentDisplayPROC lwjgl_glXGetCurrentDisplay;
398 extern glXQueryContextPROC lwjgl_glXQueryContext;
399 extern glXSelectEventPROC lwjgl_glXSelectEvent;
400 extern glXGetSelectedEventPROC lwjgl_glXGetSelectedEvent;
401 
402 extern glXChooseVisualPROC lwjgl_glXChooseVisual;
403 extern glXCopyContextPROC lwjgl_glXCopyContext;
404 extern glXCreateContextPROC lwjgl_glXCreateContext;
405 extern glXCreateGLXPixmapPROC lwjgl_glXCreateGLXPixmap;
406 extern glXDestroyContextPROC lwjgl_glXDestroyContext;
407 extern glXDestroyGLXPixmapPROC lwjgl_glXDestroyGLXPixmap;
408 extern glXGetConfigPROC lwjgl_glXGetConfig;
409 extern glXGetCurrentContextPROC lwjgl_glXGetCurrentContext;
410 extern glXGetCurrentDrawablePROC lwjgl_glXGetCurrentDrawable;
411 extern glXIsDirectPROC lwjgl_glXIsDirect;
412 extern glXMakeCurrentPROC lwjgl_glXMakeCurrent;
413 extern glXQueryExtensionPROC lwjgl_glXQueryExtension;
414 extern glXQueryVersionPROC lwjgl_glXQueryVersion;
415 extern glXSwapBuffersPROC lwjgl_glXSwapBuffers;
416 extern glXUseXFontPROC lwjgl_glXUseXFont;
417 extern glXWaitGLPROC lwjgl_glXWaitGL;
418 extern glXWaitXPROC lwjgl_glXWaitX;
419 extern glXGetClientStringPROC lwjgl_glXGetClientString;
420 extern glXQueryServerStringPROC lwjgl_glXQueryServerString;
421 extern glXQueryExtensionsStringPROC lwjgl_glXQueryExtensionsString;
422 
423 extern glXSwapIntervalSGIPROC lwjgl_glXSwapIntervalSGI;
424 extern glXSwapIntervalEXTPROC lwjgl_glXSwapIntervalEXT;
425 
426 extern glXCreateContextAttribsARBPROC lwjgl_glXCreateContextAttribsARB;
427 
428 /* GLX_NV_present_video */
429 extern glXEnumerateVideoDevicesNVPROC lwjgl_glXEnumerateVideoDevicesNV;
430 extern glXBindVideoDeviceNVPROC lwjgl_glXBindVideoDeviceNV;
431 
432 /* GLX_NV_video_capture */
433 extern glXBindVideoCaptureDeviceNVPROC lwjgl_glXBindVideoCaptureDeviceNV;
434 extern glXEnumerateVideoCaptureDevicesNVPROC lwjgl_glXEnumerateVideoCaptureDevicesNV;
435 extern glXLockVideoCaptureDeviceNVPROC lwjgl_glXLockVideoCaptureDeviceNV;
436 extern glXQueryVideoCaptureDeviceNVPROC lwjgl_glXQueryVideoCaptureDeviceNV;
437 extern glXReleaseVideoCaptureDeviceNVPROC lwjgl_glXReleaseVideoCaptureDeviceNV;
438 
439 extern bool extgl_InitGLX(Display *disp, int screen, GLXExtensions *extension_flags);
440 
441 #endif
442