root/trunk/gl/glx.d

Revision 157, 13.8 kB (checked in by jpelcis, 6 years ago)

Added an OpenAL implementation with ALUT.

Added an OpenGL implementation with all extensions, GLU, and GLUT.

Removed a second copy of d3d9.d.

Line 
1 module c.gl.glx;
2
3 /*
4  * Mesa 3-D graphics library
5  * Version:  6.3
6  *
7  * Copyright (C) 1999-2005  Brian Paul   All Rights Reserved.
8  *
9  * Permission is hereby granted, free of charge, to any person obtaining a
10  * copy of this software and associated documentation files (the "Software"),
11  * to deal in the Software without restriction, including without limitation
12  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
13  * and/or sell copies of the Software, and to permit persons to whom the
14  * Software is furnished to do so, subject to the following conditions:
15  *
16  * The above copyright notice and this permission notice shall be included
17  * in all copies or substantial portions of the Software.
18  *
19  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
22  * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
23  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
24  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25  */
26
27 version (linux) {
28 import c.gl.glxext;
29 private import std.loader;
30
31 /*
32  * Constants
33  */
34 const GLchar[] GLX_EXTENSION_NAME   = "GLX";
35
36 // Names for attributes to glXGetConfig.
37 const GLuint GLX_USE_GL         = 1;
38 const GLuint GLX_BUFFER_SIZE        = 2;
39 const GLuint GLX_LEVEL          = 3;
40 const GLuint GLX_RGBA           = 4;
41 const GLuint GLX_DOUBLEBUFFER       = 5;
42 const GLuint GLX_STEREO         = 6;
43 const GLuint GLX_AUX_BUFFERS        = 7;
44 const GLuint GLX_RED_SIZE       = 8;
45 const GLuint GLX_GREEN_SIZE     = 9;
46 const GLuint GLX_BLUE_SIZE      = 10;
47 const GLuint GLX_ALPHA_SIZE     = 11;
48 const GLuint GLX_DEPTH_SIZE     = 12;
49 const GLuint GLX_STENCIL_SIZE       = 13;
50 const GLuint GLX_ACCUM_RED_SIZE     = 14;
51 const GLuint GLX_ACCUM_GREEN_SIZE   = 15;
52 const GLuint GLX_ACCUM_BLUE_SIZE    = 16;
53 const GLuint GLX_ACCUM_ALPHA_SIZE   = 17;
54
55 // Error return values from glXGetConfig.  Success is indicated by a value of 0.
56 const GLuint GLX_BAD_SCREEN     = 1;
57 const GLuint GLX_BAD_ATTRIBUTE      = 2;
58 const GLuint GLX_NO_EXTENSION       = 3;
59 const GLuint GLX_BAD_VISUAL     = 4;
60 const GLuint GLX_BAD_CONTEXT        = 5;
61 const GLuint GLX_BAD_VALUE      = 6;
62 const GLuint GLX_BAD_ENUM       = 7;
63
64 // Version 1.1
65 const GLuint GLX_VENDOR         = 1;
66 const GLuint GLX_VERSION        = 2;
67 const GLuint GLX_EXTENSIONS     = 3;
68
69 // Version 1.3
70 const GLuint GLX_CONFIG_CAVEAT      = 0x20;
71 const GLuint GLX_DONT_CARE      = 0xFFFFFFFF;
72 const GLuint GLX_X_VISUAL_TYPE      = 0x22;
73 const GLuint GLX_TRANSPARENT_TYPE   = 0x23;
74 const GLuint GLX_TRANSPARENT_INDEX_VALUE= 0x24;
75 const GLuint GLX_TRANSPARENT_RED_VALUE  = 0x25;
76 const GLuint GLX_TRANSPARENT_GREEN_VALUE= 0x26;
77 const GLuint GLX_TRANSPARENT_BLUE_VALUE = 0x27;
78 const GLuint GLX_TRANSPARENT_ALPHA_VALUE= 0x28;
79 const GLuint GLX_WINDOW_BIT     = 0x00000001;
80 const GLuint GLX_PIXMAP_BIT     = 0x00000002;
81 const GLuint GLX_PBUFFER_BIT        = 0x00000004;
82 const GLuint GLX_AUX_BUFFERS_BIT    = 0x00000010;
83 const GLuint GLX_FRONT_LEFT_BUFFER_BIT  = 0x00000001;
84 const GLuint GLX_FRONT_RIGHT_BUFFER_BIT = 0x00000002;
85 const GLuint GLX_BACK_LEFT_BUFFER_BIT   = 0x00000004;
86 const GLuint GLX_BACK_RIGHT_BUFFER_BIT  = 0x00000008;
87 const GLuint GLX_DEPTH_BUFFER_BIT   = 0x00000020;
88 const GLuint GLX_STENCIL_BUFFER_BIT = 0x00000040;
89 const GLuint GLX_ACCUM_BUFFER_BIT   = 0x00000080;
90 const GLuint GLX_NONE           = 0x8000;
91 const GLuint GLX_SLOW_CONFIG        = 0x8001;
92 const GLuint GLX_TRUE_COLOR     = 0x8002;
93 const GLuint GLX_DIRECT_COLOR       = 0x8003;
94 const GLuint GLX_PSEUDO_COLOR       = 0x8004;
95 const GLuint GLX_STATIC_COLOR       = 0x8005;
96 const GLuint GLX_GRAY_SCALE     = 0x8006;
97 const GLuint GLX_STATIC_GRAY        = 0x8007;
98 const GLuint GLX_TRANSPARENT_RGB    = 0x8008;
99 const GLuint GLX_TRANSPARENT_INDEX  = 0x8009;
100 const GLuint GLX_VISUAL_ID      = 0x800B;
101 const GLuint GLX_SCREEN         = 0x800C;
102 const GLuint GLX_NON_CONFORMANT_CONFIG  = 0x800D;
103 const GLuint GLX_DRAWABLE_TYPE      = 0x8010;
104 const GLuint GLX_RENDER_TYPE        = 0x8011;
105 const GLuint GLX_X_RENDERABLE       = 0x8012;
106 const GLuint GLX_FBCONFIG_ID        = 0x8013;
107 const GLuint GLX_RGBA_TYPE      = 0x8014;
108 const GLuint GLX_COLOR_INDEX_TYPE   = 0x8015;
109 const GLuint GLX_MAX_PBUFFER_WIDTH  = 0x8016;
110 const GLuint GLX_MAX_PBUFFER_HEIGHT = 0x8017;
111 const GLuint GLX_MAX_PBUFFER_PIXELS = 0x8018;
112 const GLuint GLX_PRESERVED_CONTENTS = 0x801B;
113 const GLuint GLX_LARGEST_PBUFFER    = 0x801C;
114 const GLuint GLX_WIDTH          = 0x801D;
115 const GLuint GLX_HEIGHT         = 0x801E;
116 const GLuint GLX_EVENT_MASK     = 0x801F;
117 const GLuint GLX_DAMAGED        = 0x8020;
118 const GLuint GLX_SAVED          = 0x8021;
119 const GLuint GLX_WINDOW         = 0x8022;
120 const GLuint GLX_PBUFFER        = 0x8023;
121 const GLuint GLX_PBUFFER_HEIGHT     = 0x8040;
122 const GLuint GLX_PBUFFER_WIDTH      = 0x8041;
123 const GLuint GLX_RGBA_BIT       = 0x00000001;
124 const GLuint GLX_COLOR_INDEX_BIT    = 0x00000002;
125 const GLuint GLX_PBUFFER_CLOBBER_MASK   = 0x08000000;
126
127 // Version 1.4
128 const GLuint  GLX_SAMPLE_BUFFERS    = 0x186a0;
129 const GLuint  GLX_SAMPLES       = 0x186a1;
130
131 /*
132  * Structs and classes
133  */
134 alias uint XID;
135
136 struct __GLXcontextRec;
137 struct __GLXFBConfigRec;
138 alias __GLXcontextRec* GLXContext;
139 alias __GLXFBConfigRec* GLXFBConfig;
140 alias XID GLXPixmap;
141 alias XID GLXDrawable;
142 alias XID GLXFBConfigID;
143 alias XID GLXContentID;
144 alias XID GLXWindow;
145 alias XID GLXPbuffer;
146
147 alias int Bool;
148 alias uint VisualID;
149 alias byte* XPointer;
150 alias GLvoid Display;
151 alias XID Pixmap;
152 alias XID Font;
153 alias XID Window;
154
155 struct XExtData {
156     int         number;
157     XExtData*       next;
158     int function(XExtData*) free_private;
159     XPointer        private_data;
160 }
161
162 struct Visual {
163     XExtData*   ext_data;
164     VisualID    visualid;
165     int     _class;
166     uint        red_mask, green_mask, blue_mask;
167     int     bits_per_rgb;
168     int     map_entries;
169 }
170
171 struct XVisualInfo {
172     Visual*     visual;
173     VisualID    visualid;
174     int     screen;
175     int     depth;
176     int     _class;
177     uint        red_mask, green_mask, blue_mask;
178     int     colormap_size;
179     int     bits_per_rgb;
180 }
181
182 struct GLXPbufferClobberEvent {
183     int     event_type;
184     int     draw_type;
185     uint        serial;
186     Bool        send_event;
187     Display*    display;
188     GLXDrawable drawable;
189     uint        buffer_mask;
190     uint        aux_buffer;
191     int     x, y;
192     int     width, height;
193     int     count;
194 }
195
196 union GLXEvent {
197     GLXPbufferClobberEvent  glxpbufferclobber;
198     int[24]         pad;
199 }
200
201 class XVisualInfo {
202     int bits_per_rgb;
203     int colormap_size;
204     int blue_mask;
205     int green_mask;
206     int red_mask;
207     int cllass;
208     int depth;
209     int screen;
210     int visualid;
211     int visual;
212 }
213
214 /*
215  * Functions
216  */
217
218 private HXModule glxdrv;
219 private void* getProc(char[] procname) {
220     void* symbol = ExeModule_GetSymbol(glxdrv, procname);
221     if (symbol is null) {
222         printf ("Failed to load GLX proc address " ~ procname ~ ".\n");
223     }
224     return (symbol);
225 }
226
227 static this () {
228     glxdrv = ExeModule_Load("libGLX.so");
229     glXChooseFBConfig = cast(pfglXChooseFBConfig)getProc("glXChooseFBConfig");
230     glXChooseVisual = cast(pfglXChooseVisual)getProc("glXChooseVisual");
231     glXCopyContext = cast(pfglXCopyContext)getProc("glXCopyContext");
232     glXCreateContext = cast(pfglXCreateContext)getProc("glXCreateContext");
233     glXCreateGLXPixmap = cast(pfglXCreateGLXPixmap)getProc("glXCreateGLXPixmap");
234     glXCreateNewContext = cast(pfglXCreateNewContext)getProc("glXCreateNewContext");
235     glXCreatePbuffer = cast(pfglXCreatePbuffer)getProc("glXCreatePbuffer");
236     glXCreatePixmap = cast(pfglXCreatePixmap)getProc("glXCreatePixmap");
237     glXCreateWindow = cast(pfglXCreateWindow)getProc("glXCreateWindow");
238     glXDestroyContext = cast(pfglXDestroyContext)getProc("glXDestroyContext");
239     glXDestroyGLXPixmap = cast(pfglXDestroyGLXPixmap)getProc("glXDestroyGLXPixmap");
240     glXDestroyPbuffer = cast(pfglXDestroyPbuffer)getProc("glXDestroyPbuffer");
241     glXDestroyPixmap = cast(pfglXDestroyPixmap)getProc("glXDestroyPixmap");
242     glXDestroyWindow = cast(pfglXDestroyWindow)getProc("glXDestroyWindow");
243     glXGetClientString = cast(pfglXGetClientString)getProc("glXGetClientString");
244     glXGetConfig = cast(pfglXGetConfig)getProc("glXGetConfig");
245     glXGetCurrentContext = cast(pfglXGetCurrentContext)getProc("glXGetCurrentContext");
246     glXGetCurrentDisplay = cast(pfglXGetCurrentDisplay)getProc("glXGetCurrentDisplay");
247     glXGetCurrentDrawable = cast(pfglXGetCurrentDrawable)getProc("glXGetCurrentDrawable");
248     glXGetCurrentReadDrawable = cast(pfglXGetCurrentReadDrawable)getProc("glXGetCurrentReadDrawable");
249     glXGetFBConfigAttrib = cast(pfglXGetFBConfigAttrib)getProc("glXGetFBConfigAttrib");
250     glXGetFBConfigs = cast(pfglXGetFBConfigs)getProc("glXGetFBConfigs");
251     glXGetSelectedEvent = cast(pfglXGetSelectedEvent)getProc("glXGetSelectedEvent");
252     glXGetVisualFromFBConfig = cast(pfglXGetVisualFromFBConfig)getProc("glXGetVisualFromFBConfig");
253     glXIsDirect = cast(pfglXIsDirect)getProc("glXIsDirect");
254     glXMakeContextCurrent = cast(pfglXMakeContextCurrent)getProc("glXMakeContextCurrent");
255     glXMakeCurrent = cast(pfglXMakeCurrent)getProc("glXMakeCurrent");
256     glXQueryContext = cast(pfglXQueryContext)getProc("glXQueryContext");
257     glXQueryDrawable = cast(pfglXQueryDrawable)getProc("glXQueryDrawable");
258     glXQueryExtension = cast(pfglXQueryExtension)getProc("glXQueryExtension");
259     glXQueryExtensionsString = cast(pfglXQueryExtensionsString)getProc("glXQueryExtensionsString");
260     glXQueryServerString = cast(pfglXQueryServerString)getProc("glXQueryServerString");
261     glXQueryVersion = cast(pfglXQueryVersion)getProc("glXQueryVersion");
262     glXSelectEvent = cast(pfglXSelectEvent)getProc("glXSelectEvent");
263     glXSwapBuffers = cast(pfglXSwapBuffers)getProc("glXSwapBuffers");
264     glXUseXFont = cast(pfglXUseXFont)getProc("glXUseXFont");
265     glXWaitGL = cast(pfglXWaitGL)getProc("glXWaitGL");
266     glXWaitX = cast(pfglXWaitX)getProc("glXWaitX");
267 }
268
269 static ~this () {
270     ExeModule_Release(glxdrv);
271 }
272
273 extern (C):
274 typedef GLXFBConfig* function(Display*, GLint, GLint*, GLint*) pfglXChooseFBConfig;
275 typedef XVisualInfo* function(Display*, GLint, GLint*) pfglXChooseVisual;
276 typedef GLvoid function(Display*, GLXContext, GLXContext, GLuint) pfglXCopyContext;
277 typedef GLXContext function(Display*, XVisualInfo*, GLXContext, Bool) pfglXCreateContext;
278 typedef GLXPixmap function(Display*, XVisualInfo*, Pixmap) pfglXCreateGLXPixmap;
279 typedef GLXContext function(Display*, GLXFBConfig, GLint, GLXContext, Bool) pfglXCreateNewContext;
280 typedef GLXPbuffer function(Display*, GLXFBConfig, GLint*) pfglXCreatePbuffer;
281 typedef GLXPixmap function(Display*, GLXFBConfig, Pixmap, GLint*) pfglXCreatePixmap;
282 typedef GLXWindow function(Display*, GLXFBConfig, Window, GLint*) pfglXCreateWindow;
283 typedef GLvoid function(Display*, GLXContext) pfglXDestroyContext;
284 typedef GLvoid function(Display*, GLXPixmap) pfglXDestroyGLXPixmap;
285 typedef GLvoid function(Display*, GLXPbuffer) pfglXDestroyPbuffer;
286 typedef GLvoid function(Display*, GLXPixmap) pfglXDestroyPixmap;
287 typedef GLvoid function(Display*, GLXWindow) pfglXDestroyWindow;
288 typedef GLchar* function(Display*, GLint) pfglXGetClientString;
289 typedef GLint function(Display*, XVisualInfo*, GLint, GLint*) pfglXGetConfig;
290 typedef GLXContext function() pfglXGetCurrentContext;
291 typedef Display* function() pfglXGetCurrentDisplay;
292 typedef GLXDrawable function() pfglXGetCurrentDrawable;
293 typedef GLXDrawable function() pfglXGetCurrentReadDrawable;
294 typedef GLint function(Display*, GLXFBConfig, GLint, GLint*) pfglXGetFBConfigAttrib;
295 typedef GLXFBConfig* function(Display*, GLint, GLint*) pfglXGetFBConfigs;
296 typedef GLvoid function(Display*, GLXDrawable, GLulong*) pfglXGetSelectedEvent;
297 typedef XVisualInfo* function(Display*, GLXFBConfig) pfglXGetVisualFromFBConfig;
298 typedef Bool function(Display*, GLXContext) pfglXIsDirect;
299 typedef Bool function(Display*, GLXDrawable, GLXDrawable, GLXContext) pfglXMakeContextCurrent;
300 typedef Bool function(Display*, GLXDrawable, GLXContext) pfglXMakeCurrent;
301 typedef GLint function(Display*, GLXContext, GLint, GLint*) pfglXQueryContext;
302 typedef GLint function(Display*, GLXDrawable, GLint, GLuint*) pfglXQueryDrawable;
303 typedef Bool function(Display*, GLint*, GLint*) pfglXQueryExtension;
304 typedef GLchar* function(Display*, GLint) pfglXQueryExtensionsString;
305 typedef GLchar* function(Display*, GLint, GLint) pfglXQueryServerString;
306 typedef Bool function(Display*, GLint*, GLint*) pfglXQueryVersion;
307 typedef GLvoid function(Display*, GLXDrawable, GLulong) pfglXSelectEvent;
308 typedef GLvoid function(Display*, GLXDrawable) pfglXSwapBuffers;
309 typedef GLvoid function(Font, GLint, GLint, GLint) pfglXUseXFont;
310 typedef GLvoid function() pfglXWaitGL;
311 typedef GLvoid function() pfglXWaitX;
312
313 pfglXChooseFBConfig     glXChooseFBConfig;
314 pfglXChooseVisual       glXChooseVisual;
315 pfglXCopyContext        glXCopyContext;
316 pfglXCreateContext      glXCreateContext;
317 pfglXCreateGLXPixmap        glXCreateGLXPixmap;
318 pfglXCreateNewContext       glXCreateNewContext;
319 pfglXCreatePbuffer      glXCreatePbuffer;
320 pfglXCreatePixmap       glXCreatePixmap;
321 pfglXCreateWindow       glXCreateWindow;
322 pfglXDestroyContext     glXDestroyContext;
323 pfglXDestroyGLXPixmap       glXDestroyGLXPixmap;
324 pfglXDestroyPbuffer     glXDestroyPbuffer;
325 pfglXDestroyPixmap      glXDestroyPixmap;
326 pfglXDestroyWindow      glXDestroyWindow;
327 pfglXGetClientString        glXGetClientString;
328 pfglXGetConfig          glXGetConfig;
329 pfglXGetCurrentContext      glXGetCurrentContext;
330 pfglXGetCurrentDisplay      glXGetCurrentDisplay;
331 pfglXGetCurrentDrawable     glXGetCurrentDrawable;
332 pfglXGetCurrentReadDrawable glXGetCurrentReadDrawable;
333 pfglXGetFBConfigAttrib      glXGetFBConfigAttrib;
334 pfglXGetFBConfigs       glXGetFBConfigs;
335 pfglXGetSelectedEvent       glXGetSelectedEvent;
336 pfglXGetVisualFromFBConfig  glXGetVisualFromFBConfig;
337 pfglXIsDirect           glXIsDirect;
338 pfglXMakeContextCurrent     glXMakeContextCurrent;
339 pfglXMakeCurrent        glXMakeCurrent;
340 pfglXQueryContext       glXQueryContext;
341 pfglXQueryDrawable      glXQueryDrawable;
342 pfglXQueryExtension     glXQueryExtension;
343 pfglXQueryExtensionsString  glXQueryExtensionsString;
344 pfglXQueryServerString      glXQueryServerString;
345 pfglXQueryVersion       glXQueryVersion;
346 pfglXSelectEvent        glXSelectEvent;
347 pfglXSwapBuffers        glXSwapBuffers;
348 pfglXUseXFont           glXUseXFont;
349 pfglXWaitGL         glXWaitGL;
350 pfglXWaitX          glXWaitX;
351 }
Note: See TracBrowser for help on using the browser.