## Name

glGetProgramStage — retrieve properties of a program object corresponding to a specified shader stage

## C Specification

`void glGetProgramStageiv(` | GLuint program,
| GLenum shadertype,
| GLenum pname,
| GLint *values`)`;

## Parameters

`program`

  Specifies the name of the program containing shader stage.

`shadertype`

  Specifies the shader stage from which to query for the subroutine parameter. `shadertype` must be one of `GL_VERTEX_SHADER`, `GL_TESS_CONTROL_SHADER`, `GL_TESS_EVALUATION_SHADER`, `GL_GEOMETRY_SHADER` or `GL_FRAGMENT_SHADER`.

`pname`

  Specifies the parameter of the shader to query. `pname` must be `GL_ACTIVE_SUBROUTINE_UNIFORMS`, `GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS`, `GL_ACTIVE_SUBROUTINES`, `GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH`, or `GL_ACTIVE_SUBROUTINE_MAX_LENGTH`.

`values`

  Specifies the address of a variable into which the queried value or values will be placed.

## Description

`glGetProgramStage` queries a parameter of a shader stage attached to a program object. `program` contains the name of the program to which the shader is attached. `shadertype` specifies the stage from which to query the parameter. `pname` specifies which parameter should be queried. The value or values of the parameter to be queried is returned in the variable whose address is given in `values`.

If `pname` is `GL_ACTIVE_SUBROUTINE_UNIFORMS`, the number of active subroutine variables in the stage is returned in `values`.

If `pname` is `GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS`, the number of active subroutine variable locations in the stage is returned in `values`.

If `pname` is `GL_ACTIVE_SUBROUTINES`, the number of active subroutines in the stage is returned in `values`.

If `pname` is `GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH`, the length of the longest subroutine uniform for the stage is returned in `values`.

If `pname` is `GL_ACTIVE_SUBROUTINE_MAX_LENGTH`, the length of the longest subroutine name for the stage is returned in `values`. The returned name length includes space for the null-terminator.

If there is no shader present of type `shadertype`, the returned value will be consistent with a shader containing no subroutines or subroutine uniforms.

## Errors

`GL_INVALID_ENUM` is generated if `shadertype` or `pname` is not one of the accepted values.

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

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

## See Also

glGetProgram

## Copyright

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