aboutsummaryrefslogtreecommitdiffstats
path: root/src/jogl/classes/com/jogamp/opengl/impl/GLDynamicLookupHelper.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/jogl/classes/com/jogamp/opengl/impl/GLDynamicLookupHelper.java')
-rwxr-xr-xsrc/jogl/classes/com/jogamp/opengl/impl/GLDynamicLookupHelper.java151
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; }
}