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:
parent
aa928312b8
commit
6befeb63f2
|
@ -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>
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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();
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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());
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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.
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
*/
|
||||
|
||||
}
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue