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>
26 lines
855 B
C#
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();
|
|
}
|