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);
        }
        public static SWShaderProcessReceiveBase CreateProcessorReceiver(SWNodeType type)
        {
            SWShaderProcessReceiveBase receiver = null;

            if (type == SWNodeType.root)
            {
            }
            else if (type == SWNodeType.mask)
            {
            }
            else if (type == SWNodeType.color)
            {
                receiver = new SWShaderProcessReceiveColor();
            }
            else if (type == SWNodeType.image)
            {
            }
            else if (type == SWNodeType.uv)
            {
                receiver = new SWShaderProcessReceiveUV();
            }
            else if (type == SWNodeType.alpha)
            {
                receiver = new SWShaderProcessReceiveAlpha();
            }
            else if (type == SWNodeType.remap)
            {
                receiver = new SWShaderProcessReceiveRemap();
            }
            else if (type == SWNodeType.blur)
            {
                receiver = new SWShaderProcessReceiveBlur();
            }
            else if (type == SWNodeType.retro)
            {
                receiver = new SWShaderProcessReceiveRetro();
            }


            else if (type == SWNodeType.coord)
            {
                receiver = new SWShaderProcessReceiveCoord();
            }
            else if (type == SWNodeType.dummy)
            {
            }
            else if (type == SWNodeType.code)
            {
            }
            return(receiver);
        }