summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--make/scripts/tests.sh6
-rw-r--r--src/jogl/classes/com/jogamp/opengl/GLContext.java3
-rw-r--r--src/jogl/classes/com/jogamp/opengl/GLProfile.java22
-rw-r--r--src/jogl/classes/jogamp/opengl/GLContextImpl.java39
-rw-r--r--src/jogl/classes/jogamp/opengl/egl/EGLContext.java8
-rw-r--r--src/jogl/classes/jogamp/opengl/egl/EGLDrawableFactory.java4
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 ) {