public static TranslatedMaterialGraph Translate(ScriptHelper script) { var a = new TranslatedMaterialGraph(script); a.Visit(); return(a); }
public static void Preprocess(ScriptHelper graph, Connection previewPin = null) { var g = new TranslatedMaterialGraph(graph); new PreviewPinOutput(graph).Apply(previewPin); new InlineFunctions(g.Script).Apply(); g.CreateFinalPosition(); g.SplitOutputs(); g.JoinUniforms(); g.JoinParameters(); if (previewPin == null) { g.CreateFinalColors(); } else { g.CreateShadowPass(graph.Nodes.FirstOrDefault(_ => _.Type == NodeTypes.PositionOutput)); } g.SplitOutputs(); }
public ShaderGeneratorContext(ScriptHelper <TranslatedMaterialGraph.NodeInfo> graph, string name, Connection previewPin = null) { Name = name; Parameters = graph.Nodes.Where(_ => NodeTypes.IsParameter(_.Type)).ToList(); Samplers = graph.Nodes.Where(_ => NodeTypes.IsSampler(_.Type)).ToList(); TranslatedMaterialGraph.Preprocess(graph, previewPin); var finalColorByPass = graph.Nodes.Where(_ => NodeTypes.IsFinalColor(_.Type)).ToLookup(_ => _.Value); foreach (var pass in finalColorByPass) { var passGraph = graph.Clone(); passGraph.Nodes.RemoveWhere(_ => NodeTypes.IsFinalColor(_.Type) && _.Value != pass.Key); Passes.Add(new Pass { Key = pass.Key, Graph = TranslatedMaterialGraph.Translate(passGraph) }); } }