/*******************************************************************************
 * 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.motif;

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);

}
