From 0b0e185f4779f518ea855e4948830da7c676f9bb Mon Sep 17 00:00:00 2001 From: Ioannis Tsakpinis Date: Sat, 16 Jul 2011 16:05:37 +0000 Subject: [PATCH] Moved all pointer arithmetic to Java code. --- src/java/org/lwjgl/MemoryUtil.java | 243 ++++++++++++++++++ src/java/org/lwjgl/MemoryUtilSun.java | 135 ++++++++++ src/java/org/lwjgl/PointerBuffer.java | 2 +- src/java/org/lwjgl/opencl/APIUtil.java | 62 +++-- .../org/lwjgl/opencl/InfoUtilFactory.java | 14 +- src/java/org/lwjgl/opengl/APIUtil.java | 33 ++- src/java/org/lwjgl/opengles/APIUtil.java | 33 ++- .../lwjgl/test/mapped/MappedObjectTests3.java | 4 + .../test/opengl/sprites/SpriteShootout.java | 126 +++++---- .../test/opengl/sprites/SpriteShootout2P.java | 31 +++ .../test/opengl/sprites/SpriteShootoutCL.java | 31 +++ .../lwjgl/test/opengl/sprites/StreamVBO.java | 144 +++++++++++ .../util/generator/JNITypeTranslator.java | 18 +- .../util/generator/JavaMethodsGenerator.java | 53 +--- .../generator/NativeMethodStubsGenerator.java | 25 +- src/templates/org/lwjgl/opencl/CL10.java | 22 +- src/templates/org/lwjgl/opencl/CL10GL.java | 4 +- .../lwjgl/opencl/EXT_migrate_memobject.java | 2 +- .../org/lwjgl/opengl/AMD_name_gen_delete.java | 2 +- .../lwjgl/opengl/AMD_performance_monitor.java | 10 +- .../org/lwjgl/opengl/APPLE_fence.java | 2 +- .../opengl/APPLE_vertex_array_object.java | 2 +- .../org/lwjgl/opengl/ARB_buffer_object.java | 2 +- .../org/lwjgl/opengl/ARB_draw_buffers.java | 2 +- .../lwjgl/opengl/ARB_framebuffer_object.java | 4 +- .../org/lwjgl/opengl/ARB_occlusion_query.java | 2 +- .../org/lwjgl/opengl/ARB_program.java | 2 +- .../org/lwjgl/opengl/ARB_sampler_objects.java | 2 +- .../opengl/ARB_separate_shader_objects.java | 2 +- .../org/lwjgl/opengl/ARB_shader_objects.java | 24 +- .../opengl/ARB_shading_language_include.java | 6 +- .../lwjgl/opengl/ARB_transform_feedback2.java | 2 +- .../lwjgl/opengl/ARB_vertex_array_object.java | 2 +- .../org/lwjgl/opengl/ARB_vertex_shader.java | 18 +- .../org/lwjgl/opengl/ATI_draw_buffers.java | 2 +- .../lwjgl/opengl/EXT_direct_state_access.java | 8 +- .../lwjgl/opengl/EXT_framebuffer_object.java | 4 +- .../org/lwjgl/opengl/EXT_texture_integer.java | 4 +- .../lwjgl/opengl/EXT_transform_feedback.java | 2 +- src/templates/org/lwjgl/opengl/GL11.java | 2 +- src/templates/org/lwjgl/opengl/GL15.java | 4 +- src/templates/org/lwjgl/opengl/GL20.java | 46 ++-- src/templates/org/lwjgl/opengl/GL30.java | 12 +- src/templates/org/lwjgl/opengl/GL31.java | 6 +- src/templates/org/lwjgl/opengl/GL32.java | 2 +- src/templates/org/lwjgl/opengl/GL33.java | 2 +- src/templates/org/lwjgl/opengl/GL40.java | 6 +- src/templates/org/lwjgl/opengl/GL41.java | 4 +- src/templates/org/lwjgl/opengl/NV_fence.java | 2 +- .../org/lwjgl/opengl/NV_occlusion_query.java | 2 +- .../org/lwjgl/opengl/NV_program.java | 4 +- .../lwjgl/opengl/NV_transform_feedback.java | 18 +- .../lwjgl/opengl/NV_transform_feedback2.java | 2 +- .../opengles/AMD_performance_monitor.java | 10 +- .../org/lwjgl/opengles/ARB_draw_buffers.java | 2 +- src/templates/org/lwjgl/opengles/GLES20.java | 52 ++-- .../org/lwjgl/opengles/NV_draw_buffers.java | 2 +- .../org/lwjgl/opengles/NV_fence.java | 2 +- .../opengles/OES_framebuffer_object.java | 4 +- .../opengles/OES_vertex_array_object.java | 2 +- .../lwjgl/opengles/QCOM_driver_control.java | 2 +- 61 files changed, 944 insertions(+), 330 deletions(-) create mode 100644 src/java/org/lwjgl/MemoryUtil.java create mode 100644 src/java/org/lwjgl/MemoryUtilSun.java create mode 100644 src/java/org/lwjgl/test/opengl/sprites/StreamVBO.java diff --git a/src/java/org/lwjgl/MemoryUtil.java b/src/java/org/lwjgl/MemoryUtil.java new file mode 100644 index 00000000..dfdc4937 --- /dev/null +++ b/src/java/org/lwjgl/MemoryUtil.java @@ -0,0 +1,243 @@ +/* + * Copyright (c) 2002-2011 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; + +import java.lang.reflect.Field; +import java.nio.*; + +/** + * [INTERNAL USE ONLY] + *

+ * This class provides utility methods for passing buffer addresses to JNI API calls. + * + * @author Spasi + */ +public final class MemoryUtil { + + private static final Accessor memUtil; + + static { + Accessor util; + try { + // Depends on java.nio.Buffer#address and sun.misc.Unsafe + //util = loadAccessor("org.lwjgl.MemoryUtilSun$AccessorUnsafe"); + util = new AccessorJNI(); + } catch (Exception e0) { + try { + // Depends on java.nio.Buffer#address and sun.reflect.FieldAccessor + util = loadAccessor("org.lwjgl.MemoryUtilSun$AccessorReflectFast"); + } catch (Exception e1) { + try { + // Depends on java.nio.Buffer#address + util = new AccessorReflect(); + } catch (Exception e2) { + LWJGLUtil.log("Unsupported JVM detected, this will likely result in low performance. Please inform LWJGL developers."); + util = new AccessorJNI(); + } + } + } + + LWJGLUtil.log("MemoryUtil Accessor: " + util.getClass().getSimpleName()); + memUtil = util; + + /* + BENCHMARK RESULTS - Oracle Server VM: + + Unsafe: 4ns + ReflectFast: 8ns + Reflect: 10ns + JNI: 82ns + + BENCHMARK RESULTS - Oracle Client VM: + + Unsafe: 5ns + ReflectFast: 81ns + Reflect: 85ns + JNI: 87ns + + On non-Oracle VMs, Unsafe should be the fastest implementation as well. In the absence + of Unsafe, performance will depend on how reflection and JNI are implemented. For now + we'll go with what we see on the Oracle VM (that is, we'll prefer reflection over JNI). + */ + } + + private MemoryUtil() { + } + + public static String wrap(final String test) { + return "MemoryUtil.getAddress(" + test + ")"; + } + + /** + * Returns the memory address of the specified buffer. [INTERNAL USE ONLY] + * + * @param buffer the buffer + * + * @return the memory address + */ + public static long getAddress0(Buffer buffer) { return memUtil.getAddress(buffer); } + + public static long getAddress0Safe(Buffer buffer) { return buffer == null ? 0L : memUtil.getAddress(buffer); } + + public static long getAddress0(PointerBuffer buffer) { return memUtil.getAddress(buffer.getBuffer()); } + + public static long getAddress0Safe(PointerBuffer buffer) { return buffer == null ? 0L : memUtil.getAddress(buffer.getBuffer()); } + + // --- [ API utilities ] --- + + public static long getAddress(ByteBuffer buffer) { return getAddress(buffer, buffer.position()); } + + public static long getAddress(ByteBuffer buffer, int position) { return getAddress0(buffer) + position; } + + public static long getAddress(ShortBuffer buffer) { return getAddress(buffer, buffer.position()); } + + public static long getAddress(ShortBuffer buffer, int position) { return getAddress0(buffer) + (position << 1); } + + public static long getAddress(CharBuffer buffer) { return getAddress(buffer, buffer.position()); } + + public static long getAddress(CharBuffer buffer, int position) { return getAddress0(buffer) + (position << 1); } + + public static long getAddress(IntBuffer buffer) { return getAddress(buffer, buffer.position()); } + + public static long getAddress(IntBuffer buffer, int position) { return getAddress0(buffer) + (position << 2); } + + public static long getAddress(FloatBuffer buffer) { return getAddress(buffer, buffer.position()); } + + public static long getAddress(FloatBuffer buffer, int position) { return getAddress0(buffer) + (position << 2); } + + public static long getAddress(LongBuffer buffer) { return getAddress(buffer, buffer.position()); } + + public static long getAddress(LongBuffer buffer, int position) { return getAddress0(buffer) + (position << 3); } + + public static long getAddress(DoubleBuffer buffer) { return getAddress(buffer, buffer.position()); } + + public static long getAddress(DoubleBuffer buffer, int position) { return getAddress0(buffer) + (position << 3); } + + public static long getAddress(PointerBuffer buffer) { return getAddress(buffer, buffer.position()); } + + public static long getAddress(PointerBuffer buffer, int position) { return getAddress0(buffer) + (position * PointerBuffer.getPointerSize()); } + + // --- [ API utilities - Safe ] --- + + public static long getAddressSafe(ByteBuffer buffer) { return buffer == null ? 0L : getAddress(buffer); } + + public static long getAddressSafe(ByteBuffer buffer, int position) { return buffer == null ? 0L : getAddress(buffer, position); } + + public static long getAddressSafe(ShortBuffer buffer) { return buffer == null ? 0L : getAddress(buffer); } + + public static long getAddressSafe(ShortBuffer buffer, int position) { return buffer == null ? 0L : getAddress(buffer, position); } + + public static long getAddressSafe(CharBuffer buffer) { return buffer == null ? 0L : getAddress(buffer); } + + public static long getAddressSafe(CharBuffer buffer, int position) { return buffer == null ? 0L : getAddress(buffer, position); } + + public static long getAddressSafe(IntBuffer buffer) { return buffer == null ? 0L : getAddress(buffer); } + + public static long getAddressSafe(IntBuffer buffer, int position) { return buffer == null ? 0L : getAddress(buffer, position); } + + public static long getAddressSafe(FloatBuffer buffer) { return buffer == null ? 0L : getAddress(buffer); } + + public static long getAddressSafe(FloatBuffer buffer, int position) { return buffer == null ? 0L : getAddress(buffer, position); } + + public static long getAddressSafe(LongBuffer buffer) { return buffer == null ? 0L : getAddress(buffer); } + + public static long getAddressSafe(LongBuffer buffer, int position) { return buffer == null ? 0L : getAddress(buffer, position); } + + public static long getAddressSafe(DoubleBuffer buffer) { return buffer == null ? 0L : getAddress(buffer); } + + public static long getAddressSafe(DoubleBuffer buffer, int position) { return buffer == null ? 0L : getAddress(buffer, position); } + + public static long getAddressSafe(PointerBuffer buffer) { return buffer == null ? 0L : getAddress(buffer); } + + public static long getAddressSafe(PointerBuffer buffer, int position) { return buffer == null ? 0L : getAddress(buffer, position); } + + interface Accessor { + + long getAddress(Buffer buffer); + + } + + private static Accessor loadAccessor(final String className) throws Exception { + return (Accessor)Class.forName(className).newInstance(); + } + + /** Default implementation. */ + private static class AccessorJNI implements Accessor { + + public long getAddress(final Buffer buffer) { + return BufferUtils.getBufferAddress(buffer); + } + + } + + /** Implementation using reflection on ByteBuffer. */ + private static class AccessorReflect implements Accessor { + + private final Field address; + + AccessorReflect() { + try { + address = getAddressField(); + } catch (NoSuchFieldException e) { + throw new UnsupportedOperationException(e); + } + address.setAccessible(true); + } + + public long getAddress(final Buffer buffer) { + try { + return address.getLong(buffer); + } catch (IllegalAccessException e) { + // cannot happen + return 0L; + } + } + + } + + static Field getAddressField() throws NoSuchFieldException { + return getDeclaredFieldRecursive(ByteBuffer.class, "address"); + } + + private static Field getDeclaredFieldRecursive(Class type, final String fieldName) throws NoSuchFieldException { + while ( type != null ) { + try { + return type.getDeclaredField(fieldName); + } catch (NoSuchFieldException e) { + type = type.getSuperclass(); + } + } + + throw new NoSuchFieldException(fieldName + " does not exist in " + type.getSimpleName() + " or any of its superclasses."); + } + +} \ No newline at end of file diff --git a/src/java/org/lwjgl/MemoryUtilSun.java b/src/java/org/lwjgl/MemoryUtilSun.java new file mode 100644 index 00000000..683f372b --- /dev/null +++ b/src/java/org/lwjgl/MemoryUtilSun.java @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2002-2011 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; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.nio.Buffer; + +import sun.misc.Unsafe; +import sun.reflect.FieldAccessor; + +/** + * MemoryUtil.Accessor implementations that depend on sun.misc. + * We use reflection to grab these, so that we can compile on JDKs + * that do not support sun.misc. + * + * @author Spasi + */ +final class MemoryUtilSun { + + private MemoryUtilSun() { + } + + /** Implementation using sun.misc.Unsafe. */ + private static class AccessorUnsafe implements MemoryUtil.Accessor { + + private final Unsafe unsafe; + private final long address; + + AccessorUnsafe() { + try { + unsafe = getUnsafeInstance(); + address = unsafe.objectFieldOffset(MemoryUtil.getAddressField()); + } catch (Exception e) { + throw new UnsupportedOperationException(e); + } + } + + public long getAddress(final Buffer buffer) { + return unsafe.getLong(buffer, address); + } + + private static Unsafe getUnsafeInstance() { + final Field[] fields = Unsafe.class.getDeclaredFields(); + + /* + Different runtimes use different names for the Unsafe singleton, + so we cannot use .getDeclaredField and we scan instead. For example: + + Oracle: theUnsafe + PERC : m_unsafe_instance + Android: THE_ONE + */ + for ( Field field : fields ) { + if ( !field.getType().equals(Unsafe.class) ) + continue; + + final int modifiers = field.getModifiers(); + if ( !(Modifier.isStatic(modifiers) && Modifier.isFinal(modifiers)) ) + continue; + + field.setAccessible(true); + try { + return (Unsafe)field.get(null); + } catch (IllegalAccessException e) { + // ignore + } + break; + } + + throw new UnsupportedOperationException(); + } + + } + + /** Implementation using reflection on ByteBuffer, FieldAccessor is used directly. */ + private static class AccessorReflectFast implements MemoryUtil.Accessor { + + private final FieldAccessor addressAccessor; + + AccessorReflectFast() { + Field address; + try { + address = MemoryUtil.getAddressField(); + } catch (NoSuchFieldException e) { + throw new UnsupportedOperationException(e); + } + address.setAccessible(true); + + try { + Method m = Field.class.getDeclaredMethod("acquireFieldAccessor", boolean.class); + m.setAccessible(true); + addressAccessor = (FieldAccessor)m.invoke(address, true); + } catch (Exception e) { + throw new UnsupportedOperationException(e); + } + } + + public long getAddress(final Buffer buffer) { + return addressAccessor.getLong(buffer); + } + + } + +} \ No newline at end of file diff --git a/src/java/org/lwjgl/PointerBuffer.java b/src/java/org/lwjgl/PointerBuffer.java index c1a02b9a..1f74b942 100644 --- a/src/java/org/lwjgl/PointerBuffer.java +++ b/src/java/org/lwjgl/PointerBuffer.java @@ -99,7 +99,7 @@ public class PointerBuffer implements Comparable { throw new IllegalArgumentException("The source buffer is not direct."); final int alignment = is64Bit ? 8 : 4; - if ( (BufferUtils.getBufferAddress(source) + source.position()) % alignment != 0 || source.remaining() % alignment != 0 ) + if ( (MemoryUtil.getAddress0(source) + source.position()) % alignment != 0 || source.remaining() % alignment != 0 ) throw new IllegalArgumentException("The source buffer is not aligned to " + alignment + " bytes."); } diff --git a/src/java/org/lwjgl/opencl/APIUtil.java b/src/java/org/lwjgl/opencl/APIUtil.java index a5f96435..3c19c302 100644 --- a/src/java/org/lwjgl/opencl/APIUtil.java +++ b/src/java/org/lwjgl/opencl/APIUtil.java @@ -31,9 +31,7 @@ */ package org.lwjgl.opencl; -import org.lwjgl.BufferUtils; -import org.lwjgl.LWJGLUtil; -import org.lwjgl.PointerBuffer; +import org.lwjgl.*; import org.lwjgl.opencl.FastLongMap.Entry; import java.nio.*; @@ -53,7 +51,7 @@ import static org.lwjgl.opencl.KHRGLSharing.*; */ final class APIUtil { - private static final int INITIAL_BUFFER_SIZE = 256; + private static final int INITIAL_BUFFER_SIZE = 256; private static final int INITIAL_LENGTHS_SIZE = 4; private static final int BUFFERS_SIZE = 32; @@ -223,10 +221,10 @@ final class APIUtil { * * @return the String as a ByteBuffer */ - static ByteBuffer getBuffer(final CharSequence string) { + static long getBuffer(final CharSequence string) { final ByteBuffer buffer = encode(getBufferByte(string.length()), string); buffer.flip(); - return buffer; + return MemoryUtil.getAddress0(buffer); } /** @@ -236,10 +234,10 @@ final class APIUtil { * * @return the String as a ByteBuffer */ - static ByteBuffer getBuffer(final CharSequence string, final int offset) { + static long getBuffer(final CharSequence string, final int offset) { final ByteBuffer buffer = encode(getBufferByteOffset(offset + string.length()), string); buffer.flip(); - return buffer; + return MemoryUtil.getAddress(buffer); } /** @@ -249,11 +247,11 @@ final class APIUtil { * * @return the String as a ByteBuffer */ - static ByteBuffer getBufferNT(final CharSequence string) { + static long getBufferNT(final CharSequence string) { final ByteBuffer buffer = encode(getBufferByte(string.length() + 1), string); buffer.put((byte)0); buffer.flip(); - return buffer; + return MemoryUtil.getAddress0(buffer); } static int getTotalLength(final CharSequence[] strings) { @@ -271,14 +269,14 @@ final class APIUtil { * * @return the Strings as a ByteBuffer */ - static ByteBuffer getBuffer(final CharSequence[] strings) { + static long getBuffer(final CharSequence[] strings) { final ByteBuffer buffer = getBufferByte(getTotalLength(strings)); for ( CharSequence string : strings ) encode(buffer, string); buffer.flip(); - return buffer; + return MemoryUtil.getAddress0(buffer); } /** @@ -288,7 +286,7 @@ final class APIUtil { * * @return the Strings as a ByteBuffer */ - static ByteBuffer getBufferNT(final CharSequence[] strings) { + static long getBufferNT(final CharSequence[] strings) { final ByteBuffer buffer = getBufferByte(getTotalLength(strings) + strings.length); for ( CharSequence string : strings ) { @@ -297,7 +295,7 @@ final class APIUtil { } buffer.flip(); - return buffer; + return MemoryUtil.getAddress0(buffer); } /** @@ -307,14 +305,14 @@ final class APIUtil { * * @return the String lengths in a PointerBuffer */ - static PointerBuffer getLengths(final CharSequence[] strings) { + static long getLengths(final CharSequence[] strings) { PointerBuffer buffer = getLengths(strings.length); for ( CharSequence string : strings ) buffer.put(string.length()); buffer.flip(); - return buffer; + return MemoryUtil.getAddress0(buffer); } /** @@ -324,14 +322,14 @@ final class APIUtil { * * @return the buffer lengths in a PointerBuffer */ - static PointerBuffer getLengths(final ByteBuffer[] buffers) { + static long getLengths(final ByteBuffer[] buffers) { PointerBuffer lengths = getLengths(buffers.length); for ( ByteBuffer buffer : buffers ) lengths.put(buffer.remaining()); lengths.flip(); - return lengths; + return MemoryUtil.getAddress0(lengths); } static int getSize(final PointerBuffer lengths) { @@ -342,14 +340,22 @@ final class APIUtil { return (int)size; } + static long getPointer(final PointerWrapper pointer) { + return MemoryUtil.getAddress0(getBufferPointer().put(0, pointer)); + } + + static long getPointerSafe(final PointerWrapper pointer) { + return MemoryUtil.getAddress0(getBufferPointer().put(0, pointer == null ? 0L : pointer.getPointer())); + } + private static class Buffers { final ShortBuffer shorts; - final IntBuffer ints; - final IntBuffer intsDebug; - final LongBuffer longs; + final IntBuffer ints; + final IntBuffer intsDebug; + final LongBuffer longs; - final FloatBuffer floats; + final FloatBuffer floats; final DoubleBuffer doubles; final PointerBuffer pointers; @@ -513,25 +519,25 @@ final class APIUtil { } } - private static final ObjectDestructor DESTRUCTOR_CLSubDevice = new ObjectDestructor() { + private static final ObjectDestructor DESTRUCTOR_CLSubDevice = new ObjectDestructor() { public void release(final CLDevice object) { clReleaseDeviceEXT(object); } }; - private static final ObjectDestructor DESTRUCTOR_CLMem = new ObjectDestructor() { + private static final ObjectDestructor DESTRUCTOR_CLMem = new ObjectDestructor() { public void release(final CLMem object) { clReleaseMemObject(object); } }; private static final ObjectDestructor DESTRUCTOR_CLCommandQueue = new ObjectDestructor() { public void release(final CLCommandQueue object) { clReleaseCommandQueue(object); } }; - private static final ObjectDestructor DESTRUCTOR_CLSampler = new ObjectDestructor() { + private static final ObjectDestructor DESTRUCTOR_CLSampler = new ObjectDestructor() { public void release(final CLSampler object) { clReleaseSampler(object); } }; - private static final ObjectDestructor DESTRUCTOR_CLProgram = new ObjectDestructor() { + private static final ObjectDestructor DESTRUCTOR_CLProgram = new ObjectDestructor() { public void release(final CLProgram object) { clReleaseProgram(object); } }; - private static final ObjectDestructor DESTRUCTOR_CLKernel = new ObjectDestructor() { + private static final ObjectDestructor DESTRUCTOR_CLKernel = new ObjectDestructor() { public void release(final CLKernel object) { clReleaseKernel(object); } }; - private static final ObjectDestructor DESTRUCTOR_CLEvent = new ObjectDestructor() { + private static final ObjectDestructor DESTRUCTOR_CLEvent = new ObjectDestructor() { public void release(final CLEvent object) { clReleaseEvent(object); } }; diff --git a/src/java/org/lwjgl/opencl/InfoUtilFactory.java b/src/java/org/lwjgl/opencl/InfoUtilFactory.java index 0902106d..c7872900 100644 --- a/src/java/org/lwjgl/opencl/InfoUtilFactory.java +++ b/src/java/org/lwjgl/opencl/InfoUtilFactory.java @@ -118,7 +118,7 @@ final class InfoUtilFactory { final long user_data = pfn_notify == null || pfn_notify.isCustom() ? 0 : CallbackUtil.createGlobalRef(pfn_notify); CLContext __result = null; try { - __result = new CLContext(nclCreateContext(properties.getBuffer(), 0, devices.size(), properties.getBuffer(), propertyCount, pfn_notify == null ? 0 : pfn_notify.getPointer(), user_data, errcode_ret, errcode_ret != null ? errcode_ret.position() : 0, function_pointer), platform); + __result = new CLContext(nclCreateContext(MemoryUtil.getAddress0(properties.getBuffer()), devices.size(), MemoryUtil.getAddress(properties, propertyCount), pfn_notify == null ? 0 : pfn_notify.getPointer(), user_data, MemoryUtil.getAddressSafe(errcode_ret), function_pointer), platform); if ( LWJGLUtil.DEBUG ) Util.checkCLError(errcode_ret.get(0)); return __result; @@ -304,9 +304,9 @@ final class InfoUtilFactory { else if ( LWJGLUtil.DEBUG ) errcode_ret = APIUtil.getBufferInt(); - CLMem __result = new CLMem(nclCreateImage2D(context.getPointer(), flags, formatBuffer, 0, image_width, image_height, image_row_pitch, host_ptr, - host_ptr != null ? BufferChecks.checkBuffer(host_ptr, CLChecks.calculateImage2DSize(formatBuffer, image_width, image_height, image_row_pitch)) : 0, - errcode_ret, errcode_ret != null ? errcode_ret.position() : 0, function_pointer), context); + CLMem __result = new CLMem(nclCreateImage2D(context.getPointer(), flags, MemoryUtil.getAddress(formatBuffer, 0), image_width, image_height, image_row_pitch, MemoryUtil.getAddress0Safe(host_ptr) + + (host_ptr != null ? BufferChecks.checkBuffer(host_ptr, CLChecks.calculateImage2DSize(formatBuffer, image_width, image_height, image_row_pitch)) : 0), + MemoryUtil.getAddressSafe(errcode_ret), function_pointer), context); if ( LWJGLUtil.DEBUG ) Util.checkCLError(errcode_ret.get(0)); return __result; @@ -324,9 +324,9 @@ final class InfoUtilFactory { else if ( LWJGLUtil.DEBUG ) errcode_ret = APIUtil.getBufferInt(); - CLMem __result = new CLMem(nclCreateImage3D(context.getPointer(), flags, formatBuffer, 0, image_width, image_height, image_depth, image_row_pitch, image_slice_pitch, host_ptr, - host_ptr != null ? BufferChecks.checkBuffer(host_ptr, CLChecks.calculateImage3DSize(formatBuffer, image_width, image_height, image_depth, image_row_pitch, image_slice_pitch)) : 0, - errcode_ret, errcode_ret != null ? errcode_ret.position() : 0, function_pointer), context); + CLMem __result = new CLMem(nclCreateImage3D(context.getPointer(), flags, MemoryUtil.getAddress(formatBuffer, 0), image_width, image_height, image_depth, image_row_pitch, image_slice_pitch, MemoryUtil.getAddress0Safe(host_ptr) + + (host_ptr != null ? BufferChecks.checkBuffer(host_ptr, CLChecks.calculateImage3DSize(formatBuffer, image_width, image_height, image_depth, image_row_pitch, image_slice_pitch)) : 0), + MemoryUtil.getAddressSafe(errcode_ret), function_pointer), context); if ( LWJGLUtil.DEBUG ) Util.checkCLError(errcode_ret.get(0)); return __result; diff --git a/src/java/org/lwjgl/opengl/APIUtil.java b/src/java/org/lwjgl/opengl/APIUtil.java index 2b0d5213..3a0acee7 100644 --- a/src/java/org/lwjgl/opengl/APIUtil.java +++ b/src/java/org/lwjgl/opengl/APIUtil.java @@ -33,6 +33,7 @@ package org.lwjgl.opengl; import org.lwjgl.BufferUtils; import org.lwjgl.LWJGLUtil; +import org.lwjgl.MemoryUtil; import java.nio.*; @@ -185,10 +186,10 @@ final class APIUtil { * * @return the String as a ByteBuffer */ - static ByteBuffer getBuffer(final CharSequence string) { + static long getBuffer(final CharSequence string) { final ByteBuffer buffer = encode(getBufferByte(string.length()), string); buffer.flip(); - return buffer; + return MemoryUtil.getAddress0(buffer); } /** @@ -198,10 +199,10 @@ final class APIUtil { * * @return the String as a ByteBuffer */ - static ByteBuffer getBuffer(final CharSequence string, final int offset) { + static long getBuffer(final CharSequence string, final int offset) { final ByteBuffer buffer = encode(getBufferByteOffset(offset + string.length()), string); buffer.flip(); - return buffer; + return MemoryUtil.getAddress(buffer); } /** @@ -211,11 +212,11 @@ final class APIUtil { * * @return the String as a ByteBuffer */ - static ByteBuffer getBufferNT(final CharSequence string) { + static long getBufferNT(final CharSequence string) { final ByteBuffer buffer = encode(getBufferByte(string.length() + 1), string); buffer.put((byte)0); buffer.flip(); - return buffer; + return MemoryUtil.getAddress0(buffer); } static int getTotalLength(final CharSequence[] strings) { @@ -233,14 +234,14 @@ final class APIUtil { * * @return the Strings as a ByteBuffer */ - static ByteBuffer getBuffer(final CharSequence[] strings) { + static long getBuffer(final CharSequence[] strings) { final ByteBuffer buffer = getBufferByte(getTotalLength(strings)); for ( CharSequence string : strings ) encode(buffer, string); buffer.flip(); - return buffer; + return MemoryUtil.getAddress0(buffer); } /** @@ -250,7 +251,7 @@ final class APIUtil { * * @return the Strings as a ByteBuffer */ - static ByteBuffer getBufferNT(final CharSequence[] strings) { + static long getBufferNT(final CharSequence[] strings) { final ByteBuffer buffer = getBufferByte(getTotalLength(strings) + strings.length); for ( CharSequence string : strings ) { @@ -259,7 +260,7 @@ final class APIUtil { } buffer.flip(); - return buffer; + return MemoryUtil.getAddress0(buffer); } /** @@ -269,14 +270,22 @@ final class APIUtil { * * @return the String lengths in an IntBuffer */ - static IntBuffer getLengths(final CharSequence[] strings) { + static long getLengths(final CharSequence[] strings) { IntBuffer buffer = getLengths(strings.length); for ( CharSequence string : strings ) buffer.put(string.length()); buffer.flip(); - return buffer; + return MemoryUtil.getAddress0(buffer); + } + + static long getInt(final int value) { + return MemoryUtil.getAddress0(getBufferInt().put(0, value)); + } + + static long getBufferByte0() { + return MemoryUtil.getAddress0(getBufferByte(0)); } private static class Buffers { diff --git a/src/java/org/lwjgl/opengles/APIUtil.java b/src/java/org/lwjgl/opengles/APIUtil.java index 25489519..bfa56658 100644 --- a/src/java/org/lwjgl/opengles/APIUtil.java +++ b/src/java/org/lwjgl/opengles/APIUtil.java @@ -33,6 +33,7 @@ package org.lwjgl.opengles; import org.lwjgl.BufferUtils; import org.lwjgl.LWJGLUtil; +import org.lwjgl.MemoryUtil; import org.lwjgl.PointerBuffer; import java.nio.ByteBuffer; @@ -207,10 +208,10 @@ final class APIUtil { * * @return the String as a ByteBuffer */ - static ByteBuffer getBuffer(final CharSequence string) { + static long getBuffer(final CharSequence string) { final ByteBuffer buffer = encode(getBufferByte(string.length()), string); buffer.flip(); - return buffer; + return MemoryUtil.getAddress0(buffer); } /** @@ -220,10 +221,10 @@ final class APIUtil { * * @return the String as a ByteBuffer */ - static ByteBuffer getBuffer(final CharSequence string, final int offset) { + static long getBuffer(final CharSequence string, final int offset) { final ByteBuffer buffer = encode(getBufferByteOffset(offset + string.length()), string); buffer.flip(); - return buffer; + return MemoryUtil.getAddress(buffer); } /** @@ -233,11 +234,11 @@ final class APIUtil { * * @return the String as a ByteBuffer */ - static ByteBuffer getBufferNT(final CharSequence string) { + static long getBufferNT(final CharSequence string) { final ByteBuffer buffer = encode(getBufferByte(string.length() + 1), string); buffer.put((byte)0); buffer.flip(); - return buffer; + return MemoryUtil.getAddress0(buffer); } static int getTotalLength(final CharSequence[] strings) { @@ -255,14 +256,14 @@ final class APIUtil { * * @return the Strings as a ByteBuffer */ - static ByteBuffer getBuffer(final CharSequence[] strings) { + static long getBuffer(final CharSequence[] strings) { final ByteBuffer buffer = getBufferByte(getTotalLength(strings)); for ( CharSequence string : strings ) encode(buffer, string); buffer.flip(); - return buffer; + return MemoryUtil.getAddress0(buffer); } /** @@ -272,7 +273,7 @@ final class APIUtil { * * @return the Strings as a ByteBuffer */ - static ByteBuffer getBufferNT(final CharSequence[] strings) { + static long getBufferNT(final CharSequence[] strings) { final ByteBuffer buffer = getBufferByte(getTotalLength(strings) + strings.length); for ( CharSequence string : strings ) { @@ -281,7 +282,7 @@ final class APIUtil { } buffer.flip(); - return buffer; + return MemoryUtil.getAddress0(buffer); } /** @@ -291,14 +292,22 @@ final class APIUtil { * * @return the String lengths in an IntBuffer */ - static IntBuffer getLengths(final CharSequence[] strings) { + static long getLengths(final CharSequence[] strings) { IntBuffer buffer = getLengths(strings.length); for ( CharSequence string : strings ) buffer.put(string.length()); buffer.flip(); - return buffer; + return MemoryUtil.getAddress0(buffer); + } + + static long getInt(final int value) { + return MemoryUtil.getAddress(getBufferInt().put(0, value), 0); + } + + static long getBufferByte0() { + return MemoryUtil.getAddress0(getBufferByte(0)); } private static class Buffers { diff --git a/src/java/org/lwjgl/test/mapped/MappedObjectTests3.java b/src/java/org/lwjgl/test/mapped/MappedObjectTests3.java index cc6ea385..1f90eb8c 100644 --- a/src/java/org/lwjgl/test/mapped/MappedObjectTests3.java +++ b/src/java/org/lwjgl/test/mapped/MappedObjectTests3.java @@ -118,6 +118,10 @@ public class MappedObjectTests3 { set.view = 0; assert (vec2.view == 0); assert (vec3.view == 0); + + set.next(); + assert (vec2.view == 1); + assert (vec3.view == 1); } } \ No newline at end of file diff --git a/src/java/org/lwjgl/test/opengl/sprites/SpriteShootout.java b/src/java/org/lwjgl/test/opengl/sprites/SpriteShootout.java index d710fbaa..a7d7057e 100644 --- a/src/java/org/lwjgl/test/opengl/sprites/SpriteShootout.java +++ b/src/java/org/lwjgl/test/opengl/sprites/SpriteShootout.java @@ -1,3 +1,34 @@ +/* + * Copyright (c) 2002-2011 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.sprites; import org.lwjgl.BufferUtils; @@ -33,8 +64,8 @@ import static org.lwjgl.opengl.GL30.*; */ public final class SpriteShootout { - private static final int SCREEN_WIDTH = 800; - private static final int SCREEN_HEIGHT = 600; + static final int SCREEN_WIDTH = 800; + static final int SCREEN_HEIGHT = 600; private static final int ANIMATION_TICKS = 60; @@ -45,8 +76,8 @@ public final class SpriteShootout { private boolean smooth; private boolean vsync; - private int ballSize = 42; - private int ballCount = 100 * 1000; + int ballSize = 42; + int ballCount = 100 * 1000; private SpriteRenderer renderer; @@ -401,43 +432,45 @@ public final class SpriteShootout { transform = newTransform; } - protected void animate(final FloatBuffer geom, final int ballIndex, final int batchSize, final int delta) { - final float[] transform = this.transform; - + protected void animate( + final float[] sprites, + final FloatBuffer spritesRender, + final int ballSize, final int ballIndex, final int batchSize, final int delta + ) { final float ballRadius = ballSize * 0.5f; final float boundW = SCREEN_WIDTH - ballRadius; final float boundH = SCREEN_HEIGHT - ballRadius; for ( int b = ballIndex * 4, len = (ballIndex + batchSize) * 4; b < len; b += 4 ) { - float x = transform[b + 0]; - float dx = transform[b + 2]; + float x = sprites[b + 0]; + float dx = sprites[b + 2]; x += dx * delta; if ( x < ballRadius ) { x = ballRadius; - transform[b + 2] = -dx; + sprites[b + 2] = -dx; } else if ( x > boundW ) { x = boundW; - transform[b + 2] = -dx; + sprites[b + 2] = -dx; } - transform[b + 0] = x; + sprites[b + 0] = x; - float y = transform[b + 1]; - float dy = transform[b + 3]; + float y = sprites[b + 1]; + float dy = sprites[b + 3]; y += dy * delta; if ( y < ballRadius ) { y = ballRadius; - transform[b + 3] = -dy; + sprites[b + 3] = -dy; } else if ( y > boundH ) { y = boundH; - transform[b + 3] = -dy; + sprites[b + 3] = -dy; } - transform[b + 1] = y; + sprites[b + 1] = y; - geom.put(x).put(y); + spritesRender.put(x).put(y); } - geom.clear(); + spritesRender.clear(); } protected abstract void render(boolean render, boolean animate, int delta); @@ -517,8 +550,9 @@ public final class SpriteShootout { } private void animate(final int ballIndex, final int batchSize, final int delta) { - animate(geom, ballIndex, batchSize, delta); + animate(transform, geom, ballSize, ballIndex, batchSize, delta); + // Orphan current buffer and allocate a new one glBufferData(GL_ARRAY_BUFFER, geom.capacity() * 4, GL_STREAM_DRAW); glBufferSubData(GL_ARRAY_BUFFER, 0, geom); } @@ -526,10 +560,7 @@ public final class SpriteShootout { private class SpriteRendererMapped extends SpriteRendererBatched { - private ByteBuffer[] mapBuffer; - private FloatBuffer[] geomBuffer; - - protected int animVBO; + private StreamVBO animVBO; SpriteRendererMapped() { System.out.println("Shootout Implementation: CPU animation & MapBufferRange"); @@ -538,41 +569,29 @@ public final class SpriteShootout { public void updateBalls(final int count) { super.updateBalls(count); - final int batchCount = count / BALLS_PER_BATCH + (count % BALLS_PER_BATCH == 0 ? 0 : 1); - mapBuffer = new ByteBuffer[batchCount]; - geomBuffer = new FloatBuffer[batchCount]; + if ( animVBO != null ) + animVBO.destroy(); - animVBO = glGenBuffers(); - glBindBuffer(GL_ARRAY_BUFFER, animVBO); - glBufferData(GL_ARRAY_BUFFER, ballCount * (2 * 4), GL_DYNAMIC_DRAW); - glVertexPointer(2, GL_FLOAT, 0, 0); + animVBO = new StreamVBO(GL_ARRAY_BUFFER, ballCount * (2 * 4)); } public void render(final boolean render, final boolean animate, final int delta) { int batchSize = Math.min(ballCount, BALLS_PER_BATCH); int ballIndex = 0; - int batchIndex = 0; while ( ballIndex < ballCount ) { if ( animate ) { - final ByteBuffer buffer = glMapBufferRange(GL_ARRAY_BUFFER, - ballIndex * (2 * 4), - batchSize * (2 * 4), - GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT, - mapBuffer[batchIndex]); - if ( buffer != mapBuffer[batchIndex] ) { - mapBuffer[batchIndex] = buffer; - geomBuffer[batchIndex] = mapBuffer[batchIndex].asFloatBuffer(); - } + final ByteBuffer buffer = animVBO.map(batchSize * (2 * 4)); - animate(geomBuffer[batchIndex], ballIndex, batchSize, delta); + animate(transform, buffer.asFloatBuffer(), ballSize, ballIndex, batchSize, delta); - glUnmapBuffer(GL_ARRAY_BUFFER); + animVBO.unmap(); } - if ( render ) - glDrawArrays(GL_POINTS, ballIndex, batchSize); + if ( render ) { + glVertexPointer(2, GL_FLOAT, 0, ballIndex * (2 * 4)); + glDrawArrays(GL_POINTS, 0, batchSize); + } - batchIndex++; ballIndex += batchSize; batchSize = Math.min(ballCount - ballIndex, BALLS_PER_BATCH); } @@ -653,6 +672,13 @@ public final class SpriteShootout { } public void updateBalls(final int count) { + if ( tfVBO[0] != 0 ) { + // Fetch current animation state + final FloatBuffer state = BufferUtils.createFloatBuffer(transform.length); + glGetBufferSubData(GL_TRANSFORM_FEEDBACK_BUFFER, 0, state); + state.get(transform); + } + super.updateBalls(count); if ( tfVBO[0] != 0 ) { @@ -660,14 +686,14 @@ public final class SpriteShootout { glDeleteBuffers(tfVBO[i]); } - final FloatBuffer transform = BufferUtils.createFloatBuffer(count * 4); - transform.put(this.transform); - transform.flip(); + final FloatBuffer state = BufferUtils.createFloatBuffer(count * 4); + state.put(transform); + state.flip(); for ( int i = 0; i < tfVBO.length; i++ ) { tfVBO[i] = glGenBuffers(); glBindBuffer(GL_TRANSFORM_FEEDBACK_BUFFER, tfVBO[i]); - glBufferData(GL_TRANSFORM_FEEDBACK_BUFFER, transform, GL_STATIC_DRAW); + glBufferData(GL_TRANSFORM_FEEDBACK_BUFFER, state, GL_STATIC_DRAW); } glBindBuffer(GL_ARRAY_BUFFER, tfVBO[0]); diff --git a/src/java/org/lwjgl/test/opengl/sprites/SpriteShootout2P.java b/src/java/org/lwjgl/test/opengl/sprites/SpriteShootout2P.java index a2c355e3..434167e5 100644 --- a/src/java/org/lwjgl/test/opengl/sprites/SpriteShootout2P.java +++ b/src/java/org/lwjgl/test/opengl/sprites/SpriteShootout2P.java @@ -1,3 +1,34 @@ +/* + * Copyright (c) 2002-2011 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.sprites; import org.lwjgl.BufferUtils; diff --git a/src/java/org/lwjgl/test/opengl/sprites/SpriteShootoutCL.java b/src/java/org/lwjgl/test/opengl/sprites/SpriteShootoutCL.java index 97251f6c..fb96b8b5 100644 --- a/src/java/org/lwjgl/test/opengl/sprites/SpriteShootoutCL.java +++ b/src/java/org/lwjgl/test/opengl/sprites/SpriteShootoutCL.java @@ -1,3 +1,34 @@ +/* + * Copyright (c) 2002-2011 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.sprites; import org.lwjgl.BufferUtils; diff --git a/src/java/org/lwjgl/test/opengl/sprites/StreamVBO.java b/src/java/org/lwjgl/test/opengl/sprites/StreamVBO.java new file mode 100644 index 00000000..660f911e --- /dev/null +++ b/src/java/org/lwjgl/test/opengl/sprites/StreamVBO.java @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2002-2011 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.sprites; + +import org.lwjgl.LWJGLUtil; + +import java.nio.ByteBuffer; + +import static java.lang.Math.*; +import static org.lwjgl.opengl.GL15.*; +import static org.lwjgl.opengl.GL30.*; + +/** + * This class implements VBO orphaning, useful for streaming + * dynamically generated geometry to the GPU. OpenGL 3.0 or + * higher is required. See + * {@url http://www.opengl.org/wiki/Buffer_Object_Streaming} + * under "Buffer update" for details. + * + * @author Spasi + */ +public class StreamVBO { + + private final int target; + private final long size; + private final int padding; + + private int ID; + + private long cursor; + + public StreamVBO(final int target, final int size) { + this(target, size, 64); + } + + public StreamVBO(final int target, final int size, final int padding) { + this.target = target; + this.padding = padding; + this.size = max(pad(size), padding); + + ID = glGenBuffers(); + + glBindBuffer(target, ID); + glBufferData(target, this.size, GL_STREAM_DRAW); + } + + public int getTarget() { + return target; + } + + public int getID() { + return ID; + } + + public long getSize() { + return size; + } + + public int getPadding() { + return padding; + } + + public void bind() { + glBindBuffer(target, ID); + } + + public void init(final int offset, final ByteBuffer data) { + glBufferSubData(target, offset, data); + } + + public void unmap() { + glUnmapBuffer(target); + } + + public void destroy() { + glBindBuffer(target, 0); + glDeleteBuffers(ID); + } + + public void reset() { + // Orphan current buffer and allocate a new one + glBufferData(target, size, GL_STREAM_DRAW); + // Flush + cursor = 0; + } + + public ByteBuffer map(final int bytes) { + return map(bytes, null); + } + + public ByteBuffer map(final int bytes, final ByteBuffer old_buffer) { + return doMap(pad(bytes), old_buffer); + } + + private int pad(int size) { + final int mod = size % padding; + if ( mod == 0 ) + return size; + + return size + padding - mod; + } + + private ByteBuffer doMap(final int bytes, final ByteBuffer old_buffer) { + if ( LWJGLUtil.CHECKS && size < bytes ) + throw new IllegalArgumentException(Integer.toString(bytes)); + + if ( size < cursor + bytes ) + reset(); + + final ByteBuffer map = glMapBufferRange(target, cursor, bytes, GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT, old_buffer); + cursor += bytes; + return map; + } + +} \ No newline at end of file diff --git a/src/java/org/lwjgl/util/generator/JNITypeTranslator.java b/src/java/org/lwjgl/util/generator/JNITypeTranslator.java index d0294dc2..2c6f1327 100644 --- a/src/java/org/lwjgl/util/generator/JNITypeTranslator.java +++ b/src/java/org/lwjgl/util/generator/JNITypeTranslator.java @@ -32,6 +32,10 @@ package org.lwjgl.util.generator; +import org.lwjgl.PointerBuffer; + +import java.nio.Buffer; + import com.sun.mirror.type.*; import com.sun.mirror.util.*; @@ -45,12 +49,19 @@ import com.sun.mirror.util.*; * $Id$ */ public class JNITypeTranslator implements TypeVisitor { + private final StringBuilder signature = new StringBuilder(); + private boolean objectReturn; + public String getSignature() { return signature.toString(); } + public String getReturnSignature() { + return objectReturn ? "jobject" : signature.toString(); + } + public void visitAnnotationType(AnnotationType t) { throw new RuntimeException(t + " is not allowed"); } @@ -68,7 +79,12 @@ public class JNITypeTranslator implements TypeVisitor { } public void visitClassType(ClassType t) { - signature.append("jobject"); + final Class type = Utils.getJavaType(t); + if ( Buffer.class.isAssignableFrom(type) || PointerBuffer.class.isAssignableFrom(type) ) { + signature.append("jlong"); + objectReturn = true; + } else + signature.append("jobject"); } public void visitDeclaredType(DeclaredType t) { diff --git a/src/java/org/lwjgl/util/generator/JavaMethodsGenerator.java b/src/java/org/lwjgl/util/generator/JavaMethodsGenerator.java index 303289d1..8cfb638d 100644 --- a/src/java/org/lwjgl/util/generator/JavaMethodsGenerator.java +++ b/src/java/org/lwjgl/util/generator/JavaMethodsGenerator.java @@ -194,8 +194,8 @@ public class JavaMethodsGenerator { writer.print("long "); else { Class type = type_info.getType(); - if ( native_stub && (type == CharSequence.class || type == CharSequence[].class || type == PointerBuffer.class) ) - writer.print("ByteBuffer "); + if ( native_stub && (type == CharSequence.class || type == CharSequence[].class || type == PointerBuffer.class || Buffer.class.isAssignableFrom(type) ) ) + writer.print("long "); else if ( printTypes ) writer.print(type_info.getType().getSimpleName() + " "); } @@ -203,8 +203,6 @@ public class JavaMethodsGenerator { if ( auto_size_annotation != null ) writer.print(auto_size_annotation.value() + "_"); writer.print(param.getSimpleName()); - if ( native_stub && buffer_type != null ) - writer.print(", int " + param.getSimpleName() + NativeMethodStubsGenerator.BUFFER_POSITION_POSTFIX); } return false; } @@ -490,7 +488,7 @@ public class JavaMethodsGenerator { Check check_annotation = param.getAnnotation(Check.class); boolean hide_buffer = mode == Mode.AUTOS && getAutoTypeParameter(method, param) != null; if (hide_buffer) { - writer.print("null"); + writer.print("0L"); } else { if ( type == CharSequence.class || type == CharSequence[].class ) { final String offset = Utils.getStringOffset(method, param); @@ -502,48 +500,25 @@ public class JavaMethodsGenerator { if ( offset != null ) writer.print(", " + offset); writer.print(")"); - hide_buffer = true; } else { final AutoSize auto_size_annotation = param.getAnnotation(AutoSize.class); if ( auto_size_annotation != null ) writer.print(auto_size_annotation.value() + "_"); - writer.print(param.getSimpleName()); - if ( PointerBuffer.class.isAssignableFrom(type) ) { + + final Class buffer_type = Utils.getNIOBufferType(param.getType()); + if ( buffer_type == null ) + writer.print(param.getSimpleName()); + else { + writer.print("MemoryUtil.getAddress"); if ( check_annotation != null && check_annotation.canBeNull() ) - writer.print(" != null ? " + param.getSimpleName()); - writer.print(".getBuffer()"); - if ( check_annotation != null && check_annotation.canBeNull() ) - writer.print(" : null"); + writer.print("Safe"); + writer.print("("); + writer.print(param.getSimpleName()); + writer.print(")"); } } } - Class buffer_type = Utils.getNIOBufferType(param.getType()); - if (buffer_type != null) { - writer.print(", "); - if (!hide_buffer) { - int shifting; - if (Utils.getNIOBufferType(param.getType()).equals(Buffer.class)) { - shifting = getBufferElementSizeExponent(type == Buffer.class ? ByteBuffer.class : type); // TODO: This will always throw an exception - //shifting = 0; - } else - shifting = 0; - writer.print(param.getSimpleName()); - if (check_annotation != null && check_annotation.canBeNull()) - writer.print(" != null ? " + param.getSimpleName()); - if ( type == PointerBuffer.class && param.getAnnotation(NativeType.class).value().endsWith("void") ) - writer.print(".positionByte()"); - else - writer.print(".position()"); - if (shifting > 0) - writer.print(" << " + shifting); - if (check_annotation != null && check_annotation.canBeNull()) - writer.print(" : 0"); - } else if ( type == CharSequence.class || type == CharSequence[].class ) { - final String offset = Utils.getStringOffset(method, param); - writer.print(offset == null ? "0" : offset); - } else - writer.print("0"); - } else if ( type != long.class ) { + if ( type != long.class ) { PointerWrapper pointer_annotation = param.getAnnotation(PointerWrapper.class); if ( pointer_annotation != null ) { if ( pointer_annotation.canBeNull() ) diff --git a/src/java/org/lwjgl/util/generator/NativeMethodStubsGenerator.java b/src/java/org/lwjgl/util/generator/NativeMethodStubsGenerator.java index 43c4c4d5..cbc47ebe 100644 --- a/src/java/org/lwjgl/util/generator/NativeMethodStubsGenerator.java +++ b/src/java/org/lwjgl/util/generator/NativeMethodStubsGenerator.java @@ -88,8 +88,6 @@ public class NativeMethodStubsGenerator { JNITypeTranslator translator = new JNITypeTranslator(); param.getType().accept(translator); writer.print(translator.getSignature() + " " + param.getSimpleName()); - if (Utils.getNIOBufferType(param.getType()) != null) - writer.print(", jint " + param.getSimpleName() + BUFFER_POSITION_POSTFIX); } } @@ -108,7 +106,7 @@ public class NativeMethodStubsGenerator { } else { JNITypeTranslator translator = new JNITypeTranslator(); result_type.accept(translator); - writer.print(translator.getSignature()); + writer.print(translator.getReturnSignature()); } writer.print(" JNICALL "); @@ -298,30 +296,17 @@ public class NativeMethodStubsGenerator { if ( !java_type.isArray() || CharSequence.class.isAssignableFrom(java_type.getComponentType()) ) { writer.print("\t" + native_type + param.getSimpleName()); - writer.print(BUFFER_ADDRESS_POSTFIX + " = (("); + writer.print(BUFFER_ADDRESS_POSTFIX + " = ("); writer.print(native_type); writer.print(")"); if (mode == Mode.BUFFEROBJECT && param.getAnnotation(BufferObject.class) != null) { - writer.print("offsetToPointer(" + param.getSimpleName() + Utils.BUFFER_OBJECT_PARAMETER_POSTFIX + "))"); + writer.print("offsetToPointer(" + param.getSimpleName() + Utils.BUFFER_OBJECT_PARAMETER_POSTFIX + ")"); } else { if (Buffer.class.isAssignableFrom(java_type) || java_type.equals(CharSequence.class) || java_type.equals(CharSequence[].class) || PointerBuffer.class.isAssignableFrom(java_type) ) { - boolean explicitly_byte_sized = java_type.equals(Buffer.class) || - translator.getAnnotationType().equals(type_map.getVoidType()) || - (param.getAnnotation(NativeType.class) != null && param.getAnnotation(NativeType.class).value().endsWith("void")); - if (explicitly_byte_sized) - writer.print("(((char *)"); - if (method.getAnnotation(GenerateAutos.class) != null || (check_annotation != null && check_annotation.canBeNull())) { - writer.print("safeGetBufferAddress(env, " + param.getSimpleName()); - } else { - writer.print("(*env)->GetDirectBufferAddress(env, " + param.getSimpleName()); - } - writer.print("))"); - writer.print(" + " + param.getSimpleName() + BUFFER_POSITION_POSTFIX); - if (explicitly_byte_sized) - writer.print("))"); + writer.print(param.getSimpleName()); } else if (java_type.equals(String.class)) { - writer.print("GetStringNativeChars(env, " + param.getSimpleName() + "))"); + writer.print("GetStringNativeChars(env, " + param.getSimpleName() + ")"); } else if ( array_annotation == null ) throw new RuntimeException("Illegal type " + java_type); } diff --git a/src/templates/org/lwjgl/opencl/CL10.java b/src/templates/org/lwjgl/opencl/CL10.java index 7538c03a..da656220 100644 --- a/src/templates/org/lwjgl/opencl/CL10.java +++ b/src/templates/org/lwjgl/opencl/CL10.java @@ -423,7 +423,7 @@ public interface CL10 { @PointerWrapper(value = "cl_context", params = "APIUtil.getCLPlatform(properties)") CLContext clCreateContext(@NullTerminated @Check("3") @Const @NativeType("cl_context_properties") PointerBuffer properties, @Constant("1") @cl_uint int num_devices, - @Constant(value = "APIUtil.getBufferPointer().put(0, device).getBuffer(), 0", keepParam = true) CLDevice device, + @Constant(value = "APIUtil.getPointer(device)", keepParam = true) CLDevice device, @PointerWrapper(value = "cl_create_context_callback", canBeNull = true) CLContextCallback pfn_notify, @Constant("user_data") @PointerWrapper("void *") long user_data, @OutParameter @Check(value = "1", canBeNull = true) @cl_int IntBuffer errcode_ret); @@ -683,7 +683,7 @@ public interface CL10 { @Code(javaAfterNative = "\t\tif ( __result != null ) command_queue.registerCLEvent(event);") @Check(value = "errcode_ret", canBeNull = true) @cl_void - @AutoSize(value = "extcl_CalculateImageSize(region_address, *image_row_pitch_address, image_slice_pitch == NULL ? 0 : *image_slice_pitch_address)", isNative = true) + @AutoSize(value = "extcl_CalculateImageSize(region_address, *image_row_pitch_address, image_slice_pitch_address == NULL ? 0 : *image_slice_pitch_address)", isNative = true) ByteBuffer clEnqueueMapImage(@PointerWrapper("cl_command_queue") CLCommandQueue command_queue, @PointerWrapper("cl_mem") CLMem image, @cl_bool int blocking_map, @@ -776,7 +776,7 @@ public interface CL10 { CLProgram clCreateProgramWithSource3(@PointerWrapper("cl_context") CLContext context, @Constant("strings.length") @cl_uint int count, @Check("1") @PointerArray(value = "count") @Const @NativeType("cl_char") ByteBuffer[] strings, - @Constant("APIUtil.getLengths(strings).getBuffer(), 0") @Const @NativeType("size_t") PointerBuffer lengths, + @Constant("APIUtil.getLengths(strings)") @Const @NativeType("size_t") PointerBuffer lengths, @OutParameter @Check(value = "1", canBeNull = true) @cl_int IntBuffer errcode_ret); @Alternate("clCreateProgramWithSource") @@ -794,7 +794,7 @@ public interface CL10 { CLProgram clCreateProgramWithSource4(@PointerWrapper("cl_context") CLContext context, @Constant("strings.length") @cl_uint int count, @Const @PointerArray(value = "count", lengths = "lengths") CharSequence[] strings, - @Constant("APIUtil.getLengths(strings).getBuffer(), 0") @Const @NativeType("size_t") PointerBuffer lengths, + @Constant("APIUtil.getLengths(strings)") @Const @NativeType("size_t") PointerBuffer lengths, @OutParameter @Check(value = "1", canBeNull = true) @cl_int IntBuffer errcode_ret); // ------[ clCreateProgramWithBinary ]------ @@ -826,7 +826,7 @@ public interface CL10 { CLProgram clCreateProgramWithBinary3(@PointerWrapper("cl_context") CLContext context, @Constant("binaries.length") @cl_uint int num_devices, @Check("binaries.length") @Const @NativeType("cl_device_id") PointerBuffer device_list, - @Constant("APIUtil.getLengths(binaries).getBuffer(), 0") @Const @NativeType("size_t") PointerBuffer lengths, + @Constant("APIUtil.getLengths(binaries)") @Const @NativeType("size_t") PointerBuffer lengths, @Check("1") @PointerArray("num_devices") @Const @NativeType("cl_uchar") ByteBuffer[] binaries, @OutParameter @Check("binaries.length") @cl_int IntBuffer binary_status, @OutParameter @Check(value = "1", canBeNull = true) @cl_int IntBuffer errcode_ret); @@ -884,7 +884,7 @@ public interface CL10 { @cl_int int clBuildProgram(@PointerWrapper("cl_program") CLProgram program, @Constant("1") @cl_uint int num_devices, - @Constant(value = "APIUtil.getBufferPointer().put(0, device).getBuffer(), 0", keepParam = true) CLDevice device, + @Constant(value = "APIUtil.getPointer(device)", keepParam = true) CLDevice device, @NullTerminated @Const CharSequence options, @PointerWrapper(value = "cl_build_program_callback", canBeNull = true) CLBuildProgramCallback pfn_notify, @Constant("user_data") @PointerWrapper("void *") long user_data); @@ -995,7 +995,7 @@ public interface CL10 { @cl_uint int arg_index, @Constant("PointerBuffer.getPointerSize()") @size_t long arg_size, @Check(canBeNull = true) @Const - @Constant(value = "APIUtil.getBufferPointer().put(0, arg_value == null ? 0 : arg_value.getPointer()).getBuffer(), 0", keepParam = true) CLObject arg_value); + @Constant(value = "APIUtil.getPointerSafe(arg_value)", keepParam = true) CLObject arg_value); // This is used by CLKernelUtil. Assumes arg_value.position() == 0. @@ -1005,7 +1005,7 @@ public interface CL10 { int clSetKernelArg3(@PointerWrapper("cl_kernel") CLKernel kernel, @cl_uint int arg_index, @size_t long arg_size, - @Constant(value = "arg_value, 0", keepParam = true) Buffer arg_value); + @Constant(value = "MemoryUtil.getAddress0(arg_value)", keepParam = true) Buffer arg_value); @cl_int int clGetKernelInfo(@PointerWrapper("cl_kernel") CLKernel kernel, @@ -1078,7 +1078,7 @@ public interface CL10 { @cl_int int clEnqueueNativeKernel(@PointerWrapper("cl_command_queue") CLCommandQueue command_queue, @PointerWrapper("cl_native_kernel_func") CLNativeKernel user_func, - @Constant("args, 0") @cl_void ByteBuffer args, + @Constant("MemoryUtil.getAddress0(args)") @cl_void ByteBuffer args, @AutoSize("args") @size_t long cb_args, @Constant("mem_list == null ? 0 : mem_list.length") @cl_uint int num_mem_objects, @Check(value = "1", canBeNull = true) @PointerArray("num_mem_objects") @Const @NativeType("cl_mem") CLMem[] mem_list, @@ -1095,7 +1095,7 @@ public interface CL10 { @Alternate("clWaitForEvents") @cl_int int clWaitForEvents(@Constant("1") @cl_uint int num_events, - @Constant(value = "APIUtil.getBufferPointer().put(0, event).getBuffer(), 0", keepParam = true) CLEvent event); + @Constant(value = "APIUtil.getPointer(event)", keepParam = true) CLEvent event); @cl_int int clGetEventInfo(@PointerWrapper("cl_event") CLEvent event, @@ -1129,7 +1129,7 @@ public interface CL10 { @cl_int int clEnqueueWaitForEvents(@PointerWrapper("cl_command_queue") CLCommandQueue command_queue, @Constant("1") @cl_uint int num_events, - @Constant(value = "APIUtil.getBufferPointer().put(0, event).getBuffer(), 0", keepParam = true) CLEvent event); + @Constant(value = "APIUtil.getPointer(event)", keepParam = true) CLEvent event); @cl_int int clGetEventProfilingInfo(@PointerWrapper("cl_event") CLEvent event, diff --git a/src/templates/org/lwjgl/opencl/CL10GL.java b/src/templates/org/lwjgl/opencl/CL10GL.java index bdb49ccf..13f24013 100644 --- a/src/templates/org/lwjgl/opencl/CL10GL.java +++ b/src/templates/org/lwjgl/opencl/CL10GL.java @@ -112,7 +112,7 @@ public interface CL10GL { @cl_int int clEnqueueAcquireGLObjects(@PointerWrapper("cl_command_queue") CLCommandQueue command_queue, @Constant("1") @cl_uint int num_objects, - @Constant(value = "APIUtil.getBufferPointer().put(0, mem_object).getBuffer(), 0", keepParam = true) CLMem mem_object, + @Constant(value = "APIUtil.getPointer(mem_object)", keepParam = true) CLMem mem_object, @AutoSize(value = "event_wait_list", canBeNull = true) @cl_uint int num_events_in_wait_list, @Check(canBeNull = true) @Const @NativeType("cl_event") PointerBuffer event_wait_list, @OutParameter @Check(value = "1", canBeNull = true) @NativeType("cl_event") PointerBuffer event); @@ -131,7 +131,7 @@ public interface CL10GL { @cl_int int clEnqueueReleaseGLObjects(@PointerWrapper("cl_command_queue") CLCommandQueue command_queue, @Constant("1") @cl_uint int num_objects, - @Constant(value = "APIUtil.getBufferPointer().put(0, mem_object).getBuffer(), 0", keepParam = true) CLMem mem_object, + @Constant(value = "APIUtil.getPointer(mem_object)", keepParam = true) CLMem mem_object, @AutoSize(value = "event_wait_list", canBeNull = true) @cl_uint int num_events_in_wait_list, @Check(canBeNull = true) @Const @NativeType("cl_event") PointerBuffer event_wait_list, @OutParameter @Check(value = "1", canBeNull = true) @NativeType("cl_event") PointerBuffer event); diff --git a/src/templates/org/lwjgl/opencl/EXT_migrate_memobject.java b/src/templates/org/lwjgl/opencl/EXT_migrate_memobject.java index ac4b2808..c5457d55 100644 --- a/src/templates/org/lwjgl/opencl/EXT_migrate_memobject.java +++ b/src/templates/org/lwjgl/opencl/EXT_migrate_memobject.java @@ -68,7 +68,7 @@ public interface EXT_migrate_memobject { @cl_int int clEnqueueMigrateMemObjectEXT(@PointerWrapper("cl_command_queue") CLCommandQueue command_queue, @Constant("1") @cl_uint int num_mem_objects, - @Constant(value = "APIUtil.getBufferPointer().put(0, mem_object).getBuffer(), 0", keepParam = true) CLMem mem_object, + @Constant(value = "APIUtil.getPointer(mem_object)", keepParam = true) CLMem mem_object, @cl_bitfield @NativeType("cl_mem_migration_flags_ext") long flags, @AutoSize(value = "event_wait_list", canBeNull = true) @cl_uint int num_events_in_wait_list, @Check(canBeNull = true) @Const @NativeType("cl_event") PointerBuffer event_wait_list, diff --git a/src/templates/org/lwjgl/opengl/AMD_name_gen_delete.java b/src/templates/org/lwjgl/opengl/AMD_name_gen_delete.java index 73f9c670..39f26c59 100644 --- a/src/templates/org/lwjgl/opengl/AMD_name_gen_delete.java +++ b/src/templates/org/lwjgl/opengl/AMD_name_gen_delete.java @@ -58,7 +58,7 @@ public interface AMD_name_gen_delete { void glDeleteNamesAMD(@GLenum int identifier, @AutoSize("names") @GLsizei int num, @Const @GLuint IntBuffer names); @Alternate("glDeleteNamesAMD") - void glDeleteNamesAMD(@GLenum int identifier, @Constant("1") @GLsizei int num, @Constant(value = "APIUtil.getBufferInt().put(0, name), 0", keepParam = true) int name); + void glDeleteNamesAMD(@GLenum int identifier, @Constant("1") @GLsizei int num, @Constant(value = "APIUtil.getInt(name)", keepParam = true) int name); boolean glIsNameAMD(@GLenum int identifier, @GLuint int name); diff --git a/src/templates/org/lwjgl/opengl/AMD_performance_monitor.java b/src/templates/org/lwjgl/opengl/AMD_performance_monitor.java index 9356465d..2d0c5da9 100644 --- a/src/templates/org/lwjgl/opengl/AMD_performance_monitor.java +++ b/src/templates/org/lwjgl/opengl/AMD_performance_monitor.java @@ -76,7 +76,7 @@ public interface AMD_performance_monitor { @Alternate("glGetPerfMonitorGroupStringAMD") @GLreturn(value = "groupString", maxLength = "bufSize") void glGetPerfMonitorGroupStringAMD2(@GLuint int group, @GLsizei int bufSize, - @OutParameter @GLsizei @Constant("groupString_length, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(groupString_length)") IntBuffer length, @OutParameter @GLchar ByteBuffer groupString); void glGetPerfMonitorCounterStringAMD(@GLuint int group, @GLuint int counter, @AutoSize("counterString") @GLsizei int bufSize, @@ -86,7 +86,7 @@ public interface AMD_performance_monitor { @Alternate("glGetPerfMonitorCounterStringAMD") @GLreturn(value = "counterString", maxLength = "bufSize") void glGetPerfMonitorCounterStringAMD2(@GLuint int group, @GLuint int counter, @GLsizei int bufSize, - @OutParameter @GLsizei @Constant("counterString_length, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(counterString_length)") IntBuffer length, @OutParameter @GLchar ByteBuffer counterString); void glGetPerfMonitorCounterInfoAMD(@GLuint int group, @GLuint int counter, @GLenum int pname, @Check(value = "16") @GLvoid ByteBuffer data); @@ -100,12 +100,12 @@ public interface AMD_performance_monitor { void glDeletePerfMonitorsAMD(@AutoSize("monitors") @GLsizei int n, @GLuint IntBuffer monitors); @Alternate("glDeletePerfMonitorsAMD") - void glDeletePerfMonitorsAMD(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getBufferInt().put(0, monitor), 0", keepParam = true) int monitor); + void glDeletePerfMonitorsAMD(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getInt(monitor)", keepParam = true) int monitor); void glSelectPerfMonitorCountersAMD(@GLuint int monitor, boolean enable, @GLuint int group, @AutoSize("counterList") int numCounters, @GLuint IntBuffer counterList); @Alternate("glSelectPerfMonitorCountersAMD") - void glSelectPerfMonitorCountersAMD(@GLuint int monitor, boolean enable, @GLuint int group, @Constant("1") int numCounters, @Constant(value = "APIUtil.getBufferInt().put(0, counter), 0", keepParam = true) int counter); + void glSelectPerfMonitorCountersAMD(@GLuint int monitor, boolean enable, @GLuint int group, @Constant("1") int numCounters, @Constant(value = "APIUtil.getInt(counter)", keepParam = true) int counter); void glBeginPerfMonitorAMD(@GLuint int monitor); @@ -119,6 +119,6 @@ public interface AMD_performance_monitor { @GLreturn("data") void glGetPerfMonitorCounterDataAMD2(@GLuint int monitor, @GLenum int pname, @Constant("4") @GLsizei int dataSize, @OutParameter @GLuint IntBuffer data, - @OutParameter @GLint @Constant("null, 0") IntBuffer bytesWritten); + @OutParameter @GLint @Constant("0L") IntBuffer bytesWritten); } \ No newline at end of file diff --git a/src/templates/org/lwjgl/opengl/APPLE_fence.java b/src/templates/org/lwjgl/opengl/APPLE_fence.java index c38cd3df..c0106f88 100644 --- a/src/templates/org/lwjgl/opengl/APPLE_fence.java +++ b/src/templates/org/lwjgl/opengl/APPLE_fence.java @@ -55,7 +55,7 @@ public interface APPLE_fence { void glDeleteFencesAPPLE(@AutoSize("fences") @GLsizei int n, @Const @GLuint IntBuffer fences); @Alternate("glDeleteFencesAPPLE") - void glDeleteFencesAPPLE(@Constant("1") @GLsizei int n, @Const @GLuint @Constant(value = "APIUtil.getBufferInt().put(0, fence), 0", keepParam = true) int fence); + void glDeleteFencesAPPLE(@Constant("1") @GLsizei int n, @Const @GLuint @Constant(value = "APIUtil.getInt(fence)", keepParam = true) int fence); void glSetFenceAPPLE(@GLuint int fence); diff --git a/src/templates/org/lwjgl/opengl/APPLE_vertex_array_object.java b/src/templates/org/lwjgl/opengl/APPLE_vertex_array_object.java index a5254cf3..e4a0935a 100644 --- a/src/templates/org/lwjgl/opengl/APPLE_vertex_array_object.java +++ b/src/templates/org/lwjgl/opengl/APPLE_vertex_array_object.java @@ -52,7 +52,7 @@ public interface APPLE_vertex_array_object { void glDeleteVertexArraysAPPLE(@AutoSize("arrays") @GLsizei int n, @Const @GLuint IntBuffer arrays); @Alternate("glDeleteVertexArraysAPPLE") - void glDeleteVertexArraysAPPLE(@Constant("1") @GLsizei int n, @Const @GLuint @Constant(value = "APIUtil.getBufferInt().put(0, array), 0", keepParam = true) int array); + void glDeleteVertexArraysAPPLE(@Constant("1") @GLsizei int n, @Const @GLuint @Constant(value = "APIUtil.getInt(array)", keepParam = true) int array); void glGenVertexArraysAPPLE(@AutoSize("arrays") @GLsizei int n, @OutParameter @GLuint IntBuffer arrays); diff --git a/src/templates/org/lwjgl/opengl/ARB_buffer_object.java b/src/templates/org/lwjgl/opengl/ARB_buffer_object.java index 8106be5a..70dbda15 100644 --- a/src/templates/org/lwjgl/opengl/ARB_buffer_object.java +++ b/src/templates/org/lwjgl/opengl/ARB_buffer_object.java @@ -71,7 +71,7 @@ public interface ARB_buffer_object { void glDeleteBuffersARB(@AutoSize("buffers") @GLsizei int n, @Const @GLuint IntBuffer buffers); @Alternate("glDeleteBuffersARB") - void glDeleteBuffersARB(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getBufferInt().put(0, buffer), 0", keepParam = true) int buffer); + void glDeleteBuffersARB(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getInt(buffer)", keepParam = true) int buffer); void glGenBuffersARB(@AutoSize("buffers") @GLsizei int n, @OutParameter @GLuint IntBuffer buffers); diff --git a/src/templates/org/lwjgl/opengl/ARB_draw_buffers.java b/src/templates/org/lwjgl/opengl/ARB_draw_buffers.java index f657eb40..78de4fda 100644 --- a/src/templates/org/lwjgl/opengl/ARB_draw_buffers.java +++ b/src/templates/org/lwjgl/opengl/ARB_draw_buffers.java @@ -65,5 +65,5 @@ public interface ARB_draw_buffers { void glDrawBuffersARB(@AutoSize("buffers") @GLsizei int size, @Const @GLenum IntBuffer buffers); @Alternate("glDrawBuffersARB") - void glDrawBuffersARB(@Constant("1") @GLsizei int size, @Constant(value = "APIUtil.getBufferInt().put(0, buffer), 0", keepParam = true) int buffer); + void glDrawBuffersARB(@Constant("1") @GLsizei int size, @Constant(value = "APIUtil.getInt(buffer)", keepParam = true) int buffer); } diff --git a/src/templates/org/lwjgl/opengl/ARB_framebuffer_object.java b/src/templates/org/lwjgl/opengl/ARB_framebuffer_object.java index 74fcae29..d757df6d 100644 --- a/src/templates/org/lwjgl/opengl/ARB_framebuffer_object.java +++ b/src/templates/org/lwjgl/opengl/ARB_framebuffer_object.java @@ -197,7 +197,7 @@ public interface ARB_framebuffer_object { @Reuse("GL30") @Alternate("glDeleteRenderbuffers") - void glDeleteRenderbuffers(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getBufferInt().put(0, renderbuffer), 0", keepParam = true) int renderbuffer); + void glDeleteRenderbuffers(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getInt(renderbuffer)", keepParam = true) int renderbuffer); @Reuse("GL30") void glGenRenderbuffers(@AutoSize("renderbuffers") @GLsizei int n, @OutParameter @GLuint IntBuffer renderbuffers); @@ -237,7 +237,7 @@ public interface ARB_framebuffer_object { @Reuse("GL30") @Alternate("glDeleteFramebuffers") - void glDeleteFramebuffers(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getBufferInt().put(0, framebuffer), 0", keepParam = true) int framebuffer); + void glDeleteFramebuffers(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getInt(framebuffer)", keepParam = true) int framebuffer); @Reuse("GL30") void glGenFramebuffers(@AutoSize("framebuffers") @GLsizei int n, @OutParameter @GLuint IntBuffer framebuffers); diff --git a/src/templates/org/lwjgl/opengl/ARB_occlusion_query.java b/src/templates/org/lwjgl/opengl/ARB_occlusion_query.java index 3973f3b5..7d620083 100644 --- a/src/templates/org/lwjgl/opengl/ARB_occlusion_query.java +++ b/src/templates/org/lwjgl/opengl/ARB_occlusion_query.java @@ -68,7 +68,7 @@ public interface ARB_occlusion_query { void glDeleteQueriesARB(@AutoSize("ids") @GLsizei int n, @GLuint IntBuffer ids); @Alternate("glDeleteQueriesARB") - void glDeleteQueriesARB(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getBufferInt().put(0, id), 0", keepParam = true) int id); + void glDeleteQueriesARB(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getInt(id)", keepParam = true) int id); boolean glIsQueryARB(@GLuint int id); diff --git a/src/templates/org/lwjgl/opengl/ARB_program.java b/src/templates/org/lwjgl/opengl/ARB_program.java index 0616f602..1f4cd571 100644 --- a/src/templates/org/lwjgl/opengl/ARB_program.java +++ b/src/templates/org/lwjgl/opengl/ARB_program.java @@ -128,7 +128,7 @@ public interface ARB_program { void glDeleteProgramsARB(@AutoSize("programs") @GLsizei int n, @Const @GLuint IntBuffer programs); @Alternate("glDeleteProgramsARB") - void glDeleteProgramsARB(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getBufferInt().put(0, program), 0", keepParam = true) int program); + void glDeleteProgramsARB(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getInt(program)", keepParam = true) int program); void glGenProgramsARB(@AutoSize("programs") @GLsizei int n, @OutParameter @GLuint IntBuffer programs); diff --git a/src/templates/org/lwjgl/opengl/ARB_sampler_objects.java b/src/templates/org/lwjgl/opengl/ARB_sampler_objects.java index 1916ef83..40f31c59 100644 --- a/src/templates/org/lwjgl/opengl/ARB_sampler_objects.java +++ b/src/templates/org/lwjgl/opengl/ARB_sampler_objects.java @@ -63,7 +63,7 @@ public interface ARB_sampler_objects { @Reuse("GL33") @Alternate("glDeleteSamplers") - void glDeleteSamplers(@Constant("1") @GLsizei int count, @Constant(value = "APIUtil.getBufferInt().put(0, sampler), 0", keepParam = true) int sampler); + void glDeleteSamplers(@Constant("1") @GLsizei int count, @Constant(value = "APIUtil.getInt(sampler)", keepParam = true) int sampler); @Reuse("GL33") boolean glIsSampler(@GLuint int sampler); diff --git a/src/templates/org/lwjgl/opengl/ARB_separate_shader_objects.java b/src/templates/org/lwjgl/opengl/ARB_separate_shader_objects.java index a1853ad7..54112e51 100644 --- a/src/templates/org/lwjgl/opengl/ARB_separate_shader_objects.java +++ b/src/templates/org/lwjgl/opengl/ARB_separate_shader_objects.java @@ -98,7 +98,7 @@ public interface ARB_separate_shader_objects { @Reuse("GL41") @Alternate("glDeleteProgramPipelines") - void glDeleteProgramPipelines(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getBufferInt().put(0, pipeline), 0", keepParam = true) int pipeline); + void glDeleteProgramPipelines(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getInt(pipeline)", keepParam = true) int pipeline); @Reuse("GL41") void glGenProgramPipelines(@AutoSize("pipelines") @GLsizei int n, @OutParameter @GLuint IntBuffer pipelines); diff --git a/src/templates/org/lwjgl/opengl/ARB_shader_objects.java b/src/templates/org/lwjgl/opengl/ARB_shader_objects.java index dd2003ba..3558afbd 100644 --- a/src/templates/org/lwjgl/opengl/ARB_shader_objects.java +++ b/src/templates/org/lwjgl/opengl/ARB_shader_objects.java @@ -110,7 +110,7 @@ public interface ARB_shader_objects { @Alternate(value = "glShaderSourceARB", nativeAlt = true) void glShaderSourceARB3(@GLhandleARB int shader, @Constant("strings.length") @GLsizei int count, @Const @PointerArray(value = "count", lengths = "length") CharSequence[] strings, - @Constant("APIUtil.getLengths(strings), 0") @Const IntBuffer length); + @Constant("APIUtil.getLengths(strings)") @Const IntBuffer length); void glCompileShaderARB(@GLhandleARB int shaderObj); @@ -197,7 +197,7 @@ public interface ARB_shader_objects { @Alternate("glGetInfoLogARB") @GLreturn(value = "infoLog", maxLength = "maxLength") void glGetInfoLogARB2(@GLhandleARB int obj, @GLsizei int maxLength, - @OutParameter @GLsizei @Constant("infoLog_length, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(infoLog_length)") IntBuffer length, @OutParameter @GLcharARB ByteBuffer infoLog); void glGetAttachedObjectsARB(@GLhandleARB int containerObj, @AutoSize("obj") @GLsizei int maxCount, @@ -225,35 +225,35 @@ public interface ARB_shader_objects { @Alternate("glGetActiveUniformARB") @GLreturn(value = "name", maxLength = "maxLength") void glGetActiveUniformARB2(@GLhandleARB int programObj, @GLuint int index, @GLsizei int maxLength, - @OutParameter @GLsizei @Constant("name_length, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(name_length)") IntBuffer length, @OutParameter @Check("2") IntBuffer sizeType, - @OutParameter @GLenum @Constant("sizeType, sizeType.position() + 1") IntBuffer type, + @OutParameter @GLenum @Constant("MemoryUtil.getAddress(sizeType, sizeType.position() + 1)") IntBuffer type, @OutParameter @GLcharARB ByteBuffer name); /** Overloads glGetActiveUniformARB. This version returns only the uniform name. */ @Alternate(value = "glGetActiveUniformARB", javaAlt = true) @GLreturn(value = "name", maxLength = "maxLength") void glGetActiveUniformARB(@GLhandleARB int programObj, @GLuint int index, @GLsizei int maxLength, - @OutParameter @GLsizei @Constant("name_length, 0, APIUtil.getBufferInt(), 0, APIUtil.getBufferInt(), 1") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(name_length), MemoryUtil.getAddress0(APIUtil.getBufferInt()), MemoryUtil.getAddress(APIUtil.getBufferInt(), 1)") IntBuffer length, @OutParameter @GLcharARB ByteBuffer name); /** Overloads glGetActiveUniformARB. This version returns only the uniform size. */ @Alternate(value = "glGetActiveUniformARB", javaAlt = true) @GLreturn(value = "size") void glGetActiveUniformSizeARB(@GLhandleARB int programObj, @GLuint int index, @Constant("0") @GLsizei int maxLength, - @OutParameter @GLsizei @Constant("null, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("0L") IntBuffer length, @OutParameter IntBuffer size, - @OutParameter @GLenum @Constant("size, 1") IntBuffer type, // Reuse size buffer and ignore - @OutParameter @GLcharARB @Constant("APIUtil.getBufferByte(0), 0") ByteBuffer name); + @OutParameter @GLenum @Constant("MemoryUtil.getAddress(size, 1)") IntBuffer type, // Reuse size buffer and ignore + @OutParameter @GLcharARB @Constant("APIUtil.getBufferByte0()") ByteBuffer name); /** Overloads glGetActiveUniformARB. This version returns only the uniform type. */ @Alternate(value = "glGetActiveUniformARB", javaAlt = true) @GLreturn(value = "type") void glGetActiveUniformTypeARB(@GLhandleARB int programObj, @GLuint int index, @Constant("0") @GLsizei int maxLength, - @OutParameter @GLsizei @Constant("null, 0") IntBuffer length, - @OutParameter @Constant("type, 1") IntBuffer size, // Reuse type buffer and ignore + @OutParameter @GLsizei @Constant("0L") IntBuffer length, + @OutParameter @Constant("MemoryUtil.getAddress(type, 1)") IntBuffer size, // Reuse type buffer and ignore @OutParameter @GLenum IntBuffer type, - @OutParameter @GLcharARB @Constant("APIUtil.getBufferByte(0), 0") ByteBuffer name); + @OutParameter @GLcharARB @Constant("APIUtil.getBufferByte0()") ByteBuffer name); @StripPostfix("params") void glGetUniformfvARB(@GLhandleARB int programObj, int location, @OutParameter @Check FloatBuffer params); @@ -268,7 +268,7 @@ public interface ARB_shader_objects { @Alternate("glGetShaderSourceARB") @GLreturn(value = "source", maxLength = "maxLength") void glGetShaderSourceARB2(@GLhandleARB int obj, @GLsizei int maxLength, - @OutParameter @GLsizei @Constant("source_length, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(source_length)") IntBuffer length, @OutParameter @GLcharARB ByteBuffer source); } diff --git a/src/templates/org/lwjgl/opengl/ARB_shading_language_include.java b/src/templates/org/lwjgl/opengl/ARB_shading_language_include.java index 64ab50d2..4cde62d4 100644 --- a/src/templates/org/lwjgl/opengl/ARB_shading_language_include.java +++ b/src/templates/org/lwjgl/opengl/ARB_shading_language_include.java @@ -63,12 +63,12 @@ public interface ARB_shading_language_include { void glCompileShaderIncludeARB(@GLuint int shader, @GLsizei int count, @Const @NullTerminated("count") @PointerArray("count") @GLchar ByteBuffer path, - @Constant("null, 0") @Const IntBuffer length); + @Constant("0L") @Const IntBuffer length); @Alternate(value = "glCompileShaderIncludeARB", nativeAlt = true) void glCompileShaderIncludeARB2(@GLuint int shader, @Constant("path.length") @GLsizei int count, @Const @PointerArray(value = "count", lengths = "length") CharSequence[] path, - @Constant("APIUtil.getLengths(path), 0") @Const IntBuffer length); + @Constant("APIUtil.getLengths(path)") @Const IntBuffer length); boolean glIsNamedStringARB(@AutoSize("name") int namelen, @Const @GLchar ByteBuffer name); @@ -90,7 +90,7 @@ public interface ARB_shading_language_include { @GLreturn(value = "string", maxLength = "bufSize") void glGetNamedStringARB2(@Constant("name.length()") int namelen, CharSequence name, @GLsizei int bufSize, - @OutParameter @Constant("string_length, 0") IntBuffer stringlen, + @OutParameter @Constant("MemoryUtil.getAddress0(string_length)") IntBuffer stringlen, @OutParameter @GLchar ByteBuffer string); @StripPostfix("params") diff --git a/src/templates/org/lwjgl/opengl/ARB_transform_feedback2.java b/src/templates/org/lwjgl/opengl/ARB_transform_feedback2.java index 26392970..afdaa833 100644 --- a/src/templates/org/lwjgl/opengl/ARB_transform_feedback2.java +++ b/src/templates/org/lwjgl/opengl/ARB_transform_feedback2.java @@ -61,7 +61,7 @@ public interface ARB_transform_feedback2 { @Reuse("GL40") @Alternate("glDeleteTransformFeedbacks") - void glDeleteTransformFeedbacks(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getBufferInt().put(0, id), 0", keepParam = true) int id); + void glDeleteTransformFeedbacks(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getInt(id)", keepParam = true) int id); @Reuse("GL40") void glGenTransformFeedbacks(@AutoSize("ids") @GLsizei int n, @OutParameter @GLuint IntBuffer ids); diff --git a/src/templates/org/lwjgl/opengl/ARB_vertex_array_object.java b/src/templates/org/lwjgl/opengl/ARB_vertex_array_object.java index c9a24fab..7461d47e 100644 --- a/src/templates/org/lwjgl/opengl/ARB_vertex_array_object.java +++ b/src/templates/org/lwjgl/opengl/ARB_vertex_array_object.java @@ -55,7 +55,7 @@ public interface ARB_vertex_array_object { @Reuse("GL30") @Alternate("glDeleteVertexArrays") - void glDeleteVertexArrays(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getBufferInt().put(0, array), 0", keepParam = true) int array); + void glDeleteVertexArrays(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getInt(array)", keepParam = true) int array); @Reuse("GL30") void glGenVertexArrays(@AutoSize("arrays") @GLsizei int n, @OutParameter @GLuint IntBuffer arrays); diff --git a/src/templates/org/lwjgl/opengl/ARB_vertex_shader.java b/src/templates/org/lwjgl/opengl/ARB_vertex_shader.java index 2b3bdb80..91e82a52 100644 --- a/src/templates/org/lwjgl/opengl/ARB_vertex_shader.java +++ b/src/templates/org/lwjgl/opengl/ARB_vertex_shader.java @@ -161,35 +161,35 @@ public interface ARB_vertex_shader { @Alternate("glGetActiveAttribARB") @GLreturn(value = "name", maxLength = "maxLength") void glGetActiveAttribARB2(@GLhandleARB int programObj, @GLuint int index, @GLsizei int maxLength, - @OutParameter @GLsizei @Constant("name_length, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(name_length)") IntBuffer length, @OutParameter @Check("2") IntBuffer sizeType, - @OutParameter @GLenum @Constant("sizeType, sizeType.position() + 1") IntBuffer type, + @OutParameter @GLenum @Constant("MemoryUtil.getAddress(sizeType, sizeType.position() + 1)") IntBuffer type, @OutParameter @GLcharARB ByteBuffer name); /** Overloads glGetActiveAttribARB. This version returns only the attrib name. */ @Alternate(value = "glGetActiveAttribARB", javaAlt = true) @GLreturn(value = "name", maxLength = "maxLength") void glGetActiveAttribARB(@GLhandleARB int programObj, @GLuint int index, @GLsizei int maxLength, - @OutParameter @GLsizei @Constant("name_length, 0, APIUtil.getBufferInt(), 0, APIUtil.getBufferInt(), 1") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(name_length), MemoryUtil.getAddress0(APIUtil.getBufferInt()), MemoryUtil.getAddress(APIUtil.getBufferInt(), 1)") IntBuffer length, @OutParameter @GLcharARB ByteBuffer name); /** Overloads glGetActiveAttribARB. This version returns only the attrib size. */ @Alternate(value = "glGetActiveAttribARB", javaAlt = true) @GLreturn(value = "size") void glGetActiveAttribSizeARB(@GLhandleARB int programObj, @GLuint int index, @Constant("0") @GLsizei int maxLength, - @OutParameter @GLsizei @Constant("null, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("0L") IntBuffer length, @OutParameter IntBuffer size, - @OutParameter @GLenum @Constant("size, 1") IntBuffer type, // Reuse size buffer and ignore - @OutParameter @GLcharARB @Constant("APIUtil.getBufferByte(0), 0") ByteBuffer name); + @OutParameter @GLenum @Constant("MemoryUtil.getAddress(size, 1)") IntBuffer type, // Reuse size buffer and ignore + @OutParameter @GLcharARB @Constant("APIUtil.getBufferByte0()") ByteBuffer name); /** Overloads glGetActiveAttribARB. This version returns only the attrib type. */ @Alternate(value = "glGetActiveAttribARB", javaAlt = true) @GLreturn(value = "type") void glGetActiveAttribTypeARB(@GLhandleARB int programObj, @GLuint int index, @Constant("0") @GLsizei int maxLength, - @OutParameter @GLsizei @Constant("null, 0") IntBuffer length, - @OutParameter @Constant("type, 1") IntBuffer size, // Reuse type buffer and ignore + @OutParameter @GLsizei @Constant("0L") IntBuffer length, + @OutParameter @Constant("MemoryUtil.getAddress(type, 1)") IntBuffer size, // Reuse type buffer and ignore @OutParameter @GLenum IntBuffer type, - @OutParameter @GLcharARB @Constant("APIUtil.getBufferByte(0), 0") ByteBuffer name); + @OutParameter @GLcharARB @Constant("APIUtil.getBufferByte0()") ByteBuffer name); int glGetAttribLocationARB(@GLhandleARB int programObj, @NullTerminated @Const @GLcharARB ByteBuffer name); diff --git a/src/templates/org/lwjgl/opengl/ATI_draw_buffers.java b/src/templates/org/lwjgl/opengl/ATI_draw_buffers.java index 77bb68e5..a1632318 100644 --- a/src/templates/org/lwjgl/opengl/ATI_draw_buffers.java +++ b/src/templates/org/lwjgl/opengl/ATI_draw_buffers.java @@ -65,5 +65,5 @@ public interface ATI_draw_buffers { void glDrawBuffersATI(@AutoSize("buffers") @GLsizei int size, @Const @GLenum IntBuffer buffers); @Alternate("glDrawBuffersATI") - void glDrawBuffersATI(@Constant("1") @GLsizei int size, @Constant(value = "APIUtil.getBufferInt().put(0, buffer), 0", keepParam = true) int buffer); + void glDrawBuffersATI(@Constant("1") @GLsizei int size, @Constant(value = "APIUtil.getInt(buffer)", keepParam = true) int buffer); } diff --git a/src/templates/org/lwjgl/opengl/EXT_direct_state_access.java b/src/templates/org/lwjgl/opengl/EXT_direct_state_access.java index f0ab746d..7eccedfd 100644 --- a/src/templates/org/lwjgl/opengl/EXT_direct_state_access.java +++ b/src/templates/org/lwjgl/opengl/EXT_direct_state_access.java @@ -1075,7 +1075,7 @@ public interface EXT_direct_state_access { @Alternate("glTextureParameterIivEXT") @Dependent("GL_EXT_texture_integer") @StripPostfix("param") - void glTextureParameterIivEXT(@GLuint int texture, @GLenum int target, @GLenum int pname, @Constant(value = "APIUtil.getBufferInt().put(0, param), 0", keepParam = true) int param); + void glTextureParameterIivEXT(@GLuint int texture, @GLenum int target, @GLenum int pname, @Constant(value = "APIUtil.getInt(param)", keepParam = true) int param); @Dependent("GL_EXT_texture_integer") @StripPostfix("params") @@ -1084,7 +1084,7 @@ public interface EXT_direct_state_access { @Alternate("glTextureParameterIuivEXT") @Dependent("GL_EXT_texture_integer") @StripPostfix("param") - void glTextureParameterIuivEXT(@GLuint int texture, @GLenum int target, @GLenum int pname, @Constant(value = "APIUtil.getBufferInt().put(0, param), 0", keepParam = true) @GLuint int param); + void glTextureParameterIuivEXT(@GLuint int texture, @GLenum int target, @GLenum int pname, @Constant(value = "APIUtil.getInt(param)", keepParam = true) @GLuint int param); @Dependent("GL_EXT_texture_integer") @StripPostfix("params") @@ -1119,7 +1119,7 @@ public interface EXT_direct_state_access { @Alternate("glMultiTexParameterIivEXT") @Dependent("GL_EXT_texture_integer") @StripPostfix("param") - void glMultiTexParameterIivEXT(@GLenum int texunit, @GLenum int target, @GLenum int pname, @Constant(value = "APIUtil.getBufferInt().put(0, param), 0", keepParam = true) int param); + void glMultiTexParameterIivEXT(@GLenum int texunit, @GLenum int target, @GLenum int pname, @Constant(value = "APIUtil.getInt(param)", keepParam = true) int param); @Dependent("GL_EXT_texture_integer") @StripPostfix("params") @@ -1128,7 +1128,7 @@ public interface EXT_direct_state_access { @Alternate("glMultiTexParameterIuivEXT") @Dependent("GL_EXT_texture_integer") @StripPostfix("param") - void glMultiTexParameterIuivEXT(@GLenum int texunit, @GLenum int target, @GLenum int pname, @Constant(value = "APIUtil.getBufferInt().put(0, param), 0", keepParam = true) int param); + void glMultiTexParameterIuivEXT(@GLenum int texunit, @GLenum int target, @GLenum int pname, @Constant(value = "APIUtil.getInt(param)", keepParam = true) int param); @Dependent("GL_EXT_texture_integer") @StripPostfix("params") diff --git a/src/templates/org/lwjgl/opengl/EXT_framebuffer_object.java b/src/templates/org/lwjgl/opengl/EXT_framebuffer_object.java index a7bd1220..5257266a 100644 --- a/src/templates/org/lwjgl/opengl/EXT_framebuffer_object.java +++ b/src/templates/org/lwjgl/opengl/EXT_framebuffer_object.java @@ -136,7 +136,7 @@ public interface EXT_framebuffer_object { void glDeleteRenderbuffersEXT(@AutoSize("renderbuffers") int n, @Const @GLuint IntBuffer renderbuffers); @Alternate("glDeleteRenderbuffersEXT") - void glDeleteRenderbuffersEXT(@Constant("1") int n, @Constant(value = "APIUtil.getBufferInt().put(0, renderbuffer), 0", keepParam = true) int renderbuffer); + void glDeleteRenderbuffersEXT(@Constant("1") int n, @Constant(value = "APIUtil.getInt(renderbuffer)", keepParam = true) int renderbuffer); void glGenRenderbuffersEXT(@AutoSize("renderbuffers") int n, @OutParameter @GLuint IntBuffer renderbuffers); @@ -161,7 +161,7 @@ public interface EXT_framebuffer_object { void glDeleteFramebuffersEXT(@AutoSize("framebuffers") int n, @Const @GLuint IntBuffer framebuffers); @Alternate("glDeleteFramebuffersEXT") - void glDeleteFramebuffersEXT(@Constant("1") int n, @Constant(value = "APIUtil.getBufferInt().put(0, framebuffer), 0", keepParam = true) int framebuffer); + void glDeleteFramebuffersEXT(@Constant("1") int n, @Constant(value = "APIUtil.getInt(framebuffer)", keepParam = true) int framebuffer); void glGenFramebuffersEXT(@AutoSize("framebuffers") int n, @OutParameter @GLuint IntBuffer framebuffers); diff --git a/src/templates/org/lwjgl/opengl/EXT_texture_integer.java b/src/templates/org/lwjgl/opengl/EXT_texture_integer.java index 520b40db..8875b1df 100644 --- a/src/templates/org/lwjgl/opengl/EXT_texture_integer.java +++ b/src/templates/org/lwjgl/opengl/EXT_texture_integer.java @@ -118,14 +118,14 @@ public interface EXT_texture_integer { @Alternate("glTexParameterIivEXT") @StripPostfix(value = "param", postfix = "v") - void glTexParameterIivEXT(@GLenum int target, @GLenum int pname, @Constant(value = "APIUtil.getBufferInt().put(0, param), 0", keepParam = true) int param); + void glTexParameterIivEXT(@GLenum int target, @GLenum int pname, @Constant(value = "APIUtil.getInt(param)", keepParam = true) int param); @StripPostfix("params") void glTexParameterIuivEXT(@GLenum int target, @GLenum int pname, @Check("4") @GLuint IntBuffer params); @Alternate("glTexParameterIuivEXT") @StripPostfix(value = "param", postfix = "v") - void glTexParameterIuivEXT(@GLenum int target, @GLenum int pname, @Constant(value = "APIUtil.getBufferInt().put(0, param), 0", keepParam = true) int param); + void glTexParameterIuivEXT(@GLenum int target, @GLenum int pname, @Constant(value = "APIUtil.getInt(param)", keepParam = true) int param); @StripPostfix("params") void glGetTexParameterIivEXT(@GLenum int target, @GLenum int pname, @OutParameter @Check("4") IntBuffer params); diff --git a/src/templates/org/lwjgl/opengl/EXT_transform_feedback.java b/src/templates/org/lwjgl/opengl/EXT_transform_feedback.java index 204adae0..c23670f1 100644 --- a/src/templates/org/lwjgl/opengl/EXT_transform_feedback.java +++ b/src/templates/org/lwjgl/opengl/EXT_transform_feedback.java @@ -121,7 +121,7 @@ public interface EXT_transform_feedback { @Alternate("glGetTransformFeedbackVaryingEXT") @GLreturn(value = "name", maxLength = "bufSize") void glGetTransformFeedbackVaryingEXT2(@GLuint int program, @GLuint int index, @GLsizei int bufSize, - @OutParameter @GLsizei @Constant("name_length, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(name_length)") IntBuffer length, @OutParameter @GLsizei @Check("1") IntBuffer size, @OutParameter @GLenum @Check("1") IntBuffer type, @OutParameter @GLchar ByteBuffer name); diff --git a/src/templates/org/lwjgl/opengl/GL11.java b/src/templates/org/lwjgl/opengl/GL11.java index 26afd023..a5ebec0f 100644 --- a/src/templates/org/lwjgl/opengl/GL11.java +++ b/src/templates/org/lwjgl/opengl/GL11.java @@ -784,7 +784,7 @@ public interface GL11 { void glDeleteTextures(@AutoSize("textures") @GLsizei int n, @Const @GLuint IntBuffer textures); @Alternate("glDeleteTextures") - void glDeleteTextures(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getBufferInt().put(0, texture), 0", keepParam = true) int texture); + void glDeleteTextures(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getInt(texture)", keepParam = true) int texture); void glCullFace(@GLenum int mode); diff --git a/src/templates/org/lwjgl/opengl/GL15.java b/src/templates/org/lwjgl/opengl/GL15.java index a45f6b35..e2e857db 100644 --- a/src/templates/org/lwjgl/opengl/GL15.java +++ b/src/templates/org/lwjgl/opengl/GL15.java @@ -97,7 +97,7 @@ public interface GL15 { void glDeleteBuffers(@AutoSize("buffers") @GLsizei int n, @Const @GLuint IntBuffer buffers); @Alternate("glDeleteBuffers") - void glDeleteBuffers(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getBufferInt().put(0, buffer), 0", keepParam = true) int buffer); + void glDeleteBuffers(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getInt(buffer)", keepParam = true) int buffer); void glGenBuffers(@AutoSize("buffers") @GLsizei int n, @OutParameter @GLuint IntBuffer buffers); @@ -205,7 +205,7 @@ public interface GL15 { void glDeleteQueries(@AutoSize("ids") @GLsizei int n, @GLuint IntBuffer ids); @Alternate("glDeleteQueries") - void glDeleteQueries(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getBufferInt().put(0, id), 0", keepParam = true) int id); + void glDeleteQueries(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getInt(id)", keepParam = true) int id); boolean glIsQuery(@GLuint int id); diff --git a/src/templates/org/lwjgl/opengl/GL20.java b/src/templates/org/lwjgl/opengl/GL20.java index 67c4815d..6bbe3b9b 100644 --- a/src/templates/org/lwjgl/opengl/GL20.java +++ b/src/templates/org/lwjgl/opengl/GL20.java @@ -108,7 +108,7 @@ public interface GL20 { @Alternate(value = "glShaderSource", nativeAlt = true) void glShaderSource3(@GLuint int shader, @Constant("strings.length") @GLsizei int count, @Const @PointerArray(value = "count", lengths = "length") CharSequence[] strings, - @Constant("APIUtil.getLengths(strings), 0") @Const IntBuffer length); + @Constant("APIUtil.getLengths(strings)") @Const IntBuffer length); int glCreateShader(@GLuint int type); @@ -209,7 +209,7 @@ public interface GL20 { @Alternate("glGetShaderInfoLog") @GLreturn(value = "infoLog", maxLength = "maxLength") void glGetShaderInfoLog2(@GLuint int shader, @GLsizei int maxLength, - @OutParameter @GLsizei @Constant("infoLog_length, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(infoLog_length)") IntBuffer length, @OutParameter @GLchar ByteBuffer infoLog); void glGetProgramInfoLog(@GLuint int program, @AutoSize("infoLog") @GLsizei int maxLength, @@ -219,7 +219,7 @@ public interface GL20 { @Alternate("glGetProgramInfoLog") @GLreturn(value = "infoLog", maxLength = "maxLength") void glGetProgramInfoLog2(@GLuint int program, @GLsizei int maxLength, - @OutParameter @GLsizei @Constant("infoLog_length, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(infoLog_length)") IntBuffer length, @OutParameter @GLchar ByteBuffer infoLog); void glGetAttachedShaders(@GLuint int program, @AutoSize("shaders") @GLsizei int maxCount, @@ -248,35 +248,35 @@ public interface GL20 { @Alternate("glGetActiveUniform") @GLreturn(value = "name", maxLength = "maxLength") void glGetActiveUniform2(@GLuint int program, @GLuint int index, @GLsizei int maxLength, - @OutParameter @GLsizei @Constant("name_length, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(name_length)") IntBuffer length, @OutParameter @Check("2") IntBuffer sizeType, - @OutParameter @GLenum @Constant("sizeType, sizeType.position() + 1") IntBuffer type, + @OutParameter @GLenum @Constant("MemoryUtil.getAddress(sizeType, sizeType.position() + 1)") IntBuffer type, @OutParameter @GLchar ByteBuffer name); /** Overloads glGetActiveUniformARB. This version returns only the uniform name. */ @Alternate(value = "glGetActiveUniform", javaAlt = true) @GLreturn(value = "name", maxLength = "maxLength") void glGetActiveUniform(@GLuint int program, @GLuint int index, @GLsizei int maxLength, - @OutParameter @GLsizei @Constant("name_length, 0, APIUtil.getBufferInt(), 0, APIUtil.getBufferInt(), 1") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(name_length), MemoryUtil.getAddress0(APIUtil.getBufferInt()), MemoryUtil.getAddress(APIUtil.getBufferInt(), 1)") IntBuffer length, @OutParameter @GLchar ByteBuffer name); /** Overloads glGetActiveUniform. This version returns only the uniform size. */ @Alternate(value = "glGetActiveUniform", javaAlt = true) @GLreturn(value = "size") void glGetActiveUniformSize(@GLuint int program, @GLuint int index, @Constant("0") @GLsizei int maxLength, - @OutParameter @GLsizei @Constant("null, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("0L") IntBuffer length, @OutParameter IntBuffer size, - @OutParameter @GLenum @Constant("size, 1") IntBuffer type, // Reuse size buffer and ignore - @OutParameter @GLchar @Constant("APIUtil.getBufferByte(0), 0") ByteBuffer name); + @OutParameter @GLenum @Constant("MemoryUtil.getAddress(size, 1)") IntBuffer type, // Reuse size buffer and ignore + @OutParameter @GLchar @Constant("APIUtil.getBufferByte0()") ByteBuffer name); /** Overloads glGetActiveUniform. This version returns only the uniform type. */ @Alternate(value = "glGetActiveUniform", javaAlt = true) @GLreturn(value = "type") void glGetActiveUniformType(@GLuint int program, @GLuint int index, @Constant("0") @GLsizei int maxLength, - @OutParameter @GLsizei @Constant("null, 0") IntBuffer length, - @OutParameter @Constant("type, 1") IntBuffer size, // Reuse type buffer and ignore + @OutParameter @GLsizei @Constant("0L") IntBuffer length, + @OutParameter @Constant("MemoryUtil.getAddress(type, 1)") IntBuffer size, // Reuse type buffer and ignore @OutParameter @GLenum IntBuffer type, - @OutParameter @GLchar @Constant("APIUtil.getBufferByte(0), 0") ByteBuffer name); + @OutParameter @GLchar @Constant("APIUtil.getBufferByte0()") ByteBuffer name); @StripPostfix("params") void glGetUniformfv(@GLuint int program, int location, @OutParameter @Check FloatBuffer params); @@ -291,7 +291,7 @@ public interface GL20 { @Alternate("glGetShaderSource") @GLreturn(value = "source", maxLength = "maxLength") void glGetShaderSource2(@GLuint int shader, @GLsizei int maxLength, - @OutParameter @GLsizei @Constant("source_length, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(source_length)") IntBuffer length, @OutParameter @GLchar ByteBuffer source); // ------------------------------------------------------------------ @@ -423,35 +423,35 @@ public interface GL20 { @Alternate("glGetActiveAttrib") @GLreturn(value = "name", maxLength = "maxLength") void glGetActiveAttrib2(@GLuint int program, @GLuint int index, @GLsizei int maxLength, - @OutParameter @GLsizei @Constant("name_length, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(name_length)") IntBuffer length, @OutParameter @Check("2") IntBuffer sizeType, - @OutParameter @GLenum @Constant("sizeType, sizeType.position() + 1") IntBuffer type, + @OutParameter @GLenum @Constant("MemoryUtil.getAddress(sizeType, sizeType.position() + 1)") IntBuffer type, @OutParameter @GLchar ByteBuffer name); /** Overloads glGetActiveAttrib. This version returns only the attrib name. */ @Alternate(value = "glGetActiveAttrib", javaAlt = true) @GLreturn(value = "name", maxLength = "maxLength") void glGetActiveAttrib(@GLuint int program, @GLuint int index, @GLsizei int maxLength, - @OutParameter @GLsizei @Constant("name_length, 0, APIUtil.getBufferInt(), 0, APIUtil.getBufferInt(), 1") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(name_length), MemoryUtil.getAddress0(APIUtil.getBufferInt()), MemoryUtil.getAddress(APIUtil.getBufferInt(), 1)") IntBuffer length, @OutParameter @GLchar ByteBuffer name); /** Overloads glGetActiveAttribARB. This version returns only the attrib size. */ @Alternate(value = "glGetActiveAttrib", javaAlt = true) @GLreturn(value = "size") void glGetActiveAttribSize(@GLuint int program, @GLuint int index, @Constant("0") @GLsizei int maxLength, - @OutParameter @GLsizei @Constant("null, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("0L") IntBuffer length, @OutParameter IntBuffer size, - @OutParameter @GLenum @Constant("size, 1") IntBuffer type, // Reuse size buffer and ignore - @OutParameter @GLchar @Constant("APIUtil.getBufferByte(0), 0") ByteBuffer name); + @OutParameter @GLenum @Constant("MemoryUtil.getAddress(size, 1)") IntBuffer type, // Reuse size buffer and ignore + @OutParameter @GLchar @Constant("APIUtil.getBufferByte0()") ByteBuffer name); /** Overloads glGetActiveAttrib. This version returns only the attrib type. */ @Alternate(value = "glGetActiveAttrib", javaAlt = true) @GLreturn(value = "type") void glGetActiveAttribType(@GLuint int program, @GLuint int index, @Constant("0") @GLsizei int maxLength, - @OutParameter @GLsizei @Constant("null, 0") IntBuffer length, - @OutParameter @Constant("type, 1") IntBuffer size, // Reuse type buffer and ignore + @OutParameter @GLsizei @Constant("0L") IntBuffer length, + @OutParameter @Constant("MemoryUtil.getAddress(type, 1)") IntBuffer size, // Reuse type buffer and ignore @OutParameter @GLenum IntBuffer type, - @OutParameter @GLchar @Constant("APIUtil.getBufferByte(0), 0") ByteBuffer name); + @OutParameter @GLchar @Constant("APIUtil.getBufferByte0()") ByteBuffer name); int glGetAttribLocation(@GLuint int program, @NullTerminated @Const @GLchar ByteBuffer name); @@ -509,7 +509,7 @@ public interface GL20 { void glDrawBuffers(@AutoSize("buffers") @GLsizei int size, @Const @GLenum IntBuffer buffers); @Alternate("glDrawBuffers") - void glDrawBuffers(@Constant("1") @GLsizei int size, @Constant(value = "APIUtil.getBufferInt().put(0, buffer), 0", keepParam = true) int buffer); + void glDrawBuffers(@Constant("1") @GLsizei int size, @Constant(value = "APIUtil.getInt(buffer)", keepParam = true) int buffer); // ---------------------------------------------------------------- // ----------------------[ ARB_point_sprite ]---------------------- diff --git a/src/templates/org/lwjgl/opengl/GL30.java b/src/templates/org/lwjgl/opengl/GL30.java index 7c66b144..8cd77df5 100644 --- a/src/templates/org/lwjgl/opengl/GL30.java +++ b/src/templates/org/lwjgl/opengl/GL30.java @@ -528,7 +528,7 @@ public interface GL30 { void glDeleteRenderbuffers(@AutoSize("renderbuffers") int n, @Const @GLuint IntBuffer renderbuffers); @Alternate("glDeleteRenderbuffers") - void glDeleteRenderbuffers(@Constant("1") int n, @Constant(value = "APIUtil.getBufferInt().put(0, renderbuffer), 0", keepParam = true) int renderbuffer); + void glDeleteRenderbuffers(@Constant("1") int n, @Constant(value = "APIUtil.getInt(renderbuffer)", keepParam = true) int renderbuffer); void glGenRenderbuffers(@AutoSize("renderbuffers") int n, @OutParameter @GLuint IntBuffer renderbuffers); @@ -553,7 +553,7 @@ public interface GL30 { void glDeleteFramebuffers(@AutoSize("framebuffers") int n, @Const @GLuint IntBuffer framebuffers); @Alternate("glDeleteFramebuffers") - void glDeleteFramebuffers(@Constant("1") int n, @Constant(value = "APIUtil.getBufferInt().put(0, framebuffer), 0", keepParam = true) int framebuffer); + void glDeleteFramebuffers(@Constant("1") int n, @Constant(value = "APIUtil.getInt(framebuffer)", keepParam = true) int framebuffer); void glGenFramebuffers(@AutoSize("framebuffers") int n, @OutParameter @GLuint IntBuffer framebuffers); @@ -712,14 +712,14 @@ public interface GL30 { @Alternate("glTexParameterIiv") @StripPostfix(value = "param", postfix = "v") - void glTexParameterIiv(@GLenum int target, @GLenum int pname, @Constant(value = "APIUtil.getBufferInt().put(0, param), 0", keepParam = true) int param); + void glTexParameterIiv(@GLenum int target, @GLenum int pname, @Constant(value = "APIUtil.getInt(param)", keepParam = true) int param); @StripPostfix("params") void glTexParameterIuiv(@GLenum int target, @GLenum int pname, @Check("4") @GLuint IntBuffer params); @Alternate("glTexParameterIuiv") @StripPostfix(value = "param", postfix = "v") - void glTexParameterIuiv(@GLenum int target, @GLenum int pname, @Constant(value = "APIUtil.getBufferInt().put(0, param), 0", keepParam = true) int param); + void glTexParameterIuiv(@GLenum int target, @GLenum int pname, @Constant(value = "APIUtil.getInt(param)", keepParam = true) int param); @StripPostfix("params") void glGetTexParameterIiv(@GLenum int target, @GLenum int pname, @OutParameter @Check("4") IntBuffer params); @@ -996,7 +996,7 @@ public interface GL30 { @Alternate("glGetTransformFeedbackVarying") @GLreturn(value = "name", maxLength = "bufSize") void glGetTransformFeedbackVarying2(@GLuint int program, @GLuint int index, @GLsizei int bufSize, - @OutParameter @GLsizei @Constant("name_length, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(name_length)") IntBuffer length, @OutParameter @GLsizei @Check("1") IntBuffer size, @OutParameter @GLenum @Check("1") IntBuffer type, @OutParameter @GLchar ByteBuffer name); @@ -1019,7 +1019,7 @@ public interface GL30 { @Alternate("glDeleteVertexArrays") @Code(" StateTracker.deleteVAO(caps, array);") - void glDeleteVertexArrays(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getBufferInt().put(0, array), 0", keepParam = true) int array); + void glDeleteVertexArrays(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getInt(array)", keepParam = true) int array); void glGenVertexArrays(@AutoSize("arrays") @GLsizei int n, @OutParameter @GLuint IntBuffer arrays); diff --git a/src/templates/org/lwjgl/opengl/GL31.java b/src/templates/org/lwjgl/opengl/GL31.java index 880b7119..9bccc952 100644 --- a/src/templates/org/lwjgl/opengl/GL31.java +++ b/src/templates/org/lwjgl/opengl/GL31.java @@ -252,7 +252,7 @@ public interface GL31 { @GLreturn("params") @StripPostfix("params") void glGetActiveUniformsiv(@GLuint int program, @Constant("1") @GLsizei int uniformCount, - @Constant(value = "params.put(1, uniformIndex), 1", keepParam = true) int uniformIndex, // Reuse params buffer + @Constant(value = "MemoryUtil.getAddress(params.put(1, uniformIndex), 1)", keepParam = true) int uniformIndex, // Reuse params buffer @GLenum int pname, @OutParameter @GLint IntBuffer params); @@ -263,7 +263,7 @@ public interface GL31 { @Alternate("glGetActiveUniformName") @GLreturn(value = "uniformName", maxLength = "bufSize") void glGetActiveUniformName2(@GLuint int program, @GLuint int uniformIndex, @GLsizei int bufSize, - @OutParameter @GLsizei @Constant("uniformName_length, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(uniformName_length)") IntBuffer length, @OutParameter @GLchar ByteBuffer uniformName); @GLuint @@ -290,7 +290,7 @@ public interface GL31 { @Alternate("glGetActiveUniformBlockName") @GLreturn(value = "uniformBlockName", maxLength = "bufSize") void glGetActiveUniformBlockName2(@GLuint int program, @GLuint int uniformBlockIndex, @GLsizei int bufSize, - @OutParameter @GLsizei @Constant("uniformBlockName_length, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(uniformBlockName_length)") IntBuffer length, @OutParameter @GLchar ByteBuffer uniformBlockName); void glUniformBlockBinding(@GLuint int program, @GLuint int uniformBlockIndex, @GLuint int uniformBlockBinding); diff --git a/src/templates/org/lwjgl/opengl/GL32.java b/src/templates/org/lwjgl/opengl/GL32.java index e2229cc2..bbf88c5e 100644 --- a/src/templates/org/lwjgl/opengl/GL32.java +++ b/src/templates/org/lwjgl/opengl/GL32.java @@ -335,6 +335,6 @@ public interface GL32 { @GLreturn("values") @StripPostfix("values") void glGetSynciv2(@PointerWrapper("GLsync") GLSync sync, @GLenum int pname, @Constant("1") @GLsizei int bufSize, - @OutParameter @GLsizei @Constant("null, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("0L") IntBuffer length, @OutParameter IntBuffer values); } \ No newline at end of file diff --git a/src/templates/org/lwjgl/opengl/GL33.java b/src/templates/org/lwjgl/opengl/GL33.java index e3de1df4..8b2662ff 100644 --- a/src/templates/org/lwjgl/opengl/GL33.java +++ b/src/templates/org/lwjgl/opengl/GL33.java @@ -102,7 +102,7 @@ public interface GL33 { void glDeleteSamplers(@AutoSize("samplers") @GLsizei int count, @Const @GLuint IntBuffer samplers); @Alternate("glDeleteSamplers") - void glDeleteSamplers(@Constant("1") @GLsizei int count, @Constant(value = "APIUtil.getBufferInt().put(0, sampler), 0", keepParam = true) int sampler); + void glDeleteSamplers(@Constant("1") @GLsizei int count, @Constant(value = "APIUtil.getInt(sampler)", keepParam = true) int sampler); boolean glIsSampler(@GLuint int sampler); diff --git a/src/templates/org/lwjgl/opengl/GL40.java b/src/templates/org/lwjgl/opengl/GL40.java index e7c1e26e..dcf7aadf 100644 --- a/src/templates/org/lwjgl/opengl/GL40.java +++ b/src/templates/org/lwjgl/opengl/GL40.java @@ -233,7 +233,7 @@ public interface GL40 { @Alternate("glGetActiveSubroutineUniformName") @GLreturn(value = "name", maxLength = "bufsize") void glGetActiveSubroutineUniformName2(@GLuint int program, @GLenum int shadertype, @GLuint int index, @GLsizei int bufsize, - @OutParameter @Constant("name_length, 0") @GLsizei IntBuffer length, + @OutParameter @Constant("MemoryUtil.getAddress0(name_length)") @GLsizei IntBuffer length, @OutParameter @GLchar ByteBuffer name); void glGetActiveSubroutineName(@GLuint int program, @GLenum int shadertype, @GLuint int index, @AutoSize("name") @GLsizei int bufsize, @@ -243,7 +243,7 @@ public interface GL40 { @Alternate("glGetActiveSubroutineName") @GLreturn(value = "name", maxLength = "bufsize") void glGetActiveSubroutineName2(@GLuint int program, @GLenum int shadertype, @GLuint int index, @GLsizei int bufsize, - @OutParameter @Constant("name_length, 0") @GLsizei IntBuffer length, + @OutParameter @Constant("MemoryUtil.getAddress0(name_length)") @GLsizei IntBuffer length, @OutParameter @GLchar ByteBuffer name); @StripPostfix("indices") @@ -404,7 +404,7 @@ public interface GL40 { void glDeleteTransformFeedbacks(@AutoSize("ids") @GLsizei int n, @Const @GLuint IntBuffer ids); @Alternate("glDeleteTransformFeedbacks") - void glDeleteTransformFeedbacks(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getBufferInt().put(0, id), 0", keepParam = true) int id); + void glDeleteTransformFeedbacks(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getInt(id)", keepParam = true) int id); void glGenTransformFeedbacks(@AutoSize("ids") @GLsizei int n, @OutParameter @GLuint IntBuffer ids); diff --git a/src/templates/org/lwjgl/opengl/GL41.java b/src/templates/org/lwjgl/opengl/GL41.java index 4311974c..691e3abe 100644 --- a/src/templates/org/lwjgl/opengl/GL41.java +++ b/src/templates/org/lwjgl/opengl/GL41.java @@ -166,7 +166,7 @@ public interface GL41 { void glDeleteProgramPipelines(@AutoSize("pipelines") @GLsizei int n, @Const @GLuint IntBuffer pipelines); @Alternate("glDeleteProgramPipelines") - void glDeleteProgramPipelines(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getBufferInt().put(0, pipeline), 0", keepParam = true) int pipeline); + void glDeleteProgramPipelines(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getInt(pipeline)", keepParam = true) int pipeline); void glGenProgramPipelines(@AutoSize("pipelines") @GLsizei int n, @OutParameter @GLuint IntBuffer pipelines); @@ -339,7 +339,7 @@ public interface GL41 { @Alternate("glGetProgramPipelineInfoLog") @GLreturn(value = "infoLog", maxLength = "bufSize") void glGetProgramPipelineInfoLog2(@GLuint int pipeline, @GLsizei int bufSize, - @OutParameter @GLsizei @Constant("infoLog_length, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(infoLog_length)") IntBuffer length, @OutParameter @GLchar ByteBuffer infoLog); // ----------------------------------------------------------------------- diff --git a/src/templates/org/lwjgl/opengl/NV_fence.java b/src/templates/org/lwjgl/opengl/NV_fence.java index 981c2689..46a28deb 100644 --- a/src/templates/org/lwjgl/opengl/NV_fence.java +++ b/src/templates/org/lwjgl/opengl/NV_fence.java @@ -54,7 +54,7 @@ public interface NV_fence { void glDeleteFencesNV(@AutoSize("piFences") @GLsizei int n, @Const @GLuint IntBuffer piFences); @Alternate("glDeleteFencesNV") - void glDeleteFencesNV(@Constant("1") @GLsizei int n, @Const @GLuint @Constant(value = "APIUtil.getBufferInt().put(0, fence), 0", keepParam = true) int fence); + void glDeleteFencesNV(@Constant("1") @GLsizei int n, @Const @GLuint @Constant(value = "APIUtil.getInt(fence)", keepParam = true) int fence); void glSetFenceNV(@GLuint int fence, @GLenum int condition); diff --git a/src/templates/org/lwjgl/opengl/NV_occlusion_query.java b/src/templates/org/lwjgl/opengl/NV_occlusion_query.java index 5fb3092d..52746a5d 100644 --- a/src/templates/org/lwjgl/opengl/NV_occlusion_query.java +++ b/src/templates/org/lwjgl/opengl/NV_occlusion_query.java @@ -59,7 +59,7 @@ public interface NV_occlusion_query { void glDeleteOcclusionQueriesNV(@AutoSize("piIDs") @GLsizei int n, @Const @GLuint IntBuffer piIDs); @Alternate("glDeleteOcclusionQueriesNV") - void glDeleteOcclusionQueriesNV(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getBufferInt().put(0, piID), 0", keepParam = true) int piID); + void glDeleteOcclusionQueriesNV(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getInt(piID)", keepParam = true) int piID); boolean glIsOcclusionQueryNV(@GLuint int id); diff --git a/src/templates/org/lwjgl/opengl/NV_program.java b/src/templates/org/lwjgl/opengl/NV_program.java index 9709bad3..4e843235 100644 --- a/src/templates/org/lwjgl/opengl/NV_program.java +++ b/src/templates/org/lwjgl/opengl/NV_program.java @@ -69,7 +69,7 @@ public interface NV_program { void glDeleteProgramsNV(@AutoSize("programs") @GLsizei int n, @Const @GLuint IntBuffer programs); @Alternate("glDeleteProgramsNV") - void glDeleteProgramsNV(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getBufferInt().put(0, program), 0", keepParam = true) int program); + void glDeleteProgramsNV(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getInt(program)", keepParam = true) int program); void glGenProgramsNV(@AutoSize("programs") @GLsizei int n, @OutParameter @GLuint IntBuffer programs); @@ -101,6 +101,6 @@ public interface NV_program { void glRequestResidentProgramsNV(@AutoSize("programIDs") @GLsizei int n, @GLuint IntBuffer programIDs); @Alternate("glRequestResidentProgramsNV") - void glRequestResidentProgramsNV(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getBufferInt().put(0, programID), 0", keepParam = true) int programID); + void glRequestResidentProgramsNV(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getInt(programID)", keepParam = true) int programID); } diff --git a/src/templates/org/lwjgl/opengl/NV_transform_feedback.java b/src/templates/org/lwjgl/opengl/NV_transform_feedback.java index ee8d6269..261110f6 100644 --- a/src/templates/org/lwjgl/opengl/NV_transform_feedback.java +++ b/src/templates/org/lwjgl/opengl/NV_transform_feedback.java @@ -143,35 +143,35 @@ public interface NV_transform_feedback { @Alternate("glGetActiveVaryingNV") @GLreturn(value = "name", maxLength = "bufSize") void glGetActiveVaryingNV2(@GLuint int program, @GLuint int index, @GLsizei int bufSize, - @OutParameter @GLsizei @Constant("name_length, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(name_length)") IntBuffer length, @OutParameter @Check("2") IntBuffer sizeType, - @OutParameter @GLenum @Constant("sizeType, sizeType.position() + 1") IntBuffer type, + @OutParameter @GLenum @Constant("MemoryUtil.getAddress(sizeType, sizeType.position() + 1)") IntBuffer type, @OutParameter @GLchar ByteBuffer name); /** Overloads glGetActiveVaryingNV. This version returns only the varying name. */ @Alternate(value = "glGetActiveVaryingNV", javaAlt = true) @GLreturn(value = "name", maxLength = "bufSize") void glGetActiveVaryingNV(@GLuint int program, @GLuint int index, @GLsizei int bufSize, - @OutParameter @GLsizei @Constant("name_length, 0, APIUtil.getBufferInt(), 0, APIUtil.getBufferInt(), 1") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(name_length), MemoryUtil.getAddress0(APIUtil.getBufferInt()), MemoryUtil.getAddress(APIUtil.getBufferInt(), 1)") IntBuffer length, @OutParameter @GLchar ByteBuffer name); /** Overloads glGetActiveVaryingNV. This version returns only the varying size. */ @Alternate(value = "glGetActiveVaryingNV", javaAlt = true) @GLreturn(value = "size") void glGetActiveVaryingSizeNV(@GLuint int program, @GLuint int index, @Constant("0") @GLsizei int bufSize, - @OutParameter @GLsizei @Constant("null, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("0L") IntBuffer length, @OutParameter IntBuffer size, - @OutParameter @GLenum @Constant("size, 1") IntBuffer type, // Reuse size buffer and ignore - @OutParameter @GLchar @Constant("APIUtil.getBufferByte(0), 0") ByteBuffer name); + @OutParameter @GLenum @Constant("MemoryUtil.getAddress(size, 1)") IntBuffer type, // Reuse size buffer and ignore + @OutParameter @GLchar @Constant("APIUtil.getBufferByte0()") ByteBuffer name); /** Overloads glGetActiveVaryingNV. This version returns only the varying type. */ @Alternate(value = "glGetActiveVaryingNV", javaAlt = true) @GLreturn(value = "type") void glGetActiveVaryingTypeNV(@GLuint int program, @GLuint int index, @Constant("0") @GLsizei int bufSize, - @OutParameter @GLsizei @Constant("null, 0") IntBuffer length, - @OutParameter @Constant("type, 1") IntBuffer size, // Reuse type buffer and ignore + @OutParameter @GLsizei @Constant("0L") IntBuffer length, + @OutParameter @Constant("MemoryUtil.getAddress(type, 1)") IntBuffer size, // Reuse type buffer and ignore @OutParameter @GLenum IntBuffer type, - @OutParameter @GLchar @Constant("APIUtil.getBufferByte(0), 0") ByteBuffer name); + @OutParameter @GLchar @Constant("APIUtil.getBufferByte0()") ByteBuffer name); void glActiveVaryingNV(@GLuint int program, @NullTerminated @Const @GLchar ByteBuffer name); diff --git a/src/templates/org/lwjgl/opengl/NV_transform_feedback2.java b/src/templates/org/lwjgl/opengl/NV_transform_feedback2.java index 32c7f98a..5c7b4fa2 100644 --- a/src/templates/org/lwjgl/opengl/NV_transform_feedback2.java +++ b/src/templates/org/lwjgl/opengl/NV_transform_feedback2.java @@ -59,7 +59,7 @@ public interface NV_transform_feedback2 { void glDeleteTransformFeedbacksNV(@AutoSize("ids") @GLsizei int n, @Const @GLuint IntBuffer ids); @Alternate("glDeleteTransformFeedbacksNV") - void glDeleteTransformFeedbacksNV(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getBufferInt().put(0, id), 0", keepParam = true) int id); + void glDeleteTransformFeedbacksNV(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getInt(id)", keepParam = true) int id); void glGenTransformFeedbacksNV(@AutoSize("ids") @GLsizei int n, @OutParameter @GLuint IntBuffer ids); diff --git a/src/templates/org/lwjgl/opengles/AMD_performance_monitor.java b/src/templates/org/lwjgl/opengles/AMD_performance_monitor.java index 91629c7c..9ce1da0e 100644 --- a/src/templates/org/lwjgl/opengles/AMD_performance_monitor.java +++ b/src/templates/org/lwjgl/opengles/AMD_performance_monitor.java @@ -75,7 +75,7 @@ public interface AMD_performance_monitor { @Alternate("glGetPerfMonitorGroupStringAMD") @GLreturn(value = "groupString", maxLength = "bufSize") void glGetPerfMonitorGroupStringAMD2(@GLuint int group, @GLsizei int bufSize, - @OutParameter @GLsizei @Constant("groupString_length, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(groupString_length)") IntBuffer length, @OutParameter @GLchar ByteBuffer groupString); void glGetPerfMonitorCounterStringAMD(@GLuint int group, @GLuint int counter, @AutoSize("counterString") @GLsizei int bufSize, @@ -85,7 +85,7 @@ public interface AMD_performance_monitor { @Alternate("glGetPerfMonitorCounterStringAMD") @GLreturn(value = "counterString", maxLength = "bufSize") void glGetPerfMonitorCounterStringAMD2(@GLuint int group, @GLuint int counter, @GLsizei int bufSize, - @OutParameter @GLsizei @Constant("counterString_length, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(counterString_length)") IntBuffer length, @OutParameter @GLchar ByteBuffer counterString); void glGetPerfMonitorCounterInfoAMD(@GLuint int group, @GLuint int counter, @GLenum int pname, @Check(value = "16") @GLvoid ByteBuffer data); @@ -99,12 +99,12 @@ public interface AMD_performance_monitor { void glDeletePerfMonitorsAMD(@AutoSize("monitors") @GLsizei int n, @GLuint IntBuffer monitors); @Alternate("glDeletePerfMonitorsAMD") - void glDeletePerfMonitorsAMD(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getBufferInt().put(0, monitor), 0", keepParam = true) int monitor); + void glDeletePerfMonitorsAMD(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getInt(monitor)", keepParam = true) int monitor); void glSelectPerfMonitorCountersAMD(@GLuint int monitor, boolean enable, @GLuint int group, @AutoSize("counterList") int numCounters, @GLuint IntBuffer counterList); @Alternate("glSelectPerfMonitorCountersAMD") - void glSelectPerfMonitorCountersAMD(@GLuint int monitor, boolean enable, @GLuint int group, @Constant("1") int numCounters, @Constant(value = "APIUtil.getBufferInt().put(0, counter), 0", keepParam = true) int counter); + void glSelectPerfMonitorCountersAMD(@GLuint int monitor, boolean enable, @GLuint int group, @Constant("1") int numCounters, @Constant(value = "APIUtil.getInt(counter)", keepParam = true) int counter); void glBeginPerfMonitorAMD(@GLuint int monitor); @@ -118,6 +118,6 @@ public interface AMD_performance_monitor { @GLreturn("data") void glGetPerfMonitorCounterDataAMD2(@GLuint int monitor, @GLenum int pname, @Constant("4") @GLsizei int dataSize, @OutParameter @GLuint IntBuffer data, - @OutParameter @GLint @Constant("null, 0") IntBuffer bytesWritten); + @OutParameter @GLint @Constant("0L") IntBuffer bytesWritten); } \ No newline at end of file diff --git a/src/templates/org/lwjgl/opengles/ARB_draw_buffers.java b/src/templates/org/lwjgl/opengles/ARB_draw_buffers.java index 1e3c864b..f2969969 100644 --- a/src/templates/org/lwjgl/opengles/ARB_draw_buffers.java +++ b/src/templates/org/lwjgl/opengles/ARB_draw_buffers.java @@ -64,6 +64,6 @@ public interface ARB_draw_buffers { void glDrawBuffersARB(@AutoSize("buffers") @GLsizei int size, @Const @GLenum IntBuffer buffers); @Alternate("glDrawBuffersARB") - void glDrawBuffersARB(@Constant("1") @GLsizei int size, @Constant(value = "APIUtil.getBufferInt().put(0, buffer), 0", keepParam = true) int buffer); + void glDrawBuffersARB(@Constant("1") @GLsizei int size, @Constant(value = "APIUtil.getInt(buffer)", keepParam = true) int buffer); } \ No newline at end of file diff --git a/src/templates/org/lwjgl/opengles/GLES20.java b/src/templates/org/lwjgl/opengles/GLES20.java index ae705d2d..40f82fdc 100644 --- a/src/templates/org/lwjgl/opengles/GLES20.java +++ b/src/templates/org/lwjgl/opengles/GLES20.java @@ -521,26 +521,26 @@ public interface GLES20 { void glDeleteBuffers(@AutoSize("buffers") @GLsizei int n, @Const @GLuint IntBuffer buffers); @Alternate("glDeleteBuffers") - void glDeleteBuffers(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getBufferInt().put(0, buffer), 0", keepParam = true) int buffer); + void glDeleteBuffers(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getInt(buffer)", keepParam = true) int buffer); void glDeleteFramebuffers(@AutoSize("framebuffers") int n, @Const @GLuint IntBuffer framebuffers); @Alternate("glDeleteFramebuffers") - void glDeleteFramebuffers(@Constant("1") int n, @Constant(value = "APIUtil.getBufferInt().put(0, framebuffer), 0", keepParam = true) int framebuffer); + void glDeleteFramebuffers(@Constant("1") int n, @Constant(value = "APIUtil.getInt(framebuffer)", keepParam = true) int framebuffer); void glDeleteProgram(@GLuint int program); void glDeleteRenderbuffers(@AutoSize("renderbuffers") int n, @Const @GLuint IntBuffer renderbuffers); @Alternate("glDeleteRenderbuffers") - void glDeleteRenderbuffers(@Constant("1") int n, @Constant(value = "APIUtil.getBufferInt().put(0, renderbuffer), 0", keepParam = true) int renderbuffer); + void glDeleteRenderbuffers(@Constant("1") int n, @Constant(value = "APIUtil.getInt(renderbuffer)", keepParam = true) int renderbuffer); void glDeleteShader(@GLuint int shader); void glDeleteTextures(@AutoSize("textures") @GLsizei int n, @Const @GLuint IntBuffer textures); @Alternate("glDeleteTextures") - void glDeleteTextures(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getBufferInt().put(0, texture), 0", keepParam = true) int texture); + void glDeleteTextures(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getInt(texture)", keepParam = true) int texture); void glDepthFunc(@GLenum int func); @@ -609,35 +609,35 @@ public interface GLES20 { @Alternate("glGetActiveAttrib") @GLreturn(value = "name", maxLength = "bufsize") void glGetActiveAttrib2(@GLuint int program, @GLuint int index, @GLsizei int bufsize, - @OutParameter @Constant("name_length, 0") @GLsizei IntBuffer length, + @OutParameter @Constant("MemoryUtil.getAddress0(name_length)") @GLsizei IntBuffer length, @OutParameter @Check("2") IntBuffer sizeType, - @OutParameter @Constant("sizeType, sizeType.position() + 1") @GLenum IntBuffer type, + @OutParameter @Constant("MemoryUtil.getAddress(sizeType, sizeType.position() + 1)") @GLenum IntBuffer type, @OutParameter @GLchar ByteBuffer name); /** Overloads glGetActiveAttrib. This version returns only the attrib name. */ @Alternate(value = "glGetActiveAttrib", javaAlt = true) @GLreturn(value = "name", maxLength = "bufsize") void glGetActiveAttrib(@GLuint int program, @GLuint int index, @GLsizei int bufsize, - @OutParameter @GLsizei @Constant("name_length, 0, APIUtil.getBufferInt(), 0, APIUtil.getBufferInt(), 1") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(name_length), MemoryUtil.getAddress0(APIUtil.getBufferInt()), MemoryUtil.getAddress(APIUtil.getBufferInt(), 1)") IntBuffer length, @OutParameter @GLchar ByteBuffer name); /** Overloads glGetActiveAttrib. This version returns only the attrib size. */ @Alternate(value = "glGetActiveAttrib", javaAlt = true) @GLreturn(value = "size") void glGetActiveAttribSize(@GLuint int program, @GLuint int index, @Constant("0") @GLsizei int bufsize, - @OutParameter @GLsizei @Constant("null, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("0L") IntBuffer length, @OutParameter IntBuffer size, - @OutParameter @GLenum @Constant("size, 1") IntBuffer type, // Reuse size buffer and ignore - @OutParameter @GLchar @Constant("APIUtil.getBufferByte(0), 0") ByteBuffer name); + @OutParameter @GLenum @Constant("MemoryUtil.getAddress(size, 1)") IntBuffer type, // Reuse size buffer and ignore + @OutParameter @GLchar @Constant("APIUtil.getBufferByte0()") ByteBuffer name); /** Overloads glGetActiveAttrib. This version returns only the attrib type. */ @Alternate(value = "glGetActiveAttrib", javaAlt = true) @GLreturn(value = "type") void glGetActiveAttribType(@GLuint int program, @GLuint int index, @Constant("0") @GLsizei int bufsize, - @OutParameter @GLsizei @Constant("null, 0") IntBuffer length, - @OutParameter @Constant("type, 1") IntBuffer size, // Reuse type buffer and ignore + @OutParameter @GLsizei @Constant("0L") IntBuffer length, + @OutParameter @Constant("MemoryUtil.getAddress(type, 1)") IntBuffer size, // Reuse type buffer and ignore @OutParameter @GLenum IntBuffer type, - @OutParameter @GLchar @Constant("APIUtil.getBufferByte(0), 0") ByteBuffer name); + @OutParameter @GLchar @Constant("APIUtil.getBufferByte0()") ByteBuffer name); void glGetActiveUniform(@GLuint int program, @GLuint int index, @AutoSize("name") @GLsizei int bufsize, @OutParameter @Check(value = "1", canBeNull = true) @GLsizei IntBuffer length, @@ -649,35 +649,35 @@ public interface GLES20 { @Alternate("glGetActiveUniform") @GLreturn(value = "name", maxLength = "bufsize") void glGetActiveUniform2(@GLuint int program, @GLuint int index, @GLsizei int bufsize, - @OutParameter @Constant("name_length, 0") @GLsizei IntBuffer length, + @OutParameter @Constant("MemoryUtil.getAddress0(name_length)") @GLsizei IntBuffer length, @OutParameter @Check("2") IntBuffer sizeType, - @OutParameter @Constant("sizeType, sizeType.position() + 1") @GLenum IntBuffer type, + @OutParameter @Constant("MemoryUtil.getAddress(sizeType, sizeType.position() + 1)") @GLenum IntBuffer type, @OutParameter @GLchar ByteBuffer name); /** Overloads glGetActiveUniformARB. This version returns only the uniform name. */ @Alternate(value = "glGetActiveUniform", javaAlt = true) @GLreturn(value = "name", maxLength = "bufsize") void glGetActiveUniform(@GLuint int program, @GLuint int index, @GLsizei int bufsize, - @OutParameter @GLsizei @Constant("name_length, 0, APIUtil.getBufferInt(), 0, APIUtil.getBufferInt(), 1") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(name_length), MemoryUtil.getAddress0(APIUtil.getBufferInt()), MemoryUtil.getAddress(APIUtil.getBufferInt(), 1)") IntBuffer length, @OutParameter @GLchar ByteBuffer name); /** Overloads glGetActiveUniform. This version returns only the uniform size. */ @Alternate(value = "glGetActiveUniform", javaAlt = true) @GLreturn(value = "size") void glGetActiveUniformSize(@GLuint int program, @GLuint int index, @Constant("0") @GLsizei int bufsize, - @OutParameter @GLsizei @Constant("null, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("0L") IntBuffer length, @OutParameter IntBuffer size, - @OutParameter @GLenum @Constant("size, 1") IntBuffer type, // Reuse size buffer and ignore - @OutParameter @GLchar @Constant("APIUtil.getBufferByte(0), 0") ByteBuffer name); + @OutParameter @GLenum @Constant("MemoryUtil.getAddress(size, 1)") IntBuffer type, // Reuse size buffer and ignore + @OutParameter @GLchar @Constant("APIUtil.getBufferByte0()") ByteBuffer name); /** Overloads glGetActiveUniform. This version returns only the uniform type. */ @Alternate(value = "glGetActiveUniform", javaAlt = true) @GLreturn(value = "type") void glGetActiveUniformType(@GLuint int program, @GLuint int index, @Constant("0") @GLsizei int bufsize, - @OutParameter @GLsizei @Constant("null, 0") IntBuffer length, - @OutParameter @Constant("type, 1") IntBuffer size, // Reuse type buffer and ignore + @OutParameter @GLsizei @Constant("0L") IntBuffer length, + @OutParameter @Constant("MemoryUtil.getAddress(type, 1)") IntBuffer size, // Reuse type buffer and ignore @OutParameter @GLenum IntBuffer type, - @OutParameter @GLchar @Constant("APIUtil.getBufferByte(0), 0") ByteBuffer name); + @OutParameter @GLchar @Constant("APIUtil.getBufferByte0()") ByteBuffer name); void glGetAttachedShaders(@GLuint int program, @AutoSize("shaders") @GLsizei int maxCount, @OutParameter @Check(value = "1", canBeNull = true) @GLsizei IntBuffer count, @@ -747,7 +747,7 @@ public interface GLES20 { @Alternate("glGetProgramInfoLog") @GLreturn(value = "infoLog", maxLength = "bufsize") void glGetProgramInfoLog2(@GLuint int program, @GLsizei int bufsize, - @OutParameter @GLsizei @Constant("infoLog_length, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(infoLog_length)") IntBuffer length, @OutParameter @GLchar ByteBuffer infoLog); @StripPostfix("params") @@ -773,7 +773,7 @@ public interface GLES20 { @Alternate("glGetShaderInfoLog") @GLreturn(value = "infoLog", maxLength = "bufsize") void glGetShaderInfoLog2(@GLuint int shader, @GLsizei int bufsize, - @OutParameter @GLsizei @Constant("infoLog_length, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(infoLog_length)") IntBuffer length, @OutParameter @GLchar ByteBuffer infoLog); void glGetShaderPrecisionFormat(@GLenum int shadertype, @GLenum int precisiontype, @OutParameter @GLint @Check("2") IntBuffer range, @OutParameter @Check("1") @GLint IntBuffer precision); @@ -785,7 +785,7 @@ public interface GLES20 { @Alternate("glGetShaderSource") @GLreturn(value = "source", maxLength = "bufsize") void glGetShaderSource2(@GLuint int shader, @GLsizei int bufsize, - @OutParameter @GLsizei @Constant("source_length, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(source_length)") IntBuffer length, @OutParameter @GLchar ByteBuffer source); @Const @@ -897,7 +897,7 @@ public interface GLES20 { @Alternate(value = "glShaderSource", nativeAlt = true) void glShaderSource3(@GLuint int shader, @Constant("strings.length") @GLsizei int count, @Const @PointerArray(value = "count", lengths = "length") CharSequence[] strings, - @Constant("APIUtil.getLengths(strings), 0") @Const IntBuffer length); + @Constant("APIUtil.getLengths(strings)") @Const IntBuffer length); void glStencilFunc(@GLenum int func, @GLint int ref, @GLuint int mask); diff --git a/src/templates/org/lwjgl/opengles/NV_draw_buffers.java b/src/templates/org/lwjgl/opengles/NV_draw_buffers.java index 6d26c9dc..6550106e 100644 --- a/src/templates/org/lwjgl/opengles/NV_draw_buffers.java +++ b/src/templates/org/lwjgl/opengles/NV_draw_buffers.java @@ -85,6 +85,6 @@ public interface NV_draw_buffers { void glDrawBuffersNV(@AutoSize("bufs") @GLsizei int n, @Const @GLenum IntBuffer bufs); @Alternate("glDrawBuffersNV") - void glDrawBuffersNV(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getBufferInt().put(0, buf), 0", keepParam = true) int buf); + void glDrawBuffersNV(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getInt(buf)", keepParam = true) int buf); } \ No newline at end of file diff --git a/src/templates/org/lwjgl/opengles/NV_fence.java b/src/templates/org/lwjgl/opengles/NV_fence.java index f7f2ad8d..79533f68 100644 --- a/src/templates/org/lwjgl/opengles/NV_fence.java +++ b/src/templates/org/lwjgl/opengles/NV_fence.java @@ -57,7 +57,7 @@ public interface NV_fence { void glDeleteFencesNV(@AutoSize("fences") @GLsizei int n, @Const @GLuint IntBuffer fences); @Alternate("glDeleteFencesNV") - void glDeleteFencesNV(@Constant("1") @GLsizei int n, @Const @GLuint @Constant(value = "APIUtil.getBufferInt().put(0, fence), 0", keepParam = true) int fence); + void glDeleteFencesNV(@Constant("1") @GLsizei int n, @Const @GLuint @Constant(value = "APIUtil.getInt(fence)", keepParam = true) int fence); void glSetFenceNV(@GLuint int fence, @GLenum int condition); diff --git a/src/templates/org/lwjgl/opengles/OES_framebuffer_object.java b/src/templates/org/lwjgl/opengles/OES_framebuffer_object.java index 21aaa5ec..a786b750 100644 --- a/src/templates/org/lwjgl/opengles/OES_framebuffer_object.java +++ b/src/templates/org/lwjgl/opengles/OES_framebuffer_object.java @@ -129,7 +129,7 @@ public interface OES_framebuffer_object { void glDeleteRenderbuffersOES(@AutoSize("renderbuffers") int n, @Const @GLuint IntBuffer renderbuffers); @Alternate("glDeleteRenderbuffersOES") - void glDeleteRenderbuffersOES(@Constant("1") int n, @Constant(value = "APIUtil.getBufferInt().put(0, renderbuffer), 0", keepParam = true) int renderbuffer); + void glDeleteRenderbuffersOES(@Constant("1") int n, @Constant(value = "APIUtil.getInt(renderbuffer)", keepParam = true) int renderbuffer); void glGenRenderbuffersOES(@AutoSize("renderbuffers") int n, @OutParameter @GLuint IntBuffer renderbuffers); @@ -154,7 +154,7 @@ public interface OES_framebuffer_object { void glDeleteFramebuffersOES(@AutoSize("framebuffers") int n, @Const @GLuint IntBuffer framebuffers); @Alternate("glDeleteFramebuffersOES") - void glDeleteFramebuffersOES(@Constant("1") int n, @Constant(value = "APIUtil.getBufferInt().put(0, framebuffer), 0", keepParam = true) int framebuffer); + void glDeleteFramebuffersOES(@Constant("1") int n, @Constant(value = "APIUtil.getInt(framebuffer)", keepParam = true) int framebuffer); void glGenFramebuffersOES(@AutoSize("framebuffers") int n, @OutParameter @GLuint IntBuffer framebuffers); diff --git a/src/templates/org/lwjgl/opengles/OES_vertex_array_object.java b/src/templates/org/lwjgl/opengles/OES_vertex_array_object.java index ec95a456..cc267375 100644 --- a/src/templates/org/lwjgl/opengles/OES_vertex_array_object.java +++ b/src/templates/org/lwjgl/opengles/OES_vertex_array_object.java @@ -48,7 +48,7 @@ public interface OES_vertex_array_object { void glDeleteVertexArraysOES(@AutoSize("arrays") @GLsizei int n, @Const @GLuint IntBuffer arrays); @Alternate("glDeleteVertexArraysOES") - void glDeleteVertexArraysOES(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getBufferInt().put(0, array), 0", keepParam = true) int array); + void glDeleteVertexArraysOES(@Constant("1") @GLsizei int n, @Constant(value = "APIUtil.getInt(array)", keepParam = true) int array); void glGenVertexArraysOES(@AutoSize("arrays") @GLsizei int n, @OutParameter @GLuint IntBuffer arrays); diff --git a/src/templates/org/lwjgl/opengles/QCOM_driver_control.java b/src/templates/org/lwjgl/opengles/QCOM_driver_control.java index a44ddbec..01dc3fb4 100644 --- a/src/templates/org/lwjgl/opengles/QCOM_driver_control.java +++ b/src/templates/org/lwjgl/opengles/QCOM_driver_control.java @@ -55,7 +55,7 @@ public interface QCOM_driver_control { @GLreturn(value = "driverControlString", maxLength = "bufSize") void glGetDriverControlStringQCOM2(@GLuint int driverControl, @GLsizei int bufSize, - @OutParameter @GLsizei @Constant("driverControlString_length, 0") IntBuffer length, + @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(driverControlString_length)") IntBuffer length, @OutParameter @GLchar ByteBuffer driverControlString); void glEnableDriverControlQCOM(@GLuint int driverControl);