aboutsummaryrefslogtreecommitdiffstats
path: root/src/jogl/classes/com/jogamp/gluegen/opengl/GLConfiguration.java
diff options
context:
space:
mode:
authorSven Gothel <sgothel@jausoft.com>2014-02-23 14:51:06 +0100
committerSven Gothel <sgothel@jausoft.com>2014-02-23 14:51:06 +0100
commit3352601e0860584509adf2b76f993d03893ded4b (patch)
tree974fccc8c0eb2f5ad9d4ffd741dfc35869ed67b5 /src/jogl/classes/com/jogamp/gluegen/opengl/GLConfiguration.java
parentf51933f0ebe9ae030c26c066e59a728ce08b8559 (diff)
parentc67de337a8aaf52e36104c3f13e273aa19d21f1f (diff)
Merge branch 'master' into stash_glyphcache
Conflicts: make/scripts/tests.sh src/jogl/classes/com/jogamp/graph/curve/OutlineShape.java src/jogl/classes/com/jogamp/graph/curve/Region.java src/jogl/classes/com/jogamp/graph/curve/opengl/GLRegion.java src/jogl/classes/com/jogamp/graph/curve/opengl/RegionRenderer.java src/jogl/classes/com/jogamp/graph/curve/opengl/Renderer.java src/jogl/classes/com/jogamp/graph/curve/opengl/TextRenderer.java src/jogl/classes/com/jogamp/graph/font/Font.java src/jogl/classes/com/jogamp/opengl/math/VectorUtil.java src/jogl/classes/jogamp/graph/curve/text/GlyphShape.java src/jogl/classes/jogamp/graph/curve/text/GlyphString.java src/jogl/classes/jogamp/graph/font/typecast/TypecastFont.java src/jogl/classes/jogamp/graph/font/typecast/TypecastGlyph.java src/jogl/classes/jogamp/graph/font/typecast/TypecastRenderer.java
Diffstat (limited to 'src/jogl/classes/com/jogamp/gluegen/opengl/GLConfiguration.java')
-rw-r--r--[-rwxr-xr-x]src/jogl/classes/com/jogamp/gluegen/opengl/GLConfiguration.java103
1 files changed, 82 insertions, 21 deletions
diff --git a/src/jogl/classes/com/jogamp/gluegen/opengl/GLConfiguration.java b/src/jogl/classes/com/jogamp/gluegen/opengl/GLConfiguration.java
index c1a4facd2..f1a32fa9c 100755..100644
--- a/src/jogl/classes/com/jogamp/gluegen/opengl/GLConfiguration.java
+++ b/src/jogl/classes/com/jogamp/gluegen/opengl/GLConfiguration.java
@@ -1,22 +1,22 @@
/*
* Copyright (c) 2003-2005 Sun Microsystems, Inc. All Rights Reserved.
* Copyright (c) 2010 JogAmp Community. All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
- *
+ *
* - Redistribution of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
- *
+ *
* - Redistribution in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- *
+ *
* Neither the name of Sun Microsystems, Inc. or the names of
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
- *
+ *
* This software is provided "AS IS," without a warranty of any kind. ALL
* EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
@@ -29,11 +29,11 @@
* DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
* ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
* SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
- *
+ *
* You acknowledge that this software is not designed or intended for use
* in the design, construction, operation or maintenance of any nuclear
* facility.
- *
+ *
* Sun gratefully acknowledges that this software was originally authored
* and developed by Kenneth Bradley Russell and Christopher John Kline.
*/
@@ -43,7 +43,7 @@ import com.jogamp.gluegen.GlueEmitterControls;
import com.jogamp.gluegen.GlueGen;
import com.jogamp.gluegen.MethodBinding;
import com.jogamp.gluegen.procaddress.ProcAddressConfiguration;
-import com.jogamp.gluegen.runtime.opengl.GLExtensionNames;
+import com.jogamp.gluegen.runtime.opengl.GLNameResolver;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
@@ -61,11 +61,13 @@ public class GLConfiguration extends ProcAddressConfiguration {
// The following data members support ignoring an entire extension at a time
private List<String> glHeaders = new ArrayList<String>();
private Set<String> ignoredExtensions = new HashSet<String>();
+ private Set<String> forcedExtensions = new HashSet<String>();
private Set<String> extensionsRenamedIntoCore = new HashSet<String>();
private BuildStaticGLInfo glInfo;
// Maps function names to the kind of buffer object it deals with
private Map<String, GLEmitter.BufferObjectKind> bufferObjectKinds = new HashMap<String, GLEmitter.BufferObjectKind>();
+ private Set<String> bufferObjectOnly = new HashSet<String>();
private GLEmitter emitter;
private Set<String> dropUniqVendorExtensions = new HashSet<String>();
@@ -90,6 +92,9 @@ public class GLConfiguration extends ProcAddressConfiguration {
if (cmd.equalsIgnoreCase("IgnoreExtension")) {
String sym = readString("IgnoreExtension", tok, filename, lineNo);
ignoredExtensions.add(sym);
+ } else if (cmd.equalsIgnoreCase("ForceExtension")) {
+ String sym = readString("ForceExtension", tok, filename, lineNo);
+ forcedExtensions.add(sym);
} else if (cmd.equalsIgnoreCase("RenameExtensionIntoCore")) {
String sym = readString("RenameExtensionIntoCore", tok, filename, lineNo);
extensionsRenamedIntoCore.add(sym);
@@ -102,6 +107,9 @@ public class GLConfiguration extends ProcAddressConfiguration {
glHeaders.add(sym);
} else if (cmd.equalsIgnoreCase("BufferObjectKind")) {
readBufferObjectKind(tok, filename, lineNo);
+ } else if (cmd.equalsIgnoreCase("BufferObjectOnly")) {
+ String sym = readString("BufferObjectOnly", tok, filename, lineNo);
+ bufferObjectOnly.add(sym);
} else if (cmd.equalsIgnoreCase("DropUniqVendorExtensions")) {
String sym = readString("DropUniqVendorExtensions", tok, filename, lineNo);
dropUniqVendorExtensions.add(sym);
@@ -123,10 +131,12 @@ public class GLConfiguration extends ProcAddressConfiguration {
kind = GLEmitter.BufferObjectKind.ARRAY;
} else if (kindString.equalsIgnoreCase("Element")) {
kind = GLEmitter.BufferObjectKind.ELEMENT;
+ } else if (kindString.equalsIgnoreCase("Indirect")) {
+ kind = GLEmitter.BufferObjectKind.INDIRECT;
} else {
throw new RuntimeException("Error parsing \"BufferObjectKind\" command at line " + lineNo
+ " in file \"" + filename + "\": illegal BufferObjectKind \""
- + kindString + "\", expected one of UnpackPixel, PackPixel, Array, or Element");
+ + kindString + "\", expected one of UnpackPixel, PackPixel, Array, Element or Indirect");
}
bufferObjectKinds.put(target, kind);
@@ -167,14 +177,16 @@ public class GLConfiguration extends ProcAddressConfiguration {
prologue = prologue + "ArrayVBO";
} else if (kind == GLEmitter.BufferObjectKind.ELEMENT) {
prologue = prologue + "ElementVBO";
+ } else if (kind == GLEmitter.BufferObjectKind.INDIRECT) {
+ prologue = prologue + "IndirectVBO";
} else {
throw new RuntimeException("Unknown BufferObjectKind " + kind);
}
if (emitter.isBufferObjectMethodBinding(binding)) {
- prologue = prologue + "Enabled";
+ prologue = prologue + "Bound";
} else {
- prologue = prologue + "Disabled";
+ prologue = prologue + "Unbound";
}
prologue = prologue + "(true);";
@@ -202,16 +214,21 @@ public class GLConfiguration extends ProcAddressConfiguration {
for (String str : ignoredExtensions) {
System.err.println("\t" + str);
}
+ System.err.println("GL Forced extensions: ");
+ for (String str : forcedExtensions) {
+ System.err.println("\t" + str);
+ }
super.dumpIgnores();
}
protected boolean shouldIgnoreExtension(String symbol, boolean criteria) {
if (criteria && glInfo != null) {
- Set<String> extensionNames = glInfo.getExtension(symbol);
- if(null!=extensionNames) {
- for(Iterator<String> i=extensionNames.iterator(); i.hasNext(); ) {
- String extensionName = i.next();
- if (extensionName != null && ignoredExtensions.contains(extensionName)) {
+ final Set<String> extensionNames = glInfo.getExtension(symbol);
+ if( null != extensionNames ) {
+ boolean ignoredExtension = false;
+ for(Iterator<String> i=extensionNames.iterator(); !ignoredExtension && i.hasNext(); ) {
+ final String extensionName = i.next();
+ if ( extensionName != null && ignoredExtensions.contains(extensionName) ) {
if (DEBUG_IGNORES) {
System.err.print("Ignore symbol <" + symbol + "> of extension <" + extensionName + ">");
if(extensionNames.size()==1) {
@@ -220,15 +237,32 @@ public class GLConfiguration extends ProcAddressConfiguration {
System.err.println(", WARNING MULTIPLE OCCURENCE: "+extensionNames);
}
}
- return true;
+ ignoredExtension = true;
+ }
+ }
+ if( ignoredExtension ) {
+ ignoredExtension = !shouldForceExtension( symbol, true, symbol );
+ if( ignoredExtension ) {
+ final Set<String> origSymbols = getRenamedJavaSymbols( symbol );
+ if(null != origSymbols) {
+ for(String origSymbol : origSymbols) {
+ if( shouldForceExtension( origSymbol, true, symbol ) ) {
+ ignoredExtension = false;
+ break;
+ }
+ }
+ }
}
}
+ if( ignoredExtension ) {
+ return true;
+ }
}
- boolean isGLEnum = GLExtensionNames.isGLEnumeration(symbol);
- boolean isGLFunc = GLExtensionNames.isGLFunction(symbol);
+ boolean isGLEnum = GLNameResolver.isGLEnumeration(symbol);
+ boolean isGLFunc = GLNameResolver.isGLFunction(symbol);
if (isGLFunc || isGLEnum) {
- if (GLExtensionNames.isExtensionVEN(symbol, isGLFunc)) {
- String extSuffix = GLExtensionNames.getExtensionSuffix(symbol, isGLFunc);
+ if (GLNameResolver.isExtensionVEN(symbol, isGLFunc)) {
+ String extSuffix = GLNameResolver.getExtensionSuffix(symbol, isGLFunc);
if (getDropUniqVendorExtensions(extSuffix)) {
if (DEBUG_IGNORES) {
System.err.println("Ignore UniqVendorEXT: " + symbol + ", vendor " + extSuffix);
@@ -241,6 +275,29 @@ public class GLConfiguration extends ProcAddressConfiguration {
return false;
}
+ public boolean shouldForceExtension(final String symbol, final boolean criteria, final String renamedSymbol) {
+ if (criteria && glInfo != null) {
+ final Set<String> extensionNames = glInfo.getExtension(symbol);
+ if( null != extensionNames ) {
+ for(Iterator<String> i=extensionNames.iterator(); i.hasNext(); ) {
+ final String extensionName = i.next();
+ if ( extensionName != null && forcedExtensions.contains(extensionName) ) {
+ if (DEBUG_IGNORES) {
+ System.err.print("Not Ignore symbol <" + symbol + " -> " + renamedSymbol + "> of extension <" + extensionName + ">");
+ if(extensionNames.size()==1) {
+ System.err.println(", single .");
+ } else {
+ System.err.println(", WARNING MULTIPLE OCCURENCE: "+extensionNames);
+ }
+ }
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
@Override
public boolean shouldIgnoreInInterface(String symbol) {
return shouldIgnoreInInterface(symbol, true);
@@ -287,6 +344,10 @@ public class GLConfiguration extends ProcAddressConfiguration {
return (getBufferObjectKind(name) != null);
}
+ public boolean isBufferObjectOnly(String name) {
+ return bufferObjectOnly.contains(name);
+ }
+
/** Parses any GL headers specified in the configuration file for
the purpose of being able to ignore an extension at a time. */
public void parseGLHeaders(GlueEmitterControls controls) throws IOException {