|
1 #ifndef __glx_h__ |
|
2 #define __glx_h__ |
|
3 |
|
4 /* |
|
5 ** The contents of this file are subject to the GLX Public License Version 1.0 |
|
6 ** (the "License"). You may not use this file except in compliance with the |
|
7 ** License. You may obtain a copy of the License at Silicon Graphics, Inc., |
|
8 ** attn: Legal Services, 2011 N. Shoreline Blvd., Mountain View, CA 94043 |
|
9 ** or at http://www.sgi.com/software/opensource/glx/license.html. |
|
10 ** |
|
11 ** Software distributed under the License is distributed on an "AS IS" |
|
12 ** basis. ALL WARRANTIES ARE DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY |
|
13 ** IMPLIED WARRANTIES OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR |
|
14 ** PURPOSE OR OF NON- INFRINGEMENT. See the License for the specific |
|
15 ** language governing rights and limitations under the License. |
|
16 ** |
|
17 ** The Original Software is GLX version 1.2 source code, released February, |
|
18 ** 1999. The developer of the Original Software is Silicon Graphics, Inc. |
|
19 ** Those portions of the Subject Software created by Silicon Graphics, Inc. |
|
20 ** are Copyright (c) 1991-9 Silicon Graphics, Inc. All Rights Reserved. |
|
21 ** |
|
22 ** $Header: //sw/main/drivers/OpenGL/win/glx/include/glx.h#21 $ |
|
23 */ |
|
24 |
|
25 #include <X11/Xlib.h> |
|
26 #include <X11/Xutil.h> |
|
27 #include <GL/gl.h> |
|
28 |
|
29 #ifdef __cplusplus |
|
30 extern "C" { |
|
31 #endif |
|
32 |
|
33 /* |
|
34 * Names for attributes to glXGetConfig. |
|
35 */ |
|
36 #define GLX_USE_GL 1 /* support GLX rendering */ |
|
37 #define GLX_BUFFER_SIZE 2 /* depth of the color buffer */ |
|
38 #define GLX_LEVEL 3 /* level in plane stacking */ |
|
39 #define GLX_RGBA 4 /* true if RGBA mode */ |
|
40 #define GLX_DOUBLEBUFFER 5 /* double buffering supported */ |
|
41 #define GLX_STEREO 6 /* stereo buffering supported */ |
|
42 #define GLX_AUX_BUFFERS 7 /* number of aux buffers */ |
|
43 #define GLX_RED_SIZE 8 /* number of red component bits */ |
|
44 #define GLX_GREEN_SIZE 9 /* number of green component bits */ |
|
45 #define GLX_BLUE_SIZE 10 /* number of blue component bits */ |
|
46 #define GLX_ALPHA_SIZE 11 /* number of alpha component bits */ |
|
47 #define GLX_DEPTH_SIZE 12 /* number of depth bits */ |
|
48 #define GLX_STENCIL_SIZE 13 /* number of stencil bits */ |
|
49 #define GLX_ACCUM_RED_SIZE 14 /* number of red accum bits */ |
|
50 #define GLX_ACCUM_GREEN_SIZE 15 /* number of green accum bits */ |
|
51 #define GLX_ACCUM_BLUE_SIZE 16 /* number of blue accum bits */ |
|
52 #define GLX_ACCUM_ALPHA_SIZE 17 /* number of alpha accum bits */ |
|
53 |
|
54 /* |
|
55 * Error return values from glXGetConfig. Success is indicated by |
|
56 * a value of 0. |
|
57 */ |
|
58 #define GLX_BAD_SCREEN 1 /* screen # is bad */ |
|
59 #define GLX_BAD_ATTRIBUTE 2 /* attribute to get is bad */ |
|
60 #define GLX_NO_EXTENSION 3 /* no glx extension on server */ |
|
61 #define GLX_BAD_VISUAL 4 /* visual # not known by GLX */ |
|
62 #define GLX_BAD_CONTEXT 5 |
|
63 #define GLX_BAD_VALUE 6 |
|
64 #define GLX_BAD_ENUM 7 |
|
65 |
|
66 /* |
|
67 * Names for attributes to glXGetClientString. |
|
68 */ |
|
69 #define GLX_VENDOR 0x1 |
|
70 #define GLX_VERSION 0x2 |
|
71 #define GLX_EXTENSIONS 0x3 |
|
72 |
|
73 #ifndef GLX_VERSION_1_3 |
|
74 #define GLX_WINDOW_BIT 0x00000001 |
|
75 #define GLX_PIXMAP_BIT 0x00000002 |
|
76 #define GLX_PBUFFER_BIT 0x00000004 |
|
77 #define GLX_RGBA_BIT 0x00000001 |
|
78 #define GLX_COLOR_INDEX_BIT 0x00000002 |
|
79 #define GLX_PBUFFER_CLOBBER_MASK 0x08000000 |
|
80 #define GLX_FRONT_LEFT_BUFFER_BIT 0x00000001 |
|
81 #define GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002 |
|
82 #define GLX_BACK_LEFT_BUFFER_BIT 0x00000004 |
|
83 #define GLX_BACK_RIGHT_BUFFER_BIT 0x00000008 |
|
84 #define GLX_AUX_BUFFERS_BIT 0x00000010 |
|
85 #define GLX_DEPTH_BUFFER_BIT 0x00000020 |
|
86 #define GLX_STENCIL_BUFFER_BIT 0x00000040 |
|
87 #define GLX_ACCUM_BUFFER_BIT 0x00000080 |
|
88 #define GLX_CONFIG_CAVEAT 0x20 |
|
89 #define GLX_X_VISUAL_TYPE 0x22 |
|
90 #define GLX_TRANSPARENT_TYPE 0x23 |
|
91 #define GLX_TRANSPARENT_INDEX_VALUE 0x24 |
|
92 #define GLX_TRANSPARENT_RED_VALUE 0x25 |
|
93 #define GLX_TRANSPARENT_GREEN_VALUE 0x26 |
|
94 #define GLX_TRANSPARENT_BLUE_VALUE 0x27 |
|
95 #define GLX_TRANSPARENT_ALPHA_VALUE 0x28 |
|
96 #define GLX_DONT_CARE 0xFFFFFFFF |
|
97 #define GLX_NONE 0x8000 |
|
98 #define GLX_SLOW_CONFIG 0x8001 |
|
99 #define GLX_TRUE_COLOR 0x8002 |
|
100 #define GLX_DIRECT_COLOR 0x8003 |
|
101 #define GLX_PSEUDO_COLOR 0x8004 |
|
102 #define GLX_STATIC_COLOR 0x8005 |
|
103 #define GLX_GRAY_SCALE 0x8006 |
|
104 #define GLX_STATIC_GRAY 0x8007 |
|
105 #define GLX_TRANSPARENT_RGB 0x8008 |
|
106 #define GLX_TRANSPARENT_INDEX 0x8009 |
|
107 #define GLX_VISUAL_ID 0x800B |
|
108 #define GLX_SCREEN 0x800C |
|
109 #define GLX_NON_CONFORMANT_CONFIG 0x800D |
|
110 #define GLX_DRAWABLE_TYPE 0x8010 |
|
111 #define GLX_RENDER_TYPE 0x8011 |
|
112 #define GLX_X_RENDERABLE 0x8012 |
|
113 #define GLX_FBCONFIG_ID 0x8013 |
|
114 #define GLX_RGBA_TYPE 0x8014 |
|
115 #define GLX_COLOR_INDEX_TYPE 0x8015 |
|
116 #define GLX_MAX_PBUFFER_WIDTH 0x8016 |
|
117 #define GLX_MAX_PBUFFER_HEIGHT 0x8017 |
|
118 #define GLX_MAX_PBUFFER_PIXELS 0x8018 |
|
119 #define GLX_PRESERVED_CONTENTS 0x801B |
|
120 #define GLX_LARGEST_PBUFFER 0x801C |
|
121 #define GLX_WIDTH 0x801D |
|
122 #define GLX_HEIGHT 0x801E |
|
123 #define GLX_EVENT_MASK 0x801F |
|
124 #define GLX_DAMAGED 0x8020 |
|
125 #define GLX_SAVED 0x8021 |
|
126 #define GLX_WINDOW 0x8022 |
|
127 #define GLX_PBUFFER 0x8023 |
|
128 #define GLX_PBUFFER_HEIGHT 0x8040 |
|
129 #define GLX_PBUFFER_WIDTH 0x8041 |
|
130 #endif |
|
131 |
|
132 #ifndef GLX_VERSION_1_4 |
|
133 #define GLX_SAMPLE_BUFFERS 0x186a0 |
|
134 #define GLX_SAMPLES 0x186a1 |
|
135 #endif |
|
136 |
|
137 #ifndef GLX_ARB_get_proc_address |
|
138 typedef void (*__GLXextFuncPtr)(void); |
|
139 #endif |
|
140 |
|
141 /* |
|
142 * GLX resources. |
|
143 */ |
|
144 typedef XID GLXContextID; |
|
145 typedef XID GLXPixmap; |
|
146 typedef XID GLXDrawable; |
|
147 typedef XID GLXPbuffer; |
|
148 typedef XID GLXWindow; |
|
149 typedef XID GLXFBConfigID; |
|
150 |
|
151 /* |
|
152 * GLXContext is a pointer to opaque data. |
|
153 */ |
|
154 typedef struct __GLXcontextRec *GLXContext; |
|
155 |
|
156 /* |
|
157 * GLXFBConfig is a pointer to opaque data. |
|
158 */ |
|
159 typedef struct __GLXFBConfigRec *GLXFBConfig; |
|
160 |
|
161 |
|
162 /**********************************************************************/ |
|
163 |
|
164 /* |
|
165 * GLX 1.0 functions. |
|
166 */ |
|
167 extern XVisualInfo* glXChooseVisual(Display *dpy, int screen, |
|
168 int *attrib_list); |
|
169 |
|
170 extern void glXCopyContext(Display *dpy, GLXContext src, |
|
171 GLXContext dst, unsigned long mask); |
|
172 |
|
173 extern GLXContext glXCreateContext(Display *dpy, XVisualInfo *vis, |
|
174 GLXContext share_list, Bool direct); |
|
175 |
|
176 extern GLXPixmap glXCreateGLXPixmap(Display *dpy, XVisualInfo *vis, |
|
177 Pixmap pixmap); |
|
178 |
|
179 extern void glXDestroyContext(Display *dpy, GLXContext ctx); |
|
180 |
|
181 extern void glXDestroyGLXPixmap(Display *dpy, GLXPixmap pix); |
|
182 |
|
183 extern int glXGetConfig(Display *dpy, XVisualInfo *vis, |
|
184 int attrib, int *value); |
|
185 |
|
186 extern GLXContext glXGetCurrentContext(void); |
|
187 |
|
188 extern GLXDrawable glXGetCurrentDrawable(void); |
|
189 |
|
190 extern Bool glXIsDirect(Display *dpy, GLXContext ctx); |
|
191 |
|
192 extern Bool glXMakeCurrent(Display *dpy, GLXDrawable drawable, |
|
193 GLXContext ctx); |
|
194 |
|
195 extern Bool glXQueryExtension(Display *dpy, int *error_base, int *event_base); |
|
196 |
|
197 extern Bool glXQueryVersion(Display *dpy, int *major, int *minor); |
|
198 |
|
199 extern void glXSwapBuffers(Display *dpy, GLXDrawable drawable); |
|
200 |
|
201 extern void glXUseXFont(Font font, int first, int count, int list_base); |
|
202 |
|
203 extern void glXWaitGL(void); |
|
204 |
|
205 extern void glXWaitX(void); |
|
206 |
|
207 |
|
208 #ifndef GLX_VERSION_1_1 |
|
209 #define GLX_VERSION_1_1 1 |
|
210 /* |
|
211 * GLX 1.1 functions. |
|
212 */ |
|
213 extern const char *glXGetClientString(Display *dpy, int name); |
|
214 |
|
215 extern const char *glXQueryServerString(Display *dpy, int screen, int name); |
|
216 |
|
217 extern const char *glXQueryExtensionsString(Display *dpy, int screen); |
|
218 #endif |
|
219 |
|
220 |
|
221 #ifndef GLX_VERSION_1_2 |
|
222 #define GLX_VERSION_1_2 1 |
|
223 /* |
|
224 * GLX 1.2 functions. |
|
225 */ |
|
226 extern Display *glXGetCurrentDisplay(void); |
|
227 #endif |
|
228 |
|
229 #ifndef GLX_VERSION_1_3 |
|
230 #define GLX_VERSION_1_3 1 |
|
231 /* |
|
232 * GLX 1.3 functions. |
|
233 */ |
|
234 extern GLXFBConfig *glXChooseFBConfig(Display *dpy, int screen, |
|
235 const int *attrib_list, int *nelements); |
|
236 |
|
237 extern GLXContext glXCreateNewContext(Display *dpy, GLXFBConfig config, |
|
238 int render_type, GLXContext share_list, |
|
239 Bool direct); |
|
240 |
|
241 extern GLXPbuffer glXCreatePbuffer(Display *dpy, GLXFBConfig config, |
|
242 const int *attrib_list); |
|
243 |
|
244 extern GLXPixmap glXCreatePixmap(Display *dpy, GLXFBConfig config, |
|
245 Pixmap pixmap, const int *attrib_list); |
|
246 |
|
247 extern GLXWindow glXCreateWindow(Display *dpy, GLXFBConfig config, |
|
248 Window win, const int *attrib_list); |
|
249 |
|
250 extern void glXDestroyPbuffer(Display *dpy, GLXPbuffer pbuf); |
|
251 |
|
252 extern void glXDestroyPixmap(Display *dpy, GLXPixmap pixmap); |
|
253 |
|
254 extern void glXDestroyWindow(Display *dpy, GLXWindow win); |
|
255 |
|
256 extern GLXDrawable glXGetCurrentReadDrawable(void); |
|
257 |
|
258 extern int glXGetFBConfigAttrib(Display *dpy, GLXFBConfig config, |
|
259 int attribute, int *value); |
|
260 |
|
261 extern GLXFBConfig *glXGetFBConfigs(Display *dpy, int screen, int *nelements); |
|
262 |
|
263 extern void glXGetSelectedEvent(Display *dpy, GLXDrawable draw, |
|
264 unsigned long *event_mask); |
|
265 |
|
266 extern XVisualInfo *glXGetVisualFromFBConfig(Display *dpy, GLXFBConfig config); |
|
267 |
|
268 extern Bool glXMakeContextCurrent(Display *display, GLXDrawable draw, |
|
269 GLXDrawable read, GLXContext ctx); |
|
270 |
|
271 extern int glXQueryContext(Display *dpy, GLXContext ctx, |
|
272 int attribute, int *value); |
|
273 |
|
274 extern void glXQueryDrawable(Display *dpy, GLXDrawable draw, |
|
275 int attribute, unsigned int *value); |
|
276 |
|
277 extern void glXSelectEvent(Display *dpy, GLXDrawable draw, |
|
278 unsigned long event_mask); |
|
279 |
|
280 typedef GLXFBConfig * ( * PFNGLXGETFBCONFIGSPROC) (Display *dpy, int screen, int *nelements); |
|
281 typedef GLXFBConfig * ( * PFNGLXCHOOSEFBCONFIGPROC) (Display *dpy, int screen, const int *attrib_list, int *nelements); |
|
282 typedef int ( * PFNGLXGETFBCONFIGATTRIBPROC) (Display *dpy, GLXFBConfig config, int attribute, int *value); |
|
283 typedef XVisualInfo * ( * PFNGLXGETVISUALFROMFBCONFIGPROC) (Display *dpy, GLXFBConfig config); |
|
284 typedef GLXWindow ( * PFNGLXCREATEWINDOWPROC) (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list); |
|
285 typedef void ( * PFNGLXDESTROYWINDOWPROC) (Display *dpy, GLXWindow win); |
|
286 typedef GLXPixmap ( * PFNGLXCREATEPIXMAPPROC) (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list); |
|
287 typedef void ( * PFNGLXDESTROYPIXMAPPROC) (Display *dpy, GLXPixmap pixmap); |
|
288 typedef GLXPbuffer ( * PFNGLXCREATEPBUFFERPROC) (Display *dpy, GLXFBConfig config, const int *attrib_list); |
|
289 typedef void ( * PFNGLXDESTROYPBUFFERPROC) (Display *dpy, GLXPbuffer pbuf); |
|
290 typedef void ( * PFNGLXQUERYDRAWABLEPROC) (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value); |
|
291 typedef GLXContext ( * PFNGLXCREATENEWCONTEXTPROC) (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct); |
|
292 typedef Bool ( * PFNGLXMAKECONTEXTCURRENTPROC) (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); |
|
293 typedef GLXDrawable ( * PFNGLXGETCURRENTREADDRAWABLEPROC) (void); |
|
294 typedef Display * ( * PFNGLXGETCURRENTDISPLAYPROC) (void); |
|
295 typedef int ( * PFNGLXQUERYCONTEXTPROC) (Display *dpy, GLXContext ctx, int attribute, int *value); |
|
296 typedef void ( * PFNGLXSELECTEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long event_mask); |
|
297 typedef void ( * PFNGLXGETSELECTEDEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long *event_mask); |
|
298 #endif |
|
299 |
|
300 |
|
301 #ifndef GLX_VERSION_1_4 |
|
302 #define GLX_VERSION_1_4 1 |
|
303 /* |
|
304 * GLX 1.4 functions and typedefs. |
|
305 */ |
|
306 extern __GLXextFuncPtr glXGetProcAddress (const GLubyte *); |
|
307 typedef __GLXextFuncPtr ( * PFNGLXGETPROCADDRESSPROC) (const GLubyte *procName); |
|
308 #endif |
|
309 |
|
310 |
|
311 |
|
312 /**********************************************************************/ |
|
313 |
|
314 /* |
|
315 * ARB_get_proc_address |
|
316 */ |
|
317 #ifndef GLX_ARB_get_proc_address |
|
318 #define GLX_ARB_get_proc_address 1 |
|
319 /* Don't wrap this in GLX_GLXEXT_PROTOTYPES! */ |
|
320 extern void (*glXGetProcAddressARB(const GLubyte *procName))(void); |
|
321 typedef __GLXextFuncPtr ( * PFNGLXGETPROCADDRESSARBPROC) (const GLubyte *procName); |
|
322 #endif |
|
323 |
|
324 /**********************************************************************/ |
|
325 |
|
326 /*** Should these go here, or in another header? */ |
|
327 /* |
|
328 * GLX Events |
|
329 */ |
|
330 typedef struct { |
|
331 int event_type; /* GLX_DAMAGED or GLX_SAVED */ |
|
332 int draw_type; /* GLX_WINDOW or GLX_PBUFFER */ |
|
333 unsigned long serial; /* # of last request processed by server */ |
|
334 Bool send_event; /* true if this came for SendEvent request */ |
|
335 Display *display; /* display the event was read from */ |
|
336 GLXDrawable drawable; /* XID of Drawable */ |
|
337 unsigned int buffer_mask; /* mask indicating which buffers are affected */ |
|
338 unsigned int aux_buffer; /* which aux buffer was affected */ |
|
339 int x, y; |
|
340 int width, height; |
|
341 int count; /* if nonzero, at least this many more */ |
|
342 } GLXPbufferClobberEvent; |
|
343 |
|
344 typedef union __GLXEvent { |
|
345 GLXPbufferClobberEvent glxpbufferclobber; |
|
346 long pad[24]; |
|
347 } GLXEvent; |
|
348 |
|
349 #ifndef GLX_GLXEXT_LEGACY |
|
350 #include <GL/glxext.h> |
|
351 #endif |
|
352 |
|
353 #ifdef __cplusplus |
|
354 } |
|
355 #endif |
|
356 |
|
357 #endif /* !__glx_h__ */ |