Esempio n. 1
0
    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);
    }
Esempio n. 2
0
    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();
        }
    }
Esempio n. 3
0
    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();
        }
    }
Esempio n. 4
0
    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);
        });
    }