Refactor terrain chunk structure and improve geometry disposal logic
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user