Links shaders together into a program (or finds an existing program if one already exists for the given shaders, element assembly method, and output primitive count), and returns the GL Program Object.

Links shaders together into a program (or finds an existing program if one already exists for the given shaders, element assembly method, and output primitive count), and returns the GL Program Object.

vertexShaderName must be nonzero, but it's OK for geometryShaderName and/or fragmentShaderName to be 0 (same rules as VuoShader_addSource).

description is used just to print errors/warnings; it is not used for cache matching.

Do not call glDeleteShaders() on the returned program; it's expected to persist throughout the lifetime of the process.

To improve performance, this function keeps a cache of precompiled shaders. If a precompiled shader exists for the specified source, that shader is returned. Otherwise, source is passed off to OpenGL to be compiled.

Do not call glDeleteShaders() on the returned shader; it's expected to persist throughout the lifetime of the process.