public ShaderProgram CreateProgram(params string[] shaders)
        {
            ShaderProgramDesc desc = new ShaderProgramDesc(this);

            for (int i = 0; i < shaders.Length; i++)
            {
                desc.LinkShader(shaders[i]);
            }

            return(CreateProgram(desc));
        }
        public ShaderProgram CreateProgram <TVert>(string vertexShader, params string[] shaders)
            where TVert : struct
        {
            ShaderProgramDesc desc = new ShaderProgramDesc(this);

            desc.LinkVertexShader <TVert>(vertexShader);

            for (int i = 0; i < shaders.Length; i++)
            {
                desc.LinkShader(shaders[i]);
            }

            return(CreateProgram(desc));
        }
        public ShaderProgram CreateProgram <TVert, TOut>(string vertexShader, string geometryShader, bool rasterizedStream0, params string[] shaders)
            where TVert : struct
            where TOut : struct
        {
            ShaderProgramDesc desc = new ShaderProgramDesc(this);

            desc.LinkVertexShader <TVert>(vertexShader);
            desc.LinkGeometryShader <TOut>(geometryShader, rasterizedStream0);

            for (int i = 0; i < shaders.Length; i++)
            {
                desc.LinkShader(shaders[i]);
            }

            return(CreateProgram(desc));
        }