This abuses the template system to allow both a single anonymous shader and multiple named shaders to be defined in a namespace.