Refactor terrain chunk structure and improve geometry disposal logic

This commit is contained in:
2026-04-29 23:14:33 +02:00
parent 4caff728d1
commit 0b5de5b6bc
2 changed files with 14 additions and 6 deletions

View File

@@ -240,7 +240,8 @@ interface CachedMaterialTexture {
}
interface RuntimeTerrainRenderChunkObjects {
levels: Mesh<BufferGeometry, Material>[];
mesh: Mesh<BufferGeometry, Material>;
levelGeometries: BufferGeometry[];
activeLevelIndex: number;
worldCenter: Vector3;
diagonal: number;

View File

@@ -8965,9 +8965,11 @@ export class ViewportHost {
const nextMaterial = this.createTerrainMaterial(displayedTerrain);
for (const chunk of renderObjects.chunks) {
for (const mesh of chunk.levels) {
mesh.material = nextMaterial;
}
chunk.mesh.material = nextMaterial;
}
for (const pickMesh of renderObjects.pickMeshes) {
pickMesh.material = nextMaterial;
}
renderObjects.material = nextMaterial;
@@ -9602,13 +9604,18 @@ export class ViewportHost {
private clearTerrains() {
for (const renderObjects of this.terrainRenderObjects.values()) {
this.terrainGroup.remove(renderObjects.group);
const geometries = new Set<BufferGeometry>();
for (const chunk of renderObjects.chunks) {
for (const mesh of chunk.levels) {
mesh.geometry.dispose();
for (const geometry of chunk.levelGeometries) {
geometries.add(geometry);
}
}
for (const geometry of geometries) {
geometry.dispose();
}
renderObjects.material.dispose();
for (const material of renderObjects.debugMaterials) {