Ejemplo n.º 1
0
        /// <summary>
        /// Recycles unused resource with the specified recycle policy.
        /// </summary>
        /// <param name="recyclePolicy">The recycle policy.</param>
        /// <exception cref="System.ArgumentNullException">recyclePolicy</exception>
        public void Recycle(GraphicsResourceRecyclePolicyDelegate recyclePolicy)
        {
            if (recyclePolicy == null)
            {
                throw new ArgumentNullException("recyclePolicy");
            }

            // Global lock to be threadsafe.
            lock (thisLock)
            {
                Recycle(textureCache, recyclePolicy);
                Recycle(bufferCache, recyclePolicy);
            }
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Recycles the specified cache.
 /// </summary>
 /// <typeparam name="TKey">The type of the t key.</typeparam>
 /// <param name="cache">The cache.</param>
 /// <param name="recyclePolicy">The recycle policy.</param>
 private void Recycle <TKey>(Dictionary <TKey, List <GraphicsResourceLink> > cache, GraphicsResourceRecyclePolicyDelegate recyclePolicy)
 {
     foreach (var resourceList in cache.Values)
     {
         for (int i = resourceList.Count - 1; i >= 0; i--)
         {
             var resourceLink = resourceList[i];
             if (resourceLink.ReferenceCount == 0)
             {
                 if (recyclePolicy(resourceLink))
                 {
                     resourceLink.Resource.Dispose();
                     resourceList.RemoveAt(i);
                 }
                 // Reset the access count
                 resourceLink.AccessCountSinceLastRecycle = 0;
             }
         }
     }
 }