From aff35d2a76ba520df0ff156c329001e5ff7b4f65 Mon Sep 17 00:00:00 2001 From: Erik Date: Sun, 10 May 2026 07:54:40 +0200 Subject: [PATCH] refactor(A.5 T15): TerrainModernRenderer.AddLandblockWithMesh entry point T13 routes worker-built meshes from LandblockStreamResult.Loaded.MeshData into the renderer. AddLandblockWithMesh accepts a prebuilt mesh + origin and delegates to the existing AddLandblock(uint, LandblockMeshData, Vector3) so both paths share one upload path (Approach B -- AddLandblock already takes a prebuilt mesh; no inline build to extract). GameWindow's T16 lambda captures liveCenterX/Y and passes the derived origin; the renderer stays origin-agnostic. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/AcDream.App/Rendering/TerrainModernRenderer.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/AcDream.App/Rendering/TerrainModernRenderer.cs b/src/AcDream.App/Rendering/TerrainModernRenderer.cs index 536acf5..3f62493 100644 --- a/src/AcDream.App/Rendering/TerrainModernRenderer.cs +++ b/src/AcDream.App/Rendering/TerrainModernRenderer.cs @@ -89,6 +89,18 @@ public sealed unsafe class TerrainModernRenderer : IDisposable _indirectBuffer = _gl.GenBuffer(); } + /// + /// Two-tier streaming entry point. Accepts a prebuilt mesh from + /// built on the worker + /// thread, together with the world-space origin computed by the caller + /// (render-thread GameWindow derives it from landblockId + liveCenterX/Y). + /// + /// Delegates to + /// so both paths share one upload path. Per Phase A.5 spec T15. + /// + public void AddLandblockWithMesh(uint landblockId, LandblockMeshData meshData, Vector3 worldOrigin) + => AddLandblock(landblockId, meshData, worldOrigin); + public void AddLandblock(uint landblockId, LandblockMeshData meshData, Vector3 worldOrigin) { ArgumentNullException.ThrowIfNull(meshData);