diff options
Diffstat (limited to 'Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/funcs.go')
-rw-r--r-- | Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/funcs.go | 1764 |
1 files changed, 1764 insertions, 0 deletions
diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/funcs.go b/Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/funcs.go new file mode 100644 index 000000000..994a3e91b --- /dev/null +++ b/Godeps/_workspace/src/github.com/obscuren/qml/gl/gengl/funcs.go @@ -0,0 +1,1764 @@ +package main + +type funcTweak struct { + // name specifies the name of the Go function to be tweaked. + name string + + // copy copies all the definitions for this function tweak from the named + // function. Templates are parsed under the new context. + copy string + + // params specifies a map of zero or more tweaks for specific parameters. + params paramTweaks + + // result defines the function result as presented at the end of the func line. + // Simple type changes are handled automatically. More involved multi-value + // results will require an appropriate after snippet to handle the return. + result string + + // before is a code snippet to be injected before the C function call. + // It may use the following template variables and functions: + // + // . - dot holds the Func being tweaked + // {{copyDoc "Func"}} - replaced by the respective function documentation + // {{paramGoType . "param"}} - replaced by the respective parameter Go type + // + before string + + // after is a code snippet to be injected after the C function call. + // It may use the same template functions as available for before. + after string + + // doc defines the documentation for the function. It may use the same + // template functions as available for before and after. + doc string +} + +type paramTweak struct { + // rename changes the parameter name in the Go function while keeping the C + // function call unchanged. The before snippet must define a proper variable + // to be used under the original name. + rename string + + // replace changes the parameter name in the C function call to a variable + // named "<original name>_c", while keeping the Go parameter name unchanged. + // The before and after snippets must manipulate the two values as needed. + replace bool + + // retype changes the Go parameter type. + retype string + + // output flags the parameter as an output parameter, which causes it to be + // omitted from the input parameter list and added to the result list. + output bool + + // unnamed causes the name of a result parameter to be omitted if possible. + unnamed bool + + // single flags the parameter as carrying a single value rather than a slice, + // when the parameter is originally defined as a pointer. + single bool + + // omit drops the parameter from the Go function. The before snippet must + // define a variable with the proper name for the C function call to use. + omit bool +} + +type paramTweaks map[string]paramTweak + +var paramNameFixes = map[string]string{ + "binaryformat": "binaryFormat", + "bufsize": "bufSize", + "indx": "index", + "infolog": "infoLog", + "internalformat": "internalFormat", + "precisiontype": "precisionType", + "ptr": "pointer", +} + +var funcTweakList = []funcTweak{{ + name: "Accum", + doc: ` + executes an operation on the accumulation buffer. + + Parameter op defines the accumulation buffer operation (GL.ACCUM, GL.LOAD, + GL.ADD, GL.MULT, or GL.RETURN) and specifies how the value parameter is + used. + + The accumulation buffer is an extended-range color buffer. Images are not + rendered into it. Rather, images rendered into one of the color buffers + are added to the contents of the accumulation buffer after rendering. + Effects such as antialiasing (of points, lines, and polygons), motion + blur, and depth of field can be created by accumulating images generated + with different transformation matrices. + + Each pixel in the accumulation buffer consists of red, green, blue, and + alpha values. The number of bits per component in the accumulation buffer + depends on the implementation. You can examine this number by calling + GetIntegerv four times, with arguments GL.ACCUM_RED_BITS, + GL.ACCUM_GREEN_BITS, GL.ACCUM_BLUE_BITS, and GL.ACCUM_ALPHA_BITS. + Regardless of the number of bits per component, the range of values stored + by each component is (-1, 1). The accumulation buffer pixels are mapped + one-to-one with frame buffer pixels. + + All accumulation buffer operations are limited to the area of the current + scissor box and applied identically to the red, green, blue, and alpha + components of each pixel. If a Accum operation results in a value outside + the range (-1, 1), the contents of an accumulation buffer pixel component + are undefined. + + The operations are as follows: + + GL.ACCUM + Obtains R, G, B, and A values from the buffer currently selected for + reading (see ReadBuffer). Each component value is divided by 2 n - + 1 , where n is the number of bits allocated to each color component + in the currently selected buffer. The result is a floating-point + value in the range 0 1 , which is multiplied by value and added to + the corresponding pixel component in the accumulation buffer, + thereby updating the accumulation buffer. + + GL.LOAD + Similar to GL.ACCUM, except that the current value in the + accumulation buffer is not used in the calculation of the new value. + That is, the R, G, B, and A values from the currently selected + buffer are divided by 2 n - 1 , multiplied by value, and then stored + in the corresponding accumulation buffer cell, overwriting the + current value. + + GL.ADD + Adds value to each R, G, B, and A in the accumulation buffer. + + GL.MULT + Multiplies each R, G, B, and A in the accumulation buffer by value + and returns the scaled component to its corresponding accumulation + buffer location. + + GL.RETURN + Transfers accumulation buffer values to the color buffer or buffers + currently selected for writing. Each R, G, B, and A component is + multiplied by value, then multiplied by 2 n - 1 , clamped to the + range 0 2 n - 1 , and stored in the corresponding display buffer + cell. The only fragment operations that are applied to this transfer + are pixel ownership, scissor, dithering, and color writemasks. + + To clear the accumulation buffer, call ClearAccum with R, G, B, and A + values to set it to, then call Clear with the accumulation buffer + enabled. + + Error GL.INVALID_ENUM is generated if op is not an accepted value. + GL.INVALID_OPERATION is generated if there is no accumulation buffer. + GL.INVALID_OPERATION is generated if Accum is executed between the + execution of Begin and the corresponding execution of End. + `, +}, { + name: "AttachShader", + doc: ` + attaches a shader object to a program object. + + In order to create an executable, there must be a way to specify the list + of things that will be linked together. Program objects provide this + mechanism. Shaders that are to be linked together in a program object must + first be attached to that program object. This indicates that shader will + be included in link operations that will be performed on program. + + All operations that can be performed on a shader object are valid whether + or not the shader object is attached to a program object. It is + permissible to attach a shader object to a program object before source + code has been loaded into the shader object or before the shader object + has been compiled. It is permissible to attach multiple shader objects of + the same type because each may contain a portion of the complete shader. + It is also permissible to attach a shader object to more than one program + object. If a shader object is deleted while it is attached to a program + object, it will be flagged for deletion, and deletion will not occur until + DetachShader is called to detach it from all program objects to which it + is attached. + + Error GL.INVALID_VALUE is generated if either program or shader is not a + value generated by OpenGL. GL.INVALID_OPERATION is generated if program + is not a program object. GL.INVALID_OPERATION is generated if shader is + not a shader object. GL.INVALID_OPERATION is generated if shader is + already attached to program. GL.INVALID_OPERATION is generated if + AttachShader is executed between the execution of Begin and the + corresponding execution of End. + + {{funcSince . "2.0+"}} + `, +}, { + name: "BindAttribLocation", + params: paramTweaks{ + "name": {retype: "string"}, + }, + doc: ` + associates a user-defined attribute variable in the program + object specified by program with a generic vertex attribute index. The name + parameter specifies the name of the vertex shader attribute variable to + which index is to be bound. When program is made part of the current state, + values provided via the generic vertex attribute index will modify the + value of the user-defined attribute variable specified by name. + + If name refers to a matrix attribute variable, index refers to the first + column of the matrix. Other matrix columns are then automatically bound to + locations index+1 for a matrix of type mat2; index+1 and index+2 for a + matrix of type mat3; and index+1, index+2, and index+3 for a matrix of + type mat4. + + This command makes it possible for vertex shaders to use descriptive names + for attribute variables rather than generic variables that are numbered + from 0 to GL.MAX_VERTEX_ATTRIBS-1. The values sent to each generic + attribute index are part of current state, just like standard vertex + attributes such as color, normal, and vertex position. If a different + program object is made current by calling UseProgram, the generic vertex + attributes are tracked in such a way that the same values will be observed + by attributes in the new program object that are also bound to index. + + Attribute variable name-to-generic attribute index bindings for a program + object can be explicitly assigned at any time by calling + BindAttribLocation. Attribute bindings do not go into effect until + LinkProgram is called. After a program object has been linked + successfully, the index values for generic attributes remain fixed (and + their values can be queried) until the next link command occurs. + + Applications are not allowed to bind any of the standard OpenGL vertex + attributes using this command, as they are bound automatically when + needed. Any attribute binding that occurs after the program object has + been linked will not take effect until the next time the program object is + linked. + + If name was bound previously, that information is lost. Thus you cannot + bind one user-defined attribute variable to multiple indices, but you can + bind multiple user-defined attribute variables to the same index. + + Applications are allowed to bind more than one user-defined attribute + variable to the same generic vertex attribute index. This is called + aliasing, and it is allowed only if just one of the aliased attributes is + active in the executable program, or if no path through the shader + consumes more than one attribute of a set of attributes aliased to the + same location. The compiler and linker are allowed to assume that no + aliasing is done and are free to employ optimizations that work only in + the absence of aliasing. OpenGL implementations are not required to do + error checking to detect aliasing. Because there is no way to bind + standard attributes, it is not possible to alias generic attributes with + conventional ones (except for generic attribute 0). + + BindAttribLocation can be called before any vertex shader objects are + bound to the specified program object. It is also permissible to bind a + generic attribute index to an attribute variable name that is never used + in a vertex shader. + + Active attributes that are not explicitly bound will be bound by the + linker when LinkProgram is called. The locations assigned can be queried + by calling GetAttribLocation. + + Error GL.INVALID_VALUE is generated if index is greater than or equal to + GL.MAX_VERTEX_ATTRIBS. + GL.INVALID_OPERATION is generated if name starts with the reserved prefix "gl_". + GL.INVALID_VALUE is generated if program is not a value generated by OpenGL. + GL.INVALID_OPERATION is generated if program is not a program object. + GL.INVALID_OPERATION is generated if BindAttribLocation is executed + between the execution of Begin and the corresponding execution of End. + + {{funcSince . "2.0+"}} + `, +}, { + name: "BindBuffer", + doc: ` + creates or puts in use a named buffer object. + Calling BindBuffer with target set to GL.ARRAY_BUFFER, + GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER or GL.PIXEL_UNPACK_BUFFER + and buffer set to the name of the new buffer object binds the buffer + object name to the target. When a buffer object is bound to a target, the + previous binding for that target is automatically broken. + + Buffer object names are unsigned integers. The value zero is reserved, but + there is no default buffer object for each buffer object target. Instead, + buffer set to zero effectively unbinds any buffer object previously bound, + and restores client memory usage for that buffer object target. Buffer + object names and the corresponding buffer object contents are local to the + shared display-list space (see XCreateContext) of the current GL rendering + context; two rendering contexts share buffer object names only if they + also share display lists. + + GenBuffers may be called to generate a set of new buffer object names. + + The state of a buffer object immediately after it is first bound is an + unmapped zero-sized memory buffer with GL.READ_WRITE access and + GL.STATIC_DRAW usage. + + While a non-zero buffer object name is bound, GL operations on the target + to which it is bound affect the bound buffer object, and queries of the + target to which it is bound return state from the bound buffer object. + While buffer object name zero is bound, as in the initial state, attempts + to modify or query state on the target to which it is bound generates an + GL.INVALID_OPERATION error. + + When vertex array pointer state is changed, for example by a call to + NormalPointer, the current buffer object binding (GL.ARRAY_BUFFER_BINDING) + is copied into the corresponding client state for the vertex array type + being changed, for example GL.NORMAL_ARRAY_BUFFER_BINDING. While a + non-zero buffer object is bound to the GL.ARRAY_BUFFER target, the vertex + array pointer parameter that is traditionally interpreted as a pointer to + client-side memory is instead interpreted as an offset within the buffer + object measured in basic machine units. + + While a non-zero buffer object is bound to the GL.ELEMENT_ARRAY_BUFFER + target, the indices parameter of DrawElements, DrawRangeElements, or + MultiDrawElements that is traditionally interpreted as a pointer to + client-side memory is instead interpreted as an offset within the buffer + object measured in basic machine units. + + While a non-zero buffer object is bound to the GL.PIXEL_PACK_BUFFER + target, the following commands are affected: GetCompressedTexImage, + GetConvolutionFilter, GetHistogram, GetMinmax, GetPixelMap, + GetPolygonStipple, GetSeparableFilter, GetTexImage, and ReadPixels. The + pointer parameter that is traditionally interpreted as a pointer to + client-side memory where the pixels are to be packed is instead + interpreted as an offset within the buffer object measured in basic + machine units. + + While a non-zero buffer object is bound to the GL.PIXEL_UNPACK_BUFFER + target, the following commands are affected: Bitmap, ColorSubTable, + ColorTable, CompressedTexImage1D, CompressedTexImage2D, + CompressedTexImage3D, CompressedTexSubImage1D, CompressedTexSubImage2D, + CompressedTexSubImage3D, ConvolutionFilter1D, ConvolutionFilter2D, + DrawPixels, PixelMap, PolygonStipple, SeparableFilter2D, TexImage1D, + TexImage2D, TexImage3D, TexSubImage1D, TexSubImage2D, and TexSubImage3D. + The pointer parameter that is traditionally interpreted as a pointer to + client-side memory from which the pixels are to be unpacked is instead + interpreted as an offset within the buffer object measured in basic + machine units. + + A buffer object binding created with BindBuffer remains active until a + different buffer object name is bound to the same target, or until the + bound buffer object is deleted with DeleteBuffers. + + Once created, a named buffer object may be re-bound to any target as often + as needed. However, the GL implementation may make choices about how to + optimize the storage of a buffer object based on its initial binding + target. + + Error GL.INVALID_ENUM is generated if target is not one of the allowable + values. GL.INVALID_OPERATION is generated if BindBuffer is executed + between the execution of Begin and the corresponding execution of End. + + {{funcSince . "1.5+"}} + `, +}, { + name: "BufferData", + before: ` + if data != nil { + size = int(data_v.Type().Size()) * data_v.Len() + } + `, + doc: ` + creates a new data store for the buffer object currently + bound to target. Any pre-existing data store is deleted. The new data + store is created with the specified size in bytes and usage. If data is + not nil, it must be a slice that is used to initialize the data store. + In that case the size parameter is ignored and the store size will match + the slice data size. + + In its initial state, the new data store is not mapped, it has a NULL + mapped pointer, and its mapped access is GL.READ_WRITE. + + The target constant must be one of GL.ARRAY_BUFFER, GL.COPY_READ_BUFFER, + GL.COPY_WRITE_BUFFER, GL.ELEMENT_ARRAY_BUFFER, GL.PIXEL_PACK_BUFFER, + GL.PIXEL_UNPACK_BUFFER, GL.TEXTURE_BUFFER, GL.TRANSFORM_FEEDBACK_BUFFER, + or GL.UNIFORM_BUFFER. + + The usage parameter is a hint to the GL implementation as to how a buffer + object's data store will be accessed. This enables the GL implementation + to make more intelligent decisions that may significantly impact buffer + object performance. It does not, however, constrain the actual usage of + the data store. usage can be broken down into two parts: first, the + frequency of access (modification and usage), and second, the nature of + that access. + + A usage frequency of STREAM and nature of DRAW is specified via the + constant GL.STREAM_DRAW, for example. + + The usage frequency of access may be one of: + + STREAM + The data store contents will be modified once and used at most a few times. + + STATIC + The data store contents will be modified once and used many times. + + DYNAMIC + The data store contents will be modified repeatedly and used many times. + + The usage nature of access may be one of: + + DRAW + The data store contents are modified by the application, and used as + the source for GL drawing and image specification commands. + + READ + The data store contents are modified by reading data from the GL, + and used to return that data when queried by the application. + + COPY + The data store contents are modified by reading data from the GL, + and used as the source for GL drawing and image specification + commands. + + Clients must align data elements consistent with the requirements of the + client platform, with an additional base-level requirement that an offset + within a buffer to a datum comprising N bytes be a multiple of N. + + Error GL.INVALID_ENUM is generated if target is not one of the accepted + buffer targets. GL.INVALID_ENUM is generated if usage is not + GL.STREAM_DRAW, GL.STREAM_READ, GL.STREAM_COPY, GL.STATIC_DRAW, + GL.STATIC_READ, GL.STATIC_COPY, GL.DYNAMIC_DRAW, GL.DYNAMIC_READ, or + GL.DYNAMIC_COPY. GL.INVALID_VALUE is generated if size is negative. + GL.INVALID_OPERATION is generated if the reserved buffer object name 0 is + bound to target. GL.OUT_OF_MEMORY is generated if the GL is unable to + create a data store with the specified size. + `, +}, { + name: "CompileShader", + doc: ` + compiles the source code strings that have been stored in + the shader object specified by shader. + + The compilation status will be stored as part of the shader object's + state. This value will be set to GL.TRUE if the shader was compiled without + errors and is ready for use, and GL.FALSE otherwise. It can be queried by + calling GetShaderiv with arguments shader and GL.COMPILE_STATUS. + + Compilation of a shader can fail for a number of reasons as specified by + the OpenGL Shading Language Specification. Whether or not the compilation + was successful, information about the compilation can be obtained from the + shader object's information log by calling GetShaderInfoLog. + + Error GL.INVALID_VALUE is generated if shader is not a value generated by + OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader + object. GL.INVALID_OPERATION is generated if CompileShader is executed + between the execution of Begin and the corresponding execution of End. + + {{funcSince . "2.0+"}} + `, +}, { + name: "CreateProgram", + result: "glbase.Program", + doc: ` + creates an empty program object and returns a non-zero + value by which it can be referenced. A program object is an object to + which shader objects can be attached. This provides a mechanism to specify + the shader objects that will be linked to create a program. It also + provides a means for checking the compatibility of the shaders that will + be used to create a program (for instance, checking the compatibility + between a vertex shader and a fragment shader). When no longer needed as + part of a program object, shader objects can be detached. + + One or more executables are created in a program object by successfully + attaching shader objects to it with AttachShader, successfully compiling + the shader objects with CompileShader, and successfully linking the + program object with LinkProgram. These executables are made part of + current state when UseProgram is called. Program objects can be deleted + by calling DeleteProgram. The memory associated with the program object + will be deleted when it is no longer part of current rendering state for + any context. + + Like display lists and texture objects, the name space for program objects + may be shared across a set of contexts, as long as the server sides of the + contexts share the same address space. If the name space is shared across + contexts, any attached objects and the data associated with those attached + objects are shared as well. + + Applications are responsible for providing the synchronization across API + calls when objects are accessed from different execution threads. + + This function returns 0 if an error occurs creating the program object. + + Error GL.INVALID_OPERATION is generated if CreateProgram is executed + between the execution of Begin and the corresponding execution of End. + + {{funcSince . "2.0+"}} + `, +}, { + name: "CreateShader", + result: "glbase.Shader", + doc: ` + creates an empty shader object and returns a non-zero value + by which it can be referenced. A shader object is used to maintain the + source code strings that define a shader. shaderType indicates the type of + shader to be created. + + Two types of shaders are supported. A shader of type GL.VERTEX_SHADER is a + shader that is intended to run on the programmable vertex processor and + replace the fixed functionality vertex processing in OpenGL. A shader of + type GL.FRAGMENT_SHADER is a shader that is intended to run on the + programmable fragment processor and replace the fixed functionality + fragment processing in OpenGL. + + When created, a shader object's GL.SHADER_TYPE parameter is set to either + GL.VERTEX_SHADER or GL.FRAGMENT_SHADER, depending on the value of + shaderType. + + Like display lists and texture objects, the name space for shader objects + may be shared across a set of contexts, as long as the server sides of the + contexts share the same address space. If the name space is shared across + contexts, any attached objects and the data associated with those attached + objects are shared as well. + + This function returns 0 if an error occurs creating the shader object. + + Error GL.INVALID_ENUM is generated if shaderType is not an accepted value. + GL.INVALID_OPERATION is generated if CreateShader is executed between the + execution of Begin and the corresponding execution of End. + + {{funcSince . "2.0+"}} + `, +}, { + name: "DeleteBuffers", + params: paramTweaks{ + "n": {omit: true}, + }, + before: ` + n := len(buffers) + if n == 0 { return } + `, + doc: ` + deletes the buffer objects whose names are stored in the + buffers slice. + + After a buffer object is deleted, it has no contents, and its name is free + for reuse (for example by GenBuffers). If a buffer object that is + currently bound is deleted, the binding reverts to 0 (the absence of any + buffer object, which reverts to client memory usage). + + DeleteBuffers silently ignores 0's and names that do not correspond to + existing buffer objects. + + Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION + is generated if DeleteBuffers is executed between the execution of Begin + and the corresponding execution of End. + + {{funcSince . "1.5+"}} + `, +}, { + name: "DeleteFramebuffers", + params: paramTweaks{ + "n": {omit: true}, + }, + before: ` + n := len(framebuffers) + if n == 0 { return } + `, + doc: ` + deletes the framebuffer objects whose names are + stored in the framebuffers slice. The name zero is reserved by the GL and + is silently ignored, should it occur in framebuffers, as are other unused + names. Once a framebuffer object is deleted, its name is again unused and + it has no attachments. If a framebuffer that is currently bound to one or + more of the targets GL.DRAW_FRAMEBUFFER or GL.READ_FRAMEBUFFER is deleted, + it is as though BindFramebuffer had been executed with the corresponding + target and framebuffer zero. + + Error GL.INVALID_VALUE is generated if n is negative. + + {{funcSince . "3.0+"}} + `, +}, { + name: "DeleteProgram", + doc: ` + frees the memory and invalidates the name associated with + the program object specified by program. This command effectively undoes + the effects of a call to CreateProgram. + + If a program object is in use as part of current rendering state, it will + be flagged for deletion, but it will not be deleted until it is no longer + part of current state for any rendering context. If a program object to be + deleted has shader objects attached to it, those shader objects will be + automatically detached but not deleted unless they have already been + flagged for deletion by a previous call to DeleteShader. A value of 0 + for program will be silently ignored. + + To determine whether a program object has been flagged for deletion, call + GetProgram with arguments program and GL.DELETE_STATUS. + + Error GL.INVALID_VALUE is generated if program is not a value generated by + OpenGL. + + {{funcSince . "2.0+"}} + `, +}, { + name: "DeleteRenderbuffers", + params: paramTweaks{ + "n": {omit: true}, + }, + before: ` + n := len(renderbuffers) + if n == 0 { return } + `, + doc: ` + deletes the renderbuffer objects whose names are stored + in the renderbuffers slice. The name zero is reserved by the GL and + is silently ignored, should it occur in renderbuffers, as are other unused + names. Once a renderbuffer object is deleted, its name is again unused and + it has no contents. If a renderbuffer that is currently bound to the + target GL.RENDERBUFFER is deleted, it is as though BindRenderbuffer had + been executed with a target of GL.RENDERBUFFER and a name of zero. + + If a renderbuffer object is attached to one or more attachment points in + the currently bound framebuffer, then it as if FramebufferRenderbuffer + had been called, with a renderbuffer of zero for each attachment point to + which this image was attached in the currently bound framebuffer. In other + words, this renderbuffer object is first detached from all attachment + ponits in the currently bound framebuffer. Note that the renderbuffer + image is specifically not detached from any non-bound framebuffers. + + Error GL.INVALID_VALUE is generated if n is negative. + + {{funcSince . "3.0+"}} + `, +}, { + name: "DeleteShader", + doc: ` + frees the memory and invalidates the name associated with + the shader object specified by shader. This command effectively undoes the + effects of a call to CreateShader. + + If a shader object to be deleted is attached to a program object, it will + be flagged for deletion, but it will not be deleted until it is no longer + attached to any program object, for any rendering context (it must + be detached from wherever it was attached before it will be deleted). A + value of 0 for shader will be silently ignored. + + To determine whether an object has been flagged for deletion, call + GetShader with arguments shader and GL.DELETE_STATUS. + + Error GL.INVALID_VALUE is generated if shader is not a value generated by + OpenGL. + + {{funcSince . "2.0+"}} + `, +}, { + name: "DeleteTextures", + params: paramTweaks{ + "n": {omit: true}, + }, + before: ` + n := len(textures) + if n == 0 { return } + `, + doc: ` + deletes the textures objects whose names are stored + in the textures slice. After a texture is deleted, it has no contents or + dimensionality, and its name is free for reuse (for example by + GenTextures). If a texture that is currently bound is deleted, the binding + reverts to 0 (the default texture). + + DeleteTextures silently ignores 0's and names that do not correspond to + existing textures. + + Error GL.INVALID_VALUE is generated if n is negative. + + {{funcSince . "2.0+"}} + `, +}, { + name: "DepthRange", + doc: ` + specifies the mapping of depth values from normalized device + coordinates to window coordinates. + + Parameter nearVal specifies the mapping of the near clipping plane to window + coordinates (defaults to 0), while farVal specifies the mapping of the far + clipping plane to window coordinates (defaults to 1). + + After clipping and division by w, depth coordinates range from -1 to 1, + corresponding to the near and far clipping planes. DepthRange specifies a + linear mapping of the normalized depth coordinates in this range to window + depth coordinates. Regardless of the actual depth buffer implementation, + window coordinate depth values are treated as though they range from 0 through 1 + (like color components). Thus, the values accepted by DepthRange are both + clamped to this range before they are accepted. + + The default setting of (0, 1) maps the near plane to 0 and the far plane to 1. + With this mapping, the depth buffer range is fully utilized. + + It is not necessary that nearVal be less than farVal. Reverse mappings such as + nearVal 1, and farVal 0 are acceptable. + + GL.INVALID_OPERATION is generated if DepthRange is executed between the + execution of Begin and the corresponding execution of End. + `, +}, { + name: "GenBuffers", + params: paramTweaks{ + "buffers": {output: true, unnamed: true}, + }, + before: ` + if n == 0 { return nil } + buffers := make([]glbase.Buffer, n) + `, + doc: ` + returns n buffer object names. There is no guarantee that + the names form a contiguous set of integers; however, it is guaranteed + that none of the returned names was in use immediately before the call to + GenBuffers. + + Buffer object names returned by a call to GenBuffers are not returned by + subsequent calls, unless they are first deleted with DeleteBuffers. + + No buffer objects are associated with the returned buffer object names + until they are first bound by calling BindBuffer. + + Error GL.INVALID_VALUE is generated if n is negative. GL.INVALID_OPERATION + is generated if GenBuffers is executed between the execution of Begin + and the corresponding execution of End. + + {{funcSince . "1.5+"}} + `, +}, { + name: "GenFramebuffers", + params: paramTweaks{ + "framebuffers": {output: true, unnamed: true}, + }, + before: ` + if n == 0 { return nil } + framebuffers := make([]glbase.Framebuffer, n) + `, + doc: ` + returns n framebuffer object names in ids. There is no + guarantee that the names form a contiguous set of integers; however, it is + guaranteed that none of the returned names was in use immediately before + the call to GenFramebuffers. + + Framebuffer object names returned by a call to GenFramebuffers are not + returned by subsequent calls, unless they are first deleted with + DeleteFramebuffers. + + The names returned in ids are marked as used, for the purposes of + GenFramebuffers only, but they acquire state and type only when they are + first bound. + + Error GL.INVALID_VALUE is generated if n is negative. + `, +}, { + name: "GenRenderbuffers", + params: paramTweaks{ + "renderbuffers": {output: true, unnamed: true}, + }, + before: ` + if n == 0 { return nil } + renderbuffers := make([]glbase.Renderbuffer, n) + `, + doc: ` + returns n renderbuffer object names in renderbuffers. + There is no guarantee that the names form a contiguous set of integers; + however, it is guaranteed that none of the returned names was in use + immediately before the call to GenRenderbuffers. + + Renderbuffer object names returned by a call to GenRenderbuffers are not + returned by subsequent calls, unless they are first deleted with + DeleteRenderbuffers. + + The names returned in renderbuffers are marked as used, for the purposes + of GenRenderbuffers only, but they acquire state and type only when they + are first bound. + + Error GL.INVALID_VALUE is generated if n is negative. + + {{funcSince . "3.0+"}} + `, +}, { + name: "GenTextures", + params: paramTweaks{ + "textures": {output: true, unnamed: true}, + }, + before: ` + if n == 0 { return nil } + textures := make([]glbase.Texture, n) + `, + doc: ` + returns n texture names in textures. There is no guarantee + that the names form a contiguous set of integers; however, it is + guaranteed that none of the returned names was in use immediately before + the call to GenTextures. + + The generated textures have no dimensionality; they assume the + dimensionality of the texture target to which they are first bound (see + BindTexture). + + Texture names returned by a call to GenTextures are not returned by + subsequent calls, unless they are first deleted with DeleteTextures. + + Error GL.INVALID_VALUE is generated if n is negative. + + {{funcSince . "2.0+"}} + `, +}, { + name: "GetAttribLocation", + params: paramTweaks{ + "name": {retype: "string"}, + }, + result: "glbase.Attrib", + doc: ` + queries the previously linked program object specified + by program for the attribute variable specified by name and returns the + index of the generic vertex attribute that is bound to that attribute + variable. If name is a matrix attribute variable, the index of the first + column of the matrix is returned. If the named attribute variable is not + an active attribute in the specified program object or if name starts with + the reserved prefix "gl_", a value of -1 is returned. + + The association between an attribute variable name and a generic attribute + index can be specified at any time by calling BindAttribLocation. + Attribute bindings do not go into effect until LinkProgram is called. + After a program object has been linked successfully, the index values for + attribute variables remain fixed until the next link command occurs. The + attribute values can only be queried after a link if the link was + successful. GetAttribLocation returns the binding that actually went + into effect the last time LinkProgram was called for the specified + program object. Attribute bindings that have been specified since the last + link operation are not returned by GetAttribLocation. + + Error GL_INVALID_OPERATION is generated if program is not a value + generated by OpenGL. GL_INVALID_OPERATION is generated if program is not + a program object. GL_INVALID_OPERATION is generated if program has not + been successfully linked. GL_INVALID_OPERATION is generated if + GetAttribLocation is executed between the execution of Begin and the + corresponding execution of End. + + {{funcSince . "2.0+"}} + `, +}, { + name: "GetProgramInfoLog", + params: paramTweaks{ + "bufSize": {omit: true}, + "length": {omit: true, single: true}, + "infoLog": {output: true, unnamed: true}, + }, + before: ` + var params [1]int32 + var length int32 + gl.GetProgramiv(program, INFO_LOG_LENGTH, params[:]) + bufSize := params[0] + infoLog := make([]byte, int(bufSize)) + `, + doc: ` + returns the information log for the specified program + object. The information log for a program object is modified when the + program object is linked or validated. + + The information log for a program object is either an empty string, or a + string containing information about the last link operation, or a string + containing information about the last validation operation. It may contain + diagnostic messages, warning messages, and other information. When a + program object is created, its information log will be a string of length + 0, and the size of the current log can be obtained by calling GetProgramiv + with the value GL.INFO_LOG_LENGTH. + + Error GL.INVALID_VALUE is generated if program is not a value generated + by OpenGL. GL.INVALID_OPERATION is generated if program is not a + program object. + `, +}, { + name: "GetProgramiv", + params: paramTweaks{ + "params": {replace: true}, + }, + before: ` + var params_c [4]{{paramGoType . "params"}} + `, + after: ` + copy(params, params_c[:]) + `, + doc: ` + returns in params the value of a parameter for a specific + program object. The following parameters are defined: + + GL.DELETE_STATUS + params returns GL.TRUE if program is currently flagged for deletion, + and GL.FALSE otherwise. + + GL.LINK_STATUS + params returns GL.TRUE if the last link operation on program was + successful, and GL.FALSE otherwise. + + GL.VALIDATE_STATUS + params returns GL.TRUE or if the last validation operation on + program was successful, and GL.FALSE otherwise. + + GL.INFO_LOG_LENGTH + params returns the number of characters in the information log for + program including the null termination character (the size of + the character buffer required to store the information log). If + program has no information log, a value of 0 is returned. + + GL.ATTACHED_SHADERS + params returns the number of shader objects attached to program. + + GL.ACTIVE_ATTRIBUTES + params returns the number of active attribute variables for program. + + GL.ACTIVE_ATTRIBUTE_MAX_LENGTH + params returns the length of the longest active attribute name for + program, including the null termination character (the size of + the character buffer required to store the longest attribute name). + If no active attributes exist, 0 is returned. + + GL.ACTIVE_UNIFORMS + params returns the number of active uniform variables for program. + + GL.ACTIVE_UNIFORM_MAX_LENGTH + params returns the length of the longest active uniform variable + name for program, including the null termination character (i.e., + the size of the character buffer required to store the longest + uniform variable name). If no active uniform variables exist, 0 is + returned. + + GL.TRANSFORM_FEEDBACK_BUFFER_MODE + params returns a symbolic constant indicating the buffer mode used + when transform feedback is active. This may be GL.SEPARATE_ATTRIBS + or GL.INTERLEAVED_ATTRIBS. + + GL.TRANSFORM_FEEDBACK_VARYINGS + params returns the number of varying variables to capture in transform + feedback mode for the program. + + GL.TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH + params returns the length of the longest variable name to be used for + transform feedback, including the null-terminator. + + GL.GEOMETRY_VERTICES_OUT + params returns the maximum number of vertices that the geometry shader in + program will output. + + GL.GEOMETRY_INPUT_TYPE + params returns a symbolic constant indicating the primitive type accepted + as input to the geometry shader contained in program. + + GL.GEOMETRY_OUTPUT_TYPE + params returns a symbolic constant indicating the primitive type that will + be output by the geometry shader contained in program. + + GL.ACTIVE_UNIFORM_BLOCKS and GL.ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH are + available only if the GL version 3.1 or greater. + + GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE and + GL.GEOMETRY_OUTPUT_TYPE are accepted only if the GL version is 3.2 or + greater. + + Error GL.INVALID_VALUE is generated if program is not a value generated by + OpenGL. GL.INVALID_OPERATION is generated if program does not refer to a + program object. GL.INVALID_OPERATION is generated if pname is + GL.GEOMETRY_VERTICES_OUT, GL.GEOMETRY_INPUT_TYPE, or + GL.GEOMETRY_OUTPUT_TYPE, and program does not contain a geometry shader. + GL.INVALID_ENUM is generated if pname is not an accepted value. + `, +}, { + name: "GetShaderiv", + params: paramTweaks{ + "params": {replace: true}, + }, + before: ` + var params_c [4]{{paramGoType . "params"}} + `, + after: ` + copy(params, params_c[:]) + `, + doc: ` + GetShader returns in params the value of a parameter for a specific + shader object. The following parameters are defined: + + GL.SHADER_TYPE + params returns GL.VERTEX_SHADER if shader is a vertex shader object, + and GL.FRAGMENT_SHADER if shader is a fragment shader object. + + GL.DELETE_STATUS + params returns GL.TRUE if shader is currently flagged for deletion, + and GL.FALSE otherwise. + + GL.COMPILE_STATUS + params returns GL.TRUE if the last compile operation on shader was + successful, and GL.FALSE otherwise. + + GL.INFO_LOG_LENGTH + params returns the number of characters in the information log for + shader including the null termination character (the size of the + character buffer required to store the information log). If shader has + no information log, a value of 0 is returned. + + GL.SHADER_SOURCE_LENGTH + params returns the length of the concatenation of the source strings + that make up the shader source for the shader, including the null + termination character. (the size of the character buffer + required to store the shader source). If no source code exists, 0 is + returned. + + Error GL.INVALID_VALUE is generated if shader is not a value generated by + OpenGL. GL.INVALID_OPERATION is generated if shader does not refer to a + shader object. GL.INVALID_ENUM is generated if pname is not an accepted + value. GL.INVALID_OPERATION is generated if GetShader is executed + between the execution of Begin and the corresponding execution of End. + + {{funcSince . "2.0+"}} + `, +}, { + name: "GetShaderInfoLog", + params: paramTweaks{ + "bufSize": {omit: true}, + "length": {omit: true, single: true}, + "infoLog": {output: true, unnamed: true}, + }, + before: ` + var params [1]int32 + var length int32 + gl.GetShaderiv(shader, INFO_LOG_LENGTH, params[:]) + bufSize := params[0] + infoLog := make([]byte, int(bufSize)) + `, + doc: ` + returns the information log for the specified shader + object. The information log for a shader object is modified when the + shader is compiled. + + The information log for a shader object is a string that may contain + diagnostic messages, warning messages, and other information about the + last compile operation. When a shader object is created, its information + log will be a string of length 0, and the size of the current log can be + obtained by calling GetShaderiv with the value GL.INFO_LOG_LENGTH. + + The information log for a shader object is the OpenGL implementer's + primary mechanism for conveying information about the compilation process. + Therefore, the information log can be helpful to application developers + during the development process, even when compilation is successful. + Application developers should not expect different OpenGL implementations + to produce identical information logs. + + Error GL.INVALID_VALUE is generated if shader is not a value generated by + OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader + object. GL.INVALID_VALUE is generated if maxLength is less than 0. + GL.INVALID_OPERATION is generated if GetShaderInfoLog is executed + between the execution of Begin and the corresponding execution of End. + + {{funcSince . "2.0+"}} + `, +}, { + name: "GetUniformLocation", + params: paramTweaks{ + "name": {retype: "string"}, + }, + result: "glbase.Uniform", + doc: ` + returns an integer that represents the location of a + specific uniform variable within a program object. name must be an active + uniform variable name in program that is not a structure, an array of + structures, or a subcomponent of a vector or a matrix. This function + returns -1 if name does not correspond to an active uniform variable in + program or if name starts with the reserved prefix "gl_". + + Uniform variables that are structures or arrays of structures may be + queried by calling GetUniformLocation for each field within the + structure. The array element operator "[]" and the structure field + operator "." may be used in name in order to select elements within an + array or fields within a structure. The result of using these operators is + not allowed to be another structure, an array of structures, or a + subcomponent of a vector or a matrix. Except if the last part of name + indicates a uniform variable array, the location of the first element of + an array can be retrieved by using the name of the array, or by using the + name appended by "[0]". + + The actual locations assigned to uniform variables are not known until the + program object is linked successfully. After linking has occurred, the + command GetUniformLocation can be used to obtain the location of a + uniform variable. This location value can then be passed to Uniform to + set the value of the uniform variable or to GetUniform in order to query + the current value of the uniform variable. After a program object has been + linked successfully, the index values for uniform variables remain fixed + until the next link command occurs. Uniform variable locations and values + can only be queried after a link if the link was successful. + + Error GL.INVALID_VALUE is generated if program is not a value generated by + OpenGL. GL.INVALID_OPERATION is generated if program is not a program object. + GL.INVALID_OPERATION is generated if program has not been successfully + linked. GL.INVALID_OPERATION is generated if GetUniformLocation is executed + between the execution of Begin and the corresponding execution of End. + + {{funcSince . "2.0+"}} + `, +}, { + name: "GetUniformfv", + copy: "GetUniformiv", +}, { + name: "GetUniformiv", + params: paramTweaks{ + "params": {replace: true}, + }, + before: ` + var params_c [4]{{paramGoType . "params"}} + `, + after: ` + copy(params, params_c[:]) + `, + doc: ` + returns in params the value of the specified uniform + variable. The type of the uniform variable specified by location + determines the number of values returned. If the uniform variable is + defined in the shader as a boolean, int, or float, a single value will be + returned. If it is defined as a vec2, ivec2, or bvec2, two values will be + returned. If it is defined as a vec3, ivec3, or bvec3, three values will + be returned, and so on. To query values stored in uniform variables + declared as arrays, call {{.GoName}} for each element of the array. To + query values stored in uniform variables declared as structures, call + {{.GoName}} for each field in the structure. The values for uniform + variables declared as a matrix will be returned in column major order. + + The locations assigned to uniform variables are not known until the + program object is linked. After linking has occurred, the command + GetUniformLocation can be used to obtain the location of a uniform + variable. This location value can then be passed to {{.GoName}} in order + to query the current value of the uniform variable. After a program object + has been linked successfully, the index values for uniform variables + remain fixed until the next link command occurs. The uniform variable + values can only be queried after a link if the link was successful. + + Error GL.INVALID_VALUE is generated if program is not a value generated by + OpenGL. GL.INVALID_OPERATION is generated if program is not a program + object. GL.INVALID_OPERATION is generated if program has not been + successfully linked. GL.INVALID_OPERATION is generated if location does + not correspond to a valid uniform variable location for the specified + program object. GL.INVALID_OPERATION is generated if {{.GoName}} is + executed between the execution of Begin and the corresponding execution of + End. + + {{funcSince . "2.0+"}} + `, +}, { + name: "GetVertexAttribdv", + copy: "GetVertexAttribiv", +}, { + name: "GetVertexAttribfv", + copy: "GetVertexAttribiv", +}, { + name: "GetVertexAttribiv", + params: paramTweaks{ + "params": {replace: true}, + }, + before: ` + var params_c [4]{{paramGoType . "params"}} + `, + after: ` + copy(params, params_c[:]) + `, + doc: ` + returns in params the value of a generic vertex attribute + parameter. The generic vertex attribute to be queried is specified by + index, and the parameter to be queried is specified by pname. + + The accepted parameter names are as follows: + + GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING + params returns a single value, the name of the buffer object + currently bound to the binding point corresponding to generic vertex + attribute array index. If no buffer object is bound, 0 is returned. + The initial value is 0. + + GL.VERTEX_ATTRIB_ARRAY_ENABLED + params returns a single value that is non-zero (true) if the vertex + attribute array for index is enabled and 0 (false) if it is + disabled. The initial value is 0. + + GL.VERTEX_ATTRIB_ARRAY_SIZE + params returns a single value, the size of the vertex attribute + array for index. The size is the number of values for each element + of the vertex attribute array, and it will be 1, 2, 3, or 4. The + initial value is 4. + + GL.VERTEX_ATTRIB_ARRAY_STRIDE + params returns a single value, the array stride for (number of bytes + between successive elements in) the vertex attribute array for + index. A value of 0 indicates that the array elements are stored + sequentially in memory. The initial value is 0. + + GL.VERTEX_ATTRIB_ARRAY_TYPE + params returns a single value, a symbolic constant indicating the + array type for the vertex attribute array for index. Possible values + are GL.BYTE, GL.UNSIGNED_BYTE, GL.SHORT, GL.UNSIGNED_SHORT, GL.INT, + GL.UNSIGNED_INT, GL.FLOAT, and GL.DOUBLE. The initial value is + GL.FLOAT. + + GL.VERTEX_ATTRIB_ARRAY_NORMALIZED + params returns a single value that is non-zero (true) if fixed-point + data types for the vertex attribute array indicated by index are + normalized when they are converted to floating point, and 0 (false) + otherwise. The initial value is 0. + + GL.CURRENT_VERTEX_ATTRIB + params returns four values that represent the current value for the + generic vertex attribute specified by index. Generic vertex + attribute 0 is unique in that it has no current state, so an error + will be generated if index is 0. The initial value for all other + generic vertex attributes is (0,0,0,1). + + All of the parameters except GL.CURRENT_VERTEX_ATTRIB represent + client-side state. + + Error GL.INVALID_VALUE is generated if index is greater than or equal to + GL.MAX_VERTEX_ATTRIBS. GL.INVALID_ENUM is generated if pname is not an + accepted value. GL.INVALID_OPERATION is generated if index is 0 and pname + is GL.CURRENT_VERTEX_ATTRIB. + + {{funcSince . "2.0+"}} + `, +}, { + name: "LinkProgram", + doc: ` + links the program object specified by program. If any shader + objects of type GL.VERTEX_SHADER are attached to program, they will be + used to create an executable that will run on the programmable vertex + processor. If any shader objects of type GL.FRAGMENT_SHADER are attached + to program, they will be used to create an executable that will run on the + programmable fragment processor. + + The status of the link operation will be stored as part of the program + object's state. This value will be set to GL.TRUE if the program object + was linked without errors and is ready for use, and GL.FALSE otherwise. It + can be queried by calling GetProgramiv with arguments program and + GL.LINK_STATUS. + + As a result of a successful link operation, all active user-defined + uniform variables belonging to program will be initialized to 0, and each + of the program object's active uniform variables will be assigned a + location that can be queried by calling GetUniformLocation. Also, any + active user-defined attribute variables that have not been bound to a + generic vertex attribute index will be bound to one at this time. + + Linking of a program object can fail for a number of reasons as specified + in the OpenGL Shading Language Specification. The following lists some of + the conditions that will cause a link error. + + - The number of active attribute variables supported by the + implementation has been exceeded. + + - The storage limit for uniform variables has been exceeded. + + - The number of active uniform variables supported by the implementation + has been exceeded. + + - The main function is missing for the vertex shader or the fragment + shader. + + - A varying variable actually used in the fragment shader is not + declared in the same way (or is not declared at all) in the vertex + shader. + + - A reference to a function or variable name is unresolved. + + - A shared global is declared with two different types or two different + initial values. + + - One or more of the attached shader objects has not been successfully + compiled. + + - Binding a generic attribute matrix caused some rows of the matrix to + fall outside the allowed maximum of GL.MAX_VERTEX_ATTRIBS. + + - Not enough contiguous vertex attribute slots could be found to bind + attribute matrices. + + When a program object has been successfully linked, the program object can + be made part of current state by calling UseProgram. Whether or not the + link operation was successful, the program object's information log will + be overwritten. The information log can be retrieved by calling + GetProgramInfoLog. + + LinkProgram will also install the generated executables as part of the + current rendering state if the link operation was successful and the + specified program object is already currently in use as a result of a + previous call to UseProgram. If the program object currently in use is + relinked unsuccessfully, its link status will be set to GL.FALSE , but the + executables and associated state will remain part of the current state + until a subsequent call to UseProgram removes it from use. After it is + removed from use, it cannot be made part of current state until it has + been successfully relinked. + + If program contains shader objects of type GL.VERTEX_SHADER but does not + contain shader objects of type GL.FRAGMENT_SHADER, the vertex shader will + be linked against the implicit interface for fixed functionality fragment + processing. Similarly, if program contains shader objects of type + GL.FRAGMENT_SHADER but it does not contain shader objects of type + GL.VERTEX_SHADER, the fragment shader will be linked against the implicit + interface for fixed functionality vertex processing. + + The program object's information log is updated and the program is + generated at the time of the link operation. After the link operation, + applications are free to modify attached shader objects, compile attached + shader objects, detach shader objects, delete shader objects, and attach + additional shader objects. None of these operations affects the + information log or the program that is part of the program object. + + If the link operation is unsuccessful, any information about a previous + link operation on program is lost (a failed link does not restore the + old state of program). Certain information can still be retrieved + from program even after an unsuccessful link operation. See for instance + GetActiveAttrib and GetActiveUniform. + + Error GL.INVALID_VALUE is generated if program is not a value generated by + OpenGL. GL.INVALID_OPERATION is generated if program is not a program + object. GL.INVALID_OPERATION is generated if LinkProgram is executed + between the execution of Begin and the corresponding execution of End. + + {{funcSince . "2.0+"}} + `, +}, { + name: "MultMatrixd", + before: ` + if len(m) != 16 { + panic("parameter m must have length 16 for the 4x4 matrix") + } + `, + doc: ` + multiplies the current matrix with the provided matrix. + + The m parameter must hold 16 consecutive elements of a 4x4 column-major matrix. + + The current matrix is determined by the current matrix mode (see + MatrixMode). It is either the projection matrix, modelview matrix, or the + texture matrix. + + For example, if the current matrix is C and the coordinates to be transformed + are v = (v[0], v[1], v[2], v[3]), then the current transformation is C × v, or + + c[0] c[4] c[8] c[12] v[0] + c[1] c[5] c[9] c[13] v[1] + c[2] c[6] c[10] c[14] X v[2] + c[3] c[7] c[11] c[15] v[3] + + Calling MultMatrix with an argument of m = m[0], m[1], ..., m[15] + replaces the current transformation with (C X M) x v, or + + c[0] c[4] c[8] c[12] m[0] m[4] m[8] m[12] v[0] + c[1] c[5] c[9] c[13] m[1] m[5] m[9] m[13] v[1] + c[2] c[6] c[10] c[14] X m[2] m[6] m[10] m[14] X v[2] + c[3] c[7] c[11] c[15] m[3] m[7] m[11] m[15] v[3] + + Where 'X' denotes matrix multiplication, and v is represented as a 4x1 matrix. + + While the elements of the matrix may be specified with single or double + precision, the GL may store or operate on these values in less-than-single + precision. + + In many computer languages, 4×4 arrays are represented in row-major + order. The transformations just described represent these matrices in + column-major order. The order of the multiplication is important. For + example, if the current transformation is a rotation, and MultMatrix is + called with a translation matrix, the translation is done directly on the + coordinates to be transformed, while the rotation is done on the results + of that translation. + + GL.INVALID_OPERATION is generated if MultMatrix is executed between the + execution of Begin and the corresponding execution of End. + `, +}, { + name: "MultMatrixf", + copy: "MultMatrixd", +}, { + name: "ShaderSource", + params: paramTweaks{ + "glstring": {rename: "source", retype: "...string", replace: true}, + "length": {omit: true}, + "count": {omit: true}, + }, + before: ` + count := len(source) + length := make([]int32, count) + source_c := make([]unsafe.Pointer, count) + for i, src := range source { + length[i] = int32(len(src)) + if len(src) > 0 { + source_c[i] = *(*unsafe.Pointer)(unsafe.Pointer(&src)) + } else { + source_c[i] = unsafe.Pointer(uintptr(0)) + } + } + `, + doc: ` + sets the source code in shader to the provided source code. Any source + code previously stored in the shader object is completely replaced. + + Error GL.INVALID_VALUE is generated if shader is not a value generated by + OpenGL. GL.INVALID_OPERATION is generated if shader is not a shader + object. GL.INVALID_VALUE is generated if count is less than 0. + GL.INVALID_OPERATION is generated if ShaderSource is executed between the + execution of Begin and the corresponding execution of End. + + {{funcSince . "2.0+"}} + `, +}, { + name: "Uniform1f", + copy: "Uniform4ui", +}, { + name: "Uniform2f", + copy: "Uniform4ui", +}, { + name: "Uniform3f", + copy: "Uniform4ui", +}, { + name: "Uniform4f", + copy: "Uniform4ui", +}, { + name: "Uniform1i", + copy: "Uniform4ui", +}, { + name: "Uniform2i", + copy: "Uniform4ui", +}, { + name: "Uniform3i", + copy: "Uniform4ui", +}, { + name: "Uniform4i", + copy: "Uniform4ui", +}, { + name: "Uniform1ui", + copy: "Uniform4ui", +}, { + name: "Uniform2ui", + copy: "Uniform4ui", +}, { + name: "Uniform3ui", + copy: "Uniform4ui", +}, { + name: "Uniform4ui", + doc: ` + modifies the value of a single uniform variable. + The location of the uniform variable to be modified is specified by + location, which should be a value returned by GetUniformLocation. + {{.GoName}} operates on the program object that was made part of + current state by calling UseProgram. + + The functions Uniform{1|2|3|4}{f|i|ui} are used to change the value of the + uniform variable specified by location using the values passed as + arguments. The number specified in the function should match the number of + components in the data type of the specified uniform variable (1 for + float, int, unsigned int, bool; 2 for vec2, ivec2, uvec2, bvec2, etc.). + The suffix f indicates that floating-point values are being passed; the + suffix i indicates that integer values are being passed; the suffix ui + indicates that unsigned integer values are being passed, and this type + should also match the data type of the specified uniform variable. The i + variants of this function should be used to provide values for uniform + variables defined as int, ivec2, ivec3, ivec4, or arrays of these. The ui + variants of this function should be used to provide values for uniform + variables defined as unsigned int, uvec2, uvec3, uvec4, or arrays of + these. The f variants should be used to provide values for uniform + variables of type float, vec2, vec3, vec4, or arrays of these. Either the + i, ui or f variants may be used to provide values for uniform variables of + type bool, bvec2, bvec3, bvec4, or arrays of these. The uniform variable + will be set to false if the input value is 0 or 0.0f, and it will be set + to true otherwise. + + Uniform1i and Uniform1iv are the only two functions that may be used to + load uniform variables defined as sampler types. Loading samplers with any + other function will result in a GL.INVALID_OPERATION error. + + All active uniform variables defined in a program object are initialized + to 0 when the program object is linked successfully. They retain the + values assigned to them by a call to Uniform* until the next successful + link operation occurs on the program object, when they are once again + initialized to 0. + `, +}, { + name: "Uniform1fv", + copy: "Uniform4uiv", +}, { + name: "Uniform2fv", + copy: "Uniform4uiv", +}, { + name: "Uniform3fv", + copy: "Uniform4uiv", +}, { + name: "Uniform4fv", + copy: "Uniform4uiv", +}, { + name: "Uniform1iv", + copy: "Uniform4uiv", +}, { + name: "Uniform2iv", + copy: "Uniform4uiv", +}, { + name: "Uniform3iv", + copy: "Uniform4uiv", +}, { + name: "Uniform4iv", + copy: "Uniform4uiv", +}, { + name: "Uniform1uiv", + copy: "Uniform4uiv", +}, { + name: "Uniform2uiv", + copy: "Uniform4uiv", +}, { + name: "Uniform3uiv", + copy: "Uniform4uiv", +}, { + name: "Uniform4uiv", + params: paramTweaks{ + "count": {omit: true}, + }, + before: ` + if len(value) == 0 { + return + } {{with $n := substr .GoName 7 8}}{{if ne $n "1"}} + if len(value)%{{$n}} != 0 { + panic("invalid value length for {{$.GoName}}") + } + count := len(value)/{{$n}} + {{else}} + count := len(value) + {{end}}{{end}} + `, + doc: ` + modifies the value of a uniform variable or a uniform + variable array. The location of the uniform variable to be modified is + specified by location, which should be a value returned by GetUniformLocation. + {{.GoName}} operates on the program object that was made part of + current state by calling UseProgram. + + The functions Uniform{1|2|3|4}{f|i|ui}v can be used to modify a single + uniform variable or a uniform variable array. These functions receive a + slice with the values to be loaded into a uniform variable or a uniform + variable array. A slice with length 1 should be used if modifying the value + of a single uniform variable, and a length of 1 or greater can be used to + modify an entire array or part of an array. When loading n elements + starting at an arbitrary position m in a uniform variable array, elements + m + n - 1 in the array will be replaced with the new values. If m + n - 1 + is larger than the size of the uniform variable array, values for all + array elements beyond the end of the array will be ignored. The number + specified in the name of the command indicates the number of components + for each element in value, and it should match the number of components in + the data type of the specified uniform variable (1 for float, int, bool; + 2 for vec2, ivec2, bvec2, etc.). The data type specified in the name + of the command must match the data type for the specified uniform variable + as described for Uniform{1|2|3|4}{f|i|ui}. + + Uniform1i and Uniform1iv are the only two functions that may be used to + load uniform variables defined as sampler types. Loading samplers with any + other function will result in a GL.INVALID_OPERATION error. + + All active uniform variables defined in a program object are initialized + to 0 when the program object is linked successfully. They retain the + values assigned to them by a call to Uniform* until the next successful + link operation occurs on the program object, when they are once again + initialized to 0. + `, +}, { + name: "UniformMatrix2fv", + copy: "UniformMatrix4x3fv", +}, { + name: "UniformMatrix2x3fv", + copy: "UniformMatrix4x3fv", +}, { + name: "UniformMatrix2x4fv", + copy: "UniformMatrix4x3fv", +}, { + name: "UniformMatrix3fv", + copy: "UniformMatrix4x3fv", +}, { + name: "UniformMatrix3x2fv", + copy: "UniformMatrix4x3fv", +}, { + name: "UniformMatrix3x4fv", + copy: "UniformMatrix4x3fv", +}, { + name: "UniformMatrix4fv", + copy: "UniformMatrix4x3fv", +}, { + name: "UniformMatrix4x2fv", + copy: "UniformMatrix4x3fv", +}, { + name: "UniformMatrix4x3fv", + params: paramTweaks{ + "count": {omit: true}, + }, + before: ` + if len(value) == 0 { + return + } {{with $n := substr $.GoName 13 14}}{{with $m := substr $.GoName 15 16}}{{if eq $m "v"}} + if len(value)%({{$n}}*{{$n}}) != 0 { + panic("invalid value length for {{$.GoName}}") + } + count := len(value)/({{$n}}*{{$n}}) + {{else}} + if len(value)%({{$n}}*{{$m}}) != 0 { + panic("invalid value length for {{$.GoName}}") + } + count := len(value)/({{$n}}*{{$m}}) + {{end}}{{end}}{{end}} + `, + doc: ` + modifies the value of a uniform variable or a uniform + variable array. The location of the uniform variable to be modified is + specified by location, which should be a value returned by GetUniformLocation. + {{.GoName}} operates on the program object that was made part of + current state by calling UseProgram. + + The functions UniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv are used to + modify a matrix or an array of matrices. The numbers in the function name + are interpreted as the dimensionality of the matrix. The number 2 + indicates a 2x2 matrix (4 values), the number 3 indicates a 3x3 matrix (9 + values), and the number 4 indicates a 4x4 matrix (16 values). Non-square + matrix dimensionality is explicit, with the first number representing the + number of columns and the second number representing the number of rows. + For example, 2x4 indicates a 2x4 matrix with 2 columns and 4 rows (8 + values). The length of the provided slice must be a multiple of the number + of values per matrix, to update one or more consecutive matrices. + + If transpose is false, each matrix is assumed to be supplied in column + major order. If transpose is true, each matrix is assumed to be supplied + in row major order. + + All active uniform variables defined in a program object are initialized + to 0 when the program object is linked successfully. They retain the + values assigned to them by a call to Uniform* until the next successful + link operation occurs on the program object, when they are once again + initialized to 0. + `, +}, { + name: "UseProgram", + doc: ` + installs the program object specified by program as part of + current rendering state. One or more executables are created in a program + object by successfully attaching shader objects to it with AttachShader, + successfully compiling the shader objects with CompileShader, and + successfully linking the program object with LinkProgram. + + A program object will contain an executable that will run on the vertex + processor if it contains one or more shader objects of type + GL.VERTEX_SHADER that have been successfully compiled and linked. + Similarly, a program object will contain an executable that will run on + the fragment processor if it contains one or more shader objects of type + GL.FRAGMENT_SHADER that have been successfully compiled and linked. + + Successfully installing an executable on a programmable processor will + cause the corresponding fixed functionality of OpenGL to be disabled. + Specifically, if an executable is installed on the vertex processor, the + OpenGL fixed functionality will be disabled as follows. + + - The modelview matrix is not applied to vertex coordinates. + + - The projection matrix is not applied to vertex coordinates. + + - The texture matrices are not applied to texture coordinates. + + - Normals are not transformed to eye coordinates. + + - Normals are not rescaled or normalized. + + - Normalization of GL.AUTO_NORMAL evaluated normals is not performed. + + - Texture coordinates are not generated automatically. + + - Per-vertex lighting is not performed. + + - Color material computations are not performed. + + - Color index lighting is not performed. + + - This list also applies when setting the current raster position. + + The executable that is installed on the vertex processor is expected to + implement any or all of the desired functionality from the preceding list. + Similarly, if an executable is installed on the fragment processor, the + OpenGL fixed functionality will be disabled as follows. + + - Texture environment and texture functions are not applied. + + - Texture application is not applied. + + - Color sum is not applied. + + - Fog is not applied. + + Again, the fragment shader that is installed is expected to implement any + or all of the desired functionality from the preceding list. + + While a program object is in use, applications are free to modify attached + shader objects, compile attached shader objects, attach additional shader + objects, and detach or delete shader objects. None of these operations + will affect the executables that are part of the current state. However, + relinking the program object that is currently in use will install the + program object as part of the current rendering state if the link + operation was successful (see LinkProgram). If the program object + currently in use is relinked unsuccessfully, its link status will be set + to GL.FALSE, but the executables and associated state will remain part of + the current state until a subsequent call to UseProgram removes it from + use. After it is removed from use, it cannot be made part of current state + until it has been successfully relinked. + + If program contains shader objects of type GL.VERTEX_SHADER but it does + not contain shader objects of type GL.FRAGMENT_SHADER, an executable will + be installed on the vertex processor, but fixed functionality will be used + for fragment processing. Similarly, if program contains shader objects of + type GL.FRAGMENT_SHADER but it does not contain shader objects of type + GL.VERTEX_SHADER, an executable will be installed on the fragment + processor, but fixed functionality will be used for vertex processing. If + program is 0, the programmable processors will be disabled, and fixed + functionality will be used for both vertex and fragment processing. + + While a program object is in use, the state that controls the disabled + fixed functionality may also be updated using the normal OpenGL calls. + + Like display lists and texture objects, the name space for program objects + may be shared across a set of contexts, as long as the server sides of the + contexts share the same address space. If the name space is shared across + contexts, any attached objects and the data associated with those attached + objects are shared as well. + + Applications are responsible for providing the synchronization across API + calls when objects are accessed from different execution threads. + + Error GL.INVALID_VALUE is generated if program is neither 0 nor a value + generated by OpenGL. GL.INVALID_OPERATION is generated if program is not + a program object. GL.INVALID_OPERATION is generated if program could not + be made part of current state. GL.INVALID_OPERATION is generated if + UseProgram is executed between the execution of Begin and the + corresponding execution of End. + + {{funcSince . "2.0+"}} + `, +}, { + name: "VertexAttribPointer", + params: paramTweaks{ + "pointer": {rename: "offset", retype: "uintptr"}, + }, + before: ` + offset_ptr := unsafe.Pointer(offset) + `, + doc: ` + specifies the location and data format of the array + of generic vertex attributes at index to use when rendering. size + specifies the number of components per attribute and must be 1, 2, 3, or + 4. type specifies the data type of each component, and stride specifies + the byte stride from one attribute to the next, allowing vertices and + attributes to be packed into a single array or stored in separate arrays. + normalized indicates whether the values stored in an integer format are + to be mapped to the range [-1,1] (for signed values) or [0,1] + (for unsigned values) when they are accessed and converted to floating + point; otherwise, values will be converted to floats directly without + normalization. offset is a byte offset into the buffer object's data + store, which must be bound to the GL.ARRAY_BUFFER target with BindBuffer. + + The buffer object binding (GL.ARRAY_BUFFER_BINDING) is saved as + generic vertex attribute array client-side state + (GL.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING) for the provided index. + + To enable and disable a generic vertex attribute array, call + EnableVertexAttribArray and DisableVertexAttribArray with index. If + enabled, the generic vertex attribute array is used when DrawArrays or + DrawElements is called. Each generic vertex attribute array is initially + disabled. + + VertexAttribPointer is typically implemented on the client side. + + Error GL.INVALID_ENUM is generated if type is not an accepted value. + GL.INVALID_VALUE is generated if index is greater than or equal to + GL.MAX_VERTEX_ATTRIBS. GL.INVALID_VALUE is generated if size is not 1, 2, + 3, or 4. GL.INVALID_VALUE is generated if stride is negative. + `, +}} + +// vim:ts=8:tw=90:noet |