Store rendererd source on the layer instead of the layer state
This commit is contained in:
@@ -57,7 +57,6 @@ import {listen, unlistenByKey} from '../events.js';
|
|||||||
* @typedef {Object} State
|
* @typedef {Object} State
|
||||||
* @property {import("./Layer.js").default} layer Layer.
|
* @property {import("./Layer.js").default} layer Layer.
|
||||||
* @property {number} opacity Opacity, the value is rounded to two digits to appear after the decimal point.
|
* @property {number} opacity Opacity, the value is rounded to two digits to appear after the decimal point.
|
||||||
* @property {import("../source/Source.js").default|undefined} source Source being rendered (only for multi-source layers).
|
|
||||||
* @property {boolean} visible Visible.
|
* @property {boolean} visible Visible.
|
||||||
* @property {boolean} managed Managed.
|
* @property {boolean} managed Managed.
|
||||||
* @property {import("../extent.js").Extent} [extent] Extent.
|
* @property {import("../extent.js").Extent} [extent] Extent.
|
||||||
|
|||||||
@@ -325,6 +325,12 @@ class WebGLTileLayer extends BaseTileLayer {
|
|||||||
*/
|
*/
|
||||||
this.sources_ = options.sources;
|
this.sources_ = options.sources;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {SourceType|null}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
this.renderedSource_ = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {number}
|
* @type {number}
|
||||||
* @private
|
* @private
|
||||||
@@ -373,10 +379,7 @@ class WebGLTileLayer extends BaseTileLayer {
|
|||||||
* @return {SourceType} The source being rendered.
|
* @return {SourceType} The source being rendered.
|
||||||
*/
|
*/
|
||||||
getRenderSource() {
|
getRenderSource() {
|
||||||
return (
|
return this.renderedSource_ || this.getSource();
|
||||||
/** @type {SourceType} */ (this.getLayerState().source) ||
|
|
||||||
this.getSource()
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -426,7 +429,7 @@ class WebGLTileLayer extends BaseTileLayer {
|
|||||||
const layerRenderer = this.getRenderer();
|
const layerRenderer = this.getRenderer();
|
||||||
let canvas;
|
let canvas;
|
||||||
for (let i = 0, ii = sources.length; i < ii; ++i) {
|
for (let i = 0, ii = sources.length; i < ii; ++i) {
|
||||||
this.getLayerState().source = sources[i];
|
this.renderedSource_ = sources[i];
|
||||||
if (layerRenderer.prepareFrame(frameState)) {
|
if (layerRenderer.prepareFrame(frameState)) {
|
||||||
canvas = layerRenderer.renderFrame(frameState);
|
canvas = layerRenderer.renderFrame(frameState);
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
test/rendering/cases/webgl-invisible-group/expected.png
Normal file
BIN
test/rendering/cases/webgl-invisible-group/expected.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 867 B |
27
test/rendering/cases/webgl-invisible-group/main.js
Normal file
27
test/rendering/cases/webgl-invisible-group/main.js
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
import Group from '../../../../src/ol/layer/Group.js';
|
||||||
|
import Map from '../../../../src/ol/Map.js';
|
||||||
|
import OSM from '../../../../src/ol/source/OSM.js';
|
||||||
|
import TileLayer from '../../../../src/ol/layer/WebGLTile.js';
|
||||||
|
import View from '../../../../src/ol/View.js';
|
||||||
|
|
||||||
|
new Map({
|
||||||
|
layers: [
|
||||||
|
new Group({
|
||||||
|
visible: false,
|
||||||
|
layers: [
|
||||||
|
new TileLayer({
|
||||||
|
source: new OSM(),
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
target: 'map',
|
||||||
|
view: new View({
|
||||||
|
center: [0, 0],
|
||||||
|
zoom: 0,
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
render({
|
||||||
|
message: 'webgl tile layer in an invisible group is not rendered',
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user