@luma.gl/shadertools 9.0.0-alpha.26 → 9.0.0-alpha.29
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/dist.dev.js +20 -20
- package/dist/index.cjs +20 -20
- package/dist/modules/picking/picking.d.ts +8 -1
- package/dist/modules/picking/picking.d.ts.map +1 -1
- package/dist/modules/picking/picking.js +16 -16
- package/dist/modules/picking/picking.js.map +1 -1
- package/dist.min.js +7 -7
- package/package.json +3 -3
- package/src/modules/picking/picking.ts +27 -18
package/dist/dist.dev.js
CHANGED
|
@@ -3968,37 +3968,37 @@ vec4 dirlight_filterColor(vec4 color) {
|
|
|
3968
3968
|
// src/modules/picking/picking.ts
|
|
3969
3969
|
var DEFAULT_HIGHLIGHT_COLOR = new Uint8Array([0, 255, 255, 255]);
|
|
3970
3970
|
var DEFAULT_MODULE_OPTIONS3 = {
|
|
3971
|
-
pickingSelectedColor: null,
|
|
3972
|
-
// Set to a picking color to visually highlight that item
|
|
3973
|
-
pickingHighlightColor: DEFAULT_HIGHLIGHT_COLOR,
|
|
3974
|
-
// Color of visual highlight of "selected" item
|
|
3975
3971
|
pickingActive: false,
|
|
3976
3972
|
// Set to true when rendering to off-screen "picking" buffer
|
|
3977
|
-
pickingAttribute: false
|
|
3973
|
+
pickingAttribute: false,
|
|
3978
3974
|
// Set to true when picking an attribute value instead of object index
|
|
3975
|
+
pickingSelectedColor: null,
|
|
3976
|
+
// Set to a picking color to visually highlight that item
|
|
3977
|
+
pickingHighlightColor: DEFAULT_HIGHLIGHT_COLOR
|
|
3978
|
+
// Color of visual highlight of "selected" item
|
|
3979
3979
|
};
|
|
3980
|
-
function getUniforms5(
|
|
3980
|
+
function getUniforms5(options = DEFAULT_MODULE_OPTIONS3) {
|
|
3981
3981
|
const uniforms18 = {};
|
|
3982
|
-
if (
|
|
3983
|
-
|
|
3984
|
-
|
|
3985
|
-
|
|
3986
|
-
|
|
3982
|
+
if (options.pickingActive !== void 0) {
|
|
3983
|
+
uniforms18.picking_uActive = Boolean(options.pickingActive);
|
|
3984
|
+
uniforms18.picking_uAttribute = Boolean(options.pickingAttribute);
|
|
3985
|
+
}
|
|
3986
|
+
if (options.pickingSelectedColor !== void 0) {
|
|
3987
|
+
if (options.pickingSelectedColor) {
|
|
3988
|
+
const selectedColor = options.pickingSelectedColor.slice(0, 3);
|
|
3987
3989
|
uniforms18.picking_uSelectedColorValid = 1;
|
|
3988
3990
|
uniforms18.picking_uSelectedColor = selectedColor;
|
|
3991
|
+
} else {
|
|
3992
|
+
uniforms18.picking_uSelectedColorValid = 0;
|
|
3989
3993
|
}
|
|
3990
3994
|
}
|
|
3991
|
-
if (
|
|
3992
|
-
const color = Array.from(
|
|
3995
|
+
if (options.pickingHighlightColor) {
|
|
3996
|
+
const color = Array.from(options.pickingHighlightColor, (x) => x / 255);
|
|
3993
3997
|
if (!Number.isFinite(color[3])) {
|
|
3994
3998
|
color[3] = 1;
|
|
3995
3999
|
}
|
|
3996
4000
|
uniforms18.picking_uHighlightColor = color;
|
|
3997
4001
|
}
|
|
3998
|
-
if (opts.pickingActive !== void 0) {
|
|
3999
|
-
uniforms18.picking_uActive = Boolean(opts.pickingActive);
|
|
4000
|
-
uniforms18.picking_uAttribute = Boolean(opts.pickingAttribute);
|
|
4001
|
-
}
|
|
4002
4002
|
return uniforms18;
|
|
4003
4003
|
}
|
|
4004
4004
|
var vs2 = glsl`\
|
|
@@ -4026,10 +4026,10 @@ void picking_setPickingColor(vec3 pickingColor) {
|
|
|
4026
4026
|
// Use alpha as the validity flag. If pickingColor is [0, 0, 0] fragment is non-pickable
|
|
4027
4027
|
picking_vRGBcolor_Avalid.a = float(picking_isColorValid(pickingColor));
|
|
4028
4028
|
|
|
4029
|
-
if (!picking_uAttribute) {
|
|
4029
|
+
// if (!picking_uAttribute) {
|
|
4030
4030
|
// Stores the picking color so that the fragment shader can render it during picking
|
|
4031
|
-
picking_vRGBcolor_Avalid.rgb = pickingColor * COLOR_SCALE;
|
|
4032
|
-
}
|
|
4031
|
+
picking_vRGBcolor_Avalid.rgb = pickingColor; // * COLOR_SCALE;
|
|
4032
|
+
// }
|
|
4033
4033
|
} else {
|
|
4034
4034
|
// Do the comparison with selected item color in vertex shader as it should mean fewer compares
|
|
4035
4035
|
picking_vRGBcolor_Avalid.a = float(isVertexPicked(pickingColor));
|
package/dist/index.cjs
CHANGED
|
@@ -2368,37 +2368,37 @@ var dirlight = {
|
|
|
2368
2368
|
// src/modules/picking/picking.ts
|
|
2369
2369
|
var DEFAULT_HIGHLIGHT_COLOR = new Uint8Array([0, 255, 255, 255]);
|
|
2370
2370
|
var DEFAULT_MODULE_OPTIONS3 = {
|
|
2371
|
-
pickingSelectedColor: null,
|
|
2372
|
-
// Set to a picking color to visually highlight that item
|
|
2373
|
-
pickingHighlightColor: DEFAULT_HIGHLIGHT_COLOR,
|
|
2374
|
-
// Color of visual highlight of "selected" item
|
|
2375
2371
|
pickingActive: false,
|
|
2376
2372
|
// Set to true when rendering to off-screen "picking" buffer
|
|
2377
|
-
pickingAttribute: false
|
|
2373
|
+
pickingAttribute: false,
|
|
2378
2374
|
// Set to true when picking an attribute value instead of object index
|
|
2375
|
+
pickingSelectedColor: null,
|
|
2376
|
+
// Set to a picking color to visually highlight that item
|
|
2377
|
+
pickingHighlightColor: DEFAULT_HIGHLIGHT_COLOR
|
|
2378
|
+
// Color of visual highlight of "selected" item
|
|
2379
2379
|
};
|
|
2380
|
-
function getUniforms5(
|
|
2380
|
+
function getUniforms5(options = DEFAULT_MODULE_OPTIONS3) {
|
|
2381
2381
|
const uniforms18 = {};
|
|
2382
|
-
if (
|
|
2383
|
-
|
|
2384
|
-
|
|
2385
|
-
|
|
2386
|
-
|
|
2382
|
+
if (options.pickingActive !== void 0) {
|
|
2383
|
+
uniforms18.picking_uActive = Boolean(options.pickingActive);
|
|
2384
|
+
uniforms18.picking_uAttribute = Boolean(options.pickingAttribute);
|
|
2385
|
+
}
|
|
2386
|
+
if (options.pickingSelectedColor !== void 0) {
|
|
2387
|
+
if (options.pickingSelectedColor) {
|
|
2388
|
+
const selectedColor = options.pickingSelectedColor.slice(0, 3);
|
|
2387
2389
|
uniforms18.picking_uSelectedColorValid = 1;
|
|
2388
2390
|
uniforms18.picking_uSelectedColor = selectedColor;
|
|
2391
|
+
} else {
|
|
2392
|
+
uniforms18.picking_uSelectedColorValid = 0;
|
|
2389
2393
|
}
|
|
2390
2394
|
}
|
|
2391
|
-
if (
|
|
2392
|
-
const color = Array.from(
|
|
2395
|
+
if (options.pickingHighlightColor) {
|
|
2396
|
+
const color = Array.from(options.pickingHighlightColor, (x) => x / 255);
|
|
2393
2397
|
if (!Number.isFinite(color[3])) {
|
|
2394
2398
|
color[3] = 1;
|
|
2395
2399
|
}
|
|
2396
2400
|
uniforms18.picking_uHighlightColor = color;
|
|
2397
2401
|
}
|
|
2398
|
-
if (opts.pickingActive !== void 0) {
|
|
2399
|
-
uniforms18.picking_uActive = Boolean(opts.pickingActive);
|
|
2400
|
-
uniforms18.picking_uAttribute = Boolean(opts.pickingAttribute);
|
|
2401
|
-
}
|
|
2402
2402
|
return uniforms18;
|
|
2403
2403
|
}
|
|
2404
2404
|
var vs2 = glsl`\
|
|
@@ -2426,10 +2426,10 @@ void picking_setPickingColor(vec3 pickingColor) {
|
|
|
2426
2426
|
// Use alpha as the validity flag. If pickingColor is [0, 0, 0] fragment is non-pickable
|
|
2427
2427
|
picking_vRGBcolor_Avalid.a = float(picking_isColorValid(pickingColor));
|
|
2428
2428
|
|
|
2429
|
-
if (!picking_uAttribute) {
|
|
2429
|
+
// if (!picking_uAttribute) {
|
|
2430
2430
|
// Stores the picking color so that the fragment shader can render it during picking
|
|
2431
|
-
picking_vRGBcolor_Avalid.rgb = pickingColor * COLOR_SCALE;
|
|
2432
|
-
}
|
|
2431
|
+
picking_vRGBcolor_Avalid.rgb = pickingColor; // * COLOR_SCALE;
|
|
2432
|
+
// }
|
|
2433
2433
|
} else {
|
|
2434
2434
|
// Do the comparison with selected item color in vertex shader as it should mean fewer compares
|
|
2435
2435
|
picking_vRGBcolor_Avalid.a = float(isVertexPicked(pickingColor));
|
|
@@ -5,7 +5,14 @@ export type PickingOptions = {
|
|
|
5
5
|
pickingActive?: boolean;
|
|
6
6
|
pickingAttribute: boolean;
|
|
7
7
|
};
|
|
8
|
-
|
|
8
|
+
export type PickingUniforms = {
|
|
9
|
+
picking_uActive?: boolean;
|
|
10
|
+
picking_uAttribute?: boolean;
|
|
11
|
+
picking_uSelectedColorValid?: number;
|
|
12
|
+
picking_uSelectedColor?: NumberArray;
|
|
13
|
+
picking_uHighlightColor?: NumberArray;
|
|
14
|
+
};
|
|
15
|
+
declare function getUniforms(options?: Required<PickingOptions>): PickingUniforms;
|
|
9
16
|
/**
|
|
10
17
|
* Provides support for color-coding-based picking and highlighting.
|
|
11
18
|
* In particular, supports picking a specific instance in an instanced
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"picking.d.ts","sourceRoot":"","sources":["../../../src/modules/picking/picking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAOxC,MAAM,MAAM,cAAc,GAAG;IAC3B,oBAAoB,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC1C,qBAAqB,CAAC,EAAE,WAAW,CAAC;IACpC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAA;CAC1B,CAAA;
|
|
1
|
+
{"version":3,"file":"picking.d.ts","sourceRoot":"","sources":["../../../src/modules/picking/picking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAOxC,MAAM,MAAM,cAAc,GAAG;IAC3B,oBAAoB,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC1C,qBAAqB,CAAC,EAAE,WAAW,CAAC;IACpC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAA;CAC1B,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,sBAAsB,CAAC,EAAE,WAAW,CAAC;IACrC,uBAAuB,CAAC,EAAE,WAAW,CAAC;CACvC,CAAA;AASD,iBAAS,WAAW,CAAC,OAAO,2BAAyB,GAAG,eAAe,CAwBtE;AA0GD;;;;;;GAMG;AACH,eAAO,MAAM,OAAO;;;;;CAKnB,CAAC"}
|
|
@@ -3,37 +3,37 @@ var _templateObject, _templateObject2;
|
|
|
3
3
|
import { glsl } from "../../lib/glsl-utils/highlight.js";
|
|
4
4
|
const DEFAULT_HIGHLIGHT_COLOR = new Uint8Array([0, 255, 255, 255]);
|
|
5
5
|
const DEFAULT_MODULE_OPTIONS = {
|
|
6
|
-
pickingSelectedColor: null,
|
|
7
|
-
pickingHighlightColor: DEFAULT_HIGHLIGHT_COLOR,
|
|
8
6
|
pickingActive: false,
|
|
9
|
-
pickingAttribute: false
|
|
7
|
+
pickingAttribute: false,
|
|
8
|
+
pickingSelectedColor: null,
|
|
9
|
+
pickingHighlightColor: DEFAULT_HIGHLIGHT_COLOR
|
|
10
10
|
};
|
|
11
11
|
function getUniforms() {
|
|
12
|
-
let
|
|
12
|
+
let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_MODULE_OPTIONS;
|
|
13
13
|
const uniforms = {};
|
|
14
|
-
if (
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
if (options.pickingActive !== undefined) {
|
|
15
|
+
uniforms.picking_uActive = Boolean(options.pickingActive);
|
|
16
|
+
uniforms.picking_uAttribute = Boolean(options.pickingAttribute);
|
|
17
|
+
}
|
|
18
|
+
if (options.pickingSelectedColor !== undefined) {
|
|
19
|
+
if (options.pickingSelectedColor) {
|
|
20
|
+
const selectedColor = options.pickingSelectedColor.slice(0, 3);
|
|
19
21
|
uniforms.picking_uSelectedColorValid = 1;
|
|
20
22
|
uniforms.picking_uSelectedColor = selectedColor;
|
|
23
|
+
} else {
|
|
24
|
+
uniforms.picking_uSelectedColorValid = 0;
|
|
21
25
|
}
|
|
22
26
|
}
|
|
23
|
-
if (
|
|
24
|
-
const color = Array.from(
|
|
27
|
+
if (options.pickingHighlightColor) {
|
|
28
|
+
const color = Array.from(options.pickingHighlightColor, x => x / 255);
|
|
25
29
|
if (!Number.isFinite(color[3])) {
|
|
26
30
|
color[3] = 1;
|
|
27
31
|
}
|
|
28
32
|
uniforms.picking_uHighlightColor = color;
|
|
29
33
|
}
|
|
30
|
-
if (opts.pickingActive !== undefined) {
|
|
31
|
-
uniforms.picking_uActive = Boolean(opts.pickingActive);
|
|
32
|
-
uniforms.picking_uAttribute = Boolean(opts.pickingAttribute);
|
|
33
|
-
}
|
|
34
34
|
return uniforms;
|
|
35
35
|
}
|
|
36
|
-
const vs = glsl(_templateObject || (_templateObject = _taggedTemplateLiteral(["uniform bool picking_uActive;\nuniform bool picking_uAttribute;\nuniform vec3 picking_uSelectedColor;\nuniform bool picking_uSelectedColorValid;\n\nout vec4 picking_vRGBcolor_Avalid;\n\nconst float COLOR_SCALE = 1. / 255.;\n\nbool picking_isColorValid(vec3 color) {\n return dot(color, vec3(1.0)) > 0.001;\n}\n\nbool isVertexPicked(vec3 vertexColor) {\n return\n picking_uSelectedColorValid &&\n !picking_isColorValid(abs(vertexColor - picking_uSelectedColor));\n}\n\nvoid picking_setPickingColor(vec3 pickingColor) {\n if (picking_uActive) {\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 (!picking_uAttribute) {\n // Stores the picking color so that the fragment shader can render it during picking\n picking_vRGBcolor_Avalid.rgb = pickingColor * COLOR_SCALE;\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(isVertexPicked(pickingColor));\n }\n}\n\nvoid picking_setPickingAttribute(float value) {\n if (picking_uAttribute) {\n picking_vRGBcolor_Avalid.r = value;\n }\n}\nvoid picking_setPickingAttribute(vec2 value) {\n if (picking_uAttribute) {\n picking_vRGBcolor_Avalid.rg = value;\n }\n}\nvoid picking_setPickingAttribute(vec3 value) {\n if (picking_uAttribute) {\n picking_vRGBcolor_Avalid.rgb = value;\n }\n}\n"], ["\\\nuniform bool picking_uActive;\nuniform bool picking_uAttribute;\nuniform vec3 picking_uSelectedColor;\nuniform bool picking_uSelectedColorValid;\n\nout vec4 picking_vRGBcolor_Avalid;\n\nconst float COLOR_SCALE = 1. / 255.;\n\nbool picking_isColorValid(vec3 color) {\n return dot(color, vec3(1.0)) > 0.001;\n}\n\nbool isVertexPicked(vec3 vertexColor) {\n return\n picking_uSelectedColorValid &&\n !picking_isColorValid(abs(vertexColor - picking_uSelectedColor));\n}\n\nvoid picking_setPickingColor(vec3 pickingColor) {\n if (picking_uActive) {\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 (!picking_uAttribute) {\n // Stores the picking color so that the fragment shader can render it during picking\n picking_vRGBcolor_Avalid.rgb = pickingColor * COLOR_SCALE;\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(isVertexPicked(pickingColor));\n }\n}\n\nvoid picking_setPickingAttribute(float value) {\n if (picking_uAttribute) {\n picking_vRGBcolor_Avalid.r = value;\n }\n}\nvoid picking_setPickingAttribute(vec2 value) {\n if (picking_uAttribute) {\n picking_vRGBcolor_Avalid.rg = value;\n }\n}\nvoid picking_setPickingAttribute(vec3 value) {\n if (picking_uAttribute) {\n picking_vRGBcolor_Avalid.rgb = value;\n }\n}\n"])));
|
|
36
|
+
const vs = glsl(_templateObject || (_templateObject = _taggedTemplateLiteral(["uniform bool picking_uActive;\nuniform bool picking_uAttribute;\nuniform vec3 picking_uSelectedColor;\nuniform bool picking_uSelectedColorValid;\n\nout vec4 picking_vRGBcolor_Avalid;\n\nconst float COLOR_SCALE = 1. / 255.;\n\nbool picking_isColorValid(vec3 color) {\n return dot(color, vec3(1.0)) > 0.001;\n}\n\nbool isVertexPicked(vec3 vertexColor) {\n return\n picking_uSelectedColorValid &&\n !picking_isColorValid(abs(vertexColor - picking_uSelectedColor));\n}\n\nvoid picking_setPickingColor(vec3 pickingColor) {\n if (picking_uActive) {\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 (!picking_uAttribute) {\n // Stores the picking color so that the fragment shader can render it during picking\n picking_vRGBcolor_Avalid.rgb = pickingColor; // * COLOR_SCALE;\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(isVertexPicked(pickingColor));\n }\n}\n\nvoid picking_setPickingAttribute(float value) {\n if (picking_uAttribute) {\n picking_vRGBcolor_Avalid.r = value;\n }\n}\nvoid picking_setPickingAttribute(vec2 value) {\n if (picking_uAttribute) {\n picking_vRGBcolor_Avalid.rg = value;\n }\n}\nvoid picking_setPickingAttribute(vec3 value) {\n if (picking_uAttribute) {\n picking_vRGBcolor_Avalid.rgb = value;\n }\n}\n"], ["\\\nuniform bool picking_uActive;\nuniform bool picking_uAttribute;\nuniform vec3 picking_uSelectedColor;\nuniform bool picking_uSelectedColorValid;\n\nout vec4 picking_vRGBcolor_Avalid;\n\nconst float COLOR_SCALE = 1. / 255.;\n\nbool picking_isColorValid(vec3 color) {\n return dot(color, vec3(1.0)) > 0.001;\n}\n\nbool isVertexPicked(vec3 vertexColor) {\n return\n picking_uSelectedColorValid &&\n !picking_isColorValid(abs(vertexColor - picking_uSelectedColor));\n}\n\nvoid picking_setPickingColor(vec3 pickingColor) {\n if (picking_uActive) {\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 (!picking_uAttribute) {\n // Stores the picking color so that the fragment shader can render it during picking\n picking_vRGBcolor_Avalid.rgb = pickingColor; // * COLOR_SCALE;\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(isVertexPicked(pickingColor));\n }\n}\n\nvoid picking_setPickingAttribute(float value) {\n if (picking_uAttribute) {\n picking_vRGBcolor_Avalid.r = value;\n }\n}\nvoid picking_setPickingAttribute(vec2 value) {\n if (picking_uAttribute) {\n picking_vRGBcolor_Avalid.rg = value;\n }\n}\nvoid picking_setPickingAttribute(vec3 value) {\n if (picking_uAttribute) {\n picking_vRGBcolor_Avalid.rgb = value;\n }\n}\n"])));
|
|
37
37
|
const fs = glsl(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["uniform bool picking_uActive;\nuniform vec3 picking_uSelectedColor;\nuniform vec4 picking_uHighlightColor;\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 (picking_uActive) {\n return color;\n }\n bool selected = bool(picking_vRGBcolor_Avalid.a);\n\n if (selected) {\n float highLightAlpha = picking_uHighlightColor.a;\n float blendedAlpha = highLightAlpha + color.a * (1.0 - highLightAlpha);\n float highLightRatio = highLightAlpha / blendedAlpha;\n\n vec3 blendedRGB = mix(color.rgb, picking_uHighlightColor.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 (picking_uActive) {\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 highightColor = picking_filterHighlightColor(color);\n return picking_filterPickingColor(highightColor);\n}\n\n"], ["\\\nuniform bool picking_uActive;\nuniform vec3 picking_uSelectedColor;\nuniform vec4 picking_uHighlightColor;\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 (picking_uActive) {\n return color;\n }\n bool selected = bool(picking_vRGBcolor_Avalid.a);\n\n if (selected) {\n float highLightAlpha = picking_uHighlightColor.a;\n float blendedAlpha = highLightAlpha + color.a * (1.0 - highLightAlpha);\n float highLightRatio = highLightAlpha / blendedAlpha;\n\n vec3 blendedRGB = mix(color.rgb, picking_uHighlightColor.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 (picking_uActive) {\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 highightColor = picking_filterHighlightColor(color);\n return picking_filterPickingColor(highightColor);\n}\n\n"])));
|
|
38
38
|
export const picking = {
|
|
39
39
|
name: 'picking',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"picking.js","names":["glsl","DEFAULT_HIGHLIGHT_COLOR","Uint8Array","DEFAULT_MODULE_OPTIONS","
|
|
1
|
+
{"version":3,"file":"picking.js","names":["glsl","DEFAULT_HIGHLIGHT_COLOR","Uint8Array","DEFAULT_MODULE_OPTIONS","pickingActive","pickingAttribute","pickingSelectedColor","pickingHighlightColor","getUniforms","options","arguments","length","undefined","uniforms","picking_uActive","Boolean","picking_uAttribute","selectedColor","slice","picking_uSelectedColorValid","picking_uSelectedColor","color","Array","from","x","Number","isFinite","picking_uHighlightColor","vs","_templateObject","_taggedTemplateLiteral","fs","_templateObject2","picking","name"],"sources":["../../../src/modules/picking/picking.ts"],"sourcesContent":["import {NumberArray} from '../../types';\nimport {glsl} from '../../lib/glsl-utils/highlight';\n\n/* eslint-disable camelcase */\n\nconst DEFAULT_HIGHLIGHT_COLOR = new Uint8Array([0, 255, 255, 255]);\n\nexport type PickingOptions = {\n pickingSelectedColor?: NumberArray | null, // Set to a picking color to visually highlight that item\n pickingHighlightColor?: NumberArray, // Color of visual highlight of \"selected\" item\n pickingActive?: boolean, // Set to true when rendering to off-screen \"picking\" buffer\n pickingAttribute: boolean // Set to true when picking an attribute value instead of object index\n}\n\nexport type PickingUniforms = {\n picking_uActive?: boolean;\n picking_uAttribute?: boolean;\n picking_uSelectedColorValid?: number;\n picking_uSelectedColor?: NumberArray;\n picking_uHighlightColor?: NumberArray;\n}\n\nconst DEFAULT_MODULE_OPTIONS: Required<PickingOptions> = {\n pickingActive: false, // Set to true when rendering to off-screen \"picking\" buffer\n pickingAttribute: false, // Set to true when picking an attribute value instead of object index\n pickingSelectedColor: null, // Set to a picking color to visually highlight that item\n pickingHighlightColor: DEFAULT_HIGHLIGHT_COLOR, // Color of visual highlight of \"selected\" item\n};\n\nfunction getUniforms(options = DEFAULT_MODULE_OPTIONS): PickingUniforms {\n const uniforms: PickingUniforms = {};\n if (options.pickingActive !== undefined) {\n uniforms.picking_uActive = Boolean(options.pickingActive);\n uniforms.picking_uAttribute = Boolean(options.pickingAttribute);\n }\n\n if (options.pickingSelectedColor !== undefined) {\n if (options.pickingSelectedColor) {\n const selectedColor = options.pickingSelectedColor.slice(0, 3);\n uniforms.picking_uSelectedColorValid = 1;\n uniforms.picking_uSelectedColor = selectedColor;\n } else {\n uniforms.picking_uSelectedColorValid = 0;\n }\n }\n if (options.pickingHighlightColor) {\n const color = Array.from(options.pickingHighlightColor, (x) => x / 255);\n if (!Number.isFinite(color[3])) {\n color[3] = 1;\n }\n uniforms.picking_uHighlightColor = color;\n }\n return uniforms;\n}\n\nconst vs = glsl`\\\nuniform bool picking_uActive;\nuniform bool picking_uAttribute;\nuniform vec3 picking_uSelectedColor;\nuniform bool picking_uSelectedColorValid;\n\nout vec4 picking_vRGBcolor_Avalid;\n\nconst float COLOR_SCALE = 1. / 255.;\n\nbool picking_isColorValid(vec3 color) {\n return dot(color, vec3(1.0)) > 0.001;\n}\n\nbool isVertexPicked(vec3 vertexColor) {\n return\n picking_uSelectedColorValid &&\n !picking_isColorValid(abs(vertexColor - picking_uSelectedColor));\n}\n\nvoid picking_setPickingColor(vec3 pickingColor) {\n if (picking_uActive) {\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 (!picking_uAttribute) {\n // Stores the picking color so that the fragment shader can render it during picking\n picking_vRGBcolor_Avalid.rgb = pickingColor; // * COLOR_SCALE;\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(isVertexPicked(pickingColor));\n }\n}\n\nvoid picking_setPickingAttribute(float value) {\n if (picking_uAttribute) {\n picking_vRGBcolor_Avalid.r = value;\n }\n}\nvoid picking_setPickingAttribute(vec2 value) {\n if (picking_uAttribute) {\n picking_vRGBcolor_Avalid.rg = value;\n }\n}\nvoid picking_setPickingAttribute(vec3 value) {\n if (picking_uAttribute) {\n picking_vRGBcolor_Avalid.rgb = value;\n }\n}\n`;\n\nconst fs = glsl`\\\nuniform bool picking_uActive;\nuniform vec3 picking_uSelectedColor;\nuniform vec4 picking_uHighlightColor;\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 (picking_uActive) {\n return color;\n }\n bool selected = bool(picking_vRGBcolor_Avalid.a);\n\n if (selected) {\n float highLightAlpha = picking_uHighlightColor.a;\n float blendedAlpha = highLightAlpha + color.a * (1.0 - highLightAlpha);\n float highLightRatio = highLightAlpha / blendedAlpha;\n\n vec3 blendedRGB = mix(color.rgb, picking_uHighlightColor.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 (picking_uActive) {\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 highightColor = picking_filterHighlightColor(color);\n return picking_filterPickingColor(highightColor);\n}\n\n`;\n\n/**\n * Provides support for color-coding-based picking and highlighting.\n * In particular, supports picking a specific instance in an instanced\n * draw call and highlighting an instance based on its picking color,\n * and correspondingly, supports picking and highlighting groups of\n * primitives with the same picking color in non-instanced draw-calls\n */\nexport const picking = {\n name: 'picking',\n vs,\n fs,\n getUniforms\n};\n"],"mappings":";;SACQA,IAAI;AAIZ,MAAMC,uBAAuB,GAAG,IAAIC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAiBlE,MAAMC,sBAAgD,GAAG;EACvDC,aAAa,EAAE,KAAK;EACpBC,gBAAgB,EAAE,KAAK;EACvBC,oBAAoB,EAAE,IAAI;EAC1BC,qBAAqB,EAAEN;AACzB,CAAC;AAED,SAASO,WAAWA,CAAA,EAAoD;EAAA,IAAnDC,OAAO,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGP,sBAAsB;EACnD,MAAMU,QAAyB,GAAG,CAAC,CAAC;EACpC,IAAIJ,OAAO,CAACL,aAAa,KAAKQ,SAAS,EAAE;IACvCC,QAAQ,CAACC,eAAe,GAAGC,OAAO,CAACN,OAAO,CAACL,aAAa,CAAC;IACzDS,QAAQ,CAACG,kBAAkB,GAAGD,OAAO,CAACN,OAAO,CAACJ,gBAAgB,CAAC;EACjE;EAEA,IAAII,OAAO,CAACH,oBAAoB,KAAKM,SAAS,EAAE;IAC9C,IAAIH,OAAO,CAACH,oBAAoB,EAAE;MAChC,MAAMW,aAAa,GAAGR,OAAO,CAACH,oBAAoB,CAACY,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;MAC9DL,QAAQ,CAACM,2BAA2B,GAAG,CAAC;MACxCN,QAAQ,CAACO,sBAAsB,GAAGH,aAAa;IACjD,CAAC,MAAM;MACLJ,QAAQ,CAACM,2BAA2B,GAAG,CAAC;IAC1C;EACF;EACA,IAAIV,OAAO,CAACF,qBAAqB,EAAE;IACjC,MAAMc,KAAK,GAAGC,KAAK,CAACC,IAAI,CAACd,OAAO,CAACF,qBAAqB,EAAGiB,CAAC,IAAKA,CAAC,GAAG,GAAG,CAAC;IACvE,IAAI,CAACC,MAAM,CAACC,QAAQ,CAACL,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;MAC9BA,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;IACd;IACAR,QAAQ,CAACc,uBAAuB,GAAGN,KAAK;EAC1C;EACA,OAAOR,QAAQ;AACjB;AAEA,MAAMe,EAAE,GAAG5B,IAAI,CAAA6B,eAAA,KAAAA,eAAA,GAAAC,sBAAA,89FAkDd;AAED,MAAMC,EAAE,GAAG/B,IAAI,CAAAgC,gBAAA,KAAAA,gBAAA,GAAAF,sBAAA,0nFAkDd;AASD,OAAO,MAAMG,OAAO,GAAG;EACrBC,IAAI,EAAE,SAAS;EACfN,EAAE;EACFG,EAAE;EACFvB;AACF,CAAC"}
|
package/dist.min.js
CHANGED
|
@@ -2398,7 +2398,7 @@ vec4 dirlight_filterColor(vec4 color) {
|
|
|
2398
2398
|
float d = abs(dot(normalize(normal), normalize(dirlight_uLightDirection)));
|
|
2399
2399
|
return vec4(color.rgb * d, color.a);
|
|
2400
2400
|
}
|
|
2401
|
-
`]))),St={name:"dirlight",fs:Do,getUniforms:Uo,dependencies:[un]};var Ft,It,ko=new Uint8Array([0,255,255,255]),zo={pickingSelectedColor:null,pickingHighlightColor:ko
|
|
2401
|
+
`]))),St={name:"dirlight",fs:Do,getUniforms:Uo,dependencies:[un]};var Ft,It,ko=new Uint8Array([0,255,255,255]),zo={pickingActive:!1,pickingAttribute:!1,pickingSelectedColor:null,pickingHighlightColor:ko};function Bo(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:zo,e={};if(n.pickingActive!==void 0&&(e.picking_uActive=Boolean(n.pickingActive),e.picking_uAttribute=Boolean(n.pickingAttribute)),n.pickingSelectedColor!==void 0)if(n.pickingSelectedColor){var t=n.pickingSelectedColor.slice(0,3);e.picking_uSelectedColorValid=1,e.picking_uSelectedColor=t}else e.picking_uSelectedColorValid=0;if(n.pickingHighlightColor){var r=Array.from(n.pickingHighlightColor,function(o){return o/255});Number.isFinite(r[3])||(r[3]=1),e.picking_uHighlightColor=r}return e}var Xo=f(Ft||(Ft=u([`uniform bool picking_uActive;
|
|
2402
2402
|
uniform bool picking_uAttribute;
|
|
2403
2403
|
uniform vec3 picking_uSelectedColor;
|
|
2404
2404
|
uniform bool picking_uSelectedColorValid;
|
|
@@ -2422,10 +2422,10 @@ void picking_setPickingColor(vec3 pickingColor) {
|
|
|
2422
2422
|
// Use alpha as the validity flag. If pickingColor is [0, 0, 0] fragment is non-pickable
|
|
2423
2423
|
picking_vRGBcolor_Avalid.a = float(picking_isColorValid(pickingColor));
|
|
2424
2424
|
|
|
2425
|
-
if (!picking_uAttribute) {
|
|
2425
|
+
// if (!picking_uAttribute) {
|
|
2426
2426
|
// Stores the picking color so that the fragment shader can render it during picking
|
|
2427
|
-
picking_vRGBcolor_Avalid.rgb = pickingColor * COLOR_SCALE;
|
|
2428
|
-
}
|
|
2427
|
+
picking_vRGBcolor_Avalid.rgb = pickingColor; // * COLOR_SCALE;
|
|
2428
|
+
// }
|
|
2429
2429
|
} else {
|
|
2430
2430
|
// Do the comparison with selected item color in vertex shader as it should mean fewer compares
|
|
2431
2431
|
picking_vRGBcolor_Avalid.a = float(isVertexPicked(pickingColor));
|
|
@@ -2472,10 +2472,10 @@ void picking_setPickingColor(vec3 pickingColor) {
|
|
|
2472
2472
|
// Use alpha as the validity flag. If pickingColor is [0, 0, 0] fragment is non-pickable
|
|
2473
2473
|
picking_vRGBcolor_Avalid.a = float(picking_isColorValid(pickingColor));
|
|
2474
2474
|
|
|
2475
|
-
if (!picking_uAttribute) {
|
|
2475
|
+
// if (!picking_uAttribute) {
|
|
2476
2476
|
// Stores the picking color so that the fragment shader can render it during picking
|
|
2477
|
-
picking_vRGBcolor_Avalid.rgb = pickingColor * COLOR_SCALE;
|
|
2478
|
-
}
|
|
2477
|
+
picking_vRGBcolor_Avalid.rgb = pickingColor; // * COLOR_SCALE;
|
|
2478
|
+
// }
|
|
2479
2479
|
} else {
|
|
2480
2480
|
// Do the comparison with selected item color in vertex shader as it should mean fewer compares
|
|
2481
2481
|
picking_vRGBcolor_Avalid.a = float(isVertexPicked(pickingColor));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@luma.gl/shadertools",
|
|
3
|
-
"version": "9.0.0-alpha.
|
|
3
|
+
"version": "9.0.0-alpha.29",
|
|
4
4
|
"description": "Shader module system for luma.gl",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
48
|
"@babel/runtime": "^7.0.0",
|
|
49
|
-
"@luma.gl/api": "9.0.0-alpha.
|
|
49
|
+
"@luma.gl/api": "9.0.0-alpha.29",
|
|
50
50
|
"@math.gl/core": "4.0.0-alpha.4"
|
|
51
51
|
},
|
|
52
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "1aee1ad82fd09d441172f5ef490ebc083a7fa239"
|
|
53
53
|
}
|
|
@@ -12,35 +12,44 @@ export type PickingOptions = {
|
|
|
12
12
|
pickingAttribute: boolean // Set to true when picking an attribute value instead of object index
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
+
export type PickingUniforms = {
|
|
16
|
+
picking_uActive?: boolean;
|
|
17
|
+
picking_uAttribute?: boolean;
|
|
18
|
+
picking_uSelectedColorValid?: number;
|
|
19
|
+
picking_uSelectedColor?: NumberArray;
|
|
20
|
+
picking_uHighlightColor?: NumberArray;
|
|
21
|
+
}
|
|
22
|
+
|
|
15
23
|
const DEFAULT_MODULE_OPTIONS: Required<PickingOptions> = {
|
|
24
|
+
pickingActive: false, // Set to true when rendering to off-screen "picking" buffer
|
|
25
|
+
pickingAttribute: false, // Set to true when picking an attribute value instead of object index
|
|
16
26
|
pickingSelectedColor: null, // Set to a picking color to visually highlight that item
|
|
17
27
|
pickingHighlightColor: DEFAULT_HIGHLIGHT_COLOR, // Color of visual highlight of "selected" item
|
|
18
|
-
pickingActive: false, // Set to true when rendering to off-screen "picking" buffer
|
|
19
|
-
pickingAttribute: false // Set to true when picking an attribute value instead of object index
|
|
20
28
|
};
|
|
21
29
|
|
|
22
|
-
function getUniforms(
|
|
23
|
-
const uniforms:
|
|
24
|
-
if (
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
30
|
+
function getUniforms(options = DEFAULT_MODULE_OPTIONS): PickingUniforms {
|
|
31
|
+
const uniforms: PickingUniforms = {};
|
|
32
|
+
if (options.pickingActive !== undefined) {
|
|
33
|
+
uniforms.picking_uActive = Boolean(options.pickingActive);
|
|
34
|
+
uniforms.picking_uAttribute = Boolean(options.pickingAttribute);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
if (options.pickingSelectedColor !== undefined) {
|
|
38
|
+
if (options.pickingSelectedColor) {
|
|
39
|
+
const selectedColor = options.pickingSelectedColor.slice(0, 3);
|
|
29
40
|
uniforms.picking_uSelectedColorValid = 1;
|
|
30
41
|
uniforms.picking_uSelectedColor = selectedColor;
|
|
42
|
+
} else {
|
|
43
|
+
uniforms.picking_uSelectedColorValid = 0;
|
|
31
44
|
}
|
|
32
45
|
}
|
|
33
|
-
if (
|
|
34
|
-
const color = Array.from(
|
|
46
|
+
if (options.pickingHighlightColor) {
|
|
47
|
+
const color = Array.from(options.pickingHighlightColor, (x) => x / 255);
|
|
35
48
|
if (!Number.isFinite(color[3])) {
|
|
36
49
|
color[3] = 1;
|
|
37
50
|
}
|
|
38
51
|
uniforms.picking_uHighlightColor = color;
|
|
39
52
|
}
|
|
40
|
-
if (opts.pickingActive !== undefined) {
|
|
41
|
-
uniforms.picking_uActive = Boolean(opts.pickingActive);
|
|
42
|
-
uniforms.picking_uAttribute = Boolean(opts.pickingAttribute);
|
|
43
|
-
}
|
|
44
53
|
return uniforms;
|
|
45
54
|
}
|
|
46
55
|
|
|
@@ -69,10 +78,10 @@ void picking_setPickingColor(vec3 pickingColor) {
|
|
|
69
78
|
// Use alpha as the validity flag. If pickingColor is [0, 0, 0] fragment is non-pickable
|
|
70
79
|
picking_vRGBcolor_Avalid.a = float(picking_isColorValid(pickingColor));
|
|
71
80
|
|
|
72
|
-
if (!picking_uAttribute) {
|
|
81
|
+
// if (!picking_uAttribute) {
|
|
73
82
|
// Stores the picking color so that the fragment shader can render it during picking
|
|
74
|
-
picking_vRGBcolor_Avalid.rgb = pickingColor * COLOR_SCALE;
|
|
75
|
-
}
|
|
83
|
+
picking_vRGBcolor_Avalid.rgb = pickingColor; // * COLOR_SCALE;
|
|
84
|
+
// }
|
|
76
85
|
} else {
|
|
77
86
|
// Do the comparison with selected item color in vertex shader as it should mean fewer compares
|
|
78
87
|
picking_vRGBcolor_Avalid.a = float(isVertexPicked(pickingColor));
|