@deck.gl/extensions 9.3.0-alpha.3 → 9.3.0-alpha.5

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.
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "Plug-and-play functionalities for deck.gl layers",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
- "version": "9.3.0-alpha.3",
6
+ "version": "9.3.0-alpha.5",
7
7
  "publishConfig": {
8
8
  "access": "public"
9
9
  },
@@ -38,14 +38,13 @@
38
38
  "prepublishOnly": "npm run build-bundle && npm run build-bundle -- --env=dev"
39
39
  },
40
40
  "dependencies": {
41
- "@luma.gl/constants": "^9.3.0-alpha.6",
42
- "@luma.gl/shadertools": "^9.3.0-alpha.6",
41
+ "@luma.gl/shadertools": "^9.3.0-alpha.10",
43
42
  "@math.gl/core": "^4.1.0"
44
43
  },
45
44
  "peerDependencies": {
46
- "@deck.gl/core": "~9.2.0",
47
- "@luma.gl/core": "~9.3.0-alpha.6",
48
- "@luma.gl/engine": "~9.3.0-alpha.6"
45
+ "@deck.gl/core": "~9.3.0-alpha.1",
46
+ "@luma.gl/core": "~9.3.0-alpha.10",
47
+ "@luma.gl/engine": "~9.3.0-alpha.10"
49
48
  },
50
- "gitHead": "25b39cfc26abd50aa900796fae75c2b5fedada69"
49
+ "gitHead": "c3ad1cee357af674cc31df37979d61325baf9d7a"
51
50
  }
@@ -23,7 +23,7 @@ type BrushingModuleUniforms = {
23
23
  };
24
24
 
25
25
  const uniformBlock = /* glsl */ `\
26
- uniform brushingUniforms {
26
+ layout(std140) uniform brushingUniforms {
27
27
  bool enabled;
28
28
  highp int target;
29
29
  vec2 mousePos;
@@ -25,7 +25,7 @@ export type ClipExtensionProps = {
25
25
  };
26
26
 
27
27
  const shaderFunction = /* glsl */ `
28
- uniform clipUniforms {
28
+ layout(std140) uniform clipUniforms {
29
29
  vec4 bounds;
30
30
  } clip;
31
31
 
@@ -11,7 +11,7 @@ in float collisionPriorities;
11
11
 
12
12
  uniform sampler2D collision_texture;
13
13
 
14
- uniform collisionUniforms {
14
+ layout(std140) uniform collisionUniforms {
15
15
  bool sort;
16
16
  bool enabled;
17
17
  } collision;
@@ -32,24 +32,18 @@ export type Defines = {
32
32
  };
33
33
 
34
34
  const uniformBlock = /* glsl */ `\
35
- uniform dataFilterUniforms {
35
+ layout(std140) uniform dataFilterUniforms {
36
36
  bool useSoftMargin;
37
37
  bool enabled;
38
38
  bool transformSize;
39
39
  bool transformColor;
40
- #ifdef DATAFILTER_TYPE
41
- DATAFILTER_TYPE min;
42
- DATAFILTER_TYPE softMin;
43
- DATAFILTER_TYPE softMax;
44
- DATAFILTER_TYPE max;
45
- #ifdef DATAFILTER_DOUBLE
46
- DATAFILTER_TYPE min64High;
47
- DATAFILTER_TYPE max64High;
48
- #endif
49
- #endif
50
- #ifdef DATACATEGORY_TYPE
40
+ vec4 min;
41
+ vec4 softMin;
42
+ vec4 softMax;
43
+ vec4 max;
44
+ vec4 min64High;
45
+ vec4 max64High;
51
46
  highp uvec4 categoryBitMask;
52
- #endif
53
47
  } dataFilter;
54
48
  `;
55
49
 
@@ -67,6 +61,86 @@ const vertex = /* glsl */ `
67
61
 
68
62
  out float dataFilter_value;
69
63
 
64
+ #ifdef DATAFILTER_TYPE
65
+ float dataFilter_getMin(float _) {
66
+ return dataFilter.min.x;
67
+ }
68
+ vec2 dataFilter_getMin(vec2 _) {
69
+ return dataFilter.min.xy;
70
+ }
71
+ vec3 dataFilter_getMin(vec3 _) {
72
+ return dataFilter.min.xyz;
73
+ }
74
+ vec4 dataFilter_getMin(vec4 _) {
75
+ return dataFilter.min;
76
+ }
77
+
78
+ float dataFilter_getSoftMin(float _) {
79
+ return dataFilter.softMin.x;
80
+ }
81
+ vec2 dataFilter_getSoftMin(vec2 _) {
82
+ return dataFilter.softMin.xy;
83
+ }
84
+ vec3 dataFilter_getSoftMin(vec3 _) {
85
+ return dataFilter.softMin.xyz;
86
+ }
87
+ vec4 dataFilter_getSoftMin(vec4 _) {
88
+ return dataFilter.softMin;
89
+ }
90
+
91
+ float dataFilter_getSoftMax(float _) {
92
+ return dataFilter.softMax.x;
93
+ }
94
+ vec2 dataFilter_getSoftMax(vec2 _) {
95
+ return dataFilter.softMax.xy;
96
+ }
97
+ vec3 dataFilter_getSoftMax(vec3 _) {
98
+ return dataFilter.softMax.xyz;
99
+ }
100
+ vec4 dataFilter_getSoftMax(vec4 _) {
101
+ return dataFilter.softMax;
102
+ }
103
+
104
+ float dataFilter_getMax(float _) {
105
+ return dataFilter.max.x;
106
+ }
107
+ vec2 dataFilter_getMax(vec2 _) {
108
+ return dataFilter.max.xy;
109
+ }
110
+ vec3 dataFilter_getMax(vec3 _) {
111
+ return dataFilter.max.xyz;
112
+ }
113
+ vec4 dataFilter_getMax(vec4 _) {
114
+ return dataFilter.max;
115
+ }
116
+
117
+ float dataFilter_getMin64High(float _) {
118
+ return dataFilter.min64High.x;
119
+ }
120
+ vec2 dataFilter_getMin64High(vec2 _) {
121
+ return dataFilter.min64High.xy;
122
+ }
123
+ vec3 dataFilter_getMin64High(vec3 _) {
124
+ return dataFilter.min64High.xyz;
125
+ }
126
+ vec4 dataFilter_getMin64High(vec4 _) {
127
+ return dataFilter.min64High;
128
+ }
129
+
130
+ float dataFilter_getMax64High(float _) {
131
+ return dataFilter.max64High.x;
132
+ }
133
+ vec2 dataFilter_getMax64High(vec2 _) {
134
+ return dataFilter.max64High.xy;
135
+ }
136
+ vec3 dataFilter_getMax64High(vec3 _) {
137
+ return dataFilter.max64High.xyz;
138
+ }
139
+ vec4 dataFilter_getMax64High(vec4 _) {
140
+ return dataFilter.max64High;
141
+ }
142
+ #endif
143
+
70
144
  float dataFilter_reduceValue(float value) {
71
145
  return value;
72
146
  }
@@ -82,23 +156,27 @@ float dataFilter_reduceValue(vec4 value) {
82
156
 
83
157
  #ifdef DATAFILTER_TYPE
84
158
  void dataFilter_setValue(DATAFILTER_TYPE valueFromMin, DATAFILTER_TYPE valueFromMax) {
159
+ DATAFILTER_TYPE dataFilter_min = dataFilter_getMin(valueFromMin);
160
+ DATAFILTER_TYPE dataFilter_softMin = dataFilter_getSoftMin(valueFromMin);
161
+ DATAFILTER_TYPE dataFilter_softMax = dataFilter_getSoftMax(valueFromMin);
162
+ DATAFILTER_TYPE dataFilter_max = dataFilter_getMax(valueFromMin);
85
163
  if (dataFilter.useSoftMargin) {
86
164
  // smoothstep results are undefined if edge0 ≥ edge1
87
165
  // Fallback to ignore filterSoftRange if it is truncated by filterRange
88
166
  DATAFILTER_TYPE leftInRange = mix(
89
- smoothstep(dataFilter.min, dataFilter.softMin, valueFromMin),
90
- step(dataFilter.min, valueFromMin),
91
- step(dataFilter.softMin, dataFilter.min)
167
+ smoothstep(dataFilter_min, dataFilter_softMin, valueFromMin),
168
+ step(dataFilter_min, valueFromMin),
169
+ step(dataFilter_softMin, dataFilter_min)
92
170
  );
93
171
  DATAFILTER_TYPE rightInRange = mix(
94
- 1.0 - smoothstep(dataFilter.softMax, dataFilter.max, valueFromMax),
95
- step(valueFromMax, dataFilter.max),
96
- step(dataFilter.max, dataFilter.softMax)
172
+ 1.0 - smoothstep(dataFilter_softMax, dataFilter_max, valueFromMax),
173
+ step(valueFromMax, dataFilter_max),
174
+ step(dataFilter_max, dataFilter_softMax)
97
175
  );
98
176
  dataFilter_value = dataFilter_reduceValue(leftInRange * rightInRange);
99
177
  } else {
100
178
  dataFilter_value = dataFilter_reduceValue(
101
- step(dataFilter.min, valueFromMin) * step(valueFromMax, dataFilter.max)
179
+ step(dataFilter_min, valueFromMin) * step(valueFromMax, dataFilter_max)
102
180
  );
103
181
  }
104
182
  }
@@ -124,9 +202,9 @@ float dataFilter_reduceValue(vec4 value) {
124
202
  dataFilter_bits &= 1u;
125
203
 
126
204
  #if DATACATEGORY_CHANNELS == 1
127
- if(dataFilter_bits == 0u) dataFilter_value = 0.0;
205
+ if (dataFilter_bits == 0u) dataFilter_value = 0.0;
128
206
  #else
129
- if(any(equal(dataFilter_bits, DATACATEGORY_TYPE(0u)))) dataFilter_value = 0.0;
207
+ if (any(equal(dataFilter_bits, DATACATEGORY_TYPE(0u)))) dataFilter_value = 0.0;
130
208
  #endif
131
209
  }
132
210
  #endif
@@ -165,20 +243,26 @@ function getUniforms(opts?: DataFilterModuleProps | {}): Record<string, any> {
165
243
  categoryBitMask
166
244
  } = opts;
167
245
  const filterSoftRange = opts.filterSoftRange || filterRange;
246
+ const padRange = (value: number | readonly number[]) => {
247
+ if (Array.isArray(value)) {
248
+ return [value[0] || 0, value[1] || 0, value[2] || 0, value[3] || 0];
249
+ }
250
+ return [value, 0, 0, 0];
251
+ };
168
252
 
169
253
  return {
170
254
  ...(Number.isFinite(filterRange[0])
171
255
  ? {
172
- min: filterRange[0],
173
- softMin: filterSoftRange[0],
174
- softMax: filterSoftRange[1],
175
- max: filterRange[1]
256
+ min: padRange(filterRange[0]),
257
+ softMin: padRange(filterSoftRange[0]),
258
+ softMax: padRange(filterSoftRange[1]),
259
+ max: padRange(filterRange[1])
176
260
  }
177
261
  : {
178
- min: filterRange.map(r => r[0]),
179
- softMin: filterSoftRange.map(r => r[0]),
180
- softMax: filterSoftRange.map(r => r[1]),
181
- max: filterRange.map(r => r[1])
262
+ min: padRange(filterRange.map(r => r[0])),
263
+ softMin: padRange(filterSoftRange.map(r => r[0])),
264
+ softMax: padRange(filterSoftRange.map(r => r[1])),
265
+ max: padRange(filterRange.map(r => r[1]))
182
266
  }),
183
267
  enabled: filterEnabled,
184
268
  useSoftMargin: Boolean(opts.filterSoftRange),
@@ -193,27 +277,15 @@ function getUniforms64(opts?: DataFilterModuleProps | {}): Record<string, any> {
193
277
  return {};
194
278
  }
195
279
  const uniforms = getUniforms(opts);
196
- if (Number.isFinite(uniforms.min)) {
197
- const min64High = Math.fround(uniforms.min);
198
- uniforms.min -= min64High;
199
- uniforms.softMin -= min64High;
200
- uniforms.min64High = min64High;
201
-
202
- const max64High = Math.fround(uniforms.max);
203
- uniforms.max -= max64High;
204
- uniforms.softMax -= max64High;
205
- uniforms.max64High = max64High;
206
- } else {
207
- const min64High = uniforms.min.map(Math.fround);
208
- uniforms.min = uniforms.min.map((x, i) => x - min64High[i]);
209
- uniforms.softMin = uniforms.softMin.map((x, i) => x - min64High[i]);
210
- uniforms.min64High = min64High;
211
-
212
- const max64High = uniforms.max.map(Math.fround);
213
- uniforms.max = uniforms.max.map((x, i) => x - max64High[i]);
214
- uniforms.softMax = uniforms.softMax.map((x, i) => x - max64High[i]);
215
- uniforms.max64High = max64High;
216
- }
280
+ const min64High = uniforms.min.map(Math.fround);
281
+ uniforms.min = uniforms.min.map((x, i) => x - min64High[i]);
282
+ uniforms.softMin = uniforms.softMin.map((x, i) => x - min64High[i]);
283
+ uniforms.min64High = min64High;
284
+
285
+ const max64High = uniforms.max.map(Math.fround);
286
+ uniforms.max = uniforms.max.map((x, i) => x - max64High[i]);
287
+ uniforms.softMax = uniforms.softMax.map((x, i) => x - max64High[i]);
288
+ uniforms.max64High = max64High;
217
289
  return uniforms;
218
290
  }
219
291
 
@@ -224,8 +296,8 @@ const inject = {
224
296
  #ifdef DATAFILTER_TYPE
225
297
  #ifdef DATAFILTER_DOUBLE
226
298
  dataFilter_setValue(
227
- filterValues - dataFilter.min64High + filterValues64Low,
228
- filterValues - dataFilter.max64High + filterValues64Low
299
+ filterValues - dataFilter_getMin64High(filterValues) + filterValues64Low,
300
+ filterValues - dataFilter_getMax64High(filterValues) + filterValues64Low
229
301
  );
230
302
  #else
231
303
  dataFilter_setValue(filterValues, filterValues);
@@ -260,30 +332,20 @@ const inject = {
260
332
 
261
333
  type UniformTypesFunc = (opts: DataFilterExtensionOptions) => any;
262
334
  function uniformTypesFromOptions(opts: DataFilterExtensionOptions): any {
263
- const {categorySize, filterSize, fp64} = opts;
264
335
  const uniformTypes: Record<string, UniformFormat> = {
265
336
  useSoftMargin: 'i32',
266
337
  enabled: 'i32',
267
338
  transformSize: 'i32',
268
- transformColor: 'i32'
339
+ transformColor: 'i32',
340
+ min: 'vec4<f32>',
341
+ softMin: 'vec4<f32>',
342
+ softMax: 'vec4<f32>',
343
+ max: 'vec4<f32>',
344
+ min64High: 'vec4<f32>',
345
+ max64High: 'vec4<f32>',
346
+ categoryBitMask: 'vec4<u32>'
269
347
  };
270
348
 
271
- if (filterSize) {
272
- const uniformFormat: UniformFormat = filterSize === 1 ? 'f32' : `vec${filterSize}<f32>`;
273
- uniformTypes.min = uniformFormat;
274
- uniformTypes.softMin = uniformFormat;
275
- uniformTypes.softMax = uniformFormat;
276
- uniformTypes.max = uniformFormat;
277
- if (fp64) {
278
- uniformTypes.min64High = uniformFormat;
279
- uniformTypes.max64High = uniformFormat;
280
- }
281
- }
282
-
283
- if (categorySize) {
284
- uniformTypes.categoryBitMask = 'vec4<i32>';
285
- }
286
-
287
349
  return uniformTypes;
288
350
  }
289
351
 
@@ -9,7 +9,7 @@ import type {ProjectProps, ProjectUniforms} from '@deck.gl/core';
9
9
  import type {Texture} from '@luma.gl/core';
10
10
 
11
11
  const uniformBlock = /* glsl */ `\
12
- uniform fillUniforms {
12
+ layout(std140) uniform fillUniforms {
13
13
  vec2 patternTextureSize;
14
14
  bool patternEnabled;
15
15
  bool patternMask;
@@ -6,7 +6,7 @@ export default `\
6
6
 
7
7
  const vec2 WORLD_SCALE_FP64 = vec2(81.4873275756836, 0.0000032873668232014097);
8
8
 
9
- uniform project64Uniforms {
9
+ layout(std140) uniform project64Uniforms {
10
10
  vec2 scale;
11
11
  mat4 viewProjectionMatrix;
12
12
  mat4 viewProjectionMatrix64Low;
@@ -7,7 +7,7 @@ import {project} from '@deck.gl/core';
7
7
  import type {Texture} from '@luma.gl/core';
8
8
 
9
9
  const uniformBlock = /* glsl */ `\
10
- uniform maskUniforms {
10
+ layout(std140) uniform maskUniforms {
11
11
  vec4 bounds;
12
12
  highp int channel;
13
13
  bool enabled;
@@ -31,7 +31,7 @@ vDashOffset = 0.0;
31
31
  `,
32
32
 
33
33
  'fs:#decl': `
34
- uniform pathStyleUniforms {
34
+ layout(std140) uniform pathStyleUniforms {
35
35
  float dashAlignMode;
36
36
  bool dashGapPickable;
37
37
  } pathStyle;
@@ -56,7 +56,7 @@ const uniformBlock =
56
56
  // eslint-disable-next-line prefer-template
57
57
  TERRAIN_MODE_CONSTANTS +
58
58
  /* glsl */ `
59
- uniform terrainUniforms {
59
+ layout(std140) uniform terrainUniforms {
60
60
  float mode;
61
61
  vec4 bounds;
62
62
  } terrain;
@@ -3,7 +3,7 @@
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
5
  import type {Device} from '@luma.gl/core';
6
- import {GL} from '@luma.gl/constants';
6
+ import {GL} from '@luma.gl/webgl/constants';
7
7
 
8
8
  export function createRenderTarget(
9
9
  device: Device,