Example #1
0
        /// <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));
        }
Example #2
0
        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));
        }
Example #3
0
        /// <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()));
        }
Example #4
0
        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));
        }
Example #5
0
        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);
        }