aboutsummaryrefslogtreecommitdiffstats
path: root/src/native/eaxfactory.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/native/eaxfactory.c')
-rw-r--r--src/native/eaxfactory.c27
1 files changed, 21 insertions, 6 deletions
diff --git a/src/native/eaxfactory.c b/src/native/eaxfactory.c
index d0e3e9d..6ad89ce 100644
--- a/src/native/eaxfactory.c
+++ b/src/native/eaxfactory.c
@@ -37,8 +37,12 @@
#include "eax.h"
#ifdef _WIN32
-EAXSet eaxSet; // EAXSet function, ret$
-EAXGet eaxGet; // EAXGet function, ret$
+#include <windows.h>
+static HMODULE oalModule = NULL;
+static LPALISEXTENSIONPRESENT _ptr_alIsExtensionPresent = NULL;
+static LPALGETPROCADDRESS _ptr_alGetProcAddress = NULL;
+EAXSet eaxSet; // EAXSet function
+EAXGet eaxGet; // EAXGet function
#endif
/*
@@ -48,9 +52,20 @@ EAXGet eaxGet; // EAXGet function, ret$
JNIEXPORT void JNICALL Java_net_java_games_joal_eax_EAXFactory_init
(JNIEnv *env, jclass clazz) {
#ifdef _WIN32
- if(alIsExtensionPresent("EAX2.0")) {
- eaxSet = alGetProcAddress((ALubyte*)"EAXSet");
- eaxGet = alGetProcAddress((ALubyte*)"EAXGet");
- }
+ if (_ptr_alIsExtensionPresent == NULL) {
+ if (oalModule == NULL) {
+ oalModule = GetModuleHandle("OpenAL32");
+ }
+ _ptr_alIsExtensionPresent = (LPALISEXTENSIONPRESENT) GetProcAddress(oalModule, "alIsExtensionPresent");
+ _ptr_alGetProcAddress = (LPALGETPROCADDRESS) GetProcAddress(oalModule, "alGetProcAddress");
+ }
+
+ if (_ptr_alIsExtensionPresent != NULL &&
+ _ptr_alGetProcAddress != NULL) {
+ if ((*_ptr_alIsExtensionPresent)("EAX2.0")) {
+ eaxSet = (*_ptr_alGetProcAddress)((ALubyte*)"EAXSet");
+ eaxGet = (*_ptr_alGetProcAddress)((ALubyte*)"EAXGet");
+ }
+ }
#endif
}