2013
Khronos Group
glGetProgramResourceIndex
3G

# glGetProgramResourceIndex

query the index of a named resource within a program

## C Specification

                    GLuint glGetProgramResourceIndex
                    GLuint program
                    GLenum programInterface
                    const char * name

## Parameters

`program`

  The name of a program object whose resources to query.

`programInterface`

  A token identifying the interface within `program` containing the resource named `name`.

`name`

  The name of the resource to query the index of.

## Description

`glGetProgramResourceIndex` returns the unsigned integer index assigned to a resource named `name` in the interface type `programInterface` of program object `program`.

`program` must be the name of an existing program object. `programInterface` is the name of the interface within `program` which contains the resource named `name`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_TRANSFORM_FEEDBACK_BUFFER`

  The query is targeted at the set of active buffer binding points to which output variables in the `GL_TRANSFORM_FEEDBACK_VARYING` interface are written.

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

If `name` exactly matches the name string of one of the active resources for `programInterface`, the index of the matched resource is returned. Additionally, if `name` would exactly match the name string of an active resource if "[0]" were appended to `name`, the index of the matched resource is returned. Otherwise, `name` is considered not to be the name of an active resource, and `GL_INVALID_INDEX` is returned.

For the interface `GL_TRANSFORM_FEEDBACK_VARYING`, the value `GL_INVALID_INDEX` should be returned when querying the index assigned to the special names `gl_NextBuffer`, `gl_SkipComponents1`, `gl_SkipComponents2`, `gl_SkipComponents3`, or `gl_SkipComponents4`.

## Errors

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

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

Although not an error, `GL_INVALID_INDEX` is returned if `name` is not the name of a resource within the interface identified by `programInterface`.

## See Also

glGetProgramResourceName, glGetGetProgramResource, glGetProgramResourceLocation, glGetProgramResourceLocationIndex.

## Copyright

Copyright 2013 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/.