diff options
Diffstat (limited to 'Assets/ThirdParty/VRM/VRMShaders/ShaderProperty/Editor/ShaderPropMenu.cs')
-rw-r--r-- | Assets/ThirdParty/VRM/VRMShaders/ShaderProperty/Editor/ShaderPropMenu.cs | 99 |
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())); + } + + } +} |