From 90ff6c401934121395fa4a127e8b889106fda07a Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Tue, 9 Aug 2011 20:56:27 +0200 Subject: DynamicLibraryBundleInfo: Allow impl. to select tool/system lookup --- .../com/jogamp/common/os/DynamicLibraryBundle.java | 26 ++++++++++++++++------ .../jogamp/common/os/DynamicLibraryBundleInfo.java | 16 ++++++++++++- 2 files changed, 34 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/java/com/jogamp/common/os/DynamicLibraryBundle.java b/src/java/com/jogamp/common/os/DynamicLibraryBundle.java index 7e961cc..8e072fd 100755 --- a/src/java/com/jogamp/common/os/DynamicLibraryBundle.java +++ b/src/java/com/jogamp/common/os/DynamicLibraryBundle.java @@ -306,6 +306,19 @@ public class DynamicLibraryBundle implements DynamicLookupHelper { return addr; } + private long toolDynamicLookupFunction(String funcName) { + if(0 != toolGetProcAddressHandle) { + long addr = info.toolGetProcAddress(toolGetProcAddressHandle, funcName); + if(DEBUG_LOOKUP) { + if(0!=addr) { + System.err.println("Lookup-Tool: <"+funcName+"> 0x"+Long.toHexString(addr)); + } + } + return addr; + } + return 0; + } + public long dynamicLookupFunction(String funcName) { if(!isToolLibLoaded() || null==funcName) { if(DEBUG_LOOKUP && !isToolLibLoaded()) { @@ -319,18 +332,17 @@ public class DynamicLibraryBundle implements DynamicLookupHelper { } long addr = 0; + final boolean useToolGetProcAdressFirst = info.useToolGetProcAdressFirst(funcName); - if(0 != toolGetProcAddressHandle) { - addr = info.toolDynamicLookupFunction(toolGetProcAddressHandle, funcName); - if(DEBUG_LOOKUP) { - if(0!=addr) { - System.err.println("Lookup-Tool: <"+funcName+"> 0x"+Long.toHexString(addr)); - } - } + if(useToolGetProcAdressFirst) { + addr = toolDynamicLookupFunction(funcName); } if(0==addr) { addr = dynamicLookupFunctionOnLibs(funcName); } + if(0==addr && !useToolGetProcAdressFirst) { + addr = toolDynamicLookupFunction(funcName); + } return addr; } diff --git a/src/java/com/jogamp/common/os/DynamicLibraryBundleInfo.java b/src/java/com/jogamp/common/os/DynamicLibraryBundleInfo.java index 61f59b8..081bac8 100644 --- a/src/java/com/jogamp/common/os/DynamicLibraryBundleInfo.java +++ b/src/java/com/jogamp/common/os/DynamicLibraryBundleInfo.java @@ -56,13 +56,27 @@ public interface DynamicLibraryBundleInfo { /** May return the native libraries
GetProcAddressFunc
names, the first found function is being used.
* This could be eg:
 glXGetProcAddressARB, glXGetProcAddressARB 
.
* If your Tool does not has this facility, just return null. + * @see #toolGetProcAddress(long, String) */ public List getToolGetProcAddressFuncNameList() ; + /** May implement the lookup function using the Tools facility.
+ * The actual function pointer is provided to allow proper bootstrapping of the ProcAddressTable, + * using one of the provided function names by {@link #getToolGetProcAddressFuncNameList()}.
+ */ + public long toolGetProcAddress(long toolGetProcAddressHandle, String funcName); + /** May implement the lookup function using the Tools facility.
* The actual function pointer is provided to allow proper bootstrapping of the ProcAddressTable.
*/ - public long toolDynamicLookupFunction(long toolGetProcAddressHandle, String funcName); + + /** + * @param funcName + * @return true if {@link #toolGetProcAddress(long, String)} shall be tried before + * the system loader for the given function lookup. Otherwise false. + * Default is true. + */ + public boolean useToolGetProcAdressFirst(String funcName); /** @return true if the native library symbols shall be made available for symbol resolution of subsequently loaded libraries. */ public boolean shallLinkGlobal(); -- cgit v1.2.3