ol 10.0.1-dev.1723498832296 → 10.0.1-dev.1723626173667

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -139,6 +139,9 @@ export type ArgValidator = (arg0: Array<EncodedExpression>, arg1: number, arg2:
139
139
  * * `['time']` The time in seconds since the creation of the layer (WebGL only).
140
140
  * * `['var', 'varName']` fetches a value from the style variables; will throw an error if that variable is undefined
141
141
  * * `['zoom']` The current zoom level (WebGL only).
142
+ * * `['line-metric']` returns the M component of the current point on a line (WebGL only); in case where the geometry layout of the line
143
+ * does not contain an M component (e.g. XY or XYZ), 0 is returned; 0 is also returned for geometries other than lines.
144
+ * Please note that the M component will be linearly interpolated between the two points composing a segment.
142
145
  *
143
146
  * * Math operators:
144
147
  * * `['*', value1, value2, ...]` multiplies the values (either numbers or colors)
@@ -1 +1 @@
1
- {"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["expression.js"],"names":[],"mappings":"AAiKA;;;;GAIG;AACH,+BAHW,MAAM,GACL,MAAM,CAgBjB;AAED;;;;GAIG;AACH,oCAJW,MAAM,YACN,MAAM,GACL,OAAO,CAIlB;AAED;;;;GAIG;AACH,sCAJW,MAAM,aACN,MAAM,GACL,OAAO,CAIlB;AAED;;;;GAIG;AACH,6BAJW,MAAM,YACN,MAAM,GACL,OAAO,CAIlB;AAmCD;;GAEG;AAEH;;;;;;GAMG;AAEH;;GAEG;AACH,qCAFY,cAAc,CASzB;AAED;;GAEG;AAEH;;;;;GAKG;AACH,+BALW,iBAAiB,gBACjB,MAAM,WACN,cAAc,GACb,UAAU,CA6FrB;AAqoBD;;;;GAIG;AACH,8CAHW,OAAO,qBAAqB,EAAE,OAAO,GAAC,OAAO,sBAAsB,EAAE,OAAO,GAC3E,OAAO,GAAC,YAAY,GAAC,SAAS,GAAC,EAAE,CA2B5C;AA74BD,yBAA0B;AAC1B,iCAA2C;AAC3C,gCAA0C;AAC1C,gCAA0C;AAC1C,+BAAyC;AACzC,qCAA+C;AAC/C,8BAAwC;AACxC,6BAAiD;AAqEjD;;GAEG;AAEH;IACE;;;OAGG;IACH,kBAHW,MAAM,SACN,YAAY,EAUtB;IAFC,aAAgB;IAChB,oBAAkB;CAErB;AAED;IACE;;;;OAIG;IACH,kBAJW,MAAM,YACN,MAAM,WACH,UAAU,EAAA,EAMvB;IAHC,aAAgB;IAChB,iBAAwB;IACxB,mBAAgB;CAEnB;AAiID;;GAEG;AACH,kBAFU;QAAO,MAAM,GAAE,MAAM;CAAC,CAiD9B;yBAhLW,iBAAiB,GAAC,cAAc;;;;;eAK/B,GAAG,CAAC,MAAM,CAAC;;;;gBACX,GAAG,CAAC,MAAM,CAAC;;;;eACX,OAAO;;;;kBACP,OAAO;;gCAgBR,YAAY,QAAM;;;;;2BAuUlB,CAAS,IAAwB,EAAxB,KAAK,CAAC,iBAAiB,CAAC,EAAE,IAAM,EAAN,MAAM,EAAE,IAAc,EAAd,cAAc,KAAE,KAAK,CAAC,UAAU,CAAC,GAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BAldjF,KAAK,CAAC,GAAC,CAAC,GAAC,OAAO,aAAa,EAAE,KAAK,GAAC,MAAM,GAAC,MAAM,GAAC,OAAO;2BAkF1D,OAAO,GAAC,MAAM,GAAC,MAAM,GAAC,KAAK,CAAC,MAAM,CAAC;;;;qBAoNnC,CAAS,IAAK,SAAE,IAAM,EAAN,MAAM,EAAE,IAAc,EAAd,cAAc,KAAE,UAAU"}
1
+ {"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["expression.js"],"names":[],"mappings":"AAoKA;;;;GAIG;AACH,+BAHW,MAAM,GACL,MAAM,CAgBjB;AAED;;;;GAIG;AACH,oCAJW,MAAM,YACN,MAAM,GACL,OAAO,CAIlB;AAED;;;;GAIG;AACH,sCAJW,MAAM,aACN,MAAM,GACL,OAAO,CAIlB;AAED;;;;GAIG;AACH,6BAJW,MAAM,YACN,MAAM,GACL,OAAO,CAIlB;AAmCD;;GAEG;AAEH;;;;;;GAMG;AAEH;;GAEG;AACH,qCAFY,cAAc,CASzB;AAED;;GAEG;AAEH;;;;;GAKG;AACH,+BALW,iBAAiB,gBACjB,MAAM,WACN,cAAc,GACb,UAAU,CA6FrB;AAuoBD;;;;GAIG;AACH,8CAHW,OAAO,qBAAqB,EAAE,OAAO,GAAC,OAAO,sBAAsB,EAAE,OAAO,GAC3E,OAAO,GAAC,YAAY,GAAC,SAAS,GAAC,EAAE,CA2B5C;AA/4BD,yBAA0B;AAC1B,iCAA2C;AAC3C,gCAA0C;AAC1C,gCAA0C;AAC1C,+BAAyC;AACzC,qCAA+C;AAC/C,8BAAwC;AACxC,6BAAiD;AAqEjD;;GAEG;AAEH;IACE;;;OAGG;IACH,kBAHW,MAAM,SACN,YAAY,EAUtB;IAFC,aAAgB;IAChB,oBAAkB;CAErB;AAED;IACE;;;;OAIG;IACH,kBAJW,MAAM,YACN,MAAM,WACH,UAAU,EAAA,EAMvB;IAHC,aAAgB;IAChB,iBAAwB;IACxB,mBAAgB;CAEnB;AAiID;;GAEG;AACH,kBAFU;QAAO,MAAM,GAAE,MAAM;CAAC,CAkD9B;yBAjLW,iBAAiB,GAAC,cAAc;;;;;eAK/B,GAAG,CAAC,MAAM,CAAC;;;;gBACX,GAAG,CAAC,MAAM,CAAC;;;;eACX,OAAO;;;;kBACP,OAAO;;gCAgBR,YAAY,QAAM;;;;;2BAyUlB,CAAS,IAAwB,EAAxB,KAAK,CAAC,iBAAiB,CAAC,EAAE,IAAM,EAAN,MAAM,EAAE,IAAc,EAAd,cAAc,KAAE,KAAK,CAAC,UAAU,CAAC,GAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BApdjF,KAAK,CAAC,GAAC,CAAC,GAAC,OAAO,aAAa,EAAE,KAAK,GAAC,MAAM,GAAC,MAAM,GAAC,OAAO;2BAkF1D,OAAO,GAAC,MAAM,GAAC,MAAM,GAAC,KAAK,CAAC,MAAM,CAAC;;;;qBAqNnC,CAAS,IAAK,SAAE,IAAM,EAAN,MAAM,EAAE,IAAc,EAAd,cAAc,KAAE,UAAU"}
@@ -37,6 +37,9 @@ import {toSize} from '../size.js';
37
37
  * * `['time']` The time in seconds since the creation of the layer (WebGL only).
38
38
  * * `['var', 'varName']` fetches a value from the style variables; will throw an error if that variable is undefined
39
39
  * * `['zoom']` The current zoom level (WebGL only).
40
+ * * `['line-metric']` returns the M component of the current point on a line (WebGL only); in case where the geometry layout of the line
41
+ * does not contain an M component (e.g. XY or XYZ), 0 is returned; 0 is also returned for geometries other than lines.
42
+ * Please note that the M component will be linearly interpolated between the two points composing a segment.
40
43
  *
41
44
  * * Math operators:
42
45
  * * `['*', value1, value2, ...]` multiplies the values (either numbers or colors)
@@ -375,6 +378,7 @@ export const Ops = {
375
378
  Var: 'var',
376
379
  Concat: 'concat',
377
380
  GeometryType: 'geometry-type',
381
+ LineMetric: 'line-metric',
378
382
  Any: 'any',
379
383
  All: 'all',
380
384
  Not: '!',
@@ -438,6 +442,7 @@ const parsers = {
438
442
  withArgsOfType(StringType),
439
443
  ),
440
444
  [Ops.GeometryType]: createCallExpressionParser(usesGeometryType, withNoArgs),
445
+ [Ops.LineMetric]: createCallExpressionParser(withNoArgs),
441
446
  [Ops.Resolution]: createCallExpressionParser(withNoArgs),
442
447
  [Ops.Zoom]: createCallExpressionParser(withNoArgs),
443
448
  [Ops.Time]: createCallExpressionParser(withNoArgs),
package/expr/gpu.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"gpu.d.ts","sourceRoot":"","sources":["gpu.js"],"names":[],"mappings":"AA8BA;;;;GAIG;AACH,gCAHW,MAAM,GACL,MAAM,CAKjB;AAED;;;;GAIG;AACH,mCAHW,KAAK,CAAC,MAAM,CAAC,GACZ,MAAM,CASjB;AAED;;;;;;GAMG;AACH,mCALW,MAAM,GAAC,OAAO,aAAa,EAAE,KAAK,GAGjC,MAAM,CAYjB;AAED;;;;GAIG;AACH,iCAHW,MAAM,GAAC,OAAO,YAAY,EAAE,IAAI,GAC/B,MAAM,CAKjB;AAMD;;;;GAIG;AACH,kDAHW,MAAM,GACL,MAAM,CAOjB;AAED;;;;;;GAMG;AACH,qCAHW,MAAM,GACL,MAAM,CAIjB;AAED;;;;GAIG;AACH,qDAHW,MAAM,GACL,MAAM,CAIjB;AAED;;GAEG;AACH;;;GAGG;AACH;;;GAGG;AAEH;;;;;GAKG;AAEH;;;;;GAKG;AAEH;;;;;;;;;GASG;AAEH;;GAEG;AACH,yCAFY,kBAAkB,CAW7B;AAMD;;GAEG;AAEH;;;GAGG;AAEH;;;;;;GAMG;AACH,yCANW,OAAO,iBAAiB,EAAE,iBAAiB,QAC3C,MAAM,kBACN,OAAO,iBAAiB,EAAE,cAAc,sBACxC,kBAAkB,GACjB,kBAAkB,CAU7B;AA1BD,wDAAyD;6BApD5C,OAAO,iBAAiB,EAAE,cAAc;yBAIxC,OAAO,iBAAiB,EAAE,UAAU;gCAIpC,OAAO,iBAAiB,EAAE,iBAAiB;;;;;UAK1C,MAAM;;;;UACN,MAAM;;;;wBACG,OAAO,eAAe,EAAE,WAAW,KAAG,GAAC;;;;;;UAKhD,MAAM;;;;UACN,MAAM;;;;gCACY,GAAC;;;;;;;;;;gBAMnB;YAAO,MAAM,GAAE,0BAA0B;KAAC;;;;eAC1C;YAAO,MAAM,GAAE,0BAA0B;KAAC;;;;eAC1C;YAAO,MAAM,GAAE,MAAM;KAAC;;;;;;;;;;;;WAGtB,OAAO,mBAAmB,EAAE,UAAU;;iCAsBvC,MAAM;;;;uBAIN,CAAS,IAAkB,EAAlB,kBAAkB,EAAE,IAAc,EAAd,cAAc,EAAE,IAAM,EAAN,MAAM,KAAG,MAAM;2BAhL9C,4BAA4B;+BAahD,iBAAiB"}
1
+ {"version":3,"file":"gpu.d.ts","sourceRoot":"","sources":["gpu.js"],"names":[],"mappings":"AA8BA;;;;GAIG;AACH,gCAHW,MAAM,GACL,MAAM,CAKjB;AAED;;;;GAIG;AACH,mCAHW,KAAK,CAAC,MAAM,CAAC,GACZ,MAAM,CASjB;AAED;;;;;;GAMG;AACH,mCALW,MAAM,GAAC,OAAO,aAAa,EAAE,KAAK,GAGjC,MAAM,CAMjB;AAED;;;;GAIG;AACH,iCAHW,MAAM,GAAC,OAAO,YAAY,EAAE,IAAI,GAC/B,MAAM,CAKjB;AAMD;;;;GAIG;AACH,kDAHW,MAAM,GACL,MAAM,CAOjB;AAED;;;;;;GAMG;AACH,qCAHW,MAAM,GACL,MAAM,CAIjB;AAED;;;;GAIG;AACH,qDAHW,MAAM,GACL,MAAM,CAIjB;AAED;;GAEG;AACH;;;GAGG;AACH;;;GAGG;AAEH;;;;;GAKG;AAEH;;;;;GAKG;AAEH;;;;;;;;;GASG;AAEH;;GAEG;AACH,yCAFY,kBAAkB,CAW7B;AAMD;;GAEG;AAEH;;;GAGG;AAEH;;;;;;GAMG;AACH,yCANW,OAAO,iBAAiB,EAAE,iBAAiB,QAC3C,MAAM,kBACN,OAAO,iBAAiB,EAAE,cAAc,sBACxC,kBAAkB,GACjB,kBAAkB,CAU7B;AA1BD,wDAAyD;6BApD5C,OAAO,iBAAiB,EAAE,cAAc;yBAIxC,OAAO,iBAAiB,EAAE,UAAU;gCAIpC,OAAO,iBAAiB,EAAE,iBAAiB;;;;;UAK1C,MAAM;;;;UACN,MAAM;;;;wBACG,OAAO,eAAe,EAAE,WAAW,KAAG,GAAC;;;;;;UAKhD,MAAM;;;;UACN,MAAM;;;;gCACY,GAAC;;;;;;;;;;gBAMnB;YAAO,MAAM,GAAE,0BAA0B;KAAC;;;;eAC1C;YAAO,MAAM,GAAE,0BAA0B;KAAC;;;;eAC1C;YAAO,MAAM,GAAE,MAAM;KAAC;;;;;;;;;;;;WAGtB,OAAO,mBAAmB,EAAE,UAAU;;iCAsBvC,MAAM;;;;uBAIN,CAAS,IAAkB,EAAlB,kBAAkB,EAAE,IAAc,EAAd,cAAc,EAAE,IAAM,EAAN,MAAM,KAAG,MAAM;2BA1K9C,4BAA4B;+BAahD,iBAAiB"}
package/expr/gpu.js CHANGED
@@ -62,13 +62,7 @@ export function arrayToGlsl(array) {
62
62
  export function colorToGlsl(color) {
63
63
  const array = asArray(color);
64
64
  const alpha = array.length > 3 ? array[3] : 1;
65
- // all components are premultiplied with alpha value
66
- return arrayToGlsl([
67
- (array[0] / 255) * alpha,
68
- (array[1] / 255) * alpha,
69
- (array[2] / 255) * alpha,
70
- alpha,
71
- ]);
65
+ return arrayToGlsl([array[0] / 255, array[1] / 255, array[2] / 255, alpha]);
72
66
  }
73
67
 
74
68
  /**
@@ -245,6 +239,7 @@ const compilers = {
245
239
  const prefix = context.inFragmentShader ? 'v_prop_' : 'a_prop_';
246
240
  return prefix + propName;
247
241
  },
242
+ [Ops.LineMetric]: () => 'currentLineMetric', // this variable is assumed to always be present in shaders, default is 0.
248
243
  [Ops.Var]: (context, expression) => {
249
244
  const firstArg = /** @type {LiteralExpression} */ (expression.args[0]);
250
245
  const varName = /** @type {string} */ (firstArg.value);
@@ -371,14 +366,14 @@ ${tests.join('\n')}
371
366
  }
372
367
  if (compiledArgs.length === 2) {
373
368
  //grayscale with alpha
374
- return `(${compiledArgs[1]} * vec4(vec3(${compiledArgs[0]} / 255.0), 1.0))`;
369
+ return `vec4(vec3(${compiledArgs[0]} / 255.0), ${compiledArgs[1]})`;
375
370
  }
376
371
  const rgb = compiledArgs.slice(0, 3).map((color) => `${color} / 255.0`);
377
372
  if (compiledArgs.length === 3) {
378
373
  return `vec4(${rgb.join(', ')}, 1.0)`;
379
374
  }
380
375
  const alpha = compiledArgs[3];
381
- return `(${alpha} * vec4(${rgb.join(', ')}, 1.0))`;
376
+ return `vec4(${rgb.join(', ')}, ${alpha})`;
382
377
  }),
383
378
  [Ops.Band]: createCompiler(([band, xOffset, yOffset], context) => {
384
379
  if (!(GET_BAND_VALUE_FUNC in context.functions)) {
@@ -8,9 +8,10 @@
8
8
  * @param {number} stride Stride.
9
9
  * @param {import("../../transform.js").Transform} transform Transform.
10
10
  * @param {Array<number>} [dest] Destination.
11
+ * @param {number} [destinationStride] Stride of destination coordinates; if unspecified, assumed to be 2.
11
12
  * @return {Array<number>} Transformed coordinates.
12
13
  */
13
- export function transform2D(flatCoordinates: Array<number>, offset: number, end: number, stride: number, transform: import("../../transform.js").Transform, dest?: number[] | undefined): Array<number>;
14
+ export function transform2D(flatCoordinates: Array<number>, offset: number, end: number, stride: number, transform: import("../../transform.js").Transform, dest?: number[] | undefined, destinationStride?: number | undefined): Array<number>;
14
15
  /**
15
16
  * @param {Array<number>} flatCoordinates Flat coordinates.
16
17
  * @param {number} offset Offset.
@@ -1 +1 @@
1
- {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["transform.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;GAQG;AACH,6CARW,KAAK,CAAC,MAAM,CAAC,UACb,MAAM,OACN,MAAM,UACN,MAAM,aACN,OAAO,oBAAoB,EAAE,SAAS,gCAErC,KAAK,CAAC,MAAM,CAAC,CAsBxB;AAED;;;;;;;;;GASG;AACH,wCATW,KAAK,CAAC,MAAM,CAAC,UACb,MAAM,OACN,MAAM,UACN,MAAM,SACN,MAAM,UACN,KAAK,CAAC,MAAM,CAAC,gCAEZ,KAAK,CAAC,MAAM,CAAC,CA8BxB;AAED;;;;;;;;;;;GAWG;AACH,uCAVW,KAAK,CAAC,MAAM,CAAC,UACb,MAAM,OACN,MAAM,UACN,MAAM,MACN,MAAM,MACN,MAAM,UACN,KAAK,CAAC,MAAM,CAAC,gCAEZ,KAAK,CAAC,MAAM,CAAC,CA6BxB;AAED;;;;;;;;;GASG;AACH,2CATW,KAAK,CAAC,MAAM,CAAC,UACb,MAAM,OACN,MAAM,UACN,MAAM,UACN,MAAM,UACN,MAAM,gCAEL,KAAK,CAAC,MAAM,CAAC,CAwBxB"}
1
+ {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["transform.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;GASG;AACH,6CATW,KAAK,CAAC,MAAM,CAAC,UACb,MAAM,OACN,MAAM,UACN,MAAM,aACN,OAAO,oBAAoB,EAAE,SAAS,wEAGrC,KAAK,CAAC,MAAM,CAAC,CA6BxB;AAED;;;;;;;;;GASG;AACH,wCATW,KAAK,CAAC,MAAM,CAAC,UACb,MAAM,OACN,MAAM,UACN,MAAM,SACN,MAAM,UACN,KAAK,CAAC,MAAM,CAAC,gCAEZ,KAAK,CAAC,MAAM,CAAC,CA8BxB;AAED;;;;;;;;;;;GAWG;AACH,uCAVW,KAAK,CAAC,MAAM,CAAC,UACb,MAAM,OACN,MAAM,UACN,MAAM,MACN,MAAM,MACN,MAAM,UACN,KAAK,CAAC,MAAM,CAAC,gCAEZ,KAAK,CAAC,MAAM,CAAC,CA6BxB;AAED;;;;;;;;;GASG;AACH,2CATW,KAAK,CAAC,MAAM,CAAC,UACb,MAAM,OACN,MAAM,UACN,MAAM,UACN,MAAM,UACN,MAAM,gCAEL,KAAK,CAAC,MAAM,CAAC,CAwBxB"}
@@ -9,6 +9,7 @@
9
9
  * @param {number} stride Stride.
10
10
  * @param {import("../../transform.js").Transform} transform Transform.
11
11
  * @param {Array<number>} [dest] Destination.
12
+ * @param {number} [destinationStride] Stride of destination coordinates; if unspecified, assumed to be 2.
12
13
  * @return {Array<number>} Transformed coordinates.
13
14
  */
14
15
  export function transform2D(
@@ -18,15 +19,22 @@ export function transform2D(
18
19
  stride,
19
20
  transform,
20
21
  dest,
22
+ destinationStride,
21
23
  ) {
22
24
  dest = dest ? dest : [];
25
+ destinationStride = destinationStride ? destinationStride : 2;
23
26
  let i = 0;
24
27
  for (let j = offset; j < end; j += stride) {
25
28
  const x = flatCoordinates[j];
26
29
  const y = flatCoordinates[j + 1];
27
30
  dest[i++] = transform[0] * x + transform[2] * y + transform[4];
28
31
  dest[i++] = transform[1] * x + transform[3] * y + transform[5];
32
+
33
+ for (let k = 2; k < destinationStride; k++) {
34
+ dest[i++] = flatCoordinates[j + k];
35
+ }
29
36
  }
37
+
30
38
  if (dest && dest.length != i) {
31
39
  dest.length = i;
32
40
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ol",
3
- "version": "10.0.1-dev.1723498832296",
3
+ "version": "10.0.1-dev.1723626173667",
4
4
  "description": "OpenLayers mapping library",
5
5
  "keywords": [
6
6
  "map",
@@ -226,6 +226,7 @@ declare class MixedGeometryBatch {
226
226
  * @param {Feature|RenderFeature} feature Feature
227
227
  * @param {string} featureUid Feature uid
228
228
  * @param {number} stride Stride
229
+ * @param {import('../../geom/Geometry.js').GeometryLayout} [layout] Layout
229
230
  * @private
230
231
  */
231
232
  private addCoordinates_;
@@ -1 +1 @@
1
- {"version":3,"file":"MixedGeometryBatch.d.ts","sourceRoot":"","sources":["MixedGeometryBatch.js"],"names":[],"mappings":";sBAQa,OAAO,kBAAkB,EAAE,OAAO;2BAGlC,OAAO,wBAAwB,EAAE,IAAI;;;;;;;;aAKpC,OAAO,GAAC,aAAa;;;;iBACrB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;;;;;;;;;;;;;;;;;;4BAQrB,kBAAkB,GAAC,uBAAuB,GAAC,oBAAoB;;;;;;;;;aAK9D;YAAO,MAAM,GAAE,iBAAiB;KAAC;;;;qBAEjC,MAAM;;;;mBACN,MAAM;;;;gBACN,MAAM;;;;;;;;;;aAKN;YAAO,MAAM,GAAE,iBAAiB;KAAC;;;;qBAEjC,MAAM;;;;mBACN,MAAM;;;;;;;;;;aAKN;YAAO,MAAM,GAAE,iBAAiB;KAAC;;;;qBAEjC,MAAM;;AA1CpB;;GAEG;AACH;;GAEG;AAEH;;;;;;;;GAQG;AAEH;;GAEG;AAEH;;;;;;;GAOG;AAEH;;;;;;GAMG;AAEH;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH;IAEI;;OAEG;IACH,uBAAuB;IAEvB;;;;OAIG;IACH,sBAA8B;IAE9B;;;;OAIG;IACH,kBAA0B;IAE1B;;;;;OAKG;IACH,uBAAwB;IAExB;;OAEG;IACH,cAFU,oBAAoB,CAO7B;IAED;;OAEG;IACH,YAFU,kBAAkB,CAK3B;IAED;;OAEG;IACH,iBAFU,uBAAuB,CAMhC;IAGH;;;OAGG;IACH,sBAHW,KAAK,CAAC,OAAO,GAAC,aAAa,CAAC,qFAOtC;IAED;;;OAGG;IACH,oBAHW,OAAO,GAAC,aAAa,qFAa/B;IAED;;;;OAIG;IACH,uCAQC;IAED;;;;OAIG;IACH,4CASC;IAED;;;;OAIG;IACH,yCAUC;IAED;;;;OAIG;IACH,qBAuGC;IAED;;;;;;;;OAQG;IACH,wBAoJC;IAED;;;;;OAKG;IACH,uBAYC;IAED;;;;;OAKG;IACH,mBAOC;IAED;;OAEG;IACH,uBAFW,OAAO,GAAC,aAAa,QAS/B;IAED;;OAEG;IACH,uBAFW,OAAO,GAAC,aAAa,QAU/B;IAED,cAcC;IAED;;;;OAIG;IACH,uBAHW,MAAM,GACL,OAAO,GAAC,aAAa,CAIhC;CACF;0BAxiByB,yBAAyB"}
1
+ {"version":3,"file":"MixedGeometryBatch.d.ts","sourceRoot":"","sources":["MixedGeometryBatch.js"],"names":[],"mappings":";sBAQa,OAAO,kBAAkB,EAAE,OAAO;2BAGlC,OAAO,wBAAwB,EAAE,IAAI;;;;;;;;aAKpC,OAAO,GAAC,aAAa;;;;iBACrB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;;;;;;;;;;;;;;;;;;4BAQrB,kBAAkB,GAAC,uBAAuB,GAAC,oBAAoB;;;;;;;;;aAK9D;YAAO,MAAM,GAAE,iBAAiB;KAAC;;;;qBAEjC,MAAM;;;;mBACN,MAAM;;;;gBACN,MAAM;;;;;;;;;;aAKN;YAAO,MAAM,GAAE,iBAAiB;KAAC;;;;qBAEjC,MAAM;;;;mBACN,MAAM;;;;;;;;;;aAKN;YAAO,MAAM,GAAE,iBAAiB;KAAC;;;;qBAEjC,MAAM;;AA1CpB;;GAEG;AACH;;GAEG;AAEH;;;;;;;;GAQG;AAEH;;GAEG;AAEH;;;;;;;GAOG;AAEH;;;;;;GAMG;AAEH;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH;IAEI;;OAEG;IACH,uBAAuB;IAEvB;;;;OAIG;IACH,sBAA8B;IAE9B;;;;OAIG;IACH,kBAA0B;IAE1B;;;;;OAKG;IACH,uBAAwB;IAExB;;OAEG;IACH,cAFU,oBAAoB,CAO7B;IAED;;OAEG;IACH,YAFU,kBAAkB,CAK3B;IAED;;OAEG;IACH,iBAFU,uBAAuB,CAMhC;IAGH;;;OAGG;IACH,sBAHW,KAAK,CAAC,OAAO,GAAC,aAAa,CAAC,qFAOtC;IAED;;;OAGG;IACH,oBAHW,OAAO,GAAC,aAAa,qFAa/B;IAED;;;;OAIG;IACH,uCAQC;IAED;;;;OAIG;IACH,4CASC;IAED;;;;OAIG;IACH,yCAUC;IAED;;;;OAIG;IACH,qBA2GC;IAED;;;;;;;;;OASG;IACH,wBAyJC;IAED;;;;;OAKG;IACH,uBAYC;IAED;;;;;OAKG;IACH,mBAOC;IAED;;OAEG;IACH,uBAFW,OAAO,GAAC,aAAa,QAS/B;IAED;;OAEG;IACH,uBAFW,OAAO,GAAC,aAAa,QAU/B;IAED,cAcC;IAED;;;;OAIG;IACH,uBAHW,MAAM,GACL,OAAO,GAAC,aAAa,CAIhC;CACF;0BAljByB,yBAAyB"}
@@ -295,13 +295,17 @@ class MixedGeometryBatch {
295
295
  const lineGeom = /** @type {import("../../geom.js").LineString} */ (
296
296
  geometry
297
297
  );
298
+
299
+ const stride = lineGeom.getStride();
300
+
298
301
  this.addCoordinates_(
299
302
  type,
300
303
  lineGeom.getFlatCoordinates(),
301
304
  null,
302
305
  feature,
303
306
  getUid(feature),
304
- lineGeom.getStride(),
307
+ stride,
308
+ lineGeom.getLayout?.(),
305
309
  );
306
310
  break;
307
311
  }
@@ -317,9 +321,10 @@ class MixedGeometryBatch {
317
321
  * @param {Feature|RenderFeature} feature Feature
318
322
  * @param {string} featureUid Feature uid
319
323
  * @param {number} stride Stride
324
+ * @param {import('../../geom/Geometry.js').GeometryLayout} [layout] Layout
320
325
  * @private
321
326
  */
322
- addCoordinates_(type, flatCoords, ends, feature, featureUid, stride) {
327
+ addCoordinates_(type, flatCoords, ends, feature, featureUid, stride, layout) {
323
328
  /** @type {number} */
324
329
  let verticesCount;
325
330
  switch (type) {
@@ -343,6 +348,7 @@ class MixedGeometryBatch {
343
348
  feature,
344
349
  featureUid,
345
350
  stride,
351
+ layout,
346
352
  );
347
353
  }
348
354
  break;
@@ -358,6 +364,7 @@ class MixedGeometryBatch {
358
364
  feature,
359
365
  featureUid,
360
366
  stride,
367
+ layout,
361
368
  );
362
369
  }
363
370
  break;
@@ -371,6 +378,7 @@ class MixedGeometryBatch {
371
378
  feature,
372
379
  featureUid,
373
380
  null,
381
+ null,
374
382
  );
375
383
  }
376
384
  break;
@@ -386,6 +394,7 @@ class MixedGeometryBatch {
386
394
  feature,
387
395
  featureUid,
388
396
  stride,
397
+ layout,
389
398
  );
390
399
  return;
391
400
  }
@@ -427,6 +436,7 @@ class MixedGeometryBatch {
427
436
  feature,
428
437
  featureUid,
429
438
  stride,
439
+ layout,
430
440
  );
431
441
  }
432
442
  break;
@@ -460,7 +470,7 @@ class MixedGeometryBatch {
460
470
  this.lineStringBatch.verticesCount += verticesCount;
461
471
  this.lineStringBatch.geometriesCount++;
462
472
  this.lineStringBatch.entries[featureUid].flatCoordss.push(
463
- getFlatCoordinatesXY(flatCoords, stride),
473
+ getFlatCoordinatesXYM(flatCoords, stride, layout),
464
474
  );
465
475
  this.lineStringBatch.entries[featureUid].verticesCount += verticesCount;
466
476
  break;
@@ -567,4 +577,28 @@ function getFlatCoordinatesXY(flatCoords, stride) {
567
577
  return flatCoords.filter((v, i) => i % stride < 2);
568
578
  }
569
579
 
580
+ /**
581
+ * @param {Array<number>} flatCoords Flat coords
582
+ * @param {number} stride Stride
583
+ * @param {string} layout Layout
584
+ * @return {Array<number>} Flat coords with only XY components
585
+ */
586
+ function getFlatCoordinatesXYM(flatCoords, stride, layout) {
587
+ if (stride === 3 && layout === 'XYM') {
588
+ return flatCoords;
589
+ }
590
+ // this is XYZM layout
591
+ if (stride === 4) {
592
+ return flatCoords.filter((v, i) => i % stride !== 2);
593
+ }
594
+ // this is XYZ layout
595
+ if (stride === 3) {
596
+ return flatCoords.map((v, i) => (i % stride !== 2 ? v : 0));
597
+ }
598
+ // this is XY layout
599
+ return new Array(flatCoords.length * 1.5)
600
+ .fill(0)
601
+ .map((v, i) => (i % 3 === 2 ? 0 : flatCoords[Math.round(i / 1.5)]));
602
+ }
603
+
570
604
  export default MixedGeometryBatch;
@@ -8,6 +8,8 @@ export namespace Attributes {
8
8
  let INDEX: string;
9
9
  let SEGMENT_START: string;
10
10
  let SEGMENT_END: string;
11
+ let MEASURE_START: string;
12
+ let MEASURE_END: string;
11
13
  let PARAMETERS: string;
12
14
  let JOIN_ANGLES: string;
13
15
  let DISTANCE: string;
@@ -1 +1 @@
1
- {"version":3,"file":"VectorStyleRenderer.d.ts","sourceRoot":"","sources":["VectorStyleRenderer.js"],"names":[],"mappings":";;;;yBA4BU,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;cAiBF,CAAS,IAAwD,EAAnD,OAAO,yBAAyB,EAAE,iBAAiB,EAAE,IAAmC,EAAnC,OAAO,eAAe,EAAE,WAAW,KAAE,MAAM,GAAC,KAAK,CAAC,MAAM,CAAC;;mCAK7H;QAAO,MAAM,GAAE,mBAAmB;CAAC;iCACnC;QAAO,MAAM,GAAE,OAAO,oBAAoB,EAAE,YAAY;CAAC;;;;;oBAKxD,KAAK,CAAC,gBAAgB,CAAC;;;;uBACvB,KAAK,CAAC,gBAAgB,CAAC;;;;kBACvB,KAAK,CAAC,gBAAgB,CAAC;;;;6BACvB,OAAO,oBAAoB,EAAE,SAAS;;;;;;yBAKtC,YAAY,GAAC,IAAI;;;;4BACjB,YAAY,GAAC,IAAI;;;;uBACjB,YAAY,GAAC,IAAI;;;;;;;;;YAKjB,MAAM;;;;cACN,MAAM;;;;;;aAKN,OAAO,8BAA8B,EAAE,aAAa;;;;;;;;;;;;;;;0BAOrD,OAAO,sBAAsB,EAAE,UAAU,GAAC,YAAY;AA5CnE;;;;;;;GAOG;AAEH;;;GAGG;AAEH;;;;;;GAMG;AAEH;;;;;GAKG;AAEH;;;;GAIG;AAEH;;;;;;GAMG;AAEH;;GAEG;AAEH;;;;;;;;;;;;;GAaG;AACH;IACE;;;;OAIG;IACH,4BAJW,WAAW,UACX,OAAO,uBAAuB,EAAE,OAAO,sBACvC,OAAO,EAgMjB;IA7LC;;OAEG;IACH,gBAAqB;IAErB;;OAEG;IACH,6BAA8C;IAgB9C;;;OAGG;IACH,iBAAuD;IAErD;;OAEG;IACH,0BAA8D;IAC9D;;OAEG;IACH,4BAAkE;IAClE;;OAEG;IACH,qBAGC;IAGH;;;OAGG;IACH,mBAA2D;IAEzD;;OAEG;IACH,4BAAkE;IAClE;;OAEG;IACH,8BAAsE;IACtE;;OAEG;IACH,uBAGC;IAGH;;;OAGG;IACH,mBAA2D;IAEzD;;OAEG;IACH,4BAAkE;IAClE;;OAEG;IACH,8BAAsE;IACtE;;OAEG;IACH,uBAGC;IAcH;;OAEG;IACH,0BAIC;IACD;;OAEG;IACH,kBAAiC;IASjC;;;OAGG;IACH,+BAOC;IACD;;;OAGG;IACH,kCA2BC;IACD;;;OAGG;IACH,6BAYC;IAOH;;;;OAIG;IACH,+BAJW,OAAO,yBAAyB,EAAE,OAAO,aACzC,OAAO,oBAAoB,EAAE,SAAS,GACrC,OAAO,CAAC,YAAY,CAAC,CAqChC;IAED;;;;;OAKG;IACH,oCA+BC;IAED;;;;;;OAMG;IACH,gCAuEC;IAED;;;;;OAKG;IACH,gBAJW,YAAY,cACZ,OAAO,cAAc,EAAE,UAAU,qBACjC,MAAY,IAAI,QA8B1B;IAED;;;;;;;;OAQG;IACH,wBAkBC;CACF;6BAzgB4B,uBAAuB"}
1
+ {"version":3,"file":"VectorStyleRenderer.d.ts","sourceRoot":"","sources":["VectorStyleRenderer.js"],"names":[],"mappings":";;;;yBA4BU,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;cAmBF,CAAS,IAAwD,EAAnD,OAAO,yBAAyB,EAAE,iBAAiB,EAAE,IAAmC,EAAnC,OAAO,eAAe,EAAE,WAAW,KAAE,MAAM,GAAC,KAAK,CAAC,MAAM,CAAC;;mCAK7H;QAAO,MAAM,GAAE,mBAAmB;CAAC;iCACnC;QAAO,MAAM,GAAE,OAAO,oBAAoB,EAAE,YAAY;CAAC;;;;;oBAKxD,KAAK,CAAC,gBAAgB,CAAC;;;;uBACvB,KAAK,CAAC,gBAAgB,CAAC;;;;kBACvB,KAAK,CAAC,gBAAgB,CAAC;;;;6BACvB,OAAO,oBAAoB,EAAE,SAAS;;;;;;yBAKtC,YAAY,GAAC,IAAI;;;;4BACjB,YAAY,GAAC,IAAI;;;;uBACjB,YAAY,GAAC,IAAI;;;;;;;;;YAKjB,MAAM;;;;cACN,MAAM;;;;;;aAKN,OAAO,8BAA8B,EAAE,aAAa;;;;;;;;;;;;;;;0BAOrD,OAAO,sBAAsB,EAAE,UAAU,GAAC,YAAY;AA5CnE;;;;;;;GAOG;AAEH;;;GAGG;AAEH;;;;;;GAMG;AAEH;;;;;GAKG;AAEH;;;;GAIG;AAEH;;;;;;GAMG;AAEH;;GAEG;AAEH;;;;;;;;;;;;;GAaG;AACH;IACE;;;;OAIG;IACH,4BAJW,WAAW,UACX,OAAO,uBAAuB,EAAE,OAAO,sBACvC,OAAO,EA0MjB;IAvMC;;OAEG;IACH,gBAAqB;IAErB;;OAEG;IACH,6BAA8C;IAgB9C;;;OAGG;IACH,iBAAuD;IAErD;;OAEG;IACH,0BAA8D;IAC9D;;OAEG;IACH,4BAAkE;IAClE;;OAEG;IACH,qBAGC;IAGH;;;OAGG;IACH,mBAA2D;IAEzD;;OAEG;IACH,4BAAkE;IAClE;;OAEG;IACH,8BAAsE;IACtE;;OAEG;IACH,uBAGC;IAGH;;;OAGG;IACH,mBAA2D;IAEzD;;OAEG;IACH,4BAAkE;IAClE;;OAEG;IACH,8BAAsE;IACtE;;OAEG;IACH,uBAGC;IAcH;;OAEG;IACH,0BAIC;IACD;;OAEG;IACH,kBAAiC;IASjC;;;OAGG;IACH,+BAOC;IACD;;;OAGG;IACH,kCAqCC;IACD;;;OAGG;IACH,6BAYC;IAOH;;;;OAIG;IACH,+BAJW,OAAO,yBAAyB,EAAE,OAAO,aACzC,OAAO,oBAAoB,EAAE,SAAS,GACrC,OAAO,CAAC,YAAY,CAAC,CAqChC;IAED;;;;;OAKG;IACH,oCA+BC;IAED;;;;;;OAMG;IACH,gCAuEC;IAED;;;;;OAKG;IACH,gBAJW,YAAY,cACZ,OAAO,cAAc,EAAE,UAAU,qBACjC,MAAY,IAAI,QA8B1B;IAED;;;;;;;;OAQG;IACH,wBAkBC;CACF;6BArhB4B,uBAAuB"}
@@ -33,6 +33,8 @@ export const Attributes = {
33
33
  INDEX: 'a_index',
34
34
  SEGMENT_START: 'a_segmentStart',
35
35
  SEGMENT_END: 'a_segmentEnd',
36
+ MEASURE_START: 'a_measureStart',
37
+ MEASURE_END: 'a_measureEnd',
36
38
  PARAMETERS: 'a_parameters',
37
39
  JOIN_ANGLES: 'a_joinAngles',
38
40
  DISTANCE: 'a_distance',
@@ -252,11 +254,21 @@ class VectorStyleRenderer {
252
254
  size: 2,
253
255
  type: AttributeType.FLOAT,
254
256
  },
257
+ {
258
+ name: Attributes.MEASURE_START,
259
+ size: 1,
260
+ type: AttributeType.FLOAT,
261
+ },
255
262
  {
256
263
  name: Attributes.SEGMENT_END,
257
264
  size: 2,
258
265
  type: AttributeType.FLOAT,
259
266
  },
267
+ {
268
+ name: Attributes.MEASURE_END,
269
+ size: 1,
270
+ type: AttributeType.FLOAT,
271
+ },
260
272
  {
261
273
  name: Attributes.JOIN_ANGLES,
262
274
  size: 2,
@@ -1 +1 @@
1
- {"version":3,"file":"renderinstructions.d.ts","sourceRoot":"","sources":["renderinstructions.js"],"names":[],"mappings":"AAwCA;;;GAGG;AACH,0DAHW,OAAO,0BAA0B,EAAE,oBAAoB,GACtD,MAAM,CAOjB;AAED;;;;;;;;GAQG;AACH,uDANW,OAAO,yBAAyB,EAAE,kBAAkB,sBACpD,YAAY,oBACZ,OAAO,0BAA0B,EAAE,oBAAoB,aACvD,OAAO,oBAAoB,EAAE,SAAS,GACrC,YAAY,CAyCvB;AAED;;;;;;;;GAQG;AACH,4DANW,OAAO,yBAAyB,EAAE,uBAAuB,sBACzD,YAAY,oBACZ,OAAO,0BAA0B,EAAE,oBAAoB,aACvD,OAAO,oBAAoB,EAAE,SAAS,GACrC,YAAY,CAuDvB;AAED;;;;;;;;GAQG;AACH,yDANW,OAAO,yBAAyB,EAAE,oBAAoB,sBACtD,YAAY,oBACZ,OAAO,0BAA0B,EAAE,oBAAoB,aACvD,OAAO,oBAAoB,EAAE,SAAS,GACrC,YAAY,CAoEvB"}
1
+ {"version":3,"file":"renderinstructions.d.ts","sourceRoot":"","sources":["renderinstructions.js"],"names":[],"mappings":"AAwCA;;;GAGG;AACH,0DAHW,OAAO,0BAA0B,EAAE,oBAAoB,GACtD,MAAM,CAOjB;AAED;;;;;;;;GAQG;AACH,uDANW,OAAO,yBAAyB,EAAE,kBAAkB,sBACpD,YAAY,oBACZ,OAAO,0BAA0B,EAAE,oBAAoB,aACvD,OAAO,oBAAoB,EAAE,SAAS,GACrC,YAAY,CAyCvB;AAED;;;;;;;;GAQG;AACH,4DANW,OAAO,yBAAyB,EAAE,uBAAuB,sBACzD,YAAY,oBACZ,OAAO,0BAA0B,EAAE,oBAAoB,aACvD,OAAO,oBAAoB,EAAE,SAAS,GACrC,YAAY,CAyDvB;AAED;;;;;;;;GAQG;AACH,yDANW,OAAO,yBAAyB,EAAE,oBAAoB,sBACtD,YAAY,oBACZ,OAAO,0BAA0B,EAAE,oBAAoB,aACvD,OAAO,oBAAoB,EAAE,SAAS,GACrC,YAAY,CAoEvB"}
@@ -115,11 +115,11 @@ export function generateLineStringRenderInstructions(
115
115
  transform,
116
116
  ) {
117
117
  // here we anticipate the amount of render instructions for lines:
118
- // 2 instructions per vertex for position (x and y)
118
+ // 3 instructions per vertex for position (x, y and m)
119
119
  // + 1 instruction per line per custom attributes
120
120
  // + 1 instruction per line (for vertices count)
121
121
  const totalInstructionsCount =
122
- 2 * batch.verticesCount +
122
+ 3 * batch.verticesCount +
123
123
  (1 + getCustomAttributesSize(customAttributes)) * batch.geometriesCount;
124
124
  if (
125
125
  !renderInstructions ||
@@ -139,9 +139,10 @@ export function generateLineStringRenderInstructions(
139
139
  batchEntry.flatCoordss[i],
140
140
  0,
141
141
  flatCoords.length,
142
- 2,
142
+ 3,
143
143
  transform,
144
144
  flatCoords,
145
+ 3,
145
146
  );
146
147
  renderIndex += pushCustomAttributesInRenderInstructions(
147
148
  renderInstructions,
@@ -151,12 +152,13 @@ export function generateLineStringRenderInstructions(
151
152
  );
152
153
 
153
154
  // vertices count
154
- renderInstructions[renderIndex++] = flatCoords.length / 2;
155
+ renderInstructions[renderIndex++] = flatCoords.length / 3;
155
156
 
156
157
  // looping on points for positions
157
- for (let j = 0, jj = flatCoords.length; j < jj; j += 2) {
158
+ for (let j = 0, jj = flatCoords.length; j < jj; j += 3) {
158
159
  renderInstructions[renderIndex++] = flatCoords[j];
159
160
  renderInstructions[renderIndex++] = flatCoords[j + 1];
161
+ renderInstructions[renderIndex++] = flatCoords[j + 2];
160
162
  }
161
163
  }
162
164
  }
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["utils.js"],"names":[],"mappings":"AAiCA;;;;;;;;;;;;GAYG;AACH,yDAXW,YAAY,gBACZ,MAAM,gBACN,YAAY,eACZ,WAAW,wBACX,MAAM,kDAEL,eAAe,CAgE1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wDAdW,YAAY,qBACZ,MAAM,mBACN,MAAM,sBACN,MAAM,GAAC,IAAI,qBACX,MAAM,GAAC,IAAI,eACX,KAAK,CAAC,MAAM,CAAC,cACb,KAAK,CAAC,MAAM,CAAC,oBACb,KAAK,CAAC,MAAM,CAAC,oBACb,OAAO,oBAAoB,EAAE,SAAS,iBACtC,MAAM,0BACN,MAAM,GACL;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAqL1C;AAED;;;;;;;;;GASG;AACH,6DARW,YAAY,qBACZ,MAAM,eACN,KAAK,CAAC,MAAM,CAAC,cACb,KAAK,CAAC,MAAM,CAAC,wBACb,MAAM,GACL,MAAM,CA0CjB;AAED;;;;GAIG;AACH,qCAFY,SAAS,CAUpB;AAED;;;;;;GAMG;AACH,kCAJW,MAAM,iCAEL,KAAK,CAAC,MAAM,CAAC,CAWxB;AAED;;;;;GAKG;AACH,qCAHW,KAAK,CAAC,MAAM,CAAC,GACZ,MAAM,CAWjB;AA7ZD,mDAAoD;;;;;;;;oBAQtC,MAAM;;;;mBACN,MAAM"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["utils.js"],"names":[],"mappings":"AAiCA;;;;;;;;;;;;GAYG;AACH,yDAXW,YAAY,gBACZ,MAAM,gBACN,YAAY,eACZ,WAAW,wBACX,MAAM,kDAEL,eAAe,CAgE1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wDAdW,YAAY,qBACZ,MAAM,mBACN,MAAM,sBACN,MAAM,GAAC,IAAI,qBACX,MAAM,GAAC,IAAI,eACX,KAAK,CAAC,MAAM,CAAC,cACb,KAAK,CAAC,MAAM,CAAC,oBACb,KAAK,CAAC,MAAM,CAAC,oBACb,OAAO,oBAAoB,EAAE,SAAS,iBACtC,MAAM,0BACN,MAAM,GACL;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAgM1C;AAED;;;;;;;;;GASG;AACH,6DARW,YAAY,qBACZ,MAAM,eACN,KAAK,CAAC,MAAM,CAAC,cACb,KAAK,CAAC,MAAM,CAAC,wBACb,MAAM,GACL,MAAM,CA0CjB;AAED;;;;GAIG;AACH,qCAFY,SAAS,CAUpB;AAED;;;;;;GAMG;AACH,kCAJW,MAAM,iCAEL,KAAK,CAAC,MAAM,CAAC,CAWxB;AAED;;;;;GAKG;AACH,qCAHW,KAAK,CAAC,MAAM,CAAC,GACZ,MAAM,CAWjB;AAxaD,mDAAoD;;;;;;;;oBAQtC,MAAM;;;;mBACN,MAAM"}
@@ -153,7 +153,7 @@ export function writeLineSegmentToBuffers(
153
153
  currentAngleTangentSum,
154
154
  ) {
155
155
  // compute the stride to determine how many vertices were already pushed
156
- const baseVertexAttrsCount = 8; // base attributes: x0, y0, x1, y1, angle0, angle1, distance, params
156
+ const baseVertexAttrsCount = 10; // base attributes: x0, y0, m0, x1, y1, m1, angle0, angle1, distance, params
157
157
  const stride = baseVertexAttrsCount + customAttributes.length;
158
158
  const baseIndex = vertexArray.length / stride;
159
159
 
@@ -166,6 +166,9 @@ export function writeLineSegmentToBuffers(
166
166
  ];
167
167
  const p1 = [instructions[segmentEndIndex], instructions[segmentEndIndex + 1]];
168
168
 
169
+ const m0 = instructions[segmentStartIndex + 2];
170
+ const m1 = instructions[segmentEndIndex + 2];
171
+
169
172
  // to compute join angles we need to reproject coordinates back in world units
170
173
  const p0world = applyTransform(toWorldTransform, [...p0]);
171
174
  const p1world = applyTransform(toWorldTransform, [...p1]);
@@ -254,8 +257,10 @@ export function writeLineSegmentToBuffers(
254
257
  vertexArray.push(
255
258
  p0[0],
256
259
  p0[1],
260
+ m0,
257
261
  p1[0],
258
262
  p1[1],
263
+ m1,
259
264
  angle0,
260
265
  angle1,
261
266
  currentLength,
@@ -266,8 +271,10 @@ export function writeLineSegmentToBuffers(
266
271
  vertexArray.push(
267
272
  p0[0],
268
273
  p0[1],
274
+ m0,
269
275
  p1[0],
270
276
  p1[1],
277
+ m1,
271
278
  angle0,
272
279
  angle1,
273
280
  currentLength,
@@ -278,8 +285,10 @@ export function writeLineSegmentToBuffers(
278
285
  vertexArray.push(
279
286
  p0[0],
280
287
  p0[1],
288
+ m0,
281
289
  p1[0],
282
290
  p1[1],
291
+ m1,
283
292
  angle0,
284
293
  angle1,
285
294
  currentLength,
@@ -290,8 +299,10 @@ export function writeLineSegmentToBuffers(
290
299
  vertexArray.push(
291
300
  p0[0],
292
301
  p0[1],
302
+ m0,
293
303
  p1[0],
294
304
  p1[1],
305
+ m1,
295
306
  angle0,
296
307
  angle1,
297
308
  currentLength,
package/util.js CHANGED
@@ -33,4 +33,4 @@ export function getUid(obj) {
33
33
  * OpenLayers version.
34
34
  * @type {string}
35
35
  */
36
- export const VERSION = '10.0.1-dev.1723498832296';
36
+ export const VERSION = '10.0.1-dev.1723626173667';
@@ -1,4 +1,4 @@
1
- export const COMMON_HEADER: "#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\nuniform mat4 u_projectionMatrix;\nuniform mat4 u_screenToWorldMatrix;\nuniform vec2 u_viewportSizePx;\nuniform float u_pixelRatio;\nuniform float u_globalAlpha;\nuniform float u_time;\nuniform float u_zoom;\nuniform float u_resolution;\nuniform float u_rotation;\nuniform vec4 u_renderExtent;\nuniform vec2 u_patternOrigin;\nuniform float u_depth;\nuniform mediump int u_hitDetection;\n\nconst float PI = 3.141592653589793238;\nconst float TWO_PI = 2.0 * PI;\n\n// this used to produce an alpha-premultiplied color from a texture\nvec4 samplePremultiplied(sampler2D sampler, vec2 texCoord) {\n vec4 color = texture2D(sampler, texCoord);\n return vec4(color.rgb * color.a, color.a);\n}\n";
1
+ export const COMMON_HEADER: "#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\nuniform mat4 u_projectionMatrix;\nuniform mat4 u_screenToWorldMatrix;\nuniform vec2 u_viewportSizePx;\nuniform float u_pixelRatio;\nuniform float u_globalAlpha;\nuniform float u_time;\nuniform float u_zoom;\nuniform float u_resolution;\nuniform float u_rotation;\nuniform vec4 u_renderExtent;\nuniform vec2 u_patternOrigin;\nuniform float u_depth;\nuniform mediump int u_hitDetection;\n\nconst float PI = 3.141592653589793238;\nconst float TWO_PI = 2.0 * PI;\nfloat currentLineMetric = 0.; // an actual value will be used in the stroke shaders\n";
2
2
  /**
3
3
  * @typedef {Object} VaryingDescription
4
4
  * @property {string} name Varying name, as will be declared in the header.
@@ -19,6 +19,10 @@ export const COMMON_HEADER: "#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp
19
19
  * .setSymbolSizeExpression('...')
20
20
  * .getSymbolFragmentShader();
21
21
  * ```
22
+ *
23
+ * A note on [alpha premultiplication](https://en.wikipedia.org/wiki/Alpha_compositing#Straight_versus_premultiplied):
24
+ * The ShaderBuilder class expects all colors to **not having been alpha-premultiplied!** This is because alpha
25
+ * premultiplication is done at the end of each fragment shader.
22
26
  */
23
27
  export class ShaderBuilder {
24
28
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ShaderBuilder.d.ts","sourceRoot":"","sources":["ShaderBuilder.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ShaderBuilder.d.ts","sourceRoot":"","sources":["ShaderBuilder.js"],"names":[],"mappings":"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"}
@@ -27,12 +27,7 @@ uniform mediump int u_hitDetection;
27
27
 
28
28
  const float PI = 3.141592653589793238;
29
29
  const float TWO_PI = 2.0 * PI;
30
-
31
- // this used to produce an alpha-premultiplied color from a texture
32
- vec4 samplePremultiplied(sampler2D sampler, vec2 texCoord) {
33
- vec4 color = texture2D(sampler, texCoord);
34
- return vec4(color.rgb * color.a, color.a);
35
- }
30
+ float currentLineMetric = 0.; // an actual value will be used in the stroke shaders
36
31
  `;
37
32
 
38
33
  const DEFAULT_STYLE = createDefaultStyle();
@@ -58,6 +53,10 @@ const DEFAULT_STYLE = createDefaultStyle();
58
53
  * .setSymbolSizeExpression('...')
59
54
  * .getSymbolFragmentShader();
60
55
  * ```
56
+ *
57
+ * A note on [alpha premultiplication](https://en.wikipedia.org/wiki/Alpha_compositing#Straight_versus_premultiplied):
58
+ * The ShaderBuilder class expects all colors to **not having been alpha-premultiplied!** This is because alpha
59
+ * premultiplication is done at the end of each fragment shader.
61
60
  */
62
61
  export class ShaderBuilder {
63
62
  constructor() {
@@ -580,6 +579,7 @@ void main(void) {
580
579
  float s = sin(v_angle);
581
580
  coordsPx = vec2(c * coordsPx.x - s * coordsPx.y, s * coordsPx.x + c * coordsPx.y);
582
581
  gl_FragColor = ${this.symbolColorExpression_};
582
+ gl_FragColor.rgb *= gl_FragColor.a;
583
583
  if (u_hitDetection > 0) {
584
584
  if (gl_FragColor.a < 0.05) { discard; };
585
585
  gl_FragColor = v_prop_hitColor;
@@ -602,10 +602,10 @@ ${this.uniforms_
602
602
  return 'uniform ' + uniform + ';';
603
603
  })
604
604
  .join('\n')}
605
- attribute vec2 a_position;
606
- attribute float a_index;
607
605
  attribute vec2 a_segmentStart;
608
606
  attribute vec2 a_segmentEnd;
607
+ attribute float a_measureStart;
608
+ attribute float a_measureEnd;
609
609
  attribute float a_parameters;
610
610
  attribute float a_distance;
611
611
  attribute vec2 a_joinAngles;
@@ -622,6 +622,8 @@ varying float v_angleEnd;
622
622
  varying float v_width;
623
623
  varying vec4 v_prop_hitColor;
624
624
  varying float v_distanceOffsetPx;
625
+ varying float v_measureStart;
626
+ varying float v_measureEnd;
625
627
  ${this.varyings_
626
628
  .map(function (varying) {
627
629
  return 'varying ' + varying.type + ' ' + varying.name + ';';
@@ -664,6 +666,7 @@ void main(void) {
664
666
  v_angleStart = a_joinAngles.x;
665
667
  v_angleEnd = a_joinAngles.y;
666
668
  float vertexNumber = floor(abs(a_parameters) / 10000. + 0.5);
669
+ currentLineMetric = vertexNumber < 1.5 ? a_measureStart : a_measureEnd;
667
670
  // we're reading the fractional part while keeping the sign (so -4.12 gives -0.12, 3.45 gives 0.45)
668
671
  float angleTangentSum = fract(abs(a_parameters) / 10000.) * 10000. * sign(a_parameters);
669
672
 
@@ -698,6 +701,8 @@ void main(void) {
698
701
  v_width = lineWidth;
699
702
  v_prop_hitColor = a_prop_hitColor;
700
703
  v_distanceOffsetPx = a_distance / u_resolution - (lineOffsetPx * angleTangentSum);
704
+ v_measureStart = a_measureStart;
705
+ v_measureEnd = a_measureEnd;
701
706
  ${this.varyings_
702
707
  .map(function (varying) {
703
708
  return ' ' + varying.name + ' = ' + varying.expression + ';';
@@ -729,6 +734,8 @@ varying float v_angleEnd;
729
734
  varying float v_width;
730
735
  varying vec4 v_prop_hitColor;
731
736
  varying float v_distanceOffsetPx;
737
+ varying float v_measureStart;
738
+ varying float v_measureEnd;
732
739
  ${this.varyings_
733
740
  .map(function (varying) {
734
741
  return 'varying ' + varying.type + ' ' + varying.name + ';';
@@ -834,16 +841,20 @@ void main(void) {
834
841
  discard;
835
842
  }
836
843
  #endif
837
- if (${this.discardExpression_}) { discard; }
838
844
 
839
845
  float segmentLength = length(v_segmentEnd - v_segmentStart);
840
846
  vec2 segmentTangent = (v_segmentEnd - v_segmentStart) / segmentLength;
841
847
  vec2 segmentNormal = vec2(-segmentTangent.y, segmentTangent.x);
842
848
  vec2 startToPoint = currentPoint - v_segmentStart;
843
- float currentLengthPx = max(0., min(dot(segmentTangent, startToPoint), segmentLength)) + v_distanceOffsetPx;
849
+ float lengthToPoint = max(0., min(dot(segmentTangent, startToPoint), segmentLength));
850
+ float currentLengthPx = lengthToPoint + v_distanceOffsetPx;
844
851
  float currentRadiusPx = abs(dot(segmentNormal, startToPoint));
845
852
  float currentRadiusRatio = dot(segmentNormal, startToPoint) * 2. / v_width;
846
- vec4 color = ${this.strokeColorExpression_} * u_globalAlpha;
853
+ currentLineMetric = mix(v_measureStart, v_measureEnd, lengthToPoint / segmentLength);
854
+
855
+ if (${this.discardExpression_}) { discard; }
856
+
857
+ vec4 color = ${this.strokeColorExpression_};
847
858
  float capType = ${this.strokeCapExpression_};
848
859
  float joinType = ${this.strokeJoinExpression_};
849
860
  float segmentStartDistance = computeSegmentPointDistance(currentPoint, v_segmentStart, v_segmentEnd, v_width, v_angleStart, capType, joinType);
@@ -853,7 +864,10 @@ void main(void) {
853
864
  max(segmentStartDistance, segmentEndDistance)
854
865
  );
855
866
  distance = max(distance, ${this.strokeDistanceFieldExpression_});
856
- gl_FragColor = color * smoothstep(0.5, -0.5, distance);
867
+ color.a *= smoothstep(0.5, -0.5, distance);
868
+ gl_FragColor = color;
869
+ gl_FragColor.a *= u_globalAlpha;
870
+ gl_FragColor.rgb *= gl_FragColor.a;
857
871
  if (u_hitDetection > 0) {
858
872
  if (gl_FragColor.a < 0.1) { discard; };
859
873
  gl_FragColor = v_prop_hitColor;
@@ -951,7 +965,9 @@ void main(void) {
951
965
  }
952
966
  #endif
953
967
  if (${this.discardExpression_}) { discard; }
954
- gl_FragColor = ${this.fillColorExpression_} * u_globalAlpha;
968
+ gl_FragColor = ${this.fillColorExpression_};
969
+ gl_FragColor.a *= u_globalAlpha;
970
+ gl_FragColor.rgb *= gl_FragColor.a;
955
971
  if (u_hitDetection > 0) {
956
972
  if (gl_FragColor.a < 0.1) { discard; };
957
973
  gl_FragColor = v_prop_hitColor;