## Name

glGetProgramResourceName — query the name of an indexed resource within a program

## C Specification

`void glGetProgramResourceName(` | GLuint program,
| GLenum programInterface,
| GLuint index,
| GLsizei bufSize,
| GLsizei * length,
| char * name`)`;

## Parameters

`program`

  The name of a program object whose resources to query.

`programInterface`

  A token identifying the interface within `program` containing the indexed resource.

`index`

  The index of the resource within `programInterface` of `program`.

`bufSize`

  The size of the character array whose address is given by `name`.

`length`

  The address of a variable which will receive the length of the resource name.

`name`

  The address of a character array into which will be written the name of the resource.

## Description

`glGetProgramResourceName` retrieves the name string assigned to the single active resource with an index of `index` in the interface `programInterface` of program object `program`. `index` must be less than the number of entries in the active resource list for `programInterface`.

`program` must be the name of an existing program object. `programInterface` is the name of the interface within `program` which contains the resource and must be one of the following values:

`GL_UNIFORM`

  The query is targeted at the set of active uniforms within `program`.

`GL_UNIFORM_BLOCK`

  The query is targeted at the set of active uniform blocks within `program`.

`GL_PROGRAM_INPUT`

  The query is targeted at the set of active input variables used by the first shader stage of `program`. If `program` contains multiple shader stages then input variables from any stage other than the first will not be enumerated.

`GL_PROGRAM_OUTPUT`

  The query is targeted at the set of active output variables produced by the last shader stage of `program`. If `program` contains multiple shader stages then output variables from any stage other than the last will not be enumerated.

`GL_VERTEX_SUBROUTINE`, `GL_TESS_CONTROL_SUBROUTINE`, `GL_TESS_EVALUATION_SUBROUTINE`, `GL_GEOMETRY_SUBROUTINE`, `GL_FRAGMENT_SUBROUTINE`, `GL_COMPUTE_SUBROUTINE`

  The query is targeted at the set of active subroutines for the vertex, tessellation control, tessellation evaluation, geometry, fragment and compute shader stages of `program`, respectively.

`GL_VERTEX_SUBROUTINE_UNIFORM`, `GL_TESS_CONTROL_SUBROUTINE_UNIFORM`, `GL_TESS_EVALUATION_SUBROUTINE_UNIFORM`, `GL_GEOMETRY_SUBROUTINE_UNIFORM`, `GL_FRAGMENT_SUBROUTINE_UNIFORM`, `GL_COMPUTE_SUBROUTINE_UNIFORM`

  The query is targeted at the set of active subroutine uniform variables used by the vertex, tessellation control, tessellation evaluation, geometry, fragment and compute shader stages of `program`, respectively.

`GL_TRANSFORM_FEEDBACK_VARYING`

  The query is targeted at the set of output variables from the last non-fragment stage of `program` that would be captured if transform feedback were active.

`GL_BUFFER_VARIABLE`

  The query is targeted at the set of active buffer variables used by `program`.

`GL_SHADER_STORAGE_BLOCK`

  The query is targeted at the set of active shader storage blocks used by `program`.

The name string assigned to the active resource identified by `index` is returned as a null-terminated string in the character array whose address is given in `name`. The actual number of characters written into `name`, excluding the null terminator, is returned in `length`. If `length` is NULL, no length is returned. The maximum number of characters that may be written into `name`, including the null terminator, is specified by `bufSize`. If the length of the name string including the null terminator is greater than `bufSize`, the first `bufSize`-1 characters of the name string will be written to `name`, followed by a null terminator. If `bufSize` is zero, no error will be generated but no characters will be written to `name`. The length of the longest name string for `programInterface`>, including a null terminator, can be queried by calling glGetProgramInterface with a `pname` of `GL_MAX_NAME_LENGTH`.

## Errors

`GL_INVALID_ENUM` is generated if `programInterface` is not one of the accepted interface types.

`GL_INVALID_VALUE` is generated if `progam` is not the name of an existing program.

`GL_INVALID_VALUE` is generated if `index` is greater than or equal to the number of entries in the active resource list for `programInterface`.

`GL_INVALID_ENUM` is generated if `programInterface` is `GL_ATOMIC_COUNTER_BUFFER` or `GL_TRANSFORM_FEEDBACK_BUFFER`, since active atomic counter and transform feedback buffer resources are not assigned name strings.

## 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
`glGetProgramResourceName` | - | - | - | - | - | - | - | - | - | ✔ | ✔ | ✔

## See Also

glGetProgramResourceIndex, glGetGetProgramResource, glGetProgramResourceLocation, glGetProgramResourceLocationIndex.

## Copyright

Copyright © 2013-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. http://opencontent.org/openpub/.