diff options
author | Kenneth Russel <[email protected]> | 2006-02-05 18:09:23 +0000 |
---|---|---|
committer | Kenneth Russel <[email protected]> | 2006-02-05 18:09:23 +0000 |
commit | 875652cab75b68ac30b9b1cc81ee62f7ff1e165d (patch) | |
tree | 7e6d85cee9453f6864d9067ac1c90213244ab4e0 /src/java/com/sun/gluegen/JavaMethodBindingEmitter.java | |
parent | 98da87017cb72785ca13f5b0657ce2c5d8a067c3 (diff) |
Intermediate checkin for FBO support in Java2D/JOGL bridge. Needed to
keep track of server-side OpenGL objects, like textures and display
lists, created by the end user to preserve the illusion of independent
contexts even though they will all share textures and display lists
with the Java2D OpenGL context in order to access its FBO. Added
GLObjectTracker class to track creation and destruction of these
objects and to support cleanup when the last referring context has
been destroyed. Modified GLContextShareSet to create and install
GLObjectTrackers when necessary and GLContext to ref and unref tracker
appropriately. Changed GlueGen's JavaPrologue and JavaEpilogue
directives (and their documentation) to perform argument name
substitution. Wrote documentation section on argument name
substitution and specified behavior for primitive arrays (converts to
string "array_name, array_name_offset" in substitution). Rephrased
GlueGen's RangeCheck directives in terms of JavaPrologue directives
and deleted old specialized code. Fixed bug in handling of VBO support
in GLConfiguration when JavaPrologue was present for affected
functions. Added JavaPrologue and JavaEpilogue directives to all
existing OpenGL routines creating server-side objects (though it's
possible some were missed) to call GLObjectTracker when necessary.
Added RangeCheck directives for these routines as well. Worked around
bug in JOGL demos where shutdownDemo() was being called more than once.
git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/../svn-server-sync/gluegen/trunk@13 a78bb65f-1512-4460-ba86-f6dc96a7bf27
Diffstat (limited to 'src/java/com/sun/gluegen/JavaMethodBindingEmitter.java')
-rw-r--r-- | src/java/com/sun/gluegen/JavaMethodBindingEmitter.java | 60 |
1 files changed, 7 insertions, 53 deletions
diff --git a/src/java/com/sun/gluegen/JavaMethodBindingEmitter.java b/src/java/com/sun/gluegen/JavaMethodBindingEmitter.java index 7e08977..0032b61 100644 --- a/src/java/com/sun/gluegen/JavaMethodBindingEmitter.java +++ b/src/java/com/sun/gluegen/JavaMethodBindingEmitter.java @@ -87,10 +87,6 @@ public class JavaMethodBindingEmitter extends FunctionEmitter // number of elements of the returned array. private String returnedArrayLengthExpression; - // Range-check expressions for various Buffer arguments - private Map/*<Integer, String>*/ rangeCheckExpressions; - private Map/*<Integer, String>*/ byteRangeCheckExpressions; - public JavaMethodBindingEmitter(MethodBinding binding, PrintWriter output, String runtimeExceptionType, @@ -133,8 +129,6 @@ public class JavaMethodBindingEmitter extends FunctionEmitter prologue = arg.prologue; epilogue = arg.epilogue; returnedArrayLengthExpression = arg.returnedArrayLengthExpression; - rangeCheckExpressions = arg.rangeCheckExpressions; - byteRangeCheckExpressions = arg.byteRangeCheckExpressions; } public final MethodBinding getBinding() { return binding; } @@ -199,14 +193,6 @@ public class JavaMethodBindingEmitter extends FunctionEmitter this.forImplementingMethodCall = impl; } - public void setRangeCheckExpressions(Map/*<Integer, String>*/ rangeChecks) { - this.rangeCheckExpressions = rangeChecks; - } - - public void setByteRangeCheckExpressions(Map/*<Integer, String>*/ rangeChecks) { - this.byteRangeCheckExpressions = rangeChecks; - } - protected void emitReturnType(PrintWriter writer) { writer.print(getReturnTypeString(false)); @@ -369,8 +355,10 @@ public class JavaMethodBindingEmitter extends FunctionEmitter protected void emitPrologueOrEpilogue(List/*<String>*/ code, PrintWriter writer) { if (code != null) { + String[] argumentNames = argumentNameArray(); for (Iterator iter = code.iterator(); iter.hasNext(); ) { - writer.println(" " + (String) iter.next()); + MessageFormat fmt = new MessageFormat((String) iter.next()); + writer.println(" " + fmt.format(argumentNames)); } } } @@ -438,44 +426,6 @@ public class JavaMethodBindingEmitter extends FunctionEmitter } } } - - emitManuallySpecifiedRangeChecks(rangeCheckExpressions, false, writer); - emitManuallySpecifiedRangeChecks(byteRangeCheckExpressions, true, writer); - } - - protected void emitManuallySpecifiedRangeChecks(Map/*<Integer, String>*/ rangeChecks, - boolean inBytes, - PrintWriter writer) { - if (rangeChecks == null) { - return; - } - - // Check lengths of arrays and buffers with user-specified checks - for (Iterator iter = rangeChecks.keySet().iterator(); iter.hasNext(); ) { - Integer argNumBox = (Integer) iter.next(); - int argNum = argNumBox.intValue(); - JavaType type = binding.getJavaArgumentType(argNum); - String argName = getArgumentName(argNum); - if (type.isPrimitiveArray()) { - String offsetArg = offsetArgName(argNum); - if (inBytes) { - throw new RuntimeException("Can not specify RangeCheckBytes for primitive array arguments (failed on function " + - binding.getName() + ", argument " + argName + ")"); - } - writer.println(" BufferFactory.rangeCheck(" + argName + ", " + offsetArg + ", " + - new MessageFormat((String) rangeChecks.get(argNumBox)).format(argumentNameArray()) + - ");"); - } else if (!type.isPrimitive()) { - // Assume it's a Buffer - writer.print(" BufferFactory.rangeCheck"); - if (inBytes) { - writer.print("Bytes"); - } - writer.println("(" + argName + ", " + - new MessageFormat((String) rangeChecks.get(argNumBox)).format(argumentNameArray()) + - ");"); - } - } } protected void emitCall(MethodBinding binding, PrintWriter writer, boolean direct) { @@ -700,6 +650,10 @@ public class JavaMethodBindingEmitter extends FunctionEmitter String[] argumentNames = new String[binding.getNumArguments()]; for (int i = 0; i < binding.getNumArguments(); i++) { argumentNames[i] = getArgumentName(i); + if (binding.getJavaArgumentType(i).isPrimitiveArray()) { + // Add on _offset argument in comma-separated expression + argumentNames[i] = argumentNames[i] + ", " + offsetArgName(i); + } } return argumentNames; } |