From 4f40cdbd942ef01b968834c5922d3ae7f363e9a4 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Fri, 1 May 2026 18:03:45 +0200 Subject: [PATCH] auto-git: [change] src/viewport-three/viewport-host.ts --- src/viewport-three/viewport-host.ts | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/viewport-three/viewport-host.ts b/src/viewport-three/viewport-host.ts index 19c52273..6cb00037 100644 --- a/src/viewport-three/viewport-host.ts +++ b/src/viewport-three/viewport-host.ts @@ -1325,6 +1325,7 @@ export class ViewportHost { this.rebuildLightVolumes(document); this.rebuildBrushMeshes(document, this.currentSelection); if (reuseTerrainRenderObjects) { + this.refreshReusedTerrainRenderDirtyChunks(document); this.updateTerrainLodVisibility(); this.syncTerrainBrushPreview(); } else { @@ -6534,6 +6535,10 @@ export class ViewportHost { const renderObjects = this.createTerrainRenderObjects(displayedTerrain); this.terrainGroup.add(renderObjects.group); this.terrainRenderObjects.set(displayedTerrain.id, renderObjects); + this.terrainRenderRevisions.set( + displayedTerrain.id, + getTerrainRenderDirtyRevision(displayedTerrain) + ); } this.applyShadowState(); @@ -6660,6 +6665,30 @@ export class ViewportHost { } } + private refreshReusedTerrainRenderDirtyChunks(document: SceneDocument) { + for (const terrain of getTerrains(document.terrains)) { + const renderObjects = this.terrainRenderObjects.get(terrain.id); + + if (renderObjects === undefined) { + continue; + } + + const previousRevision = this.terrainRenderRevisions.get(terrain.id) ?? 0; + const dirtyState = getTerrainRenderDirtyBoundsSince( + terrain, + previousRevision + ); + + this.terrainRenderRevisions.set(terrain.id, dirtyState.revision); + + if (dirtyState.dirtyBounds === null) { + continue; + } + + this.refreshDisplayedTerrainDirtyBounds(terrain.id, dirtyState.dirtyBounds); + } + } + private createPathLineGeometry(path: ScenePath): BufferGeometry { const points = path.points.map( (point) =>