The OpenGL docs for glUseProgram
claim that calling it with an argument of zero will cause the results of shader execution to be undefined
.
However, after a little searching I've seen a couple examples of people using glUseProgram
to uninstall the current shader program.
Is this behavior reliable? If not, then what exactly does glUseProgram(0)
do?
glUseProgram
means that the given program object is the current program that will be used for things that use programs (glUniform
, rendering commands, etc). 0 is a lot like NULL
for OpenGL objects. It represents not an object
(for most objects). Therefore, glUseProgram(0)
means that no program is current, and therefore no program will be used for things that use programs.
If you attempt to call the glUniform
functions when no program is current, they will fail with an error. If you attempt to render when no program is current, one of two things will happen.
GL_INVALID_OPERATION
error, because core OpenGL must render with a program.