浏览代码

Adds support for an external viewer to dndxc (#1181)

This is configurable via Tools | Options. The '%in' string will be replaced with the path to a temporary file with the rewritten XML, with the shaders within their respective nodes.
Marcelo Lopez Ruiz 7 年之前
父节点
当前提交
7dcbce5b5f
共有 2 个文件被更改,包括 45 次插入1 次删除
  1. 33 1
      tools/clang/tools/dotnetc/EditorForm.cs
  2. 12 0
      tools/clang/tools/dotnetc/EditorModels.cs

+ 33 - 1
tools/clang/tools/dotnetc/EditorForm.cs

@@ -2781,6 +2781,39 @@ namespace MainNs
         {
             this.RenderLogBox.Clear();
 
+            string payloadText = GetShaderOpPayload();
+
+            if (this.settingsManager.ExternalRenderEnabled)
+            {
+                string path = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "dndxc-ext-render.xml");
+                try
+                {
+                    System.IO.File.WriteAllText(path, payloadText);
+                }
+                catch (Exception writeErr)
+                {
+                    HandleException(writeErr, "Unable to write render input to " + path);
+                    return;
+                }
+                try
+                {
+                    string arguments = this.settingsManager.ExternalRenderCommand;
+                    arguments = arguments.Replace("%in", path);
+                    var process = System.Diagnostics.Process.Start("cmd.exe", "/c " + arguments);
+                    if (process != null)
+                    {
+                        process.Dispose();
+                    }
+                }
+                catch (Exception runErr)
+                {
+                    HandleException(runErr, "Unable to run external render command.");
+                    return;
+                }
+
+                return;
+            }
+
             try
             {
                 this.hlslHost.EnsureActive();
@@ -2791,7 +2824,6 @@ namespace MainNs
                 return;
             }
 
-            string payloadText = GetShaderOpPayload();
             try
             {
                 SendHostMessageAndLogReply(HlslHost.HhMessageId.StartRendererMsgId);

+ 12 - 0
tools/clang/tools/dotnetc/EditorModels.cs

@@ -528,6 +528,18 @@ namespace MainNs
             get { return this.GetPathTextOrDefault("", "external", "fun"); }
             set { this.SetPathText(value, "external", "fun"); }
         }
+        [Description("The command to run in place of View | Render, replacing %in with XML path.")]
+        public string ExternalRenderCommand
+        {
+            get { return this.GetPathTextOrDefault("", "external-render", "command"); }
+            set { this.SetPathText(value, "external-render", "command"); }
+        }
+        [Description("Whether to use an external render tool.")]
+        public bool ExternalRenderEnabled
+        {
+            get { return bool.Parse(this.GetPathTextOrDefault("false", "external-render", "enabled")); }
+            set { this.SetPathText(value.ToString(), "external-render", "enabled"); }
+        }
 
         #endregion Public properties.