Fix rendercomplete for WebGLPoints layer and subclasses

This commit is contained in:
Andreas Hocevar
2022-02-01 14:23:57 +01:00
parent 10b97d3993
commit 7c3c1ac354
5 changed files with 89 additions and 4 deletions
+5 -2
View File
@@ -943,10 +943,13 @@ class PluggableMap extends BaseObject {
/**
* @return {boolean} Layers have sources that are still loading.
*/
getLoading() {
getLoadingOrNotReady() {
const layerStatesArray = this.getLayerGroup().getLayerStatesArray();
for (let i = 0, ii = layerStatesArray.length; i < ii; ++i) {
const layer = layerStatesArray[i].layer;
if (!layer.getRenderer().ready) {
return true;
}
const source = /** @type {import("./layer/Layer.js").default} */ (
layer
).getSource();
@@ -1561,7 +1564,7 @@ class PluggableMap extends BaseObject {
this.renderComplete_ =
!this.tileQueue_.getTilesLoading() &&
!this.tileQueue_.getCount() &&
!this.getLoading();
!this.getLoadingOrNotReady();
if (!this.postRenderTimeoutHandle_) {
this.postRenderTimeoutHandle_ = setTimeout(() => {
+5
View File
@@ -17,6 +17,11 @@ class LayerRenderer extends Observable {
constructor(layer) {
super();
/**
* @type {boolean} The renderer is initialized and ready to render.
*/
this.ready = true;
/** @private */
this.boundHandleImageChange_ = this.handleImageChange_.bind(this);
+4 -1
View File
@@ -137,6 +137,8 @@ class WebGLPointsLayerRenderer extends WebGLLayerRenderer {
postProcesses: options.postProcesses,
});
this.ready = false;
this.sourceRevision_ = -1;
this.verticesBuffer_ = new WebGLArrayBuffer(ARRAY_BUFFER, DYNAMIC_DRAW);
@@ -320,7 +322,7 @@ class WebGLPointsLayerRenderer extends WebGLLayerRenderer {
event.data.renderInstructions
);
}
this.ready = true;
this.getLayer().changed();
}
}.bind(this)
@@ -610,6 +612,7 @@ class WebGLPointsLayerRenderer extends WebGLLayerRenderer {
};
// additional properties will be sent back as-is by the worker
message['projectionTransform'] = projectionTransform;
this.ready = false;
this.worker_.postMessage(message, [this.renderInstructions_.buffer]);
this.renderInstructions_ = null;