1 /*
   2  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   3  *
   4  * This code is free software; you can redistribute it and/or modify it
   5  * under the terms of the GNU General Public License version 2 only, as
   6  * published by the Free Software Foundation.  Oracle designates this
   7  * particular file as subject to the "Classpath" exception as provided
   8  * by Oracle in the LICENSE file that accompanied this code.
   9  *
  10  * This code is distributed in the hope that it will be useful, but WITHOUT
  11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  13  * version 2 for more details (a copy is included in the LICENSE file that
  14  * accompanied this code).
  15  *
  16  * You should have received a copy of the GNU General Public License version
  17  * 2 along with this work; if not, write to the Free Software Foundation,
  18  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  19  *
  20  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  21  * or visit www.oracle.com if you need additional information or have any
  22  * questions.
  23  */
  24 
  25 
  26 /*
  27  * This file is available under and governed by the GNU General Public
  28  * License version 2 only, as published by the Free Software Foundation.
  29  * However, the following notice accompanied the original version of this
  30  * file:
  31  *
  32  * Mesa 3-D graphics library
  33  *
  34  * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.
  35  *
  36  * Permission is hereby granted, free of charge, to any person obtaining a
  37  * copy of this software and associated documentation files (the "Software"),
  38  * to deal in the Software without restriction, including without limitation
  39  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  40  * and/or sell copies of the Software, and to permit persons to whom the
  41  * Software is furnished to do so, subject to the following conditions:
  42  *
  43  * The above copyright notice and this permission notice shall be included
  44  * in all copies or substantial portions of the Software.
  45  *
  46  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  47  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  48  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  49  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
  50  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  51  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  52  * OTHER DEALINGS IN THE SOFTWARE.
  53  */
  54 
  55 
  56 #ifndef GLX_H
  57 #define GLX_H
  58 
  59 
  60 #include <X11/Xlib.h>
  61 #include <X11/Xutil.h>
  62 /* JDK modification of include path to be sure to pick up the correct file */
  63 #include "J2D_GL/gl.h"
  64 
  65 
  66 #if defined(USE_MGL_NAMESPACE)
  67 #include "glx_mangle.h"
  68 #endif
  69 
  70 
  71 #ifdef __cplusplus
  72 extern "C" {
  73 #endif
  74 
  75 
  76 #define GLX_VERSION_1_1         1
  77 #define GLX_VERSION_1_2         1
  78 #define GLX_VERSION_1_3         1
  79 #define GLX_VERSION_1_4         1
  80 
  81 #define GLX_EXTENSION_NAME   "GLX"
  82 
  83 
  84 
  85 /*
  86  * Tokens for glXChooseVisual and glXGetConfig:
  87  */
  88 #define GLX_USE_GL              1
  89 #define GLX_BUFFER_SIZE         2
  90 #define GLX_LEVEL               3
  91 #define GLX_RGBA                4
  92 #define GLX_DOUBLEBUFFER        5
  93 #define GLX_STEREO              6
  94 #define GLX_AUX_BUFFERS         7
  95 #define GLX_RED_SIZE            8
  96 #define GLX_GREEN_SIZE          9
  97 #define GLX_BLUE_SIZE           10
  98 #define GLX_ALPHA_SIZE          11
  99 #define GLX_DEPTH_SIZE          12
 100 #define GLX_STENCIL_SIZE        13
 101 #define GLX_ACCUM_RED_SIZE      14
 102 #define GLX_ACCUM_GREEN_SIZE    15
 103 #define GLX_ACCUM_BLUE_SIZE     16
 104 #define GLX_ACCUM_ALPHA_SIZE    17
 105 
 106 
 107 /*
 108  * Error codes returned by glXGetConfig:
 109  */
 110 #define GLX_BAD_SCREEN          1
 111 #define GLX_BAD_ATTRIBUTE       2
 112 #define GLX_NO_EXTENSION        3
 113 #define GLX_BAD_VISUAL          4
 114 #define GLX_BAD_CONTEXT         5
 115 #define GLX_BAD_VALUE           6
 116 #define GLX_BAD_ENUM            7
 117 
 118 
 119 /*
 120  * GLX 1.1 and later:
 121  */
 122 #define GLX_VENDOR              1
 123 #define GLX_VERSION             2
 124 #define GLX_EXTENSIONS          3
 125 
 126 
 127 /*
 128  * GLX 1.3 and later:
 129  */
 130 #define GLX_CONFIG_CAVEAT               0x20
 131 #define GLX_DONT_CARE                   0xFFFFFFFF
 132 #define GLX_X_VISUAL_TYPE               0x22
 133 #define GLX_TRANSPARENT_TYPE            0x23
 134 #define GLX_TRANSPARENT_INDEX_VALUE     0x24
 135 #define GLX_TRANSPARENT_RED_VALUE       0x25
 136 #define GLX_TRANSPARENT_GREEN_VALUE     0x26
 137 #define GLX_TRANSPARENT_BLUE_VALUE      0x27
 138 #define GLX_TRANSPARENT_ALPHA_VALUE     0x28
 139 #define GLX_WINDOW_BIT                  0x00000001
 140 #define GLX_PIXMAP_BIT                  0x00000002
 141 #define GLX_PBUFFER_BIT                 0x00000004
 142 #define GLX_AUX_BUFFERS_BIT             0x00000010
 143 #define GLX_FRONT_LEFT_BUFFER_BIT       0x00000001
 144 #define GLX_FRONT_RIGHT_BUFFER_BIT      0x00000002
 145 #define GLX_BACK_LEFT_BUFFER_BIT        0x00000004
 146 #define GLX_BACK_RIGHT_BUFFER_BIT       0x00000008
 147 #define GLX_DEPTH_BUFFER_BIT            0x00000020
 148 #define GLX_STENCIL_BUFFER_BIT          0x00000040
 149 #define GLX_ACCUM_BUFFER_BIT            0x00000080
 150 #define GLX_NONE                        0x8000
 151 #define GLX_SLOW_CONFIG                 0x8001
 152 #define GLX_TRUE_COLOR                  0x8002
 153 #define GLX_DIRECT_COLOR                0x8003
 154 #define GLX_PSEUDO_COLOR                0x8004
 155 #define GLX_STATIC_COLOR                0x8005
 156 #define GLX_GRAY_SCALE                  0x8006
 157 #define GLX_STATIC_GRAY                 0x8007
 158 #define GLX_TRANSPARENT_RGB             0x8008
 159 #define GLX_TRANSPARENT_INDEX           0x8009
 160 #define GLX_VISUAL_ID                   0x800B
 161 #define GLX_SCREEN                      0x800C
 162 #define GLX_NON_CONFORMANT_CONFIG       0x800D
 163 #define GLX_DRAWABLE_TYPE               0x8010
 164 #define GLX_RENDER_TYPE                 0x8011
 165 #define GLX_X_RENDERABLE                0x8012
 166 #define GLX_FBCONFIG_ID                 0x8013
 167 #define GLX_RGBA_TYPE                   0x8014
 168 #define GLX_COLOR_INDEX_TYPE            0x8015
 169 #define GLX_MAX_PBUFFER_WIDTH           0x8016
 170 #define GLX_MAX_PBUFFER_HEIGHT          0x8017
 171 #define GLX_MAX_PBUFFER_PIXELS          0x8018
 172 #define GLX_PRESERVED_CONTENTS          0x801B
 173 #define GLX_LARGEST_PBUFFER             0x801C
 174 #define GLX_WIDTH                       0x801D
 175 #define GLX_HEIGHT                      0x801E
 176 #define GLX_EVENT_MASK                  0x801F
 177 #define GLX_DAMAGED                     0x8020
 178 #define GLX_SAVED                       0x8021
 179 #define GLX_WINDOW                      0x8022
 180 #define GLX_PBUFFER                     0x8023
 181 #define GLX_PBUFFER_HEIGHT              0x8040
 182 #define GLX_PBUFFER_WIDTH               0x8041
 183 #define GLX_RGBA_BIT                    0x00000001
 184 #define GLX_COLOR_INDEX_BIT             0x00000002
 185 #define GLX_PBUFFER_CLOBBER_MASK        0x08000000
 186 
 187 
 188 /*
 189  * GLX 1.4 and later:
 190  */
 191 #define GLX_SAMPLE_BUFFERS              0x186a0 /*100000*/
 192 #define GLX_SAMPLES                     0x186a1 /*100001*/
 193 
 194 
 195 
 196 typedef struct __GLXcontextRec *GLXContext;
 197 typedef XID GLXPixmap;
 198 typedef XID GLXDrawable;
 199 /* GLX 1.3 and later */
 200 typedef struct __GLXFBConfigRec *GLXFBConfig;
 201 typedef XID GLXFBConfigID;
 202 typedef XID GLXContextID;
 203 typedef XID GLXWindow;
 204 typedef XID GLXPbuffer;
 205 
 206 
 207 /*
 208 ** Events.
 209 ** __GLX_NUMBER_EVENTS is set to 17 to account for the BufferClobberSGIX
 210 **  event - this helps initialization if the server supports the pbuffer
 211 **  extension and the client doesn't.
 212 */
 213 #define GLX_PbufferClobber      0
 214 #define GLX_BufferSwapComplete  1
 215 
 216 #define __GLX_NUMBER_EVENTS 17
 217 
 218 extern XVisualInfo* glXChooseVisual( Display *dpy, int screen,
 219                                      int *attribList );
 220 
 221 extern GLXContext glXCreateContext( Display *dpy, XVisualInfo *vis,
 222                                     GLXContext shareList, Bool direct );
 223 
 224 extern void glXDestroyContext( Display *dpy, GLXContext ctx );
 225 
 226 extern Bool glXMakeCurrent( Display *dpy, GLXDrawable drawable,
 227                             GLXContext ctx);
 228 
 229 extern void glXCopyContext( Display *dpy, GLXContext src, GLXContext dst,
 230                             unsigned long mask );
 231 
 232 extern void glXSwapBuffers( Display *dpy, GLXDrawable drawable );
 233 
 234 extern GLXPixmap glXCreateGLXPixmap( Display *dpy, XVisualInfo *visual,
 235                                      Pixmap pixmap );
 236 
 237 extern void glXDestroyGLXPixmap( Display *dpy, GLXPixmap pixmap );
 238 
 239 extern Bool glXQueryExtension( Display *dpy, int *errorb, int *event );
 240 
 241 extern Bool glXQueryVersion( Display *dpy, int *maj, int *min );
 242 
 243 extern Bool glXIsDirect( Display *dpy, GLXContext ctx );
 244 
 245 extern int glXGetConfig( Display *dpy, XVisualInfo *visual,
 246                          int attrib, int *value );
 247 
 248 extern GLXContext glXGetCurrentContext( void );
 249 
 250 extern GLXDrawable glXGetCurrentDrawable( void );
 251 
 252 extern void glXWaitGL( void );
 253 
 254 extern void glXWaitX( void );
 255 
 256 extern void glXUseXFont( Font font, int first, int count, int list );
 257 
 258 
 259 
 260 /* GLX 1.1 and later */
 261 extern const char *glXQueryExtensionsString( Display *dpy, int screen );
 262 
 263 extern const char *glXQueryServerString( Display *dpy, int screen, int name );
 264 
 265 extern const char *glXGetClientString( Display *dpy, int name );
 266 
 267 
 268 /* GLX 1.2 and later */
 269 extern Display *glXGetCurrentDisplay( void );
 270 
 271 
 272 /* GLX 1.3 and later */
 273 extern GLXFBConfig *glXChooseFBConfig( Display *dpy, int screen,
 274                                        const int *attribList, int *nitems );
 275 
 276 extern int glXGetFBConfigAttrib( Display *dpy, GLXFBConfig config,
 277                                  int attribute, int *value );
 278 
 279 extern GLXFBConfig *glXGetFBConfigs( Display *dpy, int screen,
 280                                      int *nelements );
 281 
 282 extern XVisualInfo *glXGetVisualFromFBConfig( Display *dpy,
 283                                               GLXFBConfig config );
 284 
 285 extern GLXWindow glXCreateWindow( Display *dpy, GLXFBConfig config,
 286                                   Window win, const int *attribList );
 287 
 288 extern void glXDestroyWindow( Display *dpy, GLXWindow window );
 289 
 290 extern GLXPixmap glXCreatePixmap( Display *dpy, GLXFBConfig config,
 291                                   Pixmap pixmap, const int *attribList );
 292 
 293 extern void glXDestroyPixmap( Display *dpy, GLXPixmap pixmap );
 294 
 295 extern GLXPbuffer glXCreatePbuffer( Display *dpy, GLXFBConfig config,
 296                                     const int *attribList );
 297 
 298 extern void glXDestroyPbuffer( Display *dpy, GLXPbuffer pbuf );
 299 
 300 extern void glXQueryDrawable( Display *dpy, GLXDrawable draw, int attribute,
 301                               unsigned int *value );
 302 
 303 extern GLXContext glXCreateNewContext( Display *dpy, GLXFBConfig config,
 304                                        int renderType, GLXContext shareList,
 305                                        Bool direct );
 306 
 307 extern Bool glXMakeContextCurrent( Display *dpy, GLXDrawable draw,
 308                                    GLXDrawable read, GLXContext ctx );
 309 
 310 extern GLXDrawable glXGetCurrentReadDrawable( void );
 311 
 312 extern int glXQueryContext( Display *dpy, GLXContext ctx, int attribute,
 313                             int *value );
 314 
 315 extern void glXSelectEvent( Display *dpy, GLXDrawable drawable,
 316                             unsigned long mask );
 317 
 318 extern void glXGetSelectedEvent( Display *dpy, GLXDrawable drawable,
 319                                  unsigned long *mask );
 320 
 321 /* GLX 1.3 function pointer typedefs */
 322 typedef GLXFBConfig * (* PFNGLXGETFBCONFIGSPROC) (Display *dpy, int screen, int *nelements);
 323 typedef GLXFBConfig * (* PFNGLXCHOOSEFBCONFIGPROC) (Display *dpy, int screen, const int *attrib_list, int *nelements);
 324 typedef int (* PFNGLXGETFBCONFIGATTRIBPROC) (Display *dpy, GLXFBConfig config, int attribute, int *value);
 325 typedef XVisualInfo * (* PFNGLXGETVISUALFROMFBCONFIGPROC) (Display *dpy, GLXFBConfig config);
 326 typedef GLXWindow (* PFNGLXCREATEWINDOWPROC) (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list);
 327 typedef void (* PFNGLXDESTROYWINDOWPROC) (Display *dpy, GLXWindow win);
 328 typedef GLXPixmap (* PFNGLXCREATEPIXMAPPROC) (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list);
 329 typedef void (* PFNGLXDESTROYPIXMAPPROC) (Display *dpy, GLXPixmap pixmap);
 330 typedef GLXPbuffer (* PFNGLXCREATEPBUFFERPROC) (Display *dpy, GLXFBConfig config, const int *attrib_list);
 331 typedef void (* PFNGLXDESTROYPBUFFERPROC) (Display *dpy, GLXPbuffer pbuf);
 332 typedef void (* PFNGLXQUERYDRAWABLEPROC) (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value);
 333 typedef GLXContext (* PFNGLXCREATENEWCONTEXTPROC) (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct);
 334 typedef Bool (* PFNGLXMAKECONTEXTCURRENTPROC) (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
 335 typedef GLXDrawable (* PFNGLXGETCURRENTREADDRAWABLEPROC) (void);
 336 typedef Display * (* PFNGLXGETCURRENTDISPLAYPROC) (void);
 337 typedef int (* PFNGLXQUERYCONTEXTPROC) (Display *dpy, GLXContext ctx, int attribute, int *value);
 338 typedef void (* PFNGLXSELECTEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long event_mask);
 339 typedef void (* PFNGLXGETSELECTEDEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long *event_mask);
 340 
 341 
 342 /*
 343  * ARB 2. GLX_ARB_get_proc_address
 344  */
 345 #ifndef GLX_ARB_get_proc_address
 346 #define GLX_ARB_get_proc_address 1
 347 
 348 typedef void (*__GLXextFuncPtr)(void);
 349 extern __GLXextFuncPtr glXGetProcAddressARB (const GLubyte *);
 350 
 351 #endif /* GLX_ARB_get_proc_address */
 352 
 353 
 354 
 355 /* GLX 1.4 and later */
 356 extern void (*glXGetProcAddress(const GLubyte *procname))( void );
 357 
 358 /* GLX 1.4 function pointer typedefs */
 359 typedef __GLXextFuncPtr (* PFNGLXGETPROCADDRESSPROC) (const GLubyte *procName);
 360 
 361 
 362 #ifndef GLX_GLXEXT_LEGACY
 363 
 364 /* JDK modification of include path to be sure to pick up the correct file */
 365 #include "J2D_GL/glxext.h"
 366 
 367 #endif /* GLX_GLXEXT_LEGACY */
 368 
 369 
 370 /**
 371  ** The following aren't in glxext.h yet.
 372  **/
 373 
 374 
 375 /*
 376  * ???. GLX_NV_vertex_array_range
 377  */
 378 #ifndef GLX_NV_vertex_array_range
 379 #define GLX_NV_vertex_array_range
 380 
 381 extern void *glXAllocateMemoryNV(GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);
 382 extern void glXFreeMemoryNV(GLvoid *pointer);
 383 typedef void * ( * PFNGLXALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);
 384 typedef void ( * PFNGLXFREEMEMORYNVPROC) (GLvoid *pointer);
 385 
 386 #endif /* GLX_NV_vertex_array_range */
 387 
 388 
 389 /*
 390  * ARB ?. GLX_ARB_render_texture
 391  * XXX This was never finalized!
 392  */
 393 #ifndef GLX_ARB_render_texture
 394 #define GLX_ARB_render_texture 1
 395 
 396 extern Bool glXBindTexImageARB(Display *dpy, GLXPbuffer pbuffer, int buffer);
 397 extern Bool glXReleaseTexImageARB(Display *dpy, GLXPbuffer pbuffer, int buffer);
 398 extern Bool glXDrawableAttribARB(Display *dpy, GLXDrawable draw, const int *attribList);
 399 
 400 #endif /* GLX_ARB_render_texture */
 401 
 402 
 403 /*
 404  * #?. GLX_MESA_swap_frame_usage
 405  */
 406 #ifndef GLX_MESA_swap_frame_usage
 407 #define GLX_MESA_swap_frame_usage 1
 408 
 409 extern int glXGetFrameUsageMESA(Display *dpy, GLXDrawable drawable, float *usage);
 410 extern int glXBeginFrameTrackingMESA(Display *dpy, GLXDrawable drawable);
 411 extern int glXEndFrameTrackingMESA(Display *dpy, GLXDrawable drawable);
 412 extern int glXQueryFrameTrackingMESA(Display *dpy, GLXDrawable drawable, int64_t *swapCount, int64_t *missedFrames, float *lastMissedUsage);
 413 
 414 typedef int (*PFNGLXGETFRAMEUSAGEMESAPROC) (Display *dpy, GLXDrawable drawable, float *usage);
 415 typedef int (*PFNGLXBEGINFRAMETRACKINGMESAPROC)(Display *dpy, GLXDrawable drawable);
 416 typedef int (*PFNGLXENDFRAMETRACKINGMESAPROC)(Display *dpy, GLXDrawable drawable);
 417 typedef int (*PFNGLXQUERYFRAMETRACKINGMESAPROC)(Display *dpy, GLXDrawable drawable, int64_t *swapCount, int64_t *missedFrames, float *lastMissedUsage);
 418 
 419 #endif /* GLX_MESA_swap_frame_usage */
 420 
 421 
 422 
 423 /*
 424  * #?. GLX_MESA_swap_control
 425  */
 426 #ifndef GLX_MESA_swap_control
 427 #define GLX_MESA_swap_control 1
 428 
 429 extern int glXSwapIntervalMESA(unsigned int interval);
 430 extern int glXGetSwapIntervalMESA(void);
 431 
 432 typedef int (*PFNGLXSWAPINTERVALMESAPROC)(unsigned int interval);
 433 typedef int (*PFNGLXGETSWAPINTERVALMESAPROC)(void);
 434 
 435 #endif /* GLX_MESA_swap_control */
 436 
 437 
 438 /*** Should these go here, or in another header? */
 439 /*
 440 ** GLX Events
 441 */
 442 typedef struct {
 443     int event_type;             /* GLX_DAMAGED or GLX_SAVED */
 444     int draw_type;              /* GLX_WINDOW or GLX_PBUFFER */
 445     unsigned long serial;       /* # of last request processed by server */
 446     Bool send_event;            /* true if this came for SendEvent request */
 447     Display *display;           /* display the event was read from */
 448     GLXDrawable drawable;       /* XID of Drawable */
 449     unsigned int buffer_mask;   /* mask indicating which buffers are affected */
 450     unsigned int aux_buffer;    /* which aux buffer was affected */
 451     int x, y;
 452     int width, height;
 453     int count;                  /* if nonzero, at least this many more */
 454 } GLXPbufferClobberEvent;
 455 
 456 typedef struct {
 457     int type;
 458     unsigned long serial;       /* # of last request processed by server */
 459     Bool send_event;            /* true if this came from a SendEvent request */
 460     Display *display;           /* Display the event was read from */
 461     Drawable drawable;  /* drawable on which event was requested in event mask */
 462     int event_type;
 463     int64_t ust;
 464     int64_t msc;
 465     int64_t sbc;
 466 } GLXBufferSwapComplete;
 467 
 468 typedef union __GLXEvent {
 469     GLXPbufferClobberEvent glxpbufferclobber;
 470     GLXBufferSwapComplete glxbufferswapcomplete;
 471     long pad[24];
 472 } GLXEvent;
 473 
 474 #ifdef __cplusplus
 475 }
 476 #endif
 477 
 478 #endif