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); } } }
public void SetSelectedNode(NodeBase n) { selectedNode = n; Selection.activeObject = n; }