@luma.gl/engine 9.2.6 → 9.3.0-alpha.11
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/animation-loop/animation-loop.d.ts +11 -5
- package/dist/animation-loop/animation-loop.d.ts.map +1 -1
- package/dist/animation-loop/animation-loop.js +83 -47
- package/dist/animation-loop/animation-loop.js.map +1 -1
- package/dist/animation-loop/make-animation-loop.d.ts.map +1 -1
- package/dist/animation-loop/make-animation-loop.js +8 -1
- package/dist/animation-loop/make-animation-loop.js.map +1 -1
- package/dist/animation-loop/request-animation-frame.d.ts.map +1 -1
- package/dist/animation-loop/request-animation-frame.js +23 -6
- package/dist/animation-loop/request-animation-frame.js.map +1 -1
- package/dist/compute/computation.d.ts +3 -7
- package/dist/compute/computation.d.ts.map +1 -1
- package/dist/compute/computation.js +16 -13
- package/dist/compute/computation.js.map +1 -1
- package/dist/compute/swap.d.ts +2 -0
- package/dist/compute/swap.d.ts.map +1 -1
- package/dist/compute/swap.js +10 -5
- package/dist/compute/swap.js.map +1 -1
- package/dist/debug/debug-framebuffer.d.ts +9 -4
- package/dist/debug/debug-framebuffer.d.ts.map +1 -1
- package/dist/debug/debug-framebuffer.js +91 -45
- package/dist/debug/debug-framebuffer.js.map +1 -1
- package/dist/dist.dev.js +2767 -1344
- package/dist/dist.min.js +326 -211
- package/dist/dynamic-texture/dynamic-texture.d.ts +102 -0
- package/dist/dynamic-texture/dynamic-texture.d.ts.map +1 -0
- package/dist/dynamic-texture/dynamic-texture.js +558 -0
- package/dist/dynamic-texture/dynamic-texture.js.map +1 -0
- package/dist/dynamic-texture/texture-data.d.ts +144 -0
- package/dist/dynamic-texture/texture-data.d.ts.map +1 -0
- package/dist/dynamic-texture/texture-data.js +208 -0
- package/dist/dynamic-texture/texture-data.js.map +1 -0
- package/dist/geometries/cone-geometry.d.ts +3 -1
- package/dist/geometries/cone-geometry.d.ts.map +1 -1
- package/dist/geometries/cone-geometry.js.map +1 -1
- package/dist/geometries/cube-geometry.js +7 -7
- package/dist/geometries/cube-geometry.js.map +1 -1
- package/dist/geometries/cylinder-geometry.d.ts +2 -1
- package/dist/geometries/cylinder-geometry.d.ts.map +1 -1
- package/dist/geometries/cylinder-geometry.js.map +1 -1
- package/dist/geometries/ico-sphere-geometry.js +3 -1
- package/dist/geometries/ico-sphere-geometry.js.map +1 -1
- package/dist/geometry/gpu-geometry.d.ts.map +1 -1
- package/dist/geometry/gpu-geometry.js +11 -3
- package/dist/geometry/gpu-geometry.js.map +1 -1
- package/dist/index.cjs +2620 -1267
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +20 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -4
- package/dist/index.js.map +1 -1
- package/dist/material/material-factory.d.ts +73 -0
- package/dist/material/material-factory.d.ts.map +1 -0
- package/dist/material/material-factory.js +111 -0
- package/dist/material/material-factory.js.map +1 -0
- package/dist/material/material.d.ts +84 -0
- package/dist/material/material.d.ts.map +1 -0
- package/dist/material/material.js +176 -0
- package/dist/material/material.js.map +1 -0
- package/dist/model/model.d.ts +47 -16
- package/dist/model/model.d.ts.map +1 -1
- package/dist/model/model.js +148 -71
- package/dist/model/model.js.map +1 -1
- package/dist/model/split-uniforms-and-bindings.d.ts +4 -3
- package/dist/model/split-uniforms-and-bindings.d.ts.map +1 -1
- package/dist/model/split-uniforms-and-bindings.js +2 -2
- package/dist/model/split-uniforms-and-bindings.js.map +1 -1
- package/dist/models/billboard-texture-model.d.ts +8 -5
- package/dist/models/billboard-texture-model.d.ts.map +1 -1
- package/dist/models/billboard-texture-model.js +79 -25
- package/dist/models/billboard-texture-model.js.map +1 -1
- package/dist/models/billboard-texture-module.d.ts +1 -1
- package/dist/models/billboard-texture-module.js +1 -1
- package/dist/models/clip-space.js +7 -7
- package/dist/models/directional-light-model.d.ts +7 -0
- package/dist/models/directional-light-model.d.ts.map +1 -0
- package/dist/models/directional-light-model.js +23 -0
- package/dist/models/directional-light-model.js.map +1 -0
- package/dist/models/light-model-utils.d.ts +69 -0
- package/dist/models/light-model-utils.d.ts.map +1 -0
- package/dist/models/light-model-utils.js +395 -0
- package/dist/models/light-model-utils.js.map +1 -0
- package/dist/models/point-light-model.d.ts +7 -0
- package/dist/models/point-light-model.d.ts.map +1 -0
- package/dist/models/point-light-model.js +22 -0
- package/dist/models/point-light-model.js.map +1 -0
- package/dist/models/spot-light-model.d.ts +7 -0
- package/dist/models/spot-light-model.d.ts.map +1 -0
- package/dist/models/spot-light-model.js +23 -0
- package/dist/models/spot-light-model.js.map +1 -0
- package/dist/modules/picking/color-picking.d.ts +5 -9
- package/dist/modules/picking/color-picking.d.ts.map +1 -1
- package/dist/modules/picking/color-picking.js +122 -115
- package/dist/modules/picking/color-picking.js.map +1 -1
- package/dist/modules/picking/index-picking.d.ts +4 -4
- package/dist/modules/picking/index-picking.d.ts.map +1 -1
- package/dist/modules/picking/index-picking.js +36 -16
- package/dist/modules/picking/index-picking.js.map +1 -1
- package/dist/modules/picking/legacy-color-picking.d.ts +26 -0
- package/dist/modules/picking/legacy-color-picking.d.ts.map +1 -0
- package/dist/modules/picking/legacy-color-picking.js +7 -0
- package/dist/modules/picking/legacy-color-picking.js.map +1 -0
- package/dist/modules/picking/picking-manager.d.ts +29 -3
- package/dist/modules/picking/picking-manager.d.ts.map +1 -1
- package/dist/modules/picking/picking-manager.js +188 -41
- package/dist/modules/picking/picking-manager.js.map +1 -1
- package/dist/modules/picking/picking-uniforms.d.ts +13 -12
- package/dist/modules/picking/picking-uniforms.d.ts.map +1 -1
- package/dist/modules/picking/picking-uniforms.js +27 -14
- package/dist/modules/picking/picking-uniforms.js.map +1 -1
- package/dist/modules/picking/picking.d.ts +25 -0
- package/dist/modules/picking/picking.d.ts.map +1 -0
- package/dist/modules/picking/picking.js +18 -0
- package/dist/modules/picking/picking.js.map +1 -0
- package/dist/passes/get-fragment-shader.js +12 -27
- package/dist/passes/get-fragment-shader.js.map +1 -1
- package/dist/passes/shader-pass-renderer.d.ts +5 -7
- package/dist/passes/shader-pass-renderer.d.ts.map +1 -1
- package/dist/passes/shader-pass-renderer.js +16 -42
- package/dist/passes/shader-pass-renderer.js.map +1 -1
- package/dist/scenegraph/group-node.d.ts +5 -0
- package/dist/scenegraph/group-node.d.ts.map +1 -1
- package/dist/scenegraph/group-node.js +12 -0
- package/dist/scenegraph/group-node.js.map +1 -1
- package/dist/scenegraph/model-node.d.ts +2 -2
- package/dist/scenegraph/model-node.d.ts.map +1 -1
- package/dist/scenegraph/model-node.js.map +1 -1
- package/dist/scenegraph/scenegraph-node.d.ts +1 -1
- package/dist/scenegraph/scenegraph-node.d.ts.map +1 -1
- package/dist/scenegraph/scenegraph-node.js +23 -15
- package/dist/scenegraph/scenegraph-node.js.map +1 -1
- package/dist/shader-inputs.d.ts +9 -7
- package/dist/shader-inputs.d.ts.map +1 -1
- package/dist/shader-inputs.js +90 -13
- package/dist/shader-inputs.js.map +1 -1
- package/dist/utils/buffer-layout-order.d.ts.map +1 -1
- package/dist/utils/buffer-layout-order.js +12 -2
- package/dist/utils/buffer-layout-order.js.map +1 -1
- package/dist/utils/shader-module-utils.d.ts +7 -0
- package/dist/utils/shader-module-utils.d.ts.map +1 -0
- package/dist/utils/shader-module-utils.js +46 -0
- package/dist/utils/shader-module-utils.js.map +1 -0
- package/package.json +6 -6
- package/src/animation-loop/animation-loop.ts +89 -50
- package/src/animation-loop/make-animation-loop.ts +14 -5
- package/src/animation-loop/request-animation-frame.ts +32 -6
- package/src/compute/computation.ts +32 -17
- package/src/compute/swap.ts +13 -7
- package/src/debug/debug-framebuffer.ts +139 -61
- package/src/dynamic-texture/dynamic-texture.ts +730 -0
- package/src/dynamic-texture/texture-data.ts +336 -0
- package/src/{async-texture/texture-setters.ts.disabled → dynamic-texture/texture-data.ts.disabled} +1 -1
- package/src/geometries/cone-geometry.ts +6 -1
- package/src/geometries/cube-geometry.ts +7 -7
- package/src/geometries/cylinder-geometry.ts +5 -1
- package/src/geometries/ico-sphere-geometry.ts +3 -1
- package/src/geometry/gpu-geometry.ts +11 -3
- package/src/index.ts +38 -8
- package/src/material/material-factory.ts +157 -0
- package/src/material/material.ts +254 -0
- package/src/model/model.ts +196 -93
- package/src/model/split-uniforms-and-bindings.ts +8 -6
- package/src/models/billboard-texture-model.ts +90 -29
- package/src/models/billboard-texture-module.ts +1 -1
- package/src/models/clip-space.ts +7 -7
- package/src/models/directional-light-model.ts +32 -0
- package/src/models/light-model-utils.ts +587 -0
- package/src/models/point-light-model.ts +31 -0
- package/src/models/spot-light-model.ts +32 -0
- package/src/modules/picking/color-picking.ts +123 -122
- package/src/modules/picking/index-picking.ts +36 -16
- package/src/modules/picking/legacy-color-picking.ts +8 -0
- package/src/modules/picking/picking-manager.ts +252 -50
- package/src/modules/picking/picking-uniforms.ts +39 -24
- package/src/modules/picking/picking.ts +22 -0
- package/src/passes/get-fragment-shader.ts +12 -27
- package/src/passes/shader-pass-renderer.ts +25 -48
- package/src/scenegraph/group-node.ts +16 -0
- package/src/scenegraph/model-node.ts +2 -2
- package/src/scenegraph/scenegraph-node.ts +27 -16
- package/src/shader-inputs.ts +167 -26
- package/src/utils/buffer-layout-order.ts +18 -2
- package/src/utils/shader-module-utils.ts +65 -0
- package/dist/async-texture/async-texture.d.ts +0 -166
- package/dist/async-texture/async-texture.d.ts.map +0 -1
- package/dist/async-texture/async-texture.js +0 -386
- package/dist/async-texture/async-texture.js.map +0 -1
- package/dist/factories/pipeline-factory.d.ts +0 -37
- package/dist/factories/pipeline-factory.d.ts.map +0 -1
- package/dist/factories/pipeline-factory.js +0 -181
- package/dist/factories/pipeline-factory.js.map +0 -1
- package/dist/factories/shader-factory.d.ts +0 -22
- package/dist/factories/shader-factory.d.ts.map +0 -1
- package/dist/factories/shader-factory.js +0 -88
- package/dist/factories/shader-factory.js.map +0 -1
- package/src/async-texture/async-texture.ts +0 -551
- package/src/factories/pipeline-factory.ts +0 -224
- package/src/factories/shader-factory.ts +0 -103
|
@@ -1,144 +1,178 @@
|
|
|
1
1
|
// luma.gl
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
|
-
import { pickingUniforms, GLSL_UNIFORMS, WGSL_UNIFORMS } from "./picking-uniforms.js";
|
|
4
|
+
import { pickingUniforms, GLSL_UNIFORMS, WGSL_UNIFORMS, INVALID_INDEX } from "./picking-uniforms.js";
|
|
5
5
|
const source = /* wgsl */ `\
|
|
6
6
|
${WGSL_UNIFORMS}
|
|
7
|
-
`;
|
|
8
|
-
const vs = /* glsl */ `\
|
|
9
|
-
${GLSL_UNIFORMS}
|
|
10
|
-
out vec4 picking_vRGBcolor_Avalid;
|
|
11
7
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
8
|
+
const COLOR_PICKING_INVALID_INDEX = ${INVALID_INDEX};
|
|
9
|
+
const COLOR_PICKING_MAX_OBJECT_INDEX = 16777214;
|
|
10
|
+
const COLOR_PICKING_MAX_BATCH_INDEX = 254;
|
|
16
11
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
return picking.useFloatColors > 0.5 ? color : color / 255.0;
|
|
12
|
+
fn picking_setObjectIndex(objectIndex: i32) -> i32 {
|
|
13
|
+
return objectIndex;
|
|
20
14
|
}
|
|
21
15
|
|
|
22
|
-
|
|
23
|
-
return
|
|
16
|
+
fn picking_isObjectHighlighted(objectIndex: i32) -> bool {
|
|
17
|
+
return
|
|
18
|
+
picking.isHighlightActive != 0 &&
|
|
19
|
+
picking.highlightedBatchIndex == picking.batchIndex &&
|
|
20
|
+
picking.highlightedObjectIndex == objectIndex;
|
|
24
21
|
}
|
|
25
22
|
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
fn picking_filterHighlightColor(color: vec4<f32>, objectIndex: i32) -> vec4<f32> {
|
|
24
|
+
if (picking.isActive != 0 || !picking_isObjectHighlighted(objectIndex)) {
|
|
25
|
+
return color;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
let highLightAlpha = picking.highlightColor.a;
|
|
29
|
+
let blendedAlpha = highLightAlpha + color.a * (1.0 - highLightAlpha);
|
|
30
|
+
if (blendedAlpha == 0.0) {
|
|
31
|
+
return vec4<f32>(color.rgb, 0.0);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
let highLightRatio = highLightAlpha / blendedAlpha;
|
|
35
|
+
let blendedRGB = mix(color.rgb, picking.highlightColor.rgb, highLightRatio);
|
|
36
|
+
return vec4<f32>(blendedRGB, blendedAlpha);
|
|
28
37
|
}
|
|
29
38
|
|
|
30
|
-
|
|
31
|
-
bool isVertexHighlighted(vec3 vertexColor) {
|
|
32
|
-
vec3 highlightedObjectColor = picking_normalizeColor(picking.highlightedObjectColor);
|
|
39
|
+
fn picking_canEncodePickInfo(objectIndex: i32) -> bool {
|
|
33
40
|
return
|
|
34
|
-
|
|
41
|
+
objectIndex != COLOR_PICKING_INVALID_INDEX &&
|
|
42
|
+
objectIndex >= 0 &&
|
|
43
|
+
objectIndex <= COLOR_PICKING_MAX_OBJECT_INDEX &&
|
|
44
|
+
picking.batchIndex >= 0 &&
|
|
45
|
+
picking.batchIndex <= COLOR_PICKING_MAX_BATCH_INDEX;
|
|
35
46
|
}
|
|
36
47
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
if (bool(picking.isActive)) {
|
|
42
|
-
// Use alpha as the validity flag. If pickingColor is [0, 0, 0] fragment is non-pickable
|
|
43
|
-
picking_vRGBcolor_Avalid.a = float(picking_isColorValid(pickingColor));
|
|
44
|
-
|
|
45
|
-
if (!bool(picking.isAttribute)) {
|
|
46
|
-
// Stores the picking color so that the fragment shader can render it during picking
|
|
47
|
-
picking_vRGBcolor_Avalid.rgb = pickingColor;
|
|
48
|
-
}
|
|
49
|
-
} else {
|
|
50
|
-
// Do the comparison with selected item color in vertex shader as it should mean fewer compares
|
|
51
|
-
picking_vRGBcolor_Avalid.a = float(isVertexHighlighted(pickingColor));
|
|
48
|
+
fn picking_getPickingColor(objectIndex: i32) -> vec4<f32> {
|
|
49
|
+
if (!picking_canEncodePickInfo(objectIndex)) {
|
|
50
|
+
return vec4<f32>(0.0, 0.0, 0.0, 0.0);
|
|
52
51
|
}
|
|
52
|
+
|
|
53
|
+
let encodedObjectIndex = objectIndex + 1;
|
|
54
|
+
let red = encodedObjectIndex % 256;
|
|
55
|
+
let green = (encodedObjectIndex / 256) % 256;
|
|
56
|
+
let blue = (encodedObjectIndex / 65536) % 256;
|
|
57
|
+
let alpha = picking.batchIndex + 1;
|
|
58
|
+
|
|
59
|
+
return vec4<f32>(
|
|
60
|
+
f32(red) / 255.0,
|
|
61
|
+
f32(green) / 255.0,
|
|
62
|
+
f32(blue) / 255.0,
|
|
63
|
+
f32(alpha) / 255.0
|
|
64
|
+
);
|
|
53
65
|
}
|
|
54
66
|
|
|
55
|
-
|
|
56
|
-
if (
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
index = uint(gl_InstanceID);
|
|
67
|
+
fn picking_filterPickingColor(color: vec4<f32>, objectIndex: i32) -> vec4<f32> {
|
|
68
|
+
if (picking.isActive != 0) {
|
|
69
|
+
if (!picking_canEncodePickInfo(objectIndex)) {
|
|
70
|
+
discard;
|
|
60
71
|
}
|
|
61
|
-
|
|
62
|
-
picking_vRGBcolor_Avalid.g = float((index / 255) % 255) / 255.0;
|
|
63
|
-
picking_vRGBcolor_Avalid.b = float((index / 255 / 255) %255) / 255.0;
|
|
72
|
+
return picking_getPickingColor(objectIndex);
|
|
64
73
|
}
|
|
65
|
-
}
|
|
66
74
|
|
|
67
|
-
|
|
68
|
-
if (bool(picking.isAttribute)) {
|
|
69
|
-
picking_vRGBcolor_Avalid.r = value;
|
|
70
|
-
}
|
|
75
|
+
return color;
|
|
71
76
|
}
|
|
77
|
+
`;
|
|
78
|
+
const vs = /* glsl */ `\
|
|
79
|
+
${GLSL_UNIFORMS}
|
|
72
80
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
}
|
|
81
|
+
const int INDEX_PICKING_MODE_INSTANCE = 0;
|
|
82
|
+
const int INDEX_PICKING_MODE_CUSTOM = 1;
|
|
83
|
+
|
|
84
|
+
const int COLOR_PICKING_INVALID_INDEX = ${INVALID_INDEX};
|
|
78
85
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
86
|
+
flat out int picking_objectIndex;
|
|
87
|
+
|
|
88
|
+
void picking_setObjectIndex(int objectIndex) {
|
|
89
|
+
switch (picking.indexMode) {
|
|
90
|
+
case INDEX_PICKING_MODE_INSTANCE:
|
|
91
|
+
picking_objectIndex = gl_InstanceID;
|
|
92
|
+
break;
|
|
93
|
+
case INDEX_PICKING_MODE_CUSTOM:
|
|
94
|
+
picking_objectIndex = objectIndex;
|
|
95
|
+
break;
|
|
82
96
|
}
|
|
83
97
|
}
|
|
84
98
|
`;
|
|
85
99
|
const fs = /* glsl */ `\
|
|
86
100
|
${GLSL_UNIFORMS}
|
|
87
101
|
|
|
88
|
-
|
|
102
|
+
const int COLOR_PICKING_INVALID_INDEX = ${INVALID_INDEX};
|
|
103
|
+
const int COLOR_PICKING_MAX_OBJECT_INDEX = 16777214;
|
|
104
|
+
const int COLOR_PICKING_MAX_BATCH_INDEX = 254;
|
|
105
|
+
|
|
106
|
+
flat in int picking_objectIndex;
|
|
107
|
+
|
|
108
|
+
bool picking_isFragmentHighlighted() {
|
|
109
|
+
return
|
|
110
|
+
bool(picking.isHighlightActive) &&
|
|
111
|
+
picking.highlightedBatchIndex == picking.batchIndex &&
|
|
112
|
+
picking.highlightedObjectIndex == picking_objectIndex
|
|
113
|
+
;
|
|
114
|
+
}
|
|
89
115
|
|
|
90
|
-
/*
|
|
91
|
-
* Returns highlight color if this item is selected.
|
|
92
|
-
*/
|
|
93
116
|
vec4 picking_filterHighlightColor(vec4 color) {
|
|
94
|
-
|
|
95
|
-
if (picking.isActive > 0.5) {
|
|
117
|
+
if (bool(picking.isActive)) {
|
|
96
118
|
return color;
|
|
97
119
|
}
|
|
98
120
|
|
|
99
|
-
|
|
121
|
+
if (!picking_isFragmentHighlighted()) {
|
|
122
|
+
return color;
|
|
123
|
+
}
|
|
100
124
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
float blendedAlpha = highLightAlpha + color.a * (1.0 - highLightAlpha);
|
|
105
|
-
float highLightRatio = highLightAlpha / blendedAlpha;
|
|
125
|
+
float highLightAlpha = picking.highlightColor.a;
|
|
126
|
+
float blendedAlpha = highLightAlpha + color.a * (1.0 - highLightAlpha);
|
|
127
|
+
float highLightRatio = highLightAlpha / blendedAlpha;
|
|
106
128
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
129
|
+
vec3 blendedRGB = mix(color.rgb, picking.highlightColor.rgb, highLightRatio);
|
|
130
|
+
return vec4(blendedRGB, blendedAlpha);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
bool picking_canEncodePickInfo(int objectIndex) {
|
|
134
|
+
return
|
|
135
|
+
objectIndex != COLOR_PICKING_INVALID_INDEX &&
|
|
136
|
+
objectIndex >= 0 &&
|
|
137
|
+
objectIndex <= COLOR_PICKING_MAX_OBJECT_INDEX &&
|
|
138
|
+
picking.batchIndex >= 0 &&
|
|
139
|
+
picking.batchIndex <= COLOR_PICKING_MAX_BATCH_INDEX;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
vec4 picking_getPickingColor() {
|
|
143
|
+
if (!picking_canEncodePickInfo(picking_objectIndex)) {
|
|
144
|
+
return vec4(0.0);
|
|
111
145
|
}
|
|
146
|
+
|
|
147
|
+
int encodedObjectIndex = picking_objectIndex + 1;
|
|
148
|
+
int red = encodedObjectIndex % 256;
|
|
149
|
+
int green = (encodedObjectIndex / 256) % 256;
|
|
150
|
+
int blue = (encodedObjectIndex / 65536) % 256;
|
|
151
|
+
int alpha = picking.batchIndex + 1;
|
|
152
|
+
|
|
153
|
+
return vec4(float(red), float(green), float(blue), float(alpha)) / 255.0;
|
|
112
154
|
}
|
|
113
155
|
|
|
114
|
-
/*
|
|
115
|
-
* Returns picking color if picking enabled else unmodified argument.
|
|
116
|
-
*/
|
|
117
156
|
vec4 picking_filterPickingColor(vec4 color) {
|
|
118
157
|
if (bool(picking.isActive)) {
|
|
119
|
-
if (
|
|
158
|
+
if (!picking_canEncodePickInfo(picking_objectIndex)) {
|
|
120
159
|
discard;
|
|
121
160
|
}
|
|
122
|
-
return
|
|
161
|
+
return picking_getPickingColor();
|
|
123
162
|
}
|
|
163
|
+
|
|
124
164
|
return color;
|
|
125
165
|
}
|
|
126
166
|
|
|
127
|
-
/*
|
|
128
|
-
* Returns picking color if picking is enabled if not
|
|
129
|
-
* highlight color if this item is selected, otherwise unmodified argument.
|
|
130
|
-
*/
|
|
131
167
|
vec4 picking_filterColor(vec4 color) {
|
|
132
|
-
vec4
|
|
133
|
-
|
|
168
|
+
vec4 outColor = color;
|
|
169
|
+
outColor = picking_filterHighlightColor(outColor);
|
|
170
|
+
outColor = picking_filterPickingColor(outColor);
|
|
171
|
+
return outColor;
|
|
134
172
|
}
|
|
135
173
|
`;
|
|
136
174
|
/**
|
|
137
|
-
* Provides support for
|
|
138
|
-
* In particular, supports picking a specific instance in an instanced
|
|
139
|
-
* draw call and highlighting an instance based on its picking color,
|
|
140
|
-
* and correspondingly, supports picking and highlighting groups of
|
|
141
|
-
* primitives with the same picking color in non-instanced draw-calls
|
|
175
|
+
* Provides support for object-index based color picking and highlighting.
|
|
142
176
|
*/
|
|
143
177
|
export const picking = {
|
|
144
178
|
...pickingUniforms,
|
|
@@ -147,31 +181,4 @@ export const picking = {
|
|
|
147
181
|
vs,
|
|
148
182
|
fs
|
|
149
183
|
};
|
|
150
|
-
// function getUniforms(opts: PickingProps = {}, prevUniforms?: PickingUniforms): PickingUniforms {
|
|
151
|
-
// const uniforms = {} as PickingUniforms;
|
|
152
|
-
// if (opts.highlightedObjectColor === undefined) {
|
|
153
|
-
// // Unless highlightedObjectColor explicitly null or set, do not update state
|
|
154
|
-
// } else if (opts.highlightedObjectColor === null) {
|
|
155
|
-
// uniforms.isHighlightActive = false;
|
|
156
|
-
// } else {
|
|
157
|
-
// uniforms.isHighlightActive = true;
|
|
158
|
-
// const highlightedObjectColor = opts.highlightedObjectColor.slice(0, 3);
|
|
159
|
-
// uniforms.highlightedObjectColor = highlightedObjectColor;
|
|
160
|
-
// }
|
|
161
|
-
// if (opts.highlightColor) {
|
|
162
|
-
// const color = Array.from(opts.highlightColor, x => x / 255);
|
|
163
|
-
// if (!Number.isFinite(color[3])) {
|
|
164
|
-
// color[3] = 1;
|
|
165
|
-
// }
|
|
166
|
-
// uniforms.highlightColor = color;
|
|
167
|
-
// }
|
|
168
|
-
// if (opts.isActive !== undefined) {
|
|
169
|
-
// uniforms.isActive = Boolean(opts.isActive);
|
|
170
|
-
// uniforms.isAttribute = Boolean(opts.isAttribute);
|
|
171
|
-
// }
|
|
172
|
-
// if (opts.useFloatColors !== undefined) {
|
|
173
|
-
// uniforms.useFloatColors = Boolean(opts.useFloatColors);
|
|
174
|
-
// }
|
|
175
|
-
// return uniforms;
|
|
176
|
-
// }
|
|
177
184
|
//# sourceMappingURL=color-picking.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color-picking.js","sourceRoot":"","sources":["../../../src/modules/picking/color-picking.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAKpC,OAAO,EAAC,eAAe,EAAE,aAAa,EAAE,aAAa,EAAC,8BAA2B;
|
|
1
|
+
{"version":3,"file":"color-picking.js","sourceRoot":"","sources":["../../../src/modules/picking/color-picking.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAKpC,OAAO,EAAC,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAC,8BAA2B;AAEhG,MAAM,MAAM,GAAG,UAAU,CAAC;EACxB,aAAa;;sCAEuB,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqElD,CAAC;AAEF,MAAM,EAAE,GAAG,UAAU,CAAC;EACpB,aAAa;;;;;0CAK2B,aAAa;;;;;;;;;;;;;;CActD,CAAC;AAEF,MAAM,EAAE,GAAG,UAAU,CAAC;EACpB,aAAa;;0CAE2B,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuEtD,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,GAAG,eAAe;IAClB,IAAI,EAAE,SAAS;IACf,MAAM;IACN,EAAE;IACF,EAAE;CAC6E,CAAC"}
|
|
@@ -12,9 +12,9 @@ import type { PickingProps, PickingUniforms } from "./picking-uniforms.js";
|
|
|
12
12
|
*/
|
|
13
13
|
export declare const picking: {
|
|
14
14
|
readonly name: "picking";
|
|
15
|
-
readonly source: "struct pickingUniforms {\n isActive:
|
|
16
|
-
readonly vs: "precision highp float;\nprecision highp int;\n\
|
|
17
|
-
readonly fs: "precision highp float;\nprecision highp int;\n\
|
|
15
|
+
readonly source: "struct pickingUniforms {\n isActive: i32,\n indexMode: i32,\n batchIndex: i32,\n\n isHighlightActive: i32,\n highlightedBatchIndex: i32,\n highlightedObjectIndex: i32,\n highlightColor: vec4<f32>,\n};\n\n@group(0) @binding(auto) var<uniform> picking: pickingUniforms;\n\n\nconst INDEX_PICKING_MODE_INSTANCE = 0;\nconst INDEX_PICKING_MODE_CUSTOM = 1;\nconst INDEX_PICKING_INVALID_INDEX = -1; // 2^32 - 1\n\n/**\n * WGSL shaders need to carry the returned object index through their own stage outputs.\n */\nfn picking_setObjectIndex(objectIndex: i32) -> i32 {\n return objectIndex;\n}\n\nfn picking_isObjectHighlighted(objectIndex: i32) -> bool {\n return\n picking.isHighlightActive != 0 &&\n picking.highlightedBatchIndex == picking.batchIndex &&\n picking.highlightedObjectIndex == objectIndex;\n}\n\nfn picking_filterHighlightColor(color: vec4<f32>, objectIndex: i32) -> vec4<f32> {\n if (picking.isActive != 0 || !picking_isObjectHighlighted(objectIndex)) {\n return color;\n }\n\n let highLightAlpha = picking.highlightColor.a;\n let blendedAlpha = highLightAlpha + color.a * (1.0 - highLightAlpha);\n if (blendedAlpha == 0.0) {\n return vec4<f32>(color.rgb, 0.0);\n }\n\n let highLightRatio = highLightAlpha / blendedAlpha;\n let blendedRGB = mix(color.rgb, picking.highlightColor.rgb, highLightRatio);\n return vec4<f32>(blendedRGB, blendedAlpha);\n}\n\nfn picking_filterPickingColor(color: vec4<f32>, objectIndex: i32) -> vec4<f32> {\n if (picking.isActive != 0 && objectIndex == INDEX_PICKING_INVALID_INDEX) {\n discard;\n }\n return color;\n}\n\nfn picking_getPickingColor(objectIndex: i32) -> vec2<i32> {\n return vec2<i32>(objectIndex, picking.batchIndex);\n}\n\n";
|
|
16
|
+
readonly vs: "precision highp float;\nprecision highp int;\n\nlayout(std140) uniform pickingUniforms {\n int isActive;\n int indexMode;\n int batchIndex;\n\n int isHighlightActive;\n int highlightedBatchIndex;\n int highlightedObjectIndex;\n vec4 highlightColor;\n} picking;\n\n\nconst int INDEX_PICKING_MODE_INSTANCE = 0;\nconst int INDEX_PICKING_MODE_CUSTOM = 1;\n\nconst int INDEX_PICKING_INVALID_INDEX = -1; // 2^32 - 1\n\nflat out int picking_objectIndex;\n\n/**\n * Vertex shaders should call this function to set the object index.\n * If using instance or vertex mode, argument will be ignored, 0 can be supplied.\n */\nvoid picking_setObjectIndex(int objectIndex) {\n switch (picking.indexMode) {\n case INDEX_PICKING_MODE_INSTANCE:\n picking_objectIndex = gl_InstanceID;\n break;\n case INDEX_PICKING_MODE_CUSTOM:\n picking_objectIndex = objectIndex;\n break;\n }\n}\n";
|
|
17
|
+
readonly fs: "precision highp float;\nprecision highp int;\n\nlayout(std140) uniform pickingUniforms {\n int isActive;\n int indexMode;\n int batchIndex;\n\n int isHighlightActive;\n int highlightedBatchIndex;\n int highlightedObjectIndex;\n vec4 highlightColor;\n} picking;\n\n\nconst int INDEX_PICKING_INVALID_INDEX = -1; // 2^32 - 1\n\nflat in int picking_objectIndex;\n\n/**\n * Check if this vertex is highlighted (part of the selected batch and object)\n */ \nbool picking_isFragmentHighlighted() {\n return \n bool(picking.isHighlightActive) &&\n picking.highlightedBatchIndex == picking.batchIndex &&\n picking.highlightedObjectIndex == picking_objectIndex\n ;\n}\n\n/**\n * Returns highlight color if this item is selected.\n */\nvec4 picking_filterHighlightColor(vec4 color) {\n // If we are still picking, we don't highlight\n if (bool(picking.isActive)) {\n return color;\n }\n\n // If we are not highlighted, return color as is\n if (!picking_isFragmentHighlighted()) {\n return color;\n }\n \n // Blend in highlight color based on its alpha value\n float highLightAlpha = picking.highlightColor.a;\n float blendedAlpha = highLightAlpha + color.a * (1.0 - highLightAlpha);\n float highLightRatio = highLightAlpha / blendedAlpha;\n\n vec3 blendedRGB = mix(color.rgb, picking.highlightColor.rgb, highLightRatio);\n return vec4(blendedRGB, blendedAlpha);\n}\n\n/*\n * Returns picking color if picking enabled else unmodified argument.\n */\nivec4 picking_getPickingColor() {\n // Assumes that colorAttachment0 is rg32int\n // TODO? - we could render indices into a second color attachment and not mess with fragColor\n return ivec4(picking_objectIndex, picking.batchIndex, 0u, 0u); \n}\n\nvec4 picking_filterPickingColor(vec4 color) {\n if (bool(picking.isActive)) {\n if (picking_objectIndex == INDEX_PICKING_INVALID_INDEX) {\n discard;\n }\n }\n return color;\n}\n\n/*\n * Returns picking color if picking is enabled if not\n * highlight color if this item is selected, otherwise unmodified argument.\n */\nvec4 picking_filterColor(vec4 color) {\n vec4 outColor = color;\n outColor = picking_filterHighlightColor(outColor);\n outColor = picking_filterPickingColor(outColor);\n return outColor;\n}\n";
|
|
18
18
|
readonly props: PickingProps;
|
|
19
19
|
readonly uniforms: PickingUniforms;
|
|
20
20
|
readonly uniformTypes: Required<import("@luma.gl/shadertools").UniformTypes<PickingUniforms>>;
|
|
@@ -22,7 +22,7 @@ export declare const picking: {
|
|
|
22
22
|
readonly isActive: false;
|
|
23
23
|
readonly indexMode: 0;
|
|
24
24
|
readonly batchIndex: 0;
|
|
25
|
-
readonly isHighlightActive:
|
|
25
|
+
readonly isHighlightActive: false;
|
|
26
26
|
readonly highlightedBatchIndex: -1;
|
|
27
27
|
readonly highlightedObjectIndex: -1;
|
|
28
28
|
readonly highlightColor: import("@math.gl/types").NumberArray4;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-picking.d.ts","sourceRoot":"","sources":["../../../src/modules/picking/index-picking.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAkB,YAAY,EAAE,eAAe,EAAC,8BAA2B;
|
|
1
|
+
{"version":3,"file":"index-picking.d.ts","sourceRoot":"","sources":["../../../src/modules/picking/index-picking.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAkB,YAAY,EAAE,eAAe,EAAC,8BAA2B;AAwJvF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;CAM6D,CAAC"}
|
|
@@ -10,25 +10,45 @@ const INDEX_PICKING_MODE_INSTANCE = 0;
|
|
|
10
10
|
const INDEX_PICKING_MODE_CUSTOM = 1;
|
|
11
11
|
const INDEX_PICKING_INVALID_INDEX = ${INVALID_INDEX}; // 2^32 - 1
|
|
12
12
|
|
|
13
|
-
struct indexPickingFragmentInputs = {
|
|
14
|
-
objectIndex: int32;
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
let indexPickingFragmentInputs: indexPickingFragmentInputs;
|
|
18
|
-
|
|
19
13
|
/**
|
|
20
|
-
*
|
|
21
|
-
* If using instance or vertex mode, argument will be ignored, 0 can be supplied.
|
|
14
|
+
* WGSL shaders need to carry the returned object index through their own stage outputs.
|
|
22
15
|
*/
|
|
23
|
-
fn picking_setObjectIndex(objectIndex:
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
16
|
+
fn picking_setObjectIndex(objectIndex: i32) -> i32 {
|
|
17
|
+
return objectIndex;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
fn picking_isObjectHighlighted(objectIndex: i32) -> bool {
|
|
21
|
+
return
|
|
22
|
+
picking.isHighlightActive != 0 &&
|
|
23
|
+
picking.highlightedBatchIndex == picking.batchIndex &&
|
|
24
|
+
picking.highlightedObjectIndex == objectIndex;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
fn picking_filterHighlightColor(color: vec4<f32>, objectIndex: i32) -> vec4<f32> {
|
|
28
|
+
if (picking.isActive != 0 || !picking_isObjectHighlighted(objectIndex)) {
|
|
29
|
+
return color;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
let highLightAlpha = picking.highlightColor.a;
|
|
33
|
+
let blendedAlpha = highLightAlpha + color.a * (1.0 - highLightAlpha);
|
|
34
|
+
if (blendedAlpha == 0.0) {
|
|
35
|
+
return vec4<f32>(color.rgb, 0.0);
|
|
31
36
|
}
|
|
37
|
+
|
|
38
|
+
let highLightRatio = highLightAlpha / blendedAlpha;
|
|
39
|
+
let blendedRGB = mix(color.rgb, picking.highlightColor.rgb, highLightRatio);
|
|
40
|
+
return vec4<f32>(blendedRGB, blendedAlpha);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
fn picking_filterPickingColor(color: vec4<f32>, objectIndex: i32) -> vec4<f32> {
|
|
44
|
+
if (picking.isActive != 0 && objectIndex == INDEX_PICKING_INVALID_INDEX) {
|
|
45
|
+
discard;
|
|
46
|
+
}
|
|
47
|
+
return color;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
fn picking_getPickingColor(objectIndex: i32) -> vec2<i32> {
|
|
51
|
+
return vec2<i32>(objectIndex, picking.batchIndex);
|
|
32
52
|
}
|
|
33
53
|
|
|
34
54
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-picking.js","sourceRoot":"","sources":["../../../src/modules/picking/index-picking.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAKpC,OAAO,EAAC,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAC,8BAA2B;AAEhG,UAAU;AAEV,MAAM,MAAM,GAAG,UAAU,CAAC;EACxB,aAAa;;;;sCAIuB,aAAa
|
|
1
|
+
{"version":3,"file":"index-picking.js","sourceRoot":"","sources":["../../../src/modules/picking/index-picking.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAKpC,OAAO,EAAC,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAC,8BAA2B;AAEhG,UAAU;AAEV,MAAM,MAAM,GAAG,UAAU,CAAC;EACxB,aAAa;;;;sCAIuB,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2ClD,CAAC;AAEF,MAAM,EAAE,GAAG,UAAU,CAAC;EACpB,aAAa;;;;;0CAK2B,aAAa;;;;;;;;;;;;;;;;;;CAkBtD,CAAC;AAEF,MAAM,EAAE,GAAG,UAAU,CAAC;EACpB,aAAa;;0CAE2B,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkEtD,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,GAAG,eAAe;IAClB,IAAI,EAAE,SAAS;IACf,MAAM;IACN,EAAE;IACF,EAAE;CAC6E,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** @deprecated Use `picking`/`colorPicking` for object picking. */
|
|
2
|
+
export declare const legacyColorPicking: {
|
|
3
|
+
readonly props: import("@luma.gl/shadertools").PickingProps;
|
|
4
|
+
readonly uniforms: import("@luma.gl/shadertools").PickingUniforms;
|
|
5
|
+
readonly name: "picking";
|
|
6
|
+
readonly uniformTypes: {
|
|
7
|
+
readonly isActive: "f32";
|
|
8
|
+
readonly isAttribute: "f32";
|
|
9
|
+
readonly isHighlightActive: "f32";
|
|
10
|
+
readonly useFloatColors: "f32";
|
|
11
|
+
readonly highlightedObjectColor: "vec3<f32>";
|
|
12
|
+
readonly highlightColor: "vec4<f32>";
|
|
13
|
+
};
|
|
14
|
+
readonly defaultUniforms: {
|
|
15
|
+
readonly isActive: false;
|
|
16
|
+
readonly isAttribute: false;
|
|
17
|
+
readonly isHighlightActive: false;
|
|
18
|
+
readonly useFloatColors: true;
|
|
19
|
+
readonly highlightedObjectColor: [0, 0, 0];
|
|
20
|
+
readonly highlightColor: import("@math.gl/types").NumberArray4;
|
|
21
|
+
};
|
|
22
|
+
readonly vs: "layout(std140) uniform pickingUniforms {\n float isActive;\n float isAttribute;\n float isHighlightActive;\n float useFloatColors;\n vec3 highlightedObjectColor;\n vec4 highlightColor;\n} picking;\n\nout vec4 picking_vRGBcolor_Avalid;\n\n// Normalize unsigned byte color to 0-1 range\nvec3 picking_normalizeColor(vec3 color) {\n return picking.useFloatColors > 0.5 ? color : color / 255.0;\n}\n\n// Normalize unsigned byte color to 0-1 range\nvec4 picking_normalizeColor(vec4 color) {\n return picking.useFloatColors > 0.5 ? color : color / 255.0;\n}\n\nbool picking_isColorZero(vec3 color) {\n return dot(color, vec3(1.0)) < 0.00001;\n}\n\nbool picking_isColorValid(vec3 color) {\n return dot(color, vec3(1.0)) > 0.00001;\n}\n\n// Check if this vertex is highlighted \nbool isVertexHighlighted(vec3 vertexColor) {\n vec3 highlightedObjectColor = picking_normalizeColor(picking.highlightedObjectColor);\n return\n bool(picking.isHighlightActive) && picking_isColorZero(abs(vertexColor - highlightedObjectColor));\n}\n\n// Set the current picking color\nvoid picking_setPickingColor(vec3 pickingColor) {\n pickingColor = picking_normalizeColor(pickingColor);\n\n if (bool(picking.isActive)) {\n // Use alpha as the validity flag. If pickingColor is [0, 0, 0] fragment is non-pickable\n picking_vRGBcolor_Avalid.a = float(picking_isColorValid(pickingColor));\n\n if (!bool(picking.isAttribute)) {\n // Stores the picking color so that the fragment shader can render it during picking\n picking_vRGBcolor_Avalid.rgb = pickingColor;\n }\n } else {\n // Do the comparison with selected item color in vertex shader as it should mean fewer compares\n picking_vRGBcolor_Avalid.a = float(isVertexHighlighted(pickingColor));\n }\n}\n\nvoid picking_setPickingAttribute(float value) {\n if (bool(picking.isAttribute)) {\n picking_vRGBcolor_Avalid.r = value;\n }\n}\n\nvoid picking_setPickingAttribute(vec2 value) {\n if (bool(picking.isAttribute)) {\n picking_vRGBcolor_Avalid.rg = value;\n }\n}\n\nvoid picking_setPickingAttribute(vec3 value) {\n if (bool(picking.isAttribute)) {\n picking_vRGBcolor_Avalid.rgb = value;\n }\n}\n";
|
|
23
|
+
readonly fs: "layout(std140) uniform pickingUniforms {\n float isActive;\n float isAttribute;\n float isHighlightActive;\n float useFloatColors;\n vec3 highlightedObjectColor;\n vec4 highlightColor;\n} picking;\n\nin vec4 picking_vRGBcolor_Avalid;\n\n/*\n * Returns highlight color if this item is selected.\n */\nvec4 picking_filterHighlightColor(vec4 color) {\n // If we are still picking, we don't highlight\n if (picking.isActive > 0.5) {\n return color;\n }\n\n bool selected = bool(picking_vRGBcolor_Avalid.a);\n\n if (selected) {\n // Blend in highlight color based on its alpha value\n float highLightAlpha = picking.highlightColor.a;\n float blendedAlpha = highLightAlpha + color.a * (1.0 - highLightAlpha);\n float highLightRatio = highLightAlpha / blendedAlpha;\n\n vec3 blendedRGB = mix(color.rgb, picking.highlightColor.rgb, highLightRatio);\n return vec4(blendedRGB, blendedAlpha);\n } else {\n return color;\n }\n}\n\n/*\n * Returns picking color if picking enabled else unmodified argument.\n */\nvec4 picking_filterPickingColor(vec4 color) {\n if (bool(picking.isActive)) {\n if (picking_vRGBcolor_Avalid.a == 0.0) {\n discard;\n }\n return picking_vRGBcolor_Avalid;\n }\n return color;\n}\n\n/*\n * Returns picking color if picking is enabled if not\n * highlight color if this item is selected, otherwise unmodified argument.\n */\nvec4 picking_filterColor(vec4 color) {\n vec4 highlightColor = picking_filterHighlightColor(color);\n return picking_filterPickingColor(highlightColor);\n}\n";
|
|
24
|
+
readonly getUniforms: (opts?: import("@luma.gl/shadertools").PickingProps, prevUniforms?: import("@luma.gl/shadertools").PickingUniforms) => import("@luma.gl/shadertools").PickingUniforms;
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=legacy-color-picking.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy-color-picking.d.ts","sourceRoot":"","sources":["../../../src/modules/picking/legacy-color-picking.ts"],"names":[],"mappings":"AAMA,mEAAmE;AACnE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;CAAqB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
import { picking as shadertoolsPicking } from '@luma.gl/shadertools';
|
|
5
|
+
/** @deprecated Use `picking`/`colorPicking` for object picking. */
|
|
6
|
+
export const legacyColorPicking = shadertoolsPicking;
|
|
7
|
+
//# sourceMappingURL=legacy-color-picking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy-color-picking.js","sourceRoot":"","sources":["../../../src/modules/picking/legacy-color-picking.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,OAAO,IAAI,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AAEnE,mEAAmE;AACnE,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC"}
|
|
@@ -1,28 +1,46 @@
|
|
|
1
1
|
import { Device, Framebuffer } from '@luma.gl/core';
|
|
2
2
|
import { ShaderInputs } from "../../shader-inputs.js";
|
|
3
3
|
import { pickingUniforms } from "./picking-uniforms.js";
|
|
4
|
+
declare const COLOR_PICKING_MAX_OBJECT_INDEX = 16777214;
|
|
5
|
+
declare const COLOR_PICKING_MAX_BATCH_INDEX = 254;
|
|
4
6
|
/** Information about picked object */
|
|
5
7
|
export type PickInfo = {
|
|
6
8
|
batchIndex: number | null;
|
|
7
9
|
objectIndex: number | null;
|
|
8
10
|
};
|
|
11
|
+
export type PickingMode = 'auto' | 'index' | 'color';
|
|
12
|
+
export type ResolvedPickingMode = Exclude<PickingMode, 'auto'>;
|
|
13
|
+
/** @deprecated Use `PickingMode`. */
|
|
14
|
+
export type PickingBackend = PickingMode;
|
|
15
|
+
/** @deprecated Use `ResolvedPickingMode`. */
|
|
16
|
+
export type ResolvedPickingBackend = ResolvedPickingMode;
|
|
9
17
|
export type PickingManagerProps = {
|
|
10
|
-
/** Shader
|
|
18
|
+
/** Shader inputs from models to pick */
|
|
11
19
|
shaderInputs?: ShaderInputs<{
|
|
12
20
|
picking: typeof pickingUniforms.props;
|
|
13
21
|
}>;
|
|
14
22
|
/** Callback */
|
|
15
23
|
onObjectPicked?: (info: PickInfo) => void;
|
|
24
|
+
/** Select a picking mode. Defaults to `color`. Use `auto` to prefer `index` when supported. */
|
|
25
|
+
mode?: PickingMode;
|
|
26
|
+
/** @deprecated Use `mode`. */
|
|
27
|
+
backend?: PickingBackend;
|
|
16
28
|
};
|
|
29
|
+
export declare function resolvePickingMode(deviceType: Device['type'], mode?: PickingMode, indexPickingSupported?: boolean): ResolvedPickingMode;
|
|
30
|
+
export declare function supportsIndexPicking(device: Device): boolean;
|
|
31
|
+
/** @deprecated Use `resolvePickingMode`. */
|
|
32
|
+
export declare const resolvePickingBackend: typeof resolvePickingMode;
|
|
33
|
+
export declare function decodeIndexPickInfo(pixelData: Int32Array): PickInfo;
|
|
34
|
+
export declare function decodeColorPickInfo(pixelData: Uint8Array): PickInfo;
|
|
17
35
|
/**
|
|
18
|
-
* Helper class for using
|
|
19
|
-
* @todo Port to WebGPU
|
|
36
|
+
* Helper class for using object picking with backend-specific readback.
|
|
20
37
|
* @todo Support multiple models
|
|
21
38
|
* @todo Switching picking module
|
|
22
39
|
*/
|
|
23
40
|
export declare class PickingManager {
|
|
24
41
|
device: Device;
|
|
25
42
|
props: Required<PickingManagerProps>;
|
|
43
|
+
mode: ResolvedPickingMode;
|
|
26
44
|
/** Info from latest pick operation */
|
|
27
45
|
pickInfo: PickInfo;
|
|
28
46
|
/** Framebuffer used for picking */
|
|
@@ -41,5 +59,13 @@ export declare class PickingManager {
|
|
|
41
59
|
* use the center pixel location in device pixel range
|
|
42
60
|
*/
|
|
43
61
|
getPickPosition(mousePosition: [number, number]): [number, number];
|
|
62
|
+
protected createIndexFramebuffer(): Framebuffer;
|
|
63
|
+
protected createColorFramebuffer(): Framebuffer;
|
|
64
|
+
protected setPickingProps(props: Partial<typeof pickingUniforms.props>): void;
|
|
65
|
+
protected readPickInfo(framebuffer: Framebuffer, pickPosition: [number, number]): Promise<PickInfo | null>;
|
|
66
|
+
protected readIndexPickInfo(framebuffer: Framebuffer, [pickX, pickY]: [number, number]): Promise<PickInfo | null>;
|
|
67
|
+
protected readColorPickInfo(framebuffer: Framebuffer, [pickX, pickY]: [number, number]): Promise<PickInfo | null>;
|
|
68
|
+
protected hasPickInfoChanged(pickInfo: PickInfo): boolean;
|
|
44
69
|
}
|
|
70
|
+
export { COLOR_PICKING_MAX_BATCH_INDEX, COLOR_PICKING_MAX_OBJECT_INDEX };
|
|
45
71
|
//# sourceMappingURL=picking-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"picking-manager.d.ts","sourceRoot":"","sources":["../../../src/modules/picking/picking-manager.ts"],"names":[],"mappings":"AAIA,OAAO,
|
|
1
|
+
{"version":3,"file":"picking-manager.d.ts","sourceRoot":"","sources":["../../../src/modules/picking/picking-manager.ts"],"names":[],"mappings":"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"}
|