aboutsummaryrefslogtreecommitdiffstats
path: root/src/jogl/classes/com/jogamp/opengl
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2019-12-28 04:16:18 +0100
committerSven Gothel <[email protected]>2019-12-28 04:16:18 +0100
commite2223107cc54e08031bd9505ce8a9ccc72673be0 (patch)
tree735fdd776ce7a4ad8db137bfcbc6a62d7c5877c5 /src/jogl/classes/com/jogamp/opengl
parent50f9c9e113b09ab54ba40abba6b2face27c9a139 (diff)
Bug 1347: Resolve Merged EGL/Desktop Profile Mapping
GLProfile.computeProfileImpl(..) as of Bug 1084 is not the culprit here and its hardware criteria filter works. The issue is commit 99a064327bf991318841c858d21d13e55d6b39db of Bug 1203, in particular the change in GLProfile re: "Merge computed EGL-Profile-Map (1) and Desktop-Profile-Map (2) per device, instead of just using the last computation, preserving and favoratizing the Desktop-Profile-Map." Here the Desktop-Profile-Map overwrites the EGL-Profile-Map and hence the software mapping gets used. Indeed, this is a regression cause by the work of Bug 1203. +++ Resolution is to revert the explicit 'union mapping' and rely on an enhanced 'GLContextImpl.remapAvailableGLVersions(fromDevice, toDevice)' function. Here the EGLDrawableFactory _already_ maps the EGL device's GL Versions to the 'host' device (e.g. X11). This has to be refined so that the remap will not overwrite the 'host' device's already detected GL Versions. That alone is enough, so that GLProfile can simply use the 'mappedEGLProfiles' of the 'host' device if detected, which already is a merged mapping of X11 host- and EGL sub-device. In case no 'mappedEGLProfiles' are available, we simply use the 'mappedDesktopProfiles'.
Diffstat (limited to 'src/jogl/classes/com/jogamp/opengl')
-rw-r--r--src/jogl/classes/com/jogamp/opengl/GLContext.java3
-rw-r--r--src/jogl/classes/com/jogamp/opengl/GLProfile.java22
2 files changed, 14 insertions, 11 deletions
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);