diff options
author | Sven Gothel <[email protected]> | 2010-10-29 06:30:45 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2010-10-29 06:30:45 +0200 |
commit | a0c7b5ca791f659d9c98654b47246092aad42665 (patch) | |
tree | 7dbc6d920657558143008a888854e70f14bec8fb /src/jogl | |
parent | ce24d32178106baa16e84f016192441ce45845a7 (diff) |
JOGL: HashMap ProcAddressTable for all GL profiles incl GLX/WGL/CGL/EGL
Reduce (performance/footprint) overhead of ProcAddressTable recreation,
instead use a hashmap (major, minor, profile) -> ProcAddressTable.
Remove GL2ES12 implementation profile, redundant.
Diffstat (limited to 'src/jogl')
9 files changed, 165 insertions, 85 deletions
diff --git a/src/jogl/classes/com/jogamp/opengl/impl/DesktopGLDynamicLibraryBundleInfo.java b/src/jogl/classes/com/jogamp/opengl/impl/DesktopGLDynamicLibraryBundleInfo.java index a33f395a5..5cacf5087 100644 --- a/src/jogl/classes/com/jogamp/opengl/impl/DesktopGLDynamicLibraryBundleInfo.java +++ b/src/jogl/classes/com/jogamp/opengl/impl/DesktopGLDynamicLibraryBundleInfo.java @@ -28,12 +28,10 @@ package com.jogamp.opengl.impl; -import com.jogamp.common.os.DynamicLibraryBundleInfo; import java.util.List; import java.util.ArrayList; public abstract class DesktopGLDynamicLibraryBundleInfo extends GLDynamicLibraryBundleInfo { - private static int posGlueLibGL2ES12; private static int posGlueLibGLDESKTOP; private static List/*<String>*/ glueLibNames; static { @@ -41,17 +39,10 @@ public abstract class DesktopGLDynamicLibraryBundleInfo extends GLDynamicLibrary glueLibNames.addAll(getGlueLibNamesPreload()); - posGlueLibGL2ES12 = glueLibNames.size(); - glueLibNames.add("jogl_gl2es12"); - posGlueLibGLDESKTOP = glueLibNames.size(); glueLibNames.add("jogl_desktop"); } - public static final int getGlueLibPosGL2ES12() { - return posGlueLibGL2ES12; - } - public static final int getGlueLibPosGLDESKTOP() { return posGlueLibGLDESKTOP; } diff --git a/src/jogl/classes/com/jogamp/opengl/impl/DesktopGLDynamicLookupHelper.java b/src/jogl/classes/com/jogamp/opengl/impl/DesktopGLDynamicLookupHelper.java index 511e0518d..08821910f 100644 --- a/src/jogl/classes/com/jogamp/opengl/impl/DesktopGLDynamicLookupHelper.java +++ b/src/jogl/classes/com/jogamp/opengl/impl/DesktopGLDynamicLookupHelper.java @@ -48,10 +48,6 @@ public class DesktopGLDynamicLookupHelper extends GLDynamicLookupHelper { return isToolLibLoaded() && isGlueLibLoaded(DesktopGLDynamicLibraryBundleInfo.getGlueLibPosGLDESKTOP()); } - public boolean hasGLES12Binding() { - return isToolLibLoaded() && isGlueLibLoaded(DesktopGLDynamicLibraryBundleInfo.getGlueLibPosGL2ES12()); - } - public synchronized boolean loadGLULibrary() { /** hacky code .. where all platform GLU libs are tried ..*/ if(null==gluLib) { diff --git a/src/jogl/classes/com/jogamp/opengl/impl/GLContextImpl.java b/src/jogl/classes/com/jogamp/opengl/impl/GLContextImpl.java index 3d4c601fe..5f4a9879b 100644 --- a/src/jogl/classes/com/jogamp/opengl/impl/GLContextImpl.java +++ b/src/jogl/classes/com/jogamp/opengl/impl/GLContextImpl.java @@ -474,7 +474,10 @@ public abstract class GLContextImpl extends GLContext { boolean compat = glp.isGL2(); // incl GL3bc and GL4bc int key = compose8bit(reqMajor, compat?CTX_PROFILE_COMPAT:CTX_PROFILE_CORE, 0, 0); - int val = mappedVersionsAvailable.get( key ); + int val; + synchronized(mappedVersionsAvailableLock) { + val = mappedVersionsAvailable.get( key ); + } long _ctx = 0; if(val>0) { int _major = getComposed8bit(val, 1); @@ -489,23 +492,23 @@ public abstract class GLContextImpl extends GLContext { return _ctx; } - private void mapGLVersions() { - if (!mappedVersionsAvailableSet) { - synchronized (mappedVersionsAvailableLock) { - if (!mappedVersionsAvailableSet) { - createContextARBMapVersionsAvailable(4, false /* core */); // GL4 - createContextARBMapVersionsAvailable(4, true /* compat */); // GL4bc - createContextARBMapVersionsAvailable(3, false /* core */); // GL3 - createContextARBMapVersionsAvailable(3, true /* compat */); // GL3bc - createContextARBMapVersionsAvailable(2, true /* compat */); // GL2 - mappedVersionsAvailableSet = true; - if (DEBUG) { - System.err.println(getThreadName() + ": !!! createContextARB: SET mappedVersionsAvailableSet " + mappedVersionsAvailableSet); - } + private void mapGLVersions() { + if (!mappedVersionsAvailableSet) { + synchronized (mappedVersionsAvailableLock) { + if (!mappedVersionsAvailableSet) { + createContextARBMapVersionsAvailable(4, false /* core */); // GL4 + createContextARBMapVersionsAvailable(4, true /* compat */); // GL4bc + createContextARBMapVersionsAvailable(3, false /* core */); // GL3 + createContextARBMapVersionsAvailable(3, true /* compat */); // GL3bc + createContextARBMapVersionsAvailable(2, true /* compat */); // GL2 + mappedVersionsAvailableSet = true; + if (DEBUG) { + System.err.println(getThreadName() + ": !!! createContextARB: SET mappedVersionsAvailableSet " + mappedVersionsAvailableSet); } } } } + } private final void createContextARBMapVersionsAvailable(int reqMajor, boolean compat) { @@ -649,6 +652,10 @@ public abstract class GLContextImpl extends GLContext { return ReflectionUtil.createInstance(glp.getGLImplBaseClassName()+suffix, cstrArgTypes, cstrArgs, getClass().getClassLoader()); } + private boolean verifyInstance(GLProfile glp, String suffix, Object instance) { + return ReflectionUtil.instanceOf(instance, glp.getGLImplBaseClassName()+suffix); + } + /** Create the GL for this context. */ protected GL createGL(GLProfile glp) { GL gl = (GL) createInstance(glp, "Impl", new Class[] { GLProfile.class, GLContextImpl.class }, new Object[] { glp, this } ); @@ -729,8 +736,8 @@ public abstract class GLContextImpl extends GLContext { /** Helper routine which resets a ProcAddressTable generated by the GLEmitter by looking up anew all of its function pointers. */ - protected void resetProcAddressTable(Object table) { - ((ProcAddressTable)table).reset(getDrawableImpl().getGLDynamicLookupHelper() ); + protected void resetProcAddressTable(ProcAddressTable table) { + table.reset(getDrawableImpl().getGLDynamicLookupHelper() ); } /** @@ -769,15 +776,35 @@ public abstract class GLContextImpl extends GLContext { if (DEBUG) { System.err.println(getThreadName() + ": !!! Initializing OpenGL extension address table for " + this); } - if (glProcAddressTable == null) { - glProcAddressTable = (ProcAddressTable) createInstance(gl.getGLProfile(), "ProcAddressTable", - new Class[] { FunctionAddressResolver.class } , - new Object[] { new GLProcAddressResolver() } ); - // FIXME: cache ProcAddressTables by capability bits so we can - // share them among contexts with the same capabilities - } - resetProcAddressTable(getGLProcAddressTable()); + int key = compose8bit(major, minor, ctp, 0); + ProcAddressTable table = null; + synchronized(mappedProcAddressLock) { + table = (ProcAddressTable) mappedGLProcAddress.get( key ); + if(null != table && !verifyInstance(gl.getGLProfile(), "ProcAddressTable", table)) { + throw new InternalError("GLContext GL ProcAddressTable mapped key("+major+","+minor+","+ctp+") -> "+ + table.getClass().getName()+" not matching "+gl.getGLProfile().getGLImplBaseClassName()); + } + } + if(null != table) { + glProcAddressTable = table; + if(DEBUG) { + System.err.println("GLContext GL ProcAddressTable reusing key("+major+","+minor+","+ctp+") -> "+table.hashCode()); + } + } else { + if (glProcAddressTable == null) { + glProcAddressTable = (ProcAddressTable) createInstance(gl.getGLProfile(), "ProcAddressTable", + new Class[] { FunctionAddressResolver.class } , + new Object[] { new GLProcAddressResolver() } ); + } + resetProcAddressTable(getGLProcAddressTable()); + synchronized(mappedProcAddressLock) { + mappedGLProcAddress.put(key, getGLProcAddressTable()); + if(DEBUG) { + System.err.println("GLContext GL ProcAddressTable mapping key("+major+","+minor+","+ctp+") -> "+getGLProcAddressTable().hashCode()); + } + } + } setContextVersion(major, minor, ctp); extensionAvailability.reset(); diff --git a/src/jogl/classes/com/jogamp/opengl/impl/egl/EGLContext.java b/src/jogl/classes/com/jogamp/opengl/impl/egl/EGLContext.java index 5671b033d..65f16089b 100644 --- a/src/jogl/classes/com/jogamp/opengl/impl/egl/EGLContext.java +++ b/src/jogl/classes/com/jogamp/opengl/impl/egl/EGLContext.java @@ -35,7 +35,6 @@ package com.jogamp.opengl.impl.egl; -import javax.media.nativewindow.*; import javax.media.opengl.*; import com.jogamp.opengl.impl.*; import com.jogamp.gluegen.runtime.ProcAddressTable; @@ -200,12 +199,30 @@ public abstract class EGLContext extends GLContextImpl { eglQueryStringInitialized = false; eglQueryStringAvailable = false; - if (eglExtProcAddressTable == null) { - // FIXME: cache ProcAddressTables by capability bits so we can - // share them among contexts with the same capabilities - eglExtProcAddressTable = new EGLExtProcAddressTable(new GLProcAddressResolver()); - } - resetProcAddressTable(getEGLExtProcAddressTable()); + int key = compose8bit(major, minor, ctp, 0); + EGLExtProcAddressTable table = null; + synchronized(mappedProcAddressLock) { + table = (EGLExtProcAddressTable) mappedGLXProcAddress.get( key ); + } + if(null != table) { + eglExtProcAddressTable = table; + if(DEBUG) { + System.err.println("GLContext EGL ProcAddressTable reusing key("+major+","+minor+","+ctp+") -> "+table.hashCode()); + } + } else { + if (eglExtProcAddressTable == null) { + // FIXME: cache ProcAddressTables by capability bits so we can + // share them among contexts with the same capabilities + eglExtProcAddressTable = new EGLExtProcAddressTable(new GLProcAddressResolver()); + } + resetProcAddressTable(getEGLExtProcAddressTable()); + synchronized(mappedProcAddressLock) { + mappedGLXProcAddress.put(key, getEGLExtProcAddressTable()); + if(DEBUG) { + System.err.println("GLContext EGL ProcAddressTable mapping key("+major+","+minor+","+ctp+") -> "+getEGLExtProcAddressTable().hashCode()); + } + } + } super.updateGLProcAddressTable(major, minor, ctp); } diff --git a/src/jogl/classes/com/jogamp/opengl/impl/macosx/cgl/MacOSXCGLContext.java b/src/jogl/classes/com/jogamp/opengl/impl/macosx/cgl/MacOSXCGLContext.java index 1bb07cf9c..ad7dac85f 100644 --- a/src/jogl/classes/com/jogamp/opengl/impl/macosx/cgl/MacOSXCGLContext.java +++ b/src/jogl/classes/com/jogamp/opengl/impl/macosx/cgl/MacOSXCGLContext.java @@ -228,12 +228,30 @@ public abstract class MacOSXCGLContext extends GLContextImpl if (DEBUG) { System.err.println("!!! Initializing CGL extension address table"); } - if (cglExtProcAddressTable == null) { - // FIXME: cache ProcAddressTables by capability bits so we can - // share them among contexts with the same capabilities - cglExtProcAddressTable = new CGLExtProcAddressTable(new GLProcAddressResolver()); - } - resetProcAddressTable(getCGLExtProcAddressTable()); + int key = compose8bit(major, minor, ctp, 0); + CGLExtProcAddressTable table = null; + synchronized(mappedProcAddressLock) { + table = (CGLExtProcAddressTable) mappedGLXProcAddress.get( key ); + } + if(null != table) { + cglExtProcAddressTable = table; + if(DEBUG) { + System.err.println("GLContext CGL ProcAddressTable reusing key("+major+","+minor+","+ctp+") -> "+table.hashCode()); + } + } else { + if (cglExtProcAddressTable == null) { + // FIXME: cache ProcAddressTables by capability bits so we can + // share them among contexts with the same capabilities + cglExtProcAddressTable = new CGLExtProcAddressTable(new GLProcAddressResolver()); + } + resetProcAddressTable(getCGLExtProcAddressTable()); + synchronized(mappedProcAddressLock) { + mappedGLXProcAddress.put(key, getCGLExtProcAddressTable()); + if(DEBUG) { + System.err.println("GLContext CGL ProcAddressTable mapping key("+major+","+minor+","+ctp+") -> "+getCGLExtProcAddressTable().hashCode()); + } + } + } super.updateGLProcAddressTable(major, minor, ctp); } diff --git a/src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsWGLContext.java b/src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsWGLContext.java index 65a8e8ac3..027fb0065 100644 --- a/src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsWGLContext.java +++ b/src/jogl/classes/com/jogamp/opengl/impl/windows/wgl/WindowsWGLContext.java @@ -340,12 +340,30 @@ public class WindowsWGLContext extends GLContextImpl { wglMakeContextCurrentInitialized=false; wglMakeContextCurrentAvailable=false; - if (wglExtProcAddressTable == null) { - // FIXME: cache ProcAddressTables by OpenGL context type bits so we can - // share them among contexts classes (GL4, GL4bc, GL3, GL3bc, ..) - wglExtProcAddressTable = new WGLExtProcAddressTable(new GLProcAddressResolver()); - } - resetProcAddressTable(getWGLExtProcAddressTable()); + int key = compose8bit(major, minor, ctp, 0); + WGLExtProcAddressTable table = null; + synchronized(mappedProcAddressLock) { + table = (WGLExtProcAddressTable) mappedGLXProcAddress.get( key ); + } + if(null != table) { + wglExtProcAddressTable = table; + if(DEBUG) { + System.err.println("GLContext WGL ProcAddressTable reusing key("+major+","+minor+","+ctp+") -> "+table.hashCode()); + } + } else { + if (wglExtProcAddressTable == null) { + // FIXME: cache ProcAddressTables by OpenGL context type bits so we can + // share them among contexts classes (GL4, GL4bc, GL3, GL3bc, ..) + wglExtProcAddressTable = new WGLExtProcAddressTable(new GLProcAddressResolver()); + } + resetProcAddressTable(getWGLExtProcAddressTable()); + synchronized(mappedProcAddressLock) { + mappedGLXProcAddress.put(key, getWGLExtProcAddressTable()); + if(DEBUG) { + System.err.println("GLContext WGL ProcAddressTable mapping key("+major+","+minor+","+ctp+") -> "+getWGLExtProcAddressTable().hashCode()); + } + } + } super.updateGLProcAddressTable(major, minor, ctp); } diff --git a/src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11GLXContext.java b/src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11GLXContext.java index 3cf691493..697ee6353 100644 --- a/src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11GLXContext.java +++ b/src/jogl/classes/com/jogamp/opengl/impl/x11/glx/X11GLXContext.java @@ -392,12 +392,28 @@ public abstract class X11GLXContext extends GLContextImpl { glXQueryExtensionsStringInitialized = false; glXQueryExtensionsStringAvailable = false; - if (glXExtProcAddressTable == null) { - // FIXME: cache ProcAddressTables by OpenGL context type bits so we can - // share them among contexts classes (GL4, GL4bc, GL3, GL3bc, ..) - glXExtProcAddressTable = new GLXExtProcAddressTable(new GLProcAddressResolver()); - } - resetProcAddressTable(getGLXExtProcAddressTable()); + int key = compose8bit(major, minor, ctp, 0); + GLXExtProcAddressTable table = null; + synchronized(mappedProcAddressLock) { + table = (GLXExtProcAddressTable) mappedGLXProcAddress.get( key ); + } + if(null != table) { + glXExtProcAddressTable = table; + if(DEBUG) { + System.err.println("GLContext GLX ProcAddressTable reusing key("+major+","+minor+","+ctp+") -> "+table.hashCode()); + } + } else { + if (glXExtProcAddressTable == null) { + glXExtProcAddressTable = new GLXExtProcAddressTable(new GLProcAddressResolver()); + } + resetProcAddressTable(getGLXExtProcAddressTable()); + synchronized(mappedProcAddressLock) { + mappedGLXProcAddress.put(key, getGLXExtProcAddressTable()); + if(DEBUG) { + System.err.println("GLContext GLX ProcAddressTable mapping key("+major+","+minor+","+ctp+") -> "+getGLXExtProcAddressTable().hashCode()); + } + } + } super.updateGLProcAddressTable(major, minor, ctp); } diff --git a/src/jogl/classes/javax/media/opengl/GLContext.java b/src/jogl/classes/javax/media/opengl/GLContext.java index 0cc63fb1a..2f63d5c8e 100644 --- a/src/jogl/classes/javax/media/opengl/GLContext.java +++ b/src/jogl/classes/javax/media/opengl/GLContext.java @@ -42,6 +42,7 @@ package javax.media.opengl; import java.util.HashMap; import com.jogamp.common.util.IntIntHashMap; +import com.jogamp.common.util.IntObjectHashMap; /** Abstraction for an OpenGL rendering context. In order to perform OpenGL rendering, a context must be "made current" on the current @@ -505,7 +506,10 @@ public abstract class GLContext { */ public static final boolean getGLVersionAvailable(int reqMajor, int reqProfile, int[] major, int minor[], int ctp[]) { int key = compose8bit(reqMajor, reqProfile, 0, 0); - int val = mappedVersionsAvailable.get( key ); + int val; + synchronized(mappedVersionsAvailableLock) { + val = mappedVersionsAvailable.get( key ); + } if(val<=0) { return false; } @@ -556,15 +560,24 @@ public abstract class GLContext { return sb.toString(); } + protected static final Object mappedVersionsAvailableLock; protected static final IntIntHashMap mappedVersionsAvailable; protected static volatile boolean mappedVersionsAvailableSet; - protected static final Object mappedVersionsAvailableLock; + + protected static final Object mappedProcAddressLock; + protected static final IntObjectHashMap mappedGLProcAddress; + protected static final IntObjectHashMap mappedGLXProcAddress; static { mappedVersionsAvailableLock = new Object(); mappedVersionsAvailableSet = false; mappedVersionsAvailable = new IntIntHashMap(); mappedVersionsAvailable.setKeyNotFoundValue(-1); + mappedProcAddressLock = new Object(); + mappedGLProcAddress = new IntObjectHashMap(); + mappedGLProcAddress.setKeyNotFoundValue(null); + mappedGLXProcAddress = new IntObjectHashMap(); + mappedGLXProcAddress.setKeyNotFoundValue(null); } private static void validateProfileBits(int bits, String argName) { @@ -594,7 +607,9 @@ public abstract class GLContext { int key = compose8bit(reqMajor, profile, 0, 0); int val = compose8bit(resMajor, resMinor, resCtp, 0); - mappedVersionsAvailable.put( key, val ); + synchronized(mappedVersionsAvailableLock) { + mappedVersionsAvailable.put( key, val ); + } } protected static int compose8bit(int one, int two, int three, int four) { diff --git a/src/jogl/classes/javax/media/opengl/GLProfile.java b/src/jogl/classes/javax/media/opengl/GLProfile.java index 233bebcb4..102a97a33 100644 --- a/src/jogl/classes/javax/media/opengl/GLProfile.java +++ b/src/jogl/classes/javax/media/opengl/GLProfile.java @@ -47,7 +47,6 @@ import com.jogamp.opengl.impl.DesktopGLDynamicLookupHelper; import java.util.HashMap; import java.util.Iterator; import java.security.*; -import java.util.ArrayList; import javax.media.opengl.fixedfunc.GLPointerFunc; import javax.media.nativewindow.NativeWindowFactory; @@ -917,10 +916,6 @@ public class GLProfile { JVMUtil.initSingleton(); } - // The intersection between desktop OpenGL and the union of the OpenGL ES profiles - // This is here only to avoid having separate GL2ES1Impl and GL2ES2Impl classes - private static final String GL2ES12 = "GL2ES12"; - private static /*final*/ boolean isAWTAvailable; private static /*final*/ boolean hasGL234Impl; @@ -929,7 +924,6 @@ public class GLProfile { private static /*final*/ boolean hasGL3bcImpl; private static /*final*/ boolean hasGL3Impl; private static /*final*/ boolean hasGL2Impl; - private static /*final*/ boolean hasGL2ES12Impl; private static /*final*/ boolean hasGLES2Impl; private static /*final*/ boolean hasGLES1Impl; @@ -964,11 +958,9 @@ public class GLProfile { hasGL3bcImpl = hasGL234Impl; hasGL3Impl = hasGL234Impl; hasGL2Impl = hasGL234Impl; - hasGL2ES12Impl = ReflectionUtil.isClassAvailable("com.jogamp.opengl.impl.gl2es12.GL2ES12Impl", classloader); mappedProfiles = computeProfileMap(); boolean hasDesktopGL = false; - boolean hasDesktopGLES12 = false; boolean hasNativeOSFactory = false; Throwable t; @@ -989,7 +981,6 @@ public class GLProfile { DesktopGLDynamicLookupHelper glLookupHelper = (DesktopGLDynamicLookupHelper) factory.getGLDynamicLookupHelper(0); if(null!=glLookupHelper) { hasDesktopGL = glLookupHelper.hasGLBinding(); - hasDesktopGLES12 = glLookupHelper.hasGLES12Binding(); } } } catch (LinkageError le) { @@ -1021,7 +1012,6 @@ public class GLProfile { hasGL4Impl = false; hasGL3bcImpl = false; hasGL3Impl = false; - hasGL2ES12Impl = false; hasGL2Impl = false; } else { hasGL4bcImpl = hasGL4bcImpl && GLContext.isGL4bcAvailable(); @@ -1029,7 +1019,6 @@ public class GLProfile { hasGL3bcImpl = hasGL3bcImpl && GLContext.isGL3bcAvailable(); hasGL3Impl = hasGL3Impl && GLContext.isGL3Available(); hasGL2Impl = hasGL2Impl && GLContext.isGL2Available(); - hasGL2ES12Impl = hasGL2ES12Impl && GLContext.isGL2Available(); } if ( ReflectionUtil.isClassAvailable("com.jogamp.opengl.impl.egl.EGLDrawableFactory", classloader) ) { @@ -1075,7 +1064,6 @@ public class GLProfile { System.err.println("GLProfile.init isAWTAvailable "+isAWTAvailable); System.err.println("GLProfile.init hasNativeOSFactory "+hasNativeOSFactory); System.err.println("GLProfile.init hasDesktopGL "+hasDesktopGL); - System.err.println("GLProfile.init hasDesktopGLES12 "+hasDesktopGLES12); System.err.println("GLProfile.init hasGL234Impl "+hasGL234Impl); System.err.println("GLProfile.init "+glAvailabilityToString()); } @@ -1165,8 +1153,6 @@ public class GLProfile { GL3.equals(profileImpl) || GL2.equals(profileImpl) ) { return "com.jogamp.opengl.impl.gl4.GL4bc"; - } else if(GL2ES12.equals(profileImpl)) { - return "com.jogamp.opengl.impl.gl2es12.GL2ES12"; } else if(GLES1.equals(profileImpl) || GL2ES1.equals(profileImpl)) { return "com.jogamp.opengl.impl.es1.GLES1"; } else if(GLES2.equals(profileImpl) || GL2ES2.equals(profileImpl)) { @@ -1181,9 +1167,7 @@ public class GLProfile { */ private static String computeProfileImpl(String profile) { if (GL2ES1.equals(profile)) { - if(hasGL2ES12Impl) { - return GL2ES12; - } else if(hasGL2Impl) { + if(hasGL2Impl) { return GL2; } else if(hasGL3bcImpl) { return GL3bc; @@ -1193,9 +1177,7 @@ public class GLProfile { return GLES1; } } else if (GL2ES2.equals(profile)) { - if(hasGL2ES12Impl) { - return GL2ES12; - } else if(hasGL2Impl) { + if(hasGL2Impl) { return GL2; } else if(hasGL3Impl) { return GL3; |