public static void SerializeShader(Shader shader, ByteBuffer buffer) { buffer.AppendUnicodeString(shader.name); int total = ShaderUtil.GetPropertyCount(shader); buffer.Append(total); for (int i = 0; i < total; i++) { NGShaderUtility.SerializeShaderProperty(shader, i, buffer); } }
private void ReferenceAll() { try { string[] assets = Directory.GetFiles(Application.dataPath, "*", SearchOption.AllDirectories); for (int i = 0; i < assets.Length; i++) { if (assets[i].EndsWith(".meta") == true || assets[i].EndsWith(".shader") == false) { continue; } string p = assets[i].Substring(Application.dataPath.Length - "Assets".Length); AssetDatabase.LoadAssetAtPath <Shader>(p); EditorUtility.DisplayProgressBar(Constants.PackageTitle, "Scanning assets (" + i + " / " + assets.Length + ")", (float)i / (float)assets.Length); } Shader[] shaders = Resources.FindObjectsOfTypeAll <Shader>(); List <Shader> references = new List <Shader>(); for (int i = 0; i < shaders.Length; i++) { if ((shaders[i].hideFlags & HideFlags.DontSave) == 0) { references.Add(shaders[i]); } } NGServerScene scene = this.shaders.serializedObject.targetObject as NGServerScene; //scene.shaderReferences.shaders = references.ToArray(); EditorUtility.DisplayProgressBar(Constants.PackageTitle, "Saving shaders...", 0.99F); this.shaders.arraySize = references.Count; for (int i = 0; i < references.Count; i++) { this.shaders.GetArrayElementAtIndex(i).objectReferenceValue = references[i]; } this.shaders.serializedObject.ApplyModifiedProperties(); EditorUtility.DisplayProgressBar(Constants.PackageTitle, "Saving shaders' properties...", 1F); ByteBuffer buffer = Utility.GetBBuffer(); buffer.Append(references.Count); for (int i = 0; i < references.Count; i++) { NGShaderUtility.SerializeShader(references[i], buffer); } scene.shaderReferences.properties = Utility.ReturnBBuffer(buffer); //byte[] raw = Utility.ReturnBBuffer(buffer); //this.properties.arraySize = raw.Length; //for (int i = 0; i < raw.Length; i++) // this.properties.GetArrayElementAtIndex(i).intValue = raw[i]; this.shaders.serializedObject.Update(); } finally { EditorUtility.ClearProgressBar(); } }