Completed GL32 support.

Added Generator support for wrapping GL pointers.
Added support for passing command-line arguments to tests.
Added test for ARB_sync functionality.
Temp fix to NV_shader_buffer_load.
This commit is contained in:
Ioannis Tsakpinis 2009-08-12 13:06:11 +00:00
parent aa928312b8
commit 6befeb63f2
13 changed files with 415 additions and 40 deletions

View File

@ -389,6 +389,7 @@
<java classname="${test.mainclass}" classpath="res:${lwjgl.lib}/lwjgl.jar:${lwjgl.lib}/lwjgl_util.jar:${lwjgl.lib}/lwjgl_test.jar:${lwjgl.lib}/jinput.jar" fork="true">
<sysproperty key="org.lwjgl.util.Debug" value="true"/>
<sysproperty key="java.library.path" value="${native_path_expanded}"/>
<arg line="${args}"/>
</java>
</target>

View File

@ -0,0 +1,49 @@
/*
* Copyright (c) 2002-2008 LWJGL Project
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions 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 'LWJGL' nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.lwjgl.opengl;
/**
* @author spasi <spasi@users.sourceforge.net>
*/
public final class GLSync implements PointerWrapper {
private final long sync;
GLSync(final long sync) {
this.sync = sync;
}
public long getPointer() {
return sync;
}
}

View File

@ -0,0 +1,39 @@
/*
* Copyright (c) 2002-2008 LWJGL Project
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions 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 'LWJGL' nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.lwjgl.opengl;
/** @author spasi <spasi@users.sourceforge.net> */
public interface PointerWrapper {
long getPointer();
}

View File

@ -0,0 +1,184 @@
/*
* Copyright (c) 2002-2008 LWJGL Project
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions 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 'LWJGL' nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.lwjgl.test.opengl;
import org.lwjgl.BufferUtils;
import org.lwjgl.LWJGLException;
import org.lwjgl.Sys;
import org.lwjgl.opengl.*;
import java.nio.IntBuffer;
import java.util.Random;
/**
* @author spasi <spasi@users.sourceforge.net>
*/
public final class SyncTest {
private SyncTest() {
}
public static void main(String[] args) {
runTest(args);
cleanup();
System.exit(0);
}
private static void runTest(String[] args) {
if ( args.length < 2 )
argsError("Insufficient number of arguments.");
int clears = 1;
int timeout = 0;
try {
clears = Integer.parseInt(args[0]);
timeout = Integer.parseInt(args[1]);
} catch (NumberFormatException e) {
argsError("Invalid number format.");
}
ContextAttribs ca = new ContextAttribs();
try {
DisplayMode[] modes = Display.getAvailableDisplayModes();
DisplayMode displayMode = chooseMode(modes, 1024, 768);
if ( displayMode == null )
displayMode = chooseMode(modes, 800, 600);
if ( displayMode == null )
displayMode = chooseMode(modes, 640, 480);
if ( displayMode == null )
kill("Failed to set an appropriate display mode.");
System.out.println("Setting display mode to: " + displayMode);
Display.setDisplayMode(displayMode);
Display.create(new PixelFormat(8, 24, 0), ca);
} catch (LWJGLException e) {
kill(e.getMessage());
}
System.out.println("\n---------\n");
final String version = GL11.glGetString(GL11.GL_VERSION);
System.out.println("GL Version: " + version);
System.out.println("ARB_sync: " + GLContext.getCapabilities().GL_ARB_sync);
if ( !GLContext.getCapabilities().OpenGL32 && !GLContext.getCapabilities().GL_ARB_sync )
kill("OpenGL3.2 or ARB_sync support is required for this test.");
System.out.println("\n---------\n");
System.out.println("Clearing the framebuffer a gazillion times...");
Random rand = new Random(System.currentTimeMillis());
for ( int i = 0; i < clears; i++ ) {
GL11.glClearColor(rand.nextFloat(), rand.nextFloat(), rand.nextFloat(), 1.0f);
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
}
GLSync sync = GL32.glFenceSync(GL32.GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
System.out.println("\nWaiting on fence...");
long time = Sys.getTime();
int status = GL32.glClientWaitSync(sync, 0, timeout < 0 ? GL32.GL_TIMEOUT_IGNORED : timeout * 1000 * 1000);
System.out.println("\nFence sync complete after: " + ((Sys.getTime() - time) / (double)Sys.getTimerResolution()) + " seconds.");
System.out.print("\nWait Status: ");
switch ( status ) {
case GL32.GL_ALREADY_SIGNALED:
System.out.println("ALREADY_SIGNALED");
break;
case GL32.GL_CONDITION_SATISFIED:
System.out.println("CONDITION_SATISFIED");
break;
case GL32.GL_TIMEOUT_EXPIRED:
System.out.println("TIMEOUT_EXPIRED");
break;
case GL32.GL_WAIT_FAILED:
System.out.println("WAIT_FAILED");
break;
default:
System.out.println("Unexpected wait status: 0x" + Integer.toHexString(status));
}
IntBuffer property = BufferUtils.createIntBuffer(1);
GL32.glGetSynciv(sync, GL32.GL_SYNC_STATUS, null, property);
System.out.println("Sync Status: " + (property.get(0) == GL32.GL_UNSIGNALED ? "UNSIGNALED" : "SIGNALED"));
GL32.glDeleteSync(sync);
int error = GL11.glGetError();
if ( error != 0 )
System.out.println("\nTest failed with OpenGL error: " + error);
else
System.out.println("\nTest completed successfully.");
}
private static DisplayMode chooseMode(DisplayMode[] modes, int width, int height) {
DisplayMode bestMode = null;
for ( int i = 0; i < modes.length; i++ ) {
DisplayMode mode = modes[i];
if ( mode.getWidth() == width && mode.getHeight() == height && mode.getFrequency() <= 85 ) {
if ( bestMode == null || (mode.getBitsPerPixel() >= bestMode.getBitsPerPixel() && mode.getFrequency() > bestMode.getFrequency()) )
bestMode = mode;
}
}
return bestMode;
}
private static void cleanup() {
if ( Display.isCreated() )
Display.destroy();
}
private static void argsError(final String msg) {
System.out.println("\nInvalid arguments error: " + msg);
System.out.println("\nUsage: SyncTest <clears> <timeout>:\n");
System.out.println("clears\t- Number of times to clear the framebuffer.");
System.out.println("timeout\t- WaitSync timeout in milliseconds.");
cleanup();
System.exit(-1);
}
static void kill(String reason) {
System.out.println("The SyncTest program was terminated because an error occured.\n");
System.out.println("Reason: " + (reason == null ? "Unknown" : reason));
cleanup();
System.exit(-1);
}
}

View File

@ -79,6 +79,10 @@ public final class VersionTest {
ca = ca.withDebug(true);
else if ( "fc".equalsIgnoreCase(args[i]) )
ca = ca.withForwardCompatible(true);
else if ( "core".equalsIgnoreCase(args[i]) )
ca = ca.withProfileCore(true);
else if ( "compatibility".equalsIgnoreCase(args[i]) )
ca = ca.withProfileCompatibility(true);
else
argsError("Unknown argument: \'" + args[i] + "\'");
}
@ -108,8 +112,12 @@ public final class VersionTest {
final String version = GL11.glGetString(GL11.GL_VERSION);
System.out.println("GL Version requested: " + majorInput + '.' + minorInput);
System.out.println("GL Version returned : " + version);
System.out.print("GL Version requested: " + majorInput + '.' + minorInput);
if ( ca.isProfileCore() )
System.out.print(" - Core Profile");
else if ( ca.isProfileCompatibility() )
System.out.print(" - Compatibility Profile");
System.out.println("\nGL Version returned : " + version);
final StringTokenizer version_tokenizer = new StringTokenizer(version, ". ");
@ -126,6 +134,9 @@ public final class VersionTest {
} else
System.out.println("\tThe requested version was returned. :)");
if ( ca.isProfileCompatibility() && !GLContext.getCapabilities().GL_ARB_compatibility )
System.out.println("\tThe driver does not support the Compatibility Profile.");
System.out.println("\n---------\n");
System.out.println("Debug mode: " + ca.isDebug());

View File

@ -41,6 +41,8 @@ package org.lwjgl.util.generator;
* $Id$
*/
import org.lwjgl.opengl.PointerWrapper;
import java.io.PrintWriter;
import java.nio.*;
import java.util.HashMap;
@ -82,7 +84,6 @@ public class GLTypeMap implements TypeMap {
native_types_to_primitive.put(GLuint64EXT.class, PrimitiveType.Kind.LONG);
native_types_to_primitive.put(GLint64.class, PrimitiveType.Kind.LONG);
native_types_to_primitive.put(GLuint64.class, PrimitiveType.Kind.LONG);
native_types_to_primitive.put(GLsync.class, PrimitiveType.Kind.LONG);
}
public PrimitiveType.Kind getPrimitiveTypeFromNativeType(Class native_type) {
@ -197,14 +198,14 @@ public class GLTypeMap implements TypeMap {
else if ( type.equals(DoubleBuffer.class) )
return new Class[] { GLclampd.class, GLdouble.class };
else if ( type.equals(LongBuffer.class) )
return new Class[] { GLint64EXT.class, GLuint64EXT.class, GLint64.class, GLuint64.class, GLsync.class };
return new Class[] { GLint64EXT.class, GLuint64EXT.class, GLint64.class, GLuint64.class };
else
return new Class[] { };
}
private static Class[] getValidPrimitiveTypes(Class type) {
if ( type.equals(long.class) )
return new Class[] { GLintptrARB.class, GLuint.class, GLintptr.class, GLsizeiptrARB.class, GLsizeiptr.class, GLint64EXT.class, GLuint64EXT.class, GLint64.class, GLuint64.class, GLsync.class };
return new Class[] { GLintptrARB.class, GLuint.class, GLintptr.class, GLsizeiptrARB.class, GLsizeiptr.class, GLint64EXT.class, GLuint64EXT.class, GLint64.class, GLuint64.class };
else if ( type.equals(int.class) )
return new Class[] { GLbitfield.class, GLenum.class, GLhandleARB.class, GLint.class, GLuint.class,
GLsizei.class };
@ -240,6 +241,8 @@ public class GLTypeMap implements TypeMap {
valid_types = getValidPrimitiveTypes(type);
else if ( String.class.equals(type) )
valid_types = new Class[] { GLubyte.class };
else if ( PointerWrapper.class.isAssignableFrom(type) )
valid_types = new Class[] { GLpointer.class };
else
valid_types = new Class[] { };
return valid_types;

View File

@ -0,0 +1,43 @@
/*
* Copyright (c) 2002-2008 LWJGL Project
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions 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 'LWJGL' nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.lwjgl.util.generator;
/**
* @author spasi <spasi@users.sourceforge.net>
*/
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
@Target({ElementType.PARAMETER, ElementType.METHOD})
public @interface GLpointer {
String value(); // The native pointer type.
}

View File

@ -41,6 +41,8 @@ package org.lwjgl.util.generator;
* $Id$
*/
import org.lwjgl.opengl.PointerWrapper;
import com.sun.mirror.apt.*;
import com.sun.mirror.declaration.*;
import com.sun.mirror.type.*;
@ -82,7 +84,7 @@ public class JavaMethodsGenerator {
Utils.printDocComment(writer, method);
writer.print("\tpublic static native ");
}
printResultType(writer, method);
printResultType(writer, method, true);
writer.print(" " + Utils.getSimpleNativeMethodName(method, generate_error_checks, context_specific));
if (mode == Mode.BUFFEROBJECT)
writer.print(Utils.BUFFER_OBJECT_METHOD_POSTFIX);
@ -131,7 +133,7 @@ public class JavaMethodsGenerator {
if (!first_parameter)
writer.print(", ");
first_parameter = false;
printResultType(writer, method);
printResultType(writer, method, native_stub);
writer.print(" " + Utils.CACHED_BUFFER_NAME);
}
return first_parameter;
@ -147,7 +149,10 @@ public class JavaMethodsGenerator {
throw new RuntimeException("type of " + param + " is not a nio Buffer parameter but is annotated as buffer object");
writer.print("long " + param.getSimpleName() + Utils.BUFFER_OBJECT_PARAMETER_POSTFIX);
} else {
writer.print(type_info.getType().getSimpleName());
if ( native_stub && param.getAnnotation(GLpointer.class) != null )
writer.print("long");
else
writer.print(type_info.getType().getSimpleName());
writer.print(" " + param.getSimpleName());
if (buffer_type != null && native_stub)
writer.print(", int " + param.getSimpleName() + NativeMethodStubsGenerator.BUFFER_POSITION_POSTFIX);
@ -179,7 +184,7 @@ public class JavaMethodsGenerator {
private static void printMethodWithMultiType(AnnotationProcessorEnvironment env, TypeMap type_map, PrintWriter writer, InterfaceDeclaration interface_decl, MethodDeclaration method, Map<ParameterDeclaration, TypeInfo> typeinfos_instance, Mode mode, boolean generate_error_checks, boolean context_specific) {
Utils.printDocComment(writer, method);
writer.print("\tpublic static ");
printResultType(writer, method);
printResultType(writer, method, false);
StripPostfix strip_annotation = method.getAnnotation(StripPostfix.class);
String method_name = method.getSimpleName();
if (strip_annotation != null && mode == Mode.NORMAL)
@ -204,8 +209,11 @@ public class JavaMethodsGenerator {
writer.print("\t\t");
boolean has_result = !result_type.equals(env.getTypeUtils().getVoidType());
if (has_result) {
printResultType(writer, method);
printResultType(writer, method, false);
writer.print(" " + Utils.RESULT_VAR_NAME + " = ");
if ( method.getAnnotation(GLpointer.class) != null )
writer.print("new " + method.getReturnType() + "(");
}
writer.print(Utils.getSimpleNativeMethodName(method, generate_error_checks, context_specific));
if (mode == Mode.BUFFEROBJECT)
@ -217,6 +225,8 @@ public class JavaMethodsGenerator {
writer.print(", ");
writer.print(Utils.FUNCTION_POINTER_VAR_NAME);
}
if ( has_result && method.getAnnotation(GLpointer.class) != null )
writer.print(")");
writer.println(");");
if (generate_error_checks && method.getAnnotation(NoErrorCheck.class) == null)
writer.println("\t\t" + type_map.getErrorCheckMethodName() + ";");
@ -373,6 +383,8 @@ public class JavaMethodsGenerator {
writer.print(" : 0");
} else
writer.print("0");
} else if ( param.getAnnotation(GLpointer.class) != null ) {
writer.print(".getPointer()");
}
}
}
@ -492,7 +504,10 @@ public class JavaMethodsGenerator {
writer.println("\t\tBufferChecks.checkNullTerminated(" + name + ");");
}
private static void printResultType(PrintWriter writer, MethodDeclaration method) {
writer.print(Utils.getMethodReturnType(method).toString());
private static void printResultType(PrintWriter writer, MethodDeclaration method, boolean native_stub) {
if ( native_stub && method.getAnnotation(GLpointer.class) != null )
writer.print("long");
else
writer.print(Utils.getMethodReturnType(method).toString());
}
}

View File

@ -71,6 +71,8 @@ public class NativeMethodStubsGenerator {
writer.print(", ");
if (mode == Mode.BUFFEROBJECT && param.getAnnotation(BufferObject.class) != null) {
writer.print("jlong " + param.getSimpleName() + Utils.BUFFER_OBJECT_PARAMETER_POSTFIX);
} else if ( param.getAnnotation(GLpointer.class) != null ) {
writer.print("jlong " + param.getSimpleName());
} else {
JNITypeTranslator translator = new JNITypeTranslator();
param.getType().accept(translator);
@ -81,14 +83,22 @@ public class NativeMethodStubsGenerator {
}
private static void generateMethodStub(AnnotationProcessorEnvironment env, TypeMap type_map, PrintWriter writer, String interface_name, MethodDeclaration method, Mode mode, boolean generate_error_checks, boolean context_specific) {
TypeMirror result_type = Utils.getMethodReturnType(method);
JNITypeTranslator translator = new JNITypeTranslator();
result_type.accept(translator);
if (!context_specific)
if ( !context_specific )
writer.print("static ");
else
writer.print("JNIEXPORT ");
writer.print(translator.getSignature() + " JNICALL ");
TypeMirror result_type = Utils.getMethodReturnType(method);
if ( method.getAnnotation(GLpointer.class) != null ) {
writer.print("jlong");
} else {
JNITypeTranslator translator = new JNITypeTranslator();
result_type.accept(translator);
writer.print(translator.getSignature());
}
writer.print(" JNICALL ");
writer.print(Utils.getQualifiedNativeMethodName(interface_name, method, generate_error_checks, context_specific));
if (mode == Mode.BUFFEROBJECT)
writer.print(Utils.BUFFER_OBJECT_METHOD_POSTFIX);
@ -140,8 +150,11 @@ public class NativeMethodStubsGenerator {
writer.print("safeNewBufferCached(env, ");
else
writer.print("safeNewBuffer(env, ");
} else if (String.class.equals(java_result_type))
} else if (String.class.equals(java_result_type)) {
writer.print("NewStringNativeUnsigned(env, ");
} else if ( method.getAnnotation(GLpointer.class) != null ) {
writer.print("(jlong)");
}
writer.print(Utils.RESULT_VAR_NAME);
if (Buffer.class.isAssignableFrom(java_result_type)) {
writer.print(", ");
@ -176,6 +189,8 @@ public class NativeMethodStubsGenerator {
writer.print(translator.getSignature());
writer.print("*)");
}
if ( param.getAnnotation(GLpointer.class) != null )
writer.print("(" + param.getAnnotation(GLpointer.class).value() + ")");
if (param.getAnnotation(Result.class) != null || is_indirect)
writer.print("&");
if (param.getAnnotation(Result.class) != null) {

View File

@ -42,6 +42,8 @@ package org.lwjgl.util.generator;
* $Id$
*/
import org.lwjgl.opengl.PointerWrapper;
import com.sun.mirror.declaration.*;
import com.sun.mirror.type.*;
import com.sun.mirror.util.*;
@ -77,8 +79,14 @@ public class NativeTypeTranslator implements TypeVisitor {
StringBuilder signature = new StringBuilder();
if (declaration.getAnnotation(Const.class) != null)
signature.append("const ");
// Use the name of the native type annotation as the C type name
signature.append(getAnnotationType().getSimpleName());
if ( declaration.getAnnotation(GLpointer.class) != null ) {
signature.append(declaration.getAnnotation(GLpointer.class).value());
} else {
// Use the name of the native type annotation as the C type name
signature.append(getAnnotationType().getSimpleName());
}
if (is_indirect)
signature.append(" *");
return signature.toString();
@ -131,6 +139,8 @@ public class NativeTypeTranslator implements TypeVisitor {
}
public void visitClassType(ClassType t) {
is_indirect = true;
Class<?> c = getClassFromType(t);
if (String.class.equals(c)) {
native_types = new ArrayList<Class>();
@ -141,9 +151,13 @@ public class NativeTypeTranslator implements TypeVisitor {
} else if (Buffer.class.isAssignableFrom(c)) {
PrimitiveType.Kind kind = getPrimitiveKindFromBufferClass(c);
getNativeTypeFromAnnotatedPrimitiveType(kind);
} else if ( PointerWrapper.class.isAssignableFrom(c) ) {
native_types = new ArrayList<Class>();
native_types.add(GLpointer.class);
is_indirect = false;
} else
throw new RuntimeException(t + " is not allowed");
is_indirect = true;
}
public void visitPrimitiveType(PrimitiveType t) {

View File

@ -70,22 +70,22 @@ public interface ARB_sync {
int GL_CONDITION_SATISFIED = 0x911C;
int GL_WAIT_FAILED = 0x911D;
@GLsync
long glFenceSync(@GLenum int condition, @GLbitfield int flags);
@GLpointer("GLsync")
GLSync glFenceSync(@GLenum int condition, @GLbitfield int flags);
boolean glIsSync(@GLsync long sync);
boolean glIsSync(@GLpointer("GLsync") GLSync sync);
void glDeleteSync(@GLsync long sync);
void glDeleteSync(@GLpointer("GLsync") GLSync sync);
@GLenum
int glClientWaitSync(@GLsync long sync, @GLbitfield int flags, @GLuint64 long timeout);
int glClientWaitSync(@GLpointer("GLsync") GLSync sync, @GLbitfield int flags, @GLuint64 long timeout);
void glWaitSync(@GLsync long sync, @GLbitfield int flags, @GLuint64 long timeout);
void glWaitSync(@GLpointer("GLsync") GLSync sync, @GLbitfield int flags, @GLuint64 long timeout);
@StripPostfix("params")
void glGetInteger64v(@GLenum int pname, @OutParameter @Check("1") @GLint64 LongBuffer params);
void glGetSynciv(@GLsync long sync, @GLenum int pname,
void glGetSynciv(@GLpointer("GLsync") GLSync sync, @GLenum int pname,
@AutoSize("values") @GLsizei int bufSize,
@OutParameter @GLsizei @Check(value = "1", canBeNull = true) IntBuffer length,
@OutParameter IntBuffer values);

View File

@ -35,8 +35,8 @@ import org.lwjgl.util.generator.*;
import java.nio.Buffer;
import java.nio.FloatBuffer;
import java.nio.LongBuffer;
import java.nio.IntBuffer;
import java.nio.LongBuffer;
public interface GL32 {
@ -296,23 +296,24 @@ public interface GL32 {
int GL_CONDITION_SATISFIED = 0x911C;
int GL_WAIT_FAILED = 0x911D;
/*
@GLsync long glFenceSync(@GLenum int condition, @GLbitfield int flags);
@GLpointer("GLsync")
GLSync glFenceSync(@GLenum int condition, @GLbitfield int flags);
boolean glIsSync(@GLsync long sync);
boolean glIsSync(@GLpointer("GLsync") GLSync sync);
void glDeleteSync(@GLsync long sync);
void glDeleteSync(@GLpointer("GLsync") GLSync sync);
@GLenum int glClientWaitSync(@GLsync long sync, @GLbitfield int flags, @GLuint64 long timeout);
@GLenum
int glClientWaitSync(@GLpointer("GLsync") GLSync sync, @GLbitfield int flags, @GLuint64 long timeout);
void glWaitSync(@GLsync long sync, @GLbitfield int flags, @GLuint64 long timeout);
void glWaitSync(@GLpointer("GLsync") GLSync sync, @GLbitfield int flags, @GLuint64 long timeout);
@StripPostfix("params")
void glGetInteger64v(@GLenum int pname, @OutParameter @Check("1") @GLint64 LongBuffer params);
void glGetSynciv(@GLsync long sync, @GLenum int pname,
void glGetSynciv(@GLpointer("GLsync") GLSync sync, @GLenum int pname,
@AutoSize("values") @GLsizei int bufSize,
@OutParameter @GLsizei @Check(value = "1", canBeNull = true) IntBuffer length,
@OutParameter IntBuffer values);
*/
}

View File

@ -55,9 +55,9 @@ public interface NV_shader_buffer_load {
boolean glIsBufferResidentNV(@GLenum int target);
void glNamedMakeBufferResidentNV(@GLuint int buffer, @GLenum int access);
void glNamedMakeBufferNonResidentNV(@GLuint int buffer);
// TODO: These two are currently missing from the latest NV drivers, check again sometime.
//void glNamedMakeBufferResidentNV(@GLuint int buffer, @GLenum int access);
//void glNamedMakeBufferNonResidentNV(@GLuint int buffer);
boolean glIsNamedBufferResidentNV(@GLuint int buffer);