void ResourceManager::unload(ResourcePtr &res)
    {
        if (res->referCount() > 1)
        {
            Resource *r = res;
            res = nullptr;

            if (r->referCount() == 1)
            {
                // Only one instance is used. It should be deleted.
                auto itr = mResourceCache.find(r->getName());

                if (itr != mResourceCache.end())
                {
                    // The resource is valid and in the cache.
                    Resources &resources = itr->second;

                    if (res->isCloned())
                    {
                        // erase cloning resource
                        resources.erase(r->getCloneID());
                    }
                    else
                    {
                        // erase original resource
                        resources.erase(0);
                    }
                }
            }
        }
        else
        {
            res = nullptr;
        }
    }