auto-git:
[change] src/viewport-three/viewport-host.ts
This commit is contained in:
@@ -1250,6 +1250,30 @@ export class ViewportHost {
|
|||||||
this.currentSimulationMembershipSignatures = nextMembershipSignatures;
|
this.currentSimulationMembershipSignatures = nextMembershipSignatures;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private canReuseTerrainRenderObjectsForDocument(
|
||||||
|
previousDocument: SceneDocument | null,
|
||||||
|
nextDocument: SceneDocument
|
||||||
|
): boolean {
|
||||||
|
if (
|
||||||
|
previousDocument === null ||
|
||||||
|
previousDocument.materials !== nextDocument.materials
|
||||||
|
) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const previousTerrainIds = Object.keys(previousDocument.terrains);
|
||||||
|
const nextTerrainIds = Object.keys(nextDocument.terrains);
|
||||||
|
|
||||||
|
if (previousTerrainIds.length !== nextTerrainIds.length) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return nextTerrainIds.every(
|
||||||
|
(terrainId) =>
|
||||||
|
previousDocument.terrains[terrainId] === nextDocument.terrains[terrainId]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
updateSelection(selection: EditorSelection, activeSelectionId: string | null) {
|
updateSelection(selection: EditorSelection, activeSelectionId: string | null) {
|
||||||
const previousSelection = this.currentSelection;
|
const previousSelection = this.currentSelection;
|
||||||
const selectionChanged = !areEditorSelectionsEqual(
|
const selectionChanged = !areEditorSelectionsEqual(
|
||||||
@@ -1280,6 +1304,12 @@ export class ViewportHost {
|
|||||||
}
|
}
|
||||||
|
|
||||||
updateDocument(document: SceneDocument) {
|
updateDocument(document: SceneDocument) {
|
||||||
|
const reuseTerrainRenderObjects =
|
||||||
|
this.canReuseTerrainRenderObjectsForDocument(
|
||||||
|
this.currentDocument,
|
||||||
|
document
|
||||||
|
);
|
||||||
|
|
||||||
this.activeTerrainBrushStroke = null;
|
this.activeTerrainBrushStroke = null;
|
||||||
this.currentDocument = document;
|
this.currentDocument = document;
|
||||||
this.viewportSceneBounds = resolveViewportDocumentBounds(document);
|
this.viewportSceneBounds = resolveViewportDocumentBounds(document);
|
||||||
@@ -1289,11 +1319,16 @@ export class ViewportHost {
|
|||||||
this.rebuildLocalLights(document);
|
this.rebuildLocalLights(document);
|
||||||
this.rebuildLightVolumes(document);
|
this.rebuildLightVolumes(document);
|
||||||
this.rebuildBrushMeshes(document, this.currentSelection);
|
this.rebuildBrushMeshes(document, this.currentSelection);
|
||||||
|
if (reuseTerrainRenderObjects) {
|
||||||
|
this.updateTerrainLodVisibility();
|
||||||
|
this.syncTerrainBrushPreview();
|
||||||
|
} else {
|
||||||
this.rebuildTerrains(
|
this.rebuildTerrains(
|
||||||
document,
|
document,
|
||||||
this.currentSelection,
|
this.currentSelection,
|
||||||
this.currentActiveSelectionId
|
this.currentActiveSelectionId
|
||||||
);
|
);
|
||||||
|
}
|
||||||
this.rebuildPaths(document, this.currentSelection);
|
this.rebuildPaths(document, this.currentSelection);
|
||||||
this.rebuildEntityMarkers(document, this.currentSelection);
|
this.rebuildEntityMarkers(document, this.currentSelection);
|
||||||
this.rebuildModelInstances(document, this.currentSelection);
|
this.rebuildModelInstances(document, this.currentSelection);
|
||||||
|
|||||||
Reference in New Issue
Block a user