@deck.gl/extensions 9.0.6 → 9.0.8

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.
@@ -5,34 +5,80 @@ import {glsl} from '../utils/syntax-tags';
5
5
  /*
6
6
  * data filter shader module
7
7
  */
8
+ export type Defines = {
9
+ // Defines passed externally
10
+ /**
11
+ * Primitive type of parameter used for category filtering. If undefined, category filtering disabled.
12
+ */
13
+ DATACATEGORY_TYPE?: 'float' | 'vec2' | 'vec3' | 'vec4';
14
+ /**
15
+ * Number of category filtering channels. Must match dimension of `DATACATEGORY_TYPE`
16
+ */
17
+ DATACATEGORY_CHANNELS?: 1 | 2 | 3 | 4;
18
+
19
+ /**
20
+ * Primitive type of parameter used for numeric filtering. If undefined, numeric filtering disabled.
21
+ */
22
+ DATAFILTER_TYPE?: 'float' | 'vec2' | 'vec3' | 'vec4';
23
+
24
+ /**
25
+ * Enable 64-bit precision in numeric filter.
26
+ */
27
+ DATAFILTER_DOUBLE?: boolean;
28
+
29
+ // Defines derived in shader
30
+ /**
31
+ * Numeric filter attribute
32
+ */
33
+ DATAFILTER_ATTRIB?: 'filterValues' | 'instanceFilterValues';
34
+ /**
35
+ * Numeric filter attribute (low bits). Only used when `DATAFILTER_DOUBLE = true`
36
+ */
37
+ DATAFILTER_ATTRIB_64LOW?: 'filterValues64Low' | 'instanceFilterValues64Low';
38
+ /**
39
+ * Category filter attribute
40
+ */
41
+ DATACATEGORY_ATTRIB?: 'filterCategoryValues' | 'instanceFilterCategoryValues';
42
+ };
43
+
8
44
  const vs = glsl`
9
- uniform DATAFILTER_TYPE filter_min;
10
- uniform DATAFILTER_TYPE filter_softMin;
11
- uniform DATAFILTER_TYPE filter_softMax;
12
- uniform DATAFILTER_TYPE filter_max;
13
45
  uniform bool filter_useSoftMargin;
14
46
  uniform bool filter_enabled;
15
47
  uniform bool filter_transformSize;
16
48
  uniform ivec4 filter_categoryBitMask;
17
49
 
18
- #ifdef NON_INSTANCED_MODEL
19
- #define DATAFILTER_ATTRIB filterValues
20
- #define DATAFILTER_ATTRIB_64LOW filterValues64Low
21
- #define DATACATEGORY_ATTRIB filterCategoryValues
22
- #else
23
- #define DATAFILTER_ATTRIB instanceFilterValues
24
- #define DATAFILTER_ATTRIB_64LOW instanceFilterValues64Low
25
- #define DATACATEGORY_ATTRIB instanceFilterCategoryValues
50
+ #ifdef DATAFILTER_TYPE
51
+ uniform DATAFILTER_TYPE filter_min;
52
+ uniform DATAFILTER_TYPE filter_softMin;
53
+ uniform DATAFILTER_TYPE filter_softMax;
54
+ uniform DATAFILTER_TYPE filter_max;
55
+
56
+ #ifdef NON_INSTANCED_MODEL
57
+ #define DATAFILTER_ATTRIB filterValues
58
+ #define DATAFILTER_ATTRIB_64LOW filterValues64Low
59
+ #else
60
+ #define DATAFILTER_ATTRIB instanceFilterValues
61
+ #define DATAFILTER_ATTRIB_64LOW instanceFilterValues64Low
62
+ #endif
63
+
64
+ in DATAFILTER_TYPE DATAFILTER_ATTRIB;
65
+ #ifdef DATAFILTER_DOUBLE
66
+ in DATAFILTER_TYPE DATAFILTER_ATTRIB_64LOW;
67
+
68
+ uniform DATAFILTER_TYPE filter_min64High;
69
+ uniform DATAFILTER_TYPE filter_max64High;
70
+ #endif
26
71
  #endif
27
72
 
28
- in DATAFILTER_TYPE DATAFILTER_ATTRIB;
29
- #ifdef DATAFILTER_DOUBLE
30
- in DATAFILTER_TYPE DATAFILTER_ATTRIB_64LOW;
31
73
 
32
- uniform DATAFILTER_TYPE filter_min64High;
33
- uniform DATAFILTER_TYPE filter_max64High;
74
+ #ifdef DATACATEGORY_TYPE
75
+ #ifdef NON_INSTANCED_MODEL
76
+ #define DATACATEGORY_ATTRIB filterCategoryValues
77
+ #else
78
+ #define DATACATEGORY_ATTRIB instanceFilterCategoryValues
79
+ #endif
80
+ in DATACATEGORY_TYPE DATACATEGORY_ATTRIB;
34
81
  #endif
35
- in DATACATEGORY_TYPE DATACATEGORY_ATTRIB;
36
82
 
37
83
  out float dataFilter_value;
38
84
 
@@ -48,30 +94,35 @@ float dataFilter_reduceValue(vec3 value) {
48
94
  float dataFilter_reduceValue(vec4 value) {
49
95
  return min(min(value.x, value.y), min(value.z, value.w));
50
96
  }
51
- void dataFilter_setValue(DATAFILTER_TYPE valueFromMin, DATAFILTER_TYPE valueFromMax, DATACATEGORY_TYPE category) {
52
- if (filter_enabled) {
97
+
98
+ #ifdef DATAFILTER_ATTRIB
99
+ void dataFilter_setValue(DATAFILTER_TYPE valueFromMin, DATAFILTER_TYPE valueFromMax) {
53
100
  if (filter_useSoftMargin) {
54
101
  dataFilter_value = dataFilter_reduceValue(
55
102
  smoothstep(filter_min, filter_softMin, valueFromMin) *
56
- (1.0 - smoothstep(filter_softMax, filter_max, valueFromMax))
103
+ (1.0 - smoothstep(filter_softMax, filter_max, valueFromMax))
57
104
  );
58
105
  } else {
59
106
  dataFilter_value = dataFilter_reduceValue(
60
107
  step(filter_min, valueFromMin) * step(valueFromMax, filter_max)
61
108
  );
62
109
  }
110
+ }
111
+ #endif
63
112
 
113
+ #ifdef DATACATEGORY_ATTRIB
114
+ void dataFilter_setCategoryValue(DATACATEGORY_TYPE category) {
64
115
  #if DATACATEGORY_CHANNELS == 1 // One 128-bit mask
65
- int dataFilter_masks = filter_categoryBitMask[int(category / 32.0)];
116
+ int dataFilter_masks = filter_categoryBitMask[int(category / 32.0)];
66
117
  #elif DATACATEGORY_CHANNELS == 2 // Two 64-bit masks
67
- ivec2 dataFilter_masks = ivec2(
68
- filter_categoryBitMask[int(category.x / 32.0)],
69
- filter_categoryBitMask[int(category.y / 32.0) + 2]
70
- );
118
+ ivec2 dataFilter_masks = ivec2(
119
+ filter_categoryBitMask[int(category.x / 32.0)],
120
+ filter_categoryBitMask[int(category.y / 32.0) + 2]
121
+ );
71
122
  #elif DATACATEGORY_CHANNELS == 3 // Three 32-bit masks
72
- ivec3 dataFilter_masks = filter_categoryBitMask.xyz;
123
+ ivec3 dataFilter_masks = filter_categoryBitMask.xyz;
73
124
  #else // Four 32-bit masks
74
- ivec4 dataFilter_masks = filter_categoryBitMask;
125
+ ivec4 dataFilter_masks = filter_categoryBitMask;
75
126
  #endif
76
127
 
77
128
  // Shift mask and extract relevant bits
@@ -79,14 +130,12 @@ void dataFilter_setValue(DATAFILTER_TYPE valueFromMin, DATAFILTER_TYPE valueFrom
79
130
  dataFilter_bits = mod(floor(dataFilter_bits), 2.0);
80
131
 
81
132
  #if DATACATEGORY_CHANNELS == 1
82
- if(dataFilter_bits == 0.0) dataFilter_value = 0.0;
133
+ if(dataFilter_bits == 0.0) dataFilter_value = 0.0;
83
134
  #else
84
135
  if(any(equal(dataFilter_bits, DATACATEGORY_TYPE(0.0)))) dataFilter_value = 0.0;
85
136
  #endif
86
- } else {
87
- dataFilter_value = 1.0;
88
137
  }
89
- }
138
+ #endif
90
139
  `;
91
140
 
92
141
  const fs = glsl`
@@ -163,15 +212,23 @@ function getUniforms64(opts?: DataFilterModuleSettings | {}): Record<string, any
163
212
 
164
213
  const inject = {
165
214
  'vs:#main-start': glsl`
166
- #ifdef DATAFILTER_DOUBLE
167
- dataFilter_setValue(
168
- DATAFILTER_ATTRIB - filter_min64High + DATAFILTER_ATTRIB_64LOW,
169
- DATAFILTER_ATTRIB - filter_max64High + DATAFILTER_ATTRIB_64LOW,
170
- DATACATEGORY_ATTRIB
171
- );
172
- #else
173
- dataFilter_setValue(DATAFILTER_ATTRIB, DATAFILTER_ATTRIB, DATACATEGORY_ATTRIB);
174
- #endif
215
+ dataFilter_value = 1.0;
216
+ if (filter_enabled) {
217
+ #ifdef DATAFILTER_ATTRIB
218
+ #ifdef DATAFILTER_DOUBLE
219
+ dataFilter_setValue(
220
+ DATAFILTER_ATTRIB - filter_min64High + DATAFILTER_ATTRIB_64LOW,
221
+ DATAFILTER_ATTRIB - filter_max64High + DATAFILTER_ATTRIB_64LOW
222
+ );
223
+ #else
224
+ dataFilter_setValue(DATAFILTER_ATTRIB, DATAFILTER_ATTRIB);
225
+ #endif
226
+ #endif
227
+
228
+ #ifdef DATACATEGORY_ATTRIB
229
+ dataFilter_setCategoryValue(DATACATEGORY_ATTRIB);
230
+ #endif
231
+ }
175
232
  `,
176
233
 
177
234
  'vs:#main-end': glsl`