// In 2021.1 this is part of Unity #if !UNITY_2021_1_OR_NEWER namespace UnityEngine.Pool { /// /// Generic pool without collection checks. /// This class is an alternative for the for object that allocate memory when they are being compared. /// It is the case for the CullingResult class from Unity, and because of this in HDRP HDCullingResults generates garbage whenever we use ==, .Equals or ReferenceEquals. /// This pool doesn't do any of these comparison because we don't check if the stack already contains the element before releasing it. /// /// Type of the objects in the pool. internal static class UnsafeGenericPool where T : class, new() { // Object pool to avoid allocations. internal static readonly ObjectPool s_Pool = new ObjectPool(() => new T(), null, null, null, false); /// /// Returns an object from the pool. /// /// A new object from the pool. public static T Get() => s_Pool.Get(); /// /// Get a new PooledObject which can be used to automatically return the pooled object when disposed. /// /// Output typed object. /// A new PooledObject. public static PooledObject Get(out T value) => s_Pool.Get(out value); /// /// Returns an object to the pool. /// /// Object to release. public static void Release(T toRelease) => s_Pool.Release(toRelease); } } #endif