private static RuntimeShaderProfilesAsset Create() { RuntimeShaderProfilesAsset asset = ScriptableObject.CreateInstance <RuntimeShaderProfilesAsset>(); asset.ShaderInfo = new List <RuntimeShaderInfo>(); ShaderInfo[] allShaderInfo = ShaderUtil.GetAllShaderInfo().OrderBy(si => si.name).ToArray(); HashSet <string> shaderNames = new HashSet <string>(); for (int i = 0; i < allShaderInfo.Length; ++i) { ShaderInfo shaderInfo = allShaderInfo[i]; Shader shader = Shader.Find(shaderInfo.name); RuntimeShaderInfo profile = Create(shader); asset.ShaderInfo.Add(profile); if (shaderNames.Contains(shaderInfo.name)) { Debug.LogWarning("Shader with same name already exists. Consider renaming " + shaderInfo.name + " shader. File: " + AssetDatabase.GetAssetPath(shader)); } else { shaderNames.Add(shaderInfo.name); } } return(asset); }
public RuntimeShaderUtil() { RuntimeShaderProfilesAsset asset = Resources.Load <RuntimeShaderProfilesAsset>("Lists/ShaderProfiles"); if (asset == null) { Debug.LogError("Unable to find RuntimeShaderProfilesAsset. Click Tools->Runtime SaveLoad2->Libraries->Create Shader Profiles"); return; } m_nameToShaderInfo = new Dictionary <string, RuntimeShaderInfo>(); for (int i = 0; i < asset.ShaderInfo.Count; ++i) { RuntimeShaderInfo info = asset.ShaderInfo[i]; if (info != null) { if (m_nameToShaderInfo.ContainsKey(info.Name)) { Debug.LogWarning("Shader with " + info.Name + " already exists."); } else { m_nameToShaderInfo.Add(info.Name, info); } } } }
public static RuntimeShaderProfilesAsset CreateProfile() { RuntimeShaderProfilesAsset asset = Create(); string dir = RTSLPath.UserRoot; if (!Directory.Exists(Path.GetFullPath(dir))) { Directory.CreateDirectory(Path.GetFullPath(dir)); } if (!Directory.Exists(Path.GetFullPath(dir + "/" + RTSLPath.LibrariesFolder))) { AssetDatabase.CreateFolder(dir, RTSLPath.LibrariesFolder); } dir = dir + "/" + RTSLPath.LibrariesFolder; if (!Directory.Exists(Path.GetFullPath(dir + "/Resources"))) { AssetDatabase.CreateFolder(dir, "Resources"); } dir = dir + "/Resources"; if (!Directory.Exists(Path.GetFullPath(dir + "/Lists"))) { AssetDatabase.CreateFolder(dir, "Lists"); } string path = RTSLPath.UserRoot + "/" + RTSLPath.LibrariesFolder + "/Resources/Lists/ShaderProfiles.asset"; AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport); AssetDatabase.DeleteAsset(path); AssetDatabase.CreateAsset(asset, path); AssetDatabase.SaveAssets(); return(asset); }
public static void CreateProfile() { RuntimeShaderProfilesAsset asset = Create(); string dir = RTSLPath.UserRoot; string dataPath = Application.dataPath; if (!Directory.Exists(dataPath + dir)) { Directory.CreateDirectory(dataPath + dir); } if (!Directory.Exists(dataPath + dir + "/" + RTSLPath.LibrariesFolder)) { AssetDatabase.CreateFolder("Assets" + dir, RTSLPath.LibrariesFolder); } dir = dir + "/" + RTSLPath.LibrariesFolder; if (!Directory.Exists(dataPath + dir + "/Resources")) { AssetDatabase.CreateFolder("Assets" + dir, "Resources"); } dir = dir + "/Resources"; if (!Directory.Exists(dataPath + dir + "/Lists")) { AssetDatabase.CreateFolder("Assets" + dir, "Lists"); } dir = dir + "/Lists"; string path = "Assets" + RTSLPath.UserRoot + "/" + RTSLPath.LibrariesFolder + "/Resources/Lists/ShaderProfiles.asset"; AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport); AssetDatabase.DeleteAsset(path); AssetDatabase.CreateAsset(asset, path); AssetDatabase.SaveAssets(); Selection.activeObject = asset; EditorGUIUtility.PingObject(asset); }