Skip to content

Commit 9a2afe1

Browse files
committed
fix VectorLayer render Performance issues
1 parent adba026 commit 9a2afe1

File tree

1 file changed

+16
-14
lines changed

1 file changed

+16
-14
lines changed

src/renderer/layer/vectorlayer/VectorLayerCanvasRenderer.ts

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import * as vec3 from '../../../core/util/vec3';
88
import Canvas from '../../../core/Canvas';
99
import type { Painter, CollectionPainter } from '../../geometry';
1010
import { Point } from '../../../geo';
11-
import { Geometries } from '../../../geometry';
11+
import { Geometries, Marker } from '../../../geometry';
1212
import type { WithUndef } from '../../../types/typings';
1313

1414
const TEMP_EXTENT = new PointExtent();
@@ -70,19 +70,9 @@ class VectorLayerRenderer extends OverlayLayerCanvasRenderer {
7070
setToRedraw(): this {
7171
super.setToRedraw();
7272
this._resetProgressiveRender();
73-
this._resetGeosCollisionState();
7473
return this;
7574
}
7675

77-
_resetGeosCollisionState() {
78-
const geos = this.layer._geoList || [];
79-
for (let i = 0, len = geos.length; i < len; i++) {
80-
const geo = geos[i];
81-
if (geo.isPoint) {
82-
geo._collided = false;
83-
}
84-
}
85-
}
8676

8777
//@internal
8878
_geoIsCollision(geo: GeoType, collisionIndex: any) {
@@ -378,20 +368,32 @@ class VectorLayerRenderer extends OverlayLayerCanvasRenderer {
378368

379369
//@internal
380370
_collidesGeos() {
371+
const geos = this._geosToDraw;
381372
const collision = this.layer.options['collision'];
382373
if (!collision) {
374+
//reset points _collided
375+
for (let i = 0, len = geos.length; i < len; i++) {
376+
const geo = geos[i];
377+
if (geo.isPoint) {
378+
(geo as Marker)._collided = false;
379+
}
380+
}
383381
return this;
384382
}
385383
const collisionScope = this.layer.options['collisionScope'];
386384
const collisionIndex = this.layer.getCollisionIndex();
387385
if (collisionScope === 'layer') {
388386
collisionIndex.clear();
389387
}
390-
const geos = this._geosToDraw;
391388
this._geosToDraw = [];
392389
for (let i = 0, len = geos.length; i < len; i++) {
393-
if (this._geoIsCollision(geos[i], collisionIndex)) {
394-
continue;
390+
const geo = geos[i];
391+
if (geo.isPoint) {
392+
(geo as Marker)._collided = false;
393+
if (this._geoIsCollision(geo, collisionIndex)) {
394+
(geo as Marker)._collided = true;
395+
continue;
396+
}
395397
}
396398
this._geosToDraw.push(geos[i]);
397399
}

0 commit comments

Comments
 (0)