예제 #1
0
 /// <summary>
 /// Add a render bucket to the queue. Overwrites an existing bucket.
 /// </summary>
 /// <param name="type">Bucket type to add</param>
 /// <param name="bucket">Bucket to add</param>
 public void AddRenderBucket(RenderBucketType type, IRenderBucket bucket)
 {
     lock (_syncObject) {
         if (bucket == null)
         {
             throw new ArgumentNullException("RenderBucket cannot be null");
         }
         _buckets[(int)type] = bucket;
     }
 }
예제 #2
0
 /// <summary>
 /// Sort, then render each bucket.
 /// </summary>
 public void SortAndRender()
 {
     lock (_syncObject) {
         foreach (KeyValuePair <int, IRenderBucket> kv in _buckets)
         {
             IRenderBucket bucket = kv.Value;
             bucket.Sort();
             bucket.Render();
         }
     }
 }
예제 #3
0
        /// <summary>
        /// Removes the renderable from the queue.
        /// </summary>
        /// <param name="renderable">Renderable to remove</param>
        /// <returns>True if it was removed, if it was found</returns>
        public bool RemoveFromQueue(IRenderable renderable)
        {
            lock (_syncObject) {
                RenderBucketType type = renderable.RenderBucketType;
                if (type == RenderBucketType.Skip)
                {
                    return(false);
                }

                if (type == RenderBucketType.Default)
                {
                    type = RenderBucketType.Opaque;
                }

                IRenderBucket bucket = GetRenderBucket(type);
                if (bucket != null)
                {
                    bucket.Remove(renderable);
                    return(true);
                }
                return(false);
            }
        }