Refactor terrain chunk structure and improve geometry disposal logic
This commit is contained in:
@@ -240,7 +240,8 @@ interface CachedMaterialTexture {
|
||||
}
|
||||
|
||||
interface RuntimeTerrainRenderChunkObjects {
|
||||
levels: Mesh<BufferGeometry, Material>[];
|
||||
mesh: Mesh<BufferGeometry, Material>;
|
||||
levelGeometries: BufferGeometry[];
|
||||
activeLevelIndex: number;
|
||||
worldCenter: Vector3;
|
||||
diagonal: number;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user