/* * 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 org.lwjgl.util.generator.Alternate; import org.lwjgl.util.generator.opengl.*; import java.nio.ByteBuffer; import java.nio.FloatBuffer; import java.nio.IntBuffer; public interface ARB_shader_objects { /** Accepted by the <pname> argument of GetHandleARB: */ int GL_PROGRAM_OBJECT_ARB = 0x8B40; /** Accepted by the <pname> parameter of GetObjectParameter{fi}vARB: */ int GL_OBJECT_TYPE_ARB = 0x8B4E; int GL_OBJECT_SUBTYPE_ARB = 0x8B4F; int GL_OBJECT_DELETE_STATUS_ARB = 0x8B80; int GL_OBJECT_COMPILE_STATUS_ARB = 0x8B81; int GL_OBJECT_LINK_STATUS_ARB = 0x8B82; int GL_OBJECT_VALIDATE_STATUS_ARB = 0x8B83; int GL_OBJECT_INFO_LOG_LENGTH_ARB = 0x8B84; int GL_OBJECT_ATTACHED_OBJECTS_ARB = 0x8B85; int GL_OBJECT_ACTIVE_UNIFORMS_ARB = 0x8B86; int GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB = 0x8B87; int GL_OBJECT_SHADER_SOURCE_LENGTH_ARB = 0x8B88; /** Returned by the <params> parameter of GetObjectParameter{fi}vARB: */ int GL_SHADER_OBJECT_ARB = 0x8B48; /** Returned by the <type> parameter of GetActiveUniformARB: */ int GL_FLOAT_VEC2_ARB = 0x8B50; int GL_FLOAT_VEC3_ARB = 0x8B51; int GL_FLOAT_VEC4_ARB = 0x8B52; int GL_INT_VEC2_ARB = 0x8B53; int GL_INT_VEC3_ARB = 0x8B54; int GL_INT_VEC4_ARB = 0x8B55; int GL_BOOL_ARB = 0x8B56; int GL_BOOL_VEC2_ARB = 0x8B57; int GL_BOOL_VEC3_ARB = 0x8B58; int GL_BOOL_VEC4_ARB = 0x8B59; int GL_FLOAT_MAT2_ARB = 0x8B5A; int GL_FLOAT_MAT3_ARB = 0x8B5B; int GL_FLOAT_MAT4_ARB = 0x8B5C; int GL_SAMPLER_1D_ARB = 0x8B5D; int GL_SAMPLER_2D_ARB = 0x8B5E; int GL_SAMPLER_3D_ARB = 0x8B5F; int GL_SAMPLER_CUBE_ARB = 0x8B60; int GL_SAMPLER_1D_SHADOW_ARB = 0x8B61; int GL_SAMPLER_2D_SHADOW_ARB = 0x8B62; int GL_SAMPLER_2D_RECT_ARB = 0x8B63; int GL_SAMPLER_2D_RECT_SHADOW_ARB = 0x8B64; void glDeleteObjectARB(@GLhandleARB int obj); @GLhandleARB int glGetHandleARB(@GLenum int pname); void glDetachObjectARB(@GLhandleARB int containerObj, @GLhandleARB int attachedObj); @GLhandleARB int glCreateShaderObjectARB(@GLenum int shaderType); /** * The ARB_shader_objects extension allows multiple, optionally null-terminated, source strings to define a shader program. * <p/> * This method uses just a single string, that should NOT be null-terminated. */ void glShaderSourceARB(@GLhandleARB int shader, @Constant("1") @GLsizei int count, @Indirect @Const @GLcharARB @Check ByteBuffer string, @AutoSize("string") @Indirect @Const @GLint int length); @Alternate("glShaderSourceARB") void glShaderSourceARB2(@GLhandleARB int shader, @Constant("1") @GLsizei int count, CharSequence string, @Constant("string.length()") @Indirect @Const int length); @Alternate(value = "glShaderSourceARB", nativeAlt = true) void glShaderSourceARB3(@GLhandleARB int shader, @Constant("strings.length") @GLsizei int count, @Const @PointerArray(value = "count", lengths = "length") CharSequence[] strings, @Constant("APIUtil.getLengths(caps, strings)") @Const IntBuffer length); void glCompileShaderARB(@GLhandleARB int shaderObj); @GLhandleARB int glCreateProgramObjectARB(); void glAttachObjectARB(@GLhandleARB int containerObj, @GLhandleARB int obj); void glLinkProgramARB(@GLhandleARB int programObj); void glUseProgramObjectARB(@GLhandleARB int programObj); void glValidateProgramARB(@GLhandleARB int programObj); void glUniform1fARB(int location, float v0); void glUniform2fARB(int location, float v0, float v1); void glUniform3fARB(int location, float v0, float v1, float v2); void glUniform4fARB(int location, float v0, float v1, float v2, float v3); void glUniform1iARB(int location, int v0); void glUniform2iARB(int location, int v0, int v1); void glUniform3iARB(int location, int v0, int v1, int v2); void glUniform4iARB(int location, int v0, int v1, int v2, int v3); @StripPostfix("values") void glUniform1fvARB(int location, @AutoSize("values") @GLsizei int count, @Const FloatBuffer values); @StripPostfix("values") void glUniform2fvARB(int location, @AutoSize(value = "values", expression = " >> 1") @GLsizei int count, @Const FloatBuffer values); @StripPostfix("values") void glUniform3fvARB(int location, @AutoSize(value = "values", expression = " / 3") @GLsizei int count, @Const FloatBuffer values); @StripPostfix("values") void glUniform4fvARB(int location, @AutoSize(value = "values", expression = " >> 2") @GLsizei int count, @Const FloatBuffer values); @StripPostfix("values") void glUniform1ivARB(int location, @AutoSize(value = "values") @GLsizei int count, @Const IntBuffer values); @StripPostfix("values") void glUniform2ivARB(int location, @AutoSize(value = "values", expression = " >> 1") @GLsizei int count, @Const IntBuffer values); @StripPostfix("values") void glUniform3ivARB(int location, @AutoSize(value = "values", expression = " / 3") @GLsizei int count, @Const IntBuffer values); @StripPostfix("values") void glUniform4ivARB(int location, @AutoSize(value = "values", expression = " >> 2") @GLsizei int count, @Const IntBuffer values); @StripPostfix("matrices") void glUniformMatrix2fvARB(int location, @AutoSize(value = "matrices", expression = " >> 2") @GLsizei int count, boolean transpose, @Const FloatBuffer matrices); @StripPostfix("matrices") void glUniformMatrix3fvARB(int location, @AutoSize(value = "matrices", expression = " / (3 * 3)") @GLsizei int count, boolean transpose, @Const FloatBuffer matrices); @StripPostfix("matrices") void glUniformMatrix4fvARB(int location, @AutoSize(value = "matrices", expression = " >> 4") @GLsizei int count, boolean transpose, @Const FloatBuffer matrices); @StripPostfix("params") void glGetObjectParameterfvARB(@GLhandleARB int obj, @GLenum int pname, @OutParameter @Check FloatBuffer params); @Alternate("glGetObjectParameterfvARB") @GLreturn("params") @StripPostfix(value = "params", hasPostfix = false) void glGetObjectParameterfvARB2(@GLhandleARB int obj, @GLenum int pname, @OutParameter FloatBuffer params); @StripPostfix("params") void glGetObjectParameterivARB(@GLhandleARB int obj, @GLenum int pname, @OutParameter @Check IntBuffer params); @Alternate("glGetObjectParameterivARB") @GLreturn("params") @StripPostfix(value = "params", hasPostfix = false) void glGetObjectParameterivARB2(@GLhandleARB int obj, @GLenum int pname, @OutParameter IntBuffer params); void glGetInfoLogARB(@GLhandleARB int obj, @AutoSize("infoLog") @GLsizei int maxLength, @OutParameter @GLsizei @Check(value = "1", canBeNull = true) IntBuffer length, @OutParameter @GLcharARB ByteBuffer infoLog); @Alternate("glGetInfoLogARB") @GLreturn(value = "infoLog", maxLength = "maxLength") void glGetInfoLogARB2(@GLhandleARB int obj, @GLsizei int maxLength, @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(infoLog_length)") IntBuffer length, @OutParameter @GLcharARB ByteBuffer infoLog); void glGetAttachedObjectsARB(@GLhandleARB int containerObj, @AutoSize("obj") @GLsizei int maxCount, @OutParameter @GLsizei @Check(value = "1", canBeNull = true) IntBuffer count, @OutParameter @GLhandleARB IntBuffer obj); /** * Returns the location of the uniform with the specified name. The ByteBuffer should contain the uniform name as a <b>null-terminated</b> string. * * @param programObj * @param name */ int glGetUniformLocationARB(@GLhandleARB int programObj, @NullTerminated @Const @GLcharARB ByteBuffer name); @Alternate("glGetUniformLocationARB") int glGetUniformLocationARB(@GLhandleARB int programObj, @NullTerminated CharSequence name); void glGetActiveUniformARB(@GLhandleARB int programObj, @GLuint int index, @AutoSize("name") @GLsizei int maxLength, @OutParameter @GLsizei @Check(value = "1", canBeNull = true) IntBuffer length, @OutParameter @Check("1") IntBuffer size, @OutParameter @GLenum @Check("1") IntBuffer type, @OutParameter @GLcharARB ByteBuffer name); /** Overloads glGetActiveUniformARB. This version returns both size and type in the sizeType buffer (at .position() and .position() + 1). */ @Alternate("glGetActiveUniformARB") @GLreturn(value = "name", maxLength = "maxLength") void glGetActiveUniformARB2(@GLhandleARB int programObj, @GLuint int index, @GLsizei int maxLength, @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(name_length)") IntBuffer length, @OutParameter @Check("2") IntBuffer sizeType, @OutParameter @GLenum @Constant("MemoryUtil.getAddress(sizeType, sizeType.position() + 1)") IntBuffer type, @OutParameter @GLcharARB ByteBuffer name); /** Overloads glGetActiveUniformARB. This version returns only the uniform name. */ @Alternate(value = "glGetActiveUniformARB", javaAlt = true) @GLreturn(value = "name", maxLength = "maxLength") void glGetActiveUniformARB(@GLhandleARB int programObj, @GLuint int index, @GLsizei int maxLength, @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(name_length), MemoryUtil.getAddress0(APIUtil.getBufferInt(caps)), MemoryUtil.getAddress(APIUtil.getBufferInt(caps), 1)") IntBuffer length, @OutParameter @GLcharARB ByteBuffer name); /** Overloads glGetActiveUniformARB. This version returns only the uniform size. */ @Alternate(value = "glGetActiveUniformARB", javaAlt = true) @GLreturn(value = "size") void glGetActiveUniformSizeARB(@GLhandleARB int programObj, @GLuint int index, @Constant("0") @GLsizei int maxLength, @OutParameter @GLsizei @Constant("0L") IntBuffer length, @OutParameter IntBuffer size, @OutParameter @GLenum @Constant("MemoryUtil.getAddress(size, 1)") IntBuffer type, // Reuse size buffer and ignore @OutParameter @GLcharARB @Constant("APIUtil.getBufferByte0(caps)") ByteBuffer name); /** Overloads glGetActiveUniformARB. This version returns only the uniform type. */ @Alternate(value = "glGetActiveUniformARB", javaAlt = true) @GLreturn(value = "type") void glGetActiveUniformTypeARB(@GLhandleARB int programObj, @GLuint int index, @Constant("0") @GLsizei int maxLength, @OutParameter @GLsizei @Constant("0L") IntBuffer length, @OutParameter @Constant("MemoryUtil.getAddress(type, 1)") IntBuffer size, // Reuse type buffer and ignore @OutParameter @GLenum IntBuffer type, @OutParameter @GLcharARB @Constant("APIUtil.getBufferByte0(caps)") ByteBuffer name); @StripPostfix("params") void glGetUniformfvARB(@GLhandleARB int programObj, int location, @OutParameter @Check FloatBuffer params); @StripPostfix("params") void glGetUniformivARB(@GLhandleARB int programObj, int location, @OutParameter @Check IntBuffer params); void glGetShaderSourceARB(@GLhandleARB int obj, @AutoSize("source") @GLsizei int maxLength, @OutParameter @GLsizei @Check(value = "1", canBeNull = true) IntBuffer length, @OutParameter @GLcharARB ByteBuffer source); @Alternate("glGetShaderSourceARB") @GLreturn(value = "source", maxLength = "maxLength") void glGetShaderSourceARB2(@GLhandleARB int obj, @GLsizei int maxLength, @OutParameter @GLsizei @Constant("MemoryUtil.getAddress0(source_length)") IntBuffer length, @OutParameter @GLcharARB ByteBuffer source); }