diff options
author | kbr <[email protected]> | 2006-01-10 11:07:30 +0000 |
---|---|---|
committer | kbr <[email protected]> | 2006-01-10 11:07:30 +0000 |
commit | 1a0b7c61155813ac0bf3c6d58b4dac15f0225101 (patch) | |
tree | e3b573ca2193ae8a6aacd5bc5cb3060321308ba7 /make/joal-CustomCCode.c | |
parent | 0badf374064da5c608dcb06ef2d2e9966792ddc8 (diff) |
Merged gluegen-branch-1-0 on to the main JOAL trunk. JOAL is now built
using GlueGen and currently requires a built JOGL workspace as a
sibling workspace of the JOAL workspace.
git-svn-id: file:///home/mbien/NetBeansProjects/JOGAMP/joal-sync/git-svn/../svn-server-sync/joal/trunk@101 03bf7f67-59de-4072-a415-9a990d468a3f
Diffstat (limited to 'make/joal-CustomCCode.c')
-rwxr-xr-x | make/joal-CustomCCode.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/make/joal-CustomCCode.c b/make/joal-CustomCCode.c new file mode 100755 index 0000000..a6d0bb6 --- /dev/null +++ b/make/joal-CustomCCode.c @@ -0,0 +1,40 @@ +#if defined(_MSC_VER) /* Windows */ +#include <windows.h> +static HMODULE oalModule = NULL; +#endif + +/* Java->C glue code: + * Java package: net.java.games.joal.impl.ALImpl + * Java method: long dynamicLookupFunction0(java.lang.String fname) + * C function: ALproc alGetProcAddress(const ALchar * fname); + */ +JNIEXPORT jlong JNICALL +Java_net_java_games_joal_impl_ALImpl_dynamicLookupFunction0__Ljava_lang_String_2(JNIEnv *env, jobject _unused, jstring fname) { + const char* _UTF8fname = NULL; + ALproc _res; + if (fname != NULL) { + if (fname != NULL) { + _UTF8fname = (*env)->GetStringUTFChars(env, fname, (jboolean*)NULL); + if (_UTF8fname == NULL) { + (*env)->ThrowNew(env, (*env)->FindClass(env, "java/lang/OutOfMemoryError"), + "Failed to get UTF-8 chars for argument \"fname\" in native dispatcher for \"alGetProcAddress\""); + return 0; + } + } + } +#if defined(_MSC_VER) /* Windows */ + if (oalModule == NULL) { + oalModule = GetModuleHandle("OpenAL32"); + } + _res = (ALproc) GetProcAddress(oalModule, _UTF8fname); +/* Looks like we can use dlsym on OS X as well as other Unix flavors */ +/* #elif defined(__APPLE__) && defined(__MACH__) */ /* OS X */ +#else /* Assume vanilla Unix */ + _res = (ALproc) dlsym(RTLD_DEFAULT, _UTF8fname); +#endif + + if (fname != NULL) { + (*env)->ReleaseStringUTFChars(env, fname, _UTF8fname); + } + return (jlong) (intptr_t) _res; +} |