/* * Class: jogamp_opengl_GLDebugMessageHandler * Method: unregister0 * Signature: (JJ)V */ JNIEXPORT void JNICALL Java_jogamp_opengl_GLDebugMessageHandler_unregister0 (JNIEnv *env, jobject obj, jlong procAddress, jlong jhandle) { DebugHandlerType * handle = (DebugHandlerType*) (intptr_t) jhandle; DBG_PRINT("GLDebugMessageHandler.unregister0: jobject %p, extType %d\n", (void*)handle->obj, handle->extType); if(JNI_FALSE == (*env)->IsSameObject(env, obj, handle->obj)) { JoglCommon_throwNewRuntimeException(env, "wrong handle (obj doesn't match)"); } if(jogamp_opengl_GLDebugMessageHandler_EXT_KHR == handle->extType || jogamp_opengl_GLDebugMessageHandler_EXT_ARB == handle->extType) { _local_PFNGLDEBUGMESSAGECALLBACKARBPROC ptr_glDebugMessageCallbackARB; ptr_glDebugMessageCallbackARB = (_local_PFNGLDEBUGMESSAGECALLBACKARBPROC) (intptr_t) procAddress; ptr_glDebugMessageCallbackARB((_local_GLDEBUGPROCARB)NULL, NULL); } else if(jogamp_opengl_GLDebugMessageHandler_EXT_AMD == handle->extType) { _local_PFNGLDEBUGMESSAGECALLBACKAMDPROC ptr_glDebugMessageCallbackAMD; ptr_glDebugMessageCallbackAMD = (_local_PFNGLDEBUGMESSAGECALLBACKAMDPROC) (intptr_t) procAddress; ptr_glDebugMessageCallbackAMD((_local_GLDEBUGPROCAMD)NULL, NULL); } else { JoglCommon_throwNewRuntimeException(env, "unsupported extension type %d", handle->extType); } (*env)->DeleteGlobalRef(env, handle->obj); free(handle); }
/* * Class: jogamp_opengl_GLDebugMessageHandler * Method: register0 * Signature: (JI)J */ JNIEXPORT jlong JNICALL Java_jogamp_opengl_GLDebugMessageHandler_register0 (JNIEnv *env, jobject obj, jlong procAddress, jint extType) { JavaVM *vm; DebugHandlerType * handle = malloc(sizeof(DebugHandlerType)); if(0 != (*env)->GetJavaVM(env, &vm)) { vm = NULL; JoglCommon_throwNewRuntimeException(env, "GetJavaVM failed"); } handle->vm = vm; handle->version = (*env)->GetVersion(env); handle->obj = (*env)->NewGlobalRef(env, obj); handle->extType = extType; DBG_PRINT("GLDebugMessageHandler.register0: vm %p, version 0x%X, jobject %p, extType %d\n", handle->vm, handle->version, (void*)handle->obj, handle->extType); if(jogamp_opengl_GLDebugMessageHandler_EXT_ARB == extType) { _local_PFNGLDEBUGMESSAGECALLBACKARBPROC ptr_glDebugMessageCallbackARB; ptr_glDebugMessageCallbackARB = (_local_PFNGLDEBUGMESSAGECALLBACKARBPROC) (intptr_t) procAddress; ptr_glDebugMessageCallbackARB((_local_GLDEBUGPROCARB)GLDebugMessageARBCallback, handle); } else if(jogamp_opengl_GLDebugMessageHandler_EXT_AMD == extType) { _local_PFNGLDEBUGMESSAGECALLBACKAMDPROC ptr_glDebugMessageCallbackAMD; ptr_glDebugMessageCallbackAMD = (_local_PFNGLDEBUGMESSAGECALLBACKAMDPROC) (intptr_t) procAddress; ptr_glDebugMessageCallbackAMD((_local_GLDEBUGPROCAMD)GLDebugMessageAMDCallback, handle); } else { JoglCommon_throwNewRuntimeException(env, "unsupported extension type %d", extType); } return (jlong) (intptr_t) handle; }