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

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.6",
7
7
  "publishConfig": {
8
8
  "access": "public"
9
9
  },
@@ -38,14 +38,14 @@
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.2",
42
+ "@luma.gl/webgl": "^9.3.2",
43
43
  "@math.gl/core": "^4.1.0"
44
44
  },
45
45
  "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"
46
+ "@deck.gl/core": "~9.3.0-alpha.1",
47
+ "@luma.gl/core": "~9.3.2",
48
+ "@luma.gl/engine": "~9.3.2"
49
49
  },
50
- "gitHead": "25b39cfc26abd50aa900796fae75c2b5fedada69"
50
+ "gitHead": "6aff0d4eccd01a06a388ab1c07042a94daa3eb31"
51
51
  }
@@ -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;
@@ -2,9 +2,8 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
- import type {ShaderModule} from '@luma.gl/shadertools';
5
+ import type {ShaderModule, UniformTypes} from '@luma.gl/shadertools';
6
6
  import type {DataFilterExtensionOptions, DataFilterExtensionProps} from './data-filter-extension';
7
- import {UniformFormat} from '@luma.gl/shadertools/dist/types';
8
7
 
9
8
  /*
10
9
  * data filter shader module
@@ -32,24 +31,18 @@ export type Defines = {
32
31
  };
33
32
 
34
33
  const uniformBlock = /* glsl */ `\
35
- uniform dataFilterUniforms {
34
+ layout(std140) uniform dataFilterUniforms {
36
35
  bool useSoftMargin;
37
36
  bool enabled;
38
37
  bool transformSize;
39
38
  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
39
+ vec4 min;
40
+ vec4 softMin;
41
+ vec4 softMax;
42
+ vec4 max;
43
+ vec4 min64High;
44
+ vec4 max64High;
51
45
  highp uvec4 categoryBitMask;
52
- #endif
53
46
  } dataFilter;
54
47
  `;
55
48
 
@@ -67,6 +60,86 @@ const vertex = /* glsl */ `
67
60
 
68
61
  out float dataFilter_value;
69
62
 
63
+ #ifdef DATAFILTER_TYPE
64
+ float dataFilter_getMin(float _) {
65
+ return dataFilter.min.x;
66
+ }
67
+ vec2 dataFilter_getMin(vec2 _) {
68
+ return dataFilter.min.xy;
69
+ }
70
+ vec3 dataFilter_getMin(vec3 _) {
71
+ return dataFilter.min.xyz;
72
+ }
73
+ vec4 dataFilter_getMin(vec4 _) {
74
+ return dataFilter.min;
75
+ }
76
+
77
+ float dataFilter_getSoftMin(float _) {
78
+ return dataFilter.softMin.x;
79
+ }
80
+ vec2 dataFilter_getSoftMin(vec2 _) {
81
+ return dataFilter.softMin.xy;
82
+ }
83
+ vec3 dataFilter_getSoftMin(vec3 _) {
84
+ return dataFilter.softMin.xyz;
85
+ }
86
+ vec4 dataFilter_getSoftMin(vec4 _) {
87
+ return dataFilter.softMin;
88
+ }
89
+
90
+ float dataFilter_getSoftMax(float _) {
91
+ return dataFilter.softMax.x;
92
+ }
93
+ vec2 dataFilter_getSoftMax(vec2 _) {
94
+ return dataFilter.softMax.xy;
95
+ }
96
+ vec3 dataFilter_getSoftMax(vec3 _) {
97
+ return dataFilter.softMax.xyz;
98
+ }
99
+ vec4 dataFilter_getSoftMax(vec4 _) {
100
+ return dataFilter.softMax;
101
+ }
102
+
103
+ float dataFilter_getMax(float _) {
104
+ return dataFilter.max.x;
105
+ }
106
+ vec2 dataFilter_getMax(vec2 _) {
107
+ return dataFilter.max.xy;
108
+ }
109
+ vec3 dataFilter_getMax(vec3 _) {
110
+ return dataFilter.max.xyz;
111
+ }
112
+ vec4 dataFilter_getMax(vec4 _) {
113
+ return dataFilter.max;
114
+ }
115
+
116
+ float dataFilter_getMin64High(float _) {
117
+ return dataFilter.min64High.x;
118
+ }
119
+ vec2 dataFilter_getMin64High(vec2 _) {
120
+ return dataFilter.min64High.xy;
121
+ }
122
+ vec3 dataFilter_getMin64High(vec3 _) {
123
+ return dataFilter.min64High.xyz;
124
+ }
125
+ vec4 dataFilter_getMin64High(vec4 _) {
126
+ return dataFilter.min64High;
127
+ }
128
+
129
+ float dataFilter_getMax64High(float _) {
130
+ return dataFilter.max64High.x;
131
+ }
132
+ vec2 dataFilter_getMax64High(vec2 _) {
133
+ return dataFilter.max64High.xy;
134
+ }
135
+ vec3 dataFilter_getMax64High(vec3 _) {
136
+ return dataFilter.max64High.xyz;
137
+ }
138
+ vec4 dataFilter_getMax64High(vec4 _) {
139
+ return dataFilter.max64High;
140
+ }
141
+ #endif
142
+
70
143
  float dataFilter_reduceValue(float value) {
71
144
  return value;
72
145
  }
@@ -82,23 +155,27 @@ float dataFilter_reduceValue(vec4 value) {
82
155
 
83
156
  #ifdef DATAFILTER_TYPE
84
157
  void dataFilter_setValue(DATAFILTER_TYPE valueFromMin, DATAFILTER_TYPE valueFromMax) {
158
+ DATAFILTER_TYPE dataFilter_min = dataFilter_getMin(valueFromMin);
159
+ DATAFILTER_TYPE dataFilter_softMin = dataFilter_getSoftMin(valueFromMin);
160
+ DATAFILTER_TYPE dataFilter_softMax = dataFilter_getSoftMax(valueFromMin);
161
+ DATAFILTER_TYPE dataFilter_max = dataFilter_getMax(valueFromMin);
85
162
  if (dataFilter.useSoftMargin) {
86
163
  // smoothstep results are undefined if edge0 ≥ edge1
87
164
  // Fallback to ignore filterSoftRange if it is truncated by filterRange
88
165
  DATAFILTER_TYPE leftInRange = mix(
89
- smoothstep(dataFilter.min, dataFilter.softMin, valueFromMin),
90
- step(dataFilter.min, valueFromMin),
91
- step(dataFilter.softMin, dataFilter.min)
166
+ smoothstep(dataFilter_min, dataFilter_softMin, valueFromMin),
167
+ step(dataFilter_min, valueFromMin),
168
+ step(dataFilter_softMin, dataFilter_min)
92
169
  );
93
170
  DATAFILTER_TYPE rightInRange = mix(
94
- 1.0 - smoothstep(dataFilter.softMax, dataFilter.max, valueFromMax),
95
- step(valueFromMax, dataFilter.max),
96
- step(dataFilter.max, dataFilter.softMax)
171
+ 1.0 - smoothstep(dataFilter_softMax, dataFilter_max, valueFromMax),
172
+ step(valueFromMax, dataFilter_max),
173
+ step(dataFilter_max, dataFilter_softMax)
97
174
  );
98
175
  dataFilter_value = dataFilter_reduceValue(leftInRange * rightInRange);
99
176
  } else {
100
177
  dataFilter_value = dataFilter_reduceValue(
101
- step(dataFilter.min, valueFromMin) * step(valueFromMax, dataFilter.max)
178
+ step(dataFilter_min, valueFromMin) * step(valueFromMax, dataFilter_max)
102
179
  );
103
180
  }
104
181
  }
@@ -124,9 +201,9 @@ float dataFilter_reduceValue(vec4 value) {
124
201
  dataFilter_bits &= 1u;
125
202
 
126
203
  #if DATACATEGORY_CHANNELS == 1
127
- if(dataFilter_bits == 0u) dataFilter_value = 0.0;
204
+ if (dataFilter_bits == 0u) dataFilter_value = 0.0;
128
205
  #else
129
- if(any(equal(dataFilter_bits, DATACATEGORY_TYPE(0u)))) dataFilter_value = 0.0;
206
+ if (any(equal(dataFilter_bits, DATACATEGORY_TYPE(0u)))) dataFilter_value = 0.0;
130
207
  #endif
131
208
  }
132
209
  #endif
@@ -152,6 +229,22 @@ export type DataFilterModuleProps = {
152
229
  categoryBitMask?: CategoryBitMask;
153
230
  } & DataFilterExtensionProps;
154
231
 
232
+ type DataFilterUniforms = {
233
+ useSoftMargin: boolean;
234
+ enabled: boolean;
235
+ transformSize: boolean;
236
+ transformColor: boolean;
237
+ min: [number, number, number, number];
238
+ softMin: [number, number, number, number];
239
+ softMax: [number, number, number, number];
240
+ max: [number, number, number, number];
241
+ min64High: [number, number, number, number];
242
+ max64High: [number, number, number, number];
243
+ categoryBitMask: [number, number, number, number];
244
+ };
245
+
246
+ type DataFilterUniformTypeMap = Required<UniformTypes<DataFilterUniforms>>;
247
+
155
248
  /* eslint-disable camelcase */
156
249
  function getUniforms(opts?: DataFilterModuleProps | {}): Record<string, any> {
157
250
  if (!opts || !('extensions' in opts)) {
@@ -165,20 +258,26 @@ function getUniforms(opts?: DataFilterModuleProps | {}): Record<string, any> {
165
258
  categoryBitMask
166
259
  } = opts;
167
260
  const filterSoftRange = opts.filterSoftRange || filterRange;
261
+ const padRange = (value: number | readonly number[]) => {
262
+ if (Array.isArray(value)) {
263
+ return [value[0] || 0, value[1] || 0, value[2] || 0, value[3] || 0];
264
+ }
265
+ return [value, 0, 0, 0];
266
+ };
168
267
 
169
268
  return {
170
269
  ...(Number.isFinite(filterRange[0])
171
270
  ? {
172
- min: filterRange[0],
173
- softMin: filterSoftRange[0],
174
- softMax: filterSoftRange[1],
175
- max: filterRange[1]
271
+ min: padRange(filterRange[0]),
272
+ softMin: padRange(filterSoftRange[0]),
273
+ softMax: padRange(filterSoftRange[1]),
274
+ max: padRange(filterRange[1])
176
275
  }
177
276
  : {
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])
277
+ min: padRange(filterRange.map(r => r[0])),
278
+ softMin: padRange(filterSoftRange.map(r => r[0])),
279
+ softMax: padRange(filterSoftRange.map(r => r[1])),
280
+ max: padRange(filterRange.map(r => r[1]))
182
281
  }),
183
282
  enabled: filterEnabled,
184
283
  useSoftMargin: Boolean(opts.filterSoftRange),
@@ -193,27 +292,15 @@ function getUniforms64(opts?: DataFilterModuleProps | {}): Record<string, any> {
193
292
  return {};
194
293
  }
195
294
  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
- }
295
+ const min64High = uniforms.min.map(Math.fround);
296
+ uniforms.min = uniforms.min.map((x, i) => x - min64High[i]);
297
+ uniforms.softMin = uniforms.softMin.map((x, i) => x - min64High[i]);
298
+ uniforms.min64High = min64High;
299
+
300
+ const max64High = uniforms.max.map(Math.fround);
301
+ uniforms.max = uniforms.max.map((x, i) => x - max64High[i]);
302
+ uniforms.softMax = uniforms.softMax.map((x, i) => x - max64High[i]);
303
+ uniforms.max64High = max64High;
217
304
  return uniforms;
218
305
  }
219
306
 
@@ -224,8 +311,8 @@ const inject = {
224
311
  #ifdef DATAFILTER_TYPE
225
312
  #ifdef DATAFILTER_DOUBLE
226
313
  dataFilter_setValue(
227
- filterValues - dataFilter.min64High + filterValues64Low,
228
- filterValues - dataFilter.max64High + filterValues64Low
314
+ filterValues - dataFilter_getMin64High(filterValues) + filterValues64Low,
315
+ filterValues - dataFilter_getMax64High(filterValues) + filterValues64Low
229
316
  );
230
317
  #else
231
318
  dataFilter_setValue(filterValues, filterValues);
@@ -258,36 +345,26 @@ const inject = {
258
345
  `
259
346
  };
260
347
 
261
- type UniformTypesFunc = (opts: DataFilterExtensionOptions) => any;
262
- function uniformTypesFromOptions(opts: DataFilterExtensionOptions): any {
263
- const {categorySize, filterSize, fp64} = opts;
264
- const uniformTypes: Record<string, UniformFormat> = {
348
+ type UniformTypesFunc = (opts: DataFilterExtensionOptions) => DataFilterUniformTypeMap;
349
+ function uniformTypesFromOptions(opts: DataFilterExtensionOptions): DataFilterUniformTypeMap {
350
+ const uniformTypes: DataFilterUniformTypeMap = {
265
351
  useSoftMargin: 'i32',
266
352
  enabled: 'i32',
267
353
  transformSize: 'i32',
268
- transformColor: 'i32'
354
+ transformColor: 'i32',
355
+ min: 'vec4<f32>',
356
+ softMin: 'vec4<f32>',
357
+ softMax: 'vec4<f32>',
358
+ max: 'vec4<f32>',
359
+ min64High: 'vec4<f32>',
360
+ max64High: 'vec4<f32>',
361
+ categoryBitMask: 'vec4<u32>'
269
362
  };
270
363
 
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
364
  return uniformTypes;
288
365
  }
289
366
 
290
- export const dataFilter: ShaderModule<DataFilterModuleProps> & {
367
+ export const dataFilter: ShaderModule<DataFilterModuleProps, DataFilterUniforms> & {
291
368
  uniformTypesFromOptions: UniformTypesFunc;
292
369
  } = {
293
370
  name: 'dataFilter',
@@ -298,7 +375,7 @@ export const dataFilter: ShaderModule<DataFilterModuleProps> & {
298
375
  uniformTypesFromOptions
299
376
  };
300
377
 
301
- export const dataFilter64: ShaderModule<DataFilterModuleProps> & {
378
+ export const dataFilter64: ShaderModule<DataFilterModuleProps, DataFilterUniforms> & {
302
379
  uniformTypesFromOptions: UniformTypesFunc;
303
380
  } = {
304
381
  name: 'dataFilter',
@@ -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,