< prev index next >

src/java.desktop/unix/native/common/java2d/opengl/J2D_GL/glx.h

Print this page

        

@@ -20,22 +20,20 @@
  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
 
-/* $Id: glx.h,v 1.38 2002/10/14 13:52:27 brianp Exp $ */
 
 /*
  * This file is available under and governed by the GNU General Public
  * License version 2 only, as published by the Free Software Foundation.
  * However, the following notice accompanied the original version of this
  * file:
  *
  * Mesa 3-D graphics library
- * Version:  4.1
  *
- * Copyright (C) 1999-2002  Brian Paul   All Rights Reserved.
+ * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
  * to deal in the Software without restriction, including without limitation
  * the rights to use, copy, modify, merge, publish, distribute, sublicense,

@@ -46,45 +44,30 @@
  * in all copies or substantial portions of the Software.
  *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
  */
 
 
 #ifndef GLX_H
 #define GLX_H
 
 
-#ifdef __VMS
-#include <GL/vms_x_fix.h>
-# ifdef __cplusplus
-/* VMS Xlib.h gives problems with C++.
- * this avoids a bunch of trivial warnings */
-#pragma message disable nosimpint
-#endif
-#endif
 #include <X11/Xlib.h>
 #include <X11/Xutil.h>
-#ifdef __VMS
-# ifdef __cplusplus
-#pragma message enable nosimpint
-#endif
-#endif
-
-/* modified for inclusion in Java 2D source tree */
-/* #include <GL/gl.h> */
+/* JDK modification of include path to be sure to pick up the correct file */
 #include "J2D_GL/gl.h"
 
-/*
+
 #if defined(USE_MGL_NAMESPACE)
-#include <GL/glx_mangle.h>
+#include "glx_mangle.h"
 #endif
-*/
 
 
 #ifdef __cplusplus
 extern "C" {
 #endif

@@ -144,30 +127,17 @@
 /*
  * GLX 1.3 and later:
  */
 #define GLX_CONFIG_CAVEAT               0x20
 #define GLX_DONT_CARE                   0xFFFFFFFF
-#define GLX_SLOW_CONFIG                 0x8001
-#define GLX_NON_CONFORMANT_CONFIG       0x800D
 #define GLX_X_VISUAL_TYPE               0x22
 #define GLX_TRANSPARENT_TYPE            0x23
 #define GLX_TRANSPARENT_INDEX_VALUE     0x24
 #define GLX_TRANSPARENT_RED_VALUE       0x25
 #define GLX_TRANSPARENT_GREEN_VALUE     0x26
 #define GLX_TRANSPARENT_BLUE_VALUE      0x27
 #define GLX_TRANSPARENT_ALPHA_VALUE     0x28
-#define GLX_MAX_PBUFFER_WIDTH           0x8016
-#define GLX_MAX_PBUFFER_HEIGHT          0x8017
-#define GLX_MAX_PBUFFER_PIXELS          0x8018
-#define GLX_PRESERVED_CONTENTS          0x801B
-#define GLX_LARGEST_PBUFFER             0x801C
-#define GLX_WIDTH                       0x801D
-#define GLX_HEIGHT                      0x801E
-#define GLX_EVENT_MASK                  0x801F
-#define GLX_DRAWABLE_TYPE               0x8010
-#define GLX_FBCONFIG_ID                 0x8013
-#define GLX_VISUAL_ID                   0x800B
 #define GLX_WINDOW_BIT                  0x00000001
 #define GLX_PIXMAP_BIT                  0x00000002
 #define GLX_PBUFFER_BIT                 0x00000004
 #define GLX_AUX_BUFFERS_BIT             0x00000010
 #define GLX_FRONT_LEFT_BUFFER_BIT       0x00000001

@@ -175,44 +145,47 @@
 #define GLX_BACK_LEFT_BUFFER_BIT        0x00000004
 #define GLX_BACK_RIGHT_BUFFER_BIT       0x00000008
 #define GLX_DEPTH_BUFFER_BIT            0x00000020
 #define GLX_STENCIL_BUFFER_BIT          0x00000040
 #define GLX_ACCUM_BUFFER_BIT            0x00000080
-#define GLX_DRAWABLE_TYPE               0x8010
-#define GLX_RENDER_TYPE                 0x8011
-#define GLX_X_RENDERABLE                0x8012
 #define GLX_NONE                        0x8000
+#define GLX_SLOW_CONFIG                 0x8001
 #define GLX_TRUE_COLOR                  0x8002
 #define GLX_DIRECT_COLOR                0x8003
 #define GLX_PSEUDO_COLOR                0x8004
 #define GLX_STATIC_COLOR                0x8005
 #define GLX_GRAY_SCALE                  0x8006
 #define GLX_STATIC_GRAY                 0x8007
 #define GLX_TRANSPARENT_RGB             0x8008
 #define GLX_TRANSPARENT_INDEX           0x8009
+#define GLX_VISUAL_ID                   0x800B
+#define GLX_SCREEN                      0x800C
+#define GLX_NON_CONFORMANT_CONFIG       0x800D
+#define GLX_DRAWABLE_TYPE               0x8010
+#define GLX_RENDER_TYPE                 0x8011
+#define GLX_X_RENDERABLE                0x8012
+#define GLX_FBCONFIG_ID                 0x8013
 #define GLX_RGBA_TYPE                   0x8014
 #define GLX_COLOR_INDEX_TYPE            0x8015
-#define GLX_COLOR_INDEX_BIT             0x00000002
-#define GLX_RGBA_BIT                    0x00000001
-#define GLX_SCREEN                      0x800C
-#define GLX_PBUFFER_CLOBBER_MASK        0x08000000
+#define GLX_MAX_PBUFFER_WIDTH           0x8016
+#define GLX_MAX_PBUFFER_HEIGHT          0x8017
+#define GLX_MAX_PBUFFER_PIXELS          0x8018
+#define GLX_PRESERVED_CONTENTS          0x801B
+#define GLX_LARGEST_PBUFFER             0x801C
+#define GLX_WIDTH                       0x801D
+#define GLX_HEIGHT                      0x801E
+#define GLX_EVENT_MASK                  0x801F
 #define GLX_DAMAGED                     0x8020
 #define GLX_SAVED                       0x8021
 #define GLX_WINDOW                      0x8022
 #define GLX_PBUFFER                     0x8023
-
-/**
- * REMIND: these values are backwards from Sun's OpenGL headers, so we
- *         swap them here if building on Solaris/Sparc
- */
-#ifdef __sparc
-#define GLX_PBUFFER_HEIGHT              0x8041
-#define GLX_PBUFFER_WIDTH               0x8040
-#else /* __sparc */
 #define GLX_PBUFFER_HEIGHT              0x8040
 #define GLX_PBUFFER_WIDTH               0x8041
-#endif /* __sparc */
+#define GLX_RGBA_BIT                    0x00000001
+#define GLX_COLOR_INDEX_BIT             0x00000002
+#define GLX_PBUFFER_CLOBBER_MASK        0x08000000
+
 
 /*
  * GLX 1.4 and later:
  */
 #define GLX_SAMPLE_BUFFERS              0x186a0 /*100000*/

@@ -229,10 +202,20 @@
 typedef XID GLXContextID;
 typedef XID GLXWindow;
 typedef XID GLXPbuffer;
 
 
+/*
+** Events.
+** __GLX_NUMBER_EVENTS is set to 17 to account for the BufferClobberSGIX
+**  event - this helps initialization if the server supports the pbuffer
+**  extension and the client doesn't.
+*/
+#define GLX_PbufferClobber      0
+#define GLX_BufferSwapComplete  1
+
+#define __GLX_NUMBER_EVENTS 17
 
 extern XVisualInfo* glXChooseVisual( Display *dpy, int screen,
                                      int *attribList );
 
 extern GLXContext glXCreateContext( Display *dpy, XVisualInfo *vis,

@@ -333,204 +316,162 @@
                             unsigned long mask );
 
 extern void glXGetSelectedEvent( Display *dpy, GLXDrawable drawable,
                                  unsigned long *mask );
 
-
-/* GLX 1.4 and later */
-extern void (*glXGetProcAddress(const GLubyte *procname))();
-
-
-#ifndef GLX_GLXEXT_LEGACY
-
-/* modified for inclusion in Java 2D source tree */
-/* #include <GL/glxext.h> */
-#include "J2D_GL/glxext.h"
-
-#else
+/* GLX 1.3 function pointer typedefs */
+typedef GLXFBConfig * (* PFNGLXGETFBCONFIGSPROC) (Display *dpy, int screen, int *nelements);
+typedef GLXFBConfig * (* PFNGLXCHOOSEFBCONFIGPROC) (Display *dpy, int screen, const int *attrib_list, int *nelements);
+typedef int (* PFNGLXGETFBCONFIGATTRIBPROC) (Display *dpy, GLXFBConfig config, int attribute, int *value);
+typedef XVisualInfo * (* PFNGLXGETVISUALFROMFBCONFIGPROC) (Display *dpy, GLXFBConfig config);
+typedef GLXWindow (* PFNGLXCREATEWINDOWPROC) (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list);
+typedef void (* PFNGLXDESTROYWINDOWPROC) (Display *dpy, GLXWindow win);
+typedef GLXPixmap (* PFNGLXCREATEPIXMAPPROC) (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list);
+typedef void (* PFNGLXDESTROYPIXMAPPROC) (Display *dpy, GLXPixmap pixmap);
+typedef GLXPbuffer (* PFNGLXCREATEPBUFFERPROC) (Display *dpy, GLXFBConfig config, const int *attrib_list);
+typedef void (* PFNGLXDESTROYPBUFFERPROC) (Display *dpy, GLXPbuffer pbuf);
+typedef void (* PFNGLXQUERYDRAWABLEPROC) (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value);
+typedef GLXContext (* PFNGLXCREATENEWCONTEXTPROC) (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct);
+typedef Bool (* PFNGLXMAKECONTEXTCURRENTPROC) (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
+typedef GLXDrawable (* PFNGLXGETCURRENTREADDRAWABLEPROC) (void);
+typedef Display * (* PFNGLXGETCURRENTDISPLAYPROC) (void);
+typedef int (* PFNGLXQUERYCONTEXTPROC) (Display *dpy, GLXContext ctx, int attribute, int *value);
+typedef void (* PFNGLXSELECTEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long event_mask);
+typedef void (* PFNGLXGETSELECTEDEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long *event_mask);
 
 
 /*
- * 28. GLX_EXT_visual_info extension
- */
-#ifndef GLX_EXT_visual_info
-#define GLX_EXT_visual_info             1
-
-#define GLX_X_VISUAL_TYPE_EXT           0x22
-#define GLX_TRANSPARENT_TYPE_EXT        0x23
-#define GLX_TRANSPARENT_INDEX_VALUE_EXT 0x24
-#define GLX_TRANSPARENT_RED_VALUE_EXT   0x25
-#define GLX_TRANSPARENT_GREEN_VALUE_EXT 0x26
-#define GLX_TRANSPARENT_BLUE_VALUE_EXT  0x27
-#define GLX_TRANSPARENT_ALPHA_VALUE_EXT 0x28
-#define GLX_TRUE_COLOR_EXT              0x8002
-#define GLX_DIRECT_COLOR_EXT            0x8003
-#define GLX_PSEUDO_COLOR_EXT            0x8004
-#define GLX_STATIC_COLOR_EXT            0x8005
-#define GLX_GRAY_SCALE_EXT              0x8006
-#define GLX_STATIC_GRAY_EXT             0x8007
-#define GLX_NONE_EXT                    0x8000
-#define GLX_TRANSPARENT_RGB_EXT         0x8008
-#define GLX_TRANSPARENT_INDEX_EXT       0x8009
-
-#endif /* 28. GLX_EXT_visual_info extension */
-
-
-
-/*
- * 41. GLX_SGI_video_sync
- */
-#ifndef GLX_SGI_video_sync
-#define GLX_SGI_video_sync 1
-
-extern int glXGetVideoSyncSGI(unsigned int *count);
-extern int glXWaitVideoSyncSGI(int divisor, int remainder, unsigned int *count);
-
-#endif /* GLX_SGI_video_sync */
-
-
-
-/*
- * 42. GLX_EXT_visual_rating
- */
-#ifndef GLX_EXT_visual_rating
-#define GLX_EXT_visual_rating           1
-
-#define GLX_VISUAL_CAVEAT_EXT           0x20
-/*#define GLX_NONE_EXT                  0x8000*/
-#define GLX_SLOW_VISUAL_EXT             0x8001
-#define GLX_NON_CONFORMANT_VISUAL_EXT   0x800D
-
-#endif /* GLX_EXT_visual_rating */
-
-
-
-/*
- * 47. GLX_EXT_import_context
+ * ARB 2. GLX_ARB_get_proc_address
  */
-#ifndef GLX_EXT_import_context
-#define GLX_EXT_import_context 1
-
-#define GLX_SHARE_CONTEXT_EXT           0x800A
-#define GLX_VISUAL_ID_EXT               0x800B
-#define GLX_SCREEN_EXT                  0x800C
-
-extern void glXFreeContextEXT(Display *dpy, GLXContext context);
-
-extern GLXContextID glXGetContextIDEXT(const GLXContext context);
-
-extern Display *glXGetCurrentDisplayEXT(void);
-
-extern GLXContext glXImportContextEXT(Display *dpy, GLXContextID contextID);
+#ifndef GLX_ARB_get_proc_address
+#define GLX_ARB_get_proc_address 1
 
-extern int glXQueryContextInfoEXT(Display *dpy, GLXContext context,
-                                  int attribute,int *value);
+typedef void (*__GLXextFuncPtr)(void);
+extern __GLXextFuncPtr glXGetProcAddressARB (const GLubyte *);
 
-#endif /* GLX_EXT_import_context */
+#endif /* GLX_ARB_get_proc_address */
 
 
 
-/*
- * 215. GLX_MESA_copy_sub_buffer
- */
-#ifndef GLX_MESA_copy_sub_buffer
-#define GLX_MESA_copy_sub_buffer 1
-
-extern void glXCopySubBufferMESA( Display *dpy, GLXDrawable drawable,
-                                  int x, int y, int width, int height );
+/* GLX 1.4 and later */
+extern void (*glXGetProcAddress(const GLubyte *procname))( void );
 
-#endif
+/* GLX 1.4 function pointer typedefs */
+typedef __GLXextFuncPtr (* PFNGLXGETPROCADDRESSPROC) (const GLubyte *procName);
 
 
+#ifndef GLX_GLXEXT_LEGACY
 
-/*
- * 216. GLX_MESA_pixmap_colormap
- */
-#ifndef GLX_MESA_pixmap_colormap
-#define GLX_MESA_pixmap_colormap 1
+/* JDK modification of include path to be sure to pick up the correct file */
+#include "J2D_GL/glxext.h"
 
-extern GLXPixmap glXCreateGLXPixmapMESA( Display *dpy, XVisualInfo *visual,
-                                         Pixmap pixmap, Colormap cmap );
+#endif /* GLX_GLXEXT_LEGACY */
 
-#endif /* GLX_MESA_pixmap_colormap */
 
+/**
+ ** The following aren't in glxext.h yet.
+ **/
 
 
 /*
- * 217. GLX_MESA_release_buffers
+ * ???. GLX_NV_vertex_array_range
  */
-#ifndef GLX_MESA_release_buffers
-#define GLX_MESA_release_buffers 1
-
-extern Bool glXReleaseBuffersMESA( Display *dpy, GLXDrawable d );
+#ifndef GLX_NV_vertex_array_range
+#define GLX_NV_vertex_array_range
 
-#endif /* GLX_MESA_release_buffers */
+extern void *glXAllocateMemoryNV(GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);
+extern void glXFreeMemoryNV(GLvoid *pointer);
+typedef void * ( * PFNGLXALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);
+typedef void ( * PFNGLXFREEMEMORYNVPROC) (GLvoid *pointer);
 
+#endif /* GLX_NV_vertex_array_range */
 
 
 /*
- * 218. GLX_MESA_set_3dfx_mode
+ * ARB ?. GLX_ARB_render_texture
+ * XXX This was never finalized!
  */
-#ifndef GLX_MESA_set_3dfx_mode
-#define GLX_MESA_set_3dfx_mode 1
-
-#define GLX_3DFX_WINDOW_MODE_MESA       0x1
-#define GLX_3DFX_FULLSCREEN_MODE_MESA   0x2
+#ifndef GLX_ARB_render_texture
+#define GLX_ARB_render_texture 1
 
-extern Bool glXSet3DfxModeMESA( int mode );
-
-#endif /* GLX_MESA_set_3dfx_mode */
+extern Bool glXBindTexImageARB(Display *dpy, GLXPbuffer pbuffer, int buffer);
+extern Bool glXReleaseTexImageARB(Display *dpy, GLXPbuffer pbuffer, int buffer);
+extern Bool glXDrawableAttribARB(Display *dpy, GLXDrawable draw, const int *attribList);
 
+#endif /* GLX_ARB_render_texture */
 
 
 /*
- * ARB 2. GLX_ARB_get_proc_address
+ * #?. GLX_MESA_swap_frame_usage
  */
-#ifndef GLX_ARB_get_proc_address
-#define GLX_ARB_get_proc_address 1
+#ifndef GLX_MESA_swap_frame_usage
+#define GLX_MESA_swap_frame_usage 1
 
-extern void (*glXGetProcAddressARB(const GLubyte *procName))();
+extern int glXGetFrameUsageMESA(Display *dpy, GLXDrawable drawable, float *usage);
+extern int glXBeginFrameTrackingMESA(Display *dpy, GLXDrawable drawable);
+extern int glXEndFrameTrackingMESA(Display *dpy, GLXDrawable drawable);
+extern int glXQueryFrameTrackingMESA(Display *dpy, GLXDrawable drawable, int64_t *swapCount, int64_t *missedFrames, float *lastMissedUsage);
 
-#endif /* GLX_ARB_get_proc_address */
+typedef int (*PFNGLXGETFRAMEUSAGEMESAPROC) (Display *dpy, GLXDrawable drawable, float *usage);
+typedef int (*PFNGLXBEGINFRAMETRACKINGMESAPROC)(Display *dpy, GLXDrawable drawable);
+typedef int (*PFNGLXENDFRAMETRACKINGMESAPROC)(Display *dpy, GLXDrawable drawable);
+typedef int (*PFNGLXQUERYFRAMETRACKINGMESAPROC)(Display *dpy, GLXDrawable drawable, int64_t *swapCount, int64_t *missedFrames, float *lastMissedUsage);
 
+#endif /* GLX_MESA_swap_frame_usage */
 
 
-#endif /* GLX_GLXEXT_LEGACY */
-
-
-/**
- ** The following aren't in glxext.h yet.
- **/
-
 
 /*
- * ???. GLX_NV_vertex_array_range
+ * #?. GLX_MESA_swap_control
  */
-#ifndef GLX_NV_vertex_array_range
-#define GLX_NV_vertex_array_range
+#ifndef GLX_MESA_swap_control
+#define GLX_MESA_swap_control 1
 
-extern void *glXAllocateMemoryNV(GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);
-extern void glXFreeMemoryNV(GLvoid *pointer);
-typedef void * ( * PFNGLXALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);
-typedef void ( * PFNGLXFREEMEMORYNVPROC) (GLvoid *pointer);
+extern int glXSwapIntervalMESA(unsigned int interval);
+extern int glXGetSwapIntervalMESA(void);
 
-#endif /* GLX_NV_vertex_array_range */
+typedef int (*PFNGLXSWAPINTERVALMESAPROC)(unsigned int interval);
+typedef int (*PFNGLXGETSWAPINTERVALMESAPROC)(void);
 
+#endif /* GLX_MESA_swap_control */
 
 
+/*** Should these go here, or in another header? */
 /*
- * ???. GLX_MESA_agp_offset
- */
-#ifndef GLX_MESA_agp_offset
-#define GLX_MESA_agp_offset 1
-
-extern GLuint glXGetAGPOffsetMESA(const GLvoid *pointer);
-typedef GLuint (* PFNGLXGETAGPOFFSETMESAPROC) (const GLvoid *pointer);
-
-#endif /* GLX_MESA_agp_offset */
-
-
+** GLX Events
+*/
+typedef struct {
+    int event_type;             /* GLX_DAMAGED or GLX_SAVED */
+    int draw_type;              /* GLX_WINDOW or GLX_PBUFFER */
+    unsigned long serial;       /* # of last request processed by server */
+    Bool send_event;            /* true if this came for SendEvent request */
+    Display *display;           /* display the event was read from */
+    GLXDrawable drawable;       /* XID of Drawable */
+    unsigned int buffer_mask;   /* mask indicating which buffers are affected */
+    unsigned int aux_buffer;    /* which aux buffer was affected */
+    int x, y;
+    int width, height;
+    int count;                  /* if nonzero, at least this many more */
+} GLXPbufferClobberEvent;
+
+typedef struct {
+    int type;
+    unsigned long serial;       /* # of last request processed by server */
+    Bool send_event;            /* true if this came from a SendEvent request */
+    Display *display;           /* Display the event was read from */
+    Drawable drawable;  /* drawable on which event was requested in event mask */
+    int event_type;
+    int64_t ust;
+    int64_t msc;
+    int64_t sbc;
+} GLXBufferSwapComplete;
+
+typedef union __GLXEvent {
+    GLXPbufferClobberEvent glxpbufferclobber;
+    GLXBufferSwapComplete glxbufferswapcomplete;
+    long pad[24];
+} GLXEvent;
 
 #ifdef __cplusplus
 }
 #endif
 
< prev index next >