public override SWOutput Process(SWNodeBase _node) { //step 1: Add colors colors = new List <SWOutputSub> (); base.Process(_node); foreach (var item in childOutputs) { foreach (var item2 in item.outputs) { if (item2.type == SWDataType._Color) { colors.Add(item2); } } } //step 2: Process colors colors.Sort(delegate(SWOutputSub x, SWOutputSub y) { return(x.depth - y.depth); }); var c = new SWShaderProcessReceiveColor(); for (int i = 0; i < colors.Count; i++) { var item = colors [i]; c.ProcessOutputSingle(this, item, i == 0? "first":""); } //step 3: Process Alpha GoOutput(SWNodeType.alpha, "final"); ProcessSpriteNormal(_node); return(null); }