Files
Project-M/Packages/com.rukhanka.animation/Rukhanka.Toolbox/GPU/SparseUploaderPool.cs
T
2026-05-31 14:27:52 -07:00

72 lines
1.9 KiB
C#

using System;
using System.Collections.Generic;
using Unity.Rendering;
using UnityEngine;
using UnityEngine.Assertions;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
namespace Rukhanka.Toolbox
{
public class SparseUploaderPool: IDisposable
{
Stack<SparseUploader> freeUploaders;
List<SparseUploader> allUploaders;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public SparseUploaderPool()
{
freeUploaders = new ();
allUploaders = new ();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public void Dispose()
{
foreach (var u in allUploaders)
{
u.Dispose();
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public void FrameCleanup()
{
foreach (var u in allUploaders)
{
u.FrameCleanup();
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public SparseUploader GetUploader(GraphicsBuffer gb)
{
SparseUploader rv;
if (freeUploaders.Count > 0)
{
rv = freeUploaders.Pop();
}
else
{
rv = new SparseUploader(gb);
allUploaders.Add(rv);
Assert.IsTrue(allUploaders.Count < 0xff, "Looks like 'PutUploader' call is forgotten somewhere! There are too much of created uploaders.");
}
rv.ReplaceBuffer(gb);
return rv;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public void PutUploader(SparseUploader su)
{
freeUploaders.Push(su);
}
}
}