diff options
author | Kenneth Russel <[email protected]> | 2003-08-07 19:53:38 +0000 |
---|---|---|
committer | Kenneth Russel <[email protected]> | 2003-08-07 19:53:38 +0000 |
commit | db0bdc71eec40d7fcd22ddcea87178c8805d4312 (patch) | |
tree | d04e66f83bcf5eeeaa5283f17a86f9093d678e1c /src/net/java/games/gluegen/JavaMethodBindingImplEmitter.java | |
parent | dd16a976876a779dc0ee6da9ebf5ada29f5781c7 (diff) |
Changed glMapBufferARB's implementation to return the same ByteBuffer
if the address and capacity of the underlying buffer object haven't
changed. This saves applications the cost of re-slicing the returned
buffer each frame and avoids allocation of one or more finalizable
objects per frame. Moved GlueGen's checking of whether a passed buffer
is direct up into Java from C to be able to handle buffers that wrap
the NULL pointer (needed for the "buffer offsets" used by
ARB_vertex_buffer_object). Ported the VertexArrayRange demo to
VertexBufferObject. Currently slower than VertexArrayRange but needs
to be updated to triangulate the geometry more efficiently (currently
the triangle strips are only 48 vertices long) and to move the indices
into fast RAM.
git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/svn-server-sync/jogl/trunk@47 232f8b59-042b-4e1e-8c03-345bb8c30851
Diffstat (limited to 'src/net/java/games/gluegen/JavaMethodBindingImplEmitter.java')
-rw-r--r-- | src/net/java/games/gluegen/JavaMethodBindingImplEmitter.java | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/net/java/games/gluegen/JavaMethodBindingImplEmitter.java b/src/net/java/games/gluegen/JavaMethodBindingImplEmitter.java index 2ec2723bd..78a4a6ced 100644 --- a/src/net/java/games/gluegen/JavaMethodBindingImplEmitter.java +++ b/src/net/java/games/gluegen/JavaMethodBindingImplEmitter.java @@ -89,10 +89,10 @@ public class JavaMethodBindingImplEmitter extends JavaMethodBindingEmitter } protected void emitPreCallSetup(MethodBinding binding, PrintWriter writer) { - emitArrayLengthChecks(binding, writer); + emitArrayLengthAndNIOBufferChecks(binding, writer); } - protected void emitArrayLengthChecks(MethodBinding binding, PrintWriter writer) { + protected void emitArrayLengthAndNIOBufferChecks(MethodBinding binding, PrintWriter writer) { // Check lengths of any incoming arrays if necessary for (int i = 0; i < binding.getNumArguments(); i++) { Type type = binding.getCArgumentType(i); @@ -101,6 +101,12 @@ public class JavaMethodBindingImplEmitter extends JavaMethodBindingEmitter writer.println(" if (" + binding.getArgumentName(i) + ".length < " + arrayType.getLength() + ")"); writer.println(" throw new " + getRuntimeExceptionType() + "(\"Length of array \\\"" + binding.getArgumentName(i) + "\\\" was less than the required " + arrayType.getLength() + "\");"); + } else { + if (binding.getJavaArgumentType(i).isNIOBuffer()) { + writer.println(" if (!BufferFactory.isDirect(" + binding.getArgumentName(i) + "))"); + writer.println(" throw new " + getRuntimeExceptionType() + "(\"Argument \\\"" + + binding.getArgumentName(i) + "\\\" was not a direct buffer\");"); + } } } } |