summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/java/com/sun/gluegen/opengl/GLEmitter.java24
-rwxr-xr-xsrc/java/com/sun/gluegen/opengl/GLJavaMethodBindingEmitter.java28
-rwxr-xr-xsrc/java/com/sun/gluegen/procaddress/ProcAddressJavaMethodBindingEmitter.java2
-rw-r--r--src/java/com/sun/gluegen/runtime/opengl/GLUnifiedName.java30
4 files changed, 71 insertions, 13 deletions
diff --git a/src/java/com/sun/gluegen/opengl/GLEmitter.java b/src/java/com/sun/gluegen/opengl/GLEmitter.java
index fb6c0dd..27a77fc 100644
--- a/src/java/com/sun/gluegen/opengl/GLEmitter.java
+++ b/src/java/com/sun/gluegen/opengl/GLEmitter.java
@@ -324,6 +324,12 @@ public class GLEmitter extends ProcAddressEmitter
// Internals only below this point
//
+ // map the uniName to the GLUnifiedName type
+ protected HashMap/*<String uniNameStr, GLUnifiedName uniName>*/ funcNameMap = new HashMap();
+ protected Map/*<String uniNameStr, GLUnifiedName uniName>*/ getFuncNameMap() {
+ return funcNameMap;
+ }
+
protected void validateFunctionsToBind(Set/*FunctionSymbol*/ funcsSet) {
ArrayList newUniFuncs = new ArrayList();
for (Iterator iter = funcsSet.iterator(); iter.hasNext(); ) {
@@ -334,6 +340,9 @@ public class GLEmitter extends ProcAddressEmitter
} else {
if( uniName.isExtensionARB() &&
!((GLConfiguration)cfg).skipProcAddressGen(fsOrig.getName()) ) {
+ if(!funcNameMap.containsKey(uniName.getUni())) {
+ funcNameMap.put(uniName.getUni(), uniName);
+ }
FunctionSymbol fsUni = new FunctionSymbol(uniName.getUni(), fsOrig.getType());
if(!funcsSet.contains(fsUni)) {
newUniFuncs.add(fsUni); // add new uni name
@@ -359,10 +368,17 @@ public class GLEmitter extends ProcAddressEmitter
if(uniName.isExtensionVEN()) {
uniName.normalizeVEN();
if (GLEmitter.shouldIgnore(uniName, (GLConfiguration)cfg)) {
+ System.err.println("INFO: Ignored: Remove Function:"+ uniName);
iter.remove(); // remove ignored function
} else {
FunctionSymbol fsUni = new FunctionSymbol(uniName.getUni(), fsOrig.getType());
if(funcsSet.contains(fsUni)) {
+ GLUnifiedName uniNameMap = (GLUnifiedName) funcNameMap.get(uniName.getUni());
+ if(null!=uniNameMap) {
+ uniNameMap.addOrig(fsOrig.getName());
+ } else {
+ funcNameMap.put(uniName.getUni(), uniName);
+ }
iter.remove(); // remove VEN function (already incl. as ARB)
System.err.println("INFO: Dub VEN Function:"+
"\n\tVEN: "+fsOrig+
@@ -381,17 +397,13 @@ public class GLEmitter extends ProcAddressEmitter
// See whether this is one of the Buffer Object variants
boolean bufferObjectVariant = bufferObjectMethodBindings.containsKey(baseJavaEmitter.getBinding());
- if (bufferObjectVariant) {
- for (Iterator iter = superEmitters.iterator(); iter.hasNext(); ) {
+ for (Iterator iter = superEmitters.iterator(); iter.hasNext(); ) {
JavaMethodBindingEmitter emitter = (JavaMethodBindingEmitter) iter.next();
if (emitter instanceof ProcAddressJavaMethodBindingEmitter) {
- emitters.add(new GLJavaMethodBindingEmitter((ProcAddressJavaMethodBindingEmitter) emitter, bufferObjectVariant));
+ emitters.add(new GLJavaMethodBindingEmitter((ProcAddressJavaMethodBindingEmitter) emitter, this, bufferObjectVariant));
} else {
emitters.add(emitter);
}
- }
- } else {
- emitters.addAll(superEmitters);
}
}
diff --git a/src/java/com/sun/gluegen/opengl/GLJavaMethodBindingEmitter.java b/src/java/com/sun/gluegen/opengl/GLJavaMethodBindingEmitter.java
index 8512f38..3983916 100755
--- a/src/java/com/sun/gluegen/opengl/GLJavaMethodBindingEmitter.java
+++ b/src/java/com/sun/gluegen/opengl/GLJavaMethodBindingEmitter.java
@@ -44,6 +44,7 @@ import java.util.*;
import com.sun.gluegen.*;
import com.sun.gluegen.cgram.types.*;
import com.sun.gluegen.procaddress.*;
+import com.sun.gluegen.runtime.opengl.GLUnifiedName;
/** A specialization of the proc address emitter which knows how to
change argument names to take into account Vertex Buffer Object /
@@ -51,6 +52,7 @@ import com.sun.gluegen.procaddress.*;
public class GLJavaMethodBindingEmitter extends ProcAddressJavaMethodBindingEmitter {
protected boolean bufferObjectVariant;
+ protected GLEmitter glEmitter;
public GLJavaMethodBindingEmitter(JavaMethodBindingEmitter methodToWrap,
boolean callThroughProcAddress,
@@ -64,16 +66,21 @@ public class GLJavaMethodBindingEmitter extends ProcAddressJavaMethodBindingEmit
changeNameAndArguments,
emitter);
this.bufferObjectVariant = bufferObjectVariant;
+ this.glEmitter=emitter;
+ setCommentEmitter(new WrappedMethodCommentEmitter());
}
public GLJavaMethodBindingEmitter(ProcAddressJavaMethodBindingEmitter methodToWrap,
+ GLEmitter emitter,
boolean bufferObjectVariant) {
super(methodToWrap);
this.bufferObjectVariant = bufferObjectVariant;
+ this.glEmitter=emitter;
+ setCommentEmitter(new WrappedMethodCommentEmitter());
}
public GLJavaMethodBindingEmitter(GLJavaMethodBindingEmitter methodToWrap) {
- this(methodToWrap, methodToWrap.bufferObjectVariant);
+ this(methodToWrap, methodToWrap.glEmitter, methodToWrap.bufferObjectVariant);
}
protected String getArgumentName(int i) {
@@ -96,4 +103,23 @@ public class GLJavaMethodBindingEmitter extends ProcAddressJavaMethodBindingEmit
return name;
}
+ /** This class emits the comment for the wrapper method */
+ public class WrappedMethodCommentEmitter extends ProcAddressJavaMethodBindingEmitter.WrappedMethodCommentEmitter {
+ protected void emitBindingCSignature(MethodBinding binding, PrintWriter writer) {
+ if(null!=glEmitter) {
+ GLUnifiedName uniName = (GLUnifiedName) glEmitter.getFuncNameMap().get(binding.getCSymbol().getName());
+ if(null!=uniName) {
+ writer.print("- Alias for: <br> <code> ");
+ writer.print(binding.getCSymbol().getType().toString(uniName.getOrigStringList(", "), tagNativeBinding));
+ writer.print(" </code> ");
+ return ; // done
+ }
+ }
+ writer.print(": <br> ");
+ super.emitBindingCSignature(binding, writer);
+ }
+ protected void emitBeginning(FunctionEmitter methodEmitter, PrintWriter writer) {
+ writer.print("Entry point (through function pointer) to C language function ");
+ }
+ }
}
diff --git a/src/java/com/sun/gluegen/procaddress/ProcAddressJavaMethodBindingEmitter.java b/src/java/com/sun/gluegen/procaddress/ProcAddressJavaMethodBindingEmitter.java
index 7900d67..4b65d84 100755
--- a/src/java/com/sun/gluegen/procaddress/ProcAddressJavaMethodBindingEmitter.java
+++ b/src/java/com/sun/gluegen/procaddress/ProcAddressJavaMethodBindingEmitter.java
@@ -145,7 +145,7 @@ public class ProcAddressJavaMethodBindingEmitter extends JavaMethodBindingEmitte
}
/** This class emits the comment for the wrapper method */
- private class WrappedMethodCommentEmitter extends JavaMethodBindingEmitter.DefaultCommentEmitter {
+ public class WrappedMethodCommentEmitter extends JavaMethodBindingEmitter.DefaultCommentEmitter {
protected void emitBeginning(FunctionEmitter methodEmitter, PrintWriter writer) {
writer.print("Entry point (through function pointer) to C language function: <br> ");
}
diff --git a/src/java/com/sun/gluegen/runtime/opengl/GLUnifiedName.java b/src/java/com/sun/gluegen/runtime/opengl/GLUnifiedName.java
index 44b5b1b..89d40e3 100644
--- a/src/java/com/sun/gluegen/runtime/opengl/GLUnifiedName.java
+++ b/src/java/com/sun/gluegen/runtime/opengl/GLUnifiedName.java
@@ -57,9 +57,10 @@ public class GLUnifiedName implements Cloneable {
if(str.endsWith(extensions[i])) {
return true;
}
+ /*
if(str.startsWith("GL_"+extensions[i]+"_")) {
return true;
- }
+ } */
}
return false;
}
@@ -76,10 +77,11 @@ public class GLUnifiedName implements Cloneable {
str = str.substring(0, str.length()-extensions[i].length());
touched=true;
}
+ /*
if(str.startsWith("GL_"+extensions[i]+"_")) {
str = "GL_"+str.substring(4+extensions[i].length());
touched=true;
- }
+ } */
}
return str;
}
@@ -185,14 +187,32 @@ public class GLUnifiedName implements Cloneable {
}
public String getCommentString() {
+ return getCommentString(true, " ");
+ }
+ public String getCommentString(boolean encloseCommentStartEnd, String seperator) {
if(nameOrig.size()==1 && ((String)nameOrig.get(0)).equals(nameUni)) {
return new String();
}
- String res = " /** " + nameUni + ": Alias of: ";
+ String res = new String();
+ if(encloseCommentStartEnd) {
+ res = res.concat(" /** ");
+ }
+ res = res.concat("Alias for: <code>");
+ res = res.concat(getOrigStringList(seperator));
+ res = res.concat("</code> ");
+ if(encloseCommentStartEnd) {
+ res = res.concat("*/");
+ }
+ return res;
+ }
+ public String getOrigStringList(String seperator) {
+ String res = new String();
for (Iterator iter = nameOrig.iterator(); iter.hasNext(); ) {
- res = res.concat((String)iter.next()+", ");
+ res = res.concat((String)iter.next());
+ if(iter.hasNext()) {
+ res = res.concat(seperator);
+ }
}
- res = res.concat(" */");
return res;
}