public static bool Get <T>(RenderPipeline.CameraRenderingPath path, out T value) where T : PipelineSharedData
 {
     foreach (var i in allEvents)
     {
         if (i.key == path && i.value.GetType() == typeof(T))
         {
             value = i.value as T;
             return(true);
         }
     }
     value = null;
     return(false);
 }
        public static T Get <T, Arg>(RenderPipeline.CameraRenderingPath path, Arg arg, Func <Arg, T> getFunc) where T : PipelineSharedData
        {
            foreach (var i in allEvents)
            {
                if (i.key == path && i.value.GetType() == typeof(T))
                {
                    return(i.value as T);
                }
            }
            T val = getFunc(arg);

            allEvents.Add(new Pair <RenderPipeline.CameraRenderingPath, PipelineSharedData>
            {
                key   = path,
                value = val
            });
            return(val);
        }
 private void SetPipelineEnable(bool value, bool after, bool before, RenderPipeline.CameraRenderingPath path)
 {
     if (value)
     {
         DrawEvent evt;
         if (!RenderPipeline.allDrawEvents.TryGetValue(path, out evt))
         {
             evt = new DrawEvent(10);
             RenderPipeline.allDrawEvents.Add(path, evt);
         }
         if (after)
         {
             evt.drawEvents.InsertTo(this, compareFunc);
         }
         if (before)
         {
             evt.preRenderEvents.InsertTo(this, compareFunc);
         }
         if (Application.isPlaying)
         {
             OnEventEnable();
         }
     }
     else
     {
         DrawEvent evt;
         if (RenderPipeline.allDrawEvents.TryGetValue(path, out evt))
         {
             if (after)
             {
                 evt.drawEvents.Remove(this);
             }
             if (before)
             {
                 evt.preRenderEvents.Remove(this);
             }
         }
         if (Application.isPlaying)
         {
             OnEventDisable();
         }
     }
 }
 private void SetBefore(bool value, RenderPipeline.CameraRenderingPath path)
 {
     if (value)
     {
         DrawEvent evt;
         if (!RenderPipeline.allDrawEvents.TryGetValue(path, out evt))
         {
             evt.drawEvents      = new List <PipelineEvent>(10);
             evt.preRenderEvents = new List <PipelineEvent>(10);
             RenderPipeline.allDrawEvents.Add(path, evt);
         }
         evt.preRenderEvents.InsertTo(this, compareFunc);
     }
     else
     {
         DrawEvent evt;
         if (RenderPipeline.allDrawEvents.TryGetValue(path, out evt))
         {
             evt.preRenderEvents.Remove(this);
         }
     }
 }