Reduce wall rebuilds during window and door placement

This commit is contained in:
sudhir
2026-05-20 00:53:10 +00:00
committed by open-pascal
parent fe68dbeebd
commit d48be77f5d
7 changed files with 62 additions and 30 deletions
@@ -287,6 +287,7 @@ export function usePlacementCoordinator(config: PlacementCoordinatorConfig): Rea
const basePlaneRef = useRef<Mesh>(null!)
const gridPosition = useRef(new Vector3(0, 0, 0))
const lastRawPos = useRef(new Vector3(0, 0, 0))
const lastWallDirtyAtRef = useRef(new Map<string, number>())
const placementState = useRef<PlacementState>(
config.initialState ?? {
surface: 'floor',
@@ -742,7 +743,13 @@ export function usePlacementCoordinator(config: PlacementCoordinatorConfig): Rea
}
// Mark parent wall dirty so it rebuilds geometry — only when position changed
if (result.dirtyNodeId && posChanged) {
useScene.getState().dirtyNodes.add(result.dirtyNodeId)
const now = globalThis.performance?.now?.() ?? Date.now()
const last = lastWallDirtyAtRef.current.get(result.dirtyNodeId) ?? 0
// Wall rebuilds can trigger expensive CSG; throttle live previews to avoid FPS collapse.
if (now - last > 120) {
lastWallDirtyAtRef.current.set(result.dirtyNodeId, now)
useScene.getState().dirtyNodes.add(result.dirtyNodeId)
}
}
// Publish live transform for 2D floorplan