diff --git a/rendering/cases/layer-vectortile-opacity/expected.png b/rendering/cases/layer-vectortile-opacity/expected.png new file mode 100644 index 0000000000..4cdca58a93 Binary files /dev/null and b/rendering/cases/layer-vectortile-opacity/expected.png differ diff --git a/rendering/cases/layer-vectortile-opacity/main.js b/rendering/cases/layer-vectortile-opacity/main.js new file mode 100644 index 0000000000..bda563a18c --- /dev/null +++ b/rendering/cases/layer-vectortile-opacity/main.js @@ -0,0 +1,30 @@ +import MVT from '../../../src/ol/format/MVT.js'; +import Map from '../../../src/ol/Map.js'; +import VectorTileLayer from '../../../src/ol/layer/VectorTile.js'; +import VectorTileSource from '../../../src/ol/source/VectorTile.js'; +import View from '../../../src/ol/View.js'; +import {createXYZ} from '../../../src/ol/tilegrid.js'; + +new Map({ + layers: [ + new VectorTileLayer({ + opacity: 0.1, + source: new VectorTileSource({ + format: new MVT(), + tileGrid: createXYZ(), + url: '/data/tiles/mapbox-streets-v6/{z}/{x}/{y}.vector.pbf', + transition: 0, + }), + }), + ], + target: 'map', + view: new View({ + center: [1825927.7316762917, 6143091.089223046], + zoom: 14, + }), +}); + +render({ + message: 'Vector tile layer renders', + tolerance: 0.02, +}); diff --git a/rendering/cases/layer-vectortile-rendermode-vector-opacity/expected.png b/rendering/cases/layer-vectortile-rendermode-vector-opacity/expected.png new file mode 100644 index 0000000000..147fb61264 Binary files /dev/null and b/rendering/cases/layer-vectortile-rendermode-vector-opacity/expected.png differ diff --git a/rendering/cases/layer-vectortile-rendermode-vector-opacity/main.js b/rendering/cases/layer-vectortile-rendermode-vector-opacity/main.js new file mode 100644 index 0000000000..bb36089195 --- /dev/null +++ b/rendering/cases/layer-vectortile-rendermode-vector-opacity/main.js @@ -0,0 +1,32 @@ +import MVT from '../../../src/ol/format/MVT.js'; +import Map from '../../../src/ol/Map.js'; +import VectorTileLayer from '../../../src/ol/layer/VectorTile.js'; +import VectorTileRenderType from '../../../src/ol/layer/VectorTileRenderType.js'; +import VectorTileSource from '../../../src/ol/source/VectorTile.js'; +import View from '../../../src/ol/View.js'; +import {createXYZ} from '../../../src/ol/tilegrid.js'; + +new Map({ + layers: [ + new VectorTileLayer({ + renderMode: VectorTileRenderType.VECTOR, + opacity: 0.1, + source: new VectorTileSource({ + format: new MVT(), + tileGrid: createXYZ(), + url: '/data/tiles/mapbox-streets-v6/{z}/{x}/{y}.vector.pbf', + transition: 0, + }), + }), + ], + target: 'map', + view: new View({ + center: [1825927.7316762917, 6143091.089223046], + zoom: 14, + }), +}); + +render({ + message: 'Vector tile layer renders with vector render mode', + tolerance: 0.02, +}); diff --git a/src/ol/renderer/canvas/VectorTileLayer.js b/src/ol/renderer/canvas/VectorTileLayer.js index 323651e815..36571c9880 100644 --- a/src/ol/renderer/canvas/VectorTileLayer.js +++ b/src/ol/renderer/canvas/VectorTileLayer.js @@ -604,6 +604,7 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer { * @param {import("../../PluggableMap.js").FrameState} frameState Frame state. */ renderDeclutter(frameState) { + this.getLayer().getOpacity(); const viewHints = frameState.viewHints; const hifi = !( viewHints[ViewHint.ANIMATING] || viewHints[ViewHint.INTERACTING] @@ -696,6 +697,8 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer { } const context = this.context; + const alpha = context.globalAlpha; + context.globalAlpha = layer.getOpacity(); const replayTypes = VECTOR_REPLAYS[renderMode]; const viewState = frameState.viewState; const rotation = viewState.rotation; @@ -760,6 +763,7 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer { } } } + context.globalAlpha = alpha; return this.container; }