/*******************************************************************************
 * Copyright (c) 2000, 2003 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Common Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/cpl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.swt.opengl.internal.gtk;

import org.eclipse.swt.opengl.Library;

public class XGL {
	
static {
	Library.loadLibrary("gl");
}

public static final int GLX_VERSION_1_1 = 1;
public static final int GLX_VERSION_1_2 = 1;
public static final int GLX_VERSION_1_3 = 1;

/*
** Visual Config Attributes (glXGetConfig, glXGetFBConfigAttrib)
*/
public static final int GLX_USE_GL		= 1;	/* support GLX rendering */
public static final int GLX_BUFFER_SIZE		= 2;	/* depth of the color buffer */
public static final int GLX_LEVEL		= 3;	/* level in plane stacking */
public static final int GLX_RGBA		= 4;	/* true if RGBA mode */
public static final int GLX_DOUBLEBUFFER	= 5;	/* double buffering supported */
public static final int GLX_STEREO		= 6;	/* stereo buffering supported */
public static final int GLX_AUX_BUFFERS		= 7;	/* number of aux buffers */
public static final int GLX_RED_SIZE		= 8;	/* number of red component bits */
public static final int GLX_GREEN_SIZE		= 9;	/* number of green component bits */
public static final int GLX_BLUE_SIZE		= 10;	/* number of blue component bits */
public static final int GLX_ALPHA_SIZE		= 11;	/* number of alpha component bits */
public static final int GLX_DEPTH_SIZE		= 12;	/* number of depth bits */
public static final int GLX_STENCIL_SIZE	= 13;	/* number of stencil bits */
public static final int GLX_ACCUM_RED_SIZE	= 14;	/* number of red accum bits */
public static final int GLX_ACCUM_GREEN_SIZE	= 15;	/* number of green accum bits */
public static final int GLX_ACCUM_BLUE_SIZE	= 16;	/* number of blue accum bits */
public static final int GLX_ACCUM_ALPHA_SIZE	= 17;	/* number of alpha accum bits */
/*
** FBConfig-specific attributes
*/
public static final int GLX_X_VISUAL_TYPE		= 0x22;
public static final int GLX_CONFIG_CAVEAT		= 0x20;	/* Like visual_info VISUAL_CAVEAT_EXT */
public static final int GLX_TRANSPARENT_TYPE		= 0x23;
public static final int GLX_TRANSPARENT_INDEX_VALUE	= 0x24;
public static final int GLX_TRANSPARENT_RED_VALUE	= 0x25;
public static final int GLX_TRANSPARENT_GREEN_VALUE	= 0x26;
public static final int GLX_TRANSPARENT_BLUE_VALUE	= 0x27;
public static final int GLX_TRANSPARENT_ALPHA_VALUE	= 0x28;
public static final int GLX_DRAWABLE_TYPE		= 0x8010;
public static final int GLX_RENDER_TYPE			= 0x8011;
public static final int GLX_X_RENDERABLE		= 0x8012;
public static final int GLX_FBCONFIG_ID			= 0x8013;
public static final int GLX_MAX_PBUFFER_WIDTH		= 0x8016;
public static final int GLX_MAX_PBUFFER_HEIGHT		= 0x8017;
public static final int GLX_MAX_PBUFFER_PIXELS		= 0x8018;
public static final int GLX_VISUAL_ID			= 0x800B;

/*
** Error return values from glXGetConfig.  Success is indicated by
** a value of 0.
*/
public static final int GLX_BAD_SCREEN		= 1;	/* screen # is bad */
public static final int GLX_BAD_ATTRIBUTE	= 2;	/* attribute to get is bad */
public static final int GLX_NO_EXTENSION	= 3;	/* no glx extension on server */
public static final int GLX_BAD_VISUAL		= 4;	/* visual # not known by GLX */
public static final int GLX_BAD_CONTEXT		= 5;	/* returned only by import_context EXT? */
public static final int GLX_BAD_VALUE		= 6;	/* returned only by glXSwapIntervalSGI? */
public static final int GLX_BAD_ENUM		= 7;	/* unused? */

/* FBConfig attribute values */

/*
** Generic "don't care" value for glX ChooseFBConfig attributes (except
** GLX_LEVEL)
*/
public static final int GLX_DONT_CARE			= 0xFFFFFFFF;

/* GLX_RENDER_TYPE bits */
public static final int GLX_RGBA_BIT			= 0x00000001;
public static final int GLX_COLOR_INDEX_BIT		= 0x00000002;

/* GLX_DRAWABLE_TYPE bits */
public static final int GLX_WINDOW_BIT			= 0x00000001;
public static final int GLX_PIXMAP_BIT			= 0x00000002;
public static final int GLX_PBUFFER_BIT			= 0x00000004;

/* GLX_CONFIG_CAVEAT attribute values */
public static final int GLX_NONE			= 0x8000;
public static final int GLX_SLOW_CONFIG			= 0x8001;
public static final int GLX_NON_CONFORMANT_CONFIG	= 0x800D;

/* GLX_X_VISUAL_TYPE attribute values */
public static final int GLX_TRUE_COLOR			= 0x8002;
public static final int GLX_DIRECT_COLOR		= 0x8003;
public static final int GLX_PSEUDO_COLOR		= 0x8004;
public static final int GLX_STATIC_COLOR		= 0x8005;
public static final int GLX_GRAY_SCALE			= 0x8006;
public static final int GLX_STATIC_GRAY			= 0x8007;

/* GLX_TRANSPARENT_TYPE attribute values */
/* public static final int GLX_NONE			   0x8000 */
public static final int GLX_TRANSPARENT_RGB		= 0x8008;
public static final int GLX_TRANSPARENT_INDEX		= 0x8009;

/* glXCreateGLXPbuffer attributes */
public static final int GLX_PRESERVED_CONTENTS		= 0x801B;
public static final int GLX_LARGEST_PBUFFER		= 0x801C;
public static final int GLX_PBUFFER_HEIGHT		= 0x8040;	/* New for GLX 1.3 */
public static final int GLX_PBUFFER_WIDTH		= 0x8041;	/* New for GLX 1.3 */

/* glXQueryGLXPBuffer attributes */
public static final int GLX_WIDTH			= 0x801D;
public static final int GLX_HEIGHT			= 0x801E;
public static final int GLX_EVENT_MASK			= 0x801F;

/* glXCreateNewContext render_type attribute values */
public static final int GLX_RGBA_TYPE			= 0x8014;
public static final int GLX_COLOR_INDEX_TYPE		= 0x8015;

/* glXQueryContext attributes */
/* public static final int GLX_FBCONFIG_ID		  0x8013 */
/* public static final int GLX_RENDER_TYPE		  0x8011 */
public static final int GLX_SCREEN			= 0x800C;

/* glXSelectEvent event mask bits */
public static final int GLX_PBUFFER_CLOBBER_MASK	= 0x08000000;

/* GLXPbufferClobberEvent event_type values */
public static final int GLX_DAMAGED			= 0x8020;
public static final int GLX_SAVED			= 0x8021;

/* GLXPbufferClobberEvent draw_type values */
public static final int GLX_WINDOW			= 0x8022;
public static final int GLX_PBUFFER			= 0x8023;

/* GLXPbufferClobberEvent buffer_mask bits */
public static final int GLX_FRONT_LEFT_BUFFER_BIT	= 0x00000001;
public static final int GLX_FRONT_RIGHT_BUFFER_BIT	= 0x00000002;
public static final int GLX_BACK_LEFT_BUFFER_BIT	= 0x00000004;
public static final int GLX_BACK_RIGHT_BUFFER_BIT	= 0x00000008;
public static final int GLX_AUX_BUFFERS_BIT		= 0x00000010;
public static final int GLX_DEPTH_BUFFER_BIT		= 0x00000020;
public static final int GLX_STENCIL_BUFFER_BIT		= 0x00000040;
public static final int GLX_ACCUM_BUFFER_BIT		= 0x00000080;

/*
** Extension return values from glXGetConfig.  These are also
** accepted as parameter values for glXChooseVisual.
*/

public static final int GLX_X_VISUAL_TYPE_EXT	= 0x22;	/* visual_info extension type */
public static final int GLX_TRANSPARENT_TYPE_EXT = 0x23;	/* visual_info extension */
public static final int GLX_TRANSPARENT_INDEX_VALUE_EXT = 0x24;	/* visual_info extension */
public static final int GLX_TRANSPARENT_RED_VALUE_EXT	= 0x25;	/* visual_info extension */
public static final int GLX_TRANSPARENT_GREEN_VALUE_EXT = 0x26;	/* visual_info extension */
public static final int GLX_TRANSPARENT_BLUE_VALUE_EXT	= 0x27;	/* visual_info extension */
public static final int GLX_TRANSPARENT_ALPHA_VALUE_EXT = 0x28;	/* visual_info extension */

/* Property values for visual_type */
public static final int GLX_TRUE_COLOR_EXT	= 0x8002;
public static final int GLX_DIRECT_COLOR_EXT	= 0x8003;
public static final int GLX_PSEUDO_COLOR_EXT	= 0x8004;
public static final int GLX_STATIC_COLOR_EXT	= 0x8005;
public static final int GLX_GRAY_SCALE_EXT	= 0x8006;
public static final int GLX_STATIC_GRAY_EXT	= 0x8007;

/* Property values for transparent pixel */
public static final int GLX_NONE_EXT		= 0x8000;
public static final int GLX_TRANSPARENT_RGB_EXT		= 0x8008;
public static final int GLX_TRANSPARENT_INDEX_EXT	= 0x8009;

/* Property values for visual_rating */
public static final int GLX_VISUAL_CAVEAT_EXT		= 0x20;  /* visual_rating extension type */
public static final int GLX_SLOW_VISUAL_EXT		= 0x8001;
public static final int GLX_NON_CONFORMANT_VISUAL_EXT	= 0x800D;

/*
** Names for attributes to glXGetClientString.
*/
public static final int GLX_VENDOR		= 0x1;
public static final int GLX_VERSION		= 0x2;
public static final int GLX_EXTENSIONS		= 0x3;

/*
** Names for attributes to glXQueryContextInfoEXT.
*/
public static final int GLX_SHARE_CONTEXT_EXT	= 0x800A;	/* id of share context */
public static final int GLX_VISUAL_ID_EXT	= 0x800B;	/* id of context's visual */
public static final int GLX_SCREEN_EXT		= 0x800C;	/* screen number */

/* GLX Extension Strings */
public static final int GLX_EXT_import_context	= 1;
public static final int GLX_EXT_visual_info	= 1;
public static final int GLX_EXT_visual_rating	= 1;
public static final int GLX_ARB_get_proc_address = 1;

public static final native int glXChooseVisual(int dpy, int screen, int[] attribList);
public static final native void glXCopyContext(int dpy, int src, int dst, int mask);
//public static final native int glXCreateContext(int dpy, int vis, int shareList, boolean direct);
public static final native int glXCreateContext(int dpy, XVisualInfo vis, int shareList, boolean direct);
public static final native int glXCreateGLXPixmap(int dpy, XVisualInfo vis, int pixmap);
public static final native void glXDestroyContext(int dpy, int ctx);
public static final native void glXDestroyGLXPixmap(int dpy, int pix);
public static final native int glXGetConfig(int dpy, XVisualInfo vis, int attrib, int[] value);
public static final native int glXGetCurrentContext();
public static final native int glXGetCurrentDrawable();
public static final native boolean glXIsDirect(int dpy, int ctx);
public static final native boolean glXMakeCurrent(int dpy, int drawable, int ctx);
public static final native boolean glXQueryExtension(int dpy, int[] errorBase, int[] eventBase);
public static final native boolean glXQueryVersion(int dpy, int[] major, int[] minor);
public static final native void glXSwapBuffers(int dpy, int drawable);
public static final native void glXUseXFont(int font, int first, int count, int listBase);
public static final native void glXWaitGL();
public static final native void glXWaitX();
public static final native int glXGetClientString(int dpy, int name);
public static final native int glXQueryServerString(int dpy, int screen, int name);
public static final native int glXQueryExtensionsString(int dpy, int screen);
public static final native void memmove(XVisualInfo dest, int src, int size);
}
