示例#1
0
        public override void Compute(bool selfcompute = false)
        {
            NodeBase n  = null;
            NodeBase n2 = null;

            if (Apoint.connections.Count != 0 && Bpoint.connections.Count != 0)
            {
                n  = Apoint.connections[0].outPoint.node;
                n2 = Bpoint.connections[0].outPoint.node;

                A = n.GetTexture();
                B = n2.GetTexture();
            }

            if (maskPoint.connections.Count != 0)
            {
                NodeBase mask = maskPoint.connections[0].outPoint.node;
                Mask = mask.GetTexture();
            }

            if (selfcompute)
            {
                if (A != null && B != null && texture != null)
                {
                    if (n != null && n2 != null)
                    {
                        if (n.ressolution == n2.ressolution)
                        {
                            if (n.ressolution != ressolution)
                            {
                                ChangeRessolution(n.ressolution.x);
                            }

                            if (ressolution.x / 8 > 0)
                            {
                                switch (mode)
                                {
                                case BlendMode.Multiply:
                                    if (shader != null)
                                    {
                                        kernel = shader.FindKernel("BlendMultiply");
                                        shader.SetTexture(kernel, "Result", texture);
                                        shader.SetTexture(kernel, "A", A);
                                        shader.SetTexture(kernel, "B", B);
                                        shader.Dispatch(kernel, ressolution.x / 8, ressolution.y / 8, 1);
                                    }
                                    break;

                                case BlendMode.Addition:
                                    kernel = shader.FindKernel("BlendAddition");
                                    shader.SetTexture(kernel, "Result", texture);
                                    shader.SetTexture(kernel, "A", A);
                                    shader.SetTexture(kernel, "B", B);
                                    shader.Dispatch(kernel, ressolution.x / 8, ressolution.y / 8, 1);
                                    break;

                                case BlendMode.Substraction:
                                    kernel = shader.FindKernel("BlendSubstraction");
                                    shader.SetTexture(kernel, "Result", texture);
                                    shader.SetTexture(kernel, "A", A);
                                    shader.SetTexture(kernel, "B", B);
                                    shader.Dispatch(kernel, ressolution.x / 8, ressolution.y / 8, 1);
                                    break;

                                case BlendMode.Mask:
                                    if (Mask != null)
                                    {
                                        kernel = shader.FindKernel("BlendMask");
                                        shader.SetTexture(kernel, "Result", texture);
                                        shader.SetTexture(kernel, "A", A);
                                        shader.SetTexture(kernel, "B", B);
                                        shader.SetTexture(kernel, "Mask", Mask);
                                        shader.Dispatch(kernel, ressolution.x / 8, ressolution.y / 8, 1);
                                    }
                                    break;

                                case BlendMode.Screen:
                                    kernel = shader.FindKernel("BlendScreen");
                                    shader.SetTexture(kernel, "Result", texture);
                                    shader.SetTexture(kernel, "A", A);
                                    shader.SetTexture(kernel, "B", B);
                                    shader.Dispatch(kernel, ressolution.x / 8, ressolution.y / 8, 1);
                                    break;

                                case BlendMode.Overlay:
                                    kernel = shader.FindKernel("BlendOverlay");
                                    shader.SetTexture(kernel, "Result", texture);
                                    shader.SetTexture(kernel, "A", A);
                                    shader.SetTexture(kernel, "B", B);
                                    shader.Dispatch(kernel, ressolution.x / 8, ressolution.y / 8, 1);
                                    break;

                                case BlendMode.Max:
                                    kernel = shader.FindKernel("BlendMax");
                                    shader.SetTexture(kernel, "Result", texture);
                                    shader.SetTexture(kernel, "A", A);
                                    shader.SetTexture(kernel, "B", B);
                                    shader.Dispatch(kernel, ressolution.x / 8, ressolution.y / 8, 1);
                                    break;

                                case BlendMode.Min:
                                    kernel = shader.FindKernel("BlendMin");
                                    shader.SetTexture(kernel, "Result", texture);
                                    shader.SetTexture(kernel, "A", A);
                                    shader.SetTexture(kernel, "B", B);
                                    shader.Dispatch(kernel, ressolution.x / 8, ressolution.y / 8, 1);
                                    break;

                                case BlendMode.Divide:
                                    kernel = shader.FindKernel("BlendDivide");
                                    shader.SetTexture(kernel, "Result", texture);
                                    shader.SetTexture(kernel, "A", A);
                                    shader.SetTexture(kernel, "B", B);
                                    shader.Dispatch(kernel, ressolution.x / 8, ressolution.y / 8, 1);
                                    break;

                                case BlendMode.AddSub:
                                    kernel = shader.FindKernel("BlendAddSub");
                                    shader.SetTexture(kernel, "Result", texture);
                                    shader.SetTexture(kernel, "A", A);
                                    shader.SetTexture(kernel, "B", B);
                                    shader.Dispatch(kernel, ressolution.x / 8, ressolution.y / 8, 1);
                                    break;
                                }
                            }
                        }
                    }
                }
            }

            if (outPoint.connections != null)
            {
                for (int i = 0; i < outPoint.connections.Count; i++)
                {
                    outPoint.connections[i].inPoint.node.Compute(true);
                }
            }
        }
示例#2
0
 public void SetSelectedNode(NodeBase n)
 {
     selectedNode           = n;
     Selection.activeObject = n;
 }