namespace AcDream.App.Rendering; internal interface IGameRenderResourceLifetime { TerrainAtlas AcquireTerrainAtlas(Func factory); } /// /// Sole lifetime owner for render resources that are borrowed by, but not /// owned by, their renderers. /// internal sealed class GameRenderResourceLifetime : IGameRenderResourceLifetime { private readonly OwnedResourceSlot _terrainAtlas = new(); private readonly OwnedResourceSlot _skyShader = new(); public TerrainAtlas AcquireTerrainAtlas(Func factory) => _terrainAtlas.Acquire(factory); public Shader AcquireSkyShader(Func factory) => _skyShader.Acquire(factory); public void ReleaseTerrainAtlas() => _terrainAtlas.Release(); public void ReleaseSkyShader() => _skyShader.Release(); }