diff options
Diffstat (limited to 'CNativeCode')
-rw-r--r-- | CNativeCode/OpenGLU_JauJNI12_funcs.c | 2 | ||||
-rw-r--r-- | CNativeCode/OpenGLU_JauJNI12tst_funcs.c | 2 | ||||
-rw-r--r-- | CNativeCode/OpenGLU_JauJNI_funcs.c | 2 | ||||
-rw-r--r-- | CNativeCode/OpenGLU_JauJNInf_funcs.c | 4544 | ||||
-rw-r--r-- | CNativeCode/OpenGLU_JauJNItst_funcs.c | 2 | ||||
-rwxr-xr-x | CNativeCode/OpenGL_Win32.c | 135 | ||||
-rwxr-xr-x | CNativeCode/OpenGL_Win32_common.c | 196 | ||||
-rwxr-xr-x | CNativeCode/OpenGL_Win32_common.h | 18 | ||||
-rwxr-xr-x | CNativeCode/OpenGL_Win32_jawt.c | 1402 | ||||
-rw-r--r-- | CNativeCode/OpenGL_X11.c | 206 | ||||
-rw-r--r-- | CNativeCode/OpenGL_X11_common.c | 402 | ||||
-rw-r--r-- | CNativeCode/OpenGL_X11_common.h | 41 | ||||
-rw-r--r-- | CNativeCode/OpenGL_X11_jawt.c | 221 | ||||
-rw-r--r-- | CNativeCode/OpenGL_misc.c | 244 | ||||
-rw-r--r-- | CNativeCode/OpenGL_misc.h | 54 | ||||
-rw-r--r-- | CNativeCode/jawt_misc.c | 12 |
16 files changed, 3989 insertions, 3494 deletions
diff --git a/CNativeCode/OpenGLU_JauJNI12_funcs.c b/CNativeCode/OpenGLU_JauJNI12_funcs.c index 5ad9e76..0b59881 100644 --- a/CNativeCode/OpenGLU_JauJNI12_funcs.c +++ b/CNativeCode/OpenGLU_JauJNI12_funcs.c @@ -62,7 +62,7 @@ Java_gl4java_GLUFuncJauJNI_gluGetString ( JNIEnv *env, jobject obj, } static const char * _glu_lib_vendor_="Jausoft - Sven Goethel Software Development"; -static const char * _glu_lib_version_="2.4.1.0"; +static const char * _glu_lib_version_="2.5.2.0"; JNIEXPORT jstring JNICALL Java_gl4java_GLUFuncJauJNI_getNativeVendor ( JNIEnv *env, jobject obj ) diff --git a/CNativeCode/OpenGLU_JauJNI12tst_funcs.c b/CNativeCode/OpenGLU_JauJNI12tst_funcs.c index 1fc3b2c..4c6fa7e 100644 --- a/CNativeCode/OpenGLU_JauJNI12tst_funcs.c +++ b/CNativeCode/OpenGLU_JauJNI12tst_funcs.c @@ -62,7 +62,7 @@ Java_gl4java_GLUFuncJauJNI_gluGetString ( JNIEnv *env, jobject obj, } static const char * _glu_lib_vendor_="Jausoft - Sven Goethel Software Development"; -static const char * _glu_lib_version_="2.4.1.0"; +static const char * _glu_lib_version_="2.5.2.0"; JNIEXPORT jstring JNICALL Java_gl4java_GLUFuncJauJNI_getNativeVendor ( JNIEnv *env, jobject obj ) diff --git a/CNativeCode/OpenGLU_JauJNI_funcs.c b/CNativeCode/OpenGLU_JauJNI_funcs.c index 1fda2a3..8b2f135 100644 --- a/CNativeCode/OpenGLU_JauJNI_funcs.c +++ b/CNativeCode/OpenGLU_JauJNI_funcs.c @@ -62,7 +62,7 @@ Java_gl4java_GLUFuncJauJNI_gluGetString ( JNIEnv *env, jobject obj, } static const char * _glu_lib_vendor_="Jausoft - Sven Goethel Software Development"; -static const char * _glu_lib_version_="2.4.1.0"; +static const char * _glu_lib_version_="2.5.2.0"; JNIEXPORT jstring JNICALL Java_gl4java_GLUFuncJauJNI_getNativeVendor ( JNIEnv *env, jobject obj ) diff --git a/CNativeCode/OpenGLU_JauJNInf_funcs.c b/CNativeCode/OpenGLU_JauJNInf_funcs.c index 9860fad..ddddcee 100644 --- a/CNativeCode/OpenGLU_JauJNInf_funcs.c +++ b/CNativeCode/OpenGLU_JauJNInf_funcs.c @@ -1,9 +1,9 @@ -/* WARNING ! WARNING *** THIS FILE IS GENERATED BY C2J !!! - - DO NOT MAKE ANY CHANGES *** MAKE CHANGES IN THE SKELETON FILES !!! -*/ - - +/* WARNING ! WARNING *** THIS FILE IS GENERATED BY C2J !!!
+
+ DO NOT MAKE ANY CHANGES *** MAKE CHANGES IN THE SKELETON FILES !!!
+*/
+
+
/*
* Leo Chan -- 1995
*
@@ -33,2269 +33,2269 @@ * herein lies the native JAVA methods for the OpenGL functions.
*/
-static const char _glu_n_a_string[] = "GLU-String not avaiable !"; - -JNIEXPORT jstring JNICALL -Java_gl4java_GLUFuncJauJNInf_gluErrorString ( JNIEnv *env, jobject obj, - jint errorCode ) -{ - const char *tmpString=0; - - tmpString = gluErrorString ( /* jint */ errorCode ); - if(tmpString==NULL) - tmpString=_glu_n_a_string; - - return (*env)->NewStringUTF(env, tmpString); -} - -JNIEXPORT jstring JNICALL -Java_gl4java_GLUFuncJauJNInf_gluGetString ( JNIEnv *env, jobject obj, - jint name ) -{ - const char *tmpString=0; - - tmpString = gluGetString ( /* jint */ name); - if(tmpString==NULL) - tmpString=_glu_n_a_string; - - return (*env)->NewStringUTF(env, tmpString); -} - -static const char * _glu_lib_vendor_="Jausoft - Sven Goethel Software Development"; -static const char * _glu_lib_version_="2.4.1.0"; - -JNIEXPORT jstring JNICALL -Java_gl4java_GLUFuncJauJNInf_getNativeVendor ( JNIEnv *env, jobject obj ) -{ - return (*env)->NewStringUTF(env, _glu_lib_vendor_); -} - -JNIEXPORT jstring JNICALL -Java_gl4java_GLUFuncJauJNInf_getNativeVersion ( JNIEnv *env, jobject obj ) -{ - return (*env)->NewStringUTF(env, _glu_lib_version_); -} - -static void _AddCallbackNode(JNIEnv *env, - jlong qnt_obj, jint which, - jobject methodClassInstance, - jstring methodName, - jstring signature, - jint arrayLen1, - jint arrayLen2, - jint arrayLen3, - jint arrayLen4, - jint arrayLen5) -{ - char * strMethodName = jnitoolsGetJavaString(env, methodName); - char * strSignature = jnitoolsGetJavaString(env, signature); - jlong glx=0; - - glx = GetCurrentGLContext(); - - AddCallbackNode(env, methodClassInstance, strMethodName, strSignature, - arrayLen1, arrayLen2, arrayLen3, - arrayLen4, arrayLen5, - (void *)((PointerHolder)qnt_obj), which, glx); - free(strMethodName); - free(strSignature); -} - - -JNIEXPORT void JNICALL -Java_gl4java_GLUFuncJauJNInf_gluQuadricCallback( JNIEnv *env, jobject obj, - jlong qobj, jint which, - jobject methodClassInstance, - jstring methodName, - jstring signature) -{ - switch(which) - { - case GLU_ERROR: - gluQuadricCallback((void *)((PointerHolder)qobj), - which, cbf_GLU_ERROR ); - break; - default: - jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", "Wrong Callback-Function type (\"which\") !"); - return; - } - _AddCallbackNode(env, - qobj, which, methodClassInstance, methodName, - signature, - 0, 0, 0, 0, 0); -} - - -JNIEXPORT void JNICALL -Java_gl4java_GLUFuncJauJNInf_gluNurbsCallback( JNIEnv *env, jobject obj, - jlong nobj, jint which, - jobject methodClassInstance, - jstring methodName, - jstring signature) -{ - switch(which) - { - case GLU_ERROR: - gluNurbsCallback((void *)((PointerHolder)nobj), which, - cbf_GLU_ERROR ); - break; - default: - jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", "Wrong Callback-Function type (\"which\") !"); - return; - } - _AddCallbackNode(env, - nobj, which, methodClassInstance, methodName, - signature, - 0, 0, 0, 0, 0); -} - -JNIEXPORT void JNICALL -Java_gl4java_GLUFuncJauJNInf_gluTessCallback( JNIEnv *env, jobject obj, - jlong tobj, jint which, - jobject methodClassInstance, - jstring methodName, - jstring signature, - jint arrayLen1, - jint arrayLen2, - jint arrayLen3, - jint arrayLen4, - jint arrayLen5) -{ - switch(which) - { - case GLU_TESS_BEGIN: - gluTessCallback((GLUtesselator *)((PointerHolder)tobj), - which, - cbf_GLU_TESS_BEGIN ); - break; - case GLU_TESS_BEGIN_DATA: - gluTessCallback((GLUtesselator *)((PointerHolder)tobj), - which, - cbf_GLU_TESS_BEGIN_DATA ); - break; - case GLU_TESS_EDGE_FLAG: - gluTessCallback((GLUtesselator *)((PointerHolder)tobj), - which, - cbf_GLU_TESS_EDGE_FLAG ); - break; - case GLU_TESS_EDGE_FLAG_DATA: - gluTessCallback((GLUtesselator *)((PointerHolder)tobj), - which, - cbf_GLU_TESS_EDGE_FLAG_DATA ); - break; - case GLU_TESS_VERTEX: - gluTessCallback((GLUtesselator *)((PointerHolder)tobj), - which, - cbf_GLU_TESS_VERTEX ); - break; - case GLU_TESS_VERTEX_DATA: - gluTessCallback((GLUtesselator *)((PointerHolder)tobj), - which, - cbf_GLU_TESS_VERTEX_DATA ); - break; - case GLU_TESS_END: - gluTessCallback((GLUtesselator *)((PointerHolder)tobj), - which, - cbf_GLU_TESS_END ); - break; - case GLU_TESS_END_DATA: - gluTessCallback((GLUtesselator *)((PointerHolder)tobj), - which, - cbf_GLU_TESS_END_DATA ); - break; - case GLU_TESS_ERROR: - gluTessCallback((GLUtesselator *)((PointerHolder)tobj), - which, - cbf_GLU_TESS_ERROR ); - break; - case GLU_TESS_ERROR_DATA: - gluTessCallback((GLUtesselator *)((PointerHolder)tobj), - which, - cbf_GLU_TESS_ERROR_DATA ); - break; - case GLU_TESS_COMBINE: - gluTessCallback((GLUtesselator *)((PointerHolder)tobj), - which, - cbf_GLU_TESS_COMBINE ); - break; - case GLU_TESS_COMBINE_DATA: - gluTessCallback((GLUtesselator *)((PointerHolder)tobj), - which, - cbf_GLU_TESS_COMBINE_DATA ); - break; - default: - jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", "Wrong Callback-Function type (\"which\") !"); - return; - } - _AddCallbackNode(env, - tobj, which, methodClassInstance, methodName, - signature, - arrayLen1, arrayLen2, arrayLen3, - arrayLen4, arrayLen5); -} - -JNIEXPORT void JNICALL -Java_gl4java_GLUFuncJauJNInf_gluDeleteQuadric( JNIEnv *env, jobject obj, - jlong qobj ) -{ - gluDeleteQuadric((void *)((PointerHolder)qobj)); - RemoveCallbackNodes((void *)((PointerHolder)qobj)); -} - -JNIEXPORT void JNICALL -Java_gl4java_GLUFuncJauJNInf_gluDeleteNurbsRenderer( JNIEnv *env, jobject obj, - jlong nobj ) -{ - gluDeleteNurbsRenderer((void *)((PointerHolder)nobj)); - RemoveCallbackNodes((void *)((PointerHolder)nobj)); -} - -JNIEXPORT void JNICALL -Java_gl4java_GLUFuncJauJNInf_gluDeleteTess( JNIEnv *env, jobject obj, - jlong tobj ) -{ - gluDeleteTess((GLUtesselator *)((PointerHolder)tobj)); - RemoveCallbackNodes((void *)((PointerHolder)tobj)); -} - -JNIEXPORT jlong JNICALL -Java_gl4java_GLUFuncJauJNInf_gluNewQuadric( JNIEnv *env, jobject obj) -{ - return (jlong)((PointerHolder)gluNewQuadric()); -} - -JNIEXPORT jlong JNICALL -Java_gl4java_GLUFuncJauJNInf_gluNewNurbsRenderer( JNIEnv *env, jobject obj) -{ - return (jlong)((PointerHolder)gluNewNurbsRenderer()); -} - -JNIEXPORT jlong JNICALL -Java_gl4java_GLUFuncJauJNInf_gluNewTess( JNIEnv *env, jobject obj) -{ - return (jlong)((PointerHolder)gluNewTess()); -} - -/** - * C2J Parser Version 1.5 Beta - * Jausoft - Sven Goethel Software Development - * Reading from file: glu-proto-auto.orig.h . . . - * Destination-Class: gl4java_GLUFuncJauJNInf ! - */ - -/** - * Original Function-Prototype : - * <pre> - extern void gluLookAt ( GLdouble eyex , GLdouble eyey , GLdouble eyez , GLdouble centerx , GLdouble centery , GLdouble centerz , GLdouble upx , GLdouble upy , GLdouble upz ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluLookAt ( - JNIEnv *env, jobject obj, - jdouble eyex, - jdouble eyey, - jdouble eyez, - jdouble centerx, - jdouble centery, - jdouble centerz, - jdouble upx, - jdouble upy, - jdouble upz) - { - - gluLookAt ( - (GLdouble) eyex, - (GLdouble) eyey, - (GLdouble) eyez, - (GLdouble) centerx, - (GLdouble) centery, - (GLdouble) centerz, - (GLdouble) upx, - (GLdouble) upy, - (GLdouble) upz - ); - - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluOrtho2D ( GLdouble left , GLdouble right , GLdouble bottom , GLdouble top ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluOrtho2D ( - JNIEnv *env, jobject obj, - jdouble left, - jdouble right, - jdouble bottom, - jdouble top) - { - - gluOrtho2D ( - (GLdouble) left, - (GLdouble) right, - (GLdouble) bottom, - (GLdouble) top - ); - - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluPerspective ( GLdouble fovy , GLdouble aspect , GLdouble zNear , GLdouble zFar ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluPerspective ( - JNIEnv *env, jobject obj, - jdouble fovy, - jdouble aspect, - jdouble zNear, - jdouble zFar) - { - - gluPerspective ( - (GLdouble) fovy, - (GLdouble) aspect, - (GLdouble) zNear, - (GLdouble) zFar - ); - - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluPickMatrix ( GLdouble x , GLdouble y , GLdouble width , GLdouble height , GLint * viewport ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluPickMatrix ( - JNIEnv *env, jobject obj, - jdouble x, - jdouble y, - jdouble width, - jdouble height, - jintArray viewport) - { - jboolean isCopiedArray4 = JNI_FALSE; - jint *ptr4 = NULL; - - if(viewport!=NULL) - { - ptr4 = (*env)->GetIntArrayElements(env, viewport, &isCopiedArray4); - } - gluPickMatrix ( - (GLdouble) x, - (GLdouble) y, - (GLdouble) width, - (GLdouble) height, - (GLint *) ptr4 - ); - - if(viewport!=NULL) - { - (*env)->ReleaseIntArrayElements(env, viewport, ptr4, (isCopiedArray4 == JNI_TRUE)?0:JNI_ABORT); - } - } - -/** - * Original Function-Prototype : - * <pre> - extern GLint gluProject ( GLdouble objx , GLdouble objy , GLdouble objz , const GLdouble modelMatrix [ 16 ] , const GLdouble projMatrix [ 16 ] , const GLint viewport [ 4 ] , GLdouble * winx , GLdouble * winy , GLdouble * winz ) ; - * </pre> - */ - JNIEXPORT jint JNICALL - Java_gl4java_GLUFuncJauJNInf_gluProject ( - JNIEnv *env, jobject obj, - jdouble objx, - jdouble objy, - jdouble objz, - jdoubleArray modelMatrix, - jdoubleArray projMatrix, - jintArray viewport, - jdoubleArray winx, - jdoubleArray winy, - jdoubleArray winz) - { - jint ret; - - jdouble *ptr3 = NULL; - jdouble *ptr4 = NULL; - jint *ptr5 = NULL; - jboolean isCopiedArray6 = JNI_FALSE; - jdouble *ptr6 = NULL; - jboolean isCopiedArray7 = JNI_FALSE; - jdouble *ptr7 = NULL; - jboolean isCopiedArray8 = JNI_FALSE; - jdouble *ptr8 = NULL; - - if(modelMatrix!=NULL) - { - ptr3 = (*env)->GetDoubleArrayElements(env, modelMatrix, 0); - } - if(projMatrix!=NULL) - { - ptr4 = (*env)->GetDoubleArrayElements(env, projMatrix, 0); - } - if(viewport!=NULL) - { - ptr5 = (*env)->GetIntArrayElements(env, viewport, 0); - } - if(winx!=NULL) - { - ptr6 = (*env)->GetDoubleArrayElements(env, winx, &isCopiedArray6); - } - if(winy!=NULL) - { - ptr7 = (*env)->GetDoubleArrayElements(env, winy, &isCopiedArray7); - } - if(winz!=NULL) - { - ptr8 = (*env)->GetDoubleArrayElements(env, winz, &isCopiedArray8); - } - ret = (jint) gluProject ( - (GLdouble) objx, - (GLdouble) objy, - (GLdouble) objz, - (const GLdouble *) ptr3, - (const GLdouble *) ptr4, - (const GLint *) ptr5, - (GLdouble *) ptr6, - (GLdouble *) ptr7, - (GLdouble *) ptr8 - ); - - if(modelMatrix!=NULL) - { - (*env)->ReleaseDoubleArrayElements(env, modelMatrix, ptr3, JNI_ABORT); - } - if(projMatrix!=NULL) - { - (*env)->ReleaseDoubleArrayElements(env, projMatrix, ptr4, JNI_ABORT); - } - if(viewport!=NULL) - { - (*env)->ReleaseIntArrayElements(env, viewport, ptr5, JNI_ABORT); - } - if(winx!=NULL) - { - (*env)->ReleaseDoubleArrayElements(env, winx, ptr6, (isCopiedArray6 == JNI_TRUE)?0:JNI_ABORT); - } - if(winy!=NULL) - { - (*env)->ReleaseDoubleArrayElements(env, winy, ptr7, (isCopiedArray7 == JNI_TRUE)?0:JNI_ABORT); - } - if(winz!=NULL) - { - (*env)->ReleaseDoubleArrayElements(env, winz, ptr8, (isCopiedArray8 == JNI_TRUE)?0:JNI_ABORT); - } - return ret; - } - -/** - * Original Function-Prototype : - * <pre> - extern GLint gluUnProject ( GLdouble winx , GLdouble winy , GLdouble winz , const GLdouble modelMatrix [ 16 ] , const GLdouble projMatrix [ 16 ] , const GLint viewport [ 4 ] , GLdouble * objx , GLdouble * objy , GLdouble * objz ) ; - * </pre> - */ - JNIEXPORT jint JNICALL - Java_gl4java_GLUFuncJauJNInf_gluUnProject ( - JNIEnv *env, jobject obj, - jdouble winx, - jdouble winy, - jdouble winz, - jdoubleArray modelMatrix, - jdoubleArray projMatrix, - jintArray viewport, - jdoubleArray objx, - jdoubleArray objy, - jdoubleArray objz) - { - jint ret; - - jdouble *ptr3 = NULL; - jdouble *ptr4 = NULL; - jint *ptr5 = NULL; - jboolean isCopiedArray6 = JNI_FALSE; - jdouble *ptr6 = NULL; - jboolean isCopiedArray7 = JNI_FALSE; - jdouble *ptr7 = NULL; - jboolean isCopiedArray8 = JNI_FALSE; - jdouble *ptr8 = NULL; - - if(modelMatrix!=NULL) - { - ptr3 = (*env)->GetDoubleArrayElements(env, modelMatrix, 0); - } - if(projMatrix!=NULL) - { - ptr4 = (*env)->GetDoubleArrayElements(env, projMatrix, 0); - } - if(viewport!=NULL) - { - ptr5 = (*env)->GetIntArrayElements(env, viewport, 0); - } - if(objx!=NULL) - { - ptr6 = (*env)->GetDoubleArrayElements(env, objx, &isCopiedArray6); - } - if(objy!=NULL) - { - ptr7 = (*env)->GetDoubleArrayElements(env, objy, &isCopiedArray7); - } - if(objz!=NULL) - { - ptr8 = (*env)->GetDoubleArrayElements(env, objz, &isCopiedArray8); - } - ret = (jint) gluUnProject ( - (GLdouble) winx, - (GLdouble) winy, - (GLdouble) winz, - (const GLdouble *) ptr3, - (const GLdouble *) ptr4, - (const GLint *) ptr5, - (GLdouble *) ptr6, - (GLdouble *) ptr7, - (GLdouble *) ptr8 - ); - - if(modelMatrix!=NULL) - { - (*env)->ReleaseDoubleArrayElements(env, modelMatrix, ptr3, JNI_ABORT); - } - if(projMatrix!=NULL) - { - (*env)->ReleaseDoubleArrayElements(env, projMatrix, ptr4, JNI_ABORT); - } - if(viewport!=NULL) - { - (*env)->ReleaseIntArrayElements(env, viewport, ptr5, JNI_ABORT); - } - if(objx!=NULL) - { - (*env)->ReleaseDoubleArrayElements(env, objx, ptr6, (isCopiedArray6 == JNI_TRUE)?0:JNI_ABORT); - } - if(objy!=NULL) - { - (*env)->ReleaseDoubleArrayElements(env, objy, ptr7, (isCopiedArray7 == JNI_TRUE)?0:JNI_ABORT); - } - if(objz!=NULL) - { - (*env)->ReleaseDoubleArrayElements(env, objz, ptr8, (isCopiedArray8 == JNI_TRUE)?0:JNI_ABORT); - } - return ret; - } - -/** - * Original Function-Prototype : - * <pre> - extern GLint gluScaleImage ( GLenum format , GLsizei widthin , GLsizei heightin , GLenum typein , const char * datain , GLsizei widthout , GLsizei heightout , GLenum typeout , char * dataout ) ; - * </pre> - */ - JNIEXPORT jint JNICALL - Java_gl4java_GLUFuncJauJNInf_gluScaleImage ( - JNIEnv *env, jobject obj, - jint format, - jint widthin, - jint heightin, - jint typein, - jbyteArray datain, - jint widthout, - jint heightout, - jint typeout, - jbyteArray dataout) - { - jint ret; - - jbyte *ptr4 = NULL; - jboolean isCopiedArray8 = JNI_FALSE; - jbyte *ptr8 = NULL; - - if(datain!=NULL) - { - ptr4 = (*env)->GetByteArrayElements(env, datain, 0); - } - if(dataout!=NULL) - { - ptr8 = (*env)->GetByteArrayElements(env, dataout, &isCopiedArray8); - } - ret = (jint) gluScaleImage ( - (GLenum) format, - (GLsizei) widthin, - (GLsizei) heightin, - (GLenum) typein, - (const char *) ptr4, - (GLsizei) widthout, - (GLsizei) heightout, - (GLenum) typeout, - (char *) ptr8 - ); - - if(datain!=NULL) - { - (*env)->ReleaseByteArrayElements(env, datain, ptr4, JNI_ABORT); - } - if(dataout!=NULL) - { - (*env)->ReleaseByteArrayElements(env, dataout, ptr8, (isCopiedArray8 == JNI_TRUE)?0:JNI_ABORT); - } - return ret; - } - -/** - * Original Function-Prototype : - * <pre> - extern GLint gluBuild1DMipmaps ( GLenum target , GLint components , GLint width , GLenum format , GLenum type , const void * data ) ; - * </pre> - */ - JNIEXPORT jint JNICALL - Java_gl4java_GLUFuncJauJNInf_gluBuild1DMipmaps__IIIII_3B ( - JNIEnv *env, jobject obj, - jint target, - jint components, - jint width, - jint format, - jint type, - jbyteArray data) - { - jint ret; - - jbyte *ptr5 = NULL; - - if(data!=NULL) - { - ptr5 = (*env)->GetByteArrayElements(env, data, 0); - } - ret = (jint) gluBuild1DMipmaps ( - (GLenum) target, - (GLint) components, - (GLint) width, - (GLenum) format, - (GLenum) type, - (const void *) ptr5 - ); - - if(data!=NULL) - { - (*env)->ReleaseByteArrayElements(env, data, ptr5, JNI_ABORT); - } - return ret; - } - JNIEXPORT jint JNICALL - Java_gl4java_GLUFuncJauJNInf_gluBuild1DMipmaps__IIIII_3S ( - JNIEnv *env, jobject obj, - jint target, - jint components, - jint width, - jint format, - jint type, - jshortArray data) - { - jint ret; - - jshort *ptr5 = NULL; - - if(data!=NULL) - { - ptr5 = (*env)->GetShortArrayElements(env, data, 0); - } - ret = (jint) gluBuild1DMipmaps ( - (GLenum) target, - (GLint) components, - (GLint) width, - (GLenum) format, - (GLenum) type, - (const void *) ptr5 - ); - - if(data!=NULL) - { - (*env)->ReleaseShortArrayElements(env, data, ptr5, JNI_ABORT); - } - return ret; - } - JNIEXPORT jint JNICALL - Java_gl4java_GLUFuncJauJNInf_gluBuild1DMipmaps__IIIII_3I ( - JNIEnv *env, jobject obj, - jint target, - jint components, - jint width, - jint format, - jint type, - jintArray data) - { - jint ret; - - jint *ptr5 = NULL; - - if(data!=NULL) - { - ptr5 = (*env)->GetIntArrayElements(env, data, 0); - } - ret = (jint) gluBuild1DMipmaps ( - (GLenum) target, - (GLint) components, - (GLint) width, - (GLenum) format, - (GLenum) type, - (const void *) ptr5 - ); - - if(data!=NULL) - { - (*env)->ReleaseIntArrayElements(env, data, ptr5, JNI_ABORT); - } - return ret; - } - JNIEXPORT jint JNICALL - Java_gl4java_GLUFuncJauJNInf_gluBuild1DMipmaps__IIIII_3F ( - JNIEnv *env, jobject obj, - jint target, - jint components, - jint width, - jint format, - jint type, - jfloatArray data) - { - jint ret; - - jfloat *ptr5 = NULL; - - if(data!=NULL) - { - ptr5 = (*env)->GetFloatArrayElements(env, data, 0); - } - ret = (jint) gluBuild1DMipmaps ( - (GLenum) target, - (GLint) components, - (GLint) width, - (GLenum) format, - (GLenum) type, - (const void *) ptr5 - ); - - if(data!=NULL) - { - (*env)->ReleaseFloatArrayElements(env, data, ptr5, JNI_ABORT); - } - return ret; - } - JNIEXPORT jint JNICALL - Java_gl4java_GLUFuncJauJNInf_gluBuild1DMipmaps__IIIII_3D ( - JNIEnv *env, jobject obj, - jint target, - jint components, - jint width, - jint format, - jint type, - jdoubleArray data) - { - jint ret; - - jdouble *ptr5 = NULL; - - if(data!=NULL) - { - ptr5 = (*env)->GetDoubleArrayElements(env, data, 0); - } - ret = (jint) gluBuild1DMipmaps ( - (GLenum) target, - (GLint) components, - (GLint) width, - (GLenum) format, - (GLenum) type, - (const void *) ptr5 - ); - - if(data!=NULL) - { - (*env)->ReleaseDoubleArrayElements(env, data, ptr5, JNI_ABORT); - } - return ret; - } - JNIEXPORT jint JNICALL - Java_gl4java_GLUFuncJauJNInf_gluBuild1DMipmaps__IIIII_3Z ( - JNIEnv *env, jobject obj, - jint target, - jint components, - jint width, - jint format, - jint type, - jbooleanArray data) - { - jint ret; - - jboolean *ptr5 = NULL; - - if(data!=NULL) - { - ptr5 = (*env)->GetBooleanArrayElements(env, data, 0); - } - ret = (jint) gluBuild1DMipmaps ( - (GLenum) target, - (GLint) components, - (GLint) width, - (GLenum) format, - (GLenum) type, - (const void *) ptr5 - ); - - if(data!=NULL) - { - (*env)->ReleaseBooleanArrayElements(env, data, ptr5, JNI_ABORT); - } - return ret; - } - JNIEXPORT jint JNICALL - Java_gl4java_GLUFuncJauJNInf_gluBuild1DMipmaps__IIIII_3J ( - JNIEnv *env, jobject obj, - jint target, - jint components, - jint width, - jint format, - jint type, - jlongArray data) - { - jint ret; - - jlong *ptr5 = NULL; - - if(data!=NULL) - { - ptr5 = (*env)->GetLongArrayElements(env, data, 0); - } - ret = (jint) gluBuild1DMipmaps ( - (GLenum) target, - (GLint) components, - (GLint) width, - (GLenum) format, - (GLenum) type, - (const void *) ptr5 - ); - - if(data!=NULL) - { - (*env)->ReleaseLongArrayElements(env, data, ptr5, JNI_ABORT); - } - return ret; - } - -/** - * Original Function-Prototype : - * <pre> - extern GLint gluBuild2DMipmaps ( GLenum target , GLint components , GLint width , GLint height , GLenum format , GLenum type , const void * data ) ; - * </pre> - */ - JNIEXPORT jint JNICALL - Java_gl4java_GLUFuncJauJNInf_gluBuild2DMipmaps__IIIIII_3B ( - JNIEnv *env, jobject obj, - jint target, - jint components, - jint width, - jint height, - jint format, - jint type, - jbyteArray data) - { - jint ret; - - jbyte *ptr6 = NULL; - - if(data!=NULL) - { - ptr6 = (*env)->GetByteArrayElements(env, data, 0); - } - ret = (jint) gluBuild2DMipmaps ( - (GLenum) target, - (GLint) components, - (GLint) width, - (GLint) height, - (GLenum) format, - (GLenum) type, - (const void *) ptr6 - ); - - if(data!=NULL) - { - (*env)->ReleaseByteArrayElements(env, data, ptr6, JNI_ABORT); - } - return ret; - } - JNIEXPORT jint JNICALL - Java_gl4java_GLUFuncJauJNInf_gluBuild2DMipmaps__IIIIII_3S ( - JNIEnv *env, jobject obj, - jint target, - jint components, - jint width, - jint height, - jint format, - jint type, - jshortArray data) - { - jint ret; - - jshort *ptr6 = NULL; - - if(data!=NULL) - { - ptr6 = (*env)->GetShortArrayElements(env, data, 0); - } - ret = (jint) gluBuild2DMipmaps ( - (GLenum) target, - (GLint) components, - (GLint) width, - (GLint) height, - (GLenum) format, - (GLenum) type, - (const void *) ptr6 - ); - - if(data!=NULL) - { - (*env)->ReleaseShortArrayElements(env, data, ptr6, JNI_ABORT); - } - return ret; - } - JNIEXPORT jint JNICALL - Java_gl4java_GLUFuncJauJNInf_gluBuild2DMipmaps__IIIIII_3I ( - JNIEnv *env, jobject obj, - jint target, - jint components, - jint width, - jint height, - jint format, - jint type, - jintArray data) - { - jint ret; - - jint *ptr6 = NULL; - - if(data!=NULL) - { - ptr6 = (*env)->GetIntArrayElements(env, data, 0); - } - ret = (jint) gluBuild2DMipmaps ( - (GLenum) target, - (GLint) components, - (GLint) width, - (GLint) height, - (GLenum) format, - (GLenum) type, - (const void *) ptr6 - ); - - if(data!=NULL) - { - (*env)->ReleaseIntArrayElements(env, data, ptr6, JNI_ABORT); - } - return ret; - } - JNIEXPORT jint JNICALL - Java_gl4java_GLUFuncJauJNInf_gluBuild2DMipmaps__IIIIII_3F ( - JNIEnv *env, jobject obj, - jint target, - jint components, - jint width, - jint height, - jint format, - jint type, - jfloatArray data) - { - jint ret; - - jfloat *ptr6 = NULL; - - if(data!=NULL) - { - ptr6 = (*env)->GetFloatArrayElements(env, data, 0); - } - ret = (jint) gluBuild2DMipmaps ( - (GLenum) target, - (GLint) components, - (GLint) width, - (GLint) height, - (GLenum) format, - (GLenum) type, - (const void *) ptr6 - ); - - if(data!=NULL) - { - (*env)->ReleaseFloatArrayElements(env, data, ptr6, JNI_ABORT); - } - return ret; - } - JNIEXPORT jint JNICALL - Java_gl4java_GLUFuncJauJNInf_gluBuild2DMipmaps__IIIIII_3D ( - JNIEnv *env, jobject obj, - jint target, - jint components, - jint width, - jint height, - jint format, - jint type, - jdoubleArray data) - { - jint ret; - - jdouble *ptr6 = NULL; - - if(data!=NULL) - { - ptr6 = (*env)->GetDoubleArrayElements(env, data, 0); - } - ret = (jint) gluBuild2DMipmaps ( - (GLenum) target, - (GLint) components, - (GLint) width, - (GLint) height, - (GLenum) format, - (GLenum) type, - (const void *) ptr6 - ); - - if(data!=NULL) - { - (*env)->ReleaseDoubleArrayElements(env, data, ptr6, JNI_ABORT); - } - return ret; - } - JNIEXPORT jint JNICALL - Java_gl4java_GLUFuncJauJNInf_gluBuild2DMipmaps__IIIIII_3Z ( - JNIEnv *env, jobject obj, - jint target, - jint components, - jint width, - jint height, - jint format, - jint type, - jbooleanArray data) - { - jint ret; - - jboolean *ptr6 = NULL; - - if(data!=NULL) - { - ptr6 = (*env)->GetBooleanArrayElements(env, data, 0); - } - ret = (jint) gluBuild2DMipmaps ( - (GLenum) target, - (GLint) components, - (GLint) width, - (GLint) height, - (GLenum) format, - (GLenum) type, - (const void *) ptr6 - ); - - if(data!=NULL) - { - (*env)->ReleaseBooleanArrayElements(env, data, ptr6, JNI_ABORT); - } - return ret; - } - JNIEXPORT jint JNICALL - Java_gl4java_GLUFuncJauJNInf_gluBuild2DMipmaps__IIIIII_3J ( - JNIEnv *env, jobject obj, - jint target, - jint components, - jint width, - jint height, - jint format, - jint type, - jlongArray data) - { - jint ret; - - jlong *ptr6 = NULL; - - if(data!=NULL) - { - ptr6 = (*env)->GetLongArrayElements(env, data, 0); - } - ret = (jint) gluBuild2DMipmaps ( - (GLenum) target, - (GLint) components, - (GLint) width, - (GLint) height, - (GLenum) format, - (GLenum) type, - (const void *) ptr6 - ); - - if(data!=NULL) - { - (*env)->ReleaseLongArrayElements(env, data, ptr6, JNI_ABORT); - } - return ret; - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluQuadricDrawStyle ( GLUquadricObj * quadObject , GLenum drawStyle ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluQuadricDrawStyle ( - JNIEnv *env, jobject obj, - jlong quadObject, - jint drawStyle) - { - - gluQuadricDrawStyle ( - (GLUquadricObj *) (PointerHolder) quadObject, - (GLenum) drawStyle - ); - - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluQuadricOrientation ( GLUquadricObj * quadObject , GLenum orientation ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluQuadricOrientation ( - JNIEnv *env, jobject obj, - jlong quadObject, - jint orientation) - { - - gluQuadricOrientation ( - (GLUquadricObj *) (PointerHolder) quadObject, - (GLenum) orientation - ); - - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluQuadricNormals ( GLUquadricObj * quadObject , GLenum normals ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluQuadricNormals ( - JNIEnv *env, jobject obj, - jlong quadObject, - jint normals) - { - - gluQuadricNormals ( - (GLUquadricObj *) (PointerHolder) quadObject, - (GLenum) normals - ); - - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluQuadricTexture ( GLUquadricObj * quadObject , GLboolean textureCoords ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluQuadricTexture ( - JNIEnv *env, jobject obj, - jlong quadObject, - jboolean textureCoords) - { - - gluQuadricTexture ( - (GLUquadricObj *) (PointerHolder) quadObject, - (GLboolean) textureCoords - ); - - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluCylinder ( GLUquadricObj * qobj , GLdouble baseRadius , GLdouble topRadius , GLdouble height , GLint slices , GLint stacks ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluCylinder ( - JNIEnv *env, jobject obj, - jlong qobj, - jdouble baseRadius, - jdouble topRadius, - jdouble height, - jint slices, - jint stacks) - { - - gluCylinder ( - (GLUquadricObj *) (PointerHolder) qobj, - (GLdouble) baseRadius, - (GLdouble) topRadius, - (GLdouble) height, - (GLint) slices, - (GLint) stacks - ); - - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluSphere ( GLUquadricObj * qobj , GLdouble radius , GLint slices , GLint stacks ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluSphere ( - JNIEnv *env, jobject obj, - jlong qobj, - jdouble radius, - jint slices, - jint stacks) - { - - gluSphere ( - (GLUquadricObj *) (PointerHolder) qobj, - (GLdouble) radius, - (GLint) slices, - (GLint) stacks - ); - - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluDisk ( GLUquadricObj * qobj , GLdouble innerRadius , GLdouble outerRadius , GLint slices , GLint loops ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluDisk ( - JNIEnv *env, jobject obj, - jlong qobj, - jdouble innerRadius, - jdouble outerRadius, - jint slices, - jint loops) - { - - gluDisk ( - (GLUquadricObj *) (PointerHolder) qobj, - (GLdouble) innerRadius, - (GLdouble) outerRadius, - (GLint) slices, - (GLint) loops - ); - - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluPartialDisk ( GLUquadricObj * qobj , GLdouble innerRadius , GLdouble outerRadius , GLint slices , GLint loops , GLdouble startAngle , GLdouble sweepAngle ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluPartialDisk ( - JNIEnv *env, jobject obj, - jlong qobj, - jdouble innerRadius, - jdouble outerRadius, - jint slices, - jint loops, - jdouble startAngle, - jdouble sweepAngle) - { - - gluPartialDisk ( - (GLUquadricObj *) (PointerHolder) qobj, - (GLdouble) innerRadius, - (GLdouble) outerRadius, - (GLint) slices, - (GLint) loops, - (GLdouble) startAngle, - (GLdouble) sweepAngle - ); - - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluLoadSamplingMatrices ( GLUnurbsObj * nobj , const GLfloat modelMatrix [ 16 ] , const GLfloat projMatrix [ 16 ] , const GLint viewport [ 4 ] ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluLoadSamplingMatrices ( - JNIEnv *env, jobject obj, - jlong nobj, - jfloatArray modelMatrix, - jfloatArray projMatrix, - jintArray viewport) - { - jfloat *ptr1 = NULL; - jfloat *ptr2 = NULL; - jint *ptr3 = NULL; - - if(modelMatrix!=NULL) - { - ptr1 = (*env)->GetFloatArrayElements(env, modelMatrix, 0); - } - if(projMatrix!=NULL) - { - ptr2 = (*env)->GetFloatArrayElements(env, projMatrix, 0); - } - if(viewport!=NULL) - { - ptr3 = (*env)->GetIntArrayElements(env, viewport, 0); - } - gluLoadSamplingMatrices ( - (GLUnurbsObj *) (PointerHolder) nobj, - (const GLfloat *) ptr1, - (const GLfloat *) ptr2, - (const GLint *) ptr3 - ); - - if(modelMatrix!=NULL) - { - (*env)->ReleaseFloatArrayElements(env, modelMatrix, ptr1, JNI_ABORT); - } - if(projMatrix!=NULL) - { - (*env)->ReleaseFloatArrayElements(env, projMatrix, ptr2, JNI_ABORT); - } - if(viewport!=NULL) - { - (*env)->ReleaseIntArrayElements(env, viewport, ptr3, JNI_ABORT); - } - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluNurbsProperty ( GLUnurbsObj * nobj , GLenum property , GLfloat value ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluNurbsProperty ( - JNIEnv *env, jobject obj, - jlong nobj, - jint property, - jfloat value) - { - - gluNurbsProperty ( - (GLUnurbsObj *) (PointerHolder) nobj, - (GLenum) property, - (GLfloat) value - ); - - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluGetNurbsProperty ( GLUnurbsObj * nobj , GLenum property , GLfloat * value ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluGetNurbsProperty ( - JNIEnv *env, jobject obj, - jlong nobj, - jint property, - jfloatArray value) - { - jboolean isCopiedArray2 = JNI_FALSE; - jfloat *ptr2 = NULL; - - if(value!=NULL) - { - ptr2 = (*env)->GetFloatArrayElements(env, value, &isCopiedArray2); - } - gluGetNurbsProperty ( - (GLUnurbsObj *) (PointerHolder) nobj, - (GLenum) property, - (GLfloat *) ptr2 - ); - - if(value!=NULL) - { - (*env)->ReleaseFloatArrayElements(env, value, ptr2, (isCopiedArray2 == JNI_TRUE)?0:JNI_ABORT); - } - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluBeginCurve ( GLUnurbsObj * nobj ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluBeginCurve ( - JNIEnv *env, jobject obj, - jlong nobj) - { - - gluBeginCurve ( - (GLUnurbsObj *) (PointerHolder) nobj - ); - - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluEndCurve ( GLUnurbsObj * nobj ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluEndCurve ( - JNIEnv *env, jobject obj, - jlong nobj) - { - - gluEndCurve ( - (GLUnurbsObj *) (PointerHolder) nobj - ); - - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluNurbsCurve ( GLUnurbsObj * nobj , GLint nknots , GLfloat * knot , GLint stride , GLfloat * ctlarray , GLint order , GLenum type ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluNurbsCurve ( - JNIEnv *env, jobject obj, - jlong nobj, - jint nknots, - jfloatArray knot, - jint stride, - jfloatArray ctlarray, - jint order, - jint type) - { - jboolean isCopiedArray2 = JNI_FALSE; - jfloat *ptr2 = NULL; - jboolean isCopiedArray4 = JNI_FALSE; - jfloat *ptr4 = NULL; - - if(knot!=NULL) - { - ptr2 = (*env)->GetFloatArrayElements(env, knot, &isCopiedArray2); - } - if(ctlarray!=NULL) - { - ptr4 = (*env)->GetFloatArrayElements(env, ctlarray, &isCopiedArray4); - } - gluNurbsCurve ( - (GLUnurbsObj *) (PointerHolder) nobj, - (GLint) nknots, - (GLfloat *) ptr2, - (GLint) stride, - (GLfloat *) ptr4, - (GLint) order, - (GLenum) type - ); - - if(knot!=NULL) - { - (*env)->ReleaseFloatArrayElements(env, knot, ptr2, (isCopiedArray2 == JNI_TRUE)?0:JNI_ABORT); - } - if(ctlarray!=NULL) - { - (*env)->ReleaseFloatArrayElements(env, ctlarray, ptr4, (isCopiedArray4 == JNI_TRUE)?0:JNI_ABORT); - } - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluBeginSurface ( GLUnurbsObj * nobj ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluBeginSurface ( - JNIEnv *env, jobject obj, - jlong nobj) - { - - gluBeginSurface ( - (GLUnurbsObj *) (PointerHolder) nobj - ); - - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluEndSurface ( GLUnurbsObj * nobj ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluEndSurface ( - JNIEnv *env, jobject obj, - jlong nobj) - { - - gluEndSurface ( - (GLUnurbsObj *) (PointerHolder) nobj - ); - - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluNurbsSurface ( GLUnurbsObj * nobj , GLint sknot_count , GLfloat * sknot , GLint tknot_count , GLfloat * tknot , GLint s_stride , GLint t_stride , GLfloat * ctlarray , GLint sorder , GLint torder , GLenum type ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluNurbsSurface ( - JNIEnv *env, jobject obj, - jlong nobj, - jint sknot_count, - jfloatArray sknot, - jint tknot_count, - jfloatArray tknot, - jint s_stride, - jint t_stride, - jfloatArray ctlarray, - jint sorder, - jint torder, - jint type) - { - jboolean isCopiedArray2 = JNI_FALSE; - jfloat *ptr2 = NULL; - jboolean isCopiedArray4 = JNI_FALSE; - jfloat *ptr4 = NULL; - jboolean isCopiedArray7 = JNI_FALSE; - jfloat *ptr7 = NULL; - - if(sknot!=NULL) - { - ptr2 = (*env)->GetFloatArrayElements(env, sknot, &isCopiedArray2); - } - if(tknot!=NULL) - { - ptr4 = (*env)->GetFloatArrayElements(env, tknot, &isCopiedArray4); - } - if(ctlarray!=NULL) - { - ptr7 = (*env)->GetFloatArrayElements(env, ctlarray, &isCopiedArray7); - } - gluNurbsSurface ( - (GLUnurbsObj *) (PointerHolder) nobj, - (GLint) sknot_count, - (GLfloat *) ptr2, - (GLint) tknot_count, - (GLfloat *) ptr4, - (GLint) s_stride, - (GLint) t_stride, - (GLfloat *) ptr7, - (GLint) sorder, - (GLint) torder, - (GLenum) type - ); - - if(sknot!=NULL) - { - (*env)->ReleaseFloatArrayElements(env, sknot, ptr2, (isCopiedArray2 == JNI_TRUE)?0:JNI_ABORT); - } - if(tknot!=NULL) - { - (*env)->ReleaseFloatArrayElements(env, tknot, ptr4, (isCopiedArray4 == JNI_TRUE)?0:JNI_ABORT); - } - if(ctlarray!=NULL) - { - (*env)->ReleaseFloatArrayElements(env, ctlarray, ptr7, (isCopiedArray7 == JNI_TRUE)?0:JNI_ABORT); - } - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluBeginTrim ( GLUnurbsObj * nobj ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluBeginTrim ( - JNIEnv *env, jobject obj, - jlong nobj) - { - - gluBeginTrim ( - (GLUnurbsObj *) (PointerHolder) nobj - ); - - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluEndTrim ( GLUnurbsObj * nobj ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluEndTrim ( - JNIEnv *env, jobject obj, - jlong nobj) - { - - gluEndTrim ( - (GLUnurbsObj *) (PointerHolder) nobj - ); - - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluPwlCurve ( GLUnurbsObj * nobj , GLint count , GLfloat * array , GLint stride , GLenum type ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluPwlCurve ( - JNIEnv *env, jobject obj, - jlong nobj, - jint count, - jfloatArray array, - jint stride, - jint type) - { - jboolean isCopiedArray2 = JNI_FALSE; - jfloat *ptr2 = NULL; - - if(array!=NULL) - { - ptr2 = (*env)->GetFloatArrayElements(env, array, &isCopiedArray2); - } - gluPwlCurve ( - (GLUnurbsObj *) (PointerHolder) nobj, - (GLint) count, - (GLfloat *) ptr2, - (GLint) stride, - (GLenum) type - ); - - if(array!=NULL) - { - (*env)->ReleaseFloatArrayElements(env, array, ptr2, (isCopiedArray2 == JNI_TRUE)?0:JNI_ABORT); - } - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluTessBeginPolygon ( GLUtesselator * tobj , void * polygon_data ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluTessBeginPolygon__J_3B ( - JNIEnv *env, jobject obj, - jlong tobj, - jbyteArray polygon_data) - { - jboolean isCopiedArray1 = JNI_FALSE; - jbyte *ptr1 = NULL; - - if(polygon_data!=NULL) - { - ptr1 = (*env)->GetByteArrayElements(env, polygon_data, &isCopiedArray1); - } - gluTessBeginPolygon ( - (GLUtesselator *) (PointerHolder) tobj, - (void *) ptr1 - ); - - if(polygon_data!=NULL) - { - (*env)->ReleaseByteArrayElements(env, polygon_data, ptr1, (isCopiedArray1 == JNI_TRUE)?0:JNI_ABORT); - } - } - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluTessBeginPolygon__J_3S ( - JNIEnv *env, jobject obj, - jlong tobj, - jshortArray polygon_data) - { - jboolean isCopiedArray1 = JNI_FALSE; - jshort *ptr1 = NULL; - - if(polygon_data!=NULL) - { - ptr1 = (*env)->GetShortArrayElements(env, polygon_data, &isCopiedArray1); - } - gluTessBeginPolygon ( - (GLUtesselator *) (PointerHolder) tobj, - (void *) ptr1 - ); - - if(polygon_data!=NULL) - { - (*env)->ReleaseShortArrayElements(env, polygon_data, ptr1, (isCopiedArray1 == JNI_TRUE)?0:JNI_ABORT); - } - } - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluTessBeginPolygon__J_3I ( - JNIEnv *env, jobject obj, - jlong tobj, - jintArray polygon_data) - { - jboolean isCopiedArray1 = JNI_FALSE; - jint *ptr1 = NULL; - - if(polygon_data!=NULL) - { - ptr1 = (*env)->GetIntArrayElements(env, polygon_data, &isCopiedArray1); - } - gluTessBeginPolygon ( - (GLUtesselator *) (PointerHolder) tobj, - (void *) ptr1 - ); - - if(polygon_data!=NULL) - { - (*env)->ReleaseIntArrayElements(env, polygon_data, ptr1, (isCopiedArray1 == JNI_TRUE)?0:JNI_ABORT); - } - } - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluTessBeginPolygon__J_3F ( - JNIEnv *env, jobject obj, - jlong tobj, - jfloatArray polygon_data) - { - jboolean isCopiedArray1 = JNI_FALSE; - jfloat *ptr1 = NULL; - - if(polygon_data!=NULL) - { - ptr1 = (*env)->GetFloatArrayElements(env, polygon_data, &isCopiedArray1); - } - gluTessBeginPolygon ( - (GLUtesselator *) (PointerHolder) tobj, - (void *) ptr1 - ); - - if(polygon_data!=NULL) - { - (*env)->ReleaseFloatArrayElements(env, polygon_data, ptr1, (isCopiedArray1 == JNI_TRUE)?0:JNI_ABORT); - } - } - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluTessBeginPolygon__J_3D ( - JNIEnv *env, jobject obj, - jlong tobj, - jdoubleArray polygon_data) - { - jboolean isCopiedArray1 = JNI_FALSE; - jdouble *ptr1 = NULL; - - if(polygon_data!=NULL) - { - ptr1 = (*env)->GetDoubleArrayElements(env, polygon_data, &isCopiedArray1); - } - gluTessBeginPolygon ( - (GLUtesselator *) (PointerHolder) tobj, - (void *) ptr1 - ); - - if(polygon_data!=NULL) - { - (*env)->ReleaseDoubleArrayElements(env, polygon_data, ptr1, (isCopiedArray1 == JNI_TRUE)?0:JNI_ABORT); - } - } - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluTessBeginPolygon__J_3Z ( - JNIEnv *env, jobject obj, - jlong tobj, - jbooleanArray polygon_data) - { - jboolean isCopiedArray1 = JNI_FALSE; - jboolean *ptr1 = NULL; - - if(polygon_data!=NULL) - { - ptr1 = (*env)->GetBooleanArrayElements(env, polygon_data, &isCopiedArray1); - } - gluTessBeginPolygon ( - (GLUtesselator *) (PointerHolder) tobj, - (void *) ptr1 - ); - - if(polygon_data!=NULL) - { - (*env)->ReleaseBooleanArrayElements(env, polygon_data, ptr1, (isCopiedArray1 == JNI_TRUE)?0:JNI_ABORT); - } - } - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluTessBeginPolygon__J_3J ( - JNIEnv *env, jobject obj, - jlong tobj, - jlongArray polygon_data) - { - jboolean isCopiedArray1 = JNI_FALSE; - jlong *ptr1 = NULL; - - if(polygon_data!=NULL) - { - ptr1 = (*env)->GetLongArrayElements(env, polygon_data, &isCopiedArray1); - } - gluTessBeginPolygon ( - (GLUtesselator *) (PointerHolder) tobj, - (void *) ptr1 - ); - - if(polygon_data!=NULL) - { - (*env)->ReleaseLongArrayElements(env, polygon_data, ptr1, (isCopiedArray1 == JNI_TRUE)?0:JNI_ABORT); - } - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluTessBeginContour ( GLUtesselator * tobj ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluTessBeginContour ( - JNIEnv *env, jobject obj, - jlong tobj) - { - - gluTessBeginContour ( - (GLUtesselator *) (PointerHolder) tobj - ); - - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluTessVertex ( GLUtesselator * tobj , GLdouble coords [ 3 ] , void * vertex_data ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluTessVertex__J_3D_3B ( - JNIEnv *env, jobject obj, - jlong tobj, - jdoubleArray coords, - jbyteArray vertex_data) - { - jboolean isCopiedArray1 = JNI_FALSE; - jdouble *ptr1 = NULL; - jboolean isCopiedArray2 = JNI_FALSE; - jbyte *ptr2 = NULL; - - if(coords!=NULL) - { - ptr1 = (*env)->GetDoubleArrayElements(env, coords, &isCopiedArray1); - } - if(vertex_data!=NULL) - { - ptr2 = (*env)->GetByteArrayElements(env, vertex_data, &isCopiedArray2); - } - gluTessVertex ( - (GLUtesselator *) (PointerHolder) tobj, - (GLdouble *) ptr1, - (void *) ptr2 - ); - - if(coords!=NULL) - { - (*env)->ReleaseDoubleArrayElements(env, coords, ptr1, (isCopiedArray1 == JNI_TRUE)?0:JNI_ABORT); - } - if(vertex_data!=NULL) - { - (*env)->ReleaseByteArrayElements(env, vertex_data, ptr2, (isCopiedArray2 == JNI_TRUE)?0:JNI_ABORT); - } - } - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluTessVertex__J_3D_3S ( - JNIEnv *env, jobject obj, - jlong tobj, - jdoubleArray coords, - jshortArray vertex_data) - { - jboolean isCopiedArray1 = JNI_FALSE; - jdouble *ptr1 = NULL; - jboolean isCopiedArray2 = JNI_FALSE; - jshort *ptr2 = NULL; - - if(coords!=NULL) - { - ptr1 = (*env)->GetDoubleArrayElements(env, coords, &isCopiedArray1); - } - if(vertex_data!=NULL) - { - ptr2 = (*env)->GetShortArrayElements(env, vertex_data, &isCopiedArray2); - } - gluTessVertex ( - (GLUtesselator *) (PointerHolder) tobj, - (GLdouble *) ptr1, - (void *) ptr2 - ); - - if(coords!=NULL) - { - (*env)->ReleaseDoubleArrayElements(env, coords, ptr1, (isCopiedArray1 == JNI_TRUE)?0:JNI_ABORT); - } - if(vertex_data!=NULL) - { - (*env)->ReleaseShortArrayElements(env, vertex_data, ptr2, (isCopiedArray2 == JNI_TRUE)?0:JNI_ABORT); - } - } - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluTessVertex__J_3D_3I ( - JNIEnv *env, jobject obj, - jlong tobj, - jdoubleArray coords, - jintArray vertex_data) - { - jboolean isCopiedArray1 = JNI_FALSE; - jdouble *ptr1 = NULL; - jboolean isCopiedArray2 = JNI_FALSE; - jint *ptr2 = NULL; - - if(coords!=NULL) - { - ptr1 = (*env)->GetDoubleArrayElements(env, coords, &isCopiedArray1); - } - if(vertex_data!=NULL) - { - ptr2 = (*env)->GetIntArrayElements(env, vertex_data, &isCopiedArray2); - } - gluTessVertex ( - (GLUtesselator *) (PointerHolder) tobj, - (GLdouble *) ptr1, - (void *) ptr2 - ); - - if(coords!=NULL) - { - (*env)->ReleaseDoubleArrayElements(env, coords, ptr1, (isCopiedArray1 == JNI_TRUE)?0:JNI_ABORT); - } - if(vertex_data!=NULL) - { - (*env)->ReleaseIntArrayElements(env, vertex_data, ptr2, (isCopiedArray2 == JNI_TRUE)?0:JNI_ABORT); - } - } - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluTessVertex__J_3D_3F ( - JNIEnv *env, jobject obj, - jlong tobj, - jdoubleArray coords, - jfloatArray vertex_data) - { - jboolean isCopiedArray1 = JNI_FALSE; - jdouble *ptr1 = NULL; - jboolean isCopiedArray2 = JNI_FALSE; - jfloat *ptr2 = NULL; - - if(coords!=NULL) - { - ptr1 = (*env)->GetDoubleArrayElements(env, coords, &isCopiedArray1); - } - if(vertex_data!=NULL) - { - ptr2 = (*env)->GetFloatArrayElements(env, vertex_data, &isCopiedArray2); - } - gluTessVertex ( - (GLUtesselator *) (PointerHolder) tobj, - (GLdouble *) ptr1, - (void *) ptr2 - ); - - if(coords!=NULL) - { - (*env)->ReleaseDoubleArrayElements(env, coords, ptr1, (isCopiedArray1 == JNI_TRUE)?0:JNI_ABORT); - } - if(vertex_data!=NULL) - { - (*env)->ReleaseFloatArrayElements(env, vertex_data, ptr2, (isCopiedArray2 == JNI_TRUE)?0:JNI_ABORT); - } - } - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluTessVertex__J_3D_3D ( - JNIEnv *env, jobject obj, - jlong tobj, - jdoubleArray coords, - jdoubleArray vertex_data) - { - jboolean isCopiedArray1 = JNI_FALSE; - jdouble *ptr1 = NULL; - jboolean isCopiedArray2 = JNI_FALSE; - jdouble *ptr2 = NULL; - - if(coords!=NULL) - { - ptr1 = (*env)->GetDoubleArrayElements(env, coords, &isCopiedArray1); - } - if(vertex_data!=NULL) - { - ptr2 = (*env)->GetDoubleArrayElements(env, vertex_data, &isCopiedArray2); - } - gluTessVertex ( - (GLUtesselator *) (PointerHolder) tobj, - (GLdouble *) ptr1, - (void *) ptr2 - ); - - if(coords!=NULL) - { - (*env)->ReleaseDoubleArrayElements(env, coords, ptr1, (isCopiedArray1 == JNI_TRUE)?0:JNI_ABORT); - } - if(vertex_data!=NULL) - { - (*env)->ReleaseDoubleArrayElements(env, vertex_data, ptr2, (isCopiedArray2 == JNI_TRUE)?0:JNI_ABORT); - } - } - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluTessVertex__J_3D_3Z ( - JNIEnv *env, jobject obj, - jlong tobj, - jdoubleArray coords, - jbooleanArray vertex_data) - { - jboolean isCopiedArray1 = JNI_FALSE; - jdouble *ptr1 = NULL; - jboolean isCopiedArray2 = JNI_FALSE; - jboolean *ptr2 = NULL; - - if(coords!=NULL) - { - ptr1 = (*env)->GetDoubleArrayElements(env, coords, &isCopiedArray1); - } - if(vertex_data!=NULL) - { - ptr2 = (*env)->GetBooleanArrayElements(env, vertex_data, &isCopiedArray2); - } - gluTessVertex ( - (GLUtesselator *) (PointerHolder) tobj, - (GLdouble *) ptr1, - (void *) ptr2 - ); - - if(coords!=NULL) - { - (*env)->ReleaseDoubleArrayElements(env, coords, ptr1, (isCopiedArray1 == JNI_TRUE)?0:JNI_ABORT); - } - if(vertex_data!=NULL) - { - (*env)->ReleaseBooleanArrayElements(env, vertex_data, ptr2, (isCopiedArray2 == JNI_TRUE)?0:JNI_ABORT); - } - } - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluTessVertex__J_3D_3J ( - JNIEnv *env, jobject obj, - jlong tobj, - jdoubleArray coords, - jlongArray vertex_data) - { - jboolean isCopiedArray1 = JNI_FALSE; - jdouble *ptr1 = NULL; - jboolean isCopiedArray2 = JNI_FALSE; - jlong *ptr2 = NULL; - - if(coords!=NULL) - { - ptr1 = (*env)->GetDoubleArrayElements(env, coords, &isCopiedArray1); - } - if(vertex_data!=NULL) - { - ptr2 = (*env)->GetLongArrayElements(env, vertex_data, &isCopiedArray2); - } - gluTessVertex ( - (GLUtesselator *) (PointerHolder) tobj, - (GLdouble *) ptr1, - (void *) ptr2 - ); - - if(coords!=NULL) - { - (*env)->ReleaseDoubleArrayElements(env, coords, ptr1, (isCopiedArray1 == JNI_TRUE)?0:JNI_ABORT); - } - if(vertex_data!=NULL) - { - (*env)->ReleaseLongArrayElements(env, vertex_data, ptr2, (isCopiedArray2 == JNI_TRUE)?0:JNI_ABORT); - } - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluTessEndContour ( GLUtesselator * tobj ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluTessEndContour ( - JNIEnv *env, jobject obj, - jlong tobj) - { - - gluTessEndContour ( - (GLUtesselator *) (PointerHolder) tobj - ); - - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluTessEndPolygon ( GLUtesselator * tobj ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluTessEndPolygon ( - JNIEnv *env, jobject obj, - jlong tobj) - { - - gluTessEndPolygon ( - (GLUtesselator *) (PointerHolder) tobj - ); - - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluTessProperty ( GLUtesselator * tobj , GLenum which , GLdouble value ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluTessProperty ( - JNIEnv *env, jobject obj, - jlong tobj, - jint which, - jdouble value) - { - - gluTessProperty ( - (GLUtesselator *) (PointerHolder) tobj, - (GLenum) which, - (GLdouble) value - ); - - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluTessNormal ( GLUtesselator * tobj , GLdouble x , GLdouble y , GLdouble z ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluTessNormal ( - JNIEnv *env, jobject obj, - jlong tobj, - jdouble x, - jdouble y, - jdouble z) - { - - gluTessNormal ( - (GLUtesselator *) (PointerHolder) tobj, - (GLdouble) x, - (GLdouble) y, - (GLdouble) z - ); - - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluGetTessProperty ( GLUtesselator * tobj , GLenum which , GLdouble * value ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluGetTessProperty ( - JNIEnv *env, jobject obj, - jlong tobj, - jint which, - jdoubleArray value) - { - jboolean isCopiedArray2 = JNI_FALSE; - jdouble *ptr2 = NULL; - - if(value!=NULL) - { - ptr2 = (*env)->GetDoubleArrayElements(env, value, &isCopiedArray2); - } - gluGetTessProperty ( - (GLUtesselator *) (PointerHolder) tobj, - (GLenum) which, - (GLdouble *) ptr2 - ); - - if(value!=NULL) - { - (*env)->ReleaseDoubleArrayElements(env, value, ptr2, (isCopiedArray2 == JNI_TRUE)?0:JNI_ABORT); - } - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluBeginPolygon ( GLUtesselator * tobj ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluBeginPolygon ( - JNIEnv *env, jobject obj, - jlong tobj) - { - - gluBeginPolygon ( - (GLUtesselator *) (PointerHolder) tobj - ); - - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluNextContour ( GLUtesselator * tobj , GLenum type ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluNextContour ( - JNIEnv *env, jobject obj, - jlong tobj, - jint type) - { - - gluNextContour ( - (GLUtesselator *) (PointerHolder) tobj, - (GLenum) type - ); - - } - -/** - * Original Function-Prototype : - * <pre> - extern void gluEndPolygon ( GLUtesselator * tobj ) ; - * </pre> - */ - JNIEXPORT void JNICALL - Java_gl4java_GLUFuncJauJNInf_gluEndPolygon ( - JNIEnv *env, jobject obj, - jlong tobj) - { - - gluEndPolygon ( - (GLUtesselator *) (PointerHolder) tobj - ); - - } - -/* C2J Parser Version 1.5 Beta: Java program parsed successfully. */ +static const char _glu_n_a_string[] = "GLU-String not avaiable !";
+
+JNIEXPORT jstring JNICALL
+Java_gl4java_GLUFuncJauJNInf_gluErrorString ( JNIEnv *env, jobject obj,
+ jint errorCode )
+{
+ const char *tmpString=0;
+
+ tmpString = gluErrorString ( /* jint */ errorCode );
+ if(tmpString==NULL)
+ tmpString=_glu_n_a_string;
+
+ return (*env)->NewStringUTF(env, tmpString);
+}
+
+JNIEXPORT jstring JNICALL
+Java_gl4java_GLUFuncJauJNInf_gluGetString ( JNIEnv *env, jobject obj,
+ jint name )
+{
+ const char *tmpString=0;
+
+ tmpString = gluGetString ( /* jint */ name);
+ if(tmpString==NULL)
+ tmpString=_glu_n_a_string;
+
+ return (*env)->NewStringUTF(env, tmpString);
+}
+
+static const char * _glu_lib_vendor_="Jausoft - Sven Goethel Software Development";
+static const char * _glu_lib_version_="2.5.2.0";
+
+JNIEXPORT jstring JNICALL
+Java_gl4java_GLUFuncJauJNInf_getNativeVendor ( JNIEnv *env, jobject obj )
+{
+ return (*env)->NewStringUTF(env, _glu_lib_vendor_);
+}
+
+JNIEXPORT jstring JNICALL
+Java_gl4java_GLUFuncJauJNInf_getNativeVersion ( JNIEnv *env, jobject obj )
+{
+ return (*env)->NewStringUTF(env, _glu_lib_version_);
+}
+
+static void _AddCallbackNode(JNIEnv *env,
+ jlong qnt_obj, jint which,
+ jobject methodClassInstance,
+ jstring methodName,
+ jstring signature,
+ jint arrayLen1,
+ jint arrayLen2,
+ jint arrayLen3,
+ jint arrayLen4,
+ jint arrayLen5)
+{
+ char * strMethodName = jnitoolsGetJavaString(env, methodName);
+ char * strSignature = jnitoolsGetJavaString(env, signature);
+ jlong glx=0;
+
+ glx = GetCurrentGLContext();
+
+ AddCallbackNode(env, methodClassInstance, strMethodName, strSignature,
+ arrayLen1, arrayLen2, arrayLen3,
+ arrayLen4, arrayLen5,
+ (void *)((PointerHolder)qnt_obj), which, glx);
+ free(strMethodName);
+ free(strSignature);
+}
+
+
+JNIEXPORT void JNICALL
+Java_gl4java_GLUFuncJauJNInf_gluQuadricCallback( JNIEnv *env, jobject obj,
+ jlong qobj, jint which,
+ jobject methodClassInstance,
+ jstring methodName,
+ jstring signature)
+{
+ switch(which)
+ {
+ case GLU_ERROR:
+ gluQuadricCallback((void *)((PointerHolder)qobj),
+ which, cbf_GLU_ERROR );
+ break;
+ default:
+ jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", "Wrong Callback-Function type (\"which\") !");
+ return;
+ }
+ _AddCallbackNode(env,
+ qobj, which, methodClassInstance, methodName,
+ signature,
+ 0, 0, 0, 0, 0);
+}
+
+
+JNIEXPORT void JNICALL
+Java_gl4java_GLUFuncJauJNInf_gluNurbsCallback( JNIEnv *env, jobject obj,
+ jlong nobj, jint which,
+ jobject methodClassInstance,
+ jstring methodName,
+ jstring signature)
+{
+ switch(which)
+ {
+ case GLU_ERROR:
+ gluNurbsCallback((void *)((PointerHolder)nobj), which,
+ cbf_GLU_ERROR );
+ break;
+ default:
+ jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", "Wrong Callback-Function type (\"which\") !");
+ return;
+ }
+ _AddCallbackNode(env,
+ nobj, which, methodClassInstance, methodName,
+ signature,
+ 0, 0, 0, 0, 0);
+}
+
+JNIEXPORT void JNICALL
+Java_gl4java_GLUFuncJauJNInf_gluTessCallback( JNIEnv *env, jobject obj,
+ jlong tobj, jint which,
+ jobject methodClassInstance,
+ jstring methodName,
+ jstring signature,
+ jint arrayLen1,
+ jint arrayLen2,
+ jint arrayLen3,
+ jint arrayLen4,
+ jint arrayLen5)
+{
+ switch(which)
+ {
+ case GLU_TESS_BEGIN:
+ gluTessCallback((GLUtesselator *)((PointerHolder)tobj),
+ which,
+ cbf_GLU_TESS_BEGIN );
+ break;
+ case GLU_TESS_BEGIN_DATA:
+ gluTessCallback((GLUtesselator *)((PointerHolder)tobj),
+ which,
+ cbf_GLU_TESS_BEGIN_DATA );
+ break;
+ case GLU_TESS_EDGE_FLAG:
+ gluTessCallback((GLUtesselator *)((PointerHolder)tobj),
+ which,
+ cbf_GLU_TESS_EDGE_FLAG );
+ break;
+ case GLU_TESS_EDGE_FLAG_DATA:
+ gluTessCallback((GLUtesselator *)((PointerHolder)tobj),
+ which,
+ cbf_GLU_TESS_EDGE_FLAG_DATA );
+ break;
+ case GLU_TESS_VERTEX:
+ gluTessCallback((GLUtesselator *)((PointerHolder)tobj),
+ which,
+ cbf_GLU_TESS_VERTEX );
+ break;
+ case GLU_TESS_VERTEX_DATA:
+ gluTessCallback((GLUtesselator *)((PointerHolder)tobj),
+ which,
+ cbf_GLU_TESS_VERTEX_DATA );
+ break;
+ case GLU_TESS_END:
+ gluTessCallback((GLUtesselator *)((PointerHolder)tobj),
+ which,
+ cbf_GLU_TESS_END );
+ break;
+ case GLU_TESS_END_DATA:
+ gluTessCallback((GLUtesselator *)((PointerHolder)tobj),
+ which,
+ cbf_GLU_TESS_END_DATA );
+ break;
+ case GLU_TESS_ERROR:
+ gluTessCallback((GLUtesselator *)((PointerHolder)tobj),
+ which,
+ cbf_GLU_TESS_ERROR );
+ break;
+ case GLU_TESS_ERROR_DATA:
+ gluTessCallback((GLUtesselator *)((PointerHolder)tobj),
+ which,
+ cbf_GLU_TESS_ERROR_DATA );
+ break;
+ case GLU_TESS_COMBINE:
+ gluTessCallback((GLUtesselator *)((PointerHolder)tobj),
+ which,
+ cbf_GLU_TESS_COMBINE );
+ break;
+ case GLU_TESS_COMBINE_DATA:
+ gluTessCallback((GLUtesselator *)((PointerHolder)tobj),
+ which,
+ cbf_GLU_TESS_COMBINE_DATA );
+ break;
+ default:
+ jnitoolsThrowByName(env, "java/lang/IllegalArgumentException", "Wrong Callback-Function type (\"which\") !");
+ return;
+ }
+ _AddCallbackNode(env,
+ tobj, which, methodClassInstance, methodName,
+ signature,
+ arrayLen1, arrayLen2, arrayLen3,
+ arrayLen4, arrayLen5);
+}
+
+JNIEXPORT void JNICALL
+Java_gl4java_GLUFuncJauJNInf_gluDeleteQuadric( JNIEnv *env, jobject obj,
+ jlong qobj )
+{
+ gluDeleteQuadric((void *)((PointerHolder)qobj));
+ RemoveCallbackNodes((void *)((PointerHolder)qobj));
+}
+
+JNIEXPORT void JNICALL
+Java_gl4java_GLUFuncJauJNInf_gluDeleteNurbsRenderer( JNIEnv *env, jobject obj,
+ jlong nobj )
+{
+ gluDeleteNurbsRenderer((void *)((PointerHolder)nobj));
+ RemoveCallbackNodes((void *)((PointerHolder)nobj));
+}
+
+JNIEXPORT void JNICALL
+Java_gl4java_GLUFuncJauJNInf_gluDeleteTess( JNIEnv *env, jobject obj,
+ jlong tobj )
+{
+ gluDeleteTess((GLUtesselator *)((PointerHolder)tobj));
+ RemoveCallbackNodes((void *)((PointerHolder)tobj));
+}
+
+JNIEXPORT jlong JNICALL
+Java_gl4java_GLUFuncJauJNInf_gluNewQuadric( JNIEnv *env, jobject obj)
+{
+ return (jlong)((PointerHolder)gluNewQuadric());
+}
+
+JNIEXPORT jlong JNICALL
+Java_gl4java_GLUFuncJauJNInf_gluNewNurbsRenderer( JNIEnv *env, jobject obj)
+{
+ return (jlong)((PointerHolder)gluNewNurbsRenderer());
+}
+
+JNIEXPORT jlong JNICALL
+Java_gl4java_GLUFuncJauJNInf_gluNewTess( JNIEnv *env, jobject obj)
+{
+ return (jlong)((PointerHolder)gluNewTess());
+}
+
+/**
+ * C2J Parser Version 1.5 Beta
+ * Jausoft - Sven Goethel Software Development
+ * Reading from file: glu-proto-auto.orig.h . . .
+ * Destination-Class: gl4java_GLUFuncJauJNInf !
+ */
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluLookAt ( GLdouble eyex , GLdouble eyey , GLdouble eyez , GLdouble centerx , GLdouble centery , GLdouble centerz , GLdouble upx , GLdouble upy , GLdouble upz ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluLookAt (
+ JNIEnv *env, jobject obj,
+ jdouble eyex,
+ jdouble eyey,
+ jdouble eyez,
+ jdouble centerx,
+ jdouble centery,
+ jdouble centerz,
+ jdouble upx,
+ jdouble upy,
+ jdouble upz)
+ {
+
+ gluLookAt (
+ (GLdouble) eyex,
+ (GLdouble) eyey,
+ (GLdouble) eyez,
+ (GLdouble) centerx,
+ (GLdouble) centery,
+ (GLdouble) centerz,
+ (GLdouble) upx,
+ (GLdouble) upy,
+ (GLdouble) upz
+ );
+
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluOrtho2D ( GLdouble left , GLdouble right , GLdouble bottom , GLdouble top ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluOrtho2D (
+ JNIEnv *env, jobject obj,
+ jdouble left,
+ jdouble right,
+ jdouble bottom,
+ jdouble top)
+ {
+
+ gluOrtho2D (
+ (GLdouble) left,
+ (GLdouble) right,
+ (GLdouble) bottom,
+ (GLdouble) top
+ );
+
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluPerspective ( GLdouble fovy , GLdouble aspect , GLdouble zNear , GLdouble zFar ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluPerspective (
+ JNIEnv *env, jobject obj,
+ jdouble fovy,
+ jdouble aspect,
+ jdouble zNear,
+ jdouble zFar)
+ {
+
+ gluPerspective (
+ (GLdouble) fovy,
+ (GLdouble) aspect,
+ (GLdouble) zNear,
+ (GLdouble) zFar
+ );
+
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluPickMatrix ( GLdouble x , GLdouble y , GLdouble width , GLdouble height , GLint * viewport ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluPickMatrix (
+ JNIEnv *env, jobject obj,
+ jdouble x,
+ jdouble y,
+ jdouble width,
+ jdouble height,
+ jintArray viewport)
+ {
+ jboolean isCopiedArray4 = JNI_FALSE;
+ jint *ptr4 = NULL;
+
+ if(viewport!=NULL)
+ {
+ ptr4 = (*env)->GetIntArrayElements(env, viewport, &isCopiedArray4);
+ }
+ gluPickMatrix (
+ (GLdouble) x,
+ (GLdouble) y,
+ (GLdouble) width,
+ (GLdouble) height,
+ (GLint *) ptr4
+ );
+
+ if(viewport!=NULL)
+ {
+ (*env)->ReleaseIntArrayElements(env, viewport, ptr4, (isCopiedArray4 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern GLint gluProject ( GLdouble objx , GLdouble objy , GLdouble objz , const GLdouble modelMatrix [ 16 ] , const GLdouble projMatrix [ 16 ] , const GLint viewport [ 4 ] , GLdouble * winx , GLdouble * winy , GLdouble * winz ) ;
+ * </pre>
+ */
+ JNIEXPORT jint JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluProject (
+ JNIEnv *env, jobject obj,
+ jdouble objx,
+ jdouble objy,
+ jdouble objz,
+ jdoubleArray modelMatrix,
+ jdoubleArray projMatrix,
+ jintArray viewport,
+ jdoubleArray winx,
+ jdoubleArray winy,
+ jdoubleArray winz)
+ {
+ jint ret;
+
+ jdouble *ptr3 = NULL;
+ jdouble *ptr4 = NULL;
+ jint *ptr5 = NULL;
+ jboolean isCopiedArray6 = JNI_FALSE;
+ jdouble *ptr6 = NULL;
+ jboolean isCopiedArray7 = JNI_FALSE;
+ jdouble *ptr7 = NULL;
+ jboolean isCopiedArray8 = JNI_FALSE;
+ jdouble *ptr8 = NULL;
+
+ if(modelMatrix!=NULL)
+ {
+ ptr3 = (*env)->GetDoubleArrayElements(env, modelMatrix, 0);
+ }
+ if(projMatrix!=NULL)
+ {
+ ptr4 = (*env)->GetDoubleArrayElements(env, projMatrix, 0);
+ }
+ if(viewport!=NULL)
+ {
+ ptr5 = (*env)->GetIntArrayElements(env, viewport, 0);
+ }
+ if(winx!=NULL)
+ {
+ ptr6 = (*env)->GetDoubleArrayElements(env, winx, &isCopiedArray6);
+ }
+ if(winy!=NULL)
+ {
+ ptr7 = (*env)->GetDoubleArrayElements(env, winy, &isCopiedArray7);
+ }
+ if(winz!=NULL)
+ {
+ ptr8 = (*env)->GetDoubleArrayElements(env, winz, &isCopiedArray8);
+ }
+ ret = (jint) gluProject (
+ (GLdouble) objx,
+ (GLdouble) objy,
+ (GLdouble) objz,
+ (const GLdouble *) ptr3,
+ (const GLdouble *) ptr4,
+ (const GLint *) ptr5,
+ (GLdouble *) ptr6,
+ (GLdouble *) ptr7,
+ (GLdouble *) ptr8
+ );
+
+ if(modelMatrix!=NULL)
+ {
+ (*env)->ReleaseDoubleArrayElements(env, modelMatrix, ptr3, JNI_ABORT);
+ }
+ if(projMatrix!=NULL)
+ {
+ (*env)->ReleaseDoubleArrayElements(env, projMatrix, ptr4, JNI_ABORT);
+ }
+ if(viewport!=NULL)
+ {
+ (*env)->ReleaseIntArrayElements(env, viewport, ptr5, JNI_ABORT);
+ }
+ if(winx!=NULL)
+ {
+ (*env)->ReleaseDoubleArrayElements(env, winx, ptr6, (isCopiedArray6 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ if(winy!=NULL)
+ {
+ (*env)->ReleaseDoubleArrayElements(env, winy, ptr7, (isCopiedArray7 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ if(winz!=NULL)
+ {
+ (*env)->ReleaseDoubleArrayElements(env, winz, ptr8, (isCopiedArray8 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ return ret;
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern GLint gluUnProject ( GLdouble winx , GLdouble winy , GLdouble winz , const GLdouble modelMatrix [ 16 ] , const GLdouble projMatrix [ 16 ] , const GLint viewport [ 4 ] , GLdouble * objx , GLdouble * objy , GLdouble * objz ) ;
+ * </pre>
+ */
+ JNIEXPORT jint JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluUnProject (
+ JNIEnv *env, jobject obj,
+ jdouble winx,
+ jdouble winy,
+ jdouble winz,
+ jdoubleArray modelMatrix,
+ jdoubleArray projMatrix,
+ jintArray viewport,
+ jdoubleArray objx,
+ jdoubleArray objy,
+ jdoubleArray objz)
+ {
+ jint ret;
+
+ jdouble *ptr3 = NULL;
+ jdouble *ptr4 = NULL;
+ jint *ptr5 = NULL;
+ jboolean isCopiedArray6 = JNI_FALSE;
+ jdouble *ptr6 = NULL;
+ jboolean isCopiedArray7 = JNI_FALSE;
+ jdouble *ptr7 = NULL;
+ jboolean isCopiedArray8 = JNI_FALSE;
+ jdouble *ptr8 = NULL;
+
+ if(modelMatrix!=NULL)
+ {
+ ptr3 = (*env)->GetDoubleArrayElements(env, modelMatrix, 0);
+ }
+ if(projMatrix!=NULL)
+ {
+ ptr4 = (*env)->GetDoubleArrayElements(env, projMatrix, 0);
+ }
+ if(viewport!=NULL)
+ {
+ ptr5 = (*env)->GetIntArrayElements(env, viewport, 0);
+ }
+ if(objx!=NULL)
+ {
+ ptr6 = (*env)->GetDoubleArrayElements(env, objx, &isCopiedArray6);
+ }
+ if(objy!=NULL)
+ {
+ ptr7 = (*env)->GetDoubleArrayElements(env, objy, &isCopiedArray7);
+ }
+ if(objz!=NULL)
+ {
+ ptr8 = (*env)->GetDoubleArrayElements(env, objz, &isCopiedArray8);
+ }
+ ret = (jint) gluUnProject (
+ (GLdouble) winx,
+ (GLdouble) winy,
+ (GLdouble) winz,
+ (const GLdouble *) ptr3,
+ (const GLdouble *) ptr4,
+ (const GLint *) ptr5,
+ (GLdouble *) ptr6,
+ (GLdouble *) ptr7,
+ (GLdouble *) ptr8
+ );
+
+ if(modelMatrix!=NULL)
+ {
+ (*env)->ReleaseDoubleArrayElements(env, modelMatrix, ptr3, JNI_ABORT);
+ }
+ if(projMatrix!=NULL)
+ {
+ (*env)->ReleaseDoubleArrayElements(env, projMatrix, ptr4, JNI_ABORT);
+ }
+ if(viewport!=NULL)
+ {
+ (*env)->ReleaseIntArrayElements(env, viewport, ptr5, JNI_ABORT);
+ }
+ if(objx!=NULL)
+ {
+ (*env)->ReleaseDoubleArrayElements(env, objx, ptr6, (isCopiedArray6 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ if(objy!=NULL)
+ {
+ (*env)->ReleaseDoubleArrayElements(env, objy, ptr7, (isCopiedArray7 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ if(objz!=NULL)
+ {
+ (*env)->ReleaseDoubleArrayElements(env, objz, ptr8, (isCopiedArray8 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ return ret;
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern GLint gluScaleImage ( GLenum format , GLsizei widthin , GLsizei heightin , GLenum typein , const char * datain , GLsizei widthout , GLsizei heightout , GLenum typeout , char * dataout ) ;
+ * </pre>
+ */
+ JNIEXPORT jint JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluScaleImage (
+ JNIEnv *env, jobject obj,
+ jint format,
+ jint widthin,
+ jint heightin,
+ jint typein,
+ jbyteArray datain,
+ jint widthout,
+ jint heightout,
+ jint typeout,
+ jbyteArray dataout)
+ {
+ jint ret;
+
+ jbyte *ptr4 = NULL;
+ jboolean isCopiedArray8 = JNI_FALSE;
+ jbyte *ptr8 = NULL;
+
+ if(datain!=NULL)
+ {
+ ptr4 = (*env)->GetByteArrayElements(env, datain, 0);
+ }
+ if(dataout!=NULL)
+ {
+ ptr8 = (*env)->GetByteArrayElements(env, dataout, &isCopiedArray8);
+ }
+ ret = (jint) gluScaleImage (
+ (GLenum) format,
+ (GLsizei) widthin,
+ (GLsizei) heightin,
+ (GLenum) typein,
+ (const char *) ptr4,
+ (GLsizei) widthout,
+ (GLsizei) heightout,
+ (GLenum) typeout,
+ (char *) ptr8
+ );
+
+ if(datain!=NULL)
+ {
+ (*env)->ReleaseByteArrayElements(env, datain, ptr4, JNI_ABORT);
+ }
+ if(dataout!=NULL)
+ {
+ (*env)->ReleaseByteArrayElements(env, dataout, ptr8, (isCopiedArray8 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ return ret;
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern GLint gluBuild1DMipmaps ( GLenum target , GLint components , GLint width , GLenum format , GLenum type , const void * data ) ;
+ * </pre>
+ */
+ JNIEXPORT jint JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluBuild1DMipmaps__IIIII_3B (
+ JNIEnv *env, jobject obj,
+ jint target,
+ jint components,
+ jint width,
+ jint format,
+ jint type,
+ jbyteArray data)
+ {
+ jint ret;
+
+ jbyte *ptr5 = NULL;
+
+ if(data!=NULL)
+ {
+ ptr5 = (*env)->GetByteArrayElements(env, data, 0);
+ }
+ ret = (jint) gluBuild1DMipmaps (
+ (GLenum) target,
+ (GLint) components,
+ (GLint) width,
+ (GLenum) format,
+ (GLenum) type,
+ (const void *) ptr5
+ );
+
+ if(data!=NULL)
+ {
+ (*env)->ReleaseByteArrayElements(env, data, ptr5, JNI_ABORT);
+ }
+ return ret;
+ }
+ JNIEXPORT jint JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluBuild1DMipmaps__IIIII_3S (
+ JNIEnv *env, jobject obj,
+ jint target,
+ jint components,
+ jint width,
+ jint format,
+ jint type,
+ jshortArray data)
+ {
+ jint ret;
+
+ jshort *ptr5 = NULL;
+
+ if(data!=NULL)
+ {
+ ptr5 = (*env)->GetShortArrayElements(env, data, 0);
+ }
+ ret = (jint) gluBuild1DMipmaps (
+ (GLenum) target,
+ (GLint) components,
+ (GLint) width,
+ (GLenum) format,
+ (GLenum) type,
+ (const void *) ptr5
+ );
+
+ if(data!=NULL)
+ {
+ (*env)->ReleaseShortArrayElements(env, data, ptr5, JNI_ABORT);
+ }
+ return ret;
+ }
+ JNIEXPORT jint JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluBuild1DMipmaps__IIIII_3I (
+ JNIEnv *env, jobject obj,
+ jint target,
+ jint components,
+ jint width,
+ jint format,
+ jint type,
+ jintArray data)
+ {
+ jint ret;
+
+ jint *ptr5 = NULL;
+
+ if(data!=NULL)
+ {
+ ptr5 = (*env)->GetIntArrayElements(env, data, 0);
+ }
+ ret = (jint) gluBuild1DMipmaps (
+ (GLenum) target,
+ (GLint) components,
+ (GLint) width,
+ (GLenum) format,
+ (GLenum) type,
+ (const void *) ptr5
+ );
+
+ if(data!=NULL)
+ {
+ (*env)->ReleaseIntArrayElements(env, data, ptr5, JNI_ABORT);
+ }
+ return ret;
+ }
+ JNIEXPORT jint JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluBuild1DMipmaps__IIIII_3F (
+ JNIEnv *env, jobject obj,
+ jint target,
+ jint components,
+ jint width,
+ jint format,
+ jint type,
+ jfloatArray data)
+ {
+ jint ret;
+
+ jfloat *ptr5 = NULL;
+
+ if(data!=NULL)
+ {
+ ptr5 = (*env)->GetFloatArrayElements(env, data, 0);
+ }
+ ret = (jint) gluBuild1DMipmaps (
+ (GLenum) target,
+ (GLint) components,
+ (GLint) width,
+ (GLenum) format,
+ (GLenum) type,
+ (const void *) ptr5
+ );
+
+ if(data!=NULL)
+ {
+ (*env)->ReleaseFloatArrayElements(env, data, ptr5, JNI_ABORT);
+ }
+ return ret;
+ }
+ JNIEXPORT jint JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluBuild1DMipmaps__IIIII_3D (
+ JNIEnv *env, jobject obj,
+ jint target,
+ jint components,
+ jint width,
+ jint format,
+ jint type,
+ jdoubleArray data)
+ {
+ jint ret;
+
+ jdouble *ptr5 = NULL;
+
+ if(data!=NULL)
+ {
+ ptr5 = (*env)->GetDoubleArrayElements(env, data, 0);
+ }
+ ret = (jint) gluBuild1DMipmaps (
+ (GLenum) target,
+ (GLint) components,
+ (GLint) width,
+ (GLenum) format,
+ (GLenum) type,
+ (const void *) ptr5
+ );
+
+ if(data!=NULL)
+ {
+ (*env)->ReleaseDoubleArrayElements(env, data, ptr5, JNI_ABORT);
+ }
+ return ret;
+ }
+ JNIEXPORT jint JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluBuild1DMipmaps__IIIII_3Z (
+ JNIEnv *env, jobject obj,
+ jint target,
+ jint components,
+ jint width,
+ jint format,
+ jint type,
+ jbooleanArray data)
+ {
+ jint ret;
+
+ jboolean *ptr5 = NULL;
+
+ if(data!=NULL)
+ {
+ ptr5 = (*env)->GetBooleanArrayElements(env, data, 0);
+ }
+ ret = (jint) gluBuild1DMipmaps (
+ (GLenum) target,
+ (GLint) components,
+ (GLint) width,
+ (GLenum) format,
+ (GLenum) type,
+ (const void *) ptr5
+ );
+
+ if(data!=NULL)
+ {
+ (*env)->ReleaseBooleanArrayElements(env, data, ptr5, JNI_ABORT);
+ }
+ return ret;
+ }
+ JNIEXPORT jint JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluBuild1DMipmaps__IIIII_3J (
+ JNIEnv *env, jobject obj,
+ jint target,
+ jint components,
+ jint width,
+ jint format,
+ jint type,
+ jlongArray data)
+ {
+ jint ret;
+
+ jlong *ptr5 = NULL;
+
+ if(data!=NULL)
+ {
+ ptr5 = (*env)->GetLongArrayElements(env, data, 0);
+ }
+ ret = (jint) gluBuild1DMipmaps (
+ (GLenum) target,
+ (GLint) components,
+ (GLint) width,
+ (GLenum) format,
+ (GLenum) type,
+ (const void *) ptr5
+ );
+
+ if(data!=NULL)
+ {
+ (*env)->ReleaseLongArrayElements(env, data, ptr5, JNI_ABORT);
+ }
+ return ret;
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern GLint gluBuild2DMipmaps ( GLenum target , GLint components , GLint width , GLint height , GLenum format , GLenum type , const void * data ) ;
+ * </pre>
+ */
+ JNIEXPORT jint JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluBuild2DMipmaps__IIIIII_3B (
+ JNIEnv *env, jobject obj,
+ jint target,
+ jint components,
+ jint width,
+ jint height,
+ jint format,
+ jint type,
+ jbyteArray data)
+ {
+ jint ret;
+
+ jbyte *ptr6 = NULL;
+
+ if(data!=NULL)
+ {
+ ptr6 = (*env)->GetByteArrayElements(env, data, 0);
+ }
+ ret = (jint) gluBuild2DMipmaps (
+ (GLenum) target,
+ (GLint) components,
+ (GLint) width,
+ (GLint) height,
+ (GLenum) format,
+ (GLenum) type,
+ (const void *) ptr6
+ );
+
+ if(data!=NULL)
+ {
+ (*env)->ReleaseByteArrayElements(env, data, ptr6, JNI_ABORT);
+ }
+ return ret;
+ }
+ JNIEXPORT jint JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluBuild2DMipmaps__IIIIII_3S (
+ JNIEnv *env, jobject obj,
+ jint target,
+ jint components,
+ jint width,
+ jint height,
+ jint format,
+ jint type,
+ jshortArray data)
+ {
+ jint ret;
+
+ jshort *ptr6 = NULL;
+
+ if(data!=NULL)
+ {
+ ptr6 = (*env)->GetShortArrayElements(env, data, 0);
+ }
+ ret = (jint) gluBuild2DMipmaps (
+ (GLenum) target,
+ (GLint) components,
+ (GLint) width,
+ (GLint) height,
+ (GLenum) format,
+ (GLenum) type,
+ (const void *) ptr6
+ );
+
+ if(data!=NULL)
+ {
+ (*env)->ReleaseShortArrayElements(env, data, ptr6, JNI_ABORT);
+ }
+ return ret;
+ }
+ JNIEXPORT jint JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluBuild2DMipmaps__IIIIII_3I (
+ JNIEnv *env, jobject obj,
+ jint target,
+ jint components,
+ jint width,
+ jint height,
+ jint format,
+ jint type,
+ jintArray data)
+ {
+ jint ret;
+
+ jint *ptr6 = NULL;
+
+ if(data!=NULL)
+ {
+ ptr6 = (*env)->GetIntArrayElements(env, data, 0);
+ }
+ ret = (jint) gluBuild2DMipmaps (
+ (GLenum) target,
+ (GLint) components,
+ (GLint) width,
+ (GLint) height,
+ (GLenum) format,
+ (GLenum) type,
+ (const void *) ptr6
+ );
+
+ if(data!=NULL)
+ {
+ (*env)->ReleaseIntArrayElements(env, data, ptr6, JNI_ABORT);
+ }
+ return ret;
+ }
+ JNIEXPORT jint JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluBuild2DMipmaps__IIIIII_3F (
+ JNIEnv *env, jobject obj,
+ jint target,
+ jint components,
+ jint width,
+ jint height,
+ jint format,
+ jint type,
+ jfloatArray data)
+ {
+ jint ret;
+
+ jfloat *ptr6 = NULL;
+
+ if(data!=NULL)
+ {
+ ptr6 = (*env)->GetFloatArrayElements(env, data, 0);
+ }
+ ret = (jint) gluBuild2DMipmaps (
+ (GLenum) target,
+ (GLint) components,
+ (GLint) width,
+ (GLint) height,
+ (GLenum) format,
+ (GLenum) type,
+ (const void *) ptr6
+ );
+
+ if(data!=NULL)
+ {
+ (*env)->ReleaseFloatArrayElements(env, data, ptr6, JNI_ABORT);
+ }
+ return ret;
+ }
+ JNIEXPORT jint JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluBuild2DMipmaps__IIIIII_3D (
+ JNIEnv *env, jobject obj,
+ jint target,
+ jint components,
+ jint width,
+ jint height,
+ jint format,
+ jint type,
+ jdoubleArray data)
+ {
+ jint ret;
+
+ jdouble *ptr6 = NULL;
+
+ if(data!=NULL)
+ {
+ ptr6 = (*env)->GetDoubleArrayElements(env, data, 0);
+ }
+ ret = (jint) gluBuild2DMipmaps (
+ (GLenum) target,
+ (GLint) components,
+ (GLint) width,
+ (GLint) height,
+ (GLenum) format,
+ (GLenum) type,
+ (const void *) ptr6
+ );
+
+ if(data!=NULL)
+ {
+ (*env)->ReleaseDoubleArrayElements(env, data, ptr6, JNI_ABORT);
+ }
+ return ret;
+ }
+ JNIEXPORT jint JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluBuild2DMipmaps__IIIIII_3Z (
+ JNIEnv *env, jobject obj,
+ jint target,
+ jint components,
+ jint width,
+ jint height,
+ jint format,
+ jint type,
+ jbooleanArray data)
+ {
+ jint ret;
+
+ jboolean *ptr6 = NULL;
+
+ if(data!=NULL)
+ {
+ ptr6 = (*env)->GetBooleanArrayElements(env, data, 0);
+ }
+ ret = (jint) gluBuild2DMipmaps (
+ (GLenum) target,
+ (GLint) components,
+ (GLint) width,
+ (GLint) height,
+ (GLenum) format,
+ (GLenum) type,
+ (const void *) ptr6
+ );
+
+ if(data!=NULL)
+ {
+ (*env)->ReleaseBooleanArrayElements(env, data, ptr6, JNI_ABORT);
+ }
+ return ret;
+ }
+ JNIEXPORT jint JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluBuild2DMipmaps__IIIIII_3J (
+ JNIEnv *env, jobject obj,
+ jint target,
+ jint components,
+ jint width,
+ jint height,
+ jint format,
+ jint type,
+ jlongArray data)
+ {
+ jint ret;
+
+ jlong *ptr6 = NULL;
+
+ if(data!=NULL)
+ {
+ ptr6 = (*env)->GetLongArrayElements(env, data, 0);
+ }
+ ret = (jint) gluBuild2DMipmaps (
+ (GLenum) target,
+ (GLint) components,
+ (GLint) width,
+ (GLint) height,
+ (GLenum) format,
+ (GLenum) type,
+ (const void *) ptr6
+ );
+
+ if(data!=NULL)
+ {
+ (*env)->ReleaseLongArrayElements(env, data, ptr6, JNI_ABORT);
+ }
+ return ret;
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluQuadricDrawStyle ( GLUquadricObj * quadObject , GLenum drawStyle ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluQuadricDrawStyle (
+ JNIEnv *env, jobject obj,
+ jlong quadObject,
+ jint drawStyle)
+ {
+
+ gluQuadricDrawStyle (
+ (GLUquadricObj *) (PointerHolder) quadObject,
+ (GLenum) drawStyle
+ );
+
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluQuadricOrientation ( GLUquadricObj * quadObject , GLenum orientation ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluQuadricOrientation (
+ JNIEnv *env, jobject obj,
+ jlong quadObject,
+ jint orientation)
+ {
+
+ gluQuadricOrientation (
+ (GLUquadricObj *) (PointerHolder) quadObject,
+ (GLenum) orientation
+ );
+
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluQuadricNormals ( GLUquadricObj * quadObject , GLenum normals ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluQuadricNormals (
+ JNIEnv *env, jobject obj,
+ jlong quadObject,
+ jint normals)
+ {
+
+ gluQuadricNormals (
+ (GLUquadricObj *) (PointerHolder) quadObject,
+ (GLenum) normals
+ );
+
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluQuadricTexture ( GLUquadricObj * quadObject , GLboolean textureCoords ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluQuadricTexture (
+ JNIEnv *env, jobject obj,
+ jlong quadObject,
+ jboolean textureCoords)
+ {
+
+ gluQuadricTexture (
+ (GLUquadricObj *) (PointerHolder) quadObject,
+ (GLboolean) textureCoords
+ );
+
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluCylinder ( GLUquadricObj * qobj , GLdouble baseRadius , GLdouble topRadius , GLdouble height , GLint slices , GLint stacks ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluCylinder (
+ JNIEnv *env, jobject obj,
+ jlong qobj,
+ jdouble baseRadius,
+ jdouble topRadius,
+ jdouble height,
+ jint slices,
+ jint stacks)
+ {
+
+ gluCylinder (
+ (GLUquadricObj *) (PointerHolder) qobj,
+ (GLdouble) baseRadius,
+ (GLdouble) topRadius,
+ (GLdouble) height,
+ (GLint) slices,
+ (GLint) stacks
+ );
+
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluSphere ( GLUquadricObj * qobj , GLdouble radius , GLint slices , GLint stacks ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluSphere (
+ JNIEnv *env, jobject obj,
+ jlong qobj,
+ jdouble radius,
+ jint slices,
+ jint stacks)
+ {
+
+ gluSphere (
+ (GLUquadricObj *) (PointerHolder) qobj,
+ (GLdouble) radius,
+ (GLint) slices,
+ (GLint) stacks
+ );
+
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluDisk ( GLUquadricObj * qobj , GLdouble innerRadius , GLdouble outerRadius , GLint slices , GLint loops ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluDisk (
+ JNIEnv *env, jobject obj,
+ jlong qobj,
+ jdouble innerRadius,
+ jdouble outerRadius,
+ jint slices,
+ jint loops)
+ {
+
+ gluDisk (
+ (GLUquadricObj *) (PointerHolder) qobj,
+ (GLdouble) innerRadius,
+ (GLdouble) outerRadius,
+ (GLint) slices,
+ (GLint) loops
+ );
+
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluPartialDisk ( GLUquadricObj * qobj , GLdouble innerRadius , GLdouble outerRadius , GLint slices , GLint loops , GLdouble startAngle , GLdouble sweepAngle ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluPartialDisk (
+ JNIEnv *env, jobject obj,
+ jlong qobj,
+ jdouble innerRadius,
+ jdouble outerRadius,
+ jint slices,
+ jint loops,
+ jdouble startAngle,
+ jdouble sweepAngle)
+ {
+
+ gluPartialDisk (
+ (GLUquadricObj *) (PointerHolder) qobj,
+ (GLdouble) innerRadius,
+ (GLdouble) outerRadius,
+ (GLint) slices,
+ (GLint) loops,
+ (GLdouble) startAngle,
+ (GLdouble) sweepAngle
+ );
+
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluLoadSamplingMatrices ( GLUnurbsObj * nobj , const GLfloat modelMatrix [ 16 ] , const GLfloat projMatrix [ 16 ] , const GLint viewport [ 4 ] ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluLoadSamplingMatrices (
+ JNIEnv *env, jobject obj,
+ jlong nobj,
+ jfloatArray modelMatrix,
+ jfloatArray projMatrix,
+ jintArray viewport)
+ {
+ jfloat *ptr1 = NULL;
+ jfloat *ptr2 = NULL;
+ jint *ptr3 = NULL;
+
+ if(modelMatrix!=NULL)
+ {
+ ptr1 = (*env)->GetFloatArrayElements(env, modelMatrix, 0);
+ }
+ if(projMatrix!=NULL)
+ {
+ ptr2 = (*env)->GetFloatArrayElements(env, projMatrix, 0);
+ }
+ if(viewport!=NULL)
+ {
+ ptr3 = (*env)->GetIntArrayElements(env, viewport, 0);
+ }
+ gluLoadSamplingMatrices (
+ (GLUnurbsObj *) (PointerHolder) nobj,
+ (const GLfloat *) ptr1,
+ (const GLfloat *) ptr2,
+ (const GLint *) ptr3
+ );
+
+ if(modelMatrix!=NULL)
+ {
+ (*env)->ReleaseFloatArrayElements(env, modelMatrix, ptr1, JNI_ABORT);
+ }
+ if(projMatrix!=NULL)
+ {
+ (*env)->ReleaseFloatArrayElements(env, projMatrix, ptr2, JNI_ABORT);
+ }
+ if(viewport!=NULL)
+ {
+ (*env)->ReleaseIntArrayElements(env, viewport, ptr3, JNI_ABORT);
+ }
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluNurbsProperty ( GLUnurbsObj * nobj , GLenum property , GLfloat value ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluNurbsProperty (
+ JNIEnv *env, jobject obj,
+ jlong nobj,
+ jint property,
+ jfloat value)
+ {
+
+ gluNurbsProperty (
+ (GLUnurbsObj *) (PointerHolder) nobj,
+ (GLenum) property,
+ (GLfloat) value
+ );
+
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluGetNurbsProperty ( GLUnurbsObj * nobj , GLenum property , GLfloat * value ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluGetNurbsProperty (
+ JNIEnv *env, jobject obj,
+ jlong nobj,
+ jint property,
+ jfloatArray value)
+ {
+ jboolean isCopiedArray2 = JNI_FALSE;
+ jfloat *ptr2 = NULL;
+
+ if(value!=NULL)
+ {
+ ptr2 = (*env)->GetFloatArrayElements(env, value, &isCopiedArray2);
+ }
+ gluGetNurbsProperty (
+ (GLUnurbsObj *) (PointerHolder) nobj,
+ (GLenum) property,
+ (GLfloat *) ptr2
+ );
+
+ if(value!=NULL)
+ {
+ (*env)->ReleaseFloatArrayElements(env, value, ptr2, (isCopiedArray2 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluBeginCurve ( GLUnurbsObj * nobj ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluBeginCurve (
+ JNIEnv *env, jobject obj,
+ jlong nobj)
+ {
+
+ gluBeginCurve (
+ (GLUnurbsObj *) (PointerHolder) nobj
+ );
+
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluEndCurve ( GLUnurbsObj * nobj ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluEndCurve (
+ JNIEnv *env, jobject obj,
+ jlong nobj)
+ {
+
+ gluEndCurve (
+ (GLUnurbsObj *) (PointerHolder) nobj
+ );
+
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluNurbsCurve ( GLUnurbsObj * nobj , GLint nknots , GLfloat * knot , GLint stride , GLfloat * ctlarray , GLint order , GLenum type ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluNurbsCurve (
+ JNIEnv *env, jobject obj,
+ jlong nobj,
+ jint nknots,
+ jfloatArray knot,
+ jint stride,
+ jfloatArray ctlarray,
+ jint order,
+ jint type)
+ {
+ jboolean isCopiedArray2 = JNI_FALSE;
+ jfloat *ptr2 = NULL;
+ jboolean isCopiedArray4 = JNI_FALSE;
+ jfloat *ptr4 = NULL;
+
+ if(knot!=NULL)
+ {
+ ptr2 = (*env)->GetFloatArrayElements(env, knot, &isCopiedArray2);
+ }
+ if(ctlarray!=NULL)
+ {
+ ptr4 = (*env)->GetFloatArrayElements(env, ctlarray, &isCopiedArray4);
+ }
+ gluNurbsCurve (
+ (GLUnurbsObj *) (PointerHolder) nobj,
+ (GLint) nknots,
+ (GLfloat *) ptr2,
+ (GLint) stride,
+ (GLfloat *) ptr4,
+ (GLint) order,
+ (GLenum) type
+ );
+
+ if(knot!=NULL)
+ {
+ (*env)->ReleaseFloatArrayElements(env, knot, ptr2, (isCopiedArray2 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ if(ctlarray!=NULL)
+ {
+ (*env)->ReleaseFloatArrayElements(env, ctlarray, ptr4, (isCopiedArray4 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluBeginSurface ( GLUnurbsObj * nobj ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluBeginSurface (
+ JNIEnv *env, jobject obj,
+ jlong nobj)
+ {
+
+ gluBeginSurface (
+ (GLUnurbsObj *) (PointerHolder) nobj
+ );
+
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluEndSurface ( GLUnurbsObj * nobj ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluEndSurface (
+ JNIEnv *env, jobject obj,
+ jlong nobj)
+ {
+
+ gluEndSurface (
+ (GLUnurbsObj *) (PointerHolder) nobj
+ );
+
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluNurbsSurface ( GLUnurbsObj * nobj , GLint sknot_count , GLfloat * sknot , GLint tknot_count , GLfloat * tknot , GLint s_stride , GLint t_stride , GLfloat * ctlarray , GLint sorder , GLint torder , GLenum type ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluNurbsSurface (
+ JNIEnv *env, jobject obj,
+ jlong nobj,
+ jint sknot_count,
+ jfloatArray sknot,
+ jint tknot_count,
+ jfloatArray tknot,
+ jint s_stride,
+ jint t_stride,
+ jfloatArray ctlarray,
+ jint sorder,
+ jint torder,
+ jint type)
+ {
+ jboolean isCopiedArray2 = JNI_FALSE;
+ jfloat *ptr2 = NULL;
+ jboolean isCopiedArray4 = JNI_FALSE;
+ jfloat *ptr4 = NULL;
+ jboolean isCopiedArray7 = JNI_FALSE;
+ jfloat *ptr7 = NULL;
+
+ if(sknot!=NULL)
+ {
+ ptr2 = (*env)->GetFloatArrayElements(env, sknot, &isCopiedArray2);
+ }
+ if(tknot!=NULL)
+ {
+ ptr4 = (*env)->GetFloatArrayElements(env, tknot, &isCopiedArray4);
+ }
+ if(ctlarray!=NULL)
+ {
+ ptr7 = (*env)->GetFloatArrayElements(env, ctlarray, &isCopiedArray7);
+ }
+ gluNurbsSurface (
+ (GLUnurbsObj *) (PointerHolder) nobj,
+ (GLint) sknot_count,
+ (GLfloat *) ptr2,
+ (GLint) tknot_count,
+ (GLfloat *) ptr4,
+ (GLint) s_stride,
+ (GLint) t_stride,
+ (GLfloat *) ptr7,
+ (GLint) sorder,
+ (GLint) torder,
+ (GLenum) type
+ );
+
+ if(sknot!=NULL)
+ {
+ (*env)->ReleaseFloatArrayElements(env, sknot, ptr2, (isCopiedArray2 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ if(tknot!=NULL)
+ {
+ (*env)->ReleaseFloatArrayElements(env, tknot, ptr4, (isCopiedArray4 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ if(ctlarray!=NULL)
+ {
+ (*env)->ReleaseFloatArrayElements(env, ctlarray, ptr7, (isCopiedArray7 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluBeginTrim ( GLUnurbsObj * nobj ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluBeginTrim (
+ JNIEnv *env, jobject obj,
+ jlong nobj)
+ {
+
+ gluBeginTrim (
+ (GLUnurbsObj *) (PointerHolder) nobj
+ );
+
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluEndTrim ( GLUnurbsObj * nobj ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluEndTrim (
+ JNIEnv *env, jobject obj,
+ jlong nobj)
+ {
+
+ gluEndTrim (
+ (GLUnurbsObj *) (PointerHolder) nobj
+ );
+
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluPwlCurve ( GLUnurbsObj * nobj , GLint count , GLfloat * array , GLint stride , GLenum type ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluPwlCurve (
+ JNIEnv *env, jobject obj,
+ jlong nobj,
+ jint count,
+ jfloatArray array,
+ jint stride,
+ jint type)
+ {
+ jboolean isCopiedArray2 = JNI_FALSE;
+ jfloat *ptr2 = NULL;
+
+ if(array!=NULL)
+ {
+ ptr2 = (*env)->GetFloatArrayElements(env, array, &isCopiedArray2);
+ }
+ gluPwlCurve (
+ (GLUnurbsObj *) (PointerHolder) nobj,
+ (GLint) count,
+ (GLfloat *) ptr2,
+ (GLint) stride,
+ (GLenum) type
+ );
+
+ if(array!=NULL)
+ {
+ (*env)->ReleaseFloatArrayElements(env, array, ptr2, (isCopiedArray2 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluTessBeginPolygon ( GLUtesselator * tobj , void * polygon_data ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluTessBeginPolygon__J_3B (
+ JNIEnv *env, jobject obj,
+ jlong tobj,
+ jbyteArray polygon_data)
+ {
+ jboolean isCopiedArray1 = JNI_FALSE;
+ jbyte *ptr1 = NULL;
+
+ if(polygon_data!=NULL)
+ {
+ ptr1 = (*env)->GetByteArrayElements(env, polygon_data, &isCopiedArray1);
+ }
+ gluTessBeginPolygon (
+ (GLUtesselator *) (PointerHolder) tobj,
+ (void *) ptr1
+ );
+
+ if(polygon_data!=NULL)
+ {
+ (*env)->ReleaseByteArrayElements(env, polygon_data, ptr1, (isCopiedArray1 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ }
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluTessBeginPolygon__J_3S (
+ JNIEnv *env, jobject obj,
+ jlong tobj,
+ jshortArray polygon_data)
+ {
+ jboolean isCopiedArray1 = JNI_FALSE;
+ jshort *ptr1 = NULL;
+
+ if(polygon_data!=NULL)
+ {
+ ptr1 = (*env)->GetShortArrayElements(env, polygon_data, &isCopiedArray1);
+ }
+ gluTessBeginPolygon (
+ (GLUtesselator *) (PointerHolder) tobj,
+ (void *) ptr1
+ );
+
+ if(polygon_data!=NULL)
+ {
+ (*env)->ReleaseShortArrayElements(env, polygon_data, ptr1, (isCopiedArray1 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ }
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluTessBeginPolygon__J_3I (
+ JNIEnv *env, jobject obj,
+ jlong tobj,
+ jintArray polygon_data)
+ {
+ jboolean isCopiedArray1 = JNI_FALSE;
+ jint *ptr1 = NULL;
+
+ if(polygon_data!=NULL)
+ {
+ ptr1 = (*env)->GetIntArrayElements(env, polygon_data, &isCopiedArray1);
+ }
+ gluTessBeginPolygon (
+ (GLUtesselator *) (PointerHolder) tobj,
+ (void *) ptr1
+ );
+
+ if(polygon_data!=NULL)
+ {
+ (*env)->ReleaseIntArrayElements(env, polygon_data, ptr1, (isCopiedArray1 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ }
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluTessBeginPolygon__J_3F (
+ JNIEnv *env, jobject obj,
+ jlong tobj,
+ jfloatArray polygon_data)
+ {
+ jboolean isCopiedArray1 = JNI_FALSE;
+ jfloat *ptr1 = NULL;
+
+ if(polygon_data!=NULL)
+ {
+ ptr1 = (*env)->GetFloatArrayElements(env, polygon_data, &isCopiedArray1);
+ }
+ gluTessBeginPolygon (
+ (GLUtesselator *) (PointerHolder) tobj,
+ (void *) ptr1
+ );
+
+ if(polygon_data!=NULL)
+ {
+ (*env)->ReleaseFloatArrayElements(env, polygon_data, ptr1, (isCopiedArray1 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ }
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluTessBeginPolygon__J_3D (
+ JNIEnv *env, jobject obj,
+ jlong tobj,
+ jdoubleArray polygon_data)
+ {
+ jboolean isCopiedArray1 = JNI_FALSE;
+ jdouble *ptr1 = NULL;
+
+ if(polygon_data!=NULL)
+ {
+ ptr1 = (*env)->GetDoubleArrayElements(env, polygon_data, &isCopiedArray1);
+ }
+ gluTessBeginPolygon (
+ (GLUtesselator *) (PointerHolder) tobj,
+ (void *) ptr1
+ );
+
+ if(polygon_data!=NULL)
+ {
+ (*env)->ReleaseDoubleArrayElements(env, polygon_data, ptr1, (isCopiedArray1 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ }
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluTessBeginPolygon__J_3Z (
+ JNIEnv *env, jobject obj,
+ jlong tobj,
+ jbooleanArray polygon_data)
+ {
+ jboolean isCopiedArray1 = JNI_FALSE;
+ jboolean *ptr1 = NULL;
+
+ if(polygon_data!=NULL)
+ {
+ ptr1 = (*env)->GetBooleanArrayElements(env, polygon_data, &isCopiedArray1);
+ }
+ gluTessBeginPolygon (
+ (GLUtesselator *) (PointerHolder) tobj,
+ (void *) ptr1
+ );
+
+ if(polygon_data!=NULL)
+ {
+ (*env)->ReleaseBooleanArrayElements(env, polygon_data, ptr1, (isCopiedArray1 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ }
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluTessBeginPolygon__J_3J (
+ JNIEnv *env, jobject obj,
+ jlong tobj,
+ jlongArray polygon_data)
+ {
+ jboolean isCopiedArray1 = JNI_FALSE;
+ jlong *ptr1 = NULL;
+
+ if(polygon_data!=NULL)
+ {
+ ptr1 = (*env)->GetLongArrayElements(env, polygon_data, &isCopiedArray1);
+ }
+ gluTessBeginPolygon (
+ (GLUtesselator *) (PointerHolder) tobj,
+ (void *) ptr1
+ );
+
+ if(polygon_data!=NULL)
+ {
+ (*env)->ReleaseLongArrayElements(env, polygon_data, ptr1, (isCopiedArray1 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluTessBeginContour ( GLUtesselator * tobj ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluTessBeginContour (
+ JNIEnv *env, jobject obj,
+ jlong tobj)
+ {
+
+ gluTessBeginContour (
+ (GLUtesselator *) (PointerHolder) tobj
+ );
+
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluTessVertex ( GLUtesselator * tobj , GLdouble coords [ 3 ] , void * vertex_data ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluTessVertex__J_3D_3B (
+ JNIEnv *env, jobject obj,
+ jlong tobj,
+ jdoubleArray coords,
+ jbyteArray vertex_data)
+ {
+ jboolean isCopiedArray1 = JNI_FALSE;
+ jdouble *ptr1 = NULL;
+ jboolean isCopiedArray2 = JNI_FALSE;
+ jbyte *ptr2 = NULL;
+
+ if(coords!=NULL)
+ {
+ ptr1 = (*env)->GetDoubleArrayElements(env, coords, &isCopiedArray1);
+ }
+ if(vertex_data!=NULL)
+ {
+ ptr2 = (*env)->GetByteArrayElements(env, vertex_data, &isCopiedArray2);
+ }
+ gluTessVertex (
+ (GLUtesselator *) (PointerHolder) tobj,
+ (GLdouble *) ptr1,
+ (void *) ptr2
+ );
+
+ if(coords!=NULL)
+ {
+ (*env)->ReleaseDoubleArrayElements(env, coords, ptr1, (isCopiedArray1 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ if(vertex_data!=NULL)
+ {
+ (*env)->ReleaseByteArrayElements(env, vertex_data, ptr2, (isCopiedArray2 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ }
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluTessVertex__J_3D_3S (
+ JNIEnv *env, jobject obj,
+ jlong tobj,
+ jdoubleArray coords,
+ jshortArray vertex_data)
+ {
+ jboolean isCopiedArray1 = JNI_FALSE;
+ jdouble *ptr1 = NULL;
+ jboolean isCopiedArray2 = JNI_FALSE;
+ jshort *ptr2 = NULL;
+
+ if(coords!=NULL)
+ {
+ ptr1 = (*env)->GetDoubleArrayElements(env, coords, &isCopiedArray1);
+ }
+ if(vertex_data!=NULL)
+ {
+ ptr2 = (*env)->GetShortArrayElements(env, vertex_data, &isCopiedArray2);
+ }
+ gluTessVertex (
+ (GLUtesselator *) (PointerHolder) tobj,
+ (GLdouble *) ptr1,
+ (void *) ptr2
+ );
+
+ if(coords!=NULL)
+ {
+ (*env)->ReleaseDoubleArrayElements(env, coords, ptr1, (isCopiedArray1 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ if(vertex_data!=NULL)
+ {
+ (*env)->ReleaseShortArrayElements(env, vertex_data, ptr2, (isCopiedArray2 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ }
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluTessVertex__J_3D_3I (
+ JNIEnv *env, jobject obj,
+ jlong tobj,
+ jdoubleArray coords,
+ jintArray vertex_data)
+ {
+ jboolean isCopiedArray1 = JNI_FALSE;
+ jdouble *ptr1 = NULL;
+ jboolean isCopiedArray2 = JNI_FALSE;
+ jint *ptr2 = NULL;
+
+ if(coords!=NULL)
+ {
+ ptr1 = (*env)->GetDoubleArrayElements(env, coords, &isCopiedArray1);
+ }
+ if(vertex_data!=NULL)
+ {
+ ptr2 = (*env)->GetIntArrayElements(env, vertex_data, &isCopiedArray2);
+ }
+ gluTessVertex (
+ (GLUtesselator *) (PointerHolder) tobj,
+ (GLdouble *) ptr1,
+ (void *) ptr2
+ );
+
+ if(coords!=NULL)
+ {
+ (*env)->ReleaseDoubleArrayElements(env, coords, ptr1, (isCopiedArray1 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ if(vertex_data!=NULL)
+ {
+ (*env)->ReleaseIntArrayElements(env, vertex_data, ptr2, (isCopiedArray2 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ }
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluTessVertex__J_3D_3F (
+ JNIEnv *env, jobject obj,
+ jlong tobj,
+ jdoubleArray coords,
+ jfloatArray vertex_data)
+ {
+ jboolean isCopiedArray1 = JNI_FALSE;
+ jdouble *ptr1 = NULL;
+ jboolean isCopiedArray2 = JNI_FALSE;
+ jfloat *ptr2 = NULL;
+
+ if(coords!=NULL)
+ {
+ ptr1 = (*env)->GetDoubleArrayElements(env, coords, &isCopiedArray1);
+ }
+ if(vertex_data!=NULL)
+ {
+ ptr2 = (*env)->GetFloatArrayElements(env, vertex_data, &isCopiedArray2);
+ }
+ gluTessVertex (
+ (GLUtesselator *) (PointerHolder) tobj,
+ (GLdouble *) ptr1,
+ (void *) ptr2
+ );
+
+ if(coords!=NULL)
+ {
+ (*env)->ReleaseDoubleArrayElements(env, coords, ptr1, (isCopiedArray1 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ if(vertex_data!=NULL)
+ {
+ (*env)->ReleaseFloatArrayElements(env, vertex_data, ptr2, (isCopiedArray2 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ }
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluTessVertex__J_3D_3D (
+ JNIEnv *env, jobject obj,
+ jlong tobj,
+ jdoubleArray coords,
+ jdoubleArray vertex_data)
+ {
+ jboolean isCopiedArray1 = JNI_FALSE;
+ jdouble *ptr1 = NULL;
+ jboolean isCopiedArray2 = JNI_FALSE;
+ jdouble *ptr2 = NULL;
+
+ if(coords!=NULL)
+ {
+ ptr1 = (*env)->GetDoubleArrayElements(env, coords, &isCopiedArray1);
+ }
+ if(vertex_data!=NULL)
+ {
+ ptr2 = (*env)->GetDoubleArrayElements(env, vertex_data, &isCopiedArray2);
+ }
+ gluTessVertex (
+ (GLUtesselator *) (PointerHolder) tobj,
+ (GLdouble *) ptr1,
+ (void *) ptr2
+ );
+
+ if(coords!=NULL)
+ {
+ (*env)->ReleaseDoubleArrayElements(env, coords, ptr1, (isCopiedArray1 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ if(vertex_data!=NULL)
+ {
+ (*env)->ReleaseDoubleArrayElements(env, vertex_data, ptr2, (isCopiedArray2 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ }
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluTessVertex__J_3D_3Z (
+ JNIEnv *env, jobject obj,
+ jlong tobj,
+ jdoubleArray coords,
+ jbooleanArray vertex_data)
+ {
+ jboolean isCopiedArray1 = JNI_FALSE;
+ jdouble *ptr1 = NULL;
+ jboolean isCopiedArray2 = JNI_FALSE;
+ jboolean *ptr2 = NULL;
+
+ if(coords!=NULL)
+ {
+ ptr1 = (*env)->GetDoubleArrayElements(env, coords, &isCopiedArray1);
+ }
+ if(vertex_data!=NULL)
+ {
+ ptr2 = (*env)->GetBooleanArrayElements(env, vertex_data, &isCopiedArray2);
+ }
+ gluTessVertex (
+ (GLUtesselator *) (PointerHolder) tobj,
+ (GLdouble *) ptr1,
+ (void *) ptr2
+ );
+
+ if(coords!=NULL)
+ {
+ (*env)->ReleaseDoubleArrayElements(env, coords, ptr1, (isCopiedArray1 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ if(vertex_data!=NULL)
+ {
+ (*env)->ReleaseBooleanArrayElements(env, vertex_data, ptr2, (isCopiedArray2 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ }
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluTessVertex__J_3D_3J (
+ JNIEnv *env, jobject obj,
+ jlong tobj,
+ jdoubleArray coords,
+ jlongArray vertex_data)
+ {
+ jboolean isCopiedArray1 = JNI_FALSE;
+ jdouble *ptr1 = NULL;
+ jboolean isCopiedArray2 = JNI_FALSE;
+ jlong *ptr2 = NULL;
+
+ if(coords!=NULL)
+ {
+ ptr1 = (*env)->GetDoubleArrayElements(env, coords, &isCopiedArray1);
+ }
+ if(vertex_data!=NULL)
+ {
+ ptr2 = (*env)->GetLongArrayElements(env, vertex_data, &isCopiedArray2);
+ }
+ gluTessVertex (
+ (GLUtesselator *) (PointerHolder) tobj,
+ (GLdouble *) ptr1,
+ (void *) ptr2
+ );
+
+ if(coords!=NULL)
+ {
+ (*env)->ReleaseDoubleArrayElements(env, coords, ptr1, (isCopiedArray1 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ if(vertex_data!=NULL)
+ {
+ (*env)->ReleaseLongArrayElements(env, vertex_data, ptr2, (isCopiedArray2 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluTessEndContour ( GLUtesselator * tobj ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluTessEndContour (
+ JNIEnv *env, jobject obj,
+ jlong tobj)
+ {
+
+ gluTessEndContour (
+ (GLUtesselator *) (PointerHolder) tobj
+ );
+
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluTessEndPolygon ( GLUtesselator * tobj ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluTessEndPolygon (
+ JNIEnv *env, jobject obj,
+ jlong tobj)
+ {
+
+ gluTessEndPolygon (
+ (GLUtesselator *) (PointerHolder) tobj
+ );
+
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluTessProperty ( GLUtesselator * tobj , GLenum which , GLdouble value ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluTessProperty (
+ JNIEnv *env, jobject obj,
+ jlong tobj,
+ jint which,
+ jdouble value)
+ {
+
+ gluTessProperty (
+ (GLUtesselator *) (PointerHolder) tobj,
+ (GLenum) which,
+ (GLdouble) value
+ );
+
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluTessNormal ( GLUtesselator * tobj , GLdouble x , GLdouble y , GLdouble z ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluTessNormal (
+ JNIEnv *env, jobject obj,
+ jlong tobj,
+ jdouble x,
+ jdouble y,
+ jdouble z)
+ {
+
+ gluTessNormal (
+ (GLUtesselator *) (PointerHolder) tobj,
+ (GLdouble) x,
+ (GLdouble) y,
+ (GLdouble) z
+ );
+
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluGetTessProperty ( GLUtesselator * tobj , GLenum which , GLdouble * value ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluGetTessProperty (
+ JNIEnv *env, jobject obj,
+ jlong tobj,
+ jint which,
+ jdoubleArray value)
+ {
+ jboolean isCopiedArray2 = JNI_FALSE;
+ jdouble *ptr2 = NULL;
+
+ if(value!=NULL)
+ {
+ ptr2 = (*env)->GetDoubleArrayElements(env, value, &isCopiedArray2);
+ }
+ gluGetTessProperty (
+ (GLUtesselator *) (PointerHolder) tobj,
+ (GLenum) which,
+ (GLdouble *) ptr2
+ );
+
+ if(value!=NULL)
+ {
+ (*env)->ReleaseDoubleArrayElements(env, value, ptr2, (isCopiedArray2 == JNI_TRUE)?0:JNI_ABORT);
+ }
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluBeginPolygon ( GLUtesselator * tobj ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluBeginPolygon (
+ JNIEnv *env, jobject obj,
+ jlong tobj)
+ {
+
+ gluBeginPolygon (
+ (GLUtesselator *) (PointerHolder) tobj
+ );
+
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluNextContour ( GLUtesselator * tobj , GLenum type ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluNextContour (
+ JNIEnv *env, jobject obj,
+ jlong tobj,
+ jint type)
+ {
+
+ gluNextContour (
+ (GLUtesselator *) (PointerHolder) tobj,
+ (GLenum) type
+ );
+
+ }
+
+/**
+ * Original Function-Prototype :
+ * <pre>
+ extern void gluEndPolygon ( GLUtesselator * tobj ) ;
+ * </pre>
+ */
+ JNIEXPORT void JNICALL
+ Java_gl4java_GLUFuncJauJNInf_gluEndPolygon (
+ JNIEnv *env, jobject obj,
+ jlong tobj)
+ {
+
+ gluEndPolygon (
+ (GLUtesselator *) (PointerHolder) tobj
+ );
+
+ }
+
+/* C2J Parser Version 1.5 Beta: Java program parsed successfully. */
diff --git a/CNativeCode/OpenGLU_JauJNItst_funcs.c b/CNativeCode/OpenGLU_JauJNItst_funcs.c index 1fc3b2c..4c6fa7e 100644 --- a/CNativeCode/OpenGLU_JauJNItst_funcs.c +++ b/CNativeCode/OpenGLU_JauJNItst_funcs.c @@ -62,7 +62,7 @@ Java_gl4java_GLUFuncJauJNI_gluGetString ( JNIEnv *env, jobject obj, } static const char * _glu_lib_vendor_="Jausoft - Sven Goethel Software Development"; -static const char * _glu_lib_version_="2.4.1.0"; +static const char * _glu_lib_version_="2.5.2.0"; JNIEXPORT jstring JNICALL Java_gl4java_GLUFuncJauJNI_getNativeVendor ( JNIEnv *env, jobject obj ) diff --git a/CNativeCode/OpenGL_Win32.c b/CNativeCode/OpenGL_Win32.c index 8f77752..df4ad2d 100755 --- a/CNativeCode/OpenGL_Win32.c +++ b/CNativeCode/OpenGL_Win32.c @@ -75,26 +75,26 @@ Java_gl4java_GLContext_openOpenGLNative( JNIEnv *env, jobject obj, jfieldID fpixmapHandle=0;
jfieldID foffScreenRenderer=0;
jfieldID faccumSize=0;
- jfieldID fwindowHandle=0, fpData=0, fdoubleBuffer=0, fstereoView=0, fstencilBits=0;
+ jfieldID fwindowHandle=0, fpData=0;
jfieldID fverbose=0;
jfieldID fglContext=0;
jfieldID fshareWith=0;
jfieldID fcreatewinw = 0, fcreatewinh = 0;
+ jfieldID fglCaps=0;
/* these variables will be mapped in the java-object ! */
jboolean joffScreenRenderer=JNI_FALSE;
- jboolean jdoubleBuffer=JNI_TRUE;
- jboolean jstereoView=JNI_FALSE;
- jint jstencilBits=0;
- jint jaccumSize=0;
HDC thisWin=0;
HGLRC gc=0;
+ PIXELFORMATDESCRIPTOR pfd;
HDC pData=0;
HGLRC shareWith=NULL;
jint jcreatewinw = 0, jcreatewinh = 0;
HBITMAP pix=0;
-
- PIXELFORMATDESCRIPTOR pfd;
+ GLCapabilities glCaps;
+ jobject jglCaps=0;
+ jthrowable exc;
+ jclass _GLCapabilities= 0;
(void) canvas;
@@ -103,7 +103,7 @@ Java_gl4java_GLContext_openOpenGLNative( JNIEnv *env, jobject obj, {
fprintf(stderr,"oo0.0 cls==0\n");
fflush(stderr);
- ret=JNI_FALSE;
+ return JNI_FALSE;
}
if(ret==JNI_TRUE)
@@ -113,7 +113,7 @@ Java_gl4java_GLContext_openOpenGLNative( JNIEnv *env, jobject obj, {
fprintf(stderr,"oo0.2 fverbose==0\n");
fflush(stderr);
- ret=JNI_FALSE;
+ return JNI_FALSE;
} else {
verbose = (*env)->GetStaticBooleanField(env, cls, fverbose);
}
@@ -133,8 +133,11 @@ Java_gl4java_GLContext_openOpenGLNative( JNIEnv *env, jobject obj, if(ret==JNI_TRUE) {
fpData = (*env)->GetFieldID(env, cls, "pData", "J");
- if (fpData == 0) ret= JNI_FALSE;
- else pData = (HDC)
+ if (fpData == 0) {
+ fprintf(stderr, "pData not accessible !\n");
+ fflush(stderr);
+ ret= JNI_FALSE;
+ } else pData = (HDC)
( (PointerHolder)(*env)->GetLongField(env, obj, fpData));
}
if(JNI_TRUE==verbose)
@@ -144,43 +147,80 @@ Java_gl4java_GLContext_openOpenGLNative( JNIEnv *env, jobject obj, if(ret==JNI_TRUE) {
fwindowHandle = (*env)->GetFieldID(env, cls, "windowHandle", "J");
- if (fwindowHandle == 0) ret= JNI_FALSE;
+ if (fwindowHandle == 0) {
+ fprintf(stderr, "windowHandle not accessible !\n");
+ fflush(stderr);
+ ret= JNI_FALSE;
+ }
}
if(ret==JNI_TRUE) {
fglContext=(*env)->GetFieldID(env, cls, "glContext", "J");
- if (fglContext == 0) ret= JNI_FALSE;
+ if (fglContext == 0)
+ {
+ fprintf(stderr, "fglContext not accessible !\n");
+ fflush(stderr);
+ ret= JNI_FALSE;
+ }
}
if(ret==JNI_TRUE) {
foffScreenRenderer =
(*env)->GetFieldID(env, cls, "offScreenRenderer", "Z");
- if (foffScreenRenderer == 0) ret= JNI_FALSE;
+ if (foffScreenRenderer == 0)
+ {
+ fprintf(stderr, "foffScreenRenderer not accessible !\n");
+ fflush(stderr);
+ ret= JNI_FALSE;
+ }
else joffScreenRenderer =(*env)->GetBooleanField(env, obj, foffScreenRenderer);
}
if(ret==JNI_TRUE) {
- fdoubleBuffer = (*env)->GetFieldID(env, cls, "doubleBuffer", "Z");
- if (fdoubleBuffer == 0) ret= JNI_FALSE;
- else jdoubleBuffer =(*env)->GetBooleanField(env, obj, fdoubleBuffer);
- }
-
- if(ret==JNI_TRUE) {
- fstereoView = (*env)->GetFieldID(env, cls, "stereoView", "Z");
- if (fstereoView == 0) ret= JNI_FALSE;
- else jstereoView =(*env)->GetBooleanField(env, obj, fstereoView);
+ fglCaps = (*env)->GetFieldID(env, cls, "glCaps", "Lgl4java/GLCapabilities;");
+ if (fglCaps == 0)
+ {
+ fprintf(stderr, "fglCaps not accessible !\n");
+ fflush(stderr);
+ ret= JNI_FALSE;
+ }
+ else jglCaps =(*env)->GetObjectField(env, obj, fglCaps);
}
- if(ret==JNI_TRUE) {
- fstencilBits = (*env)->GetFieldID(env, cls, "stencilBits", "I");
- if (fstencilBits == 0) ret= JNI_FALSE;
- else jstencilBits =(*env)->GetIntField(env, obj, fstencilBits);
+ if( jglCaps==0 )
+ {
+ fprintf(stderr,"\nGL4Java openOpenGL ERROR: ZERO capsObj was fetched by GetObjectField !\n");
+ fflush(stderr);
+ return JNI_FALSE;
+ }
+
+ _GLCapabilities= (*env)->FindClass(env, "Lgl4java/GLCapabilities;");
+ exc = (*env)->ExceptionOccurred(env);
+ if(exc) {
+ if(JNI_TRUE==verbose)
+ {
+ fprintf(stderr, "GL4Java: openOpen FindClass gl4java/GLCapabilities failed, cannot check glCaps object\n");
+ (*env)->ExceptionDescribe(env);
+ fflush(stderr);
+ }
+ (*env)->ExceptionClear(env);
+ _GLCapabilities=0;
+ }
+ exc=0;
+
+ if( _GLCapabilities!=0 &&
+ (*env)->IsInstanceOf(env, jglCaps, _GLCapabilities)==JNI_FALSE )
+ {
+ fprintf(stderr,"\nGL4Java openOpenGL ERROR: glCaps is not instanceof gl4java/GLCapabilities !\n");
+ fflush(stderr);
+ return JNI_FALSE;
}
- if(ret==JNI_TRUE) {
- faccumSize = (*env)->GetFieldID(env, cls, "accumSize", "I");
- if (faccumSize == 0) ret= JNI_FALSE;
- else jaccumSize =(*env)->GetIntField(env, obj, faccumSize);
+ if( JNI_TRUE != javaGLCapabilities2NativeGLCapabilities ( env, jglCaps, &glCaps ) )
+ {
+ fprintf(stderr,"\nGL4Java ERROR: glCaps Object is not valid !\n");
+ fflush(stderr);
+ return JNI_FALSE;
}
if(ret==JNI_TRUE) {
@@ -209,7 +249,7 @@ Java_gl4java_GLContext_openOpenGLNative( JNIEnv *env, jobject obj, if(joffScreenRenderer==JNI_TRUE)
{
- jdoubleBuffer = JNI_FALSE;
+ glCaps.buffer=BUFFER_SINGLE;
}
if(JNI_TRUE==verbose && joffScreenRenderer==JNI_TRUE)
@@ -236,8 +276,10 @@ Java_gl4java_GLContext_openOpenGLNative( JNIEnv *env, jobject obj, thisWin = (HDC)pData;
/* get the graphics context for this widget */
- if( (gc = get_GC( &thisWin, jdoubleBuffer, jstereoView, jstencilBits, shareWith,
- joffScreenRenderer, jcreatewinw, jcreatewinh, &pix, verbose)) == 0 )
+ if( (gc = get_GC( &thisWin, &glCaps, shareWith,
+ joffScreenRenderer, jcreatewinw, jcreatewinh,
+ &pix, verbose)) == 0
+ )
{
printf( "getGC error" );
return JNI_FALSE;
@@ -246,24 +288,19 @@ Java_gl4java_GLContext_openOpenGLNative( JNIEnv *env, jobject obj, /* fetch the states of doubleBuffer and stereo */
(void) PixelFormatDescriptorFromDc( thisWin, &pfd);
- jdoubleBuffer = (pfd.dwFlags & PFD_DOUBLEBUFFER)?JNI_TRUE:JNI_FALSE;
- if(ret==JNI_TRUE && fdoubleBuffer!=0) {
- (*env)->SetBooleanField(env, obj, fdoubleBuffer,
- jdoubleBuffer);
+ if(JNI_TRUE==verbose)
+ {
+ fprintf(stdout,"\nGL4Java: writing capabilities to GLContext's java object\n");
+ fflush(stdout);
}
- jstencilBits = (jint)(pfd.cStencilBits);
- if(ret==JNI_TRUE && fstencilBits!=0) {
- (*env)->SetIntField(env, obj,
- fstencilBits, (jint)jstencilBits);
- }
-
- jaccumSize=(jint)(pfd.cAccumRedBits+pfd.cAccumGreenBits+pfd.cAccumBlueBits+pfd.cAccumAlphaBits);
- if(ret==JNI_TRUE && faccumSize!=0) {
- (*env)->SetIntField(env, obj,
- faccumSize, (jint)jaccumSize);
- }
+ if(jglCaps!=0)
+ (void) nativeGLCapabilities2JavaGLCapabilities (env, jglCaps, &glCaps);
+ if(ret==JNI_TRUE && fglCaps && jglCaps) {
+ (*env)->SetObjectField(env, obj, fglCaps, jglCaps);
+ }
+
if(ret==JNI_TRUE && fwindowHandle!=0) {
(*env)->SetLongField(env, obj, fwindowHandle,
(jlong)((PointerHolder)thisWin));
diff --git a/CNativeCode/OpenGL_Win32_common.c b/CNativeCode/OpenGL_Win32_common.c index dcf5822..8368677 100755 --- a/CNativeCode/OpenGL_Win32_common.c +++ b/CNativeCode/OpenGL_Win32_common.c @@ -17,8 +17,8 @@ #include "OpenGL_Win32_common.h"
-HGLRC LIBAPIENTRY get_GC( HDC * hDC, jboolean doubleBuffer,
- jboolean stereo, jint stencilBits, HGLRC shareWith,
+HGLRC LIBAPIENTRY get_GC( HDC * hDC, GLCapabilities *glCaps,
+ HGLRC shareWith,
jboolean offScreenRenderer,
int width, int height, HBITMAP *pix,
jboolean verbose)
@@ -45,7 +45,7 @@ HGLRC LIBAPIENTRY get_GC( HDC * hDC, jboolean doubleBuffer, /* setupPalette(hDC); USE MY PROC */
}
- SetDCPixelFormat(*hDC, doubleBuffer, stereo, stencilBits, offScreenRenderer, verbose);
+ SetDCPixelFormat(*hDC, glCaps, offScreenRenderer, verbose);
// Create palette if needed
hPalette = GetOpenGLPalette(*hDC);
@@ -89,64 +89,116 @@ HGLRC LIBAPIENTRY get_GC( HDC * hDC, jboolean doubleBuffer, return tempRC;
}
-// Select the pixel format for a given device context
-void LIBAPIENTRY SetDCPixelFormat(HDC hDC, jboolean doubleBuffer,
- jboolean stereo, jint stencilBits, jboolean offScreenRenderer,
- jboolean verbose)
+void LIBAPIENTRY setPixelFormatByGLCapabilities(
+ PIXELFORMATDESCRIPTOR *pfd,
+ GLCapabilities *glCaps,
+ jboolean offScreenRenderer,
+ HDC hdc)
{
- int nPixelFormat=0;
- const char * text=0;
- PIXELFORMATDESCRIPTOR pfd = {
- sizeof(PIXELFORMATDESCRIPTOR), // Size of this structure
- 1, // Version of this structure
- 0, // will be defined later !!!!
- PFD_TYPE_RGBA, // RGBA Color mode
- 24, // Want 24bit color
- 0,0,0,0,0,0, // Not used to select mode
- 0,0, // Not used to select mode
- 0,0,0,0,0, // Not used to select mode
- 32, // Size of depth buffer
- 0, // Not used to select mode
- 0, // Not used to select mode
- PFD_MAIN_PLANE, // Draw in main plane
- 0, // Not used to select mode
- 0,0,0 }; // Not used to select mode
-
-
- // customize dw_flags
- DWORD dw_flags = PFD_SUPPORT_OPENGL | PFD_GENERIC_ACCELERATED; // Support accelerated OpenGL calls in window
+ int colorBits = glCaps->redBits + glCaps->greenBits + glCaps->blueBits;
+
+ pfd->nSize=sizeof(PIXELFORMATDESCRIPTOR);
+ pfd->nVersion=1;
+ pfd->dwFlags=PFD_SUPPORT_OPENGL | PFD_GENERIC_ACCELERATED; /* refined later */
+ pfd->iPixelType=0;
+ pfd->cColorBits=0;
+ pfd->cRedBits=0;
+ pfd->cRedShift=0;
+ pfd->cGreenBits=0;
+ pfd->cGreenShift=0;
+ pfd->cBlueBits=0;
+ pfd->cBlueShift=0;
+ pfd->cAlphaBits=0;
+ pfd->cAlphaShift=0;
+ pfd->cAccumBits=0;
+ pfd->cAccumRedBits=0;
+ pfd->cAccumGreenBits=0;
+ pfd->cAccumBlueBits=0;
+ pfd->cAccumAlphaBits=0;
+ pfd->cDepthBits=32;
+ pfd->cStencilBits=0;
+ pfd->cAuxBuffers=0;
+ pfd->iLayerType=PFD_MAIN_PLANE;
+ pfd->bReserved=0;
+ pfd->dwLayerMask=0;
+ pfd->dwVisibleMask=0;
+ pfd->dwDamageMask=0;
+
+ if(COLOR_RGBA == glCaps->color)
+ pfd->iPixelType=PFD_TYPE_RGBA;
+ else
+ pfd->iPixelType=PFD_TYPE_COLORINDEX;
- if(offScreenRenderer)
- dw_flags |= PFD_DRAW_TO_BITMAP; // Draw to Bitmap
+ if(offScreenRenderer)
+ pfd->dwFlags |= PFD_DRAW_TO_BITMAP; // Draw to Bitmap
else
- dw_flags |= PFD_DRAW_TO_WINDOW; // Draw to Window (not to bitmap)
+ pfd->dwFlags |= PFD_DRAW_TO_WINDOW; // Draw to Window (not to bitmap)
+
+
+ if(BUFFER_DOUBLE==glCaps->buffer)
+ pfd->dwFlags |= PFD_DOUBLEBUFFER ; // Double buffered is optional
+ if(STEREO_ON==glCaps->stereo)
+ pfd->dwFlags |= PFD_STEREO ; // Stereo is optional
- if(doubleBuffer==JNI_TRUE)
- dw_flags |= PFD_DOUBLEBUFFER ; // Double buffered is optional
+ if(hdc!=NULL && GetDeviceCaps(hdc, BITSPIXEL)<colorBits)
+ pfd->cColorBits = GetDeviceCaps(hdc, BITSPIXEL);
+ else
+ pfd->cColorBits = (BYTE)colorBits;
- if(stereo==JNI_TRUE)
- dw_flags |= PFD_STEREO ; // Stereo is optional
+ pfd->cStencilBits = (BYTE) glCaps->stencilBits;
+}
- pfd.dwFlags = dw_flags;
- pfd.cColorBits = GetDeviceCaps(hDC, BITSPIXEL);
+void LIBAPIENTRY SetDCPixelFormat(HDC hDC, GLCapabilities *glCaps,
+ jboolean offScreenRenderer, jboolean verbose)
+{
+ int nPixelFormat=-1;
+ const char * text=0;
- if(stencilBits>0)
- pfd.cStencilBits = (BYTE) stencilBits;
+ PIXELFORMATDESCRIPTOR pfd ;
- if(verbose==JNI_TRUE)
- {
+ if(verbose==JNI_TRUE)
+ {
+ fprintf(stdout, "GL4Java SetDCPixelFormat: input capabilities:\n");
+ printGLCapabilities ( glCaps );
+ }
+
+ if(glCaps->nativeVisualID>=0)
+ {
+ if ( 0 < DescribePixelFormat( hDC, (int)(glCaps->nativeVisualID),
+ sizeof(pfd), &pfd ) )
+ {
+ nPixelFormat=(int)(glCaps->nativeVisualID);
+ if(verbose==JNI_TRUE)
+ {
+ fprintf(stderr,"\n\nUSER found stored PIXELFORMAT number: %ld\n",
+ nPixelFormat);
+ fflush(stderr);
+ }
+ } else {
+ fprintf(stderr,"\n\nUSER no stored PIXELFORMAT number found !!\n");
+ nPixelFormat = -1;
+ fflush(stderr);
+ }
+ }
+
+ if(nPixelFormat<0)
+ setPixelFormatByGLCapabilities( &pfd, glCaps, offScreenRenderer, hDC);
+
+ if(verbose==JNI_TRUE)
+ {
fprintf(stderr,"\n\nUSER CHOOSED PIXELFORMAT (TRYING):\n");
- text=GetTextualPixelFormatByPFD(&pfd, 0);
+ text=GetTextualPixelFormatByPFD(&pfd, nPixelFormat);
fprintf(stderr,text);
- }
+ fflush(stderr);
+ }
// Choose a pixel format that best matches that described in pfd
if( hDC == 0 )
printf( "SetDCPixelFormat: Error, no HDC-Contex is given\n");
- else
+ else if(nPixelFormat<0)
nPixelFormat = ChoosePixelFormat(hDC, &pfd);
if( nPixelFormat == 0 )
@@ -155,6 +207,16 @@ void LIBAPIENTRY SetDCPixelFormat(HDC hDC, jboolean doubleBuffer, // Set the pixel format for the device context
if( SetPixelFormat(hDC, nPixelFormat, &pfd) == FALSE)
printf( "setpixel failed\n" );
+ else {
+ (void) setGLCapabilities ( hDC, nPixelFormat, glCaps );
+ if(verbose==JNI_TRUE)
+ {
+ fprintf(stdout, "GL4Java SetDCPixelFormat: used capabilities:\n");
+ printGLCapabilities ( glCaps );
+ }
+ }
+ fflush(stdout);
+ fflush(stderr);
}
@@ -267,6 +329,7 @@ jboolean LIBAPIENTRY testWin32Java() }
+
static void
PrintMessage( const char *Format, ... )
{
@@ -335,8 +398,8 @@ GetTextualPixelFormatByPFD(PIXELFORMATDESCRIPTOR *ppfd, int format) strcat(buffer, line); sprintf(line," cGreenShift - %d\n", ppfd->cGreenShift);
strcat(buffer, line); sprintf(line," cBlueBits - %d\n", ppfd->cBlueBits);
strcat(buffer, line); sprintf(line," cBlueShift - %d\n", ppfd->cBlueShift);
- strcat(buffer, line); sprintf(line," cAlphaBits - %d\n", ppfd->cAlphaBits);
- strcat(buffer, line); sprintf(line," cAlphaShift - 0x%x\n", ppfd->cAlphaShift);
+ strcat(buffer, line); sprintf(line," cAlphaBits - %d (N.A.)\n", ppfd->cAlphaBits);
+ strcat(buffer, line); sprintf(line," cAlphaShift - 0x%x (N.A.)\n", ppfd->cAlphaShift);
strcat(buffer, line); sprintf(line," cAccumBits - %d\n", ppfd->cAccumBits);
strcat(buffer, line); sprintf(line," cAccumRedBits - %d\n", ppfd->cAccumRedBits);
strcat(buffer, line); sprintf(line," cAccumGreenBits - %d\n", ppfd->cAccumGreenBits);
@@ -658,3 +721,44 @@ HPALETTE LIBAPIENTRY setupPalette(HDC hDC) }
+jboolean LIBAPIENTRY setGLCapabilities ( HDC hdc,
+ int nPixelFormat,
+ GLCapabilities *glCaps )
+{
+ PIXELFORMATDESCRIPTOR pfd;
+
+ (void) PixelFormatDescriptorFromDc( hdc, &pfd);
+
+ if (pfd.dwFlags & PFD_DOUBLEBUFFER)
+ glCaps->buffer=BUFFER_DOUBLE;
+ else
+ glCaps->buffer=BUFFER_SINGLE;
+
+ if (pfd.dwFlags & PFD_STEREO)
+ glCaps->stereo=STEREO_ON;
+ else
+ glCaps->stereo=STEREO_OFF;
+
+ if (pfd.iPixelType == PFD_TYPE_RGBA)
+ glCaps->color=COLOR_RGBA;
+
+ if (pfd.iPixelType == PFD_TYPE_COLORINDEX)
+ glCaps->color=COLOR_INDEX;
+
+ glCaps->depthBits = pfd.cDepthBits;
+ glCaps->stencilBits = pfd.cStencilBits;
+
+ glCaps->redBits = pfd.cRedBits;
+ glCaps->greenBits= pfd.cGreenBits;
+ glCaps->blueBits= pfd.cBlueBits;
+ /* glCaps->alphaBits= pfd.cAlphaBits; N.A. */
+ glCaps->accumRedBits = pfd.cAccumRedBits;
+ glCaps->accumGreenBits= pfd.cAccumGreenBits;
+ glCaps->accumBlueBits= pfd.cAccumBlueBits;
+ glCaps->accumAlphaBits= pfd.cAccumAlphaBits;
+
+ glCaps->nativeVisualID=nPixelFormat;
+
+ return JNI_TRUE;
+}
+
diff --git a/CNativeCode/OpenGL_Win32_common.h b/CNativeCode/OpenGL_Win32_common.h index ed7287f..9e99aed 100755 --- a/CNativeCode/OpenGL_Win32_common.h +++ b/CNativeCode/OpenGL_Win32_common.h @@ -6,16 +6,20 @@ #include <wingdi.h> +LIBAPI void LIBAPIENTRY setPixelFormatByGLCapabilities( + PIXELFORMATDESCRIPTOR *pfd, + GLCapabilities *glCaps, + jboolean offScreenRenderer, + HDC hdc); + // Set Pixel Format function - forward declaration -LIBAPI void LIBAPIENTRY SetDCPixelFormat(HDC hDC, jboolean doubleBuffer, - jboolean stereo, jint stencilBits, jboolean offScreenRenderer,
- jboolean verbose); +LIBAPI void LIBAPIENTRY SetDCPixelFormat(HDC hDC, GLCapabilities *glCaps, + jboolean offScreenRenderer, jboolean verbose); LIBAPI HPALETTE LIBAPIENTRY GetOpenGLPalette(HDC hDC); -LIBAPI HGLRC LIBAPIENTRY get_GC( HDC *hDC, jboolean doubleBuffer, - jboolean stereo, jint stencilBits, HGLRC shareWith, - jboolean offScreenRenderer, +LIBAPI HGLRC LIBAPIENTRY get_GC( HDC *hDC, GLCapabilities *glCaps, + HGLRC shareWith, jboolean offScreenRenderer, int width, int height, HBITMAP *pix, jboolean verbose); @@ -41,4 +45,6 @@ LIBAPI void LIBAPIENTRY resizeDIB(HDC hDC, HBITMAP *hOldBitmap, LIBAPI HPALETTE LIBAPIENTRY setupPalette(HDC hDC); +LIBAPI jboolean LIBAPIENTRY setGLCapabilities ( HDC hdc, int nPixelFormat, + GLCapabilities *glCaps ); #endif diff --git a/CNativeCode/OpenGL_Win32_jawt.c b/CNativeCode/OpenGL_Win32_jawt.c index 4eeeb8e..d025603 100755 --- a/CNativeCode/OpenGL_Win32_jawt.c +++ b/CNativeCode/OpenGL_Win32_jawt.c @@ -1,676 +1,726 @@ -/*
- * Original Author: Leo Chan -- 1995
- *
- * Adam King 1997
- * Ported to Win32 from X
- *
- * This file takes care of the C implementation of finding the correct
- * Win32 window, assigning an OpenGL graphics context to it, storing that
- * graphics context in the java class data structure.
- *
- * also contains the use() and swap() functions for double buffering
- *
- * September 12, 1997 - Adam King
- * - Added support for rendering directly into a Canvas ( BIG rewrite )
- */
-
-/**
- * Pointer Semantics of GLContext:
- * ==============================
-
- "displayHandle" := not used
-
- "pData" := (JAWTDataHolder *)
- "windowHandle" := "pData"
-
- This holds the current state of the JAWT context !
-
- This is used as the "not initialized" flag also !
- It is reset to zero while Destroy Method
-
- "pData"->dsi_win := (HDC)
- if("offScreenRenderer" == TRUE)
- "pData"->dsi_win contains the window handle,
- of the last lock !
- "pData"->dsi_win_created=0 !
-
- "pixmapHandle" := (HBITMAP)
- if("offScreenRenderer" == TRUE)
- "pixmapHandle" contains the new BITMAP (by CreateDIBSection)!
- "windowHandle" contains the new created OffScreenWindow
- (by CreateCompatibleDC)!
- else
- "pixmapHandle" is unused !
-
- "sharedGLContextNative" := (HGLRC)
- This is the optional shared GLContext !
-
- "glContext" := (HGLRC)
- This is THE used GLContext !
- */
-
-#include "OpenGL_Win32_common.h"
-
-#include "jawt_misc.h"
-
-/*
- * Macros ..
- */
-
-#define GET_W32_JAWT_DSI(a) \
- ( (JAWT_Win32DrawingSurfaceInfo *) \
- ( ( (JAWTDataHolder *)((PointerHolder)(a)) ) ->dsi_os ) \
- )
-
-#define GET_USED_WINDOW(a) \
- ( (HDC) \
- ( ( (JAWTDataHolder *)((PointerHolder)(a)) ) ->dsi_win ) \
- )
-
-static jboolean verbose = JNI_FALSE;
-
-JNIEXPORT jboolean JNICALL
-Java_gl4java_GLContext_useJAWT( JNIEnv *env, jobject obj )
-{
- (void)env;
- (void)obj;
- return JNI_TRUE;
-}
-
-JNIEXPORT jboolean JNICALL
-Java_gl4java_GLContext_hasJAWTSurfaceChanged( JNIEnv *env, jobject obj,
- jlong thisWin )
-{
- JAWTDataHolder * pData = (JAWTDataHolder *) ( (PointerHolder) thisWin );
- (void)env;
- (void)obj;
-
- if(pData!=0)
- return (pData->lock & JAWT_LOCK_SURFACE_CHANGED) != 0 ;
-
- return JNI_FALSE;
-}
-
-JNIEXPORT jboolean JNICALL
-Java_gl4java_GLContext_openOpenGLNative( JNIEnv *env, jobject obj,
- jobject canvas)
-{
- jboolean ret = JNI_TRUE;
-
- jclass cls = 0;
- jfieldID fpixmapHandle=0;
- jfieldID foffScreenRenderer=0;
- jfieldID faccumSize=0;
- jfieldID fwindowHandle=0, fpData=0, fdoubleBuffer=0, fstereoView=0, fstencilBits=0;
- jfieldID fverbose=0;
- jfieldID fglContext=0;
- jfieldID fshareWith=0;
- jfieldID fcreatewinw = 0, fcreatewinh = 0;
-
- /* these variables will be mapped in the java-object ! */
- jboolean joffScreenRenderer=JNI_FALSE;
- jboolean jdoubleBuffer=JNI_TRUE;
- jboolean jstereoView=JNI_FALSE;
- jint jstencilBits=0;
- jint jaccumSize=0;
- HDC theWindow=0;
- HGLRC gc=0;
- JAWTDataHolder * pData=0;
- HGLRC shareWith=NULL;
- jint jcreatewinw = 0, jcreatewinh = 0;
- HBITMAP pix=0;
-
- PIXELFORMATDESCRIPTOR pfd;
-
- cls = (*env)->GetObjectClass(env, obj);
- if(cls==0)
- {
- fprintf(stderr,"oo0.0 cls==0\n");
- fflush(stderr);
- ret=JNI_FALSE;
- }
-
- if(ret==JNI_TRUE)
- {
- fverbose =(*env)->GetStaticFieldID(env, cls, "gljNativeDebug", "Z");
- if (fverbose == 0)
- {
- fprintf(stderr,"oo0.2 fverbose==0\n");
- fflush(stderr);
- ret=JNI_FALSE;
- } else {
- verbose = (*env)->GetStaticBooleanField(env, cls, fverbose);
- }
- }
-
- if(JNI_TRUE==verbose)
- {
- fprintf(stderr, "sizes:\n jlong=%d\n HGLRC=%d\n HDC=%d\n",
- sizeof(jlong), sizeof(HGLRC), sizeof(HDC) );
- fflush(stderr);
- }
-
- /* FIRST OF ALL CHECK IF A NATIVE POINTER OR WIN-TYPE FITS IN �jlong� */
- ret = testWin32Java();
-
- ret = testJavaGLTypes(verbose);
-
- if(ret==JNI_TRUE) {
- fpData = (*env)->GetFieldID(env, cls, "pData", "J");
- if (fpData == 0) ret= JNI_FALSE;
- else pData = (JAWTDataHolder *)
- ( (PointerHolder)(*env)->GetLongField(env, obj, fpData));
- }
- if(JNI_TRUE==verbose)
- {
- fprintf(stderr, "received pData : %d\n", (int)pData);
- }
-
- if(ret==JNI_TRUE) {
- fwindowHandle = (*env)->GetFieldID(env, cls, "windowHandle", "J");
- if (fwindowHandle == 0) ret= JNI_FALSE;
- }
-
- if(ret==JNI_TRUE) {
- fglContext=(*env)->GetFieldID(env, cls, "glContext", "J");
- if (fglContext == 0) ret= JNI_FALSE;
- }
-
- if(ret==JNI_TRUE) {
- foffScreenRenderer =
- (*env)->GetFieldID(env, cls, "offScreenRenderer", "Z");
- if (foffScreenRenderer == 0) ret= JNI_FALSE;
- else joffScreenRenderer =(*env)->GetBooleanField(env, obj, foffScreenRenderer);
- }
-
- if(ret==JNI_TRUE) {
- fdoubleBuffer = (*env)->GetFieldID(env, cls, "doubleBuffer", "Z");
- if (fdoubleBuffer == 0) ret= JNI_FALSE;
- else jdoubleBuffer =(*env)->GetBooleanField(env, obj, fdoubleBuffer);
- }
-
- if(ret==JNI_TRUE) {
- fstereoView = (*env)->GetFieldID(env, cls, "stereoView", "Z");
- if (fstereoView == 0) ret= JNI_FALSE;
- else jstereoView =(*env)->GetBooleanField(env, obj, fstereoView);
- }
-
- if(ret==JNI_TRUE) {
- fstencilBits = (*env)->GetFieldID(env, cls, "stencilBits", "I");
- if (fstencilBits == 0) ret= JNI_FALSE;
- else jstencilBits =(*env)->GetIntField(env, obj, fstencilBits);
- }
-
- if(ret==JNI_TRUE) {
- faccumSize = (*env)->GetFieldID(env, cls, "accumSize", "I");
- if (faccumSize == 0) ret= JNI_FALSE;
- else jaccumSize =(*env)->GetIntField(env, obj, faccumSize);
- }
-
- if(ret==JNI_TRUE) {
- fcreatewinw = (*env)->GetFieldID(env, cls, "createwinw", "I");
- if (fcreatewinw == 0) ret= JNI_FALSE;
- else jcreatewinw =(*env)->GetIntField(env, obj, fcreatewinw);
- }
-
- if(ret==JNI_TRUE) {
- fcreatewinh = (*env)->GetFieldID(env, cls, "createwinh", "I");
- if (fcreatewinh == 0) ret= JNI_FALSE;
- else jcreatewinh =(*env)->GetIntField(env, obj, fcreatewinh);
- }
-
- if(ret==JNI_TRUE) {
- fshareWith = (*env)->GetFieldID(env, cls, "sharedGLContextNative", "J");
- if (fshareWith == 0) ret= JNI_FALSE;
- else shareWith = (HGLRC)
- ( (PointerHolder)(*env)->GetLongField(env, obj, fshareWith));
- }
-
- if(ret==JNI_TRUE) {
- fpixmapHandle = (*env)->GetFieldID(env, cls, "pixmapHandle", "J");
- if (fpixmapHandle == 0) ret= JNI_FALSE;
- }
-
- if(joffScreenRenderer==JNI_TRUE)
- {
- jdoubleBuffer = JNI_FALSE;
- }
-
- if(JNI_TRUE==verbose && joffScreenRenderer==JNI_TRUE)
- {
- fprintf(stderr,"\nGL4Java: (USING OFFSCREEN GLPIXMAP BUFFER,\n\t forced: !doubleBuffer)\n");
- fflush(stderr);
- }
-
- if(joffScreenRenderer==JNI_TRUE)
- {
- jawt_create_offscreen(env, &pData, verbose);
- }
- else {
- if(jawt_create_open(env, canvas, &pData, verbose)==JNI_FALSE ||
- pData->result==JNI_FALSE
- )
- {
- fprintf(stderr,"\nGL4Java ERROR: openOpen could not create&open JAWT reference!\n");
- fflush(stderr);
- jawt_free_close_unlock(env, &pData, JNI_FALSE);
- ret=JNI_FALSE;
- return ret;
- }
-
- if(jawt_lock(env, pData, JNI_TRUE, verbose)==JNI_FALSE ||
- pData->result==JNI_FALSE
- )
- {
- fprintf(stderr,"\nGL4Java ERROR: openOpen could not lock JAWT reference!\n");
- fflush(stderr);
- jawt_free_close_unlock(env, &pData, JNI_FALSE);
- ret=JNI_FALSE;
- return ret;
- }
- }
-
- if(pData->result==JNI_TRUE)
- {
- if(joffScreenRenderer==JNI_FALSE)
- {
- theWindow = GET_W32_JAWT_DSI(pData)->hdc;
- jcreatewinw = pData->dsi->bounds.width;
- jcreatewinh = pData->dsi->bounds.height;
- }
- }
-
- wglMakeCurrent(NULL, NULL);
-
- /**
- * with version jdk1.1.6 and later, we are able to use
- * the java-function straight to achieve the native window
- * handle ....
- *
- * this handle is saved to pData for the windows version !
- */
- if( theWindow == 0 && !joffScreenRenderer)
- {
- printf( "get_GC: Error, pData->hdc is zero\n");
- jawt_free_close_unlock(env, &pData, JNI_FALSE);
- return JNI_FALSE;
- }
-
- /* get the graphics context for this widget */
- if( (gc = get_GC( &theWindow, jdoubleBuffer, jstereoView, jstencilBits,
- shareWith, joffScreenRenderer, jcreatewinw,
- jcreatewinh, &pix, verbose)) == 0 )
- {
- printf( "getGC error" );
- return JNI_FALSE;
- }
-
- /* fetch the states of doubleBuffer and stereo */
- (void) PixelFormatDescriptorFromDc( theWindow, &pfd);
-
- jdoubleBuffer = (pfd.dwFlags & PFD_DOUBLEBUFFER)?JNI_TRUE:JNI_FALSE;
- if(ret==JNI_TRUE && fdoubleBuffer!=0) {
- (*env)->SetBooleanField(env, obj, fdoubleBuffer,
- jdoubleBuffer);
- }
-
- jstencilBits = (jint)(pfd.cStencilBits);
- if(ret==JNI_TRUE && fstencilBits!=0) {
- (*env)->SetIntField(env, obj,
- fstencilBits, (jint)jstencilBits);
- }
-
- jaccumSize=(jint)(pfd.cAccumRedBits+pfd.cAccumGreenBits+pfd.cAccumBlueBits+pfd.cAccumAlphaBits);
- if(ret==JNI_TRUE && faccumSize!=0) {
- (*env)->SetIntField(env, obj,
- faccumSize, (jint)jaccumSize);
- }
-
- jawt_close_unlock(env, pData, verbose);
-
- if(ret==JNI_TRUE && fwindowHandle!=0) {
- (*env)->SetLongField(env, obj, fwindowHandle,
- (jlong)((PointerHolder)pData));
- }
- if(ret==JNI_TRUE && fpData!=0) {
- (*env)->SetLongField(env, obj, fpData,
- (jlong)((PointerHolder)pData));
- }
-
- if(ret==JNI_TRUE && fpixmapHandle!=0) {
- (*env)->SetLongField(env, obj, fpixmapHandle, (jlong)((PointerHolder)pix));
- if(JNI_TRUE==verbose)
- fprintf(stderr, "go and set pixmapHandle pix: %d; 0x%X\n",
- (int)pix, (int)pix);
- }
-
- if(ret==JNI_TRUE && fglContext !=0 ) {
- (*env)->SetLongField(env, obj, fglContext, (jlong)((PointerHolder)gc));
- if(JNI_TRUE==verbose)
- fprintf(stderr, "go and set gc : %d, 0x%X\n",
- (int)gc, (int)gc);
- }
-
- /*
- gl4java_bind_ext(JNI_TRUE==verbose);
- */
-
- return ret;
-}
-
-JNIEXPORT jboolean JNICALL
-Java_gl4java_GLContext_gljMakeCurrentNative( JNIEnv *env, jobject obj,
- jobject canvas,
- jlong disp,
- jlong thisWin,
- jlong glContext)
-{
- jboolean ret = JNI_TRUE;
- JAWTDataHolder * pData = (JAWTDataHolder *) ( (PointerHolder) thisWin );
-
- if( !thisWin )
- {
- return JNI_FALSE;
- }
-
- if( !glContext )
- {
- return JNI_FALSE;
- }
-
- if(jawt_open(env, canvas, pData, verbose)==JNI_FALSE ||
- pData->result==JNI_FALSE
- )
- {
- fprintf(stderr,"\nGL4Java ERROR: MakeCurrent could not open JAWT reference!\n");
- fflush(stderr);
- ret=JNI_FALSE;
- jawt_close_unlock(env, pData, JNI_FALSE);
- return ret;
- }
-
- if(jawt_lock(env, pData, JNI_FALSE, verbose)==JNI_FALSE ||
- pData->result==JNI_FALSE
- )
- {
- /* this can happen:
- if ( (pJData->lock & JAWT_LOCK_SURFACE_CHANGED) != 0 )
-
- In this case, we need a new GLXContext ...
-
- This has to be queried by the java class,
- while using the native method hasJAWTSurfaceChanged !
- */
- if(verbose)
- {
- fprintf(stderr,"\nGL4Java ERROR: MakeCurrent could not lock JAWT reference!\n");
- fflush(stderr);
- }
- ret=JNI_FALSE;
- jawt_close_unlock(env, pData, JNI_FALSE);
- return ret;
- }
-
- if ( ret==JNI_TRUE && !wglMakeCurrent(GET_USED_WINDOW(thisWin),
- (HGLRC)((PointerHolder)glContext)) )
- {
- jawt_close_unlock(env, pData, JNI_FALSE);
- return JNI_FALSE;
- }
- return JNI_TRUE;
-}
-
-JNIEXPORT jboolean JNICALL
-Java_gl4java_GLContext_gljFreeNative( JNIEnv *env, jobject obj,
- jobject canvas,
- jlong disp,
- jlong thisWin,
- jlong glContext
- )
-{
- JAWTDataHolder * pData = (JAWTDataHolder *) ( (PointerHolder) thisWin );
- jboolean ret = JNI_TRUE;
-
- (void)glContext;
- (void)disp;
- (void)canvas;
-
- if ( ! wglMakeCurrent( NULL, NULL ) )
- {
- fprintf(stderr, "gljFree failed\n");
- fflush(stderr);
- ret = JNI_FALSE;
- }
-
- if(pData!=NULL)
- jawt_close_unlock(env, pData, verbose);
-
- return ret;
-}
-
-JNIEXPORT jboolean JNICALL
-Java_gl4java_GLContext_gljDestroyNative( JNIEnv *env, jobject obj,
- jobject canvas)
-{
- jboolean ret = JNI_TRUE;
-
- jclass cls = 0;
- jfieldID fpData=0;
- jfieldID fwindowHandle=0, fpixmapHandle=0;
- jfieldID fglContext=0;
- jfieldID foffScreenRenderer=0;
- jfieldID fownwind=0;
-
- jboolean jownwind = JNI_FALSE ;
- jboolean joffScreenRenderer=JNI_FALSE;
- HBITMAP pix=0;
- HDC thisWin=0;
- HGLRC gc=0;
- JAWTDataHolder * pData = NULL;
-
- (void)canvas;
-
- cls = (*env)->GetObjectClass(env, obj);
- if(cls==0)
- {
- ret=JNI_FALSE;
- }
-
- if(ret==JNI_TRUE) {
- fwindowHandle = (*env)->GetFieldID(env, cls, "windowHandle", "J");
- if (fwindowHandle == 0) ret= JNI_FALSE;
- }
-
- if(ret==JNI_TRUE) {
- fglContext=(*env)->GetFieldID(env, cls, "glContext", "J");
- if (fglContext == 0) ret= JNI_FALSE;
- else gc =(HGLRC)
- ((PointerHolder)(*env)->GetLongField(env, obj, fglContext));
- }
-
-
- if(ret==JNI_TRUE) {
- fpixmapHandle = (*env)->GetFieldID(env, cls, "pixmapHandle", "J");
- if (fpixmapHandle == 0) ret= JNI_FALSE;
- else pix =(HBITMAP)
- ((PointerHolder)(*env)->GetLongField(env, obj, fpixmapHandle));
- }
-
- if(ret==JNI_TRUE) {
- foffScreenRenderer =
- (*env)->GetFieldID(env, cls, "offScreenRenderer", "Z");
- if (foffScreenRenderer == 0) ret= JNI_FALSE;
- else joffScreenRenderer =(*env)->GetBooleanField(env, obj, foffScreenRenderer);
- }
-
- if(ret==JNI_TRUE) {
- fownwind = (*env)->GetFieldID(env, cls, "createOwnWindow", "Z");
- if (fownwind == 0) ret= JNI_FALSE;
- else jownwind =(*env)->GetBooleanField(env, obj, fownwind);
- }
-
- if(ret==JNI_TRUE) {
- fpData = (*env)->GetFieldID(env, cls, "pData", "J");
- if (fpData == 0) ret= JNI_FALSE;
- else pData =(JAWTDataHolder *)
- ( (PointerHolder) (*env)->GetLongField(env, obj, fpData) );
- }
-
-
- if(jawt_open(env, canvas, pData, verbose)==JNI_FALSE ||
- pData->result==JNI_FALSE
- )
- {
- fprintf(stderr,"\nGL4Java ERROR: gljDestroy could not open JAWT reference!\n");
- fflush(stderr);
- ret=JNI_FALSE;
- jawt_close_unlock(env, pData, JNI_FALSE);
- return ret;
- }
-
- if(jawt_lock(env, pData, JNI_TRUE, verbose)==JNI_FALSE ||
- pData->result==JNI_FALSE
- )
- {
- if(JNI_TRUE==verbose)
- {
- fprintf(stderr, "GL4Java: gljDestroy lock failed\n");
- fflush(stderr);
- }
- /**
- * we have to continue destroying the context !
- *
- * therefore, the show ain't over yet !
- *
- jawt_close_unlock(env, pData, JNI_FALSE);
- return JNI_FALSE;
- */
- pData->result=JNI_TRUE; // the force will be with us ;-)
- }
-
- thisWin = GET_USED_WINDOW(pData);
-
- if(ret==JNI_TRUE)
- {
- if ( gc == 0 )
- {
- if(JNI_TRUE==verbose)
- {
- fprintf(stderr, "gljDestroy error, GL context is 0\n");
- fflush(stderr);
- }
- }
-
- if ( ! wglMakeCurrent( NULL, NULL ) )
- {
- fprintf(stderr, "gljDestroy failed (free)\n");
- fflush(stderr);
- }
-
- if(ret==JNI_TRUE)
- {
- if(gc!=0)
- wglDeleteContext(gc);
-
- if(pix!=0)
- {
- if(thisWin!=0)
- DeleteDC(thisWin);
- thisWin=0;
- pData->dsi_win = NULL;
- pData->dsi_win_created = 0;
- DeleteObject(pix);
- pix=0;
- }
- if(jownwind && thisWin!=0)
- {
- DeleteDC(thisWin);
- thisWin=0;
- pData->dsi_win = NULL;
- pData->dsi_win_created = 0;
- jownwind=JNI_FALSE;
- }
- }
- }
-
- gc = 0;
- thisWin = 0;
-
- jawt_free_close_unlock(env, &pData, verbose);
-
- pData=0;
- ret=JNI_TRUE; // force ..
-
- if(ret==JNI_TRUE && fpData!=0) {
- (*env)->SetLongField(env, obj, fpData, (jlong)((PointerHolder)pData));
- }
-
- if(ret==JNI_TRUE && fwindowHandle!=0) {
- (*env)->SetLongField(env, obj, fwindowHandle, (jlong)((PointerHolder)pData));
- }
-
- if(ret==JNI_TRUE && fglContext) {
- (*env)->SetLongField(env, obj, fglContext, (jlong)((PointerHolder)gc));
- }
-
-
- if(ret==JNI_TRUE && fpixmapHandle!=0) {
- (*env)->SetLongField(env, obj, fpixmapHandle, (jlong)((PointerHolder)pix));
- }
-
- if(ret==JNI_TRUE && fownwind) {
- (*env)->SetBooleanField(env, obj, fownwind, jownwind);
- }
-
- return ret;
-}
-
-JNIEXPORT jboolean JNICALL
-Java_gl4java_GLContext_gljSwapNative( JNIEnv *env, jobject obj,
- jlong disp,
- jlong thisWin,
- jlong glContext,
- jboolean doubleBuffer
- )
-{
- jboolean ret = JNI_TRUE;
-
- (void)glContext;
- (void)disp;
-
- if( !thisWin || GET_USED_WINDOW(thisWin)==0)
- {
- fprintf(stderr,"Swap does not got the window ...\n");
- return JNI_FALSE;
- }
-
- if( doubleBuffer==JNI_TRUE )
- {
- if( SwapBuffers( GET_USED_WINDOW(thisWin) ) == FALSE )
- {
- /* Error in Win2000 implementation :o)
- * printf( "Error in swap buffer!\n" );
- */
- return JNI_FALSE;
- }
- } else {
- glFlush();
- }
- return ret;
-}
-
-JNIEXPORT void JNICALL
-Java_gl4java_GLContext_gljResizeNative( JNIEnv *env, jobject obj,
- jboolean isOwnWindow,
- jlong disp, jlong thisWin,
- jint width, jint height)
-{
- (void)isOwnWindow;
- (void)disp;
- (void)thisWin;
- (void)width;
- (void)height;
-
- return;
-}
-
+/* + * Original Author: Leo Chan -- 1995 + * + * Adam King 1997 + * Ported to Win32 from X + * + * This file takes care of the C implementation of finding the correct + * Win32 window, assigning an OpenGL graphics context to it, storing that + * graphics context in the java class data structure. + * + * also contains the use() and swap() functions for double buffering + * + * September 12, 1997 - Adam King + * - Added support for rendering directly into a Canvas ( BIG rewrite ) + */ + +/** + * Pointer Semantics of GLContext: + * ============================== + + "displayHandle" := not used + + "pData" := (JAWTDataHolder *) + "windowHandle" := "pData" + + This holds the current state of the JAWT context ! + + This is used as the "not initialized" flag also ! + It is reset to zero while Destroy Method + + "pData"->dsi_win := (HDC) + if("offScreenRenderer" == TRUE) + "pData"->dsi_win contains the window handle, + of the last lock ! + "pData"->dsi_win_created=0 ! + + "pixmapHandle" := (HBITMAP) + if("offScreenRenderer" == TRUE) + "pixmapHandle" contains the new BITMAP (by CreateDIBSection)! + "windowHandle" contains the new created OffScreenWindow + (by CreateCompatibleDC)! + else + "pixmapHandle" is unused ! + + "sharedGLContextNative" := (HGLRC) + This is the optional shared GLContext ! + + "glContext" := (HGLRC) + This is THE used GLContext ! + */ + +#include "OpenGL_Win32_common.h" + +#include "jawt_misc.h" + +/* + * Macros .. + */ + +#define GET_W32_JAWT_DSI(a) \ + ( (JAWT_Win32DrawingSurfaceInfo *) \ + ( ( (JAWTDataHolder *)((PointerHolder)(a)) ) ->dsi_os ) \ + ) + +#define GET_USED_WINDOW(a) \ + ( (HDC) \ + ( ( (JAWTDataHolder *)((PointerHolder)(a)) ) ->dsi_win ) \ + ) + +static jboolean verbose = JNI_FALSE; + +JNIEXPORT jboolean JNICALL +Java_gl4java_GLContext_useJAWT( JNIEnv *env, jobject obj ) +{ + (void)env; + (void)obj; + return JNI_TRUE; +} + +JNIEXPORT jboolean JNICALL +Java_gl4java_GLContext_hasJAWTSurfaceChanged( JNIEnv *env, jobject obj, + jlong thisWin ) +{ + JAWTDataHolder * pData = (JAWTDataHolder *) ( (PointerHolder) thisWin ); + (void)env; + (void)obj; + + if(pData!=0) + return (pData->lock & JAWT_LOCK_SURFACE_CHANGED) != 0 ; + + return JNI_FALSE; +} + +JNIEXPORT jboolean JNICALL +Java_gl4java_GLContext_openOpenGLNative( JNIEnv *env, jobject obj, + jobject canvas) +{ + jboolean ret = JNI_TRUE; + + jclass cls = 0; + jfieldID fpixmapHandle=0; + jfieldID foffScreenRenderer=0; + jfieldID fwindowHandle=0, fpData=0; + jfieldID fverbose=0; + jfieldID fglContext=0; + jfieldID fshareWith=0; + jfieldID fcreatewinw = 0, fcreatewinh = 0; + jfieldID fglCaps=0; + + /* these variables will be mapped in the java-object ! */ + jboolean joffScreenRenderer=JNI_FALSE; + HDC theWindow=0; + PIXELFORMATDESCRIPTOR pfd; + HGLRC gc=0; + JAWTDataHolder * pData=0; + HGLRC shareWith=NULL; + jint jcreatewinw = 0, jcreatewinh = 0; + HBITMAP pix=0; + + GLCapabilities glCaps; + jobject jglCaps=0; + jthrowable exc; + jclass _GLCapabilities= 0; + jclass _AwtComponent=0; + + cls = (*env)->GetObjectClass(env, obj); + if(cls==0) + { + fprintf(stderr,"oo0.0 cls==0\n"); + fflush(stderr); + return JNI_FALSE; + } + + if(ret==JNI_TRUE) + { + fverbose =(*env)->GetStaticFieldID(env, cls, "gljNativeDebug", "Z"); + if (fverbose == 0) + { + fprintf(stderr,"oo0.2 fverbose==0\n"); + fflush(stderr); + return JNI_FALSE; + } else { + verbose = (*env)->GetStaticBooleanField(env, cls, fverbose); + } + } + + if(JNI_TRUE==verbose) + { + fprintf(stderr, "sizes:\n jlong=%d\n HGLRC=%d\n HDC=%d\n", + sizeof(jlong), sizeof(HGLRC), sizeof(HDC) ); + fflush(stderr); + } + + /* FIRST OF ALL CHECK IF A NATIVE POINTER OR WIN-TYPE FITS IN �jlong� */ + ret = testWin32Java(); + + ret = testJavaGLTypes(verbose); + + if(ret==JNI_TRUE) { + fpData = (*env)->GetFieldID(env, cls, "pData", "J"); + if (fpData == 0) ret= JNI_FALSE; + else pData = (JAWTDataHolder *) + ( (PointerHolder)(*env)->GetLongField(env, obj, fpData)); + } + if(JNI_TRUE==verbose) + { + fprintf(stderr, "received pData : %d\n", (int)pData); + } + + if(ret==JNI_TRUE) { + fwindowHandle = (*env)->GetFieldID(env, cls, "windowHandle", "J"); + if (fwindowHandle == 0) ret= JNI_FALSE; + } + + if(ret==JNI_TRUE) { + fglContext=(*env)->GetFieldID(env, cls, "glContext", "J"); + if (fglContext == 0) ret= JNI_FALSE; + } + + if(ret==JNI_TRUE) { + foffScreenRenderer = + (*env)->GetFieldID(env, cls, "offScreenRenderer", "Z"); + if (foffScreenRenderer == 0) ret= JNI_FALSE; + else joffScreenRenderer =(*env)->GetBooleanField(env, obj, foffScreenRenderer); + } + + if(ret==JNI_TRUE) { + fglCaps = (*env)->GetFieldID(env, cls, "glCaps", "Lgl4java/GLCapabilities;"); + if (fglCaps == 0) + { + fprintf(stderr, "fglCaps not accessible !\n"); + fflush(stderr); + ret= JNI_FALSE; + } + else jglCaps =(*env)->GetObjectField(env, obj, fglCaps); + } + + if( jglCaps==0 ) + { + fprintf(stderr,"\nGL4Java openOpenGL ERROR: ZERO capsObj was fetched by GetObjectField !\n"); + fflush(stderr); + return JNI_FALSE; + } + + _GLCapabilities= (*env)->FindClass(env, "Lgl4java/GLCapabilities;"); + exc = (*env)->ExceptionOccurred(env); + if(exc) { + if(JNI_TRUE==verbose) + { + fprintf(stderr, "GL4Java: openOpen FindClass gl4java/GLCapabilities failed, cannot check glCaps object\n"); + (*env)->ExceptionDescribe(env); + fflush(stderr); + } + (*env)->ExceptionClear(env); + _GLCapabilities=0; + } + exc=0; + + if( _GLCapabilities!=0 && + (*env)->IsInstanceOf(env, jglCaps, _GLCapabilities)==JNI_FALSE ) + { + fprintf(stderr,"\nGL4Java openOpenGL ERROR: glCaps is not instanceof gl4java/GLCapabilities !\n"); + fflush(stderr); + return JNI_FALSE; + } + + if(JNI_TRUE != javaGLCapabilities2NativeGLCapabilities + ( env, jglCaps, &glCaps ) ) + { + fprintf(stderr,"\nGL4Java ERROR: glCaps Object is not valid !\n"); + fflush(stderr); + return JNI_FALSE; + } + + if(ret==JNI_TRUE) { + fcreatewinw = (*env)->GetFieldID(env, cls, "createwinw", "I"); + if (fcreatewinw == 0) ret= JNI_FALSE; + else jcreatewinw =(*env)->GetIntField(env, obj, fcreatewinw); + } + + if(ret==JNI_TRUE) { + fcreatewinh = (*env)->GetFieldID(env, cls, "createwinh", "I"); + if (fcreatewinh == 0) ret= JNI_FALSE; + else jcreatewinh =(*env)->GetIntField(env, obj, fcreatewinh); + } + + if(ret==JNI_TRUE) { + fshareWith = (*env)->GetFieldID(env, cls, "sharedGLContextNative", "J"); + if (fshareWith == 0) ret= JNI_FALSE; + else shareWith = (HGLRC) + ( (PointerHolder)(*env)->GetLongField(env, obj, fshareWith)); + } + + if(ret==JNI_TRUE) { + fpixmapHandle = (*env)->GetFieldID(env, cls, "pixmapHandle", "J"); + if (fpixmapHandle == 0) ret= JNI_FALSE; + } + + if(joffScreenRenderer==JNI_TRUE) + { + glCaps.buffer=BUFFER_SINGLE; + } + + if(JNI_TRUE==verbose && joffScreenRenderer==JNI_TRUE) + { + fprintf(stderr,"\nGL4Java: (USING OFFSCREEN GLPIXMAP BUFFER,\n\t forced: !doubleBuffer)\n"); + fflush(stderr); + } + + _AwtComponent= (*env)->FindClass(env, "Ljava/awt/Component;"); + exc = (*env)->ExceptionOccurred(env); + if(exc) { + if(JNI_TRUE==verbose) + { + fprintf(stderr, "GL4Java: openOpen FindClass java/awt/Component failed, cannot check canvas object\n"); + (*env)->ExceptionDescribe(env); + fflush(stderr); + } + (*env)->ExceptionClear(env); + _AwtComponent=0; + } + exc=0; + + if(ret==JNI_TRUE) { + if (canvas == 0) + { + ret= JNI_FALSE; + fprintf(stderr,"\nGL4Java ERROR: canvas == NULL !\n"); + fflush(stderr); + } else { + if( _AwtComponent!=0 && + (*env)->IsInstanceOf(env, canvas, _AwtComponent)==JNI_FALSE) + { + fprintf(stderr,"\nGL4Java ERROR: canvas is not instanceof java/awt/Component !\n"); + fflush(stderr); + ret= JNI_FALSE; + } + } + } + + if(joffScreenRenderer==JNI_TRUE) + { + jawt_create_offscreen(env, &pData, verbose); + } + else { + if(jawt_create_open(env, canvas, &pData, verbose)==JNI_FALSE || + pData->result==JNI_FALSE + ) + { + fprintf(stderr,"\nGL4Java ERROR: openOpen could not create&open JAWT reference!\n"); + fflush(stderr); + jawt_free_close_unlock(env, &pData, JNI_FALSE); + ret=JNI_FALSE; + return ret; + } + + if(jawt_lock(env, pData, JNI_TRUE, verbose)==JNI_FALSE || + pData->result==JNI_FALSE + ) + { + fprintf(stderr,"\nGL4Java ERROR: openOpen could not lock JAWT reference!\n"); + fflush(stderr); + jawt_free_close_unlock(env, &pData, JNI_FALSE); + ret=JNI_FALSE; + return ret; + } + } + + if(pData->result==JNI_TRUE) + { + if(joffScreenRenderer==JNI_FALSE) + { + theWindow = GET_W32_JAWT_DSI(pData)->hdc; + jcreatewinw = pData->dsi->bounds.width; + jcreatewinh = pData->dsi->bounds.height; + } + } + + wglMakeCurrent(NULL, NULL); + + /** + * with version jdk1.1.6 and later, we are able to use + * the java-function straight to achieve the native window + * handle .... + * + * this handle is saved to pData for the windows version ! + */ + if( theWindow == 0 && !joffScreenRenderer) + { + printf( "get_GC: Error, pData->hdc is zero\n"); + jawt_free_close_unlock(env, &pData, JNI_FALSE); + return JNI_FALSE; + } + + /* get the graphics context for this widget */ + if( (gc = get_GC( &theWindow, &glCaps, + shareWith, joffScreenRenderer, jcreatewinw, + jcreatewinh, &pix, verbose)) == 0 ) + { + printf( "getGC error" ); + return JNI_FALSE; + } + + /* fetch the states of doubleBuffer and stereo */ + (void) PixelFormatDescriptorFromDc( theWindow, &pfd); + + if(JNI_TRUE==verbose) + { + fprintf(stdout,"\nGL4Java: writing capabilities to GLContext's java object\n"); + fflush(stdout); + } + + (void) nativeGLCapabilities2JavaGLCapabilities (env, jglCaps, &glCaps); + + if(ret==JNI_TRUE && fglCaps) { + (*env)->SetObjectField(env, obj, fglCaps, jglCaps); + } + + jawt_close_unlock(env, pData, verbose); + + if(ret==JNI_TRUE && fwindowHandle!=0) { + (*env)->SetLongField(env, obj, fwindowHandle, + (jlong)((PointerHolder)pData)); + } + if(ret==JNI_TRUE && fpData!=0) { + (*env)->SetLongField(env, obj, fpData, + (jlong)((PointerHolder)pData)); + } + + if(ret==JNI_TRUE && fpixmapHandle!=0) { + (*env)->SetLongField(env, obj, fpixmapHandle, (jlong)((PointerHolder)pix)); + if(JNI_TRUE==verbose) + fprintf(stderr, "go and set pixmapHandle pix: %d; 0x%X\n", + (int)pix, (int)pix); + } + + if(ret==JNI_TRUE && fglContext !=0 ) { + (*env)->SetLongField(env, obj, fglContext, (jlong)((PointerHolder)gc)); + if(JNI_TRUE==verbose) + fprintf(stderr, "go and set gc : %d, 0x%X\n", + (int)gc, (int)gc); + } + + /* + gl4java_bind_ext(JNI_TRUE==verbose); + */ + + return ret; +} + +JNIEXPORT jboolean JNICALL +Java_gl4java_GLContext_gljMakeCurrentNative( JNIEnv *env, jobject obj, + jobject canvas, + jlong disp, + jlong thisWin, + jlong glContext) +{ + jboolean ret = JNI_TRUE; + JAWTDataHolder * pData = (JAWTDataHolder *) ( (PointerHolder) thisWin ); + + if( !thisWin ) + { + return JNI_FALSE; + } + + if( !glContext ) + { + return JNI_FALSE; + } + + if(jawt_open(env, canvas, pData, verbose)==JNI_FALSE || + pData->result==JNI_FALSE + ) + { + fprintf(stderr,"\nGL4Java ERROR: MakeCurrent could not open JAWT reference!\n"); + fflush(stderr); + ret=JNI_FALSE; + jawt_close_unlock(env, pData, JNI_FALSE); + return ret; + } + + if(jawt_lock(env, pData, JNI_FALSE, verbose)==JNI_FALSE || + pData->result==JNI_FALSE + ) + { + /* this can happen: + if ( (pJData->lock & JAWT_LOCK_SURFACE_CHANGED) != 0 ) + + In this case, we need a new GLXContext ... + + This has to be queried by the java class, + while using the native method hasJAWTSurfaceChanged ! + */ + if(verbose) + { + fprintf(stderr,"\nGL4Java ERROR: MakeCurrent could not lock JAWT reference!\n"); + fflush(stderr); + } + ret=JNI_FALSE; + jawt_close_unlock(env, pData, JNI_FALSE); + return ret; + } + + if ( ret==JNI_TRUE && !wglMakeCurrent(GET_USED_WINDOW(thisWin), + (HGLRC)((PointerHolder)glContext)) ) + { + jawt_close_unlock(env, pData, JNI_FALSE); + return JNI_FALSE; + } + return JNI_TRUE; +} + +JNIEXPORT jboolean JNICALL +Java_gl4java_GLContext_gljFreeNative( JNIEnv *env, jobject obj, + jobject canvas, + jlong disp, + jlong thisWin, + jlong glContext + ) +{ + JAWTDataHolder * pData = (JAWTDataHolder *) ( (PointerHolder) thisWin ); + jboolean ret = JNI_TRUE; + + (void)glContext; + (void)disp; + (void)canvas; + + if ( ! wglMakeCurrent( NULL, NULL ) ) + { + fprintf(stderr, "gljFree failed\n"); + fflush(stderr); + ret = JNI_FALSE; + } + + if(pData!=NULL) + jawt_close_unlock(env, pData, verbose); + + return ret; +} + +JNIEXPORT jboolean JNICALL +Java_gl4java_GLContext_gljDestroyNative( JNIEnv *env, jobject obj, + jobject canvas) +{ + jboolean ret = JNI_TRUE; + + jclass cls = 0; + jfieldID fpData=0; + jfieldID fwindowHandle=0, fpixmapHandle=0; + jfieldID fglContext=0; + jfieldID foffScreenRenderer=0; + jfieldID fownwind=0; + + jboolean jownwind = JNI_FALSE ; + jboolean joffScreenRenderer=JNI_FALSE; + HBITMAP pix=0; + HDC thisWin=0; + HGLRC gc=0; + JAWTDataHolder * pData = NULL; + + (void)canvas; + + cls = (*env)->GetObjectClass(env, obj); + if(cls==0) + { + ret=JNI_FALSE; + } + + if(ret==JNI_TRUE) { + fwindowHandle = (*env)->GetFieldID(env, cls, "windowHandle", "J"); + if (fwindowHandle == 0) ret= JNI_FALSE; + } + + if(ret==JNI_TRUE) { + fglContext=(*env)->GetFieldID(env, cls, "glContext", "J"); + if (fglContext == 0) ret= JNI_FALSE; + else gc =(HGLRC) + ((PointerHolder)(*env)->GetLongField(env, obj, fglContext)); + } + + + if(ret==JNI_TRUE) { + fpixmapHandle = (*env)->GetFieldID(env, cls, "pixmapHandle", "J"); + if (fpixmapHandle == 0) ret= JNI_FALSE; + else pix =(HBITMAP) + ((PointerHolder)(*env)->GetLongField(env, obj, fpixmapHandle)); + } + + if(ret==JNI_TRUE) { + foffScreenRenderer = + (*env)->GetFieldID(env, cls, "offScreenRenderer", "Z"); + if (foffScreenRenderer == 0) ret= JNI_FALSE; + else joffScreenRenderer =(*env)->GetBooleanField(env, obj, foffScreenRenderer); + } + + if(ret==JNI_TRUE) { + fownwind = (*env)->GetFieldID(env, cls, "createOwnWindow", "Z"); + if (fownwind == 0) ret= JNI_FALSE; + else jownwind =(*env)->GetBooleanField(env, obj, fownwind); + } + + if(ret==JNI_TRUE) { + fpData = (*env)->GetFieldID(env, cls, "pData", "J"); + if (fpData == 0) ret= JNI_FALSE; + else pData =(JAWTDataHolder *) + ( (PointerHolder) (*env)->GetLongField(env, obj, fpData) ); + } + + + if(jawt_open(env, canvas, pData, verbose)==JNI_FALSE || + pData->result==JNI_FALSE + ) + { + fprintf(stderr,"\nGL4Java ERROR: gljDestroy could not open JAWT reference!\n"); + fflush(stderr); + ret=JNI_FALSE; + jawt_close_unlock(env, pData, JNI_FALSE); + return ret; + } + + if(jawt_lock(env, pData, JNI_TRUE, verbose)==JNI_FALSE || + pData->result==JNI_FALSE + ) + { + if(JNI_TRUE==verbose) + { + fprintf(stderr, "GL4Java: gljDestroy lock failed\n"); + fflush(stderr); + } + /** + * we have to continue destroying the context ! + * + * therefore, the show ain't over yet ! + * + jawt_close_unlock(env, pData, JNI_FALSE); + return JNI_FALSE; + */ + pData->result=JNI_TRUE; // the force will be with us ;-) + } + + thisWin = GET_USED_WINDOW(pData); + + if(ret==JNI_TRUE) + { + if ( gc == 0 ) + { + if(JNI_TRUE==verbose) + { + fprintf(stderr, "gljDestroy error, GL context is 0\n"); + fflush(stderr); + } + } + + if ( ! wglMakeCurrent( NULL, NULL ) ) + { + fprintf(stderr, "gljDestroy failed (free)\n"); + fflush(stderr); + } + + if(ret==JNI_TRUE) + { + if(gc!=0) + wglDeleteContext(gc); + + if(pix!=0) + { + if(thisWin!=0) + DeleteDC(thisWin); + thisWin=0; + pData->dsi_win = NULL; + pData->dsi_win_created = 0; + DeleteObject(pix); + pix=0; + } + if(jownwind && thisWin!=0) + { + DeleteDC(thisWin); + thisWin=0; + pData->dsi_win = NULL; + pData->dsi_win_created = 0; + jownwind=JNI_FALSE; + } + } + } + + gc = 0; + thisWin = 0; + + jawt_free_close_unlock(env, &pData, verbose); + + pData=0; + ret=JNI_TRUE; // force .. + + if(ret==JNI_TRUE && fpData!=0) { + (*env)->SetLongField(env, obj, fpData, (jlong)((PointerHolder)pData)); + } + + if(ret==JNI_TRUE && fwindowHandle!=0) { + (*env)->SetLongField(env, obj, fwindowHandle, (jlong)((PointerHolder)pData)); + } + + if(ret==JNI_TRUE && fglContext) { + (*env)->SetLongField(env, obj, fglContext, (jlong)((PointerHolder)gc)); + } + + + if(ret==JNI_TRUE && fpixmapHandle!=0) { + (*env)->SetLongField(env, obj, fpixmapHandle, (jlong)((PointerHolder)pix)); + } + + if(ret==JNI_TRUE && fownwind) { + (*env)->SetBooleanField(env, obj, fownwind, jownwind); + } + + return ret; +} + +JNIEXPORT jboolean JNICALL +Java_gl4java_GLContext_gljSwapNative( JNIEnv *env, jobject obj, + jlong disp, + jlong thisWin, + jlong glContext, + jboolean doubleBuffer + ) +{ + jboolean ret = JNI_TRUE; + + (void)glContext; + (void)disp; + + if( !thisWin || GET_USED_WINDOW(thisWin)==0) + { + fprintf(stderr,"Swap does not got the window ...\n"); + return JNI_FALSE; + } + + if( doubleBuffer==JNI_TRUE ) + { + if( SwapBuffers( GET_USED_WINDOW(thisWin) ) == FALSE ) + { + /* Error in Win2000 implementation :o) + * printf( "Error in swap buffer!\n" ); + */ + return JNI_FALSE; + } + } else { + glFlush(); + } + return ret; +} + +JNIEXPORT void JNICALL +Java_gl4java_GLContext_gljResizeNative( JNIEnv *env, jobject obj, + jboolean isOwnWindow, + jlong disp, jlong thisWin, + jint width, jint height) +{ + (void)isOwnWindow; + (void)disp; + (void)thisWin; + (void)width; + (void)height; + + return; +} + diff --git a/CNativeCode/OpenGL_X11.c b/CNativeCode/OpenGL_X11.c index 610611d..ac88c70 100644 --- a/CNativeCode/OpenGL_X11.c +++ b/CNativeCode/OpenGL_X11.c @@ -126,18 +126,16 @@ Java_gl4java_GLContext_openOpenGLNative( JNIEnv *env, jobject obj, jfieldID fdisplayHandle=0, fwindowHandle=0, fpixmapHandle=0; jfieldID fverbose=0; jfieldID fglContext=0; - jfieldID fstereoView=0, frgba=0, fstencilBits=0, - faccumSize=0, fownwind=0; - jfieldID fdoubleBuffer=0, foffScreenRenderer; + jfieldID fglCaps=0; + jfieldID fownwind=0, foffScreenRenderer; jfieldID fcreatewinw = 0, fcreatewinh = 0; jfieldID fshareWith = 0; jboolean joffScreenRenderer=JNI_FALSE; - jboolean jdoubleBuffer=JNI_TRUE; - jboolean jstereoView=JNI_FALSE; - jboolean jrgba=JNI_TRUE; - jint jstencilBits=0; - jint jaccumSize=0; + + jobject jglCaps=0; + GLCapabilities glCaps; + jboolean jownwind = JNI_FALSE ; jint jcreatewinw = 0, jcreatewinh = 0; GLXContext jshareWith = 0; @@ -148,7 +146,8 @@ Java_gl4java_GLContext_openOpenGLNative( JNIEnv *env, jobject obj, Window rootwini = 0; Pixmap pix; - int iValue, iValue1, iValue2, iValue3; + jthrowable exc; + jclass _GLCapabilities= 0; (void)canvas; @@ -191,33 +190,39 @@ Java_gl4java_GLContext_openOpenGLNative( JNIEnv *env, jobject obj, } if(ret==JNI_TRUE) { - fdoubleBuffer = (*env)->GetFieldID(env, cls, "doubleBuffer", "Z"); - if (fdoubleBuffer == 0) ret= JNI_FALSE; - else jdoubleBuffer =(*env)->GetBooleanField(env, obj, fdoubleBuffer); - } - - if(ret==JNI_TRUE) { - fstereoView = (*env)->GetFieldID(env, cls, "stereoView", "Z"); - if (fstereoView == 0) ret= JNI_FALSE; - else jstereoView =(*env)->GetBooleanField(env, obj, fstereoView); - } - - if(ret==JNI_TRUE) { - frgba = (*env)->GetFieldID(env, cls, "rgba", "Z"); - if (frgba == 0) ret= JNI_FALSE; - else jrgba =(*env)->GetBooleanField(env, obj, frgba); - } - - if(ret==JNI_TRUE) { - fstencilBits = (*env)->GetFieldID(env, cls, "stencilBits", "I"); - if (fstencilBits == 0) ret= JNI_FALSE; - else jstencilBits =(*env)->GetIntField(env, obj, fstencilBits); + fglCaps = (*env)->GetFieldID(env, cls, "glCaps", "Lgl4java/GLCapabilities;"); + if (fglCaps == 0) ret= JNI_FALSE; + else jglCaps =(*env)->GetObjectField(env, obj, fglCaps); + } + + _GLCapabilities= (*env)->FindClass(env, "Lgl4java/GLCapabilities;"); + exc = (*env)->ExceptionOccurred(env); + if(exc) { + if(JNI_TRUE==verbose) + { + fprintf(stderr, "GL4Java: openOpen FindClass gl4java/GLCapabilities failed, cannot check glCaps object\n"); + (*env)->ExceptionDescribe(env); + fflush(stderr); + } + (*env)->ExceptionClear(env); + _GLCapabilities=0; + } + exc=0; + + if( _GLCapabilities!=0 && + (*env)->IsInstanceOf(env, jglCaps, _GLCapabilities)==JNI_FALSE ) + { + fprintf(stderr,"\nGL4Java openOpenGL ERROR: glCaps is not instanceof gl4java/GLCapabilities !\n"); + fflush(stderr); + return JNI_FALSE; } - if(ret==JNI_TRUE) { - faccumSize = (*env)->GetFieldID(env, cls, "accumSize", "I"); - if (faccumSize == 0) ret= JNI_FALSE; - else jaccumSize =(*env)->GetIntField(env, obj, faccumSize); + if(JNI_TRUE != javaGLCapabilities2NativeGLCapabilities + ( env, jglCaps, &glCaps ) ) + { + fprintf(stderr,"\nGL4Java ERROR: glCaps Object is not valid !\n"); + fflush(stderr); + return JNI_FALSE; } if(ret==JNI_TRUE) { @@ -283,14 +288,6 @@ Java_gl4java_GLContext_openOpenGLNative( JNIEnv *env, jobject obj, fflush(stderr); } - if(JNI_TRUE==verbose) - { - fprintf(stderr,"\nGL4Java: (try to use visuals: doubleBuffer=%d, stereoView=%d, rgba=%d, stencilBits=%d, accumSize=%d, ownWindow=%d)\n)\n", - (int)jdoubleBuffer, (int)jstereoView, (int)jrgba, (int)jstencilBits, (int)jaccumSize, - (int)jownwind ); - fflush(stderr); - } - if(ret==JNI_TRUE) { fdisplayHandle = (*env)->GetFieldID(env, cls, "displayHandle", "J"); if (fdisplayHandle == 0) ret= JNI_FALSE; @@ -327,12 +324,11 @@ Java_gl4java_GLContext_openOpenGLNative( JNIEnv *env, jobject obj, fprintf(stderr, "GL4Java ERROR: Can not query glx extension -> Server does not support OpenGL\n"); fflush(stderr); ret = JNI_FALSE; - } else { - if (JNI_TRUE==verbose) { + } else if (JNI_TRUE==verbose) + { fprintf(stdout, "GLX by %s Version %s\n", glXGetClientString(display, GLX_VENDOR), glXGetClientString(display, GLX_VERSION)); - } } } @@ -346,18 +342,21 @@ Java_gl4java_GLContext_openOpenGLNative( JNIEnv *env, jobject obj, vgc = findVisualGlX( display, rootwini, &thisWin, (int)jcreatewinw, (int)jcreatewinh, - jdoubleBuffer, jstereoView, jrgba, - jstencilBits, jaccumSize, + &glCaps, &jownwind, jshareWith, joffScreenRenderer, &pix, verbose); - if(vgc.success == 0 && jrgba==JNI_TRUE) + if(vgc.success == 0 && glCaps.color==COLOR_RGBA) { - jrgba=JNI_FALSE; + if (JNI_TRUE==verbose) { + fprintf(stdout, "GL4Java switching color:=COLOR_INDEX\n"); + fflush(stdout); + } + glCaps.color=COLOR_INDEX; + vgc = findVisualGlX( display, rootwini, &thisWin, (int)jcreatewinw, (int)jcreatewinh, - jdoubleBuffer, jstereoView, jrgba, - jstencilBits, jaccumSize, + &glCaps, &jownwind, jshareWith, joffScreenRenderer, &pix, verbose); } @@ -374,104 +373,20 @@ Java_gl4java_GLContext_openOpenGLNative( JNIEnv *env, jobject obj, XCloseDisplay( display ); ret = JNI_FALSE; } else { - if(glXGetConfig( display, vgc.visual, - GLX_DOUBLEBUFFER, &iValue)==0) - { - if (JNI_TRUE==verbose) { - fprintf(stdout,"doubleBuffer: %d\n", iValue); - fflush(stdout); - } - jdoubleBuffer=iValue?JNI_TRUE:JNI_FALSE; - if(ret==JNI_TRUE && fdoubleBuffer!=0) { - (*env)->SetBooleanField(env, obj, fdoubleBuffer, - jdoubleBuffer); - } - - } else { - fprintf(stderr,"GL4Java: fetching doubleBuffer state failed\n"); - fflush(stderr); - } - if(glXGetConfig( display, vgc.visual, - GLX_STEREO, &iValue)==0) - { - if (JNI_TRUE==verbose) { - fprintf(stdout,"stereoView: %d\n", iValue); - fflush(stdout); - } - jstereoView=iValue?JNI_TRUE:JNI_FALSE; - if(ret==JNI_TRUE && fstereoView!=0) { - (*env)->SetBooleanField(env, obj, fstereoView, - jstereoView); - } - - } else { - fprintf(stderr,"GL4Java: fetching stereoView state failed\n"); - fflush(stderr); - } - if(glXGetConfig( display, vgc.visual, - GLX_RGBA, &iValue)==0) - { - if (JNI_TRUE==verbose) { - fprintf(stdout,"rgba: %d\n", iValue); - fflush(stdout); - } - jrgba=iValue?JNI_TRUE:JNI_FALSE; - if(ret==JNI_TRUE && frgba!=0) { - (*env)->SetBooleanField(env, obj, frgba, - jrgba); - } - - } else { - fprintf(stderr,"GL4Java: fetching rgba state failed\n"); - fflush(stderr); - } - if(glXGetConfig( display, vgc.visual, - GLX_STENCIL_SIZE, &iValue)==0) - { - if (JNI_TRUE==verbose) { - fprintf(stdout,"stencilBits: %d\n", iValue); - fflush(stdout); - } - jstencilBits=iValue; - if(ret==JNI_TRUE && fstencilBits!=0) { - (*env)->SetIntField(env, obj, - fstencilBits, (jint)jstencilBits); - } - - } else { - fprintf(stderr,"GL4Java: fetching stencilBits state failed\n"); - fflush(stderr); - } - if(glXGetConfig( display, vgc.visual,GLX_ACCUM_RED_SIZE, &iValue)==0 && - glXGetConfig( display, vgc.visual,GLX_ACCUM_GREEN_SIZE, &iValue1)==0 && - glXGetConfig( display, vgc.visual,GLX_ACCUM_BLUE_SIZE, &iValue2)==0 && - glXGetConfig( display, vgc.visual,GLX_ACCUM_ALPHA_SIZE, &iValue3)==0 ) - { - if (JNI_TRUE==verbose) { - fprintf(stdout,"accumSize(red): %d\n", iValue); - fprintf(stdout,"accumSize(green): %d\n", iValue1); - fprintf(stdout,"accumSize(blue): %d\n", iValue2); - fprintf(stdout,"accumSize(alpha): %d\n", iValue3); - fflush(stdout); - } - jaccumSize=iValue+iValue1+iValue2+iValue3; - if(ret==JNI_TRUE && faccumSize!=0) { - (*env)->SetIntField(env, obj, - faccumSize, (jint)jaccumSize); - } - - } else { - fprintf(stderr,"GL4Java: fetching accumSize(red) state failed\n"); - fflush(stderr); - } + (void) setGLCapabilities (display, vgc.visual, &glCaps); + if(JNI_TRUE==verbose) { - fprintf(stderr,"\nGL4Java: (using visuals: doubleBuffer=%d, stereoView=%d, rgba=%d, stencilBits=%d, accumSize=%d, ownWindow=%d)\n)\n", - (int)jdoubleBuffer, (int)jstereoView, (int)jrgba, - (int)jstencilBits, (int)jaccumSize, (int)jownwind); - fflush(stderr); + fprintf(stdout,"\nGL4Java: writing capabilities to GLContext's java object\n"); + fflush(stdout); } + (void) nativeGLCapabilities2JavaGLCapabilities + (env, jglCaps, &glCaps); + + if(ret==JNI_TRUE && fglCaps) { + (*env)->SetObjectField(env, obj, fglCaps, jglCaps); + } } } @@ -769,3 +684,4 @@ Java_gl4java_GLContext_gljSwapNative( JNIEnv *env, jobject obj, return JNI_TRUE; } + diff --git a/CNativeCode/OpenGL_X11_common.c b/CNativeCode/OpenGL_X11_common.c index 0c92a65..a23e8cf 100644 --- a/CNativeCode/OpenGL_X11_common.c +++ b/CNativeCode/OpenGL_X11_common.c @@ -96,6 +96,46 @@ int LIBAPIENTRY get_GC( Display *display, Window win, XVisualInfo *visual, } +int LIBAPIENTRY setVisualAttribListByGLCapabilities( + int visualAttribList[/*>=32*/], + GLCapabilities *glCaps ) +{ + int i=0; + visualAttribList[i++] = GLX_RED_SIZE; + visualAttribList[i++] = 1; + visualAttribList[i++] = GLX_GREEN_SIZE; + visualAttribList[i++] = 1; + visualAttribList[i++] = GLX_BLUE_SIZE; + visualAttribList[i++] = 1; + visualAttribList[i++] = GLX_DEPTH_SIZE; + visualAttribList[i++] = 1; + visualAttribList[i++] = GLX_ACCUM_RED_SIZE; + visualAttribList[i++] = (glCaps->accumRedBits>0)?1:0; + visualAttribList[i++] = GLX_ACCUM_GREEN_SIZE; + visualAttribList[i++] = (glCaps->accumGreenBits>0)?1:0; + visualAttribList[i++] = GLX_ACCUM_BLUE_SIZE; + visualAttribList[i++] = (glCaps->accumBlueBits>0)?1:0; + + if(COLOR_RGBA == glCaps->color) + { + visualAttribList[i++] = GLX_RGBA; + visualAttribList[i++] = GLX_ALPHA_SIZE; + visualAttribList[i++] = (glCaps->alphaBits>0)?1:0; + visualAttribList[i++] = GLX_ACCUM_ALPHA_SIZE; + visualAttribList[i++] = (glCaps->accumAlphaBits>0)?1:0; + } + if(BUFFER_DOUBLE==glCaps->buffer) + visualAttribList[i++] = GLX_DOUBLEBUFFER; + + if(STEREO_ON==glCaps->stereo) + visualAttribList[i++] = GLX_STEREO; + + visualAttribList[i++] = GLX_STENCIL_SIZE; + visualAttribList[i++] = glCaps->stencilBits; + visualAttribList[i] = None; + return i; +} + /** * Description for pWin: @@ -109,11 +149,7 @@ VisualGC LIBAPIENTRY findVisualGlX( Display *display, Window rootWin, Window * pWin, int width, int height, - jboolean doubleBuffer, - jboolean stereoView, - jboolean rgba, - jint stencilBits, - jint accumSize, + GLCapabilities * glCaps, jboolean * pOwnWin, GLXContext shareWith, jboolean offscreen, @@ -122,8 +158,7 @@ VisualGC LIBAPIENTRY findVisualGlX( Display *display, ) { Window newWin = 0; - int visualAttribList[32]; - int i=0; + int visualAttribList[64]; int j=0; int done=0; VisualGC vgc = { NULL, 0, 0 }; @@ -135,12 +170,14 @@ VisualGC LIBAPIENTRY findVisualGlX( Display *display, */ XVisualInfo * visualList=NULL; /* the visual list, to be XFree-ed */ - /* backup variables ... */ - jboolean _rgba=rgba; - jint _stencilBits=stencilBits; - jint _accumSize=accumSize; - jboolean _stereoView=stereoView; - jboolean _doubleBuffer=doubleBuffer; + /* backup ... */ + GLCapabilities _glCaps = *glCaps; + + if(JNI_TRUE==verbose) + { + fprintf(stdout, "GL4Java findVisualGlX: input capabilities:\n"); + printGLCapabilities ( glCaps ); + } do { if(JNI_TRUE==verbose) @@ -148,35 +185,19 @@ VisualGC LIBAPIENTRY findVisualGlX( Display *display, fprintf(stderr, "GL4Java: seeking visual loop# %d\n", j); } - i=0; - visualAttribList[i++] = GLX_RED_SIZE; - visualAttribList[i++] = 1; - visualAttribList[i++] = GLX_GREEN_SIZE; - visualAttribList[i++] = 1; - visualAttribList[i++] = GLX_BLUE_SIZE; - visualAttribList[i++] = 1; - visualAttribList[i++] = GLX_DEPTH_SIZE; - visualAttribList[i++] = 1; - visualAttribList[i++] = GLX_ACCUM_RED_SIZE; - visualAttribList[i++] = accumSize; - visualAttribList[i++] = GLX_ACCUM_GREEN_SIZE; - visualAttribList[i++] = accumSize; - visualAttribList[i++] = GLX_ACCUM_BLUE_SIZE; - visualAttribList[i++] = accumSize; - - if(JNI_TRUE==rgba) + if(glCaps->nativeVisualID>=0) + { + vgc.visual = findVisualIdByID(&visualList, + (int)(glCaps->nativeVisualID), + display, *pWin, verbose); + } + + if(vgc.visual==NULL) { - visualAttribList[i++] = GLX_RGBA; - visualAttribList[i++] = GLX_ACCUM_ALPHA_SIZE; - visualAttribList[i++] = accumSize; + glCaps->nativeVisualID=0; + (void) setVisualAttribListByGLCapabilities( + visualAttribList, glCaps); } - if(JNI_TRUE==doubleBuffer) - visualAttribList[i++] = GLX_DOUBLEBUFFER; - if(JNI_TRUE==stereoView) - visualAttribList[i++] = GLX_STEREO; - visualAttribList[i++] = GLX_STENCIL_SIZE; - visualAttribList[i++] = (int)stencilBits; - visualAttribList[i] = None; if(tryChooseVisual==JNI_TRUE && vgc.visual==NULL) { @@ -187,13 +208,13 @@ VisualGC LIBAPIENTRY findVisualGlX( Display *display, { if(vgc.visual!=NULL) { - fprintf(stderr, "glXChooseVisual: test visual(ID:%d(0x%X)):\n", + fprintf(stdout, "findVisualGlX.glXChooseVisual: found visual(ID:%d(0x%X))\n", (int) vgc.visual->visualid, (int) vgc.visual->visualid); - printVisualInfo ( display, vgc.visual); - } else - fprintf(stderr, "glXChooseVisual: no visual\n"); - fflush(stderr); + } else { + fprintf(stdout, "findVisualGlX.glXChooseVisual: no visual\n"); + } + fflush(stdout); } } @@ -201,25 +222,17 @@ VisualGC LIBAPIENTRY findVisualGlX( Display *display, { vgc.visual = findVisualIdByFeature( &visualList, display, *pWin, - doubleBuffer, stereoView, - rgba, - stencilBits, - accumSize, + glCaps, verbose); } - if(vgc.visual==NULL) - { - vgc.visual = findVisualIdByFeature( &visualList, - display, *pWin, - doubleBuffer, stereoView, - rgba, - stencilBits>0, - accumSize>0, verbose); - } - if( *pOwnWin == JNI_TRUE && vgc.visual!=NULL) { + if(JNI_TRUE==verbose) + { + fprintf(stdout, "findVisualGlX: CREATING OWN WINDOW !\n"); + fflush(stdout); + } newWin = createOwnOverlayWin(display, rootWin, *pWin /* the parent */, @@ -302,32 +315,41 @@ VisualGC LIBAPIENTRY findVisualGlX( Display *display, vgc.visual=NULL; } - /* Fall-Back ... */ + /** + * Falling-Back the exact (min. requirement) parameters .. + */ if(*pOwnWin==JNI_FALSE && offscreen==JNI_FALSE) { - rgba=_rgba; - stencilBits=_stencilBits; - accumSize=_accumSize; - stereoView=_stereoView; - doubleBuffer=_doubleBuffer; + *glCaps=_glCaps; *pOwnWin=JNI_TRUE; - } else if(accumSize>0 && offscreen==JNI_TRUE) { - accumSize=0; - } else if(doubleBuffer==JNI_FALSE && offscreen==JNI_TRUE) { - doubleBuffer=JNI_TRUE; - } else if(stencilBits>0) { - stencilBits=0; - } else if(stereoView==JNI_TRUE) { - stereoView=JNI_FALSE; - } else if(rgba==JNI_TRUE) { - rgba=JNI_FALSE; - } else if(doubleBuffer==JNI_TRUE) { - doubleBuffer=JNI_FALSE; + } else if( (glCaps->accumRedBits>0 || + glCaps->accumGreenBits>0 || + glCaps->accumBlueBits>0 || + glCaps->accumAlphaBits>0 + ) && offscreen==JNI_TRUE + ) + { + glCaps->accumRedBits=0; + glCaps->accumGreenBits=0; + glCaps->accumBlueBits=0; + glCaps->accumAlphaBits=0; + } else if(glCaps->buffer==BUFFER_SINGLE && + offscreen==JNI_TRUE) + { + glCaps->buffer=BUFFER_DOUBLE; + } else if(glCaps->stereo==STEREO_ON) { + glCaps->stereo=STEREO_OFF; + } else if(glCaps->stencilBits>32) { + glCaps->stencilBits=32; + } else if(glCaps->stencilBits>16) { + glCaps->stencilBits=16; + } else if(glCaps->stencilBits>8) { + glCaps->stencilBits=8; + } else if(glCaps->stencilBits>0) { + glCaps->stencilBits=0; + } else if(glCaps->buffer==BUFFER_DOUBLE) { + glCaps->buffer=BUFFER_SINGLE; } else if(tryChooseVisual==JNI_TRUE) { - rgba=_rgba; - stencilBits=_stencilBits; - accumSize=_accumSize; - stereoView=_stereoView; - doubleBuffer=_doubleBuffer; + *glCaps=_glCaps; *pOwnWin=JNI_FALSE; tryChooseVisual=JNI_FALSE; } else done=1; @@ -336,7 +358,9 @@ VisualGC LIBAPIENTRY findVisualGlX( Display *display, if(vgc.success==1 && JNI_TRUE==verbose) { - fprintf(stderr, "\nfindVisualGlX vi(ID:%d): \n screen %d, depth %d, class %d,\n clrmapsz %d, bitsPerRGB %d, shared with %d\n", + (void) setGLCapabilities (display, vgc.visual, glCaps); + + fprintf(stderr, "\nfindVisualGlX results vi(ID:%d): \n screen %d, depth %d, class %d,\n clrmapsz %d, bitsPerRGB %d, shared with %d\n", (int)vgc.visual->visualid, (int)vgc.visual->screen, (int)vgc.visual->depth, @@ -353,10 +377,11 @@ VisualGC LIBAPIENTRY findVisualGlX( Display *display, void LIBAPIENTRY printVisualInfo ( Display *display, XVisualInfo * vi) { - int dblBuffer, stereoView, rgbaMode, stencilSize; - int accumRedSize, accumGreenSize, accumBlueSize, accumAlphaSize; + GLCapabilities glCaps; - fprintf(stderr, "\nvi(ID:%d(0x%X)): \n screen %d, depth %d, class %d,\n clrmapsz %d, bitsPerRGB %d\n", + setGLCapabilities ( display, vi, &glCaps); + + fprintf(stdout, "\nvi(ID:%d(0x%X)): \n screen %d, depth %d, class %d,\n clrmapsz %d, bitsPerRGB %d\n", (int) vi->visualid, (int) vi->visualid, (int) vi->screen, @@ -365,25 +390,7 @@ void LIBAPIENTRY printVisualInfo ( Display *display, XVisualInfo * vi) (int) vi->colormap_size, (int) vi->bits_per_rgb ); - glXGetConfig( display, vi, GLX_DOUBLEBUFFER, &dblBuffer); - glXGetConfig( display, vi, GLX_STEREO, &stereoView); - glXGetConfig( display, vi, GLX_RGBA, &rgbaMode); - glXGetConfig( display, vi, GLX_STENCIL_SIZE, &stencilSize); - glXGetConfig( display, vi, GLX_ACCUM_RED_SIZE, &accumRedSize); - glXGetConfig( display, vi, GLX_ACCUM_GREEN_SIZE, &accumGreenSize); - glXGetConfig( display, vi, GLX_ACCUM_BLUE_SIZE, &accumBlueSize); - glXGetConfig( display, vi, GLX_ACCUM_ALPHA_SIZE, &accumAlphaSize); - - fprintf(stderr, "\t doubleBuff: %d, ", dblBuffer); - fprintf(stderr, " stereo: %d, ", stereoView); - fprintf(stderr, " rgba: %d, ", rgbaMode); - fprintf(stderr, " stencilSize: %d !\n", stencilSize); - fprintf(stderr, "\t red accum: %d, ", accumRedSize); - fprintf(stderr, " green accum: %d, ", accumGreenSize); - fprintf(stderr, " blue accum: %d, ", accumBlueSize); - fprintf(stderr, " alpha accum: %d !\n", accumAlphaSize); - - fflush(stderr); + printGLCapabilities ( &glCaps ); } void LIBAPIENTRY printAllVisualInfo ( Display *disp, Window win, jboolean verbose) @@ -423,45 +430,103 @@ void LIBAPIENTRY printAllVisualInfo ( Display *disp, Window win, jboolean verbos } int LIBAPIENTRY testVisualInfo ( Display *display, XVisualInfo * vi, - int dblBuffer, int stereoView, int rgbaMode, - int stencilSize, int accumSize) + GLCapabilities *glCaps) { - int glxCfg; + GLCapabilities _glCaps; + setGLCapabilities ( display, vi, &_glCaps); + + if(_glCaps.buffer<glCaps->buffer) return 0; + + if(_glCaps.color<glCaps->color) return 0; + + if(_glCaps.stereo<glCaps->stereo) return 0; - glXGetConfig( display, vi, GLX_DOUBLEBUFFER, &glxCfg); - if(glxCfg<dblBuffer) return 0; + /* + if(_glCaps.depthBits<glCaps->depthBits) return 0; + */ - glXGetConfig( display, vi, GLX_STEREO, &glxCfg); - if(glxCfg<stereoView) return 0; + if(_glCaps.stencilBits<glCaps->stencilBits) return 0; - glXGetConfig( display, vi, GLX_RGBA, &glxCfg); - if(glxCfg<rgbaMode) return 0; + /* + if(_glCaps.redBits<glCaps->redBits) return 0; - glXGetConfig( display, vi, GLX_STENCIL_SIZE, &glxCfg); - if(glxCfg<stencilSize) return 0; + if(_glCaps.greenBits<glCaps->greenBits) return 0; - glXGetConfig(display, vi, GLX_ACCUM_RED_SIZE, &glxCfg); - if(glxCfg<accumSize) return 0; + if(_glCaps.blueBits<glCaps->blueBits) return 0; + */ - glXGetConfig(display, vi, GLX_ACCUM_GREEN_SIZE, &glxCfg); - if(glxCfg<accumSize) return 0; + if(_glCaps.accumRedBits<glCaps->accumRedBits) return 0; - glXGetConfig(display, vi, GLX_ACCUM_BLUE_SIZE, &glxCfg); - if(glxCfg<accumSize) return 0; + if(_glCaps.accumGreenBits<glCaps->accumGreenBits) return 0; - if(rgbaMode>0) { - glXGetConfig(display, vi, GLX_ACCUM_ALPHA_SIZE, &glxCfg); - if(glxCfg<accumSize) return 0; + if(_glCaps.accumBlueBits<glCaps->accumBlueBits) return 0; + + if(glCaps->color>0) { + /* + if(_glCaps.alphaBits<glCaps->alphaBits) return 0; + */ + if(_glCaps.accumAlphaBits<glCaps->accumAlphaBits) return 0; } return 1; } +XVisualInfo * LIBAPIENTRY findVisualIdByID( XVisualInfo ** visualList, + int visualID, Display *disp, + Window win, jboolean verbose) +{ + XVisualInfo * vi=0; + XVisualInfo viTemplate; + int i, numReturns; + XWindowAttributes xwa; + int done=0; + + if(XGetWindowAttributes(disp, win, &xwa) == 0) + { + fprintf(stderr, "\nERROR while fetching XWindowAttributes\n"); + fflush(stderr); + return 0; + } + + viTemplate.screen = DefaultScreen( disp ); + viTemplate.class = (xwa.visual)->class ; + viTemplate.depth = xwa.depth; + + *visualList = XGetVisualInfo( disp, VisualScreenMask, + &viTemplate, &numReturns ); + + for(i=0; done==0 && i<numReturns; i++) + { + vi = &((*visualList)[i]); + + if(vi->visualid==visualID) + { + if(JNI_TRUE==verbose) + { + fprintf(stderr, "findVisualIdByID: Found matching Visual:\n"); + printVisualInfo ( disp, vi); + } + return vi; + } + } + + if(JNI_TRUE==verbose) + { + if( numReturns==0 ) + fprintf(stderr, "findVisualIdByID: No available visuals. Exiting...\n" ); + else if( i>=numReturns ) + fprintf(stderr, "findVisualIdByID: No matching visualID found ...\n" ); + fflush(stderr); + } + + XFree(*visualList); + *visualList=NULL; + return NULL; +} XVisualInfo * LIBAPIENTRY findVisualIdByFeature( XVisualInfo ** visualList, Display *disp, Window win, - int dblBuffer, int stereoView, int rgbaMode, - int stencilSize, int accumSize, + GLCapabilities *glCaps, jboolean verbose) { XVisualInfo * vi=0; @@ -487,8 +552,7 @@ XVisualInfo * LIBAPIENTRY findVisualIdByFeature( XVisualInfo ** visualList, for(i=0; done==0 && i<numReturns; i++) { vi = &((*visualList)[i]); - if ( testVisualInfo ( disp, vi, dblBuffer, stereoView, rgbaMode, - stencilSize, accumSize) ) + if ( testVisualInfo ( disp, vi, glCaps ) ) { if(JNI_TRUE==verbose) { @@ -548,6 +612,86 @@ jboolean LIBAPIENTRY testX11Java() return ret; } +jboolean LIBAPIENTRY setGLCapabilities ( Display * disp, + XVisualInfo * visual, GLCapabilities *glCaps) +{ + int iValue=0; + int iValue1=0; + int iValue2=0; + int iValue3=0; + + if(glXGetConfig( disp, visual, GLX_DOUBLEBUFFER, &iValue)==0) + { + glCaps->buffer=iValue?BUFFER_DOUBLE:BUFFER_SINGLE; + } else { + fprintf(stderr,"GL4Java: fetching doubleBuffer state failed\n"); + fflush(stderr); + } + + if(glXGetConfig( disp, visual, GLX_RGBA, &iValue)==0) + { + glCaps->color=iValue?COLOR_RGBA:COLOR_INDEX; + } else { + fprintf(stderr,"GL4Java: fetching rgba state failed\n"); + fflush(stderr); + } + + if(glXGetConfig( disp, visual, GLX_STEREO, &iValue)==0) + { + glCaps->stereo=iValue?STEREO_ON:STEREO_OFF; + } else { + fprintf(stderr,"GL4Java: fetching stereoView state failed\n"); + fflush(stderr); + } + + if(glXGetConfig( disp, visual, GLX_DEPTH_SIZE, &iValue)==0) + { + glCaps->depthBits = iValue; + } else { + fprintf(stderr,"GL4Java: fetching depthBits state failed\n"); + fflush(stderr); + } + + if(glXGetConfig( disp, visual, GLX_STENCIL_SIZE, &iValue)==0) + { + glCaps->stencilBits = iValue; + } else { + fprintf(stderr,"GL4Java: fetching stencilBits state failed\n"); + fflush(stderr); + } + + if(glXGetConfig(disp,visual,GLX_RED_SIZE, &iValue)==0 && + glXGetConfig(disp,visual,GLX_GREEN_SIZE, &iValue1)==0 && + glXGetConfig(disp,visual,GLX_BLUE_SIZE, &iValue2)==0 && + glXGetConfig(disp,visual,GLX_ALPHA_SIZE, &iValue3)==0 ) + { + glCaps->redBits = iValue; + glCaps->greenBits= iValue1; + glCaps->blueBits= iValue2; + glCaps->alphaBits= iValue3; + } else { + fprintf(stderr,"GL4Java: fetching rgba Size states failed\n"); + fflush(stderr); + } + + if(glXGetConfig(disp,visual,GLX_ACCUM_RED_SIZE, &iValue)==0 && + glXGetConfig(disp,visual,GLX_ACCUM_GREEN_SIZE, &iValue1)==0 && + glXGetConfig(disp,visual,GLX_ACCUM_BLUE_SIZE, &iValue2)==0 && + glXGetConfig(disp,visual,GLX_ACCUM_ALPHA_SIZE, &iValue3)==0 ) + { + glCaps->accumRedBits = iValue; + glCaps->accumGreenBits= iValue1; + glCaps->accumBlueBits= iValue2; + glCaps->accumAlphaBits= iValue3; + } else { + fprintf(stderr,"GL4Java: fetching rgba AccumSize states failed\n"); + fflush(stderr); + } + glCaps->nativeVisualID=(long)visual->visualid; + + return JNI_TRUE; +} + int LIBAPIENTRY x11gl_myErrorHandler(Display *pDisp, XErrorEvent *p_error) { diff --git a/CNativeCode/OpenGL_X11_common.h b/CNativeCode/OpenGL_X11_common.h index bba3040..1bb39c4 100644 --- a/CNativeCode/OpenGL_X11_common.h +++ b/CNativeCode/OpenGL_X11_common.h @@ -24,7 +24,7 @@ int success; /* 1: OK, 0: ERROR */ } VisualGC; - + /* * prototypes for functions local to this file scope */ @@ -33,35 +33,37 @@ GLXContext *gc, GLXContext gc_share, jboolean verbose ); + LIBAPI int LIBAPIENTRY setVisualAttribListByGLCapabilities( + int visualAttribList[/*>=32*/], + GLCapabilities *glCaps ); + LIBAPI VisualGC LIBAPIENTRY findVisualGlX( Display *display, - Window rootWin, - Window * pWin, - int width, int height, - jboolean doubleBuffer, - jboolean stereoView, - jboolean rgba, - jint stencilBits, - jint accumSize, - jboolean * pOwnWin, - GLXContext shareWith, - jboolean offscreen, - Pixmap *pix, + Window rootWin, + Window * pWin, + int width, int height, + GLCapabilities *glCaps, + jboolean * pOwnWin, + GLXContext shareWith, + jboolean offscreen, + Pixmap *pix, jboolean verbose - ); + ); LIBAPI void LIBAPIENTRY printVisualInfo ( Display *display, XVisualInfo * vi); LIBAPI void LIBAPIENTRY printAllVisualInfo ( Display *disp, Window win, jboolean verbose); LIBAPI int LIBAPIENTRY testVisualInfo ( Display *display, XVisualInfo * vi, - int dblBuffer, int stereoView, int rgbaMode, - int stencilSize, int accumSize); + GLCapabilities *glCaps); + LIBAPI XVisualInfo * LIBAPIENTRY findVisualIdByID( XVisualInfo ** visualList, + int visualID, Display *disp, + Window win, jboolean verbose); + LIBAPI XVisualInfo * LIBAPIENTRY findVisualIdByFeature( XVisualInfo ** visualList, Display *disp, Window win, - int dblBuffer, int stereoView, int rgbaMode, - int stencilSize, int accumSize, + GLCapabilities *glCaps, jboolean verbose); /* testX11Java does important implementation plattformspecific checks: @@ -70,6 +72,9 @@ */ LIBAPI jboolean LIBAPIENTRY testX11Java(); + LIBAPI jboolean LIBAPIENTRY setGLCapabilities ( Display * disp, + XVisualInfo * visual, GLCapabilities *glCaps); + LIBAPI int LIBAPIENTRY x11gl_myErrorHandler( Display *pDisp, XErrorEvent *p_error); diff --git a/CNativeCode/OpenGL_X11_jawt.c b/CNativeCode/OpenGL_X11_jawt.c index db7cd39..995e31a 100644 --- a/CNativeCode/OpenGL_X11_jawt.c +++ b/CNativeCode/OpenGL_X11_jawt.c @@ -162,31 +162,29 @@ Java_gl4java_GLContext_openOpenGLNative( JNIEnv *env, jobject obj, jfieldID fdisplayHandle=0, fpixmapHandle=0; jfieldID fverbose=0; jfieldID fglContext=0; - jfieldID fstereoView=0, frgba=0, fstencilBits=0, - faccumSize=0, fownwind=0; - jfieldID fdoubleBuffer=0, foffScreenRenderer=0; + + jfieldID fglCaps=0; + jfieldID foffScreenRenderer=0, fownwind=0; jfieldID fcreatewinw = 0, fcreatewinh = 0; jfieldID fshareWith = 0; jboolean joffScreenRenderer=JNI_FALSE; - jboolean jdoubleBuffer=JNI_TRUE; - jboolean jstereoView=JNI_FALSE; - jboolean jrgba=JNI_TRUE; - jint jstencilBits=0; - jint jaccumSize=0; jboolean jownwind = JNI_FALSE ; jint jcreatewinw = 0, jcreatewinh = 0; GLXContext jshareWith = 0; + jobject jglCaps=0; + GLCapabilities glCaps; + /* these variables will be mapped in the java-object ! */ JAWTDataHolder * pData = NULL; Display * display = 0; Window rootwini = 0; Window theWindow = 0; Pixmap pix=0; - jclass AwtComponent = (*env)->FindClass(env, "Ljava/awt/Component;"); - - int iValue=0, iValue1=0, iValue2=0, iValue3=0; + jthrowable exc; + jclass _GLCapabilities= 0; + jclass _AwtComponent=0; cls = (*env)->GetObjectClass(env, obj); if(cls==0) @@ -227,33 +225,39 @@ Java_gl4java_GLContext_openOpenGLNative( JNIEnv *env, jobject obj, } if(ret==JNI_TRUE) { - fdoubleBuffer = (*env)->GetFieldID(env, cls, "doubleBuffer", "Z"); - if (fdoubleBuffer == 0) ret= JNI_FALSE; - else jdoubleBuffer =(*env)->GetBooleanField(env, obj, fdoubleBuffer); - } - - if(ret==JNI_TRUE) { - fstereoView = (*env)->GetFieldID(env, cls, "stereoView", "Z"); - if (fstereoView == 0) ret= JNI_FALSE; - else jstereoView =(*env)->GetBooleanField(env, obj, fstereoView); + fglCaps = (*env)->GetFieldID(env, cls, "glCaps", "Lgl4java/GLCapabilities;"); + if (fglCaps == 0) ret= JNI_FALSE; + else jglCaps =(*env)->GetObjectField(env, obj, fglCaps); } - if(ret==JNI_TRUE) { - frgba = (*env)->GetFieldID(env, cls, "rgba", "Z"); - if (frgba == 0) ret= JNI_FALSE; - else jrgba =(*env)->GetBooleanField(env, obj, frgba); + _GLCapabilities= (*env)->FindClass(env, "Lgl4java/GLCapabilities;"); + exc = (*env)->ExceptionOccurred(env); + if(exc) { + if(JNI_TRUE==verbose) + { + fprintf(stderr, "GL4Java: openOpen FindClass gl4java/GLCapabilities failed, cannot check glCaps object\n"); + (*env)->ExceptionDescribe(env); + fflush(stderr); + } + (*env)->ExceptionClear(env); + _GLCapabilities=0; } + exc=0; - if(ret==JNI_TRUE) { - fstencilBits = (*env)->GetFieldID(env, cls, "stencilBits", "I"); - if (fstencilBits == 0) ret= JNI_FALSE; - else jstencilBits =(*env)->GetIntField(env, obj, fstencilBits); + if( _GLCapabilities!=0 && + (*env)->IsInstanceOf(env, jglCaps, _GLCapabilities)==JNI_FALSE ) + { + fprintf(stderr,"\nGL4Java openOpenGL ERROR: glCaps is not instanceof gl4java/GLCapabilities !\n"); + fflush(stderr); + return JNI_FALSE; } - if(ret==JNI_TRUE) { - faccumSize = (*env)->GetFieldID(env, cls, "accumSize", "I"); - if (faccumSize == 0) ret= JNI_FALSE; - else jaccumSize =(*env)->GetIntField(env, obj, faccumSize); + if(JNI_TRUE != javaGLCapabilities2NativeGLCapabilities + ( env, jglCaps, &glCaps ) ) + { + fprintf(stderr,"\nGL4Java ERROR: glCaps Object is not valid !\n"); + fflush(stderr); + return JNI_FALSE; } if(ret==JNI_TRUE) { @@ -302,14 +306,6 @@ Java_gl4java_GLContext_openOpenGLNative( JNIEnv *env, jobject obj, jownwind = JNI_FALSE; } - if(JNI_TRUE==verbose) - { - fprintf(stderr,"\nGL4Java: (try to use visuals: doubleBuffer=%d, stereoView=%d, rgba=%d, stencilBits=%d, accumSize=%d, ownWindow=%d)\n)\n", - (int)jdoubleBuffer, (int)jstereoView, (int)jrgba, (int)jstencilBits, (int)jaccumSize, - (int)jownwind ); - fflush(stderr); - } - if(ret==JNI_TRUE) { fdisplayHandle = (*env)->GetFieldID(env, cls, "displayHandle", "J"); if (fdisplayHandle == 0) ret= JNI_FALSE; @@ -320,6 +316,20 @@ Java_gl4java_GLContext_openOpenGLNative( JNIEnv *env, jobject obj, if (fglContext == 0) ret= JNI_FALSE; } + _AwtComponent= (*env)->FindClass(env, "Ljava/awt/Component;"); + exc = (*env)->ExceptionOccurred(env); + if(exc) { + if(JNI_TRUE==verbose) + { + fprintf(stderr, "GL4Java: openOpen FindClass java/awt/Component failed, cannot check canvas object\n"); + (*env)->ExceptionDescribe(env); + fflush(stderr); + } + (*env)->ExceptionClear(env); + _AwtComponent=0; + } + exc=0; + if(ret==JNI_TRUE) { if (canvas == 0) { @@ -327,7 +337,8 @@ Java_gl4java_GLContext_openOpenGLNative( JNIEnv *env, jobject obj, fprintf(stderr,"\nGL4Java ERROR: canvas == NULL !\n"); fflush(stderr); } else { - if( (*env)->IsInstanceOf(env, canvas, AwtComponent)==JNI_FALSE ) + if( _AwtComponent!=0 && + (*env)->IsInstanceOf(env, canvas, _AwtComponent)==JNI_FALSE) { fprintf(stderr,"\nGL4Java ERROR: canvas is not instanceof java/awt/Component !\n"); fflush(stderr); @@ -391,6 +402,14 @@ Java_gl4java_GLContext_openOpenGLNative( JNIEnv *env, jobject obj, } } + /* + if(ret==JNI_TRUE) + XSetErrorHandler(x11gl_myErrorHandler); + + if(ret==JNI_TRUE) + XSetIOErrorHandler(x11gl_myIOErrorHandler); + */ + if(JNI_TRUE==ret && JNI_TRUE==verbose) { if(joffScreenRenderer==JNI_TRUE) @@ -416,6 +435,7 @@ Java_gl4java_GLContext_openOpenGLNative( JNIEnv *env, jobject obj, fprintf(stdout, "GLX by %s Version %s\n", glXGetClientString(display, GLX_VENDOR), glXGetClientString(display, GLX_VERSION)); + fflush(stdout); } } } @@ -430,18 +450,21 @@ Java_gl4java_GLContext_openOpenGLNative( JNIEnv *env, jobject obj, vgc = findVisualGlX( display, rootwini, &theWindow, (int)jcreatewinw, (int)jcreatewinh, - jdoubleBuffer, jstereoView, jrgba, - jstencilBits, jaccumSize, + &glCaps, &jownwind, jshareWith, joffScreenRenderer, &pix, verbose); - if(vgc.success == 0 && jrgba==JNI_TRUE) + if(vgc.success == 0 && glCaps.color==COLOR_RGBA) { - jrgba=JNI_FALSE; + if (JNI_TRUE==verbose) { + fprintf(stdout, "GL4Java switching color:=COLOR_INDEX\n"); + fflush(stdout); + } + glCaps.color=COLOR_INDEX; + vgc = findVisualGlX( display, rootwini, &theWindow, (int)jcreatewinw, (int)jcreatewinh, - jdoubleBuffer, jstereoView, jrgba, - jstencilBits, jaccumSize, + &glCaps, &jownwind, jshareWith, joffScreenRenderer, &pix, verbose); } @@ -465,104 +488,18 @@ Java_gl4java_GLContext_openOpenGLNative( JNIEnv *env, jobject obj, pData->dsi_win_created=1; } - if(glXGetConfig( display, vgc.visual, - GLX_DOUBLEBUFFER, &iValue)==0) - { - if (JNI_TRUE==verbose) { - fprintf(stdout,"doubleBuffer: %d\n", iValue); - fflush(stdout); - } - jdoubleBuffer=iValue?JNI_TRUE:JNI_FALSE; - if(ret==JNI_TRUE && fdoubleBuffer!=0) { - (*env)->SetBooleanField(env, obj, fdoubleBuffer, - jdoubleBuffer); - } - - } else { - fprintf(stderr,"GL4Java: fetching doubleBuffer state failed\n"); - fflush(stderr); - } - if(glXGetConfig( display, vgc.visual, - GLX_STEREO, &iValue)==0) - { - if (JNI_TRUE==verbose) { - fprintf(stdout,"stereoView: %d\n", iValue); - fflush(stdout); - } - jstereoView=iValue?JNI_TRUE:JNI_FALSE; - if(ret==JNI_TRUE && fstereoView!=0) { - (*env)->SetBooleanField(env, obj, fstereoView, - jstereoView); - } - - } else { - fprintf(stderr,"GL4Java: fetching stereoView state failed\n"); - fflush(stderr); - } - if(glXGetConfig( display, vgc.visual, - GLX_RGBA, &iValue)==0) - { - if (JNI_TRUE==verbose) { - fprintf(stdout,"rgba: %d\n", iValue); - fflush(stdout); - } - jrgba=iValue?JNI_TRUE:JNI_FALSE; - if(ret==JNI_TRUE && frgba!=0) { - (*env)->SetBooleanField(env, obj, frgba, - jrgba); - } - - } else { - fprintf(stderr,"GL4Java: fetching rgba state failed\n"); - fflush(stderr); - } - if(glXGetConfig( display, vgc.visual, - GLX_STENCIL_SIZE, &iValue)==0) - { - if (JNI_TRUE==verbose) { - fprintf(stdout,"stencilBits: %d\n", iValue); - fflush(stdout); - } - jstencilBits=iValue; - if(ret==JNI_TRUE && fstencilBits!=0) { - (*env)->SetIntField(env, obj, - fstencilBits, (jint)jstencilBits); - } - - } else { - fprintf(stderr,"GL4Java: fetching stencilBits state failed\n"); - fflush(stderr); - } - if(glXGetConfig( display, vgc.visual,GLX_ACCUM_RED_SIZE, &iValue)==0 && - glXGetConfig( display, vgc.visual,GLX_ACCUM_GREEN_SIZE, &iValue1)==0 && - glXGetConfig( display, vgc.visual,GLX_ACCUM_BLUE_SIZE, &iValue2)==0 && - glXGetConfig( display, vgc.visual,GLX_ACCUM_ALPHA_SIZE, &iValue3)==0 ) - { - if (JNI_TRUE==verbose) { - fprintf(stdout,"accumSize(red): %d\n", iValue); - fprintf(stdout,"accumSize(green): %d\n", iValue1); - fprintf(stdout,"accumSize(blue): %d\n", iValue2); - fprintf(stdout,"accumSize(alpha): %d\n", iValue3); - fflush(stdout); - } - jaccumSize=iValue+iValue1+iValue2+iValue3; - if(ret==JNI_TRUE && faccumSize!=0) { - (*env)->SetIntField(env, obj, - faccumSize, (jint)jaccumSize); - } - - } else { - fprintf(stderr,"GL4Java: fetching accumSize(red) state failed\n"); - fflush(stderr); - } if(JNI_TRUE==verbose) { - fprintf(stderr,"\nGL4Java: (using visuals: doubleBuffer=%d, stereoView=%d, rgba=%d, stencilBits=%d, accumSize=%d, ownWindow=%d)\n)\n", - (int)jdoubleBuffer, (int)jstereoView, (int)jrgba, - (int)jstencilBits, (int)jaccumSize, (int)jownwind); - fflush(stderr); + fprintf(stdout,"\nGL4Java: writing capabilities to GLContext's java object\n"); + fflush(stdout); } + (void) nativeGLCapabilities2JavaGLCapabilities + (env, jglCaps, &glCaps); + + if(ret==JNI_TRUE && fglCaps) { + (*env)->SetObjectField(env, obj, fglCaps, jglCaps); + } } } @@ -699,7 +636,6 @@ Java_gl4java_GLContext_gljMakeCurrentNative( JNIEnv *env, jobject obj, GET_USED_WINDOW(thisWin), (GLXContext)((PointerHolder)glContext) ) ) { - extern GLenum glGetError ( void ) ; fprintf(stderr, "GL4Java: gljMakeCurrent failed with GC\n Another thread may be use it now ...\n"); fflush(stderr); jawt_close_unlock(env, pData, JNI_FALSE); @@ -960,3 +896,4 @@ Java_gl4java_GLContext_gljSwapNative( JNIEnv *env, jobject obj, return JNI_TRUE; } + diff --git a/CNativeCode/OpenGL_misc.c b/CNativeCode/OpenGL_misc.c index 5f9d502..201a048 100644 --- a/CNativeCode/OpenGL_misc.c +++ b/CNativeCode/OpenGL_misc.c @@ -31,6 +31,250 @@ static const char * _lib_version_= __LIB_VERSION__ ; #define CALLBACK #endif + +#ifdef J_GET_INT_FIELD + #undef J_GET_INT_FIELD +#endif +#define J_GET_INT_FIELD(ATTRIBUTE_NAME, ATTRIBUTE_NAME_STR) if(ok==JNI_TRUE) { f ## ATTRIBUTE_NAME = (*env)->GetFieldID(env, cls, ATTRIBUTE_NAME_STR, "I"); if ( f ## ATTRIBUTE_NAME == 0) ok= JNI_FALSE; } + +#ifdef J_GET_INT_FIELD_VAL + #undef J_GET_INT_FIELD_VAL +#endif +#define J_GET_INT_FIELD_VAL(ATTRIBUTE_NAME, ATTRIBUTE_NAME_STR) if(ok==JNI_TRUE) { f ## ATTRIBUTE_NAME = (*env)->GetFieldID(env, cls, ATTRIBUTE_NAME_STR, "I"); if ( f ## ATTRIBUTE_NAME == 0) ok= JNI_FALSE; else glCaps-> ## ATTRIBUTE_NAME = (int) ((*env)->GetIntField(env, capsObj, f ## ATTRIBUTE_NAME)); } + +#ifdef J_SET_INT_FIELD_VAL + #undef J_SET_INT_FIELD_VAL +#endif +#define J_SET_INT_FIELD_VAL(ATTRIBUTE_NAME) if(ok==JNI_TRUE && f ## ATTRIBUTE_NAME!=0) { (*env)->SetIntField(env, capsObj, f ## ATTRIBUTE_NAME, (jint) glCaps-> ## ATTRIBUTE_NAME); } + +#ifdef J_GET_LONG_FIELD + #undef J_GET_LONG_FIELD +#endif +#define J_GET_LONG_FIELD(ATTRIBUTE_NAME, ATTRIBUTE_NAME_STR) if(ok==JNI_TRUE) { f ## ATTRIBUTE_NAME = (*env)->GetFieldID(env, cls, ATTRIBUTE_NAME_STR, "J"); if ( f ## ATTRIBUTE_NAME == 0) ok= JNI_FALSE; } + + +#ifdef J_GET_LONG_FIELD_VAL + #undef J_GET_LONG_FIELD_VAL +#endif +#define J_GET_LONG_FIELD_VAL(ATTRIBUTE_NAME, ATTRIBUTE_NAME_STR) if(ok==JNI_TRUE) { f ## ATTRIBUTE_NAME = (*env)->GetFieldID(env, cls, ATTRIBUTE_NAME_STR, "J"); if ( f ## ATTRIBUTE_NAME == 0) ok= JNI_FALSE; else glCaps-> ## ATTRIBUTE_NAME = (long) ((*env)->GetLongField(env, capsObj, f ## ATTRIBUTE_NAME)); } + +#ifdef J_SET_LONG_FIELD_VAL + #undef J_SET_LONG_FIELD_VAL +#endif +#define J_SET_LONG_FIELD_VAL(ATTRIBUTE_NAME) if(ok==JNI_TRUE && f ## ATTRIBUTE_NAME!=0) { (*env)->SetLongField(env, capsObj, f ## ATTRIBUTE_NAME, (jlong) glCaps-> ## ATTRIBUTE_NAME); } + +jboolean LIBAPIENTRY javaGLCapabilities2NativeGLCapabilities + ( JNIEnv *env, + jobject capsObj, + GLCapabilities *glCaps ) +{ + jfieldID fbuffer=0; + jfieldID fcolor=0; + jfieldID fstereo=0; + jfieldID fdepthBits=0; + jfieldID fstencilBits=0; + jfieldID fredBits=0; + jfieldID fgreenBits=0; + jfieldID fblueBits=0; + jfieldID falphaBits=0; + jfieldID faccumRedBits=0; + jfieldID faccumGreenBits=0; + jfieldID faccumBlueBits=0; + jfieldID faccumAlphaBits=0; + jfieldID fnativeVisualID=0; + + jclass cls = 0; + + jboolean ok = JNI_TRUE; + + /** + * + jthrowable exc; + jclass _GLCapabilities= 0; + + _GLCapabilities= (*env)->FindClass(env, "Lgl4java/GLCapabilities;"); + exc = (*env)->ExceptionOccurred(env); + if(exc) { + fprintf(stderr, "GL4Java: glcaps java2native FindClass gl4java/GLCapabilities failed, cannot check glCaps object\n"); + (*env)->ExceptionClear(env); + fflush(stderr); + _GLCapabilities=0; + } + exc=0; + + + if(_GLCapabilities!=0 && + (*env)->IsInstanceOf(env, capsObj, _GLCapabilities)==JNI_FALSE ) + { + fprintf(stderr,"\nGL4Java glcaps java2native ERROR: capsObj is not instanceof gl4java/GLCapabilities !\n"); + fflush(stderr); + return JNI_FALSE; + } + */ + + cls = (*env)->GetObjectClass(env, capsObj); + if(cls==0) + { + fprintf(stderr,"GL4Java ERROR: clazz not accessible\n"); + fflush(stderr); + return JNI_FALSE; + } + + if(glCaps==0) + { + fprintf(stderr,"GL4Java ERROR: native argument GLCapabilities not given\n"); + fflush(stderr); + return JNI_FALSE; + } + + J_GET_INT_FIELD_VAL(buffer, "buffer") + J_GET_INT_FIELD_VAL(color, "color") + J_GET_INT_FIELD_VAL(stereo, "stereo") + J_GET_INT_FIELD_VAL(depthBits, "depthBits") + J_GET_INT_FIELD_VAL(stencilBits, "stencilBits") + J_GET_INT_FIELD_VAL(redBits, "redBits") + J_GET_INT_FIELD_VAL(greenBits, "greenBits") + J_GET_INT_FIELD_VAL(blueBits, "blueBits") + J_GET_INT_FIELD_VAL(alphaBits, "alphaBits") + J_GET_INT_FIELD_VAL(accumRedBits, "accumRedBits") + J_GET_INT_FIELD_VAL(accumGreenBits, "accumGreenBits") + J_GET_INT_FIELD_VAL(accumBlueBits, "accumBlueBits") + J_GET_INT_FIELD_VAL(accumAlphaBits, "accumAlphaBits") + J_GET_LONG_FIELD_VAL(nativeVisualID, "nativeVisualID") + + if(JNI_TRUE!=ok) + { + fprintf(stderr,"GL4Java ERROR: gl4java/GLCapabilities fields not accessible\n"); + fflush(stderr); + return JNI_FALSE; + } + + return JNI_TRUE; +} + +jboolean LIBAPIENTRY nativeGLCapabilities2JavaGLCapabilities + ( JNIEnv *env, + jobject capsObj, + GLCapabilities *glCaps ) +{ + jfieldID fbuffer=0; + jfieldID fcolor=0; + jfieldID fstereo=0; + jfieldID fdepthBits=0; + jfieldID fstencilBits=0; + jfieldID fredBits=0; + jfieldID fgreenBits=0; + jfieldID fblueBits=0; + jfieldID falphaBits=0; + jfieldID faccumRedBits=0; + jfieldID faccumGreenBits=0; + jfieldID faccumBlueBits=0; + jfieldID faccumAlphaBits=0; + jfieldID fnativeVisualID=0; + + jclass cls = 0; + + jboolean ok = JNI_TRUE; + + /** + jthrowable exc; + jclass _GLCapabilities= 0; + + _GLCapabilities= (*env)->FindClass(env, "Lgl4java/GLCapabilities;"); + exc = (*env)->ExceptionOccurred(env); + if(exc) { + fprintf(stderr, "GL4Java: glcaps native2java FindClass gl4java/GLCapabilities failed, cannot check glCaps object\n"); + (*env)->ExceptionClear(env); + fflush(stderr); + _GLCapabilities=0; + } + exc=0; + + + if(_GLCapabilities!=0 && + (*env)->IsInstanceOf(env, capsObj, _GLCapabilities)==JNI_FALSE ) + { + fprintf(stderr,"\nGL4Java glcaps native2java ERROR: capsObj is not instanceof gl4java/GLCapabilities !\n"); + fflush(stderr); + return JNI_FALSE; + } + */ + + cls = (*env)->GetObjectClass(env, capsObj); + if(cls==0) + { + fprintf(stderr,"GL4Java ERROR: clazz not accessible\n"); + fflush(stderr); + return JNI_FALSE; + } + + J_GET_INT_FIELD(buffer, "buffer") + J_GET_INT_FIELD(color, "color") + J_GET_INT_FIELD(stereo, "stereo") + J_GET_INT_FIELD(depthBits, "depthBits") + J_GET_INT_FIELD(stencilBits, "stencilBits") + J_GET_INT_FIELD(redBits, "redBits") + J_GET_INT_FIELD(greenBits, "greenBits") + J_GET_INT_FIELD(blueBits, "blueBits") + J_GET_INT_FIELD(alphaBits, "alphaBits") + J_GET_INT_FIELD(accumRedBits, "accumRedBits") + J_GET_INT_FIELD(accumGreenBits, "accumGreenBits") + J_GET_INT_FIELD(accumBlueBits, "accumBlueBits") + J_GET_INT_FIELD(accumAlphaBits, "accumAlphaBits") + J_GET_LONG_FIELD(nativeVisualID, "nativeVisualID") + + if(JNI_TRUE!=ok) + { + fprintf(stderr,"GL4Java ERROR: gl4java/GLCapabilities fields not accessible\n"); + fflush(stderr); + return JNI_FALSE; + } + + J_SET_INT_FIELD_VAL(buffer); + J_SET_INT_FIELD_VAL(color); + J_SET_INT_FIELD_VAL(stereo); + J_SET_INT_FIELD_VAL(depthBits); + J_SET_INT_FIELD_VAL(stencilBits); + J_SET_INT_FIELD_VAL(redBits); + J_SET_INT_FIELD_VAL(greenBits); + J_SET_INT_FIELD_VAL(blueBits); + J_SET_INT_FIELD_VAL(alphaBits); + J_SET_INT_FIELD_VAL(accumRedBits); + J_SET_INT_FIELD_VAL(accumGreenBits); + J_SET_INT_FIELD_VAL(accumBlueBits); + J_SET_INT_FIELD_VAL(accumAlphaBits); + J_GET_LONG_FIELD_VAL(nativeVisualID, "nativeVisualID") + + if(JNI_TRUE!=ok) + { + fprintf(stderr,"GL4Java ERROR: gl4java/GLCapabilities fields not writable\n"); + fflush(stderr); + return JNI_FALSE; + } + + return JNI_TRUE; +} + +void LIBAPIENTRY printGLCapabilities ( GLCapabilities *glCaps ) +{ + fprintf(stdout, "\t doubleBuff: %d, ", (int)glCaps->buffer); + fprintf(stdout, " rgba: %d, ", (int)glCaps->color); + fprintf(stdout, " stereo: %d, ", (int)glCaps->stereo); + fprintf(stdout, " depthSize: %d, ", (int)glCaps->depthBits); + fprintf(stdout, " stencilSize: %d !\n", (int)glCaps->stencilBits); + fprintf(stdout, "\t red: %d, ", (int)glCaps->redBits); + fprintf(stdout, " green: %d, ", (int)glCaps->greenBits); + fprintf(stdout, " blue: %d, ", (int)glCaps->blueBits); + fprintf(stdout, " alpha: %d !\n", (int)glCaps->alphaBits); + fprintf(stdout, "\t red accum: %d, ", (int)glCaps->accumRedBits); + fprintf(stdout, " green accum: %d, ", (int)glCaps->accumGreenBits); + fprintf(stdout, " blue accum: %d, ", (int)glCaps->accumBlueBits); + fprintf(stdout, " alpha accum: %d !\n", (int)glCaps->accumAlphaBits); + fprintf(stdout, "\t nativeVisualID: %ld !\n", (long)glCaps->nativeVisualID); + + fflush(stdout); +} + jboolean LIBAPIENTRY testJavaGLTypes(jboolean verbose) { jboolean ret=JNI_TRUE; diff --git a/CNativeCode/OpenGL_misc.h b/CNativeCode/OpenGL_misc.h index 368e2f7..1438877 100644 --- a/CNativeCode/OpenGL_misc.h +++ b/CNativeCode/OpenGL_misc.h @@ -28,6 +28,60 @@ typedef long PointerHolder; #endif + /* to match the GLCapabilities values .. */ + + #define BUFFER_SINGLE 0 + #define BUFFER_DOUBLE 1 + + #define COLOR_INDEX 0 + #define COLOR_RGBA 1 + + #define STEREO_OFF 0 + #define STEREO_ON 1 + + typedef struct { + jint buffer; + jint color; + jint stereo; + jint depthBits; + jint stencilBits; + + jint redBits; + jint greenBits; + jint blueBits; + jint alphaBits; + jint accumRedBits; + jint accumGreenBits; + jint accumBlueBits; + jint accumAlphaBits; + + jlong nativeVisualID; + } GLCapabilities; + + /** + * gets the capabilities outta java's GLCapabilities object 'capsObj' + * and puts those values to the C-Struct GLCapabilities ! + */ + LIBAPI jboolean LIBAPIENTRY javaGLCapabilities2NativeGLCapabilities + ( JNIEnv *env, + jobject capsObj, + GLCapabilities *glCaps ); + + /** + * gets the capabilities outta the C-Struct GLCapabilities + * and puts those values to java's GLCapabilities object 'capsObj' + */ + LIBAPI jboolean LIBAPIENTRY nativeGLCapabilities2JavaGLCapabilities + ( JNIEnv *env, + jobject capsObj, + GLCapabilities *glCaps ); + + + /** + * prints the contents of the GLCapabilities to stdout ! + */ + LIBAPI void LIBAPIENTRY printGLCapabilities ( GLCapabilities *glCaps ); + /* testJavaGLTypes does important implementation plattformspecific checks: * * o do fit the JNI <-> GL Variables-Type Mapping diff --git a/CNativeCode/jawt_misc.c b/CNativeCode/jawt_misc.c index 4696773..d884406 100644 --- a/CNativeCode/jawt_misc.c +++ b/CNativeCode/jawt_misc.c @@ -338,12 +338,12 @@ jawt_unlock (JNIEnv *env, JAWTDataHolder *pJData, jboolean verbose) } pJData->dsi=0; - // Unlock the drawing surface
- if ( (pJData->lock & JAWT_LOCK_ERROR) == 0 )
+ // Unlock the drawing surface + if ( (pJData->lock & JAWT_LOCK_ERROR) == 0 ) { pJData->ds->Unlock(pJData->ds); exc = (*env)->ExceptionOccurred(env); - if(exc)
+ if(exc) { if(verbose) { @@ -355,11 +355,9 @@ jawt_unlock (JNIEnv *env, JAWTDataHolder *pJData, jboolean verbose) (*env)->ExceptionDescribe(env); (*env)->ExceptionClear(env); return pJData->result; - }
- pJData->lock = 0;
+ } + pJData->lock = 0; } return JNI_TRUE; } - - |