X Tutup
#include "API.h" jclass gOpenCLProxyInterface = NULL; jmethodID gclGetPlatformIDsMethod = NULL; jobject gOpenCLProxyImplementation = NULL; #define PROXIED_CLASS_SIG "com/nativelibs4java/opencl/library/ProxiedOpenCLImplementation" void bindJavaAPI(void *instanceData) { jclass proxyClass = NULL; jmethodID getProxyInstanceMethod = NULL; jmethodID setIcdDispatchTableMethod = NULL; JNIEnv *env = GetEnv(); gOpenCLProxyInterface = GLOBAL_REF((*env)->FindClass(env, PROXY_INTERFACE_SIG)); gclGetPlatformIDsMethod = (*env)->GetMethodID(env, proxyClass, "clGetPlatformIDs", "(ILL)I"); proxyClass = (*env)->FindClass(env, PROXIED_CLASS_SIG); getProxyInstanceMethod = (*env)->GetStaticMethodID(env, proxyClass, "getInstance", "()L" PROXY_INTERFACE_SIG ";"); setIcdDispatchTableMethod = (*env)->GetStaticMethodID(env, proxyClass, "setIcdDispatchTable", "(L)V" PROXIED_CLASS_SIG ";"); (*env)->CallStaticVoidMethod(env, proxyClass, setIcdDispatchTableMethod, (jlong)(size_t)instanceData); gOpenCLProxyImplementation = GLOBAL_REF((*env)->CallStaticObjectMethod(env, proxyClass, getProxyInstanceMethod)); } void unbindJavaAPI() { JNIEnv *env = GetEnv(); DEL_GLOBAL_REF(gOpenCLProxyImplementation); DEL_GLOBAL_REF(gOpenCLProxyInterface); }
X Tutup