diff options
-rw-r--r-- | make/scripts/tests.sh | 6 | ||||
-rw-r--r-- | src/jogl/classes/com/jogamp/opengl/GLContext.java | 3 | ||||
-rw-r--r-- | src/jogl/classes/com/jogamp/opengl/GLProfile.java | 22 | ||||
-rw-r--r-- | src/jogl/classes/jogamp/opengl/GLContextImpl.java | 39 | ||||
-rw-r--r-- | src/jogl/classes/jogamp/opengl/egl/EGLContext.java | 8 | ||||
-rw-r--r-- | src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java | 4 |
6 files changed, 60 insertions, 22 deletions
diff --git a/make/scripts/tests.sh b/make/scripts/tests.sh index 3f82e43b1..52527f6ab 100644 --- a/make/scripts/tests.sh +++ b/make/scripts/tests.sh @@ -110,7 +110,7 @@ function jrun() { #X_ARGS="-Dsun.awt.disableMixing=true" #X_ARGS="--illegal-access=warn" - #D_ARGS="-Djogl.debug.GLProfile -Djogl.debug.GLContext" + D_ARGS="-Djogl.debug.GLProfile -Djogl.debug.GLContext" #D_ARGS="-Djogl.debug.GLProfile" #D_ARGS="-Djogl.debug.DebugGL" #D_ARGS="-Djogl.debug.TraceGL" @@ -461,7 +461,7 @@ function testawtswt() { #testnoawt com.jogamp.newt.NewtVersion $* #testnoawt com.jogamp.oculusvr.OVRVersion $* -#testnoawt com.jogamp.newt.opengl.GLWindow $* +testnoawt com.jogamp.newt.opengl.GLWindow $* #testnoawt com.jogamp.opengl.test.junit.jogl.acore.TestGLVersionParsing00NEWT $* #testnoawt com.jogamp.opengl.test.junit.jogl.acore.TestMainVersionGLWindowNEWT $* #testawt com.jogamp.opengl.test.junit.jogl.acore.TestMainVersionGLCanvasAWT $* @@ -482,7 +482,7 @@ function testawtswt() { # # HiDPI # -testnoawt com.jogamp.opengl.test.junit.jogl.demos.es2.newt.TestGearsES2NEWT $* +#testnoawt com.jogamp.opengl.test.junit.jogl.demos.es2.newt.TestGearsES2NEWT $* #testnoawt com.jogamp.opengl.test.junit.jogl.demos.es2.newt.TestGearsES2SimpleNEWT $* #testawt com.jogamp.opengl.test.junit.jogl.demos.es2.awt.TestGearsES2GLJPanelAWT $* #testawt com.jogamp.opengl.test.junit.jogl.demos.es2.awt.TestGearsES2AWT $* diff --git a/src/jogl/classes/com/jogamp/opengl/GLContext.java b/src/jogl/classes/com/jogamp/opengl/GLContext.java index 88fed4450..4455633a1 100644 --- a/src/jogl/classes/com/jogamp/opengl/GLContext.java +++ b/src/jogl/classes/com/jogamp/opengl/GLContext.java @@ -1647,6 +1647,9 @@ public abstract class GLContext { ctp[0] = ( bits32 & 0x0000FFFF ) ; return new VersionNumber(major, minor, 0); } + protected static int getCTPFromBits(final int bits32) { + return ( bits32 & 0x0000FFFF ); + } protected static void validateProfileBits(final int bits, final String argName) { int num = 0; diff --git a/src/jogl/classes/com/jogamp/opengl/GLProfile.java b/src/jogl/classes/com/jogamp/opengl/GLProfile.java index c52e3136e..8612fc73f 100644 --- a/src/jogl/classes/com/jogamp/opengl/GLProfile.java +++ b/src/jogl/classes/com/jogamp/opengl/GLProfile.java @@ -1982,8 +1982,16 @@ public class GLProfile { } } - if( !addedDesktopProfile && !addedMobileProfile ) { - setProfileMap(device, new HashMap<String /*GLProfile_name*/, GLProfile>()); // empty + final HashMap<String, GLProfile> mappedAllProfiles; + if( addedMobileProfile ) { + // If run on actual desktop device, e.g. '.x11_:0_0', + // GLContextImpl.remapAvailableGLVersion('.egl_:0_0' -> '.x11_:0_0') + // ensures EGL profiles being mapped to upstream desktop device '.x11_:0_0'. + mappedAllProfiles = mappedEGLProfiles; + } else if( addedDesktopProfile ) { + mappedAllProfiles = mappedDesktopProfiles; + } else { + mappedAllProfiles = new HashMap<String /*GLProfile_name*/, GLProfile>(); // empty if(DEBUG) { System.err.println("GLProfile: device could not be initialized: "+device); System.err.println("GLProfile: compatible w/ desktop: "+deviceIsDesktopCompatible+ @@ -1993,16 +2001,8 @@ public class GLProfile { System.err.println("GLProfile: hasGLES1Impl "+hasGLES1Impl); System.err.println("GLProfile: hasGLES3Impl "+hasGLES3Impl); } - } else { - final HashMap<String, GLProfile> mappedAllProfiles = new HashMap<String, GLProfile>(); - if( addedMobileProfile ) { - mappedAllProfiles.putAll(mappedEGLProfiles); - } - if( addedDesktopProfile ) { - mappedAllProfiles.putAll(mappedDesktopProfiles); - } - setProfileMap(device, mappedAllProfiles); // union } + setProfileMap(device, mappedAllProfiles); // merged mappedEGLProfiles if available, otherwise mappedDesktopProfiles GLContext.setAvailableGLVersionsSet(device, true); diff --git a/src/jogl/classes/jogamp/opengl/GLContextImpl.java b/src/jogl/classes/jogamp/opengl/GLContextImpl.java index 60a351fc2..11b155760 100644 --- a/src/jogl/classes/jogamp/opengl/GLContextImpl.java +++ b/src/jogl/classes/jogamp/opengl/GLContextImpl.java @@ -63,6 +63,7 @@ import com.jogamp.gluegen.runtime.opengl.GLNameResolver; import com.jogamp.gluegen.runtime.opengl.GLProcAddressResolver; import com.jogamp.opengl.GLExtensions; import com.jogamp.opengl.GLRendererQuirks; + import com.jogamp.nativewindow.AbstractGraphicsConfiguration; import com.jogamp.nativewindow.AbstractGraphicsDevice; import com.jogamp.nativewindow.NativeSurface; @@ -1098,13 +1099,24 @@ public abstract class GLContextImpl extends GLContext { } - protected static void remapAvailableGLVersions(final AbstractGraphicsDevice fromDevice, final AbstractGraphicsDevice toDevice) { + /** + * Remaps all available GL Version from {@code fromDevice} to {@code toDevice}. + * + * @param fromDevice the required matching device key to be mapped + * @param toDevice mapped GL version target + * @param overwrite if {@code true} overwrites previous mapping, otherwise leaves it untouched + * @param ctpCriteria the given GL Version context profile required to map a {@code fromDevice} GL Version. + * To map all GL Versions, just pass {@link GLContext#CTX_PROFILE_ES} | {@link GLContext#CTX_PROFILE_CORE} | {@link GLContext#CTX_PROFILE_COMPAT} + */ + protected static void remapAvailableGLVersions(final AbstractGraphicsDevice fromDevice, final AbstractGraphicsDevice toDevice, + final boolean overwrite, final int ctpCriteria) { if( fromDevice == toDevice || fromDevice.getUniqueID() == toDevice.getUniqueID() ) { return; // NOP } synchronized(deviceVersionAvailable) { if(DEBUG) { - System.err.println(getThreadName() + ": createContextARB-MapGLVersions REMAP "+fromDevice+" -> "+toDevice); + System.err.println(getThreadName() + ": createContextARB-MapGLVersions REMAP "+fromDevice+" -> "+toDevice+ + ", overwrite "+overwrite+", ctpCriteria "+getGLProfile(new StringBuilder(), ctpCriteria).toString()); } final IdentityHashMap<String, Integer> newDeviceVersionAvailable = new IdentityHashMap<String, Integer>(); final Set<String> keys = deviceVersionAvailable.keySet(); @@ -1115,7 +1127,7 @@ public abstract class GLContextImpl extends GLContext { if(DEBUG) { final int[] ctp = { 0 }; final VersionNumber version = decomposeBits(valI.intValue(), ctp); - System.err.println(" MapGLVersions REMAP OLD "+origKey+" -> "+GLContext.getGLVersion(new StringBuilder(), version, ctp[0], null).toString()); + System.err.println(" MapGLVersions REMAP VAL0 "+origKey+" == "+GLContext.getGLVersion(new StringBuilder(), version, ctp[0], null).toString()); } newDeviceVersionAvailable.put(origKey, valI); final int devSepIdx = origKey.lastIndexOf('-'); @@ -1124,12 +1136,29 @@ public abstract class GLContextImpl extends GLContext { } final String devUniqueID = origKey.substring(0, devSepIdx); if( fromDevice.getUniqueID().equals(devUniqueID) ) { + // key/val pair from 'fromDevice' to be mapped to 'toDevice' final String profileReq = origKey.substring(devSepIdx); final String newKey = (toDevice.getUniqueID()+profileReq).intern(); + final Integer preI = deviceVersionAvailable.get(newKey); + final int valCTP = getCTPFromBits(valI.intValue()); + final boolean write = ( overwrite || null == preI ) && 0 != ( ctpCriteria & valCTP ); + if( write ) { + newDeviceVersionAvailable.put(newKey, valI); + } if(DEBUG) { - System.err.println(" MapGLVersions REMAP NEW "+newKey+" -> (ditto)"); + if( write ) { + System.err.println(" MapGLVersions REMAP NEW0 "+newKey+" -> (ditto)"); + } else { + System.err.println(" MapGLVersions REMAP NEW0 "+newKey+" (unchanged)"); + } + if( null != preI ) { + final int[] ctp = { 0 }; + final VersionNumber version = decomposeBits(preI.intValue(), ctp); + System.err.println(" MapGLVersions REMAP OLD1 "+newKey+" :: "+GLContext.getGLVersion(new StringBuilder(), version, ctp[0], null).toString()); + } else { + System.err.println(" MapGLVersions REMAP OLD1 "+newKey+" :: (nil)"); + } } - newDeviceVersionAvailable.put(newKey, valI); } } } diff --git a/src/jogl/classes/jogamp/opengl/egl/EGLContext.java b/src/jogl/classes/jogamp/opengl/egl/EGLContext.java index 28448d537..5b7c7da2c 100644 --- a/src/jogl/classes/jogamp/opengl/egl/EGLContext.java +++ b/src/jogl/classes/jogamp/opengl/egl/EGLContext.java @@ -480,8 +480,12 @@ public class EGLContext extends GLContextImpl { return GLContext.getGLProfile(sb, ctp); } /* pp */ int getContextOptions() { return ctxOptions; } - protected static void remapAvailableGLVersions(final AbstractGraphicsDevice fromDevice, final AbstractGraphicsDevice toDevice) { - GLContextImpl.remapAvailableGLVersions(fromDevice, toDevice); + /** + * Delegates to {@link GLContextImpl#remapAvailableGLVersions(AbstractGraphicsDevice, AbstractGraphicsDevice, boolean, int)} + */ + protected static void remapAvailableGLVersions(final AbstractGraphicsDevice fromDevice, final AbstractGraphicsDevice toDevice, + final boolean overwrite, final int ctpCriteria) { + GLContextImpl.remapAvailableGLVersions(fromDevice, toDevice, overwrite, ctpCriteria); } protected static synchronized void setMappedGLVersionListener(final MappedGLVersionListener mvl) { GLContextImpl.setMappedGLVersionListener(mvl); diff --git a/src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java b/src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java index 026776769..b0c5d1928 100644 --- a/src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java +++ b/src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java @@ -659,7 +659,9 @@ public class EGLDrawableFactory extends GLDrawableFactoryImpl { } if( mappedToDefaultDevice[0] ) { - EGLContext.remapAvailableGLVersions(defaultDevice, adevice); + // map all GL versions (ES, CORE or COMPAT) to 'adevice' if not existing (no overwrite) + EGLContext.remapAvailableGLVersions(defaultDevice, adevice, false /* overwrite */, + EGLContext.CTX_PROFILE_ES | EGLContext.CTX_PROFILE_CORE | EGLContext.CTX_PROFILE_COMPAT ); sr = defaultSharedResource; } else { if( hasX11 ) { |