public void Load(string url, int version, ResolveAction resolve, FallbackAction fallback) { CorgiMemoryChunk chunk = null; if (data.TryGetValue(url, out chunk)) { if (chunk.version >= version) { queue.Remove(chunk.url); queue.AddFirst(chunk.url); resolve(chunk.tex); return; } else { queue.Remove(chunk.url); RemoveChunk(chunk); } } ResolveAction newResolve = (tex) => { Debug.Log("memory new resolved!"); resolve(tex); Save(tex, url, version); }; fallback(url, version, newResolve); }
public void Save(Texture2D tex, string url, int version) { if (tex == null) { if (chunkData.ContainsKey(url)) { chunkData.Remove(url); } if (chunkPriorityQueue.Any(x => x == url)) { chunkPriorityQueue.Remove(url); } return; } var size = tex.GetRawTextureData().Length; chunkData[url] = new CorgiMemoryChunk() { url = url, version = version, tex = tex, size = size }; chunkPriorityQueue.AddFirst(url); useSize += size; while (capacity < useSize) { RemoveLastChunk(); } }
public void Save(Texture2D tex, string url, int version) { var size = tex.GetRawTextureData().Length; data[url] = new CorgiMemoryChunk() { url = url, version = version, tex = tex, size = size }; queue.AddFirst(url); useSize += size; while (capacity < useSize) { RemoveLastChunk(); } }
public void Load(string url, int version, ResolveAction resolve, FallbackAction fallback) { CorgiMemoryChunk chunk = null; if (chunkData.TryGetValue(url, out chunk)) { // 아래 레이어에서 로드중인데 계속 요청이 들어오면 해당 key resolveQueue에 저장했다가 완료시 한꺼번에 호출 if (chunk == null) { Debug.Log("fetch pending.. " + url + " v." + version); ResolveAction delegates; if (resolveQueues.TryGetValue(url, out delegates)) { delegates += resolve; } else { resolveQueues.Add(url, resolve); } return; } else if (version >= 0 && chunk.version >= version) { chunkPriorityQueue.Remove(chunk.url); chunkPriorityQueue.AddFirst(chunk.url); resolve(null, chunk.tex); return; } else { chunkPriorityQueue.Remove(chunk.url); RemoveChunk(chunk); } } //아래 레이어에서 로드중인경우 체크용으로 해당 key chunk에 null을 넣어둔다. chunkData.Add(url, null); fallback(url, version, (bytes, tex) => { resolve(bytes, tex); OnResolve(url, version, tex); }); }