/// <summary> /// https://github.com/KhronosGroup/glTF/blob/main/specification/2.0/schema/glTF.schema.json /// /// extensionUsed の更新を各拡張自身にやらせるのは無駄だし、手動でコントロールするのも間違いの元である。 /// 完成品の JSON から後付けで作ることにした。 /// /// * Exporter しか使わない処理なので、GC, 処理速度は気にしてない /// /// </summary> /// <param name="src"></param> /// <returns></returns> public static string FindUsedExtensionsAndUpdateJson(string src) { var parsed = src.ParseAsJson(); // unique な extension 名を収集 var used = new HashSet <string>(); foreach (var path in TraverseJsonPath(parsed, null)) { if (TryGetExtensionName(path, out string extensionName)) { used.Add(extensionName); } } // json 加工 var f = new JsonFormatter(); CopyJson(used.ToArray(), f, parsed, 0); // bom無しutf8 var bytes = f.GetStoreBytes(); var utf8 = new UTF8Encoding(false); return(utf8.GetString(bytes.Array, bytes.Offset, bytes.Count)); }
public override string ToString() { var f = new JsonFormatter(); Serialize(f); var bytes = f.GetStoreBytes(); return("export: " + Encoding.UTF8.GetString(bytes.Array, bytes.Offset, bytes.Count)); }
/// <summary> /// for unit test /// /// parse exported value /// </summary> public override glTFExtensionImport Deserialize() { var f = new JsonFormatter(); f.GenSerialize(this); var b = f.GetStoreBytes(); var json = Encoding.UTF8.GetString(b.Array, b.Offset, b.Count); return(new glTFExtensionImport(json.ParseAsJson())); }
public byte[] ToGlbBytes(ArraySegment <Byte> bytes, bool UseUniJSONSerializer = false) { string json; if (UseUniJSONSerializer) { var f = new JsonFormatter(); f.Serialize(this); json = Encoding.UTF8.GetString(f.GetStoreBytes().ToArray()); } else { json = ToJson(); } RemoveUnusedExtensions(json); return(Glb.ToBytes(json, bytes)); }
public void PrimitiveTest() { var prims = new List <glTFPrimitives> { new glTFPrimitives { attributes = new glTFAttributes { POSITION = 0, } } }; var f = new JsonFormatter(); f.Serialize(prims); var json = new Utf8String(f.GetStoreBytes()).ToString(); Debug.Log(json); }