acdream/src/AcDream.App/Rendering/GameRenderResourceLifetime.cs
Erik 6a2fe98cc4 refactor(app): compose world rendering startup
Move Region/environment, mandatory modern rendering, terrain, WB, texture, and sampler construction behind the typed Phase-4 composition boundary. Give every fallible GL constructor prefix retryable ownership so partial startup failure cannot leak or replay resource deletion while preserving the accepted render path and DAT inputs.

Co-authored-by: Codex <codex@openai.com>
2026-07-22 16:46:05 +02:00

26 lines
855 B
C#

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