void glDetachShader(GLuint program, GLuint shader)
glDetachShader detaches the shader object specified by shader from the program object specified by program. This command undoes the effect of the command glAttachShader.
If shader has already been flagged for deletion by a call to glDeleteShader and it is not attached to any other program object, it is deleted after it has been detached.
glDetachShader is available only if the GL version is 2.0 or greater.
GL_INVALID_VALUE is generated if either program or shader is a value that was not generated by OpenGL.
GL_INVALID_OPERATION is generated if program is not a program object.
GL_INVALID_OPERATION is generated if shader is not a shader object.
GL_INVALID_OPERATION is generated if shader is not attached to program.
GL_INVALID_OPERATION is generated if glDetachShader is executed between the execution of glBegin and the corresponding execution of glEnd.
glGetAttachedShaders with the handle of a valid program object
glGetShader with arguments shader and GL_DELETE_STATUS