From 4f7043ffddce3cede5a372c67e0cb2986495d0fc Mon Sep 17 00:00:00 2001 From: ousttrue Date: Wed, 27 Oct 2021 17:58:35 +0900 Subject: [PATCH] Implement `data:` uri dispatch --- Assets/UniGLTF/Runtime/UniGLTF/IO/GltfData.cs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/GltfData.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/GltfData.cs index ffb08e768..5130311af 100644 --- a/Assets/UniGLTF/Runtime/UniGLTF/IO/GltfData.cs +++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/GltfData.cs @@ -107,13 +107,28 @@ namespace UniGLTF ); } + Dictionary> _dataCache = new Dictionary>(); + public ArraySegment GetBytesFromUri(string uri) { if (string.IsNullOrEmpty(uri)) { throw new ArgumentNullException(); } - return _storage.Get(uri); + if (uri.StartsWith("data:", StringComparison.Ordinal)) + { + if (_dataCache.TryGetValue(uri, out ArraySegment data)) + { + return data; + } + data = new ArraySegment(UriByteBuffer.ReadEmbedded(uri)); + _dataCache.Add(uri, data); + return data; + } + else + { + return _storage.Get(uri); + } } public ArraySegment GetBytes(int bufferIndex)