summaryrefslogtreecommitdiff
path: root/Assets/ThirdParty/VRM/VRMShaders/ShaderProperty/Editor/ShaderPropMenu.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/ThirdParty/VRM/VRMShaders/ShaderProperty/Editor/ShaderPropMenu.cs')
-rw-r--r--Assets/ThirdParty/VRM/VRMShaders/ShaderProperty/Editor/ShaderPropMenu.cs99
1 files changed, 99 insertions, 0 deletions
diff --git a/Assets/ThirdParty/VRM/VRMShaders/ShaderProperty/Editor/ShaderPropMenu.cs b/Assets/ThirdParty/VRM/VRMShaders/ShaderProperty/Editor/ShaderPropMenu.cs
new file mode 100644
index 00000000..b13dec97
--- /dev/null
+++ b/Assets/ThirdParty/VRM/VRMShaders/ShaderProperty/Editor/ShaderPropMenu.cs
@@ -0,0 +1,99 @@
+using System.Reflection;
+using System.Linq;
+using UnityEditor;
+using UnityEngine;
+using System.IO;
+using UniGLTF.ShaderPropExporter;
+using System.Collections.Generic;
+
+namespace UniGLTF
+{
+ public static class ShaderPropMenu
+ {
+#if VRM_DEVELOP
+ [MenuItem("VRM/ShaderProperty/PreExport ShaderProps")]
+#endif
+ public static void PreExport()
+ {
+ foreach (var fi in typeof(PreExportShaders).GetFields(
+ BindingFlags.Static
+ | BindingFlags.Public
+ | BindingFlags.NonPublic))
+ {
+ var attr = fi.GetCustomAttributes(true).FirstOrDefault(y => y is PreExportShadersAttribute);
+ if (attr != null)
+ {
+ var supportedShaders = fi.GetValue(null) as SupportedShader[];
+ foreach (var supported in supportedShaders)
+ {
+ PreExport(supported);
+ }
+ }
+ }
+ }
+
+ static string EscapeShaderName(string name)
+ {
+ return name.Replace("/", "_").Replace(" ", "_");
+ }
+
+ static string ExportDir
+ {
+ get
+ {
+ return Application.dataPath + "/VRM/ShaderProperty/Runtime";
+ }
+ }
+
+ static void PreExport(SupportedShader supportedShader)
+ {
+ var shader = Shader.Find(supportedShader.ShaderName);
+ var props = ShaderProps.FromShader(shader);
+
+ var path = Path.Combine(ExportDir, supportedShader.TargetFolder);
+ path = Path.Combine(path, EscapeShaderName(supportedShader.ShaderName) + ".cs").Replace("\\", "/");
+ Debug.LogFormat("PreExport: {0}", path);
+ File.WriteAllText(path, ToString(props, shader.name));
+ }
+
+ static string ToString(ShaderProps props, string shaderName)
+ {
+ var list = new List<string>();
+ foreach (var prop in props.Properties)
+ {
+ list.Add(string.Format("new ShaderProperty(\"{0}\", ShaderPropertyType.{1})\r\n", prop.Key, prop.ShaderPropertyType));
+ }
+
+ return string.Format(@"using System.Collections.Generic;
+
+
+namespace UniGLTF.ShaderPropExporter
+{{
+ public static partial class PreShaderPropExporter
+ {{
+ [PreExportShader]
+ static KeyValuePair<string, ShaderProps> {0}
+ {{
+ get
+ {{
+ return new KeyValuePair<string, ShaderProps>(
+ ""{1}"",
+ new ShaderProps
+ {{
+ Properties = new ShaderProperty[]{{
+{2}
+ }}
+ }}
+ );
+ }}
+ }}
+ }}
+}}
+"
+, EscapeShaderName(shaderName)
+, shaderName
+, string.Join(",", list.ToArray()));
+ }
+
+ }
+}