diff options
Diffstat (limited to 'src/jogl/classes/jogamp')
-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 |
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 ) { |