The ShaderRetained object is the abstract base class for programmable
shader code. Currently, only text-based source code shaders are
supported, so the only subclass of Shader is SourceCodeShader. We
leave open the possibility for binary (object code) shaders in the
future.