Exemplo n.º 1
0
        private string GenerateSetup(MetaOperator metaOp, MetaOperatorPart codeMetaOpPart)
        {
            var lines                 = new List <string>();
            var metaInputOpParts      = metaOp.GetOrderedInputs();
            var imageMetaInputOpParts = (from p in metaInputOpParts
                                         where p.OpPart.Type == FunctionType.Image
                                         select p).ToList();

            foreach (var input in imageMetaInputOpParts)
            {
                var inputName = Utilities.AdjustOpPartNameForCode(input.Name);
                lines.Add(string.Format("using (var {0}View = new ShaderResourceView(context.D3DDevice, {0}))",
                                        inputName));
            }

            lines.Add("{");
            lines.Add("    _effect.GetVariableByName(\"RenderTargetSize\").AsVector().Set(new Vector2(_usedViewport.Width, _usedViewport.Height));");

            var inputGroups = from input in metaInputOpParts
                              group input by input.Name.Split(new[] { '.' })[0] into g
                              select new { Name = g.Key, Inputs = g.ToArray() };

            foreach (var group in inputGroups)
            {
                var inputGroupName = Utilities.AdjustOpPartNameForCode(group.Name);

                switch (group.Inputs[0].OpPart.Type)
                {
                case FunctionType.Float:
                    switch (group.Inputs.Length)
                    {
                    case 1:
                        lines.Add(string.Format("    _effect.GetVariableByName(\"{0}\").AsScalar().Set({0});",
                                                inputGroupName));
                        break;

                    case 2:
                    case 3:
                    case 4:
                        string vectorParams = Utilities.AdjustOpPartNameForCode(group.Inputs[0].Name);
                        for (int i = 1; i < group.Inputs.Length; ++i)
                        {
                            vectorParams += ", " + Utilities.AdjustOpPartNameForCode(group.Inputs[i].Name);
                        }
                        lines.Add(string.Format("    _effect.GetVariableByName(\"{0}\").AsVector().Set(new Vector{1}({2}));",
                                                inputGroupName, group.Inputs.Length, vectorParams));
                        break;
                    }
                    break;

                case FunctionType.Image:
                    lines.Add(string.Format("    _effect.GetVariableByName(\"{0}\").AsShaderResource().SetResource({0}View);", inputGroupName));
                    break;

                default:
                    break;
                }
            }
            return(string.Join("\n", lines));
        }
Exemplo n.º 2
0
 public void AddMetaOperatorPart(MetaOperatorPart metaOpPart)
 {
     if (!_metaOpParts.ContainsKey(metaOpPart.ID))
     {
         _metaOpParts.Add(metaOpPart.ID, metaOpPart);
         ChangedEvent(this, EventArgs.Empty);
     }
 }
Exemplo n.º 3
0
        public MetaInput(Guid id, string name, MetaOperatorPart opPart, IValue defaultValue, bool isMultiInput)
        {
            ID           = id;
            Name         = name;
            OpPart       = opPart;
            _defaultFunc = Utilities.CreateDefaultValueFunction(defaultValue);
            IsMultiInput = isMultiInput;
            Relevance    = RelevanceType.Optional;
            Description  = string.Empty;

            // float stuff
            Min        = -100000;
            Max        = 100000;
            Scale      = 0.1f;
            ScaleType  = Scaling.Linear;
            EnumValues = new List <EnumEntry>();
        }
Exemplo n.º 4
0
        private Tuple <Guid, MetaOperatorPart> BuildMetaOpPart(MetaManager metaManager, MetaOperator parent, JToken jsonOpPart)
        {
            var metaInstanceID = Guid.Parse(jsonOpPart["MetaInstanceID"].Value <string>());
            var metaIDOfOpPart = Guid.Parse(jsonOpPart["MetaID"].Value <string>());
            var version        = Guid.Parse(jsonOpPart["Version"].Value <string>());

            // build script
            var lines = new List <String>();

            foreach (var scriptLine in jsonOpPart["Script"])
            {
                lines.Add(scriptLine.Value <string>());
            }
            var script = string.Join("\n", lines);

            var additionalAssemblies = new List <string>();

            if (jsonOpPart["AdditionalAssemblies"] != null)
            {
                additionalAssemblies.AddRange(jsonOpPart["AdditionalAssemblies"].Select(assembly => assembly.Value <string>()));
            }

            var isMultiInput = jsonOpPart["IsMultiInput"].Value <bool>();
            var name         = jsonOpPart["Name"].Value <string>();
            var type         = (FunctionType)Enum.Parse(typeof(FunctionType), jsonOpPart["Type"].Value <string>());

            var metaOpPart = new MetaOperatorPart(metaIDOfOpPart)
            {
                IsMultiInput         = isMultiInput,
                Type                 = type,
                Name                 = name,
                AdditionalAssemblies = additionalAssemblies,
                Parent               = parent,
                Version              = version         // set version at last to prevent version updates of property setters above
            };

            foreach (var opEntry in parent.Operators)
            {
                var supplierOpPartDefinition = opEntry.Value.Item1.OperatorParts[0].Item2;
                supplierOpPartDefinition.ScriptChangedEvent += metaOpPart.HandleDependencyOperator_ScriptChange;
            }
            metaOpPart.InitScript(script, version);
            metaManager.AddMetaOperatorPart(metaOpPart);

            return(Tuple.Create(metaInstanceID, metaOpPart));
        }
Exemplo n.º 5
0
        public MetaOperatorPart Clone(string name)
        {
            var opPart = new MetaOperatorPart(Guid.NewGuid())
            {
                Version              = Version,
                CreateFunc           = CreateFunc,
                IsMultiInput         = IsMultiInput,
                Type                 = Type,
                AdditionalAssemblies = AdditionalAssemblies
            };

            opPart.Name = name;

            if (Script != null)
            {
                var nameWithoutEnding = name.EndsWith("Func") ? name.Substring(0, name.Length - 4) : name;
                opPart.Script = ScriptCodeDefinition.UpdateClassNameAndNamespaceInScript(opPart.ScriptNamespace, nameWithoutEnding, Script);
                opPart.Compile();
            }

            return(opPart);
        }
Exemplo n.º 6
0
        private string GenerateOutputIds(MetaOperator metaOp, MetaOperatorPart codeMetaOpPart)
        {
            var lines   = new List <string>();
            var outputs = metaOp.GetOrderedOutputs().ToList();

            outputs.Reverse();
            if (outputs.Count > 0)
            {
                var outputName = Utilities.AdjustOpPartNameForCode(outputs[0].Name);
                lines.Insert(0, string.Format("    {0} = {1}", outputName, outputs.Count - 1));
            }
            for (int i = 1; i < outputs.Count; ++i)
            {
                var outputName = Utilities.AdjustOpPartNameForCode(outputs[i].Name);
                lines.Insert(0, string.Format("    {0} = {1},", outputName, outputs.Count - 1 - i));
            }
            lines.Insert(0, "{");
            lines.Insert(0, "private enum OutputId");

            lines.Add("}");
            return(string.Join("\n", lines));
        }
Exemplo n.º 7
0
        private string GenerateParameters(MetaOperator metaOp, MetaOperatorPart codeMetaOpPart)
        {
            var inputGroups = from input in metaOp.GetOrderedInputs()
                              group input by input.Name.Split(new[] { '.' })[0] into g
                              select new { Name = g.Key, Inputs = g.ToArray() };

            var lines = new List <string>();

            foreach (var group in inputGroups)
            {
                var inputGroupName = Utilities.AdjustOpPartNameForCode(group.Name);

                switch (group.Inputs[0].OpPart.Type)
                {
                case FunctionType.Float:
                    switch (group.Inputs.Length)
                    {
                    case 1:
                        lines.Add(string.Format("float {0};", inputGroupName));
                        break;

                    case 2:
                    case 3:
                    case 4:
                        lines.Add(string.Format("float{0} {1};", group.Inputs.Length, inputGroupName));
                        break;
                    }
                    break;

                case FunctionType.Image:
                    lines.Add(string.Format("Texture2D {0};", inputGroupName));
                    break;

                default:
                    break;
                }
            }
            return(string.Join("\n", lines));
        }
Exemplo n.º 8
0
        private string GenerateUsings(MetaOperator metaOp, MetaOperatorPart codeMetaOpPart)
        {
            var defaultUsings = "using System;\n" +
                                "using System.Collections.Generic;\n" +
                                "using System.Linq;\n" +
                                "using System.Text;\n" +
                                "using SharpDX;\n" +
                                "using SharpDX.Direct3D11;\n" +
                                "using SharpDX.Windows;";

            var opPartDefinitions = from opEntry in metaOp.Operators
                                    let opDefinition = opEntry.Value.Item1
                                                       where opDefinition.IsBasic
                                                       from opPartDefinition in opDefinition.OperatorParts
                                                       select opPartDefinition.Item2;

            foreach (var supplierAssemblyOpPartDefinition in opPartDefinitions)
            {
                defaultUsings += "\n" + "using Framefield.Core.ID" + supplierAssemblyOpPartDefinition.ID.ToString().Replace('-', '_') + "; // " + supplierAssemblyOpPartDefinition.Name;
            }

            return(defaultUsings);
        }
Exemplo n.º 9
0
        public MetaOperatorPart GetMetaOperatorPart(Guid id)
        {
            MetaOperatorPart metaOpPart;

            if (!_metaOpParts.TryGetValue(id, out metaOpPart))
            {
                Logger.Error("Part of operator definition not found ({0}). Trying to patch this part with a new generic definition...", id.ToString());

                var type = FunctionType.Generic;
                Func <Guid, OperatorPart.Function, bool, string, OperatorPart> createFunc = (lid, defaultFunction, isMultiInput, name) => {
                    var lopPart = Utilities.CreateValueOpPart(lid, null, isMultiInput);
                    lopPart.Type = type;
                    lopPart.Name = name;
                    return(lopPart);
                };
                metaOpPart = new MetaOperatorPart(id)
                {
                    CreateFunc = createFunc, Type = type
                };
                AddMetaOperatorPart(metaOpPart);
            }
            return(metaOpPart);
        }
Exemplo n.º 10
0
 public string GenerateSectionCode(string sectionId, MetaOperator metaOp, MetaOperatorPart codeMetaOpPart)
 {
     return(_codeSectionGenerators[sectionId](metaOp, codeMetaOpPart));
 }
Exemplo n.º 11
0
        private string GenerateParams(MetaOperator metaOp, MetaOperatorPart codeMetaOpPart)
        {
            var lines = new List <string>();
            int idx   = 0;

            var inputGroups = from input in metaOp.GetOrderedInputs()
                              group input by input.Name.Split(new[] { '.' })[0] into g
                              select new { Name = g.Key, Inputs = g.ToArray() };

            foreach (var group in inputGroups)
            {
                foreach (var input in group.Inputs)
                {
                    var inputName = Utilities.AdjustOpPartNameForCode(input.Name);

                    switch (input.OpPart.Type)
                    {
                    case FunctionType.Float:
                    {
                        var typeConverter = input.IsEnum ? "(int) " : string.Empty;
                        lines.Add(string.Format("var {0} = {1}inputs[(int)InputId.{0}].Eval(context).Value;", inputName, typeConverter));
                        break;
                    }

                    case FunctionType.Text:
                        lines.Add(string.Format("var {0} = inputs[(int)InputId.{0}].Eval(context).Text;", inputName));
                        break;

                    case FunctionType.Image:
                        lines.Add(string.Format("var {0} = inputs[(int)InputId.{0}].Eval(context).Image; // Needs to be checked for null!", inputName));
                        break;

                    case FunctionType.Dynamic:
                        lines.Add(string.Format("var {0} = inputs[(int)InputId.{0}].Eval(context).Dynamic;  // Needs to be checked for null!", inputName));
                        break;

                    case FunctionType.Mesh:
                        lines.Add(string.Format("var {0} = inputs[(int)InputId.{0}].Eval(context).Mesh;", inputName));
                        break;

                    case FunctionType.Generic:
                    case FunctionType.Scene:
                    default:
                        lines.Add(string.Format("var {0} = inputs[(int)InputId.{0}];", inputName));
                        break;
                    }
                    ++idx;
                }

                if (group.Inputs.Count() > 1)
                {
                    // real group -> generate specific data type object (e.g. Color4, Vector3, ...)
                    var    groupName           = Utilities.AdjustOpPartNameForCode(group.Name);
                    string type                = string.Empty;
                    var    firstInputName      = group.Inputs[0].Name;
                    var    extensionIndex      = firstInputName.IndexOf('.') + 1;
                    var    firstInputExtension = firstInputName.Substring(extensionIndex, firstInputName.Length - extensionIndex);
                    var    typeSize            = group.Inputs.Count().ToString();
                    if (firstInputExtension == "R")
                    {
                        type = "Color4";
                    }
                    else if (firstInputExtension == "X")
                    {
                        type = "Vector" + typeSize;
                    }
                    else if (firstInputExtension == "Width")
                    {
                        type = "Vector" + typeSize;
                    }
                    else
                    {
                        type = "Vector" + typeSize;
                    }

                    var groupLineBuilder = new StringBuilder(string.Format("var {0} = new {1}(", groupName, type));
                    foreach (var input in group.Inputs)
                    {
                        var inputName = Utilities.AdjustOpPartNameForCode(input.Name);
                        groupLineBuilder.AppendFormat("{0}, ", inputName);
                    }
                    groupLineBuilder.Remove(groupLineBuilder.Length - 2, 2); // remove last ", "
                    groupLineBuilder.Append(");");
                    lines.Add(groupLineBuilder.ToString());
                }
            }
            return(string.Join("\n", lines));
        }
Exemplo n.º 12
0
 public MetaOutput(Guid id, string name, MetaOperatorPart opPart)
 {
     ID     = id;
     Name   = name;
     OpPart = opPart;
 }