Exemplo n.º 1
0
 public ShaderProgram AddFragmentShaderOutput(int colourIndex, string name)
 {
     if (!string.IsNullOrWhiteSpace(name))
     {
         if (FragDataLocation.ContainsKey(colourIndex))
         {
             FragDataLocation[colourIndex] = name;
         }
         else
         {
             FragDataLocation.Add(colourIndex, name);
         }
     }
     return(this);
 }
Exemplo n.º 2
0
        public ShaderProgram(ShaderProgram cloneFrom)
        {
            if (cloneFrom == null)
            {
                throw new ArgumentNullException(nameof(cloneFrom));
            }

            if (cloneFrom.ShaderSourceOrFilenames.Count == 0)
            {
                throw new InvalidOperationException($"ShaderProgram: cannot clone from {cloneFrom.Name} due to insufficient shader information");
            }

            Name = cloneFrom.Name;

            foreach (var v in cloneFrom.VariableLocations)
            {
                VariableLocations.Add(v.Key, v.Value);
            }

            foreach (var f in cloneFrom.FragDataLocation)
            {
                FragDataLocation.Add(f.Key, f.Value);
            }

            UsingFilenames = cloneFrom.UsingFilenames;
            foreach (var s in cloneFrom.ShaderSourceOrFilenames)
            {
                ShaderSourceOrFilenames.Add(s);
            }

            if (UsingFilenames)
            {
                InitFromFiles();
            }
            else
            {
                InitFromSource();
            }
        }
Exemplo n.º 3
0
        public ShaderProgram SetFragmentOutputs(params string[] fragmentOutputs)
        {
            FragDataLocation.Clear();

            if (fragmentOutputs == null || fragmentOutputs.Length == 0)
            {
                return(this);
            }

            // if we've only been passed a single string and it contains commas, then split it.
            if (fragmentOutputs.Length == 1 && fragmentOutputs[0].Contains(","))
            {
                return(SetVariables(fragmentOutputs[0].Split(',')));
            }

            for (int i = 0; i < fragmentOutputs.Length; i++)
            {
                AddFragmentShaderOutput(i, fragmentOutputs[i]);
            }

            return(this);
        }