/// <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; } }
/// <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(); } } }
/// <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); } }