@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 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(opts = DEFAULT_MODULE_OPTIONS3) {
3980
+ function getUniforms5(options = DEFAULT_MODULE_OPTIONS3) {
3981
3981
  const uniforms18 = {};
3982
- if (opts.pickingSelectedColor !== void 0) {
3983
- if (!opts.pickingSelectedColor) {
3984
- uniforms18.picking_uSelectedColorValid = 0;
3985
- } else {
3986
- const selectedColor = opts.pickingSelectedColor.slice(0, 3);
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 (opts.pickingHighlightColor) {
3992
- const color = Array.from(opts.pickingHighlightColor, (x) => x / 255);
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(opts = DEFAULT_MODULE_OPTIONS3) {
2380
+ function getUniforms5(options = DEFAULT_MODULE_OPTIONS3) {
2381
2381
  const uniforms18 = {};
2382
- if (opts.pickingSelectedColor !== void 0) {
2383
- if (!opts.pickingSelectedColor) {
2384
- uniforms18.picking_uSelectedColorValid = 0;
2385
- } else {
2386
- const selectedColor = opts.pickingSelectedColor.slice(0, 3);
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 (opts.pickingHighlightColor) {
2392
- const color = Array.from(opts.pickingHighlightColor, (x) => x / 255);
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
- declare function getUniforms(opts?: Required<PickingOptions>): Record<string, any>;
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;AASD,iBAAS,WAAW,CAAC,IAAI,2BAAyB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAuBvE;AA0GD;;;;;;GAMG;AACH,eAAO,MAAM,OAAO;;;;;CAKnB,CAAC"}
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 opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_MODULE_OPTIONS;
12
+ let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_MODULE_OPTIONS;
13
13
  const uniforms = {};
14
- if (opts.pickingSelectedColor !== undefined) {
15
- if (!opts.pickingSelectedColor) {
16
- uniforms.picking_uSelectedColorValid = 0;
17
- } else {
18
- const selectedColor = opts.pickingSelectedColor.slice(0, 3);
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 (opts.pickingHighlightColor) {
24
- const color = Array.from(opts.pickingHighlightColor, x => x / 255);
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","pickingSelectedColor","pickingHighlightColor","pickingActive","pickingAttribute","getUniforms","opts","arguments","length","undefined","uniforms","picking_uSelectedColorValid","selectedColor","slice","picking_uSelectedColor","color","Array","from","x","Number","isFinite","picking_uHighlightColor","picking_uActive","Boolean","picking_uAttribute","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\nconst DEFAULT_MODULE_OPTIONS: Required<PickingOptions> = {\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 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};\n\nfunction getUniforms(opts = DEFAULT_MODULE_OPTIONS): Record<string, any> {\n const uniforms: Record<string, any> = {};\n if (opts.pickingSelectedColor !== undefined) {\n if (!opts.pickingSelectedColor) {\n uniforms.picking_uSelectedColorValid = 0;\n } else {\n const selectedColor = opts.pickingSelectedColor.slice(0, 3);\n uniforms.picking_uSelectedColorValid = 1;\n uniforms.picking_uSelectedColor = selectedColor;\n }\n }\n if (opts.pickingHighlightColor) {\n const color = Array.from(opts.pickingHighlightColor, (x) => x / 255);\n if (!Number.isFinite(color[3])) {\n color[3] = 1;\n }\n uniforms.picking_uHighlightColor = color;\n }\n if (opts.pickingActive !== undefined) {\n uniforms.picking_uActive = Boolean(opts.pickingActive);\n uniforms.picking_uAttribute = Boolean(opts.pickingAttribute);\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;AASlE,MAAMC,sBAAgD,GAAG;EACvDC,oBAAoB,EAAE,IAAI;EAC1BC,qBAAqB,EAAEJ,uBAAuB;EAC9CK,aAAa,EAAE,KAAK;EACpBC,gBAAgB,EAAE;AACpB,CAAC;AAED,SAASC,WAAWA,CAAA,EAAqD;EAAA,IAApDC,IAAI,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGP,sBAAsB;EAChD,MAAMU,QAA6B,GAAG,CAAC,CAAC;EACxC,IAAIJ,IAAI,CAACL,oBAAoB,KAAKQ,SAAS,EAAE;IAC3C,IAAI,CAACH,IAAI,CAACL,oBAAoB,EAAE;MAC9BS,QAAQ,CAACC,2BAA2B,GAAG,CAAC;IAC1C,CAAC,MAAM;MACL,MAAMC,aAAa,GAAGN,IAAI,CAACL,oBAAoB,CAACY,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;MAC3DH,QAAQ,CAACC,2BAA2B,GAAG,CAAC;MACxCD,QAAQ,CAACI,sBAAsB,GAAGF,aAAa;IACjD;EACF;EACA,IAAIN,IAAI,CAACJ,qBAAqB,EAAE;IAC9B,MAAMa,KAAK,GAAGC,KAAK,CAACC,IAAI,CAACX,IAAI,CAACJ,qBAAqB,EAAGgB,CAAC,IAAKA,CAAC,GAAG,GAAG,CAAC;IACpE,IAAI,CAACC,MAAM,CAACC,QAAQ,CAACL,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;MAC9BA,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;IACd;IACAL,QAAQ,CAACW,uBAAuB,GAAGN,KAAK;EAC1C;EACA,IAAIT,IAAI,CAACH,aAAa,KAAKM,SAAS,EAAE;IACpCC,QAAQ,CAACY,eAAe,GAAGC,OAAO,CAACjB,IAAI,CAACH,aAAa,CAAC;IACtDO,QAAQ,CAACc,kBAAkB,GAAGD,OAAO,CAACjB,IAAI,CAACF,gBAAgB,CAAC;EAC9D;EACA,OAAOM,QAAQ;AACjB;AAEA,MAAMe,EAAE,GAAG5B,IAAI,CAAA6B,eAAA,KAAAA,eAAA,GAAAC,sBAAA,w8FAkDd;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"}
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,pickingActive:!1,pickingAttribute:!1};function Bo(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:zo,e={};if(n.pickingSelectedColor!==void 0)if(!n.pickingSelectedColor)e.picking_uSelectedColorValid=0;else{var t=n.pickingSelectedColor.slice(0,3);e.picking_uSelectedColorValid=1,e.picking_uSelectedColor=t}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 n.pickingActive!==void 0&&(e.picking_uActive=Boolean(n.pickingActive),e.picking_uAttribute=Boolean(n.pickingAttribute)),e}var Xo=f(Ft||(Ft=u([`uniform bool picking_uActive;
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.26",
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.26",
49
+ "@luma.gl/api": "9.0.0-alpha.29",
50
50
  "@math.gl/core": "4.0.0-alpha.4"
51
51
  },
52
- "gitHead": "e255f78c1c0a4555808c6e9282bcecb6accd147b"
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(opts = DEFAULT_MODULE_OPTIONS): Record<string, any> {
23
- const uniforms: Record<string, any> = {};
24
- if (opts.pickingSelectedColor !== undefined) {
25
- if (!opts.pickingSelectedColor) {
26
- uniforms.picking_uSelectedColorValid = 0;
27
- } else {
28
- const selectedColor = opts.pickingSelectedColor.slice(0, 3);
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 (opts.pickingHighlightColor) {
34
- const color = Array.from(opts.pickingHighlightColor, (x) => x / 255);
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));