@deck.gl/extensions 9.0.5 → 9.0.7
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/dist/data-filter/data-filter-extension.d.ts +5 -5
- package/dist/data-filter/data-filter-extension.d.ts.map +1 -1
- package/dist/data-filter/data-filter-extension.js +45 -38
- package/dist/data-filter/shader-module.d.ts +30 -0
- package/dist/data-filter/shader-module.d.ts.map +1 -1
- package/dist/data-filter/shader-module.js +30 -17
- package/dist/dist.dev.js +112 -82
- package/dist/index.cjs +81 -56
- package/dist/index.cjs.map +2 -2
- package/dist/terrain/terrain-cover.d.ts.map +1 -1
- package/dist/terrain/terrain-cover.js +2 -1
- package/dist/terrain/utils.d.ts +1 -0
- package/dist/terrain/utils.d.ts.map +1 -1
- package/dist/terrain/utils.js +9 -6
- package/dist.min.js +38 -22
- package/package.json +2 -2
- package/src/collision-filter/collision-filter-effect.ts +1 -1
- package/src/data-filter/data-filter-extension.ts +57 -49
- package/src/data-filter/shader-module.ts +98 -41
- package/src/terrain/terrain-cover.ts +2 -1
- package/src/terrain/utils.ts +11 -6
|
@@ -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
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
#
|
|
25
|
-
|
|
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
|
-
|
|
33
|
-
|
|
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
|
-
|
|
52
|
-
|
|
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
|
-
|
|
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
|
-
|
|
116
|
+
int dataFilter_masks = filter_categoryBitMask[int(category / 32.0)];
|
|
66
117
|
#elif DATACATEGORY_CHANNELS == 2 // Two 64-bit masks
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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
|
-
|
|
123
|
+
ivec3 dataFilter_masks = filter_categoryBitMask.xyz;
|
|
73
124
|
#else // Four 32-bit masks
|
|
74
|
-
|
|
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
|
-
|
|
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
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
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`
|
|
@@ -174,7 +174,8 @@ export class TerrainCover {
|
|
|
174
174
|
}
|
|
175
175
|
if (!this.pickingFbo) {
|
|
176
176
|
this.pickingFbo = createRenderTarget(this.targetLayer.context.device, {
|
|
177
|
-
id: `${this.id}-picking
|
|
177
|
+
id: `${this.id}-picking`,
|
|
178
|
+
interpolate: false
|
|
178
179
|
});
|
|
179
180
|
}
|
|
180
181
|
return this.pickingFbo;
|
package/src/terrain/utils.ts
CHANGED
|
@@ -6,6 +6,7 @@ export function createRenderTarget(
|
|
|
6
6
|
opts: {
|
|
7
7
|
id: string;
|
|
8
8
|
float?: boolean;
|
|
9
|
+
interpolate?: boolean;
|
|
9
10
|
}
|
|
10
11
|
) {
|
|
11
12
|
return device.createFramebuffer({
|
|
@@ -18,12 +19,16 @@ export function createRenderTarget(
|
|
|
18
19
|
type: GL.FLOAT
|
|
19
20
|
}),
|
|
20
21
|
mipmaps: false,
|
|
21
|
-
sampler:
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
sampler:
|
|
23
|
+
opts.interpolate === false
|
|
24
|
+
? {
|
|
25
|
+
minFilter: 'nearest',
|
|
26
|
+
magFilter: 'nearest'
|
|
27
|
+
}
|
|
28
|
+
: {
|
|
29
|
+
minFilter: 'linear',
|
|
30
|
+
magFilter: 'linear'
|
|
31
|
+
}
|
|
27
32
|
})
|
|
28
33
|
]
|
|
29
34
|
});
|