private void InitFromFiles()
        {
            IShaderLoader loader = DefaultLoader ?? new FileSystemLoader();

            foreach (var s in ShaderSourceOrFilenames)
            {
                AddShader(new Shader(Name + "_" + s.Item1.ToString(), s.Item1, loader.Load(s.Item2).Content));
            }
        }
        public ShaderProgram Init(string vertexSource, string fragmentSource, IList <Variable> variables, string[] fragDataOutputs, IShaderLoader loader)
        {
            log.Info("ShaderProgram.Init ({0}) loading", this.Name);

            string vsrc, fsrc;

            if (loader != null)
            {
                vsrc = loader.Load(vertexSource).Content;
                fsrc = loader.Load(fragmentSource).Content;
            }
            else  // source is raw
            {
                vsrc = vertexSource;
                fsrc = fragmentSource;
            }

            this.AddVertexShader(vsrc);
            this.AddFragmentShader(fsrc);

            foreach (var v in variables)
            {
                this.AddVariable(v.Index, v.Name);
            }

            if (fragDataOutputs != null)
            {
                for (int i = 0; i < fragDataOutputs.Length; i++)
                {
                    this.AddFragmentShaderOutput(i, fragDataOutputs[i]);
                }
            }

            this.Link();
            return(this);
        }