after some discussion in java-dev Apple's list
I took a look at glGetDoublev implementation:
1 2 3 4 5 6 7 8 9 10 11
| JNIEXPORT void JNICALL Java_net_java_games_jogl_impl_macosx_MacOSXGLImpl_glGetDoublev(JNIEnv *env, jobject _unused, jint pname, jdoubleArray params) { GLdouble * _ptr1 = NULL; if (params != NULL) { _ptr1 = (GLdouble *) (*env)->GetPrimitiveArrayCritical(env, params, NULL); } glGetDoublev((GLenum) pname, (GLdouble *) _ptr1); if (params != NULL) { (*env)->ReleasePrimitiveArrayCritical(env, params, _ptr1, JNI_ABORT); } } |
I can see at least 2 possible problem there:
1. GetPrimitiveArrayCritical could return NULL, so using that _ptr1 isn't recommended
2. GetPrimitiveArrayCritical could use copy, so JNI_ABORT isn't appropriate in ReleasePrimitiveArrayCritical
and just comment (GLdouble *) casting in glGetDoublev
isn't necessary, because _ptr1 was declared as GLdouble*
so I'd recommend the following code instead
1 2 3 4 5 6 7 8 9 10
| JNIEXPORT void JNICALL Java_net_java_games_jogl_impl_macosx_MacOSXGLImpl_glGetDoublev(JNIEnv *env, jobject _unused, jint pname, jdoubleArray params) { GLdouble * _ptr1 = NULL; jboolean isCopiedArray = JNI_FALSE; if (params == NULL) return; _ptr1 = (GLdouble *) (*env)->GetPrimitiveArrayCritical(env, params,& isCopiedArray); if(_ptr1 == NULL) return; glGetDoublev((GLenum) pname, _ptr1); (*env)->ReleasePrimitiveArrayCritical(env, params, _ptr1,(isCopiedArray == JNI_TRUE)?0:JNI_ABORT); } |