diff options
author | Sven Gothel <[email protected]> | 2000-11-18 06:43:49 +0000 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2000-11-18 06:43:49 +0000 |
commit | 880653d31a8f1ff8384fdbc75b84934bceecfdb8 (patch) | |
tree | bdafb71416f176d2a4b73bf716c9dc3f13685a8b /CNativeCode/GLUCallbackJNI.c |
Initial revision
Diffstat (limited to 'CNativeCode/GLUCallbackJNI.c')
-rw-r--r-- | CNativeCode/GLUCallbackJNI.c | 639 |
1 files changed, 639 insertions, 0 deletions
diff --git a/CNativeCode/GLUCallbackJNI.c b/CNativeCode/GLUCallbackJNI.c new file mode 100644 index 0000000..ef2da51 --- /dev/null +++ b/CNativeCode/GLUCallbackJNI.c @@ -0,0 +1,639 @@ + +#include "GLCallbackHelperJNI.h" +#include "GLUCallbackJNI.h" +#include "jnitools.h" + +void LIBAPIENTRY cbf_GLU_TESS_BEGIN (GLenum type) +{ + JNIEnv * env = NULL; + jobject obj = 0; + jclass oclass=0; + jmethodID id=0; + CallbackEntry * cbe = NULL; + + cbe = FindCallbackEntry(GLU_TESS_BEGIN, GetCurrentGLContext()); + + if(cbe==NULL) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "could not find the java callback entry"); + return; + } + env = cbe->env; + obj = cbe->jobj; + + oclass = (jclass) (*env)->GetObjectClass(env, obj); + if(oclass!=0) + { + id = (*env)->GetMethodID(env,oclass,cbe->methodName,cbe->signature) ; + } + if(id==NULL) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "could not find the java callback method: %s %s", + cbe->methodName, cbe->signature); + return; + } + + (*env)->CallVoidMethod(env, obj, id, (jint)type); +} + +void LIBAPIENTRY cbf_GLU_TESS_BEGIN_DATA (GLenum type, void *udata) +{ + JNIEnv * env = NULL; + jobject obj = 0; + jclass oclass=0; + jmethodID id=0; + JavaBasicType jbt=0; + jarray arr=0; + + CallbackEntry * cbe = FindCallbackEntry(GLU_TESS_BEGIN_DATA, GetCurrentGLContext()); + + if(cbe==NULL) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "could not find the java callback entry"); + return; + } + env = cbe->env; + obj = cbe->jobj; + oclass = (jclass) (*env)->GetObjectClass(env, obj); + if(oclass!=0) + id = (*env)->GetMethodID(env,oclass,cbe->methodName,cbe->signature) ; + if(id==NULL) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "could not find the java callback method: %s %s", + cbe->methodName, cbe->signature); + return; + } + + if(cbe->argListNumber<2) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "too few arguments in registered callback function"); + return; + } + jbt = jnitoolsGetJavaBasicType(env,cbe->signature, 1, cbe->methodName); + arr = jnitoolsNativeArray2JavaArray (env, jbt, udata, cbe->arrayLen1, cbe->methodName, 2); + + if(arr!=0) + { + (*env)->CallVoidMethod(env, obj, id, (jint)type, arr); + jnitoolsReleaseJavaArray2NativeArray (env, arr, jbt, + udata, cbe->arrayLen1, cbe->methodName, 2); + } +} + +void LIBAPIENTRY cbf_GLU_TESS_EDGE_FLAG (GLboolean flag) +{ + JNIEnv * env = NULL; + jobject obj = 0; + jclass oclass=0; + jmethodID id=0; + + CallbackEntry * cbe = FindCallbackEntry(GLU_TESS_EDGE_FLAG, GetCurrentGLContext()); + + if(cbe==NULL) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "could not find the java callback entry"); + return; + } + env = cbe->env; + obj = cbe->jobj; + oclass = (jclass) (*env)->GetObjectClass(env, obj); + if(oclass!=0) + id = (*env)->GetMethodID(env,oclass,cbe->methodName,cbe->signature) ; + if(id==NULL) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "could not find the java callback method: %s %s", + cbe->methodName, cbe->signature); + return; + } + + (*env)->CallVoidMethod(env, obj, id, (jboolean)flag); +} + +void LIBAPIENTRY cbf_GLU_TESS_EDGE_FLAG_DATA (GLboolean flag, void *udata) +{ + JNIEnv * env = NULL; + jobject obj = 0; + jclass oclass=0; + jmethodID id=0; + JavaBasicType jbt=0; + jarray arr=0; + + CallbackEntry * cbe = FindCallbackEntry(GLU_TESS_EDGE_FLAG_DATA, GetCurrentGLContext()); + + if(cbe==NULL) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "could not find the java callback entry"); + return; + } + env = cbe->env; + obj = cbe->jobj; + oclass = (jclass) (*env)->GetObjectClass(env, obj); + if(oclass!=0) + id = (*env)->GetMethodID(env,oclass,cbe->methodName,cbe->signature) ; + if(id==NULL) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "could not find the java callback method: %s %s", + cbe->methodName, cbe->signature); + return; + } + + if(cbe->argListNumber<2) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "too few arguments in registered callback function"); + return; + } + jbt = jnitoolsGetJavaBasicType(env,cbe->signature, 1, cbe->methodName); + arr = jnitoolsNativeArray2JavaArray (env, jbt, udata, cbe->arrayLen1, cbe->methodName, 2); + + if(arr!=0) + { + (*env)->CallVoidMethod(env, obj, id, (jboolean)flag, arr); + jnitoolsReleaseJavaArray2NativeArray (env, arr, jbt, + udata, cbe->arrayLen1, cbe->methodName, 2); + } +} + +void LIBAPIENTRY cbf_GLU_TESS_VERTEX (void * vdata) +{ + JNIEnv * env = NULL; + jobject obj = 0; + jclass oclass=0; + jmethodID id=0; + JavaBasicType jbt=0; + jarray arr=0; + + CallbackEntry * cbe = FindCallbackEntry(GLU_TESS_VERTEX, GetCurrentGLContext()); + + if(cbe==NULL) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "could not find the java callback entry"); + return; + } + env = cbe->env; + obj = cbe->jobj; + oclass = (jclass) (*env)->GetObjectClass(env, obj); + if(oclass!=0) + id = (*env)->GetMethodID(env,oclass,cbe->methodName,cbe->signature) ; + if(id==NULL) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "could not find the java callback method: %s %s", + cbe->methodName, cbe->signature); + return; + } + + if(cbe->argListNumber<1) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "too few arguments in registered callback function"); + return; + } + jbt = jnitoolsGetJavaBasicType(env,cbe->signature, 0, cbe->methodName); + arr = jnitoolsNativeArray2JavaArray (env, jbt, vdata, cbe->arrayLen1, cbe->methodName, 1); + + if(arr!=0) + { + (*env)->CallVoidMethod(env, obj, id, arr); + jnitoolsReleaseJavaArray2NativeArray (env, arr, jbt, + vdata, cbe->arrayLen1, cbe->methodName, 1); + } +} + +void LIBAPIENTRY cbf_GLU_TESS_VERTEX_DATA (void * vdata, void * udata) +{ + JNIEnv * env = NULL; + jobject obj = 0; + jclass oclass=0; + jmethodID id=0; + JavaBasicType jbt0=0; + jarray arr0=0; + JavaBasicType jbt1=0; + jarray arr1=0; + + CallbackEntry * cbe = FindCallbackEntry(GLU_TESS_VERTEX_DATA, GetCurrentGLContext()); + + if(cbe==NULL) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "could not find the java callback entry"); + return; + } + env = cbe->env; + obj = cbe->jobj; + oclass = (jclass) (*env)->GetObjectClass(env, obj); + if(oclass!=0) + id = (*env)->GetMethodID(env,oclass,cbe->methodName,cbe->signature) ; + if(id==NULL) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "could not find the java callback method: %s %s", + cbe->methodName, cbe->signature); + return; + } + + if(cbe->argListNumber<2) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "too few arguments in registered callback function"); + return; + } + jbt0 = jnitoolsGetJavaBasicType(env,cbe->signature, 0, cbe->methodName); + arr0 = jnitoolsNativeArray2JavaArray (env, jbt0, vdata, cbe->arrayLen1, cbe->methodName, 1); + jbt1 = jnitoolsGetJavaBasicType(env,cbe->signature, 1, cbe->methodName); + arr1 = jnitoolsNativeArray2JavaArray (env, jbt1, udata, cbe->arrayLen2, cbe->methodName, 2); + + if(arr0!=0 && arr1!=0) + { + (*env)->CallVoidMethod(env, obj, id, arr0, arr1); + + jnitoolsReleaseJavaArray2NativeArray (env, arr0, jbt0, + udata, cbe->arrayLen1, cbe->methodName, 1); + jnitoolsReleaseJavaArray2NativeArray (env, arr1, jbt1, + udata, cbe->arrayLen2, cbe->methodName, 2); + } +} + +void LIBAPIENTRY cbf_GLU_TESS_END (void) +{ + JNIEnv * env = NULL; + jobject obj = 0; + jclass oclass=0; + jmethodID id=0; + + CallbackEntry * cbe = FindCallbackEntry(GLU_TESS_END, GetCurrentGLContext()); + + if(cbe==NULL) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "could not find the java callback entry"); + return; + } + env = cbe->env; + obj = cbe->jobj; + oclass = (jclass) (*env)->GetObjectClass(env, obj); + if(oclass!=0) + id = (*env)->GetMethodID(env,oclass,cbe->methodName,cbe->signature) ; + if(id==NULL) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "could not find the java callback method: %s %s", + cbe->methodName, cbe->signature); + return; + } + + (*env)->CallVoidMethod(env, obj, id); +} + +void LIBAPIENTRY cbf_GLU_TESS_END_DATA (void * udata) +{ + JNIEnv * env = NULL; + jobject obj = 0; + jclass oclass=0; + jmethodID id=0; + JavaBasicType jbt=0; + jarray arr=0; + + CallbackEntry * cbe = FindCallbackEntry(GLU_TESS_END_DATA, GetCurrentGLContext()); + + if(cbe==NULL) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "could not find the java callback entry"); + return; + } + env = cbe->env; + obj = cbe->jobj; + oclass = (jclass) (*env)->GetObjectClass(env, obj); + if(oclass!=0) + id = (*env)->GetMethodID(env,oclass,cbe->methodName,cbe->signature) ; + if(id==NULL) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "could not find the java callback method: %s %s", + cbe->methodName, cbe->signature); + return; + } + + if(cbe->argListNumber<1) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "too few arguments in registered callback function"); + return; + } + jbt = jnitoolsGetJavaBasicType(env,cbe->signature, 0, cbe->methodName); + arr = jnitoolsNativeArray2JavaArray (env, jbt, udata, cbe->arrayLen1, cbe->methodName, 1); + + if(arr!=0) + { + (*env)->CallVoidMethod(env, obj, id, arr); + jnitoolsReleaseJavaArray2NativeArray (env, arr, jbt, + udata, cbe->arrayLen1, cbe->methodName, 1); + } +} + +void LIBAPIENTRY cbf_GLU_TESS_ERROR (GLenum errno) +{ + JNIEnv * env = NULL; + jobject obj = 0; + jclass oclass=0; + jmethodID id=0; + + CallbackEntry * cbe = FindCallbackEntry(GLU_TESS_ERROR, GetCurrentGLContext()); + + if(cbe==NULL) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "could not find the java callback entry"); + return; + } + env = cbe->env; + obj = cbe->jobj; + oclass = (jclass) (*env)->GetObjectClass(env, obj); + if(oclass!=0) + id = (*env)->GetMethodID(env,oclass,cbe->methodName,cbe->signature) ; + if(id==NULL) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "could not find the java callback method: %s %s", + cbe->methodName, cbe->signature); + return; + } + + (*env)->CallVoidMethod(env, obj, id, (jint)errno); +} + +void LIBAPIENTRY cbf_GLU_TESS_ERROR_DATA (GLenum errno, void * udata) +{ + JNIEnv * env = NULL; + jobject obj = 0; + jclass oclass=0; + jmethodID id=0; + JavaBasicType jbt=0; + jarray arr=0; + + CallbackEntry * cbe = FindCallbackEntry(GLU_TESS_ERROR_DATA, GetCurrentGLContext()); + + if(cbe==NULL) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "could not find the java callback entry"); + return; + } + env = cbe->env; + obj = cbe->jobj; + oclass = (jclass) (*env)->GetObjectClass(env, obj); + if(oclass!=0) + id = (*env)->GetMethodID(env,oclass,cbe->methodName,cbe->signature) ; + if(id==NULL) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "could not find the java callback method: %s %s", + cbe->methodName, cbe->signature); + return; + } + + if(cbe->argListNumber<2) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "too few arguments in registered callback function"); + return; + } + jbt = jnitoolsGetJavaBasicType(env,cbe->signature, 1, cbe->methodName); + arr = jnitoolsNativeArray2JavaArray (env, jbt, udata, cbe->arrayLen1, cbe->methodName, 2); + + if(arr!=0) + { + (*env)->CallVoidMethod(env, obj, id, (jint)errno, arr); + jnitoolsReleaseJavaArray2NativeArray (env, arr, jbt, + udata, cbe->arrayLen1, cbe->methodName, 2); + } +} + +void LIBAPIENTRY cbf_GLU_TESS_COMBINE (GLdouble coords[3], void *vdata[4], + GLfloat weight[4], void **outdata) +{ + JNIEnv * env = NULL; + jobject obj = 0; + jclass oclass=0; + jmethodID id=0; + JavaBasicType jbt0=0; + jarray arr0=0; + JavaBasicType jbt1=0; + jarray arr1=0; + JavaBasicType jbt2=0; + jarray arr2=0; + JavaBasicType jbt3=0; + jarray arr3=0; + void * combdata = NULL; + CallbackEntry * cbe = NULL; + + cbe = FindCallbackEntry(GLU_TESS_COMBINE, GetCurrentGLContext()); + + if(cbe==NULL) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "could not find the java callback entry"); + return; + } + env = cbe->env; + obj = cbe->jobj; + oclass = (jclass) (*env)->GetObjectClass(env, obj); + if(oclass!=0) + id = (*env)->GetMethodID(env,oclass,cbe->methodName,cbe->signature) ; + if(id==NULL) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "could not find the java callback method: %s %s", + cbe->methodName, cbe->signature); + return; + } + + if(cbe->argListNumber<4) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "too few arguments in registered callback function"); + return; + } + if(cbe->arrayLen1>3) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "First Array of GLU_TESS_COMBINE cannot exceed 3 elements !"); + return; + } + if(cbe->arrayLen2%4!=0) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "Secound Array of GLU_TESS_COMBINE must be a multiple of 4 !"); + return; + } + if(cbe->arrayLen3>4) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "First Array of GLU_TESS_COMBINE cannot exceed 4 elements !"); + return; + } + jbt0 = jnitoolsGetJavaBasicType(env,cbe->signature, 0, cbe->methodName); + arr0 = jnitoolsNativeArray2JavaArray (env, jbt0, coords, cbe->arrayLen1, cbe->methodName, 1); + jbt1 = jnitoolsGetJavaBasicType(env,cbe->signature, 1, cbe->methodName); + arr1 = jnitoolsNativePtrArray2JavaArray (env, jbt1, vdata, 4, cbe->arrayLen2, cbe->methodName, 2); + jbt2 = jnitoolsGetJavaBasicType(env,cbe->signature, 2, cbe->methodName); + arr2 = jnitoolsNativeArray2JavaArray (env, jbt2, weight, cbe->arrayLen3, cbe->methodName, 3); + + jbt3 = jnitoolsGetJavaBasicType(env,cbe->signature, 3, cbe->methodName); + combdata = jnitoolsCreateNativeArray (jbt3, cbe->arrayLen4, cbe->methodName); + arr3 = jnitoolsNativeArray2JavaArray (env, jbt3, combdata, cbe->arrayLen4, cbe->methodName, 4); + + if(arr0!=0 && arr1!=0 && arr2!=0 && arr3!=0) + { + (*env)->CallVoidMethod(env, obj, id, arr0, arr1, arr2, arr3); + + jnitoolsReleaseJavaArray2NativeArray (env, arr0, jbt0, coords, + cbe->arrayLen1, cbe->methodName, 1); + jnitoolsReleaseJavaArray2NativeArrayPtr(env, arr1, jbt1, vdata, + 4, cbe->arrayLen2, cbe->methodName, 2); + jnitoolsReleaseJavaArray2NativeArray (env, arr2, jbt2, weight, + cbe->arrayLen3, cbe->methodName, 3); + jnitoolsReleaseJavaArray2NativeArray (env, arr3, jbt3, combdata, + cbe->arrayLen4, cbe->methodName, 4); + *outdata=combdata; + } +} + +void LIBAPIENTRY cbf_GLU_TESS_COMBINE_DATA (GLdouble coords[3], void *vdata[4], + GLfloat weight[4], void **outdata, + void *udata) +{ + JNIEnv * env = NULL; + jobject obj = 0; + jclass oclass=0; + jmethodID id=0; + JavaBasicType jbt0=0; + jarray arr0=0; + JavaBasicType jbt1=0; + jarray arr1=0; + JavaBasicType jbt2=0; + jarray arr2=0; + JavaBasicType jbt3=0; + jarray arr3=0; + JavaBasicType jbt4=0; + jarray arr4=0; + void * combdata = NULL; + + CallbackEntry * cbe = FindCallbackEntry(GLU_TESS_COMBINE_DATA, GetCurrentGLContext()); + + if(cbe==NULL) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "could not find the java callback entry"); + return; + } + env = cbe->env; + obj = cbe->jobj; + oclass = (jclass) (*env)->GetObjectClass(env, obj); + if(oclass!=0) + id = (*env)->GetMethodID(env,oclass,cbe->methodName,cbe->signature) ; + if(id==NULL) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "could not find the java callback method: %s %s", + cbe->methodName, cbe->signature); + return; + } + + if(cbe->argListNumber<5) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "too few arguments in registered callback function"); + return; + } + if(cbe->arrayLen1>3) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "First Array of GLU_TESS_COMBINE_DATA cannot exceed 3 elements !"); + return; + } + if(cbe->arrayLen2%4!=0) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "Secound Array of GLU_TESS_COMBINE_DATA must be a multiple of 4 !"); + return; + } + if(cbe->arrayLen3>4) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "First Array of GLU_TESS_COMBINE_DATA cannot exceed 4 elements !"); + return; + } + jbt0 = jnitoolsGetJavaBasicType(env,cbe->signature, 0, cbe->methodName); + arr0 = jnitoolsNativeArray2JavaArray (env, jbt0, coords, cbe->arrayLen1, cbe->methodName, 1); + jbt1 = jnitoolsGetJavaBasicType(env,cbe->signature, 1, cbe->methodName); + arr1 = jnitoolsNativePtrArray2JavaArray (env, jbt1, vdata, 4, cbe->arrayLen2, cbe->methodName, 2); + jbt2 = jnitoolsGetJavaBasicType(env,cbe->signature, 2, cbe->methodName); + arr2 = jnitoolsNativeArray2JavaArray (env, jbt2, weight, cbe->arrayLen3, cbe->methodName, 3); + + jbt3 = jnitoolsGetJavaBasicType(env,cbe->signature, 3, cbe->methodName); + combdata = jnitoolsCreateNativeArray (jbt3, cbe->arrayLen2, cbe->methodName); + arr3 = jnitoolsNativeArray2JavaArray (env, jbt3, combdata, cbe->arrayLen4, cbe->methodName, 4); + jbt4 = jnitoolsGetJavaBasicType(env,cbe->signature, 4, cbe->methodName); + arr4 = jnitoolsNativeArray2JavaArray (env, jbt4, udata, cbe->arrayLen5, cbe->methodName, 5); + + if(arr0!=0 && arr1!=0 && arr2!=0 && arr3!=0 && arr4!=0) + { + (*env)->CallVoidMethod(env, obj, id, arr0, arr1, arr2, arr3); + jnitoolsReleaseJavaArray2NativeArray (env, arr0, jbt0, coords, + cbe->arrayLen1, cbe->methodName, 1); + jnitoolsReleaseJavaArray2NativeArrayPtr(env, arr1, jbt1, vdata, + 4, cbe->arrayLen2, cbe->methodName, 2); + jnitoolsReleaseJavaArray2NativeArray (env, arr2, jbt2, weight, + cbe->arrayLen3, cbe->methodName, 3); + jnitoolsReleaseJavaArray2NativeArray (env, arr3, jbt3, combdata, + cbe->arrayLen4, cbe->methodName, 4); + *outdata=combdata; + jnitoolsReleaseJavaArray2NativeArray (env, arr4, jbt4, udata, + cbe->arrayLen5, cbe->methodName, 5); + } +} + +void LIBAPIENTRY cbf_GLU_ERROR (GLenum errno) +{ + JNIEnv * env = NULL; + jobject obj = 0; + jclass oclass=0; + jmethodID id=0; + + CallbackEntry * cbe = FindCallbackEntry(GLU_ERROR, GetCurrentGLContext()); + + if(cbe==NULL) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "could not find the java callback entry"); + return; + } + env = cbe->env; + obj = cbe->jobj; + oclass = (jclass) (*env)->GetObjectClass(env, obj); + if(oclass!=0) + id = (*env)->GetMethodID(env,oclass,cbe->methodName,cbe->signature) ; + if(id==NULL) + { + jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", + "could not find the java callback method: %s %s", + cbe->methodName, cbe->signature); + return; + } + + (*env)->CallVoidMethod(env, obj, id, (jint)errno); +} + + |