@deck.gl/extensions 9.0.40 → 9.1.0-beta.3

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.
Files changed (160) hide show
  1. package/dist/brushing/brushing-extension.d.ts +1 -0
  2. package/dist/brushing/brushing-extension.d.ts.map +1 -1
  3. package/dist/brushing/brushing-extension.js +16 -19
  4. package/dist/brushing/brushing-extension.js.map +1 -0
  5. package/dist/brushing/shader-module.d.ts +8 -2
  6. package/dist/brushing/shader-module.d.ts.map +1 -1
  7. package/dist/brushing/shader-module.js +75 -50
  8. package/dist/brushing/shader-module.js.map +1 -0
  9. package/dist/clip/clip-extension.d.ts +5 -2
  10. package/dist/clip/clip-extension.d.ts.map +1 -1
  11. package/dist/clip/clip-extension.js +37 -42
  12. package/dist/clip/clip-extension.js.map +1 -0
  13. package/dist/collision-filter/collision-filter-effect.d.ts +4 -4
  14. package/dist/collision-filter/collision-filter-effect.d.ts.map +1 -1
  15. package/dist/collision-filter/collision-filter-effect.js +28 -13
  16. package/dist/collision-filter/collision-filter-effect.js.map +1 -0
  17. package/dist/collision-filter/collision-filter-extension.d.ts +1 -1
  18. package/dist/collision-filter/collision-filter-extension.d.ts.map +1 -1
  19. package/dist/collision-filter/collision-filter-extension.js +6 -6
  20. package/dist/collision-filter/collision-filter-extension.js.map +1 -0
  21. package/dist/collision-filter/collision-filter-pass.d.ts +9 -5
  22. package/dist/collision-filter/collision-filter-pass.d.ts.map +1 -1
  23. package/dist/collision-filter/collision-filter-pass.js +15 -4
  24. package/dist/collision-filter/collision-filter-pass.js.map +1 -0
  25. package/dist/collision-filter/shader-module.d.ts +3 -2
  26. package/dist/collision-filter/shader-module.d.ts.map +1 -1
  27. package/dist/collision-filter/shader-module.js +75 -52
  28. package/dist/collision-filter/shader-module.js.map +1 -0
  29. package/dist/data-filter/aggregator.d.ts +4 -10
  30. package/dist/data-filter/aggregator.d.ts.map +1 -1
  31. package/dist/data-filter/aggregator.js +15 -8
  32. package/dist/data-filter/aggregator.js.map +1 -0
  33. package/dist/data-filter/data-filter-extension.d.ts.map +1 -1
  34. package/dist/data-filter/data-filter-extension.js +49 -39
  35. package/dist/data-filter/data-filter-extension.js.map +1 -0
  36. package/dist/data-filter/shader-module.d.ts +12 -5
  37. package/dist/data-filter/shader-module.d.ts.map +1 -1
  38. package/dist/data-filter/shader-module.js +190 -131
  39. package/dist/data-filter/shader-module.js.map +1 -0
  40. package/dist/dist.dev.js +2720 -2037
  41. package/dist/fill-style/fill-style-extension.d.ts.map +1 -1
  42. package/dist/fill-style/fill-style-extension.js +12 -4
  43. package/dist/fill-style/fill-style-extension.js.map +1 -0
  44. package/dist/fill-style/shader-module.d.ts +64 -6
  45. package/dist/fill-style/shader-module.d.ts.map +1 -1
  46. package/dist/fill-style/shader-module.js +74 -51
  47. package/dist/fill-style/shader-module.js.map +1 -0
  48. package/dist/fp64/fp64-extension.d.ts +1 -0
  49. package/dist/fp64/fp64-extension.d.ts.map +1 -1
  50. package/dist/fp64/fp64-extension.js +8 -19
  51. package/dist/fp64/fp64-extension.js.map +1 -0
  52. package/dist/fp64/project64.d.ts +2 -2
  53. package/dist/fp64/project64.d.ts.map +1 -1
  54. package/dist/fp64/project64.glsl.d.ts +1 -1
  55. package/dist/fp64/project64.glsl.d.ts.map +1 -1
  56. package/dist/fp64/project64.glsl.js +19 -21
  57. package/dist/fp64/project64.glsl.js.map +1 -0
  58. package/dist/fp64/project64.js +25 -24
  59. package/dist/fp64/project64.js.map +1 -0
  60. package/dist/index.cjs +1034 -528
  61. package/dist/index.cjs.map +4 -4
  62. package/dist/index.d.ts +1 -0
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +4 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/mask/mask-effect.d.ts +5 -3
  67. package/dist/mask/mask-effect.d.ts.map +1 -1
  68. package/dist/mask/mask-effect.js +13 -5
  69. package/dist/mask/mask-effect.js.map +1 -0
  70. package/dist/mask/mask-extension.d.ts +1 -1
  71. package/dist/mask/mask-extension.d.ts.map +1 -1
  72. package/dist/mask/mask-extension.js +14 -8
  73. package/dist/mask/mask-extension.js.map +1 -0
  74. package/dist/mask/mask-pass.d.ts +2 -43
  75. package/dist/mask/mask-pass.d.ts.map +1 -1
  76. package/dist/mask/mask-pass.js +5 -1
  77. package/dist/mask/mask-pass.js.map +1 -0
  78. package/dist/mask/shader-module.d.ts +60 -3
  79. package/dist/mask/shader-module.d.ts.map +1 -1
  80. package/dist/mask/shader-module.js +74 -46
  81. package/dist/mask/shader-module.js.map +1 -0
  82. package/dist/path-style/path-style-extension.d.ts.map +1 -1
  83. package/dist/path-style/path-style-extension.js +21 -24
  84. package/dist/path-style/path-style-extension.js.map +1 -0
  85. package/dist/path-style/shaders.glsl.d.ts.map +1 -1
  86. package/dist/path-style/shaders.glsl.js +12 -7
  87. package/dist/path-style/shaders.glsl.js.map +1 -0
  88. package/dist/terrain/height-map-builder.d.ts.map +1 -1
  89. package/dist/terrain/height-map-builder.js +4 -0
  90. package/dist/terrain/height-map-builder.js.map +1 -0
  91. package/dist/terrain/shader-module.d.ts +60 -6
  92. package/dist/terrain/shader-module.d.ts.map +1 -1
  93. package/dist/terrain/shader-module.js +70 -61
  94. package/dist/terrain/shader-module.js.map +1 -0
  95. package/dist/terrain/terrain-cover.d.ts.map +1 -1
  96. package/dist/terrain/terrain-cover.js +4 -0
  97. package/dist/terrain/terrain-cover.js.map +1 -0
  98. package/dist/terrain/terrain-effect.d.ts +4 -2
  99. package/dist/terrain/terrain-effect.d.ts.map +1 -1
  100. package/dist/terrain/terrain-effect.js +32 -18
  101. package/dist/terrain/terrain-effect.js.map +1 -0
  102. package/dist/terrain/terrain-extension.d.ts.map +1 -1
  103. package/dist/terrain/terrain-extension.js +4 -0
  104. package/dist/terrain/terrain-extension.js.map +1 -0
  105. package/dist/terrain/terrain-pass.d.ts +6 -41
  106. package/dist/terrain/terrain-pass.d.ts.map +1 -1
  107. package/dist/terrain/terrain-pass.js +12 -1
  108. package/dist/terrain/terrain-pass.js.map +1 -0
  109. package/dist/terrain/terrain-picking-pass.d.ts +7 -1
  110. package/dist/terrain/terrain-picking-pass.d.ts.map +1 -1
  111. package/dist/terrain/terrain-picking-pass.js +12 -1
  112. package/dist/terrain/terrain-picking-pass.js.map +1 -0
  113. package/dist/terrain/utils.d.ts.map +1 -1
  114. package/dist/terrain/utils.js +4 -0
  115. package/dist/terrain/utils.js.map +1 -0
  116. package/dist/utils/debug.d.ts +2 -2
  117. package/dist/utils/debug.d.ts.map +1 -1
  118. package/dist/utils/debug.js +4 -1
  119. package/dist/utils/debug.js.map +1 -0
  120. package/dist/utils/projection-utils.d.ts.map +1 -1
  121. package/dist/utils/projection-utils.js +4 -0
  122. package/dist/utils/projection-utils.js.map +1 -0
  123. package/dist.min.js +1102 -817
  124. package/package.json +8 -8
  125. package/src/brushing/brushing-extension.ts +17 -20
  126. package/src/brushing/shader-module.ts +58 -47
  127. package/src/clip/clip-extension.ts +38 -40
  128. package/src/collision-filter/collision-filter-effect.ts +31 -20
  129. package/src/collision-filter/collision-filter-extension.ts +6 -7
  130. package/src/collision-filter/collision-filter-pass.ts +17 -6
  131. package/src/collision-filter/shader-module.ts +40 -22
  132. package/src/data-filter/aggregator.ts +23 -11
  133. package/src/data-filter/data-filter-extension.ts +76 -49
  134. package/src/data-filter/shader-module.ts +150 -90
  135. package/src/fill-style/fill-style-extension.ts +13 -5
  136. package/src/fill-style/shader-module.ts +84 -52
  137. package/src/fp64/fp64-extension.ts +8 -19
  138. package/src/fp64/project64.glsl.ts +18 -21
  139. package/src/fp64/project64.ts +27 -28
  140. package/src/index.ts +5 -0
  141. package/src/mask/mask-effect.ts +17 -7
  142. package/src/mask/mask-extension.ts +16 -9
  143. package/src/mask/mask-pass.ts +17 -3
  144. package/src/mask/shader-module.ts +63 -27
  145. package/src/path-style/path-style-extension.ts +27 -28
  146. package/src/path-style/shaders.glsl.ts +13 -7
  147. package/src/terrain/height-map-builder.ts +4 -0
  148. package/src/terrain/shader-module.ts +62 -44
  149. package/src/terrain/terrain-cover.ts +4 -0
  150. package/src/terrain/terrain-effect.ts +36 -19
  151. package/src/terrain/terrain-extension.ts +4 -0
  152. package/src/terrain/terrain-pass.ts +19 -3
  153. package/src/terrain/terrain-picking-pass.ts +15 -2
  154. package/src/terrain/utils.ts +4 -0
  155. package/src/utils/debug.ts +4 -0
  156. package/src/utils/projection-utils.ts +4 -0
  157. package/dist/utils/syntax-tags.d.ts +0 -6
  158. package/dist/utils/syntax-tags.d.ts.map +0 -1
  159. package/dist/utils/syntax-tags.js +0 -5
  160. package/src/utils/syntax-tags.ts +0 -5
@@ -1,6 +1,10 @@
1
+ // deck.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
1
5
  import type {ShaderModule} from '@luma.gl/shadertools';
2
- import type {DataFilterExtensionProps} from './data-filter-extension';
3
- import {glsl} from '../utils/syntax-tags';
6
+ import type {DataFilterExtensionOptions, DataFilterExtensionProps} from './data-filter-extension';
7
+ import {UniformFormat} from '@luma.gl/shadertools/dist/types';
4
8
 
5
9
  /*
6
10
  * data filter shader module
@@ -10,7 +14,7 @@ export type Defines = {
10
14
  /**
11
15
  * Primitive type of parameter used for category filtering. If undefined, category filtering disabled.
12
16
  */
13
- DATACATEGORY_TYPE?: 'float' | 'vec2' | 'vec3' | 'vec4';
17
+ DATACATEGORY_TYPE?: 'uint' | 'uvec2' | 'uvec3' | 'uvec4';
14
18
  /**
15
19
  * Number of category filtering channels. Must match dimension of `DATACATEGORY_TYPE`
16
20
  */
@@ -27,27 +31,35 @@ export type Defines = {
27
31
  DATAFILTER_DOUBLE?: boolean;
28
32
  };
29
33
 
30
- const vs = glsl`
31
- uniform bool filter_useSoftMargin;
32
- uniform bool filter_enabled;
33
- uniform bool filter_transformSize;
34
- uniform ivec4 filter_categoryBitMask;
35
-
34
+ const uniformBlock = /* glsl */ `\
35
+ uniform dataFilterUniforms {
36
+ bool useSoftMargin;
37
+ bool enabled;
38
+ bool transformSize;
39
+ bool transformColor;
36
40
  #ifdef DATAFILTER_TYPE
37
- uniform DATAFILTER_TYPE filter_min;
38
- uniform DATAFILTER_TYPE filter_softMin;
39
- uniform DATAFILTER_TYPE filter_softMax;
40
- uniform DATAFILTER_TYPE filter_max;
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
51
+ highp uvec4 categoryBitMask;
52
+ #endif
53
+ } dataFilter;
54
+ `;
41
55
 
56
+ const vertex = /* glsl */ `
57
+ #ifdef DATAFILTER_TYPE
42
58
  in DATAFILTER_TYPE filterValues;
43
- #ifdef DATAFILTER_DOUBLE
44
- in DATAFILTER_TYPE filterValues64Low;
45
-
46
- uniform DATAFILTER_TYPE filter_min64High;
47
- uniform DATAFILTER_TYPE filter_max64High;
48
- #endif
59
+ #ifdef DATAFILTER_DOUBLE
60
+ in DATAFILTER_TYPE filterValues64Low;
61
+ #endif
49
62
  #endif
50
-
51
63
 
52
64
  #ifdef DATACATEGORY_TYPE
53
65
  in DATACATEGORY_TYPE filterCategoryValues;
@@ -70,23 +82,23 @@ float dataFilter_reduceValue(vec4 value) {
70
82
 
71
83
  #ifdef DATAFILTER_TYPE
72
84
  void dataFilter_setValue(DATAFILTER_TYPE valueFromMin, DATAFILTER_TYPE valueFromMax) {
73
- if (filter_useSoftMargin) {
85
+ if (dataFilter.useSoftMargin) {
74
86
  // smoothstep results are undefined if edge0 ≥ edge1
75
87
  // Fallback to ignore filterSoftRange if it is truncated by filterRange
76
88
  DATAFILTER_TYPE leftInRange = mix(
77
- smoothstep(filter_min, filter_softMin, valueFromMin),
78
- step(filter_min, valueFromMin),
79
- step(filter_softMin, filter_min)
89
+ smoothstep(dataFilter.min, dataFilter.softMin, valueFromMin),
90
+ step(dataFilter.min, valueFromMin),
91
+ step(dataFilter.softMin, dataFilter.min)
80
92
  );
81
93
  DATAFILTER_TYPE rightInRange = mix(
82
- 1.0 - smoothstep(filter_softMax, filter_max, valueFromMax),
83
- step(valueFromMax, filter_max),
84
- step(filter_max, filter_softMax)
94
+ 1.0 - smoothstep(dataFilter.softMax, dataFilter.max, valueFromMax),
95
+ step(valueFromMax, dataFilter.max),
96
+ step(dataFilter.max, dataFilter.softMax)
85
97
  );
86
98
  dataFilter_value = dataFilter_reduceValue(leftInRange * rightInRange);
87
99
  } else {
88
100
  dataFilter_value = dataFilter_reduceValue(
89
- step(filter_min, valueFromMin) * step(valueFromMax, filter_max)
101
+ step(dataFilter.min, valueFromMin) * step(valueFromMax, dataFilter.max)
90
102
  );
91
103
  }
92
104
  }
@@ -95,42 +107,53 @@ float dataFilter_reduceValue(vec4 value) {
95
107
  #ifdef DATACATEGORY_TYPE
96
108
  void dataFilter_setCategoryValue(DATACATEGORY_TYPE category) {
97
109
  #if DATACATEGORY_CHANNELS == 1 // One 128-bit mask
98
- int dataFilter_masks = filter_categoryBitMask[int(category / 32.0)];
110
+ uint dataFilter_masks = dataFilter.categoryBitMask[category / 32u];
99
111
  #elif DATACATEGORY_CHANNELS == 2 // Two 64-bit masks
100
- ivec2 dataFilter_masks = ivec2(
101
- filter_categoryBitMask[int(category.x / 32.0)],
102
- filter_categoryBitMask[int(category.y / 32.0) + 2]
112
+ uvec2 dataFilter_masks = uvec2(
113
+ dataFilter.categoryBitMask[category.x / 32u],
114
+ dataFilter.categoryBitMask[category.y / 32u + 2u]
103
115
  );
104
116
  #elif DATACATEGORY_CHANNELS == 3 // Three 32-bit masks
105
- ivec3 dataFilter_masks = filter_categoryBitMask.xyz;
117
+ uvec3 dataFilter_masks = dataFilter.categoryBitMask.xyz;
106
118
  #else // Four 32-bit masks
107
- ivec4 dataFilter_masks = filter_categoryBitMask;
119
+ uvec4 dataFilter_masks = dataFilter.categoryBitMask;
108
120
  #endif
109
121
 
110
122
  // Shift mask and extract relevant bits
111
- DATACATEGORY_TYPE dataFilter_bits = DATACATEGORY_TYPE(dataFilter_masks) / pow(DATACATEGORY_TYPE(2.0), mod(category, 32.0));
112
- dataFilter_bits = mod(floor(dataFilter_bits), 2.0);
123
+ DATACATEGORY_TYPE dataFilter_bits = DATACATEGORY_TYPE(dataFilter_masks) >> (category & 31u);
124
+ dataFilter_bits &= 1u;
113
125
 
114
126
  #if DATACATEGORY_CHANNELS == 1
115
- if(dataFilter_bits == 0.0) dataFilter_value = 0.0;
127
+ if(dataFilter_bits == 0u) dataFilter_value = 0.0;
116
128
  #else
117
- if(any(equal(dataFilter_bits, DATACATEGORY_TYPE(0.0)))) dataFilter_value = 0.0;
129
+ if(any(equal(dataFilter_bits, DATACATEGORY_TYPE(0u)))) dataFilter_value = 0.0;
118
130
  #endif
119
131
  }
120
132
  #endif
121
133
  `;
122
134
 
123
- const fs = glsl`
124
- uniform bool filter_transformColor;
135
+ const vs = `
136
+ ${uniformBlock}
137
+ ${vertex}
138
+ `;
139
+
140
+ const fragment = /* glsl */ `
125
141
  in float dataFilter_value;
126
142
  `;
127
143
 
128
- type DataFilterModuleSettings = {
144
+ const fs = `
145
+ ${uniformBlock}
146
+ ${fragment}
147
+ `;
148
+
149
+ export type CategoryBitMask = Uint32Array;
150
+ export type DataFilterModuleProps = {
129
151
  extensions: any[]; // used to detect if layer props are present
152
+ categoryBitMask?: CategoryBitMask;
130
153
  } & DataFilterExtensionProps;
131
154
 
132
155
  /* eslint-disable camelcase */
133
- function getUniforms(opts?: DataFilterModuleSettings | {}): Record<string, any> {
156
+ function getUniforms(opts?: DataFilterModuleProps | {}): Record<string, any> {
134
157
  if (!opts || !('extensions' in opts)) {
135
158
  return {};
136
159
  }
@@ -138,69 +161,71 @@ function getUniforms(opts?: DataFilterModuleSettings | {}): Record<string, any>
138
161
  filterRange = [-1, 1],
139
162
  filterEnabled = true,
140
163
  filterTransformSize = true,
141
- filterTransformColor = true
164
+ filterTransformColor = true,
165
+ categoryBitMask = [0, 0, 0, 0]
142
166
  } = opts;
143
167
  const filterSoftRange = opts.filterSoftRange || filterRange;
144
168
 
145
169
  return {
146
170
  ...(Number.isFinite(filterRange[0])
147
171
  ? {
148
- filter_min: filterRange[0],
149
- filter_softMin: filterSoftRange[0],
150
- filter_softMax: filterSoftRange[1],
151
- filter_max: filterRange[1]
172
+ min: filterRange[0],
173
+ softMin: filterSoftRange[0],
174
+ softMax: filterSoftRange[1],
175
+ max: filterRange[1]
152
176
  }
153
177
  : {
154
- filter_min: filterRange.map(r => r[0]),
155
- filter_softMin: filterSoftRange.map(r => r[0]),
156
- filter_softMax: filterSoftRange.map(r => r[1]),
157
- filter_max: filterRange.map(r => r[1])
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])
158
182
  }),
159
- filter_enabled: filterEnabled,
160
- filter_useSoftMargin: Boolean(opts.filterSoftRange),
161
- filter_transformSize: filterEnabled && filterTransformSize,
162
- filter_transformColor: filterEnabled && filterTransformColor
183
+ enabled: filterEnabled,
184
+ useSoftMargin: Boolean(opts.filterSoftRange),
185
+ transformSize: filterEnabled && filterTransformSize,
186
+ transformColor: filterEnabled && filterTransformColor,
187
+ categoryBitMask
163
188
  };
164
189
  }
165
190
 
166
- function getUniforms64(opts?: DataFilterModuleSettings | {}): Record<string, any> {
191
+ function getUniforms64(opts?: DataFilterModuleProps | {}): Record<string, any> {
167
192
  if (!opts || !('extensions' in opts)) {
168
193
  return {};
169
194
  }
170
195
  const uniforms = getUniforms(opts);
171
- if (Number.isFinite(uniforms.filter_min)) {
172
- const min64High = Math.fround(uniforms.filter_min);
173
- uniforms.filter_min -= min64High;
174
- uniforms.filter_softMin -= min64High;
175
- uniforms.filter_min64High = min64High;
176
-
177
- const max64High = Math.fround(uniforms.filter_max);
178
- uniforms.filter_max -= max64High;
179
- uniforms.filter_softMax -= max64High;
180
- uniforms.filter_max64High = max64High;
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;
181
206
  } else {
182
- const min64High = uniforms.filter_min.map(Math.fround);
183
- uniforms.filter_min = uniforms.filter_min.map((x, i) => x - min64High[i]);
184
- uniforms.filter_softMin = uniforms.filter_softMin.map((x, i) => x - min64High[i]);
185
- uniforms.filter_min64High = min64High;
186
-
187
- const max64High = uniforms.filter_max.map(Math.fround);
188
- uniforms.filter_max = uniforms.filter_max.map((x, i) => x - max64High[i]);
189
- uniforms.filter_softMax = uniforms.filter_softMax.map((x, i) => x - max64High[i]);
190
- uniforms.filter_max64High = max64High;
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;
191
216
  }
192
217
  return uniforms;
193
218
  }
194
219
 
195
220
  const inject = {
196
- 'vs:#main-start': glsl`
221
+ 'vs:#main-start': /* glsl */ `
197
222
  dataFilter_value = 1.0;
198
- if (filter_enabled) {
223
+ if (dataFilter.enabled) {
199
224
  #ifdef DATAFILTER_TYPE
200
225
  #ifdef DATAFILTER_DOUBLE
201
226
  dataFilter_setValue(
202
- filterValues - filter_min64High + filterValues64Low,
203
- filterValues - filter_max64High + filterValues64Low
227
+ filterValues - dataFilter.min64High + filterValues64Low,
228
+ filterValues - dataFilter.max64High + filterValues64Low
204
229
  );
205
230
  #else
206
231
  dataFilter_setValue(filterValues, filterValues);
@@ -213,38 +238,73 @@ const inject = {
213
238
  }
214
239
  `,
215
240
 
216
- 'vs:#main-end': glsl`
241
+ 'vs:#main-end': /* glsl */ `
217
242
  if (dataFilter_value == 0.0) {
218
243
  gl_Position = vec4(0.);
219
244
  }
220
245
  `,
221
246
 
222
- 'vs:DECKGL_FILTER_SIZE': glsl`
223
- if (filter_transformSize) {
247
+ 'vs:DECKGL_FILTER_SIZE': /* glsl */ `
248
+ if (dataFilter.transformSize) {
224
249
  size = size * dataFilter_value;
225
250
  }
226
251
  `,
227
252
 
228
- 'fs:DECKGL_FILTER_COLOR': glsl`
253
+ 'fs:DECKGL_FILTER_COLOR': /* glsl */ `
229
254
  if (dataFilter_value == 0.0) discard;
230
- if (filter_transformColor) {
255
+ if (dataFilter.transformColor) {
231
256
  color.a *= dataFilter_value;
232
257
  }
233
258
  `
234
259
  };
235
260
 
236
- export const shaderModule: ShaderModule<DataFilterModuleSettings> = {
237
- name: 'data-filter',
261
+ type UniformTypesFunc = (opts: DataFilterExtensionOptions) => any;
262
+ function uniformTypesFromOptions(opts: DataFilterExtensionOptions): any {
263
+ const {categorySize, filterSize, fp64} = opts;
264
+ const uniformTypes: Record<string, UniformFormat> = {
265
+ useSoftMargin: 'i32',
266
+ enabled: 'i32',
267
+ transformSize: 'i32',
268
+ transformColor: 'i32'
269
+ };
270
+
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
+ return uniformTypes;
288
+ }
289
+
290
+ export const dataFilter: ShaderModule<DataFilterModuleProps> & {
291
+ uniformTypesFromOptions: UniformTypesFunc;
292
+ } = {
293
+ name: 'dataFilter',
238
294
  vs,
239
295
  fs,
240
296
  inject,
241
- getUniforms
297
+ getUniforms,
298
+ uniformTypesFromOptions
242
299
  };
243
300
 
244
- export const shaderModule64: ShaderModule<DataFilterModuleSettings> = {
245
- name: 'data-filter-fp64',
301
+ export const dataFilter64: ShaderModule<DataFilterModuleProps> & {
302
+ uniformTypesFromOptions: UniformTypesFunc;
303
+ } = {
304
+ name: 'dataFilter',
246
305
  vs,
247
306
  fs,
248
307
  inject,
249
- getUniforms: getUniforms64
308
+ getUniforms: getUniforms64,
309
+ uniformTypesFromOptions
250
310
  };
@@ -1,6 +1,10 @@
1
+ // deck.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
1
5
  import {LayerExtension} from '@deck.gl/core';
2
6
 
3
- import {patternShaders} from './shader-module';
7
+ import {FillStyleModuleProps, patternShaders} from './shader-module';
4
8
 
5
9
  import type {
6
10
  Layer,
@@ -155,10 +159,14 @@ export default class FillStyleExtension extends LayerExtension<FillStyleExtensio
155
159
  return;
156
160
  }
157
161
 
158
- const {fillPatternAtlas} = this.props;
159
- this.setModuleParameters({
160
- fillPatternTexture: fillPatternAtlas || this.state.emptyTexture
161
- });
162
+ const {fillPatternAtlas, fillPatternEnabled, fillPatternMask} = this.props;
163
+ const fillProps: FillStyleModuleProps = {
164
+ project: params.shaderModuleProps.project,
165
+ fillPatternEnabled,
166
+ fillPatternMask,
167
+ fillPatternTexture: (fillPatternAtlas || this.state.emptyTexture) as Texture
168
+ };
169
+ this.setShaderModuleProps({fill: fillProps});
162
170
  }
163
171
 
164
172
  finalizeState(this: Layer<FillStyleExtensionProps>) {
@@ -1,32 +1,43 @@
1
+ // deck.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
1
5
  import type {ShaderModule} from '@luma.gl/shadertools';
2
6
  import {project, fp64LowPart} from '@deck.gl/core';
3
- import type {Viewport, ProjectUniforms} from '@deck.gl/core';
7
+ import type {ProjectProps, ProjectUniforms} from '@deck.gl/core';
4
8
 
5
9
  import type {Texture} from '@luma.gl/core';
6
- import {glsl} from '../utils/syntax-tags';
10
+
11
+ const uniformBlock = /* glsl */ `\
12
+ uniform fillUniforms {
13
+ vec2 patternTextureSize;
14
+ bool patternEnabled;
15
+ bool patternMask;
16
+ vec2 uvCoordinateOrigin;
17
+ vec2 uvCoordinateOrigin64Low;
18
+ } fill;
19
+ `;
7
20
 
8
21
  /*
9
22
  * fill pattern shader module
10
23
  */
11
- const patternVs = glsl`
24
+ const patternVs = /* glsl */ `
12
25
  in vec4 fillPatternFrames;
13
26
  in float fillPatternScales;
14
27
  in vec2 fillPatternOffsets;
15
28
 
16
- uniform bool fill_patternEnabled;
17
- uniform vec2 fill_patternTextureSize;
18
-
19
29
  out vec2 fill_uv;
20
30
  out vec4 fill_patternBounds;
21
31
  out vec4 fill_patternPlacement;
22
32
  `;
23
33
 
24
- const patternFs = glsl`
25
- uniform bool fill_patternEnabled;
26
- uniform bool fill_patternMask;
34
+ const vs = `
35
+ ${uniformBlock}
36
+ ${patternVs}
37
+ `;
38
+
39
+ const patternFs = /* glsl */ `
27
40
  uniform sampler2D fill_patternTexture;
28
- uniform vec2 fill_uvCoordinateOrigin;
29
- uniform vec2 fill_uvCoordinateOrigin64Low;
30
41
 
31
42
  in vec4 fill_patternBounds;
32
43
  in vec4 fill_patternPlacement;
@@ -35,86 +46,107 @@ in vec2 fill_uv;
35
46
  const float FILL_UV_SCALE = 512.0 / 40000000.0;
36
47
  `;
37
48
 
49
+ const fs = `
50
+ ${uniformBlock}
51
+ ${patternFs}
52
+ `;
53
+
38
54
  const inject = {
39
- 'vs:DECKGL_FILTER_GL_POSITION': glsl`
55
+ 'vs:DECKGL_FILTER_GL_POSITION': /* glsl */ `
40
56
  fill_uv = geometry.position.xy;
41
57
  `,
42
58
 
43
- 'vs:DECKGL_FILTER_COLOR': glsl`
44
- if (fill_patternEnabled) {
45
- fill_patternBounds = fillPatternFrames / vec4(fill_patternTextureSize, fill_patternTextureSize);
59
+ 'vs:DECKGL_FILTER_COLOR': /* glsl */ `
60
+ if (fill.patternEnabled) {
61
+ fill_patternBounds = fillPatternFrames / vec4(fill.patternTextureSize, fill.patternTextureSize);
46
62
  fill_patternPlacement.xy = fillPatternOffsets;
47
63
  fill_patternPlacement.zw = fillPatternScales * fillPatternFrames.zw;
48
64
  }
49
65
  `,
50
66
 
51
- 'fs:DECKGL_FILTER_COLOR': glsl`
52
- if (fill_patternEnabled) {
67
+ 'fs:DECKGL_FILTER_COLOR': /* glsl */ `
68
+ if (fill.patternEnabled) {
53
69
  vec2 scale = FILL_UV_SCALE * fill_patternPlacement.zw;
54
- vec2 patternUV = mod(mod(fill_uvCoordinateOrigin, scale) + fill_uvCoordinateOrigin64Low + fill_uv, scale) / scale;
70
+ vec2 patternUV = mod(mod(fill.uvCoordinateOrigin, scale) + fill.uvCoordinateOrigin64Low + fill_uv, scale) / scale;
55
71
  patternUV = mod(fill_patternPlacement.xy + patternUV, 1.0);
56
72
 
57
73
  vec2 texCoords = fill_patternBounds.xy + fill_patternBounds.zw * patternUV;
58
74
 
59
75
  vec4 patternColor = texture(fill_patternTexture, texCoords);
60
76
  color.a *= patternColor.a;
61
- if (!fill_patternMask) {
77
+ if (!fill.patternMask) {
62
78
  color.rgb = patternColor.rgb;
63
79
  }
64
80
  }
65
81
  `
66
82
  };
67
83
 
68
- type FillStyleModuleSettings =
69
- | {
70
- viewport: Viewport;
71
- fillPatternEnabled?: boolean;
72
- fillPatternMask?: boolean;
73
- }
74
- | {
75
- fillPatternTexture: Texture;
76
- };
84
+ export type FillStyleModuleProps = {
85
+ project: ProjectProps;
86
+ fillPatternEnabled?: boolean;
87
+ fillPatternMask?: boolean;
88
+ fillPatternTexture: Texture;
89
+ };
90
+
91
+ type FillStyleModuleUniforms = {
92
+ patternTextureSize?: [number, number];
93
+ patternEnabled?: boolean;
94
+ patternMask?: boolean;
95
+ uvCoordinateOrigin?: [number, number];
96
+ uvCoordinateOrigin64Low?: [number, number];
97
+ };
98
+
99
+ type FillStyleModuleBindings = {
100
+ fill_patternTexture?: Texture;
101
+ };
77
102
 
78
103
  /* eslint-disable camelcase */
79
104
  function getPatternUniforms(
80
- opts: FillStyleModuleSettings | {},
81
- uniforms: Record<string, any>
82
- ): Record<string, any> {
105
+ opts?: FillStyleModuleProps | {}
106
+ ): FillStyleModuleBindings & FillStyleModuleUniforms {
83
107
  if (!opts) {
84
108
  return {};
85
109
  }
110
+ const uniforms: FillStyleModuleBindings & FillStyleModuleUniforms = {};
86
111
  if ('fillPatternTexture' in opts) {
87
112
  const {fillPatternTexture} = opts;
88
- return {
89
- fill_patternTexture: fillPatternTexture,
90
- fill_patternTextureSize: [fillPatternTexture.width, fillPatternTexture.height]
91
- };
113
+ uniforms.fill_patternTexture = fillPatternTexture;
114
+ uniforms.patternTextureSize = [fillPatternTexture.width, fillPatternTexture.height];
92
115
  }
93
- if ('viewport' in opts) {
116
+ if ('project' in opts) {
94
117
  const {fillPatternMask = true, fillPatternEnabled = true} = opts;
95
- const {project_uCommonOrigin: coordinateOriginCommon} = uniforms as ProjectUniforms;
118
+ const projectUniforms = project.getUniforms(opts.project) as ProjectUniforms;
119
+ const {commonOrigin: coordinateOriginCommon} = projectUniforms;
96
120
 
97
- const coordinateOriginCommon64Low = [
121
+ const coordinateOriginCommon64Low: [number, number] = [
98
122
  fp64LowPart(coordinateOriginCommon[0]),
99
123
  fp64LowPart(coordinateOriginCommon[1])
100
124
  ];
101
125
 
102
- return {
103
- fill_uvCoordinateOrigin: coordinateOriginCommon.slice(0, 2),
104
- fill_uvCoordinateOrigin64Low: coordinateOriginCommon64Low,
105
- fill_patternMask: fillPatternMask,
106
- fill_patternEnabled: fillPatternEnabled
107
- };
126
+ uniforms.uvCoordinateOrigin = coordinateOriginCommon.slice(0, 2) as [number, number];
127
+ uniforms.uvCoordinateOrigin64Low = coordinateOriginCommon64Low;
128
+ uniforms.patternMask = fillPatternMask;
129
+ uniforms.patternEnabled = fillPatternEnabled;
108
130
  }
109
- return {};
131
+ return uniforms;
110
132
  }
111
133
 
112
- export const patternShaders: ShaderModule<FillStyleModuleSettings> = {
113
- name: 'fill-pattern',
114
- vs: patternVs,
115
- fs: patternFs,
134
+ export const patternShaders = {
135
+ name: 'fill',
136
+ vs,
137
+ fs,
116
138
  inject,
117
139
  dependencies: [project],
118
- // @ts-expect-error stricter luma gl types
119
- getUniforms: getPatternUniforms
120
- };
140
+ getUniforms: getPatternUniforms,
141
+ uniformTypes: {
142
+ patternTextureSize: 'vec2<f32>',
143
+ patternEnabled: 'i32',
144
+ patternMask: 'i32',
145
+ uvCoordinateOrigin: 'vec2<f32>',
146
+ uvCoordinateOrigin64Low: 'vec2<f32>'
147
+ }
148
+ } as const satisfies ShaderModule<
149
+ FillStyleModuleProps,
150
+ FillStyleModuleUniforms,
151
+ FillStyleModuleBindings
152
+ >;
@@ -1,22 +1,6 @@
1
- // Copyright (c) 2015 - 2017 Uber Technologies, Inc.
2
- //
3
- // Permission is hereby granted, free of charge, to any person obtaining a copy
4
- // of this software and associated documentation files (the "Software"), to deal
5
- // in the Software without restriction, including without limitation the rights
6
- // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- // copies of the Software, and to permit persons to whom the Software is
8
- // furnished to do so, subject to the following conditions:
9
- //
10
- // The above copyright notice and this permission notice shall be included in
11
- // all copies or substantial portions of the Software.
12
- //
13
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- // THE SOFTWARE.
1
+ // deck.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
20
4
 
21
5
  import {LayerExtension, COORDINATE_SYSTEM} from '@deck.gl/core';
22
6
  import project64 from './project64';
@@ -40,4 +24,9 @@ export default class Fp64Extension extends LayerExtension {
40
24
  modules: [project64]
41
25
  };
42
26
  }
27
+
28
+ draw(this: Layer, params: any, extension: this): void {
29
+ const {viewport} = params.context;
30
+ this.setShaderModuleProps({project64: {viewport}});
31
+ }
43
32
  }