diff --git a/platform_build/build-generator.xml b/platform_build/build-generator.xml index 4f56b3f6..da8b16a2 100644 --- a/platform_build/build-generator.xml +++ b/platform_build/build-generator.xml @@ -7,7 +7,7 @@ - + @@ -17,6 +17,7 @@ + @@ -42,7 +43,7 @@ - + @@ -111,7 +112,7 @@ - + @@ -125,8 +126,8 @@ - - + + @@ -141,5 +142,5 @@ - + diff --git a/src/java/org/lwjgl/opengl/AMDDebugOutputCallback.java b/src/java/org/lwjgl/opengl/AMDDebugOutputCallback.java index 00381613..6ff3b9d3 100644 --- a/src/java/org/lwjgl/opengl/AMDDebugOutputCallback.java +++ b/src/java/org/lwjgl/opengl/AMDDebugOutputCallback.java @@ -59,7 +59,7 @@ public final class AMDDebugOutputCallback implements PointerWrapper { private final long pointer; /** - * Creates a AMDDebugOutputCallback with a default callback handler. + * Creates an AMDDebugOutputCallback with a default callback handler. * The default handler will simply print the message on System.err. */ public AMDDebugOutputCallback() { @@ -120,7 +120,7 @@ public final class AMDDebugOutputCallback implements PointerWrapper { } /** - * Creates a AMDDebugOutputCallback with the specified callback handlers. + * Creates an AMDDebugOutputCallback with the specified callback handlers. * The handler's {@code handleMessage} method will be called whenever * debug output is generated by the GL. * diff --git a/src/java/org/lwjgl/opengl/AMDDebugOutputUtil.java b/src/java/org/lwjgl/opengl/AMDDebugOutputUtil.java index 1227833e..38f7d901 100644 --- a/src/java/org/lwjgl/opengl/AMDDebugOutputUtil.java +++ b/src/java/org/lwjgl/opengl/AMDDebugOutputUtil.java @@ -28,7 +28,7 @@ final class AMDDebugOutputUtil { if ( !ctx.getContextAttribs().isDebug() ) throw new IllegalStateException("The current context is not a debug context."); - if ( !GLContext.getCapabilities().GL_AMD_debug_output ) + if ( !GLContext.getCapabilities().GL_AMD_debug_output ) throw new IllegalStateException("AMD_debug_output is not supported."); handlers.put(ctx, handler); diff --git a/src/java/org/lwjgl/opengl/ARBDebugOutputCallback.java b/src/java/org/lwjgl/opengl/ARBDebugOutputCallback.java new file mode 100644 index 00000000..69bf1db2 --- /dev/null +++ b/src/java/org/lwjgl/opengl/ARBDebugOutputCallback.java @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2002-2008 LWJGL Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'LWJGL' nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.lwjgl.opengl; + +/** + * Instances of this class are needed to use the callback functionality of the ARB_debug_output extension. + * A debug context must be current before creating instances of this class. Users of this class may provide + * implementations of the {@code Handler} interface to receive notifications. The same {@code Handler} + * instance may be used by different contexts but it is not recommended. Handler notifications are synchronized. + * + * @author Spasi + */ +public final class ARBDebugOutputCallback implements PointerWrapper { + + /** Severity levels. */ + private static final int + GL_DEBUG_SEVERITY_HIGH_ARB = 0x9146, + GL_DEBUG_SEVERITY_MEDIUM_ARB = 0x9147, + GL_DEBUG_SEVERITY_LOW_ARB = 0x9148; + + /** Sources. */ + private static final int + GL_DEBUG_SOURCE_API_ARB = 0x8246, + GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB = 0x8247, + GL_DEBUG_SOURCE_SHADER_COMPILER_ARB = 0x8248, + GL_DEBUG_SOURCE_THIRD_PARTY_ARB = 0x8249, + GL_DEBUG_SOURCE_APPLICATION_ARB = 0x824A, + GL_DEBUG_SOURCE_OTHER_ARB = 0x824B; + + /** Types. */ + private static final int + GL_DEBUG_TYPE_ERROR_ARB = 0x824C, + GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB = 0x824D, + GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB = 0x824E, + GL_DEBUG_TYPE_PORTABILITY_ARB = 0x824F, + GL_DEBUG_TYPE_PERFORMANCE_ARB = 0x8250, + GL_DEBUG_TYPE_OTHER_ARB = 0x8251; + + private final long pointer; + + /** + * Creates an ARBDebugOutputCallback with a default callback handler. + * The default handler will simply print the message on System.err. + */ + public ARBDebugOutputCallback() { + this(new Handler() { + public void handleMessage(final int source, final int type, final int id, final int severity, final String message) { + System.err.println("[LWJGL] ARB_debug_output message"); + System.err.println("\tID: " + id); + + String description; + switch ( source ) { + case GL_DEBUG_SOURCE_API_ARB: + description = "API"; + break; + case GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB: + description = "WINDOW SYSTEM"; + break; + case GL_DEBUG_SOURCE_SHADER_COMPILER_ARB: + description = "SHADER COMPILER"; + break; + case GL_DEBUG_SOURCE_THIRD_PARTY_ARB: + description = "THIRD PARTY"; + break; + case GL_DEBUG_SOURCE_APPLICATION_ARB: + description = "APPLICATION"; + break; + case GL_DEBUG_SOURCE_OTHER_ARB: + description = "OTHER"; + break; + default: + description = "Unknown (" + Integer.toHexString(source) + ")"; + } + System.err.println("\tSource: " + description); + + switch ( type ) { + case GL_DEBUG_TYPE_ERROR_ARB: + description = "ERROR"; + break; + case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB: + description = "DEPRECATED BEHAVIOR"; + break; + case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB: + description = "UNDEFINED BEHAVIOR"; + break; + case GL_DEBUG_TYPE_PORTABILITY_ARB: + description = "PORTABILITY"; + break; + case GL_DEBUG_TYPE_PERFORMANCE_ARB: + description = "PERFORMANCE"; + break; + case GL_DEBUG_TYPE_OTHER_ARB: + description = "OTHER"; + break; + default: + description = "Unknown (" + Integer.toHexString(source) + ")"; + } + System.err.println("\tType: " + description); + + switch ( severity ) { + case GL_DEBUG_SEVERITY_HIGH_ARB: + description = "HIGH"; + break; + case GL_DEBUG_SEVERITY_MEDIUM_ARB: + description = "MEDIUM"; + break; + case GL_DEBUG_SEVERITY_LOW_ARB: + description = "LOW"; + break; + default: + description = "Unknown (" + Integer.toHexString(source) + ")"; + } + System.err.println("\tSeverity: " + description); + + System.err.println("\tMessage: " + message); + } + }); + } + + /** + * Creates an ARBDebugOutputCallback with the specified callback handlers. + * The handler's {@code handleMessage} method will be called whenever + * debug output is generated by the GL. + * + * @param handler the callback handler + */ + public ARBDebugOutputCallback(final Handler handler) { + try { + // We have to call registerHandler reflectively because we need this class to compile before we run the Generator. + // The registerHandler method depends on org.lwjgl.opengl.Context, if we touched that we would need to compile + // the whole library (which is not possible). + Class.forName("org.lwjgl.opengl.ARBDebugOutputUtil").getMethod("registerHandler", new Class[] { Handler.class }).invoke(null, new Object[] { handler }); + } catch (Exception e) { + throw new RuntimeException(e.getCause() != null ? e.getCause() : e); + } + this.pointer = getFunctionPointer(); + } + + public long getPointer() { + return pointer; + } + + private static native long getFunctionPointer(); + + /** Implementations of this interface can be used to receive ARB_debug_output notifications. */ + public interface Handler { + + /** + * This method will be called when an AMD_debug_output message is generated. + * + * @param id the message ID + * @param source the message source + * @param type the message type + * @param severity the message severity + * @param message the string representation of the message. + */ + void handleMessage(int source, int type, int id, int severity, String message); + + } + +} \ No newline at end of file diff --git a/src/java/org/lwjgl/opengl/ARBDebugOutputUtil.java b/src/java/org/lwjgl/opengl/ARBDebugOutputUtil.java new file mode 100644 index 00000000..e59ac05d --- /dev/null +++ b/src/java/org/lwjgl/opengl/ARBDebugOutputUtil.java @@ -0,0 +1,60 @@ +package org.lwjgl.opengl; + +import org.lwjgl.opengl.ARBDebugOutputCallback.Handler; + +import java.nio.ByteBuffer; +import java.util.Map; +import java.util.WeakHashMap; + +/** + * This class handles ARBDebugOutputCallback.Handler registration and notification. + * We could have put this in ARBDebugOutputCallback, but we need to compile it for + * the generator. Registration is done reflectively in the ARBDebugOutputCallback + * constructor. + * + * @author Spasi + */ +final class ARBDebugOutputUtil { + + private static final Map handlers = new WeakHashMap(); + + private ARBDebugOutputUtil() {} + + public static void registerHandler(final Handler handler) { + final Context ctx = Context.getCurrentContext(); + if ( ctx == null ) + throw new IllegalStateException("No context is current."); + + if ( !ctx.getContextAttribs().isDebug() ) + throw new IllegalStateException("The current context is not a debug context."); + + if ( !GLContext.getCapabilities().GL_ARB_debug_output ) + throw new IllegalStateException("ARB_debug_output is not supported."); + + handlers.put(ctx, handler); + } + + /** + * This method is called by native code. If finds the callback handler associated + * with the current Thread and calls its {@code handleMessage} method. + * + * @param source the message source + * @param type the message type + * @param id the message ID + * @param severity the message severity + * @param message the string representation of the message. + * @param userParam the user-specified data specified in glDebugMessageCallbackAMD. For the current implementation this is always null and we ignore it. + */ + private static void messageCallback(final int source, final int type, final int id, final int severity, final String message, final ByteBuffer userParam) { + synchronized ( GlobalLock.lock ) { + final Context ctx = Context.getCurrentContext(); + if ( ctx == null ) + return; + + final Handler handler = (Handler)handlers.get(ctx); + if ( handler != null ) + handler.handleMessage(source, type, id, severity, message); + } + } + +} \ No newline at end of file diff --git a/src/java/org/lwjgl/opengl/ContextAttribs.java b/src/java/org/lwjgl/opengl/ContextAttribs.java index a056b645..3c0ad6ec 100644 --- a/src/java/org/lwjgl/opengl/ContextAttribs.java +++ b/src/java/org/lwjgl/opengl/ContextAttribs.java @@ -56,6 +56,13 @@ import java.nio.IntBuffer; */ public final class ContextAttribs { + // Same values for GLX & WGL + private static final int CONTEXT_ROBUST_ACCESS_BIT_ARB = 0x00000004; + private static final int CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB = 0x8256; + private static final int + NO_RESET_NOTIFICATION_ARB = 0x8261, + LOSE_CONTEXT_ON_RESET_ARB = 0x8252; + private int majorVersion; private int minorVersion; @@ -63,10 +70,13 @@ public final class ContextAttribs { private boolean debug; private boolean forwardCompatible; + private boolean robustAccess; private boolean profileCore; private boolean profileCompatibility; + private boolean loseContextOnReset; + public ContextAttribs() { this(1, 0); } @@ -82,14 +92,6 @@ public final class ContextAttribs { this.majorVersion = majorVersion; this.minorVersion = minorVersion; - - this.layerPlane = 0; - - this.debug = false; - this.forwardCompatible = false; - - this.profileCore = false; - this.profileCompatibility = false; } private ContextAttribs(final ContextAttribs attribs) { @@ -100,9 +102,12 @@ public final class ContextAttribs { this.debug = attribs.debug; this.forwardCompatible = attribs.forwardCompatible; + this.robustAccess = attribs.robustAccess; this.profileCore = attribs.profileCore; this.profileCompatibility = attribs.profileCompatibility; + + this.loseContextOnReset = attribs.loseContextOnReset; } public int getMajorVersion() { @@ -193,6 +198,24 @@ public final class ContextAttribs { return attribs; } + /** + * Returns a ContextAttribs instance with CONTEXT_RESET_NOTIFICATION_STRATEGY set + * to LOSE_CONTEXT_ON_RESET if the parameter is true or to NO_RESET_NOTIFICATION + * if the parameter is false. + * + * @param loseContextOnReset + * + * @return the new ContextAttribs + */ + public ContextAttribs withLoseContextOnReset(final boolean loseContextOnReset) { + if ( loseContextOnReset == this.loseContextOnReset ) + return this; + + final ContextAttribs attribs = new ContextAttribs(this); + attribs.loseContextOnReset = loseContextOnReset; + return attribs; + } + private static ContextAttribsImplementation getImplementation() { switch ( LWJGLUtil.getPlatform() ) { case LWJGLUtil.PLATFORM_LINUX: @@ -221,6 +244,8 @@ public final class ContextAttribs { flags |= implementation.getDebugBit(); if ( forwardCompatible ) flags |= implementation.getForwardCompatibleBit(); + if ( robustAccess ) + flags |= CONTEXT_ROBUST_ACCESS_BIT_ARB; if ( 0 < flags ) attribCount++; @@ -247,6 +272,8 @@ public final class ContextAttribs { attribs.put(implementation.getFlagsAttrib()).put(flags); if ( 0 < profileMask ) attribs.put(implementation.getProfileMaskAttrib()).put(profileMask); + if ( loseContextOnReset ) + attribs.put(CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB).put(LOSE_CONTEXT_ON_RESET_ARB); attribs.put(0); attribs.rewind(); @@ -261,6 +288,9 @@ public final class ContextAttribs { sb.append(" - Layer=").append(layerPlane); sb.append(" - Debug=").append(debug); sb.append(" - ForwardCompatible=").append(forwardCompatible); + sb.append(" - RobustAccess=").append(robustAccess); + if ( robustAccess ) + sb.append(" (").append(loseContextOnReset ? "LOSE_CONTEXT_ON_RESET" : "NO_RESET_NOTIFICATION"); sb.append(" - Profile="); if ( profileCore ) sb.append("Core"); diff --git a/src/java/org/lwjgl/opengl/GLContext.java b/src/java/org/lwjgl/opengl/GLContext.java index 240c1e63..c3f0d591 100644 --- a/src/java/org/lwjgl/opengl/GLContext.java +++ b/src/java/org/lwjgl/opengl/GLContext.java @@ -215,37 +215,21 @@ public final class GLContext { LWJGLUtil.log("The major and/or minor OpenGL version is malformed: " + e.getMessage()); } - // ----------------------[ 4.X ]---------------------- - if ( 4 <= majorVersion ) - supported_extensions.add("OpenGL40"); + final int[][] GL_VERSIONS = { + { 1, 2, 3, 4, 5 }, // OpenGL 1 + { 0, 1 }, // OpenGL 2 + { 0, 1, 2, 3 }, // OpenGL 3 + { 0, 1 }, // OpenGL 4 + }; - // ----------------------[ 3.X ]---------------------- - if ( 3 < majorVersion || (3 == majorVersion && 3 <= minorVersion) ) - supported_extensions.add("OpenGL33"); - if ( 3 < majorVersion || (3 == majorVersion && 2 <= minorVersion) ) - supported_extensions.add("OpenGL32"); - if ( 3 < majorVersion || (3 == majorVersion && 1 <= minorVersion) ) - supported_extensions.add("OpenGL31"); - if ( 3 <= majorVersion ) - supported_extensions.add("OpenGL30"); - - // ----------------------[ 2.X ]---------------------- - if ( 2 < majorVersion || (2 == majorVersion && 1 <= minorVersion) ) - supported_extensions.add("OpenGL21"); - if ( 2 <= majorVersion ) - supported_extensions.add("OpenGL20"); - - // ----------------------[ 1.X ]---------------------- - if ( 1 < majorVersion || 5 <= minorVersion ) - supported_extensions.add("OpenGL15"); - if ( 1 < majorVersion || 4 <= minorVersion ) - supported_extensions.add("OpenGL14"); - if ( 1 < majorVersion || 3 <= minorVersion ) - supported_extensions.add("OpenGL13"); - if ( 1 < majorVersion || 2 <= minorVersion ) - supported_extensions.add("OpenGL12"); - if ( 1 < majorVersion || 1 <= minorVersion ) - supported_extensions.add("OpenGL11"); + for ( int major = 1; major <= GL_VERSIONS.length; major++ ) { + int[] minors = GL_VERSIONS[major - 1]; + for ( int i = 0; i < minors.length; i++ ) { + int minor = minors[i]; + if ( major < majorVersion || (major == majorVersion && minor <= minorVersion) ) + supported_extensions.add("OpenGL" + Integer.toString(major) + Integer.toString(minor)); + } + } int profileMask = 0; diff --git a/src/java/org/lwjgl/util/generator/GLTypeMap.java b/src/java/org/lwjgl/util/generator/GLTypeMap.java index 3254cee6..7e466442 100644 --- a/src/java/org/lwjgl/util/generator/GLTypeMap.java +++ b/src/java/org/lwjgl/util/generator/GLTypeMap.java @@ -133,9 +133,9 @@ public class GLTypeMap implements TypeMap { return "s"; else if ( annotation_type.equals(GLubyte.class) || annotation_type.equals(GLbyte.class) ) return "b"; - else if ( annotation_type.equals(GLfloat.class) ) + else if ( annotation_type.equals(GLfloat.class) || annotation_type.equals(GLclampf.class) ) return "f"; - else if ( annotation_type.equals(GLdouble.class) ) + else if ( annotation_type.equals(GLdouble.class) || annotation_type.equals(GLclampd.class) ) return "d"; else if ( annotation_type.equals(GLhalf.class) ) return "h"; diff --git a/src/native/common/extgl.h b/src/native/common/extgl.h index 4bec56a7..2f20ba47 100644 --- a/src/native/common/extgl.h +++ b/src/native/common/extgl.h @@ -136,6 +136,9 @@ typedef struct __GLsync *GLsync; /* AMD_debug_output callback function pointer. */ typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id, GLenum category, GLenum severity, GLsizei length, const GLchar* message, GLvoid* userParam); +/* ARB_debug_output callback function pointer. */ +typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, GLvoid* userParam); + /* helper stuff */ /* initializes everything, call this right after the rc is created. the function returns true if successful */ diff --git a/src/native/common/org_lwjgl_opengl_AMDDebugOutputCallback.c b/src/native/common/org_lwjgl_opengl_AMDDebugOutputCallback.c index 5a23e3e7..ee13e4cd 100644 --- a/src/native/common/org_lwjgl_opengl_AMDDebugOutputCallback.c +++ b/src/native/common/org_lwjgl_opengl_AMDDebugOutputCallback.c @@ -41,7 +41,11 @@ #include "extgl.h" #include "org_lwjgl_opengl_AMDDebugOutputCallback.h" -static void APIENTRY debugOutputCallback(GLuint id, GLenum category, GLenum severity, GLsizei length, const GLchar* message, GLvoid* userParam) { +static jclass debugOutputCallbackClassAMD; +static jmethodID debugOutputCallbackMethodAMD; + +static void APIENTRY debugOutputCallbackAMD(GLuint id, GLenum category, GLenum severity, GLsizei length, const GLchar* message, GLvoid* userParam) { + /* jclass callback_class; jmethodID callback_method; JNIEnv *env = getThreadEnv(); @@ -60,8 +64,25 @@ static void APIENTRY debugOutputCallback(GLuint id, GLenum category, GLenum seve } } } + */ + + JNIEnv *env = getThreadEnv(); + if ( env != NULL && !(*env)->ExceptionOccurred(env) && debugOutputCallbackMethodAMD != NULL ) { + (*env)->CallStaticVoidMethod(env, debugOutputCallbackClassAMD, debugOutputCallbackMethodAMD, + (jint)id, + (jint)category, + (jint)severity, + NewStringNativeWithLength(env, message, length), + NULL // Ignoring user param, pointless for our implementation + ); + } } JNIEXPORT jlong JNICALL Java_org_lwjgl_opengl_AMDDebugOutputCallback_getFunctionPointer(JNIEnv *env, jclass clazz) { - return (jlong)(intptr_t)&debugOutputCallback; + // Cache the callback class and methodID + debugOutputCallbackClassAMD = (*env)->FindClass(env, "org/lwjgl/opengl/AMDDebugOutputUtil"); + if ( debugOutputCallbackClassAMD != NULL ) + debugOutputCallbackMethodAMD = (*env)->GetStaticMethodID(env, debugOutputCallbackClassAMD, "messageCallback", "(IIILjava/lang/String;Ljava/nio/ByteBuffer;)V"); + + return (jlong)(intptr_t)&debugOutputCallbackAMD; } diff --git a/src/native/common/org_lwjgl_opengl_ARBDebugOutputCallback.c b/src/native/common/org_lwjgl_opengl_ARBDebugOutputCallback.c new file mode 100644 index 00000000..365739db --- /dev/null +++ b/src/native/common/org_lwjgl_opengl_ARBDebugOutputCallback.c @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2002-2008 LWJGL Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'LWJGL' nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * JNI implementation of the AMD_debug_output function callback. + * + * @author Spasi + */ + +#include +#include "common_tools.h" +#include "extgl.h" +#include "org_lwjgl_opengl_ARBDebugOutputCallback.h" + +static jclass debugOutputCallbackClassARB; +static jmethodID debugOutputCallbackMethodARB; + +static void APIENTRY debugOutputCallbackARB(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, GLvoid* userParam) { + JNIEnv *env = getThreadEnv(); + if ( env != NULL && !(*env)->ExceptionOccurred(env) && debugOutputCallbackMethodARB != NULL ) { + (*env)->CallStaticVoidMethod(env, debugOutputCallbackClassARB, debugOutputCallbackMethodARB, + (jint)source, + (jint)type, + (jint)id, + (jint)severity, + NewStringNativeWithLength(env, message, length), + NULL // Ignoring user param, pointless for our implementation + ); + } +} + +JNIEXPORT jlong JNICALL Java_org_lwjgl_opengl_ARBDebugOutputCallback_getFunctionPointer(JNIEnv *env, jclass clazz) { + // Cache the callback class and methodID + debugOutputCallbackClassARB = (*env)->FindClass(env, "org/lwjgl/opengl/ARBDebugOutputUtil"); + if ( debugOutputCallbackClassARB != NULL ) + debugOutputCallbackMethodARB = (*env)->GetStaticMethodID(env, debugOutputCallbackClassARB, "messageCallback", "(IIIILjava/lang/String;Ljava/nio/ByteBuffer;)V"); + + return (jlong)(intptr_t)&debugOutputCallbackARB; +} diff --git a/src/templates/org/lwjgl/opengl/ARB_ES2_compatibility.java b/src/templates/org/lwjgl/opengl/ARB_ES2_compatibility.java new file mode 100644 index 00000000..99949f13 --- /dev/null +++ b/src/templates/org/lwjgl/opengl/ARB_ES2_compatibility.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2002-2008 LWJGL Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'LWJGL' nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.lwjgl.opengl; + +import org.lwjgl.util.generator.*; + +import java.nio.ByteBuffer; +import java.nio.IntBuffer; + +public interface ARB_ES2_compatibility { + + /** + * Accepted by the <value> parameter of GetBooleanv, GetIntegerv, + * GetInteger64v, GetFloatv, and GetDoublev: + */ + int GL_SHADER_COMPILER = 0x8DFA, + GL_NUM_SHADER_BINARY_FORMATS = 0x8DF9, + GL_MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB, + GL_MAX_VARYING_VECTORS = 0x8DFC, + GL_MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD, + GL_IMPLEMENTATION_COLOR_READ_TYPE = 0x8B9A, + GL_IMPLEMENTATION_COLOR_READ_FORMAT = 0x8B9B; + + /** Accepted by the <type> parameter of VertexAttribPointer: */ + int GL_FIXED = 0x140C; + + /** + * Accepted by the <precisiontype> parameter of + * GetShaderPrecisionFormat: + */ + int GL_LOW_FLOAT = 0x8DF0, + GL_MEDIUM_FLOAT = 0x8DF1, + GL_HIGH_FLOAT = 0x8DF2, + GL_LOW_INT = 0x8DF3, + GL_MEDIUM_INT = 0x8DF4, + GL_HIGH_INT = 0x8DF5; + + void glReleaseShaderCompiler(); + + void glShaderBinary(@AutoSize("shaders") @GLsizei int count, @Const @GLuint IntBuffer shaders, + @GLenum int binaryformat, @Const @GLvoid ByteBuffer binary, @AutoSize("binary") @GLsizei int length); + + void glGetShaderPrecisionFormat(@GLenum int shadertype, @GLenum int precisiontype, + @OutParameter @Check("2") IntBuffer range, + @OutParameter @Check("1") IntBuffer precision); + + void glDepthRangef(@GLclampf float n, @GLclampf float f); + + void glClearDepthf(@GLclampf float d); + +} \ No newline at end of file diff --git a/src/templates/org/lwjgl/opengl/ARB_debug_output.java b/src/templates/org/lwjgl/opengl/ARB_debug_output.java new file mode 100644 index 00000000..9aa737f4 --- /dev/null +++ b/src/templates/org/lwjgl/opengl/ARB_debug_output.java @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2002-2008 LWJGL Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'LWJGL' nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.lwjgl.opengl; + +import org.lwjgl.util.generator.*; + +import java.nio.ByteBuffer; +import java.nio.IntBuffer; + +public interface ARB_debug_output { + + /** + * Tokens accepted by the <target> parameters of Enable, Disable, + * and IsEnabled: + */ + int GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB = 0x8242; + + /** + * Tokens accepted by the <value> parameters of GetBooleanv, + * GetIntegerv, GetFloatv, and GetDoublev: + */ + int GL_MAX_DEBUG_MESSAGE_LENGTH_ARB = 0x9143, + GL_MAX_DEBUG_LOGGED_MESSAGES_ARB = 0x9144, + GL_DEBUG_LOGGED_MESSAGES_ARB = 0x9145, + GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB = 0x8243; + + /** Tokens accepted by the <pname> parameter of GetPointerv: */ + int GL_DEBUG_CALLBACK_FUNCTION_ARB = 0x8244, + GL_DEBUG_CALLBACK_USER_PARAM_ARB = 0x8245; + + /** + * Tokens accepted or provided by the <source> parameters of + * DebugMessageControlARB, DebugMessageInsertARB and DEBUGPROCARB, + * and the <sources> parameter of GetDebugMessageLogARB: + */ + int GL_DEBUG_SOURCE_API_ARB = 0x8246, + GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB = 0x8247, + GL_DEBUG_SOURCE_SHADER_COMPILER_ARB = 0x8248, + GL_DEBUG_SOURCE_THIRD_PARTY_ARB = 0x8249, + GL_DEBUG_SOURCE_APPLICATION_ARB = 0x824A, + GL_DEBUG_SOURCE_OTHER_ARB = 0x824B; + + /** + * Tokens accepted or provided by the <type> parameters of + * DebugMessageControlARB, DebugMessageInsertARB and DEBUGPROCARB, + * and the <types> parameter of GetDebugMessageLogARB: + */ + int GL_DEBUG_TYPE_ERROR_ARB = 0x824C, + GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB = 0x824D, + GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB = 0x824E, + GL_DEBUG_TYPE_PORTABILITY_ARB = 0x824F, + GL_DEBUG_TYPE_PERFORMANCE_ARB = 0x8250, + GL_DEBUG_TYPE_OTHER_ARB = 0x8251; + + /** + * Tokens accepted or provided by the <severity> parameters of + * DebugMessageControlARB, DebugMessageInsertARB and DEBUGPROCARB + * callback functions, and the <severities> parameter of + * GetDebugMessageLogARB: + */ + int GL_DEBUG_SEVERITY_HIGH_ARB = 0x9146, + GL_DEBUG_SEVERITY_MEDIUM_ARB = 0x9147, + GL_DEBUG_SEVERITY_LOW_ARB = 0x9148; + + void glDebugMessageControlARB(@GLenum int source, + @GLenum int type, + @GLenum int severity, + @AutoSize(value = "ids", canBeNull = true) @GLsizei int count, + @Check(canBeNull = true) @Const @GLuint IntBuffer ids, + boolean enabled); + + void glDebugMessageInsertARB(@GLenum int source, @GLenum int type, @GLuint int id, @GLenum int severity, @AutoSize("buf") @GLsizei int length, @Const @GLchar ByteBuffer buf); + + @Alternate("glDebugMessageInsertARB") + void glDebugMessageInsertARB(@GLenum int source, @GLenum int type, @GLuint int id, @GLenum int severity, @Constant("buf.length()") @GLsizei int length, CharSequence buf); + + void glDebugMessageCallbackARB(@GLpointer(value = "GLDEBUGPROCARB", canBeNull = true) ARBDebugOutputCallback callback, @Check(canBeNull = true) @GLvoid ByteBuffer userParam); + + @GLuint + int glGetDebugMessageLogARB(@GLuint int count, + @AutoSize(value = "messageLog", canBeNull = true) @GLsizei int logSize, + @Check(value = "count", canBeNull = true) @GLenum IntBuffer sources, + @Check(value = "count", canBeNull = true) @GLenum IntBuffer types, + @Check(value = "count", canBeNull = true) @GLuint IntBuffer ids, + @Check(value = "count", canBeNull = true) @GLenum IntBuffer severities, + @Check(value = "count", canBeNull = true) @GLsizei IntBuffer lengths, + @Check(canBeNull = true) @OutParameter @GLchar ByteBuffer messageLog); + + // Not really useful and a pain to implement in Java + //void glGetPointerv(@GLenum int pname, void**params); + +} \ No newline at end of file diff --git a/src/templates/org/lwjgl/opengl/ARB_get_program_binary.java b/src/templates/org/lwjgl/opengl/ARB_get_program_binary.java new file mode 100644 index 00000000..9bb8e8f2 --- /dev/null +++ b/src/templates/org/lwjgl/opengl/ARB_get_program_binary.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2002-2008 LWJGL Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'LWJGL' nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.lwjgl.opengl; + +import org.lwjgl.util.generator.*; + +import java.nio.ByteBuffer; +import java.nio.IntBuffer; + +public interface ARB_get_program_binary { + + /** + * Accepted by the <pname> parameter of ProgramParameteri and + * GetProgramiv: + */ + int GL_PROGRAM_BINARY_RETRIEVABLE_HINT = 0x8257; + + /** Accepted by the <pname> parameter of GetProgramiv: */ + int GL_PROGRAM_BINARY_LENGTH = 0x8741; + + /** + * Accepted by the <pname> parameter of GetBooleanv, GetIntegerv, + * GetInteger64v, GetFloatv and GetDoublev: + */ + int GL_NUM_PROGRAM_BINARY_FORMATS = 0x87FE, + GL_PROGRAM_BINARY_FORMATS = 0x87FF; + + void glGetProgramBinary(@GLuint int program, @AutoSize("binary") @GLsizei int bufSize, + @Check(value = "1", canBeNull = true) @GLsizei IntBuffer length, + @Check("1") @GLenum IntBuffer binaryFormat, + @OutParameter @GLvoid ByteBuffer binary); + + void glProgramBinary(@GLuint int program, @GLenum int binaryFormat, @Const @GLvoid ByteBuffer binary, @AutoSize("binary") @GLsizei int length); + + void glProgramParameteri(@GLuint int program, @GLenum int pname, int value); + +} \ No newline at end of file diff --git a/src/templates/org/lwjgl/opengl/ARB_robustness.java b/src/templates/org/lwjgl/opengl/ARB_robustness.java new file mode 100644 index 00000000..fe847c41 --- /dev/null +++ b/src/templates/org/lwjgl/opengl/ARB_robustness.java @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2002-2008 LWJGL Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'LWJGL' nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.lwjgl.opengl; + +import org.lwjgl.util.generator.*; + +import java.nio.*; + +@Dependent +@DeprecatedGL +public interface ARB_robustness { + + /** Returned by GetGraphicsResetStatusARB: */ + int GL_NO_ERROR = 0x0000, + GL_GUILTY_CONTEXT_RESET_ARB = 0x8253, + GL_INNOCENT_CONTEXT_RESET_ARB = 0x8254, + GL_UNKNOWN_CONTEXT_RESET_ARB = 0x8255; + + /** + * Accepted by the <value> parameter of GetBooleanv, GetIntegerv, + * GetInteger64v, GetFloatv, and GetDoublev: + */ + int GL_RESET_NOTIFICATION_STRATEGY_ARB = 0x8256; + + /** + * Returned by GetIntegerv and related simple queries when + * <value> is RESET_NOTIFICATION_STRATEGY_ARB: + */ + int GL_LOSE_CONTEXT_ON_RESET_ARB = 0x8252, + GL_NO_RESET_NOTIFICATION_ARB = 0x8261; + + /** Returned by GetIntegerv when <pname> is CONTEXT_FLAGS: */ + int GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB = 0x00000004; + + @GLenum + int glGetGraphicsResetStatusARB(); + + @DeprecatedGL + void glGetnMapdvARB(@GLenum int target, @GLenum int query, @Constant("v.remaining() << 3") @GLsizei int bufSize, @OutParameter @Check DoubleBuffer v); + + @DeprecatedGL + void glGetnMapfvARB(@GLenum int target, @GLenum int query, @Constant("v.remaining() << 2") @GLsizei int bufSize, @OutParameter @Check FloatBuffer v); + + @DeprecatedGL + void glGetnMapivARB(@GLenum int target, @GLenum int query, @Constant("v.remaining() << 2") @GLsizei int bufSize, @OutParameter @Check IntBuffer v); + + @DeprecatedGL + void glGetnPixelMapfvARB(@GLenum int map, @Constant("values.remaining() << 2") @GLsizei int bufSize, @OutParameter @Check FloatBuffer values); + + @DeprecatedGL + void glGetnPixelMapuivARB(@GLenum int map, @Constant("values.remaining() << 2") @GLsizei int bufSize, @OutParameter @Check @GLuint IntBuffer values); + + @DeprecatedGL + void glGetnPixelMapusvARB(@GLenum int map, @Constant("values.remaining() << 1") @GLsizei int bufSize, @OutParameter @Check @GLushort ShortBuffer values); + + @DeprecatedGL + void glGetnPolygonStippleARB(@AutoSize("pattern") @GLsizei int bufSize, @OutParameter @GLubyte ByteBuffer pattern); + + void glGetnTexImageARB(@GLenum int target, int level, @GLenum int format, @GLenum int type, @AutoSize("img") @GLsizei int bufSize, + @OutParameter + @BufferObject(BufferKind.PackPBO) + @GLbyte + @GLshort + @GLint + @GLfloat + @GLdouble Buffer img); + + void glReadnPixelsARB(int x, int y, @GLsizei int width, @GLsizei int height, + @GLenum int format, @GLenum int type, @AutoSize("data") @GLsizei int bufSize, + @OutParameter + @BufferObject(BufferKind.PackPBO) + @GLbyte + @GLshort + @GLint + @GLfloat + @GLdouble Buffer data); + + @Dependent("GL_ARB_imaging") + void glGetnColorTableARB(@GLenum int target, @GLenum int format, @GLenum int type, @AutoSize("table") @GLsizei int bufSize, + @OutParameter + @GLbyte + @GLfloat + @GLdouble Buffer table); + + @Dependent("GL_ARB_imaging") + void glGetnConvolutionFilterARB(@GLenum int target, @GLenum int format, @GLenum int type, @AutoSize("image") @GLsizei int bufSize, + @OutParameter + @BufferObject(BufferKind.PackPBO) + @GLbyte + @GLshort + @GLint + @GLfloat + @GLdouble Buffer image); + + @Dependent("GL_ARB_imaging") + void glGetnSeparableFilterARB(@GLenum int target, @GLenum int format, @GLenum int type, + @AutoSize("row") @GLsizei int rowBufSize, + @OutParameter + @BufferObject(BufferKind.PackPBO) + @GLbyte + @GLshort + @GLint + @GLfloat + @GLdouble Buffer row, + @AutoSize("column") @GLsizei int columnBufSize, + @OutParameter + @BufferObject(BufferKind.PackPBO) + @GLbyte + @GLshort + @GLint + @GLfloat + @GLdouble Buffer column, + @OutParameter + @BufferObject(BufferKind.PackPBO) + @Check + @GLbyte + @GLshort + @GLint + @GLfloat + @GLdouble Buffer span); + + @Dependent("GL_ARB_imaging") + void glGetnHistogramARB(@GLenum int target, boolean reset, @GLenum int format, @GLenum int type, @AutoSize("values") @GLsizei int bufSize, + @OutParameter + @BufferObject(BufferKind.PackPBO) + @GLbyte + @GLshort + @GLint + @GLfloat + @GLdouble Buffer values); + + @Dependent("GL_ARB_imaging") + void glGetnMinmaxARB(@GLenum int target, boolean reset, @GLenum int format, @GLenum int type, @AutoSize("values") @GLsizei int bufSize, + @OutParameter + @BufferObject(BufferKind.PackPBO) + @GLbyte + @GLshort + @GLint + @GLfloat + @GLdouble Buffer values); + + @Dependent("OpenGL13") + void glGetnCompressedTexImageARB(@GLenum int target, int lod, @AutoSize("img") @GLsizei int bufSize, + @OutParameter + @BufferObject(BufferKind.PackPBO) + @GLbyte + @GLshort + @GLint Buffer img); + + @Dependent("OpenGL20") + void glGetnUniformfvARB(@GLuint int program, int location, @Constant("params.remaining() << 2") @GLsizei int bufSize, @OutParameter @Check FloatBuffer params); + + @Dependent("OpenGL20") + void glGetnUniformivARB(@GLuint int program, int location, @Constant("params.remaining() << 2") @GLsizei int bufSize, @OutParameter @Check IntBuffer params); + + @Dependent("OpenGL20") + void glGetnUniformuivARB(@GLuint int program, int location, @Constant("params.remaining() << 2") @GLsizei int bufSize, @OutParameter @Check @GLuint IntBuffer params); + + @Dependent("OpenGL20") + void glGetnUniformdvARB(@GLuint int program, int location, @Constant("params.remaining() << 3") @GLsizei int bufSize, @OutParameter @Check DoubleBuffer params); +} \ No newline at end of file diff --git a/src/templates/org/lwjgl/opengl/ARB_separate_shader_objects.java b/src/templates/org/lwjgl/opengl/ARB_separate_shader_objects.java new file mode 100644 index 00000000..2d7fe03b --- /dev/null +++ b/src/templates/org/lwjgl/opengl/ARB_separate_shader_objects.java @@ -0,0 +1,269 @@ +/* + * Copyright (c) 2002-2008 LWJGL Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'LWJGL' nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.lwjgl.opengl; + +import org.lwjgl.util.generator.*; + +import java.nio.ByteBuffer; +import java.nio.DoubleBuffer; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; + +@Extension(postfix = "") +public interface ARB_separate_shader_objects { + + /** Accepted by <stages> parameter to UseProgramStages: */ + int GL_VERTEX_SHADER_BIT = 0x00000001, + GL_FRAGMENT_SHADER_BIT = 0x00000002, + GL_GEOMETRY_SHADER_BIT = 0x00000004, + GL_TESS_CONTROL_SHADER_BIT = 0x00000008, + GL_TESS_EVALUATION_SHADER_BIT = 0x00000010, + GL_ALL_SHADER_BITS = 0xFFFFFFFF; + + /** + * Accepted by the <pname> parameter of ProgramParameteri and + * GetProgramiv: + */ + int GL_PROGRAM_SEPARABLE = 0x8258; + + /** Accepted by <type> parameter to GetProgramPipelineiv: */ + int GL_ACTIVE_PROGRAM = 0x8259; + + /** + * Accepted by the <pname> parameter of GetBooleanv, GetIntegerv, + * GetInteger64v, GetFloatv, and GetDoublev: + */ + int GL_PROGRAM_PIPELINE_BINDING = 0x825A; + + void glUseProgramStages(@GLuint int pipeline, @GLbitfield int stages, @GLuint int program); + + void glActiveShaderProgram(@GLuint int pipeline, @GLuint int program); + + @StripPostfix(value = "strings", postfix = "v") + @GLuint + int glCreateShaderProgramv(@GLenum int type, @GLsizei int count, @Check @Const @Indirect @GLchar ByteBuffer strings); + + @Alternate("glCreateShaderProgramv") + @StripPostfix(value = "string", postfix = "v") + @GLuint + int glCreateShaderProgramv(@GLenum int type, @Constant("1") @GLsizei int count, @NullTerminated CharSequence string); + + @Alternate("glCreateShaderProgramv") + @StripPostfix(value = "strings", postfix = "v") + @GLuint + int glCreateShaderProgramv(@GLenum int type, @Constant("strings.length") @GLsizei int count, + @Const @NullTerminated @StringList(value = "count") CharSequence[] strings); + + void glBindProgramPipeline(@GLuint int pipeline); + + void glDeleteProgramPipelines(@AutoSize("pipelines") @GLsizei int n, @Const @GLuint IntBuffer pipelines); + + @Alternate("glDeleteProgramPipelines") + void glDeleteProgramPipelines(@Constant("1") @GLsizei int n, @Constant(value = "APIUtils.getBufferInt().put(0, pipeline), 0", keepParam = true) int pipeline); + + void glGenProgramPipelines(@AutoSize("pipelines") @GLsizei int n, @OutParameter @GLuint IntBuffer pipelines); + + @Alternate("glGenProgramPipelines") + @GLreturn("pipelines") + void glGenProgramPipelines2(@Constant("1") @GLsizei int n, @OutParameter @GLuint IntBuffer pipelines); + + boolean glIsProgramPipeline(@GLuint int pipeline); + + void glProgramParameteri(@GLuint int program, @GLenum int pname, int value); + + @StripPostfix("params") + void glGetProgramPipelineiv(@GLuint int pipeline, @GLenum int pname, @OutParameter @Check("1") IntBuffer params); + + @Alternate("glGetProgramPipelineiv") + @GLreturn("params") + @StripPostfix("params") + void glGetProgramPipelineiv2(@GLuint int pipeline, @GLenum int pname, @OutParameter IntBuffer params); + + void glProgramUniform1i(@GLuint int program, int location, int v0); + + void glProgramUniform2i(@GLuint int program, int location, int v0, int v1); + + void glProgramUniform3i(@GLuint int program, int location, int v0, int v1, int v2); + + void glProgramUniform4i(@GLuint int program, int location, int v0, int v1, int v2, int v3); + + void glProgramUniform1f(@GLuint int program, int location, float v0); + + void glProgramUniform2f(@GLuint int program, int location, float v0, float v1); + + void glProgramUniform3f(@GLuint int program, int location, float v0, float v1, float v2); + + void glProgramUniform4f(@GLuint int program, int location, float v0, float v1, float v2, float v3); + + void glProgramUniform1d(@GLuint int program, int location, double v0); + + void glProgramUniform2d(@GLuint int program, int location, double v0, double v1); + + void glProgramUniform3d(@GLuint int program, int location, double v0, double v1, double v2); + + void glProgramUniform4d(@GLuint int program, int location, double v0, double v1, double v2, double v3); + + @StripPostfix("value") + void glProgramUniform1iv(@GLuint int program, int location, @AutoSize("value") @GLsizei int count, @Const IntBuffer value); + + @StripPostfix("value") + void glProgramUniform2iv(@GLuint int program, int location, @AutoSize(value = "value", expression = " >> 1") @GLsizei int count, @Const IntBuffer value); + + @StripPostfix("value") + void glProgramUniform3iv(@GLuint int program, int location, @AutoSize(value = "value", expression = " / 3") @GLsizei int count, @Const IntBuffer value); + + @StripPostfix("value") + void glProgramUniform4iv(@GLuint int program, int location, @AutoSize(value = "value", expression = " >> 2") @GLsizei int count, @Const IntBuffer value); + + @StripPostfix("value") + void glProgramUniform1fv(@GLuint int program, int location, @AutoSize("value") @GLsizei int count, @Const FloatBuffer value); + + @StripPostfix("value") + void glProgramUniform2fv(@GLuint int program, int location, @AutoSize(value = "value", expression = " >> 1") @GLsizei int count, @Const FloatBuffer value); + + @StripPostfix("value") + void glProgramUniform3fv(@GLuint int program, int location, @AutoSize(value = "value", expression = " / 3") @GLsizei int count, @Const FloatBuffer value); + + @StripPostfix("value") + void glProgramUniform4fv(@GLuint int program, int location, @AutoSize(value = "value", expression = " >> 2") @GLsizei int count, @Const FloatBuffer value); + + @StripPostfix("value") + void glProgramUniform1dv(@GLuint int program, int location, @AutoSize("value") @GLsizei int count, @Const DoubleBuffer value); + + @StripPostfix("value") + void glProgramUniform2dv(@GLuint int program, int location, @AutoSize(value = "value", expression = " >> 1") @GLsizei int count, @Const DoubleBuffer value); + + @StripPostfix("value") + void glProgramUniform3dv(@GLuint int program, int location, @AutoSize(value = "value", expression = " / 3") @GLsizei int count, @Const DoubleBuffer value); + + @StripPostfix("value") + void glProgramUniform4dv(@GLuint int program, int location, @AutoSize(value = "value", expression = " >> 2") @GLsizei int count, @Const DoubleBuffer value); + + void glProgramUniform1ui(@GLuint int program, int location, int v0); + + void glProgramUniform2ui(@GLuint int program, int location, int v0, int v1); + + void glProgramUniform3ui(@GLuint int program, int location, int v0, int v1, int v2); + + void glProgramUniform4ui(@GLuint int program, int location, int v0, int v1, int v2, int v3); + + @StripPostfix("value") + void glProgramUniform1uiv(@GLuint int program, int location, @AutoSize("value") @GLsizei int count, @Const IntBuffer value); + + @StripPostfix("value") + void glProgramUniform2uiv(@GLuint int program, int location, @AutoSize(value = "value", expression = " >> 1") @GLsizei int count, @Const IntBuffer value); + + @StripPostfix("value") + void glProgramUniform3uiv(@GLuint int program, int location, @AutoSize(value = "value", expression = " / 3") @GLsizei int count, @Const IntBuffer value); + + @StripPostfix("value") + void glProgramUniform4uiv(@GLuint int program, int location, @AutoSize(value = "value", expression = " >> 2") @GLsizei int count, @Const IntBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix2fv(@GLuint int program, int location, @AutoSize(value = "value", expression = " >> 2") @GLsizei int count, boolean transpose, @Const FloatBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix3fv(@GLuint int program, int location, @AutoSize(value = "value", expression = " / (3 * 3)") @GLsizei int count, boolean transpose, @Const FloatBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix4fv(@GLuint int program, int location, @AutoSize(value = "value", expression = " >> 4") @GLsizei int count, boolean transpose, @Const FloatBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix2dv(@GLuint int program, int location, @AutoSize(value = "value", expression = " >> 2") @GLsizei int count, boolean transpose, @Const DoubleBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix3dv(@GLuint int program, int location, @AutoSize(value = "value", expression = " / (3 * 3)") @GLsizei int count, boolean transpose, @Const DoubleBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix4dv(@GLuint int program, int location, @AutoSize(value = "value", expression = " >> 4") @GLsizei int count, boolean transpose, @Const DoubleBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix2x3fv(@GLuint int program, int location, + @AutoSize(value = "value", expression = " / (2 * 3)") @GLsizei int count, boolean transpose, @Const FloatBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix3x2fv(@GLuint int program, int location, + @AutoSize(value = "value", expression = " / (3 * 2)") @GLsizei int count, boolean transpose, @Const FloatBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix2x4fv(@GLuint int program, int location, + @AutoSize(value = "value", expression = " >> 3") @GLsizei int count, boolean transpose, @Const FloatBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix4x2fv(@GLuint int program, int location, + @AutoSize(value = "value", expression = " >> 3") @GLsizei int count, boolean transpose, @Const FloatBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix3x4fv(@GLuint int program, int location, + @AutoSize(value = "value", expression = " / (3 * 4)") @GLsizei int count, boolean transpose, @Const FloatBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix4x3fv(@GLuint int program, int location, + @AutoSize(value = "value", expression = " / (4 * 3)") @GLsizei int count, boolean transpose, @Const FloatBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix2x3dv(@GLuint int program, int location, + @AutoSize(value = "value", expression = " / (2 * 3)") @GLsizei int count, boolean transpose, @Const DoubleBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix3x2dv(@GLuint int program, int location, + @AutoSize(value = "value", expression = " / (3 * 2)") @GLsizei int count, boolean transpose, @Const DoubleBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix2x4dv(@GLuint int program, int location, + @AutoSize(value = "value", expression = " >> 3") @GLsizei int count, boolean transpose, @Const DoubleBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix4x2dv(@GLuint int program, int location, + @AutoSize(value = "value", expression = " >> 3") @GLsizei int count, boolean transpose, @Const DoubleBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix3x4dv(@GLuint int program, int location, + @AutoSize(value = "value", expression = " / (3 * 4)") @GLsizei int count, boolean transpose, @Const DoubleBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix4x3dv(@GLuint int program, int location, + @AutoSize(value = "value", expression = " / (4 * 3)") @GLsizei int count, boolean transpose, @Const DoubleBuffer value); + + void glValidateProgramPipeline(@GLuint int pipeline); + + void glGetProgramPipelineInfoLog(@GLuint int pipeline, @AutoSize("infoLog") @GLsizei int bufSize, + @OutParameter @Check(value = "1", canBeNull = true) @GLsizei IntBuffer length, + @OutParameter @GLchar ByteBuffer infoLog); + + @Alternate("glGetProgramPipelineInfoLog") + @GLreturn(value = "infoLog", maxLength = "bufSize") + void glGetProgramPipelineInfoLog2(@GLuint int pipeline, @GLsizei int bufSize, + @OutParameter @GLsizei @Constant("infoLog_length, 0") IntBuffer length, + @OutParameter @GLchar ByteBuffer infoLog); + +} \ No newline at end of file diff --git a/src/templates/org/lwjgl/opengl/ARB_shader_precision.java b/src/templates/org/lwjgl/opengl/ARB_shader_precision.java new file mode 100644 index 00000000..139f950e --- /dev/null +++ b/src/templates/org/lwjgl/opengl/ARB_shader_precision.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2002-2008 LWJGL Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'LWJGL' nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.lwjgl.opengl; + +public interface ARB_shader_precision { +} \ No newline at end of file diff --git a/src/templates/org/lwjgl/opengl/ARB_shader_stencil_export.java b/src/templates/org/lwjgl/opengl/ARB_shader_stencil_export.java new file mode 100644 index 00000000..7bd735dc --- /dev/null +++ b/src/templates/org/lwjgl/opengl/ARB_shader_stencil_export.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2002-2008 LWJGL Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'LWJGL' nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.lwjgl.opengl; + +public interface ARB_shader_stencil_export { +} \ No newline at end of file diff --git a/src/templates/org/lwjgl/opengl/ARB_vertex_attrib_64bit.java b/src/templates/org/lwjgl/opengl/ARB_vertex_attrib_64bit.java new file mode 100644 index 00000000..930d0ada --- /dev/null +++ b/src/templates/org/lwjgl/opengl/ARB_vertex_attrib_64bit.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2002-2008 LWJGL Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'LWJGL' nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.lwjgl.opengl; + +import org.lwjgl.util.generator.*; + +import java.nio.Buffer; +import java.nio.DoubleBuffer; + +@Dependent +@Extension(postfix = "") +public interface ARB_vertex_attrib_64bit { + + /** Returned in the <type> parameter of GetActiveAttrib: */ + int GL_DOUBLE_VEC2 = 0x8FFC; + int GL_DOUBLE_VEC3 = 0x8FFD; + int GL_DOUBLE_VEC4 = 0x8FFE; + int GL_DOUBLE_MAT2 = 0x8F46; + int GL_DOUBLE_MAT3 = 0x8F47; + int GL_DOUBLE_MAT4 = 0x8F48; + int GL_DOUBLE_MAT2x3 = 0x8F49; + int GL_DOUBLE_MAT2x4 = 0x8F4A; + int GL_DOUBLE_MAT3x2 = 0x8F4B; + int GL_DOUBLE_MAT3x4 = 0x8F4C; + int GL_DOUBLE_MAT4x2 = 0x8F4D; + int GL_DOUBLE_MAT4x3 = 0x8F4E; + + void glVertexAttribL1d(@GLuint int index, double x); + + void glVertexAttribL2d(@GLuint int index, double x, double y); + + void glVertexAttribL3d(@GLuint int index, double x, double y, double z); + + void glVertexAttribL4d(@GLuint int index, double x, double y, double z, double w); + + @StripPostfix("v") + void glVertexAttribL1dv(@GLuint int index, @Const @Check("1") DoubleBuffer v); + + @StripPostfix("v") + void glVertexAttribL2dv(@GLuint int index, @Const @Check("2") DoubleBuffer v); + + @StripPostfix("v") + void glVertexAttribL3dv(@GLuint int index, @Const @Check("3") DoubleBuffer v); + + @StripPostfix("v") + void glVertexAttribL4dv(@GLuint int index, @Const @Check("4") DoubleBuffer v); + + void glVertexAttribLPointer(@GLuint int index, int size, @Constant("GL11.GL_DOUBLE") @GLenum int type, @GLsizei int stride, + @CachedReference(index = "index", name = "glVertexAttribPointer_buffer") + @BufferObject(BufferKind.ArrayVBO) + @Check @Const @GLdouble Buffer pointer); + + @StripPostfix("params") + void glGetVertexAttribLdv(@GLuint int index, @GLenum int pname, @OutParameter @Check("4") DoubleBuffer params); + + @Dependent("EXT_direct_state_access") + void glVertexArrayVertexAttribLOffsetEXT(@GLuint int vaobj, @GLuint int buffer, @GLuint int index, int size, @GLenum int type, @GLsizei int stride, @GLintptr long offset); + +} \ No newline at end of file diff --git a/src/templates/org/lwjgl/opengl/ARB_viewport_array.java b/src/templates/org/lwjgl/opengl/ARB_viewport_array.java new file mode 100644 index 00000000..5800f6b0 --- /dev/null +++ b/src/templates/org/lwjgl/opengl/ARB_viewport_array.java @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2002-2008 LWJGL Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'LWJGL' nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.lwjgl.opengl; + +import org.lwjgl.util.generator.*; + +import java.nio.DoubleBuffer; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; + +@Extension(postfix = "") +public interface ARB_viewport_array { + + /** + * Accepted by the <pname> parameter of GetBooleanv, GetIntegerv, GetFloatv, + * GetDoublev and GetInteger64v: + */ + int GL_MAX_VIEWPORTS = 0x825B, + GL_VIEWPORT_SUBPIXEL_BITS = 0x825C, + GL_VIEWPORT_BOUNDS_RANGE = 0x825D, + GL_LAYER_PROVOKING_VERTEX = 0x825E, + GL_VIEWPORT_INDEX_PROVOKING_VERTEX = 0x825F; + + /** Accepted by the <pname> parameter of GetIntegeri_v: */ + int GL_SCISSOR_BOX = 0x0C10; + + /** Accepted by the <pname> parameter of GetFloati_v: */ + int GL_VIEWPORT = 0x0BA2; + + /** Accepted by the <pname> parameter of GetDoublei_v: */ + int GL_DEPTH_RANGE = 0x0B70; + + /** Accepted by the <pname> parameter of Enablei, Disablei, and IsEnabledi: */ + int GL_SCISSOR_TEST = 0x0C11; + + /** + * Returned in the <data> parameter from a Get query with a <pname> of + * LAYER_PROVOKING_VERTEX or VIEWPORT_INDEX_PROVOKING_VERTEX: + */ + int GL_FIRST_VERTEX_CONVENTION = 0x8E4D, + GL_LAST_VERTEX_CONVENTION = 0x8E4E, + GL_PROVOKING_VERTEX = 0x8E4F, + GL_UNDEFINED_VERTEX = 0x8260; + + @StripPostfix("v") + void glViewportArrayv(@GLuint int first, @AutoSize(value = "v", expression = " >> 2") @GLsizei int count, @Const FloatBuffer v); + + void glViewportIndexedf(@GLuint int index, float x, float y, float w, float h); + + @StripPostfix("v") + void glViewportIndexedfv(@GLuint int index, @Check("4") @Const FloatBuffer v); + + @StripPostfix("v") + void glScissorArrayv(@GLuint int first, @AutoSize(value = "v", expression = " >> 2") @GLsizei int count, @Const IntBuffer v); + + void glScissorIndexed(@GLuint int index, int left, int bottom, @GLsizei int width, @GLsizei int height); + + @StripPostfix("v") + void glScissorIndexedv(@GLuint int index, @Check("4") @Const IntBuffer v); + + @StripPostfix("v") + void glDepthRangeArrayv(@GLuint int first, @AutoSize(value = "v", expression = " >> 1") @GLsizei int count, @Const @GLclampd DoubleBuffer v); + + void glDepthRangeIndexed(@GLuint int index, @GLclampd double n, @GLclampd double f); + + @StripPostfix("data") + void glGetFloati_v(@GLenum int target, @GLuint int index, @Check @OutParameter FloatBuffer data); + + @Alternate("glGetFloati_v") + @GLreturn("data") + @StripPostfix("data") + void glGetFloati_v2(@GLenum int target, @GLuint int index, @OutParameter FloatBuffer data); + + @StripPostfix("data") + void glGetDoublei_v(@GLenum int target, @GLuint int index, @Check @OutParameter DoubleBuffer data); + + @Alternate("glGetDoublei_v") + @GLreturn("data") + @StripPostfix("data") + void glGetDoublei_v2(@GLenum int target, @GLuint int index, @OutParameter DoubleBuffer data); + + @StripPostfix(value = "v", extension = "EXT") + void glGetIntegerIndexedivEXT(@GLenum int target, @GLuint int index, @Check @OutParameter IntBuffer v); + + @Alternate("glGetIntegerIndexedivEXT") + @GLreturn("v") + @StripPostfix(value = "v", extension = "EXT") + void glGetIntegerIndexedivEXT2(@GLenum int target, @GLuint int index, @OutParameter IntBuffer v); + + void glEnableIndexedEXT(@GLenum int target, @GLuint int index); + + void glDisableIndexedEXT(@GLenum int target, @GLuint int index); + + boolean glIsEnabledIndexedEXT(@GLenum int target, @GLuint int index); + +} \ No newline at end of file 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 5554d6ed..f78f2993 100644 --- a/src/templates/org/lwjgl/opengl/EXT_direct_state_access.java +++ b/src/templates/org/lwjgl/opengl/EXT_direct_state_access.java @@ -1343,7 +1343,6 @@ public interface EXT_direct_state_access { OpenGL 3.1: New buffer data copy command */ - @Optional(reason = "AMD does not expose this (last driver checked: 10.5)") @Dependent("OpenGL31,GL_ARB_copy_buffer") void glNamedCopyBufferSubDataEXT(@GLuint int readBuffer, @GLuint int writeBuffer, @GLintptr long readoffset, @GLintptr long writeoffset, @GLsizeiptr long size); @@ -1387,55 +1386,44 @@ public interface EXT_direct_state_access { and change the final parameter from "const void *" to "intptr offset" */ - @Optional(reason = "AMD does not expose this (last driver checked: 10.5)") @Dependent("OpenGL30") @DeprecatedGL void glVertexArrayVertexOffsetEXT(@GLuint int vaobj, @GLuint int buffer, int size, @GLenum int type, @GLsizei int stride, @GLintptr long offset); - @Optional(reason = "AMD does not expose this (last driver checked: 10.5)") @Dependent("OpenGL30") @DeprecatedGL void glVertexArrayColorOffsetEXT(@GLuint int vaobj, @GLuint int buffer, int size, @GLenum int type, @GLsizei int stride, @GLintptr long offset); - @Optional(reason = "AMD does not expose this (last driver checked: 10.5)") @Dependent("OpenGL30") @DeprecatedGL void glVertexArrayEdgeFlagOffsetEXT(@GLuint int vaobj, @GLuint int buffer, @GLsizei int stride, @GLintptr long offset); - @Optional(reason = "AMD does not expose this (last driver checked: 10.5)") @Dependent("OpenGL30") void glVertexArrayIndexOffsetEXT(@GLuint int vaobj, @GLuint int buffer, @GLenum int type, @GLsizei int stride, @GLintptr long offset); - @Optional(reason = "AMD does not expose this (last driver checked: 10.5)") @Dependent("OpenGL30") @DeprecatedGL void glVertexArrayNormalOffsetEXT(@GLuint int vaobj, @GLuint int buffer, @GLenum int type, @GLsizei int stride, @GLintptr long offset); - @Optional(reason = "AMD does not expose this (last driver checked: 10.5)") @Dependent("OpenGL30") @DeprecatedGL void glVertexArrayTexCoordOffsetEXT(@GLuint int vaobj, @GLuint int buffer, int size, @GLenum int type, @GLsizei int stride, @GLintptr long offset); - @Optional(reason = "AMD does not expose this (last driver checked: 10.5)") @Dependent("OpenGL30") @DeprecatedGL void glVertexArrayMultiTexCoordOffsetEXT(@GLuint int vaobj, @GLuint int buffer, @GLenum int texunit, int size, @GLenum int type, @GLsizei int stride, @GLintptr long offset); - @Optional(reason = "AMD does not expose this (last driver checked: 10.5)") @Dependent("OpenGL30") @DeprecatedGL void glVertexArrayFogCoordOffsetEXT(@GLuint int vaobj, @GLuint int buffer, @GLenum int type, @GLsizei int stride, @GLintptr long offset); - @Optional(reason = "AMD does not expose this (last driver checked: 10.5)") @Dependent("OpenGL30") @DeprecatedGL void glVertexArraySecondaryColorOffsetEXT(@GLuint int vaobj, @GLuint int buffer, int size, @GLenum int type, @GLsizei int stride, @GLintptr long offset); - @Optional(reason = "AMD does not expose this (last driver checked: 10.5)") @Dependent("OpenGL30") void glVertexArrayVertexAttribOffsetEXT(@GLuint int vaobj, @GLuint int buffer, @GLuint int index, int size, @GLenum int type, boolean normalized, @GLsizei int stride, @GLintptr long offset); - @Optional(reason = "AMD does not expose this (last driver checked: 10.5)") @Dependent("OpenGL30") void glVertexArrayVertexAttribIOffsetEXT(@GLuint int vaobj, @GLuint int buffer, @GLuint int index, int size, @GLenum int type, @GLsizei int stride, @GLintptr long offset); @@ -1445,11 +1433,9 @@ public interface EXT_direct_state_access { "uint vaobj" parameter */ - @Optional(reason = "AMD does not expose this (last driver checked: 10.5)") @Dependent("OpenGL30") void glEnableVertexArrayEXT(@GLuint int vaobj, @GLenum int array); - @Optional(reason = "AMD does not expose this (last driver checked: 10.5)") @Dependent("OpenGL30") void glDisableVertexArrayEXT(@GLuint int vaobj, @GLenum int array); @@ -1459,11 +1445,9 @@ public interface EXT_direct_state_access { and add an initial "uint vaobj" parameter */ - @Optional(reason = "AMD does not expose this (last driver checked: 10.5)") @Dependent("OpenGL30") void glEnableVertexArrayAttribEXT(@GLuint int vaobj, @GLuint int index); - @Optional(reason = "AMD does not expose this (last driver checked: 10.5)") @Dependent("OpenGL30") void glDisableVertexArrayAttribEXT(@GLuint int vaobj, @GLuint int index); @@ -1471,7 +1455,6 @@ public interface EXT_direct_state_access { OpenGL 3.0: New queries for vertex array objects */ - @Optional(reason = "AMD does not expose this (last driver checked: 10.5)") @Dependent("OpenGL30") @StripPostfix("param") void glGetVertexArrayIntegervEXT(@GLuint int vaobj, @GLenum int pname, @OutParameter @Check("16") IntBuffer param); @@ -1482,12 +1465,10 @@ public interface EXT_direct_state_access { @StripPostfix("param") void glGetVertexArrayIntegervEXT2(@GLuint int vaobj, @GLenum int pname, @OutParameter IntBuffer param); - @Optional(reason = "AMD does not expose this (last driver checked: 10.5)") @Dependent("OpenGL30") @StripPostfix("param") void glGetVertexArrayPointervEXT(@GLuint int vaobj, @GLenum int pname, @Result @GLvoid ByteBuffer param); - @Optional(reason = "AMD does not expose this (last driver checked: 10.5)") @Dependent("OpenGL30") @StripPostfix(value = "param") void glGetVertexArrayIntegeri_vEXT(@GLuint int vaobj, @GLuint int index, @GLenum int pname, @OutParameter @Check("16") IntBuffer param); @@ -1498,7 +1479,6 @@ public interface EXT_direct_state_access { @StripPostfix(value = "param", postfix = "_v") void glGetVertexArrayIntegeri_vEXT2(@GLuint int vaobj, @GLuint int index, @GLenum int pname, @OutParameter IntBuffer param); - @Optional(reason = "AMD does not expose this (last driver checked: 10.5)") @Dependent("OpenGL30") @StripPostfix(value = "param") void glGetVertexArrayPointeri_vEXT(@GLuint int vaobj, @GLuint int index, @GLenum int pname, @Result @GLvoid ByteBuffer param); @@ -1522,14 +1502,12 @@ public interface EXT_direct_state_access { * * @return A ByteBuffer representing the mapped buffer memory. */ - @Optional(reason = "AMD does not expose this (last driver checked: 10.5)") @Dependent("OpenGL30") @CachedResult(isRange = true) @GLvoid @AutoResultSize("length") ByteBuffer glMapNamedBufferRangeEXT(@GLuint int buffer, @GLintptr long offset, @GLsizeiptr long length, @GLbitfield int access); - @Optional(reason = "AMD does not expose this (last driver checked: 10.5)") @Dependent("OpenGL30") void glFlushMappedNamedBufferRangeEXT(@GLuint int buffer, @GLintptr long offset, @GLsizeiptr long length); diff --git a/src/templates/org/lwjgl/opengl/GL40.java b/src/templates/org/lwjgl/opengl/GL40.java index c8997980..cec7778f 100644 --- a/src/templates/org/lwjgl/opengl/GL40.java +++ b/src/templates/org/lwjgl/opengl/GL40.java @@ -46,16 +46,12 @@ public interface GL40 { // ----------------------[ ARB_draw_buffers_blend ]---------------------- // ---------------------------------------------------------------------- - @Optional(reason = "AMD's 4.0 implementation does not expose this (last driver checked: 10.3)") void glBlendEquationi(@GLuint int buf, @GLenum int mode); - @Optional(reason = "AMD's 4.0 implementation does not expose this (last driver checked: 10.3)") void glBlendEquationSeparatei(@GLuint int buf, @GLenum int modeRGB, @GLenum int modeAlpha); - @Optional(reason = "AMD's 4.0 implementation does not expose this (last driver checked: 10.3)") void glBlendFunci(@GLuint int buf, @GLenum int src, @GLenum int dst); - @Optional(reason = "AMD's 4.0 implementation does not expose this (last driver checked: 10.3)") void glBlendFuncSeparatei(@GLuint int buf, @GLenum int srcRGB, @GLenum int dstRGB, @GLenum int srcAlpha, @GLenum int dstAlpha); // ----------------------------------------------------------------- @@ -186,7 +182,6 @@ public interface GL40 { */ int GL_MIN_SAMPLE_SHADING_VALUE = 0x8C37; - @Optional(reason = "AMD's 4.0 implementation does not expose this (last driver checked: 10.3)") void glMinSampleShading(@GLclampf float value); // --------------------------------------------------------------------- diff --git a/src/templates/org/lwjgl/opengl/GL41.java b/src/templates/org/lwjgl/opengl/GL41.java new file mode 100644 index 00000000..b7592863 --- /dev/null +++ b/src/templates/org/lwjgl/opengl/GL41.java @@ -0,0 +1,457 @@ +/* + * Copyright (c) 2002-2008 LWJGL Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'LWJGL' nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package org.lwjgl.opengl; + +import org.lwjgl.util.generator.*; + +import java.nio.*; + +public interface GL41 { + + // --------------------------------------------------------------------- + // ----------------------[ ARB_ES2_compatibility ]---------------------- + // --------------------------------------------------------------------- + + /** + * Accepted by the <value> parameter of GetBooleanv, GetIntegerv, + * GetInteger64v, GetFloatv, and GetDoublev: + */ + int GL_SHADER_COMPILER = 0x8DFA, + GL_NUM_SHADER_BINARY_FORMATS = 0x8DF9, + GL_MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB, + GL_MAX_VARYING_VECTORS = 0x8DFC, + GL_MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD, + GL_IMPLEMENTATION_COLOR_READ_TYPE = 0x8B9A, + GL_IMPLEMENTATION_COLOR_READ_FORMAT = 0x8B9B; + + /** Accepted by the <type> parameter of VertexAttribPointer: */ + int GL_FIXED = 0x140C; + + /** + * Accepted by the <precisiontype> parameter of + * GetShaderPrecisionFormat: + */ + int GL_LOW_FLOAT = 0x8DF0, + GL_MEDIUM_FLOAT = 0x8DF1, + GL_HIGH_FLOAT = 0x8DF2, + GL_LOW_INT = 0x8DF3, + GL_MEDIUM_INT = 0x8DF4, + GL_HIGH_INT = 0x8DF5; + + void glReleaseShaderCompiler(); + + void glShaderBinary(@AutoSize("shaders") @GLsizei int count, @Const @GLuint IntBuffer shaders, + @GLenum int binaryformat, @Const @GLvoid ByteBuffer binary, @AutoSize("binary") @GLsizei int length); + + void glGetShaderPrecisionFormat(@GLenum int shadertype, @GLenum int precisiontype, + @OutParameter @Check("2") IntBuffer range, + @OutParameter @Check("1") IntBuffer precision); + + void glDepthRangef(@GLclampf float n, @GLclampf float f); + + void glClearDepthf(@GLclampf float d); + + // ---------------------------------------------------------------------- + // ----------------------[ ARB_get_program_binary ]---------------------- + // ---------------------------------------------------------------------- + + /** + * Accepted by the <pname> parameter of ProgramParameteri and + * GetProgramiv: + */ + int GL_PROGRAM_BINARY_RETRIEVABLE_HINT = 0x8257; + + /** Accepted by the <pname> parameter of GetProgramiv: */ + int GL_PROGRAM_BINARY_LENGTH = 0x8741; + + /** + * Accepted by the <pname> parameter of GetBooleanv, GetIntegerv, + * GetInteger64v, GetFloatv and GetDoublev: + */ + int GL_NUM_PROGRAM_BINARY_FORMATS = 0x87FE, + GL_PROGRAM_BINARY_FORMATS = 0x87FF; + + void glGetProgramBinary(@GLuint int program, @AutoSize("binary") @GLsizei int bufSize, + @Check(value = "1", canBeNull = true) @GLsizei IntBuffer length, + @Check("1") @GLenum IntBuffer binaryFormat, + @OutParameter @GLvoid ByteBuffer binary); + + void glProgramBinary(@GLuint int program, @GLenum int binaryFormat, @Const @GLvoid ByteBuffer binary, @AutoSize("binary") @GLsizei int length); + + void glProgramParameteri(@GLuint int program, @GLenum int pname, int value); + + // --------------------------------------------------------------------------- + // ----------------------[ ARB_separate_shader_objects ]---------------------- + // --------------------------------------------------------------------------- + + /** Accepted by <stages> parameter to UseProgramStages: */ + int GL_VERTEX_SHADER_BIT = 0x00000001, + GL_FRAGMENT_SHADER_BIT = 0x00000002, + GL_GEOMETRY_SHADER_BIT = 0x00000004, + GL_TESS_CONTROL_SHADER_BIT = 0x00000008, + GL_TESS_EVALUATION_SHADER_BIT = 0x00000010, + GL_ALL_SHADER_BITS = 0xFFFFFFFF; + + /** + * Accepted by the <pname> parameter of ProgramParameteri and + * GetProgramiv: + */ + int GL_PROGRAM_SEPARABLE = 0x8258; + + /** Accepted by <type> parameter to GetProgramPipelineiv: */ + int GL_ACTIVE_PROGRAM = 0x8259; + + /** + * Accepted by the <pname> parameter of GetBooleanv, GetIntegerv, + * GetInteger64v, GetFloatv, and GetDoublev: + */ + int GL_PROGRAM_PIPELINE_BINDING = 0x825A; + + void glUseProgramStages(@GLuint int pipeline, @GLbitfield int stages, @GLuint int program); + + void glActiveShaderProgram(@GLuint int pipeline, @GLuint int program); + + @StripPostfix(value = "strings", postfix = "v") + @GLuint + int glCreateShaderProgramv(@GLenum int type, @GLsizei int count, @Check @Const @Indirect @GLchar ByteBuffer strings); + + @Alternate("glCreateShaderProgramv") + @StripPostfix(value = "string", postfix = "v") + @GLuint + int glCreateShaderProgramv(@GLenum int type, @Constant("1") @GLsizei int count, @NullTerminated CharSequence string); + + @Alternate("glCreateShaderProgramv") + @StripPostfix(value = "strings", postfix = "v") + @GLuint + int glCreateShaderProgramv(@GLenum int type, @Constant("strings.length") @GLsizei int count, + @Const @NullTerminated @StringList(value = "count") CharSequence[] strings); + + void glBindProgramPipeline(@GLuint int pipeline); + + void glDeleteProgramPipelines(@AutoSize("pipelines") @GLsizei int n, @Const @GLuint IntBuffer pipelines); + + @Alternate("glDeleteProgramPipelines") + void glDeleteProgramPipelines(@Constant("1") @GLsizei int n, @Constant(value = "APIUtils.getBufferInt().put(0, pipeline), 0", keepParam = true) int pipeline); + + void glGenProgramPipelines(@AutoSize("pipelines") @GLsizei int n, @OutParameter @GLuint IntBuffer pipelines); + + @Alternate("glGenProgramPipelines") + @GLreturn("pipelines") + void glGenProgramPipelines2(@Constant("1") @GLsizei int n, @OutParameter @GLuint IntBuffer pipelines); + + boolean glIsProgramPipeline(@GLuint int pipeline); + + @StripPostfix("params") + void glGetProgramPipelineiv(@GLuint int pipeline, @GLenum int pname, @OutParameter @Check("1") IntBuffer params); + + @Alternate("glGetProgramPipelineiv") + @GLreturn("params") + @StripPostfix("params") + void glGetProgramPipelineiv2(@GLuint int pipeline, @GLenum int pname, @OutParameter IntBuffer params); + + void glProgramUniform1i(@GLuint int program, int location, int v0); + + void glProgramUniform2i(@GLuint int program, int location, int v0, int v1); + + void glProgramUniform3i(@GLuint int program, int location, int v0, int v1, int v2); + + void glProgramUniform4i(@GLuint int program, int location, int v0, int v1, int v2, int v3); + + void glProgramUniform1f(@GLuint int program, int location, float v0); + + void glProgramUniform2f(@GLuint int program, int location, float v0, float v1); + + void glProgramUniform3f(@GLuint int program, int location, float v0, float v1, float v2); + + void glProgramUniform4f(@GLuint int program, int location, float v0, float v1, float v2, float v3); + + void glProgramUniform1d(@GLuint int program, int location, double v0); + + void glProgramUniform2d(@GLuint int program, int location, double v0, double v1); + + void glProgramUniform3d(@GLuint int program, int location, double v0, double v1, double v2); + + void glProgramUniform4d(@GLuint int program, int location, double v0, double v1, double v2, double v3); + + @StripPostfix("value") + void glProgramUniform1iv(@GLuint int program, int location, @AutoSize("value") @GLsizei int count, @Const IntBuffer value); + + @StripPostfix("value") + void glProgramUniform2iv(@GLuint int program, int location, @AutoSize(value = "value", expression = " >> 1") @GLsizei int count, @Const IntBuffer value); + + @StripPostfix("value") + void glProgramUniform3iv(@GLuint int program, int location, @AutoSize(value = "value", expression = " / 3") @GLsizei int count, @Const IntBuffer value); + + @StripPostfix("value") + void glProgramUniform4iv(@GLuint int program, int location, @AutoSize(value = "value", expression = " >> 2") @GLsizei int count, @Const IntBuffer value); + + @StripPostfix("value") + void glProgramUniform1fv(@GLuint int program, int location, @AutoSize("value") @GLsizei int count, @Const FloatBuffer value); + + @StripPostfix("value") + void glProgramUniform2fv(@GLuint int program, int location, @AutoSize(value = "value", expression = " >> 1") @GLsizei int count, @Const FloatBuffer value); + + @StripPostfix("value") + void glProgramUniform3fv(@GLuint int program, int location, @AutoSize(value = "value", expression = " / 3") @GLsizei int count, @Const FloatBuffer value); + + @StripPostfix("value") + void glProgramUniform4fv(@GLuint int program, int location, @AutoSize(value = "value", expression = " >> 2") @GLsizei int count, @Const FloatBuffer value); + + @StripPostfix("value") + void glProgramUniform1dv(@GLuint int program, int location, @AutoSize("value") @GLsizei int count, @Const DoubleBuffer value); + + @StripPostfix("value") + void glProgramUniform2dv(@GLuint int program, int location, @AutoSize(value = "value", expression = " >> 1") @GLsizei int count, @Const DoubleBuffer value); + + @StripPostfix("value") + void glProgramUniform3dv(@GLuint int program, int location, @AutoSize(value = "value", expression = " / 3") @GLsizei int count, @Const DoubleBuffer value); + + @StripPostfix("value") + void glProgramUniform4dv(@GLuint int program, int location, @AutoSize(value = "value", expression = " >> 2") @GLsizei int count, @Const DoubleBuffer value); + + void glProgramUniform1ui(@GLuint int program, int location, int v0); + + void glProgramUniform2ui(@GLuint int program, int location, int v0, int v1); + + void glProgramUniform3ui(@GLuint int program, int location, int v0, int v1, int v2); + + void glProgramUniform4ui(@GLuint int program, int location, int v0, int v1, int v2, int v3); + + @StripPostfix("value") + void glProgramUniform1uiv(@GLuint int program, int location, @AutoSize("value") @GLsizei int count, @Const IntBuffer value); + + @StripPostfix("value") + void glProgramUniform2uiv(@GLuint int program, int location, @AutoSize(value = "value", expression = " >> 1") @GLsizei int count, @Const IntBuffer value); + + @StripPostfix("value") + void glProgramUniform3uiv(@GLuint int program, int location, @AutoSize(value = "value", expression = " / 3") @GLsizei int count, @Const IntBuffer value); + + @StripPostfix("value") + void glProgramUniform4uiv(@GLuint int program, int location, @AutoSize(value = "value", expression = " >> 2") @GLsizei int count, @Const IntBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix2fv(@GLuint int program, int location, @AutoSize(value = "value", expression = " >> 2") @GLsizei int count, boolean transpose, @Const FloatBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix3fv(@GLuint int program, int location, @AutoSize(value = "value", expression = " / (3 * 3)") @GLsizei int count, boolean transpose, @Const FloatBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix4fv(@GLuint int program, int location, @AutoSize(value = "value", expression = " >> 4") @GLsizei int count, boolean transpose, @Const FloatBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix2dv(@GLuint int program, int location, @AutoSize(value = "value", expression = " >> 2") @GLsizei int count, boolean transpose, @Const DoubleBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix3dv(@GLuint int program, int location, @AutoSize(value = "value", expression = " / (3 * 3)") @GLsizei int count, boolean transpose, @Const DoubleBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix4dv(@GLuint int program, int location, @AutoSize(value = "value", expression = " >> 4") @GLsizei int count, boolean transpose, @Const DoubleBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix2x3fv(@GLuint int program, int location, + @AutoSize(value = "value", expression = " / (2 * 3)") @GLsizei int count, boolean transpose, @Const FloatBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix3x2fv(@GLuint int program, int location, + @AutoSize(value = "value", expression = " / (3 * 2)") @GLsizei int count, boolean transpose, @Const FloatBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix2x4fv(@GLuint int program, int location, + @AutoSize(value = "value", expression = " >> 3") @GLsizei int count, boolean transpose, @Const FloatBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix4x2fv(@GLuint int program, int location, + @AutoSize(value = "value", expression = " >> 3") @GLsizei int count, boolean transpose, @Const FloatBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix3x4fv(@GLuint int program, int location, + @AutoSize(value = "value", expression = " / (3 * 4)") @GLsizei int count, boolean transpose, @Const FloatBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix4x3fv(@GLuint int program, int location, + @AutoSize(value = "value", expression = " / (4 * 3)") @GLsizei int count, boolean transpose, @Const FloatBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix2x3dv(@GLuint int program, int location, + @AutoSize(value = "value", expression = " / (2 * 3)") @GLsizei int count, boolean transpose, @Const DoubleBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix3x2dv(@GLuint int program, int location, + @AutoSize(value = "value", expression = " / (3 * 2)") @GLsizei int count, boolean transpose, @Const DoubleBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix2x4dv(@GLuint int program, int location, + @AutoSize(value = "value", expression = " >> 3") @GLsizei int count, boolean transpose, @Const DoubleBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix4x2dv(@GLuint int program, int location, + @AutoSize(value = "value", expression = " >> 3") @GLsizei int count, boolean transpose, @Const DoubleBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix3x4dv(@GLuint int program, int location, + @AutoSize(value = "value", expression = " / (3 * 4)") @GLsizei int count, boolean transpose, @Const DoubleBuffer value); + + @StripPostfix("value") + void glProgramUniformMatrix4x3dv(@GLuint int program, int location, + @AutoSize(value = "value", expression = " / (4 * 3)") @GLsizei int count, boolean transpose, @Const DoubleBuffer value); + + void glValidateProgramPipeline(@GLuint int pipeline); + + void glGetProgramPipelineInfoLog(@GLuint int pipeline, @AutoSize("infoLog") @GLsizei int bufSize, + @OutParameter @Check(value = "1", canBeNull = true) @GLsizei IntBuffer length, + @OutParameter @GLchar ByteBuffer infoLog); + + @Alternate("glGetProgramPipelineInfoLog") + @GLreturn(value = "infoLog", maxLength = "bufSize") + void glGetProgramPipelineInfoLog2(@GLuint int pipeline, @GLsizei int bufSize, + @OutParameter @GLsizei @Constant("infoLog_length, 0") IntBuffer length, + @OutParameter @GLchar ByteBuffer infoLog); + + // ----------------------------------------------------------------------- + // ----------------------[ ARB_vertex_attrib_64bit ]---------------------- + // ----------------------------------------------------------------------- + + /** Returned in the <type> parameter of GetActiveAttrib: */ + int GL_DOUBLE_VEC2 = 0x8FFC; + int GL_DOUBLE_VEC3 = 0x8FFD; + int GL_DOUBLE_VEC4 = 0x8FFE; + int GL_DOUBLE_MAT2 = 0x8F46; + int GL_DOUBLE_MAT3 = 0x8F47; + int GL_DOUBLE_MAT4 = 0x8F48; + int GL_DOUBLE_MAT2x3 = 0x8F49; + int GL_DOUBLE_MAT2x4 = 0x8F4A; + int GL_DOUBLE_MAT3x2 = 0x8F4B; + int GL_DOUBLE_MAT3x4 = 0x8F4C; + int GL_DOUBLE_MAT4x2 = 0x8F4D; + int GL_DOUBLE_MAT4x3 = 0x8F4E; + + void glVertexAttribL1d(@GLuint int index, double x); + + void glVertexAttribL2d(@GLuint int index, double x, double y); + + void glVertexAttribL3d(@GLuint int index, double x, double y, double z); + + void glVertexAttribL4d(@GLuint int index, double x, double y, double z, double w); + + @StripPostfix("v") + void glVertexAttribL1dv(@GLuint int index, @Const @Check("1") DoubleBuffer v); + + @StripPostfix("v") + void glVertexAttribL2dv(@GLuint int index, @Const @Check("2") DoubleBuffer v); + + @StripPostfix("v") + void glVertexAttribL3dv(@GLuint int index, @Const @Check("3") DoubleBuffer v); + + @StripPostfix("v") + void glVertexAttribL4dv(@GLuint int index, @Const @Check("4") DoubleBuffer v); + + void glVertexAttribLPointer(@GLuint int index, int size, @Constant("GL11.GL_DOUBLE") @GLenum int type, @GLsizei int stride, + @CachedReference(index = "index", name = "glVertexAttribPointer_buffer") + @BufferObject(BufferKind.ArrayVBO) + @Check @Const @GLdouble Buffer pointer); + + @StripPostfix("params") + void glGetVertexAttribLdv(@GLuint int index, @GLenum int pname, @OutParameter @Check("4") DoubleBuffer params); + + // ------------------------------------------------------------------ + // ----------------------[ ARB_viewport_array ]---------------------- + // ------------------------------------------------------------------ + + /** + * Accepted by the <pname> parameter of GetBooleanv, GetIntegerv, GetFloatv, + * GetDoublev and GetInteger64v: + */ + int GL_MAX_VIEWPORTS = 0x825B, + GL_VIEWPORT_SUBPIXEL_BITS = 0x825C, + GL_VIEWPORT_BOUNDS_RANGE = 0x825D, + GL_LAYER_PROVOKING_VERTEX = 0x825E, + GL_VIEWPORT_INDEX_PROVOKING_VERTEX = 0x825F; + + /** Accepted by the <pname> parameter of GetIntegeri_v: */ + int GL_SCISSOR_BOX = 0x0C10; + + /** Accepted by the <pname> parameter of GetFloati_v: */ + int GL_VIEWPORT = 0x0BA2; + + /** Accepted by the <pname> parameter of GetDoublei_v: */ + int GL_DEPTH_RANGE = 0x0B70; + + /** Accepted by the <pname> parameter of Enablei, Disablei, and IsEnabledi: */ + int GL_SCISSOR_TEST = 0x0C11; + + /** + * Returned in the <data> parameter from a Get query with a <pname> of + * LAYER_PROVOKING_VERTEX or VIEWPORT_INDEX_PROVOKING_VERTEX: + */ + int GL_FIRST_VERTEX_CONVENTION = 0x8E4D, + GL_LAST_VERTEX_CONVENTION = 0x8E4E, + GL_PROVOKING_VERTEX = 0x8E4F, + GL_UNDEFINED_VERTEX = 0x8260; + + @StripPostfix("v") + void glViewportArrayv(@GLuint int first, @AutoSize(value = "v", expression = " >> 2") @GLsizei int count, @Const FloatBuffer v); + + void glViewportIndexedf(@GLuint int index, float x, float y, float w, float h); + + @StripPostfix("v") + void glViewportIndexedfv(@GLuint int index, @Check("4") @Const FloatBuffer v); + + @StripPostfix("v") + void glScissorArrayv(@GLuint int first, @AutoSize(value = "v", expression = " >> 2") @GLsizei int count, @Const IntBuffer v); + + void glScissorIndexed(@GLuint int index, int left, int bottom, @GLsizei int width, @GLsizei int height); + + @StripPostfix("v") + void glScissorIndexedv(@GLuint int index, @Check("4") @Const IntBuffer v); + + @StripPostfix("v") + void glDepthRangeArrayv(@GLuint int first, @AutoSize(value = "v", expression = " >> 1") @GLsizei int count, @Const @GLclampd DoubleBuffer v); + + void glDepthRangeIndexed(@GLuint int index, @GLclampd double n, @GLclampd double f); + + @StripPostfix("data") + void glGetFloati_v(@GLenum int target, @GLuint int index, @Check @OutParameter FloatBuffer data); + + @Alternate("glGetFloati_v") + @GLreturn("data") + @StripPostfix("data") + void glGetFloati_v2(@GLenum int target, @GLuint int index, @OutParameter FloatBuffer data); + + @StripPostfix("data") + void glGetDoublei_v(@GLenum int target, @GLuint int index, @Check @OutParameter DoubleBuffer data); + + @Alternate("glGetDoublei_v") + @GLreturn("data") + @StripPostfix("data") + void glGetDoublei_v2(@GLenum int target, @GLuint int index, @OutParameter DoubleBuffer data); + +} \ No newline at end of file