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)