Exemple #1
0
        public Node CreateNode(ShaderFragmentArchive.Function fn, string archiveName, ShaderPatcherLayer.PreviewSettings previewSettings)
        {
            var node = new Node((fn != null) ? fn.Name : VisibleName(archiveName));

            node.Tag = new ShaderProcedureNodeTag(archiveName);

            var previewItem = new ShaderFragmentPreviewItem();

            if (previewSettings != null)
            {
                previewItem.PreviewSettings = previewSettings;
            }

            // use composition to access some exported types --
            {
                CompositionBatch compositionBatch = new CompositionBatch();
                compositionBatch.AddPart(previewItem);
                _composer.Compose(compositionBatch);
            }
            node.AddItem(previewItem);

            // Drop-down selection box for "preview mode"
            var enumList             = AsEnumList(previewItem.Geometry, PreviewGeoNames);
            var previewModeSelection = new HyperGraph.Items.NodeDropDownItem(enumList.Item1.ToArray(), enumList.Item2, false, false);

            node.AddItem(previewModeSelection);
            previewModeSelection.SelectionChanged +=
                (object sender, HyperGraph.Items.AcceptNodeSelectionChangedEventArgs args) =>
            {
                if (sender is HyperGraph.Items.NodeDropDownItem)
                {
                    var item = (HyperGraph.Items.NodeDropDownItem)sender;
                    previewItem.Geometry = AsEnumValue <ShaderPatcherLayer.PreviewGeometry>(item.Items[args.Index], PreviewGeoNames);
                }
            };

            // Text item box for output visualization string
            // note --  should could potentially become a more complex editing control
            //          it might be useful to have some preset defaults and helpers rather than just
            //          requiring the user to construct the raw string
            var outputToVisualize = new HyperGraph.Items.NodeTextBoxItem(previewItem.OutputToVisualize, false, false);

            node.AddItem(outputToVisualize);
            outputToVisualize.TextChanged +=
                (object sender, HyperGraph.Items.AcceptNodeTextChangedEventArgs args) => { previewItem.OutputToVisualize = args.Text; };

            if (fn != null)
            {
                foreach (var param in fn.InputParameters)
                {
                    node.AddItem(new ShaderFragmentNodeItem(param.Name, param.Type, archiveName + ":" + param.Name, true, false));
                }
                foreach (var output in fn.Outputs)
                {
                    node.AddItem(new ShaderFragmentNodeItem(output.Name, output.Type, archiveName + ":" + output.Name, false, true));
                }
            }
            return(node);
        }
Exemple #2
0
        public Node CreateEmptyParameterNode(ParamSourceType sourceType, String archiveName, String title)
        {
            var node = new Node(title);

            node.Tag = new ShaderParameterNodeTag(archiveName);

            var enumList      = AsEnumList(sourceType, ParamSourceTypeNames);
            var typeSelection = new HyperGraph.Items.NodeDropDownItem(enumList.Item1.ToArray(), enumList.Item2, false, false);

            node.AddItem(typeSelection);
            typeSelection.SelectionChanged += ParameterNodeTypeChanged;
            return(node);
        }
Exemple #3
0
        public static Node CreateEmptyParameterNode(ShaderFragmentArchive.Parameter.SourceType sourceType, String archiveName, String title)
        {
            var node = new Node(title);

            node.Tag = new ShaderParameterNodeTag(archiveName);
            int           selectedIndex = 0;
            List <String> typeNames     = new List <String>();

            foreach (var e in Enum.GetValues(typeof(ShaderFragmentArchive.Parameter.SourceType)).Cast <ShaderFragmentArchive.Parameter.SourceType>())
            {
                if (e == sourceType)
                {
                    selectedIndex = typeNames.Count;
                }
                typeNames.Add(AsString(e));
            }
            var typeSelection = new HyperGraph.Items.NodeDropDownItem(typeNames.ToArray(), selectedIndex, false, false);

            node.AddItem(typeSelection);
            typeSelection.SelectionChanged += ParameterNodeTypeChanged;
            return(node);
        }
Exemple #4
0
 public static Node CreateEmptyParameterNode(ShaderFragmentArchive.Parameter.SourceType sourceType, String archiveName, String title)
 {
     var node = new Node(title);
     node.Tag = new ShaderParameterNodeTag(archiveName);
     int selectedIndex = 0;
     List<String> typeNames = new List<String>();
     foreach (var e in Enum.GetValues(typeof(ShaderFragmentArchive.Parameter.SourceType)).Cast<ShaderFragmentArchive.Parameter.SourceType>())
     {
         if (e == sourceType)
         {
             selectedIndex = typeNames.Count;
         }
         typeNames.Add(AsString(e));
     }
     var typeSelection = new HyperGraph.Items.NodeDropDownItem(typeNames.ToArray(), selectedIndex, false, false);
     node.AddItem(typeSelection);
     typeSelection.SelectionChanged += ParameterNodeTypeChanged;
     return node;
 }