From 4b93bb531605fa082bdad6452d3e6a51cbb15bed Mon Sep 17 00:00:00 2001 From: Kenneth Russel Date: Mon, 4 Oct 2004 22:55:39 +0000 Subject: Fixed Issue 71: glMultiDrawElements() is missing Added support to GlueGen to handle pointer-to-pointer types for primitive types, like void** and int**. These are exposed as arrays of appropriately-typed direct java.nio Buffers for simplicity. Checks for whether the buffers are direct are performed and null checks for the individual Buffer objects are done as well. Fixed an existing bug in the conversion of outgoing char** arguments in C to String[] in Java where null checks were missing; this showed up as crashes in glShaderSourceARB. Exposed glMultiDrawElements and several other less-common entry points taking void** arguments. git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/svn-server-sync/jogl/trunk@154 232f8b59-042b-4e1e-8c03-345bb8c30851 --- .../java/games/gluegen/JavaMethodBindingImplEmitter.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src/net/java/games/gluegen/JavaMethodBindingImplEmitter.java') diff --git a/src/net/java/games/gluegen/JavaMethodBindingImplEmitter.java b/src/net/java/games/gluegen/JavaMethodBindingImplEmitter.java index 78a4a6ced..2701bc2ec 100644 --- a/src/net/java/games/gluegen/JavaMethodBindingImplEmitter.java +++ b/src/net/java/games/gluegen/JavaMethodBindingImplEmitter.java @@ -102,10 +102,22 @@ public class JavaMethodBindingImplEmitter extends JavaMethodBindingEmitter writer.println(" throw new " + getRuntimeExceptionType() + "(\"Length of array \\\"" + binding.getArgumentName(i) + "\\\" was less than the required " + arrayType.getLength() + "\");"); } else { - if (binding.getJavaArgumentType(i).isNIOBuffer()) { + JavaType javaType = binding.getJavaArgumentType(i); + if (javaType.isNIOBuffer()) { writer.println(" if (!BufferFactory.isDirect(" + binding.getArgumentName(i) + "))"); writer.println(" throw new " + getRuntimeExceptionType() + "(\"Argument \\\"" + binding.getArgumentName(i) + "\\\" was not a direct buffer\");"); + } else if (javaType.isNIOBufferArray()) { + String argName = binding.getArgumentName(i); + // Check direct buffer properties of all buffers within + writer.println(" if (" + argName + " != null) {"); + writer.println(" for (int _ctr = 0; _ctr < " + argName + ".length; _ctr++) {"); + writer.println(" if (!BufferFactory.isDirect(" + argName + "[_ctr])) {"); + writer.println(" throw new " + getRuntimeExceptionType() + "(\"Element \" + _ctr + \" of argument \\\"" + + binding.getArgumentName(i) + "\\\" was not a direct buffer\");"); + writer.println(" }"); + writer.println(" }"); + writer.println(" }"); } } } -- cgit v1.2.3