2010-2013
Khronos Group.
glUniformSubroutines
3G

# glUniformSubroutines

load active subroutine uniforms

## C Specification

                    void glUniformSubroutinesuiv
                    GLenum shadertype
                    GLsizei count
                    const GLuint *indices

## Parameters

`shadertype`

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

`count`

  Specifies the number of uniform indices stored in `indices`.

`indices`

  Specifies the address of an array holding the indices to load into the shader subroutine variables.

## Description

`glUniformSubroutines` loads all active subroutine uniforms for shader stage `shadertype` of the current program with subroutine indices from `indices`, storing `indices[i]` into the uniform at location `i`. `count` must be equal to the value of `GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS` for the program currently in use at shader stage `shadertype`. Furthermore, all values in `indices` must be less than the value of `GL_ACTIVE_SUBROUTINES` for the shader stage.

## Errors

`GL_INVALID_OPERATION` is generated if no program object is current.

`GL_INVALID_VALUE` is generated if `count` is not equal to the value of `GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS` for the shader stage `shadertype` of the current program.

`GL_INVALID_VALUE` is generated if any value in `indices` is geater than or equal to the value of `GL_ACTIVE_SUBROUTINES` for the shader stage `shadertype` of the current program.

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

## Associated Gets

glGetProgramStage with argument `GL_ACTIVE_SUBROUTINES`

glGetProgramStage with argument `GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS`

## See Also

glGetProgram, glGetActiveSubroutineUniform, glGetActiveSubroutineUniformName, glGetProgramStage

## Copyright

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