diff options
author | Kenneth Russel <[email protected]> | 2009-03-19 20:08:15 +0000 |
---|---|---|
committer | Kenneth Russel <[email protected]> | 2009-03-19 20:08:15 +0000 |
commit | d84b348661f06005bc0a3e4306a9a24eaaebe4b5 (patch) | |
tree | 78a011ee29a39508135d76cf180ec80187914510 | |
parent | fa014178e3f10e161610ce9c2e1cdb5d1b16ea32 (diff) |
Removed GL2ES12 interface from the public API since it is only an
implementation detail. Removed GL2ES12 queries from the GLProfile
class. Changed GL2ES12 instance to pay attention to the chosen profile
so it behaves only like either GL2ES1 or GL2ES2. Sven's fixed function
emulation can now be tested on the desktop without needing OpenGL ES
emulation libraries. However, there appear to be problems running it
on top of Apple's OpenGL implementation -- seen by running
demos.es1.RedSquare and demos.es1.angeles.Main forcing the use of the
GL2ES2 profile.
git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/svn-server-sync/jogl/branches/JOGL_2_SANDBOX@1889 232f8b59-042b-4e1e-8c03-345bb8c30851
-rw-r--r-- | make/config/jogl/gl-gl2es12.cfg | 37 | ||||
-rw-r--r-- | make/config/jogl/gl-impl-CustomJavaCode-gl2_es2.java | 22 | ||||
-rw-r--r-- | make/config/jogl/gl-impl-CustomJavaCode-gl2es12.java | 17 | ||||
-rwxr-xr-x | make/config/jogl/glu-CustomJavaCode-base.java | 2 | ||||
-rw-r--r-- | src/jogl/classes/javax/media/opengl/GLDrawableFactory.java | 2 | ||||
-rw-r--r-- | src/jogl/classes/javax/media/opengl/GLProfile.java | 79 |
6 files changed, 91 insertions, 68 deletions
diff --git a/make/config/jogl/gl-gl2es12.cfg b/make/config/jogl/gl-gl2es12.cfg index 6d1b34bcf..74103066a 100644 --- a/make/config/jogl/gl-gl2es12.cfg +++ b/make/config/jogl/gl-gl2es12.cfg @@ -2,24 +2,15 @@ JavaOutputDir gensrc/classes NativeOutputDir gensrc/native/jogl/gl2es12 -ExtendedInterfaceSymbolsOnly ../build-temp/gensrc/classes/javax/media/opengl/GL.java -ExtendedInterfaceSymbolsOnly ../build-temp/gensrc/classes/javax/media/opengl/GL2ES1.java -ExtendedInterfaceSymbolsOnly ../build-temp/gensrc/classes/javax/media/opengl/GL2ES2.java -ExtendedInterfaceSymbolsOnly ../src/jogl/classes/javax/media/opengl/GLBase.java -ExtendedInterfaceSymbolsOnly ../src/jogl/classes/javax/media/opengl/fixedfunc/GLMatrixFunc.java -ExtendedInterfaceSymbolsOnly ../src/jogl/classes/javax/media/opengl/fixedfunc/GLPointerFunc.java -ExtendedInterfaceSymbolsOnly ../src/jogl/classes/javax/media/opengl/fixedfunc/GLLightingFunc.java - -Package javax.media.opengl -Style InterfaceAndImpl -JavaClass GL2ES12 -Extends GL2ES12 GL -Extends GL2ES12 GL2ES1 -Extends GL2ES12 GL2ES2 -Extends GL2ES12 GLBase -Extends GL2ES12 GLMatrixFunc -Extends GL2ES12 GLPointerFunc -Extends GL2ES12 GLLightingFunc +ExtendedInterfaceSymbols ../build-temp/gensrc/classes/javax/media/opengl/GL.java +ExtendedInterfaceSymbols ../build-temp/gensrc/classes/javax/media/opengl/GL2ES1.java +ExtendedInterfaceSymbols ../build-temp/gensrc/classes/javax/media/opengl/GL2ES2.java +ExtendedInterfaceSymbols ../src/jogl/classes/javax/media/opengl/GLBase.java +ExtendedInterfaceSymbols ../src/jogl/classes/javax/media/opengl/fixedfunc/GLMatrixFunc.java +ExtendedInterfaceSymbols ../src/jogl/classes/javax/media/opengl/fixedfunc/GLPointerFunc.java +ExtendedInterfaceSymbols ../src/jogl/classes/javax/media/opengl/fixedfunc/GLLightingFunc.java + +Style ImplOnly ImplPackage com.sun.opengl.impl.gl2es12 ImplJavaClass GL2ES12Impl Implements GL2ES12Impl GL @@ -34,6 +25,11 @@ Include gl-common-gl2.cfg Include gl-common-extensions.cfg Include gl-desktop.cfg +# Because we're manually implementing glMapBuffer but only producing +# the implementing class, GlueGen doesn't notice that it has to emit a +# proc address table entry for it. Force it to here. +ForceProcAddressGen glMapBuffer + EmitProcAddressTable true ProcAddressTableClassName GL2ES12ProcAddressTable GetProcAddressTableExpr ((GL2ES12ProcAddressTable)_context.getGLProcAddressTable()) @@ -41,10 +37,6 @@ GetProcAddressTableExpr ((GL2ES12ProcAddressTable)_context.getGLProcAddressTable # Pick up on-line OpenGL javadoc thanks to user cylab on javagaming.org forums TagNativeBinding true -CustomJavaCode GL2ES12 public static final int GL_STENCIL_INDEX16 = 0x8D49; -CustomJavaCode GL2ES12 public static final int GL_RGBA_FLOAT32_APPLE = 0x8814; -CustomJavaCode GL2ES12 public static final int GL_RGBA_FLOAT16_APPLE = 0x881A; - CustomJavaCode GL2ES12Impl public void glFrustumf(float left, float right, float bottom, float top, float zNear, float zFar) { CustomJavaCode GL2ES12Impl glFrustum((double)left, (double)right, (double)bottom, (double)top, (double)zNear, (double)zFar); } @@ -67,6 +59,5 @@ IncludeAs CustomCCode gl-impl-CustomCCode-gl2es12.c Import javax.media.opengl.GLES1 Import javax.media.opengl.GLES2 -Import javax.media.opengl.GL2ES12 Import com.sun.opengl.impl.InternalBufferUtil Import java.io.PrintStream diff --git a/make/config/jogl/gl-impl-CustomJavaCode-gl2_es2.java b/make/config/jogl/gl-impl-CustomJavaCode-gl2_es2.java index 0575eb1a2..37b19ec8a 100644 --- a/make/config/jogl/gl-impl-CustomJavaCode-gl2_es2.java +++ b/make/config/jogl/gl-impl-CustomJavaCode-gl2_es2.java @@ -295,17 +295,19 @@ public final String toString() { StringBuffer buf = new StringBuffer(); buf.append(getClass().getName()); - buf.append(" [GLSL compiler: "); - buf.append(glShaderCompilerAvailable()); - Set bfs = glGetShaderBinaryFormats(); - buf.append(", binary formats "); - buf.append(bfs.size()); - buf.append(":"); - for(Iterator iter=bfs.iterator(); iter.hasNext(); ) { - buf.append(" "); - buf.append(((Integer)(iter.next())).intValue()); + if (isGL2ES2()) { + buf.append(" [GLSL compiler: "); + buf.append(glShaderCompilerAvailable()); + Set bfs = glGetShaderBinaryFormats(); + buf.append(", binary formats "); + buf.append(bfs.size()); + buf.append(":"); + for(Iterator iter=bfs.iterator(); iter.hasNext(); ) { + buf.append(" "); + buf.append(((Integer)(iter.next())).intValue()); + } + buf.append("]"); } - buf.append("]"); return buf.toString(); } diff --git a/make/config/jogl/gl-impl-CustomJavaCode-gl2es12.java b/make/config/jogl/gl-impl-CustomJavaCode-gl2es12.java index 4668bd7ff..560124a99 100644 --- a/make/config/jogl/gl-impl-CustomJavaCode-gl2es12.java +++ b/make/config/jogl/gl-impl-CustomJavaCode-gl2es12.java @@ -18,8 +18,11 @@ public void setObjectTracker(GLObjectTracker tracker) { public GL2ES12Impl(GLContextImpl context) { this._context = context; this.bufferSizeTracker = context.getBufferSizeTracker(); + this.isGL2ES2 = GLProfile.isGL2ES2(); } +private boolean isGL2ES2; + public final boolean isGL() { return false; } @@ -41,11 +44,11 @@ public final boolean isGLES() { } public final boolean isGL2ES1() { - return true; + return !isGL2ES2; } public final boolean isGL2ES2() { - return true; + return isGL2ES2; } public final GL getGL() throws GLException { @@ -65,11 +68,17 @@ public final GLES2 getGLES2() throws GLException { } public final GL2ES1 getGL2ES1() throws GLException { - return this; + if (isGL2ES1()) { + return this; + } + throw new GLException("Not a GL2ES1 implementation"); } public final GL2ES2 getGL2ES2() throws GLException { - return this; + if (isGL2ES2()) { + return this; + } + throw new GLException("Not a GL2ES2 implementation"); } public boolean isFunctionAvailable(String glFunctionName) { diff --git a/make/config/jogl/glu-CustomJavaCode-base.java b/make/config/jogl/glu-CustomJavaCode-base.java index 94a859ba5..5b8a30f46 100755 --- a/make/config/jogl/glu-CustomJavaCode-base.java +++ b/make/config/jogl/glu-CustomJavaCode-base.java @@ -93,7 +93,7 @@ public static final GLU createGLU(String profile) throws GLException { } } catch (GLException e) { e.printStackTrace(); } try { - if(GLProfile.GL2ES12.equals(profile) || GLProfile.GL2.equals(profile) || GLProfile.GLES1.equals(profile)) { + if(GLProfile.GL2ES1.equals(profile) || GLProfile.GL2.equals(profile) || GLProfile.GLES1.equals(profile)) { return (GLU) NWReflection.createInstance("javax.media.opengl.glu.gl2es1.GLUgl2es1"); } } catch (GLException e) { e.printStackTrace(); } diff --git a/src/jogl/classes/javax/media/opengl/GLDrawableFactory.java b/src/jogl/classes/javax/media/opengl/GLDrawableFactory.java index 66585eb56..5a3f9f4e9 100644 --- a/src/jogl/classes/javax/media/opengl/GLDrawableFactory.java +++ b/src/jogl/classes/javax/media/opengl/GLDrawableFactory.java @@ -104,7 +104,7 @@ public abstract class GLDrawableFactory { } catch (Exception e) { e.printStackTrace(); } - } else if (!GLProfile.isGL2() && !GLProfile.isGL2ES12()) { + } else if (!GLProfile.isGL2() && !GLProfile.isGL2ES1() && !GLProfile.isGL2ES2()) { // We require that the user passes in one of the known profiles throw new GLException("Unknown or unsupported profile \"" + GLProfile.getProfile() + "\""); } diff --git a/src/jogl/classes/javax/media/opengl/GLProfile.java b/src/jogl/classes/javax/media/opengl/GLProfile.java index 625099e16..1ac09c12e 100644 --- a/src/jogl/classes/javax/media/opengl/GLProfile.java +++ b/src/jogl/classes/javax/media/opengl/GLProfile.java @@ -43,36 +43,55 @@ import com.sun.opengl.impl.*; import com.sun.nativewindow.impl.NWReflection; public class GLProfile { + // + // Public (user-visible) profiles + // + /** The desktop (OpenGL 2.0) profile */ public static final String GL2 = "GL2"; - /** The desktop short profile, intersecting: GL2+GLES1+GLES2 */ - public static final String GL2ES12 = "GL2ES12"; - /** The OpenGL ES 1 (really, 1.1) profile */ public static final String GLES1 = "GLES1"; /** The OpenGL ES 2 (really, 2.0) profile */ public static final String GLES2 = "GLES2"; + /** The intersection of the desktop (OpenGL 2.0) and OpenGL ES 1.x profiles */ + public static final String GL2ES1 = "GL2ES1"; + + /** The intersection of the desktop (OpenGL 2.0) and OpenGL ES 2.x profiles */ + public static final String GL2ES2 = "GL2ES2"; + + // + // Profiles which are implementation details + // + + // 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"; + /** The JVM/process wide chosen GL profile **/ private static String profile = null; + /** The "real" profile implementing the chosen profile; for example, + both GL2ES1 and GL2ES2 currently map to GL2ES12 */ + private static String realProfile = null; + private static final Throwable tryLibrary() { try { Class clazz = Class.forName(getGLImplBaseClassName()+"Impl"); - if(GL2.equals(profile)) { + if(GL2.equals(realProfile)) { // See DRIHack.java for an explanation of why this is necessary DRIHack.begin(); NativeLibLoader.loadGL2(); DRIHack.end(); - } if(GL2ES12.equals(profile)) { + } if(GL2ES12.equals(realProfile)) { // See DRIHack.java for an explanation of why this is necessary DRIHack.begin(); NativeLibLoader.loadGL2ES12(); DRIHack.end(); - } else if(GLES1.equals(profile) || GLES2.equals(profile)) { + } else if(GLES1.equals(realProfile) || GLES2.equals(realProfile)) { Object eGLDrawableFactory = NWReflection.createInstance("com.sun.opengl.impl.egl.EGLDrawableFactory"); if(null==eGLDrawableFactory) { throw new GLException("com.sun.opengl.impl.egl.EGLDrawableFactory not available"); @@ -85,22 +104,33 @@ public class GLProfile { e.printStackTrace(); } profile=null; + realProfile = null; return e; } } + private static void computeRealProfile() { + if (GL2ES1.equals(profile) || + GL2ES2.equals(profile)) { + realProfile = GL2ES12; + } else { + realProfile = profile; + } + } + public static synchronized final void setProfile(String profile) throws GLException { if(null==GLProfile.profile) { GLProfile.profile = profile; + computeRealProfile(); Throwable t = tryLibrary(); if (GLProfile.profile == null) { throw new GLException("Profile " + profile + " not available", t); } } else { if(!GLProfile.profile.equals(profile)) { - throw new GLException("Chosen profile ("+profile+") doesn't match preset one: "+GLProfile.profile); + throw new GLException("Requested profile ("+profile+") doesn't match already chosen one: "+GLProfile.profile); } } } @@ -111,6 +141,7 @@ public class GLProfile { Throwable t = null; for(int i=0; profile==null && i<profiles.length; i++) { profile = profiles[i]; + computeRealProfile(); if (t == null) { t = tryLibrary(); } else { @@ -132,63 +163,53 @@ public class GLProfile { /** * Selects a profile, implementing the interface GL2ES1. - * Order: GL2, GL2ES12, GLES1 + * Order: GL2ES1, GL2, GLES1 */ public static synchronized final void setProfileGL2ES1() { - setProfile(new String[] { GL2, GL2ES12, GLES1 }); + setProfile(new String[] { GL2ES1, GL2, GLES1 }); } /** * Selects a profile, implementing the interface GL2ES2. - * Order: GL2, GL2ES12, GLES2 + * Order: GL2ES2, GL2, GLES2 */ public static synchronized final void setProfileGL2ES2() { - setProfile(new String[] { GL2, GL2ES12, GLES2 }); + setProfile(new String[] { GL2ES2, GL2, GLES2 }); } /** * Selects a profile, implementing the interface GL - * Order: GL2, GL2ES12, GLES2, GLES1 + * Order: GL2, GL2ES2, GL2ES1, GLES2, GLES1 */ public static synchronized final void setProfileGLAny() { - setProfile(new String[] { GL2, GL2ES12, GLES2, GLES1 }); + setProfile(new String[] { GL2, GL2ES2, GL2ES1, GLES2, GLES1 }); } public static final String getProfile() { return profile; } - /* true profile GL2ES12 */ - public static final boolean isGL2ES12() { - return GL2ES12.equals(profile); - } - - /* true profile GL2 */ public static final boolean isGL2() { return GL2.equals(profile); } - /* true profile GLES1 */ public static final boolean isGLES1() { return GLES1.equals(profile); } - /* true profile GLES2 */ public static final boolean isGLES2() { return GLES2.equals(profile); } - /* abstract profile GL2ES12, GL2, GLES1 */ public static final boolean isGL2ES1() { - return isGL2ES12() || isGL2() || isGLES1(); + return GL2ES1.equals(profile); } - /* abstract profile GL2ES12, GL2, GLES2 */ public static final boolean isGL2ES2() { - return isGL2ES12() || isGL2() || isGLES2(); + return GL2ES2.equals(profile); } - /* abstract profile GLES1, GLES2 */ + /** Indicates whether either of the OpenGL ES profiles are in use. */ public static final boolean isGLES() { return isGLES2() || isGLES1(); } @@ -200,7 +221,7 @@ public class GLProfile { public static final String getGLImplBaseClassName() { if(isGL2()) { return "com.sun.opengl.impl.gl2.GL2"; - } else if(isGL2ES12()) { + } else if(isGL2ES1() || isGL2ES2()) { return "com.sun.opengl.impl.gl2es12.GL2ES12"; } else if(isGLES1()) { return "com.sun.opengl.impl.es1.GLES1"; @@ -277,7 +298,7 @@ public class GLProfile { case javax.media.opengl.GL2.GL_2_BYTES: case javax.media.opengl.GL2.GL_3_BYTES: case javax.media.opengl.GL2.GL_4_BYTES: - if( isGL2ES12() || isGL2() ) { + if( isGL2() ) { return true; } } @@ -403,7 +424,7 @@ public class GLProfile { } return false; } - } else if(GLProfile.isGL2ES12() || GLProfile.isGL2()) { + } else if(GLProfile.isGL2ES2() || GLProfile.isGL2()) { if(isVertexAttribPointer) { switch(type) { case GL.GL_UNSIGNED_BYTE: |