1 /// GLX bindings for D. Generated automatically by gldgen.
2 /// See https://github.com/rtbo/gldgen
3 module gfx.bindings.opengl.glx;
4 
5 version(linux):
6 
7 import core.stdc.config;
8 import core.stdc.stdint;
9 import gfx.bindings.opengl.loader : SymbolLoader;
10 import gfx.bindings.opengl.gl;
11 import X11.Xlib;
12 
13 // Base Types
14 
15 // Types for GLX_VERSION_1_0
16 alias GLXContext  = __GLXcontextRec*;
17 alias GLXDrawable = XID;
18 alias GLXPixmap   = XID;
19 
20 // Types for GLX_VERSION_1_3
21 alias GLXContextID = XID;
22 alias GLXFBConfig  = __GLXFBConfigRec*;
23 alias GLXWindow    = XID;
24 alias GLXPbuffer   = XID;
25 
26 // Types for GLX_NV_video_capture
27 alias GLXVideoCaptureDeviceNV = XID;
28 
29 // Types for GLX_NV_video_out
30 alias GLXVideoDeviceNV = uint;
31 
32 // Types for GLX_SGIX_fbconfig
33 alias GLXFBConfigSGIX = __GLXFBConfigRec*;
34 
35 // Types for GLX_SGIX_pbuffer
36 alias GLXPbufferSGIX = XID;
37 
38 // Struct declarations
39 struct __GLXcontextRec;
40 struct __GLXFBConfigRec;
41 
42 // Struct definitions
43 // Structs for GLX_EXT_stereo_tree
44 struct GLXStereoNotifyEventEXT {
45     int type;
46     c_ulong serial;
47     Bool send_event;
48     Display * display;
49     int extension;
50     int evtype;
51     GLXDrawable window;
52     Bool stereo_tree;
53 }
54 // Structs for GLX_SGIX_hyperpipe
55 struct GLXHyperpipeNetworkSGIX {
56     char[80] pipeName;
57     int networkId;
58 }
59 struct GLXHyperpipeConfigSGIX {
60     char[80] pipeName;
61     int channel;
62     uint participationType;
63     int timeSlice;
64 }
65 struct GLXPipeRect {
66     char[80] pipeName;
67     int srcXOrigin;
68     int srcYOrigin;
69     int srcWidth;
70     int srcHeight;
71     int destXOrigin;
72     int destYOrigin;
73     int destWidth;
74     int destHeight;
75 }
76 struct GLXPipeRectLimits {
77     char[80] pipeName;
78     int XOrigin;
79     int YOrigin;
80     int maxHeight;
81     int maxWidth;
82 }
83 
84 // Function pointers
85 
86 extern(C) nothrow @nogc {
87 
88     // for GLX_VERSION_1_4
89     alias __GLXextFuncPtr = void function();
90 }
91 
92 
93 // Constants for GLX_VERSION_1_0
94 enum GLX_EXTENSION_NAME     = "GLX";
95 enum GLX_PbufferClobber     = 0;
96 enum GLX_BufferSwapComplete = 1;
97 enum __GLX_NUMBER_EVENTS    = 17;
98 enum GLX_BAD_SCREEN         = 1;
99 enum GLX_BAD_ATTRIBUTE      = 2;
100 enum GLX_NO_EXTENSION       = 3;
101 enum GLX_BAD_VISUAL         = 4;
102 enum GLX_BAD_CONTEXT        = 5;
103 enum GLX_BAD_VALUE          = 6;
104 enum GLX_BAD_ENUM           = 7;
105 enum GLX_USE_GL             = 1;
106 enum GLX_BUFFER_SIZE        = 2;
107 enum GLX_LEVEL              = 3;
108 enum GLX_RGBA               = 4;
109 enum GLX_DOUBLEBUFFER       = 5;
110 enum GLX_STEREO             = 6;
111 enum GLX_AUX_BUFFERS        = 7;
112 enum GLX_RED_SIZE           = 8;
113 enum GLX_GREEN_SIZE         = 9;
114 enum GLX_BLUE_SIZE          = 10;
115 enum GLX_ALPHA_SIZE         = 11;
116 enum GLX_DEPTH_SIZE         = 12;
117 enum GLX_STENCIL_SIZE       = 13;
118 enum GLX_ACCUM_RED_SIZE     = 14;
119 enum GLX_ACCUM_GREEN_SIZE   = 15;
120 enum GLX_ACCUM_BLUE_SIZE    = 16;
121 enum GLX_ACCUM_ALPHA_SIZE   = 17;
122 
123 // Constants for GLX_VERSION_1_1
124 enum GLX_VENDOR     = 0x1;
125 enum GLX_VERSION    = 0x2;
126 enum GLX_EXTENSIONS = 0x3;
127 
128 // Constants for GLX_VERSION_1_3
129 enum GLX_WINDOW_BIT              = 0x00000001;
130 enum GLX_PIXMAP_BIT              = 0x00000002;
131 enum GLX_PBUFFER_BIT             = 0x00000004;
132 enum GLX_RGBA_BIT                = 0x00000001;
133 enum GLX_COLOR_INDEX_BIT         = 0x00000002;
134 enum GLX_PBUFFER_CLOBBER_MASK    = 0x08000000;
135 enum GLX_FRONT_LEFT_BUFFER_BIT   = 0x00000001;
136 enum GLX_FRONT_RIGHT_BUFFER_BIT  = 0x00000002;
137 enum GLX_BACK_LEFT_BUFFER_BIT    = 0x00000004;
138 enum GLX_BACK_RIGHT_BUFFER_BIT   = 0x00000008;
139 enum GLX_AUX_BUFFERS_BIT         = 0x00000010;
140 enum GLX_DEPTH_BUFFER_BIT        = 0x00000020;
141 enum GLX_STENCIL_BUFFER_BIT      = 0x00000040;
142 enum GLX_ACCUM_BUFFER_BIT        = 0x00000080;
143 enum GLX_CONFIG_CAVEAT           = 0x20;
144 enum GLX_X_VISUAL_TYPE           = 0x22;
145 enum GLX_TRANSPARENT_TYPE        = 0x23;
146 enum GLX_TRANSPARENT_INDEX_VALUE = 0x24;
147 enum GLX_TRANSPARENT_RED_VALUE   = 0x25;
148 enum GLX_TRANSPARENT_GREEN_VALUE = 0x26;
149 enum GLX_TRANSPARENT_BLUE_VALUE  = 0x27;
150 enum GLX_TRANSPARENT_ALPHA_VALUE = 0x28;
151 enum GLX_DONT_CARE               = 0xFFFFFFFF;
152 enum GLX_NONE                    = 0x8000;
153 enum GLX_SLOW_CONFIG             = 0x8001;
154 enum GLX_TRUE_COLOR              = 0x8002;
155 enum GLX_DIRECT_COLOR            = 0x8003;
156 enum GLX_PSEUDO_COLOR            = 0x8004;
157 enum GLX_STATIC_COLOR            = 0x8005;
158 enum GLX_GRAY_SCALE              = 0x8006;
159 enum GLX_STATIC_GRAY             = 0x8007;
160 enum GLX_TRANSPARENT_RGB         = 0x8008;
161 enum GLX_TRANSPARENT_INDEX       = 0x8009;
162 enum GLX_VISUAL_ID               = 0x800B;
163 enum GLX_SCREEN                  = 0x800C;
164 enum GLX_NON_CONFORMANT_CONFIG   = 0x800D;
165 enum GLX_DRAWABLE_TYPE           = 0x8010;
166 enum GLX_RENDER_TYPE             = 0x8011;
167 enum GLX_X_RENDERABLE            = 0x8012;
168 enum GLX_FBCONFIG_ID             = 0x8013;
169 enum GLX_RGBA_TYPE               = 0x8014;
170 enum GLX_COLOR_INDEX_TYPE        = 0x8015;
171 enum GLX_MAX_PBUFFER_WIDTH       = 0x8016;
172 enum GLX_MAX_PBUFFER_HEIGHT      = 0x8017;
173 enum GLX_MAX_PBUFFER_PIXELS      = 0x8018;
174 enum GLX_PRESERVED_CONTENTS      = 0x801B;
175 enum GLX_LARGEST_PBUFFER         = 0x801C;
176 enum GLX_WIDTH                   = 0x801D;
177 enum GLX_HEIGHT                  = 0x801E;
178 enum GLX_EVENT_MASK              = 0x801F;
179 enum GLX_DAMAGED                 = 0x8020;
180 enum GLX_SAVED                   = 0x8021;
181 enum GLX_WINDOW                  = 0x8022;
182 enum GLX_PBUFFER                 = 0x8023;
183 enum GLX_PBUFFER_HEIGHT          = 0x8040;
184 enum GLX_PBUFFER_WIDTH           = 0x8041;
185 
186 // Constants for GLX_VERSION_1_4
187 enum GLX_SAMPLE_BUFFERS = 100000;
188 enum GLX_SAMPLES        = 100001;
189 
190 // Constants for GLX_ARB_context_flush_control
191 enum GLX_CONTEXT_RELEASE_BEHAVIOR_ARB       = 0x2097;
192 enum GLX_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB  = 0;
193 enum GLX_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB = 0x2098;
194 
195 // Constants for GLX_ARB_create_context
196 enum GLX_CONTEXT_DEBUG_BIT_ARB              = 0x00000001;
197 enum GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB = 0x00000002;
198 enum GLX_CONTEXT_MAJOR_VERSION_ARB          = 0x2091;
199 enum GLX_CONTEXT_MINOR_VERSION_ARB          = 0x2092;
200 enum GLX_CONTEXT_FLAGS_ARB                  = 0x2094;
201 
202 // Constants for GLX_ARB_create_context_no_error
203 enum GLX_CONTEXT_OPENGL_NO_ERROR_ARB = 0x31B3;
204 
205 // Constants for GLX_ARB_create_context_profile
206 enum GLX_CONTEXT_CORE_PROFILE_BIT_ARB          = 0x00000001;
207 enum GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB = 0x00000002;
208 enum GLX_CONTEXT_PROFILE_MASK_ARB              = 0x9126;
209 
210 // Constants for GLX_ARB_create_context_robustness
211 enum GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB           = 0x00000004;
212 enum GLX_LOSE_CONTEXT_ON_RESET_ARB               = 0x8252;
213 enum GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB = 0x8256;
214 enum GLX_NO_RESET_NOTIFICATION_ARB               = 0x8261;
215 
216 // Constants for GLX_ARB_fbconfig_float
217 enum GLX_RGBA_FLOAT_TYPE_ARB = 0x20B9;
218 enum GLX_RGBA_FLOAT_BIT_ARB  = 0x00000004;
219 
220 // Constants for GLX_ARB_framebuffer_sRGB
221 enum GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB = 0x20B2;
222 
223 // Constants for GLX_ARB_multisample
224 enum GLX_SAMPLE_BUFFERS_ARB = 100000;
225 enum GLX_SAMPLES_ARB        = 100001;
226 
227 // Constants for GLX_ARB_robustness_application_isolation
228 enum GLX_CONTEXT_RESET_ISOLATION_BIT_ARB = 0x00000008;
229 
230 // Constants for GLX_ARB_vertex_buffer_object
231 enum GLX_CONTEXT_ALLOW_BUFFER_BYTE_ORDER_MISMATCH_ARB = 0x2095;
232 
233 // Constants for GLX_3DFX_multisample
234 enum GLX_SAMPLE_BUFFERS_3DFX = 0x8050;
235 enum GLX_SAMPLES_3DFX        = 0x8051;
236 
237 // Constants for GLX_AMD_gpu_association
238 enum GLX_GPU_VENDOR_AMD                = 0x1F00;
239 enum GLX_GPU_RENDERER_STRING_AMD       = 0x1F01;
240 enum GLX_GPU_OPENGL_VERSION_STRING_AMD = 0x1F02;
241 enum GLX_GPU_FASTEST_TARGET_GPUS_AMD   = 0x21A2;
242 enum GLX_GPU_RAM_AMD                   = 0x21A3;
243 enum GLX_GPU_CLOCK_AMD                 = 0x21A4;
244 enum GLX_GPU_NUM_PIPES_AMD             = 0x21A5;
245 enum GLX_GPU_NUM_SIMD_AMD              = 0x21A6;
246 enum GLX_GPU_NUM_RB_AMD                = 0x21A7;
247 enum GLX_GPU_NUM_SPI_AMD               = 0x21A8;
248 
249 // Constants for GLX_EXT_buffer_age
250 enum GLX_BACK_BUFFER_AGE_EXT = 0x20F4;
251 
252 // Constants for GLX_EXT_create_context_es2_profile
253 enum GLX_CONTEXT_ES2_PROFILE_BIT_EXT = 0x00000004;
254 
255 // Constants for GLX_EXT_create_context_es_profile
256 enum GLX_CONTEXT_ES_PROFILE_BIT_EXT = 0x00000004;
257 
258 // Constants for GLX_EXT_fbconfig_packed_float
259 enum GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT = 0x20B1;
260 enum GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT  = 0x00000008;
261 
262 // Constants for GLX_EXT_framebuffer_sRGB
263 enum GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT = 0x20B2;
264 
265 // Constants for GLX_EXT_import_context
266 enum GLX_SHARE_CONTEXT_EXT = 0x800A;
267 enum GLX_VISUAL_ID_EXT     = 0x800B;
268 enum GLX_SCREEN_EXT        = 0x800C;
269 
270 // Constants for GLX_EXT_libglvnd
271 enum GLX_VENDOR_NAMES_EXT = 0x20F6;
272 
273 // Constants for GLX_EXT_stereo_tree
274 enum GLX_STEREO_TREE_EXT        = 0x20F5;
275 enum GLX_STEREO_NOTIFY_MASK_EXT = 0x00000001;
276 enum GLX_STEREO_NOTIFY_EXT      = 0x00000000;
277 
278 // Constants for GLX_EXT_swap_control
279 enum GLX_SWAP_INTERVAL_EXT     = 0x20F1;
280 enum GLX_MAX_SWAP_INTERVAL_EXT = 0x20F2;
281 
282 // Constants for GLX_EXT_swap_control_tear
283 enum GLX_LATE_SWAPS_TEAR_EXT = 0x20F3;
284 
285 // Constants for GLX_EXT_texture_from_pixmap
286 enum GLX_TEXTURE_1D_BIT_EXT          = 0x00000001;
287 enum GLX_TEXTURE_2D_BIT_EXT          = 0x00000002;
288 enum GLX_TEXTURE_RECTANGLE_BIT_EXT   = 0x00000004;
289 enum GLX_BIND_TO_TEXTURE_RGB_EXT     = 0x20D0;
290 enum GLX_BIND_TO_TEXTURE_RGBA_EXT    = 0x20D1;
291 enum GLX_BIND_TO_MIPMAP_TEXTURE_EXT  = 0x20D2;
292 enum GLX_BIND_TO_TEXTURE_TARGETS_EXT = 0x20D3;
293 enum GLX_Y_INVERTED_EXT              = 0x20D4;
294 enum GLX_TEXTURE_FORMAT_EXT          = 0x20D5;
295 enum GLX_TEXTURE_TARGET_EXT          = 0x20D6;
296 enum GLX_MIPMAP_TEXTURE_EXT          = 0x20D7;
297 enum GLX_TEXTURE_FORMAT_NONE_EXT     = 0x20D8;
298 enum GLX_TEXTURE_FORMAT_RGB_EXT      = 0x20D9;
299 enum GLX_TEXTURE_FORMAT_RGBA_EXT     = 0x20DA;
300 enum GLX_TEXTURE_1D_EXT              = 0x20DB;
301 enum GLX_TEXTURE_2D_EXT              = 0x20DC;
302 enum GLX_TEXTURE_RECTANGLE_EXT       = 0x20DD;
303 enum GLX_FRONT_LEFT_EXT              = 0x20DE;
304 enum GLX_FRONT_RIGHT_EXT             = 0x20DF;
305 enum GLX_BACK_LEFT_EXT               = 0x20E0;
306 enum GLX_BACK_RIGHT_EXT              = 0x20E1;
307 enum GLX_FRONT_EXT                   = 0x20DE;
308 enum GLX_BACK_EXT                    = 0x20E0;
309 enum GLX_AUX0_EXT                    = 0x20E2;
310 enum GLX_AUX1_EXT                    = 0x20E3;
311 enum GLX_AUX2_EXT                    = 0x20E4;
312 enum GLX_AUX3_EXT                    = 0x20E5;
313 enum GLX_AUX4_EXT                    = 0x20E6;
314 enum GLX_AUX5_EXT                    = 0x20E7;
315 enum GLX_AUX6_EXT                    = 0x20E8;
316 enum GLX_AUX7_EXT                    = 0x20E9;
317 enum GLX_AUX8_EXT                    = 0x20EA;
318 enum GLX_AUX9_EXT                    = 0x20EB;
319 
320 // Constants for GLX_EXT_visual_info
321 enum GLX_X_VISUAL_TYPE_EXT           = 0x22;
322 enum GLX_TRANSPARENT_TYPE_EXT        = 0x23;
323 enum GLX_TRANSPARENT_INDEX_VALUE_EXT = 0x24;
324 enum GLX_TRANSPARENT_RED_VALUE_EXT   = 0x25;
325 enum GLX_TRANSPARENT_GREEN_VALUE_EXT = 0x26;
326 enum GLX_TRANSPARENT_BLUE_VALUE_EXT  = 0x27;
327 enum GLX_TRANSPARENT_ALPHA_VALUE_EXT = 0x28;
328 enum GLX_NONE_EXT                    = 0x8000;
329 enum GLX_TRUE_COLOR_EXT              = 0x8002;
330 enum GLX_DIRECT_COLOR_EXT            = 0x8003;
331 enum GLX_PSEUDO_COLOR_EXT            = 0x8004;
332 enum GLX_STATIC_COLOR_EXT            = 0x8005;
333 enum GLX_GRAY_SCALE_EXT              = 0x8006;
334 enum GLX_STATIC_GRAY_EXT             = 0x8007;
335 enum GLX_TRANSPARENT_RGB_EXT         = 0x8008;
336 enum GLX_TRANSPARENT_INDEX_EXT       = 0x8009;
337 
338 // Constants for GLX_EXT_visual_rating
339 enum GLX_VISUAL_CAVEAT_EXT         = 0x20;
340 enum GLX_SLOW_VISUAL_EXT           = 0x8001;
341 enum GLX_NON_CONFORMANT_VISUAL_EXT = 0x800D;
342 
343 // Constants for GLX_INTEL_swap_event
344 enum GLX_BUFFER_SWAP_COMPLETE_INTEL_MASK = 0x04000000;
345 enum GLX_EXCHANGE_COMPLETE_INTEL         = 0x8180;
346 enum GLX_COPY_COMPLETE_INTEL             = 0x8181;
347 enum GLX_FLIP_COMPLETE_INTEL             = 0x8182;
348 
349 // Constants for GLX_MESA_query_renderer
350 enum GLX_RENDERER_VENDOR_ID_MESA                            = 0x8183;
351 enum GLX_RENDERER_DEVICE_ID_MESA                            = 0x8184;
352 enum GLX_RENDERER_VERSION_MESA                              = 0x8185;
353 enum GLX_RENDERER_ACCELERATED_MESA                          = 0x8186;
354 enum GLX_RENDERER_VIDEO_MEMORY_MESA                         = 0x8187;
355 enum GLX_RENDERER_UNIFIED_MEMORY_ARCHITECTURE_MESA          = 0x8188;
356 enum GLX_RENDERER_PREFERRED_PROFILE_MESA                    = 0x8189;
357 enum GLX_RENDERER_OPENGL_CORE_PROFILE_VERSION_MESA          = 0x818A;
358 enum GLX_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION_MESA = 0x818B;
359 enum GLX_RENDERER_OPENGL_ES_PROFILE_VERSION_MESA            = 0x818C;
360 enum GLX_RENDERER_OPENGL_ES2_PROFILE_VERSION_MESA           = 0x818D;
361 
362 // Constants for GLX_MESA_set_3dfx_mode
363 enum GLX_3DFX_WINDOW_MODE_MESA     = 0x1;
364 enum GLX_3DFX_FULLSCREEN_MODE_MESA = 0x2;
365 
366 // Constants for GLX_NV_float_buffer
367 enum GLX_FLOAT_COMPONENTS_NV = 0x20B0;
368 
369 // Constants for GLX_NV_multisample_coverage
370 enum GLX_COVERAGE_SAMPLES_NV = 100001;
371 enum GLX_COLOR_SAMPLES_NV    = 0x20B3;
372 
373 // Constants for GLX_NV_present_video
374 enum GLX_NUM_VIDEO_SLOTS_NV = 0x20F0;
375 
376 // Constants for GLX_NV_robustness_video_memory_purge
377 enum GLX_GENERATE_RESET_ON_VIDEO_MEMORY_PURGE_NV = 0x20F7;
378 
379 // Constants for GLX_NV_video_capture
380 enum GLX_DEVICE_ID_NV               = 0x20CD;
381 enum GLX_UNIQUE_ID_NV               = 0x20CE;
382 enum GLX_NUM_VIDEO_CAPTURE_SLOTS_NV = 0x20CF;
383 
384 // Constants for GLX_NV_video_out
385 enum GLX_VIDEO_OUT_COLOR_NV              = 0x20C3;
386 enum GLX_VIDEO_OUT_ALPHA_NV              = 0x20C4;
387 enum GLX_VIDEO_OUT_DEPTH_NV              = 0x20C5;
388 enum GLX_VIDEO_OUT_COLOR_AND_ALPHA_NV    = 0x20C6;
389 enum GLX_VIDEO_OUT_COLOR_AND_DEPTH_NV    = 0x20C7;
390 enum GLX_VIDEO_OUT_FRAME_NV              = 0x20C8;
391 enum GLX_VIDEO_OUT_FIELD_1_NV            = 0x20C9;
392 enum GLX_VIDEO_OUT_FIELD_2_NV            = 0x20CA;
393 enum GLX_VIDEO_OUT_STACKED_FIELDS_1_2_NV = 0x20CB;
394 enum GLX_VIDEO_OUT_STACKED_FIELDS_2_1_NV = 0x20CC;
395 
396 // Constants for GLX_OML_swap_method
397 enum GLX_SWAP_METHOD_OML    = 0x8060;
398 enum GLX_SWAP_EXCHANGE_OML  = 0x8061;
399 enum GLX_SWAP_COPY_OML      = 0x8062;
400 enum GLX_SWAP_UNDEFINED_OML = 0x8063;
401 
402 // Constants for GLX_SGIS_blended_overlay
403 enum GLX_BLENDED_RGBA_SGIS = 0x8025;
404 
405 // Constants for GLX_SGIS_multisample
406 enum GLX_SAMPLE_BUFFERS_SGIS = 100000;
407 enum GLX_SAMPLES_SGIS        = 100001;
408 
409 // Constants for GLX_SGIS_shared_multisample
410 enum GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS  = 0x8026;
411 enum GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS = 0x8027;
412 
413 // Constants for GLX_SGIX_fbconfig
414 enum GLX_WINDOW_BIT_SGIX       = 0x00000001;
415 enum GLX_PIXMAP_BIT_SGIX       = 0x00000002;
416 enum GLX_RGBA_BIT_SGIX         = 0x00000001;
417 enum GLX_COLOR_INDEX_BIT_SGIX  = 0x00000002;
418 enum GLX_DRAWABLE_TYPE_SGIX    = 0x8010;
419 enum GLX_RENDER_TYPE_SGIX      = 0x8011;
420 enum GLX_X_RENDERABLE_SGIX     = 0x8012;
421 enum GLX_FBCONFIG_ID_SGIX      = 0x8013;
422 enum GLX_RGBA_TYPE_SGIX        = 0x8014;
423 enum GLX_COLOR_INDEX_TYPE_SGIX = 0x8015;
424 
425 // Constants for GLX_SGIX_hyperpipe
426 enum GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX = 80;
427 enum GLX_BAD_HYPERPIPE_CONFIG_SGIX       = 91;
428 enum GLX_BAD_HYPERPIPE_SGIX              = 92;
429 enum GLX_HYPERPIPE_DISPLAY_PIPE_SGIX     = 0x00000001;
430 enum GLX_HYPERPIPE_RENDER_PIPE_SGIX      = 0x00000002;
431 enum GLX_PIPE_RECT_SGIX                  = 0x00000001;
432 enum GLX_PIPE_RECT_LIMITS_SGIX           = 0x00000002;
433 enum GLX_HYPERPIPE_STEREO_SGIX           = 0x00000003;
434 enum GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX    = 0x00000004;
435 enum GLX_HYPERPIPE_ID_SGIX               = 0x8030;
436 
437 // Constants for GLX_SGIX_pbuffer
438 enum GLX_PBUFFER_BIT_SGIX            = 0x00000004;
439 enum GLX_BUFFER_CLOBBER_MASK_SGIX    = 0x08000000;
440 enum GLX_FRONT_LEFT_BUFFER_BIT_SGIX  = 0x00000001;
441 enum GLX_FRONT_RIGHT_BUFFER_BIT_SGIX = 0x00000002;
442 enum GLX_BACK_LEFT_BUFFER_BIT_SGIX   = 0x00000004;
443 enum GLX_BACK_RIGHT_BUFFER_BIT_SGIX  = 0x00000008;
444 enum GLX_AUX_BUFFERS_BIT_SGIX        = 0x00000010;
445 enum GLX_DEPTH_BUFFER_BIT_SGIX       = 0x00000020;
446 enum GLX_STENCIL_BUFFER_BIT_SGIX     = 0x00000040;
447 enum GLX_ACCUM_BUFFER_BIT_SGIX       = 0x00000080;
448 enum GLX_SAMPLE_BUFFERS_BIT_SGIX     = 0x00000100;
449 enum GLX_MAX_PBUFFER_WIDTH_SGIX      = 0x8016;
450 enum GLX_MAX_PBUFFER_HEIGHT_SGIX     = 0x8017;
451 enum GLX_MAX_PBUFFER_PIXELS_SGIX     = 0x8018;
452 enum GLX_OPTIMAL_PBUFFER_WIDTH_SGIX  = 0x8019;
453 enum GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX = 0x801A;
454 enum GLX_PRESERVED_CONTENTS_SGIX     = 0x801B;
455 enum GLX_LARGEST_PBUFFER_SGIX        = 0x801C;
456 enum GLX_WIDTH_SGIX                  = 0x801D;
457 enum GLX_HEIGHT_SGIX                 = 0x801E;
458 enum GLX_EVENT_MASK_SGIX             = 0x801F;
459 enum GLX_DAMAGED_SGIX                = 0x8020;
460 enum GLX_SAVED_SGIX                  = 0x8021;
461 enum GLX_WINDOW_SGIX                 = 0x8022;
462 enum GLX_PBUFFER_SGIX                = 0x8023;
463 
464 // Constants for GLX_SGIX_video_resize
465 enum GLX_SYNC_FRAME_SGIX = 0x00000000;
466 enum GLX_SYNC_SWAP_SGIX  = 0x00000001;
467 
468 // Constants for GLX_SGIX_visual_select_group
469 enum GLX_VISUAL_SELECT_GROUP_SGIX = 0x8028;
470 
471 // Command pointer aliases
472 
473 extern(C) nothrow @nogc {
474 
475     // Command pointers for GLX_VERSION_1_0
476     alias PFN_glXChooseVisual = XVisualInfo * function (
477         Display* dpy,
478         int      screen,
479         int*     attribList,
480     );
481     alias PFN_glXCreateContext = GLXContext function (
482         Display*     dpy,
483         XVisualInfo* vis,
484         GLXContext   shareList,
485         Bool         direct,
486     );
487     alias PFN_glXDestroyContext = void function (
488         Display*   dpy,
489         GLXContext ctx,
490     );
491     alias PFN_glXMakeCurrent = Bool function (
492         Display*    dpy,
493         GLXDrawable drawable,
494         GLXContext  ctx,
495     );
496     alias PFN_glXCopyContext = void function (
497         Display*   dpy,
498         GLXContext src,
499         GLXContext dst,
500         c_ulong    mask,
501     );
502     alias PFN_glXSwapBuffers = void function (
503         Display*    dpy,
504         GLXDrawable drawable,
505     );
506     alias PFN_glXCreateGLXPixmap = GLXPixmap function (
507         Display*     dpy,
508         XVisualInfo* visual,
509         Pixmap       pixmap,
510     );
511     alias PFN_glXDestroyGLXPixmap = void function (
512         Display*  dpy,
513         GLXPixmap pixmap,
514     );
515     alias PFN_glXQueryExtension = Bool function (
516         Display* dpy,
517         int*     errorb,
518         int*     event,
519     );
520     alias PFN_glXQueryVersion = Bool function (
521         Display* dpy,
522         int*     maj,
523         int*     min,
524     );
525     alias PFN_glXIsDirect = Bool function (
526         Display*   dpy,
527         GLXContext ctx,
528     );
529     alias PFN_glXGetConfig = int function (
530         Display*     dpy,
531         XVisualInfo* visual,
532         int          attrib,
533         int*         value,
534     );
535     alias PFN_glXGetCurrentContext = GLXContext function ();
536     alias PFN_glXGetCurrentDrawable = GLXDrawable function ();
537     alias PFN_glXWaitGL = void function ();
538     alias PFN_glXWaitX = void function ();
539     alias PFN_glXUseXFont = void function (
540         Font font,
541         int  first,
542         int  count,
543         int  list,
544     );
545 
546     // Command pointers for GLX_VERSION_1_1
547     alias PFN_glXQueryExtensionsString = const(char)* function (
548         Display* dpy,
549         int      screen,
550     );
551     alias PFN_glXQueryServerString = const(char)* function (
552         Display* dpy,
553         int      screen,
554         int      name,
555     );
556     alias PFN_glXGetClientString = const(char)* function (
557         Display* dpy,
558         int      name,
559     );
560 
561     // Command pointers for GLX_VERSION_1_2
562     alias PFN_glXGetCurrentDisplay = Display * function ();
563 
564     // Command pointers for GLX_VERSION_1_3
565     alias PFN_glXGetFBConfigs = GLXFBConfig * function (
566         Display* dpy,
567         int      screen,
568         int*     nelements,
569     );
570     alias PFN_glXChooseFBConfig = GLXFBConfig * function (
571         Display*    dpy,
572         int         screen,
573         const(int)* attrib_list,
574         int*        nelements,
575     );
576     alias PFN_glXGetFBConfigAttrib = int function (
577         Display*    dpy,
578         GLXFBConfig config,
579         int         attribute,
580         int*        value,
581     );
582     alias PFN_glXGetVisualFromFBConfig = XVisualInfo * function (
583         Display*    dpy,
584         GLXFBConfig config,
585     );
586     alias PFN_glXCreateWindow = GLXWindow function (
587         Display*    dpy,
588         GLXFBConfig config,
589         Window      win,
590         const(int)* attrib_list,
591     );
592     alias PFN_glXDestroyWindow = void function (
593         Display*  dpy,
594         GLXWindow win,
595     );
596     alias PFN_glXCreatePixmap = GLXPixmap function (
597         Display*    dpy,
598         GLXFBConfig config,
599         Pixmap      pixmap,
600         const(int)* attrib_list,
601     );
602     alias PFN_glXDestroyPixmap = void function (
603         Display*  dpy,
604         GLXPixmap pixmap,
605     );
606     alias PFN_glXCreatePbuffer = GLXPbuffer function (
607         Display*    dpy,
608         GLXFBConfig config,
609         const(int)* attrib_list,
610     );
611     alias PFN_glXDestroyPbuffer = void function (
612         Display*   dpy,
613         GLXPbuffer pbuf,
614     );
615     alias PFN_glXQueryDrawable = void function (
616         Display*    dpy,
617         GLXDrawable draw,
618         int         attribute,
619         uint*       value,
620     );
621     alias PFN_glXCreateNewContext = GLXContext function (
622         Display*    dpy,
623         GLXFBConfig config,
624         int         render_type,
625         GLXContext  share_list,
626         Bool        direct,
627     );
628     alias PFN_glXMakeContextCurrent = Bool function (
629         Display*    dpy,
630         GLXDrawable draw,
631         GLXDrawable read,
632         GLXContext  ctx,
633     );
634     alias PFN_glXGetCurrentReadDrawable = GLXDrawable function ();
635     alias PFN_glXQueryContext = int function (
636         Display*   dpy,
637         GLXContext ctx,
638         int        attribute,
639         int*       value,
640     );
641     alias PFN_glXSelectEvent = void function (
642         Display*    dpy,
643         GLXDrawable draw,
644         c_ulong     event_mask,
645     );
646     alias PFN_glXGetSelectedEvent = void function (
647         Display*    dpy,
648         GLXDrawable draw,
649         c_ulong*    event_mask,
650     );
651 
652     // Command pointers for GLX_VERSION_1_4
653     alias PFN_glXGetProcAddress = __GLXextFuncPtr function (
654         const(GLubyte)* procName,
655     );
656 
657     // Command pointers for GLX_ARB_create_context
658     alias PFN_glXCreateContextAttribsARB = GLXContext function (
659         Display*    dpy,
660         GLXFBConfig config,
661         GLXContext  share_context,
662         Bool        direct,
663         const(int)* attrib_list,
664     );
665 
666     // Command pointers for GLX_ARB_get_proc_address
667     alias PFN_glXGetProcAddressARB = __GLXextFuncPtr function (
668         const(GLubyte)* procName,
669     );
670 
671     // Command pointers for GLX_AMD_gpu_association
672     alias PFN_glXGetGPUIDsAMD = uint function (
673         uint  maxCount,
674         uint* ids,
675     );
676     alias PFN_glXGetGPUInfoAMD = int function (
677         uint   id,
678         int    property,
679         GLenum dataType,
680         uint   size,
681         void*  data,
682     );
683     alias PFN_glXGetContextGPUIDAMD = uint function (
684         GLXContext ctx,
685     );
686     alias PFN_glXCreateAssociatedContextAMD = GLXContext function (
687         uint       id,
688         GLXContext share_list,
689     );
690     alias PFN_glXCreateAssociatedContextAttribsAMD = GLXContext function (
691         uint        id,
692         GLXContext  share_context,
693         const(int)* attribList,
694     );
695     alias PFN_glXDeleteAssociatedContextAMD = Bool function (
696         GLXContext ctx,
697     );
698     alias PFN_glXMakeAssociatedContextCurrentAMD = Bool function (
699         GLXContext ctx,
700     );
701     alias PFN_glXGetCurrentAssociatedContextAMD = GLXContext function ();
702     alias PFN_glXBlitContextFramebufferAMD = void function (
703         GLXContext dstCtx,
704         GLint      srcX0,
705         GLint      srcY0,
706         GLint      srcX1,
707         GLint      srcY1,
708         GLint      dstX0,
709         GLint      dstY0,
710         GLint      dstX1,
711         GLint      dstY1,
712         GLbitfield mask,
713         GLenum     filter,
714     );
715 
716     // Command pointers for GLX_EXT_import_context
717     alias PFN_glXGetCurrentDisplayEXT = Display * function ();
718     alias PFN_glXQueryContextInfoEXT = int function (
719         Display*   dpy,
720         GLXContext context,
721         int        attribute,
722         int*       value,
723     );
724     alias PFN_glXGetContextIDEXT = GLXContextID function (
725         const GLXContext context,
726     );
727     alias PFN_glXImportContextEXT = GLXContext function (
728         Display*     dpy,
729         GLXContextID contextID,
730     );
731     alias PFN_glXFreeContextEXT = void function (
732         Display*   dpy,
733         GLXContext context,
734     );
735 
736     // Command pointers for GLX_EXT_swap_control
737     alias PFN_glXSwapIntervalEXT = void function (
738         Display*    dpy,
739         GLXDrawable drawable,
740         int         interval,
741     );
742 
743     // Command pointers for GLX_EXT_texture_from_pixmap
744     alias PFN_glXBindTexImageEXT = void function (
745         Display*    dpy,
746         GLXDrawable drawable,
747         int         buffer,
748         const(int)* attrib_list,
749     );
750     alias PFN_glXReleaseTexImageEXT = void function (
751         Display*    dpy,
752         GLXDrawable drawable,
753         int         buffer,
754     );
755 
756     // Command pointers for GLX_MESA_agp_offset
757     alias PFN_glXGetAGPOffsetMESA = uint function (
758         const(void)* pointer,
759     );
760 
761     // Command pointers for GLX_MESA_copy_sub_buffer
762     alias PFN_glXCopySubBufferMESA = void function (
763         Display*    dpy,
764         GLXDrawable drawable,
765         int         x,
766         int         y,
767         int         width,
768         int         height,
769     );
770 
771     // Command pointers for GLX_MESA_pixmap_colormap
772     alias PFN_glXCreateGLXPixmapMESA = GLXPixmap function (
773         Display*     dpy,
774         XVisualInfo* visual,
775         Pixmap       pixmap,
776         Colormap     cmap,
777     );
778 
779     // Command pointers for GLX_MESA_query_renderer
780     alias PFN_glXQueryCurrentRendererIntegerMESA = Bool function (
781         int   attribute,
782         uint* value,
783     );
784     alias PFN_glXQueryCurrentRendererStringMESA = const(char)* function (
785         int attribute,
786     );
787     alias PFN_glXQueryRendererIntegerMESA = Bool function (
788         Display* dpy,
789         int      screen,
790         int      renderer,
791         int      attribute,
792         uint*    value,
793     );
794     alias PFN_glXQueryRendererStringMESA = const(char)* function (
795         Display* dpy,
796         int      screen,
797         int      renderer,
798         int      attribute,
799     );
800 
801     // Command pointers for GLX_MESA_release_buffers
802     alias PFN_glXReleaseBuffersMESA = Bool function (
803         Display*    dpy,
804         GLXDrawable drawable,
805     );
806 
807     // Command pointers for GLX_MESA_set_3dfx_mode
808     alias PFN_glXSet3DfxModeMESA = Bool function (
809         int mode,
810     );
811 
812     // Command pointers for GLX_MESA_swap_control
813     alias PFN_glXGetSwapIntervalMESA = int function ();
814     alias PFN_glXSwapIntervalMESA = int function (
815         uint interval,
816     );
817 
818     // Command pointers for GLX_NV_copy_buffer
819     alias PFN_glXCopyBufferSubDataNV = void function (
820         Display*   dpy,
821         GLXContext readCtx,
822         GLXContext writeCtx,
823         GLenum     readTarget,
824         GLenum     writeTarget,
825         GLintptr   readOffset,
826         GLintptr   writeOffset,
827         GLsizeiptr size,
828     );
829     alias PFN_glXNamedCopyBufferSubDataNV = void function (
830         Display*   dpy,
831         GLXContext readCtx,
832         GLXContext writeCtx,
833         GLuint     readBuffer,
834         GLuint     writeBuffer,
835         GLintptr   readOffset,
836         GLintptr   writeOffset,
837         GLsizeiptr size,
838     );
839 
840     // Command pointers for GLX_NV_copy_image
841     alias PFN_glXCopyImageSubDataNV = void function (
842         Display*   dpy,
843         GLXContext srcCtx,
844         GLuint     srcName,
845         GLenum     srcTarget,
846         GLint      srcLevel,
847         GLint      srcX,
848         GLint      srcY,
849         GLint      srcZ,
850         GLXContext dstCtx,
851         GLuint     dstName,
852         GLenum     dstTarget,
853         GLint      dstLevel,
854         GLint      dstX,
855         GLint      dstY,
856         GLint      dstZ,
857         GLsizei    width,
858         GLsizei    height,
859         GLsizei    depth,
860     );
861 
862     // Command pointers for GLX_NV_delay_before_swap
863     alias PFN_glXDelayBeforeSwapNV = Bool function (
864         Display*    dpy,
865         GLXDrawable drawable,
866         GLfloat     seconds,
867     );
868 
869     // Command pointers for GLX_NV_present_video
870     alias PFN_glXEnumerateVideoDevicesNV = uint * function (
871         Display* dpy,
872         int      screen,
873         int*     nelements,
874     );
875     alias PFN_glXBindVideoDeviceNV = int function (
876         Display*    dpy,
877         uint        video_slot,
878         uint        video_device,
879         const(int)* attrib_list,
880     );
881 
882     // Command pointers for GLX_NV_swap_group
883     alias PFN_glXJoinSwapGroupNV = Bool function (
884         Display*    dpy,
885         GLXDrawable drawable,
886         GLuint      group,
887     );
888     alias PFN_glXBindSwapBarrierNV = Bool function (
889         Display* dpy,
890         GLuint   group,
891         GLuint   barrier,
892     );
893     alias PFN_glXQuerySwapGroupNV = Bool function (
894         Display*    dpy,
895         GLXDrawable drawable,
896         GLuint*     group,
897         GLuint*     barrier,
898     );
899     alias PFN_glXQueryMaxSwapGroupsNV = Bool function (
900         Display* dpy,
901         int      screen,
902         GLuint*  maxGroups,
903         GLuint*  maxBarriers,
904     );
905     alias PFN_glXQueryFrameCountNV = Bool function (
906         Display* dpy,
907         int      screen,
908         GLuint*  count,
909     );
910     alias PFN_glXResetFrameCountNV = Bool function (
911         Display* dpy,
912         int      screen,
913     );
914 
915     // Command pointers for GLX_NV_video_capture
916     alias PFN_glXBindVideoCaptureDeviceNV = int function (
917         Display*                dpy,
918         uint                    video_capture_slot,
919         GLXVideoCaptureDeviceNV device,
920     );
921     alias PFN_glXEnumerateVideoCaptureDevicesNV = GLXVideoCaptureDeviceNV * function (
922         Display* dpy,
923         int      screen,
924         int*     nelements,
925     );
926     alias PFN_glXLockVideoCaptureDeviceNV = void function (
927         Display*                dpy,
928         GLXVideoCaptureDeviceNV device,
929     );
930     alias PFN_glXQueryVideoCaptureDeviceNV = int function (
931         Display*                dpy,
932         GLXVideoCaptureDeviceNV device,
933         int                     attribute,
934         int*                    value,
935     );
936     alias PFN_glXReleaseVideoCaptureDeviceNV = void function (
937         Display*                dpy,
938         GLXVideoCaptureDeviceNV device,
939     );
940 
941     // Command pointers for GLX_NV_video_out
942     alias PFN_glXGetVideoDeviceNV = int function (
943         Display*          dpy,
944         int               screen,
945         int               numVideoDevices,
946         GLXVideoDeviceNV* pVideoDevice,
947     );
948     alias PFN_glXReleaseVideoDeviceNV = int function (
949         Display*         dpy,
950         int              screen,
951         GLXVideoDeviceNV VideoDevice,
952     );
953     alias PFN_glXBindVideoImageNV = int function (
954         Display*         dpy,
955         GLXVideoDeviceNV VideoDevice,
956         GLXPbuffer       pbuf,
957         int              iVideoBuffer,
958     );
959     alias PFN_glXReleaseVideoImageNV = int function (
960         Display*   dpy,
961         GLXPbuffer pbuf,
962     );
963     alias PFN_glXSendPbufferToVideoNV = int function (
964         Display*   dpy,
965         GLXPbuffer pbuf,
966         int        iBufferType,
967         c_ulong*   pulCounterPbuffer,
968         GLboolean  bBlock,
969     );
970     alias PFN_glXGetVideoInfoNV = int function (
971         Display*         dpy,
972         int              screen,
973         GLXVideoDeviceNV VideoDevice,
974         c_ulong*         pulCounterOutputPbuffer,
975         c_ulong*         pulCounterOutputVideo,
976     );
977 
978     // Command pointers for GLX_OML_sync_control
979     alias PFN_glXGetSyncValuesOML = Bool function (
980         Display*    dpy,
981         GLXDrawable drawable,
982         int64_t*    ust,
983         int64_t*    msc,
984         int64_t*    sbc,
985     );
986     alias PFN_glXGetMscRateOML = Bool function (
987         Display*    dpy,
988         GLXDrawable drawable,
989         int32_t*    numerator,
990         int32_t*    denominator,
991     );
992     alias PFN_glXSwapBuffersMscOML = int64_t function (
993         Display*    dpy,
994         GLXDrawable drawable,
995         int64_t     target_msc,
996         int64_t     divisor,
997         int64_t     remainder,
998     );
999     alias PFN_glXWaitForMscOML = Bool function (
1000         Display*    dpy,
1001         GLXDrawable drawable,
1002         int64_t     target_msc,
1003         int64_t     divisor,
1004         int64_t     remainder,
1005         int64_t*    ust,
1006         int64_t*    msc,
1007         int64_t*    sbc,
1008     );
1009     alias PFN_glXWaitForSbcOML = Bool function (
1010         Display*    dpy,
1011         GLXDrawable drawable,
1012         int64_t     target_sbc,
1013         int64_t*    ust,
1014         int64_t*    msc,
1015         int64_t*    sbc,
1016     );
1017 
1018     // Command pointers for GLX_SGIX_fbconfig
1019     alias PFN_glXGetFBConfigAttribSGIX = int function (
1020         Display*        dpy,
1021         GLXFBConfigSGIX config,
1022         int             attribute,
1023         int*            value,
1024     );
1025     alias PFN_glXChooseFBConfigSGIX = GLXFBConfigSGIX * function (
1026         Display* dpy,
1027         int      screen,
1028         int*     attrib_list,
1029         int*     nelements,
1030     );
1031     alias PFN_glXCreateGLXPixmapWithConfigSGIX = GLXPixmap function (
1032         Display*        dpy,
1033         GLXFBConfigSGIX config,
1034         Pixmap          pixmap,
1035     );
1036     alias PFN_glXCreateContextWithConfigSGIX = GLXContext function (
1037         Display*        dpy,
1038         GLXFBConfigSGIX config,
1039         int             render_type,
1040         GLXContext      share_list,
1041         Bool            direct,
1042     );
1043     alias PFN_glXGetVisualFromFBConfigSGIX = XVisualInfo * function (
1044         Display*        dpy,
1045         GLXFBConfigSGIX config,
1046     );
1047     alias PFN_glXGetFBConfigFromVisualSGIX = GLXFBConfigSGIX function (
1048         Display*     dpy,
1049         XVisualInfo* vis,
1050     );
1051 
1052     // Command pointers for GLX_SGIX_hyperpipe
1053     alias PFN_glXQueryHyperpipeNetworkSGIX = GLXHyperpipeNetworkSGIX * function (
1054         Display* dpy,
1055         int*     npipes,
1056     );
1057     alias PFN_glXHyperpipeConfigSGIX = int function (
1058         Display*                dpy,
1059         int                     networkId,
1060         int                     npipes,
1061         GLXHyperpipeConfigSGIX* cfg,
1062         int*                    hpId,
1063     );
1064     alias PFN_glXQueryHyperpipeConfigSGIX = GLXHyperpipeConfigSGIX * function (
1065         Display* dpy,
1066         int      hpId,
1067         int*     npipes,
1068     );
1069     alias PFN_glXDestroyHyperpipeConfigSGIX = int function (
1070         Display* dpy,
1071         int      hpId,
1072     );
1073     alias PFN_glXBindHyperpipeSGIX = int function (
1074         Display* dpy,
1075         int      hpId,
1076     );
1077     alias PFN_glXQueryHyperpipeBestAttribSGIX = int function (
1078         Display* dpy,
1079         int      timeSlice,
1080         int      attrib,
1081         int      size,
1082         void*    attribList,
1083         void*    returnAttribList,
1084     );
1085     alias PFN_glXHyperpipeAttribSGIX = int function (
1086         Display* dpy,
1087         int      timeSlice,
1088         int      attrib,
1089         int      size,
1090         void*    attribList,
1091     );
1092     alias PFN_glXQueryHyperpipeAttribSGIX = int function (
1093         Display* dpy,
1094         int      timeSlice,
1095         int      attrib,
1096         int      size,
1097         void*    returnAttribList,
1098     );
1099 
1100     // Command pointers for GLX_SGIX_pbuffer
1101     alias PFN_glXCreateGLXPbufferSGIX = GLXPbufferSGIX function (
1102         Display*        dpy,
1103         GLXFBConfigSGIX config,
1104         uint            width,
1105         uint            height,
1106         int*            attrib_list,
1107     );
1108     alias PFN_glXDestroyGLXPbufferSGIX = void function (
1109         Display*       dpy,
1110         GLXPbufferSGIX pbuf,
1111     );
1112     alias PFN_glXQueryGLXPbufferSGIX = int function (
1113         Display*       dpy,
1114         GLXPbufferSGIX pbuf,
1115         int            attribute,
1116         uint*          value,
1117     );
1118     alias PFN_glXSelectEventSGIX = void function (
1119         Display*    dpy,
1120         GLXDrawable drawable,
1121         c_ulong     mask,
1122     );
1123     alias PFN_glXGetSelectedEventSGIX = void function (
1124         Display*    dpy,
1125         GLXDrawable drawable,
1126         c_ulong*    mask,
1127     );
1128 
1129     // Command pointers for GLX_SGIX_swap_barrier
1130     alias PFN_glXBindSwapBarrierSGIX = void function (
1131         Display*    dpy,
1132         GLXDrawable drawable,
1133         int         barrier,
1134     );
1135     alias PFN_glXQueryMaxSwapBarriersSGIX = Bool function (
1136         Display* dpy,
1137         int      screen,
1138         int*     max,
1139     );
1140 
1141     // Command pointers for GLX_SGIX_swap_group
1142     alias PFN_glXJoinSwapGroupSGIX = void function (
1143         Display*    dpy,
1144         GLXDrawable drawable,
1145         GLXDrawable member,
1146     );
1147 
1148     // Command pointers for GLX_SGIX_video_resize
1149     alias PFN_glXBindChannelToWindowSGIX = int function (
1150         Display* display,
1151         int      screen,
1152         int      channel,
1153         Window   window,
1154     );
1155     alias PFN_glXChannelRectSGIX = int function (
1156         Display* display,
1157         int      screen,
1158         int      channel,
1159         int      x,
1160         int      y,
1161         int      w,
1162         int      h,
1163     );
1164     alias PFN_glXQueryChannelRectSGIX = int function (
1165         Display* display,
1166         int      screen,
1167         int      channel,
1168         int*     dx,
1169         int*     dy,
1170         int*     dw,
1171         int*     dh,
1172     );
1173     alias PFN_glXQueryChannelDeltasSGIX = int function (
1174         Display* display,
1175         int      screen,
1176         int      channel,
1177         int*     x,
1178         int*     y,
1179         int*     w,
1180         int*     h,
1181     );
1182     alias PFN_glXChannelRectSyncSGIX = int function (
1183         Display* display,
1184         int      screen,
1185         int      channel,
1186         GLenum   synctype,
1187     );
1188 
1189     // Command pointers for GLX_SGI_cushion
1190     alias PFN_glXCushionSGI = void function (
1191         Display* dpy,
1192         Window   window,
1193         float    cushion,
1194     );
1195 
1196     // Command pointers for GLX_SGI_make_current_read
1197     alias PFN_glXMakeCurrentReadSGI = Bool function (
1198         Display*    dpy,
1199         GLXDrawable draw,
1200         GLXDrawable read,
1201         GLXContext  ctx,
1202     );
1203     alias PFN_glXGetCurrentReadDrawableSGI = GLXDrawable function ();
1204 
1205     // Command pointers for GLX_SGI_swap_control
1206     alias PFN_glXSwapIntervalSGI = int function (
1207         int interval,
1208     );
1209 
1210     // Command pointers for GLX_SGI_video_sync
1211     alias PFN_glXGetVideoSyncSGI = int function (
1212         uint* count,
1213     );
1214     alias PFN_glXWaitVideoSyncSGI = int function (
1215         int   divisor,
1216         int   remainder,
1217         uint* count,
1218     );
1219 
1220     // Command pointers for GLX_SUN_get_transparent_index
1221     alias PFN_glXGetTransparentIndexSUN = Status function (
1222         Display* dpy,
1223         Window   overlay,
1224         Window   underlay,
1225         long*    pTransparentIndex,
1226     );
1227 }
1228 
1229 /// GlxVersion describes the version of GLX
1230 enum GlxVersion {
1231     glx10 = 10,
1232     glx11 = 11,
1233     glx12 = 12,
1234     glx13 = 13,
1235     glx14 = 14,
1236 }
1237 
1238 /// GLX loader base class
1239 final class Glx {
1240     this(SymbolLoader loader) {
1241 
1242         // GLX_VERSION_1_0
1243         _ChooseVisual = cast(PFN_glXChooseVisual)loadSymbol(loader, "glXChooseVisual", []);
1244         _CreateContext = cast(PFN_glXCreateContext)loadSymbol(loader, "glXCreateContext", []);
1245         _DestroyContext = cast(PFN_glXDestroyContext)loadSymbol(loader, "glXDestroyContext", []);
1246         _MakeCurrent = cast(PFN_glXMakeCurrent)loadSymbol(loader, "glXMakeCurrent", []);
1247         _CopyContext = cast(PFN_glXCopyContext)loadSymbol(loader, "glXCopyContext", []);
1248         _SwapBuffers = cast(PFN_glXSwapBuffers)loadSymbol(loader, "glXSwapBuffers", []);
1249         _CreateGLXPixmap = cast(PFN_glXCreateGLXPixmap)loadSymbol(loader, "glXCreateGLXPixmap", []);
1250         _DestroyGLXPixmap = cast(PFN_glXDestroyGLXPixmap)loadSymbol(loader, "glXDestroyGLXPixmap", []);
1251         _QueryExtension = cast(PFN_glXQueryExtension)loadSymbol(loader, "glXQueryExtension", []);
1252         _QueryVersion = cast(PFN_glXQueryVersion)loadSymbol(loader, "glXQueryVersion", []);
1253         _IsDirect = cast(PFN_glXIsDirect)loadSymbol(loader, "glXIsDirect", []);
1254         _GetConfig = cast(PFN_glXGetConfig)loadSymbol(loader, "glXGetConfig", []);
1255         _GetCurrentContext = cast(PFN_glXGetCurrentContext)loadSymbol(loader, "glXGetCurrentContext", []);
1256         _GetCurrentDrawable = cast(PFN_glXGetCurrentDrawable)loadSymbol(loader, "glXGetCurrentDrawable", []);
1257         _WaitGL = cast(PFN_glXWaitGL)loadSymbol(loader, "glXWaitGL", []);
1258         _WaitX = cast(PFN_glXWaitX)loadSymbol(loader, "glXWaitX", []);
1259         _UseXFont = cast(PFN_glXUseXFont)loadSymbol(loader, "glXUseXFont", []);
1260 
1261         // GLX_VERSION_1_1
1262         _QueryExtensionsString = cast(PFN_glXQueryExtensionsString)loadSymbol(loader, "glXQueryExtensionsString", []);
1263         _QueryServerString = cast(PFN_glXQueryServerString)loadSymbol(loader, "glXQueryServerString", []);
1264         _GetClientString = cast(PFN_glXGetClientString)loadSymbol(loader, "glXGetClientString", []);
1265 
1266         // GLX_VERSION_1_2
1267         _GetCurrentDisplay = cast(PFN_glXGetCurrentDisplay)loadSymbol(loader, "glXGetCurrentDisplay", []);
1268 
1269         // GLX_VERSION_1_3
1270         _GetFBConfigs = cast(PFN_glXGetFBConfigs)loadSymbol(loader, "glXGetFBConfigs", []);
1271         _ChooseFBConfig = cast(PFN_glXChooseFBConfig)loadSymbol(loader, "glXChooseFBConfig", []);
1272         _GetFBConfigAttrib = cast(PFN_glXGetFBConfigAttrib)loadSymbol(loader, "glXGetFBConfigAttrib", []);
1273         _GetVisualFromFBConfig = cast(PFN_glXGetVisualFromFBConfig)loadSymbol(loader, "glXGetVisualFromFBConfig", []);
1274         _CreateWindow = cast(PFN_glXCreateWindow)loadSymbol(loader, "glXCreateWindow", []);
1275         _DestroyWindow = cast(PFN_glXDestroyWindow)loadSymbol(loader, "glXDestroyWindow", []);
1276         _CreatePixmap = cast(PFN_glXCreatePixmap)loadSymbol(loader, "glXCreatePixmap", []);
1277         _DestroyPixmap = cast(PFN_glXDestroyPixmap)loadSymbol(loader, "glXDestroyPixmap", []);
1278         _CreatePbuffer = cast(PFN_glXCreatePbuffer)loadSymbol(loader, "glXCreatePbuffer", []);
1279         _DestroyPbuffer = cast(PFN_glXDestroyPbuffer)loadSymbol(loader, "glXDestroyPbuffer", []);
1280         _QueryDrawable = cast(PFN_glXQueryDrawable)loadSymbol(loader, "glXQueryDrawable", []);
1281         _CreateNewContext = cast(PFN_glXCreateNewContext)loadSymbol(loader, "glXCreateNewContext", []);
1282         _MakeContextCurrent = cast(PFN_glXMakeContextCurrent)loadSymbol(loader, "glXMakeContextCurrent", []);
1283         _GetCurrentReadDrawable = cast(PFN_glXGetCurrentReadDrawable)loadSymbol(loader, "glXGetCurrentReadDrawable", []);
1284         _QueryContext = cast(PFN_glXQueryContext)loadSymbol(loader, "glXQueryContext", []);
1285         _SelectEvent = cast(PFN_glXSelectEvent)loadSymbol(loader, "glXSelectEvent", []);
1286         _GetSelectedEvent = cast(PFN_glXGetSelectedEvent)loadSymbol(loader, "glXGetSelectedEvent", []);
1287 
1288         // GLX_VERSION_1_4
1289         _GetProcAddress = cast(PFN_glXGetProcAddress)loadSymbol(loader, "glXGetProcAddress", []);
1290 
1291         // GLX_ARB_create_context,
1292         _CreateContextAttribsARB = cast(PFN_glXCreateContextAttribsARB)loadSymbol(loader, "glXCreateContextAttribsARB", []);
1293 
1294         // GLX_ARB_get_proc_address,
1295         _GetProcAddressARB = cast(PFN_glXGetProcAddressARB)loadSymbol(loader, "glXGetProcAddressARB", []);
1296 
1297         // GLX_AMD_gpu_association,
1298         _GetGPUIDsAMD = cast(PFN_glXGetGPUIDsAMD)loadSymbol(loader, "glXGetGPUIDsAMD", []);
1299         _GetGPUInfoAMD = cast(PFN_glXGetGPUInfoAMD)loadSymbol(loader, "glXGetGPUInfoAMD", []);
1300         _GetContextGPUIDAMD = cast(PFN_glXGetContextGPUIDAMD)loadSymbol(loader, "glXGetContextGPUIDAMD", []);
1301         _CreateAssociatedContextAMD = cast(PFN_glXCreateAssociatedContextAMD)loadSymbol(loader, "glXCreateAssociatedContextAMD", []);
1302         _CreateAssociatedContextAttribsAMD = cast(PFN_glXCreateAssociatedContextAttribsAMD)loadSymbol(loader, "glXCreateAssociatedContextAttribsAMD", []);
1303         _DeleteAssociatedContextAMD = cast(PFN_glXDeleteAssociatedContextAMD)loadSymbol(loader, "glXDeleteAssociatedContextAMD", []);
1304         _MakeAssociatedContextCurrentAMD = cast(PFN_glXMakeAssociatedContextCurrentAMD)loadSymbol(loader, "glXMakeAssociatedContextCurrentAMD", []);
1305         _GetCurrentAssociatedContextAMD = cast(PFN_glXGetCurrentAssociatedContextAMD)loadSymbol(loader, "glXGetCurrentAssociatedContextAMD", []);
1306         _BlitContextFramebufferAMD = cast(PFN_glXBlitContextFramebufferAMD)loadSymbol(loader, "glXBlitContextFramebufferAMD", []);
1307 
1308         // GLX_EXT_import_context,
1309         _GetCurrentDisplayEXT = cast(PFN_glXGetCurrentDisplayEXT)loadSymbol(loader, "glXGetCurrentDisplayEXT", []);
1310         _QueryContextInfoEXT = cast(PFN_glXQueryContextInfoEXT)loadSymbol(loader, "glXQueryContextInfoEXT", []);
1311         _GetContextIDEXT = cast(PFN_glXGetContextIDEXT)loadSymbol(loader, "glXGetContextIDEXT", []);
1312         _ImportContextEXT = cast(PFN_glXImportContextEXT)loadSymbol(loader, "glXImportContextEXT", []);
1313         _FreeContextEXT = cast(PFN_glXFreeContextEXT)loadSymbol(loader, "glXFreeContextEXT", []);
1314 
1315         // GLX_EXT_swap_control,
1316         _SwapIntervalEXT = cast(PFN_glXSwapIntervalEXT)loadSymbol(loader, "glXSwapIntervalEXT", []);
1317 
1318         // GLX_EXT_texture_from_pixmap,
1319         _BindTexImageEXT = cast(PFN_glXBindTexImageEXT)loadSymbol(loader, "glXBindTexImageEXT", []);
1320         _ReleaseTexImageEXT = cast(PFN_glXReleaseTexImageEXT)loadSymbol(loader, "glXReleaseTexImageEXT", []);
1321 
1322         // GLX_MESA_agp_offset,
1323         _GetAGPOffsetMESA = cast(PFN_glXGetAGPOffsetMESA)loadSymbol(loader, "glXGetAGPOffsetMESA", []);
1324 
1325         // GLX_MESA_copy_sub_buffer,
1326         _CopySubBufferMESA = cast(PFN_glXCopySubBufferMESA)loadSymbol(loader, "glXCopySubBufferMESA", []);
1327 
1328         // GLX_MESA_pixmap_colormap,
1329         _CreateGLXPixmapMESA = cast(PFN_glXCreateGLXPixmapMESA)loadSymbol(loader, "glXCreateGLXPixmapMESA", []);
1330 
1331         // GLX_MESA_query_renderer,
1332         _QueryCurrentRendererIntegerMESA = cast(PFN_glXQueryCurrentRendererIntegerMESA)loadSymbol(loader, "glXQueryCurrentRendererIntegerMESA", []);
1333         _QueryCurrentRendererStringMESA = cast(PFN_glXQueryCurrentRendererStringMESA)loadSymbol(loader, "glXQueryCurrentRendererStringMESA", []);
1334         _QueryRendererIntegerMESA = cast(PFN_glXQueryRendererIntegerMESA)loadSymbol(loader, "glXQueryRendererIntegerMESA", []);
1335         _QueryRendererStringMESA = cast(PFN_glXQueryRendererStringMESA)loadSymbol(loader, "glXQueryRendererStringMESA", []);
1336 
1337         // GLX_MESA_release_buffers,
1338         _ReleaseBuffersMESA = cast(PFN_glXReleaseBuffersMESA)loadSymbol(loader, "glXReleaseBuffersMESA", []);
1339 
1340         // GLX_MESA_set_3dfx_mode,
1341         _Set3DfxModeMESA = cast(PFN_glXSet3DfxModeMESA)loadSymbol(loader, "glXSet3DfxModeMESA", []);
1342 
1343         // GLX_MESA_swap_control,
1344         _GetSwapIntervalMESA = cast(PFN_glXGetSwapIntervalMESA)loadSymbol(loader, "glXGetSwapIntervalMESA", []);
1345         _SwapIntervalMESA = cast(PFN_glXSwapIntervalMESA)loadSymbol(loader, "glXSwapIntervalMESA", []);
1346 
1347         // GLX_NV_copy_buffer,
1348         _CopyBufferSubDataNV = cast(PFN_glXCopyBufferSubDataNV)loadSymbol(loader, "glXCopyBufferSubDataNV", []);
1349         _NamedCopyBufferSubDataNV = cast(PFN_glXNamedCopyBufferSubDataNV)loadSymbol(loader, "glXNamedCopyBufferSubDataNV", []);
1350 
1351         // GLX_NV_copy_image,
1352         _CopyImageSubDataNV = cast(PFN_glXCopyImageSubDataNV)loadSymbol(loader, "glXCopyImageSubDataNV", []);
1353 
1354         // GLX_NV_delay_before_swap,
1355         _DelayBeforeSwapNV = cast(PFN_glXDelayBeforeSwapNV)loadSymbol(loader, "glXDelayBeforeSwapNV", []);
1356 
1357         // GLX_NV_present_video,
1358         _EnumerateVideoDevicesNV = cast(PFN_glXEnumerateVideoDevicesNV)loadSymbol(loader, "glXEnumerateVideoDevicesNV", []);
1359         _BindVideoDeviceNV = cast(PFN_glXBindVideoDeviceNV)loadSymbol(loader, "glXBindVideoDeviceNV", []);
1360 
1361         // GLX_NV_swap_group,
1362         _JoinSwapGroupNV = cast(PFN_glXJoinSwapGroupNV)loadSymbol(loader, "glXJoinSwapGroupNV", []);
1363         _BindSwapBarrierNV = cast(PFN_glXBindSwapBarrierNV)loadSymbol(loader, "glXBindSwapBarrierNV", []);
1364         _QuerySwapGroupNV = cast(PFN_glXQuerySwapGroupNV)loadSymbol(loader, "glXQuerySwapGroupNV", []);
1365         _QueryMaxSwapGroupsNV = cast(PFN_glXQueryMaxSwapGroupsNV)loadSymbol(loader, "glXQueryMaxSwapGroupsNV", []);
1366         _QueryFrameCountNV = cast(PFN_glXQueryFrameCountNV)loadSymbol(loader, "glXQueryFrameCountNV", []);
1367         _ResetFrameCountNV = cast(PFN_glXResetFrameCountNV)loadSymbol(loader, "glXResetFrameCountNV", []);
1368 
1369         // GLX_NV_video_capture,
1370         _BindVideoCaptureDeviceNV = cast(PFN_glXBindVideoCaptureDeviceNV)loadSymbol(loader, "glXBindVideoCaptureDeviceNV", []);
1371         _EnumerateVideoCaptureDevicesNV = cast(PFN_glXEnumerateVideoCaptureDevicesNV)loadSymbol(loader, "glXEnumerateVideoCaptureDevicesNV", []);
1372         _LockVideoCaptureDeviceNV = cast(PFN_glXLockVideoCaptureDeviceNV)loadSymbol(loader, "glXLockVideoCaptureDeviceNV", []);
1373         _QueryVideoCaptureDeviceNV = cast(PFN_glXQueryVideoCaptureDeviceNV)loadSymbol(loader, "glXQueryVideoCaptureDeviceNV", []);
1374         _ReleaseVideoCaptureDeviceNV = cast(PFN_glXReleaseVideoCaptureDeviceNV)loadSymbol(loader, "glXReleaseVideoCaptureDeviceNV", []);
1375 
1376         // GLX_NV_video_out,
1377         _GetVideoDeviceNV = cast(PFN_glXGetVideoDeviceNV)loadSymbol(loader, "glXGetVideoDeviceNV", []);
1378         _ReleaseVideoDeviceNV = cast(PFN_glXReleaseVideoDeviceNV)loadSymbol(loader, "glXReleaseVideoDeviceNV", []);
1379         _BindVideoImageNV = cast(PFN_glXBindVideoImageNV)loadSymbol(loader, "glXBindVideoImageNV", []);
1380         _ReleaseVideoImageNV = cast(PFN_glXReleaseVideoImageNV)loadSymbol(loader, "glXReleaseVideoImageNV", []);
1381         _SendPbufferToVideoNV = cast(PFN_glXSendPbufferToVideoNV)loadSymbol(loader, "glXSendPbufferToVideoNV", []);
1382         _GetVideoInfoNV = cast(PFN_glXGetVideoInfoNV)loadSymbol(loader, "glXGetVideoInfoNV", []);
1383 
1384         // GLX_OML_sync_control,
1385         _GetSyncValuesOML = cast(PFN_glXGetSyncValuesOML)loadSymbol(loader, "glXGetSyncValuesOML", []);
1386         _GetMscRateOML = cast(PFN_glXGetMscRateOML)loadSymbol(loader, "glXGetMscRateOML", []);
1387         _SwapBuffersMscOML = cast(PFN_glXSwapBuffersMscOML)loadSymbol(loader, "glXSwapBuffersMscOML", []);
1388         _WaitForMscOML = cast(PFN_glXWaitForMscOML)loadSymbol(loader, "glXWaitForMscOML", []);
1389         _WaitForSbcOML = cast(PFN_glXWaitForSbcOML)loadSymbol(loader, "glXWaitForSbcOML", []);
1390 
1391         // GLX_SGIX_fbconfig,
1392         _GetFBConfigAttribSGIX = cast(PFN_glXGetFBConfigAttribSGIX)loadSymbol(loader, "glXGetFBConfigAttribSGIX", []);
1393         _ChooseFBConfigSGIX = cast(PFN_glXChooseFBConfigSGIX)loadSymbol(loader, "glXChooseFBConfigSGIX", []);
1394         _CreateGLXPixmapWithConfigSGIX = cast(PFN_glXCreateGLXPixmapWithConfigSGIX)loadSymbol(loader, "glXCreateGLXPixmapWithConfigSGIX", []);
1395         _CreateContextWithConfigSGIX = cast(PFN_glXCreateContextWithConfigSGIX)loadSymbol(loader, "glXCreateContextWithConfigSGIX", []);
1396         _GetVisualFromFBConfigSGIX = cast(PFN_glXGetVisualFromFBConfigSGIX)loadSymbol(loader, "glXGetVisualFromFBConfigSGIX", []);
1397         _GetFBConfigFromVisualSGIX = cast(PFN_glXGetFBConfigFromVisualSGIX)loadSymbol(loader, "glXGetFBConfigFromVisualSGIX", []);
1398 
1399         // GLX_SGIX_hyperpipe,
1400         _QueryHyperpipeNetworkSGIX = cast(PFN_glXQueryHyperpipeNetworkSGIX)loadSymbol(loader, "glXQueryHyperpipeNetworkSGIX", []);
1401         _HyperpipeConfigSGIX = cast(PFN_glXHyperpipeConfigSGIX)loadSymbol(loader, "glXHyperpipeConfigSGIX", []);
1402         _QueryHyperpipeConfigSGIX = cast(PFN_glXQueryHyperpipeConfigSGIX)loadSymbol(loader, "glXQueryHyperpipeConfigSGIX", []);
1403         _DestroyHyperpipeConfigSGIX = cast(PFN_glXDestroyHyperpipeConfigSGIX)loadSymbol(loader, "glXDestroyHyperpipeConfigSGIX", []);
1404         _BindHyperpipeSGIX = cast(PFN_glXBindHyperpipeSGIX)loadSymbol(loader, "glXBindHyperpipeSGIX", []);
1405         _QueryHyperpipeBestAttribSGIX = cast(PFN_glXQueryHyperpipeBestAttribSGIX)loadSymbol(loader, "glXQueryHyperpipeBestAttribSGIX", []);
1406         _HyperpipeAttribSGIX = cast(PFN_glXHyperpipeAttribSGIX)loadSymbol(loader, "glXHyperpipeAttribSGIX", []);
1407         _QueryHyperpipeAttribSGIX = cast(PFN_glXQueryHyperpipeAttribSGIX)loadSymbol(loader, "glXQueryHyperpipeAttribSGIX", []);
1408 
1409         // GLX_SGIX_pbuffer,
1410         _CreateGLXPbufferSGIX = cast(PFN_glXCreateGLXPbufferSGIX)loadSymbol(loader, "glXCreateGLXPbufferSGIX", []);
1411         _DestroyGLXPbufferSGIX = cast(PFN_glXDestroyGLXPbufferSGIX)loadSymbol(loader, "glXDestroyGLXPbufferSGIX", []);
1412         _QueryGLXPbufferSGIX = cast(PFN_glXQueryGLXPbufferSGIX)loadSymbol(loader, "glXQueryGLXPbufferSGIX", []);
1413         _SelectEventSGIX = cast(PFN_glXSelectEventSGIX)loadSymbol(loader, "glXSelectEventSGIX", []);
1414         _GetSelectedEventSGIX = cast(PFN_glXGetSelectedEventSGIX)loadSymbol(loader, "glXGetSelectedEventSGIX", []);
1415 
1416         // GLX_SGIX_swap_barrier,
1417         _BindSwapBarrierSGIX = cast(PFN_glXBindSwapBarrierSGIX)loadSymbol(loader, "glXBindSwapBarrierSGIX", []);
1418         _QueryMaxSwapBarriersSGIX = cast(PFN_glXQueryMaxSwapBarriersSGIX)loadSymbol(loader, "glXQueryMaxSwapBarriersSGIX", []);
1419 
1420         // GLX_SGIX_swap_group,
1421         _JoinSwapGroupSGIX = cast(PFN_glXJoinSwapGroupSGIX)loadSymbol(loader, "glXJoinSwapGroupSGIX", []);
1422 
1423         // GLX_SGIX_video_resize,
1424         _BindChannelToWindowSGIX = cast(PFN_glXBindChannelToWindowSGIX)loadSymbol(loader, "glXBindChannelToWindowSGIX", []);
1425         _ChannelRectSGIX = cast(PFN_glXChannelRectSGIX)loadSymbol(loader, "glXChannelRectSGIX", []);
1426         _QueryChannelRectSGIX = cast(PFN_glXQueryChannelRectSGIX)loadSymbol(loader, "glXQueryChannelRectSGIX", []);
1427         _QueryChannelDeltasSGIX = cast(PFN_glXQueryChannelDeltasSGIX)loadSymbol(loader, "glXQueryChannelDeltasSGIX", []);
1428         _ChannelRectSyncSGIX = cast(PFN_glXChannelRectSyncSGIX)loadSymbol(loader, "glXChannelRectSyncSGIX", []);
1429 
1430         // GLX_SGI_cushion,
1431         _CushionSGI = cast(PFN_glXCushionSGI)loadSymbol(loader, "glXCushionSGI", []);
1432 
1433         // GLX_SGI_make_current_read,
1434         _MakeCurrentReadSGI = cast(PFN_glXMakeCurrentReadSGI)loadSymbol(loader, "glXMakeCurrentReadSGI", []);
1435         _GetCurrentReadDrawableSGI = cast(PFN_glXGetCurrentReadDrawableSGI)loadSymbol(loader, "glXGetCurrentReadDrawableSGI", []);
1436 
1437         // GLX_SGI_swap_control,
1438         _SwapIntervalSGI = cast(PFN_glXSwapIntervalSGI)loadSymbol(loader, "glXSwapIntervalSGI", []);
1439 
1440         // GLX_SGI_video_sync,
1441         _GetVideoSyncSGI = cast(PFN_glXGetVideoSyncSGI)loadSymbol(loader, "glXGetVideoSyncSGI", []);
1442         _WaitVideoSyncSGI = cast(PFN_glXWaitVideoSyncSGI)loadSymbol(loader, "glXWaitVideoSyncSGI", []);
1443 
1444         // GLX_SUN_get_transparent_index,
1445         _GetTransparentIndexSUN = cast(PFN_glXGetTransparentIndexSUN)loadSymbol(loader, "glXGetTransparentIndexSUN", []);
1446     }
1447 
1448     private static void* loadSymbol(SymbolLoader loader, in string name, in string[] aliases) {
1449         void* sym = loader(name);
1450         if (sym) return sym;
1451         foreach (n; aliases) {
1452             sym = loader(n);
1453             if (sym) return sym;
1454         }
1455         return null;
1456     }
1457 
1458     /// Commands for GLX_VERSION_1_0
1459     public XVisualInfo * ChooseVisual (Display* dpy, int screen, int* attribList) const {
1460         assert(_ChooseVisual !is null, "GLX command glXChooseVisual was not loaded");
1461         return _ChooseVisual (dpy, screen, attribList);
1462     }
1463     /// ditto
1464     public GLXContext CreateContext (Display* dpy, XVisualInfo* vis, GLXContext shareList, Bool direct) const {
1465         assert(_CreateContext !is null, "GLX command glXCreateContext was not loaded");
1466         return _CreateContext (dpy, vis, shareList, direct);
1467     }
1468     /// ditto
1469     public void DestroyContext (Display* dpy, GLXContext ctx) const {
1470         assert(_DestroyContext !is null, "GLX command glXDestroyContext was not loaded");
1471         return _DestroyContext (dpy, ctx);
1472     }
1473     /// ditto
1474     public Bool MakeCurrent (Display* dpy, GLXDrawable drawable, GLXContext ctx) const {
1475         assert(_MakeCurrent !is null, "GLX command glXMakeCurrent was not loaded");
1476         return _MakeCurrent (dpy, drawable, ctx);
1477     }
1478     /// ditto
1479     public void CopyContext (Display* dpy, GLXContext src, GLXContext dst, c_ulong mask) const {
1480         assert(_CopyContext !is null, "GLX command glXCopyContext was not loaded");
1481         return _CopyContext (dpy, src, dst, mask);
1482     }
1483     /// ditto
1484     public void SwapBuffers (Display* dpy, GLXDrawable drawable) const {
1485         assert(_SwapBuffers !is null, "GLX command glXSwapBuffers was not loaded");
1486         return _SwapBuffers (dpy, drawable);
1487     }
1488     /// ditto
1489     public GLXPixmap CreateGLXPixmap (Display* dpy, XVisualInfo* visual, Pixmap pixmap) const {
1490         assert(_CreateGLXPixmap !is null, "GLX command glXCreateGLXPixmap was not loaded");
1491         return _CreateGLXPixmap (dpy, visual, pixmap);
1492     }
1493     /// ditto
1494     public void DestroyGLXPixmap (Display* dpy, GLXPixmap pixmap) const {
1495         assert(_DestroyGLXPixmap !is null, "GLX command glXDestroyGLXPixmap was not loaded");
1496         return _DestroyGLXPixmap (dpy, pixmap);
1497     }
1498     /// ditto
1499     public Bool QueryExtension (Display* dpy, int* errorb, int* event) const {
1500         assert(_QueryExtension !is null, "GLX command glXQueryExtension was not loaded");
1501         return _QueryExtension (dpy, errorb, event);
1502     }
1503     /// ditto
1504     public Bool QueryVersion (Display* dpy, int* maj, int* min) const {
1505         assert(_QueryVersion !is null, "GLX command glXQueryVersion was not loaded");
1506         return _QueryVersion (dpy, maj, min);
1507     }
1508     /// ditto
1509     public Bool IsDirect (Display* dpy, GLXContext ctx) const {
1510         assert(_IsDirect !is null, "GLX command glXIsDirect was not loaded");
1511         return _IsDirect (dpy, ctx);
1512     }
1513     /// ditto
1514     public int GetConfig (Display* dpy, XVisualInfo* visual, int attrib, int* value) const {
1515         assert(_GetConfig !is null, "GLX command glXGetConfig was not loaded");
1516         return _GetConfig (dpy, visual, attrib, value);
1517     }
1518     /// ditto
1519     public GLXContext GetCurrentContext () const {
1520         assert(_GetCurrentContext !is null, "GLX command glXGetCurrentContext was not loaded");
1521         return _GetCurrentContext ();
1522     }
1523     /// ditto
1524     public GLXDrawable GetCurrentDrawable () const {
1525         assert(_GetCurrentDrawable !is null, "GLX command glXGetCurrentDrawable was not loaded");
1526         return _GetCurrentDrawable ();
1527     }
1528     /// ditto
1529     public void WaitGL () const {
1530         assert(_WaitGL !is null, "GLX command glXWaitGL was not loaded");
1531         return _WaitGL ();
1532     }
1533     /// ditto
1534     public void WaitX () const {
1535         assert(_WaitX !is null, "GLX command glXWaitX was not loaded");
1536         return _WaitX ();
1537     }
1538     /// ditto
1539     public void UseXFont (Font font, int first, int count, int list) const {
1540         assert(_UseXFont !is null, "GLX command glXUseXFont was not loaded");
1541         return _UseXFont (font, first, count, list);
1542     }
1543 
1544     /// Commands for GLX_VERSION_1_1
1545     public const(char)* QueryExtensionsString (Display* dpy, int screen) const {
1546         assert(_QueryExtensionsString !is null, "GLX command glXQueryExtensionsString was not loaded");
1547         return _QueryExtensionsString (dpy, screen);
1548     }
1549     /// ditto
1550     public const(char)* QueryServerString (Display* dpy, int screen, int name) const {
1551         assert(_QueryServerString !is null, "GLX command glXQueryServerString was not loaded");
1552         return _QueryServerString (dpy, screen, name);
1553     }
1554     /// ditto
1555     public const(char)* GetClientString (Display* dpy, int name) const {
1556         assert(_GetClientString !is null, "GLX command glXGetClientString was not loaded");
1557         return _GetClientString (dpy, name);
1558     }
1559 
1560     /// Commands for GLX_VERSION_1_2
1561     public Display * GetCurrentDisplay () const {
1562         assert(_GetCurrentDisplay !is null, "GLX command glXGetCurrentDisplay was not loaded");
1563         return _GetCurrentDisplay ();
1564     }
1565 
1566     /// Commands for GLX_VERSION_1_3
1567     public GLXFBConfig * GetFBConfigs (Display* dpy, int screen, int* nelements) const {
1568         assert(_GetFBConfigs !is null, "GLX command glXGetFBConfigs was not loaded");
1569         return _GetFBConfigs (dpy, screen, nelements);
1570     }
1571     /// ditto
1572     public GLXFBConfig * ChooseFBConfig (Display* dpy, int screen, const(int)* attrib_list, int* nelements) const {
1573         assert(_ChooseFBConfig !is null, "GLX command glXChooseFBConfig was not loaded");
1574         return _ChooseFBConfig (dpy, screen, attrib_list, nelements);
1575     }
1576     /// ditto
1577     public int GetFBConfigAttrib (Display* dpy, GLXFBConfig config, int attribute, int* value) const {
1578         assert(_GetFBConfigAttrib !is null, "GLX command glXGetFBConfigAttrib was not loaded");
1579         return _GetFBConfigAttrib (dpy, config, attribute, value);
1580     }
1581     /// ditto
1582     public XVisualInfo * GetVisualFromFBConfig (Display* dpy, GLXFBConfig config) const {
1583         assert(_GetVisualFromFBConfig !is null, "GLX command glXGetVisualFromFBConfig was not loaded");
1584         return _GetVisualFromFBConfig (dpy, config);
1585     }
1586     /// ditto
1587     public GLXWindow CreateWindow (Display* dpy, GLXFBConfig config, Window win, const(int)* attrib_list) const {
1588         assert(_CreateWindow !is null, "GLX command glXCreateWindow was not loaded");
1589         return _CreateWindow (dpy, config, win, attrib_list);
1590     }
1591     /// ditto
1592     public void DestroyWindow (Display* dpy, GLXWindow win) const {
1593         assert(_DestroyWindow !is null, "GLX command glXDestroyWindow was not loaded");
1594         return _DestroyWindow (dpy, win);
1595     }
1596     /// ditto
1597     public GLXPixmap CreatePixmap (Display* dpy, GLXFBConfig config, Pixmap pixmap, const(int)* attrib_list) const {
1598         assert(_CreatePixmap !is null, "GLX command glXCreatePixmap was not loaded");
1599         return _CreatePixmap (dpy, config, pixmap, attrib_list);
1600     }
1601     /// ditto
1602     public void DestroyPixmap (Display* dpy, GLXPixmap pixmap) const {
1603         assert(_DestroyPixmap !is null, "GLX command glXDestroyPixmap was not loaded");
1604         return _DestroyPixmap (dpy, pixmap);
1605     }
1606     /// ditto
1607     public GLXPbuffer CreatePbuffer (Display* dpy, GLXFBConfig config, const(int)* attrib_list) const {
1608         assert(_CreatePbuffer !is null, "GLX command glXCreatePbuffer was not loaded");
1609         return _CreatePbuffer (dpy, config, attrib_list);
1610     }
1611     /// ditto
1612     public void DestroyPbuffer (Display* dpy, GLXPbuffer pbuf) const {
1613         assert(_DestroyPbuffer !is null, "GLX command glXDestroyPbuffer was not loaded");
1614         return _DestroyPbuffer (dpy, pbuf);
1615     }
1616     /// ditto
1617     public void QueryDrawable (Display* dpy, GLXDrawable draw, int attribute, uint* value) const {
1618         assert(_QueryDrawable !is null, "GLX command glXQueryDrawable was not loaded");
1619         return _QueryDrawable (dpy, draw, attribute, value);
1620     }
1621     /// ditto
1622     public GLXContext CreateNewContext (Display* dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct) const {
1623         assert(_CreateNewContext !is null, "GLX command glXCreateNewContext was not loaded");
1624         return _CreateNewContext (dpy, config, render_type, share_list, direct);
1625     }
1626     /// ditto
1627     public Bool MakeContextCurrent (Display* dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx) const {
1628         assert(_MakeContextCurrent !is null, "GLX command glXMakeContextCurrent was not loaded");
1629         return _MakeContextCurrent (dpy, draw, read, ctx);
1630     }
1631     /// ditto
1632     public GLXDrawable GetCurrentReadDrawable () const {
1633         assert(_GetCurrentReadDrawable !is null, "GLX command glXGetCurrentReadDrawable was not loaded");
1634         return _GetCurrentReadDrawable ();
1635     }
1636     /// ditto
1637     public int QueryContext (Display* dpy, GLXContext ctx, int attribute, int* value) const {
1638         assert(_QueryContext !is null, "GLX command glXQueryContext was not loaded");
1639         return _QueryContext (dpy, ctx, attribute, value);
1640     }
1641     /// ditto
1642     public void SelectEvent (Display* dpy, GLXDrawable draw, c_ulong event_mask) const {
1643         assert(_SelectEvent !is null, "GLX command glXSelectEvent was not loaded");
1644         return _SelectEvent (dpy, draw, event_mask);
1645     }
1646     /// ditto
1647     public void GetSelectedEvent (Display* dpy, GLXDrawable draw, c_ulong* event_mask) const {
1648         assert(_GetSelectedEvent !is null, "GLX command glXGetSelectedEvent was not loaded");
1649         return _GetSelectedEvent (dpy, draw, event_mask);
1650     }
1651 
1652     /// Commands for GLX_VERSION_1_4
1653     public __GLXextFuncPtr GetProcAddress (const(GLubyte)* procName) const {
1654         assert(_GetProcAddress !is null, "GLX command glXGetProcAddress was not loaded");
1655         return _GetProcAddress (procName);
1656     }
1657 
1658     /// Commands for GLX_ARB_create_context
1659     public GLXContext CreateContextAttribsARB (Display* dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const(int)* attrib_list) const {
1660         assert(_CreateContextAttribsARB !is null, "GLX command glXCreateContextAttribsARB was not loaded");
1661         return _CreateContextAttribsARB (dpy, config, share_context, direct, attrib_list);
1662     }
1663 
1664     /// Commands for GLX_ARB_get_proc_address
1665     public __GLXextFuncPtr GetProcAddressARB (const(GLubyte)* procName) const {
1666         assert(_GetProcAddressARB !is null, "GLX command glXGetProcAddressARB was not loaded");
1667         return _GetProcAddressARB (procName);
1668     }
1669 
1670     /// Commands for GLX_AMD_gpu_association
1671     public uint GetGPUIDsAMD (uint maxCount, uint* ids) const {
1672         assert(_GetGPUIDsAMD !is null, "GLX command glXGetGPUIDsAMD was not loaded");
1673         return _GetGPUIDsAMD (maxCount, ids);
1674     }
1675     /// ditto
1676     public int GetGPUInfoAMD (uint id, int property, GLenum dataType, uint size, void* data) const {
1677         assert(_GetGPUInfoAMD !is null, "GLX command glXGetGPUInfoAMD was not loaded");
1678         return _GetGPUInfoAMD (id, property, dataType, size, data);
1679     }
1680     /// ditto
1681     public uint GetContextGPUIDAMD (GLXContext ctx) const {
1682         assert(_GetContextGPUIDAMD !is null, "GLX command glXGetContextGPUIDAMD was not loaded");
1683         return _GetContextGPUIDAMD (ctx);
1684     }
1685     /// ditto
1686     public GLXContext CreateAssociatedContextAMD (uint id, GLXContext share_list) const {
1687         assert(_CreateAssociatedContextAMD !is null, "GLX command glXCreateAssociatedContextAMD was not loaded");
1688         return _CreateAssociatedContextAMD (id, share_list);
1689     }
1690     /// ditto
1691     public GLXContext CreateAssociatedContextAttribsAMD (uint id, GLXContext share_context, const(int)* attribList) const {
1692         assert(_CreateAssociatedContextAttribsAMD !is null, "GLX command glXCreateAssociatedContextAttribsAMD was not loaded");
1693         return _CreateAssociatedContextAttribsAMD (id, share_context, attribList);
1694     }
1695     /// ditto
1696     public Bool DeleteAssociatedContextAMD (GLXContext ctx) const {
1697         assert(_DeleteAssociatedContextAMD !is null, "GLX command glXDeleteAssociatedContextAMD was not loaded");
1698         return _DeleteAssociatedContextAMD (ctx);
1699     }
1700     /// ditto
1701     public Bool MakeAssociatedContextCurrentAMD (GLXContext ctx) const {
1702         assert(_MakeAssociatedContextCurrentAMD !is null, "GLX command glXMakeAssociatedContextCurrentAMD was not loaded");
1703         return _MakeAssociatedContextCurrentAMD (ctx);
1704     }
1705     /// ditto
1706     public GLXContext GetCurrentAssociatedContextAMD () const {
1707         assert(_GetCurrentAssociatedContextAMD !is null, "GLX command glXGetCurrentAssociatedContextAMD was not loaded");
1708         return _GetCurrentAssociatedContextAMD ();
1709     }
1710     /// ditto
1711     public void BlitContextFramebufferAMD (GLXContext dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) const {
1712         assert(_BlitContextFramebufferAMD !is null, "GLX command glXBlitContextFramebufferAMD was not loaded");
1713         return _BlitContextFramebufferAMD (dstCtx, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
1714     }
1715 
1716     /// Commands for GLX_EXT_import_context
1717     public Display * GetCurrentDisplayEXT () const {
1718         assert(_GetCurrentDisplayEXT !is null, "GLX command glXGetCurrentDisplayEXT was not loaded");
1719         return _GetCurrentDisplayEXT ();
1720     }
1721     /// ditto
1722     public int QueryContextInfoEXT (Display* dpy, GLXContext context, int attribute, int* value) const {
1723         assert(_QueryContextInfoEXT !is null, "GLX command glXQueryContextInfoEXT was not loaded");
1724         return _QueryContextInfoEXT (dpy, context, attribute, value);
1725     }
1726     /// ditto
1727     public GLXContextID GetContextIDEXT (const GLXContext context) const {
1728         assert(_GetContextIDEXT !is null, "GLX command glXGetContextIDEXT was not loaded");
1729         return _GetContextIDEXT (context);
1730     }
1731     /// ditto
1732     public GLXContext ImportContextEXT (Display* dpy, GLXContextID contextID) const {
1733         assert(_ImportContextEXT !is null, "GLX command glXImportContextEXT was not loaded");
1734         return _ImportContextEXT (dpy, contextID);
1735     }
1736     /// ditto
1737     public void FreeContextEXT (Display* dpy, GLXContext context) const {
1738         assert(_FreeContextEXT !is null, "GLX command glXFreeContextEXT was not loaded");
1739         return _FreeContextEXT (dpy, context);
1740     }
1741 
1742     /// Commands for GLX_EXT_swap_control
1743     public void SwapIntervalEXT (Display* dpy, GLXDrawable drawable, int interval) const {
1744         assert(_SwapIntervalEXT !is null, "GLX command glXSwapIntervalEXT was not loaded");
1745         return _SwapIntervalEXT (dpy, drawable, interval);
1746     }
1747 
1748     /// Commands for GLX_EXT_texture_from_pixmap
1749     public void BindTexImageEXT (Display* dpy, GLXDrawable drawable, int buffer, const(int)* attrib_list) const {
1750         assert(_BindTexImageEXT !is null, "GLX command glXBindTexImageEXT was not loaded");
1751         return _BindTexImageEXT (dpy, drawable, buffer, attrib_list);
1752     }
1753     /// ditto
1754     public void ReleaseTexImageEXT (Display* dpy, GLXDrawable drawable, int buffer) const {
1755         assert(_ReleaseTexImageEXT !is null, "GLX command glXReleaseTexImageEXT was not loaded");
1756         return _ReleaseTexImageEXT (dpy, drawable, buffer);
1757     }
1758 
1759     /// Commands for GLX_MESA_agp_offset
1760     public uint GetAGPOffsetMESA (const(void)* pointer) const {
1761         assert(_GetAGPOffsetMESA !is null, "GLX command glXGetAGPOffsetMESA was not loaded");
1762         return _GetAGPOffsetMESA (pointer);
1763     }
1764 
1765     /// Commands for GLX_MESA_copy_sub_buffer
1766     public void CopySubBufferMESA (Display* dpy, GLXDrawable drawable, int x, int y, int width, int height) const {
1767         assert(_CopySubBufferMESA !is null, "GLX command glXCopySubBufferMESA was not loaded");
1768         return _CopySubBufferMESA (dpy, drawable, x, y, width, height);
1769     }
1770 
1771     /// Commands for GLX_MESA_pixmap_colormap
1772     public GLXPixmap CreateGLXPixmapMESA (Display* dpy, XVisualInfo* visual, Pixmap pixmap, Colormap cmap) const {
1773         assert(_CreateGLXPixmapMESA !is null, "GLX command glXCreateGLXPixmapMESA was not loaded");
1774         return _CreateGLXPixmapMESA (dpy, visual, pixmap, cmap);
1775     }
1776 
1777     /// Commands for GLX_MESA_query_renderer
1778     public Bool QueryCurrentRendererIntegerMESA (int attribute, uint* value) const {
1779         assert(_QueryCurrentRendererIntegerMESA !is null, "GLX command glXQueryCurrentRendererIntegerMESA was not loaded");
1780         return _QueryCurrentRendererIntegerMESA (attribute, value);
1781     }
1782     /// ditto
1783     public const(char)* QueryCurrentRendererStringMESA (int attribute) const {
1784         assert(_QueryCurrentRendererStringMESA !is null, "GLX command glXQueryCurrentRendererStringMESA was not loaded");
1785         return _QueryCurrentRendererStringMESA (attribute);
1786     }
1787     /// ditto
1788     public Bool QueryRendererIntegerMESA (Display* dpy, int screen, int renderer, int attribute, uint* value) const {
1789         assert(_QueryRendererIntegerMESA !is null, "GLX command glXQueryRendererIntegerMESA was not loaded");
1790         return _QueryRendererIntegerMESA (dpy, screen, renderer, attribute, value);
1791     }
1792     /// ditto
1793     public const(char)* QueryRendererStringMESA (Display* dpy, int screen, int renderer, int attribute) const {
1794         assert(_QueryRendererStringMESA !is null, "GLX command glXQueryRendererStringMESA was not loaded");
1795         return _QueryRendererStringMESA (dpy, screen, renderer, attribute);
1796     }
1797 
1798     /// Commands for GLX_MESA_release_buffers
1799     public Bool ReleaseBuffersMESA (Display* dpy, GLXDrawable drawable) const {
1800         assert(_ReleaseBuffersMESA !is null, "GLX command glXReleaseBuffersMESA was not loaded");
1801         return _ReleaseBuffersMESA (dpy, drawable);
1802     }
1803 
1804     /// Commands for GLX_MESA_set_3dfx_mode
1805     public Bool Set3DfxModeMESA (int mode) const {
1806         assert(_Set3DfxModeMESA !is null, "GLX command glXSet3DfxModeMESA was not loaded");
1807         return _Set3DfxModeMESA (mode);
1808     }
1809 
1810     /// Commands for GLX_MESA_swap_control
1811     public int GetSwapIntervalMESA () const {
1812         assert(_GetSwapIntervalMESA !is null, "GLX command glXGetSwapIntervalMESA was not loaded");
1813         return _GetSwapIntervalMESA ();
1814     }
1815     /// ditto
1816     public int SwapIntervalMESA (uint interval) const {
1817         assert(_SwapIntervalMESA !is null, "GLX command glXSwapIntervalMESA was not loaded");
1818         return _SwapIntervalMESA (interval);
1819     }
1820 
1821     /// Commands for GLX_NV_copy_buffer
1822     public void CopyBufferSubDataNV (Display* dpy, GLXContext readCtx, GLXContext writeCtx, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) const {
1823         assert(_CopyBufferSubDataNV !is null, "GLX command glXCopyBufferSubDataNV was not loaded");
1824         return _CopyBufferSubDataNV (dpy, readCtx, writeCtx, readTarget, writeTarget, readOffset, writeOffset, size);
1825     }
1826     /// ditto
1827     public void NamedCopyBufferSubDataNV (Display* dpy, GLXContext readCtx, GLXContext writeCtx, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) const {
1828         assert(_NamedCopyBufferSubDataNV !is null, "GLX command glXNamedCopyBufferSubDataNV was not loaded");
1829         return _NamedCopyBufferSubDataNV (dpy, readCtx, writeCtx, readBuffer, writeBuffer, readOffset, writeOffset, size);
1830     }
1831 
1832     /// Commands for GLX_NV_copy_image
1833     public void CopyImageSubDataNV (Display* dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth) const {
1834         assert(_CopyImageSubDataNV !is null, "GLX command glXCopyImageSubDataNV was not loaded");
1835         return _CopyImageSubDataNV (dpy, srcCtx, srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstCtx, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, width, height, depth);
1836     }
1837 
1838     /// Commands for GLX_NV_delay_before_swap
1839     public Bool DelayBeforeSwapNV (Display* dpy, GLXDrawable drawable, GLfloat seconds) const {
1840         assert(_DelayBeforeSwapNV !is null, "GLX command glXDelayBeforeSwapNV was not loaded");
1841         return _DelayBeforeSwapNV (dpy, drawable, seconds);
1842     }
1843 
1844     /// Commands for GLX_NV_present_video
1845     public uint * EnumerateVideoDevicesNV (Display* dpy, int screen, int* nelements) const {
1846         assert(_EnumerateVideoDevicesNV !is null, "GLX command glXEnumerateVideoDevicesNV was not loaded");
1847         return _EnumerateVideoDevicesNV (dpy, screen, nelements);
1848     }
1849     /// ditto
1850     public int BindVideoDeviceNV (Display* dpy, uint video_slot, uint video_device, const(int)* attrib_list) const {
1851         assert(_BindVideoDeviceNV !is null, "GLX command glXBindVideoDeviceNV was not loaded");
1852         return _BindVideoDeviceNV (dpy, video_slot, video_device, attrib_list);
1853     }
1854 
1855     /// Commands for GLX_NV_swap_group
1856     public Bool JoinSwapGroupNV (Display* dpy, GLXDrawable drawable, GLuint group) const {
1857         assert(_JoinSwapGroupNV !is null, "GLX command glXJoinSwapGroupNV was not loaded");
1858         return _JoinSwapGroupNV (dpy, drawable, group);
1859     }
1860     /// ditto
1861     public Bool BindSwapBarrierNV (Display* dpy, GLuint group, GLuint barrier) const {
1862         assert(_BindSwapBarrierNV !is null, "GLX command glXBindSwapBarrierNV was not loaded");
1863         return _BindSwapBarrierNV (dpy, group, barrier);
1864     }
1865     /// ditto
1866     public Bool QuerySwapGroupNV (Display* dpy, GLXDrawable drawable, GLuint* group, GLuint* barrier) const {
1867         assert(_QuerySwapGroupNV !is null, "GLX command glXQuerySwapGroupNV was not loaded");
1868         return _QuerySwapGroupNV (dpy, drawable, group, barrier);
1869     }
1870     /// ditto
1871     public Bool QueryMaxSwapGroupsNV (Display* dpy, int screen, GLuint* maxGroups, GLuint* maxBarriers) const {
1872         assert(_QueryMaxSwapGroupsNV !is null, "GLX command glXQueryMaxSwapGroupsNV was not loaded");
1873         return _QueryMaxSwapGroupsNV (dpy, screen, maxGroups, maxBarriers);
1874     }
1875     /// ditto
1876     public Bool QueryFrameCountNV (Display* dpy, int screen, GLuint* count) const {
1877         assert(_QueryFrameCountNV !is null, "GLX command glXQueryFrameCountNV was not loaded");
1878         return _QueryFrameCountNV (dpy, screen, count);
1879     }
1880     /// ditto
1881     public Bool ResetFrameCountNV (Display* dpy, int screen) const {
1882         assert(_ResetFrameCountNV !is null, "GLX command glXResetFrameCountNV was not loaded");
1883         return _ResetFrameCountNV (dpy, screen);
1884     }
1885 
1886     /// Commands for GLX_NV_video_capture
1887     public int BindVideoCaptureDeviceNV (Display* dpy, uint video_capture_slot, GLXVideoCaptureDeviceNV device) const {
1888         assert(_BindVideoCaptureDeviceNV !is null, "GLX command glXBindVideoCaptureDeviceNV was not loaded");
1889         return _BindVideoCaptureDeviceNV (dpy, video_capture_slot, device);
1890     }
1891     /// ditto
1892     public GLXVideoCaptureDeviceNV * EnumerateVideoCaptureDevicesNV (Display* dpy, int screen, int* nelements) const {
1893         assert(_EnumerateVideoCaptureDevicesNV !is null, "GLX command glXEnumerateVideoCaptureDevicesNV was not loaded");
1894         return _EnumerateVideoCaptureDevicesNV (dpy, screen, nelements);
1895     }
1896     /// ditto
1897     public void LockVideoCaptureDeviceNV (Display* dpy, GLXVideoCaptureDeviceNV device) const {
1898         assert(_LockVideoCaptureDeviceNV !is null, "GLX command glXLockVideoCaptureDeviceNV was not loaded");
1899         return _LockVideoCaptureDeviceNV (dpy, device);
1900     }
1901     /// ditto
1902     public int QueryVideoCaptureDeviceNV (Display* dpy, GLXVideoCaptureDeviceNV device, int attribute, int* value) const {
1903         assert(_QueryVideoCaptureDeviceNV !is null, "GLX command glXQueryVideoCaptureDeviceNV was not loaded");
1904         return _QueryVideoCaptureDeviceNV (dpy, device, attribute, value);
1905     }
1906     /// ditto
1907     public void ReleaseVideoCaptureDeviceNV (Display* dpy, GLXVideoCaptureDeviceNV device) const {
1908         assert(_ReleaseVideoCaptureDeviceNV !is null, "GLX command glXReleaseVideoCaptureDeviceNV was not loaded");
1909         return _ReleaseVideoCaptureDeviceNV (dpy, device);
1910     }
1911 
1912     /// Commands for GLX_NV_video_out
1913     public int GetVideoDeviceNV (Display* dpy, int screen, int numVideoDevices, GLXVideoDeviceNV* pVideoDevice) const {
1914         assert(_GetVideoDeviceNV !is null, "GLX command glXGetVideoDeviceNV was not loaded");
1915         return _GetVideoDeviceNV (dpy, screen, numVideoDevices, pVideoDevice);
1916     }
1917     /// ditto
1918     public int ReleaseVideoDeviceNV (Display* dpy, int screen, GLXVideoDeviceNV VideoDevice) const {
1919         assert(_ReleaseVideoDeviceNV !is null, "GLX command glXReleaseVideoDeviceNV was not loaded");
1920         return _ReleaseVideoDeviceNV (dpy, screen, VideoDevice);
1921     }
1922     /// ditto
1923     public int BindVideoImageNV (Display* dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer) const {
1924         assert(_BindVideoImageNV !is null, "GLX command glXBindVideoImageNV was not loaded");
1925         return _BindVideoImageNV (dpy, VideoDevice, pbuf, iVideoBuffer);
1926     }
1927     /// ditto
1928     public int ReleaseVideoImageNV (Display* dpy, GLXPbuffer pbuf) const {
1929         assert(_ReleaseVideoImageNV !is null, "GLX command glXReleaseVideoImageNV was not loaded");
1930         return _ReleaseVideoImageNV (dpy, pbuf);
1931     }
1932     /// ditto
1933     public int SendPbufferToVideoNV (Display* dpy, GLXPbuffer pbuf, int iBufferType, c_ulong* pulCounterPbuffer, GLboolean bBlock) const {
1934         assert(_SendPbufferToVideoNV !is null, "GLX command glXSendPbufferToVideoNV was not loaded");
1935         return _SendPbufferToVideoNV (dpy, pbuf, iBufferType, pulCounterPbuffer, bBlock);
1936     }
1937     /// ditto
1938     public int GetVideoInfoNV (Display* dpy, int screen, GLXVideoDeviceNV VideoDevice, c_ulong* pulCounterOutputPbuffer, c_ulong* pulCounterOutputVideo) const {
1939         assert(_GetVideoInfoNV !is null, "GLX command glXGetVideoInfoNV was not loaded");
1940         return _GetVideoInfoNV (dpy, screen, VideoDevice, pulCounterOutputPbuffer, pulCounterOutputVideo);
1941     }
1942 
1943     /// Commands for GLX_OML_sync_control
1944     public Bool GetSyncValuesOML (Display* dpy, GLXDrawable drawable, int64_t* ust, int64_t* msc, int64_t* sbc) const {
1945         assert(_GetSyncValuesOML !is null, "GLX command glXGetSyncValuesOML was not loaded");
1946         return _GetSyncValuesOML (dpy, drawable, ust, msc, sbc);
1947     }
1948     /// ditto
1949     public Bool GetMscRateOML (Display* dpy, GLXDrawable drawable, int32_t* numerator, int32_t* denominator) const {
1950         assert(_GetMscRateOML !is null, "GLX command glXGetMscRateOML was not loaded");
1951         return _GetMscRateOML (dpy, drawable, numerator, denominator);
1952     }
1953     /// ditto
1954     public int64_t SwapBuffersMscOML (Display* dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder) const {
1955         assert(_SwapBuffersMscOML !is null, "GLX command glXSwapBuffersMscOML was not loaded");
1956         return _SwapBuffersMscOML (dpy, drawable, target_msc, divisor, remainder);
1957     }
1958     /// ditto
1959     public Bool WaitForMscOML (Display* dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t* ust, int64_t* msc, int64_t* sbc) const {
1960         assert(_WaitForMscOML !is null, "GLX command glXWaitForMscOML was not loaded");
1961         return _WaitForMscOML (dpy, drawable, target_msc, divisor, remainder, ust, msc, sbc);
1962     }
1963     /// ditto
1964     public Bool WaitForSbcOML (Display* dpy, GLXDrawable drawable, int64_t target_sbc, int64_t* ust, int64_t* msc, int64_t* sbc) const {
1965         assert(_WaitForSbcOML !is null, "GLX command glXWaitForSbcOML was not loaded");
1966         return _WaitForSbcOML (dpy, drawable, target_sbc, ust, msc, sbc);
1967     }
1968 
1969     /// Commands for GLX_SGIX_fbconfig
1970     public int GetFBConfigAttribSGIX (Display* dpy, GLXFBConfigSGIX config, int attribute, int* value) const {
1971         assert(_GetFBConfigAttribSGIX !is null, "GLX command glXGetFBConfigAttribSGIX was not loaded");
1972         return _GetFBConfigAttribSGIX (dpy, config, attribute, value);
1973     }
1974     /// ditto
1975     public GLXFBConfigSGIX * ChooseFBConfigSGIX (Display* dpy, int screen, int* attrib_list, int* nelements) const {
1976         assert(_ChooseFBConfigSGIX !is null, "GLX command glXChooseFBConfigSGIX was not loaded");
1977         return _ChooseFBConfigSGIX (dpy, screen, attrib_list, nelements);
1978     }
1979     /// ditto
1980     public GLXPixmap CreateGLXPixmapWithConfigSGIX (Display* dpy, GLXFBConfigSGIX config, Pixmap pixmap) const {
1981         assert(_CreateGLXPixmapWithConfigSGIX !is null, "GLX command glXCreateGLXPixmapWithConfigSGIX was not loaded");
1982         return _CreateGLXPixmapWithConfigSGIX (dpy, config, pixmap);
1983     }
1984     /// ditto
1985     public GLXContext CreateContextWithConfigSGIX (Display* dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct) const {
1986         assert(_CreateContextWithConfigSGIX !is null, "GLX command glXCreateContextWithConfigSGIX was not loaded");
1987         return _CreateContextWithConfigSGIX (dpy, config, render_type, share_list, direct);
1988     }
1989     /// ditto
1990     public XVisualInfo * GetVisualFromFBConfigSGIX (Display* dpy, GLXFBConfigSGIX config) const {
1991         assert(_GetVisualFromFBConfigSGIX !is null, "GLX command glXGetVisualFromFBConfigSGIX was not loaded");
1992         return _GetVisualFromFBConfigSGIX (dpy, config);
1993     }
1994     /// ditto
1995     public GLXFBConfigSGIX GetFBConfigFromVisualSGIX (Display* dpy, XVisualInfo* vis) const {
1996         assert(_GetFBConfigFromVisualSGIX !is null, "GLX command glXGetFBConfigFromVisualSGIX was not loaded");
1997         return _GetFBConfigFromVisualSGIX (dpy, vis);
1998     }
1999 
2000     /// Commands for GLX_SGIX_hyperpipe
2001     public GLXHyperpipeNetworkSGIX * QueryHyperpipeNetworkSGIX (Display* dpy, int* npipes) const {
2002         assert(_QueryHyperpipeNetworkSGIX !is null, "GLX command glXQueryHyperpipeNetworkSGIX was not loaded");
2003         return _QueryHyperpipeNetworkSGIX (dpy, npipes);
2004     }
2005     /// ditto
2006     public int HyperpipeConfigSGIX (Display* dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX* cfg, int* hpId) const {
2007         assert(_HyperpipeConfigSGIX !is null, "GLX command glXHyperpipeConfigSGIX was not loaded");
2008         return _HyperpipeConfigSGIX (dpy, networkId, npipes, cfg, hpId);
2009     }
2010     /// ditto
2011     public GLXHyperpipeConfigSGIX * QueryHyperpipeConfigSGIX (Display* dpy, int hpId, int* npipes) const {
2012         assert(_QueryHyperpipeConfigSGIX !is null, "GLX command glXQueryHyperpipeConfigSGIX was not loaded");
2013         return _QueryHyperpipeConfigSGIX (dpy, hpId, npipes);
2014     }
2015     /// ditto
2016     public int DestroyHyperpipeConfigSGIX (Display* dpy, int hpId) const {
2017         assert(_DestroyHyperpipeConfigSGIX !is null, "GLX command glXDestroyHyperpipeConfigSGIX was not loaded");
2018         return _DestroyHyperpipeConfigSGIX (dpy, hpId);
2019     }
2020     /// ditto
2021     public int BindHyperpipeSGIX (Display* dpy, int hpId) const {
2022         assert(_BindHyperpipeSGIX !is null, "GLX command glXBindHyperpipeSGIX was not loaded");
2023         return _BindHyperpipeSGIX (dpy, hpId);
2024     }
2025     /// ditto
2026     public int QueryHyperpipeBestAttribSGIX (Display* dpy, int timeSlice, int attrib, int size, void* attribList, void* returnAttribList) const {
2027         assert(_QueryHyperpipeBestAttribSGIX !is null, "GLX command glXQueryHyperpipeBestAttribSGIX was not loaded");
2028         return _QueryHyperpipeBestAttribSGIX (dpy, timeSlice, attrib, size, attribList, returnAttribList);
2029     }
2030     /// ditto
2031     public int HyperpipeAttribSGIX (Display* dpy, int timeSlice, int attrib, int size, void* attribList) const {
2032         assert(_HyperpipeAttribSGIX !is null, "GLX command glXHyperpipeAttribSGIX was not loaded");
2033         return _HyperpipeAttribSGIX (dpy, timeSlice, attrib, size, attribList);
2034     }
2035     /// ditto
2036     public int QueryHyperpipeAttribSGIX (Display* dpy, int timeSlice, int attrib, int size, void* returnAttribList) const {
2037         assert(_QueryHyperpipeAttribSGIX !is null, "GLX command glXQueryHyperpipeAttribSGIX was not loaded");
2038         return _QueryHyperpipeAttribSGIX (dpy, timeSlice, attrib, size, returnAttribList);
2039     }
2040 
2041     /// Commands for GLX_SGIX_pbuffer
2042     public GLXPbufferSGIX CreateGLXPbufferSGIX (Display* dpy, GLXFBConfigSGIX config, uint width, uint height, int* attrib_list) const {
2043         assert(_CreateGLXPbufferSGIX !is null, "GLX command glXCreateGLXPbufferSGIX was not loaded");
2044         return _CreateGLXPbufferSGIX (dpy, config, width, height, attrib_list);
2045     }
2046     /// ditto
2047     public void DestroyGLXPbufferSGIX (Display* dpy, GLXPbufferSGIX pbuf) const {
2048         assert(_DestroyGLXPbufferSGIX !is null, "GLX command glXDestroyGLXPbufferSGIX was not loaded");
2049         return _DestroyGLXPbufferSGIX (dpy, pbuf);
2050     }
2051     /// ditto
2052     public int QueryGLXPbufferSGIX (Display* dpy, GLXPbufferSGIX pbuf, int attribute, uint* value) const {
2053         assert(_QueryGLXPbufferSGIX !is null, "GLX command glXQueryGLXPbufferSGIX was not loaded");
2054         return _QueryGLXPbufferSGIX (dpy, pbuf, attribute, value);
2055     }
2056     /// ditto
2057     public void SelectEventSGIX (Display* dpy, GLXDrawable drawable, c_ulong mask) const {
2058         assert(_SelectEventSGIX !is null, "GLX command glXSelectEventSGIX was not loaded");
2059         return _SelectEventSGIX (dpy, drawable, mask);
2060     }
2061     /// ditto
2062     public void GetSelectedEventSGIX (Display* dpy, GLXDrawable drawable, c_ulong* mask) const {
2063         assert(_GetSelectedEventSGIX !is null, "GLX command glXGetSelectedEventSGIX was not loaded");
2064         return _GetSelectedEventSGIX (dpy, drawable, mask);
2065     }
2066 
2067     /// Commands for GLX_SGIX_swap_barrier
2068     public void BindSwapBarrierSGIX (Display* dpy, GLXDrawable drawable, int barrier) const {
2069         assert(_BindSwapBarrierSGIX !is null, "GLX command glXBindSwapBarrierSGIX was not loaded");
2070         return _BindSwapBarrierSGIX (dpy, drawable, barrier);
2071     }
2072     /// ditto
2073     public Bool QueryMaxSwapBarriersSGIX (Display* dpy, int screen, int* max) const {
2074         assert(_QueryMaxSwapBarriersSGIX !is null, "GLX command glXQueryMaxSwapBarriersSGIX was not loaded");
2075         return _QueryMaxSwapBarriersSGIX (dpy, screen, max);
2076     }
2077 
2078     /// Commands for GLX_SGIX_swap_group
2079     public void JoinSwapGroupSGIX (Display* dpy, GLXDrawable drawable, GLXDrawable member) const {
2080         assert(_JoinSwapGroupSGIX !is null, "GLX command glXJoinSwapGroupSGIX was not loaded");
2081         return _JoinSwapGroupSGIX (dpy, drawable, member);
2082     }
2083 
2084     /// Commands for GLX_SGIX_video_resize
2085     public int BindChannelToWindowSGIX (Display* display, int screen, int channel, Window window) const {
2086         assert(_BindChannelToWindowSGIX !is null, "GLX command glXBindChannelToWindowSGIX was not loaded");
2087         return _BindChannelToWindowSGIX (display, screen, channel, window);
2088     }
2089     /// ditto
2090     public int ChannelRectSGIX (Display* display, int screen, int channel, int x, int y, int w, int h) const {
2091         assert(_ChannelRectSGIX !is null, "GLX command glXChannelRectSGIX was not loaded");
2092         return _ChannelRectSGIX (display, screen, channel, x, y, w, h);
2093     }
2094     /// ditto
2095     public int QueryChannelRectSGIX (Display* display, int screen, int channel, int* dx, int* dy, int* dw, int* dh) const {
2096         assert(_QueryChannelRectSGIX !is null, "GLX command glXQueryChannelRectSGIX was not loaded");
2097         return _QueryChannelRectSGIX (display, screen, channel, dx, dy, dw, dh);
2098     }
2099     /// ditto
2100     public int QueryChannelDeltasSGIX (Display* display, int screen, int channel, int* x, int* y, int* w, int* h) const {
2101         assert(_QueryChannelDeltasSGIX !is null, "GLX command glXQueryChannelDeltasSGIX was not loaded");
2102         return _QueryChannelDeltasSGIX (display, screen, channel, x, y, w, h);
2103     }
2104     /// ditto
2105     public int ChannelRectSyncSGIX (Display* display, int screen, int channel, GLenum synctype) const {
2106         assert(_ChannelRectSyncSGIX !is null, "GLX command glXChannelRectSyncSGIX was not loaded");
2107         return _ChannelRectSyncSGIX (display, screen, channel, synctype);
2108     }
2109 
2110     /// Commands for GLX_SGI_cushion
2111     public void CushionSGI (Display* dpy, Window window, float cushion) const {
2112         assert(_CushionSGI !is null, "GLX command glXCushionSGI was not loaded");
2113         return _CushionSGI (dpy, window, cushion);
2114     }
2115 
2116     /// Commands for GLX_SGI_make_current_read
2117     public Bool MakeCurrentReadSGI (Display* dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx) const {
2118         assert(_MakeCurrentReadSGI !is null, "GLX command glXMakeCurrentReadSGI was not loaded");
2119         return _MakeCurrentReadSGI (dpy, draw, read, ctx);
2120     }
2121     /// ditto
2122     public GLXDrawable GetCurrentReadDrawableSGI () const {
2123         assert(_GetCurrentReadDrawableSGI !is null, "GLX command glXGetCurrentReadDrawableSGI was not loaded");
2124         return _GetCurrentReadDrawableSGI ();
2125     }
2126 
2127     /// Commands for GLX_SGI_swap_control
2128     public int SwapIntervalSGI (int interval) const {
2129         assert(_SwapIntervalSGI !is null, "GLX command glXSwapIntervalSGI was not loaded");
2130         return _SwapIntervalSGI (interval);
2131     }
2132 
2133     /// Commands for GLX_SGI_video_sync
2134     public int GetVideoSyncSGI (uint* count) const {
2135         assert(_GetVideoSyncSGI !is null, "GLX command glXGetVideoSyncSGI was not loaded");
2136         return _GetVideoSyncSGI (count);
2137     }
2138     /// ditto
2139     public int WaitVideoSyncSGI (int divisor, int remainder, uint* count) const {
2140         assert(_WaitVideoSyncSGI !is null, "GLX command glXWaitVideoSyncSGI was not loaded");
2141         return _WaitVideoSyncSGI (divisor, remainder, count);
2142     }
2143 
2144     /// Commands for GLX_SUN_get_transparent_index
2145     public Status GetTransparentIndexSUN (Display* dpy, Window overlay, Window underlay, long* pTransparentIndex) const {
2146         assert(_GetTransparentIndexSUN !is null, "GLX command glXGetTransparentIndexSUN was not loaded");
2147         return _GetTransparentIndexSUN (dpy, overlay, underlay, pTransparentIndex);
2148     }
2149 
2150     // GLX_VERSION_1_0
2151     private PFN_glXChooseVisual _ChooseVisual;
2152     private PFN_glXCreateContext _CreateContext;
2153     private PFN_glXDestroyContext _DestroyContext;
2154     private PFN_glXMakeCurrent _MakeCurrent;
2155     private PFN_glXCopyContext _CopyContext;
2156     private PFN_glXSwapBuffers _SwapBuffers;
2157     private PFN_glXCreateGLXPixmap _CreateGLXPixmap;
2158     private PFN_glXDestroyGLXPixmap _DestroyGLXPixmap;
2159     private PFN_glXQueryExtension _QueryExtension;
2160     private PFN_glXQueryVersion _QueryVersion;
2161     private PFN_glXIsDirect _IsDirect;
2162     private PFN_glXGetConfig _GetConfig;
2163     private PFN_glXGetCurrentContext _GetCurrentContext;
2164     private PFN_glXGetCurrentDrawable _GetCurrentDrawable;
2165     private PFN_glXWaitGL _WaitGL;
2166     private PFN_glXWaitX _WaitX;
2167     private PFN_glXUseXFont _UseXFont;
2168 
2169     // GLX_VERSION_1_1
2170     private PFN_glXQueryExtensionsString _QueryExtensionsString;
2171     private PFN_glXQueryServerString _QueryServerString;
2172     private PFN_glXGetClientString _GetClientString;
2173 
2174     // GLX_VERSION_1_2
2175     private PFN_glXGetCurrentDisplay _GetCurrentDisplay;
2176 
2177     // GLX_VERSION_1_3
2178     private PFN_glXGetFBConfigs _GetFBConfigs;
2179     private PFN_glXChooseFBConfig _ChooseFBConfig;
2180     private PFN_glXGetFBConfigAttrib _GetFBConfigAttrib;
2181     private PFN_glXGetVisualFromFBConfig _GetVisualFromFBConfig;
2182     private PFN_glXCreateWindow _CreateWindow;
2183     private PFN_glXDestroyWindow _DestroyWindow;
2184     private PFN_glXCreatePixmap _CreatePixmap;
2185     private PFN_glXDestroyPixmap _DestroyPixmap;
2186     private PFN_glXCreatePbuffer _CreatePbuffer;
2187     private PFN_glXDestroyPbuffer _DestroyPbuffer;
2188     private PFN_glXQueryDrawable _QueryDrawable;
2189     private PFN_glXCreateNewContext _CreateNewContext;
2190     private PFN_glXMakeContextCurrent _MakeContextCurrent;
2191     private PFN_glXGetCurrentReadDrawable _GetCurrentReadDrawable;
2192     private PFN_glXQueryContext _QueryContext;
2193     private PFN_glXSelectEvent _SelectEvent;
2194     private PFN_glXGetSelectedEvent _GetSelectedEvent;
2195 
2196     // GLX_VERSION_1_4
2197     private PFN_glXGetProcAddress _GetProcAddress;
2198 
2199     // GLX_ARB_create_context,
2200     private PFN_glXCreateContextAttribsARB _CreateContextAttribsARB;
2201 
2202     // GLX_ARB_get_proc_address,
2203     private PFN_glXGetProcAddressARB _GetProcAddressARB;
2204 
2205     // GLX_AMD_gpu_association,
2206     private PFN_glXGetGPUIDsAMD _GetGPUIDsAMD;
2207     private PFN_glXGetGPUInfoAMD _GetGPUInfoAMD;
2208     private PFN_glXGetContextGPUIDAMD _GetContextGPUIDAMD;
2209     private PFN_glXCreateAssociatedContextAMD _CreateAssociatedContextAMD;
2210     private PFN_glXCreateAssociatedContextAttribsAMD _CreateAssociatedContextAttribsAMD;
2211     private PFN_glXDeleteAssociatedContextAMD _DeleteAssociatedContextAMD;
2212     private PFN_glXMakeAssociatedContextCurrentAMD _MakeAssociatedContextCurrentAMD;
2213     private PFN_glXGetCurrentAssociatedContextAMD _GetCurrentAssociatedContextAMD;
2214     private PFN_glXBlitContextFramebufferAMD _BlitContextFramebufferAMD;
2215 
2216     // GLX_EXT_import_context,
2217     private PFN_glXGetCurrentDisplayEXT _GetCurrentDisplayEXT;
2218     private PFN_glXQueryContextInfoEXT _QueryContextInfoEXT;
2219     private PFN_glXGetContextIDEXT _GetContextIDEXT;
2220     private PFN_glXImportContextEXT _ImportContextEXT;
2221     private PFN_glXFreeContextEXT _FreeContextEXT;
2222 
2223     // GLX_EXT_swap_control,
2224     private PFN_glXSwapIntervalEXT _SwapIntervalEXT;
2225 
2226     // GLX_EXT_texture_from_pixmap,
2227     private PFN_glXBindTexImageEXT _BindTexImageEXT;
2228     private PFN_glXReleaseTexImageEXT _ReleaseTexImageEXT;
2229 
2230     // GLX_MESA_agp_offset,
2231     private PFN_glXGetAGPOffsetMESA _GetAGPOffsetMESA;
2232 
2233     // GLX_MESA_copy_sub_buffer,
2234     private PFN_glXCopySubBufferMESA _CopySubBufferMESA;
2235 
2236     // GLX_MESA_pixmap_colormap,
2237     private PFN_glXCreateGLXPixmapMESA _CreateGLXPixmapMESA;
2238 
2239     // GLX_MESA_query_renderer,
2240     private PFN_glXQueryCurrentRendererIntegerMESA _QueryCurrentRendererIntegerMESA;
2241     private PFN_glXQueryCurrentRendererStringMESA _QueryCurrentRendererStringMESA;
2242     private PFN_glXQueryRendererIntegerMESA _QueryRendererIntegerMESA;
2243     private PFN_glXQueryRendererStringMESA _QueryRendererStringMESA;
2244 
2245     // GLX_MESA_release_buffers,
2246     private PFN_glXReleaseBuffersMESA _ReleaseBuffersMESA;
2247 
2248     // GLX_MESA_set_3dfx_mode,
2249     private PFN_glXSet3DfxModeMESA _Set3DfxModeMESA;
2250 
2251     // GLX_MESA_swap_control,
2252     private PFN_glXGetSwapIntervalMESA _GetSwapIntervalMESA;
2253     private PFN_glXSwapIntervalMESA _SwapIntervalMESA;
2254 
2255     // GLX_NV_copy_buffer,
2256     private PFN_glXCopyBufferSubDataNV _CopyBufferSubDataNV;
2257     private PFN_glXNamedCopyBufferSubDataNV _NamedCopyBufferSubDataNV;
2258 
2259     // GLX_NV_copy_image,
2260     private PFN_glXCopyImageSubDataNV _CopyImageSubDataNV;
2261 
2262     // GLX_NV_delay_before_swap,
2263     private PFN_glXDelayBeforeSwapNV _DelayBeforeSwapNV;
2264 
2265     // GLX_NV_present_video,
2266     private PFN_glXEnumerateVideoDevicesNV _EnumerateVideoDevicesNV;
2267     private PFN_glXBindVideoDeviceNV _BindVideoDeviceNV;
2268 
2269     // GLX_NV_swap_group,
2270     private PFN_glXJoinSwapGroupNV _JoinSwapGroupNV;
2271     private PFN_glXBindSwapBarrierNV _BindSwapBarrierNV;
2272     private PFN_glXQuerySwapGroupNV _QuerySwapGroupNV;
2273     private PFN_glXQueryMaxSwapGroupsNV _QueryMaxSwapGroupsNV;
2274     private PFN_glXQueryFrameCountNV _QueryFrameCountNV;
2275     private PFN_glXResetFrameCountNV _ResetFrameCountNV;
2276 
2277     // GLX_NV_video_capture,
2278     private PFN_glXBindVideoCaptureDeviceNV _BindVideoCaptureDeviceNV;
2279     private PFN_glXEnumerateVideoCaptureDevicesNV _EnumerateVideoCaptureDevicesNV;
2280     private PFN_glXLockVideoCaptureDeviceNV _LockVideoCaptureDeviceNV;
2281     private PFN_glXQueryVideoCaptureDeviceNV _QueryVideoCaptureDeviceNV;
2282     private PFN_glXReleaseVideoCaptureDeviceNV _ReleaseVideoCaptureDeviceNV;
2283 
2284     // GLX_NV_video_out,
2285     private PFN_glXGetVideoDeviceNV _GetVideoDeviceNV;
2286     private PFN_glXReleaseVideoDeviceNV _ReleaseVideoDeviceNV;
2287     private PFN_glXBindVideoImageNV _BindVideoImageNV;
2288     private PFN_glXReleaseVideoImageNV _ReleaseVideoImageNV;
2289     private PFN_glXSendPbufferToVideoNV _SendPbufferToVideoNV;
2290     private PFN_glXGetVideoInfoNV _GetVideoInfoNV;
2291 
2292     // GLX_OML_sync_control,
2293     private PFN_glXGetSyncValuesOML _GetSyncValuesOML;
2294     private PFN_glXGetMscRateOML _GetMscRateOML;
2295     private PFN_glXSwapBuffersMscOML _SwapBuffersMscOML;
2296     private PFN_glXWaitForMscOML _WaitForMscOML;
2297     private PFN_glXWaitForSbcOML _WaitForSbcOML;
2298 
2299     // GLX_SGIX_fbconfig,
2300     private PFN_glXGetFBConfigAttribSGIX _GetFBConfigAttribSGIX;
2301     private PFN_glXChooseFBConfigSGIX _ChooseFBConfigSGIX;
2302     private PFN_glXCreateGLXPixmapWithConfigSGIX _CreateGLXPixmapWithConfigSGIX;
2303     private PFN_glXCreateContextWithConfigSGIX _CreateContextWithConfigSGIX;
2304     private PFN_glXGetVisualFromFBConfigSGIX _GetVisualFromFBConfigSGIX;
2305     private PFN_glXGetFBConfigFromVisualSGIX _GetFBConfigFromVisualSGIX;
2306 
2307     // GLX_SGIX_hyperpipe,
2308     private PFN_glXQueryHyperpipeNetworkSGIX _QueryHyperpipeNetworkSGIX;
2309     private PFN_glXHyperpipeConfigSGIX _HyperpipeConfigSGIX;
2310     private PFN_glXQueryHyperpipeConfigSGIX _QueryHyperpipeConfigSGIX;
2311     private PFN_glXDestroyHyperpipeConfigSGIX _DestroyHyperpipeConfigSGIX;
2312     private PFN_glXBindHyperpipeSGIX _BindHyperpipeSGIX;
2313     private PFN_glXQueryHyperpipeBestAttribSGIX _QueryHyperpipeBestAttribSGIX;
2314     private PFN_glXHyperpipeAttribSGIX _HyperpipeAttribSGIX;
2315     private PFN_glXQueryHyperpipeAttribSGIX _QueryHyperpipeAttribSGIX;
2316 
2317     // GLX_SGIX_pbuffer,
2318     private PFN_glXCreateGLXPbufferSGIX _CreateGLXPbufferSGIX;
2319     private PFN_glXDestroyGLXPbufferSGIX _DestroyGLXPbufferSGIX;
2320     private PFN_glXQueryGLXPbufferSGIX _QueryGLXPbufferSGIX;
2321     private PFN_glXSelectEventSGIX _SelectEventSGIX;
2322     private PFN_glXGetSelectedEventSGIX _GetSelectedEventSGIX;
2323 
2324     // GLX_SGIX_swap_barrier,
2325     private PFN_glXBindSwapBarrierSGIX _BindSwapBarrierSGIX;
2326     private PFN_glXQueryMaxSwapBarriersSGIX _QueryMaxSwapBarriersSGIX;
2327 
2328     // GLX_SGIX_swap_group,
2329     private PFN_glXJoinSwapGroupSGIX _JoinSwapGroupSGIX;
2330 
2331     // GLX_SGIX_video_resize,
2332     private PFN_glXBindChannelToWindowSGIX _BindChannelToWindowSGIX;
2333     private PFN_glXChannelRectSGIX _ChannelRectSGIX;
2334     private PFN_glXQueryChannelRectSGIX _QueryChannelRectSGIX;
2335     private PFN_glXQueryChannelDeltasSGIX _QueryChannelDeltasSGIX;
2336     private PFN_glXChannelRectSyncSGIX _ChannelRectSyncSGIX;
2337 
2338     // GLX_SGI_cushion,
2339     private PFN_glXCushionSGI _CushionSGI;
2340 
2341     // GLX_SGI_make_current_read,
2342     private PFN_glXMakeCurrentReadSGI _MakeCurrentReadSGI;
2343     private PFN_glXGetCurrentReadDrawableSGI _GetCurrentReadDrawableSGI;
2344 
2345     // GLX_SGI_swap_control,
2346     private PFN_glXSwapIntervalSGI _SwapIntervalSGI;
2347 
2348     // GLX_SGI_video_sync,
2349     private PFN_glXGetVideoSyncSGI _GetVideoSyncSGI;
2350     private PFN_glXWaitVideoSyncSGI _WaitVideoSyncSGI;
2351 
2352     // GLX_SUN_get_transparent_index,
2353     private PFN_glXGetTransparentIndexSUN _GetTransparentIndexSUN;
2354 }