Files
BABA_YAGA/Packages/app.rive.rive-unity/Runtime/Components/Public/RenderPipelines/URP/RenderPassPool.cs
2026-05-19 17:39:03 +07:00

56 lines
1.5 KiB
C#

#if RIVE_USING_URP
using UnityEngine.Pool;
using UnityEngine.Rendering.Universal;
namespace Rive.Components.URP
{
/// <summary>
/// A pool of RenderPass objects to reduce the overhead of creating and destroying them.
/// </summary>
internal class RenderPassPool
{
private ObjectPool<RenderPass> m_pool;
public RenderPassPool(int defaultCapacity = 10, int maxSize = 10000)
{
m_pool = new ObjectPool<RenderPass>(
createFunc: CreateRenderPass,
actionOnGet: null,
actionOnRelease: OnReleaseRenderPass,
collectionCheck: true,
defaultCapacity: defaultCapacity,
maxSize: maxSize
);
}
public RenderPass Get(IRenderer riveRenderer, RenderPassEvent passEvent, string profilerMarkerName)
{
var renderPass = m_pool.Get();
renderPass.Init(riveRenderer, passEvent, profilerMarkerName);
return renderPass;
}
public void Release(RenderPass renderPass)
{
m_pool.Release(renderPass);
}
private RenderPass CreateRenderPass()
{
return new RenderPass();
}
private void OnReleaseRenderPass(RenderPass renderPass)
{
// Reset the RenderPass state when releasing it back to the pool
renderPass.Init(null, RenderPassEvent.AfterRenderingOpaques, "");
}
public void Clear()
{
m_pool.Clear();
}
}
}
#endif