aboutsummaryrefslogtreecommitdiffstats
path: root/src/jogl/classes/jogamp
diff options
context:
space:
mode:
Diffstat (limited to 'src/jogl/classes/jogamp')
-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
3 files changed, 43 insertions, 8 deletions
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 ) {