Light | Dark

# docs.GL

OpenGL 4
OpenGL 3
OpenGL 2
OpenGL ES 3
OpenGL ES 2

# glGetAttribLocation

## Name

glGetAttribLocation — Returns the location of an attribute variable

## C Specification

`GLint glGetAttribLocation(` | GLuint program,
| const GLchar *name`)`;

## Parameters

`program`

  Specifies the program object to be queried.

`name`

  Points to a null terminated string containing the name of the attribute variable whose location is to be queried.

## Description

`glGetAttribLocation` 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 glBindAttribLocation. Attribute bindings do not go into effect until glLinkProgram 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. `glGetAttribLocation` returns the binding that actually went into effect the last time glLinkProgram was called for the specified program object. Attribute bindings that have been specified since the last link operation are not returned by `glGetAttribLocation`.

## Errors

`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.

## Associated Gets

glGetActiveAttrib with argument `program` and the index of an active attribute

glIsProgram

## Examples

Retrieve uniform data after the shader has been compiled

    // The index returned from these GLint functions gets passed to glEnableVertexAttribArray during rendering.
    GLint position_attrib_index = glGetAttribLocation(program, "position"); // program is what is returned by glCreateProgram.
    GLint texcoord_attrib_index = glGetAttribLocation(program, "texcoord");
    GLint normal_attrib_index = glGetAttribLocation(program, "normal");
    GLint color_attrib_index = glGetAttribLocation(program, "color");

    glBindFragDataLocation(program, 0, "output_color"); // "output_color" is an output value in your vertex shader and an input value in your fragment shader.

    GLint num_uniforms;
    glGetProgramiv(program, GL_ACTIVE_UNIFORMS, &num_uniforms);
    GLchar uniform_name[256];
    GLsizei length;
    GLint size;
    GLenum type;
    for (int i = 0; i < num_uniforms; i++)
    {
        glGetActiveUniform(program, i, sizeof(uniform_name), &length, &size, &type, uniform_name);
        // ... save this uniform data so it can be used during rendering
    }

## Tutorials

Anton Gerdelan - OpenGL 4 Shaders
open.gl - Geometry Shaders
open.gl - The Graphics Pipeline
open.gl - Transform Feedback

## Version Support

| OpenGL Version
--- | ---
Function / Feature Name | 2.0 | 2.1 | 3.0 | 3.1 | 3.2 | 3.3 | 4.0 | 4.1 | 4.2 | 4.3 | 4.4 | 4.5
`glGetAttribLocation` | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔

## See Also

glBindAttribLocation, glLinkProgram, glVertexAttrib, glVertexAttribPointer

## Copyright

Copyright © 2003-2005 3Dlabs Inc. Ltd. Copyright © 2010-2014 Khronos Group. This material may be distributed subject to the terms and conditions set forth in the Open Publication License, v 1.0, 8 June 1999. https://opencontent.org/openpub/.

Think you can improve this page? Edit this page on GitHub.