Exemplo n.º 1
0
        public void SetParameterValue(string id, string parameter, object v)
        {
            string cid = id + "." + parameter;

            GraphParameterValue p = null;

            if (Parameters.TryGetValue(cid, out p))
            {
                if (p.IsFunction())
                {
                    FunctionGraph g = p.Value as FunctionGraph;
                    g.OnGraphUpdated -= Graph_OnGraphUpdated;
                    g.Dispose();
                }

                p.Value = v;
            }
            else
            {
                Parameters[cid] = new GraphParameterValue(parameter, v);
            }

            if (v is FunctionGraph)
            {
                (v as FunctionGraph).OnGraphUpdated += Graph_OnGraphUpdated;
            }

            Updated();
        }
Exemplo n.º 2
0
        public T GetParameterValue <T>(string id, string parameter)
        {
            string cid = id + "." + parameter;

            GraphParameterValue p = null;

            if (Parameters.TryGetValue(cid, out p))
            {
                if (p.IsFunction())
                {
                    FunctionGraph g = p.Value as FunctionGraph;

                    g.TryAndProcess();

                    if (g.Result == null)
                    {
                        return(default(T));
                    }

                    return((T)g.Result);
                }
                else
                {
                    return((T)p.Value);
                }
            }

            return(default(T));
        }
Exemplo n.º 3
0
        protected void BuildShaderFunctionValue(GraphParameterValue param, StringBuilder builder)
        {
            FunctionGraph fn = param.Value as FunctionGraph;

            fn.TryAndProcess();
            object value = fn.Result;

            if (param.Type == NodeType.Bool)
            {
                builder.Append(Convert.ToBoolean(param.Value).ToString().ToLower() + ";\r\n");
            }
            else if (param.Type == NodeType.Float)
            {
                builder.Append(Convert.ToSingle(value).ToString() + ";\r\n");
            }
            else if (param.Type == NodeType.Float4 || param.Type == NodeType.Gray || param.Type == NodeType.Color)
            {
                MVector vec = new MVector();

                if (value is MVector)
                {
                    vec = (MVector)value;
                }

                builder.Append("vec4(" + vec.X + "," + vec.Y + "," + vec.Z + "," + vec.W + ");\r\n");
            }
            else if (param.Type == NodeType.Float2)
            {
                MVector vec = new MVector();

                if (value is MVector)
                {
                    vec = (MVector)value;
                }

                builder.Append("vec2(" + vec.X + "," + vec.Y + ");\r\n");
            }
            else if (param.Type == NodeType.Float3)
            {
                MVector vec = new MVector();

                if (value is MVector)
                {
                    vec = (MVector)value;
                }

                builder.Append("vec3(" + vec.X + "," + vec.Y + "," + vec.Z + ");\r\n");
            }
            else if (param.Type == NodeType.Matrix && value is Matrix4)
            {
                Matrix4 m4 = (Matrix4)value;
                //glsl matrices are column major order
                builder.Append("mat3(" + m4.Column0.X + ", " + m4.Column0.Y + ", " + m4.Column0.Z + ", " + m4.Column0.W + ", "
                               + m4.Column1.X + ", " + m4.Column1.Y + ", " + m4.Column1.Z + ", " + m4.Column1.W + ", "
                               + m4.Column2.X + ", " + m4.Column2.Y + ", " + m4.Column2.Z + ", " + m4.Column2.W + ","
                               + m4.Column3.X + ", " + m4.Column3.Y + ", " + m4.Column3.Z + ", " + m4.Column3.W + ");\r\n");
            }
        }
Exemplo n.º 4
0
        public GraphParameterValue GetParameterRaw(string id, string parameter)
        {
            GraphParameterValue p = null;

            string cid = id + "." + parameter;

            Parameters.TryGetValue(cid, out p);

            return(p);
        }
Exemplo n.º 5
0
        public static GraphParameterValue FromJson(string data, Node n)
        {
            GraphParameterValueData d = JsonConvert.DeserializeObject <GraphParameterValueData>(data);
            //create a dummy graph parameter
            var g = new GraphParameterValue(d.name, 0);

            //load real data
            g.SetJson(d, n);
            return(g);
        }
Exemplo n.º 6
0
        public void SetParameterValue(string id, string parameter, object v)
        {
            string cid = id + "." + parameter;

            GraphParameterValue p = null;

            if (Parameters.TryGetValue(cid, out p))
            {
                if (p.IsFunction())
                {
                    FunctionGraph g = p.Value as FunctionGraph;
                    g.OnGraphUpdated -= Graph_OnGraphUpdated;
                    g.Dispose();
                }

                if (v is float || v is int || v is double)
                {
                    p.Type = NodeType.Float;
                }
                else if (v is bool)
                {
                    p.Type = NodeType.Bool;
                }
                else if (v is MVector)
                {
                    p.Type = NodeType.Float4;
                }

                p.Value = v;
            }
            else
            {
                p = Parameters[cid] = new GraphParameterValue(parameter, v);

                if (v is float || v is int || v is double)
                {
                    p.Type = NodeType.Float;
                }
                else if (v is bool)
                {
                    p.Type = NodeType.Bool;
                }
                else if (v is MVector)
                {
                    p.Type = NodeType.Float4;
                }
            }

            if (v is FunctionGraph)
            {
                (v as FunctionGraph).OnGraphUpdated += Graph_OnGraphUpdated;
            }

            Updated();
        }
Exemplo n.º 7
0
        public virtual void SetJsonReadyCustomParameters(List <string> parameters)
        {
            if (parameters != null)
            {
                CustomParameters.Clear();

                foreach (var k in parameters)
                {
                    CustomParameters.Add(GraphParameterValue.FromJson(k, null));
                }
            }
        }
Exemplo n.º 8
0
        public bool IsParameterValueFunction(string id, string parameter)
        {
            string cid = id + "." + parameter;

            GraphParameterValue v = null;

            if (Parameters.TryGetValue(cid, out v))
            {
                return(v.IsFunction());
            }

            return(false);
        }
Exemplo n.º 9
0
        protected void BuildShaderParam(GraphParameterValue param, StringBuilder builder, bool useMinMaxValue = false)
        {
            string type = "";

            if (param.Type == NodeType.Bool)
            {
                type = "bool ";
            }
            else if (param.Type == NodeType.Float)
            {
                type = "float ";
            }
            else if (param.Type == NodeType.Color || param.Type == NodeType.Float4 || param.Type == NodeType.Gray)
            {
                type = "vec4 ";
            }
            else if (param.Type == NodeType.Float2)
            {
                type = "vec2 ";
            }
            else if (param.Type == NodeType.Float3)
            {
                type = "vec3 ";
            }
            else if (param.Type == NodeType.Matrix)
            {
                type = "mat4 ";
            }
            else
            {
                return;
            }

            string prefix = "p_";
            string s1     = prefix + param.Name.Replace(" ", "").Replace("-", "") + " = ";

            builder.Append(type);
            builder.Append(s1);

            if (param.IsFunction())
            {
                BuildShaderFunctionValue(param, builder);
            }
            else
            {
                BuildShaderParamValue(param, builder, useMinMaxValue);
            }
        }
Exemplo n.º 10
0
        protected void SetParentGraphVars(Graph g)
        {
            if (g == null)
            {
                return;
            }

            try
            {
                var p = g;

                if (p != null)
                {
                    foreach (var k in p.Parameters.Keys)
                    {
                        var param = p.Parameters[k];

                        if (!param.IsFunction())
                        {
                            SetVar("p_" + param.Name.Replace(" ", "").Replace("-", ""), param.Value, param.Type);
                        }
                    }

                    int count = p.CustomParameters.Count;
                    for (int i = 0; i < count; i++)
                    {
                        GraphParameterValue param = p.CustomParameters[i];

                        if (!param.IsFunction())
                        {
                            SetVar("p_" + param.Name.Replace(" ", "").Replace("-", ""), param.Value, param.Type);
                        }
                    }
                }
            }
            catch (StackOverflowException e)
            {
                //possible
                Log.Error(e);
                Log.Error("There is an infinite function reference loop in promoted graph parameters.");
            }
        }
Exemplo n.º 11
0
        public void RemoveParameterValue(string id, string parameter)
        {
            string cid = id + "." + parameter;

            GraphParameterValue p = null;

            if (Parameters.TryGetValue(cid, out p))
            {
                if (p.IsFunction())
                {
                    FunctionGraph g = p.Value as FunctionGraph;
                    g.OnGraphUpdated -= Graph_OnGraphUpdated;
                    g.Dispose();
                }
            }

            Parameters.Remove(cid);

            Updated();
        }
Exemplo n.º 12
0
        public virtual void SetJsonReadyParameters(Dictionary <string, string> parameters)
        {
            if (parameters != null)
            {
                Parameters = new Dictionary <string, GraphParameterValue>();

                foreach (var k in parameters.Keys)
                {
                    string[] split = k.Split('.');

                    Node n = null;
                    NodeLookup.TryGetValue(split[0], out n);

                    Parameters[k] = GraphParameterValue.FromJson(parameters[k], n);
                    if (Parameters[k].IsFunction())
                    {
                        var f = Parameters[k].Value as FunctionGraph;
                        f.OnGraphUpdated += Graph_OnGraphUpdated;
                    }
                }
            }
        }
Exemplo n.º 13
0
        protected string GetParentGraphShaderParams()
        {
            StringBuilder builder = new StringBuilder();

            try
            {
                var p = TopGraph();

                if (p != null)
                {
                    foreach (var param in p.Parameters.Values)
                    {
                        BuildShaderParam(param, builder);
                    }

                    int count = p.CustomParameters.Count;
                    for (int i = 0; i < count; i++)
                    {
                        GraphParameterValue param = p.CustomParameters[i];
                        if (param.IsFunction())
                        {
                            continue;
                        }
                        BuildShaderParam(param, builder, true);
                    }
                }
            }
            catch (StackOverflowException e)
            {
                Log.Error(e);
                Log.Error("There is an infinite function reference loop in promoted graph parameters.");
                return("");
            }

            return(builder.ToString());
        }
Exemplo n.º 14
0
        public object GetParameterValue(string id, string parameter)
        {
            string cid = id + "." + parameter;

            GraphParameterValue p = null;

            if (Parameters.TryGetValue(cid, out p))
            {
                if (p.IsFunction())
                {
                    FunctionGraph g = p.Value as FunctionGraph;

                    g.TryAndProcess();

                    return(g.Result);
                }
                else
                {
                    return(p.Value);
                }
            }

            return(null);
        }
Exemplo n.º 15
0
        protected void BuildShaderParamValue(GraphParameterValue param, StringBuilder builder, bool useMinMaxValue = false)
        {
            if (param.Type == NodeType.Bool)
            {
                builder.Append(Convert.ToBoolean(param.Value).ToString().ToLower() + ";\r\n");
            }
            else if (param.Type == NodeType.Float)
            {
                builder.Append(Convert.ToSingle(param.Value).ToString() + ";\r\n");
            }
            else if (param.Type == NodeType.Float4 || param.Type == NodeType.Gray || param.Type == NodeType.Color)
            {
                MVector vec = new MVector();

                if (param.Value is MVector)
                {
                    if (!useMinMaxValue)
                    {
                        vec = (MVector)param.Value;
                    }
                    else
                    {
                        vec = param.VectorValue;
                    }
                }

                builder.Append("vec4(" + vec.X + "," + vec.Y + "," + vec.Z + "," + vec.W + ");\r\n");
            }
            else if (param.Type == NodeType.Float2)
            {
                MVector vec = new MVector();

                if (param.Value is MVector)
                {
                    if (!useMinMaxValue)
                    {
                        vec = (MVector)param.Value;
                    }
                    else
                    {
                        vec = param.VectorValue;
                    }
                }

                builder.Append("vec2(" + vec.X + "," + vec.Y + ");\r\n");
            }
            else if (param.Type == NodeType.Float3)
            {
                MVector vec = new MVector();

                if (param.Value is MVector)
                {
                    if (!useMinMaxValue)
                    {
                        vec = (MVector)param.Value;
                    }
                    else
                    {
                        vec = param.VectorValue;
                    }
                }

                builder.Append("vec3(" + vec.X + "," + vec.Y + "," + vec.Z + ");\r\n");
            }
        }
Exemplo n.º 16
0
        protected void BuildShaderParamValue(GraphParameterValue param, StringBuilder builder, bool useMinMaxValue = false)
        {
            if (param.Type == NodeType.Bool)
            {
                builder.Append(Convert.ToBoolean(param.Value).ToString().ToLower() + ";\r\n");
            }
            else if (param.Type == NodeType.Float)
            {
                builder.Append(param.FloatValue.ToString() + ";\r\n");
            }
            else if (param.Type == NodeType.Float4 || param.Type == NodeType.Gray || param.Type == NodeType.Color)
            {
                MVector vec = new MVector();

                if (param.Value is MVector)
                {
                    if (!useMinMaxValue)
                    {
                        vec = (MVector)param.Value;
                    }
                    else
                    {
                        vec = param.VectorValue;
                    }
                }

                builder.Append("vec4(" + vec.X + "," + vec.Y + "," + vec.Z + "," + vec.W + ");\r\n");
            }
            else if (param.Type == NodeType.Float2)
            {
                MVector vec = new MVector();

                if (param.Value is MVector)
                {
                    if (!useMinMaxValue)
                    {
                        vec = (MVector)param.Value;
                    }
                    else
                    {
                        vec = param.VectorValue;
                    }
                }

                builder.Append("vec2(" + vec.X + "," + vec.Y + ");\r\n");
            }
            else if (param.Type == NodeType.Float3)
            {
                MVector vec = new MVector();

                if (param.Value is MVector)
                {
                    if (!useMinMaxValue)
                    {
                        vec = (MVector)param.Value;
                    }
                    else
                    {
                        vec = param.VectorValue;
                    }
                }

                builder.Append("vec3(" + vec.X + "," + vec.Y + "," + vec.Z + ");\r\n");
            }
            else if (param.Type == NodeType.Matrix)
            {
                Matrix4 m4 = param.Matrix4Value;
                //glsl matrices are column major order
                builder.Append("mat3(" + m4.Column0.X + ", " + m4.Column0.Y + ", " + m4.Column0.Z + ", " + m4.Column0.W + ", "
                               + m4.Column1.X + ", " + m4.Column1.Y + ", " + m4.Column1.Z + ", " + m4.Column1.W + ", "
                               + m4.Column2.X + ", " + m4.Column2.Y + ", " + m4.Column2.Z + ", " + m4.Column2.W + ","
                               + m4.Column3.X + ", " + m4.Column3.Y + ", " + m4.Column3.Z + ", " + m4.Column3.W + ");\r\n");
            }
        }
Exemplo n.º 17
0
        public virtual void FromJson(string data)
        {
            GraphData d = JsonConvert.DeserializeObject <GraphData>(data);

            if (d != null)
            {
                Dictionary <string, Node>   lookup   = new Dictionary <string, Node>();
                Dictionary <string, string> nodeData = new Dictionary <string, string>();

                Name               = d.name;
                OutputNodes        = d.outputs;
                InputNodes         = d.inputs;
                defaultTextureType = d.defaultTextureType;
                ShiftX             = d.shiftX;
                ShiftY             = d.shiftY;
                Zoom               = d.zoom;

                Parameters = new Dictionary <string, GraphParameterValue>();

                foreach (var k in d.parameters.Keys)
                {
                    Parameters[k] = GraphParameterValue.FromJson(d.parameters[k]);
                }

                //parse node data
                //setup initial object instances
                foreach (string s in d.nodes)
                {
                    Node.NodeData nd = JsonConvert.DeserializeObject <Node.NodeData>(s);

                    if (nd != null)
                    {
                        string type = nd.type;
                        if (!string.IsNullOrEmpty(type))
                        {
                            try
                            {
                                Type t = Type.GetType(type);
                                if (t != null)
                                {
                                    //special case to handle output nodes
                                    if (t.Equals(typeof(OutputNode)))
                                    {
                                        OutputNode n = new OutputNode(defaultTextureType);
                                        n.ParentGraph = this;
                                        n.Id          = nd.id;
                                        lookup[nd.id] = n;
                                        Nodes.Add(n);
                                        nodeData[nd.id] = s;
                                    }
                                    else if (t.Equals(typeof(InputNode)))
                                    {
                                        InputNode n = new InputNode(defaultTextureType);
                                        n.ParentGraph = this;
                                        n.Id          = nd.id;
                                        lookup[nd.id] = n;
                                        Nodes.Add(n);
                                        nodeData[nd.id] = s;
                                    }
                                    else
                                    {
                                        Node n = (Node)Activator.CreateInstance(t, nd.width, nd.height, defaultTextureType);
                                        if (n != null)
                                        {
                                            n.ParentGraph = this;
                                            n.Id          = nd.id;
                                            lookup[nd.id] = n;
                                            Nodes.Add(n);
                                            nodeData[nd.id] = s;
                                        }
                                    }
                                }
                                else
                                {
                                    //log we could not load graph node
                                }
                            }
                            catch
                            {
                                //log we could not load graph node
                            }
                        }
                    }
                }

                NodeLookup = lookup;

                //apply data to nodes
                foreach (Node n in Nodes)
                {
                    string ndata = null;
                    nodeData.TryGetValue(n.Id, out ndata);

                    if (!string.IsNullOrEmpty(ndata))
                    {
                        n.FromJson(lookup, ndata);

                        n.OnUpdate += N_OnUpdate;
                        //origin sizes are only for graph instances
                        //not actually used in the current one being edited
                        //it is used in the ResizeWith
                        OriginSizes[n.Id] = new Point(n.Width, n.Height);
                    }
                }
            }
        }
Exemplo n.º 18
0
        protected void BuildShaderParamValue(GraphParameterValue param, StringBuilder builder, bool useMinMaxValue = false)
        {
            if (param.Type == NodeType.Bool)
            {
                try
                {
                    builder.Append(Convert.ToBoolean(param.Value).ToString().ToLower() + ";\r\n");
                }
                catch (Exception e)
                {
                    Log.Error(e);
                    Log.Info("Defaulting to false for parameter " + param.Name);
                    builder.Append("false;\r\n");
                }
            }
            else if (param.Type == NodeType.Float)
            {
                try
                {
                    if (useMinMaxValue)
                    {
                        builder.Append(param.FloatValue.ToCodeString() + ";\r\n");
                    }
                    else
                    {
                        builder.Append(Convert.ToSingle(param.Value).ToCodeString() + ";\r\n");
                    }
                }
                catch (Exception e)
                {
                    Log.Error(e);
                    Log.Info("Defaulting to 0 for parameter " + param.Name);
                    builder.Append("0;\r\n");
                }
            }
            else if (param.Type == NodeType.Float4 || param.Type == NodeType.Gray || param.Type == NodeType.Color)
            {
                MVector vec = new MVector();

                if (param.Value is MVector)
                {
                    if (!useMinMaxValue)
                    {
                        vec = (MVector)param.Value;
                    }
                    else
                    {
                        vec = param.VectorValue;
                    }
                }

                builder.Append("vec4(" + vec.X.ToCodeString() + "," + vec.Y.ToCodeString() + "," + vec.Z.ToCodeString() + "," + vec.W.ToCodeString() + ");\r\n");
            }
            else if (param.Type == NodeType.Float2)
            {
                MVector vec = new MVector();

                if (param.Value is MVector)
                {
                    if (!useMinMaxValue)
                    {
                        vec = (MVector)param.Value;
                    }
                    else
                    {
                        vec = param.VectorValue;
                    }
                }

                builder.Append("vec2(" + vec.X.ToCodeString() + "," + vec.Y.ToCodeString() + ");\r\n");
            }
            else if (param.Type == NodeType.Float3)
            {
                MVector vec = new MVector();

                if (param.Value is MVector)
                {
                    if (!useMinMaxValue)
                    {
                        vec = (MVector)param.Value;
                    }
                    else
                    {
                        vec = param.VectorValue;
                    }
                }

                builder.Append("vec3(" + vec.X.ToCodeString() + "," + vec.Y.ToCodeString() + "," + vec.Z.ToCodeString() + ");\r\n");
            }
            else if (param.Type == NodeType.Matrix)
            {
                Matrix4 m4 = param.Matrix4Value;
                //glsl matrices are column major order
                builder.Append("mat3(" + m4.Column0.X.ToCodeString() + ", " + m4.Column0.Y.ToCodeString() + ", " + m4.Column0.Z.ToCodeString() + ", " + m4.Column0.W.ToCodeString() + ", "
                               + m4.Column1.X.ToCodeString() + ", " + m4.Column1.Y.ToCodeString() + ", " + m4.Column1.Z.ToCodeString() + ", " + m4.Column1.W.ToCodeString() + ", "
                               + m4.Column2.X.ToCodeString() + ", " + m4.Column2.Y.ToCodeString() + ", " + m4.Column2.Z.ToCodeString() + ", " + m4.Column2.W.ToCodeString() + ","
                               + m4.Column3.X.ToCodeString() + ", " + m4.Column3.Y.ToCodeString() + ", " + m4.Column3.Z.ToCodeString() + ", " + m4.Column3.W.ToCodeString() + ");\r\n");
            }
        }
Exemplo n.º 19
0
        protected void BuildShaderFunctionValue(GraphParameterValue param, StringBuilder builder)
        {
            FunctionGraph fn = param.Value as FunctionGraph;

            fn.TryAndProcess();
            object value = fn.Result;

            if (param.Type == NodeType.Bool)
            {
                try
                {
                    builder.Append(Convert.ToBoolean(value).ToString().ToLower() + ";\r\n");
                }
                catch (Exception e)
                {
                    Log.Error(e);
                    Log.Info("Defaulting to false for value of parameter " + param.Name);
                    builder.Append("false;\r\n");
                }
            }
            else if (param.Type == NodeType.Float)
            {
                try
                {
                    builder.Append(Convert.ToSingle(value).ToCodeString() + ";\r\n");
                }
                catch (Exception e)
                {
                    Log.Error(e);
                    Log.Info("Defaulting to 0 for value of parameter " + param.Name);
                    builder.Append("0;\r\n");
                }
            }
            else if (param.Type == NodeType.Float4 || param.Type == NodeType.Gray || param.Type == NodeType.Color)
            {
                MVector vec = new MVector();

                if (value is MVector)
                {
                    vec = (MVector)value;
                }

                builder.Append("vec4(" + vec.X.ToCodeString() + "," + vec.Y.ToCodeString() + "," + vec.Z.ToCodeString() + "," + vec.W.ToCodeString() + ");\r\n");
            }
            else if (param.Type == NodeType.Float2)
            {
                MVector vec = new MVector();

                if (value is MVector)
                {
                    vec = (MVector)value;
                }

                builder.Append("vec2(" + vec.X.ToCodeString() + "," + vec.Y.ToCodeString() + ");\r\n");
            }
            else if (param.Type == NodeType.Float3)
            {
                MVector vec = new MVector();

                if (value is MVector)
                {
                    vec = (MVector)value;
                }

                builder.Append("vec3(" + vec.X.ToCodeString() + "," + vec.Y.ToCodeString() + "," + vec.Z.ToCodeString() + ");\r\n");
            }
            else if (param.Type == NodeType.Matrix && value is Matrix4)
            {
                Matrix4 m4 = (Matrix4)value;
                //glsl matrices are column major order
                builder.Append("mat3(" + m4.Column0.X.ToCodeString() + ", " + m4.Column0.Y.ToCodeString() + ", " + m4.Column0.Z.ToCodeString() + ", " + m4.Column0.W.ToCodeString() + ", "
                               + m4.Column1.X.ToCodeString() + ", " + m4.Column1.Y.ToCodeString() + ", " + m4.Column1.Z.ToCodeString() + ", " + m4.Column1.W.ToCodeString() + ", "
                               + m4.Column2.X.ToCodeString() + ", " + m4.Column2.Y.ToCodeString() + ", " + m4.Column2.Z.ToCodeString() + ", " + m4.Column2.W.ToCodeString() + ","
                               + m4.Column3.X.ToCodeString() + ", " + m4.Column3.Y.ToCodeString() + ", " + m4.Column3.Z.ToCodeString() + ", " + m4.Column3.W.ToCodeString() + ");\r\n");
            }
        }