summaryrefslogtreecommitdiffstats
path: root/src/java/net
diff options
context:
space:
mode:
Diffstat (limited to 'src/java/net')
-rwxr-xr-xsrc/java/net/java/games/joal/NativeLibLoader.java14
-rwxr-xr-xsrc/java/net/java/games/joal/impl/ALProcAddressLookup.java30
2 files changed, 26 insertions, 18 deletions
diff --git a/src/java/net/java/games/joal/NativeLibLoader.java b/src/java/net/java/games/joal/NativeLibLoader.java
index 011b1dd..5aace19 100755
--- a/src/java/net/java/games/joal/NativeLibLoader.java
+++ b/src/java/net/java/games/joal/NativeLibLoader.java
@@ -44,20 +44,6 @@ class NativeLibLoader {
static {
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
-
- boolean useGlueGen =
- (System.getProperty("joal.use.gluegen") != null);
-
- if (useGlueGen) {
- // Workaround for problems when OpenAL is not installed;
- // want to be able to download the OpenAL shared library
- // over e.g. Java Web Start and still link against it, so we
- // have to use an alternate loading mechanism to work around
- // the JDK's usage of RTLD_LOCAL on Unix platforms
- NativeLibrary lib = NativeLibrary.open("OpenAL32", "openal", "openal",
- NativeLibLoader.class.getClassLoader());
- }
-
// Workaround for problem in OpenAL32.dll, which is actually
// the "wrapper" DLL which looks for real OpenAL
// implementations like nvopenal.dll and "*oal.dll".
diff --git a/src/java/net/java/games/joal/impl/ALProcAddressLookup.java b/src/java/net/java/games/joal/impl/ALProcAddressLookup.java
index 5291587..687e03b 100755
--- a/src/java/net/java/games/joal/impl/ALProcAddressLookup.java
+++ b/src/java/net/java/games/joal/impl/ALProcAddressLookup.java
@@ -43,6 +43,30 @@ public class ALProcAddressLookup {
private static volatile boolean alTableInitialized = false;
private static final ALCProcAddressTable alcTable = new ALCProcAddressTable();
private static volatile boolean alcTableInitialized = false;
+ private static final DynamicLookup lookup = new DynamicLookup();
+ private static volatile NativeLibrary openAL = null;
+
+ static class DynamicLookup implements DynamicLookupHelper {
+ public long dynamicLookupFunction(String functionName) {
+ // At some point this may require an OpenAL context to be
+ // current as we will actually use alGetProcAddress. Since
+ // this routine is currently broken and there are no
+ // per-context function pointers anyway we could actually do
+ // this work anywhere.
+ if (openAL == null) {
+ // We choose not to search the system path first because we
+ // bundle a very recent version of OpenAL which we would like
+ // to override existing installations
+ openAL = NativeLibrary.open("OpenAL32", "openal", "openal",
+ false,
+ ALProcAddressLookup.class.getClassLoader());
+ if (openAL == null) {
+ throw new RuntimeException("Unable to find and load OpenAL library");
+ }
+ }
+ return openAL.lookupFunction(functionName);
+ }
+ }
public static void resetALProcAddressTable() {
if (!alTableInitialized) {
@@ -55,8 +79,7 @@ public class ALProcAddressLookup {
// this work anywhere. We should also in theory have
// per-ALcontext ALProcAddressTables and per-ALCdevice
// ALCProcAddressTables.
- ALImpl impl = (ALImpl) ALFactory.getAL();
- ProcAddressHelper.resetProcAddressTable(alTable, impl);
+ ProcAddressHelper.resetProcAddressTable(alTable, lookup);
alTableInitialized = true;
}
}
@@ -74,8 +97,7 @@ public class ALProcAddressLookup {
// this work anywhere. We should also in theory have
// per-ALcontext ALProcAddressTables and per-ALCdevice
// ALCProcAddressTables.
- ALImpl impl = (ALImpl) ALFactory.getAL();
- ProcAddressHelper.resetProcAddressTable(alcTable, impl);
+ ProcAddressHelper.resetProcAddressTable(alcTable, lookup);
alcTableInitialized = true;
}
}