diff options
Diffstat (limited to 'src/jogl/classes/com/jogamp/opengl/impl/GLDynamicLookupHelper.java')
-rwxr-xr-x | src/jogl/classes/com/jogamp/opengl/impl/GLDynamicLookupHelper.java | 151 |
1 files changed, 8 insertions, 143 deletions
diff --git a/src/jogl/classes/com/jogamp/opengl/impl/GLDynamicLookupHelper.java b/src/jogl/classes/com/jogamp/opengl/impl/GLDynamicLookupHelper.java index ce0649997..89dbb4a78 100755 --- a/src/jogl/classes/com/jogamp/opengl/impl/GLDynamicLookupHelper.java +++ b/src/jogl/classes/com/jogamp/opengl/impl/GLDynamicLookupHelper.java @@ -27,158 +27,23 @@ package com.jogamp.opengl.impl; +import com.jogamp.common.os.DynamicLibraryBundle; +import com.jogamp.common.os.DynamicLibraryBundleInfo; import com.jogamp.common.os.DynamicLookupHelper; import com.jogamp.common.os.NativeLibrary; import java.util.*; import java.security.*; import javax.media.opengl.GLException; -/** - * Abstract implementation of the DynamicLookupHelper for GL, - * which decouples it's dependencies to EGLDrawableFactory. - * - * Currently two implementations exist, one for ES1 and one for ES2. - */ -public abstract class GLDynamicLookupHelper implements DynamicLookupHelper { - protected static final boolean DEBUG = com.jogamp.opengl.impl.Debug.debug("GL"); - protected static final boolean DEBUG_LOOKUP; - - static { - AccessControlContext localACC=AccessController.getContext(); - DEBUG_LOOKUP = com.jogamp.opengl.impl.Debug.isPropertyDefined("jogl.debug.DynamicLookup", true, localACC); - } - - protected List/*<NativeLibrary>*/ glLibraries; - private long glxGetProcAddressHandle; - private String glxGetProcAddressFuncName; - - protected GLDynamicLookupHelper() { - glLibraries = new ArrayList(); - loadGLLibrary(); - glxGetProcAddressFuncName = getGLXGetProcAddressFuncName(); - glxGetProcAddressHandle = getGLXGetProcAddressHandle(); - } - - /** Must return at least one OpenGL library name, eg GL, OpenGL32, .. */ - protected abstract List/*<String>*/ getGLLibNames(); +public class GLDynamicLookupHelper extends DynamicLibraryBundle { - /** May return OpenGL Platform library name(s), eg EGL, GLX, .. */ - protected abstract List/*<String>*/ getGLXLibNames(); - - protected boolean shallGLLibLoadedGlobal() { return false; } - - protected boolean shallGLXLibLoadedGlobal() { return false; } - - /** Shall return the OpenGL Platform function name to lookup function pointer, eg eglGetProcAddress */ - protected abstract String getGLXGetProcAddressFuncName() ; - - protected abstract long dynamicLookupFunctionOnGLX(long glxGetProcAddressHandle, String glFuncName); - - /** Shall load the JNI binding */ - protected abstract void loadGLJNILibrary(); - - /** May load the native GLU library, default: None **/ - public void loadGLULibrary() { } - - protected long getGLXGetProcAddressHandle() { - long aptr = dynamicLookupFunctionOnLibs(glxGetProcAddressFuncName); - if(0==aptr) { - GLException e = new GLException("Couldn't find "+glxGetProcAddressFuncName+" function entry"); - if(DEBUG) { - e.printStackTrace(); - } - throw e; - } - return aptr; + public GLDynamicLookupHelper(GLDynamicLibraryBundleInfo info) { + super(info); } - protected NativeLibrary loadFirstAvailable(List/*<String>*/ libNames, ClassLoader loader, boolean global) { - for (Iterator iter = libNames.iterator(); iter.hasNext(); ) { - NativeLibrary lib = NativeLibrary.open((String) iter.next(), loader, global); - if (lib != null) { - return lib; - } - } - return null; - } + public GLDynamicLibraryBundleInfo getGLBundleInfo() { return (GLDynamicLibraryBundleInfo) getBundleInfo(); } - private boolean loadGLXLibrary(ClassLoader loader, List/*<String>*/ osLibNames) { - if(null!=osLibNames && osLibNames.size()>0) { - NativeLibrary lib = loadFirstAvailable(osLibNames, loader, shallGLXLibLoadedGlobal()); - if ( null != lib ) { - glLibraries.add(lib); - } - return null!=lib; - } - return true; // none is ok - } - - private void loadGLLibrary() { - List/*<String>*/ glLibNames = getGLLibNames(); - List/*<String>*/ osLibNames = getGLXLibNames(); - - ClassLoader loader = getClass().getClassLoader(); - NativeLibrary lib = null; - - // GL libraries .. - lib = loadFirstAvailable(glLibNames, loader, shallGLLibLoadedGlobal()); - if ( null == lib ) { - throw new GLException("Unable to dynamically load OpenGL library: "+getClass().getName()); - } - glLibraries.add(lib); - - // GL Platform libraries .. - if ( !loadGLXLibrary(loader, osLibNames) ) { - throw new GLException("Unable to dynamically load GL Platform library: " + getClass().getName()); - } - - loadGLJNILibrary(); - } - - private long dynamicLookupFunctionOnLibs(String glFuncName) { - String funcName=glFuncName; - long addr = dynamicLookupFunctionOnLibsImpl(funcName); - if(DEBUG_LOOKUP) { - if(0!=addr) { - System.err.println("Lookup-Native: "+glFuncName+" / "+funcName+" 0x"+Long.toHexString(addr)); - } else { - System.err.println("Lookup-Native: "+glFuncName+" / "+funcName+" ** FAILED ** "); - } - } - return addr; - } - - private long dynamicLookupFunctionOnLibsImpl(String glFuncName) { - // Look up this function name in all known libraries - for (Iterator iter = glLibraries.iterator(); iter.hasNext(); ) { - NativeLibrary lib = (NativeLibrary) iter.next(); - long addr = lib.dynamicLookupFunction(glFuncName); - if (addr != 0) { - return addr; - } - } - return 0; - } - - public long dynamicLookupFunction(String glFuncName) { - if(null==glFuncName) { - return 0; - } - - if(glFuncName.equals(glxGetProcAddressFuncName)) { - return glxGetProcAddressHandle; - } - - long addr = dynamicLookupFunctionOnGLX(glxGetProcAddressHandle, glFuncName); - if(DEBUG_LOOKUP) { - if(0!=addr) { - System.err.println("Lookup: <"+glFuncName+"> 0x"+Long.toHexString(addr)); - } - } - if(0==addr) { - addr = dynamicLookupFunctionOnLibs(glFuncName); - } - return addr; - } + /** NOP per default */ + public boolean loadGLULibrary() { return false; } } |