diff options
author | Grant Gayed <ggayed> | 2003-07-10 20:41:12 +0000 |
---|---|---|
committer | Grant Gayed <ggayed> | 2003-07-10 20:41:12 +0000 |
commit | 2bffa3862a37be63a266d84772815ad0cccee5d1 (patch) | |
tree | 9a9d9850e027e6ba1bddb5cde89079cef035ed0a | |
parent | 949a243710db76895ae62e7e3836ee5ccd5921de (diff) | |
download | eclipse.platform.swt-2bffa3862a37be63a266d84772815ad0cccee5d1.tar.gz eclipse.platform.swt-2bffa3862a37be63a266d84772815ad0cccee5d1.tar.xz eclipse.platform.swt-2bffa3862a37be63a266d84772815ad0cccee5d1.zip |
initial
71 files changed, 13910 insertions, 0 deletions
diff --git a/bundles/org.eclipse.swt.opengl/.classpath_gtk b/bundles/org.eclipse.swt.opengl/.classpath_gtk new file mode 100644 index 0000000000..35d4c3497a --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/.classpath_gtk @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="var" path="JRE_LIB" rootpath="JRE_SRCROOT" sourcepath="JRE_SRC"/> + <classpathentry kind="src" path="common"/> + <classpathentry kind="src" path="gtk"/> + <classpathentry kind="src" path="/org.eclipse.swt"/> + <classpathentry kind="output" path="bin"/> +</classpath> diff --git a/bundles/org.eclipse.swt.opengl/.classpath_motif b/bundles/org.eclipse.swt.opengl/.classpath_motif new file mode 100644 index 0000000000..6f974c1516 --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/.classpath_motif @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="var" path="JRE_LIB" rootpath="JRE_SRCROOT" sourcepath="JRE_SRC"/> + <classpathentry kind="src" path="common"/> + <classpathentry kind="src" path="motif"/> + <classpathentry kind="src" path="/org.eclipse.swt"/> + <classpathentry kind="output" path="bin"/> +</classpath> diff --git a/bundles/org.eclipse.swt.opengl/.classpath_win32 b/bundles/org.eclipse.swt.opengl/.classpath_win32 new file mode 100644 index 0000000000..30299c85da --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/.classpath_win32 @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="var" path="JRE_LIB" rootpath="JRE_SRCROOT" sourcepath="JRE_SRC"/> + <classpathentry kind="src" path="common"/> + <classpathentry kind="src" path="win32"/> + <classpathentry kind="src" path="/org.eclipse.swt"/> + <classpathentry kind="output" path="bin"/> +</classpath> diff --git a/bundles/org.eclipse.swt.opengl/.cvsignore b/bundles/org.eclipse.swt.opengl/.cvsignore new file mode 100644 index 0000000000..661113b158 --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/.cvsignore @@ -0,0 +1,3 @@ +bin +.classpath +ws diff --git a/bundles/org.eclipse.swt.opengl/.project b/bundles/org.eclipse.swt.opengl/.project new file mode 100644 index 0000000000..577537ae64 --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/.project @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>org.eclipse.swt.opengl</name> + <comment></comment> + <projects> + <project>org.eclipse.swt</project> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.ManifestBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.SchemaBuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.jdt.core.javanature</nature> + <nature>org.eclipse.pde.PluginNature</nature> + <nature>org.eclipse.team.cvs.core.cvsnature</nature> + </natures> +</projectDescription> diff --git a/bundles/org.eclipse.swt.opengl/about.html b/bundles/org.eclipse.swt.opengl/about.html new file mode 100644 index 0000000000..9db411aab9 --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/about.html @@ -0,0 +1,30 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> +<html> +<head> +<title>About</title> +<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1"> +</head> +<body lang="EN-US"> +<h2>About This Content</h2> + +<p>20th June, 2002</p> +<h3>License</h3> +<p>Eclipse.org makes available all content in this plug-in ("Content"). Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the +Common Public License Version 1.0 ("CPL"). A copy of the CPL is available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>. +For purposes of the CPL, "Program" will mean the Content.</p> + +<h3>Contributions</h3> + +<p>If this Content is licensed to you under the terms and conditions of the CPL, any Contributions, as defined in the CPL, uploaded, submitted, or otherwise +made available to Eclipse.org, members of Eclipse.org and/or the host of Eclipse.org web site, by you that relate to such +Content are provided under the terms and conditions of the CPL and can be made available to others under the terms of the CPL.</p> + +<p>If this Content is licensed to you under license terms and conditions other than the CPL ("Other License"), any modifications, enhancements and/or +other code and/or documentation ("Modifications") uploaded, submitted, or otherwise made available to Eclipse.org, members of Eclipse.org and/or the +host of Eclipse.org, by you that relate to such Content are provided under terms and conditions of the Other License and can be made available +to others under the terms of the Other License. In addition, with regard to Modifications for which you are the copyright holder, you are also +providing the Modifications under the terms and conditions of the CPL and such Modifications can be made available to others under the terms of +the CPL.</p> + +</body> +</html>
\ No newline at end of file diff --git a/bundles/org.eclipse.swt.opengl/common/gl_library/gl.c b/bundles/org.eclipse.swt.opengl/common/gl_library/gl.c new file mode 100644 index 0000000000..fac5d6a4a1 --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/common/gl_library/gl.c @@ -0,0 +1,3342 @@ +/*******************************************************************************
+ * 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
+ *******************************************************************************/
+#ifdef WIN32
+#include <windows.h>
+#endif
+#include <GL/gl.h>
+#include "swt.h"
+
+#define GL_NATIVE(func) Java_org_eclipse_swt_opengl_GL_##func
+
+JNIEXPORT void JNICALL GL_NATIVE(glAccum)
+ (JNIEnv *env, jclass that, jint arg0, jfloat arg1)
+{
+ DEBUG_CALL("glAccum\n")
+
+ glAccum(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glAlphaFunc)
+ (JNIEnv *env, jclass that, jint arg0, jfloat arg1)
+{
+ DEBUG_CALL("glAlphaFunc\n")
+
+ glAlphaFunc(arg0, arg1);
+}
+
+JNIEXPORT jboolean JNICALL GL_NATIVE(glAreTexturesResident)
+ (JNIEnv *env, jclass that, jint arg0, jintArray arg1, jbooleanArray arg2)
+{
+ jint *lparg1=NULL;
+ jboolean *lparg2=NULL;
+ jboolean rc;
+
+ DEBUG_CALL("glAreTexturesResident\n")
+
+ if (arg1) lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL);
+ if (arg2) lparg2 = (*env)->GetBooleanArrayElements(env, arg2, NULL);
+ rc = (jboolean)glAreTexturesResident(arg0, (unsigned int *)lparg1, lparg2);
+ if (arg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
+ if (arg2) (*env)->ReleaseBooleanArrayElements(env, arg2, lparg2, 0);
+ return rc;
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glArrayElement)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glArrayElement\n")
+
+ glArrayElement(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glBegin)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glBegin\n")
+
+ glBegin(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glBindTexture)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+ DEBUG_CALL("glBindTexture\n")
+
+ glBindTexture(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glBitmap)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jfloat arg2, jfloat arg3, jfloat arg4, jfloat arg5, jbyteArray arg6)
+{
+ jbyte *lparg6=NULL;
+
+ DEBUG_CALL("glBitmap\n")
+
+ if (arg6) lparg6 = (*env)->GetByteArrayElements(env, arg6, NULL);
+ glBitmap(arg0, arg1, arg2, arg3, arg4, arg5, (unsigned char *)lparg6);
+ if (arg6) (*env)->ReleaseByteArrayElements(env, arg6, lparg6, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glBlendFunc)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+ DEBUG_CALL("glBlendFunc\n")
+
+ glBlendFunc(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glCallList)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glCallList\n")
+
+ glCallList(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glCallLists__II_3B)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jbyteArray arg2)
+{
+ jbyte *lparg2=NULL;
+
+ DEBUG_CALL("glCallLists__II_3B\n")
+
+ if (arg2) lparg2 = (*env)->GetByteArrayElements(env, arg2, NULL);
+ glCallLists(arg0, arg1, lparg2);
+ if (arg2) (*env)->ReleaseByteArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glCallLists__II_3C)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jcharArray arg2)
+{
+ jchar *lparg2=NULL;
+
+ DEBUG_CALL("glCallLists__II_3C\n")
+
+ if (arg2) lparg2 = (*env)->GetCharArrayElements(env, arg2, NULL);
+ glCallLists(arg0, arg1, lparg2);
+ if (arg2) (*env)->ReleaseCharArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glCallLists__II_3I)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
+{
+ jint *lparg2=NULL;
+
+ DEBUG_CALL("glCallLists__II_3I\n")
+
+ if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
+ glCallLists(arg0, arg1, lparg2);
+ if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glClear)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glClear\n")
+
+ glClear(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glClearAccum)
+ (JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2, jfloat arg3)
+{
+ DEBUG_CALL("glClearAccum\n")
+
+ glClearAccum(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glClearColor)
+ (JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2, jfloat arg3)
+{
+ DEBUG_CALL("glClearColor\n")
+
+ glClearColor(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glClearDepth)
+ (JNIEnv *env, jclass that, jdouble arg0)
+{
+ DEBUG_CALL("glClearDepth\n")
+
+ glClearDepth(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glClearIndex)
+ (JNIEnv *env, jclass that, jfloat arg0)
+{
+ DEBUG_CALL("glClearIndex\n")
+
+ glClearIndex(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glClearStencil)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glClearStencil\n")
+
+ glClearStencil(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glClipPlane)
+ (JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1)
+{
+ jdouble *lparg1=NULL;
+
+ DEBUG_CALL("glClipPlane\n")
+
+ if (arg1) lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL);
+ glClipPlane(arg0, lparg1);
+ if (arg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor3b)
+ (JNIEnv *env, jclass that, jbyte arg0, jbyte arg1, jbyte arg2)
+{
+ DEBUG_CALL("glColor3b\n")
+
+ glColor3b(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor3bv)
+ (JNIEnv *env, jclass that, jbyteArray arg0)
+{
+ jbyte *lparg0=NULL;
+
+ DEBUG_CALL("glColor3bv\n")
+
+ if (arg0) lparg0 = (*env)->GetByteArrayElements(env, arg0, NULL);
+ glColor3bv(lparg0);
+ if (arg0) (*env)->ReleaseByteArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor3d)
+ (JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2)
+{
+ DEBUG_CALL("glColor3d\n")
+
+ glColor3d(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor3dv)
+ (JNIEnv *env, jclass that, jdoubleArray arg0)
+{
+ jdouble *lparg0=NULL;
+
+ DEBUG_CALL("glColor3dv\n")
+
+ if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
+ glColor3dv(lparg0);
+ if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor3f)
+ (JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2)
+{
+ DEBUG_CALL("glColor3f\n")
+
+ glColor3f(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor3fv)
+ (JNIEnv *env, jclass that, jfloatArray arg0)
+{
+ jfloat *lparg0=NULL;
+
+ DEBUG_CALL("glColor3fv\n")
+
+ if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
+ glColor3fv(lparg0);
+ if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor3i)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+ DEBUG_CALL("glColor3i\n")
+
+ glColor3i(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor3iv)
+ (JNIEnv *env, jclass that, jintArray arg0)
+{
+ jint *lparg0=NULL;
+
+ DEBUG_CALL("glColor3iv\n")
+
+ if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
+ glColor3iv((GLint *)lparg0);
+ if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor3s)
+ (JNIEnv *env, jclass that, jshort arg0, jshort arg1, jshort arg2)
+{
+ DEBUG_CALL("glColor3s\n")
+
+ glColor3s(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor3ub)
+ (JNIEnv *env, jclass that, jbyte arg0, jbyte arg1, jbyte arg2)
+{
+ DEBUG_CALL("glColor3ub\n")
+
+ glColor3ub(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor3ubv)
+ (JNIEnv *env, jclass that, jbyteArray arg0)
+{
+ jbyte *lparg0=NULL;
+
+ DEBUG_CALL("glColor3ubv\n")
+
+ if (arg0) lparg0 = (*env)->GetByteArrayElements(env, arg0, NULL);
+ glColor3ubv((unsigned char *)lparg0);
+ if (arg0) (*env)->ReleaseByteArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor3ui)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+ DEBUG_CALL("glColor3ui\n")
+
+ glColor3ui(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor3uiv)
+ (JNIEnv *env, jclass that, jintArray arg0)
+{
+ jint *lparg0=NULL;
+
+ DEBUG_CALL("glColor3uiv\n")
+
+ if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
+ glColor3uiv((unsigned int *)lparg0);
+ if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor3us)
+ (JNIEnv *env, jclass that, jshort arg0, jshort arg1, jshort arg2)
+{
+ DEBUG_CALL("glColor3us\n")
+
+ glColor3us(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor3usv)
+ (JNIEnv *env, jclass that, jshortArray arg0)
+{
+ jshort *lparg0=NULL;
+
+ DEBUG_CALL("glColor3usv\n")
+
+ if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
+ glColor3usv((unsigned short *)lparg0);
+ if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor4b)
+ (JNIEnv *env, jclass that, jbyte arg0, jbyte arg1, jbyte arg2, jbyte arg3)
+{
+ DEBUG_CALL("glColor4b\n")
+
+ glColor4b(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor4bv)
+ (JNIEnv *env, jclass that, jbyteArray arg0)
+{
+ jbyte *lparg0=NULL;
+
+ DEBUG_CALL("glColor4bv\n")
+
+ if (arg0) lparg0 = (*env)->GetByteArrayElements(env, arg0, NULL);
+ glColor4bv(lparg0);
+ if (arg0) (*env)->ReleaseByteArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor4d)
+ (JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3)
+{
+ DEBUG_CALL("glColor4d\n")
+
+ glColor4d(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor4dv)
+ (JNIEnv *env, jclass that, jdoubleArray arg0)
+{
+ jdouble *lparg0=NULL;
+
+ DEBUG_CALL("glColor4dv\n")
+
+ if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
+ glColor4dv(lparg0);
+ if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor4f)
+ (JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2, jfloat arg3)
+{
+ DEBUG_CALL("glColor4f\n")
+
+ glColor4f(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor4fv)
+ (JNIEnv *env, jclass that, jfloatArray arg0)
+{
+ jfloat *lparg0=NULL;
+
+ DEBUG_CALL("glColor4fv\n")
+
+ if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
+ glColor4fv(lparg0);
+ if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor4i)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
+{
+ DEBUG_CALL("glColor4i\n")
+
+ glColor4i(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor4iv)
+ (JNIEnv *env, jclass that, jintArray arg0)
+{
+ jint *lparg0=NULL;
+
+ DEBUG_CALL("glColor4iv\n")
+
+ if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
+ glColor4iv((GLint *)lparg0);
+ if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor4s)
+ (JNIEnv *env, jclass that, jshort arg0, jshort arg1, jshort arg2, jshort arg3)
+{
+ DEBUG_CALL("glColor4s\n")
+
+ glColor4s(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor4ub)
+ (JNIEnv *env, jclass that, jbyte arg0, jbyte arg1, jbyte arg2, jbyte arg3)
+{
+ DEBUG_CALL("glColor4ub\n")
+
+ glColor4ub(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor4ubv)
+ (JNIEnv *env, jclass that, jbyteArray arg0)
+{
+ jbyte *lparg0=NULL;
+
+ DEBUG_CALL("glColor4ubv\n")
+
+ if (arg0) lparg0 = (*env)->GetByteArrayElements(env, arg0, NULL);
+ glColor4ubv((unsigned char *)lparg0);
+ if (arg0) (*env)->ReleaseByteArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor4ui)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
+{
+ DEBUG_CALL("glColor4ui\n")
+
+ glColor4ui(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor4uiv)
+ (JNIEnv *env, jclass that, jintArray arg0)
+{
+ jint *lparg0=NULL;
+
+ DEBUG_CALL("glColor4uiv\n")
+
+ if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
+ glColor4uiv((unsigned int *)lparg0);
+ if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor4us)
+ (JNIEnv *env, jclass that, jshort arg0, jshort arg1, jshort arg2, jshort arg3)
+{
+ DEBUG_CALL("glColor4us\n")
+
+ glColor4us(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColor4usv)
+ (JNIEnv *env, jclass that, jshortArray arg0)
+{
+ jshort *lparg0=NULL;
+
+ DEBUG_CALL("glColor4usv\n")
+
+ if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
+ glColor4usv((unsigned short *)lparg0);
+ if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColorMask)
+ (JNIEnv *env, jclass that, jboolean arg0, jboolean arg1, jboolean arg2, jboolean arg3)
+{
+ DEBUG_CALL("glColorMask\n")
+
+ glColorMask(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColorMaterial)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+ DEBUG_CALL("glColorMaterial\n")
+
+ glColorMaterial(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glColorPointer)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jintArray arg3)
+{
+ jint *lparg3=NULL;
+
+ DEBUG_CALL("glColorPointer\n")
+
+ if (arg3) lparg3 = (*env)->GetIntArrayElements(env, arg3, NULL);
+ glColorPointer(arg0, arg1, arg2, lparg3);
+ if (arg3) (*env)->ReleaseIntArrayElements(env, arg3, lparg3, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glCopyPixels)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4)
+{
+ DEBUG_CALL("glCopyPixels\n")
+
+ glCopyPixels(arg0, arg1, arg2, arg3, arg4);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glCopyTexImage1D)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5, jint arg6)
+{
+ DEBUG_CALL("glCopyTexImage1D\n")
+
+ glCopyTexImage1D(arg0, arg1, arg2, arg3, arg4, arg5, arg6);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glCopyTexImage2D)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5, jint arg6, jint arg7)
+{
+ DEBUG_CALL("glCopyTexImage2D\n")
+
+ glCopyTexImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glCopyTexSubImage1D)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5)
+{
+ DEBUG_CALL("glCopyTexSubImage1D\n")
+
+ glCopyTexSubImage1D(arg0, arg1, arg2, arg3, arg4, arg5);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glCopyTexSubImage2D)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5, jint arg6, jint arg7)
+{
+ DEBUG_CALL("glCopyTexSubImage2D\n")
+
+ glCopyTexSubImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glCullFace)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glCullFace\n")
+
+ glCullFace(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glDeleteLists)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+ DEBUG_CALL("glDeleteLists\n")
+
+ glDeleteLists(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glDeleteTextures)
+ (JNIEnv *env, jclass that, jint arg0, jintArray arg1)
+{
+ jint *lparg1=NULL;
+
+ DEBUG_CALL("glDeleteTextures\n")
+
+ if (arg1) lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL);
+ glDeleteTextures(arg0, (unsigned int *)lparg1);
+ if (arg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glDepthFunc)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glDepthFunc\n")
+
+ glDepthFunc(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glDepthMask)
+ (JNIEnv *env, jclass that, jboolean arg0)
+{
+ DEBUG_CALL("glDepthMask\n")
+
+ glDepthMask(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glDepthRange)
+ (JNIEnv *env, jclass that, jdouble arg0, jdouble arg1)
+{
+ DEBUG_CALL("glDepthRange\n")
+
+ glDepthRange(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glDisable)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glDisable\n")
+
+ glDisable(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glDisableClientState)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glDisableClientState\n")
+
+ glDisableClientState(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glDrawArrays)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+ DEBUG_CALL("glDrawArrays\n")
+
+ glDrawArrays(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glDrawBuffer)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glDrawBuffer\n")
+
+ glDrawBuffer(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glDrawElements)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jintArray arg3)
+{
+ jint *lparg3=NULL;
+
+ DEBUG_CALL("glDrawElements\n")
+
+ if (arg3) lparg3 = (*env)->GetIntArrayElements(env, arg3, NULL);
+ glDrawElements(arg0, arg1, arg2, lparg3);
+ if (arg3) (*env)->ReleaseIntArrayElements(env, arg3, lparg3, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glDrawPixels)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jintArray arg4)
+{
+ jint *lparg4=NULL;
+
+ DEBUG_CALL("glDrawPixels\n")
+
+ if (arg4) lparg4 = (*env)->GetIntArrayElements(env, arg4, NULL);
+ glDrawPixels(arg0, arg1, arg2, arg3, lparg4);
+ if (arg4) (*env)->ReleaseIntArrayElements(env, arg4, lparg4, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glEdgeFlag)
+ (JNIEnv *env, jclass that, jboolean arg0)
+{
+ DEBUG_CALL("glEdgeFlag\n")
+
+ glEdgeFlag(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glEdgeFlagPointer)
+ (JNIEnv *env, jclass that, jint arg0, jbooleanArray arg1)
+{
+ jboolean *lparg1=NULL;
+
+ DEBUG_CALL("glEdgeFlagPointer\n")
+
+ if (arg1) lparg1 = (*env)->GetBooleanArrayElements(env, arg1, NULL);
+ glEdgeFlagPointer(arg0, lparg1);
+ if (arg1) (*env)->ReleaseBooleanArrayElements(env, arg1, lparg1, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glEdgeFlagv)
+ (JNIEnv *env, jclass that, jbooleanArray arg0)
+{
+ jboolean *lparg0=NULL;
+
+ DEBUG_CALL("glEdgeFlagv\n")
+
+ if (arg0) lparg0 = (*env)->GetBooleanArrayElements(env, arg0, NULL);
+ glEdgeFlagv(lparg0);
+ if (arg0) (*env)->ReleaseBooleanArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glEnable)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glEnable\n")
+
+ glEnable(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glEnableClientState)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glEnableClientState\n")
+
+ glEnableClientState(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glEnd)
+ (JNIEnv *env, jclass that)
+{
+ DEBUG_CALL("glEnd\n")
+
+ glEnd();
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glEndList)
+ (JNIEnv *env, jclass that)
+{
+ DEBUG_CALL("glEndList\n")
+
+ glEndList();
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glEvalCoord1d)
+ (JNIEnv *env, jclass that, jdouble arg0)
+{
+ DEBUG_CALL("glEvalCoord1d\n")
+
+ glEvalCoord1d(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glEvalCoord1dv)
+ (JNIEnv *env, jclass that, jdoubleArray arg0)
+{
+ jdouble *lparg0=NULL;
+
+ DEBUG_CALL("glEvalCoord1dv\n")
+
+ if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
+ glEvalCoord1dv(lparg0);
+ if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glEvalCoord1f)
+ (JNIEnv *env, jclass that, jfloat arg0)
+{
+ DEBUG_CALL("glEvalCoord1f\n")
+
+ glEvalCoord1f(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glEvalCoord1fv)
+ (JNIEnv *env, jclass that, jfloatArray arg0)
+{
+ jfloat *lparg0=NULL;
+
+ DEBUG_CALL("glEvalCoord1fv\n")
+
+ if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
+ glEvalCoord1fv(lparg0);
+ if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glEvalCoord2d)
+ (JNIEnv *env, jclass that, jdouble arg0, jdouble arg1)
+{
+ DEBUG_CALL("glEvalCoord2d\n")
+
+ glEvalCoord2d(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glEvalCoord2dv)
+ (JNIEnv *env, jclass that, jdoubleArray arg0)
+{
+ jdouble *lparg0=NULL;
+
+ DEBUG_CALL("glEvalCoord2dv\n")
+
+ if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
+ glEvalCoord2dv(lparg0);
+ if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glEvalCoord2f)
+ (JNIEnv *env, jclass that, jfloat arg0, jfloat arg1)
+{
+ DEBUG_CALL("glEvalCoord2f\n")
+
+ glEvalCoord2f(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glEvalCoord2fv)
+ (JNIEnv *env, jclass that, jfloatArray arg0)
+{
+ jfloat *lparg0=NULL;
+
+ DEBUG_CALL("glEvalCoord2fv\n")
+
+ if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
+ glEvalCoord2fv(lparg0);
+ if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glEvalMesh1)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+ DEBUG_CALL("glEvalMesh1\n")
+
+ glEvalMesh1(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glEvalMesh2)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4)
+{
+ DEBUG_CALL("glEvalMesh2\n")
+
+ glEvalMesh2(arg0, arg1, arg2, arg3, arg4);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glEvalPoint1)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glEvalPoint1\n")
+
+ glEvalPoint1(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glEvalPoint2)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+ DEBUG_CALL("glEvalPoint2\n")
+
+ glEvalPoint2(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glFeedbackBuffer)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2)
+{
+ jfloat *lparg2=NULL;
+
+ DEBUG_CALL("glFeedbackBuffer\n")
+
+ if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
+ glFeedbackBuffer(arg0, arg1, lparg2);
+ if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glFinish)
+ (JNIEnv *env, jclass that)
+{
+ DEBUG_CALL("glFinish\n")
+
+ glFinish();
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glFlush)
+ (JNIEnv *env, jclass that)
+{
+ DEBUG_CALL("glFlush\n")
+
+ glFlush();
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glFogf)
+ (JNIEnv *env, jclass that, jint arg0, jfloat arg1)
+{
+ DEBUG_CALL("glFogf\n")
+
+ glFogf(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glFogfv)
+ (JNIEnv *env, jclass that, jint arg0, jfloatArray arg1)
+{
+ jfloat *lparg1=NULL;
+
+ DEBUG_CALL("glFogfv\n")
+
+ if (arg1) lparg1 = (*env)->GetFloatArrayElements(env, arg1, NULL);
+ glFogfv(arg0, lparg1);
+ if (arg1) (*env)->ReleaseFloatArrayElements(env, arg1, lparg1, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glFogi)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+ DEBUG_CALL("glFogi\n")
+
+ glFogi(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glFogiv)
+ (JNIEnv *env, jclass that, jint arg0, jintArray arg1)
+{
+ jint *lparg1=NULL;
+
+ DEBUG_CALL("glFogiv\n")
+
+ if (arg1) lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL);
+ glFogiv(arg0, (GLint *)lparg1);
+ if (arg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glFrontFace)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glFrontFace\n")
+
+ glFrontFace(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glFrustum)
+ (JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3, jdouble arg4, jdouble arg5)
+{
+ DEBUG_CALL("glFrustum\n")
+
+ glFrustum(arg0, arg1, arg2, arg3, arg4, arg5);
+}
+
+JNIEXPORT jint JNICALL GL_NATIVE(glGenLists)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glGenLists\n")
+
+ return (jint)glGenLists(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glGenTextures)
+ (JNIEnv *env, jclass that, jint arg0, jintArray arg1)
+{
+ jint *lparg1=NULL;
+
+ DEBUG_CALL("glGenTextures\n")
+
+ if (arg1) lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL);
+ glGenTextures(arg0, (unsigned int *)lparg1);
+ if (arg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glGetBooleanv)
+ (JNIEnv *env, jclass that, jint arg0, jbooleanArray arg1)
+{
+ jboolean *lparg1=NULL;
+
+ DEBUG_CALL("glGetBooleanv\n")
+
+ if (arg1) lparg1 = (*env)->GetBooleanArrayElements(env, arg1, NULL);
+ glGetBooleanv(arg0, lparg1);
+ if (arg1) (*env)->ReleaseBooleanArrayElements(env, arg1, lparg1, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glGetClipPlane)
+ (JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1)
+{
+ jdouble *lparg1=NULL;
+
+ DEBUG_CALL("glGetClipPlane\n")
+
+ if (arg1) lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL);
+ glGetClipPlane(arg0, lparg1);
+ if (arg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glGetDoublev)
+ (JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1)
+{
+ jdouble *lparg1=NULL;
+
+ DEBUG_CALL("glGetDoublev\n")
+
+ if (arg1) lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL);
+ glGetDoublev(arg0, lparg1);
+ if (arg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
+}
+
+JNIEXPORT jint JNICALL GL_NATIVE(glGetError)
+ (JNIEnv *env, jclass that)
+{
+ DEBUG_CALL("glGetError\n")
+
+ return (jint)glGetError();
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glGetFloatv)
+ (JNIEnv *env, jclass that, jint arg0, jfloatArray arg1)
+{
+ jfloat *lparg1=NULL;
+
+ DEBUG_CALL("glGetFloatv\n")
+
+ if (arg1) lparg1 = (*env)->GetFloatArrayElements(env, arg1, NULL);
+ glGetFloatv(arg0, lparg1);
+ if (arg1) (*env)->ReleaseFloatArrayElements(env, arg1, lparg1, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glGetIntegerv)
+ (JNIEnv *env, jclass that, jint arg0, jintArray arg1)
+{
+ jint *lparg1=NULL;
+
+ DEBUG_CALL("glGetIntegerv\n")
+
+ if (arg1) lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL);
+ glGetIntegerv(arg0, (GLint *)lparg1);
+ if (arg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glGetLightfv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2)
+{
+ jfloat *lparg2=NULL;
+
+ DEBUG_CALL("glGetLightfv\n")
+
+ if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
+ glGetLightfv(arg0, arg1, lparg2);
+ if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glGetLightiv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
+{
+ jint *lparg2=NULL;
+
+ DEBUG_CALL("glGetLightiv\n")
+
+ if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
+ glGetLightiv(arg0, arg1, (GLint *)lparg2);
+ if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glGetMapdv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jdoubleArray arg2)
+{
+ jdouble *lparg2=NULL;
+
+ DEBUG_CALL("glGetMapdv\n")
+
+ if (arg2) lparg2 = (*env)->GetDoubleArrayElements(env, arg2, NULL);
+ glGetMapdv(arg0, arg1, lparg2);
+ if (arg2) (*env)->ReleaseDoubleArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glGetMapfv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2)
+{
+ jfloat *lparg2=NULL;
+
+ DEBUG_CALL("glGetMapfv\n")
+
+ if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
+ glGetMapfv(arg0, arg1, lparg2);
+ if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glGetMapiv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
+{
+ jint *lparg2=NULL;
+
+ DEBUG_CALL("glGetMapiv\n")
+
+ if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
+ glGetMapiv(arg0, arg1, (GLint *)lparg2);
+ if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glGetMaterialfv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2)
+{
+ jfloat *lparg2=NULL;
+
+ DEBUG_CALL("glGetMaterialfv\n")
+
+ if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
+ glGetMaterialfv(arg0, arg1, lparg2);
+ if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glGetMaterialiv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
+{
+ jint *lparg2=NULL;
+
+ DEBUG_CALL("glGetMaterialiv\n")
+
+ if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
+ glGetMaterialiv(arg0, arg1, (GLint *)lparg2);
+ if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glGetPixelMapfv)
+ (JNIEnv *env, jclass that, jint arg0, jfloatArray arg1)
+{
+ jfloat *lparg1=NULL;
+
+ DEBUG_CALL("glGetPixelMapfv\n")
+
+ if (arg1) lparg1 = (*env)->GetFloatArrayElements(env, arg1, NULL);
+ glGetPixelMapfv(arg0, lparg1);
+ if (arg1) (*env)->ReleaseFloatArrayElements(env, arg1, lparg1, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glGetPixelMapuiv)
+ (JNIEnv *env, jclass that, jint arg0, jintArray arg1)
+{
+ jint *lparg1=NULL;
+
+ DEBUG_CALL("glGetPixelMapuiv\n")
+
+ if (arg1) lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL);
+ glGetPixelMapuiv(arg0, (unsigned int *)lparg1);
+ if (arg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glGetPixelMapusv)
+ (JNIEnv *env, jclass that, jint arg0, jshortArray arg1)
+{
+ jshort *lparg1=NULL;
+
+ DEBUG_CALL("glGetPixelMapusv\n")
+
+ if (arg1) lparg1 = (*env)->GetShortArrayElements(env, arg1, NULL);
+ glGetPixelMapusv(arg0, (unsigned short *)lparg1);
+ if (arg1) (*env)->ReleaseShortArrayElements(env, arg1, lparg1, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glGetPointerv)
+ (JNIEnv *env, jclass that, jint arg0, jintArray arg1)
+{
+ jint *lparg1=NULL;
+
+ DEBUG_CALL("glGetPointerv\n")
+
+ if (arg1) lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL);
+ glGetPointerv(arg0, (void **)lparg1);
+ if (arg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glGetPolygonStipple)
+ (JNIEnv *env, jclass that, jbyteArray arg0)
+{
+ jbyte *lparg0=NULL;
+
+ DEBUG_CALL("glGetPolygonStipple\n")
+
+ if (arg0) lparg0 = (*env)->GetByteArrayElements(env, arg0, NULL);
+ glGetPolygonStipple((unsigned char *)lparg0);
+ if (arg0) (*env)->ReleaseByteArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT jint JNICALL GL_NATIVE(glGetString)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glGetString\n")
+
+ printf ("%s,\n",glGetString(arg0));
+ return 1;
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glGetTexEnvfv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2)
+{
+ jfloat *lparg2=NULL;
+
+ DEBUG_CALL("glGetTexEnvfv\n")
+
+ if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
+ glGetTexEnvfv(arg0, arg1, lparg2);
+ if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glGetTexEnviv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
+{
+ jint *lparg2=NULL;
+
+ DEBUG_CALL("glGetTexEnviv\n")
+
+ if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
+ glGetTexEnviv(arg0, arg1, (GLint *)lparg2);
+ if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glGetTexGendv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jdoubleArray arg2)
+{
+ jdouble *lparg2=NULL;
+
+ DEBUG_CALL("glGetTexGendv\n")
+
+ if (arg2) lparg2 = (*env)->GetDoubleArrayElements(env, arg2, NULL);
+ glGetTexGendv(arg0, arg1, lparg2);
+ if (arg2) (*env)->ReleaseDoubleArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glGetTexGenfv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2)
+{
+ jfloat *lparg2=NULL;
+
+ DEBUG_CALL("glGetTexGenfv\n")
+
+ if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
+ glGetTexGenfv(arg0, arg1, lparg2);
+ if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glGetTexGeniv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
+{
+ jint *lparg2=NULL;
+
+ DEBUG_CALL("glGetTexGeniv\n")
+
+ if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
+ glGetTexGeniv(arg0, arg1, (GLint *)lparg2);
+ if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glGetTexImage)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jintArray arg4)
+{
+ jint *lparg4=NULL;
+
+ DEBUG_CALL("glGetTexImage\n")
+
+ if (arg4) lparg4 = (*env)->GetIntArrayElements(env, arg4, NULL);
+ glGetTexImage(arg0, arg1, arg2, arg3, lparg4);
+ if (arg4) (*env)->ReleaseIntArrayElements(env, arg4, lparg4, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glGetTexLevelParameterfv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jfloatArray arg3)
+{
+ jfloat *lparg3=NULL;
+
+ DEBUG_CALL("glGetTexLevelParameterfv\n")
+
+ if (arg3) lparg3 = (*env)->GetFloatArrayElements(env, arg3, NULL);
+ glGetTexLevelParameterfv(arg0, arg1, arg2, lparg3);
+ if (arg3) (*env)->ReleaseFloatArrayElements(env, arg3, lparg3, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glGetTexLevelParameteriv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jintArray arg3)
+{
+ jint *lparg3=NULL;
+
+ DEBUG_CALL("glGetTexLevelParameteriv\n")
+
+ if (arg3) lparg3 = (*env)->GetIntArrayElements(env, arg3, NULL);
+ glGetTexLevelParameteriv(arg0, arg1, arg2, (GLint *)lparg3);
+ if (arg3) (*env)->ReleaseIntArrayElements(env, arg3, lparg3, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glGetTexParameterfv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2)
+{
+ jfloat *lparg2=NULL;
+
+ DEBUG_CALL("glGetTexParameterfv\n")
+
+ if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
+ glGetTexParameterfv(arg0, arg1, lparg2);
+ if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glGetTexParameteriv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
+{
+ jint *lparg2=NULL;
+
+ DEBUG_CALL("glGetTexParameteriv\n")
+
+ if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
+ glGetTexParameteriv(arg0, arg1, (GLint *)lparg2);
+ if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glHint)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+ DEBUG_CALL("glHint\n")
+
+ glHint(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glIndexMask)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glIndexMask\n")
+
+ glIndexMask(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glIndexPointer)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
+{
+ jint *lparg2=NULL;
+
+ DEBUG_CALL("glIndexPointer\n")
+
+ if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
+ glIndexPointer(arg0, arg1, lparg2);
+ if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glIndexd)
+ (JNIEnv *env, jclass that, jdouble arg0)
+{
+ DEBUG_CALL("glIndexd\n")
+
+ glIndexd(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glIndexdv)
+ (JNIEnv *env, jclass that, jdoubleArray arg0)
+{
+ jdouble *lparg0=NULL;
+
+ DEBUG_CALL("glIndexdv\n")
+
+ if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
+ glIndexdv(lparg0);
+ if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glIndexf)
+ (JNIEnv *env, jclass that, jfloat arg0)
+{
+ DEBUG_CALL("glIndexf\n")
+
+ glIndexf(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glIndexfv)
+ (JNIEnv *env, jclass that, jfloatArray arg0)
+{
+ jfloat *lparg0=NULL;
+
+ DEBUG_CALL("glIndexfv\n")
+
+ if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
+ glIndexfv(lparg0);
+ if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glIndexi)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glIndexi\n")
+
+ glIndexi(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glIndexiv)
+ (JNIEnv *env, jclass that, jintArray arg0)
+{
+ jint *lparg0=NULL;
+
+ DEBUG_CALL("glIndexiv\n")
+
+ if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
+ glIndexiv((GLint *)lparg0);
+ if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glIndexs)
+ (JNIEnv *env, jclass that, jshort arg0)
+{
+ DEBUG_CALL("glIndexs\n")
+
+ glIndexs(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glIndexsv)
+ (JNIEnv *env, jclass that, jshortArray arg0)
+{
+ jshort *lparg0=NULL;
+
+ DEBUG_CALL("glIndexsv\n")
+
+ if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
+ glIndexsv(lparg0);
+ if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glInitNames)
+ (JNIEnv *env, jclass that)
+{
+ DEBUG_CALL("glInitNames\n")
+
+ glInitNames();
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glInterleavedArrays)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
+{
+ jint *lparg2=NULL;
+
+ DEBUG_CALL("glInterleavedArrays\n")
+
+ if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
+ glInterleavedArrays(arg0, arg1, lparg2);
+ if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT jboolean JNICALL GL_NATIVE(glIsEnabled)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glIsEnabled\n")
+
+ return (jboolean)glIsEnabled(arg0);
+}
+
+JNIEXPORT jboolean JNICALL GL_NATIVE(glIsList)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glIsList\n")
+
+ return (jboolean)glIsList(arg0);
+}
+
+JNIEXPORT jboolean JNICALL GL_NATIVE(glIsTexture)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glIsTexture\n")
+
+ return (jboolean)glIsTexture(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glLightModelf)
+ (JNIEnv *env, jclass that, jint arg0, jfloat arg1)
+{
+ DEBUG_CALL("glLightModelf\n")
+
+ glLightModelf(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glLightModelfv)
+ (JNIEnv *env, jclass that, jint arg0, jfloatArray arg1)
+{
+ jfloat *lparg1=NULL;
+
+ DEBUG_CALL("glLightModelfv\n")
+
+ if (arg1) lparg1 = (*env)->GetFloatArrayElements(env, arg1, NULL);
+ glLightModelfv(arg0, lparg1);
+ if (arg1) (*env)->ReleaseFloatArrayElements(env, arg1, lparg1, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glLightModeli)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+ DEBUG_CALL("glLightModeli\n")
+
+ glLightModeli(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glLightModeliv)
+ (JNIEnv *env, jclass that, jint arg0, jintArray arg1)
+{
+ jint *lparg1=NULL;
+
+ DEBUG_CALL("glLightModeliv\n")
+
+ if (arg1) lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL);
+ glLightModeliv(arg0, (GLint *)lparg1);
+ if (arg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glLightf)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jfloat arg2)
+{
+ DEBUG_CALL("glLightf\n")
+
+ glLightf(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glLightfv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2)
+{
+ jfloat *lparg2=NULL;
+
+ DEBUG_CALL("glLightfv\n")
+
+ if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
+ glLightfv(arg0, arg1, lparg2);
+ if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
+}
+/*
+JNIEXPORT void JNICALL GL_NATIVE(glLightfv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jfloat *arg2)
+{
+ DEBUG_CALL("glLightfv\n")
+ glLightfv(arg0, arg1, arg2);
+}
+*/
+JNIEXPORT void JNICALL GL_NATIVE(glLighti)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+ DEBUG_CALL("glLighti\n")
+
+ glLighti(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glLightiv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
+{
+ jint *lparg2=NULL;
+
+ DEBUG_CALL("glLightiv\n")
+
+ if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
+ glLightiv(arg0, arg1, (GLint *)lparg2);
+ if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glLineStipple)
+ (JNIEnv *env, jclass that, jint arg0, jshort arg1)
+{
+ DEBUG_CALL("glLineStipple\n")
+
+ glLineStipple(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glLineWidth)
+ (JNIEnv *env, jclass that, jfloat arg0)
+{
+ DEBUG_CALL("glLineWidth\n")
+
+ glLineWidth(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glListBase)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glListBase\n")
+
+ glListBase(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glLoadIdentity)
+ (JNIEnv *env, jclass that)
+{
+ DEBUG_CALL("glLoadIdentity\n")
+
+ glLoadIdentity();
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glLoadMatrixd)
+ (JNIEnv *env, jclass that, jdoubleArray arg0)
+{
+ jdouble *lparg0=NULL;
+
+ DEBUG_CALL("glLoadMatrixd\n")
+
+ if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
+ glLoadMatrixd(lparg0);
+ if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glLoadMatrixf)
+ (JNIEnv *env, jclass that, jfloatArray arg0)
+{
+ jfloat *lparg0=NULL;
+
+ DEBUG_CALL("glLoadMatrixf\n")
+
+ if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
+ glLoadMatrixf(lparg0);
+ if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glLoadName)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glLoadName\n")
+
+ glLoadName(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glLogicOp)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glLogicOp\n")
+
+ glLogicOp(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glMap2f)
+ (JNIEnv *env, jclass that, jint arg0, jfloat arg1, jfloat arg2, jint arg3, jint arg4,
+ jfloat arg5, jfloat arg6, jint arg7, jint arg8, jfloatArray arg9)
+{
+ jfloat *lparg9=NULL;
+
+ DEBUG_CALL("glMap2f\n")
+
+ if (arg9) lparg9 = (*env)->GetFloatArrayElements(env, arg9, NULL);
+ glMap2f(arg0, arg1, arg2, arg3, arg4 ,arg5, arg6, arg7, arg8, lparg9);
+ if (arg9) (*env)->ReleaseFloatArrayElements(env, arg9, lparg9, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glMap2d)
+ (JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2, jint arg3, jint arg4,
+ jdouble arg5, jdouble arg6, jint arg7, jint arg8, jdoubleArray arg9)
+{
+ jdouble *lparg9=NULL;
+
+ DEBUG_CALL("glMap2d\n")
+
+ if (arg9) lparg9 = (*env)->GetDoubleArrayElements(env, arg9, NULL);
+ glMap2d(arg0, arg1, arg2, arg3, arg4 ,arg5, arg6, arg7, arg8, lparg9);
+ if (arg9) (*env)->ReleaseDoubleArrayElements(env, arg9, lparg9, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glMap1d)
+ (JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2, jint arg3, jint arg4, jdoubleArray arg5)
+{
+ jdouble *lparg5=NULL;
+
+ DEBUG_CALL("glMap1d\n")
+
+ if (arg5) lparg5 = (*env)->GetDoubleArrayElements(env, arg5, NULL);
+ glMap1d(arg0, arg1, arg2, arg3, arg4, lparg5);
+ if (arg5) (*env)->ReleaseDoubleArrayElements(env, arg5, lparg5, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glMap1f)
+ (JNIEnv *env, jclass that, jint arg0, jfloat arg1, jfloat arg2, jint arg3, jint arg4, jfloatArray arg5)
+{
+ jfloat *lparg5=NULL;
+
+ DEBUG_CALL("glMap1f\n")
+
+ if (arg5) lparg5 = (*env)->GetFloatArrayElements(env, arg5, NULL);
+ glMap1f(arg0, arg1, arg2, arg3, arg4, lparg5);
+ if (arg5) (*env)->ReleaseFloatArrayElements(env, arg5, lparg5, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glMapGrid1d)
+ (JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2)
+{
+ DEBUG_CALL("glMapGrid1d\n")
+
+ glMapGrid1d(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glMapGrid1f)
+ (JNIEnv *env, jclass that, jint arg0, jfloat arg1, jfloat arg2)
+{
+ DEBUG_CALL("glMapGrid1f\n")
+
+ glMapGrid1f(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glMapGrid2d)
+ (JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2, jint arg3, jdouble arg4, jdouble arg5)
+{
+ DEBUG_CALL("glMapGrid2d\n")
+
+ glMapGrid2d(arg0, arg1, arg2, arg3, arg4, arg5);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glMapGrid2f)
+ (JNIEnv *env, jclass that, jint arg0, jfloat arg1, jfloat arg2, jint arg3, jfloat arg4, jfloat arg5)
+{
+ DEBUG_CALL("glMapGrid2f\n")
+
+ glMapGrid2f(arg0, arg1, arg2, arg3, arg4, arg5);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glMaterialf)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jfloat arg2)
+{
+ DEBUG_CALL("glMaterialf\n")
+
+ glMaterialf(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glMaterialfv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2)
+{
+ jfloat *lparg2=NULL;
+
+ DEBUG_CALL("glMaterialfv\n")
+
+ if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
+ glMaterialfv(arg0, arg1, lparg2);
+ if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glMateriali)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+ DEBUG_CALL("glMateriali\n")
+
+ glMateriali(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glMaterialiv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
+{
+ jint *lparg2=NULL;
+
+ DEBUG_CALL("glMaterialiv\n")
+
+ if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
+ glMaterialiv(arg0, arg1, (GLint *)lparg2);
+ if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glMatrixMode)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glMatrixMode\n")
+
+ glMatrixMode(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glMultMatrixd)
+ (JNIEnv *env, jclass that, jdoubleArray arg0)
+{
+ jdouble *lparg0=NULL;
+
+ DEBUG_CALL("glMultMatrixd\n")
+
+ if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
+ glMultMatrixd(lparg0);
+ if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glMultMatrixf)
+ (JNIEnv *env, jclass that, jfloatArray arg0)
+{
+ jfloat *lparg0=NULL;
+
+ DEBUG_CALL("glMultMatrixf\n")
+
+ if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
+ glMultMatrixf(lparg0);
+ if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glNewList)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+ DEBUG_CALL("glNewList\n")
+
+ glNewList(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glNormal3b)
+ (JNIEnv *env, jclass that, jbyte arg0, jbyte arg1, jbyte arg2)
+{
+ DEBUG_CALL("glNormal3b\n")
+
+ glNormal3b(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glNormal3bv)
+ (JNIEnv *env, jclass that, jbyteArray arg0)
+{
+ jbyte *lparg0=NULL;
+
+ DEBUG_CALL("glNormal3bv\n")
+
+ if (arg0) lparg0 = (*env)->GetByteArrayElements(env, arg0, NULL);
+ glNormal3bv(lparg0);
+ if (arg0) (*env)->ReleaseByteArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glNormal3d)
+ (JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2)
+{
+ DEBUG_CALL("glNormal3d\n")
+
+ glNormal3d(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glNormal3dv)
+ (JNIEnv *env, jclass that, jdoubleArray arg0)
+{
+ jdouble *lparg0=NULL;
+
+ DEBUG_CALL("glNormal3dv\n")
+
+ if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
+ glNormal3dv(lparg0);
+ if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glNormal3f)
+ (JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2)
+{
+ DEBUG_CALL("glNormal3f\n")
+
+ glNormal3f(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glNormal3fv)
+ (JNIEnv *env, jclass that, jfloatArray arg0)
+{
+ jfloat *lparg0=NULL;
+
+ DEBUG_CALL("glNormal3fv\n")
+
+ if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
+ glNormal3fv(lparg0);
+ if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glNormal3i)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+ DEBUG_CALL("glNormal3i\n")
+
+ glNormal3i(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glNormal3iv)
+ (JNIEnv *env, jclass that, jintArray arg0)
+{
+ jint *lparg0=NULL;
+
+ DEBUG_CALL("glNormal3iv\n")
+
+ if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
+ glNormal3iv((GLint *)lparg0);
+ if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glNormal3s)
+ (JNIEnv *env, jclass that, jshort arg0, jshort arg1, jshort arg2)
+{
+ DEBUG_CALL("glNormal3s\n")
+
+ glNormal3s(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glNormal3sv)
+ (JNIEnv *env, jclass that, jshortArray arg0)
+{
+ jshort *lparg0=NULL;
+
+ DEBUG_CALL("glNormal3sv\n")
+
+ if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
+ glNormal3sv(lparg0);
+ if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glNormalPointer)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
+{
+ jint *lparg2=NULL;
+
+ DEBUG_CALL("glNormalPointer\n")
+
+ if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
+ glNormalPointer(arg0, arg1, lparg2);
+ if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glOrtho)
+ (JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3, jdouble arg4, jdouble arg5)
+{
+ DEBUG_CALL("glOrtho\n")
+
+ glOrtho(arg0, arg1, arg2, arg3, arg4, arg5);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glPassThrough)
+ (JNIEnv *env, jclass that, jfloat arg0)
+{
+ DEBUG_CALL("glPassThrough\n")
+
+ glPassThrough(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glPixelMapfv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2)
+{
+ jfloat *lparg2=NULL;
+
+ DEBUG_CALL("glPixelMapfv\n")
+
+ if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
+ glPixelMapfv(arg0, arg1, lparg2);
+ if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glPixelMapuiv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
+{
+ jint *lparg2=NULL;
+
+ DEBUG_CALL("glPixelMapuiv\n")
+
+ if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
+ glPixelMapuiv(arg0, arg1, (unsigned int *)lparg2);
+ if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glPixelMapusv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jshortArray arg2)
+{
+ jshort *lparg2=NULL;
+
+ DEBUG_CALL("glPixelMapusv\n")
+
+ if (arg2) lparg2 = (*env)->GetShortArrayElements(env, arg2, NULL);
+ glPixelMapusv(arg0, arg1, (unsigned short *)lparg2);
+ if (arg2) (*env)->ReleaseShortArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glPixelStoref)
+ (JNIEnv *env, jclass that, jint arg0, jfloat arg1)
+{
+ DEBUG_CALL("glPixelStoref\n")
+
+ glPixelStoref(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glPixelStorei)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+ DEBUG_CALL("glPixelStorei\n")
+
+ glPixelStorei(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glPixelTransferf)
+ (JNIEnv *env, jclass that, jint arg0, jfloat arg1)
+{
+ DEBUG_CALL("glPixelTransferf\n")
+
+ glPixelTransferf(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glPixelTransferi)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+ DEBUG_CALL("glPixelTransferi\n")
+
+ glPixelTransferi(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glPixelZoom)
+ (JNIEnv *env, jclass that, jfloat arg0, jfloat arg1)
+{
+ DEBUG_CALL("glPixelZoom\n")
+
+ glPixelZoom(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glPointSize)
+ (JNIEnv *env, jclass that, jfloat arg0)
+{
+ DEBUG_CALL("glPointSize\n")
+
+ glPointSize(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glPolygonMode)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+ DEBUG_CALL("glPolygonMode\n")
+
+ glPolygonMode(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glPolygonOffset)
+ (JNIEnv *env, jclass that, jfloat arg0, jfloat arg1)
+{
+ DEBUG_CALL("glPolygonOffset\n")
+
+ glPolygonOffset(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glPolygonStipple)
+ (JNIEnv *env, jclass that, jbyteArray arg0)
+{
+ jbyte *lparg0=NULL;
+
+ DEBUG_CALL("glPolygonStipple\n")
+
+ if (arg0) lparg0 = (*env)->GetByteArrayElements(env, arg0, NULL);
+ glPolygonStipple((unsigned char *)lparg0);
+ if (arg0) (*env)->ReleaseByteArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glPopAttrib)
+ (JNIEnv *env, jclass that)
+{
+ DEBUG_CALL("glPopAttrib\n")
+
+ glPopAttrib();
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glPopClientAttrib)
+ (JNIEnv *env, jclass that)
+{
+ DEBUG_CALL("glPopClientAttrib\n")
+
+ glPopClientAttrib();
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glPopMatrix)
+ (JNIEnv *env, jclass that)
+{
+ DEBUG_CALL("glPopMatrix\n")
+
+ glPopMatrix();
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glPopName)
+ (JNIEnv *env, jclass that)
+{
+ DEBUG_CALL("glPopName\n")
+
+ glPopName();
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glPrioritizeTextures)
+ (JNIEnv *env, jclass that, jint arg0, jintArray arg1, jfloatArray arg2)
+{
+ jint *lparg1=NULL;
+ jfloat *lparg2=NULL;
+
+ DEBUG_CALL("glPrioritizeTextures\n")
+
+ if (arg1) lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL);
+ if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
+ glPrioritizeTextures(arg0, (unsigned int *)lparg1, lparg2);
+ if (arg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
+ if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glPushAttrib)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glPushAttrib\n")
+
+ glPushAttrib(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glPushClientAttrib)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glPushClientAttrib\n")
+
+ glPushClientAttrib(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glPushMatrix)
+ (JNIEnv *env, jclass that)
+{
+ DEBUG_CALL("glPushMatrix\n")
+
+ glPushMatrix();
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glPushName)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glPushName\n")
+
+ glPushName(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRasterPos2d)
+ (JNIEnv *env, jclass that, jdouble arg0, jdouble arg1)
+{
+ DEBUG_CALL("glRasterPos2d\n")
+
+ glRasterPos2d(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRasterPos2dv)
+ (JNIEnv *env, jclass that, jdoubleArray arg0)
+{
+ jdouble *lparg0=NULL;
+
+ DEBUG_CALL("glRasterPos2dv\n")
+
+ if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
+ glRasterPos2dv(lparg0);
+ if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRasterPos2f)
+ (JNIEnv *env, jclass that, jfloat arg0, jfloat arg1)
+{
+ DEBUG_CALL("glRasterPos2f\n")
+
+ glRasterPos2f(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRasterPos2fv)
+ (JNIEnv *env, jclass that, jfloatArray arg0)
+{
+ jfloat *lparg0=NULL;
+
+ DEBUG_CALL("glRasterPos2fv\n")
+
+ if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
+ glRasterPos2fv(lparg0);
+ if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRasterPos2i)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+ DEBUG_CALL("glRasterPos2i\n")
+
+ glRasterPos2i(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRasterPos2iv)
+ (JNIEnv *env, jclass that, jintArray arg0)
+{
+ jint *lparg0=NULL;
+
+ DEBUG_CALL("glRasterPos2iv\n")
+
+ if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
+ glRasterPos2iv((GLint *)lparg0);
+ if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRasterPos2s)
+ (JNIEnv *env, jclass that, jshort arg0, jshort arg1)
+{
+ DEBUG_CALL("glRasterPos2s\n")
+
+ glRasterPos2s(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRasterPos2sv)
+ (JNIEnv *env, jclass that, jshortArray arg0)
+{
+ jshort *lparg0=NULL;
+
+ DEBUG_CALL("glRasterPos2sv\n")
+
+ if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
+ glRasterPos2sv(lparg0);
+ if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRasterPos3d)
+ (JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2)
+{
+ DEBUG_CALL("glRasterPos3d\n")
+
+ glRasterPos3d(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRasterPos3dv)
+ (JNIEnv *env, jclass that, jdoubleArray arg0)
+{
+ jdouble *lparg0=NULL;
+
+ DEBUG_CALL("glRasterPos3dv\n")
+
+ if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
+ glRasterPos3dv(lparg0);
+ if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRasterPos3f)
+ (JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2)
+{
+ DEBUG_CALL("glRasterPos3f\n")
+
+ glRasterPos3f(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRasterPos3fv)
+ (JNIEnv *env, jclass that, jfloatArray arg0)
+{
+ jfloat *lparg0=NULL;
+
+ DEBUG_CALL("glRasterPos3fv\n")
+
+ if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
+ glRasterPos3fv(lparg0);
+ if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRasterPos3i)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+ DEBUG_CALL("glRasterPos3i\n")
+
+ glRasterPos3i(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRasterPos3iv)
+ (JNIEnv *env, jclass that, jintArray arg0)
+{
+ jint *lparg0=NULL;
+
+ DEBUG_CALL("glRasterPos3iv\n")
+
+ if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
+ glRasterPos3iv((GLint *)lparg0);
+ if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRasterPos3s)
+ (JNIEnv *env, jclass that, jshort arg0, jshort arg1, jshort arg2)
+{
+ DEBUG_CALL("glRasterPos3s\n")
+
+ glRasterPos3s(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRasterPos3sv)
+ (JNIEnv *env, jclass that, jshortArray arg0)
+{
+ jshort *lparg0=NULL;
+
+ DEBUG_CALL("glRasterPos3sv\n")
+
+ if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
+ glRasterPos3sv(lparg0);
+ if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRasterPos4d)
+ (JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3)
+{
+ DEBUG_CALL("glRasterPos4d\n")
+
+ glRasterPos4d(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRasterPos4dv)
+ (JNIEnv *env, jclass that, jdoubleArray arg0)
+{
+ jdouble *lparg0=NULL;
+
+ DEBUG_CALL("glRasterPos4dv\n")
+
+ if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
+ glRasterPos4dv(lparg0);
+ if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRasterPos4f)
+ (JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2, jfloat arg3)
+{
+ DEBUG_CALL("glRasterPos4f\n")
+
+ glRasterPos4f(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRasterPos4fv)
+ (JNIEnv *env, jclass that, jfloatArray arg0)
+{
+ jfloat *lparg0=NULL;
+
+ DEBUG_CALL("glRasterPos4fv\n")
+
+ if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
+ glRasterPos4fv(lparg0);
+ if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRasterPos4i)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
+{
+ DEBUG_CALL("glRasterPos4i\n")
+
+ glRasterPos4i(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRasterPos4iv)
+ (JNIEnv *env, jclass that, jintArray arg0)
+{
+ jint *lparg0=NULL;
+
+ DEBUG_CALL("glRasterPos4iv\n")
+
+ if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
+ glRasterPos4iv((GLint *)lparg0);
+ if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRasterPos4s)
+ (JNIEnv *env, jclass that, jshort arg0, jshort arg1, jshort arg2, jshort arg3)
+{
+ DEBUG_CALL("glRasterPos4s\n")
+
+ glRasterPos4s(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRasterPos4sv)
+ (JNIEnv *env, jclass that, jshortArray arg0)
+{
+ jshort *lparg0=NULL;
+
+ DEBUG_CALL("glRasterPos4sv\n")
+
+ if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
+ glRasterPos4sv(lparg0);
+ if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glReadBuffer)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glReadBuffer\n")
+
+ glReadBuffer(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glReadPixels)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5, jintArray arg6)
+{
+ jint *lparg6=NULL;
+
+ DEBUG_CALL("glReadPixels\n")
+
+ if (arg6) lparg6 = (*env)->GetIntArrayElements(env, arg6, NULL);
+ glReadPixels(arg0, arg1, arg2, arg3, arg4, arg5, lparg6);
+ if (arg6) (*env)->ReleaseIntArrayElements(env, arg6, lparg6, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRectd)
+ (JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3)
+{
+ DEBUG_CALL("glRectd\n")
+
+ glRectd(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRectdv)
+ (JNIEnv *env, jclass that, jdoubleArray arg0, jdoubleArray arg1)
+{
+ jdouble *lparg0=NULL;
+ jdouble *lparg1=NULL;
+
+ DEBUG_CALL("glRectdv\n")
+
+ if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
+ if (arg1) lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL);
+ glRectdv(lparg0, lparg1);
+ if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
+ if (arg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRectf)
+ (JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2, jfloat arg3)
+{
+ DEBUG_CALL("glRectf\n")
+
+ glRectf(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRectfv)
+ (JNIEnv *env, jclass that, jfloatArray arg0, jfloatArray arg1)
+{
+ jfloat *lparg0=NULL;
+ jfloat *lparg1=NULL;
+
+ DEBUG_CALL("glRectfv\n")
+
+ if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
+ if (arg1) lparg1 = (*env)->GetFloatArrayElements(env, arg1, NULL);
+ glRectfv(lparg0, lparg1);
+ if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
+ if (arg1) (*env)->ReleaseFloatArrayElements(env, arg1, lparg1, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRecti)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
+{
+ DEBUG_CALL("glRecti\n")
+
+ glRecti(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRectiv)
+ (JNIEnv *env, jclass that, jintArray arg0, jintArray arg1)
+{
+ jint *lparg0=NULL;
+ jint *lparg1=NULL;
+
+ DEBUG_CALL("glRectiv\n")
+
+ if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
+ if (arg1) lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL);
+ glRectiv((GLint *)lparg0, (GLint *)lparg1);
+ if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
+ if (arg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRects)
+ (JNIEnv *env, jclass that, jshort arg0, jshort arg1, jshort arg2, jshort arg3)
+{
+ DEBUG_CALL("glRects\n")
+
+ glRects(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRectsv)
+ (JNIEnv *env, jclass that, jshortArray arg0, jshortArray arg1)
+{
+ jshort *lparg0=NULL;
+ jshort *lparg1=NULL;
+
+ DEBUG_CALL("glRectsv\n")
+
+ if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
+ if (arg1) lparg1 = (*env)->GetShortArrayElements(env, arg1, NULL);
+ glRectsv(lparg0, lparg1);
+ if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
+ if (arg1) (*env)->ReleaseShortArrayElements(env, arg1, lparg1, 0);
+}
+
+JNIEXPORT jint JNICALL GL_NATIVE(glRenderMode)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glRenderMode\n")
+
+ return (jint)glRenderMode(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRotated)
+ (JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3)
+{
+ DEBUG_CALL("glRotated\n")
+
+ glRotated(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glRotatef)
+ (JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2, jfloat arg3)
+{
+ DEBUG_CALL("glRotatef\n")
+
+ glRotatef(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glScaled)
+ (JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2)
+{
+ DEBUG_CALL("glScaled\n")
+
+ glScaled(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glScalef)
+ (JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2)
+{
+ DEBUG_CALL("glScalef\n")
+
+ glScalef(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glScissor)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
+{
+ DEBUG_CALL("glScissor\n")
+
+ glScissor(arg0, arg1, arg2, arg3);
+}
+
+/*
+JNIEXPORT void JNICALL GL_NATIVE(glSelectBuffer)
+ (JNIEnv *env, jclass that, jint arg0, jintArray arg1)
+{
+ jint *lparg1=NULL;
+
+ DEBUG_CALL("glSelectBuffer\n")
+
+ if (arg1) lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL);
+ glSelectBuffer(arg0, lparg1);
+ if (arg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
+}
+*/
+
+
+JNIEXPORT void JNICALL GL_NATIVE(glSelectBuffer)
+ (JNIEnv *env, jclass that, jint arg0, jint *arg1)
+{
+ DEBUG_CALL("glSelectBuffer\n")
+ glSelectBuffer(arg0, (unsigned int *)arg1);
+}
+
+
+JNIEXPORT void JNICALL GL_NATIVE(glShadeModel)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glShadeModel\n")
+
+ glShadeModel(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glStencilFunc)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+ DEBUG_CALL("glStencilFunc\n")
+
+ glStencilFunc(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glStencilMask)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glStencilMask\n")
+
+ glStencilMask(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glStencilOp)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+ DEBUG_CALL("glStencilOp\n")
+
+ glStencilOp(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord1d)
+ (JNIEnv *env, jclass that, jdouble arg0)
+{
+ DEBUG_CALL("glTexCoord1d\n")
+
+ glTexCoord1d(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord1dv)
+ (JNIEnv *env, jclass that, jdoubleArray arg0)
+{
+ jdouble *lparg0=NULL;
+
+ DEBUG_CALL("glTexCoord1dv\n")
+
+ if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
+ glTexCoord1dv(lparg0);
+ if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord1f)
+ (JNIEnv *env, jclass that, jfloat arg0)
+{
+ DEBUG_CALL("glTexCoord1f\n")
+
+ glTexCoord1f(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord1fv)
+ (JNIEnv *env, jclass that, jfloatArray arg0)
+{
+ jfloat *lparg0=NULL;
+
+ DEBUG_CALL("glTexCoord1fv\n")
+
+ if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
+ glTexCoord1fv(lparg0);
+ if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord1i)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glTexCoord1i\n")
+
+ glTexCoord1i(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord1iv)
+ (JNIEnv *env, jclass that, jintArray arg0)
+{
+ jint *lparg0=NULL;
+
+ DEBUG_CALL("glTexCoord1iv\n")
+
+ if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
+ glTexCoord1iv((GLint *)lparg0);
+ if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord1s)
+ (JNIEnv *env, jclass that, jshort arg0)
+{
+ DEBUG_CALL("glTexCoord1s\n")
+
+ glTexCoord1s(arg0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord1sv)
+ (JNIEnv *env, jclass that, jshortArray arg0)
+{
+ jshort *lparg0=NULL;
+
+ DEBUG_CALL("glTexCoord1sv\n")
+
+ if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
+ glTexCoord1sv(lparg0);
+ if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord2d)
+ (JNIEnv *env, jclass that, jdouble arg0, jdouble arg1)
+{
+ DEBUG_CALL("glTexCoord2d\n")
+
+ glTexCoord2d(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord2dv)
+ (JNIEnv *env, jclass that, jdoubleArray arg0)
+{
+ jdouble *lparg0=NULL;
+
+ DEBUG_CALL("glTexCoord2dv\n")
+
+ if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
+ glTexCoord2dv(lparg0);
+ if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord2f)
+ (JNIEnv *env, jclass that, jfloat arg0, jfloat arg1)
+{
+ DEBUG_CALL("glTexCoord2f\n")
+
+ glTexCoord2f(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord2fv)
+ (JNIEnv *env, jclass that, jfloatArray arg0)
+{
+ jfloat *lparg0=NULL;
+
+ DEBUG_CALL("glTexCoord2fv\n")
+
+ if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
+ glTexCoord2fv(lparg0);
+ if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord2i)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+ DEBUG_CALL("glTexCoord2i\n")
+
+ glTexCoord2i(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord2iv)
+ (JNIEnv *env, jclass that, jintArray arg0)
+{
+ jint *lparg0=NULL;
+
+ DEBUG_CALL("glTexCoord2iv\n")
+
+ if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
+ glTexCoord2iv((GLint *)lparg0);
+ if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord2s)
+ (JNIEnv *env, jclass that, jshort arg0, jshort arg1)
+{
+ DEBUG_CALL("glTexCoord2s\n")
+
+ glTexCoord2s(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord2sv)
+ (JNIEnv *env, jclass that, jshortArray arg0)
+{
+ jshort *lparg0=NULL;
+
+ DEBUG_CALL("glTexCoord2sv\n")
+
+ if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
+ glTexCoord2sv(lparg0);
+ if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord3d)
+ (JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2)
+{
+ DEBUG_CALL("glTexCoord3d\n")
+
+ glTexCoord3d(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord3dv)
+ (JNIEnv *env, jclass that, jdoubleArray arg0)
+{
+ jdouble *lparg0=NULL;
+
+ DEBUG_CALL("glTexCoord3dv\n")
+
+ if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
+ glTexCoord3dv(lparg0);
+ if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord3f)
+ (JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2)
+{
+ DEBUG_CALL("glTexCoord3f\n")
+
+ glTexCoord3f(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord3fv)
+ (JNIEnv *env, jclass that, jfloatArray arg0)
+{
+ jfloat *lparg0=NULL;
+
+ DEBUG_CALL("glTexCoord3fv\n")
+
+ if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
+ glTexCoord3fv(lparg0);
+ if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord3i)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+ DEBUG_CALL("glTexCoord3i\n")
+
+ glTexCoord3i(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord3iv)
+ (JNIEnv *env, jclass that, jintArray arg0)
+{
+ jint *lparg0=NULL;
+
+ DEBUG_CALL("glTexCoord3iv\n")
+
+ if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
+ glTexCoord3iv((GLint *)lparg0);
+ if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord3s)
+ (JNIEnv *env, jclass that, jshort arg0, jshort arg1, jshort arg2)
+{
+ DEBUG_CALL("glTexCoord3s\n")
+
+ glTexCoord3s(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord3sv)
+ (JNIEnv *env, jclass that, jshortArray arg0)
+{
+ jshort *lparg0=NULL;
+
+ DEBUG_CALL("glTexCoord3sv\n")
+
+ if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
+ glTexCoord3sv(lparg0);
+ if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord4d)
+ (JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3)
+{
+ DEBUG_CALL("glTexCoord4d\n")
+
+ glTexCoord4d(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord4dv)
+ (JNIEnv *env, jclass that, jdoubleArray arg0)
+{
+ jdouble *lparg0=NULL;
+
+ DEBUG_CALL("glTexCoord4dv\n")
+
+ if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
+ glTexCoord4dv(lparg0);
+ if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord4f)
+ (JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2, jfloat arg3)
+{
+ DEBUG_CALL("glTexCoord4f\n")
+
+ glTexCoord4f(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord4fv)
+ (JNIEnv *env, jclass that, jfloatArray arg0)
+{
+ jfloat *lparg0=NULL;
+
+ DEBUG_CALL("glTexCoord4fv\n")
+
+ if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
+ glTexCoord4fv(lparg0);
+ if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord4i)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
+{
+ DEBUG_CALL("glTexCoord4i\n")
+
+ glTexCoord4i(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord4iv)
+ (JNIEnv *env, jclass that, jintArray arg0)
+{
+ jint *lparg0=NULL;
+
+ DEBUG_CALL("glTexCoord4iv\n")
+
+ if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
+ glTexCoord4iv((GLint *)lparg0);
+ if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord4s)
+ (JNIEnv *env, jclass that, jshort arg0, jshort arg1, jshort arg2, jshort arg3)
+{
+ DEBUG_CALL("glTexCoord4s\n")
+
+ glTexCoord4s(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoord4sv)
+ (JNIEnv *env, jclass that, jshortArray arg0)
+{
+ jshort *lparg0=NULL;
+
+ DEBUG_CALL("glTexCoord4sv\n")
+
+ if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
+ glTexCoord4sv(lparg0);
+ if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexCoordPointer)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jintArray arg3)
+{
+ jint *lparg3=NULL;
+
+ DEBUG_CALL("glTexCoordPointer\n")
+
+ if (arg3) lparg3 = (*env)->GetIntArrayElements(env, arg3, NULL);
+ glTexCoordPointer(arg0, arg1, arg2, lparg3);
+ if (arg3) (*env)->ReleaseIntArrayElements(env, arg3, lparg3, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexEnvf)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jfloat arg2)
+{
+ DEBUG_CALL("glTexEnvf\n")
+
+ glTexEnvf(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexEnvfv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2)
+{
+ jfloat *lparg2=NULL;
+
+ DEBUG_CALL("glTexEnvfv\n")
+
+ if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
+ glTexEnvfv(arg0, arg1, lparg2);
+ if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexEnvi)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+ DEBUG_CALL("glTexEnvi\n")
+
+ glTexEnvi(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexEnviv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
+{
+ jint *lparg2=NULL;
+
+ DEBUG_CALL("glTexEnviv\n")
+
+ if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
+ glTexEnviv(arg0, arg1, (GLint *)lparg2);
+ if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexGend)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jdouble arg2)
+{
+ DEBUG_CALL("glTexGend\n")
+
+ glTexGend(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexGendv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jdoubleArray arg2)
+{
+ jdouble *lparg2=NULL;
+
+ DEBUG_CALL("glTexGendv\n")
+
+ if (arg2) lparg2 = (*env)->GetDoubleArrayElements(env, arg2, NULL);
+ glTexGendv(arg0, arg1, lparg2);
+ if (arg2) (*env)->ReleaseDoubleArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexGenf)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jfloat arg2)
+{
+ DEBUG_CALL("glTexGenf\n")
+
+ glTexGenf(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexGenfv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2)
+{
+ jfloat *lparg2=NULL;
+
+ DEBUG_CALL("glTexGenfv\n")
+
+ if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
+ glTexGenfv(arg0, arg1, lparg2);
+ if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexGeni)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+ DEBUG_CALL("glTexGeni\n")
+
+ glTexGeni(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexGeniv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
+{
+ jint *lparg2=NULL;
+
+ DEBUG_CALL("glTexGeniv\n")
+
+ if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
+ glTexGeniv(arg0, arg1, (GLint *)lparg2);
+ if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexImage1D)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5, jint arg6, jintArray arg7)
+{
+ jint *lparg7=NULL;
+
+ DEBUG_CALL("glTexImage1D\n")
+
+ if (arg7) lparg7 = (*env)->GetIntArrayElements(env, arg7, NULL);
+ glTexImage1D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, lparg7);
+ if (arg7) (*env)->ReleaseIntArrayElements(env, arg7, lparg7, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexImage2D)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5, jint arg6, jint arg7, jbyteArray arg8)
+{
+ jbyte *lparg8=NULL;
+
+ DEBUG_CALL("glTexImage2D\n")
+
+ if (arg8) lparg8 = (*env)->GetByteArrayElements(env, arg8, NULL);
+ glTexImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, lparg8);
+ if (arg8) (*env)->ReleaseByteArrayElements(env, arg8, lparg8, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexParameterf)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jfloat arg2)
+{
+ DEBUG_CALL("glTexParameterf\n")
+
+ glTexParameterf(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexParameterfv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2)
+{
+ jfloat *lparg2=NULL;
+
+ DEBUG_CALL("glTexParameterfv\n")
+
+ if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
+ glTexParameterfv(arg0, arg1, lparg2);
+ if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexParameteri)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+ DEBUG_CALL("glTexParameteri\n")
+
+ glTexParameteri(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexParameteriv)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2)
+{
+ jint *lparg2=NULL;
+
+ DEBUG_CALL("glTexParameteriv\n")
+
+ if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL);
+ glTexParameteriv(arg0, arg1, (GLint *)lparg2);
+ if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexSubImage1D)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5, jintArray arg6)
+{
+ jint *lparg6=NULL;
+
+ DEBUG_CALL("glTexSubImage1D\n")
+
+ if (arg6) lparg6 = (*env)->GetIntArrayElements(env, arg6, NULL);
+ glTexSubImage1D(arg0, arg1, arg2, arg3, arg4, arg5, lparg6);
+ if (arg6) (*env)->ReleaseIntArrayElements(env, arg6, lparg6, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTexSubImage2D)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5, jint arg6, jint arg7, jintArray arg8)
+{
+ jint *lparg8=NULL;
+
+ DEBUG_CALL("glTexSubImage2D\n")
+
+ if (arg8) lparg8 = (*env)->GetIntArrayElements(env, arg8, NULL);
+ glTexSubImage2D(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, lparg8);
+ if (arg8) (*env)->ReleaseIntArrayElements(env, arg8, lparg8, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTranslated)
+ (JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2)
+{
+ DEBUG_CALL("glTranslated\n")
+
+ glTranslated(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glTranslatef)
+ (JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2)
+{
+ DEBUG_CALL("glTranslatef\n")
+
+ glTranslatef(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glVertex2d)
+ (JNIEnv *env, jclass that, jdouble arg0, jdouble arg1)
+{
+ DEBUG_CALL("glVertex2d\n")
+
+ glVertex2d(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glVertex2dv)
+ (JNIEnv *env, jclass that, jdoubleArray arg0)
+{
+ jdouble *lparg0=NULL;
+
+ DEBUG_CALL("glVertex2dv\n")
+
+ if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
+ glVertex2dv(lparg0);
+ if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glVertex2f)
+ (JNIEnv *env, jclass that, jfloat arg0, jfloat arg1)
+{
+ DEBUG_CALL("glVertex2f\n")
+
+ glVertex2f(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glVertex2fv)
+ (JNIEnv *env, jclass that, jfloatArray arg0)
+{
+ jfloat *lparg0=NULL;
+
+ DEBUG_CALL("glVertex2fv\n")
+
+ if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
+ glVertex2fv(lparg0);
+ if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glVertex2i)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+ DEBUG_CALL("glVertex2i\n")
+
+ glVertex2i(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glVertex2iv)
+ (JNIEnv *env, jclass that, jintArray arg0)
+{
+ jint *lparg0=NULL;
+
+ DEBUG_CALL("glVertex2iv\n")
+
+ if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
+ glVertex2iv((GLint *)lparg0);
+ if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glVertex2s)
+ (JNIEnv *env, jclass that, jshort arg0, jshort arg1)
+{
+ DEBUG_CALL("glVertex2s\n")
+
+ glVertex2s(arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glVertex2sv)
+ (JNIEnv *env, jclass that, jshortArray arg0)
+{
+ jshort *lparg0=NULL;
+
+ DEBUG_CALL("glVertex2sv\n")
+
+ if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
+ glVertex2sv(lparg0);
+ if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glVertex3d)
+ (JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2)
+{
+ DEBUG_CALL("glVertex3d\n")
+
+ glVertex3d(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glVertex3dv__I)
+ (JNIEnv *env, jclass that, jdoubleArray arg0)
+{
+ jdouble *lparg0=NULL;
+
+ DEBUG_CALL("glVertex3dv\n")
+
+ if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
+ glVertex3dv(lparg0);
+ if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glVertex3dv)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("glVertex3dv\n")
+ glVertex3dv((double*)arg0);
+
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glVertex3f)
+ (JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2)
+{
+ DEBUG_CALL("glVertex3f\n")
+
+ glVertex3f(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glVertex3fv)
+ (JNIEnv *env, jclass that, jfloatArray arg0)
+{
+ jfloat *lparg0=NULL;
+
+ DEBUG_CALL("glVertex3fv\n")
+
+ if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
+ glVertex3fv(lparg0);
+ if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glVertex3i)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+ DEBUG_CALL("glVertex3i\n")
+
+ glVertex3i(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glVertex3iv)
+ (JNIEnv *env, jclass that, jintArray arg0)
+{
+ jint *lparg0=NULL;
+
+ DEBUG_CALL("glVertex3iv\n")
+
+ if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
+ glVertex3iv((GLint *)lparg0);
+ if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glVertex3s)
+ (JNIEnv *env, jclass that, jshort arg0, jshort arg1, jshort arg2)
+{
+ DEBUG_CALL("glVertex3s\n")
+
+ glVertex3s(arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glVertex3sv)
+ (JNIEnv *env, jclass that, jshortArray arg0)
+{
+ jshort *lparg0=NULL;
+
+ DEBUG_CALL("glVertex3sv\n")
+
+ if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
+ glVertex3sv(lparg0);
+ if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glVertex4d)
+ (JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3)
+{
+ DEBUG_CALL("glVertex4d\n")
+
+ glVertex4d(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glVertex4dv)
+ (JNIEnv *env, jclass that, jdoubleArray arg0)
+{
+ jdouble *lparg0=NULL;
+
+ DEBUG_CALL("glVertex4dv\n")
+
+ if (arg0) lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL);
+ glVertex4dv(lparg0);
+ if (arg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glVertex4f)
+ (JNIEnv *env, jclass that, jfloat arg0, jfloat arg1, jfloat arg2, jfloat arg3)
+{
+ DEBUG_CALL("glVertex4f\n")
+
+ glVertex4f(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glVertex4fv)
+ (JNIEnv *env, jclass that, jfloatArray arg0)
+{
+ jfloat *lparg0=NULL;
+
+ DEBUG_CALL("glVertex4fv\n")
+
+ if (arg0) lparg0 = (*env)->GetFloatArrayElements(env, arg0, NULL);
+ glVertex4fv(lparg0);
+ if (arg0) (*env)->ReleaseFloatArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glVertex4i)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
+{
+ DEBUG_CALL("glVertex4i\n")
+
+ glVertex4i(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glVertex4iv)
+ (JNIEnv *env, jclass that, jintArray arg0)
+{
+ jint *lparg0=NULL;
+
+ DEBUG_CALL("glVertex4iv\n")
+
+ if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL);
+ glVertex4iv((GLint *)lparg0);
+ if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glVertex4s)
+ (JNIEnv *env, jclass that, jshort arg0, jshort arg1, jshort arg2, jshort arg3)
+{
+ DEBUG_CALL("glVertex4s\n")
+
+ glVertex4s(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glVertex4sv)
+ (JNIEnv *env, jclass that, jshortArray arg0)
+{
+ jshort *lparg0=NULL;
+
+ DEBUG_CALL("glVertex4sv\n")
+
+ if (arg0) lparg0 = (*env)->GetShortArrayElements(env, arg0, NULL);
+ glVertex4sv(lparg0);
+ if (arg0) (*env)->ReleaseShortArrayElements(env, arg0, lparg0, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glVertexPointer)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jintArray arg3)
+{
+ jint *lparg3=NULL;
+
+ DEBUG_CALL("glVertexPointer\n")
+
+ if (arg3) lparg3 = (*env)->GetIntArrayElements(env, arg3, NULL);
+ glVertexPointer(arg0, arg1, arg2, lparg3);
+ if (arg3) (*env)->ReleaseIntArrayElements(env, arg3, lparg3, 0);
+}
+
+JNIEXPORT void JNICALL GL_NATIVE(glViewport)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
+{
+ DEBUG_CALL("glViewport\n")
+
+ glViewport(arg0, arg1, arg2, arg3);
+}
diff --git a/bundles/org.eclipse.swt.opengl/common/gl_library/glu.c b/bundles/org.eclipse.swt.opengl/common/gl_library/glu.c new file mode 100644 index 0000000000..b1d51689ac --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/common/gl_library/glu.c @@ -0,0 +1,529 @@ +/*******************************************************************************
+ * 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
+ *******************************************************************************/
+#ifdef WIN32
+#include <windows.h>
+#endif
+#include <GL/glu.h>
+#include "swt.h"
+
+#define GLU_NATIVE(func) Java_org_eclipse_swt_opengl_GLU_##func
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluBeginCurve)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("gluBeginCurve\n")
+
+ gluBeginCurve((GLUnurbsObj *)arg0);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluBeginPolygon)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("gluBeginPolygon\n")
+
+ gluBeginPolygon((GLUtesselator *)arg0);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluBeginSurface)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("gluBeginSurface\n")
+
+ gluBeginSurface((GLUnurbs *)arg0);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluBeginTrim)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("gluBeginTrim\n")
+
+ gluBeginTrim((GLUnurbs *)arg0);
+}
+
+JNIEXPORT jint JNICALL GLU_NATIVE(gluBuild1DMipmaps)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5)
+{
+ DEBUG_CALL("gluBuild1DMipmaps\n")
+
+ return (jint)gluBuild1DMipmaps(arg0, arg1, arg2, arg3, arg4, (const void *)arg5);
+}
+
+/*
+JNIEXPORT jint JNICALL GLU_NATIVE(gluBuild2DMipmaps)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5, jint arg6)
+{
+ DEBUG_CALL("gluBuild2DMipmaps\n")
+
+ return (jint)gluBuild2DMipmaps(arg0, arg1, arg2, arg3, arg4, arg5, (const void *)arg6);
+}
+*/
+
+JNIEXPORT jint JNICALL GLU_NATIVE(gluBuild2DMipmaps)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5, jbyteArray arg6)
+{
+ jbyte *lparg6=NULL;
+ jint rc;
+
+ DEBUG_CALL("gluBuild2DMipmaps\n")
+ if (arg6) lparg6 = (*env)->GetByteArrayElements(env, arg6, NULL);
+ rc = (jint)gluBuild2DMipmaps(arg0, arg1, arg2, arg3, arg4, arg5, (const void *)lparg6);
+ if (arg6) (*env)->ReleaseByteArrayElements(env, arg6, lparg6, 0);
+ return rc;
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluCylinder)
+ (JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2, jdouble arg3, jint arg4, jint arg5)
+{
+ DEBUG_CALL("gluCylinder\n")
+
+ gluCylinder((GLUquadric *)arg0, arg1, arg2, arg3, arg4, arg5);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluDeleteNurbsRenderer)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("gluDeleteNurbsRenderer\n")
+
+ gluDeleteNurbsRenderer((GLUnurbs *)arg0);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluDeleteQuadric)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("gluDeleteQuadric\n")
+
+ gluDeleteQuadric((GLUquadric *)arg0);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluDeleteTess)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("gluDeleteTess\n")
+
+ gluDeleteTess((GLUtesselator *)arg0);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluDisk)
+ (JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2, jint arg3, jint arg4)
+{
+ DEBUG_CALL("gluDisk\n")
+
+ gluDisk((GLUquadric *)arg0, arg1, arg2, arg3, arg4);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluEndCurve)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("gluEndCurve\n")
+
+ gluEndCurve((GLUnurbsObj *)arg0);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluEndPolygon)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("gluEndPolygon\n")
+
+ gluEndPolygon((GLUtesselator *)arg0);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluEndSurface)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("gluEndSurface\n")
+
+ gluEndSurface((GLUnurbs *)arg0);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluEndTrim)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("gluEndTrim\n")
+
+ gluEndTrim((GLUnurbs *)arg0);
+}
+
+JNIEXPORT jint JNICALL GLU_NATIVE(gluErrorString)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("gluErrorString\n")
+
+ return (jint)gluErrorString(arg0);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluGetNurbsProperty)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2)
+{
+ jfloat *lparg2=NULL;
+
+ DEBUG_CALL("gluGetNurbsProperty\n")
+
+ if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
+ gluGetNurbsProperty((GLUnurbs *)arg0, arg1, lparg2);
+ if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT jint JNICALL GLU_NATIVE(gluGetString)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("gluGetString\n")
+
+ return (jint)gluGetString(arg0);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluGetTessProperty)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jdoubleArray arg2)
+{
+ jdouble *lparg2=NULL;
+
+ DEBUG_CALL("gluGetTessProperty\n")
+
+ if (arg2) lparg2 = (*env)->GetDoubleArrayElements(env, arg2, NULL);
+ gluGetTessProperty((GLUtesselator *)arg0, arg1, lparg2);
+ if (arg2) (*env)->ReleaseDoubleArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluLoadSamplingMatrices)
+ (JNIEnv *env, jclass that, jint arg0, jfloatArray arg1, jfloatArray arg2, jintArray arg3)
+{
+ jfloat *lparg1=NULL;
+ jfloat *lparg2=NULL;
+ jint *lparg3=NULL;
+
+ DEBUG_CALL("gluLoadSamplingMatrices\n")
+
+ if (arg1) lparg1 = (*env)->GetFloatArrayElements(env, arg1, NULL);
+ if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
+ if (arg3) lparg3 = (*env)->GetIntArrayElements(env, arg3, NULL);
+ gluLoadSamplingMatrices((GLUnurbs *)arg0, lparg1, lparg2, (GLint *)lparg3);
+ if (arg1) (*env)->ReleaseFloatArrayElements(env, arg1, lparg1, 0);
+ if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
+ if (arg3) (*env)->ReleaseIntArrayElements(env, arg3, lparg3, 0);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluLookAt)
+ (JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3, jdouble arg4, jdouble arg5, jdouble arg6, jdouble arg7, jdouble arg8)
+{
+ DEBUG_CALL("gluLookAt\n")
+
+ gluLookAt(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8);
+}
+
+JNIEXPORT jint JNICALL GLU_NATIVE(gluNewNurbsRenderer)
+ (JNIEnv *env, jclass that)
+{
+ DEBUG_CALL("gluNewNurbsRenderer\n")
+
+ return (jint)gluNewNurbsRenderer();
+}
+
+JNIEXPORT jint JNICALL GLU_NATIVE(gluNewQuadric)
+ (JNIEnv *env, jclass that)
+{
+ DEBUG_CALL("gluNewQuadric\n")
+
+ return (jint)gluNewQuadric();
+}
+
+JNIEXPORT jint JNICALL GLU_NATIVE(gluNewTess)
+ (JNIEnv *env, jclass that)
+{
+ DEBUG_CALL("gluNewTess\n")
+
+ return (jint)gluNewTess();
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluNextContour)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+ DEBUG_CALL("gluNextContour\n")
+
+ gluNextContour((GLUtesselator *)arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluNurbsCallback)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+ DEBUG_CALL("gluNurbsCallback\n")
+
+ gluNurbsCallback((GLUnurbs *)arg0, arg1, (GLvoid(*))arg2);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluNurbsCurve)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2, jint arg3, jfloatArray arg4, jint arg5, jint arg6)
+{
+ jfloat *lparg2=NULL;
+ jfloat *lparg4=NULL;
+
+ DEBUG_CALL("gluNurbsCurve\n")
+
+ if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
+ if (arg4) lparg4 = (*env)->GetFloatArrayElements(env, arg4, NULL);
+ gluNurbsCurve((GLUnurbs *)arg0, arg1, lparg2, arg3, lparg4, arg5, arg6);
+ if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
+ if (arg4) (*env)->ReleaseFloatArrayElements(env, arg4, lparg4, 0);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluNurbsProperty)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jfloat arg2)
+{
+ DEBUG_CALL("gluNurbsProperty\n")
+
+ gluNurbsProperty((GLUnurbs *)arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluNurbsSurface)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2, jint arg3, jfloatArray arg4, jint arg5, jint arg6, jfloatArray arg7, jint arg8, jint arg9, jint arg10)
+{
+ jfloat *lparg2=NULL;
+ jfloat *lparg4=NULL;
+ jfloat *lparg7=NULL;
+
+ DEBUG_CALL("gluNurbsSurface\n")
+
+ if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
+ if (arg4) lparg4 = (*env)->GetFloatArrayElements(env, arg4, NULL);
+ if (arg7) lparg7 = (*env)->GetFloatArrayElements(env, arg7, NULL);
+ gluNurbsSurface((GLUnurbs *)arg0, arg1, lparg2, arg3, lparg4, arg5, arg6, lparg7, arg8, arg9, arg10);
+ if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
+ if (arg4) (*env)->ReleaseFloatArrayElements(env, arg4, lparg4, 0);
+ if (arg7) (*env)->ReleaseFloatArrayElements(env, arg7, lparg7, 0);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluOrtho2D)
+ (JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3)
+{
+ DEBUG_CALL("gluOrtho2D\n")
+
+ gluOrtho2D(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluPartialDisk)
+ (JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2, jint arg3, jint arg4, jdouble arg5, jdouble arg6)
+{
+ DEBUG_CALL("gluPartialDisk\n")
+
+ gluPartialDisk((GLUquadric *)arg0, arg1, arg2, arg3, arg4, arg5, arg6);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluPerspective)
+ (JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3)
+{
+ DEBUG_CALL("gluPerspective\n")
+
+ gluPerspective(arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluPickMatrix)
+ (JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdouble arg3, jintArray arg4)
+{
+ jint *lparg4=NULL;
+
+ DEBUG_CALL("gluPickMatrix\n")
+
+ if (arg4) lparg4 = (*env)->GetIntArrayElements(env, arg4, NULL);
+ gluPickMatrix(arg0, arg1, arg2, arg3, (GLint *)lparg4);
+ if (arg4) (*env)->ReleaseIntArrayElements(env, arg4, lparg4, 0);
+}
+
+JNIEXPORT jint JNICALL GLU_NATIVE(gluProject)
+ (JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdoubleArray arg3, jdoubleArray arg4, jintArray arg5, jdoubleArray arg6, jdoubleArray arg7, jdoubleArray arg8)
+{
+ jdouble *lparg3=NULL;
+ jdouble *lparg4=NULL;
+ jint *lparg5=NULL;
+ jdouble *lparg6=NULL;
+ jdouble *lparg7=NULL;
+ jdouble *lparg8=NULL;
+ jint rc;
+
+ DEBUG_CALL("gluProject\n")
+
+ if (arg3) lparg3 = (*env)->GetDoubleArrayElements(env, arg3, NULL);
+ if (arg4) lparg4 = (*env)->GetDoubleArrayElements(env, arg4, NULL);
+ if (arg5) lparg5 = (*env)->GetIntArrayElements(env, arg5, NULL);
+ if (arg6) lparg6 = (*env)->GetDoubleArrayElements(env, arg6, NULL);
+ if (arg7) lparg7 = (*env)->GetDoubleArrayElements(env, arg7, NULL);
+ if (arg8) lparg8 = (*env)->GetDoubleArrayElements(env, arg8, NULL);
+ rc = (jint)gluProject(arg0, arg1, arg2, lparg3, lparg4, (GLint *)lparg5, lparg6, lparg7, lparg8);
+ if (arg3) (*env)->ReleaseDoubleArrayElements(env, arg3, lparg3, 0);
+ if (arg4) (*env)->ReleaseDoubleArrayElements(env, arg4, lparg4, 0);
+ if (arg5) (*env)->ReleaseIntArrayElements(env, arg5, lparg5, 0);
+ if (arg6) (*env)->ReleaseDoubleArrayElements(env, arg6, lparg6, 0);
+ if (arg7) (*env)->ReleaseDoubleArrayElements(env, arg7, lparg7, 0);
+ if (arg8) (*env)->ReleaseDoubleArrayElements(env, arg8, lparg8, 0);
+ return rc;
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluPwlCurve)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jfloatArray arg2, jint arg3, jint arg4)
+{
+ jfloat *lparg2=NULL;
+
+ DEBUG_CALL("gluPwlCurve\n")
+
+ if (arg2) lparg2 = (*env)->GetFloatArrayElements(env, arg2, NULL);
+ gluPwlCurve((GLUnurbs *)arg0, arg1, lparg2, arg3, arg4);
+ if (arg2) (*env)->ReleaseFloatArrayElements(env, arg2, lparg2, 0);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluQuadricCallback)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+ DEBUG_CALL("gluQuadricCallback\n")
+
+ gluQuadricCallback((GLUquadric *)arg0, arg1, (GLvoid(*))arg2);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluQuadricDrawStyle)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+ DEBUG_CALL("gluQuadricDrawStyle\n")
+
+ gluQuadricDrawStyle((GLUquadric *)arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluQuadricNormals)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+ DEBUG_CALL("gluQuadricNormals\n")
+
+ gluQuadricNormals((GLUquadric *)arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluQuadricOrientation)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+ DEBUG_CALL("gluQuadricOrientation\n")
+
+ gluQuadricOrientation((GLUquadric *)arg0, arg1);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluQuadricTexture)
+ (JNIEnv *env, jclass that, jint arg0, jboolean arg1)
+{
+ DEBUG_CALL("gluQuadricTexture\n")
+
+ gluQuadricTexture((GLUquadric *)arg0, arg1);
+}
+
+JNIEXPORT jint JNICALL GLU_NATIVE(gluScaleImage)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5, jint arg6, jint arg7, jint arg8)
+{
+ DEBUG_CALL("gluScaleImage\n")
+
+ return (jint)gluScaleImage(arg0, arg1, arg2, arg3, (const void *)arg4, arg5, arg6, arg7, (void *)arg8);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluSphere)
+ (JNIEnv *env, jclass that, jint arg0, jdouble arg1, jint arg2, jint arg3)
+{
+ DEBUG_CALL("gluSphere\n")
+
+ gluSphere((GLUquadric *)arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluTessBeginContour)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("gluTessBeginContour\n")
+
+ gluTessBeginContour((GLUtesselator *)arg0);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluTessBeginPolygon)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+ DEBUG_CALL("gluTessBeginPolygon\n")
+
+ gluTessBeginPolygon((GLUtesselator *)arg0, (void *)arg1);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluTessCallback)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+ DEBUG_CALL("gluTessCallback\n")
+
+ gluTessCallback((GLUtesselator *)arg0, arg1, (GLvoid(*))arg2);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluTessEndContour)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("gluTessEndContour\n")
+
+ gluTessEndContour((GLUtesselator *)arg0);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluTessEndPolygon)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("gluTessEndPolygon\n")
+
+ gluTessEndPolygon((GLUtesselator *)arg0);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluTessNormal)
+ (JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2, jdouble arg3)
+{
+ DEBUG_CALL("gluTessNormal\n")
+
+ gluTessNormal((GLUtesselator *)arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluTessProperty)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jfloat arg2)
+{
+ DEBUG_CALL("gluTessProperty\n")
+
+ gluTessProperty((GLUtesselator *)arg0, arg1, arg2);
+}
+
+JNIEXPORT void JNICALL GLU_NATIVE(gluTessVertex)
+ (JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1, jint arg2)
+{
+ jdouble *lparg1=NULL;
+
+ DEBUG_CALL("gluTessVertex\n")
+
+ if (arg1) lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL);
+ gluTessVertex((GLUtesselator *)arg0, lparg1, (void *)arg2);
+ if (arg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
+}
+
+JNIEXPORT jint JNICALL GLU_NATIVE(gluUnProject)
+ (JNIEnv *env, jclass that, jdouble arg0, jdouble arg1, jdouble arg2, jdoubleArray arg3, jdoubleArray arg4, jintArray arg5, jdoubleArray arg6, jdoubleArray arg7, jdoubleArray arg8)
+{
+ jdouble *lparg3=NULL;
+ jdouble *lparg4=NULL;
+ jint *lparg5=NULL;
+ jdouble *lparg6=NULL;
+ jdouble *lparg7=NULL;
+ jdouble *lparg8=NULL;
+ jint rc;
+
+ DEBUG_CALL("gluUnProject\n")
+
+ if (arg3) lparg3 = (*env)->GetDoubleArrayElements(env, arg3, NULL);
+ if (arg4) lparg4 = (*env)->GetDoubleArrayElements(env, arg4, NULL);
+ if (arg5) lparg5 = (*env)->GetIntArrayElements(env, arg5, NULL);
+ if (arg6) lparg6 = (*env)->GetDoubleArrayElements(env, arg6, NULL);
+ if (arg7) lparg7 = (*env)->GetDoubleArrayElements(env, arg7, NULL);
+ if (arg8) lparg8 = (*env)->GetDoubleArrayElements(env, arg8, NULL);
+ rc = (jint)gluUnProject(arg0, arg1, arg2, lparg3, lparg4, (GLint *)lparg5, lparg6, lparg7, lparg8);
+ if (arg3) (*env)->ReleaseDoubleArrayElements(env, arg3, lparg3, 0);
+ if (arg4) (*env)->ReleaseDoubleArrayElements(env, arg4, lparg4, 0);
+ if (arg5) (*env)->ReleaseIntArrayElements(env, arg5, lparg5, 0);
+ if (arg6) (*env)->ReleaseDoubleArrayElements(env, arg6, lparg6, 0);
+ if (arg7) (*env)->ReleaseDoubleArrayElements(env, arg7, lparg7, 0);
+ if (arg8) (*env)->ReleaseDoubleArrayElements(env, arg8, lparg8, 0);
+ return rc;
+}
diff --git a/bundles/org.eclipse.swt.opengl/common/gl_library/swt.h b/bundles/org.eclipse.swt.opengl/common/gl_library/swt.h new file mode 100644 index 0000000000..4c6e704369 --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/common/gl_library/swt.h @@ -0,0 +1,47 @@ +/******************************************************************************* + * 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 + *******************************************************************************/ +
+#ifndef INC_swt_H
+#define INC_swt_H
+
+#include "jni.h"
+
+/* For debugging */
+#define DEBUG_PRINTF(x)
+/*#define DEBUG_PRINTF(x) printf x; */
+
+/* define this to print out debug statements */
+/* #define DEBUG_CALL_PRINTS */ +/* #define DEBUG_CHECK_NULL_EXCEPTIONS */ + +#ifdef DEBUG_CALL_PRINTS +#define DEBUG_CALL(func) fprintf(stderr, func); +#else +#define DEBUG_CALL(func) +#endif + +#ifdef DEBUG_CHECK_NULL_EXCEPTIONS +#define DEBUG_CHECK_NULL(env, address) \ + if (address == 0) { \ + jclass clazz = (*env)->FindClass(env, "org/eclipse/swt/SWTError"); \ + if (clazz != NULL) { \ + (*env)->ThrowNew(env, clazz, "Argument cannot be NULL"); \ + } \ + return; \ + } +#else +#define DEBUG_CHECK_NULL(env, address) +#endif
+
+#define DECL_GLOB(pSym)
+#define PGLOB(x) x
+
+#endif /* ifndef INC_swt_H */
diff --git a/bundles/org.eclipse.swt.opengl/common/org/eclipse/swt/opengl/GL.java b/bundles/org.eclipse.swt.opengl/common/org/eclipse/swt/opengl/GL.java new file mode 100644 index 0000000000..ba4b372784 --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/common/org/eclipse/swt/opengl/GL.java @@ -0,0 +1,1449 @@ +/******************************************************************************* + * 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; + +public class GL { + + public static final int GL_VERSION_1_1 = 1; + + /* AccumOp */ + public static final int GL_ACCUM = 0x0100; + public static final int GL_LOAD = 0x0101; + public static final int GL_RETURN = 0x0102; + public static final int GL_MULT = 0x0103; + public static final int GL_ADD = 0x0104; + + /* AlphaFunction */ + public static final int GL_NEVER = 0x0200; + public static final int GL_LESS = 0x0201; + public static final int GL_EQUAL = 0x0202; + public static final int GL_LEQUAL = 0x0203; + public static final int GL_GREATER = 0x0204; + public static final int GL_NOTEQUAL = 0x0205; + public static final int GL_GEQUAL = 0x0206; + public static final int GL_ALWAYS = 0x0207; + + /* AttribMask */ + public static final int GL_CURRENT_BIT = 0x00000001; + public static final int GL_POINT_BIT = 0x00000002; + public static final int GL_LINE_BIT = 0x00000004; + public static final int GL_POLYGON_BIT = 0x00000008; + public static final int GL_POLYGON_STIPPLE_BIT = 0x00000010; + public static final int GL_PIXEL_MODE_BIT = 0x00000020; + public static final int GL_LIGHTING_BIT = 0x00000040; + public static final int GL_FOG_BIT = 0x00000080; + public static final int GL_DEPTH_BUFFER_BIT = 0x00000100; + public static final int GL_ACCUM_BUFFER_BIT = 0x00000200; + public static final int GL_STENCIL_BUFFER_BIT = 0x00000400; + public static final int GL_VIEWPORT_BIT = 0x00000800; + public static final int GL_TRANSFORM_BIT = 0x00001000; + public static final int GL_ENABLE_BIT = 0x00002000; + public static final int GL_COLOR_BUFFER_BIT = 0x00004000; + public static final int GL_HINT_BIT = 0x00008000; + public static final int GL_EVAL_BIT = 0x00010000; + public static final int GL_LIST_BIT = 0x00020000; + public static final int GL_TEXTURE_BIT = 0x00040000; + public static final int GL_SCISSOR_BIT = 0x00080000; + public static final int GL_ALL_ATTRIB_BITS = 0x000fffff; + + /* BeginMode */ + public static final int GL_POINTS = 0x0000; + public static final int GL_LINES = 0x0001; + public static final int GL_LINE_LOOP = 0x0002; + public static final int GL_LINE_STRIP = 0x0003; + public static final int GL_TRIANGLES = 0x0004; + public static final int GL_TRIANGLE_STRIP = 0x0005; + public static final int GL_TRIANGLE_FAN = 0x0006; + public static final int GL_QUADS = 0x0007; + public static final int GL_QUAD_STRIP = 0x0008; + public static final int GL_POLYGON = 0x0009; + + /* BlendingFactorDest */ + public static final int GL_ZERO = 0; + public static final int GL_ONE = 1; + public static final int GL_SRC_COLOR = 0x0300; + public static final int GL_ONE_MINUS_SRC_COLOR = 0x0301; + public static final int GL_SRC_ALPHA = 0x0302; + public static final int GL_ONE_MINUS_SRC_ALPHA = 0x0303; + public static final int GL_DST_ALPHA = 0x0304; + public static final int GL_ONE_MINUS_DST_ALPHA = 0x0305; + + /* BlendingFactorSrc */ + /* GL_ZERO */ + /* GL_ONE */ + public static final int GL_DST_COLOR = 0x0306; + public static final int GL_ONE_MINUS_DST_COLOR = 0x0307; + public static final int GL_SRC_ALPHA_SATURATE = 0x0308; + /* GL_SRC_ALPHA */ + /* GL_ONE_MINUS_SRC_ALPHA */ + /* GL_DST_ALPHA */ + /* GL_ONE_MINUS_DST_ALPHA */ + + /* Boolean */ + public static final int GL_TRUE = 1; + public static final int GL_FALSE = 0; + + /* ClearBufferMask */ + /* GL_COLOR_BUFFER_BIT */ + /* GL_ACCUM_BUFFER_BIT */ + /* GL_STENCIL_BUFFER_BIT */ + /* GL_DEPTH_BUFFER_BIT */ + + /* ClientArrayType */ + /* GL_VERTEX_ARRAY */ + /* GL_NORMAL_ARRAY */ + /* GL_COLOR_ARRAY */ + /* GL_INDEX_ARRAY */ + /* GL_TEXTURE_COORD_ARRAY */ + /* GL_EDGE_FLAG_ARRAY */ + + /* ClipPlaneName */ + public static final int GL_CLIP_PLANE0 = 0x3000; + public static final int GL_CLIP_PLANE1 = 0x3001; + public static final int GL_CLIP_PLANE2 = 0x3002; + public static final int GL_CLIP_PLANE3 = 0x3003; + public static final int GL_CLIP_PLANE4 = 0x3004; + public static final int GL_CLIP_PLANE5 = 0x3005; + + /* ColorMaterialFace */ + /* GL_FRONT */ + /* GL_BACK */ + /* GL_FRONT_AND_BACK */ + + /* ColorMaterialParameter */ + /* GL_AMBIENT */ + /* GL_DIFFUSE */ + /* GL_SPECULAR */ + /* GL_EMISSION */ + /* GL_AMBIENT_AND_DIFFUSE */ + + /* ColorPointerType */ + /* GL_BYTE */ + /* GL_UNSIGNED_BYTE */ + /* GL_SHORT */ + /* GL_UNSIGNED_SHORT */ + /* GL_INT */ + /* GL_UNSIGNED_INT */ + /* GL_FLOAT */ + /* GL_DOUBLE */ + + /* CullFaceMode */ + /* GL_FRONT */ + /* GL_BACK */ + /* GL_FRONT_AND_BACK */ + + /* DataType */ + public static final int GL_BYTE = 0x1400; + public static final int GL_UNSIGNED_BYTE = 0x1401; + public static final int GL_SHORT = 0x1402; + public static final int GL_UNSIGNED_SHORT = 0x1403; + public static final int GL_INT = 0x1404; + public static final int GL_UNSIGNED_INT = 0x1405; + public static final int GL_FLOAT = 0x1406; + public static final int GL_2_BYTES = 0x1407; + public static final int GL_3_BYTES = 0x1408; + public static final int GL_4_BYTES = 0x1409; + public static final int GL_DOUBLE = 0x140A; + + /* DepthFunction */ + /* GL_NEVER */ + /* GL_LESS */ + /* GL_EQUAL */ + /* GL_LEQUAL */ + /* GL_GREATER */ + /* GL_NOTEQUAL */ + /* GL_GEQUAL */ + /* GL_ALWAYS */ + + /* DrawBufferMode */ + public static final int GL_NONE = 0; + public static final int GL_FRONT_LEFT = 0x0400; + public static final int GL_FRONT_RIGHT = 0x0401; + public static final int GL_BACK_LEFT = 0x0402; + public static final int GL_BACK_RIGHT = 0x0403; + public static final int GL_FRONT = 0x0404; + public static final int GL_BACK = 0x0405; + public static final int GL_LEFT = 0x0406; + public static final int GL_RIGHT = 0x0407; + public static final int GL_FRONT_AND_BACK = 0x0408; + public static final int GL_AUX0 = 0x0409; + public static final int GL_AUX1 = 0x040A; + public static final int GL_AUX2 = 0x040B; + public static final int GL_AUX3 = 0x040C; + + /* Enable */ + /* GL_FOG */ + /* GL_LIGHTING */ + /* GL_TEXTURE_1D */ + /* GL_TEXTURE_2D */ + /* GL_LINE_STIPPLE */ + /* GL_POLYGON_STIPPLE */ + /* GL_CULL_FACE */ + /* GL_ALPHA_TEST */ + /* GL_BLEND */ + /* GL_INDEX_LOGIC_OP */ + /* GL_COLOR_LOGIC_OP */ + /* GL_DITHER */ + /* GL_STENCIL_TEST */ + /* GL_DEPTH_TEST */ + /* GL_CLIP_PLANE0 */ + /* GL_CLIP_PLANE1 */ + /* GL_CLIP_PLANE2 */ + /* GL_CLIP_PLANE3 */ + /* GL_CLIP_PLANE4 */ + /* GL_CLIP_PLANE5 */ + /* GL_LIGHT0 */ + /* GL_LIGHT1 */ + /* GL_LIGHT2 */ + /* GL_LIGHT3 */ + /* GL_LIGHT4 */ + /* GL_LIGHT5 */ + /* GL_LIGHT6 */ + /* GL_LIGHT7 */ + /* GL_TEXTURE_GEN_S */ + /* GL_TEXTURE_GEN_T */ + /* GL_TEXTURE_GEN_R */ + /* GL_TEXTURE_GEN_Q */ + /* GL_MAP1_VERTEX_3 */ + /* GL_MAP1_VERTEX_4 */ + /* GL_MAP1_COLOR_4 */ + /* GL_MAP1_INDEX */ + /* GL_MAP1_NORMAL */ + /* GL_MAP1_TEXTURE_COORD_1 */ + /* GL_MAP1_TEXTURE_COORD_2 */ + /* GL_MAP1_TEXTURE_COORD_3 */ + /* GL_MAP1_TEXTURE_COORD_4 */ + /* GL_MAP2_VERTEX_3 */ + /* GL_MAP2_VERTEX_4 */ + /* GL_MAP2_COLOR_4 */ + /* GL_MAP2_INDEX */ + /* GL_MAP2_NORMAL */ + /* GL_MAP2_TEXTURE_COORD_1 */ + /* GL_MAP2_TEXTURE_COORD_2 */ + /* GL_MAP2_TEXTURE_COORD_3 */ + /* GL_MAP2_TEXTURE_COORD_4 */ + /* GL_POINT_SMOOTH */ + /* GL_LINE_SMOOTH */ + /* GL_POLYGON_SMOOTH */ + /* GL_SCISSOR_TEST */ + /* GL_COLOR_MATERIAL */ + /* GL_NORMALIZE */ + /* GL_AUTO_NORMAL */ + /* GL_VERTEX_ARRAY */ + /* GL_NORMAL_ARRAY */ + /* GL_COLOR_ARRAY */ + /* GL_INDEX_ARRAY */ + /* GL_TEXTURE_COORD_ARRAY */ + /* GL_EDGE_FLAG_ARRAY */ + /* GL_POLYGON_OFFSET_POINT */ + /* GL_POLYGON_OFFSET_LINE */ + /* GL_POLYGON_OFFSET_FILL */ + + /* ErrorCode */ + public static final int GL_NO_ERROR = 0; + public static final int GL_INVALID_ENUM = 0x0500; + public static final int GL_INVALID_VALUE = 0x0501; + public static final int GL_INVALID_OPERATION = 0x0502; + public static final int GL_STACK_OVERFLOW = 0x0503; + public static final int GL_STACK_UNDERFLOW = 0x0504; + public static final int GL_OUT_OF_MEMORY = 0x0505; + + /* FeedBackMode */ + public static final int GL_2D = 0x0600; + public static final int GL_3D = 0x0601; + public static final int GL_3D_COLOR = 0x0602; + public static final int GL_3D_COLOR_TEXTURE = 0x0603; + public static final int GL_4D_COLOR_TEXTURE = 0x0604; + + /* FeedBackToken */ + public static final int GL_PASS_THROUGH_TOKEN = 0x0700; + public static final int GL_POINT_TOKEN = 0x0701; + public static final int GL_LINE_TOKEN = 0x0702; + public static final int GL_POLYGON_TOKEN = 0x0703; + public static final int GL_BITMAP_TOKEN = 0x0704; + public static final int GL_DRAW_PIXEL_TOKEN = 0x0705; + public static final int GL_COPY_PIXEL_TOKEN = 0x0706; + public static final int GL_LINE_RESET_TOKEN = 0x0707; + + /* FogMode */ + /* GL_LINEAR */ + public static final int GL_EXP = 0x0800; + public static final int GL_EXP2 = 0x0801; + + /* FogParameter */ + /* GL_FOG_COLOR */ + /* GL_FOG_DENSITY */ + /* GL_FOG_END */ + /* GL_FOG_INDEX */ + /* GL_FOG_MODE */ + /* GL_FOG_START */ + + /* FrontFaceDirection */ + public static final int GL_CW = 0x0900; + public static final int GL_CCW = 0x0901; + + /* GetMapTarget */ + public static final int GL_COEFF = 0x0A00; + public static final int GL_ORDER = 0x0A01; + public static final int GL_DOMAIN = 0x0A02; + + /* GetPixelMap */ + /* GL_PIXEL_MAP_I_TO_I */ + /* GL_PIXEL_MAP_S_TO_S */ + /* GL_PIXEL_MAP_I_TO_R */ + /* GL_PIXEL_MAP_I_TO_G */ + /* GL_PIXEL_MAP_I_TO_B */ + /* GL_PIXEL_MAP_I_TO_A */ + /* GL_PIXEL_MAP_R_TO_R */ + /* GL_PIXEL_MAP_G_TO_G */ + /* GL_PIXEL_MAP_B_TO_B */ + /* GL_PIXEL_MAP_A_TO_A */ + + /* GetPointerTarget */ + /* GL_VERTEX_ARRAY_POINTER */ + /* GL_NORMAL_ARRAY_POINTER */ + /* GL_COLOR_ARRAY_POINTER */ + /* GL_INDEX_ARRAY_POINTER */ + /* GL_TEXTURE_COORD_ARRAY_POINTER */ + /* GL_EDGE_FLAG_ARRAY_POINTER */ + + /* GetTarget */ + public static final int GL_CURRENT_COLOR = 0x0B00; + public static final int GL_CURRENT_INDEX = 0x0B01; + public static final int GL_CURRENT_NORMAL = 0x0B02; + public static final int GL_CURRENT_TEXTURE_COORDS = 0x0B03; + public static final int GL_CURRENT_RASTER_COLOR = 0x0B04; + public static final int GL_CURRENT_RASTER_INDEX = 0x0B05; + public static final int GL_CURRENT_RASTER_TEXTURE_COORDS = 0x0B06; + public static final int GL_CURRENT_RASTER_POSITION = 0x0B07; + public static final int GL_CURRENT_RASTER_POSITION_VALID = 0x0B08; + public static final int GL_CURRENT_RASTER_DISTANCE = 0x0B09; + public static final int GL_POINT_SMOOTH = 0x0B10; + public static final int GL_POINT_SIZE = 0x0B11; + public static final int GL_POINT_SIZE_RANGE = 0x0B12; + public static final int GL_POINT_SIZE_GRANULARITY = 0x0B13; + public static final int GL_LINE_SMOOTH = 0x0B20; + public static final int GL_LINE_WIDTH = 0x0B21; + public static final int GL_LINE_WIDTH_RANGE = 0x0B22; + public static final int GL_LINE_WIDTH_GRANULARITY = 0x0B23; + public static final int GL_LINE_STIPPLE = 0x0B24; + public static final int GL_LINE_STIPPLE_PATTERN = 0x0B25; + public static final int GL_LINE_STIPPLE_REPEAT = 0x0B26; + public static final int GL_LIST_MODE = 0x0B30; + public static final int GL_MAX_LIST_NESTING = 0x0B31; + public static final int GL_LIST_BASE = 0x0B32; + public static final int GL_LIST_INDEX = 0x0B33; + public static final int GL_POLYGON_MODE = 0x0B40; + public static final int GL_POLYGON_SMOOTH = 0x0B41; + public static final int GL_POLYGON_STIPPLE = 0x0B42; + public static final int GL_EDGE_FLAG = 0x0B43; + public static final int GL_CULL_FACE = 0x0B44; + public static final int GL_CULL_FACE_MODE = 0x0B45; + public static final int GL_FRONT_FACE = 0x0B46; + public static final int GL_LIGHTING = 0x0B50; + public static final int GL_LIGHT_MODEL_LOCAL_VIEWER = 0x0B51; + public static final int GL_LIGHT_MODEL_TWO_SIDE = 0x0B52; + public static final int GL_LIGHT_MODEL_AMBIENT = 0x0B53; + public static final int GL_SHADE_MODEL = 0x0B54; + public static final int GL_COLOR_MATERIAL_FACE = 0x0B55; + public static final int GL_COLOR_MATERIAL_PARAMETER = 0x0B56; + public static final int GL_COLOR_MATERIAL = 0x0B57; + public static final int GL_FOG = 0x0B60; + public static final int GL_FOG_INDEX = 0x0B61; + public static final int GL_FOG_DENSITY = 0x0B62; + public static final int GL_FOG_START = 0x0B63; + public static final int GL_FOG_END = 0x0B64; + public static final int GL_FOG_MODE = 0x0B65; + public static final int GL_FOG_COLOR = 0x0B66; + public static final int GL_DEPTH_RANGE = 0x0B70; + public static final int GL_DEPTH_TEST = 0x0B71; + public static final int GL_DEPTH_WRITEMASK = 0x0B72; + public static final int GL_DEPTH_CLEAR_VALUE = 0x0B73; + public static final int GL_DEPTH_FUNC = 0x0B74; + public static final int GL_ACCUM_CLEAR_VALUE = 0x0B80; + public static final int GL_STENCIL_TEST = 0x0B90; + public static final int GL_STENCIL_CLEAR_VALUE = 0x0B91; + public static final int GL_STENCIL_FUNC = 0x0B92; + public static final int GL_STENCIL_VALUE_MASK = 0x0B93; + public static final int GL_STENCIL_FAIL = 0x0B94; + public static final int GL_STENCIL_PASS_DEPTH_FAIL = 0x0B95; + public static final int GL_STENCIL_PASS_DEPTH_PASS = 0x0B96; + public static final int GL_STENCIL_REF = 0x0B97; + public static final int GL_STENCIL_WRITEMASK = 0x0B98; + public static final int GL_MATRIX_MODE = 0x0BA0; + public static final int GL_NORMALIZE = 0x0BA1; + public static final int GL_VIEWPORT = 0x0BA2; + public static final int GL_MODELVIEW_STACK_DEPTH = 0x0BA3; + public static final int GL_PROJECTION_STACK_DEPTH = 0x0BA4; + public static final int GL_TEXTURE_STACK_DEPTH = 0x0BA5; + public static final int GL_MODELVIEW_MATRIX = 0x0BA6; + public static final int GL_PROJECTION_MATRIX = 0x0BA7; + public static final int GL_TEXTURE_MATRIX = 0x0BA8; + public static final int GL_ATTRIB_STACK_DEPTH = 0x0BB0; + public static final int GL_CLIENT_ATTRIB_STACK_DEPTH = 0x0BB1; + public static final int GL_ALPHA_TEST = 0x0BC0; + public static final int GL_ALPHA_TEST_FUNC = 0x0BC1; + public static final int GL_ALPHA_TEST_REF = 0x0BC2; + public static final int GL_DITHER = 0x0BD0; + public static final int GL_BLEND_DST = 0x0BE0; + public static final int GL_BLEND_SRC = 0x0BE1; + public static final int GL_BLEND = 0x0BE2; + public static final int GL_LOGIC_OP_MODE = 0x0BF0; + public static final int GL_INDEX_LOGIC_OP = 0x0BF1; + public static final int GL_COLOR_LOGIC_OP = 0x0BF2; + public static final int GL_AUX_BUFFERS = 0x0C00; + public static final int GL_DRAW_BUFFER = 0x0C01; + public static final int GL_READ_BUFFER = 0x0C02; + public static final int GL_SCISSOR_BOX = 0x0C10; + public static final int GL_SCISSOR_TEST = 0x0C11; + public static final int GL_INDEX_CLEAR_VALUE = 0x0C20; + public static final int GL_INDEX_WRITEMASK = 0x0C21; + public static final int GL_COLOR_CLEAR_VALUE = 0x0C22; + public static final int GL_COLOR_WRITEMASK = 0x0C23; + public static final int GL_INDEX_MODE = 0x0C30; + public static final int GL_RGBA_MODE = 0x0C31; + public static final int GL_DOUBLEBUFFER = 0x0C32; + public static final int GL_STEREO = 0x0C33; + public static final int GL_RENDER_MODE = 0x0C40; + public static final int GL_PERSPECTIVE_CORRECTION_HINT = 0x0C50; + public static final int GL_POINT_SMOOTH_HINT = 0x0C51; + public static final int GL_LINE_SMOOTH_HINT = 0x0C52; + public static final int GL_POLYGON_SMOOTH_HINT = 0x0C53; + public static final int GL_FOG_HINT = 0x0C54; + public static final int GL_TEXTURE_GEN_S = 0x0C60; + public static final int GL_TEXTURE_GEN_T = 0x0C61; + public static final int GL_TEXTURE_GEN_R = 0x0C62; + public static final int GL_TEXTURE_GEN_Q = 0x0C63; + public static final int GL_PIXEL_MAP_I_TO_I = 0x0C70; + public static final int GL_PIXEL_MAP_S_TO_S = 0x0C71; + public static final int GL_PIXEL_MAP_I_TO_R = 0x0C72; + public static final int GL_PIXEL_MAP_I_TO_G = 0x0C73; + public static final int GL_PIXEL_MAP_I_TO_B = 0x0C74; + public static final int GL_PIXEL_MAP_I_TO_A = 0x0C75; + public static final int GL_PIXEL_MAP_R_TO_R = 0x0C76; + public static final int GL_PIXEL_MAP_G_TO_G = 0x0C77; + public static final int GL_PIXEL_MAP_B_TO_B = 0x0C78; + public static final int GL_PIXEL_MAP_A_TO_A = 0x0C79; + public static final int GL_PIXEL_MAP_I_TO_I_SIZE = 0x0CB0; + public static final int GL_PIXEL_MAP_S_TO_S_SIZE = 0x0CB1; + public static final int GL_PIXEL_MAP_I_TO_R_SIZE = 0x0CB2; + public static final int GL_PIXEL_MAP_I_TO_G_SIZE = 0x0CB3; + public static final int GL_PIXEL_MAP_I_TO_B_SIZE = 0x0CB4; + public static final int GL_PIXEL_MAP_I_TO_A_SIZE = 0x0CB5; + public static final int GL_PIXEL_MAP_R_TO_R_SIZE = 0x0CB6; + public static final int GL_PIXEL_MAP_G_TO_G_SIZE = 0x0CB7; + public static final int GL_PIXEL_MAP_B_TO_B_SIZE = 0x0CB8; + public static final int GL_PIXEL_MAP_A_TO_A_SIZE = 0x0CB9; + public static final int GL_UNPACK_SWAP_BYTES = 0x0CF0; + public static final int GL_UNPACK_LSB_FIRST = 0x0CF1; + public static final int GL_UNPACK_ROW_LENGTH = 0x0CF2; + public static final int GL_UNPACK_SKIP_ROWS = 0x0CF3; + public static final int GL_UNPACK_SKIP_PIXELS = 0x0CF4; + public static final int GL_UNPACK_ALIGNMENT = 0x0CF5; + public static final int GL_PACK_SWAP_BYTES = 0x0D00; + public static final int GL_PACK_LSB_FIRST = 0x0D01; + public static final int GL_PACK_ROW_LENGTH = 0x0D02; + public static final int GL_PACK_SKIP_ROWS = 0x0D03; + public static final int GL_PACK_SKIP_PIXELS = 0x0D04; + public static final int GL_PACK_ALIGNMENT = 0x0D05; + public static final int GL_MAP_COLOR = 0x0D10; + public static final int GL_MAP_STENCIL = 0x0D11; + public static final int GL_INDEX_SHIFT = 0x0D12; + public static final int GL_INDEX_OFFSET = 0x0D13; + public static final int GL_RED_SCALE = 0x0D14; + public static final int GL_RED_BIAS = 0x0D15; + public static final int GL_ZOOM_X = 0x0D16; + public static final int GL_ZOOM_Y = 0x0D17; + public static final int GL_GREEN_SCALE = 0x0D18; + public static final int GL_GREEN_BIAS = 0x0D19; + public static final int GL_BLUE_SCALE = 0x0D1A; + public static final int GL_BLUE_BIAS = 0x0D1B; + public static final int GL_ALPHA_SCALE = 0x0D1C; + public static final int GL_ALPHA_BIAS = 0x0D1D; + public static final int GL_DEPTH_SCALE = 0x0D1E; + public static final int GL_DEPTH_BIAS = 0x0D1F; + public static final int GL_MAX_EVAL_ORDER = 0x0D30; + public static final int GL_MAX_LIGHTS = 0x0D31; + public static final int GL_MAX_CLIP_PLANES = 0x0D32; + public static final int GL_MAX_TEXTURE_SIZE = 0x0D33; + public static final int GL_MAX_PIXEL_MAP_TABLE = 0x0D34; + public static final int GL_MAX_ATTRIB_STACK_DEPTH = 0x0D35; + public static final int GL_MAX_MODELVIEW_STACK_DEPTH = 0x0D36; + public static final int GL_MAX_NAME_STACK_DEPTH = 0x0D37; + public static final int GL_MAX_PROJECTION_STACK_DEPTH = 0x0D38; + public static final int GL_MAX_TEXTURE_STACK_DEPTH = 0x0D39; + public static final int GL_MAX_VIEWPORT_DIMS = 0x0D3A; + public static final int GL_MAX_CLIENT_ATTRIB_STACK_DEPTH = 0x0D3B; + public static final int GL_SUBPIXEL_BITS = 0x0D50; + public static final int GL_INDEX_BITS = 0x0D51; + public static final int GL_RED_BITS = 0x0D52; + public static final int GL_GREEN_BITS = 0x0D53; + public static final int GL_BLUE_BITS = 0x0D54; + public static final int GL_ALPHA_BITS = 0x0D55; + public static final int GL_DEPTH_BITS = 0x0D56; + public static final int GL_STENCIL_BITS = 0x0D57; + public static final int GL_ACCUM_RED_BITS = 0x0D58; + public static final int GL_ACCUM_GREEN_BITS = 0x0D59; + public static final int GL_ACCUM_BLUE_BITS = 0x0D5A; + public static final int GL_ACCUM_ALPHA_BITS = 0x0D5B; + public static final int GL_NAME_STACK_DEPTH = 0x0D70; + public static final int GL_AUTO_NORMAL = 0x0D80; + public static final int GL_MAP1_COLOR_4 = 0x0D90; + public static final int GL_MAP1_INDEX = 0x0D91; + public static final int GL_MAP1_NORMAL = 0x0D92; + public static final int GL_MAP1_TEXTURE_COORD_1 = 0x0D93; + public static final int GL_MAP1_TEXTURE_COORD_2 = 0x0D94; + public static final int GL_MAP1_TEXTURE_COORD_3 = 0x0D95; + public static final int GL_MAP1_TEXTURE_COORD_4 = 0x0D96; + public static final int GL_MAP1_VERTEX_3 = 0x0D97; + public static final int GL_MAP1_VERTEX_4 = 0x0D98; + public static final int GL_MAP2_COLOR_4 = 0x0DB0; + public static final int GL_MAP2_INDEX = 0x0DB1; + public static final int GL_MAP2_NORMAL = 0x0DB2; + public static final int GL_MAP2_TEXTURE_COORD_1 = 0x0DB3; + public static final int GL_MAP2_TEXTURE_COORD_2 = 0x0DB4; + public static final int GL_MAP2_TEXTURE_COORD_3 = 0x0DB5; + public static final int GL_MAP2_TEXTURE_COORD_4 = 0x0DB6; + public static final int GL_MAP2_VERTEX_3 = 0x0DB7; + public static final int GL_MAP2_VERTEX_4 = 0x0DB8; + public static final int GL_MAP1_GRID_DOMAIN = 0x0DD0; + public static final int GL_MAP1_GRID_SEGMENTS = 0x0DD1; + public static final int GL_MAP2_GRID_DOMAIN = 0x0DD2; + public static final int GL_MAP2_GRID_SEGMENTS = 0x0DD3; + public static final int GL_TEXTURE_1D = 0x0DE0; + public static final int GL_TEXTURE_2D = 0x0DE1; + public static final int GL_FEEDBACK_BUFFER_POINTER = 0x0DF0; + public static final int GL_FEEDBACK_BUFFER_SIZE = 0x0DF1; + public static final int GL_FEEDBACK_BUFFER_TYPE = 0x0DF2; + public static final int GL_SELECTION_BUFFER_POINTER = 0x0DF3; + public static final int GL_SELECTION_BUFFER_SIZE = 0x0DF4; + /* GL_TEXTURE_BINDING_1D */ + /* GL_TEXTURE_BINDING_2D */ + /* GL_VERTEX_ARRAY */ + /* GL_NORMAL_ARRAY */ + /* GL_COLOR_ARRAY */ + /* GL_INDEX_ARRAY */ + /* GL_TEXTURE_COORD_ARRAY */ + /* GL_EDGE_FLAG_ARRAY */ + /* GL_VERTEX_ARRAY_SIZE */ + /* GL_VERTEX_ARRAY_TYPE */ + /* GL_VERTEX_ARRAY_STRIDE */ + /* GL_NORMAL_ARRAY_TYPE */ + /* GL_NORMAL_ARRAY_STRIDE */ + /* GL_COLOR_ARRAY_SIZE */ + /* GL_COLOR_ARRAY_TYPE */ + /* GL_COLOR_ARRAY_STRIDE */ + /* GL_INDEX_ARRAY_TYPE */ + /* GL_INDEX_ARRAY_STRIDE */ + /* GL_TEXTURE_COORD_ARRAY_SIZE */ + /* GL_TEXTURE_COORD_ARRAY_TYPE */ + /* GL_TEXTURE_COORD_ARRAY_STRIDE */ + /* GL_EDGE_FLAG_ARRAY_STRIDE */ + /* GL_POLYGON_OFFSET_FACTOR */ + /* GL_POLYGON_OFFSET_UNITS */ + + /* GetTextureParameter */ + /* GL_TEXTURE_MAG_FILTER */ + /* GL_TEXTURE_MIN_FILTER */ + /* GL_TEXTURE_WRAP_S */ + /* GL_TEXTURE_WRAP_T */ + public static final int GL_TEXTURE_WIDTH = 0x1000; + public static final int GL_TEXTURE_HEIGHT = 0x1001; + public static final int GL_TEXTURE_INTERNAL_FORMAT = 0x1003; + public static final int GL_TEXTURE_BORDER_COLOR = 0x1004; + public static final int GL_TEXTURE_BORDER = 0x1005; + /* GL_TEXTURE_RED_SIZE */ + /* GL_TEXTURE_GREEN_SIZE */ + /* GL_TEXTURE_BLUE_SIZE */ + /* GL_TEXTURE_ALPHA_SIZE */ + /* GL_TEXTURE_LUMINANCE_SIZE */ + /* GL_TEXTURE_INTENSITY_SIZE */ + /* GL_TEXTURE_PRIORITY */ + /* GL_TEXTURE_RESIDENT */ + + /* HintMode */ + public static final int GL_DONT_CARE = 0x1100; + public static final int GL_FASTEST = 0x1101; + public static final int GL_NICEST = 0x1102; + + /* HintTarget */ + /* GL_PERSPECTIVE_CORRECTION_HINT */ + /* GL_POINT_SMOOTH_HINT */ + /* GL_LINE_SMOOTH_HINT */ + /* GL_POLYGON_SMOOTH_HINT */ + /* GL_FOG_HINT */ + /* GL_PHONG_HINT */ + + /* IndexPointerType */ + /* GL_SHORT */ + /* GL_INT */ + /* GL_FLOAT */ + /* GL_DOUBLE */ + + /* LightModelParameter */ + /* GL_LIGHT_MODEL_AMBIENT */ + /* GL_LIGHT_MODEL_LOCAL_VIEWER */ + /* GL_LIGHT_MODEL_TWO_SIDE */ + + /* LightName */ + public static final int GL_LIGHT0 = 0x4000; + public static final int GL_LIGHT1 = 0x4001; + public static final int GL_LIGHT2 = 0x4002; + public static final int GL_LIGHT3 = 0x4003; + public static final int GL_LIGHT4 = 0x4004; + public static final int GL_LIGHT5 = 0x4005; + public static final int GL_LIGHT6 = 0x4006; + public static final int GL_LIGHT7 = 0x4007; + + /* LightParameter */ + public static final int GL_AMBIENT = 0x1200; + public static final int GL_DIFFUSE = 0x1201; + public static final int GL_SPECULAR = 0x1202; + public static final int GL_POSITION = 0x1203; + public static final int GL_SPOT_DIRECTION = 0x1204; + public static final int GL_SPOT_EXPONENT = 0x1205; + public static final int GL_SPOT_CUTOFF = 0x1206; + public static final int GL_CONSTANT_ATTENUATION = 0x1207; + public static final int GL_LINEAR_ATTENUATION = 0x1208; + public static final int GL_QUADRATIC_ATTENUATION = 0x1209; + + /* InterleavedArrays */ + /* GL_V2F */ + /* GL_V3F */ + /* GL_C4UB_V2F */ + /* GL_C4UB_V3F */ + /* GL_C3F_V3F */ + /* GL_N3F_V3F */ + /* GL_C4F_N3F_V3F */ + /* GL_T2F_V3F */ + /* GL_T4F_V4F */ + /* GL_T2F_C4UB_V3F */ + /* GL_T2F_C3F_V3F */ + /* GL_T2F_N3F_V3F */ + /* GL_T2F_C4F_N3F_V3F */ + /* GL_T4F_C4F_N3F_V4F */ + + /* ListMode */ + public static final int GL_COMPILE = 0x1300; + public static final int GL_COMPILE_AND_EXECUTE = 0x1301; + + /* ListNameType */ + /* GL_BYTE */ + /* GL_UNSIGNED_BYTE */ + /* GL_SHORT */ + /* GL_UNSIGNED_SHORT */ + /* GL_INT */ + /* GL_UNSIGNED_INT */ + /* GL_FLOAT */ + /* GL_2_BYTES */ + /* GL_3_BYTES */ + /* GL_4_BYTES */ + + /* LogicOp */ + public static final int GL_CLEAR = 0x1500; + public static final int GL_AND = 0x1501; + public static final int GL_AND_REVERSE = 0x1502; + public static final int GL_COPY = 0x1503; + public static final int GL_AND_INVERTED = 0x1504; + public static final int GL_NOOP = 0x1505; + public static final int GL_XOR = 0x1506; + public static final int GL_OR = 0x1507; + public static final int GL_NOR = 0x1508; + public static final int GL_EQUIV = 0x1509; + public static final int GL_INVERT = 0x150A; + public static final int GL_OR_REVERSE = 0x150B; + public static final int GL_COPY_INVERTED = 0x150C; + public static final int GL_OR_INVERTED = 0x150D; + public static final int GL_NAND = 0x150E; + public static final int GL_SET = 0x150F; + + /* MapTarget */ + /* GL_MAP1_COLOR_4 */ + /* GL_MAP1_INDEX */ + /* GL_MAP1_NORMAL */ + /* GL_MAP1_TEXTURE_COORD_1 */ + /* GL_MAP1_TEXTURE_COORD_2 */ + /* GL_MAP1_TEXTURE_COORD_3 */ + /* GL_MAP1_TEXTURE_COORD_4 */ + /* GL_MAP1_VERTEX_3 */ + /* GL_MAP1_VERTEX_4 */ + /* GL_MAP2_COLOR_4 */ + /* GL_MAP2_INDEX */ + /* GL_MAP2_NORMAL */ + /* GL_MAP2_TEXTURE_COORD_1 */ + /* GL_MAP2_TEXTURE_COORD_2 */ + /* GL_MAP2_TEXTURE_COORD_3 */ + /* GL_MAP2_TEXTURE_COORD_4 */ + /* GL_MAP2_VERTEX_3 */ + /* GL_MAP2_VERTEX_4 */ + + /* MaterialFace */ + /* GL_FRONT */ + /* GL_BACK */ + /* GL_FRONT_AND_BACK */ + + /* MaterialParameter */ + public static final int GL_EMISSION = 0x1600; + public static final int GL_SHININESS = 0x1601; + public static final int GL_AMBIENT_AND_DIFFUSE = 0x1602; + public static final int GL_COLOR_INDEXES = 0x1603; + /* GL_AMBIENT */ + /* GL_DIFFUSE */ + /* GL_SPECULAR */ + + /* MatrixMode */ + public static final int GL_MODELVIEW = 0x1700; + public static final int GL_PROJECTION = 0x1701; + public static final int GL_TEXTURE = 0x1702; + + /* MeshMode1 */ + /* GL_POINT */ + /* GL_LINE */ + + /* MeshMode2 */ + /* GL_POINT */ + /* GL_LINE */ + /* GL_FILL */ + + /* NormalPointerType */ + /* GL_BYTE */ + /* GL_SHORT */ + /* GL_INT */ + /* GL_FLOAT */ + /* GL_DOUBLE */ + + /* PixelCopyType */ + public static final int GL_COLOR = 0x1800; + public static final int GL_DEPTH = 0x1801; + public static final int GL_STENCIL = 0x1802; + + /* PixelFormat */ + public static final int GL_COLOR_INDEX = 0x1900; + public static final int GL_STENCIL_INDEX = 0x1901; + public static final int GL_DEPTH_COMPONENT = 0x1902; + public static final int GL_RED = 0x1903; + public static final int GL_GREEN = 0x1904; + public static final int GL_BLUE = 0x1905; + public static final int GL_ALPHA = 0x1906; + public static final int GL_RGB = 0x1907; + public static final int GL_RGBA = 0x1908; + public static final int GL_LUMINANCE = 0x1909; + public static final int GL_LUMINANCE_ALPHA = 0x190A; + + /* PixelMap */ + /* GL_PIXEL_MAP_I_TO_I */ + /* GL_PIXEL_MAP_S_TO_S */ + /* GL_PIXEL_MAP_I_TO_R */ + /* GL_PIXEL_MAP_I_TO_G */ + /* GL_PIXEL_MAP_I_TO_B */ + /* GL_PIXEL_MAP_I_TO_A */ + /* GL_PIXEL_MAP_R_TO_R */ + /* GL_PIXEL_MAP_G_TO_G */ + /* GL_PIXEL_MAP_B_TO_B */ + /* GL_PIXEL_MAP_A_TO_A */ + + /* PixelStore */ + /* GL_UNPACK_SWAP_BYTES */ + /* GL_UNPACK_LSB_FIRST */ + /* GL_UNPACK_ROW_LENGTH */ + /* GL_UNPACK_SKIP_ROWS */ + /* GL_UNPACK_SKIP_PIXELS */ + /* GL_UNPACK_ALIGNMENT */ + /* GL_PACK_SWAP_BYTES */ + /* GL_PACK_LSB_FIRST */ + /* GL_PACK_ROW_LENGTH */ + /* GL_PACK_SKIP_ROWS */ + /* GL_PACK_SKIP_PIXELS */ + /* GL_PACK_ALIGNMENT */ + + /* PixelTransfer */ + /* GL_MAP_COLOR */ + /* GL_MAP_STENCIL */ + /* GL_INDEX_SHIFT */ + /* GL_INDEX_OFFSET */ + /* GL_RED_SCALE */ + /* GL_RED_BIAS */ + /* GL_GREEN_SCALE */ + /* GL_GREEN_BIAS */ + /* GL_BLUE_SCALE */ + /* GL_BLUE_BIAS */ + /* GL_ALPHA_SCALE */ + /* GL_ALPHA_BIAS */ + /* GL_DEPTH_SCALE */ + /* GL_DEPTH_BIAS */ + + /* PixelType */ + public static final int GL_BITMAP = 0x1A00; + /* GL_BYTE */ + /* GL_UNSIGNED_BYTE */ + /* GL_SHORT */ + /* GL_UNSIGNED_SHORT */ + /* GL_INT */ + /* GL_UNSIGNED_INT */ + /* GL_FLOAT */ + + /* PolygonMode */ + public static final int GL_POINT = 0x1B00; + public static final int GL_LINE = 0x1B01; + public static final int GL_FILL = 0x1B02; + + /* ReadBufferMode */ + /* GL_FRONT_LEFT */ + /* GL_FRONT_RIGHT */ + /* GL_BACK_LEFT */ + /* GL_BACK_RIGHT */ + /* GL_FRONT */ + /* GL_BACK */ + /* GL_LEFT */ + /* GL_RIGHT */ + /* GL_AUX0 */ + /* GL_AUX1 */ + /* GL_AUX2 */ + /* GL_AUX3 */ + + /* RenderingMode */ + public static final int GL_RENDER = 0x1C00; + public static final int GL_FEEDBACK = 0x1C01; + public static final int GL_SELECT = 0x1C02; + + /* ShadingModel */ + public static final int GL_FLAT = 0x1D00; + public static final int GL_SMOOTH = 0x1D01; + + /* StencilFunction */ + /* GL_NEVER */ + /* GL_LESS */ + /* GL_EQUAL */ + /* GL_LEQUAL */ + /* GL_GREATER */ + /* GL_NOTEQUAL */ + /* GL_GEQUAL */ + /* GL_ALWAYS */ + + /* StencilOp */ + /* GL_ZERO */ + public static final int GL_KEEP = 0x1E00; + public static final int GL_REPLACE = 0x1E01; + public static final int GL_INCR = 0x1E02; + public static final int GL_DECR = 0x1E03; + /* GL_INVERT */ + + /* StringName */ + public static final int GL_VENDOR = 0x1F00; + public static final int GL_RENDERER = 0x1F01; + public static final int GL_VERSION = 0x1F02; + public static final int GL_EXTENSIONS = 0x1F03; + + /* TextureCoordName */ + public static final int GL_S = 0x2000; + public static final int GL_T = 0x2001; + public static final int GL_R = 0x2002; + public static final int GL_Q = 0x2003; + + /* TexCoordPointerType */ + /* GL_SHORT */ + /* GL_INT */ + /* GL_FLOAT */ + /* GL_DOUBLE */ + + /* TextureEnvMode */ + public static final int GL_MODULATE = 0x2100; + public static final int GL_DECAL = 0x2101; + /* GL_BLEND */ + /* GL_REPLACE */ + + /* TextureEnvParameter */ + public static final int GL_TEXTURE_ENV_MODE = 0x2200; + public static final int GL_TEXTURE_ENV_COLOR = 0x2201; + + /* TextureEnvTarget */ + public static final int GL_TEXTURE_ENV = 0x2300; + + /* TextureGenMode */ + public static final int GL_EYE_LINEAR = 0x2400; + public static final int GL_OBJECT_LINEAR = 0x2401; + public static final int GL_SPHERE_MAP = 0x2402; + + /* TextureGenParameter */ + public static final int GL_TEXTURE_GEN_MODE = 0x2500; + public static final int GL_OBJECT_PLANE = 0x2501; + public static final int GL_EYE_PLANE = 0x2502; + + /* TextureMagFilter */ + public static final int GL_NEAREST = 0x2600; + public static final int GL_LINEAR = 0x2601; + + /* TextureMinFilter */ + /* GL_NEAREST */ + /* GL_LINEAR */ + public static final int GL_NEAREST_MIPMAP_NEAREST = 0x2700; + public static final int GL_LINEAR_MIPMAP_NEAREST = 0x2701; + public static final int GL_NEAREST_MIPMAP_LINEAR = 0x2702; + public static final int GL_LINEAR_MIPMAP_LINEAR = 0x2703; + + /* TextureParameterName */ + public static final int GL_TEXTURE_MAG_FILTER = 0x2800; + public static final int GL_TEXTURE_MIN_FILTER = 0x2801; + public static final int GL_TEXTURE_WRAP_S = 0x2802; + public static final int GL_TEXTURE_WRAP_T = 0x2803; + /* GL_TEXTURE_BORDER_COLOR */ + /* GL_TEXTURE_PRIORITY */ + + /* TextureTarget */ + /* GL_TEXTURE_1D */ + /* GL_TEXTURE_2D */ + /* GL_PROXY_TEXTURE_1D */ + /* GL_PROXY_TEXTURE_2D */ + + /* TextureWrapMode */ + public static final int GL_CLAMP = 0x2900; + public static final int GL_REPEAT = 0x2901; + + /* VertexPointerType */ + /* GL_SHORT */ + /* GL_INT */ + /* GL_FLOAT */ + /* GL_DOUBLE */ + + /* ClientAttribMask */ + public static final int GL_CLIENT_PIXEL_STORE_BIT = 0x00000001; + public static final int GL_CLIENT_VERTEX_ARRAY_BIT = 0x00000002; + public static final int GL_CLIENT_ALL_ATTRIB_BITS = 0xffffffff; + + /* polygon_offset */ + public static final int GL_POLYGON_OFFSET_FACTOR = 0x8038; + public static final int GL_POLYGON_OFFSET_UNITS = 0x2A00; + public static final int GL_POLYGON_OFFSET_POINT = 0x2A01; + public static final int GL_POLYGON_OFFSET_LINE = 0x2A02; + public static final int GL_POLYGON_OFFSET_FILL = 0x8037; + + /* texture */ + public static final int GL_ALPHA4 = 0x803B; + public static final int GL_ALPHA8 = 0x803C; + public static final int GL_ALPHA12 = 0x803D; + public static final int GL_ALPHA16 = 0x803E; + public static final int GL_LUMINANCE4 = 0x803F; + public static final int GL_LUMINANCE8 = 0x8040; + public static final int GL_LUMINANCE12 = 0x8041; + public static final int GL_LUMINANCE16 = 0x8042; + public static final int GL_LUMINANCE4_ALPHA4 = 0x8043; + public static final int GL_LUMINANCE6_ALPHA2 = 0x8044; + public static final int GL_LUMINANCE8_ALPHA8 = 0x8045; + public static final int GL_LUMINANCE12_ALPHA4 = 0x8046; + public static final int GL_LUMINANCE12_ALPHA12 = 0x8047; + public static final int GL_LUMINANCE16_ALPHA16 = 0x8048; + public static final int GL_INTENSITY = 0x8049; + public static final int GL_INTENSITY4 = 0x804A; + public static final int GL_INTENSITY8 = 0x804B; + public static final int GL_INTENSITY12 = 0x804C; + public static final int GL_INTENSITY16 = 0x804D; + public static final int GL_R3_G3_B2 = 0x2A10; + public static final int GL_RGB4 = 0x804F; + public static final int GL_RGB5 = 0x8050; + public static final int GL_RGB8 = 0x8051; + public static final int GL_RGB10 = 0x8052; + public static final int GL_RGB12 = 0x8053; + public static final int GL_RGB16 = 0x8054; + public static final int GL_RGBA2 = 0x8055; + public static final int GL_RGBA4 = 0x8056; + public static final int GL_RGB5_A1 = 0x8057; + public static final int GL_RGBA8 = 0x8058; + public static final int GL_RGB10_A2 = 0x8059; + public static final int GL_RGBA12 = 0x805A; + public static final int GL_RGBA16 = 0x805B; + public static final int GL_TEXTURE_RED_SIZE = 0x805C; + public static final int GL_TEXTURE_GREEN_SIZE = 0x805D; + public static final int GL_TEXTURE_BLUE_SIZE = 0x805E; + public static final int GL_TEXTURE_ALPHA_SIZE = 0x805F; + public static final int GL_TEXTURE_LUMINANCE_SIZE = 0x8060; + public static final int GL_TEXTURE_INTENSITY_SIZE = 0x8061; + public static final int GL_PROXY_TEXTURE_1D = 0x8063; + public static final int GL_PROXY_TEXTURE_2D = 0x8064; + + /* texture_object */ + public static final int GL_TEXTURE_PRIORITY = 0x8066; + public static final int GL_TEXTURE_RESIDENT = 0x8067; + public static final int GL_TEXTURE_BINDING_1D = 0x8068; + public static final int GL_TEXTURE_BINDING_2D = 0x8069; + + /* vertex_array */ + public static final int GL_VERTEX_ARRAY = 0x8074; + public static final int GL_NORMAL_ARRAY = 0x8075; + public static final int GL_COLOR_ARRAY = 0x8076; + public static final int GL_INDEX_ARRAY = 0x8077; + public static final int GL_TEXTURE_COORD_ARRAY = 0x8078; + public static final int GL_EDGE_FLAG_ARRAY = 0x8079; + public static final int GL_VERTEX_ARRAY_SIZE = 0x807A; + public static final int GL_VERTEX_ARRAY_TYPE = 0x807B; + public static final int GL_VERTEX_ARRAY_STRIDE = 0x807C; + public static final int GL_NORMAL_ARRAY_TYPE = 0x807E; + public static final int GL_NORMAL_ARRAY_STRIDE = 0x807F; + public static final int GL_COLOR_ARRAY_SIZE = 0x8081; + public static final int GL_COLOR_ARRAY_TYPE = 0x8082; + public static final int GL_COLOR_ARRAY_STRIDE = 0x8083; + public static final int GL_INDEX_ARRAY_TYPE = 0x8085; + public static final int GL_INDEX_ARRAY_STRIDE = 0x8086; + public static final int GL_TEXTURE_COORD_ARRAY_SIZE = 0x8088; + public static final int GL_TEXTURE_COORD_ARRAY_TYPE = 0x8089; + public static final int GL_TEXTURE_COORD_ARRAY_STRIDE = 0x808A; + public static final int GL_EDGE_FLAG_ARRAY_STRIDE = 0x808C; + public static final int GL_VERTEX_ARRAY_POINTER = 0x808E; + public static final int GL_NORMAL_ARRAY_POINTER = 0x808F; + public static final int GL_COLOR_ARRAY_POINTER = 0x8090; + public static final int GL_INDEX_ARRAY_POINTER = 0x8091; + public static final int GL_TEXTURE_COORD_ARRAY_POINTER = 0x8092; + public static final int GL_EDGE_FLAG_ARRAY_POINTER = 0x8093; + public static final int GL_V2F = 0x2A20; + public static final int GL_V3F = 0x2A21; + public static final int GL_C4UB_V2F = 0x2A22; + public static final int GL_C4UB_V3F = 0x2A23; + public static final int GL_C3F_V3F = 0x2A24; + public static final int GL_N3F_V3F = 0x2A25; + public static final int GL_C4F_N3F_V3F = 0x2A26; + public static final int GL_T2F_V3F = 0x2A27; + public static final int GL_T4F_V4F = 0x2A28; + public static final int GL_T2F_C4UB_V3F = 0x2A29; + public static final int GL_T2F_C3F_V3F = 0x2A2A; + public static final int GL_T2F_N3F_V3F = 0x2A2B; + public static final int GL_T2F_C4F_N3F_V3F = 0x2A2C; + public static final int GL_T4F_C4F_N3F_V4F = 0x2A2D; + + /* Extensions */ + public static final int GL_EXT_vertex_array = 1; + public static final int GL_EXT_bgra = 1; + public static final int GL_EXT_paletted_texture = 1; + public static final int GL_WIN_swap_hint = 1; + public static final int GL_WIN_draw_range_elements = 1; + // public static final int GL_WIN_phong_shading = 1; + // public static final int GL_WIN_specular_fog = 1; + + /* EXT_vertex_array */ + public static final int GL_VERTEX_ARRAY_EXT = 0x8074; + public static final int GL_NORMAL_ARRAY_EXT = 0x8075; + public static final int GL_COLOR_ARRAY_EXT = 0x8076; + public static final int GL_INDEX_ARRAY_EXT = 0x8077; + public static final int GL_TEXTURE_COORD_ARRAY_EXT = 0x8078; + public static final int GL_EDGE_FLAG_ARRAY_EXT = 0x8079; + public static final int GL_VERTEX_ARRAY_SIZE_EXT = 0x807A; + public static final int GL_VERTEX_ARRAY_TYPE_EXT = 0x807B; + public static final int GL_VERTEX_ARRAY_STRIDE_EXT = 0x807C; + public static final int GL_VERTEX_ARRAY_COUNT_EXT = 0x807D; + public static final int GL_NORMAL_ARRAY_TYPE_EXT = 0x807E; + public static final int GL_NORMAL_ARRAY_STRIDE_EXT = 0x807F; + public static final int GL_NORMAL_ARRAY_COUNT_EXT = 0x8080; + public static final int GL_COLOR_ARRAY_SIZE_EXT = 0x8081; + public static final int GL_COLOR_ARRAY_TYPE_EXT = 0x8082; + public static final int GL_COLOR_ARRAY_STRIDE_EXT = 0x8083; + public static final int GL_COLOR_ARRAY_COUNT_EXT = 0x8084; + public static final int GL_INDEX_ARRAY_TYPE_EXT = 0x8085; + public static final int GL_INDEX_ARRAY_STRIDE_EXT = 0x8086; + public static final int GL_INDEX_ARRAY_COUNT_EXT = 0x8087; + public static final int GL_TEXTURE_COORD_ARRAY_SIZE_EXT = 0x8088; + public static final int GL_TEXTURE_COORD_ARRAY_TYPE_EXT = 0x8089; + public static final int GL_TEXTURE_COORD_ARRAY_STRIDE_EXT = 0x808A; + public static final int GL_TEXTURE_COORD_ARRAY_COUNT_EXT = 0x808B; + public static final int GL_EDGE_FLAG_ARRAY_STRIDE_EXT = 0x808C; + public static final int GL_EDGE_FLAG_ARRAY_COUNT_EXT = 0x808D; + public static final int GL_VERTEX_ARRAY_POINTER_EXT = 0x808E; + public static final int GL_NORMAL_ARRAY_POINTER_EXT = 0x808F; + public static final int GL_COLOR_ARRAY_POINTER_EXT = 0x8090; + public static final int GL_INDEX_ARRAY_POINTER_EXT = 0x8091; + public static final int GL_TEXTURE_COORD_ARRAY_POINTER_EXT = 0x8092; + public static final int GL_EDGE_FLAG_ARRAY_POINTER_EXT = 0x8093; + public static final int GL_DOUBLE_EXT = GL_DOUBLE; + + /* EXT_bgra */ + public static final int GL_BGR_EXT = 0x80E0; + public static final int GL_BGRA_EXT = 0x80E1; + + /* EXT_paletted_texture */ + + /* These must match the GL_COLOR_TABLE_*_SGI enumerants */ + public static final int GL_COLOR_TABLE_FORMAT_EXT = 0x80D8; + public static final int GL_COLOR_TABLE_WIDTH_EXT = 0x80D9; + public static final int GL_COLOR_TABLE_RED_SIZE_EXT = 0x80DA; + public static final int GL_COLOR_TABLE_GREEN_SIZE_EXT = 0x80DB; + public static final int GL_COLOR_TABLE_BLUE_SIZE_EXT = 0x80DC; + public static final int GL_COLOR_TABLE_ALPHA_SIZE_EXT = 0x80DD; + public static final int GL_COLOR_TABLE_LUMINANCE_SIZE_EXT = 0x80DE; + public static final int GL_COLOR_TABLE_INTENSITY_SIZE_EXT = 0x80DF; + + public static final int GL_COLOR_INDEX1_EXT = 0x80E2; + public static final int GL_COLOR_INDEX2_EXT = 0x80E3; + public static final int GL_COLOR_INDEX4_EXT = 0x80E4; + public static final int GL_COLOR_INDEX8_EXT = 0x80E5; + public static final int GL_COLOR_INDEX12_EXT = 0x80E6; + public static final int GL_COLOR_INDEX16_EXT = 0x80E7; + + /* WIN_draw_range_elements */ + public static final int GL_MAX_ELEMENTS_VERTICES_WIN = 0x80E8; + public static final int GL_MAX_ELEMENTS_INDICES_WIN = 0x80E9; + + /* WIN_phong_shading */ + public static final int GL_PHONG_WIN = 0x80EA; + public static final int GL_PHONG_HINT_WIN = 0x80EB; + + /* WIN_specular_fog */ + public static final int GL_FOG_SPECULAR_TEXTURE_WIN = 0x80EC; + + /* For compatibility with OpenGL v1.0 */ + public static final int GL_LOGIC_OP = GL_INDEX_LOGIC_OP; + public static final int GL_TEXTURE_COMPONENTS = GL_TEXTURE_INTERNAL_FORMAT; + + public static final native void glAccum (int op, float value); + public static final native void glAlphaFunc (int func, float ref); + public static final native boolean glAreTexturesResident (int n, int[] textures, boolean[] residences); + public static final native void glArrayElement (int index); + public static final native int glBegin (int mode); + public static final native int glEnd (); + public static final native void glBindTexture (int target, int texture); + public static final native void glBitmap (int width, int height, float xorig, float yorig, float xmove, float ymove, byte[] bitmap); + public static final native void glBlendFunc (int sfactor, int dfactor); + public static final native void glCallList (int list); + public static final native void glCallLists (int n, int type, byte[] lists); + public static final native void glCallLists (int n, int type, char[] lists); + public static final native void glCallLists (int n, int type, int[] lists); + public static final native void glClear (int mask); + public static final native void glClearAccum (float red, float green, float blue, float alpha); + public static final native void glClearColor (float red, float green, float blue, float alpha); + public static final native void glClearDepth (double depth); + public static final native void glClearIndex (float c); + public static final native void glClearStencil (int s); + public static final native void glClipPlane (int plane, double[] equation); + public static final native void glColor3b (byte red, byte green, byte blue); + public static final native void glColor3d (double red, double green, double blue); + public static final native void glColor3f (float red, float green, float blue); + public static final native void glColor3i (int red, int green, int blue); + public static final native void glColor3s (short red, short green, short blue); + public static final native void glColor3ub (byte red, byte green, byte blue); + public static final native void glColor3ui (int red, int green, int blue); + public static final native void glColor3us (short red, short green, short blue); + public static final native void glColor4b (byte red, byte green, byte blue, byte alpha); + public static final native void glColor4d (double red, double green, double blue, double alpha); + public static final native void glColor4f (float red, float green, float blue, float alpha); + public static final native void glColor4i (int red, int green, int blue, int alpha); + public static final native void glColor4s (short red, short green, short blue, short alpha); + public static final native void glColor4ub (byte red, byte green, byte blue, byte alpha); + public static final native void glColor4ui (int red, int green, int blue, int alpha); + public static final native void glColor4us (short red, short green, short blue, short alpha); + public static final native void glColor3bv (byte[] v); + public static final native void glColor3dv (double[] v); + public static final native void glColor3fv (float[] v); + public static final native void glColor3iv (int[] v); + public static final native void glColor3sv (short[] v); + public static final native void glColor3ubv (byte[] v); + public static final native void glColor3uiv (int[] v); + public static final native void glColor3usv (short[] v); + public static final native void glColor4bv (byte[] v); + public static final native void glColor4dv (double[] v); + public static final native void glColor4fv (float[] v); + public static final native void glColor4iv (int[] v); + public static final native void glColor4ubv (byte[] v); + public static final native void glColor4uiv (int[] v); + public static final native void glColor4usv (short[] v); + public static final native void glColor4ubv (short[] v); + public static final native void glColorMask (boolean red, boolean green, boolean blue, boolean alpha); + public static final native void glColorMaterial (int face, int mode); + public static final native void glColorPointer (int size, int type, int stride, int[] pointer); + //public static final native void glColorTableEXT (int target, int internalFormat, int width, int format, int type, int[] data); + //public static final native void glColorSubTableEXT (int target, int start, int count, int format, int type, int[] data); + public static final native void glCopyPixels (int x, int y, int width, int height, int type); + public static final native void glCopyTexImage1D (int target, int level, int internalFormat, int x, int y, int width, int border); + public static final native void glCopyTexImage2D (int target, int level, int internalFormat, int x, int y, int width, int height, int border); + public static final native void glCopyTexSubImage1D (int target, int level, int xoffset, int x, int y, int width); + public static final native void glCopyTexSubImage2D (int target, int level, int xoffset, int yoffset, int x, int y, int width, int height); + public static final native void glCullFace (int mode); + public static final native void glDeleteLists (int list, int range); + public static final native void glDeleteTextures (int n, int[] textures); + public static final native void glDepthFunc (int func); + public static final native void glDepthMask (boolean flag); + public static final native void glDepthRange (double znear, double zfar); + public static final native void glDrawArrays (int mode, int first, int count); + public static final native void glDrawBuffer (int mode); + public static final native void glDrawElements (int mode, int count, int type, int[] indices); /* MULTIPLES TYPES */ + public static final native void glDrawPixels (int width, int height, int format, int type, int[] pixels); /* MULTIPLES TYPES */ + public static final native void glEdgeFlag (boolean flag); + public static final native void glEdgeFlagv (boolean[] flag); + public static final native void glEdgeFlagPointer (int stride, boolean[] pointer); + public static final native void glEnable (int cap); + public static final native void glDisable (int cap); + public static final native void glEnableClientState (int array); + public static final native void glDisableClientState (int array); + public static final native void glEvalCoord1d (double u); + public static final native void glEvalCoord1f (float u); + public static final native void glEvalCoord2d (double u, double v); + public static final native void glEvalCoord2f (float u, float v); + public static final native void glEvalCoord1dv (double[] u); + public static final native void glEvalCoord1fv (float[] u); + public static final native void glEvalCoord2dv (double[] u); + public static final native void glEvalCoord2fv (float[] u); + public static final native void glEvalMesh1 (int mode, int i1, int i2); + public static final native void glEvalMesh2 (int mode, int i1, int i2, int j1, int j2); + public static final native void glEvalPoint1 (int i); + public static final native void glEvalPoint2 (int i, int j); + public static final native void glFeedbackBuffer (int size, int type, float[] buffer); + public static final native void glFinish (); + public static final native void glFlush (); + public static final native void glFogf (int pname, float param); + public static final native void glFogi (int pname, int param); + public static final native void glFogfv (int pname, float[] params); + public static final native void glFogiv (int pname, int[] params); + public static final native void glFrontFace (int mode); + public static final native void glFrustum (double left, double right, double bottom, double top, double znear, double zfar); + public static final native int glGenLists (int range); + public static final native void glGenTextures (int n, int[] textures); + public static final native void glGetBooleanv (int pname, boolean[] params); + public static final native void glGetDoublev (int pname, double[] params); + public static final native void glGetFloatv (int pname, float[] params); + public static final native void glGetIntegerv (int pname, int[] params); + public static final native void glGetClipPlane (int plane, double[] equation); + //public static final native void glGetColorTableEXT (int target, int format, int type, int[] data); + //public static final native void glGetColorTableParameterfvEXT (int target, int pname, float[] params); + //public static final native void glGetColorTableParameterivEXT (int target, int pname, int[] params); + public static final native int glGetError (); + public static final native void glGetLightfv (int light, int pname, float[] params); + public static final native void glGetLightiv (int light, int pname, int[] params); + public static final native void glGetMapdv (int tagert, int query, double[] v); + public static final native void glGetMapfv (int tagert, int query, float[] v); + public static final native void glGetMapiv (int tagert, int query, int[] v); + public static final native void glGetMaterialfv (int face, int pname, float[] params); + public static final native void glGetMaterialiv (int face, int pname, int[] params); + public static final native void glGetPixelMapfv (int map, float[] values); + public static final native void glGetPixelMapuiv (int map, int[] values); + public static final native void glGetPixelMapusv (int map, short[] values); + public static final native void glGetPointerv (int pname, int[] params); + /* TEST */ + public static final native void glGetPolygonStipple (byte[] mask); + public static final native int glGetString (int name); + /* SHOULD RETURN A STRING */ + public static final native void glGetTexEnvfv (int target, int pname, float[] params); + public static final native void glGetTexEnviv (int target, int pname, int[] params); + public static final native void glGetTexGendv (int coord, int pname, double[] params); + public static final native void glGetTexGenfv (int coord, int pname, float[] params); + public static final native void glGetTexGeniv (int coord, int pname, int[] params); + public static final native void glGetTexImage (int target, int level, int format, int type, int[] pixels); /* MULTIPLES TYPES ARRAY */ + public static final native void glGetTexLevelParameterfv (int target, int level, int pname, float[] params); + public static final native void glGetTexLevelParameteriv (int target, int level, int pname, int[] params); + public static final native void glGetTexParameterfv (int target, int pname, float[] params); + public static final native void glGetTexParameteriv (int target, int pname, int[] params); + public static final native void glHint (int target, int mode); + public static final native void glIndexd (double c); + public static final native void glIndexf (float c); + public static final native void glIndexi (int c); + public static final native void glIndexs (short c); + public static final native void glIndexdv (double[] c); + public static final native void glIndexfv (float[] c); + public static final native void glIndexiv (int[] c); + public static final native void glIndexsv (short[] c); + public static final native void glIndexMask (int mask); + public static final native void glIndexPointer (int type, int stride, int[] pointer); + /* MULTIPLES TYPES */ + public static final native void glInitNames (); + public static final native void glInterleavedArrays (int format, int stride, int[] pointer); + /* CHECK */ + public static final native boolean glIsEnabled (int cap); + public static final native boolean glIsList (int list); + public static final native boolean glIsTexture (int texture); + public static final native void glLightf (int light, int pname, float param); + public static final native void glLighti (int light, int pname, int param); + public static final native void glLightfv (int light, int pname, float[] param); + //public static final native void glLightfv (int light, int pname, int param); + public static final native void glLightiv (int light, int pname, int[] param); + public static final native void glLightModelf (int pname, float param); + public static final native void glLightModeli (int pname, int param); + public static final native void glLightModelfv (int pname, float[] param); + public static final native void glLightModeliv (int pname, int[] param); + public static final native void glLineStipple (int factor, short pattern); + public static final native void glLineWidth (float width); + public static final native void glListBase (int base); + public static final native void glLoadIdentity (); + public static final native void glLoadMatrixd (double[] m); + public static final native void glLoadMatrixf (float[] m); + public static final native void glLoadName (int name); + public static final native void glLogicOp (int opcode); + public static final native void glMap1d (int target, double u1, double u2, int stride, int order, double[] points); + public static final native void glMap1f (int target, float u1, float u2, int stride, int order, float[] points); + public static final native void glMap2d (int target, double u1, double u2, int ustride, int uorder, double v1, double v2, int vstride, int vorder, double[] points); + public static final native void glMap2f (int target, float u1, float u2, int ustride, int uorder, float v1, float v2, int vstride, int vorder, float[] points); + public static final native void glMapGrid1d (int un, double u1, double u2); + public static final native void glMapGrid1f (int un, float u1, float u2); + public static final native void glMapGrid2d (int un, double u1, double u2, int vm, double v1, double v2); + public static final native void glMapGrid2f (int un, float u1, float u2, int vm, float v1, float v2); + public static final native void glMaterialf (int face, int pname, float param); + public static final native void glMateriali (int face, int pname, int param); + public static final native void glMaterialfv (int face, int pname, float[] param); + public static final native void glMaterialiv (int face, int pname, int[] param); + public static final native void glMatrixMode (int mode); + public static final native void glMultMatrixd (double[] m); + public static final native void glMultMatrixf (float[] m); + public static final native void glNewList (int list, int mode); + public static final native void glEndList (); + public static final native void glNormal3b (byte nx, byte ny, byte nz); + public static final native void glNormal3d (double nx, double ny, double nz); + public static final native void glNormal3f (float nx, float ny, float nz); + public static final native void glNormal3i (int nx, int ny, int nz); + public static final native void glNormal3s (short nx, short ny, short nz); + public static final native void glNormal3bv (byte[] v); + public static final native void glNormal3dv (double[] v); + public static final native void glNormal3fv (float[] v); + public static final native void glNormal3iv (int[] v); + public static final native void glNormal3sv (short[] v); + public static final native void glNormalPointer (int type, int stride, int[] pointer); /* MULTIPLES TYPES ARRAY */ + public static final native void glOrtho (double left, double right, double bottom, double top, double znear, double zfar); + public static final native void glPassThrough (float token); + public static final native void glPixelMapfv (int map, int mapsize, float[] values); + public static final native void glPixelMapuiv (int map, int mapsize, int[] values); + public static final native void glPixelMapusv (int map, int mapsize, short[] values); + public static final native void glPixelStoref (int pname, float param); + public static final native void glPixelStorei (int pname, int param); + public static final native void glPixelTransferf (int pname, float param); + public static final native void glPixelTransferi (int pname, int param); + public static final native void glPixelZoom (float xfactor, float yfactor); + public static final native void glPointSize (float size); + public static final native void glPolygonMode (int face, int mode); + public static final native void glPolygonOffset (float factor, float units); + public static final native void glPolygonStipple (byte[] mask); + public static final native void glPrioritizeTextures (int n, int[] textures, float[] priorities); + public static final native void glPushAttrib (int mask); + public static final native void glPopAttrib (); + public static final native void glPushClientAttrib (int mask); + public static final native void glPopClientAttrib (); + public static final native void glPushMatrix (); + public static final native void glPopMatrix (); + public static final native void glPushName (int name); + public static final native void glPopName (); + public static final native void glRasterPos2d (double x, double y); + public static final native void glRasterPos2f (float x, float y); + public static final native void glRasterPos2i (int x, int y); + public static final native void glRasterPos2s (short x, short y); + public static final native void glRasterPos3d (double x, double y, double z); + public static final native void glRasterPos3f (float x, float y, float z); + public static final native void glRasterPos3i (int x, int y, int z); + public static final native void glRasterPos3s (short x, short y, short z); + public static final native void glRasterPos4d (double x, double y, double z, double w); + public static final native void glRasterPos4f (float x, float y, float z, float w); + public static final native void glRasterPos4i (int x, int y, int z, int w); + public static final native void glRasterPos4s (short x, short y, short z, short w); + public static final native void glRasterPos2dv (double[] v); + public static final native void glRasterPos2fv (float[] v); + public static final native void glRasterPos2iv (int[] v); + public static final native void glRasterPos2sv (short[] v); + public static final native void glRasterPos3dv (double[] v); + public static final native void glRasterPos3fv (float[] v); + public static final native void glRasterPos3iv (int[] v); + public static final native void glRasterPos3sv (short[] v); + public static final native void glRasterPos4dv (double[] v); + public static final native void glRasterPos4fv (float[] v); + public static final native void glRasterPos4iv (int[] v); + public static final native void glRasterPos4sv (short[] v); + public static final native void glReadBuffer (int mode); + public static final native void glReadPixels (int x, int y, int width, int height, int format, int type, int[] pixels); /* MULTIPLES TYPES ARRAY */ + public static final native void glRectd (double x1, double y1, double x2, double y2); + public static final native void glRectf (float x1, float y1, float x2, float y2); + public static final native void glRecti (int x1, int y1, int x2, int y2); + public static final native void glRects (short x1, short y1, short x2, short y2); + public static final native void glRectdv (double[] v1, double[] v2); + public static final native void glRectfv (float[] v1, float[] v2); + public static final native void glRectiv (int[] v1, int[] v2); + public static final native void glRectsv (short[] v, short[] v2); + public static final native int glRenderMode (int mode); + public static final native void glRotated (double angle, double x, double y, double z); + public static final native void glRotatef (float angle, float x, float y, float z); + public static final native void glScaled (double x, double y, double z); + public static final native void glScalef (float x, float y, float z); + public static final native void glScissor (int x, int y, int width, int height); + //public static final native void glSelectBuffer (int size, int[] buffer); + public static final native void glSelectBuffer (int size, int buffer); + public static final native void glShadeModel (int mode); + public static final native void glStencilFunc (int func, int ref, int mask); + public static final native void glStencilMask (int mask); + public static final native void glStencilOp (int fail, int zfail, int zpass); + public static final native void glTexCoord1d (double s); + public static final native void glTexCoord1f (float s); + public static final native void glTexCoord1i (int s); + public static final native void glTexCoord1s (short s); + public static final native void glTexCoord2d (double s, double t); + public static final native void glTexCoord2f (float s, float t); + public static final native void glTexCoord2i (int s, int t); + public static final native void glTexCoord2s (short s, short t); + public static final native void glTexCoord3d (double s, double t, double r); + public static final native void glTexCoord3f (float s, float t, float r); + public static final native void glTexCoord3i (int s, int t, int r); + public static final native void glTexCoord3s (short s, short t, short r); + public static final native void glTexCoord4d (double s, double t, double r, double q); + public static final native void glTexCoord4f (float s, float t, float r, float q); + public static final native void glTexCoord4i (int s, int t, int r, int q); + public static final native void glTexCoord4s (short s, short t, short r, short q); + public static final native void glTexCoord1dv (double[] v); + public static final native void glTexCoord1fv (float[] v); + public static final native void glTexCoord1iv (int[] v); + public static final native void glTexCoord1sv (short[] v); + public static final native void glTexCoord2dv (double[] v); + public static final native void glTexCoord2fv (float[] v); + public static final native void glTexCoord2iv (int[] v); + public static final native void glTexCoord2sv (short[] v); + public static final native void glTexCoord3dv (double[] v); + public static final native void glTexCoord3fv (float[] v); + public static final native void glTexCoord3iv (int[] v); + public static final native void glTexCoord3sv (short[] v); + public static final native void glTexCoord4dv (double[] v); + public static final native void glTexCoord4fv (float[] v); + public static final native void glTexCoord4iv (int[] v); + public static final native void glTexCoord4sv (short[] v); + public static final native void glTexCoordPointer (int size, int type, int stride, int[] pointer); /*MULTIPLES ARRAYS - CHECK MSDK, COUNT PARAM MISSING */ + public static final native void glTexEnvf (int target, int pname, float param); + public static final native void glTexEnvi (int target, int pname, int param); + public static final native void glTexEnvfv (int target, int pname, float[] params); + public static final native void glTexEnviv (int target, int pname, int[] params); + public static final native void glTexGend (int coord, int pname, double param); + public static final native void glTexGenf (int coord, int pname, float param); + public static final native void glTexGeni (int coord, int pname, int param); + public static final native void glTexGendv (int coord, int pname, double[] params); + public static final native void glTexGenfv (int coord, int pname, float[] params); + public static final native void glTexGeniv (int coord, int pname, int[] params); + public static final native void glTexImage1D (int target, int level, int internalFormat, int width, int border, int format, int type, int[] pixels); /* MULTIPLES ARRAYS */ + public static final native void glTexImage2D (int target, int level, int internalFormat, int width, int height, int border, int format, int type, byte[] pixels); /* MULTIPLES ARRAYS */ + public static final native void glTexParameterf (int target, int pname, float param); + public static final native void glTexParameteri (int target, int pname, int param); + public static final native void glTexParameterfv (int target, int pname, float[] params); + public static final native void glTexParameteriv (int target, int pname, int[] params); + public static final native void glTexSubImage1D (int target, int level, int xoffset, int width, int format, int type, int[] pixels); /* MULTIPLES ARRAYS */ + public static final native void glTexSubImage2D (int target, int level, int xoffset, int yoffset, int width, int height, int format, int type, int[] pixels); /* MULTIPLES ARRAYS */ + public static final native void glTranslated (double x, double y, double z); + public static final native void glTranslatef (float x, float y, float z); + public static final native void glVertex2d (double x, double y); + public static final native void glVertex2f (float x, float y); + public static final native void glVertex2i (int x, int y); + public static final native void glVertex2s (short x, short y); + public static final native void glVertex3d (double x, double y, double z); + public static final native void glVertex3f (float x, float y, float z); + public static final native void glVertex3i (int x, int y, int z); + public static final native void glVertex3s (short x, short y, short z); + public static final native void glVertex4d (double x, double y, double z, double w); + public static final native void glVertex4f (float x, float y, float z, float w); + public static final native void glVertex4i (int x, int y, int z, int w); + public static final native void glVertex4s (short x, short y, short z, short w); + public static final native void glVertex2dv (double[] v); + public static final native void glVertex2fv (float[] v); + public static final native void glVertex2iv (int[] v); + public static final native void glVertex2sv (short[] v); + public static final native int glVertex3dv (double[] v); + public static final native int glVertex3dv (int v); + public static final native void glVertex3fv (float[] v); + public static final native void glVertex3iv (int[] v); + public static final native void glVertex3sv (short[] v); + public static final native int glVertex4dv (double[] v); + public static final native void glVertex4fv (float[] v); + public static final native void glVertex4iv (int[] v); + public static final native void glVertex4sv (short[] v); + public static final native void glVertexPointer (int size, int type, int stride, int[] pointer); /* MULTIPLES ARRAYS */ + public static final native void glViewport (int x, int y, int width, int height); +}
\ No newline at end of file diff --git a/bundles/org.eclipse.swt.opengl/common/org/eclipse/swt/opengl/GLU.java b/bundles/org.eclipse.swt.opengl/common/org/eclipse/swt/opengl/GLU.java new file mode 100644 index 0000000000..2f837004a2 --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/common/org/eclipse/swt/opengl/GLU.java @@ -0,0 +1,245 @@ +/******************************************************************************* + * 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; + + +public class GLU { + + /* Version */ + public static final int GLU_VERSION_1_1 = 1; + public static final int GLU_VERSION_1_2 = 1; + + /* Errors: (return value 0 = no error) */ + public static final int GLU_INVALID_ENUM = 100900; + public static final int GLU_INVALID_VALUE = 100901; + public static final int GLU_OUT_OF_MEMORY = 100902; + public static final int GLU_INCOMPATIBLE_GL_VERSION = 100903; + + /* StringName */ + public static final int GLU_VERSION = 100800; + public static final int GLU_EXTENSIONS = 100801; + + + /**** Quadric constants ****/ + + /* QuadricNormal */ + public static final int GLU_SMOOTH = 100000; + public static final int GLU_FLAT = 100001; + public static final int GLU_NONE = 100002; + + /* QuadricDrawStyle */ + public static final int GLU_POINT = 100010; + public static final int GLU_LINE = 100011; + public static final int GLU_FILL = 100012; + public static final int GLU_SILHOUETTE = 100013; + + /* QuadricOrientation */ + public static final int GLU_OUTSIDE = 100020; + public static final int GLU_INSIDE = 100021; + + /* Callback types: */ + /* GLU_ERROR 100103 */ + + + /**** Tesselation constants ****/ + + public static final double GLU_TESS_MAX_COORD = 1.0e150; + + /* TessProperty */ + public static final int GLU_TESS_WINDING_RULE = 100140; + public static final int GLU_TESS_BOUNDARY_ONLY = 100141; + public static final int GLU_TESS_TOLERANCE = 100142; + + /* TessWinding */ + public static final int GLU_TESS_WINDING_ODD = 100130; + public static final int GLU_TESS_WINDING_NONZERO = 100131; + public static final int GLU_TESS_WINDING_POSITIVE = 100132; + public static final int GLU_TESS_WINDING_NEGATIVE = 100133; + public static final int GLU_TESS_WINDING_ABS_GEQ_TWO = 100134; + + /* TessCallback */ + public static final int GLU_TESS_BEGIN = 100100; /* void (CALLBACK*)(GLenum type) */ + public static final int GLU_TESS_VERTEX = 100101; /* void (CALLBACK*)(void *data) */ + public static final int GLU_TESS_END = 100102; /* void (CALLBACK*)(void) */ + public static final int GLU_TESS_ERROR = 100103; /* void (CALLBACK*)(GLenum errno) */ + public static final int GLU_TESS_EDGE_FLAG = 100104; /* void (CALLBACK*)(GLboolean boundaryEdge) */ + public static final int GLU_TESS_COMBINE = 100105; /* void (CALLBACK*)(GLdouble coords[3], + void *data[4], + GLfloat weight[4], + void **dataOut) */ + public static final int GLU_TESS_BEGIN_DATA = 100106; /* void (CALLBACK*)(GLenum type, + void *polygon_data) */ + public static final int GLU_TESS_VERTEX_DATA = 100107; /* void (CALLBACK*)(void *data, + void *polygon_data) */ + public static final int GLU_TESS_END_DATA = 100108; /* void (CALLBACK*)(void *polygon_data) */ + public static final int GLU_TESS_ERROR_DATA = 100109; /* void (CALLBACK*)(GLenum errno, + void *polygon_data) */ + public static final int GLU_TESS_EDGE_FLAG_DATA = 100110; /* void (CALLBACK*)(GLboolean boundaryEdge, + void *polygon_data) */ + public static final int GLU_TESS_COMBINE_DATA = 100111; /* void (CALLBACK*)(GLdouble coords[3], + void *data[4], + GLfloat weight[4], + void **dataOut, + void *polygon_data) */ + + /* TessError */ + public static final int GLU_TESS_ERROR1 = 100151; + public static final int GLU_TESS_ERROR2 = 100152; + public static final int GLU_TESS_ERROR3 = 100153; + public static final int GLU_TESS_ERROR4 = 100154; + public static final int GLU_TESS_ERROR5 = 100155; + public static final int GLU_TESS_ERROR6 = 100156; + public static final int GLU_TESS_ERROR7 = 100157; + public static final int GLU_TESS_ERROR8 = 100158; + + public static final int GLU_TESS_MISSING_BEGIN_POLYGON = GLU_TESS_ERROR1; + public static final int GLU_TESS_MISSING_BEGIN_CONTOUR = GLU_TESS_ERROR2; + public static final int GLU_TESS_MISSING_END_POLYGON = GLU_TESS_ERROR3; + public static final int GLU_TESS_MISSING_END_CONTOUR = GLU_TESS_ERROR4; + public static final int GLU_TESS_COORD_TOO_LARGE = GLU_TESS_ERROR5; + public static final int GLU_TESS_NEED_COMBINE_CALLBACK = GLU_TESS_ERROR6; + + /**** NURBS constants ****/ + + /* NurbsProperty */ + public static final int GLU_AUTO_LOAD_MATRIX = 100200; + public static final int GLU_CULLING = 100201; + public static final int GLU_SAMPLING_TOLERANCE = 100203; + public static final int GLU_DISPLAY_MODE = 100204; + public static final int GLU_PARAMETRIC_TOLERANCE = 100202; + public static final int GLU_SAMPLING_METHOD = 100205; + public static final int GLU_U_STEP = 100206; + public static final int GLU_V_STEP = 100207; + + /* NurbsSampling */ + public static final int GLU_PATH_LENGTH = 100215; + public static final int GLU_PARAMETRIC_ERROR = 100216; + public static final int GLU_DOMAIN_DISTANCE = 100217; + + + /* NurbsTrim */ + public static final int GLU_MAP1_TRIM_2 = 100210; + public static final int GLU_MAP1_TRIM_3 = 100211; + + /* NurbsDisplay */ + /* GLU_FILL 100012 */ + public static final int GLU_OUTLINE_POLYGON = 100240; + public static final int GLU_OUTLINE_PATCH = 100241; + + /* NurbsCallback */ + /* GLU_ERROR 100103 */ + + /* NurbsErrors */ + public static final int GLU_NURBS_ERROR1 = 100251; + public static final int GLU_NURBS_ERROR2 = 100252; + public static final int GLU_NURBS_ERROR3 = 100253; + public static final int GLU_NURBS_ERROR4 = 100254; + public static final int GLU_NURBS_ERROR5 = 100255; + public static final int GLU_NURBS_ERROR6 = 100256; + public static final int GLU_NURBS_ERROR7 = 100257; + public static final int GLU_NURBS_ERROR8 = 100258; + public static final int GLU_NURBS_ERROR9 = 100259; + public static final int GLU_NURBS_ERROR10 = 100260; + public static final int GLU_NURBS_ERROR11 = 100261; + public static final int GLU_NURBS_ERROR12 = 100262; + public static final int GLU_NURBS_ERROR13 = 100263; + public static final int GLU_NURBS_ERROR14 = 100264; + public static final int GLU_NURBS_ERROR15 = 100265; + public static final int GLU_NURBS_ERROR16 = 100266; + public static final int GLU_NURBS_ERROR17 = 100267; + public static final int GLU_NURBS_ERROR18 = 100268; + public static final int GLU_NURBS_ERROR19 = 100269; + public static final int GLU_NURBS_ERROR20 = 100270; + public static final int GLU_NURBS_ERROR21 = 100271; + public static final int GLU_NURBS_ERROR22 = 100272; + public static final int GLU_NURBS_ERROR23 = 100273; + public static final int GLU_NURBS_ERROR24 = 100274; + public static final int GLU_NURBS_ERROR25 = 100275; + public static final int GLU_NURBS_ERROR26 = 100276; + public static final int GLU_NURBS_ERROR27 = 100277; + public static final int GLU_NURBS_ERROR28 = 100278; + public static final int GLU_NURBS_ERROR29 = 100279; + public static final int GLU_NURBS_ERROR30 = 100280; + public static final int GLU_NURBS_ERROR31 = 100281; + public static final int GLU_NURBS_ERROR32 = 100282; + public static final int GLU_NURBS_ERROR33 = 100283; + public static final int GLU_NURBS_ERROR34 = 100284; + public static final int GLU_NURBS_ERROR35 = 100285; + public static final int GLU_NURBS_ERROR36 = 100286; + public static final int GLU_NURBS_ERROR37 = 100287; + + /* Contours types -- obsolete! */ + public static final int GLU_CW = 100120; + public static final int GLU_CCW = 100121; + public static final int GLU_INTERIOR = 100122; + public static final int GLU_EXTERIOR = 100123; + public static final int GLU_UNKNOWN = 100124; + + /* Names without "TESS_" prefix */ + public static final int GLU_BEGIN = GLU_TESS_BEGIN; + public static final int GLU_VERTEX = GLU_TESS_VERTEX; + public static final int GLU_END = GLU_TESS_END; + public static final int GLU_ERROR = GLU_TESS_ERROR; + public static final int GLU_EDGE_FLAG = GLU_TESS_EDGE_FLAG; + + + public static final native void gluBeginCurve (int nobj); + public static final native void gluEndCurve (int nobj); + public static final native void gluBeginPolygon (int tess); + public static final native void gluEndPolygon (int tess); + public static final native void gluBeginSurface (int nobj); + public static final native void gluEndSurface (int nobj); + public static final native void gluBeginTrim (int nobj); + public static final native void gluEndTrim (int nobj); + public static final native int gluBuild1DMipmaps (int target, int componenets, int width, int format, int type, int data); /* MULTIPLES TYPES ARRAY */ + public static final native int gluBuild2DMipmaps (int target, int componenets, int width, int height, int format, int type, byte[] data); /* MULTIPLES TYPES ARRAY */ + public static final native void gluCylinder (int qobj, double baseRadius, double topRadius, double height, int slices, int stacks); + public static final native void gluDeleteNurbsRenderer (int nobj); + public static final native void gluDeleteQuadric (int qobj); + public static final native void gluDeleteTess (int tess); + public static final native void gluDisk (int qobj, double innerRadius, double outerRadius, int slices, int loops); + public static final native int gluErrorString (int errCode); /* SHOULD RETURN A STRING */ + public static final native void gluGetNurbsProperty (int nobj, int property, float[] value); + public static final native int gluGetString (int name); /* SHOULD RETURN A STRING */ + public static final native void gluGetTessProperty (int tess, int which, double[] value); + public static final native void gluLoadSamplingMatrices (int nobj, float[] modelMatrix, float[] projMatrix, int[] viewport); + public static final native void gluLookAt (double eyex, double eyey, double eyez, double centerx, double centery, double centerz, double upx, double upy, double upz); + public static final native int gluNewNurbsRenderer (); + public static final native int gluNewQuadric (); + public static final native int gluNewTess (); + public static final native void gluNextContour (int tess, int type); + public static final native void gluNurbsCallback (int nobj, int which, int fn); + public static final native void gluNurbsCurve (int nobj, int nknots, float[] knot, int stride, float[] ctlarray, int order, int type); + public static final native void gluNurbsProperty (int nobj, int property, float value); + public static final native void gluNurbsSurface (int nobj, int sknot_count, float[] sknot, int tknot_count, float[] tknot, int s_stride, int t_stride, float[] ctlarray, int sorder, int torder, int type); + public static final native void gluOrtho2D (double left, double right, double bottom, double top); + public static final native void gluPartialDisk (int qobj, double innerRadius, double outerRadius, int slices, int loops, double startAngle, double sweepAngle); + public static final native void gluPerspective (double fovy, double aspect, double zNear, double zFar); + public static final native void gluPickMatrix (double x, double y, double width, double height, int[] viewport); + public static final native int gluProject (double objx, double objy, double objz,double[] modelMatrix, double[] projMatrix, int[] viewport, double[] winx, double[] winy, double[] winz); + public static final native void gluPwlCurve (int nobj, int count, float[] array, int stride, int type); + public static final native void gluQuadricCallback (int qobj, int which, int fn); + public static final native void gluQuadricDrawStyle (int qobj, int drawStyle); + public static final native void gluQuadricNormals (int qobj, int normals); + public static final native void gluQuadricOrientation (int qobj, int orientation); + public static final native void gluQuadricTexture (int qobj, boolean textureCoords); + public static final native int gluScaleImage (int format, int widthin, int heightin, int typein, int datain, int widthout, int heightout, int typeout, int dataout); /*MULTIPLES TYPES ARRAYS*/ + public static final native void gluSphere (int qobj, double radius, int slices, int stacks); + public static final native void gluTessBeginContour (int tess); + public static final native void gluTessEndContour (int tess); + public static final native void gluTessBeginPolygon (int tess, int polygon_data); + public static final native void gluTessEndPolygon (int tess); + public static final native void gluTessCallback (int tess, int which, int fn); + public static final native void gluTessNormal (int tess, double x, double y, double z); + public static final native void gluTessProperty (int tess, int property, double value); /* CHECK MSDN, VALUE'S TYPE IS DOUBLE */ + public static final native void gluTessVertex (int tess, double[] coords, int data); + public static final native int gluUnProject (double winx, double winy, double winz, double[] modelMatrix, double[] projMatrix, int[] viewport, double[] objx, double[] objy, double[] objz); +} diff --git a/bundles/org.eclipse.swt.opengl/common/org/eclipse/swt/opengl/GLYPHMETRICSFLOAT.java b/bundles/org.eclipse.swt.opengl/common/org/eclipse/swt/opengl/GLYPHMETRICSFLOAT.java new file mode 100644 index 0000000000..4da0a94c4b --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/common/org/eclipse/swt/opengl/GLYPHMETRICSFLOAT.java @@ -0,0 +1,22 @@ +/******************************************************************************* + * 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; + + +public class GLYPHMETRICSFLOAT { + public float gmfBlackBoxX; + public float gmfBlackBoxY; + public float gmfptGlyphOrigin_x; + public float gmfptGlyphOrigin_y; + public float gmfCellIncX; + public float gmfCellIncY; + public static final int sizeof = 24; +} diff --git a/bundles/org.eclipse.swt.opengl/common/org/eclipse/swt/opengl/ImageDataUtil.java b/bundles/org.eclipse.swt.opengl/common/org/eclipse/swt/opengl/ImageDataUtil.java new file mode 100644 index 0000000000..d9002851c4 --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/common/org/eclipse/swt/opengl/ImageDataUtil.java @@ -0,0 +1,524 @@ +/******************************************************************************* + * 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; + + +public class ImageDataUtil { + /** + * Alpha mode, values 0 - 255 specify global alpha level + */ + static final int + ALPHA_OPAQUE = 255, // Fully opaque (ignores any alpha data) + ALPHA_TRANSPARENT = 0, // Fully transparent (ignores any alpha data) + ALPHA_CHANNEL_SEPARATE = -1, // Use alpha channel from separate alphaData + ALPHA_CHANNEL_SOURCE = -2, // Use alpha channel embedded in sourceData + ALPHA_MASK_UNPACKED = -3, // Use transparency mask formed by bytes in alphaData (non-zero is opaque) + ALPHA_MASK_PACKED = -4, // Use transparency mask formed by packed bits in alphaData + ALPHA_MASK_INDEX = -5, // Consider source palette indices transparent if in alphaData array + ALPHA_MASK_RGB = -6; // Consider source RGBs transparent if in RGB888 format alphaData array + + /** + * Data types (internal) + */ + private static final int + // direct / true color formats with arbitrary masks & shifts + TYPE_GENERIC_8 = 0, + TYPE_GENERIC_16_MSB = 1, + TYPE_GENERIC_16_LSB = 2, + TYPE_GENERIC_24 = 3, + TYPE_GENERIC_32_MSB = 4, + TYPE_GENERIC_32_LSB = 5, + // palette indexed color formats + TYPE_INDEX_8 = 6, + TYPE_INDEX_4 = 7, + TYPE_INDEX_2 = 8, + TYPE_INDEX_1_MSB = 9, + TYPE_INDEX_1_LSB = 10; + + /** + * Byte and bit order constants. + */ + static final int LSB_FIRST = 0; + static final int MSB_FIRST = 1; + + /** + * Blit operation bits to be OR'ed together to specify the desired operation. + */ + static final int + BLIT_SRC = 1, // copy source directly, else applies logic operations + BLIT_ALPHA = 2, // enable alpha blending + BLIT_DITHER = 4; // enable dithering in low color modes + + /** + * Arbitrary channel width data to 8-bit conversion table. + */ + static final byte[][] ANY_TO_EIGHT = new byte[9][]; + static { + for (int b = 0; b < 9; ++b) { + byte[] data = ANY_TO_EIGHT[b] = new byte[1 << b]; + if (b == 0) continue; + int inc = 0; + for (int bit = 0x10000; (bit >>= b) != 0;) inc |= bit; + for (int v = 0, p = 0; v < 0x10000; v+= inc) data[p++] = (byte)(v >> 8); + } + } + + /** + * Blits a direct palette image into a direct palette image. + * <p> + * Note: When the source and destination depth, order and masks + * are pairwise equal and the blitter operation is BLIT_SRC, + * the masks are ignored. Hence when not changing the image + * data format, 0 may be specified for the masks. + * </p> + * + * @param op the blitter operation: a combination of BLIT_xxx flags + * (see BLIT_xxx constants) + * @param srcData the source byte array containing image data + * @param srcDepth the source depth: one of 8, 16, 24, 32 + * @param srcStride the source number of bytes per line + * @param srcOrder the source byte ordering: one of MSB_FIRST or LSB_FIRST; + * ignored if srcDepth is not 16 or 32 + * @param srcX the top-left x-coord of the source blit region + * @param srcY the top-left y-coord of the source blit region + * @param srcWidth the width of the source blit region + * @param srcHeight the height of the source blit region + * @param srcRedMask the source red channel mask + * @param srcGreenMask the source green channel mask + * @param srcBlueMask the source blue channel mask + * @param alphaMode the alpha blending or mask mode, may be + * an integer 0-255 for global alpha; ignored if BLIT_ALPHA + * not specified in the blitter operations + * (see ALPHA_MODE_xxx constants) + * @param alphaData the alpha blending or mask data, varies depending + * on the value of alphaMode and sometimes ignored + * @param alphaStride the alpha data number of bytes per line + * @param alphaX the top-left x-coord of the alpha blit region + * @param alphaY the top-left y-coord of the alpha blit region + * @param destData the destination byte array containing image data + * @param destDepth the destination depth: one of 8, 16, 24, 32 + * @param destStride the destination number of bytes per line + * @param destOrder the destination byte ordering: one of MSB_FIRST or LSB_FIRST; + * ignored if destDepth is not 16 or 32 + * @param destX the top-left x-coord of the destination blit region + * @param destY the top-left y-coord of the destination blit region + * @param destWidth the width of the destination blit region + * @param destHeight the height of the destination blit region + * @param destRedMask the destination red channel mask + * @param destGreenMask the destination green channel mask + * @param destBlueMask the destination blue channel mask + * @param flipX if true the resulting image is flipped along the vertical axis + * @param flipY if true the resulting image is flipped along the horizontal axis + */ + static void blit(int op, + byte[] srcData, int srcDepth, int srcStride, int srcOrder, + int srcX, int srcY, int srcWidth, int srcHeight, + int srcRedMask, int srcGreenMask, int srcBlueMask, + int alphaMode, byte[] alphaData, int alphaStride, int alphaX, int alphaY, + byte[] destData, int destDepth, int destStride, int destOrder, + int destX, int destY, int destWidth, int destHeight, + int destRedMask, int destGreenMask, int destBlueMask, + boolean flipX, boolean flipY) { + if ((destWidth <= 0) || (destHeight <= 0) || (alphaMode == ALPHA_TRANSPARENT)) return; + + // these should be supplied as params later + final int srcAlphaMask = 0, destAlphaMask = 0; + + /*** Prepare scaling data ***/ + final int dwm1 = destWidth - 1; + final int sfxi = (dwm1 != 0) ? (int)((((long)srcWidth << 16) - 1) / dwm1) : 0; + final int dhm1 = destHeight - 1; + final int sfyi = (dhm1 != 0) ? (int)((((long)srcHeight << 16) - 1) / dhm1) : 0; + + /*** Prepare source-related data ***/ + final int sbpp, stype; + switch (srcDepth) { + case 8: + sbpp = 1; + stype = TYPE_GENERIC_8; + break; + case 16: + sbpp = 2; + stype = (srcOrder == MSB_FIRST) ? TYPE_GENERIC_16_MSB : TYPE_GENERIC_16_LSB; + break; + case 24: + sbpp = 3; + stype = TYPE_GENERIC_24; + break; + case 32: + sbpp = 4; + stype = (srcOrder == MSB_FIRST) ? TYPE_GENERIC_32_MSB : TYPE_GENERIC_32_LSB; + break; + default: + //throw new IllegalArgumentException("Invalid source type"); + return; + } + int spr = srcY * srcStride + srcX * sbpp; + + /*** Prepare destination-related data ***/ + final int dbpp, dtype; + switch (destDepth) { + case 8: + dbpp = 1; + dtype = TYPE_GENERIC_8; + break; + case 16: + dbpp = 2; + dtype = (destOrder == MSB_FIRST) ? TYPE_GENERIC_16_MSB : TYPE_GENERIC_16_LSB; + break; + case 24: + dbpp = 3; + dtype = TYPE_GENERIC_24; + break; + case 32: + dbpp = 4; + dtype = (destOrder == MSB_FIRST) ? TYPE_GENERIC_32_MSB : TYPE_GENERIC_32_LSB; + break; + default: + //throw new IllegalArgumentException("Invalid destination type"); + return; + } + int dpr = ((flipY) ? destY + dhm1 : destY) * destStride + ((flipX) ? destX + dwm1 : destX) * dbpp; + final int dprxi = (flipX) ? -dbpp : dbpp; + final int dpryi = (flipY) ? -destStride : destStride; + + /*** Prepare special processing data ***/ + int apr; + if ((op & BLIT_ALPHA) != 0) { + switch (alphaMode) { + case ALPHA_MASK_UNPACKED: + case ALPHA_CHANNEL_SEPARATE: + if (alphaData == null) alphaMode = 0x10000; + apr = alphaY * alphaStride + alphaX; + break; + case ALPHA_MASK_PACKED: + if (alphaData == null) alphaMode = 0x10000; + alphaStride <<= 3; + apr = alphaY * alphaStride + alphaX; + break; + case ALPHA_MASK_INDEX: + //throw new IllegalArgumentException("Invalid alpha type"); + return; + case ALPHA_MASK_RGB: + if (alphaData == null) alphaMode = 0x10000; + apr = 0; + break; + default: + alphaMode = (alphaMode << 16) / 255; // prescale + case ALPHA_CHANNEL_SOURCE: + apr = 0; + break; + } + } else { + alphaMode = 0x10000; + apr = 0; + } + + /*** Blit ***/ + int dp = dpr; + int sp = spr; + if ((alphaMode == 0x10000) && (stype == dtype) && + (srcRedMask == destRedMask) && (srcGreenMask == destGreenMask) && + (srcBlueMask == destBlueMask) && (srcAlphaMask == destAlphaMask)) { + /*** Fast blit (straight copy) ***/ + switch (sbpp) { + case 1: + for (int dy = destHeight, sfy = sfyi; dy > 0; --dy, sp = spr += (sfy >>> 16) * srcStride, sfy = (sfy & 0xffff) + sfyi, dp = dpr += dpryi) { + for (int dx = destWidth, sfx = sfxi; dx > 0; --dx, dp += dprxi, sfx = (sfx & 0xffff) + sfxi) { + destData[dp] = srcData[sp]; + sp += (sfx >>> 16); + } + } + break; + case 2: + for (int dy = destHeight, sfy = sfyi; dy > 0; --dy, sp = spr += (sfy >>> 16) * srcStride, sfy = (sfy & 0xffff) + sfyi, dp = dpr += dpryi) { + for (int dx = destWidth, sfx = sfxi; dx > 0; --dx, dp += dprxi, sfx = (sfx & 0xffff) + sfxi) { + destData[dp] = srcData[sp]; + destData[dp + 1] = srcData[sp + 1]; + sp += (sfx >>> 16) * 2; + } + } + break; + case 3: + for (int dy = destHeight, sfy = sfyi; dy > 0; --dy, sp = spr += (sfy >>> 16) * srcStride, sfy = (sfy & 0xffff) + sfyi, dp = dpr += dpryi) { + for (int dx = destWidth, sfx = sfxi; dx > 0; --dx, dp += dprxi, sfx = (sfx & 0xffff) + sfxi) { + destData[dp] = srcData[sp]; + destData[dp + 1] = srcData[sp + 1]; + destData[dp + 2] = srcData[sp + 2]; + sp += (sfx >>> 16) * 3; + } + } + break; + case 4: + for (int dy = destHeight, sfy = sfyi; dy > 0; --dy, sp = spr += (sfy >>> 16) * srcStride, sfy = (sfy & 0xffff) + sfyi, dp = dpr += dpryi) { + for (int dx = destWidth, sfx = sfxi; dx > 0; --dx, dp += dprxi, sfx = (sfx & 0xffff) + sfxi) { + destData[dp] = srcData[sp]; + destData[dp + 1] = srcData[sp + 1]; + destData[dp + 2] = srcData[sp + 2]; + destData[dp + 3] = srcData[sp + 3]; + sp += (sfx >>> 16) * 4; + } + } + break; + } + return; + } + /*** Comprehensive blit (apply transformations) ***/ + final int srcRedShift = getChannelShift(srcRedMask); + final byte[] srcReds = ANY_TO_EIGHT[getChannelWidth(srcRedMask, srcRedShift)]; + final int srcGreenShift = getChannelShift(srcGreenMask); + final byte[] srcGreens = ANY_TO_EIGHT[getChannelWidth(srcGreenMask, srcGreenShift)]; + final int srcBlueShift = getChannelShift(srcBlueMask); + final byte[] srcBlues = ANY_TO_EIGHT[getChannelWidth(srcBlueMask, srcBlueShift)]; + final int srcAlphaShift = getChannelShift(srcAlphaMask); + final byte[] srcAlphas = ANY_TO_EIGHT[getChannelWidth(srcAlphaMask, srcAlphaShift)]; + + final int destRedShift = getChannelShift(destRedMask); + final int destRedWidth = getChannelWidth(destRedMask, destRedShift); + final byte[] destReds = ANY_TO_EIGHT[destRedWidth]; + final int destRedPreShift = 8 - destRedWidth; + final int destGreenShift = getChannelShift(destGreenMask); + final int destGreenWidth = getChannelWidth(destGreenMask, destGreenShift); + final byte[] destGreens = ANY_TO_EIGHT[destGreenWidth]; + final int destGreenPreShift = 8 - destGreenWidth; + final int destBlueShift = getChannelShift(destBlueMask); + final int destBlueWidth = getChannelWidth(destBlueMask, destBlueShift); + final byte[] destBlues = ANY_TO_EIGHT[destBlueWidth]; + final int destBluePreShift = 8 - destBlueWidth; + final int destAlphaShift = getChannelShift(destAlphaMask); + final int destAlphaWidth = getChannelWidth(destAlphaMask, destAlphaShift); + final byte[] destAlphas = ANY_TO_EIGHT[destAlphaWidth]; + final int destAlphaPreShift = 8 - destAlphaWidth; + + int ap = apr, alpha = alphaMode; + int r = 0, g = 0, b = 0, a = 0; + int rq = 0, gq = 0, bq = 0, aq = 0; + for (int dy = destHeight, sfy = sfyi; dy > 0; --dy, + sp = spr += (sfy >>> 16) * srcStride, + ap = apr += (sfy >>> 16) * alphaStride, + sfy = (sfy & 0xffff) + sfyi, + dp = dpr += dpryi) { + for (int dx = destWidth, sfx = sfxi; dx > 0; --dx, + dp += dprxi, + sfx = (sfx & 0xffff) + sfxi) { + /*** READ NEXT PIXEL ***/ + switch (stype) { + case TYPE_GENERIC_8: { + final int data = srcData[sp] & 0xff; + sp += (sfx >>> 16); + r = srcReds[(data & srcRedMask) >>> srcRedShift] & 0xff; + g = srcGreens[(data & srcGreenMask) >>> srcGreenShift] & 0xff; + b = srcBlues[(data & srcBlueMask) >>> srcBlueShift] & 0xff; + a = srcAlphas[(data & srcAlphaMask) >>> srcAlphaShift] & 0xff; + } break; + case TYPE_GENERIC_16_MSB: { + final int data = ((srcData[sp] & 0xff) << 8) | (srcData[sp + 1] & 0xff); + sp += (sfx >>> 16) * 2; + r = srcReds[(data & srcRedMask) >>> srcRedShift] & 0xff; + g = srcGreens[(data & srcGreenMask) >>> srcGreenShift] & 0xff; + b = srcBlues[(data & srcBlueMask) >>> srcBlueShift] & 0xff; + a = srcAlphas[(data & srcAlphaMask) >>> srcAlphaShift] & 0xff; + } break; + case TYPE_GENERIC_16_LSB: { + final int data = ((srcData[sp + 1] & 0xff) << 8) | (srcData[sp] & 0xff); + sp += (sfx >>> 16) * 2; + r = srcReds[(data & srcRedMask) >>> srcRedShift] & 0xff; + g = srcGreens[(data & srcGreenMask) >>> srcGreenShift] & 0xff; + b = srcBlues[(data & srcBlueMask) >>> srcBlueShift] & 0xff; + a = srcAlphas[(data & srcAlphaMask) >>> srcAlphaShift] & 0xff; + } break; + case TYPE_GENERIC_24: { + final int data = (( ((srcData[sp] & 0xff) << 8) | + (srcData[sp + 1] & 0xff)) << 8) | + (srcData[sp + 2] & 0xff); + sp += (sfx >>> 16) * 3; + r = srcReds[(data & srcRedMask) >>> srcRedShift] & 0xff; + g = srcGreens[(data & srcGreenMask) >>> srcGreenShift] & 0xff; + b = srcBlues[(data & srcBlueMask) >>> srcBlueShift] & 0xff; + a = srcAlphas[(data & srcAlphaMask) >>> srcAlphaShift] & 0xff; + } break; + case TYPE_GENERIC_32_MSB: { + final int data = (( (( ((srcData[sp] & 0xff) << 8) | + (srcData[sp + 1] & 0xff)) << 8) | + (srcData[sp + 2] & 0xff)) << 8) | + (srcData[sp + 3] & 0xff); + sp += (sfx >>> 16) * 4; + r = srcReds[(data & srcRedMask) >>> srcRedShift] & 0xff; + g = srcGreens[(data & srcGreenMask) >>> srcGreenShift] & 0xff; + b = srcBlues[(data & srcBlueMask) >>> srcBlueShift] & 0xff; + a = srcAlphas[(data & srcAlphaMask) >>> srcAlphaShift] & 0xff; + } break; + case TYPE_GENERIC_32_LSB: { + final int data = (( (( ((srcData[sp + 3] & 0xff) << 8) | + (srcData[sp + 2] & 0xff)) << 8) | + (srcData[sp + 1] & 0xff)) << 8) | + (srcData[sp] & 0xff); + sp += (sfx >>> 16) * 4; + r = srcReds[(data & srcRedMask) >>> srcRedShift] & 0xff; + g = srcGreens[(data & srcGreenMask) >>> srcGreenShift] & 0xff; + b = srcBlues[(data & srcBlueMask) >>> srcBlueShift] & 0xff; + a = srcAlphas[(data & srcAlphaMask) >>> srcAlphaShift] & 0xff; + } break; + } + + /*** DO SPECIAL PROCESSING IF REQUIRED ***/ + switch (alphaMode) { + case ALPHA_CHANNEL_SEPARATE: + alpha = ((alphaData[ap] & 0xff) << 16) / 255; + ap += (sfx >> 16); + break; + case ALPHA_CHANNEL_SOURCE: + alpha = (a << 16) / 255; + break; + case ALPHA_MASK_UNPACKED: + alpha = (alphaData[ap] != 0) ? 0x10000 : 0; + ap += (sfx >> 16); + break; + case ALPHA_MASK_PACKED: + alpha = (alphaData[ap >> 3] << ((ap & 7) + 9)) & 0x10000; + ap += (sfx >> 16); + break; + case ALPHA_MASK_RGB: + alpha = 0x10000; + for (int i = 0; i < alphaData.length; i += 3) { + if ((r == alphaData[i]) && (g == alphaData[i + 1]) && (b == alphaData[i + 2])) { + alpha = 0x0000; + break; + } + } + break; + } + if (alpha != 0x10000) { + if (alpha == 0x0000) continue; + switch (dtype) { + case TYPE_GENERIC_8: { + final int data = destData[dp] & 0xff; + rq = destReds[(data & destRedMask) >>> destRedShift] & 0xff; + gq = destGreens[(data & destGreenMask) >>> destGreenShift] & 0xff; + bq = destBlues[(data & destBlueMask) >>> destBlueShift] & 0xff; + aq = destAlphas[(data & destAlphaMask) >>> destAlphaShift] & 0xff; + } break; + case TYPE_GENERIC_16_MSB: { + final int data = ((destData[dp] & 0xff) << 8) | (destData[dp + 1] & 0xff); + rq = destReds[(data & destRedMask) >>> destRedShift] & 0xff; + gq = destGreens[(data & destGreenMask) >>> destGreenShift] & 0xff; + bq = destBlues[(data & destBlueMask) >>> destBlueShift] & 0xff; + aq = destAlphas[(data & destAlphaMask) >>> destAlphaShift] & 0xff; + } break; + case TYPE_GENERIC_16_LSB: { + final int data = ((destData[dp + 1] & 0xff) << 8) | (destData[dp] & 0xff); + rq = destReds[(data & destRedMask) >>> destRedShift] & 0xff; + gq = destGreens[(data & destGreenMask) >>> destGreenShift] & 0xff; + bq = destBlues[(data & destBlueMask) >>> destBlueShift] & 0xff; + aq = destAlphas[(data & destAlphaMask) >>> destAlphaShift] & 0xff; + } break; + case TYPE_GENERIC_24: { + final int data = (( ((destData[dp] & 0xff) << 8) | + (destData[dp + 1] & 0xff)) << 8) | + (destData[dp + 2] & 0xff); + rq = destReds[(data & destRedMask) >>> destRedShift] & 0xff; + gq = destGreens[(data & destGreenMask) >>> destGreenShift] & 0xff; + bq = destBlues[(data & destBlueMask) >>> destBlueShift] & 0xff; + aq = destAlphas[(data & destAlphaMask) >>> destAlphaShift] & 0xff; + } break; + case TYPE_GENERIC_32_MSB: { + final int data = (( (( ((destData[dp] & 0xff) << 8) | + (destData[dp + 1] & 0xff)) << 8) | + (destData[dp + 2] & 0xff)) << 8) | + (destData[dp + 3] & 0xff); + rq = destReds[(data & destRedMask) >>> destRedShift] & 0xff; + gq = destGreens[(data & destGreenMask) >>> destGreenShift] & 0xff; + bq = destBlues[(data & destBlueMask) >>> destBlueShift] & 0xff; + aq = destAlphas[(data & destAlphaMask) >>> destAlphaShift] & 0xff; + } break; + case TYPE_GENERIC_32_LSB: { + final int data = (( (( ((destData[dp + 3] & 0xff) << 8) | + (destData[dp + 2] & 0xff)) << 8) | + (destData[dp + 1] & 0xff)) << 8) | + (destData[dp] & 0xff); + rq = destReds[(data & destRedMask) >>> destRedShift] & 0xff; + gq = destGreens[(data & destGreenMask) >>> destGreenShift] & 0xff; + bq = destBlues[(data & destBlueMask) >>> destBlueShift] & 0xff; + aq = destAlphas[(data & destAlphaMask) >>> destAlphaShift] & 0xff; + } break; + } + // Perform alpha blending + a = aq + ((a - aq) * alpha >> 16); + r = rq + ((r - rq) * alpha >> 16); + g = gq + ((g - gq) * alpha >> 16); + b = bq + ((b - bq) * alpha >> 16); + } + + /*** WRITE NEXT PIXEL ***/ + final int data = + (r >>> destRedPreShift << destRedShift) | + (g >>> destGreenPreShift << destGreenShift) | + (b >>> destBluePreShift << destBlueShift) | + (a >>> destAlphaPreShift << destAlphaShift); + switch (dtype) { + case TYPE_GENERIC_8: { + destData[dp] = (byte) data; + } break; + case TYPE_GENERIC_16_MSB: { + destData[dp] = (byte) (data >>> 8); + destData[dp + 1] = (byte) (data & 0xff); + } break; + case TYPE_GENERIC_16_LSB: { + destData[dp] = (byte) (data & 0xff); + destData[dp + 1] = (byte) (data >>> 8); + } break; + case TYPE_GENERIC_24: { + destData[dp] = (byte) (data >>> 16); + destData[dp + 1] = (byte) (data >>> 8); + destData[dp + 2] = (byte) (data & 0xff); + } break; + case TYPE_GENERIC_32_MSB: { + destData[dp] = (byte) (data >>> 24); + destData[dp + 1] = (byte) (data >>> 16); + destData[dp + 2] = (byte) (data >>> 8); + destData[dp + 3] = (byte) (data & 0xff); + } break; + case TYPE_GENERIC_32_LSB: { + destData[dp] = (byte) (data & 0xff); + destData[dp + 1] = (byte) (data >>> 8); + destData[dp + 2] = (byte) (data >>> 16); + destData[dp + 3] = (byte) (data >>> 24); + } break; + } + } + } + } + + /** + * Computes the required channel shift from a mask. + */ + static int getChannelShift(int mask) { + if (mask == 0) return 0; + int i; + for (i = 0; ((mask & 1) == 0) && (i < 32); ++i) { + mask >>>= 1; + } + return i; + } + + /** + * Computes the required channel width (depth) from a mask. + */ + static int getChannelWidth(int mask, int shift) { + if (mask == 0) return 0; + int i; + mask >>>= shift; + for (i = shift; ((mask & 1) != 0) && (i < 32); ++i) { + mask >>>= 1; + } + return i - shift; + } +} diff --git a/bundles/org.eclipse.swt.opengl/common/org/eclipse/swt/opengl/Library.java b/bundles/org.eclipse.swt.opengl/common/org/eclipse/swt/opengl/Library.java new file mode 100644 index 0000000000..7a486e3eca --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/common/org/eclipse/swt/opengl/Library.java @@ -0,0 +1,60 @@ +/******************************************************************************* + * 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; + + +public class Library { + +/** + * Returns the platform name. + * + * @return the platform name of the currently running SWT + */ +static String getPlatform () { + String [] names = new String [] {"motif", "gtk", "win32", "photon", "carbon"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ + for (int i = 0; i < names.length; i++) { + try { + Class.forName("org.eclipse.swt.internal."+names[i]+".OS"); //$NON-NLS-1$ //$NON-NLS-2$ + return names[i]; + } catch (ClassNotFoundException e) { + } + } + return "unknown"; //$NON-NLS-1$ +} + +/** + * Loads the shared library that matches the version of the + * Java code which is currently running. SWT shared libraries + * follow an encoding scheme where the major, minor and revision + * numbers are embedded in the library name and this along with + * <code>name</code> is used to load the library. If this fails, + * <code>name</code> is used in another attempt to load the library, + * this time ignoring the SWT version encoding scheme. + * + * @param name the name of the library to load + */ +public static void loadLibrary (String name) { + /* + * Include platform name to support different windowing systems + * on same operating system. + */ + String platform = getPlatform (); + + try { + String newName = name + "-" + platform; //$NON-NLS-1$ //$NON-NLS-2$ + System.loadLibrary (newName); + return; + } catch (UnsatisfiedLinkError e1) { + throw e1; + } +} + +} diff --git a/bundles/org.eclipse.swt.opengl/gtk/gl_library/build.sh b/bundles/org.eclipse.swt.opengl/gtk/gl_library/build.sh new file mode 100644 index 0000000000..176fd076f6 --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/gtk/gl_library/build.sh @@ -0,0 +1,32 @@ +#******************************************************************************* +# 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 +# Kevin Cornell (Rational Software Corporation) +# Tom Tromey (Red Hat, Inc.) +#******************************************************************************* + +#!/bin/sh + +# Some UNIX/Linux compilers don't like <CR>'s in files (DOS format). +fixup_files=`grep -l "\ +" *.[ch]` +if test -n "$fixup_files"; then + echo "Converting files from DOS to UNIX format:" + for file in $fixup_files; do + echo " $file" + ex $file << EOF 2> /dev/null +g/\$/s/// +w +EOF + done +fi + +# Determine the operating system being built + +make -f make_gtk.mak ${1+"$@"} diff --git a/bundles/org.eclipse.swt.opengl/gtk/gl_library/gtkglext.c b/bundles/org.eclipse.swt.opengl/gtk/gl_library/gtkglext.c new file mode 100644 index 0000000000..7d6c122afd --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/gtk/gl_library/gtkglext.c @@ -0,0 +1,179 @@ +/******************************************************************************* + * 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 + *******************************************************************************/ +#include "swt.h" +#include <gtk/gtkgl.h> +#include <gdk/gdkgl.h> + +#ifndef NO_gdk_1gl_1config_1new +JNIEXPORT jint JNICALL Java_org_eclipse_swt_opengl_internal_gtk_GTKGLEXT_gdk_1gl_1config_1new + (JNIEnv *env, jclass that, jintArray arg0) +{ + jint *lparg0=NULL; + jint rc; + + DEBUG_CALL("gdk_1gl_1config_1new\n") + + if (arg0) lparg0 = (*env)->GetIntArrayElements(env, arg0, NULL); + rc = (jint)gdk_gl_config_new(lparg0); + if (arg0) (*env)->ReleaseIntArrayElements(env, arg0, lparg0, 0); + return rc; +} +#endif + +#ifndef NO_gdk_1gl_1config_1new_1by_1mode +JNIEXPORT jint JNICALL Java_org_eclipse_swt_opengl_internal_gtk_GTKGLEXT_gdk_1gl_1config_1new_1by_1mode + (JNIEnv *env, jclass that, jint arg0) +{ + DEBUG_CALL("gdk_1gl_1config_1new_1by_1mode\n") + + return (jint)gdk_gl_config_new_by_mode(arg0); +} +#endif + +#ifndef NO_gdk_1gl_1context_1destroy +JNIEXPORT void JNICALL Java_org_eclipse_swt_opengl_internal_gtk_GTKGLEXT_gdk_1gl_1context_1destroy + (JNIEnv *env, jclass that, jint arg0) +{ + DEBUG_CALL("gdk_1gl_1context_1destroy\n") + + gdk_gl_context_destroy((GdkGLContext *)arg0); +} +#endif + +#ifndef NO_gdk_1gl_1context_1get_1current +JNIEXPORT jint JNICALL Java_org_eclipse_swt_opengl_internal_gtk_GTKGLEXT_gdk_1gl_1context_1get_1current + (JNIEnv *env, jclass that) +{ + DEBUG_CALL("gdk_1gl_1context_1get_1current\n") + + return (jint)gdk_gl_context_get_current(); +} +#endif + +#ifndef NO_gdk_1gl_1context_1get_1gl_1drawable +JNIEXPORT jint JNICALL Java_org_eclipse_swt_opengl_internal_gtk_GTKGLEXT_gdk_1gl_1context_1get_1gl_1drawable + (JNIEnv *env, jclass that, jint arg0) +{ + DEBUG_CALL("gdk_1gl_1context_1get_1gl_1drawable\n") + + return (jint)gdk_gl_context_get_gl_drawable((GdkGLContext *)arg0); +} +#endif + +#ifndef NO_gdk_1gl_1drawable_1gl_1begin +JNIEXPORT jboolean JNICALL Java_org_eclipse_swt_opengl_internal_gtk_GTKGLEXT_gdk_1gl_1drawable_1gl_1begin + (JNIEnv *env, jclass that, jint arg0, jint arg1) +{ + DEBUG_CALL("gdk_1gl_1drawable_1gl_1begin\n") + + return (jboolean)gdk_gl_drawable_gl_begin((GdkGLDrawable *)arg0, (GdkGLContext *)arg1); +} +#endif + +#ifndef NO_gdk_1gl_1drawable_1gl_1end +JNIEXPORT void JNICALL Java_org_eclipse_swt_opengl_internal_gtk_GTKGLEXT_gdk_1gl_1drawable_1gl_1end + (JNIEnv *env, jclass that, jint arg0) +{ + DEBUG_CALL("gdk_1gl_1drawable_1gl_1end\n") + + gdk_gl_drawable_gl_end((GdkGLDrawable *)arg0); +} +#endif + +#ifndef NO_gdk_1gl_1drawable_1make_1current +JNIEXPORT void JNICALL Java_org_eclipse_swt_opengl_internal_gtk_GTKGLEXT_gdk_1gl_1drawable_1make_1current + (JNIEnv *env, jclass that, jint arg0, jint arg1) +{ + DEBUG_CALL("gdk_1gl_1drawable_1make_1current\n") + + gdk_gl_drawable_make_current((GdkGLDrawable *)arg0, (GdkGLContext *)arg1); +} +#endif + +#ifndef NO_gdk_1gl_1drawable_1swap_1buffers +JNIEXPORT void JNICALL Java_org_eclipse_swt_opengl_internal_gtk_GTKGLEXT_gdk_1gl_1drawable_1swap_1buffers + (JNIEnv *env, jclass that, jint arg0) +{ + DEBUG_CALL("gdk_1gl_1drawable_1swap_1buffers\n") + + gdk_gl_drawable_swap_buffers((GdkGLDrawable *)arg0); +} +#endif + +#ifndef NO_gdk_1gl_1font_1use_1pango_1font +JNIEXPORT void JNICALL Java_org_eclipse_swt_opengl_internal_gtk_GTKGLEXT_gdk_1gl_1font_1use_1pango_1font + (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3) +{ + DEBUG_CALL("gdk_1gl_1font_1use_1pango_1font\n") + + gdk_gl_font_use_pango_font((PangoFontDescription *)arg0, arg1, arg2, arg3); +} +#endif + +#ifndef NO_gtk_1gl_1init +JNIEXPORT void JNICALL Java_org_eclipse_swt_opengl_internal_gtk_GTKGLEXT_gtk_1gl_1init + (JNIEnv *env, jclass that, jint arg0, jint arg1) +{ + DEBUG_CALL("gtk_1gl_1init\n") + + gtk_gl_init((int *)arg0, (char ***)arg1); +} +#endif + +#ifndef NO_gtk_1widget_1create_1gl_1context +JNIEXPORT jint JNICALL Java_org_eclipse_swt_opengl_internal_gtk_GTKGLEXT_gtk_1widget_1create_1gl_1context + (JNIEnv *env, jclass that, jint arg0, jint arg1, jboolean arg2, jint arg3) +{ + DEBUG_CALL("gtk_1widget_1create_1gl_1context\n") + + return (jint)gtk_widget_create_gl_context((GtkWidget *)arg0, (GdkGLContext *)arg1, arg2, arg3); +} +#endif + +#ifndef NO_gtk_1widget_1get_1gl_1context +JNIEXPORT jint JNICALL Java_org_eclipse_swt_opengl_internal_gtk_GTKGLEXT_gtk_1widget_1get_1gl_1context + (JNIEnv *env, jclass that, jint arg0) +{ + DEBUG_CALL("gtk_1widget_1get_1gl_1context\n") + + return (jint)gtk_widget_get_gl_context((GtkWidget *)arg0); +} +#endif + +#ifndef NO_gtk_1widget_1get_1gl_1drawable +JNIEXPORT jint JNICALL Java_org_eclipse_swt_opengl_internal_gtk_GTKGLEXT_gtk_1widget_1get_1gl_1drawable + (JNIEnv *env, jclass that, jint arg0) +{ + DEBUG_CALL("gtk_1widget_1get_1gl_1drawable\n") + + return (jint)gtk_widget_get_gl_drawable((GtkWidget *)arg0); +} +#endif + +#ifndef NO_gtk_1widget_1get_1gl_1window +JNIEXPORT jint JNICALL Java_org_eclipse_swt_opengl_internal_gtk_GTKGLEXT_gtk_1widget_1get_1gl_1window + (JNIEnv *env, jclass that, jint arg0) +{ + DEBUG_CALL("gtk_1widget_1get_1gl_1window\n") + + return (jint)gtk_widget_get_gl_window((GtkWidget *)arg0); +} +#endif + +#ifndef NO_gtk_1widget_1set_1gl_1capability +JNIEXPORT jboolean JNICALL Java_org_eclipse_swt_opengl_internal_gtk_GTKGLEXT_gtk_1widget_1set_1gl_1capability + (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jboolean arg3, jint arg4) +{ + DEBUG_CALL("gtk_1widget_1set_1gl_1capability\n") + + return (jboolean)gtk_widget_set_gl_capability((GtkWidget *)arg0, (GdkGLConfig *)arg1, (GdkGLContext *)arg2, arg3, arg4); +} +#endif diff --git a/bundles/org.eclipse.swt.opengl/gtk/gl_library/make_gtk.mak b/bundles/org.eclipse.swt.opengl/gtk/gl_library/make_gtk.mak new file mode 100644 index 0000000000..f6302df68f --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/gtk/gl_library/make_gtk.mak @@ -0,0 +1,41 @@ +#******************************************************************************* +# 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 +#******************************************************************************* + +# Define the installation directories for various products. +JAVA_HOME = /bluebird/teamswt/swt-builddir/ive/bin + +# Define the various shared libraries to be made. +SWT_PREFIX = gl +WS_PREFIX = gtk +SWT_DLL = lib$(SWT_PREFIX)-$(WS_PREFIX).so +SWT_OBJ = gl.c glu.c gtkglext.c + +GTKLIBS = `pkg-config --libs gthread-2.0 gtk+-2.0 gdkglext-1.0 gtkglext-1.0` -L/usr/X11R6/lib -lGL -lGLU -lm +GTKCFLAGS = `pkg-config --cflags gtk+-2.0 gdkglext-1.0 gtkglext-1.0` + +# +# The following CFLAGS are for compiling the SWT OpenGL library. +# +CFLAGS = -O -s -shared \ + -I./ \ + -I$(JAVA_HOME)/include \ + $(GTKCFLAGS) \ + -Wall + +all: make_swt + +make_swt: $(SWT_DLL) + +$(SWT_DLL): $(SWT_OBJ) + gcc $(CFLAGS) $(GTKLIBS) -o $(SWT_DLL) $(SWT_OBJ) + +clean: + rm -f *.so *.o diff --git a/bundles/org.eclipse.swt.opengl/gtk/org/eclipse/swt/opengl/GLContext.class b/bundles/org.eclipse.swt.opengl/gtk/org/eclipse/swt/opengl/GLContext.class Binary files differnew file mode 100644 index 0000000000..976534792a --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/gtk/org/eclipse/swt/opengl/GLContext.class diff --git a/bundles/org.eclipse.swt.opengl/gtk/org/eclipse/swt/opengl/GLContext.java b/bundles/org.eclipse.swt.opengl/gtk/org/eclipse/swt/opengl/GLContext.java new file mode 100644 index 0000000000..73fba4e0b7 --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/gtk/org/eclipse/swt/opengl/GLContext.java @@ -0,0 +1,296 @@ +/******************************************************************************* + * 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; + + +import org.eclipse.swt.*; +import org.eclipse.swt.graphics.*; +import org.eclipse.swt.internal.gtk.*; +import org.eclipse.swt.opengl.internal.gtk.*; +import org.eclipse.swt.widgets.*; + +/** + * Instances of <code>GLContext</code> are used to draw on swt <code>Drawable</code>s + * through invocations of provided OpenGL functions. + * <p> + * Application code must explicitly invoke the <code>GLContext.dispose ()</code> + * method to release the operating system resources managed by each instance + * when those instances are no longer required. This is <em>particularly</em> + * important on Windows95 and Windows98 where the operating system has a limited + * number of device contexts available. + * </p> + */ +public class GLContext { + int handle; + int gc; + GCData data; + Widget widget; + int selectBufferPtr = 0; + + static final int MSB_FIRST = 1; + static final int LSB_FIRST = 2; + + /** + * Constructs a new instance of this class which has been + * configured to draw on the specified drawable. + * <p> + * You must dispose the <code>GLContext</code> when it is no longer required. + * </p> + * + * @param drawable the drawable to draw on + * @exception IllegalArgumentException <ul> + * <li>ERROR_NULL_ARGUMENT - if the drawable is null</li> + * </ul> + * @exception SWTError <ul> + * <li>ERROR_NO_HANDLES if a handle could not be obtained for gc creation</li> + * <li>ERROR_UNSUPPORTED_DEPTH - if the current display depth is not supported</li> + * </ul> + */ + public GLContext (Drawable drawable) { + if (drawable == null) SWT.error (SWT.ERROR_NULL_ARGUMENT); + this.data = new GCData (); + gc = drawable.internal_new_GC (data); + if (gc == 0) SWT.error (SWT.ERROR_NO_HANDLES); + +// int attrib [] = { +//// GTKGLEXT.GLX_LEVEL, +//// 0, +//// GTKGLEXT.GDK_GL_MODE_RGBA, +// GTKGLEXT.GDK_GL_MODE_DOUBLE, +// GTKGLEXT.GDK_GL_MODE_DEPTH, +// 24,// depth, +// 0 +// }; + + // adding to next line causes badness: XGL.GDK_GL_MODE_INDEX | + int mode = GTKGLEXT.GDK_GL_MODE_RGB | GTKGLEXT.GDK_GL_MODE_DOUBLE | GTKGLEXT.GDK_GL_MODE_DEPTH; + int glconfig = GTKGLEXT.gdk_gl_config_new_by_mode (mode); +// int glconfig = GTKGLEXT.gdk_gl_config_new (attrib); + // for now assume that the Drawable is a Widget + this.widget = (Widget) drawable; + + OS.gtk_widget_unrealize (widget.handle); + boolean success = GTKGLEXT.gtk_widget_set_gl_capability ( + widget.handle, + glconfig, + 0, + true, + GTKGLEXT.GDK_GL_RGBA_TYPE); + OS.gtk_widget_realize(widget.handle); + + handle = GTKGLEXT.gtk_widget_create_gl_context (widget.handle, 0, true, GTKGLEXT.GDK_GL_RGBA_TYPE); + if (handle == 0) SWT.error (SWT.ERROR_NO_HANDLES); + } + + public ImageData convertImageData (ImageData source) { + PaletteData palette = new PaletteData (0xff0000, 0xff00, 0xff); + ImageData newSource = new ImageData (source.width, source.height, 24, palette); + ImageDataUtil.blit ( + 1, + source.data, + source.depth, + source.bytesPerLine, + (source.depth != 16) ? MSB_FIRST : LSB_FIRST, + 0, + 0, + source.width, + source.height, + source.palette.redMask, + source.palette.greenMask, + source.palette.blueMask, + 255, + null, + 0, + 0, + 0, + newSource.data, + newSource.depth, + newSource.bytesPerLine, + (newSource.depth != 16) ? MSB_FIRST : LSB_FIRST, + 0, + 0, + newSource.width, + newSource.height, + newSource.palette.redMask, + newSource.palette.greenMask, + newSource.palette.blueMask, + false, + true); + + return newSource; + } + + /** + * Disposes of the operating system resources associated with + * the receiver. Applications must dispose of all <code>GLContext</code>s + * that they allocate. + */ + public void dispose () { + if (handle == 0) return; + +// the following causes problems +// int current = GTKGLEXT.gdk_gl_context_get_current (); +// if (current == handle) { +// GTKGLEXT.gdk_gl_drawable_make_current (0, 0); +// } + +// int xDisplay = data.display; +// if (XGL.glXGetCurrentContext () == handle) { +// XGL.glXMakeCurrent (xDisplay, 0, 0); +// } + if (selectBufferPtr != 0) OS.g_free(selectBufferPtr); + GTKGLEXT.gdk_gl_context_destroy (handle); +// XGL.glXDestroyContext (xDisplay, handle); + + handle = 0; +// gdkDrawable = 0; + // drawable may be disposed + try { + ((Drawable)widget).internal_dispose_GC (gc, data); + } catch (SWTException e) { + } + gc = 0; + data.context = data.drawable = data.layout = 0; + data.font = data.clipRgn = data.lineStyle = 0; + widget = null; + data.device = null; + data.image = null; + data = null; + } + + public int[] getSelectBuffer (int selectBufferPtr, int[] selectBuffer) { + OS.memmove (selectBuffer, selectBufferPtr, selectBuffer.length * 4); + return selectBuffer; + } + + public int getSelectBufferPtr (int[] selectBuffer) { + if (selectBufferPtr == 0) { + selectBufferPtr = OS.g_malloc (selectBuffer.length * 4); + } + OS.memmove (selectBufferPtr, selectBuffer, selectBuffer.length * 4); + return selectBufferPtr; + } + + /** + * Returns a boolean indicating whether the receiver is the current + * <code>GLContext</code>. + * + * @return true if the receiver is the current <code>GLContext</code>, + * false otherwise + * @exception SWTError <ul> + * <li>ERROR_GRAPHIC_DISPOSED if the receiver is disposed</li> + * </ul> + */ + public boolean isCurrent () { + if (isDisposed ()) SWT.error (SWT.ERROR_GRAPHIC_DISPOSED); + return GTKGLEXT.gdk_gl_context_get_current () == handle; + } + + /** + * Returns a boolean indicating whether the <code>GLContext</code> has been + * disposed. + * <p> + * This method gets the dispose state for the <code>GLContext</code>. + * When a <code>GLContext</code> has been disposed, it is an error to + * invoke any other method using the <code>GLContext</code>. + * + * @return true if the <code>GLContext</code> is disposed, false otherwise + */ + public boolean isDisposed () { + return handle == 0; + } + + /** + * Loads the specified bitmap font. + * + * @param fdata + * @param device + * @param base + * @param first + * @param count + */ + public void loadBitmapFont (FontData fdata, Device device, int base, int startIndex, int length) { + Font font = new Font (device, fdata); +// int oldFont = OS.SelectObject (hDC, font.handle); + GTKGLEXT.gdk_gl_font_use_pango_font (font.handle, startIndex, length, base); +// OS.SelectObject (hDC, oldFont); + font.dispose (); + } + + /** + * Loads the specified outline font. + * + * @param fdata + * @param device + * @param base + * @param first + * @param count + * @param deviation + * @param extrusion + * @param format + * @param lpgmf + */ + public void loadOutlineFont (FontData fdata, Device device, int base, int first, + int count, float deviation, float extrusion, int format, GLYPHMETRICSFLOAT[] lpgmf) { + // stub + } + + /** + * Resizes the receiver. + * + * @param x + * @param y + * @param width + * @param height + */ + public void resize (int x, int y, int width, int height) { + if (height == 0) height = 1; + GL.glViewport (x, y, width, height); + GL.glMatrixMode (GL.GL_PROJECTION); + GL.glLoadIdentity (); + GLU.gluPerspective (45.0f, (float) width / (float) height, 0.1f, 100.0f); + GL.glMatrixMode (GL.GL_MODELVIEW); + GL.glLoadIdentity (); + } + + /** + * Sets the receiver to be the current <code>GLContext</code>. + * + * @exception SWTError <ul> + * <li>ERROR_GRAPHIC_DISPOSED if the receiver is disposed</li> + * </ul> + */ + public void setCurrent () { + if (isDisposed ()) SWT.error (SWT.ERROR_GRAPHIC_DISPOSED); + int currentContext = GTKGLEXT.gdk_gl_context_get_current (); + if (currentContext == handle) return; + if (currentContext != 0) { + int drawable = GTKGLEXT.gdk_gl_context_get_gl_drawable(currentContext); + GTKGLEXT.gdk_gl_drawable_gl_end (drawable); + } + int gdkDrawable = GTKGLEXT.gtk_widget_get_gl_drawable (widget.handle); + GTKGLEXT.gdk_gl_drawable_gl_begin (gdkDrawable, handle); + GTKGLEXT.gdk_gl_drawable_make_current (gdkDrawable, handle); + } + + /** + * Swaps the receiver's buffers. + * + * @exception SWTError <ul> + * <li>ERROR_GRAPHIC_DISPOSED if the receiver is disposed</li> + * </ul> + */ + public void swapBuffers () { + if (isDisposed ()) SWT.error (SWT.ERROR_GRAPHIC_DISPOSED); + int gdkDrawable = GTKGLEXT.gtk_widget_get_gl_drawable (widget.handle); + GTKGLEXT.gdk_gl_drawable_swap_buffers (gdkDrawable); + } +} diff --git a/bundles/org.eclipse.swt.opengl/gtk/org/eclipse/swt/opengl/internal/gtk/GTKEXT.class b/bundles/org.eclipse.swt.opengl/gtk/org/eclipse/swt/opengl/internal/gtk/GTKEXT.class Binary files differnew file mode 100644 index 0000000000..5b71e55639 --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/gtk/org/eclipse/swt/opengl/internal/gtk/GTKEXT.class diff --git a/bundles/org.eclipse.swt.opengl/gtk/org/eclipse/swt/opengl/internal/gtk/GTKGLEXT.java b/bundles/org.eclipse.swt.opengl/gtk/org/eclipse/swt/opengl/internal/gtk/GTKGLEXT.java new file mode 100644 index 0000000000..8e1c3e3742 --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/gtk/org/eclipse/swt/opengl/internal/gtk/GTKGLEXT.java @@ -0,0 +1,44 @@ +/******************************************************************************* + * 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 GTKGLEXT { + + static { + Library.loadLibrary("gl"); + GTKGLEXT.gtk_gl_init (0, 0); + } + + public static final native int gdk_gl_config_new (int [] mode); + public static final native int gdk_gl_config_new_by_mode (int mode); + public static final native void gdk_gl_context_destroy (int glContext); + public static final native int gdk_gl_context_get_current (); + public static final native int gdk_gl_context_get_gl_drawable (int glContext); + public static final native boolean gdk_gl_drawable_gl_begin (int glDrawable, int glContext); + public static final native void gdk_gl_drawable_gl_end (int glDrawable); + public static final native void gdk_gl_drawable_make_current (int glDrawable, int glContext); + public static final native void gdk_gl_drawable_swap_buffers (int glDrawable); + public static final native void gdk_gl_font_use_pango_font (int font_desc, int first, int count, int list_base); + public static final native void gtk_gl_init (int argc, int argv); + public static final native int gtk_widget_create_gl_context (int widget, int share_list, boolean direct, int render_type); + public static final native int gtk_widget_get_gl_context (int widget); + public static final native int gtk_widget_get_gl_drawable (int widget); + public static final native int gtk_widget_get_gl_window (int widget); + public static final native boolean gtk_widget_set_gl_capability (int widget, int glconfig, int share_list, boolean direct, int render_type); + public static final int GDK_GL_MODE_DEPTH = 1 << 4; + public static final int GDK_GL_MODE_DOUBLE = 1 << 1; + public static final int GDK_GL_MODE_INDEX = 1 << 0; + public static final int GDK_GL_MODE_RGB = 0; + public static final int GDK_GL_MODE_RGBA = 0; + public static final int GDK_GL_RGBA_TYPE = 0x8014; +} diff --git a/bundles/org.eclipse.swt.opengl/motif/gl_library/build.csh b/bundles/org.eclipse.swt.opengl/motif/gl_library/build.csh new file mode 100644 index 0000000000..dd0b6d9691 --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/motif/gl_library/build.csh @@ -0,0 +1,69 @@ +#******************************************************************************* +# 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 +#******************************************************************************* + +#!/bin/csh + +# Some UNIX/Linux compilers don't like <CR>'s in files (DOS format). +set fixup_files = `grep -l "\
" *.[ch]` +if ( "$fixup_files" != "" ) then + echo "Converting files from DOS to UNIX format:" + foreach file ($fixup_files) + echo " $file" + ex $file << EOF >& /dev/null +g/
\$/s/// +w +EOF + end +endif + +# Determine the operating system being built +set OS=`uname -s` +switch ($OS ) + case AIX: + if ( "$1" == "clean" ) then + make -f make_aix.mak clean + else + echo "Building AIX version of SWT OpenGL library." + make -f make_aix.mak make_swt + endif + breaksw + + case Linux: + if ( "$1" == "clean" ) then + make -f make_linux.mak clean + else + echo "Building Linux version of SWT OpenGL library." + make -f make_linux.mak make_swt + endif + breaksw + + case SunOS: + if ( "$1" == "clean" ) then + make -f make_solaris.mak clean + else + echo "Building Solaris version of SWT OpenGL library." + make -f make_solaris.mak make_swt + endif + breaksw + + case HP-UX: + if ( "$1" == "clean" ) then + make -f make_hpux.mak clean + else + echo "Building HP-UX version of SWT OpenGL library." + make -f make_hpux.mak make_swt + endif + breaksw + + default: + echo "Unknown OS -- build aborted" + breaksw +endsw diff --git a/bundles/org.eclipse.swt.opengl/motif/gl_library/glx.c b/bundles/org.eclipse.swt.opengl/motif/gl_library/glx.c new file mode 100644 index 0000000000..4fca4eb8eb --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/motif/gl_library/glx.c @@ -0,0 +1,232 @@ +/******************************************************************************* + * 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 + *******************************************************************************/ +#include <GL/glx.h> +#include "swt.h" +#include "structs.h" + +#define XGL_NATIVE(func) Java_org_eclipse_swt_opengl_internal_motif_XGL_##func + +JNIEXPORT jint JNICALL XGL_NATIVE(glXChooseVisual) + (JNIEnv *env, jclass that, jint arg0, jint arg1, jintArray arg2) +{ + jint *lparg2=NULL; + jint rc; + + DEBUG_CALL("glXChooseVisual\n") + + if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL); + rc = (jint)glXChooseVisual((Display *)arg0, arg1, (int *)lparg2); + if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0); + return rc; +} + +JNIEXPORT void JNICALL XGL_NATIVE(glXCopyContext) + (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3) +{ + DEBUG_CALL("glXCopyContext\n") + + glXCopyContext((Display *)arg0, (GLXContext)arg1, (GLXContext)arg2, arg3); +} + +JNIEXPORT jint JNICALL XGL_NATIVE(glXCreateContext) + (JNIEnv *env, jclass that, jint arg0, jobject arg1, jint arg2, jboolean arg3) +{ + XVisualInfo _arg1, *lparg1=NULL; + jint rc; + + DEBUG_CALL("glXCreateContext\n") + + if (arg1) lparg1 = getXVisualInfoFields(env, arg1, &_arg1); + rc = (jint)glXCreateContext((Display *)arg0, lparg1, (GLXContext)arg2, arg3); + if (arg1) setXVisualInfoFields(env, arg1, lparg1); + return rc; +} + +JNIEXPORT jint JNICALL XGL_NATIVE(glXCreateGLXPixmap) + (JNIEnv *env, jclass that, jint arg0, jobject arg1, jint arg2) +{ + XVisualInfo _arg1, *lparg1=NULL; + jint rc; + + DEBUG_CALL("glXCreateGLXPixmap\n") + + if (arg1) lparg1 = getXVisualInfoFields(env, arg1, &_arg1); + rc = (jint)glXCreateGLXPixmap((Display *)arg0, lparg1, arg2); + if (arg1) setXVisualInfoFields(env, arg1, lparg1); + return rc; +} + +JNIEXPORT void JNICALL XGL_NATIVE(glXDestroyContext) + (JNIEnv *env, jclass that, jint arg0, jint arg1) +{ + DEBUG_CALL("glXDestroyContext\n") + + glXDestroyContext((Display *)arg0, (GLXContext)arg1); +} + +JNIEXPORT void JNICALL XGL_NATIVE(glXDestroyGLXPixmap) + (JNIEnv *env, jclass that, jint arg0, jint arg1) +{ + DEBUG_CALL("glXDestroyGLXPixmap\n") + + glXDestroyGLXPixmap((Display *)arg0, arg1); +} + +JNIEXPORT jint JNICALL XGL_NATIVE(glXGetClientString) + (JNIEnv *env, jclass that, jint arg0, jint arg1) +{ + DEBUG_CALL("glXGetClientString\n") + + return (jint)glXGetClientString((Display *)arg0, arg1); +} + +JNIEXPORT jint JNICALL XGL_NATIVE(glXGetConfig) + (JNIEnv *env, jclass that, jint arg0, jobject arg1, jint arg2, jintArray arg3) +{ + XVisualInfo _arg1, *lparg1=NULL; + jint *lparg3=NULL; + jint rc; + + DEBUG_CALL("glXGetConfig\n") + + if (arg1) lparg1 = getXVisualInfoFields(env, arg1, &_arg1); + if (arg3) lparg3 = (*env)->GetIntArrayElements(env, arg3, NULL); + rc = (jint)glXGetConfig((Display *)arg0, lparg1, arg2, (int *)lparg3); + if (arg1) setXVisualInfoFields(env, arg1, lparg1); + if (arg3) (*env)->ReleaseIntArrayElements(env, arg3, lparg3, 0); + return rc; +} + +JNIEXPORT jint JNICALL XGL_NATIVE(glXGetCurrentContext) + (JNIEnv *env, jclass that) +{ + DEBUG_CALL("glXGetCurrentContext\n") + + return (jint)glXGetCurrentContext(); +} + +JNIEXPORT jint JNICALL XGL_NATIVE(glXGetCurrentDrawable) + (JNIEnv *env, jclass that) +{ + DEBUG_CALL("glXGetCurrentDrawable\n") + + return (jint)glXGetCurrentDrawable(); +} + +JNIEXPORT jboolean JNICALL XGL_NATIVE(glXIsDirect) + (JNIEnv *env, jclass that, jint arg0, jint arg1) +{ + DEBUG_CALL("glXIsDirect\n") + + return (jboolean)glXIsDirect((Display *)arg0, (GLXContext)arg1); +} + +JNIEXPORT jboolean JNICALL XGL_NATIVE(glXMakeCurrent) + (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2) +{ + DEBUG_CALL("glXMakeCurrent\n") + + return (jboolean)glXMakeCurrent((Display *)arg0, (GLXDrawable)arg1, (GLXContext)arg2); +} + +JNIEXPORT jboolean JNICALL XGL_NATIVE(glXQueryExtension) + (JNIEnv *env, jclass that, jint arg0, jintArray arg1, jintArray arg2) +{ + jint *lparg1=NULL; + jint *lparg2=NULL; + jboolean rc; + + DEBUG_CALL("glXQueryExtension\n") + + if (arg1) lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL); + if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL); + rc = (jboolean)glXQueryExtension((Display *)arg0, (int *)lparg1, (int *)lparg2); + if (arg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0); + if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0); + return rc; +} + +JNIEXPORT jint JNICALL XGL_NATIVE(glXQueryExtensionsString) + (JNIEnv *env, jclass that, jint arg0, jint arg1) +{ + DEBUG_CALL("glXQueryExtensionsString\n") + + return (jint)glXQueryExtensionsString((Display *)arg0, arg1); +} + +JNIEXPORT jint JNICALL XGL_NATIVE(glXQueryServerString) + (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2) +{ + DEBUG_CALL("glXQueryServerString\n") + + return (jint)glXQueryServerString((Display *)arg0, arg1, arg2); +} + +JNIEXPORT jboolean JNICALL XGL_NATIVE(glXQueryVersion) + (JNIEnv *env, jclass that, jint arg0, jintArray arg1, jintArray arg2) +{ + jint *lparg1=NULL; + jint *lparg2=NULL; + jboolean rc; + + DEBUG_CALL("glXQueryVersion\n") + + if (arg1) lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL); + if (arg2) lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL); + rc = (jboolean)glXQueryVersion((Display *)arg0, (int *)lparg1, (int *)lparg2); + if (arg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0); + if (arg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0); + return rc; +} + +JNIEXPORT void JNICALL XGL_NATIVE(glXSwapBuffers) + (JNIEnv *env, jclass that, jint arg0, jint arg1) +{ + DEBUG_CALL("glXSwapBuffers\n") + + glXSwapBuffers((Display *)arg0, (GLXDrawable)arg1); +} + +JNIEXPORT void JNICALL XGL_NATIVE(glXUseXFont) + (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3) +{ + DEBUG_CALL("glXUseXFont\n") + + glXUseXFont(arg0, arg1, arg2, arg3); +} + +JNIEXPORT void JNICALL XGL_NATIVE(glXWaitGL) + (JNIEnv *env, jclass that) +{ + DEBUG_CALL("glXWaitGL\n") + + glXWaitGL(); +} + +JNIEXPORT void JNICALL XGL_NATIVE(glXWaitX) + (JNIEnv *env, jclass that) +{ + DEBUG_CALL("glXWaitX\n") + + glXWaitX(); +} + +JNIEXPORT void JNICALL XGL_NATIVE(memmove__Lorg_eclipse_swt_opengl_internal_motif_XVisualInfo_2II) + (JNIEnv *env, jclass that, jobject arg0, jint arg1, jint arg2) +{ + XVisualInfo _arg0, *lparg0=NULL; + + DEBUG_CALL("memmove__Lorg_eclipse_swt_opengl_internal_motif_XVisualInfo_2II\n") + + if (arg0) lparg0 = &_arg0; + memmove((void *)lparg0, (const void *)arg1, (size_t)arg2); + if (arg0) setXVisualInfoFields(env, arg0, lparg0); +} diff --git a/bundles/org.eclipse.swt.opengl/motif/gl_library/make_aix.mak b/bundles/org.eclipse.swt.opengl/motif/gl_library/make_aix.mak new file mode 100644 index 0000000000..6928cabd4e --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/motif/gl_library/make_aix.mak @@ -0,0 +1,40 @@ +#******************************************************************************* +# 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 +#******************************************************************************* + +# Define the installation directories for various products. +# JAVA_HOME - The JDK > 1.3 +JAVA_HOME = /usr/java131 + +# Define the various shared libraries to be made. +SWT_PREFIX = swt +WS_PREFIX = motif +SWT_DLL = lib$(SWT_PREFIX)-$(WS_PREFIX).so +SWT_OBJ = gl.o glu.o structs.o glx.o +SWT_LIB = -G -bnoentry -lc_r -lC_r -lm -bexpall -lMrm -lX11 -lXext -liconv -lGL -lGLU + +# +# The following CFLAGS are for compiling the SWT OpenGL library. +# +CFLAGS = -O -s \ + -DAIX \ + -DNO_XINERAMA_EXTENSIONS \ + -q mbcs -qlanglvl=extended -qmaxmem=8192 \ + -I$(JAVA_HOME)/include + +all: make_swt + +make_swt: $(SWT_DLL) + +$(SWT_DLL): $(SWT_OBJ) + ld $(SWT_LIB) -o $(SWT_DLL) $(SWT_OBJ) + +clean: + rm -f *.o *.so *.a diff --git a/bundles/org.eclipse.swt.opengl/motif/gl_library/make_hpux.mak b/bundles/org.eclipse.swt.opengl/motif/gl_library/make_hpux.mak new file mode 100644 index 0000000000..16648de5f0 --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/motif/gl_library/make_hpux.mak @@ -0,0 +1,44 @@ +#******************************************************************************* +# 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 +#******************************************************************************* + +# Define the installation directories for various products. +JAVA_HOME = /opt/java1.3 + +# Define the various shared libraries to be made. +SWT_PREFIX = gl +WS_PREFIX = motif +SWT_DLL = lib$(SWT_PREFIX)-$(WS_PREFIX).sl +SWT_OBJ = gl.o glu.o structs.o glx.o +SWT_LIB = -L/usr/lib -L/opt/graphics/OpenGL/lib -G -lGL -lGLU -lc -ldld -lm + +# +# The following CFLAGS are for compiling the SWT OpenGL library. +# +# Note: +# The flag -xarch=generic ensure the compiled modules will be targeted +# for 32-bit architectures. If this flag is not +# +CFLAGS = -Ae +z \ + -DNO_XINERAMA_EXTENSIONS \ + -D_HPUX -D_POSIX_C_SOURCE=199506L \ + -I./ \ + -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/hp-ux \ + -I/opt/graphics/OpenGL/include + +all: make_swt + +make_swt: $(SWT_DLL) + +$(SWT_DLL): $(SWT_OBJ) + ld -b -z -o $@ $(SWT_OBJ) $(SWT_LIB) + +clean: + rm -f *.sl *.o diff --git a/bundles/org.eclipse.swt.opengl/motif/gl_library/make_linux.mak b/bundles/org.eclipse.swt.opengl/motif/gl_library/make_linux.mak new file mode 100644 index 0000000000..755895fe3d --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/motif/gl_library/make_linux.mak @@ -0,0 +1,38 @@ +#******************************************************************************* +# 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 +#******************************************************************************* + +# Define the installation directories for various products. +JAVA_HOME = /bluebird/teamswt/swt-builddir/ive/bin + + +# Define the various shared libraries to be made. +SWT_PREFIX = gl +WS_PREFIX = motif +SWT_DLL = lib$(SWT_PREFIX)-$(WS_PREFIX).so +SWT_OBJ = gl.o glu.o structs.o glx.o +SWT_LIB = -shared -L/usr/X11R6/lib -lGL -lGLU -lm + +# +# The following CFLAGS are for compiling the SWT OpenGL library. +# +CFLAGS = -O -s \ + -I./ \ + -I$(JAVA_HOME)/include + +all: make_swt + +make_swt: $(SWT_DLL) + +$(SWT_DLL): $(SWT_OBJ) + ld -o $@ $(SWT_OBJ) $(SWT_LIB) + +clean: + rm -f *.so *.o diff --git a/bundles/org.eclipse.swt.opengl/motif/gl_library/make_solaris.mak b/bundles/org.eclipse.swt.opengl/motif/gl_library/make_solaris.mak new file mode 100644 index 0000000000..1b08b07f47 --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/motif/gl_library/make_solaris.mak @@ -0,0 +1,45 @@ +#******************************************************************************* +# 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 +#******************************************************************************* + +# Define the installation directories for various products. +JAVA_HOME = /bluebird/teamswt/swt-builddir/ive/bin + +# Define the various shared libraries to be made. +SWT_PREFIX = gl +WS_PREFIX = motif +SWT_DLL = lib$(SWT_PREFIX)-$(WS_PREFIX).so +SWT_OBJ = gl.o glu.o structs.o glx.o +SWT_LIB = -G -L/usr/lib -lm -lGL -lGLU + +# +# The following CFLAGS are for compiling the SWT OpenGL library. +# +# Note: +# The flag -xarch=generic ensure the compiled modules will be targeted +# for 32-bit architectures. +# +CFLAGS = -O -s \ + -xarch=generic \ + -KPIC \ + -I./ \ + -I$(JAVA_HOME)/include + +all: make_swt + +make_swt: $(SWT_DLL) + +$(SWT_DLL): $(SWT_OBJ) + ld -o $@ $(SWT_OBJ) $(SWT_LIB) + +clean: + rm -f *.so *.o + + diff --git a/bundles/org.eclipse.swt.opengl/motif/gl_library/structs.c b/bundles/org.eclipse.swt.opengl/motif/gl_library/structs.c new file mode 100644 index 0000000000..368852dc33 --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/motif/gl_library/structs.c @@ -0,0 +1,73 @@ +/*******************************************************************************
+ * 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
+ *******************************************************************************/
+#include <X11/X.h>
+#include <X11/Xlib.h>
+#include "swt.h"
+#include "structs.h"
+
+typedef struct XVisualInfo_FID_CACHE {
+ int cached;
+ jclass clazz;
+ jfieldID visual, visualid, screen, depth, cclass, red_mask, green_mask, blue_mask, colormap_size, bits_per_rgb;
+} XVisualInfo_FID_CACHE;
+typedef XVisualInfo_FID_CACHE *PXVisualInfo_FID_CACHE;
+
+XVisualInfo_FID_CACHE XVisualInfoFc;
+
+void cacheXVisualInfoFids(JNIEnv *env, jobject lpObject, PXVisualInfo_FID_CACHE lpCache)
+{
+ if (lpCache->cached) return;
+ lpCache->clazz = (*env)->GetObjectClass(env, lpObject);
+ lpCache->visual = (*env)->GetFieldID(env, lpCache->clazz, "visual", "I");
+ lpCache->visualid = (*env)->GetFieldID(env, lpCache->clazz, "visualid", "I");
+ lpCache->screen = (*env)->GetFieldID(env, lpCache->clazz, "screen", "I");
+ lpCache->depth = (*env)->GetFieldID(env, lpCache->clazz, "depth", "I");
+ lpCache->cclass = (*env)->GetFieldID(env, lpCache->clazz, "cclass", "I");
+ lpCache->red_mask = (*env)->GetFieldID(env, lpCache->clazz, "red_mask", "I");
+ lpCache->green_mask = (*env)->GetFieldID(env, lpCache->clazz, "green_mask", "I");
+ lpCache->blue_mask = (*env)->GetFieldID(env, lpCache->clazz, "blue_mask", "I");
+ lpCache->colormap_size = (*env)->GetFieldID(env, lpCache->clazz, "colormap_size", "I");
+ lpCache->bits_per_rgb = (*env)->GetFieldID(env, lpCache->clazz, "bits_per_rgb", "I");
+ lpCache->cached = 1;
+}
+
+XVisualInfo *getXVisualInfoFields(JNIEnv *env, jobject lpObject, XVisualInfo *lpStruct)
+{
+ PXVisualInfo_FID_CACHE lpCache = &XVisualInfoFc;
+ if (!lpCache->cached) cacheXVisualInfoFids(env, lpObject, lpCache);
+ lpStruct->visual = (Visual *)(*env)->GetIntField(env, lpObject, lpCache->visual);
+ lpStruct->visualid = (*env)->GetIntField(env, lpObject, lpCache->visualid);
+ lpStruct->screen = (*env)->GetIntField(env, lpObject, lpCache->screen);
+ lpStruct->depth = (*env)->GetIntField(env, lpObject, lpCache->depth);
+ lpStruct->class = (*env)->GetIntField(env, lpObject, lpCache->cclass);
+ lpStruct->red_mask = (*env)->GetIntField(env, lpObject, lpCache->red_mask);
+ lpStruct->green_mask = (*env)->GetIntField(env, lpObject, lpCache->green_mask);
+ lpStruct->blue_mask = (*env)->GetIntField(env, lpObject, lpCache->blue_mask);
+ lpStruct->colormap_size = (*env)->GetIntField(env, lpObject, lpCache->colormap_size);
+ lpStruct->bits_per_rgb = (*env)->GetIntField(env, lpObject, lpCache->bits_per_rgb);
+ return lpStruct;
+}
+
+void setXVisualInfoFields(JNIEnv *env, jobject lpObject, XVisualInfo *lpStruct)
+{
+ PXVisualInfo_FID_CACHE lpCache = &XVisualInfoFc;
+ if (!lpCache->cached) cacheXVisualInfoFids(env, lpObject, lpCache);
+ (*env)->SetIntField(env, lpObject, lpCache->visual, (jint)lpStruct->visual);
+ (*env)->SetIntField(env, lpObject, lpCache->visualid, (jint)lpStruct->visualid);
+ (*env)->SetIntField(env, lpObject, lpCache->screen, (jint)lpStruct->screen);
+ (*env)->SetIntField(env, lpObject, lpCache->depth, (jint)lpStruct->depth);
+ (*env)->SetIntField(env, lpObject, lpCache->cclass, (jint)lpStruct->class);
+ (*env)->SetIntField(env, lpObject, lpCache->red_mask, (jint)lpStruct->red_mask);
+ (*env)->SetIntField(env, lpObject, lpCache->green_mask, (jint)lpStruct->green_mask);
+ (*env)->SetIntField(env, lpObject, lpCache->blue_mask, (jint)lpStruct->blue_mask);
+ (*env)->SetIntField(env, lpObject, lpCache->colormap_size, (jint)lpStruct->colormap_size);
+ (*env)->SetIntField(env, lpObject, lpCache->bits_per_rgb, (jint)lpStruct->bits_per_rgb);
+}
diff --git a/bundles/org.eclipse.swt.opengl/motif/gl_library/structs.h b/bundles/org.eclipse.swt.opengl/motif/gl_library/structs.h new file mode 100644 index 0000000000..80791498e6 --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/motif/gl_library/structs.h @@ -0,0 +1,16 @@ +/*******************************************************************************
+ * 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
+ *******************************************************************************/
+#include <X11/X.h>
+#include <X11/Xutil.h>
+
+XVisualInfo *getXVisualInfoFields(JNIEnv *env, jobject lpObject, XVisualInfo *lpStruct);
+void setXVisualInfoFields(JNIEnv *env, jobject lpObject, XVisualInfo *lpStruct);
+
diff --git a/bundles/org.eclipse.swt.opengl/motif/org/eclipse/swt/opengl/GLContext.java b/bundles/org.eclipse.swt.opengl/motif/org/eclipse/swt/opengl/GLContext.java new file mode 100644 index 0000000000..8bab074aac --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/motif/org/eclipse/swt/opengl/GLContext.java @@ -0,0 +1,303 @@ +/******************************************************************************* + * 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; + + +import org.eclipse.swt.*; +import org.eclipse.swt.graphics.*; +import org.eclipse.swt.internal.motif.*; +import org.eclipse.swt.opengl.internal.motif.*; + +/** + * Instances of <code>GLContext</code> are used to draw on swt <code>Drawable</code>s + * through invocations of provided OpenGL functions. + * <p> + * Application code must explicitly invoke the <code>GLContext.dispose ()</code> + * method to release the operating system resources managed by each instance + * when those instances are no longer required. This is <em>particularly</em> + * important on Windows95 and Windows98 where the operating system has a limited + * number of device contexts available. + * </p> + */ +public class GLContext { + int handle; + int gc; + GCData data; + Drawable drawable; + int selectBufferPtr = 0; + + static final int MSB_FIRST = 1; + static final int LSB_FIRST = 2; + + /** + * Constructs a new instance of this class which has been + * configured to draw on the specified drawable. + * <p> + * You must dispose the <code>GLContext</code> when it is no longer required. + * </p> + * + * @param drawable the drawable to draw on + * @exception IllegalArgumentException <ul> + * <li>ERROR_NULL_ARGUMENT - if the drawable is null</li> + * </ul> + * @exception SWTError <ul> + * <li>ERROR_NO_HANDLES if a handle could not be obtained for gc creation</li> + * <li>ERROR_UNSUPPORTED_DEPTH - if the current display depth is not supported</li> + * </ul> + */ + public GLContext (Drawable drawable) { + if (drawable == null) SWT.error (SWT.ERROR_NULL_ARGUMENT); + this.drawable = drawable; + this.data = new GCData (); + gc = drawable.internal_new_GC (data); + if (gc == 0) SWT.error (SWT.ERROR_NO_HANDLES); + int xDisplay = data.display; + int screen = OS.XDefaultScreen (xDisplay); + int depth = OS.XDefaultDepthOfScreen (OS.XDefaultScreenOfDisplay (xDisplay)); + int attrib [] = { + XGL.GLX_LEVEL, + 0, + XGL.GLX_RGBA, + XGL.GLX_DOUBLEBUFFER, + XGL.GLX_DEPTH_SIZE, + depth, + 0 + }; + int infoPtr = XGL.glXChooseVisual (xDisplay, screen, attrib); + if (infoPtr == 0) SWT.error (SWT.ERROR_UNSUPPORTED_DEPTH); + XVisualInfo info = new XVisualInfo (); + XGL.memmove (info, infoPtr, XVisualInfo.sizeof); + OS.XFree (infoPtr); + handle = XGL.glXCreateContext (xDisplay, info, 0, false); + if (handle == 0) SWT.error (SWT.ERROR_NO_HANDLES); + } + + public ImageData convertImageData (ImageData source) { + PaletteData palette = new PaletteData (0xff0000, 0xff00, 0xff); + ImageData newSource = new ImageData (source.width, source.height, 24, palette); + ImageDataUtil.blit ( + 1, + source.data, + source.depth, + source.bytesPerLine, + (source.depth != 16) ? MSB_FIRST : LSB_FIRST, + 0, + 0, + source.width, + source.height, + source.palette.redMask, + source.palette.greenMask, + source.palette.blueMask, + 255, + null, + 0, + 0, + 0, + newSource.data, + newSource.depth, + newSource.bytesPerLine, + (newSource.depth != 16) ? MSB_FIRST : LSB_FIRST, + 0, + 0, + newSource.width, + newSource.height, + newSource.palette.redMask, + newSource.palette.greenMask, + newSource.palette.blueMask, + false, + true); + + return newSource; + } + + /** + * Disposes of the operating system resources associated with + * the receiver. Applications must dispose of all <code>GLContext</code>s + * that they allocate. + */ + public void dispose () { + if (handle == 0) return; + int xDisplay = data.display; + if (XGL.glXGetCurrentContext () == handle) { + XGL.glXMakeCurrent (xDisplay, 0, 0); + } + if (selectBufferPtr != 0) OS.XtFree (selectBufferPtr); + XGL.glXDestroyContext (xDisplay, handle); + handle = 0; + // drawable may be disposed + try { + drawable.internal_dispose_GC (gc, data); + } catch (SWTException e) { + } + gc = 0; + data.display = data.drawable = data.colormap = 0; + data.fontList = data.clipRgn = data.renderTable = 0; + drawable = null; + data.device = null; + data.image = null; + data.codePage = null; + data = null; + } + + public int[] getSelectBuffer (int selectBufferPtr, int[] selectBuffer) { + OS.memmove (selectBuffer, selectBufferPtr, selectBuffer.length * 4); + return selectBuffer; + } + + public int getSelectBufferPtr (int[] selectBuffer) { + if (selectBufferPtr == 0) { + selectBufferPtr = OS.XtMalloc (selectBuffer.length * 4); + } + OS.memmove (selectBufferPtr, selectBuffer, selectBuffer.length * 4); + return selectBufferPtr; + } + + /** + * Returns a boolean indicating whether the receiver is the current + * <code>GLContext</code>. + * + * @return true if the receiver is the current <code>GLContext</code>, + * false otherwise + * @exception SWTError <ul> + * <li>ERROR_GRAPHIC_DISPOSED if the receiver is disposed</li> + * </ul> + */ + public boolean isCurrent () { + if (isDisposed ()) SWT.error (SWT.ERROR_GRAPHIC_DISPOSED); + return XGL.glXGetCurrentContext () == handle; + } + + /** + * Returns a boolean indicating whether the <code>GLContext</code> has been + * disposed. + * <p> + * This method gets the dispose state for the <code>GLContext</code>. + * When a <code>GLContext</code> has been disposed, it is an error to + * invoke any other method using the <code>GLContext</code>. + * + * @return true if the <code>GLContext</code> is disposed, false otherwise + */ + public boolean isDisposed () { + return handle == 0; + } + + /** + * Loads the specified bitmap font. + * + * @param fdata + * @param device + * @param base + * @param first + * @param count + */ + public void loadBitmapFont (FontData fdata, Device device, int base, int startIndex, int length) { + /* Temporaly code, due some problems when running on UTF-8 loadBitmapFont () + * is restrict to works only for ascii. + * Note: en_US.ISO8859-1 also code be used. + */ + fdata.setLocale ("C"); + Font font = new Font (device, fdata); + int fontList = font.handle; + int[] buffer = new int [1]; + if (!OS.XmFontListInitFontContext (buffer, fontList)) return; + int context = buffer [0]; + XFontStruct fontStruct = new XFontStruct (); + int fontListEntry; + int[] fontStructPtr = new int [1]; + int[] fontNamePtr = new int [1]; + int xfont = 0; + // go through each entry in the font list + while ((fontListEntry = OS.XmFontListNextEntry (context)) != 0) { + int fontPtr = OS.XmFontListEntryGetFont (fontListEntry, buffer); + if (buffer [0] == OS.XmFONT_IS_FONT) { + // FontList contains a single font + OS.memmove (fontStruct, fontPtr, 20 * 4); + xfont = fontStruct.fid; + } else { + // FontList contains a fontSet + int nFonts = OS.XFontsOfFontSet (fontPtr, fontStructPtr, fontNamePtr); + int[] fontStructs = new int [nFonts]; + OS.memmove (fontStructs, fontStructPtr [0], nFonts * 4); + // Go through each fontStruct in the font set. + for (int i = 0; i < nFonts; i++) { + OS.memmove (fontStruct, fontStructs [i], XFontStruct.sizeof); + xfont = fontStruct.fid; + } + } + } + if (xfont != 0) { + XGL.glXUseXFont (xfont, startIndex, length, base); + } + font.dispose (); + OS.XmFontListFreeFontContext (context); + } + + /** + * Loads the specified outline font. + * + * @param fdata + * @param device + * @param base + * @param first + * @param count + * @param deviation + * @param extrusion + * @param format + * @param lpgmf + */ + public void loadOutlineFont (FontData fdata, Device device, int base, int first, + int count, float deviation, float extrusion, int format, GLYPHMETRICSFLOAT[] lpgmf) { + // stub + } + + /** + * Resizes the receiver. + * + * @param x + * @param y + * @param width + * @param height + */ + public void resize (int x, int y, int width, int height) { + if (height == 0) height = 1; + GL.glViewport (x, y, width, height); + GL.glMatrixMode (GL.GL_PROJECTION); + GL.glLoadIdentity (); + GLU.gluPerspective (45.0f, (float) width / (float) height, 0.1f, 100.0f); + GL.glMatrixMode (GL.GL_MODELVIEW); + GL.glLoadIdentity (); + } + + /** + * Sets the receiver to be the current <code>GLContext</code>. + * + * @exception SWTError <ul> + * <li>ERROR_GRAPHIC_DISPOSED if the receiver is disposed</li> + * </ul> + */ + public void setCurrent () { + if (isDisposed ()) SWT.error (SWT.ERROR_GRAPHIC_DISPOSED); + if (XGL.glXGetCurrentContext () == handle) return; + XGL.glXMakeCurrent (data.display, data.drawable, handle); + } + + /** + * Swaps the receiver's buffers. + * + * @exception SWTError <ul> + * <li>ERROR_GRAPHIC_DISPOSED if the receiver is disposed</li> + * </ul> + */ + public void swapBuffers () { + if (isDisposed ()) SWT.error (SWT.ERROR_GRAPHIC_DISPOSED); + XGL.glXSwapBuffers (data.display, data.drawable); + } +} diff --git a/bundles/org.eclipse.swt.opengl/motif/org/eclipse/swt/opengl/internal/motif/XGL.java b/bundles/org.eclipse.swt.opengl/motif/org/eclipse/swt/opengl/internal/motif/XGL.java new file mode 100644 index 0000000000..ce3705a06f --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/motif/org/eclipse/swt/opengl/internal/motif/XGL.java @@ -0,0 +1,227 @@ +/******************************************************************************* + * 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); + +} diff --git a/bundles/org.eclipse.swt.opengl/motif/org/eclipse/swt/opengl/internal/motif/XVisualInfo.java b/bundles/org.eclipse.swt.opengl/motif/org/eclipse/swt/opengl/internal/motif/XVisualInfo.java new file mode 100644 index 0000000000..d6cba4ad60 --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/motif/org/eclipse/swt/opengl/internal/motif/XVisualInfo.java @@ -0,0 +1,24 @@ +/******************************************************************************* + * 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; + + +public class XVisualInfo { + public int visual; + public int visualid; + public int screen; + public int depth; + public int cclass; + public int red_mask, green_mask, blue_mask; + public int colormap_size; + public int bits_per_rgb; + public static final int sizeof = 40; +} diff --git a/bundles/org.eclipse.swt.opengl/plugin.properties b/bundles/org.eclipse.swt.opengl/plugin.properties new file mode 100644 index 0000000000..72fe2d9ff6 --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/plugin.properties @@ -0,0 +1,12 @@ +############################################################################### +# 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 +############################################################################### +pluginName = Standard Widget Toolkit OpenGL Bindings +providerName = Eclipse.org
\ No newline at end of file diff --git a/bundles/org.eclipse.swt.opengl/plugin.xml b/bundles/org.eclipse.swt.opengl/plugin.xml new file mode 100644 index 0000000000..0e8596357a --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/plugin.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<plugin + id="org.eclipse.swt.opengl" + name="%pluginName" + version="2.1.0" + provider-name="%providerName"> + + <runtime> + <library name="$ws$/swt.jar"> + <export name="*"/> + <packages prefixes="org.eclipse.swt.opengl"/> + </library> + </runtime> + <requires> + <import plugin="org.eclipse.swt"/> + </requires> + + +</plugin> diff --git a/bundles/org.eclipse.swt.opengl/win32/gl_library/build.bat b/bundles/org.eclipse.swt.opengl/win32/gl_library/build.bat new file mode 100644 index 0000000000..7f343981b4 --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/win32/gl_library/build.bat @@ -0,0 +1,34 @@ +rem *******************************************************************************
+rem Copyright (c) 2000, 2003 IBM Corporation and others.
+rem All rights reserved. This program and the accompanying materials
+rem are made available under the terms of the Common Public License v1.0
+rem which accompanies this distribution, and is available at
+rem http://www.eclipse.org/legal/cpl-v10.html
+rem
+rem Contributors:
+rem IBM Corporation - initial API and implementation
+rem *******************************************************************************
+
+@echo off
+
+IF NOT "%JAVA_HOME%"=="" GOTO MAKE
+
+rem *****
+rem Javah
+rem *****
+set JAVA_HOME=j:\teamswt\swt-builddir\ive\bin
+set path=%JAVA_HOME%;%path%
+
+rem ********
+rem MSVC 6.0
+rem ********
+call k:\dev\products\msvc60\vc98\bin\vcvars32.bat
+
+rem ******
+rem MS-SDK
+rem ******
+set Mssdk=j:\teamswt\swt-builddir\mssdk
+call %mssdk%\setenv.bat
+
+:MAKE
+nmake -f make_win32.mak %1 %2 %3 %4
diff --git a/bundles/org.eclipse.swt.opengl/win32/gl_library/glw.c b/bundles/org.eclipse.swt.opengl/win32/gl_library/glw.c new file mode 100644 index 0000000000..ebe0238cfc --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/win32/gl_library/glw.c @@ -0,0 +1,283 @@ +/*******************************************************************************
+ * 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
+ *******************************************************************************/
+#include <windows.h>
+#include <wingdi.h>
+#include "jni.h"
+#include "swt.h"
+#include "structs.h"
+
+#define WGL_NATIVE(func) Java_org_eclipse_swt_opengl_internal_win32_WGL_##func
+
+JNIEXPORT jint JNICALL WGL_NATIVE(ChoosePixelFormat)
+ (JNIEnv *env, jclass that, jint arg0, jobject arg1)
+{
+ PIXELFORMATDESCRIPTOR _arg1, *lparg1=NULL;
+ jint rc;
+
+ DEBUG_CALL("ChoosePixelFormat\n")
+
+ if (arg1) lparg1 = getPIXELFORMATDESCRIPTORFields(env, arg1, &_arg1);
+ rc = (jint)ChoosePixelFormat((HDC)arg0, (CONST PIXELFORMATDESCRIPTOR *)lparg1);
+ if (arg1) setPIXELFORMATDESCRIPTORFields(env, arg1, lparg1);
+ return rc;
+}
+
+JNIEXPORT jint JNICALL WGL_NATIVE(DescribePixelFormat)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jobject arg3)
+{
+ PIXELFORMATDESCRIPTOR _arg3, *lparg3=NULL;
+ jint rc;
+
+ DEBUG_CALL("DescribePixelFormat\n")
+
+ if (arg3) lparg3 = getPIXELFORMATDESCRIPTORFields(env, arg3, &_arg3);
+ rc = (jint)DescribePixelFormat((HDC)arg0, arg1, arg2, (LPPIXELFORMATDESCRIPTOR)lparg3);
+ if (arg3) setPIXELFORMATDESCRIPTORFields(env, arg3, lparg3);
+ return rc;
+}
+
+JNIEXPORT jint JNICALL WGL_NATIVE(GetPixelFormat)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("GetPixelFormat\n")
+
+ return (jint)GetPixelFormat((HDC)arg0);
+}
+
+JNIEXPORT jboolean JNICALL WGL_NATIVE(SetPixelFormat)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jobject arg2)
+{
+ PIXELFORMATDESCRIPTOR _arg2, *lparg2=NULL;
+ jboolean rc;
+
+ DEBUG_CALL("SetPixelFormat\n")
+
+ if (arg2) lparg2 = getPIXELFORMATDESCRIPTORFields(env, arg2, &_arg2);
+ rc = (jboolean)SetPixelFormat((HDC)arg0, arg1, (CONST PIXELFORMATDESCRIPTOR *)lparg2);
+ if (arg2) setPIXELFORMATDESCRIPTORFields(env, arg2, lparg2);
+ return rc;
+}
+
+JNIEXPORT jboolean JNICALL WGL_NATIVE(SwapBuffers)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("SwapBuffers\n")
+
+ return (jboolean)SwapBuffers((HDC)arg0);
+}
+
+JNIEXPORT jboolean JNICALL WGL_NATIVE(wglCopyContext)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+{
+ DEBUG_CALL("wglCopyContext\n")
+
+ return (jboolean)wglCopyContext((HGLRC)arg0, (HGLRC)arg1, (UINT)arg2);
+}
+
+JNIEXPORT jint JNICALL WGL_NATIVE(wglCreateContext)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("wglCreateContext\n")
+
+ return (jint)wglCreateContext((HDC)arg0);
+}
+
+JNIEXPORT jint JNICALL WGL_NATIVE(wglCreateLayerContext)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+ DEBUG_CALL("wglCreateLayerContext\n")
+
+ return (jint)wglCreateLayerContext((HDC)arg0, arg1);
+}
+
+JNIEXPORT jboolean JNICALL WGL_NATIVE(wglDeleteContext)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ DEBUG_CALL("wglDeleteContext\n")
+
+ return (jboolean)wglDeleteContext((HGLRC)arg0);
+}
+
+JNIEXPORT jboolean JNICALL WGL_NATIVE(wglDescribeLayerPlane)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jobject arg4)
+{
+ LAYERPLANEDESCRIPTOR _arg4, *lparg4=NULL;
+ jboolean rc;
+
+ DEBUG_CALL("wglDescribeLayerPlane\n")
+
+ if (arg4) lparg4 = getLAYERPLANEDESCRIPTORFields(env, arg4, &_arg4);
+ rc = (jboolean)wglDescribeLayerPlane((HDC)arg0, arg1, arg2, arg3, (LPLAYERPLANEDESCRIPTOR)lparg4);
+ if (arg4) setLAYERPLANEDESCRIPTORFields(env, arg4, lparg4);
+ return rc;
+}
+
+JNIEXPORT jint JNICALL WGL_NATIVE(wglGetCurrentContext)
+ (JNIEnv *env, jclass that)
+{
+ DEBUG_CALL("wglGetCurrentContext\n")
+
+ return (jint)wglGetCurrentContext();
+}
+
+JNIEXPORT jint JNICALL WGL_NATIVE(wglGetCurrentDC)
+ (JNIEnv *env, jclass that)
+{
+ DEBUG_CALL("wglGetCurrentDC\n")
+
+ return (jint)wglGetCurrentDC();
+}
+
+JNIEXPORT jint JNICALL WGL_NATIVE(wglGetLayerPaletteEntries)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jintArray arg4)
+{
+ jint *lparg4=NULL;
+ jint rc;
+
+ DEBUG_CALL("wglGetLayerPaletteEntries\n")
+
+ if (arg4) lparg4 = (*env)->GetIntArrayElements(env, arg4, NULL);
+ rc = (jint)wglGetLayerPaletteEntries((HDC)arg0, arg1, arg2, arg3, (COLORREF *)lparg4);
+ if (arg4) (*env)->ReleaseIntArrayElements(env, arg4, lparg4, 0);
+ return rc;
+}
+
+JNIEXPORT jint JNICALL WGL_NATIVE(wglGetProcAddress)
+ (JNIEnv *env, jclass that, jbyteArray arg0)
+{
+ jbyte *lparg0=NULL;
+ jint rc;
+
+ DEBUG_CALL("wglGetProcAddress\n")
+
+ if (arg0) lparg0 = (*env)->GetByteArrayElements(env, arg0, NULL);
+ rc = (jint)wglGetProcAddress((LPCSTR)lparg0);
+ if (arg0) (*env)->ReleaseByteArrayElements(env, arg0, lparg0, 0);
+ return rc;
+}
+
+JNIEXPORT jboolean JNICALL WGL_NATIVE(wglMakeCurrent)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+ DEBUG_CALL("wglMakeCurrent\n")
+
+ return (jboolean)wglMakeCurrent((HDC)arg0, (HGLRC)arg1);
+}
+
+JNIEXPORT jboolean JNICALL WGL_NATIVE(wglRealizeLayerPalette)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jboolean arg2)
+{
+ DEBUG_CALL("wglRealizeLayerPalette\n")
+
+ return (jboolean)wglRealizeLayerPalette((HDC)arg0, arg1, (BOOL)arg2);
+}
+
+JNIEXPORT jint JNICALL WGL_NATIVE(wglSetLayerPaletteEntries)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jintArray arg4)
+{
+ jint *lparg4=NULL;
+ jint rc;
+
+ DEBUG_CALL("wglSetLayerPaletteEntries\n")
+
+ if (arg4) lparg4 = (*env)->GetIntArrayElements(env, arg4, NULL);
+ rc = (jint)wglSetLayerPaletteEntries((HDC)arg0, arg1, arg2, arg3, (CONST COLORREF *)lparg4);
+ if (arg4) (*env)->ReleaseIntArrayElements(env, arg4, lparg4, 0);
+ return rc;
+}
+
+JNIEXPORT jboolean JNICALL WGL_NATIVE(wglShareLists)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+ DEBUG_CALL("wglShareLists\n")
+
+ return (jboolean)wglShareLists((HGLRC)arg0, (HGLRC)arg1);
+}
+
+JNIEXPORT jboolean JNICALL WGL_NATIVE(wglSwapLayerBuffers)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+{
+ DEBUG_CALL("wglSwapLayerBuffers\n")
+
+ return (jboolean)wglSwapLayerBuffers((HDC)arg0, arg1);
+}
+
+JNIEXPORT jboolean JNICALL WGL_NATIVE(wglUseFontBitmapsA)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
+{
+ DEBUG_CALL("wglUseFontBitmapsA\n")
+
+ return (jboolean)wglUseFontBitmapsA((HDC)arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT jboolean JNICALL WGL_NATIVE(wglUseFontBitmapsW)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
+{
+ DEBUG_CALL("wglUseFontBitmapsW\n")
+
+ return (jboolean)wglUseFontBitmapsW((HDC)arg0, arg1, arg2, arg3);
+}
+
+JNIEXPORT jboolean JNICALL WGL_NATIVE(wglUseFontOutlinesA)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jfloat arg4, jfloat arg5, jint arg6, jobject arg7)
+{
+// GLYPHMETRICSFLOAT _arg7, *lparg7=NULL;
+ jboolean rc;
+
+ DEBUG_CALL("wglUseFontOutlinesA\n")
+
+// if (arg7) lparg7 = getGLYPHMETRICSFLOATFields(env, arg7, &_arg7);
+ rc = (jboolean)wglUseFontOutlinesA((HDC)arg0, arg1, arg2, arg3, (FLOAT)arg4, (FLOAT)arg5, arg6, (LPGLYPHMETRICSFLOAT)arg7);
+// if (arg7) setGLYPHMETRICSFLOATFields(env, arg7, lparg7);
+ return rc;
+}
+
+JNIEXPORT jboolean JNICALL WGL_NATIVE(wglUseFontOutlinesW)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jfloat arg4, jfloat arg5, jint arg6, jobject arg7)
+{
+// GLYPHMETRICSFLOAT _arg7, *lparg7=NULL;
+ jboolean rc;
+
+ DEBUG_CALL("wglUseFontOutlinesW\n")
+
+// if (arg7) lparg7 = getGLYPHMETRICSFLOATFields(env, arg7, &_arg7);
+ rc = (jboolean)wglUseFontOutlinesW((HDC)arg0, arg1, arg2, arg3, (FLOAT)arg4, (FLOAT)arg5, arg6, (LPGLYPHMETRICSFLOAT)arg7);
+// if (arg7) setGLYPHMETRICSFLOATFields(env, arg7, lparg7);
+ return rc;
+}
+
+JNIEXPORT void JNICALL WGL_NATIVE(MoveMemoryW__Lorg_eclipse_swt_opengl_internal_win32_GLYPHMETRICSFLOAT_2II)
+ (JNIEnv *env, jclass that, jobject arg0, jint arg1, jint arg2)
+{
+ GLYPHMETRICSFLOAT _arg0, *lparg0=NULL;
+
+ DEBUG_CALL("MoveMemoryW__Lorg_eclipse_swt_opengl_internal_win32_GLYPHMETRICSFLOAT_2II\n")
+ DEBUG_CHECK_NULL(env, arg1)
+
+ if (arg0) lparg0 = &_arg0;
+ MoveMemory((PVOID)lparg0, (CONST VOID *)arg1, arg2);
+ if (arg0) setGLYPHMETRICSFLOATFields(env, arg0, lparg0);
+}
+
+JNIEXPORT void JNICALL WGL_NATIVE(MoveMemoryA__Lorg_eclipse_swt_opengl_internal_win32_GLYPHMETRICSFLOAT_2II)
+ (JNIEnv *env, jclass that, jobject arg0, jint arg1, jint arg2)
+{
+ GLYPHMETRICSFLOAT _arg0, *lparg0=NULL;
+
+ DEBUG_CALL("MoveMemoryA__Lorg_eclipse_swt_opengl_internal_win32_GLYPHMETRICSFLOAT_2II\n")
+ DEBUG_CHECK_NULL(env, arg1)
+
+ if (arg0) lparg0 = &_arg0;
+ MoveMemory((PVOID)lparg0, (CONST VOID *)arg1, arg2);
+ if (arg0) setGLYPHMETRICSFLOATFields(env, arg0, lparg0);
+}
+
+
diff --git a/bundles/org.eclipse.swt.opengl/win32/gl_library/make_win32.mak b/bundles/org.eclipse.swt.opengl/win32/gl_library/make_win32.mak new file mode 100644 index 0000000000..30df1a6cbe --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/win32/gl_library/make_win32.mak @@ -0,0 +1,56 @@ +#*******************************************************************************
+# 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
+#*******************************************************************************
+
+# assumes JAVA_HOME is set in the environment from which nmake is run
+
+APPVER=5.0
+!include <win32.mak>
+
+pgm_ver_str="SWT $(maj_ver).$(min_ver) for Windows"
+timestamp_str=__DATE__\" \"__TIME__\" (EST)\"
+copyright = "Copyright (C) 1999, 2003 IBM Corp. All rights reserved."
+
+SWT_PREFIX=gl
+WS_PREFIX=win32
+SWT_LIB = $(SWT_PREFIX)-$(WS_PREFIX).dll
+
+LINK_LIBS = opengl32.lib glu32.lib gdi32.lib
+
+# note: thoroughly test all examples after changing any optimization flags
+SWT_CDEBUG = #-Zi -Odi
+SWT_LDEBUG = #/DEBUG /DEBUGTYPE:both
+CFLAGS = -c -W3 -G6 -GD -O1 $(SWT_CDEBUG) -nologo -D_X86_=1 -D_WIN32 -D_WIN95 -D_WIN32_WINDOWS=0x0400 -D_MT -MT -DWIN32 -D_WIN32_DCOM /I$(JAVA_HOME)\include /I.
+RCFLAGS = -DSWT_COMMA_VERSION=$(comma_ver)
+LFLAGS = /INCREMENTAL:NO /PDB:NONE /RELEASE /NOLOGO $(SWT_LDEBUG) -entry:_DllMainCRTStartup@12 -dll /BASE:0x10000000 /comment:$(pgm_ver_str) /comment:$(copyright) /DLL
+
+SWT_OBJS = gl.obj glu.obj glw.obj structs.obj
+
+all: $(SWT_LIB)
+
+.c.obj:
+ cl $(CFLAGS) $*.c
+
+$(SWT_LIB): $(SWT_OBJS) swt.res
+ echo $(LFLAGS) >templrf
+ echo $(LINK_LIBS) >>templrf
+ echo -machine:IX86 >>templrf
+ echo -subsystem:windows >>templrf
+ echo -out:$(SWT_LIB) >>templrf
+ echo $(SWT_OBJS) >>templrf
+ echo swt.res >>templrf
+ link @templrf
+ del templrf
+
+swt.res:
+ rc $(RCFLAGS) -DSWT_ORG_FILENAME=\"$(SWT_LIB)\" -r -fo swt.res swt.rc
+
+clean:
+ del *.obj *.res *.dll *.lib *.exp
diff --git a/bundles/org.eclipse.swt.opengl/win32/gl_library/structs.c b/bundles/org.eclipse.swt.opengl/win32/gl_library/structs.c new file mode 100644 index 0000000000..7c1c26e1a7 --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/win32/gl_library/structs.c @@ -0,0 +1,304 @@ +/*******************************************************************************
+ * 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
+ *******************************************************************************/
+
+#include "swt.h"
+#include "structs.h"
+
+typedef struct GLYPHMETRICSFLOAT_FID_CACHE {
+ int cached;
+ jclass clazz;
+ jfieldID gmfCellIncY, gmfCellIncX, gmfptGlyphOrigin_y, gmfptGlyphOrigin_x, gmfBlackBoxY, gmfBlackBoxX;
+} GLYPHMETRICSFLOAT_FID_CACHE;
+typedef GLYPHMETRICSFLOAT_FID_CACHE *PGLYPHMETRICSFLOAT_FID_CACHE;
+
+GLYPHMETRICSFLOAT_FID_CACHE GLYPHMETRICSFLOATFc;
+
+void cacheGLYPHMETRICSFLOATFids(JNIEnv *env, jobject lpObject, PGLYPHMETRICSFLOAT_FID_CACHE lpCache)
+{
+ if (lpCache->cached) return;
+ lpCache->clazz = (*env)->GetObjectClass(env, lpObject);
+ lpCache->gmfCellIncY = (*env)->GetFieldID(env, lpCache->clazz, "gmfCellIncY", "F");
+ lpCache->gmfCellIncX = (*env)->GetFieldID(env, lpCache->clazz, "gmfCellIncX", "F");
+ lpCache->gmfptGlyphOrigin_y = (*env)->GetFieldID(env, lpCache->clazz, "gmfptGlyphOrigin_y", "F");
+ lpCache->gmfptGlyphOrigin_x = (*env)->GetFieldID(env, lpCache->clazz, "gmfptGlyphOrigin_x", "F");
+ lpCache->gmfBlackBoxY = (*env)->GetFieldID(env, lpCache->clazz, "gmfBlackBoxY", "F");
+ lpCache->gmfBlackBoxX = (*env)->GetFieldID(env, lpCache->clazz, "gmfBlackBoxX", "F");
+ lpCache->cached = 1;
+}
+
+GLYPHMETRICSFLOAT *getGLYPHMETRICSFLOATFields(JNIEnv *env, jobject lpObject, GLYPHMETRICSFLOAT *lpStruct)
+{
+ PGLYPHMETRICSFLOAT_FID_CACHE lpCache = &GLYPHMETRICSFLOATFc;
+ if (!lpCache->cached) cacheGLYPHMETRICSFLOATFids(env, lpObject, lpCache);
+ lpStruct->gmfCellIncY = (*env)->GetFloatField(env, lpObject, lpCache->gmfCellIncY);
+ lpStruct->gmfCellIncX = (*env)->GetFloatField(env, lpObject, lpCache->gmfCellIncX);
+ lpStruct->gmfptGlyphOrigin.y = (*env)->GetFloatField(env, lpObject, lpCache->gmfptGlyphOrigin_y);
+ lpStruct->gmfptGlyphOrigin.x = (*env)->GetFloatField(env, lpObject, lpCache->gmfptGlyphOrigin_x);
+ lpStruct->gmfBlackBoxY = (*env)->GetFloatField(env, lpObject, lpCache->gmfBlackBoxY);
+ lpStruct->gmfBlackBoxX = (*env)->GetFloatField(env, lpObject, lpCache->gmfBlackBoxX);
+ return lpStruct;
+}
+
+void setGLYPHMETRICSFLOATFields(JNIEnv *env, jobject lpObject, GLYPHMETRICSFLOAT *lpStruct)
+{
+ PGLYPHMETRICSFLOAT_FID_CACHE lpCache = &GLYPHMETRICSFLOATFc;
+ if (!lpCache->cached) cacheGLYPHMETRICSFLOATFids(env, lpObject, lpCache);
+ (*env)->SetFloatField(env, lpObject, lpCache->gmfCellIncY, (jfloat)lpStruct->gmfCellIncY);
+ (*env)->SetFloatField(env, lpObject, lpCache->gmfCellIncX, (jfloat)lpStruct->gmfCellIncX);
+ (*env)->SetFloatField(env, lpObject, lpCache->gmfptGlyphOrigin_y, (jfloat)lpStruct->gmfptGlyphOrigin.y);
+ (*env)->SetFloatField(env, lpObject, lpCache->gmfptGlyphOrigin_x, (jfloat)lpStruct->gmfptGlyphOrigin.x);
+ (*env)->SetFloatField(env, lpObject, lpCache->gmfBlackBoxY, (jfloat)lpStruct->gmfBlackBoxY);
+ (*env)->SetFloatField(env, lpObject, lpCache->gmfBlackBoxX, (jfloat)lpStruct->gmfBlackBoxX);
+}
+
+typedef struct LAYERPLANEDESCRIPTOR_FID_CACHE {
+ int cached;
+ jclass clazz;
+ jfieldID crTransparent, bReserved, iLayerPlane, cAuxBuffers, cStencilBits, cDepthBits, cAccumAlphaBits, cAccumBlueBits, cAccumGreenBits, cAccumRedBits, cAccumBits, cAlphaShift, cAlphaBits, cBlueShift, cBlueBits, cGreenShift, cGreenBits, cRedShift, cRedBits, cColorBits, iPixelType, dwFlags, nVersion, nSize;
+} LAYERPLANEDESCRIPTOR_FID_CACHE;
+typedef LAYERPLANEDESCRIPTOR_FID_CACHE *PLAYERPLANEDESCRIPTOR_FID_CACHE;
+
+LAYERPLANEDESCRIPTOR_FID_CACHE LAYERPLANEDESCRIPTORFc;
+
+void cacheLAYERPLANEDESCRIPTORFids(JNIEnv *env, jobject lpObject, PLAYERPLANEDESCRIPTOR_FID_CACHE lpCache)
+{
+ if (lpCache->cached) return;
+ lpCache->clazz = (*env)->GetObjectClass(env, lpObject);
+ lpCache->crTransparent = (*env)->GetFieldID(env, lpCache->clazz, "crTransparent", "I");
+ lpCache->bReserved = (*env)->GetFieldID(env, lpCache->clazz, "bReserved", "B");
+ lpCache->iLayerPlane = (*env)->GetFieldID(env, lpCache->clazz, "iLayerPlane", "B");
+ lpCache->cAuxBuffers = (*env)->GetFieldID(env, lpCache->clazz, "cAuxBuffers", "B");
+ lpCache->cStencilBits = (*env)->GetFieldID(env, lpCache->clazz, "cStencilBits", "B");
+ lpCache->cDepthBits = (*env)->GetFieldID(env, lpCache->clazz, "cDepthBits", "B");
+ lpCache->cAccumAlphaBits = (*env)->GetFieldID(env, lpCache->clazz, "cAccumAlphaBits", "B");
+ lpCache->cAccumBlueBits = (*env)->GetFieldID(env, lpCache->clazz, "cAccumBlueBits", "B");
+ lpCache->cAccumGreenBits = (*env)->GetFieldID(env, lpCache->clazz, "cAccumGreenBits", "B");
+ lpCache->cAccumRedBits = (*env)->GetFieldID(env, lpCache->clazz, "cAccumRedBits", "B");
+ lpCache->cAccumBits = (*env)->GetFieldID(env, lpCache->clazz, "cAccumBits", "B");
+ lpCache->cAlphaShift = (*env)->GetFieldID(env, lpCache->clazz, "cAlphaShift", "B");
+ lpCache->cAlphaBits = (*env)->GetFieldID(env, lpCache->clazz, "cAlphaBits", "B");
+ lpCache->cBlueShift = (*env)->GetFieldID(env, lpCache->clazz, "cBlueShift", "B");
+ lpCache->cBlueBits = (*env)->GetFieldID(env, lpCache->clazz, "cBlueBits", "B");
+ lpCache->cGreenShift = (*env)->GetFieldID(env, lpCache->clazz, "cGreenShift", "B");
+ lpCache->cGreenBits = (*env)->GetFieldID(env, lpCache->clazz, "cGreenBits", "B");
+ lpCache->cRedShift = (*env)->GetFieldID(env, lpCache->clazz, "cRedShift", "B");
+ lpCache->cRedBits = (*env)->GetFieldID(env, lpCache->clazz, "cRedBits", "B");
+ lpCache->cColorBits = (*env)->GetFieldID(env, lpCache->clazz, "cColorBits", "B");
+ lpCache->iPixelType = (*env)->GetFieldID(env, lpCache->clazz, "iPixelType", "B");
+ lpCache->dwFlags = (*env)->GetFieldID(env, lpCache->clazz, "dwFlags", "I");
+ lpCache->nVersion = (*env)->GetFieldID(env, lpCache->clazz, "nVersion", "S");
+ lpCache->nSize = (*env)->GetFieldID(env, lpCache->clazz, "nSize", "S");
+ lpCache->cached = 1;
+}
+
+LAYERPLANEDESCRIPTOR *getLAYERPLANEDESCRIPTORFields(JNIEnv *env, jobject lpObject, LAYERPLANEDESCRIPTOR *lpStruct)
+{
+ PLAYERPLANEDESCRIPTOR_FID_CACHE lpCache = &LAYERPLANEDESCRIPTORFc;
+ if (!lpCache->cached) cacheLAYERPLANEDESCRIPTORFids(env, lpObject, lpCache);
+ lpStruct->crTransparent = (*env)->GetIntField(env, lpObject, lpCache->crTransparent);
+ lpStruct->bReserved = (*env)->GetByteField(env, lpObject, lpCache->bReserved);
+ lpStruct->iLayerPlane = (*env)->GetByteField(env, lpObject, lpCache->iLayerPlane);
+ lpStruct->cAuxBuffers = (*env)->GetByteField(env, lpObject, lpCache->cAuxBuffers);
+ lpStruct->cStencilBits = (*env)->GetByteField(env, lpObject, lpCache->cStencilBits);
+ lpStruct->cDepthBits = (*env)->GetByteField(env, lpObject, lpCache->cDepthBits);
+ lpStruct->cAccumAlphaBits = (*env)->GetByteField(env, lpObject, lpCache->cAccumAlphaBits);
+ lpStruct->cAccumBlueBits = (*env)->GetByteField(env, lpObject, lpCache->cAccumBlueBits);
+ lpStruct->cAccumGreenBits = (*env)->GetByteField(env, lpObject, lpCache->cAccumGreenBits);
+ lpStruct->cAccumRedBits = (*env)->GetByteField(env, lpObject, lpCache->cAccumRedBits);
+ lpStruct->cAccumBits = (*env)->GetByteField(env, lpObject, lpCache->cAccumBits);
+ lpStruct->cAlphaShift = (*env)->GetByteField(env, lpObject, lpCache->cAlphaShift);
+ lpStruct->cAlphaBits = (*env)->GetByteField(env, lpObject, lpCache->cAlphaBits);
+ lpStruct->cBlueShift = (*env)->GetByteField(env, lpObject, lpCache->cBlueShift);
+ lpStruct->cBlueBits = (*env)->GetByteField(env, lpObject, lpCache->cBlueBits);
+ lpStruct->cGreenShift = (*env)->GetByteField(env, lpObject, lpCache->cGreenShift);
+ lpStruct->cGreenBits = (*env)->GetByteField(env, lpObject, lpCache->cGreenBits);
+ lpStruct->cRedShift = (*env)->GetByteField(env, lpObject, lpCache->cRedShift);
+ lpStruct->cRedBits = (*env)->GetByteField(env, lpObject, lpCache->cRedBits);
+ lpStruct->cColorBits = (*env)->GetByteField(env, lpObject, lpCache->cColorBits);
+ lpStruct->iPixelType = (*env)->GetByteField(env, lpObject, lpCache->iPixelType);
+ lpStruct->dwFlags = (*env)->GetIntField(env, lpObject, lpCache->dwFlags);
+ lpStruct->nVersion = (*env)->GetShortField(env, lpObject, lpCache->nVersion);
+ lpStruct->nSize = (*env)->GetShortField(env, lpObject, lpCache->nSize);
+ return lpStruct;
+}
+
+void setLAYERPLANEDESCRIPTORFields(JNIEnv *env, jobject lpObject, LAYERPLANEDESCRIPTOR *lpStruct)
+{
+ PLAYERPLANEDESCRIPTOR_FID_CACHE lpCache = &LAYERPLANEDESCRIPTORFc;
+ if (!lpCache->cached) cacheLAYERPLANEDESCRIPTORFids(env, lpObject, lpCache);
+ (*env)->SetIntField(env, lpObject, lpCache->crTransparent, (jint)lpStruct->crTransparent);
+ (*env)->SetByteField(env, lpObject, lpCache->bReserved, (jbyte)lpStruct->bReserved);
+ (*env)->SetByteField(env, lpObject, lpCache->iLayerPlane, (jbyte)lpStruct->iLayerPlane);
+ (*env)->SetByteField(env, lpObject, lpCache->cAuxBuffers, (jbyte)lpStruct->cAuxBuffers);
+ (*env)->SetByteField(env, lpObject, lpCache->cStencilBits, (jbyte)lpStruct->cStencilBits);
+ (*env)->SetByteField(env, lpObject, lpCache->cDepthBits, (jbyte)lpStruct->cDepthBits);
+ (*env)->SetByteField(env, lpObject, lpCache->cAccumAlphaBits, (jbyte)lpStruct->cAccumAlphaBits);
+ (*env)->SetByteField(env, lpObject, lpCache->cAccumBlueBits, (jbyte)lpStruct->cAccumBlueBits);
+ (*env)->SetByteField(env, lpObject, lpCache->cAccumGreenBits, (jbyte)lpStruct->cAccumGreenBits);
+ (*env)->SetByteField(env, lpObject, lpCache->cAccumRedBits, (jbyte)lpStruct->cAccumRedBits);
+ (*env)->SetByteField(env, lpObject, lpCache->cAccumBits, (jbyte)lpStruct->cAccumBits);
+ (*env)->SetByteField(env, lpObject, lpCache->cAlphaShift, (jbyte)lpStruct->cAlphaShift);
+ (*env)->SetByteField(env, lpObject, lpCache->cAlphaBits, (jbyte)lpStruct->cAlphaBits);
+ (*env)->SetByteField(env, lpObject, lpCache->cBlueShift, (jbyte)lpStruct->cBlueShift);
+ (*env)->SetByteField(env, lpObject, lpCache->cBlueBits, (jbyte)lpStruct->cBlueBits);
+ (*env)->SetByteField(env, lpObject, lpCache->cGreenShift, (jbyte)lpStruct->cGreenShift);
+ (*env)->SetByteField(env, lpObject, lpCache->cGreenBits, (jbyte)lpStruct->cGreenBits);
+ (*env)->SetByteField(env, lpObject, lpCache->cRedShift, (jbyte)lpStruct->cRedShift);
+ (*env)->SetByteField(env, lpObject, lpCache->cRedBits, (jbyte)lpStruct->cRedBits);
+ (*env)->SetByteField(env, lpObject, lpCache->cColorBits, (jbyte)lpStruct->cColorBits);
+ (*env)->SetByteField(env, lpObject, lpCache->iPixelType, (jbyte)lpStruct->iPixelType);
+ (*env)->SetIntField(env, lpObject, lpCache->dwFlags, (jint)lpStruct->dwFlags);
+ (*env)->SetShortField(env, lpObject, lpCache->nVersion, (jshort)lpStruct->nVersion);
+ (*env)->SetShortField(env, lpObject, lpCache->nSize, (jshort)lpStruct->nSize);
+}
+
+typedef struct POINTFLOAT_FID_CACHE {
+ int cached;
+ jclass clazz;
+ jfieldID y, x;
+} POINTFLOAT_FID_CACHE;
+typedef POINTFLOAT_FID_CACHE *PPOINTFLOAT_FID_CACHE;
+
+POINTFLOAT_FID_CACHE POINTFLOATFc;
+
+void cachePOINTFLOATFids(JNIEnv *env, jobject lpObject, PPOINTFLOAT_FID_CACHE lpCache)
+{
+ if (lpCache->cached) return;
+ lpCache->clazz = (*env)->GetObjectClass(env, lpObject);
+ lpCache->y = (*env)->GetFieldID(env, lpCache->clazz, "y", "F");
+ lpCache->x = (*env)->GetFieldID(env, lpCache->clazz, "x", "F");
+ lpCache->cached = 1;
+}
+
+POINTFLOAT *getPOINTFLOATFields(JNIEnv *env, jobject lpObject, POINTFLOAT *lpStruct)
+{
+ PPOINTFLOAT_FID_CACHE lpCache = &POINTFLOATFc;
+ if (!lpCache->cached) cachePOINTFLOATFids(env, lpObject, lpCache);
+ lpStruct->y = (*env)->GetFloatField(env, lpObject, lpCache->y);
+ lpStruct->x = (*env)->GetFloatField(env, lpObject, lpCache->x);
+ return lpStruct;
+}
+
+void setPOINTFLOATFields(JNIEnv *env, jobject lpObject, POINTFLOAT *lpStruct)
+{
+ PPOINTFLOAT_FID_CACHE lpCache = &POINTFLOATFc;
+ if (!lpCache->cached) cachePOINTFLOATFids(env, lpObject, lpCache);
+ (*env)->SetFloatField(env, lpObject, lpCache->y, (jfloat)lpStruct->y);
+ (*env)->SetFloatField(env, lpObject, lpCache->x, (jfloat)lpStruct->x);
+}
+
+typedef struct PIXELFORMATDESCRIPTOR_FID_CACHE {
+ int cached;
+ jclass clazz;
+ jfieldID dwDamageMask, dwVisibleMask, dwLayerMask, bReserved, iLayerType, cAuxBuffers, cStencilBits, cDepthBits, cAccumAlphaBits, cAccumBlueBits, cAccumGreenBits, cAccumRedBits, cAccumBits, cAlphaShift, cAlphaBits, cBlueShift, cBlueBits, cGreenShift, cGreenBits, cRedShift, cRedBits, cColorBits, iPixelType, dwFlags, nVersion, nSize;
+} PIXELFORMATDESCRIPTOR_FID_CACHE;
+typedef PIXELFORMATDESCRIPTOR_FID_CACHE *PPIXELFORMATDESCRIPTOR_FID_CACHE;
+
+PIXELFORMATDESCRIPTOR_FID_CACHE PIXELFORMATDESCRIPTORFc;
+
+void cachePIXELFORMATDESCRIPTORFids(JNIEnv *env, jobject lpObject, PPIXELFORMATDESCRIPTOR_FID_CACHE lpCache)
+{
+ if (lpCache->cached) return;
+ lpCache->clazz = (*env)->GetObjectClass(env, lpObject);
+ lpCache->dwDamageMask = (*env)->GetFieldID(env, lpCache->clazz, "dwDamageMask", "I");
+ lpCache->dwVisibleMask = (*env)->GetFieldID(env, lpCache->clazz, "dwVisibleMask", "I");
+ lpCache->dwLayerMask = (*env)->GetFieldID(env, lpCache->clazz, "dwLayerMask", "I");
+ lpCache->bReserved = (*env)->GetFieldID(env, lpCache->clazz, "bReserved", "B");
+ lpCache->iLayerType = (*env)->GetFieldID(env, lpCache->clazz, "iLayerType", "B");
+ lpCache->cAuxBuffers = (*env)->GetFieldID(env, lpCache->clazz, "cAuxBuffers", "B");
+ lpCache->cStencilBits = (*env)->GetFieldID(env, lpCache->clazz, "cStencilBits", "B");
+ lpCache->cDepthBits = (*env)->GetFieldID(env, lpCache->clazz, "cDepthBits", "B");
+ lpCache->cAccumAlphaBits = (*env)->GetFieldID(env, lpCache->clazz, "cAccumAlphaBits", "B");
+ lpCache->cAccumBlueBits = (*env)->GetFieldID(env, lpCache->clazz, "cAccumBlueBits", "B");
+ lpCache->cAccumGreenBits = (*env)->GetFieldID(env, lpCache->clazz, "cAccumGreenBits", "B");
+ lpCache->cAccumRedBits = (*env)->GetFieldID(env, lpCache->clazz, "cAccumRedBits", "B");
+ lpCache->cAccumBits = (*env)->GetFieldID(env, lpCache->clazz, "cAccumBits", "B");
+ lpCache->cAlphaShift = (*env)->GetFieldID(env, lpCache->clazz, "cAlphaShift", "B");
+ lpCache->cAlphaBits = (*env)->GetFieldID(env, lpCache->clazz, "cAlphaBits", "B");
+ lpCache->cBlueShift = (*env)->GetFieldID(env, lpCache->clazz, "cBlueShift", "B");
+ lpCache->cBlueBits = (*env)->GetFieldID(env, lpCache->clazz, "cBlueBits", "B");
+ lpCache->cGreenShift = (*env)->GetFieldID(env, lpCache->clazz, "cGreenShift", "B");
+ lpCache->cGreenBits = (*env)->GetFieldID(env, lpCache->clazz, "cGreenBits", "B");
+ lpCache->cRedShift = (*env)->GetFieldID(env, lpCache->clazz, "cRedShift", "B");
+ lpCache->cRedBits = (*env)->GetFieldID(env, lpCache->clazz, "cRedBits", "B");
+ lpCache->cColorBits = (*env)->GetFieldID(env, lpCache->clazz, "cColorBits", "B");
+ lpCache->iPixelType = (*env)->GetFieldID(env, lpCache->clazz, "iPixelType", "B");
+ lpCache->dwFlags = (*env)->GetFieldID(env, lpCache->clazz, "dwFlags", "I");
+ lpCache->nVersion = (*env)->GetFieldID(env, lpCache->clazz, "nVersion", "S");
+ lpCache->nSize = (*env)->GetFieldID(env, lpCache->clazz, "nSize", "S");
+ lpCache->cached = 1;
+}
+
+PIXELFORMATDESCRIPTOR *getPIXELFORMATDESCRIPTORFields(JNIEnv *env, jobject lpObject, PIXELFORMATDESCRIPTOR *lpStruct)
+{
+ PPIXELFORMATDESCRIPTOR_FID_CACHE lpCache = &PIXELFORMATDESCRIPTORFc;
+ if (!lpCache->cached) cachePIXELFORMATDESCRIPTORFids(env, lpObject, lpCache);
+ lpStruct->dwDamageMask = (*env)->GetIntField(env, lpObject, lpCache->dwDamageMask);
+ lpStruct->dwVisibleMask = (*env)->GetIntField(env, lpObject, lpCache->dwVisibleMask);
+ lpStruct->dwLayerMask = (*env)->GetIntField(env, lpObject, lpCache->dwLayerMask);
+ lpStruct->bReserved = (*env)->GetByteField(env, lpObject, lpCache->bReserved);
+ lpStruct->iLayerType = (*env)->GetByteField(env, lpObject, lpCache->iLayerType);
+ lpStruct->cAuxBuffers = (*env)->GetByteField(env, lpObject, lpCache->cAuxBuffers);
+ lpStruct->cStencilBits = (*env)->GetByteField(env, lpObject, lpCache->cStencilBits);
+ lpStruct->cDepthBits = (*env)->GetByteField(env, lpObject, lpCache->cDepthBits);
+ lpStruct->cAccumAlphaBits = (*env)->GetByteField(env, lpObject, lpCache->cAccumAlphaBits);
+ lpStruct->cAccumBlueBits = (*env)->GetByteField(env, lpObject, lpCache->cAccumBlueBits);
+ lpStruct->cAccumGreenBits = (*env)->GetByteField(env, lpObject, lpCache->cAccumGreenBits);
+ lpStruct->cAccumRedBits = (*env)->GetByteField(env, lpObject, lpCache->cAccumRedBits);
+ lpStruct->cAccumBits = (*env)->GetByteField(env, lpObject, lpCache->cAccumBits);
+ lpStruct->cAlphaShift = (*env)->GetByteField(env, lpObject, lpCache->cAlphaShift);
+ lpStruct->cAlphaBits = (*env)->GetByteField(env, lpObject, lpCache->cAlphaBits);
+ lpStruct->cBlueShift = (*env)->GetByteField(env, lpObject, lpCache->cBlueShift);
+ lpStruct->cBlueBits = (*env)->GetByteField(env, lpObject, lpCache->cBlueBits);
+ lpStruct->cGreenShift = (*env)->GetByteField(env, lpObject, lpCache->cGreenShift);
+ lpStruct->cGreenBits = (*env)->GetByteField(env, lpObject, lpCache->cGreenBits);
+ lpStruct->cRedShift = (*env)->GetByteField(env, lpObject, lpCache->cRedShift);
+ lpStruct->cRedBits = (*env)->GetByteField(env, lpObject, lpCache->cRedBits);
+ lpStruct->cColorBits = (*env)->GetByteField(env, lpObject, lpCache->cColorBits);
+ lpStruct->iPixelType = (*env)->GetByteField(env, lpObject, lpCache->iPixelType);
+ lpStruct->dwFlags = (*env)->GetIntField(env, lpObject, lpCache->dwFlags);
+ lpStruct->nVersion = (*env)->GetShortField(env, lpObject, lpCache->nVersion);
+ lpStruct->nSize = (*env)->GetShortField(env, lpObject, lpCache->nSize);
+ return lpStruct;
+}
+
+void setPIXELFORMATDESCRIPTORFields(JNIEnv *env, jobject lpObject, PIXELFORMATDESCRIPTOR *lpStruct)
+{
+ PPIXELFORMATDESCRIPTOR_FID_CACHE lpCache = &PIXELFORMATDESCRIPTORFc;
+ if (!lpCache->cached) cachePIXELFORMATDESCRIPTORFids(env, lpObject, lpCache);
+ (*env)->SetIntField(env, lpObject, lpCache->dwDamageMask, (jint)lpStruct->dwDamageMask);
+ (*env)->SetIntField(env, lpObject, lpCache->dwVisibleMask, (jint)lpStruct->dwVisibleMask);
+ (*env)->SetIntField(env, lpObject, lpCache->dwLayerMask, (jint)lpStruct->dwLayerMask);
+ (*env)->SetByteField(env, lpObject, lpCache->bReserved, (jbyte)lpStruct->bReserved);
+ (*env)->SetByteField(env, lpObject, lpCache->iLayerType, (jbyte)lpStruct->iLayerType);
+ (*env)->SetByteField(env, lpObject, lpCache->cAuxBuffers, (jbyte)lpStruct->cAuxBuffers);
+ (*env)->SetByteField(env, lpObject, lpCache->cStencilBits, (jbyte)lpStruct->cStencilBits);
+ (*env)->SetByteField(env, lpObject, lpCache->cDepthBits, (jbyte)lpStruct->cDepthBits);
+ (*env)->SetByteField(env, lpObject, lpCache->cAccumAlphaBits, (jbyte)lpStruct->cAccumAlphaBits);
+ (*env)->SetByteField(env, lpObject, lpCache->cAccumBlueBits, (jbyte)lpStruct->cAccumBlueBits);
+ (*env)->SetByteField(env, lpObject, lpCache->cAccumGreenBits, (jbyte)lpStruct->cAccumGreenBits);
+ (*env)->SetByteField(env, lpObject, lpCache->cAccumRedBits, (jbyte)lpStruct->cAccumRedBits);
+ (*env)->SetByteField(env, lpObject, lpCache->cAccumBits, (jbyte)lpStruct->cAccumBits);
+ (*env)->SetByteField(env, lpObject, lpCache->cAlphaShift, (jbyte)lpStruct->cAlphaShift);
+ (*env)->SetByteField(env, lpObject, lpCache->cAlphaBits, (jbyte)lpStruct->cAlphaBits);
+ (*env)->SetByteField(env, lpObject, lpCache->cBlueShift, (jbyte)lpStruct->cBlueShift);
+ (*env)->SetByteField(env, lpObject, lpCache->cBlueBits, (jbyte)lpStruct->cBlueBits);
+ (*env)->SetByteField(env, lpObject, lpCache->cGreenShift, (jbyte)lpStruct->cGreenShift);
+ (*env)->SetByteField(env, lpObject, lpCache->cGreenBits, (jbyte)lpStruct->cGreenBits);
+ (*env)->SetByteField(env, lpObject, lpCache->cRedShift, (jbyte)lpStruct->cRedShift);
+ (*env)->SetByteField(env, lpObject, lpCache->cRedBits, (jbyte)lpStruct->cRedBits);
+ (*env)->SetByteField(env, lpObject, lpCache->cColorBits, (jbyte)lpStruct->cColorBits);
+ (*env)->SetByteField(env, lpObject, lpCache->iPixelType, (jbyte)lpStruct->iPixelType);
+ (*env)->SetIntField(env, lpObject, lpCache->dwFlags, (jint)lpStruct->dwFlags);
+ (*env)->SetShortField(env, lpObject, lpCache->nVersion, (jshort)lpStruct->nVersion);
+ (*env)->SetShortField(env, lpObject, lpCache->nSize, (jshort)lpStruct->nSize);
+}
+
diff --git a/bundles/org.eclipse.swt.opengl/win32/gl_library/structs.h b/bundles/org.eclipse.swt.opengl/win32/gl_library/structs.h new file mode 100644 index 0000000000..031dadfc3b --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/win32/gl_library/structs.h @@ -0,0 +1,24 @@ +/*******************************************************************************
+ * 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
+ *******************************************************************************/
+#include <windows.h>
+
+GLYPHMETRICSFLOAT *getGLYPHMETRICSFLOATFields(JNIEnv *env, jobject lpObject, GLYPHMETRICSFLOAT *lpStruct);
+void setGLYPHMETRICSFLOATFields(JNIEnv *env, jobject lpObject, GLYPHMETRICSFLOAT *lpStruct);
+
+LAYERPLANEDESCRIPTOR *getLAYERPLANEDESCRIPTORFields(JNIEnv *env, jobject lpObject, LAYERPLANEDESCRIPTOR *lpStruct);
+void setLAYERPLANEDESCRIPTORFields(JNIEnv *env, jobject lpObject, LAYERPLANEDESCRIPTOR *lpStruct);
+
+POINTFLOAT *getPOINTFLOATFields(JNIEnv *env, jobject lpObject, POINTFLOAT *lpStruct);
+void setPOINTFLOATFields(JNIEnv *env, jobject lpObject, POINTFLOAT *lpStruct);
+
+PIXELFORMATDESCRIPTOR *getPIXELFORMATDESCRIPTORFields(JNIEnv *env, jobject lpObject, PIXELFORMATDESCRIPTOR *lpStruct);
+void setPIXELFORMATDESCRIPTORFields(JNIEnv *env, jobject lpObject, PIXELFORMATDESCRIPTOR *lpStruct);
+
diff --git a/bundles/org.eclipse.swt.opengl/win32/gl_library/swt.rc b/bundles/org.eclipse.swt.opengl/win32/gl_library/swt.rc new file mode 100644 index 0000000000..68b7074163 --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/win32/gl_library/swt.rc @@ -0,0 +1,67 @@ +/******************************************************************************* + * 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 + *******************************************************************************/ + +#include "windows.h" + +VS_VERSION_INFO VERSIONINFO + PRODUCTVERSION 0,0,0,0 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40000L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", "IBM Corporation\0" + VALUE "FileDescription", "Standard Widget Toolkit\0" + VALUE "InternalName", "SWT\0" + VALUE "LegalCopyright", "© Copyright 2000, 2003 IBM Corp. All Rights Reserved.\0" + VALUE "OriginalFilename", SWT_ORG_FILENAME + VALUE "ProductName", "\0" + VALUE "ProductVersion", "0,0,0,0\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +/* SHMENUBAR Pocket PC + * ID_MENU SHMENUBAR DISCARDABLE + * BEGIN + * ID_MENU, 1, + * IMAGE_NONE, ID_MENU_ITEM1, 0, 0, + * 0, 0, 0, + * END + * ID_MENU MENU DISCARDABLE + * BEGIN + * MENUITEM "", ID_MENU_ITEM1 + * END + */ +100 RCDATA DISCARDABLE +BEGIN + 100, 1, + -2, 101, 0, 0, + 0, 0, 0, +END + +100 MENU DISCARDABLE +BEGIN + MENUITEM "", 101 +END
\ No newline at end of file diff --git a/bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/GLContext.java b/bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/GLContext.java new file mode 100644 index 0000000000..b2863df75c --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/GLContext.java @@ -0,0 +1,313 @@ +/******************************************************************************* + * 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; + + +import org.eclipse.swt.*; +import org.eclipse.swt.graphics.*; +import org.eclipse.swt.opengl.internal.win32.*; +import org.eclipse.swt.internal.win32.*; + +/** + * Instances of <code>GLContext</code> are used to draw on swt <code>Drawable</code>s + * through invocations of provided OpenGL functions. + * <p> + * Application code must explicitly invoke the <code>GLContext.dispose ()</code> + * method to release the operating system resources managed by each instance + * when those instances are no longer required. This is <em>particularly</em> + * important on Windows95 and Windows98 where the operating system has a limited + * number of device contexts available. + * </p> + */ +public class GLContext { + int handle; + int hDC; + GCData data; + Drawable drawable; + int selectBufferPtr = 0; + + static final int MSB_FIRST = 1; + static final int LSB_FIRST = 2; + + /** + * Constructs a new instance of this class which has been + * configured to draw on the specified drawable. + * <p> + * You must dispose the <code>GLContext</code> when it is no longer required. + * </p> + * + * @param drawable the drawable to draw on + * @exception IllegalArgumentException <ul> + * <li>ERROR_NULL_ARGUMENT - if the drawable is null</li> + * </ul> + * @exception SWTError <ul> + * <li>ERROR_NO_HANDLES if a handle could not be obtained for gc creation</li> + * <li>ERROR_UNSUPPORTED_DEPTH - if the current display depth is not supported</li> + * </ul> + */ + public GLContext (Drawable drawable) { + if (drawable == null) SWT.error (SWT.ERROR_NULL_ARGUMENT); + this.drawable = drawable; + this.data = new GCData (); + hDC = drawable.internal_new_GC (data); + if (hDC == 0) SWT.error (SWT.ERROR_NO_HANDLES); + int bits = OS.GetDeviceCaps (hDC, OS.BITSPIXEL); + int planes = OS.GetDeviceCaps (hDC, OS.PLANES); + int depth = bits * planes; + PIXELFORMATDESCRIPTOR pfd = new PIXELFORMATDESCRIPTOR (); + pfd.nSize = (short) PIXELFORMATDESCRIPTOR.sizeof; + pfd.nVersion = 1; + pfd.dwFlags = + WGL.PFD_DRAW_TO_WINDOW + | WGL.PFD_SUPPORT_OPENGL + | WGL.PFD_DOUBLEBUFFER; + pfd.dwLayerMask = WGL.PFD_MAIN_PLANE; + pfd.iPixelType = (byte) WGL.PFD_TYPE_RGBA; + pfd.cColorBits = (byte) depth; + pfd.cDepthBits = (byte) depth; + pfd.cAccumBits = 0; + pfd.cStencilBits = 0; + int pixelFormat = WGL.ChoosePixelFormat (hDC, pfd); + if (pixelFormat == 0) { + drawable.internal_dispose_GC (hDC, data); + SWT.error (SWT.ERROR_UNSUPPORTED_DEPTH); + } + if (!WGL.SetPixelFormat (hDC, pixelFormat, pfd)) { + drawable.internal_dispose_GC (hDC, data); + SWT.error (SWT.ERROR_UNSUPPORTED_DEPTH); + } + handle = WGL.wglCreateContext (hDC); + if (handle == 0) SWT.error (SWT.ERROR_NO_HANDLES); + } + + public ImageData convertImageData (ImageData source) { + PaletteData palette = new PaletteData (0xff0000, 0xff00, 0xff); + ImageData newSource = new ImageData (source.width, source.height, 24, palette); + + ImageDataUtil.blit ( + 1, + source.data, + source.depth, + source.bytesPerLine, + (source.depth != 16) ? MSB_FIRST : LSB_FIRST, + 0, + 0, + source.width, + source.height, + source.palette.redMask, + source.palette.greenMask, + source.palette.blueMask, + 255, + null, + 0, + 0, + 0, + newSource.data, + newSource.depth, + newSource.bytesPerLine, + (newSource.depth != 16) ? MSB_FIRST : LSB_FIRST, + 0, + 0, + newSource.width, + newSource.height, + newSource.palette.redMask, + newSource.palette.greenMask, + newSource.palette.blueMask, + false, + true); + + return newSource; + } + + /** + * Disposes of the operating system resources associated with + * the receiver. Applications must dispose of all <code>GLContext</code>s + * that they allocate. + */ + public void dispose () { + if (handle == 0) return; + if (WGL.wglGetCurrentContext () == handle) { + WGL.wglMakeCurrent (0, 0); + } + WGL.wglDeleteContext (handle); + handle = 0; + + // drawable may be disposed + try { + drawable.internal_dispose_GC (hDC, data); + } catch (SWTException e) { + } + int hHeap = OS.GetProcessHeap (); + if (selectBufferPtr != 0) { + OS.HeapFree (hHeap, 0, selectBufferPtr); + } + hDC = 0; + drawable = null; + data.device = null; + data = null; + } + + public int[] getSelectBuffer (int selectBufferPtr, int[] selectBuffer) { + OS.MoveMemory (selectBuffer, selectBufferPtr, selectBuffer.length * 4); + return selectBuffer; + } + + public int getSelectBufferPtr (int[] selectBuffer) { + if (selectBufferPtr == 0) { + int hHeap = OS.GetProcessHeap (); + selectBufferPtr = + OS.HeapAlloc ( + hHeap, + OS.HEAP_ZERO_MEMORY, + selectBuffer.length * 4); + } + OS.MoveMemory (selectBufferPtr, selectBuffer, selectBuffer.length * 4); + return selectBufferPtr; + } + + /** + * Returns a boolean indicating whether the receiver is the current + * <code>GLContext</code>. + * + * @return true if the receiver is the current <code>GLContext</code>, + * false otherwise + * @exception SWTError <ul> + * <li>ERROR_GRAPHIC_DISPOSED if the receiver is disposed</li> + * </ul> + */ + public boolean isCurrent () { + if (isDisposed ()) SWT.error (SWT.ERROR_GRAPHIC_DISPOSED); + return WGL.wglGetCurrentContext () == handle; + } + + /** + * Returns a boolean indicating whether the <code>GLContext</code> has been + * disposed. + * <p> + * This method gets the dispose state for the <code>GLContext</code>. + * When a <code>GLContext</code> has been disposed, it is an error to + * invoke any other method using the <code>GLContext</code>. + * + * @return true if the <code>GLContext</code> is disposed, false otherwise + */ + public boolean isDisposed () { + return handle == 0; + } + + /** + * Loads the specified bitmap font. + * + * @param fdata + * @param device + * @param base + * @param first + * @param count + */ + public void loadBitmapFont (FontData fdata, Device device, int base, int first, int count) { + Font font = new Font (device, fdata); + int oldFont = OS.SelectObject (hDC, font.handle); + WGL.wglUseFontBitmaps (hDC, first, count, base); + OS.SelectObject (hDC, oldFont); + font.dispose (); + } + + /** + * Loads the specified outline font. + * + * @param fdata + * @param device + * @param base + * @param first + * @param count + * @param deviation + * @param extrusion + * @param format + * @param lpgmf + */ + public void loadOutlineFont (FontData fdata, Device device, int base, int first, + int count, float deviation, float extrusion, int format, GLYPHMETRICSFLOAT[] lpgmf) { + int ptr = 0; + int hHeap = 0; + if (lpgmf != null && lpgmf.length == count + 1) { + hHeap = OS.GetProcessHeap (); + ptr = + OS.HeapAlloc ( + hHeap, + OS.HEAP_ZERO_MEMORY, + count * GLYPHMETRICSFLOAT.sizeof); + } + + if (format == GL.GL_POLYGON) { + format = WGL.WGL_FONT_POLYGONS; + } + if (format == GL.GL_LINE) { + format = WGL.WGL_FONT_LINES; + } + + Font font = new Font (device, fdata); + int oldFont = OS.SelectObject (hDC, font.handle); + WGL.wglUseFontOutlines (hDC, first, count, base, deviation, extrusion, format, ptr); + OS.SelectObject (hDC, oldFont); + font.dispose (); + if (ptr != 0) { + int sizeof = GLYPHMETRICSFLOAT.sizeof; + for (int i = 0; i < lpgmf.length; i++) { + WGL.MoveMemory (lpgmf [i], ptr + (sizeof * i), sizeof); + }; + OS.HeapFree (hHeap, 0, ptr); + } + } + + /** + * Resizes the receiver. + * + * @param x + * @param y + * @param width + * @param height + */ + public void resize (int x, int y, int width, int height) { + if (height == 0) height = 1; + GL.glViewport (0, 0, width, height); + float nRange = 200.0f; + GL.glMatrixMode (GL.GL_PROJECTION); + GL.glLoadIdentity (); + // load projection + GLU.gluPerspective (45.0f, (float) width / (float) height, 0.1f, 100.0f); + GL.glMatrixMode (GL.GL_MODELVIEW); + GL.glLoadIdentity (); + } + + /** + * Sets the receiver to be the current <code>GLContext</code>. + * + * @exception SWTError <ul> + * <li>ERROR_GRAPHIC_DISPOSED if the receiver is disposed</li> + * </ul> + */ + public void setCurrent () { + if (isDisposed ()) SWT.error (SWT.ERROR_GRAPHIC_DISPOSED); + if (WGL.wglGetCurrentContext () == handle) return; + WGL.wglMakeCurrent (hDC, handle); + } + + /** + * Swaps the receiver's buffers. + * + * @exception SWTError <ul> + * <li>ERROR_GRAPHIC_DISPOSED if the receiver is disposed</li> + * </ul> + */ + public void swapBuffers () { + if (isDisposed ()) SWT.error (SWT.ERROR_GRAPHIC_DISPOSED); + WGL.SwapBuffers (hDC); + } +} diff --git a/bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/internal/win32/LAYERPLANEDESCRIPTOR.java b/bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/internal/win32/LAYERPLANEDESCRIPTOR.java new file mode 100644 index 0000000000..ec410a1f54 --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/internal/win32/LAYERPLANEDESCRIPTOR.java @@ -0,0 +1,40 @@ +/******************************************************************************* + * 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.win32; + + +public class LAYERPLANEDESCRIPTOR { + public short nSize; + public short nVersion; + public int dwFlags; + public byte iPixelType; + public byte cColorBits; + public byte cRedBits; + public byte cRedShift; + public byte cGreenBits; + public byte cGreenShift; + public byte cBlueBits; + public byte cBlueShift; + public byte cAlphaBits; + public byte cAlphaShift; + public byte cAccumBits; + public byte cAccumRedBits; + public byte cAccumGreenBits; + public byte cAccumBlueBits; + public byte cAccumAlphaBits; + public byte cDepthBits; + public byte cStencilBits; + public byte cAuxBuffers; + public byte iLayerPlane; + public byte bReserved; + public int crTransparent; + public static final int sizeof = 36; +} diff --git a/bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/internal/win32/PIXELFORMATDESCRIPTOR.java b/bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/internal/win32/PIXELFORMATDESCRIPTOR.java new file mode 100644 index 0000000000..254f868f85 --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/internal/win32/PIXELFORMATDESCRIPTOR.java @@ -0,0 +1,42 @@ +/******************************************************************************* + * 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.win32; + + +public class PIXELFORMATDESCRIPTOR { + public short nSize; + public short nVersion; + public int dwFlags; + public byte iPixelType; + public byte cColorBits; + public byte cRedBits; + public byte cRedShift; + public byte cGreenBits; + public byte cGreenShift; + public byte cBlueBits; + public byte cBlueShift; + public byte cAlphaBits; + public byte cAlphaShift; + public byte cAccumBits; + public byte cAccumRedBits; + public byte cAccumGreenBits; + public byte cAccumBlueBits; + public byte cAccumAlphaBits; + public byte cDepthBits; + public byte cStencilBits; + public byte cAuxBuffers; + public byte iLayerType; + public byte bReserved; + public int dwLayerMask; + public int dwVisibleMask; + public int dwDamageMask; + public static final int sizeof = 40; +} diff --git a/bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/internal/win32/POINTFLOAT.java b/bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/internal/win32/POINTFLOAT.java new file mode 100644 index 0000000000..b0601f1953 --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/internal/win32/POINTFLOAT.java @@ -0,0 +1,18 @@ +/******************************************************************************* + * 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.win32; + + +public class POINTFLOAT { + public float x; + public float y; + public static final int sizeof = 8; +} diff --git a/bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/internal/win32/WGL.java b/bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/internal/win32/WGL.java new file mode 100644 index 0000000000..000f528d2d --- /dev/null +++ b/bundles/org.eclipse.swt.opengl/win32/org/eclipse/swt/opengl/internal/win32/WGL.java @@ -0,0 +1,142 @@ +/******************************************************************************* + * 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.win32; + + +import org.eclipse.swt.opengl.*; +import org.eclipse.swt.opengl.Library; +import org.eclipse.swt.internal.win32.OS; + +public class WGL { + +static { + Library.loadLibrary("gl"); +} + +public static final int WGL_FONT_LINES = 0; +public static final int WGL_FONT_POLYGONS = 1; + +/* LAYERPLANEDESCRIPTOR flags */ +public static final int LPD_DOUBLEBUFFER = 0x00000001; +public static final int LPD_STEREO = 0x00000002; +public static final int LPD_SUPPORT_GDI = 0x00000010; +public static final int LPD_SUPPORT_OPENGL = 0x00000020; +public static final int LPD_SHARE_DEPTH = 0x00000040; +public static final int LPD_SHARE_STENCIL = 0x00000080; +public static final int LPD_SHARE_ACCUM = 0x00000100; +public static final int LPD_SWAP_EXCHANGE = 0x00000200; +public static final int LPD_SWAP_COPY = 0x00000400; +public static final int LPD_TRANSPARENT = 0x00001000; + +public static final int LPD_TYPE_RGBA = 0; +public static final int LPD_TYPE_COLORINDEX = 1; + +/* wglSwapLayerBuffers flags */ +public static final int WGL_SWAP_MAIN_PLANE = 0x00000001; +public static final int WGL_SWAP_OVERLAY1 = 0x00000002; +public static final int WGL_SWAP_OVERLAY2 = 0x00000004; +public static final int WGL_SWAP_OVERLAY3 = 0x00000008; +public static final int WGL_SWAP_OVERLAY4 = 0x00000010; +public static final int WGL_SWAP_OVERLAY5 = 0x00000020; +public static final int WGL_SWAP_OVERLAY6 = 0x00000040; +public static final int WGL_SWAP_OVERLAY7 = 0x00000080; +public static final int WGL_SWAP_OVERLAY8 = 0x00000100; +public static final int WGL_SWAP_OVERLAY9 = 0x00000200; +public static final int WGL_SWAP_OVERLAY10 = 0x00000400; +public static final int WGL_SWAP_OVERLAY11 = 0x00000800; +public static final int WGL_SWAP_OVERLAY12 = 0x00001000; +public static final int WGL_SWAP_OVERLAY13 = 0x00002000; +public static final int WGL_SWAP_OVERLAY14 = 0x00004000; +public static final int WGL_SWAP_OVERLAY15 = 0x00008000; +public static final int WGL_SWAP_UNDERLAY1 = 0x00010000; +public static final int WGL_SWAP_UNDERLAY2 = 0x00020000; +public static final int WGL_SWAP_UNDERLAY3 = 0x00040000; +public static final int WGL_SWAP_UNDERLAY4 = 0x00080000; +public static final int WGL_SWAP_UNDERLAY5 = 0x00100000; +public static final int WGL_SWAP_UNDERLAY6 = 0x00200000; +public static final int WGL_SWAP_UNDERLAY7 = 0x00400000; +public static final int WGL_SWAP_UNDERLAY8 = 0x00800000; +public static final int WGL_SWAP_UNDERLAY9 = 0x01000000; +public static final int WGL_SWAP_UNDERLAY10 = 0x02000000; +public static final int WGL_SWAP_UNDERLAY11 = 0x04000000; +public static final int WGL_SWAP_UNDERLAY12 = 0x08000000; +public static final int WGL_SWAP_UNDERLAY13 = 0x10000000; +public static final int WGL_SWAP_UNDERLAY14 = 0x20000000; +public static final int WGL_SWAP_UNDERLAY15 = 0x40000000; + +/* pixel types */ +public static final int PFD_TYPE_RGBA = 0; +public static final int PFD_TYPE_COLORINDEX = 1; + +/* layer types */ +public static final int PFD_MAIN_PLANE = 0; +public static final int PFD_OVERLAY_PLANE = 1; +public static final int PFD_UNDERLAY_PLANE = (-1); + +/* PIXELFORMATDESCRIPTOR flags */ +public static final int PFD_DOUBLEBUFFER = 0x00000001; +public static final int PFD_STEREO = 0x00000002; +public static final int PFD_DRAW_TO_WINDOW = 0x00000004; +public static final int PFD_DRAW_TO_BITMAP = 0x00000008; +public static final int PFD_SUPPORT_GDI = 0x00000010; +public static final int PFD_SUPPORT_OPENGL = 0x00000020; +public static final int PFD_GENERIC_FORMAT = 0x00000040; +public static final int PFD_NEED_PALETTE = 0x00000080; +public static final int PFD_NEED_SYSTEM_PALETTE = 0x00000100; +public static final int PFD_SWAP_EXCHANGE = 0x00000200; +public static final int PFD_SWAP_COPY = 0x00000400; +public static final int PFD_SWAP_LAYER_BUFFERS = 0x00000800; +public static final int PFD_GENERIC_ACCELERATED = 0x00001000; +public static final int PFD_SUPPORT_DIRECTDRAW = 0x00002000; + +/* PIXELFORMATDESCRIPTOR flags for use in ChoosePixelFormat only */ +public static final int PFD_DEPTH_DONTCARE = 0x20000000; +public static final int PFD_DOUBLEBUFFER_DONTCARE = 0x40000000; +public static final int PFD_STEREO_DONTCARE = 0x80000000; + +public static final native int ChoosePixelFormat(int hdc, PIXELFORMATDESCRIPTOR ppfd); +public static final native int DescribePixelFormat(int hdc, int iPixelFormat, int nBytes, PIXELFORMATDESCRIPTOR ppfd); +public static final native int GetPixelFormat(int hdc); +public static final native boolean SetPixelFormat(int hdc, int iPixelFormat, PIXELFORMATDESCRIPTOR ppfd); +public static final native boolean SwapBuffers(int hdc); +public static final native boolean wglCopyContext(int hglrcSrc, int hglrcDst, int mask); +public static final native int wglCreateContext(int hdc); +public static final native int wglCreateLayerContext(int hdc, int iLayerPlane); +public static final native boolean wglDeleteContext(int hglrc); +public static final native int wglGetCurrentContext(); +public static final native int wglGetCurrentDC(); +public static final native int wglGetProcAddress(byte[] lpszProc); +public static final native boolean wglMakeCurrent(int hdc, int hglrc); +public static final native boolean wglShareLists(int hglrc1, int hglrc2); +public static final native boolean wglUseFontBitmapsA(int hdc, int first, int count, int listBase); +public static final native boolean wglUseFontBitmapsW(int hdc, int first, int count, int listBase); +public static final boolean wglUseFontBitmaps(int hdc, int first, int count, int listBase) { + if (OS.IsUnicode) return wglUseFontBitmapsW(hdc, first, count, listBase); + return wglUseFontBitmapsA(hdc, first, count, listBase); +} +public static final native boolean wglUseFontOutlinesA(int hdc, int first, int count, int listBase, float deviation, float extrusion, int format, int lpgmf); +public static final native boolean wglUseFontOutlinesW(int hdc, int first, int count, int listBase, float deviation, float extrusion, int format, int lpgmf); +public static final boolean wglUseFontOutlines(int hdc, int first, int count, int listBase, float deviation, float extrusion, int format, int lpgmf) { + if (OS.IsUnicode) return wglUseFontOutlinesW(hdc, first, count, listBase, deviation, extrusion, format, lpgmf); + return wglUseFontOutlinesA(hdc, first, count, listBase, deviation, extrusion, format, lpgmf); +} +public static final native boolean wglDescribeLayerPlane(int hdc, int iPixelFormat, int iLayerPlane, int nBytes, LAYERPLANEDESCRIPTOR plpd); +public static final native int wglSetLayerPaletteEntries(int hdc, int iLayerPlane, int iStart, int cEntries, int[] pcr); +public static final native int wglGetLayerPaletteEntries(int hdc, int iLayerPlane, int iStart, int cEntries, int[] pcr); +public static final native boolean wglRealizeLayerPalette(int hdc, int iLayerPlane, boolean bRealize); +public static final native boolean wglSwapLayerBuffers(int hdc, int fuPlanes); +public static final void MoveMemory (GLYPHMETRICSFLOAT Destination, int Source, int Length) { + if (OS.IsUnicode) MoveMemoryW (Destination, Source, Length); + else MoveMemoryA(Destination, Source, Length); +} +public static final native void MoveMemoryA (GLYPHMETRICSFLOAT Destination, int Source, int Length); +public static final native void MoveMemoryW (GLYPHMETRICSFLOAT Destination, int Source, int Length); +} diff --git a/examples/org.eclipse.swt.opengl.examples/.classpath b/examples/org.eclipse.swt.opengl.examples/.classpath new file mode 100644 index 0000000000..8437e3bb55 --- /dev/null +++ b/examples/org.eclipse.swt.opengl.examples/.classpath @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="src" path="src"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> + <classpathentry kind="src" path="/org.eclipse.swt.opengl"/> + <classpathentry kind="src" path="/org.eclipse.swt"/> + <classpathentry kind="output" path="bin"/> +</classpath> diff --git a/examples/org.eclipse.swt.opengl.examples/.project b/examples/org.eclipse.swt.opengl.examples/.project new file mode 100644 index 0000000000..9112e8e738 --- /dev/null +++ b/examples/org.eclipse.swt.opengl.examples/.project @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>org.eclipse.swt.opengl.examples</name> + <comment></comment> + <projects> + <project>org.eclipse.swt</project> + <project>org.eclipse.swt.opengl</project> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.jdt.core.javanature</nature> + </natures> +</projectDescription> diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/AntialiasingTab.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/AntialiasingTab.java new file mode 100644 index 0000000000..78a1fbb4a9 --- /dev/null +++ b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/AntialiasingTab.java @@ -0,0 +1,152 @@ +/******************************************************************************* + * 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.examples; + + +import org.eclipse.swt.*; +import org.eclipse.swt.graphics.RGB; +import org.eclipse.swt.layout.*; +import org.eclipse.swt.opengl.*; +import org.eclipse.swt.widgets.*; + +class AntialiasingTab extends OpenGLTab { + private Button antiAliasButton; + private float xPos = 0.0f, yPos = 0.0f, zPos = -6.0f; + + /** + * @see OpenGLTab#createControls(Composite) + */ + void createControls(Composite composite) { + Group movementGroup = new Group(composite, SWT.NONE); + movementGroup.setText("Translation"); + movementGroup.setLayout(new GridLayout(2, false)); + + new Label(movementGroup, SWT.NONE).setText("X:"); + final Slider xMove = new Slider(movementGroup, SWT.NONE); + xMove.setIncrement(1); + xMove.setMaximum(12); + xMove.setMinimum(0); + xMove.setThumb(2); + xMove.setPageIncrement(2); + xMove.setSelection(5); + xMove.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + xPos = xMove.getSelection() - 5; + } + }); + + new Label(movementGroup, SWT.NONE).setText("Y:"); + final Slider yMove = new Slider(movementGroup, SWT.NONE); + yMove.setIncrement(1); + yMove.setMaximum(12); + yMove.setMinimum(0); + yMove.setThumb(2); + yMove.setPageIncrement(2); + yMove.setSelection(5); + yMove.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + yPos = yMove.getSelection() - 5; + } + }); + + new Label(movementGroup, SWT.NONE).setText("Z:"); + final Slider zMove = new Slider(movementGroup, SWT.NONE); + zMove.setIncrement(1); + zMove.setMaximum(12); + zMove.setMinimum(0); + zMove.setThumb(2); + zMove.setPageIncrement(2); + zMove.setSelection(5); + zMove.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + zPos = zMove.getSelection() - 11; + } + }); + + antiAliasButton = new Button(composite, SWT.CHECK); + antiAliasButton.setText("Anti-Aliasing"); + antiAliasButton.setSelection(true); + antiAliasButton.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + if (antiAliasButton.getSelection()) { + GL.glEnable(GL.GL_LINE_SMOOTH); + } else { + GL.glDisable(GL.GL_LINE_SMOOTH); + } + } + }); + + ColorSelectionGroup colorGroup = + new ColorSelectionGroup(composite, SWT.NONE); + colorGroup.setText("Foreground color"); + colorGroup.addColorSelectionListener(new IColorSelectionListener() { + public void handleColorSelection(RGB rgb) { + GL.glColor3ub((byte) rgb.red, (byte) rgb.green, (byte) rgb.blue); + } + }); + } + + /** + * @see OpenGLTab#dispose() + */ + void dispose() { + super.dispose(); + GL.glDeleteLists(1, 1); + } + + /** + * @see OpenGLTab#getTabText() + */ + String getTabText() { + return "Anti-aliasing"; + } + + /** + * @see OpenGLTab#init() + */ + void init() { + GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); + GL.glColor3f(1.0f, 0.0f, 0.0f); + final float[] BEZIER_POINTS = { + -1.5f, -1.5f, 4.0f, -0.5f, -1.5f, 2.0f, 0.5f, -1.5f, + -1.0f, 1.5f, -1.5f, 2.0f, -1.5f, -0.5f, 1.0f, -0.5f, + -0.5f, 3.0f, 0.5f, -0.5f, 0.0f, 1.5f, -0.5f, -1.0f, + -1.5f, 0.5f, 4.0f, -0.5f, 0.5f, 0.0f, 0.5f, 0.5f, + 3.0f, 1.5f, 0.5f, 4.0f, -1.5f, 1.5f, -2.0f, -0.5f, + 1.5f, -2.0f, 0.5f, 1.5f, 0.0f, 1.5f, 1.5f, -1.0f, + }; + GL.glHint(GL.GL_LINE_SMOOTH_HINT, GL.GL_NICEST); + GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); + GL.glMap2f(GL.GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, BEZIER_POINTS); + GL.glMapGrid2f(30, 0.0f, 1.0f, 30, 0.0f, 1.0f); + + GL.glEnable(GL.GL_AUTO_NORMAL); + GL.glEnable(GL.GL_LINE_SMOOTH); + GL.glEnable(GL.GL_LINE_STIPPLE); + GL.glEnable(GL.GL_BLEND); + GL.glEnable(GL.GL_MAP2_VERTEX_3); + + // create display lists + GL.glNewList(1, GL.GL_COMPILE); + GL.glEvalMesh2(GL.GL_LINE, 0, 30, 0, 30); + GL.glEndList(); + } + + /** + * @see OpenGLTab#renderScene() + */ + void renderScene() { + GL.glClear(GL.GL_COLOR_BUFFER_BIT); + GL.glLoadIdentity(); + GL.glTranslatef(xPos, yPos, zPos); + GL.glCallList(1); // draw the beizer surface + } +} diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/AreaTab.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/AreaTab.java new file mode 100644 index 0000000000..5c6ffab751 --- /dev/null +++ b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/AreaTab.java @@ -0,0 +1,434 @@ +/******************************************************************************* + * 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.examples; + + +import org.eclipse.swt.*; +import org.eclipse.swt.layout.*; +import org.eclipse.swt.opengl.*; +import org.eclipse.swt.widgets.*; + +class AreaTab extends OpenGLTab { + abstract class Shape { + abstract void draw(); + } + class State { + private String name; + private int index; + /** + * Constructor. + * + * @param name the display name of this state + * @param index the display list index corresponding to this state + */ + State (String name, int index) { + super(); + this.index = index; + this.name = name; + } + void display() { + GL.glCallList(index); + } + void dispose() { + GL.glDeleteLists(index, 1); + } + String getName() { + return name; + } + } + + private State[] states; + private State currentState; + private float xPos = 0.0f, yPos = 0.0f, zPos = -30.0f; + private float xRot = 90.0f, yRot = 0.0f, zRot = 0.0f; + private int quadratic, disk; + + /** + * @see OpenGLTab#createControls(Composite) + */ + void createControls(Composite composite) { + Group movementGroup = new Group(composite, SWT.NONE); + movementGroup.setText("Translation"); + movementGroup.setLayout(new GridLayout(2, false)); + + new Label(movementGroup, SWT.NONE).setText("X:"); + final Slider xMove = new Slider(movementGroup, SWT.NONE); + xMove.setIncrement(1); + xMove.setMaximum(22); + xMove.setMinimum(0); + xMove.setThumb(2); + xMove.setPageIncrement(2); + xMove.setSelection(10); + xMove.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + xPos = xMove.getSelection() - 10; + } + }); + + new Label(movementGroup, SWT.NONE).setText("Y:"); + final Slider yMove = new Slider(movementGroup, SWT.NONE); + yMove.setIncrement(1); + yMove.setMaximum(22); + yMove.setMinimum(0); + yMove.setThumb(2); + yMove.setPageIncrement(2); + yMove.setSelection(10); + yMove.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + yPos = yMove.getSelection() - 10; + } + }); + + new Label(movementGroup, SWT.NONE).setText("Z:"); + final Slider zMove = new Slider(movementGroup, SWT.NONE); + zMove.setIncrement(1); + zMove.setMaximum(22); + zMove.setMinimum(0); + zMove.setThumb(2); + zMove.setPageIncrement(2); + zMove.setSelection(10); + zMove.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + zPos = zMove.getSelection() - 40; + } + }); + + Group rotationGroup = new Group(composite, SWT.NONE); + rotationGroup.setText("Rotation"); + rotationGroup.setLayout(new GridLayout(2, false)); + + new Label(rotationGroup, SWT.NONE).setText("X:"); + final Slider xRotation = new Slider(rotationGroup, SWT.NONE); + xRotation.setIncrement(10); + xRotation.setMaximum(362); + xRotation.setMinimum(0); + xRotation.setThumb(2); + xRotation.setPageIncrement(20); + xRotation.setSelection(90); + xRotation.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + xRot = xRotation.getSelection(); + } + }); + + new Label(rotationGroup, SWT.NONE).setText("Y:"); + final Slider yRotation = new Slider(rotationGroup, SWT.NONE); + yRotation.setIncrement(10); + yRotation.setMaximum(362); + yRotation.setMinimum(0); + yRotation.setThumb(2); + yRotation.setPageIncrement(20); + yRotation.setSelection(0); + yRotation.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + yRot = yRotation.getSelection(); + } + }); + + new Label(rotationGroup, SWT.NONE).setText("Z:"); + final Slider zRotation = new Slider(rotationGroup, SWT.NONE); + zRotation.setIncrement(10); + zRotation.setMaximum(362); + zRotation.setMinimum(0); + zRotation.setThumb(2); + zRotation.setPageIncrement(20); + zRotation.setSelection(0); + zRotation.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + zRot = zRotation.getSelection(); + } + }); + + Composite optionsGroup = new Composite(composite, SWT.NONE); + GridLayout layout = new GridLayout(2, false); + layout.marginWidth = 0; + optionsGroup.setLayout(layout); + + new Label(optionsGroup, SWT.NONE).setText("Shape:"); + + final Combo statesCombo = new Combo(optionsGroup, SWT.READ_ONLY); + for (int i = 0; i < states.length; i++) { + statesCombo.add(states[i].getName()); + } + statesCombo.select(0); + statesCombo.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + currentState = states[statesCombo.getSelectionIndex()]; + } + }); + + final Button lightsButton = new Button(composite, SWT.CHECK); + lightsButton.setText("Lights"); + lightsButton.setSelection(true); + lightsButton.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + if (lightsButton.getSelection()) { + GL.glEnable(GL.GL_LIGHTING); + } else { + GL.glDisable(GL.GL_LIGHTING); + } + } + }); + } + + /** + * @see OpenGLTab#dispose() + */ + void dispose() { + super.dispose(); + GLU.gluDeleteQuadric(quadratic); + GLU.gluDeleteQuadric(disk); + if (states != null) { + for (int i = 0; i < states.length; i++) { + states [i].dispose(); + } + } + } + + /** + * Draws the logical AND of two shapes. + * + * @param a shape A + * @param b shape B + */ + void drawAandB(Shape a, Shape b) { + // draw parts of B that are inside A + drawAinsideB(a, b, GL.GL_BACK, GL.GL_NOTEQUAL); + // we do not want the following to show up + GL.glColorMask(false, false, false, false); + // turn on depth testing + GL.glEnable(GL.GL_DEPTH_TEST); + GL.glDepthFunc(GL.GL_ALWAYS); + // render the front face of B + b.draw(); + // reset the depth function + GL.glDepthFunc(GL.GL_LESS); + // draw parts of A that are inside B + drawAinsideB(b, a, GL.GL_BACK, GL.GL_NOTEQUAL); + } + + /** + * Draws the contents of one shape that appear within another. + * + * @param a the shape to draw + * @param b the constraining shape + * @param face + * @param test + */ + void drawAinsideB(Shape a, Shape b, int face, int test) { + // turn off the color buffer + GL.glColorMask(false, false, false, false); + // clear the stencil buffer + GL.glClearStencil(0); + GL.glEnable(GL.GL_DEPTH_TEST); + // set to proper Culling + GL.glCullFace(face); + // render shape A + a.draw(); + // set depth mask + GL.glDepthMask(false); + // enable stencil test + GL.glEnable(GL.GL_STENCIL_TEST); + GL.glStencilFunc(GL.GL_ALWAYS, 0, 0); + // set the stencil buffer to increment if the depth test passes + GL.glStencilOp(GL.GL_KEEP, GL.GL_KEEP, GL.GL_INCR); + // turn on back face culling + GL.glCullFace(GL.GL_BACK); + // render B + b.draw(); + // set the stencil buffer to decrement if the depth test passes + GL.glStencilOp(GL.GL_KEEP, GL.GL_KEEP, GL.GL_DECR); + // cull the front face + GL.glCullFace(GL.GL_FRONT); + // render B again + b.draw(); + // set depth mask + GL.glDepthMask(true); + GL.glColorMask(true, true, true, true); + // set the stencil buffer + GL.glStencilFunc(test, 0, 1); + // turn off depth testing + GL.glDisable(GL.GL_DEPTH_TEST); + // set to proper culling + GL.glCullFace(face); + // render A + a.draw(); + // disable stencil test + GL.glDisable(GL.GL_STENCIL_TEST); + } + + /** + * Draws the logical OR of two shapes. + * + * @param a shape A + * @param b shape B + */ + void drawAorB(Shape a, Shape b) { + GL.glEnable(GL.GL_DEPTH_TEST); + a.draw(); + b.draw(); + GL.glDisable(GL.GL_DEPTH_TEST); + } + + /** + * Draws one shape subtracted from another. + * + * @param a the base shape + * @param b the shape to subtract + */ + void drawAsubB(Shape a, Shape b) { + // draw back parts of B inside A + drawAinsideB(b, a, GL.GL_FRONT, GL.GL_NOTEQUAL); + // we do not want the following to show up + GL.glColorMask(false, false, false, false); + GL.glEnable(GL.GL_DEPTH_TEST); + // change the depth test to GL_ALWAYS + GL.glDepthFunc(GL.GL_ALWAYS); + // render the front face of B + a.draw(); + // reset the depth function + GL.glDepthFunc(GL.GL_LESS); + // draw front parts of A outside B + drawAinsideB(a, b, GL.GL_BACK, GL.GL_EQUAL); + } + + /** + * Draws the specifed shape. + * + * @param shape the shape to draw + */ + void drawShape(Shape shape) { + GL.glEnable(GL.GL_DEPTH_TEST); + shape.draw(); + GL.glDisable(GL.GL_DEPTH_TEST); + } + + /** + * @see OpenGLTab#getTabText() + */ + String getTabText() { + return "Area"; + } + + /** + * @see OpenGLTab#init() + */ + void init() { + if (!hasStencilSupport()) return; + + GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); + float[] lightPos = { 0.0f, 5.0f, -10.0f, 1.0f }; + GL.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, lightPos); + quadratic = GLU.gluNewQuadric(); + disk = GLU.gluNewQuadric(); + + GL.glEnable(GL.GL_CULL_FACE); + GL.glEnable(GL.GL_LIST_MODE); + GL.glEnable(GL.GL_LIGHT0); + GL.glEnable(GL.GL_LIGHTING); + GL.glLightModeli(GL.GL_LIGHT_MODEL_TWO_SIDE, GL.GL_TRUE); + + final float[] sphereMaterial = { 0.0f, 1.0f, 0.0f, 1.0f }; + final float[] cylinderMaterial = { 1.0f, 0.0f, 0.0f, 1.0f }; + + Shape sphere = new Shape() { + public void draw() { + GL.glMaterialfv( + GL.GL_FRONT_AND_BACK, + GL.GL_AMBIENT_AND_DIFFUSE, + sphereMaterial); + GL.glColor3f(0.0f, 1.0f, 0.0f); + GLU.gluSphere(quadratic, 3, 32, 32); + } + }; + Shape cylinder = new Shape() { + public void draw() { + GL.glMaterialfv( + GL.GL_FRONT_AND_BACK, + GL.GL_AMBIENT_AND_DIFFUSE, + cylinderMaterial); + GL.glColor3f(1.0f, 0.0f, 0.0f); + GLU.gluQuadricOrientation(disk, GLU.GLU_INSIDE); + GL.glPushMatrix(); + GL.glTranslatef(1.0f, 1.0f, 0.0f); + GLU.gluDisk(disk, 0, 3, 32, 32); + GLU.gluCylinder(quadratic, 3, 3, 6, 32, 32); + GL.glPushMatrix(); + GL.glTranslatef(0.0f, 0.0f, 6.0f); + GLU.gluQuadricOrientation(disk, GLU.GLU_OUTSIDE); + GLU.gluDisk(disk, 0, 3, 32, 32); + GL.glPopMatrix(); + GL.glPopMatrix(); + } + }; + + // create the display lists and states + states = new State[6]; + int index = 1; + + GL.glNewList(index, GL.GL_COMPILE); + drawShape(cylinder); + GL.glEndList(); + states[0] = new State("Cylinder",index++); + + GL.glNewList(index, GL.GL_COMPILE); + drawShape(sphere); + GL.glEndList(); + states[1] = new State("Sphere",index++); + + GL.glNewList(index, GL.GL_COMPILE); + drawAorB(cylinder, sphere); + GL.glEndList(); + states[2] = new State("Cylinder OR Sphere",index++); + + GL.glNewList(index, GL.GL_COMPILE); + drawAandB(cylinder, sphere); + GL.glEndList(); + states[3] = new State("Cylinder AND Sphere",index++); + + GL.glNewList(index, GL.GL_COMPILE); + drawAsubB(cylinder, sphere); + GL.glEndList(); + states[4] = new State("Cylinder SUB Sphere",index++); + + GL.glNewList(index, GL.GL_COMPILE); + drawAsubB(sphere, cylinder); + GL.glEndList(); + states[5] = new State("Sphere SUB Cylinder",index++); + + currentState = states[0]; + } + + /** + * @see OpenGLTab#isStencilSupportNeeded + */ + boolean isStencilSupportNeeded() { + return true; + } + + /** + * @see OpenGLTab#renderScene() + */ + void renderScene() { + GL.glClear( + GL.GL_COLOR_BUFFER_BIT + | GL.GL_DEPTH_BUFFER_BIT + | GL.GL_STENCIL_BUFFER_BIT); + + GL.glLoadIdentity(); + GL.glTranslatef(xPos, yPos, zPos); + GL.glRotatef(xRot, 1.0f, 0.0f, 0.0f); + GL.glRotatef(yRot, 0.0f, 1.0f, 0.0f); + GL.glRotatef(zRot, 0.0f, 0.0f, 1.0f); + + currentState.display(); + } +} diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/BezierTab.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/BezierTab.java new file mode 100644 index 0000000000..e66b8414c8 --- /dev/null +++ b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/BezierTab.java @@ -0,0 +1,211 @@ +/******************************************************************************* + * 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.examples; + + +import org.eclipse.swt.*; +import org.eclipse.swt.events.*; +import org.eclipse.swt.graphics.*; +import org.eclipse.swt.opengl.*; +import org.eclipse.swt.widgets.*; + +class BezierTab extends SelectionTab { + private boolean showCtrlPoints = true; + private Point offset; + private int currentPoint = -1; + private int lineDivisions = 30; + private double[][] ctrlPts = { + { 1.5, 0.5, 0.0, 0.6, 0.9, 0.0, 0.85, 0.12, + 0.0, 1.1, 1.0, 0.0, 0.53, 1.4, 0.0 + }, + { 0.53, 1.4, 0.0, 1.03, 1.87, 0.0, 1.52, 0.26, + 0.0, 1.86, 0.43, 0.0, 1.5, 0.5, 0.0 + } + }; + private static final int LENGTH = 5; + private static final int[][] PICK_NAMES = { + { 1, 2, 3, 4, 5 }, + { 6, 7, 8, 9, 10 } + }; + + /** + * @see OpenGLTab#createControls(Composite) + */ + void createControls(Composite composite) { + new Label(composite, SWT.NONE).setText("Click and drag points to adjust shape."); + new Label(composite, SWT.NONE).setText("Line division count:"); + final Slider divisions = new Slider(composite, SWT.NONE); + divisions.setIncrement(1); + divisions.setMaximum(52); + divisions.setMinimum(1); + divisions.setThumb(2); + divisions.setPageIncrement(2); + divisions.setSelection(30); + divisions.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + lineDivisions = divisions.getSelection(); + } + }); + + final Button showPointsButton = new Button(composite, SWT.CHECK); + showPointsButton.setText("Show Points"); + showPointsButton.setSelection(true); + showPointsButton.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + showCtrlPoints = showPointsButton.getSelection(); + } + }); + + final Button blendButton = new Button(composite, SWT.CHECK); + blendButton.setText("Blend"); + blendButton.setSelection(true); + blendButton.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + if (blendButton.getSelection()) { + GL.glEnable(GL.GL_BLEND); + } else { + GL.glDisable(GL.GL_BLEND); + } + } + }); + + final Button smoothLineButton = new Button(composite, SWT.CHECK); + smoothLineButton.setText("Smooth Line"); + smoothLineButton.setSelection(true); + smoothLineButton.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + if (smoothLineButton.getSelection()) { + GL.glEnable(GL.GL_LINE_SMOOTH); + } else { + GL.glDisable(GL.GL_LINE_SMOOTH); + } + } + }); + + final Canvas glCanvas = getGlCanvas(); + glCanvas.addMouseListener(new MouseAdapter() { + public void mouseUp(MouseEvent e) { + offset = null; + } + + }); + + glCanvas.addListener(SWT.MouseDown, new Listener() { + public void handleEvent(Event e) { + e.y = glCanvas.getClientArea().height - e.y; + if (e.button == 1) { + if (processSelection(e.x, e.y, 10) > 0) { + offset = new Point(e.x, e.y); + } else { + currentPoint = 0; + } + } + } + }); + + glCanvas.addListener(SWT.MouseMove, new Listener() { + public void handleEvent(Event e) { + if (offset == null) return; + int currentSegment = (currentPoint - 1) / LENGTH; + int current = (currentPoint - 1) * 3; + if (currentPoint > LENGTH) { + current = (currentPoint - 6) * 3; + } + Rectangle rect = glCanvas.getClientArea(); + e.y = rect.height - e.y; + if (0 < e.x && e.x < rect.width && 0 < e.y && e.y < rect.height && currentPoint > 0) { + ctrlPts[currentSegment][current] = (float) e.x / (float) 200; + ctrlPts[currentSegment][current + 1] = (float) e.y / (float) 200; + switch (currentPoint) { + case 10 : + ctrlPts[0][0] = (float) e.x / (float) 200; + ctrlPts[0][1] = (float) e.y / (float) 200; + break; + case 6 : + ctrlPts[0][12] = (float) e.x / (float) 200; + ctrlPts[0][13] = (float) e.y / (float) 200; + break; + } + } + } + }); + } + + /** + * @see OpenGLTab#getTabText() + */ + String getTabText() { + return "Bezier"; + } + + /** + * @see OpenGLTab#init() + */ + void init() { + GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); + GL.glHint(GL.GL_LINE_SMOOTH_HINT, GL.GL_NICEST); + GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); + GL.glPointSize(7.0f); + GL.glLineWidth(4.0f); + + GL.glEnable(GL.GL_AUTO_NORMAL); + GL.glEnable(GL.GL_MAP1_VERTEX_3); + GL.glEnable(GL.GL_LINE_SMOOTH); + GL.glEnable(GL.GL_BLEND); + } + + /** + * @see SelectionTab.processPick (int[], int) + */ + void processPick(int[] pSelectBuff, int hits) { + int counter = 0; + currentPoint = 0; + for (int i = 0; i < hits; i++) { + int count = pSelectBuff[counter]; + counter += 3; + for (int j = 0; j < count; j++) { + currentPoint = pSelectBuff[counter]; + counter++; + } + } + } + + /** + * @see OpenGLTab#renderScene() + */ + void renderScene() { + GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); + GL.glLoadIdentity(); + GL.glTranslatef(-1.0f, -1.0f, -2.45f); + GL.glColor3f(0.0f, 0.0f, 1.0f); + for (int i = 0; i < ctrlPts.length; i++) { + GL.glMapGrid1d(lineDivisions, 0.0f, 1f); + GL.glMap1d(GL.GL_MAP1_VERTEX_3, 0, 1, 3, LENGTH, ctrlPts[i]); + GL.glEvalMesh1(GL.GL_LINE, 0, lineDivisions); + } + if (showCtrlPoints) { + GL.glPushName(0); + for (int j = 0; j < ctrlPts.length; j++) { + for (int i = 0; i < LENGTH * 3; i += 3) { + GL.glLoadName(PICK_NAMES[j][i / 3]); + GL.glBegin(GL.GL_POINTS); + if (PICK_NAMES[j][i / 3] == currentPoint) { + GL.glColor3f(1.0f, 0.0f, 0.0f); + } else { + GL.glColor3f(0.0f, 0.0f, 0.0f); + } + GL.glVertex3d(ctrlPts[j][i], ctrlPts[j][i + 1], ctrlPts[j][i + 2]); + GL.glEnd(); + } + } + } + } +} diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/BitmapTextTab.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/BitmapTextTab.java new file mode 100644 index 0000000000..084f45a213 --- /dev/null +++ b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/BitmapTextTab.java @@ -0,0 +1,203 @@ +/******************************************************************************* + * 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.examples; + + +import org.eclipse.swt.*; +import org.eclipse.swt.graphics.*; +import org.eclipse.swt.layout.*; +import org.eclipse.swt.opengl.*; +import org.eclipse.swt.widgets.*; + +class BitmapTextTab extends OpenGLTab { + private Text messageText; + private FontData fontData; + private float[] textColor = { 1.0f, 0.0f, 0.0f }; + private float xPos = -130.0f, yPos = 0.0f; + private int listIndexBase; + private final static int LIST_INDEX_SIZE = 256; + private final static int DEFAULT_FONT_SIZE = 24; + private final static String DEFAULT_FONT_NAME = "Courier"; + + /** + * @see OpenGLTab#createControls(Composite) + */ + void createControls(Composite composite) { + Group movementGroup = new Group(composite, SWT.NONE); + movementGroup.setText("Translation"); + movementGroup.setLayout(new GridLayout(2, false)); + + new Label(movementGroup, SWT.NONE).setText("X:"); + final Slider xMove = new Slider(movementGroup, SWT.NONE); + xMove.setIncrement(1); + xMove.setMaximum(42); + xMove.setMinimum(0); + xMove.setThumb(2); + xMove.setPageIncrement(2); + xMove.setSelection(7); + xMove.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + xPos = (xMove.getSelection() * 10) - 200; + } + }); + + new Label(movementGroup, SWT.NONE).setText("Y:"); + final Slider yMove = new Slider(movementGroup, SWT.NONE); + yMove.setIncrement(1); + yMove.setMaximum(42); + yMove.setMinimum(0); + yMove.setThumb(2); + yMove.setPageIncrement(2); + yMove.setSelection(20); + yMove.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + yPos = (yMove.getSelection() * 10) - 200; + } + }); + + Composite textGroup = new Composite(composite,SWT.NONE); + GridLayout layout = new GridLayout(2,false); + layout.marginHeight = 0; + layout.marginWidth = 0; + textGroup.setLayout(layout); + textGroup.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); + + new Label(textGroup, SWT.NONE).setText("Text:"); + messageText = new Text(textGroup, SWT.BORDER); + GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); + data.grabExcessHorizontalSpace = true; + messageText.setLayoutData(data); + messageText.setText("OpenGL - SWT"); + + final Button fontSelectButton = new Button(composite, SWT.NONE); + fontSelectButton.setText("Set Font"); + + final ColorSelectionGroup colorGroup = + new ColorSelectionGroup(composite, SWT.NONE); + colorGroup.setText("Text color"); + colorGroup.addColorSelectionListener(new IColorSelectionListener() { + public void handleColorSelection(RGB rgb) { + GL.glColor3ub((byte) rgb.red, (byte) rgb.green, (byte) rgb.blue); + } + }); + + fontSelectButton.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + FontDialog fontDialog = new FontDialog(fontSelectButton.getShell()); + fontDialog.setText("Choose Font Options"); + double[] currentColor = new double[4]; + GL.glGetDoublev(GL.GL_CURRENT_COLOR, currentColor); + fontDialog.setRGB( + new RGB( + (int) currentColor[0] * 255, + (int) currentColor[1] * 255, + (int) currentColor[2] * 255)); + fontDialog.setFontData(fontData); + FontData result = fontDialog.open(); + if (result != null) { + fontData = result; + RGB rgb = fontDialog.getRGB(); + GL.glColor3ub((byte) rgb.red, (byte) rgb.green, (byte) rgb.blue); + colorGroup.setRGB(rgb); + getContext().loadBitmapFont(fontData, null, listIndexBase, 32, 96); + } + } + }); + } + + /** + * @see OpenGLTab#dispose() + */ + void dispose() { + super.dispose(); + GL.glDeleteLists(listIndexBase, LIST_INDEX_SIZE); + } + + /** + * Draws the text to the screen + * + * @param string the text to draw + */ + void drawText(String string) { + char[] stringChars = string.toCharArray(); + int[] text = new int[stringChars.length]; + for (int i = 0; i < text.length; i++) { + text[i] = (int) stringChars[i]; + } + // pushes the display list bits + GL.glPushAttrib(GL.GL_LIST_BIT); + // sets the base character to 32 + GL.glListBase(listIndexBase - 32); + GL.glCallLists(text.length, GL.GL_UNSIGNED_INT, text); + // pops the display list bits + GL.glPopAttrib(); + } + + /** + * @see OpenGLTab#getTabText() + */ + String getTabText() { + return "Bitmap Text"; + } + + /** + * @see OpenGLTab#init() + */ + void init() { + GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); + GL.glColor3fv(textColor); + GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); + GL.glEnable(GL.GL_DEPTH_TEST); + GL.glEnable(GL.GL_BLEND); + // build the initial font + listIndexBase = GL.glGenLists(LIST_INDEX_SIZE); + fontData = new FontData(); + fontData.setHeight(DEFAULT_FONT_SIZE); + fontData.setName(DEFAULT_FONT_NAME); + getContext().loadBitmapFont(fontData, null, listIndexBase, 32, LIST_INDEX_SIZE); + } + + /** + * @see OpenGLTab#renderScene() + */ + void renderScene() { + GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); + GL.glLoadIdentity(); + GL.glRasterPos2f(xPos, yPos); + drawText(messageText.getText()); + } + + /** + * @see OpenGLTab#setupViewingArea() + */ + void setupViewingArea() { + // use ortho view since this tab does not need any depth + Rectangle rect = getGlCanvas().getClientArea(); + int width = rect.width; + int height = rect.height; + width = Math.max(width, 1); + GL.glViewport(0, 0, width, height); + float nRange = 200.0f; + GL.glMatrixMode(GL.GL_PROJECTION); + GL.glLoadIdentity(); + if (width <= height) { + GL.glOrtho( + -nRange, nRange, -nRange * height / width, + nRange * height / width, -nRange, nRange); + } else { + GL.glOrtho( + -nRange * height / width, nRange * height / width, -nRange, + nRange, -nRange, nRange); + } + GL.glMatrixMode(GL.GL_MODELVIEW); + GL.glLoadIdentity(); + } +} diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/ColorSelectionGroup.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/ColorSelectionGroup.java new file mode 100644 index 0000000000..f0c3cdde9d --- /dev/null +++ b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/ColorSelectionGroup.java @@ -0,0 +1,166 @@ +/******************************************************************************* + * 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.examples; + + +import java.util.Vector; +import org.eclipse.swt.*; +import org.eclipse.swt.events.*; +import org.eclipse.swt.graphics.*; +import org.eclipse.swt.layout.*; +import org.eclipse.swt.opengl.GL; +import org.eclipse.swt.widgets.*; + +class ColorSelectionGroup implements Listener { + private Color color; + private Label label; + private Image image; + private Button button; + private Vector listeners = new Vector(); + + /** + * Constructor. + * + * @param parent the parent composite + * @param style style bits to be applied to the color group + */ + ColorSelectionGroup(Composite parent, int style) { + super(); + initColor(parent.getDisplay()); + + Composite colorGroup = new Composite(parent, style); + GridLayout layout = new GridLayout(2, false); + layout.marginWidth = 0; + layout.marginHeight = 0; + colorGroup.setLayout(layout); +// GridData data = new GridData(GridData.FILL_HORIZONTAL); +// data.grabExcessHorizontalSpace = true; +// colorGroup.setLayoutData(data); + + button = new Button(colorGroup, SWT.NONE); + button.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); + image = new Image(button.getDisplay(), 12, 12); + drawButtonImage(); + button.setImage(image); + button.addListener(SWT.Selection, this); + button.addDisposeListener(new DisposeListener() { + public void widgetDisposed(DisposeEvent event) { + if (image != null) image.dispose(); + if (color != null) color.dispose(); + } + }); + + label = new Label(colorGroup, SWT.NONE); + label.setText("Color"); +// data = new GridData(GridData.FILL_HORIZONTAL); +// data.grabExcessHorizontalSpace = true; +// label.setLayoutData(data); + } + + /** + * Adds the argument to this group's collection of + * color selection listeners. + * + * @param listener + */ + void addColorSelectionListener(IColorSelectionListener listener) { + listeners.addElement(listener); + } + + /** + * Draws the colored square on the selection button. + */ + void drawButtonImage() { + GC gc = new GC(image); + gc.setBackground(color); + Rectangle bounds = image.getBounds(); + gc.fillRectangle(0, 0, bounds.width, bounds.height); + gc.drawRectangle(0, 0, bounds.width - 1, bounds.height - 1); + gc.dispose(); + } + + /** + * @see org.eclipse.swt.widgets.Listener#handleEvent(Event) + */ + public void handleEvent(Event e) { + Shell shell = button.getShell(); + ColorDialog colorDialog = new ColorDialog(shell); + colorDialog.setRGB( + new RGB(color.getRed(), color.getGreen(), color.getBlue())); + RGB rgb = colorDialog.open(); + if (rgb == null) return; + setRGB(rgb); + notifyListeners(rgb); + } + + /** + * Initializes the color by querying for the current color. + * + * @param display + */ + void initColor(Display display) { + double[] currentColor = new double[4]; + GL.glGetDoublev(GL.GL_CURRENT_COLOR, currentColor); + RGB rgb = + new RGB( + (int) currentColor[0] * 255, + (int) currentColor[1] * 255, + (int) currentColor[2] * 255); + color = new Color(display, rgb); + } + + /** + * Notifies all registered color selection listeners. + * + * @param value + */ + void notifyListeners(RGB rgb) { + IColorSelectionListener[] listenersArr = + new IColorSelectionListener[listeners.size()]; + listeners.copyInto(listenersArr); + for (int i = 0; i < listenersArr.length; i++) { + listenersArr [i].handleColorSelection(rgb); + } + } + + /** + * Removes the argument from this group's collection of color selection + * listeners. If the argument is not a registered listener then does + * nothing. + * + * @param listener + */ + void removeColorSelectionListener(IColorSelectionListener listener) { + listeners.removeElement(listener); + } + + /** + * Sets the text for the group's label. + * + * @param text the new label text + */ + void setText(String text) { + label.setText(text); + } + + /** + * Sets the current color. + * + * @param rgb the rgb of the new color + */ + void setRGB(RGB rgb) { + Color oldColor = color; + color = new Color(button.getDisplay(), rgb); + drawButtonImage(); + button.setImage(image); + if (oldColor != null) oldColor.dispose(); + } +} diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/FogTab.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/FogTab.java new file mode 100644 index 0000000000..da017ed1db --- /dev/null +++ b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/FogTab.java @@ -0,0 +1,254 @@ +/******************************************************************************* + * 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.examples; + + +import org.eclipse.swt.*; +import org.eclipse.swt.layout.*; +import org.eclipse.swt.opengl.*; +import org.eclipse.swt.widgets.*; + +class FogTab extends OpenGLTab { + + private float rotY = 0.0f; + private float yPos = 0.0f, xPos = 0.0f, zPos = -15.0f; + private int cubeListIndexBase; + private final static int[] FOG_TYPES = { GL.GL_LINEAR, GL.GL_EXP, GL.GL_EXP2 }; + private final static String[] FOG_NAMES = { "LINEAR", "GL_EXP", "GL_EXP2" }; + private final static int SLEEP_LENGTH = 0; + + /** + * @see OpenGLTab#createControls(Composite) + */ + void createControls(Composite composite) { + Group movementGroup = new Group(composite, SWT.NONE); + movementGroup.setText("Translation"); + movementGroup.setLayout(new GridLayout(2, false)); + + new Label(movementGroup, SWT.NONE).setText("X:"); + final Slider xMove = new Slider(movementGroup, SWT.NONE); + xMove.setIncrement(1); + xMove.setMaximum(12); + xMove.setMinimum(0); + xMove.setThumb(2); + xMove.setPageIncrement(2); + xMove.setSelection(5); + xMove.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + xPos = xMove.getSelection() - 5; + } + }); + + new Label(movementGroup, SWT.NONE).setText("Y:"); + final Slider yMove = new Slider(movementGroup, SWT.NONE); + yMove.setIncrement(1); + yMove.setMaximum(12); + yMove.setMinimum(0); + yMove.setThumb(2); + yMove.setPageIncrement(2); + yMove.setSelection(5); + yMove.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + yPos = yMove.getSelection() - 5; + } + }); + + new Label(movementGroup, SWT.NONE).setText("Z:"); + final Slider zMove = new Slider(movementGroup, SWT.NONE); + zMove.setIncrement(1); + zMove.setMaximum(24); + zMove.setMinimum(0); + zMove.setThumb(4); + zMove.setPageIncrement(2); + zMove.setSelection(10); + zMove.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + zPos = zMove.getSelection() - 25; + } + }); + + Composite fogTypesGroup = new Composite(composite,SWT.NONE); + GridLayout layout = new GridLayout(2,false); + layout.marginHeight = 0; + layout.marginWidth = 0; + fogTypesGroup.setLayout(layout); + fogTypesGroup.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); + + new Label(fogTypesGroup, SWT.NONE).setText("Fog Types:"); + final Combo fogTypeCombo = new Combo(fogTypesGroup, SWT.READ_ONLY); + GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); + data.grabExcessHorizontalSpace = true; + fogTypeCombo.setLayoutData(data); + fogTypeCombo.setItems(FOG_NAMES); + fogTypeCombo.select(0); + + new Label(composite, SWT.NONE).setText("Fog Density:"); + final Slider fogDensitySlider = new Slider(composite, SWT.NONE); + fogDensitySlider.setIncrement(1); + fogDensitySlider.setMaximum(32); + fogDensitySlider.setMinimum(0); + fogDensitySlider.setThumb(2); + fogDensitySlider.setPageIncrement(5); + fogDensitySlider.setSelection(0); + fogDensitySlider.setEnabled(false); + fogDensitySlider.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + float fogDensity = ((float)fogDensitySlider.getSelection()) / 100; + GL.glFogf(GL.GL_FOG_DENSITY, fogDensity); + } + }); + fogTypeCombo.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + int currentSelection = fogTypeCombo.getSelectionIndex(); + // fog type GL.GL_LINEAR does not utilize fogDensity, but the other fog types do + fogDensitySlider.setEnabled(currentSelection != 0); + GL.glFogf(GL.GL_FOG_MODE, FOG_TYPES[currentSelection]); + } + }); + } + + /** + * Creates a cube at 0,0 in the viewport. + */ + void createCube() { + GL.glNewList(cubeListIndexBase, GL.GL_COMPILE); + GL.glBegin(GL.GL_QUADS); + // front + GL.glColor3f(0.0f, 1.0f, 0.0f); + GL.glVertex3f(-0.5f, -0.5f, 0.5f); // bottom left + GL.glColor3f(0.0f, 0.0f, 1.0f); + GL.glVertex3f(0.5f, -0.5f, 0.5f); // bottom right + GL.glColor3f(1.0f, 1.0f, 0.0f); + GL.glVertex3f(0.5f, 0.5f, 0.5f); // top right + GL.glColor3f(1.0f, 0.0f, 0.0f); + GL.glVertex3f(-0.5f, 0.5f, 0.5f); // top left + // back + GL.glColor3f(0.0f, 0.0f, 1.0f); + GL.glVertex3f(-0.5f, -0.5f, -0.5f); // bottom left + GL.glColor3f(0.0f, 1.0f, 0.0f); + GL.glVertex3f(0.5f, -0.5f, -0.5f); // bottom right + GL.glColor3f(1.0f, 0.0f, 0.0f); + GL.glVertex3f(0.5f, 0.5f, -0.5f); // top right + GL.glColor3f(1.0f, 1.0f, 0.0f); + GL.glVertex3f(-0.5f, 0.5f, -0.5f); // top left + // left + GL.glColor3f(0.0f, 0.0f, 1.0f); + GL.glVertex3f(-0.5f, -0.5f, -0.5f); // bottom left + GL.glColor3f(0.0f, 1.0f, 0.0f); + GL.glVertex3f(-0.5f, -0.5f, 0.5f); // bottom right + GL.glColor3f(1.0f, 0.0f, 0.0f); + GL.glVertex3f(-0.5f, 0.5f, 0.5f); // top right + GL.glColor3f(1.0f, 1.0f, 0.0f); + GL.glVertex3f(-0.5f, 0.5f, -0.5f); // top left + // right + GL.glColor3f(0.0f, 0.0f, 1.0f); + GL.glVertex3f(0.5f, -0.5f, 0.5f); // bottom left + GL.glColor3f(0.0f, 1.0f, 0.0f); + GL.glVertex3f(0.5f, -0.5f, -0.5f); // bottom right + GL.glColor3f(1.0f, 0.0f, 0.0f); + GL.glVertex3f(0.5f, 0.5f, -0.5f); // top right + GL.glColor3f(1.0f, 1.0f, 0.0f); + GL.glVertex3f(0.5f, 0.5f, 0.5f); // top left + // top + GL.glColor3f(1.0f, 0.0f, 0.0f); + GL.glVertex3f(0.5f, 0.5f, -0.5f); + GL.glColor3f(1.0f, 1.0f, 0.0f); + GL.glVertex3f(-0.5f, 0.5f, -0.5f); + GL.glColor3f(1.0f, 0.0f, 0.0f); + GL.glVertex3f(-0.5f, 0.5f, 0.5f); + GL.glColor3f(1.0f, 1.0f, 0.0f); + GL.glVertex3f(0.5f, 0.5f, 0.5f); + // bottom + GL.glColor3f(0.0f, 0.0f, 1.0f); + GL.glVertex3f(0.5f, -0.5f, 0.5f); + GL.glColor3f(0.0f, 1.0f, 0.0f); + GL.glVertex3f(-0.5f, -0.5f, 0.5f); + GL.glColor3f(0.0f, 0.0f, 1.0f); + GL.glVertex3f(-0.5f, -0.5f, -0.5f); + GL.glColor3f(0.0f, 1.0f, 0.0f); + GL.glVertex3f(0.5f, -0.5f, -0.5f); + GL.glEnd(); + GL.glEndList(); + } + + /** + * @see OpenGLTab#dispose() + */ + void dispose() { + super.dispose(); + GL.glDeleteLists(cubeListIndexBase, 1); + } + + /** + * @see OpenGLTab#getSleepLength() + */ + int getSleepLength() { + return SLEEP_LENGTH; + } + /** + * @see OpenGLTab#getTabText() + */ + String getTabText() { + return "Fog"; + } + + /** + * @see OpenGLTab#init() + */ + void init() { + GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); + // fog color should be the same as the clear color + // to look appropriate + float[] fogColor = { 1.0f, 1.0f, 1.0f, 1.0f }; + GL.glFogfv(GL.GL_FOG_COLOR, fogColor); + GL.glHint(GL.GL_FOG_HINT, GL.GL_DONT_CARE); + GL.glFogf(GL.GL_FOG_START, 0); + GL.glFogf(GL.GL_FOG_DENSITY, 0.0f); + // set the end of the start distance; anything > 15 + // units from the camera will be covered in fog + GL.glFogf(GL.GL_FOG_END, 15); + GL.glFogf(GL.GL_FOG_MODE, FOG_TYPES[0]); + GL.glEnable(GL.GL_FOG); + GL.glEnable(GL.GL_DEPTH_TEST); + + cubeListIndexBase = GL.glGenLists(1); + createCube(); + } + + /** + * @see OpenGLTab#renderScene() + */ + void renderScene() { + GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); + GL.glLoadIdentity(); + GL.glTranslatef(xPos, yPos, zPos); + GL.glRotatef(rotY, 0.0f, 1.0f, 0.0f); + + GL.glCallList(cubeListIndexBase); + + GL.glPushMatrix(); + GL.glTranslatef(3, 0, -3); + GL.glCallList(cubeListIndexBase); + GL.glPopMatrix(); + + GL.glPushMatrix(); + GL.glTranslatef(-3, 0, -3); + GL.glCallList(cubeListIndexBase); + GL.glPopMatrix(); + + GL.glPushMatrix(); + GL.glTranslatef(0, 0, 4); + GL.glCallList(cubeListIndexBase); + GL.glPopMatrix(); + + rotY += 0.6f; + } +} diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/GradientTab.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/GradientTab.java new file mode 100644 index 0000000000..61e93097d5 --- /dev/null +++ b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/GradientTab.java @@ -0,0 +1,233 @@ +/******************************************************************************* + * 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.examples; + + +import org.eclipse.swt.*; +import org.eclipse.swt.layout.*; +import org.eclipse.swt.opengl.*; +import org.eclipse.swt.widgets.*; + +class GradientTab extends OpenGLTab { + private float xPos = 0.0f, yPos = 0.0f, zPos = -7.0f; + private float xRot = 180.0f, yRot = 180.0f, zRot = 180.0f; + private int currentSelection = 1; + private final static float[] BEZIER_COLORS = { + 0.0f, 1.0f, 0.0f, 0.0f, 0.3f, 0.6f, 0.1f, 0.0f, + 0.8f, 0.2f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, 0.8f, 0.8f, 0.8f, 0.0f + }; + private final static float[] BEZIER_POINTS = { + -1.5f, -1.5f, 4.0f, -0.5f, -1.5f, 2.0f, 0.5f, -1.5f, + -1.0f, 1.5f, -1.5f, 2.0f, -1.5f, -0.5f, 1.0f, -0.5f, + -0.5f, 3.0f, 0.5f, -0.5f, 0.0f, 1.5f, -0.5f, -1.0f, + -1.5f, 0.5f, 4.0f, -0.5f, 0.5f, 0.0f, 0.5f, 0.5f, + 3.0f, 1.5f, 0.5f, 4.0f, -1.5f, 1.5f, -2.0f, -0.5f, + 1.5f, -2.0f, 0.5f, 1.5f, 0.0f, 1.5f, 1.5f, -1.0f, + }; + private final static String[] OBJECT_NAMES = { "Bezier", "Square" }; + + /** + * @see OpenGLTab#createControls(Composite) + */ + void createControls(Composite composite) { + Group movementGroup = new Group(composite, SWT.NONE); + movementGroup.setText("Translation"); + movementGroup.setLayout(new GridLayout(2, false)); + + new Label(movementGroup, SWT.NONE).setText("X:"); + final Slider xMove = new Slider(movementGroup, SWT.NONE); + xMove.setIncrement(1); + xMove.setMaximum(12); + xMove.setMinimum(0); + xMove.setThumb(2); + xMove.setPageIncrement(2); + xMove.setSelection(5); + xMove.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + xPos = xMove.getSelection() - 5; + } + }); + + new Label(movementGroup, SWT.NONE).setText("Y:"); + final Slider yMove = new Slider(movementGroup, SWT.NONE); + yMove.setIncrement(1); + yMove.setMaximum(12); + yMove.setMinimum(0); + yMove.setThumb(2); + yMove.setPageIncrement(2); + yMove.setSelection(5); + yMove.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + yPos = yMove.getSelection() - 5; + } + }); + + new Label(movementGroup, SWT.NONE).setText("Z:"); + final Slider zMove = new Slider(movementGroup, SWT.NONE); + zMove.setIncrement(1); + zMove.setMaximum(12); + zMove.setMinimum(0); + zMove.setThumb(2); + zMove.setPageIncrement(2); + zMove.setSelection(5); + zMove.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + zPos = zMove.getSelection() - 12; + } + }); + + Group rotationGroup = new Group(composite, SWT.NONE); + rotationGroup.setText("Rotation"); + rotationGroup.setLayout(new GridLayout(2, false)); + + new Label(rotationGroup, SWT.NONE).setText("X:"); + final Slider xRotation = new Slider(rotationGroup, SWT.NONE); + xRotation.setIncrement(10); + xRotation.setMaximum(362); + xRotation.setMinimum(0); + xRotation.setThumb(2); + xRotation.setPageIncrement(20); + xRotation.setSelection(180); + xRotation.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + xRot = xRotation.getSelection(); + } + }); + + new Label(rotationGroup, SWT.NONE).setText("Y:"); + final Slider yRotation = new Slider(rotationGroup, SWT.NONE); + yRotation.setIncrement(10); + yRotation.setMaximum(362); + yRotation.setMinimum(0); + yRotation.setThumb(2); + yRotation.setPageIncrement(20); + yRotation.setSelection(180); + yRotation.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + yRot = yRotation.getSelection(); + } + }); + + new Label(rotationGroup, SWT.NONE).setText("Z:"); + final Slider zRotation = new Slider(rotationGroup, SWT.NONE); + zRotation.setIncrement(10); + zRotation.setMaximum(362); + zRotation.setMinimum(0); + zRotation.setThumb(2); + zRotation.setPageIncrement(20); + zRotation.setSelection(180); + zRotation.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + zRot = zRotation.getSelection(); + } + }); + + Composite objectGroup = new Composite(composite,SWT.NONE); + GridLayout layout = new GridLayout(2,false); + layout.marginHeight = 0; + layout.marginWidth = 0; + objectGroup.setLayout(layout); + objectGroup.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); + + new Label(objectGroup, SWT.NONE).setText("Object:"); + final Combo objectCombo = new Combo(objectGroup, SWT.READ_ONLY); + GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); + data.grabExcessHorizontalSpace = true; + objectCombo.setLayoutData(data); + objectCombo.setItems(OBJECT_NAMES); + objectCombo.select(0); + objectCombo.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + currentSelection = objectCombo.getSelectionIndex() + 1; + } + }); + } + + /** + * @see OpenGLTab#dispose() + */ + void dispose() { + super.dispose(); + GL.glDeleteLists(1, 2); + } + + /** + * @see OpenGLTab#getTabText() + */ + String getTabText() { + return "Gradients"; + } + + /** + * @see OpenGLTab#init() + */ + void init() { + GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); + GL.glHint(GL.GL_LINE_SMOOTH_HINT, GL.GL_NICEST); + GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); + GL.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_FILL); + GL.glMap2f(GL.GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, BEZIER_POINTS); + GL.glMap2f(GL.GL_MAP2_COLOR_4, 0, 1, 4, 1, 0, 1, 4, 6, BEZIER_COLORS); + GL.glMapGrid2f(20, 0.0f, 1.0f, 20, 0.0f, 1.0f); + GL.glShadeModel(GL.GL_SMOOTH); + GL.glEnable(GL.GL_LINE_SMOOTH); + GL.glEnable(GL.GL_LINE_STIPPLE); + GL.glEnable(GL.GL_BLEND); + GL.glEnable(GL.GL_MAP2_COLOR_4); + GL.glEnable(GL.GL_MAP2_VERTEX_3); + GL.glEnable(GL.GL_DEPTH_TEST); + + // create display lists + GL.glNewList(1, GL.GL_COMPILE); + GL.glEvalMesh2(GL.GL_FILL, 0, 20, 0, 20); + GL.glEndList(); + GL.glNewList(2, GL.GL_COMPILE); + GL.glBegin(GL.GL_TRIANGLE_FAN); + GL.glColor3f(0.0f, 1.0f, 0.0f); + GL.glVertex3f(0.0f, 0.0f, 0.0f); + GL.glColor3f(1.0f, 0.0f, 0.0f); + GL.glVertex3f(0.0f, 2.0f, 0.0f); + GL.glColor3f(0.0f, 1.0f, 0.0f); + GL.glVertex3f(-2.0f, 2.0f, 0.0f); + GL.glColor3f(0.0f, 0.0f, 1.0f); + GL.glVertex3f(-2.0f, 0.0f, 0.0f); + GL.glColor3f(0.0f, 1.0f, 0.0f); + GL.glVertex3f(-2.0f, -2.0f, 0.0f); + GL.glColor3f(1.0f, 0.0f, 0.0f); + GL.glVertex3f(0.0f, -2.0f, 0.0f); + GL.glColor3f(0.0f, 1.0f, 0.0f); + GL.glVertex3f(2.0f, -2.0f, 0.0f); + GL.glColor3f(0.0f, 0.0f, 1.0f); + GL.glVertex3f(2.0f, 0.0f, 0.0f); + GL.glColor3f(0.0f, 1.0f, 0.0f); + GL.glVertex3f(2.0f, 2.0f, 0.0f); + GL.glColor3f(1.0f, 0.0f, 0.0f); + GL.glVertex3f(0.0f, 2.0f, 0.0f); + GL.glEnd(); + GL.glEndList(); + } + + /** + * @see OpenGLTab#renderScene() + */ + void renderScene() { + GL.glClear(GL.GL_COLOR_BUFFER_BIT); + GL.glLoadIdentity(); + GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); + GL.glTranslatef(xPos, yPos, zPos); + GL.glRotatef(xRot, 1.0f, 0.0f, 0.0f); + GL.glRotatef(yRot, 0.0f, 1.0f, 0.0f); + GL.glRotatef(zRot, 0.0f, 0.0f, 1.0f); + GL.glColor3f(1.0f, 0.0f, 0.0f); + GL.glCallList(currentSelection); + } +}
\ No newline at end of file diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/IColorSelectionListener.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/IColorSelectionListener.java new file mode 100644 index 0000000000..346b5639dc --- /dev/null +++ b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/IColorSelectionListener.java @@ -0,0 +1,18 @@ +/******************************************************************************* + * 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.examples; + +import org.eclipse.swt.graphics.RGB; + + +public interface IColorSelectionListener { + public void handleColorSelection(RGB rgb); +} diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/LightTab.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/LightTab.java new file mode 100644 index 0000000000..701eb9cefa --- /dev/null +++ b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/LightTab.java @@ -0,0 +1,354 @@ +/******************************************************************************* + * 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.examples; + + +import org.eclipse.swt.*; +import org.eclipse.swt.graphics.*; +import org.eclipse.swt.layout.*; +import org.eclipse.swt.opengl.*; +import org.eclipse.swt.widgets.*; + +class LightTab extends OpenGLTab { + private float[] materialShininess = { 25.0f }; + private float[] lightPosition = { 0.0f, 0.0f, 0.0f, 1.0f }; + private float[][] colorValues = { + { 1.0f, 1.0f, 1.0f, 1.0f }, // light diffuse + { 1.0f, 1.0f, 1.0f, 1.0f }, // light ambient + { 1.0f, 1.0f, 1.0f, 1.0f }, // light specular + { 0.5f, 0.5f, 0.5f, 1.0f }, // light main ambient + { 0.0f, 0.0f, 1.0f, 1.0f }, // material diffuse + { 0.3f, 0.3f, 0.3f, 1.0f }, // material ambient + { 1.0f, 1.0f, 1.0f, 1.0f } // material specular + }; + private float yPos = 0.0f, xPos = 0.0f, zPos = -20.0f; + private int quadratic, sphere; + // sourceType values: 0 = light, 1 = material + private int sourceType; + // lightType values: 0 = diffuse, 1 = ambient, 2 = specular, 3 = main ambient + private int lightType = 0; + + /** + * @see OpenGLTab#createControls(Composite) + */ + void createControls(Composite composite) { + Group movementGroup = new Group(composite, SWT.NONE); + movementGroup.setText("Translation"); + movementGroup.setLayout(new GridLayout(2, false)); + + new Label(movementGroup, SWT.NONE).setText("X:"); + final Slider xMove = new Slider(movementGroup, SWT.NONE); + xMove.setIncrement(1); + xMove.setMaximum(22); + xMove.setMinimum(0); + xMove.setThumb(2); + xMove.setPageIncrement(2); + xMove.setSelection(10); + xMove.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + xPos = xMove.getSelection() - 10; + } + }); + + new Label(movementGroup, SWT.NONE).setText("Y:"); + final Slider yMove = new Slider(movementGroup, SWT.NONE); + yMove.setIncrement(1); + yMove.setMaximum(22); + yMove.setMinimum(0); + yMove.setThumb(2); + yMove.setPageIncrement(2); + yMove.setSelection(10); + yMove.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + yPos = yMove.getSelection() - 10; + } + }); + + new Label(movementGroup, SWT.NONE).setText("Z:"); + final Slider zMove = new Slider(movementGroup, SWT.NONE); + zMove.setIncrement(1); + zMove.setMaximum(22); + zMove.setMinimum(0); + zMove.setThumb(2); + zMove.setPageIncrement(2); + zMove.setSelection(10); + zMove.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + zPos = zMove.getSelection() - 30; + } + }); + + Group positionGroup = new Group(composite, SWT.NONE); + positionGroup.setText("Light Position"); + positionGroup.setLayout(new GridLayout(2, false)); + + new Label(positionGroup, SWT.NONE).setText("X:"); + final Slider lightX = new Slider(positionGroup, SWT.NONE); + lightX.setIncrement(1); + lightX.setMaximum(22); + lightX.setMinimum(0); + lightX.setThumb(2); + lightX.setPageIncrement(2); + lightX.setSelection(10); + lightX.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + lightPosition[0] = ((float) lightX.getSelection() * 10) - 100; + } + }); + + new Label(positionGroup, SWT.NONE).setText("Y:"); + final Slider lightY = new Slider(positionGroup, SWT.NONE); + lightY.setIncrement(1); + lightY.setMaximum(22); + lightY.setMinimum(0); + lightY.setThumb(2); + lightY.setPageIncrement(2); + lightY.setSelection(10); + lightY.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + lightPosition[1] = ((float) lightY.getSelection() * 10) - 100; + } + }); + + new Label(positionGroup, SWT.NONE).setText("Z:"); + final Slider lightZ = new Slider(positionGroup, SWT.NONE); + lightZ.setIncrement(1); + lightZ.setMaximum(22); + lightZ.setMinimum(0); + lightZ.setThumb(2); + lightZ.setPageIncrement(2); + lightZ.setSelection(10); + lightZ.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + lightPosition[2] = ((float) lightZ.getSelection() * 10) - 20; + } + }); + + Group lightColorsGroup = new Group(composite, SWT.NONE); + lightColorsGroup.setText("Light Colors"); + lightColorsGroup.setLayout(new GridLayout()); + GridData data = new GridData(GridData.FILL_BOTH); + lightColorsGroup.setLayoutData(data); + + ColorSelectionGroup lightDiffuseButton = + new ColorSelectionGroup(lightColorsGroup, SWT.NONE); + lightDiffuseButton.setText("Diffuse"); + lightDiffuseButton.setRGB( + new RGB( + (int) (colorValues[0][0] * 255), + (int) (colorValues[0][1] * 255), + (int) (colorValues[0][2] * 255))); + lightDiffuseButton + .addColorSelectionListener(new IColorSelectionListener() { + public void handleColorSelection(RGB rgb) { + colorValues[0][0] = ((float) rgb.red) / 255; + colorValues[0][1] = ((float) rgb.green) / 255; + colorValues[0][2] = ((float) rgb.blue) / 255; + setColorValues(); + } + }); + + ColorSelectionGroup lightAmbientButton = + new ColorSelectionGroup(lightColorsGroup, SWT.NONE); + lightAmbientButton.setText("Ambient"); + lightAmbientButton.setRGB( + new RGB( + (int) (colorValues[1][0] * 255), + (int) (colorValues[1][1] * 255), + (int) (colorValues[1][2] * 255))); + lightAmbientButton + .addColorSelectionListener(new IColorSelectionListener() { + public void handleColorSelection(RGB rgb) { + colorValues[1][0] = ((float) rgb.red) / 255; + colorValues[1][1] = ((float) rgb.green) / 255; + colorValues[1][2] = ((float) rgb.blue) / 255; + setColorValues(); + } + }); + + ColorSelectionGroup lightSpecularButton = + new ColorSelectionGroup(lightColorsGroup, SWT.NONE); + lightSpecularButton.setText("Specular"); + lightSpecularButton.setRGB( + new RGB( + (int) (colorValues[2][0] * 255), + (int) (colorValues[2][1] * 255), + (int) (colorValues[2][2] * 255))); + lightSpecularButton + .addColorSelectionListener(new IColorSelectionListener() { + public void handleColorSelection(RGB rgb) { + colorValues[2][0] = ((float) rgb.red) / 255; + colorValues[2][1] = ((float) rgb.green) / 255; + colorValues[2][2] = ((float) rgb.blue) / 255; + setColorValues(); + } + }); + + ColorSelectionGroup lightMainAmbientButton = + new ColorSelectionGroup(lightColorsGroup, SWT.NONE); + lightMainAmbientButton.setText("Main Ambient"); + lightMainAmbientButton.setRGB( + new RGB( + (int) (colorValues[3][0] * 255), + (int) (colorValues[3][1] * 255), + (int) (colorValues[3][2] * 255))); + lightMainAmbientButton + .addColorSelectionListener(new IColorSelectionListener() { + public void handleColorSelection(RGB rgb) { + colorValues[3][0] = ((float) rgb.red) / 255; + colorValues[3][1] = ((float) rgb.green) / 255; + colorValues[3][2] = ((float) rgb.blue) / 255; + setColorValues(); + } + }); + + Group materialColorsGroup = new Group(composite, SWT.NONE); + materialColorsGroup.setText("Material Colors"); + materialColorsGroup.setLayout(new GridLayout()); + data = new GridData(GridData.FILL_BOTH); + materialColorsGroup.setLayoutData(data); + + ColorSelectionGroup materialDiffuseButton = + new ColorSelectionGroup(materialColorsGroup, SWT.NONE); + materialDiffuseButton.setText("Diffuse"); + materialDiffuseButton.setRGB( + new RGB( + (int) (colorValues[4][0] * 255), + (int) (colorValues[4][1] * 255), + (int) (colorValues[4][2] * 255))); + materialDiffuseButton + .addColorSelectionListener(new IColorSelectionListener() { + public void handleColorSelection(RGB rgb) { + colorValues[4][0] = ((float) rgb.red) / 255; + colorValues[4][1] = ((float) rgb.green) / 255; + colorValues[4][2] = ((float) rgb.blue) / 255; + setColorValues(); + } + }); + + ColorSelectionGroup materialAmbientButton = + new ColorSelectionGroup(materialColorsGroup, SWT.NONE); + materialAmbientButton.setText("Ambient"); + materialAmbientButton.setRGB( + new RGB( + (int) (colorValues[5][0] * 255), + (int) (colorValues[5][1] * 255), + (int) (colorValues[5][2] * 255))); + materialAmbientButton + .addColorSelectionListener(new IColorSelectionListener() { + public void handleColorSelection(RGB rgb) { + colorValues[5][0] = ((float) rgb.red) / 255; + colorValues[5][1] = ((float) rgb.green) / 255; + colorValues[5][2] = ((float) rgb.blue) / 255; + setColorValues(); + } + }); + + ColorSelectionGroup materialSpecularButton = + new ColorSelectionGroup(materialColorsGroup, SWT.NONE); + materialSpecularButton.setText("Specular"); + materialSpecularButton.setRGB( + new RGB( + (int) (colorValues[6][0] * 255), + (int) (colorValues[6][1] * 255), + (int) (colorValues[6][2] * 255))); + materialSpecularButton + .addColorSelectionListener(new IColorSelectionListener() { + public void handleColorSelection(RGB rgb) { + colorValues[6][0] = ((float) rgb.red) / 255; + colorValues[6][1] = ((float) rgb.green) / 255; + colorValues[6][2] = ((float) rgb.blue) / 255; + setColorValues(); + } + }); + + new Label(composite, SWT.NONE).setText("Material Shininess:"); + final Slider shineSlider = new Slider(composite, SWT.NONE); + shineSlider.setIncrement(5); + shineSlider.setMaximum(102); + shineSlider.setMinimum(0); + shineSlider.setThumb(2); + shineSlider.setPageIncrement(10); + shineSlider.setSelection(25); + shineSlider.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + materialShininess[0] = shineSlider.getSelection(); + GL.glMaterialfv(GL.GL_FRONT_AND_BACK, + GL.GL_SHININESS, + materialShininess); + } + }); + } + + /** + * @see OpenGLTab#dispose() + */ + void dispose() { + super.dispose(); + GLU.gluDeleteQuadric(quadratic); + GL.glDeleteLists(sphere, 1); + } + + /** + * @see OpenGLTab#getTabText() + */ + String getTabText() { + return "Light"; + } + + /** + * @see OpenGLTab#init() + */ + void init() { + GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); + GL.glClearDepth(1.0); + setColorValues(); + GL.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_SHININESS, materialShininess); + quadratic = GLU.gluNewQuadric(); + GLU.gluQuadricNormals(quadratic, GLU.GLU_SMOOTH); + GL.glHint(GL.GL_LINE_SMOOTH_HINT, GL.GL_NICEST); + GL.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST); + GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); + GL.glPointSize(2.0f); + GL.glEnable(GL.GL_LIGHTING); + GL.glEnable(GL.GL_LIGHT0); + GL.glEnable(GL.GL_DEPTH_TEST); + sphere = GL.glGenLists(1); + GL.glNewList(sphere, GL.GL_COMPILE); + GLU.gluSphere(quadratic, 3, 32, 32); + GL.glEndList(); + } + + /** + * @see OpenGLTab#renderScene() + */ + void renderScene() { + GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); + GL.glLoadIdentity(); + GL.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, lightPosition); + GL.glTranslatef(xPos, yPos, zPos); + GL.glCallList(sphere); + } + + /** + * Sets the current color values into the rendered display. + */ + void setColorValues() { + GL.glLightfv(GL.GL_LIGHT0, GL.GL_DIFFUSE, colorValues[0]); + GL.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_DIFFUSE, colorValues[4]); + GL.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT, colorValues[5]); + GL.glLightfv(GL.GL_LIGHT0, GL.GL_AMBIENT, colorValues[1]); + GL.glLightfv(GL.GL_LIGHT0, GL.GL_SPECULAR, colorValues[2]); + GL.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_SPECULAR, colorValues[6]); + GL.glLightModelfv(GL.GL_LIGHT_MODEL_AMBIENT, colorValues[3]); + GL.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_SHININESS, materialShininess); + } +} diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/NurbTab.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/NurbTab.java new file mode 100644 index 0000000000..c25e8c6647 --- /dev/null +++ b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/NurbTab.java @@ -0,0 +1,294 @@ +/******************************************************************************* + * 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.examples; + + +import org.eclipse.swt.*; +import org.eclipse.swt.graphics.*; +import org.eclipse.swt.layout.*; +import org.eclipse.swt.opengl.*; +import org.eclipse.swt.widgets.*; + +class NurbTab extends OpenGLTab { + private float xPos = -5.0f, yPos = -5.0f, zPos = -25.0f; + private float xRot = 330.0f, yRot = 0.0f, zRot = 0.0f; + private int nurb; + + /** + * Returns a 3 dimensional array to store vertex points for the nurb + * surface. + * + * @return the array + */ + float[][][] buildNurb() { + float[][][] ctrl = new float[4][4][3]; + for (int i = 0; i < 4; i++) { + for (int j = 0; j < 4; j++) { + // set the x value + ctrl[i][j][0] = 2 * (i + (float) Math.cos(i + j)); + // set the y value + ctrl[i][j][1] = 2 * (j + (float) Math.cos(i + j)); + // set the z value + if ((i == 1 && j == 1) || (i == 2 && j == 2)) { + // this makes the hill + ctrl[i][j][2] = 6.0f; + } else { + ctrl[i][j][2] = 0.0f; + } + } + } + // sets this particular z value to a large number to make a high + // hill + ctrl[2][2][2] = 8.0f; + + return ctrl; + } + + /** + * Returns a 1 dimensional array representing the 3 dimensional + * argument. This result can be passed to the nurb renderer + * + * @param ctrl source 3D array + * @return 1D array + */ + float[] convert(float[][][] ctrl) { + float[] pts = + new float[ctrl.length * ctrl[0].length * ctrl[0][0].length]; + int row = 0; + int col = 0; + // set rowIncr to number of columns * depth + int rowIncr = ctrl[0].length * ctrl[0][0].length; + // set colIncr to depth + int colIncr = ctrl[0][0].length; + // loop through rows + for (int i = 0; i < ctrl.length; i++) { + col = 0; + // loop through columns + for (int j = 0; j < ctrl[0].length; j++) { + // loop through to get the depth values + for (int k = 0; k < ctrl[0][0].length; k++) { + pts[row + col + k] = ctrl[i][j][k]; + } + col += colIncr; + } + row += rowIncr; + } + return pts; + } + + /** + * @see OpenGLTab#createControls(Composite) + */ + void createControls(final Composite composite) { + Group movementGroup = new Group(composite, SWT.NONE); + movementGroup.setText("Translation"); + movementGroup.setLayout(new GridLayout(2, false)); + + new Label(movementGroup, SWT.NONE).setText("X:"); + final Slider xMove = new Slider(movementGroup, SWT.NONE); + xMove.setIncrement(1); + xMove.setMaximum(12); + xMove.setMinimum(0); + xMove.setThumb(2); + xMove.setPageIncrement(2); + xMove.setSelection(5); + xMove.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + xPos = xMove.getSelection() - 10; + } + }); + + new Label(movementGroup, SWT.NONE).setText("Y:"); + final Slider yMove = new Slider(movementGroup, SWT.NONE); + yMove.setIncrement(1); + yMove.setMaximum(12); + yMove.setMinimum(0); + yMove.setThumb(2); + yMove.setPageIncrement(2); + yMove.setSelection(5); + yMove.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + yPos = yMove.getSelection() - 10; + } + }); + + new Label(movementGroup, SWT.NONE).setText("Z:"); + final Slider zMove = new Slider(movementGroup, SWT.NONE); + zMove.setIncrement(1); + zMove.setMaximum(12); + zMove.setMinimum(0); + zMove.setThumb(2); + zMove.setPageIncrement(2); + zMove.setSelection(5); + zMove.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + zPos = zMove.getSelection() - 30; + } + }); + + Group rotationGroup = new Group(composite, SWT.NONE); + rotationGroup.setText("Rotation"); + rotationGroup.setLayout(new GridLayout(2, false)); + + new Label(rotationGroup, SWT.NONE).setText("X:"); + final Slider xRotation = new Slider(rotationGroup, SWT.NONE); + xRotation.setIncrement(10); + xRotation.setMaximum(362); + xRotation.setMinimum(0); + xRotation.setThumb(2); + xRotation.setPageIncrement(20); + xRotation.setSelection(330); + xRotation.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + xRot = xRotation.getSelection(); + } + }); + + new Label(rotationGroup, SWT.NONE).setText("Y:"); + final Slider yRotation = new Slider(rotationGroup, SWT.NONE); + yRotation.setIncrement(10); + yRotation.setMaximum(362); + yRotation.setMinimum(0); + yRotation.setThumb(2); + yRotation.setPageIncrement(20); + yRotation.setSelection(0); + yRotation.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + yRot = yRotation.getSelection(); + } + }); + + new Label(rotationGroup, SWT.NONE).setText("Z:"); + final Slider zRotation = new Slider(rotationGroup, SWT.NONE); + zRotation.setIncrement(10); + zRotation.setMaximum(362); + zRotation.setMinimum(0); + zRotation.setThumb(2); + zRotation.setPageIncrement(20); + zRotation.setSelection(0); + zRotation.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + zRot = zRotation.getSelection(); + } + }); + + new Label(composite, SWT.NONE).setText("Sampling Tolerance:"); + final Slider sSlider = new Slider(composite, SWT.NONE); + sSlider.setIncrement(1); + sSlider.setMaximum(101); + sSlider.setMinimum(0); + sSlider.setThumb(2); + sSlider.setPageIncrement(2); + sSlider.setSelection(75); + sSlider.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + GLU.gluNurbsProperty( + nurb, + GLU.GLU_SAMPLING_TOLERANCE, + sSlider.getSelection() + 1); + } + }); + + final Button fillButton = new Button(composite, SWT.CHECK); + fillButton.setText("Fill"); + fillButton.setSelection(true); + fillButton.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + if (fillButton.getSelection()) { + GLU.gluNurbsProperty( + nurb, + GLU.GLU_DISPLAY_MODE, + GLU.GLU_FILL); + } else { + GLU.gluNurbsProperty( + nurb, + GLU.GLU_DISPLAY_MODE, + GLU.GLU_OUTLINE_POLYGON); + } + } + }); + + ColorSelectionGroup colorGroup = + new ColorSelectionGroup(composite, SWT.NONE); + colorGroup.setText("Foreground color"); + colorGroup.addColorSelectionListener(new IColorSelectionListener() { + public void handleColorSelection(RGB rgb) { + GL.glColor3ub((byte) rgb.red, (byte) rgb.green, (byte) rgb.blue); + } + }); + } + + /** + * @see OpenGLTab#dispose() + */ + void dispose() { + super.dispose(); + GLU.gluDeleteNurbsRenderer(nurb); + } + + /** + * @see OpenGLTab#getTabText() + */ + String getTabText() { + return "Nurb"; + } + + /** + * @see OpenGLTab#init() + */ + void init() { + GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); + GL.glColor3f(1.0f, 0.0f, 0.0f); + // set up material color which helps show curves + float mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; + float mat_shininess[] = { 100.0f }; + GL.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_SPECULAR, mat_specular); + GL.glMaterialfv(GL.GL_FRONT_AND_BACK, GL.GL_SHININESS, mat_shininess); + GL.glColorMaterial(GL.GL_FRONT_AND_BACK, GL.GL_AMBIENT_AND_DIFFUSE); + + GL.glEnable(GL.GL_LIGHTING); + GL.glEnable(GL.GL_LIGHT0); + GL.glEnable(GL.GL_COLOR_MATERIAL); + GL.glEnable(GL.GL_DEPTH_TEST); + GL.glEnable(GL.GL_AUTO_NORMAL); + GL.glEnable(GL.GL_NORMALIZE); + + nurb = GLU.gluNewNurbsRenderer(); + + GLU.gluNurbsProperty( + nurb, + GLU.GLU_SAMPLING_METHOD, + GLU.GLU_PATH_LENGTH); + // sampling tolerance is specific for GLU.GLU_PATH_LENGTH + GLU.gluNurbsProperty(nurb, GLU.GLU_SAMPLING_TOLERANCE, 75.0f); + GLU.gluNurbsProperty(nurb, GLU.GLU_DISPLAY_MODE, GLU.GLU_FILL); + } + + /** + * @see OpenGLTab#renderScene() + */ + void renderScene() { + GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); + GL.glLoadIdentity(); + // do translation and rotation + GL.glTranslatef(xPos, yPos, zPos); + GL.glRotatef(xRot, 1.0f, 0.0f, 0.0f); + GL.glRotatef(yRot, 0.0f, 1.0f, 0.0f); + GL.glRotatef(zRot, 0.0f, 0.0f, 1.0f); + // define nurbs surface + float[] knots = { 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f }; + GLU.gluBeginSurface(nurb); + GLU.gluNurbsSurface( + nurb, 8, knots, 8, knots, 12, 3, + convert(buildNurb()), 4, 4, GL.GL_MAP2_VERTEX_3); + GLU.gluEndSurface(nurb); + } +} diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/ObjectsTab.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/ObjectsTab.java new file mode 100644 index 0000000000..3ef288e451 --- /dev/null +++ b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/ObjectsTab.java @@ -0,0 +1,376 @@ +/******************************************************************************* + * 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.examples; + + +import org.eclipse.swt.*; +import org.eclipse.swt.graphics.*; +import org.eclipse.swt.layout.*; +import org.eclipse.swt.opengl.*; +import org.eclipse.swt.widgets.*; + +class ObjectsTab extends OpenGLTab { + private class Shape { + private String name; + private int index; + /** + * Constructor. + * + * @param name the display name of this shape + * @param index the display list index corresponding to this shape + */ + Shape(String name, int index) { + super(); + this.index = index; + this.name = name; + } + void dispose() { + GL.glDeleteLists(index, 1); + } + void draw() { + GL.glCallList(index); + } + String getName() { + return name; + } + } + + private Shape[] shapes; + private Shape currentShape; + private float xRot = 0.0f, yRot = 0.0f; + private boolean fill = true; + private int quadratic; + private final static int SLEEP_LENGTH = 50; + + /** + * @see OpenGLTab#createControls(Composite) + */ + void createControls(final Composite composite) { + GridLayout layout = new GridLayout(2, false); + layout.marginWidth = 0; + Composite controls = new Composite(composite, SWT.NONE); + controls.setLayout(layout); + + new Label(controls, SWT.NONE).setText("Object:"); + final Combo objectsCombo = new Combo(controls, SWT.READ_ONLY); + for (int i = 0; i < shapes.length; i++) { + objectsCombo.add(shapes[i].getName()); + } + objectsCombo.select(0); + objectsCombo.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + currentShape = shapes[objectsCombo.getSelectionIndex()]; + } + }); + + final Button fillToggleButton = new Button(controls, SWT.CHECK); + fillToggleButton.setText("Fill"); + fillToggleButton.setSelection(true); + fillToggleButton.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + fill = fillToggleButton.getSelection(); + } + }); + + ColorSelectionGroup colorGroup = + new ColorSelectionGroup(composite, SWT.NONE); + colorGroup.setText("Foreground color"); + colorGroup.addColorSelectionListener(new IColorSelectionListener() { + public void handleColorSelection(RGB rgb) { + GL.glColor3ub((byte) rgb.red, (byte) rgb.green, (byte) rgb.blue); + } + }); + } + + /** + * @see OpenGLTab#dispose() + */ + void dispose() { + super.dispose(); + GLU.gluDeleteQuadric(quadratic); + for (int i = 0; i < shapes.length; i++) { + shapes [i].dispose(); + } + } + + /** + * Creates a circle centered at 0,0 in the viewport. + * + * @param radius + * @param xShrink + * @param yShrink + */ + void drawCircle(float radius, float xShrink, float yShrink) { + GL.glBegin(GL.GL_POLYGON); + float dia = (float) 2.0 * (float) Math.PI; + for (float angle = 0.0f; angle <= dia; angle += 0.1f) { + GL.glVertex2d(radius * Math.cos(angle), radius * Math.sin(angle)); + } + GL.glEnd(); + } + + /** + * Creates a cube centered at 0,0 in the viewport. + * + * @param width + * @param height + * @param depth + */ + void drawCube(float width, float height, float depth) { + GL.glBegin(GL.GL_QUADS); + // front + GL.glVertex3f(-width, -height, depth); // bottom left + GL.glVertex3f(width, -height, depth); // bottom right + GL.glVertex3f(width, height, depth); // top right + GL.glVertex3f(-width, height, depth); // top left + // back + GL.glVertex3f(-width, -height, -depth); // bottom left + GL.glVertex3f(width, -height, -depth); // bottom right + GL.glVertex3f(width, height, -depth); // top right + GL.glVertex3f(-width, height, -depth); // top left + // left + GL.glVertex3f(-width, -height, -depth); // bottom left + GL.glVertex3f(-width, -height, depth); // bottom right + GL.glVertex3f(-width, height, depth); // top right + GL.glVertex3f(-width, height, -depth); // top left + // right + GL.glVertex3f(width, -height, depth); // bottom left + GL.glVertex3f(width, -height, -depth); // bottom right + GL.glVertex3f(width, height, -depth); // top right + GL.glVertex3f(width, height, depth); // top left + // top + GL.glVertex3f(width, height, -depth); // back right + GL.glVertex3f(-width, height, -depth); // back left + GL.glVertex3f(-width, height, depth); // front left + GL.glVertex3f(width, height, depth); // front right + // bottom + GL.glVertex3f(width, -height, depth); // front right + GL.glVertex3f(-width, -height, depth); // front left + GL.glVertex3f(-width, -height, -depth); // back left + GL.glVertex3f(width, -height, -depth); // back right + GL.glEnd(); + } + + /** + * Creates a pyramid centered at 0,0 in the viewport. + * + * @param width + * @param height + * @param depth + */ + void drawPyramid(float width, float height, float depth) { + GL.glBegin(GL.GL_TRIANGLES); + // front + GL.glVertex3f(0.0f, height, 0.0f); // top + GL.glVertex3f(-width, -height, depth); // left + GL.glVertex3f(width, -height, depth); // right + // left + GL.glVertex3f(0.0f, height, 0.0f); // top + GL.glVertex3f(-width, -height, -depth); // left + GL.glVertex3f(-width, -height, depth); // right + // front + GL.glVertex3f(-width, -height, -depth); // left + GL.glVertex3f(0.0f, height, 0.0f); // top + GL.glVertex3f(width, -height, -depth); // right + // right + GL.glVertex3f(0.0f, height, 0.0f); // top + GL.glVertex3f(width, -height, depth); // left + GL.glVertex3f(width, -height, -depth); // right + GL.glEnd(); + GL.glBegin(GL.GL_QUADS); + // bottom + GL.glVertex3f(-width, -height, depth); // front left + GL.glVertex3f(-width, -height, -depth); // back left + GL.glVertex3f(width, -height, -depth); // back right + GL.glVertex3f(width, -height, depth); // front right + GL.glEnd(); + } + + /** + * Creates a square centered at 0,0 in the viewport. + * + * @param width + * @param height + */ + void drawSquare(float width, float height) { + GL.glBegin(GL.GL_QUADS); + GL.glVertex3f(-width, -height, 0.0f); // bottom left + GL.glVertex3f(width, -height, 0.0f); // bottom right + GL.glVertex3f(width, height, 0.0f); // top right + GL.glVertex3f(-width, height, 0.0f); // top left + GL.glEnd(); + } + + /** + * This method is from glut_shapes.c . + * + * @param r + * @param R + * @param nsides + * @param rings + */ + void drawTorus(float r, float R, int nsides, int rings) { + float ringDelta = 2.0f * (float) Math.PI / rings; + float sideDelta = 2.0f * (float) Math.PI / nsides; + float theta = 0.0f; + float cosTheta = 1.0f; + float sinTheta = 0.0f; + + for (int i = rings - 1; i >= 0; i--) { + float theta1 = theta + ringDelta; + float cosTheta1 = (float) Math.cos(theta1); + float sinTheta1 = (float) Math.sin(theta1); + GL.glBegin(GL.GL_QUAD_STRIP); + float phi = 0.0f; + + for (int j = nsides; j >= 0; j--) { + phi += sideDelta; + float cosPhi = (float) Math.cos(phi); + float sinPhi = (float) Math.sin(phi); + float dist = R + r * cosPhi; + GL.glNormal3f(cosTheta1 * cosPhi, -sinTheta1 * cosPhi, sinPhi); + GL.glVertex3f(cosTheta1 * dist, -sinTheta1 * dist, r * sinPhi); + GL.glNormal3f(cosTheta * cosPhi, -sinTheta * cosPhi, sinPhi); + GL.glVertex3f(cosTheta * dist, -sinTheta * dist, r * sinPhi); + } + + GL.glEnd(); + theta = theta1; + cosTheta = cosTheta1; + sinTheta = sinTheta1; + } + } + + /** + * Creates a triangle centered at 0,0 in the viewport. + * + * @param width + * @param height + */ + void drawTriangle(float width, float height) { + GL.glBegin(GL.GL_TRIANGLES); + GL.glVertex3f(0.0f, height, 0.0f); // middle + GL.glVertex3f(-width, -height, 0.0f); // left + GL.glVertex3f(width, -height, 0.0f); // right + GL.glEnd(); + } + + /** + * @see OpenGLTab#getSleepLength() + */ + int getSleepLength() { + return SLEEP_LENGTH; + } + + /** + * @see OpenGLTab#getTabText() + */ + String getTabText() { + return "Objects"; + } + + /** + * @see OpenGLTab#init() + */ + void init() { + GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); + GL.glColor3f(1.0f, 0.0f, 0.0f); + GL.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST); + GL.glClearDepth(1.0); + quadratic = GLU.gluNewQuadric(); + GLU.gluQuadricNormals(quadratic, GLU.GLU_SMOOTH); + GL.glLineWidth(2); + + GL.glEnable(GL.GL_DEPTH_TEST); + + // create the display lists and shapes + shapes = new Shape[11]; + int index = 1; + + GL.glNewList(index, GL.GL_COMPILE); + drawTriangle(2.0f, 2.0f); + GL.glEndList(); + shapes[0] = new Shape("Triangle", index++); + + GL.glNewList(index, GL.GL_COMPILE); + drawPyramid(2.0f, 2.0f, 2.0f); + GL.glEndList(); + shapes[1] = new Shape("Pyramid", index++); + + GL.glNewList(index, GL.GL_COMPILE); + drawSquare(2.0f, 2.0f); + GL.glEndList(); + shapes[2] = new Shape("Square", index++); + + GL.glNewList(index, GL.GL_COMPILE); + drawCube(2.0f, 2.0f, 2.0f); + GL.glEndList(); + shapes[3] = new Shape("Cube", index++); + + GL.glNewList(index, GL.GL_COMPILE); + drawCircle(2.0f, 0.0f, 0.0f); + GL.glEndList(); + shapes[4] = new Shape("Circle", index++); + + GL.glNewList(index, GL.GL_COMPILE); + GLU.gluPartialDisk(quadratic, 0.5, 2.0, 18, 18, 90, 125); + GL.glEndList(); + shapes[5] = new Shape("Partial Disk", index++); + + GL.glNewList(index, GL.GL_COMPILE); + GLU.gluDisk(quadratic, 0.5, 2.0, 18, 18); + GL.glEndList(); + shapes[6] = new Shape("Disk", index++); + + GL.glNewList(index, GL.GL_COMPILE); + drawTorus(1, 2, 18, 18); + GL.glEndList(); + shapes[7] = new Shape("Torus", index++); + + GL.glNewList(index, GL.GL_COMPILE); + GLU.gluSphere(quadratic, 2.0, 18, 18); + GL.glEndList(); + shapes[8] = new Shape("Sphere", index++); + + GL.glNewList(index, GL.GL_COMPILE); + GLU.gluCylinder(quadratic, 2.0, 2.0, 4, 18, 18); + GL.glEndList(); + shapes[9] = new Shape("Cylinder", index++); + + GL.glNewList(index, GL.GL_COMPILE); + GLU.gluCylinder(quadratic, 0, 2.0, 4, 18, 18); + GL.glEndList(); + shapes[10] = new Shape("Cone", index++); + + currentShape = shapes[0]; + } + + /** + * @see OpenGLTab#renderScene() + */ + void renderScene() { + GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); + GL.glLoadIdentity(); + GL.glTranslatef(0.0f, 0.0f, -14.0f); + // rotate around X and Y axis + GL.glRotatef(yRot, 0.0f, 1.0f, 0.0f); + GL.glRotatef(xRot, 1.0f, 0.0f, 0.0f); + // sets polygon fill mode + if (fill) { + GL.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_FILL); + } else { + GL.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_LINE); + } + currentShape.draw(); + yRot += 1.5; + xRot += 1.5; + } +} diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/OpenGLExample.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/OpenGLExample.java new file mode 100644 index 0000000000..9e7e10d53f --- /dev/null +++ b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/OpenGLExample.java @@ -0,0 +1,116 @@ +/******************************************************************************* + * 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.examples; + + +import org.eclipse.swt.*; +import org.eclipse.swt.layout.*; +import org.eclipse.swt.widgets.*; + +public class OpenGLExample { + private TabFolder tabFolder; + private OpenGLTab[] tabs; + private int sleep; + + /** + * Renders the scene of the current tab. + */ + void display() { + int index = tabFolder.getSelectionIndex(); + tabs[index].render(); + tabs[index].swap(); + } + + /** + * Disposes of all contained tabs. + */ + void dispose() { + tabFolder = null; + for (int i = 0; i < tabs.length; i++) { + tabs[i].dispose(); + } + } + + /** + * Runs the OpenGL example + */ + void run() { + final Display display = new Display(); + final Shell shell = + new Shell(display, SWT.SHELL_TRIM | SWT.NO_BACKGROUND); + shell.setLayout(new FillLayout()); + + tabFolder = new TabFolder(shell, SWT.NONE); + tabs = + new OpenGLTab[] { + new AntialiasingTab(), + new AreaTab(), + new BezierTab(), + new BitmapTextTab(), + new FogTab(), + new GradientTab(), + new LightTab(), + new NurbTab(), + new ObjectsTab(), + // outline tab is windows specific + new OutlineTextTab (), + new ReflectionTab(), + new StencilTab(), + new TextureTab(), + new TransparencyTab()}; + + for (int i = 0; i < tabs.length; i++) { + TabItem item = new TabItem(tabFolder, SWT.NONE); + item.setText(tabs[i].getTabText()); + item.setControl(tabs[i].createTabFolderPage(tabFolder)); + } + + tabFolder.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + OpenGLTab tab = tabs[tabFolder.getSelectionIndex()]; + tab.setCurrent(); + sleep = tab.getSleepLength(); + } + }); + if (tabs.length > 0) { + tabs[0].setCurrent(); + sleep = tabs[0].getSleepLength(); + } + + shell.setText("OpenGL Example"); + Runnable timer = new Runnable() { + public void run() { + if (shell.isDisposed()) return; + display(); + display.timerExec(sleep, this); + } + }; + timer.run(); + shell.addListener(SWT.Dispose, new Listener() { + public void handleEvent(Event e) { + dispose(); + } + }); + shell.open(); + while (!shell.isDisposed()) { + if (!display.readAndDispatch()) { + display.sleep(); + } + } + } + + /** + * Invokes as a standalone program. + */ + public static void main(String[] args) { + new OpenGLExample().run(); + } +} diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/OpenGLTab.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/OpenGLTab.java new file mode 100644 index 0000000000..d8523b9e0c --- /dev/null +++ b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/OpenGLTab.java @@ -0,0 +1,243 @@ +/******************************************************************************* + * 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.examples; + + +import org.eclipse.swt.*; +import org.eclipse.swt.graphics.*; +import org.eclipse.swt.widgets.*; +import org.eclipse.swt.layout.*; +import org.eclipse.swt.opengl.*; + +/** + * <code>OpenGLTab</code> is the abstract superclass of every page + * in the example's tab folder. Each page in the tab folder + * displays a different example. + * + * An OpenGLTab itself is not a control but instead provides a hierarchy + * with which to share code that is common to every page in the folder. + */ +abstract class OpenGLTab { + private Canvas glCanvas; + private Composite tabFolderPage; + private GLContext context; + private boolean stencilSupport; + private final static int DEFAULT_SLEEP_LENGTH = 100; + + /** + * Creates this tab's controls. Subclasses must override. + * + * @param composite the parent composite + */ + abstract void createControls(Composite composite); + + /** + * Creates the OpenGL canvas on which all drawing is done. + */ + void createOpenGLContext() { + context = new GLContext(glCanvas); + setCurrent(); + setupViewingArea(); + } + + /** + * Creates the tab folder page. + * + * @param tabFolder the parent tab folder + * @return the new page + */ + Composite createTabFolderPage(TabFolder tabFolder) { + tabFolderPage = new Composite(tabFolder, SWT.NONE); + tabFolderPage.setLayout(new GridLayout(2, false)); + + GridData gridData = new GridData(); + gridData.heightHint = 400; + gridData.widthHint = 400; + gridData.verticalAlignment = GridData.BEGINNING; + glCanvas = new Canvas(tabFolderPage, SWT.NONE); + glCanvas.setLayout(new GridLayout()); + glCanvas.setLayoutData(gridData); + glCanvas.setSize(400, 400); // needed for windows + + gridData = new GridData(); + gridData.verticalAlignment = GridData.BEGINNING; + Composite controlComposite = new Composite(tabFolderPage, SWT.NONE); + controlComposite.setLayout(new GridLayout()); + controlComposite.setLayoutData(gridData); + + // create the OpenGL Screen and controls + createOpenGLContext(); + + // determine if native stencil support is available + int[] param = new int[1]; + GL.glGetIntegerv(GL.GL_STENCIL_BITS, param); + stencilSupport = param[0] != 0; + + init(); + + if (!isStencilSupportNeeded() || hasStencilSupport()) { + createControls(controlComposite); + } else { + Label label = new Label(controlComposite, SWT.NONE); + label.setText("This tab requires native stencil support."); + } + + return tabFolderPage; + } + + /** + * Disposes all resources allocated by this tab. + */ + void dispose() { + context.dispose(); + } + + /** + * Returns the context for this tab. + * + * @return GLContext + */ + GLContext getContext() { + return context; + } + + /** + * Returns the glCanvas for this tab. + * + * @return Canvas + */ + Canvas getGlCanvas() { + return glCanvas; + } + + /** + * Returns the length of time in milliseconds that the example + * should sleep between animation redraws. As this length + * increases, user responsiveness increases and the frequency of + * animation redraws decreases. Subclasses with moving animations + * may wish to override this default implementation to return a + * smaller value if their animations do not occur frequently enough. + * + * @return the length of time in milliseconds to sleep between redraws + */ + int getSleepLength() { + return DEFAULT_SLEEP_LENGTH; + } + + /** + * Returns the text for this tab. Subclasses must override. + * + * @return the text for the tab item + */ + abstract String getTabText(); + + /** + * Returns whether this machine has native stencils support. + * + * @return boolean + */ + boolean hasStencilSupport() { + return stencilSupport; + } + + /** + * Initialize OpenGL resources for this tab. Subclasses must override. + */ + abstract void init(); + + /** + * Loads a texture. + * + * @param context + * @param fileName + * @param index + * @param texture[] + */ + static void loadTexture(GLContext context, String fileName, int index, int[] texture) { + GL.glBindTexture(GL.GL_TEXTURE_2D, texture[index]); + ImageData source = + new ImageData(OpenGLTab.class.getResourceAsStream(fileName)); + Image image = new Image(Display.getCurrent(), source); + Image newImage = new Image(Display.getCurrent(), 256, 256); + GC gc = new GC(newImage); + gc.drawImage(image, 0, 0, source.width, source.height, 0, 0, 256, 256); + source = newImage.getImageData(); + gc.dispose(); + source = context.convertImageData(source); + newImage.dispose(); + image.dispose(); + GL.glTexImage2D( + GL.GL_TEXTURE_2D, 0, 3, + source.width, source.height, 0, + GL.GL_RGB, GL.GL_UNSIGNED_BYTE, source.data); + GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR); + GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR); + } + + /** + * Renders this tab. + */ + void render() { + if (!isStencilSupportNeeded() || hasStencilSupport()) { + renderScene(); + } else { + GL.glClear(GL.GL_COLOR_BUFFER_BIT); + } + } + + /** + * Renders the scene for this tab. Subclasses must override. + */ + abstract void renderScene(); + + /** + * Returns whether this tab requires stencil support in order to display + * properly. Subclasses may wish to override this method. + * + * @return boolean + */ + boolean isStencilSupportNeeded() { + return false; + } + + /** + * Sets this rendering context to be current. + */ + void setCurrent() { + context.setCurrent(); + } + + /** + * Sets up the viewing area for the OpenGL screen. The default + * behavior is to use a perspective view, but there also exist frustrum + * and ortho views. Subclasses may wish to override this method. + */ + void setupViewingArea() { + Rectangle rect = glCanvas.getClientArea(); + int width = rect.width; + int height = rect.height; + height = Math.max(height, 1); + GL.glViewport(0, 0, width, height); + GL.glMatrixMode(GL.GL_PROJECTION); // select the projection matrix + GL.glLoadIdentity(); // reset the projection matrix + float fAspect = (float) width / (float) height; + GLU.gluPerspective(45.0f, fAspect, 0.5f, 400.0f); + GL.glMatrixMode(GL.GL_MODELVIEW); // select the modelview matrix + GL.glLoadIdentity(); + } + + /** + * Swaps the buffers. + */ + void swap() { + context.swapBuffers(); + } +} diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/OutlineTextTab.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/OutlineTextTab.java new file mode 100644 index 0000000000..0742f0056d --- /dev/null +++ b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/OutlineTextTab.java @@ -0,0 +1,251 @@ +/******************************************************************************* + * 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.examples; + + +import org.eclipse.swt.*; +import org.eclipse.swt.graphics.*; +import org.eclipse.swt.layout.*; +import org.eclipse.swt.opengl.*; +import org.eclipse.swt.widgets.*; + +class OutlineTextTab extends OpenGLTab { + private Text messageText; + private FontData fontData; + private float[] textColor = { 1.0f, 0.0f, 0.0f }; + private boolean fill = true; + private float extrude = 0.0f; + private float xPos = 0.0f, yPos = 0.0f, zPos = -10.0f; + private float xRot = 0.0f; + private int listIndexBase; + private final static int LIST_INDEX_SIZE = 256; + private final static int DEFAULT_FONT_SIZE = 24; + private final static String DEFAULT_FONT_NAME = "Arial"; + private final static int SLEEP_LENGTH = 50; + + /** + * @see OpenGLTab#createControls(Composite) + */ + void createControls(final Composite composite) { + if (!SWT.getPlatform().startsWith("win32")) { + new Label(composite, SWT.NONE).setText("This tab requires win32."); + return; + } + + Group movementGroup = new Group(composite, SWT.NONE); + movementGroup.setText("Translation"); + movementGroup.setLayout(new GridLayout(2, false)); + + new Label(movementGroup, SWT.NONE).setText("X:"); + final Slider xMove = new Slider(movementGroup, SWT.NONE); + xMove.setIncrement(1); + xMove.setMaximum(22); + xMove.setMinimum(0); + xMove.setThumb(2); + xMove.setPageIncrement(2); + xMove.setSelection(10); + xMove.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + xPos = xMove.getSelection() - 10; + } + }); + + new Label(movementGroup, SWT.NONE).setText("Y:"); + final Slider yMove = new Slider(movementGroup, SWT.NONE); + yMove.setIncrement(1); + yMove.setMaximum(22); + yMove.setMinimum(0); + yMove.setThumb(2); + yMove.setPageIncrement(2); + yMove.setSelection(10); + yMove.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + yPos = yMove.getSelection() - 10; + } + }); + + new Label(movementGroup, SWT.NONE).setText("Z:"); + final Slider zMove = new Slider(movementGroup, SWT.NONE); + zMove.setIncrement(1); + zMove.setMaximum(22); + zMove.setMinimum(0); + zMove.setThumb(2); + zMove.setPageIncrement(2); + zMove.setSelection(10); + zMove.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + zPos = zMove.getSelection() - 20; + } + }); + + Composite textGroup = new Composite(composite,SWT.NONE); + GridLayout layout = new GridLayout(2,false); + layout.marginHeight = 0; + layout.marginWidth = 0; + textGroup.setLayout(layout); + textGroup.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); + + new Label(textGroup, SWT.NONE).setText("Text:"); + messageText = new Text(textGroup, SWT.BORDER); + GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); + data.grabExcessHorizontalSpace = true; + messageText.setLayoutData(data); + messageText.setText("OpenGL - SWT"); + + new Label(composite, SWT.NONE).setText("Extrude:"); + final Slider extrudeSlider = new Slider(composite, SWT.NONE); + extrudeSlider.setIncrement(1); + extrudeSlider.setMaximum(22); + extrudeSlider.setMinimum(0); + extrudeSlider.setThumb(2); + extrudeSlider.setPageIncrement(2); + extrudeSlider.setSelection(0); + extrudeSlider.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + extrude = (float) extrudeSlider.getSelection() / 10; + getContext().loadOutlineFont( + fontData, extrudeSlider.getDisplay(), + listIndexBase, 0, 255, 0.0f, extrude, + fill ? GL.GL_POLYGON : GL.GL_LINE, + null); + } + }); + + final Button fontSelectButton = new Button(composite, SWT.NONE); + fontSelectButton.setText("Set Font"); + final ColorSelectionGroup colorGroup = + new ColorSelectionGroup(composite, SWT.NONE); + colorGroup.setText("Text color"); + colorGroup.addColorSelectionListener(new IColorSelectionListener() { + public void handleColorSelection(RGB rgb) { + GL.glColor3ub((byte) rgb.red, (byte) rgb.green, (byte) rgb.blue); + } + }); + + fontSelectButton.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + FontDialog fontDialog = new FontDialog(fontSelectButton.getShell()); + fontDialog.setText("Choose Font Options"); + double[] currentColor = new double[4]; + GL.glGetDoublev(GL.GL_CURRENT_COLOR, currentColor); + fontDialog.setRGB( + new RGB( + (int) currentColor[0] * 255, + (int) currentColor[1] * 255, + (int) currentColor[2] * 255)); + fontDialog.setFontData(fontData); + FontData result = fontDialog.open(); + if (result != null) { + fontData = result; + RGB rgb = fontDialog.getRGB(); + GL.glColor3ub((byte) rgb.red, (byte) rgb.green, (byte) rgb.blue); + colorGroup.setRGB(rgb); + getContext().loadOutlineFont( + fontData, fontSelectButton.getDisplay(), + listIndexBase, 0, 255, 0.0f, extrude, + fill ? GL.GL_POLYGON : GL.GL_LINE, + null); + } + } + }); + + final Button fillButton = new Button(composite, SWT.CHECK); + fillButton.setText("Fill"); + fillButton.setSelection(true); + fillButton.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + fill = fillButton.getSelection(); + getContext().loadOutlineFont( + fontData, fillButton.getDisplay(), + listIndexBase, 0, 255, 0.0f, extrude, + fill ? GL.GL_POLYGON : GL.GL_LINE, + null); + } + }); + } + + /** + * @see OpenGLTab#dispose() + */ + void dispose() { + super.dispose(); + GL.glDeleteLists(listIndexBase, LIST_INDEX_SIZE); + } + + /** + * Draws the text to the screen + * + * @param string the text to draw + */ + void drawText(String string) { + char[] stringChars = string.toCharArray(); + int[] text = new int[stringChars.length]; + for (int i = 0; i < text.length; i++) { + text[i] = (int) stringChars[i]; + } + GL.glPushAttrib(GL.GL_LIST_BIT); + GL.glListBase(listIndexBase); + GL.glCallLists(text.length, GL.GL_UNSIGNED_INT, text); + GL.glPopAttrib(); + } + + /** + * @see OpenGLTab#getSleepLength() + */ + int getSleepLength() { + return SLEEP_LENGTH; + } + + /** + * @see OpenGLTab#getTabText() + */ + String getTabText() { + return "Outline Text"; + } + + /** + * @see OpenGLTab#init() + */ + void init() { + GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); + GL.glColor3fv(textColor); + GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); + GL.glEnable(GL.GL_DEPTH_TEST); + GL.glEnable(GL.GL_BLEND); + // build the initial font + listIndexBase = GL.glGenLists(LIST_INDEX_SIZE); + fontData = new FontData(); + fontData.setHeight(DEFAULT_FONT_SIZE); + fontData.setName(DEFAULT_FONT_NAME); + getContext().loadOutlineFont( + fontData, getGlCanvas().getDisplay(), + listIndexBase, 0, 255, 0f, extrude, + fill ? GL.GL_POLYGON : GL.GL_LINE, + null); + } + + /** + * @see OpenGLTab#renderScene() + */ + void renderScene() { + GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); + GL.glLoadIdentity(); + GL.glTranslatef(xPos, yPos, zPos); + GL.glRotatef(xRot, 1.0f, 0.0f, 0.0f); // rotate on X axis + // use GL.glScalef to change size since outline fonts + // don't support size + float size = (float) fontData.getHeight() / 24; + GL.glScalef(size, size, 1.0f); + // draw the text, assuming that we're running on win32 + if (messageText != null) drawText(messageText.getText()); + xRot += 1.2f; + } +} diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/ReflectionTab.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/ReflectionTab.java new file mode 100644 index 0000000000..883bda00f6 --- /dev/null +++ b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/ReflectionTab.java @@ -0,0 +1,556 @@ +/******************************************************************************* + * 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.examples; + + +import org.eclipse.swt.*; +import org.eclipse.swt.layout.*; +import org.eclipse.swt.opengl.*; +import org.eclipse.swt.widgets.*; + +class ReflectionTab extends OpenGLTab { + private float ballY = 0.0f; + private float ballZ = 1.6666666f; + private float ballX = 0.0f; + private float ballRot = 0.0f; + private float cubeX = 2.5f; + private float cubeY = -2.0f; + private float cubeZ = 2.0f; + private float xPos = 0.0f; + private float yPos = 0.0f; + private float zPos = 22.0f; + private float ballRotSpeed = 0.0f; + private int quadratic; + private int[] textures = new int[3]; + private final static int + LIST_INDEX_BALL = 1,LIST_INDEX_BOX = 2, + LIST_INDEX_MIRROR = 3, LIST_INDEX_ROOM = 4; + private final static int + TEXTURE_INDEX_BALL = 0, TEXTURE_INDEX_FLOOR = 1, + TEXTURE_INDEX_BOX = 2; + private final static String[] IMAGES = { + "images/Ball.jpg", "images/Floor.jpg", "images/Box.bmp" }; + private final static int SLEEP_LENGTH = 50; + + /** + * Draws the ball + */ + void createBall() { + GL.glNewList(LIST_INDEX_BALL, GL.GL_COMPILE); + GL.glColor3f(1.0f, 1.0f, 1.0f); + GL.glBindTexture(GL.GL_TEXTURE_2D, textures[TEXTURE_INDEX_BALL]); + GLU.gluSphere(quadratic, 0.35f, 32, 16); + GL.glDisable(GL.GL_BLEND); + GL.glEndList(); + } + + /** + * Draws the box + */ + void createBox() { + float size = 1.0f; + GL.glNewList(LIST_INDEX_BOX, GL.GL_COMPILE); + GL.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + GL.glBindTexture(GL.GL_TEXTURE_2D, textures[TEXTURE_INDEX_BOX]); + GL.glBegin(GL.GL_QUADS); + // front + GL.glNormal3f(0.0f, 0.0f, 1.0f); + GL.glTexCoord2f(0.0f, 0.0f); + GL.glVertex3f(-size, -size, size); + GL.glTexCoord2f(1.0f, 0.0f); + GL.glVertex3f(size, -size, size); + GL.glTexCoord2f(1.0f, 1.0f); + GL.glVertex3f(size, size, size); + GL.glTexCoord2f(0.0f, 1.0f); + GL.glVertex3f(-size, size, size); + // back + GL.glNormal3f(0.0f, 0.0f, -1.0f); + GL.glTexCoord2f(0.0f, 0.0f); + GL.glVertex3f(-size, -size, -size); + GL.glTexCoord2f(1.0f, 0.0f); + GL.glVertex3f(size, -size, -size); + GL.glTexCoord2f(1.0f, 1.0f); + GL.glVertex3f(size, size, -size); + GL.glTexCoord2f(0.0f, 1.0f); + GL.glVertex3f(-size, size, -size); + // left + GL.glNormal3f(-1.0f, 0.0f, 0.0f); + GL.glTexCoord2f(0.0f, 0.0f); + GL.glVertex3f(-size, -size, -size); + GL.glTexCoord2f(1.0f, 0.0f); + GL.glVertex3f(-size, -size, size); + GL.glTexCoord2f(1.0f, 1.0f); + GL.glVertex3f(-size, size, size); + GL.glTexCoord2f(0.0f, 1.0f); + GL.glVertex3f(-size, size, -size); + // right + GL.glNormal3f(1.0f, 0.0f, 0.0f); + GL.glTexCoord2f(0.0f, 0.0f); + GL.glVertex3f(size, -size, -size); + GL.glTexCoord2f(1.0f, 0.0f); + GL.glVertex3f(size, -size, size); + GL.glTexCoord2f(1.0f, 1.0f); + GL.glVertex3f(size, size, size); + GL.glTexCoord2f(0.0f, 1.0f); + GL.glVertex3f(size, size, -size); + // top + GL.glNormal3f(0.0f, 1.0f, 0.0f); + GL.glTexCoord2f(0.0f, 0.0f); + GL.glVertex3f(size, size, -size); + GL.glTexCoord2f(1.0f, 0.0f); + GL.glVertex3f(-size, size, -size); + GL.glTexCoord2f(1.0f, 1.0f); + GL.glVertex3f(-size, size, size); + GL.glTexCoord2f(0.0f, 1.0f); + GL.glVertex3f(size, size, size); + // bottom + GL.glNormal3f(0.0f, -1.0f, 0.0f); + GL.glTexCoord2f(0.0f, 0.0f); + GL.glVertex3f(size, -size, -size); + GL.glTexCoord2f(1.0f, 0.0f); + GL.glVertex3f(-size, -size, -size); + GL.glTexCoord2f(1.0f, 1.0f); + GL.glVertex3f(-size, -size, size); + GL.glTexCoord2f(0.0f, 1.0f); + GL.glVertex3f(size, -size, size); + GL.glEnd(); + GL.glEndList(); + } + + /** + * @see OpenGLTab#createControls(Composite) + */ + void createControls(Composite composite) { + Group ballTranslation = new Group(composite, SWT.NONE); + ballTranslation.setLayout(new GridLayout(2, false)); + ballTranslation.setText("Ball Translation"); + + new Label(ballTranslation, SWT.NONE).setText("X:"); + final Slider ballXPosSlider = new Slider(ballTranslation, SWT.NONE); + ballXPosSlider.setIncrement(1); + ballXPosSlider.setMaximum(38); + ballXPosSlider.setMinimum(0); + ballXPosSlider.setThumb(2); + ballXPosSlider.setPageIncrement(2); + ballXPosSlider.setSelection(18); + ballXPosSlider.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + ballX = (float) (ballXPosSlider.getSelection() - 18) / 5; + } + }); + + new Label(ballTranslation, SWT.NONE).setText("Y:"); + final Slider ballYPosSlider = new Slider(ballTranslation, SWT.NONE); + ballYPosSlider.setIncrement(1); + ballYPosSlider.setMaximum(38); + ballYPosSlider.setMinimum(0); + ballYPosSlider.setThumb(2); + ballYPosSlider.setPageIncrement(2); + ballYPosSlider.setSelection(18); + ballYPosSlider.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + ballY = (float) (ballYPosSlider.getSelection() - 18) / 5; + } + }); + + new Label(ballTranslation, SWT.NONE).setText("Z:"); + final Slider ballZPosSlider = new Slider(ballTranslation, SWT.NONE); + ballZPosSlider.setIncrement(1); + ballZPosSlider.setMaximum(24); + ballZPosSlider.setMinimum(0); + ballZPosSlider.setThumb(1); + ballZPosSlider.setPageIncrement(2); + ballZPosSlider.setSelection(4); + ballZPosSlider.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + ballZ = (float) (ballZPosSlider.getSelection() + 1) / 3; + } + }); + + Group cubeTranslation = new Group(composite, SWT.NONE); + cubeTranslation.setLayout(new GridLayout(2, false)); + cubeTranslation.setText("Cube Translation"); + + new Label(cubeTranslation, SWT.NONE).setText("X:"); + final Slider cubeXPosSlider = new Slider(cubeTranslation, SWT.NONE); + cubeXPosSlider.setIncrement(1); + cubeXPosSlider.setMaximum(14); + cubeXPosSlider.setMinimum(0); + cubeXPosSlider.setThumb(2); + cubeXPosSlider.setPageIncrement(2); + cubeXPosSlider.setSelection(11); + cubeXPosSlider.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + cubeX = (float) (cubeXPosSlider.getSelection() - 6) / 2; + } + }); + + new Label(cubeTranslation, SWT.NONE).setText("Y:"); + final Slider cubeYPosSlider = new Slider(cubeTranslation, SWT.NONE); + cubeYPosSlider.setIncrement(1); + cubeYPosSlider.setMaximum(14); + cubeYPosSlider.setMinimum(0); + cubeYPosSlider.setThumb(2); + cubeYPosSlider.setPageIncrement(2); + cubeYPosSlider.setSelection(2); + cubeYPosSlider.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + cubeY = (float) (cubeYPosSlider.getSelection() - 6) / 2; + } + }); + + new Label(cubeTranslation, SWT.NONE).setText("Z:"); + final Slider cubeZPosSlider = new Slider(cubeTranslation, SWT.NONE); + cubeZPosSlider.setIncrement(1); + cubeZPosSlider.setMaximum(10); + cubeZPosSlider.setMinimum(1); + cubeZPosSlider.setThumb(1); + cubeZPosSlider.setPageIncrement(2); + cubeZPosSlider.setSelection(2); + cubeZPosSlider.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + cubeZ = (float) (cubeZPosSlider.getSelection() + 2) / 2; + } + }); + + Group movementGroup = new Group(composite, SWT.NONE); + movementGroup.setLayout(new GridLayout(2, false)); + movementGroup.setText("Room Rotation"); + + new Label(movementGroup, SWT.NONE).setText("X:"); + final Slider screenXPosSlider = new Slider(movementGroup, SWT.NONE); + screenXPosSlider.setIncrement(1); + screenXPosSlider.setMaximum(42); + screenXPosSlider.setMinimum(0); + screenXPosSlider.setThumb(2); + screenXPosSlider.setPageIncrement(2); + screenXPosSlider.setSelection(20); + screenXPosSlider.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + xPos = screenXPosSlider.getSelection() - 20; + } + }); + + new Label(movementGroup, SWT.NONE).setText("Y:"); + final Slider screenYPosSlider = new Slider(movementGroup, SWT.NONE); + screenYPosSlider.setIncrement(1); + screenYPosSlider.setMaximum(42); + screenYPosSlider.setMinimum(0); + screenYPosSlider.setThumb(2); + screenYPosSlider.setPageIncrement(2); + screenYPosSlider.setSelection(20); + screenYPosSlider.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + yPos = screenYPosSlider.getSelection() - 20; + } + }); + + new Label(movementGroup, SWT.NONE).setText("Z:"); + final Slider screenZPosSlider = new Slider(movementGroup, SWT.NONE); + screenZPosSlider.setIncrement(1); + screenZPosSlider.setMaximum(42); + screenZPosSlider.setMinimum(0); + screenZPosSlider.setThumb(2); + screenZPosSlider.setPageIncrement(2); + screenZPosSlider.setSelection(20); + screenZPosSlider.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + zPos = screenZPosSlider.getSelection() + 2; + } + }); + + new Label(composite, SWT.NONE).setText("Ball Rotation Speed:"); + final Slider ballRotSlider = new Slider(composite, SWT.NONE); + ballRotSlider.setIncrement(1); + ballRotSlider.setMaximum(22); + ballRotSlider.setMinimum(0); + ballRotSlider.setThumb(2); + ballRotSlider.setPageIncrement(2); + ballRotSlider.setSelection(0); + ballRotSlider.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + ballRotSpeed = ballRotSlider.getSelection(); + } + }); + } + + /** + * Draws the mirror + */ + void createMirror() { + GL.glNewList(LIST_INDEX_MIRROR, GL.GL_COMPILE); + GL.glDisable(GL.GL_TEXTURE_2D); + GL.glColor4f(1.0f, 1.0f, 1.0f, 0.4f); + GL.glNormal3f(0.0f, 0.0f, 1.0f); + GL.glBegin(GL.GL_QUADS); + GL.glTexCoord2f(0.0f, 0.0f); + GL.glVertex3f(-2.0f, 2.0f, 0.0f); + GL.glTexCoord2f(1.0f, 0.0f); + GL.glVertex3f(-2.0f, -2.0f, 0.0f); + GL.glTexCoord2f(1.0f, 1.0f); + GL.glVertex3f(2.0f, -2.0f, 0.0f); + GL.glTexCoord2f(0.0f, 1.0f); + GL.glVertex3f(2.0f, 2.0f, 0.0f); + GL.glEnd(); + GL.glEnable(GL.GL_TEXTURE_2D); + GL.glEndList(); + } + + /** + * Draws the room + */ + void createRoom() { + GL.glNewList(LIST_INDEX_ROOM, GL.GL_COMPILE); + GL.glDisable(GL.GL_TEXTURE_2D); + GL.glBegin(GL.GL_QUADS); + // left wall + GL.glNormal3f(1.0f, 0.0f, 0.0f); + GL.glVertex3f(-4.0f, 4.0f, 0.0f); + GL.glVertex3f(-4.0f, 4.0f, 6.0f); + GL.glVertex3f(-4.0f, -4.0f, 6.0f); + GL.glVertex3f(-4.0f, -4.0f, 0.0f); + // right wall + GL.glNormal3f(-1.0f, 0.0f, 01.0f); + GL.glVertex3f(4.0f, 4.0f, 0.0f); + GL.glVertex3f(4.0f, 4.0f, 6.0f); + GL.glVertex3f(4.0f, -4.0f, 6.0f); + GL.glVertex3f(4.0f, -4.0f, 0.0f); + // ceiling + GL.glNormal3f(0.0f, -1.0f, 0.0f); + GL.glColor3f(0.9f, 0.9f, 0.9f); + GL.glVertex3f(-4.0f, 4.0f, 0.0f); + GL.glVertex3f(-4.0f, 4.0f, 6.0f); + GL.glVertex3f(4.0f, 4.0f, 6.0f); + GL.glVertex3f(4.0f, 4.0f, 0.0f); + GL.glEnd(); + // back wall with triangle strip to illiminate t-intersections + GL.glBegin(GL.GL_TRIANGLE_STRIP); + GL.glNormal3f(0.0f, 0.0f, 1.0f); + GL.glVertex3d(-4.0, -4.0, 0.0); + GL.glVertex3d(-2.2, -4.0, 0.0); + GL.glVertex3d(-2.2, -2.2, 0.0); + GL.glVertex3d(2.2, -4.0, 0.0); + GL.glVertex3d(2.2, -2.2, 0.0); + GL.glVertex3d(4.0, -4.0, 0.0); + GL.glVertex3d(2.2, -2.2, 0.0); + GL.glVertex3d(4.0, -2.2, 0.0); + GL.glVertex3d(2.2, 2.2, 0.0); + GL.glVertex3d(4.0, 2.2, 0.0); + GL.glVertex3d(2.2, 2.2, 0.0); + GL.glVertex3d(4.0, 4.0, 0.0); + GL.glVertex3d(2.2, 2.2, 0.0); + GL.glVertex3d(2.2, 4.0, 0.0); + GL.glVertex3d(-2.2, 2.2, 0.0); + GL.glVertex3d(-2.2, 4.0, 0.0); + GL.glVertex3d(-4.0, 4.0, 0.0); + GL.glVertex3d(-2.2, 2.2, 0.0); + GL.glVertex3d(-4.0, 2.2, 0.0); + GL.glVertex3d(-2.2, -2.2, 0.0); + GL.glVertex3d(-4.0, -2.2, 0.0); + GL.glVertex3d(-4.0, -4.0, 0.0); + GL.glEnd(); + GL.glEnable(GL.GL_TEXTURE_2D); + // draw floor + GL.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + GL.glBindTexture(GL.GL_TEXTURE_2D, textures[TEXTURE_INDEX_FLOOR]); + GL.glNormal3f(0.0f, 1.0f, 0.0f); + GL.glBegin(GL.GL_QUADS); + // floor + GL.glTexCoord2f(0.0f, 0.0f); + GL.glVertex3f(-4.0f, -4.0f, 6.0f); + GL.glTexCoord2f(1.0f, 0.0f); + GL.glVertex3f(-4.0f, -4.0f, 0.0f); + GL.glTexCoord2f(1.0f, 1.0f); + GL.glVertex3f(4.0f, -4.0f, 0.0f); + GL.glTexCoord2f(0.0f, 1.0f); + GL.glVertex3f(4.0f, -4.0f, 6.0f); + GL.glEnd(); + // draw mirror frame + GL.glBindTexture(GL.GL_TEXTURE_2D, textures[TEXTURE_INDEX_BOX]); + GL.glNormal3f(0.0f, 0.0f, 1.0f); + GL.glBegin(GL.GL_QUADS); + // top + GL.glTexCoord2f(0.0f, 0.0f); + GL.glVertex3f(-2.2f, 2.0f, 0.0f); + GL.glTexCoord2f(1.0f, 0.0f); + GL.glVertex3f(2.2f, 2.0f, 0.0f); + GL.glTexCoord2f(1.0f, 1.0f); + GL.glVertex3f(2.2f, 2.2f, 0.0f); + GL.glTexCoord2f(0.0f, 1.0f); + GL.glVertex3f(-2.2f, 2.2f, 0.0f); + // right + GL.glTexCoord2f(0.0f, 0.0f); + GL.glVertex3f(2.0f, 2.0f, 0.0f); + GL.glTexCoord2f(1.0f, 0.0f); + GL.glVertex3f(2.0f, -2.0f, 0.0f); + GL.glTexCoord2f(1.0f, 1.0f); + GL.glVertex3f(2.2f, -2.0f, 0.0f); + GL.glTexCoord2f(0.0f, 1.0f); + GL.glVertex3f(2.2f, 2.0f, 0.0f); + // bottom + GL.glTexCoord2f(0.0f, 0.0f); + GL.glVertex3f(-2.2f, -2.0f, 0.0f); + GL.glTexCoord2f(1.0f, 0.0f); + GL.glVertex3f(2.2f, -2.0f, 0.0f); + GL.glTexCoord2f(1.0f, 1.0f); + GL.glVertex3f(2.2f, -2.2f, 0.0f); + GL.glTexCoord2f(0.0f, 1.0f); + GL.glVertex3f(-2.2f, -2.2f, 0.0f); + // left + GL.glTexCoord2f(0.0f, 0.0f); + GL.glVertex3f(-2.0f, 2.0f, 0.0f); + GL.glTexCoord2f(1.0f, 0.0f); + GL.glVertex3f(-2.0f, -2.0f, 0.0f); + GL.glTexCoord2f(1.0f, 1.0f); + GL.glVertex3f(-2.2f, -2.0f, 0.0f); + GL.glTexCoord2f(0.0f, 1.0f); + GL.glVertex3f(-2.2f, 2.0f, 0.0f); + GL.glEnd(); + GL.glEndList(); + } + + /** + * @see OpenGLTab#dispose() + */ + void dispose() { + super.dispose(); + GLU.gluDeleteQuadric(quadratic); + GL.glDeleteLists(LIST_INDEX_BALL, 1); + GL.glDeleteLists(LIST_INDEX_BOX, 1); + GL.glDeleteLists(LIST_INDEX_MIRROR, 1); + GL.glDeleteLists(LIST_INDEX_ROOM, 1); + } + + /** + * @see OpenGLTab#getSleepLength() + */ + int getSleepLength() { + return SLEEP_LENGTH; + } + + /** + * @see OpenGLTab#getTabText() + */ + String getTabText() { + return "Reflection"; + } + + /** + * @see OpenGLTab#init() + */ + void init() { + if (!hasStencilSupport()) return; + + GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); + GL.glClearDepth(1.0f); + GL.glClearStencil(0); + GL.glGenTextures(IMAGES.length, textures); + for (int i = 0; i < IMAGES.length; i++) { + loadTexture(getContext(), IMAGES[i], i, textures); + } + + GL.glShadeModel(GL.GL_SMOOTH); + quadratic = GLU.gluNewQuadric(); + GLU.gluQuadricNormals(quadratic, GL.GL_SMOOTH); + GLU.gluQuadricTexture(quadratic, true); + GL.glDepthFunc(GL.GL_LEQUAL); + GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); + GL.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST); + + // set up the lights + float[] LightAmb = { 0.7f, 0.7f, 0.7f, 1.0f }; + float[] LightDif = { 1.0f, 1.0f, 1.0f, 1.0f }; + float[] lightsAmbient = { 0.5f, 0.5f, 0.5f, 1.0f }; + GL.glLightModelfv(GL.GL_LIGHT_MODEL_AMBIENT, lightsAmbient); + GL.glLightfv(GL.GL_LIGHT0, GL.GL_AMBIENT, LightAmb); + GL.glLightfv(GL.GL_LIGHT0, GL.GL_DIFFUSE, LightDif); + + GL.glEnable(GL.GL_LIGHT0); + GL.glEnable(GL.GL_LIGHTING); + GL.glEnable(GL.GL_LINE_SMOOTH); + GL.glEnable(GL.GL_DEPTH_TEST); + GL.glEnable(GL.GL_TEXTURE_2D); + GL.glEnable(GL.GL_BLEND); + + createRoom(); + createBall(); + createBox(); + createMirror(); + } + + /** + * @see OpenGLTab#isStencilSupportNeeded + */ + boolean isStencilSupportNeeded() { + return true; + } + + /** + * @see OpenGLTab#renderScene() + */ + void renderScene() { + GL.glClear( + GL.GL_COLOR_BUFFER_BIT + | GL.GL_DEPTH_BUFFER_BIT + | GL.GL_STENCIL_BUFFER_BIT); + + GL.glLoadIdentity(); + GLU.gluLookAt(xPos, yPos, zPos, 0, 0, 0, 0, 1, 0); + // clip plane equation + double clipEquation[] = { 0.0f, 0.0f, -1.0f, 0.0f }; + float[] LightPos = { 0.0f, 2.0f, 7.0f, 1.0f }; + GL.glColorMask(false, false, false, false); + // enable stencil buffer for "marking" the mirror + GL.glEnable(GL.GL_STENCIL_TEST); + // set the stencil buffer to 1 where a polygon is drawn + GL.glStencilFunc(GL.GL_ALWAYS, 1, 1); + GL.glStencilOp(GL.GL_KEEP, GL.GL_KEEP, GL.GL_REPLACE); + GL.glDisable(GL.GL_DEPTH_TEST); + GL.glCallList(LIST_INDEX_MIRROR); + GL.glEnable(GL.GL_DEPTH_TEST); + GL.glColorMask(true, true, true, true); + GL.glStencilFunc(GL.GL_EQUAL, 1, 1); + // draw where the stencil is 1 + GL.glStencilOp(GL.GL_KEEP, GL.GL_KEEP, GL.GL_KEEP); + GL.glEnable(GL.GL_CLIP_PLANE0); + GL.glClipPlane(GL.GL_CLIP_PLANE0, clipEquation); + GL.glPushMatrix(); + GL.glScalef(1.0f, 1.0f, -1.0f); + GL.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, LightPos); + GL.glCallList(LIST_INDEX_ROOM); // reflection + GL.glPushMatrix(); + GL.glTranslatef(cubeX, cubeY, cubeZ); + GL.glCallList(LIST_INDEX_BOX); // reflection + GL.glPopMatrix(); + GL.glTranslatef(ballX, ballY, ballZ); + GL.glRotatef(ballRot, 1.0f, 0.0f, 0.0f); + GL.glCallList(LIST_INDEX_BALL); // reflection + GL.glPopMatrix(); + GL.glDisable(GL.GL_CLIP_PLANE0); + GL.glDisable(GL.GL_STENCIL_TEST); + GL.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, LightPos); + GL.glEnable(GL.GL_BLEND); + GL.glDisable(GL.GL_LIGHTING); + GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); + GL.glCallList(LIST_INDEX_MIRROR); + GL.glEnable(GL.GL_LIGHTING); + GL.glDisable(GL.GL_BLEND); + GL.glCallList(LIST_INDEX_ROOM); + GL.glPushMatrix(); + GL.glTranslatef(cubeX, cubeY, cubeZ); + GL.glCallList(LIST_INDEX_BOX); + GL.glPopMatrix(); + GL.glTranslatef(ballX, ballY, ballZ); + GL.glRotatef(ballRot, 1.0f, 0.0f, 0.0f); + GL.glCallList(LIST_INDEX_BALL); + ballRot += ballRotSpeed; + } +} diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/SelectionTab.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/SelectionTab.java new file mode 100644 index 0000000000..e4c8fa8859 --- /dev/null +++ b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/SelectionTab.java @@ -0,0 +1,57 @@ +/******************************************************************************* + * 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.examples; + + +import org.eclipse.swt.graphics.*; +import org.eclipse.swt.opengl.*; + +abstract class SelectionTab extends OpenGLTab { + private final static int BUFFER_LENGTH = 64; + + /** + * Sets the selected object. Subclasses must override this method. + */ + abstract void processPick(int[] pSelectBuff, int hits); + + /** + * Invoke processPick for the object at the specified coordinate. + */ + int processSelection(int xPos, int yPos, int pointSize) { + int[] selectBuffer = new int[BUFFER_LENGTH]; + int[] viewport = new int[4]; + // new fix for sun jre + int ptr = getContext().getSelectBufferPtr(selectBuffer); + + GL.glSelectBuffer(BUFFER_LENGTH, ptr); + GL.glGetIntegerv(GL.GL_VIEWPORT, viewport); + GL.glRenderMode(GL.GL_SELECT); + GL.glMatrixMode(GL.GL_PROJECTION); + GL.glPushMatrix(); + GL.glLoadIdentity(); + GLU.gluPickMatrix(xPos, yPos, pointSize, pointSize, viewport); + Rectangle rect = getGlCanvas().getClientArea(); + float fAspect = (float) rect.width / (float) rect.height; + GLU.gluPerspective(45.0f, fAspect, 0.5f, 600.0f); + GL.glMatrixMode(GL.GL_MODELVIEW); + GL.glInitNames(); + render(); + int hits = GL.glRenderMode(GL.GL_RENDER); + // new fix for sun jre + // must be called after render mode is switched + getContext().getSelectBuffer(ptr, selectBuffer); + if (hits != 0) processPick(selectBuffer, hits); + GL.glMatrixMode(GL.GL_PROJECTION); + GL.glPopMatrix(); + GL.glMatrixMode(GL.GL_MODELVIEW); + return hits; + } +} diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/StencilTab.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/StencilTab.java new file mode 100644 index 0000000000..be5f4a4063 --- /dev/null +++ b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/StencilTab.java @@ -0,0 +1,230 @@ +/******************************************************************************* + * 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.examples; + + +import org.eclipse.swt.*; +import org.eclipse.swt.layout.*; +import org.eclipse.swt.opengl.*; +import org.eclipse.swt.widgets.*; + +class StencilTab extends OpenGLTab { + private abstract class Shape { + private String name; + /** + * Constructor + * + * @param name the shape's name + */ + Shape(String name) { + super(); + this.name = name; + } + /** + * Draws this shape. + */ + abstract void draw(); + /** + * Returns the name. + * + * @return String + */ + String getName() { + return name; + } + } + + private Shape[] shapes = new Shape[5]; + private Shape currentShape; + private float xPos = 0, yPos = 0; + private float size = 0.45f; + private int texture; + private int quadratic; + private final static String IMAGE = "images/splash.bmp"; + private final static int SLEEP_LENGTH = 50; + + /** + * @see OpenGLTab#createControls(Composite) + */ + void createControls(Composite composite) { + Composite controls = new Composite(composite, SWT.NONE); + GridLayout layout = new GridLayout(2, false); + layout.marginHeight = 0; + layout.marginWidth = 0; + controls.setLayout(layout); + new Label(controls, SWT.NONE).setText("Object:"); + final Combo shapeCombo = new Combo(controls, SWT.READ_ONLY); + for (int i = 0; i < shapes.length; i++) { + shapeCombo.add(shapes[i].getName()); + } + shapeCombo.select(0); + shapeCombo.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + currentShape = shapes[shapeCombo.getSelectionIndex()]; + } + }); + + new Label(composite, SWT.NONE).setText("Size:"); + final Slider sizeSlider = new Slider(composite, SWT.HORIZONTAL); + sizeSlider.setValues(0, 15, 75, 5, 5, 10); + sizeSlider.setSelection(45); + sizeSlider.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + size = ((float) sizeSlider.getSelection()) / 100; + } + }); + } + + /** + * @see OpenGLTab#dispose() + */ + void dispose() { + super.dispose(); + GLU.gluDeleteQuadric(quadratic); + } + + /** + * @see OpenGLTab#getSleepLength() + */ + int getSleepLength() { + return SLEEP_LENGTH; + } + + /** + * @see OpenGLTab#getTabText() + */ + String getTabText() { + return "Stencil"; + } + + /** + * @see OpenGLTab#init() + */ + void init() { + if (!hasStencilSupport()) return; + + GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); + GL.glClearDepth(1.0f); + int[] textureOut = new int[1]; + GL.glGenTextures(1, textureOut); + loadTexture(getContext(), IMAGE, 0, textureOut); + this.texture = textureOut[0]; + quadratic = GLU.gluNewQuadric(); + GLU.gluQuadricNormals(quadratic, GLU.GLU_SMOOTH); + GL.glDepthFunc(GL.GL_LEQUAL); + GL.glEnable(GL.GL_STENCIL_TEST); + GL.glEnable(GL.GL_TEXTURE_2D); + GL.glEnable(GL.GL_DEPTH_TEST); + // create shapes + shapes[0] = new Shape("Triangle") { + public void draw() { + GL.glBegin(GL.GL_TRIANGLES); + GL.glVertex3f(0.0f, size, 0.0f); + GL.glVertex3f(-size, -size, 0.0f); + GL.glVertex3f(size, -size, 0.0f); + GL.glEnd(); + } + }; + + shapes[1] = new Shape("Disk") { + public void draw() { + GLU.gluDisk(quadratic, 0.0f, size, 32, 32); + } + }; + + shapes[2] = new Shape("Square") { + public void draw() { + GL.glRectf(-size, -size, size, size); + } + }; + + shapes[3] = new Shape("Hour Glass") { + public void draw() { + GL.glBegin(GL.GL_TRIANGLES); + GL.glVertex3f(0.0f, size, 0.0f); + GL.glVertex3f(-size, -size, 0.0f); + GL.glVertex3f(size, -size, 0.0f); + GL.glVertex3f(0.0f, -size, 0.0f); + GL.glVertex3f(size, size, 0.0f); + GL.glVertex3f(-size, size, 0.0f); + GL.glEnd(); + } + }; + + shapes[4] = new Shape("Star") { + public void draw() { + GL.glBegin(GL.GL_TRIANGLES); + GL.glVertex3f(-0.3f, 0, 0.0f); + GL.glVertex3f(2 * size - 0.3f, 0, 0.0f); + GL.glVertex3f(size - 0.3f, 2 * size * 0.85f, 0.0f); + GL.glVertex3f(2 * size - 0.3f, size, 0.0f); + GL.glVertex3f(0 - 0.3f, size, 0.0f); + GL.glVertex3f(size - 0.3f, -size * 0.85f, 0.0f); + GL.glEnd(); + } + }; + + currentShape = shapes[0]; + } + + /** + * @see OpenGLTab#isStencilSupportNeeded + */ + boolean isStencilSupportNeeded() { + return true; + } + + /** + * @see OpenGLTab#renderScene() + */ + void renderScene() { + GL.glClear( + GL.GL_COLOR_BUFFER_BIT + | GL.GL_DEPTH_BUFFER_BIT + | GL.GL_STENCIL_BUFFER_BIT); + + GL.glLoadIdentity(); + GL.glTranslatef( + (float) (1.5 * Math.cos(xPos)), + (float) (1.0 * Math.sin(yPos)), + -3.0f); + xPos += 0.15f; + yPos += 0.3f; + + GL.glColorMask(false, false, false, false); + GL.glStencilFunc(GL.GL_ALWAYS, 1, 1); + GL.glStencilOp(GL.GL_KEEP, GL.GL_KEEP, GL.GL_REPLACE); + GL.glDisable(GL.GL_DEPTH_TEST); + GL.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + + currentShape.draw(); + + GL.glEnable(GL.GL_DEPTH_TEST); + GL.glColorMask(true, true, true, true); + GL.glStencilFunc(GL.GL_EQUAL, 1, 1); + GL.glStencilOp(GL.GL_KEEP, GL.GL_KEEP, GL.GL_KEEP); + + GL.glLoadIdentity(); + // load the texture behind the stencil object + GL.glTranslatef(0.0f, 0.0f, -3.1f); + GL.glBindTexture(GL.GL_TEXTURE_2D, texture); + GL.glBegin(GL.GL_QUADS); + GL.glTexCoord2f(0.0f, 0.0f); + GL.glVertex3f(-0.85f, -0.85f, 1.0f); + GL.glTexCoord2f(1.0f, 0.0f); + GL.glVertex3f(0.85f, -0.85f, 1.0f); + GL.glTexCoord2f(1.0f, 1.0f); + GL.glVertex3f(0.85f, 0.85f, 1.0f); + GL.glTexCoord2f(0.0f, 1.0f); + GL.glVertex3f(-0.85f, 0.85f, 1.0f); + GL.glEnd(); + } +} diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/TextureTab.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/TextureTab.java new file mode 100644 index 0000000000..1375b6fdca --- /dev/null +++ b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/TextureTab.java @@ -0,0 +1,176 @@ +/******************************************************************************* + * 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.examples; + + +import org.eclipse.swt.*; +import org.eclipse.swt.layout.*; +import org.eclipse.swt.opengl.*; +import org.eclipse.swt.widgets.*; + +class TextureTab extends OpenGLTab { + private float yrot = 0, zrot = 0; + private float xPos = 0.0f, yPos = 0.0f, zPos = -20; + private int texture = 0; + private float[][][] points = new float[45][45][3]; + private final static String IMAGE = "images/splash.bmp"; + private final static int SLEEP_LENGTH = 50; + + /** + * @see OpenGLTab#createControls(Composite) + */ + void createControls(Composite composite) { + Group movementGroup = new Group(composite, SWT.NONE); + movementGroup.setText("Translation"); + movementGroup.setLayout(new GridLayout(2, false)); + + new Label(movementGroup, SWT.NONE).setText("X:"); + final Slider xMove = new Slider(movementGroup, SWT.NONE); + xMove.setIncrement(1); + xMove.setMaximum(12); + xMove.setMinimum(0); + xMove.setThumb(2); + xMove.setPageIncrement(2); + xMove.setSelection(5); + xMove.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + xPos = xMove.getSelection() - 5; + } + }); + + new Label(movementGroup, SWT.NONE).setText("Y:"); + final Slider yMove = new Slider(movementGroup, SWT.NONE); + yMove.setIncrement(1); + yMove.setMaximum(12); + yMove.setMinimum(0); + yMove.setThumb(2); + yMove.setPageIncrement(2); + yMove.setSelection(5); + yMove.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + yPos = yMove.getSelection() - 5; + } + }); + + new Label(movementGroup, SWT.NONE).setText("Z:"); + final Slider zMove = new Slider(movementGroup, SWT.NONE); + zMove.setIncrement(1); + zMove.setMaximum(24); + zMove.setMinimum(0); + zMove.setThumb(4); + zMove.setPageIncrement(2); + zMove.setSelection(10); + zMove.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + zPos = zMove.getSelection() - 30; + } + }); + } + + /** + * @see OpenGLTab#getSleepLength() + */ + int getSleepLength() { + return SLEEP_LENGTH; + } + + /** + * @see OpenGLTab#getTabText() + */ + String getTabText() { + return "Texture"; + } + + /** + * @see OpenGLTab#init() + */ + void init() { + //GL.glClearColor(0.0f, 0.0f, 0.3f, 1.0f); + GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); + GL.glClearDepth(1.0f); + int[] textureOut = new int[1]; + GL.glGenTextures(1, textureOut); + loadTexture(getContext(), IMAGE, 0, textureOut); + texture = textureOut[0]; + GL.glDepthFunc(GL.GL_LEQUAL); + GL.glPolygonMode(GL.GL_BACK, GL.GL_FILL); + GL.glPolygonMode(GL.GL_FRONT, GL.GL_LINE); + GL.glEnable(GL.GL_LIST_MODE); + GL.glEnable(GL.GL_TEXTURE_2D); + GL.glEnable(GL.GL_DEPTH_TEST); + // initialize points + for (int x = 0; x < 45; x++) { + for (int y = 0; y < 45; y++) { + points[x][y][0] = x / 5.0f - 4.5f; + points[x][y][1] = y / 5.0f - 4.5f; + points[x][y][2] = + (float) Math.sin( + (((x / 5.0f) * 40.0f) / 360.0f) * Math.PI * 2); + } + } + } + + /** + * @see OpenGLTab#renderScene() + */ + void renderScene() { + GL.glClear( + GL.GL_COLOR_BUFFER_BIT + | GL.GL_DEPTH_BUFFER_BIT + | GL.GL_STENCIL_BUFFER_BIT); + GL.glLoadIdentity(); + GL.glTranslatef(xPos, yPos, zPos); + GL.glRotatef(yrot, 0.0f, 1.0f, 0.0f); + GL.glRotatef(zrot, 0.0f, 0.0f, 1.0f); + GL.glBindTexture(GL.GL_TEXTURE_2D, texture); + + GL.glBegin(GL.GL_QUADS); + for (int x = 0; x < 44; x++) { + for (int y = 0; y < 44; y++) { + float fx = x / 44.0f; + float fy = y / 44.0f; + float fxb = (x + 1) / 44.0f; + float fyb = (y + 1) / 44.0f; + GL.glTexCoord2f(fx, fy); + GL.glVertex3f( + points[x][y][0], + points[x][y][1], + points[x][y][2]); + GL.glTexCoord2f(fx, fyb); + GL.glVertex3f( + points[x][y + 1][0], + points[x][y + 1][1], + points[x][y + 1][2]); + GL.glTexCoord2f(fxb, fyb); + GL.glVertex3f( + points[x + 1][y + 1][0], + points[x + 1][y + 1][1], + points[x + 1][y + 1][2]); + GL.glTexCoord2f(fxb, fy); + GL.glVertex3f( + points[x + 1][y][0], + points[x + 1][y][1], + points[x + 1][y][2]); + } + } + GL.glEnd(); + // perform wave motion + for (int y = 0; y < 45; y++) { + float hold = points[0][y][2]; + for (int x = 0; x < 44; x++) { + points[x][y][2] = points[x + 1][y][2]; + } + points[44][y][2] = hold; + } + yrot += 0.9f; + zrot += 0.6f; + } +}
\ No newline at end of file diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/TransparencyTab.java b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/TransparencyTab.java new file mode 100644 index 0000000000..11f39fbe63 --- /dev/null +++ b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/TransparencyTab.java @@ -0,0 +1,197 @@ +/******************************************************************************* + * 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.examples; + + +import org.eclipse.swt.*; +import org.eclipse.swt.events.*; +import org.eclipse.swt.graphics.*; +import org.eclipse.swt.layout.*; +import org.eclipse.swt.opengl.*; +import org.eclipse.swt.widgets.*; + +class TransparencyTab extends SelectionTab { + private float[] alphas = { 0.3f, 0.5f, 1.0f }; + private int quadratic; + private int currentSelection = 1; + private final static int + INDEX_TRIANGLE = 1, INDEX_SPHERE = 2, INDEX_DISK = 3; + private final static String[] OBJECTS = {"Triangle", "Sphere", "Disk" }; + + /** + * @see OpenGLTab#createControls(Composite) + */ + void createControls(Composite composite) { + Composite objectGroup = new Composite(composite, SWT.NONE); + GridLayout layout = new GridLayout(2, false); + layout.marginHeight = 0; + layout.marginWidth = 0; + objectGroup.setLayout(layout); + objectGroup.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); + + new Label(objectGroup, SWT.NONE).setText("Object:"); + final Combo objectCombo = new Combo(objectGroup, SWT.READ_ONLY); + GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); + data.grabExcessHorizontalSpace = true; + objectCombo.setLayoutData(data); + objectCombo.setItems(OBJECTS); + objectCombo.select(0); + + new Label(composite, SWT.NONE).setText("Transparency:"); + final Slider transparencySlider = new Slider(composite, SWT.HORIZONTAL); + transparencySlider.setValues(0, 0, 11, 1, 1, 2); + transparencySlider.setSelection(7); + transparencySlider.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + float alpha = transparencySlider.getSelection(); + alpha = 1.0f - alpha / 10; + alphas[currentSelection - 1] = alpha; + } + }); + objectCombo.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + currentSelection = objectCombo.getSelectionIndex() + 1; + transparencySlider.setSelection( + (int) ((1.0f - alphas[currentSelection - 1]) * 10)); + } + }); + + final Canvas glCanvas = getGlCanvas(); + glCanvas.addMouseListener(new MouseAdapter() { + public void mouseUp(MouseEvent e) { + Rectangle rect = glCanvas.getClientArea(); + e.y = rect.height - e.y; + if (e.button == 1) { + processSelection(e.x, e.y, 2); + transparencySlider.setSelection( + (int) ((1.0f - alphas[currentSelection - 1]) * 10)); + objectCombo.select(currentSelection - 1); + } + } + }); + } + + /** + * @see OpenGLTab#dispose() + */ + void dispose() { + super.dispose(); + GLU.gluDeleteQuadric(quadratic); + GL.glDeleteLists(INDEX_DISK, 1); + GL.glDeleteLists(INDEX_SPHERE, 1); + GL.glDeleteLists(INDEX_TRIANGLE, 1); + } + + /** + * @see OpenGLTab#getTabText() + */ + String getTabText() { + return "Transparency"; + } + + /** + * @see OpenGLTab#init() + */ + void init() { + GL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); + GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA); + quadratic = GLU.gluNewQuadric(); + GLU.gluQuadricNormals(quadratic, GLU.GLU_SMOOTH); + GL.glEnable(GL.GL_CULL_FACE); + GL.glEnable(GL.GL_DEPTH_TEST); + GL.glEnable(GL.GL_BLEND); + // create display lists + GL.glNewList(INDEX_SPHERE, GL.GL_COMPILE); + GLU.gluQuadricDrawStyle(quadratic, GLU.GLU_FILL); + GLU.gluSphere(quadratic, 1.5, 32, 32); + GL.glEndList(); + GL.glNewList(INDEX_DISK, GL.GL_COMPILE); + GLU.gluQuadricDrawStyle(quadratic, GLU.GLU_FILL); + GLU.gluDisk(quadratic, 1.0, 3, 32, 32); + GL.glEndList(); + GL.glNewList(INDEX_TRIANGLE, GL.GL_COMPILE); + GL.glBegin(GL.GL_TRIANGLES); + GL.glVertex3f(0.0f, 2.0f, 0.0f); + GL.glVertex3f(-2.0f, -2.0f, 2.0f); + GL.glVertex3f(2.0f, -2.0f, 2.0f); + GL.glEnd(); + GL.glEndList(); + } + + /** + * @see SelectionTab.processPick (int[], int) + */ + void processPick(int[] pSelectBuff, int hits) { + int count, zDepth; + int tempSelection = pSelectBuff[3]; + zDepth = pSelectBuff[2]; + // pick object with largest z value + for (int i = 4; i <= 4 * (hits - 1); i = i + 4) { + if (zDepth > pSelectBuff[i + 2]) { + zDepth = pSelectBuff[i + 2]; + tempSelection = pSelectBuff[i + 3]; + } + } + if (tempSelection > 0) currentSelection = tempSelection; + } + + /** + * @see OpenGLTab#renderScene() + */ + void renderScene() { + // draw items with transparent qualities in reverse Z order + GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); + GL.glLoadIdentity(); + GL.glTranslatef(0.0f, 0.0f, -14.0f); + GL.glPushName(0); + + // draw disk + GL.glPushMatrix(); + GL.glTranslatef(-1.0f, 0.0f, 1.0f); + GL.glColor4f(0.0f, 1.0f, 0.0f, alphas[2]); + GL.glLoadName(INDEX_DISK); + GL.glCallList(INDEX_DISK); + if (currentSelection == INDEX_DISK) { + GL.glColor3f(1.0f, 0.0f, 0.0f); + GLU.gluQuadricDrawStyle(quadratic, GLU.GLU_LINE); + GLU.gluDisk(quadratic, 0.98, 3.02, 32, 32); + } + GL.glPopMatrix(); + + // draw triangle + GL.glTranslatef(0.0f, 0.0f, +3.0f); + GL.glLoadName(INDEX_TRIANGLE); + GL.glColor4f(1.0f, 0.0f, 0.0f, alphas[0]); + GL.glCallList(INDEX_TRIANGLE); + GL.glPointSize(5.0f); + if (currentSelection == INDEX_TRIANGLE) { + GL.glBegin(GL.GL_POINTS); + GL.glColor3f(1.0f, 0.0f, 0.0f); + GL.glVertex3f(0.0f, 2.0f, 0.0f); + GL.glVertex3f(-2.0f, -2.0f, 2.0f); + GL.glVertex3f(2.0f, -2.0f, 2.0f); + GL.glEnd(); + } + + // draw sphere + GL.glPushMatrix(); + GL.glTranslatef(1.0f, 0.0f, +3.0f); + GL.glColor4f(0.0f, 0.0f, 1.0f, alphas[1]); + GL.glLoadName(INDEX_SPHERE); + GL.glCallList(INDEX_SPHERE); + if (currentSelection == INDEX_SPHERE) { + GL.glColor3f(1.0f, 0.0f, 0.0f); + GLU.gluQuadricDrawStyle(quadratic, GLU.GLU_LINE); + GLU.gluSphere(quadratic, 1.51, 8, 8); + } + GL.glPopMatrix(); + } +} diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/Ball.jpg b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/Ball.jpg Binary files differnew file mode 100644 index 0000000000..6890d26807 --- /dev/null +++ b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/Ball.jpg diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/Box.bmp b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/Box.bmp Binary files differnew file mode 100644 index 0000000000..5eef6630d3 --- /dev/null +++ b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/Box.bmp diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/Floor.jpg b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/Floor.jpg Binary files differnew file mode 100644 index 0000000000..4934c9c82a --- /dev/null +++ b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/Floor.jpg diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/splash.bmp b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/splash.bmp Binary files differnew file mode 100644 index 0000000000..6ec75da1a8 --- /dev/null +++ b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/splash.bmp diff --git a/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/untitled.jpg b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/untitled.jpg Binary files differnew file mode 100644 index 0000000000..f5d6aa11d5 --- /dev/null +++ b/examples/org.eclipse.swt.opengl.examples/src/org/eclipse/swt/opengl/examples/images/untitled.jpg |