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 { interface RuntimeTerrainRenderChunkObjects {
levels: Mesh<BufferGeometry, Material>[]; mesh: Mesh<BufferGeometry, Material>;
levelGeometries: BufferGeometry[];
activeLevelIndex: number; activeLevelIndex: number;
worldCenter: Vector3; worldCenter: Vector3;
diagonal: number; diagonal: number;

View File

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