@deck.gl/core 9.3.0-alpha.5 → 9.3.0-beta.1

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.
Files changed (64) hide show
  1. package/dist/dist.dev.js +876 -315
  2. package/dist/index.cjs +145 -67
  3. package/dist/index.cjs.map +3 -3
  4. package/dist/lib/attribute/attribute.d.ts +2 -0
  5. package/dist/lib/attribute/attribute.d.ts.map +1 -1
  6. package/dist/lib/attribute/attribute.js +57 -27
  7. package/dist/lib/attribute/attribute.js.map +1 -1
  8. package/dist/lib/constants.d.ts +11 -6
  9. package/dist/lib/constants.d.ts.map +1 -1
  10. package/dist/lib/constants.js +8 -9
  11. package/dist/lib/constants.js.map +1 -1
  12. package/dist/lib/deck.d.ts.map +1 -1
  13. package/dist/lib/deck.js +1 -1
  14. package/dist/lib/deck.js.map +1 -1
  15. package/dist/lib/init.js +2 -2
  16. package/dist/lib/init.js.map +1 -1
  17. package/dist/lib/layer.d.ts.map +1 -1
  18. package/dist/lib/layer.js +4 -6
  19. package/dist/lib/layer.js.map +1 -1
  20. package/dist/passes/layers-pass.d.ts.map +1 -1
  21. package/dist/passes/layers-pass.js +13 -0
  22. package/dist/passes/layers-pass.js.map +1 -1
  23. package/dist/shaderlib/index.d.ts +1 -2
  24. package/dist/shaderlib/index.d.ts.map +1 -1
  25. package/dist/shaderlib/index.js +1 -2
  26. package/dist/shaderlib/index.js.map +1 -1
  27. package/dist/shaderlib/picking/picking.d.ts +4 -4
  28. package/dist/shaderlib/picking/picking.js +4 -4
  29. package/dist/shaderlib/picking/picking.js.map +1 -1
  30. package/dist/shaderlib/project/project-functions.d.ts.map +1 -1
  31. package/dist/shaderlib/project/project-functions.js +19 -10
  32. package/dist/shaderlib/project/project-functions.js.map +1 -1
  33. package/dist/shaderlib/project/project.glsl.d.ts.map +1 -1
  34. package/dist/shaderlib/project/project.glsl.js +10 -5
  35. package/dist/shaderlib/project/project.glsl.js.map +1 -1
  36. package/dist/shaderlib/project/project.wgsl.d.ts.map +1 -1
  37. package/dist/shaderlib/project/project.wgsl.js +10 -5
  38. package/dist/shaderlib/project/project.wgsl.js.map +1 -1
  39. package/dist/shaderlib/project/viewport-uniforms.d.ts +1 -0
  40. package/dist/shaderlib/project/viewport-uniforms.d.ts.map +1 -1
  41. package/dist/shaderlib/project/viewport-uniforms.js +28 -17
  42. package/dist/shaderlib/project/viewport-uniforms.js.map +1 -1
  43. package/dist/shaderlib/shadow/shadow.d.ts +1 -1
  44. package/dist/shaderlib/shadow/shadow.d.ts.map +1 -1
  45. package/dist/shaderlib/shadow/shadow.js +3 -2
  46. package/dist/shaderlib/shadow/shadow.js.map +1 -1
  47. package/dist/utils/texture.d.ts.map +1 -1
  48. package/dist/utils/texture.js +3 -0
  49. package/dist/utils/texture.js.map +1 -1
  50. package/dist.min.js +162 -99
  51. package/package.json +8 -8
  52. package/src/lib/attribute/attribute.ts +70 -27
  53. package/src/lib/constants.ts +18 -12
  54. package/src/lib/deck.ts +1 -1
  55. package/src/lib/layer.ts +4 -6
  56. package/src/passes/layers-pass.ts +21 -1
  57. package/src/shaderlib/index.ts +1 -3
  58. package/src/shaderlib/picking/picking.ts +4 -4
  59. package/src/shaderlib/project/project-functions.ts +20 -10
  60. package/src/shaderlib/project/project.glsl.ts +15 -6
  61. package/src/shaderlib/project/project.wgsl.ts +15 -6
  62. package/src/shaderlib/project/viewport-uniforms.ts +30 -21
  63. package/src/shaderlib/shadow/shadow.ts +6 -2
  64. package/src/utils/texture.ts +2 -0
package/dist/index.cjs CHANGED
@@ -82,9 +82,9 @@ __export(dist_exports, {
82
82
  createIterable: () => createIterable,
83
83
  fp64LowPart: () => fp64LowPart,
84
84
  getShaderAssembler: () => getShaderAssembler,
85
- gouraudMaterial: () => import_shadertools4.gouraudMaterial,
85
+ gouraudMaterial: () => import_shadertools3.gouraudMaterial,
86
86
  log: () => log_default,
87
- phongMaterial: () => import_shadertools4.phongMaterial,
87
+ phongMaterial: () => import_shadertools3.phongMaterial,
88
88
  picking: () => picking_default,
89
89
  project: () => project_default,
90
90
  project32: () => project32_default,
@@ -230,7 +230,7 @@ var json_loader_default = {
230
230
 
231
231
  // dist/lib/init.js
232
232
  function checkVersion() {
233
- const version = true ? "9.3.0-alpha.5" : globalThis.DECK_VERSION || "untranspiled source";
233
+ const version = true ? "9.3.0-beta.1" : globalThis.DECK_VERSION || "untranspiled source";
234
234
  const existingVersion = globalThis.deck && globalThis.deck.VERSION;
235
235
  if (existingVersion && existingVersion !== version) {
236
236
  throw new Error(`deck.gl - multiple versions detected: ${existingVersion} vs ${version}`);
@@ -257,7 +257,6 @@ var VERSION = checkVersion();
257
257
 
258
258
  // dist/shaderlib/index.js
259
259
  var import_shadertools3 = require("@luma.gl/shadertools");
260
- var import_shadertools4 = require("@luma.gl/shadertools");
261
260
 
262
261
  // dist/shaderlib/misc/layer-uniforms.js
263
262
  var uniformBlockWGSL = (
@@ -400,33 +399,33 @@ var COORDINATE_SYSTEM = {
400
399
  /**
401
400
  * `LNGLAT` if rendering into a geospatial viewport, `CARTESIAN` otherwise
402
401
  */
403
- DEFAULT: -1,
402
+ DEFAULT: "default",
404
403
  /**
405
404
  * Positions are interpreted as [longitude, latitude, elevation]
406
405
  * longitude/latitude are in degrees, elevation is in meters.
407
406
  * Dimensions are in meters.
408
407
  */
409
- LNGLAT: 1,
408
+ LNGLAT: "lnglat",
410
409
  /**
411
410
  * Positions are interpreted as [x, y, z] in meter offsets from the coordinate origin.
412
411
  * Dimensions are in meters.
413
412
  */
414
- METER_OFFSETS: 2,
413
+ METER_OFFSETS: "meter-offsets",
415
414
  /**
416
415
  * Positions are interpreted as [deltaLng, deltaLat, elevation] from the coordinate origin.
417
416
  * deltaLng/deltaLat are in degrees, elevation is in meters.
418
417
  * Dimensions are in meters.
419
418
  */
420
- LNGLAT_OFFSETS: 3,
419
+ LNGLAT_OFFSETS: "lnglat-offsets",
421
420
  /**
422
421
  * Positions and dimensions are in the common units of the viewport.
423
422
  */
424
- CARTESIAN: 0
423
+ CARTESIAN: "cartesian"
425
424
  };
426
425
  Object.defineProperty(COORDINATE_SYSTEM, "IDENTITY", {
427
426
  get: () => {
428
427
  log_default.deprecated("COORDINATE_SYSTEM.IDENTITY", "COORDINATE_SYSTEM.CARTESIAN")();
429
- return 0;
428
+ return COORDINATE_SYSTEM.CARTESIAN;
430
429
  }
431
430
  });
432
431
  var PROJECTION_MODE = {
@@ -512,6 +511,20 @@ var VECTOR_TO_POINT_MATRIX = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0];
512
511
  var IDENTITY_MATRIX = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
513
512
  var DEFAULT_PIXELS_PER_UNIT2 = [0, 0, 0];
514
513
  var DEFAULT_COORDINATE_ORIGIN = [0, 0, 0];
514
+ var COORDINATE_SYSTEM_NUMBERS = {
515
+ default: -1,
516
+ cartesian: 0,
517
+ lnglat: 1,
518
+ "meter-offsets": 2,
519
+ "lnglat-offsets": 3
520
+ };
521
+ function getShaderCoordinateSystem(coordinateSystem) {
522
+ const shaderCoordinateSystem = COORDINATE_SYSTEM_NUMBERS[coordinateSystem];
523
+ if (shaderCoordinateSystem === void 0) {
524
+ throw new Error(`Invalid coordinateSystem: ${coordinateSystem}`);
525
+ }
526
+ return shaderCoordinateSystem;
527
+ }
515
528
  var getMemoizedViewportUniforms = memoize(calculateViewportUniforms);
516
529
  function getOffsetOrigin(viewport, coordinateSystem, coordinateOrigin = DEFAULT_COORDINATE_ORIGIN) {
517
530
  if (coordinateOrigin.length < 3) {
@@ -520,7 +533,7 @@ function getOffsetOrigin(viewport, coordinateSystem, coordinateOrigin = DEFAULT_
520
533
  let shaderCoordinateOrigin = coordinateOrigin;
521
534
  let geospatialOrigin;
522
535
  let offsetMode = true;
523
- if (coordinateSystem === COORDINATE_SYSTEM.LNGLAT_OFFSETS || coordinateSystem === COORDINATE_SYSTEM.METER_OFFSETS) {
536
+ if (coordinateSystem === "lnglat-offsets" || coordinateSystem === "meter-offsets") {
524
537
  geospatialOrigin = coordinateOrigin;
525
538
  } else {
526
539
  geospatialOrigin = viewport.isGeospatial ? (
@@ -530,15 +543,15 @@ function getOffsetOrigin(viewport, coordinateSystem, coordinateOrigin = DEFAULT_
530
543
  }
531
544
  switch (viewport.projectionMode) {
532
545
  case PROJECTION_MODE.WEB_MERCATOR:
533
- if (coordinateSystem === COORDINATE_SYSTEM.LNGLAT || coordinateSystem === COORDINATE_SYSTEM.CARTESIAN) {
546
+ if (coordinateSystem === "lnglat" || coordinateSystem === "cartesian") {
534
547
  geospatialOrigin = [0, 0, 0];
535
548
  offsetMode = false;
536
549
  }
537
550
  break;
538
551
  case PROJECTION_MODE.WEB_MERCATOR_AUTO_OFFSET:
539
- if (coordinateSystem === COORDINATE_SYSTEM.LNGLAT) {
552
+ if (coordinateSystem === "lnglat") {
540
553
  shaderCoordinateOrigin = geospatialOrigin;
541
- } else if (coordinateSystem === COORDINATE_SYSTEM.CARTESIAN) {
554
+ } else if (coordinateSystem === "cartesian") {
542
555
  shaderCoordinateOrigin = [
543
556
  Math.fround(viewport.center[0]),
544
557
  Math.fround(viewport.center[1]),
@@ -598,12 +611,12 @@ function getUniformsFromViewport({
598
611
  devicePixelRatio = 1,
599
612
  modelMatrix = null,
600
613
  // Match Layer.defaultProps
601
- coordinateSystem = COORDINATE_SYSTEM.DEFAULT,
614
+ coordinateSystem = "default",
602
615
  coordinateOrigin = DEFAULT_COORDINATE_ORIGIN,
603
616
  autoWrapLongitude = false
604
617
  }) {
605
- if (coordinateSystem === COORDINATE_SYSTEM.DEFAULT) {
606
- coordinateSystem = viewport.isGeospatial ? COORDINATE_SYSTEM.LNGLAT : COORDINATE_SYSTEM.CARTESIAN;
618
+ if (coordinateSystem === "default") {
619
+ coordinateSystem = viewport.isGeospatial ? "lnglat" : "cartesian";
607
620
  }
608
621
  const uniforms = getMemoizedViewportUniforms({
609
622
  viewport,
@@ -625,7 +638,7 @@ function calculateViewportUniforms({ viewport, devicePixelRatio, coordinateSyste
625
638
  const focalDistance = import_core2.vec4.transformMat4([], [0, 0, -viewport.focalDistance, 1], viewport.projectionMatrix)[3] || 1;
626
639
  const uniforms = {
627
640
  // Projection mode values
628
- coordinateSystem,
641
+ coordinateSystem: getShaderCoordinateSystem(coordinateSystem),
629
642
  projectionMode: viewport.projectionMode,
630
643
  coordinateOrigin: shaderCoordinateOrigin,
631
644
  commonOrigin: originCommon.slice(0, 3),
@@ -652,19 +665,19 @@ function calculateViewportUniforms({ viewport, devicePixelRatio, coordinateSyste
652
665
  if (geospatialOrigin) {
653
666
  const distanceScalesAtOrigin = viewport.getDistanceScales(geospatialOrigin);
654
667
  switch (coordinateSystem) {
655
- case COORDINATE_SYSTEM.METER_OFFSETS:
668
+ case "meter-offsets":
656
669
  uniforms.commonUnitsPerWorldUnit = distanceScalesAtOrigin.unitsPerMeter;
657
670
  uniforms.commonUnitsPerWorldUnit2 = distanceScalesAtOrigin.unitsPerMeter2;
658
671
  break;
659
- case COORDINATE_SYSTEM.LNGLAT:
660
- case COORDINATE_SYSTEM.LNGLAT_OFFSETS:
672
+ case "lnglat":
673
+ case "lnglat-offsets":
661
674
  if (!viewport._pseudoMeters) {
662
675
  uniforms.commonUnitsPerMeter = distanceScalesAtOrigin.unitsPerMeter;
663
676
  }
664
677
  uniforms.commonUnitsPerWorldUnit = distanceScalesAtOrigin.unitsPerDegree;
665
678
  uniforms.commonUnitsPerWorldUnit2 = distanceScalesAtOrigin.unitsPerDegree2;
666
679
  break;
667
- case COORDINATE_SYSTEM.CARTESIAN:
680
+ case "cartesian":
668
681
  uniforms.commonUnitsPerWorldUnit = [1, 1, distanceScalesAtOrigin.unitsPerMeter[2]];
669
682
  uniforms.commonUnitsPerWorldUnit2 = [0, 0, distanceScalesAtOrigin.unitsPerMeter2[2]];
670
683
  break;
@@ -676,7 +689,14 @@ function calculateViewportUniforms({ viewport, devicePixelRatio, coordinateSyste
676
689
  }
677
690
 
678
691
  // dist/shaderlib/project/project.wgsl.js
679
- var COORDINATE_SYSTEM_WGSL_CONSTANTS = Object.keys(COORDINATE_SYSTEM).map((key) => `const COORDINATE_SYSTEM_${key}: i32 = ${COORDINATE_SYSTEM[key]};`).join("");
692
+ var SHADER_COORDINATE_SYSTEMS = [
693
+ "default",
694
+ "lnglat",
695
+ "meter-offsets",
696
+ "lnglat-offsets",
697
+ "cartesian"
698
+ ];
699
+ var COORDINATE_SYSTEM_WGSL_CONSTANTS = SHADER_COORDINATE_SYSTEMS.map((coordinateSystem) => `const COORDINATE_SYSTEM_${coordinateSystem.toUpperCase().replaceAll("-", "_")}: i32 = ${getShaderCoordinateSystem(coordinateSystem)};`).join("");
680
700
  var PROJECTION_MODE_WGSL_CONSTANTS = Object.keys(PROJECTION_MODE).map((key) => `const PROJECTION_MODE_${key}: i32 = ${PROJECTION_MODE[key]};`).join("");
681
701
  var UNIT_WGSL_CONSTANTS = Object.keys(UNIT).map((key) => `const UNIT_${key.toUpperCase()}: i32 = ${UNIT[key]};`).join("");
682
702
  var projectWGSLHeader = (
@@ -970,7 +990,14 @@ fn project_pixel_size_vec2(pixels: vec2<f32>) -> vec2<f32> {
970
990
  );
971
991
 
972
992
  // dist/shaderlib/project/project.glsl.js
973
- var COORDINATE_SYSTEM_GLSL_CONSTANTS = Object.keys(COORDINATE_SYSTEM).map((key) => `const int COORDINATE_SYSTEM_${key} = ${COORDINATE_SYSTEM[key]};`).join("");
993
+ var SHADER_COORDINATE_SYSTEMS2 = [
994
+ "default",
995
+ "lnglat",
996
+ "meter-offsets",
997
+ "lnglat-offsets",
998
+ "cartesian"
999
+ ];
1000
+ var COORDINATE_SYSTEM_GLSL_CONSTANTS = SHADER_COORDINATE_SYSTEMS2.map((coordinateSystem) => `const int COORDINATE_SYSTEM_${coordinateSystem.toUpperCase().replaceAll("-", "_")} = ${getShaderCoordinateSystem(coordinateSystem)};`).join("");
974
1001
  var PROJECTION_MODE_GLSL_CONSTANTS = Object.keys(PROJECTION_MODE).map((key) => `const int PROJECTION_MODE_${key} = ${PROJECTION_MODE[key]};`).join("");
975
1002
  var UNIT_GLSL_CONSTANTS = Object.keys(UNIT).map((key) => `const int UNIT_${key.toUpperCase()} = ${UNIT[key]};`).join("");
976
1003
  var projectGLSL = (
@@ -1466,7 +1493,7 @@ function createShadowUniforms(opts) {
1466
1493
  for (let i = 0; i < opts.shadowMatrices.length; i++) {
1467
1494
  const viewProjectionMatrix = viewProjectionMatrices[i];
1468
1495
  const viewProjectionMatrixCentered = viewProjectionMatrix.clone().translate(new import_core3.Vector3(projectProps.viewport.center).negate());
1469
- if (projectUniforms.coordinateSystem === COORDINATE_SYSTEM.LNGLAT && projectUniforms.projectionMode === PROJECTION_MODE.WEB_MERCATOR) {
1496
+ if (projectUniforms.coordinateSystem === getShaderCoordinateSystem("lnglat") && projectUniforms.projectionMode === PROJECTION_MODE.WEB_MERCATOR) {
1470
1497
  viewProjectionMatrices[i] = viewProjectionMatrixCentered;
1471
1498
  projectCenters[i] = center;
1472
1499
  } else {
@@ -1527,7 +1554,7 @@ var sourceWGSL = (
1527
1554
  isActive: f32,
1528
1555
  isAttribute: f32,
1529
1556
  isHighlightActive: f32,
1530
- useFloatColors: f32,
1557
+ useByteColors: f32,
1531
1558
  highlightedObjectColor: vec3<f32>,
1532
1559
  highlightColor: vec4<f32>,
1533
1560
  };
@@ -1535,11 +1562,11 @@ var sourceWGSL = (
1535
1562
  @group(0) @binding(auto) var<uniform> picking: pickingUniforms;
1536
1563
 
1537
1564
  fn picking_normalizeColor(color: vec3<f32>) -> vec3<f32> {
1538
- return select(color / 255.0, color, picking.useFloatColors > 0.5);
1565
+ return select(color, color / 255.0, picking.useByteColors > 0.5);
1539
1566
  }
1540
1567
 
1541
1568
  fn picking_normalizeColor4(color: vec4<f32>) -> vec4<f32> {
1542
- return select(color / 255.0, color, picking.useFloatColors > 0.5);
1569
+ return select(color, color / 255.0, picking.useByteColors > 0.5);
1543
1570
  }
1544
1571
 
1545
1572
  fn picking_isColorZero(color: vec3<f32>) -> bool {
@@ -1554,7 +1581,7 @@ fn picking_isColorValid(color: vec3<f32>) -> bool {
1554
1581
  var picking_default = {
1555
1582
  ...import_shadertools2.picking,
1556
1583
  source: sourceWGSL,
1557
- defaultUniforms: { ...import_shadertools2.picking.defaultUniforms, useFloatColors: false },
1584
+ defaultUniforms: { ...import_shadertools2.picking.defaultUniforms, useByteColors: true },
1558
1585
  inject: {
1559
1586
  "vs:DECKGL_FILTER_GL_POSITION": `
1560
1587
  // for picking depth values
@@ -1664,6 +1691,16 @@ var Pass = class {
1664
1691
  };
1665
1692
 
1666
1693
  // dist/passes/layers-pass.js
1694
+ var WEBGPU_DEFAULT_DRAW_PARAMETERS = {
1695
+ depthWriteEnabled: true,
1696
+ depthCompare: "less-equal",
1697
+ blendColorOperation: "add",
1698
+ blendColorSrcFactor: "src-alpha",
1699
+ blendColorDstFactor: "one",
1700
+ blendAlphaOperation: "add",
1701
+ blendAlphaSrcFactor: "one-minus-dst-alpha",
1702
+ blendAlphaDstFactor: "one"
1703
+ };
1667
1704
  var LayersPass = class extends Pass {
1668
1705
  constructor() {
1669
1706
  super(...arguments);
@@ -1752,7 +1789,9 @@ var LayersPass = class extends Pass {
1752
1789
  layerParam.shouldDrawLayer = true;
1753
1790
  layerParam.layerRenderIndex = indexResolver(layer, shouldDrawLayer);
1754
1791
  layerParam.shaderModuleProps = this._getShaderModuleProps(layer, effects, pass, shaderModuleProps);
1792
+ const defaultParams = layer.context.device.type === "webgpu" ? WEBGPU_DEFAULT_DRAW_PARAMETERS : null;
1755
1793
  layerParam.layerParameters = {
1794
+ ...defaultParams,
1756
1795
  ...(_a = layer.context.deck) == null ? void 0 : _a.props.parameters,
1757
1796
  ...this.getLayerParameters(layer, layerIndex, viewport)
1758
1797
  };
@@ -2833,11 +2872,13 @@ function lngLatZToWorldPosition(lngLatZ, viewport, offsetMode = false) {
2833
2872
  function normalizeParameters(opts) {
2834
2873
  const { viewport, modelMatrix, coordinateOrigin } = opts;
2835
2874
  let { coordinateSystem, fromCoordinateSystem, fromCoordinateOrigin } = opts;
2836
- if (coordinateSystem === COORDINATE_SYSTEM.DEFAULT) {
2837
- coordinateSystem = viewport.isGeospatial ? COORDINATE_SYSTEM.LNGLAT : COORDINATE_SYSTEM.CARTESIAN;
2875
+ if (coordinateSystem === "default") {
2876
+ coordinateSystem = viewport.isGeospatial ? "lnglat" : "cartesian";
2838
2877
  }
2839
2878
  if (fromCoordinateSystem === void 0) {
2840
2879
  fromCoordinateSystem = coordinateSystem;
2880
+ } else if (fromCoordinateSystem === "default") {
2881
+ fromCoordinateSystem = viewport.isGeospatial ? "lnglat" : "cartesian";
2841
2882
  }
2842
2883
  if (fromCoordinateOrigin === void 0) {
2843
2884
  fromCoordinateOrigin = coordinateOrigin;
@@ -2857,15 +2898,24 @@ function getWorldPosition(position, { viewport, modelMatrix, coordinateSystem, c
2857
2898
  [x, y, z] = import_core9.vec4.transformMat4([], [x, y, z, 1], modelMatrix);
2858
2899
  }
2859
2900
  switch (coordinateSystem) {
2860
- case COORDINATE_SYSTEM.LNGLAT:
2901
+ case "default":
2902
+ return getWorldPosition(position, {
2903
+ viewport,
2904
+ modelMatrix,
2905
+ coordinateSystem: viewport.isGeospatial ? "lnglat" : "cartesian",
2906
+ coordinateOrigin,
2907
+ offsetMode
2908
+ });
2909
+ case "lnglat":
2861
2910
  return lngLatZToWorldPosition([x, y, z], viewport, offsetMode);
2862
- case COORDINATE_SYSTEM.LNGLAT_OFFSETS:
2911
+ case "lnglat-offsets":
2863
2912
  return lngLatZToWorldPosition([x + coordinateOrigin[0], y + coordinateOrigin[1], z + (coordinateOrigin[2] || 0)], viewport, offsetMode);
2864
- case COORDINATE_SYSTEM.METER_OFFSETS:
2913
+ case "meter-offsets":
2865
2914
  return lngLatZToWorldPosition((0, import_web_mercator4.addMetersToLngLat)(coordinateOrigin, [x, y, z]), viewport, offsetMode);
2866
- case COORDINATE_SYSTEM.CARTESIAN:
2867
- default:
2915
+ case "cartesian":
2868
2916
  return viewport.isGeospatial ? [x + coordinateOrigin[0], y + coordinateOrigin[1], z + coordinateOrigin[2]] : viewport.projectPosition([x, y, z]);
2917
+ default:
2918
+ throw new Error(`Invalid coordinateSystem: ${coordinateSystem}`);
2869
2919
  }
2870
2920
  }
2871
2921
  function projectPosition(position, params) {
@@ -2971,7 +3021,7 @@ var SunLight = class extends DirectionalLight {
2971
3021
  };
2972
3022
 
2973
3023
  // dist/effects/post-process-effect.js
2974
- var import_shadertools5 = require("@luma.gl/shadertools");
3024
+ var import_shadertools4 = require("@luma.gl/shadertools");
2975
3025
 
2976
3026
  // dist/passes/screen-pass.js
2977
3027
  var import_engine = require("@luma.gl/engine");
@@ -3050,7 +3100,7 @@ var PostProcessEffect = class {
3050
3100
  constructor(module2, props) {
3051
3101
  this.id = `${module2.name}-pass`;
3052
3102
  this.props = props;
3053
- (0, import_shadertools5.initializeShaderModule)(module2);
3103
+ (0, import_shadertools4.initializeShaderModule)(module2);
3054
3104
  this.module = module2;
3055
3105
  }
3056
3106
  setup({ device }) {
@@ -7403,9 +7453,9 @@ TooltipWidget.defaultProps = {
7403
7453
  // dist/lib/deck.js
7404
7454
  var import_core17 = require("@luma.gl/core");
7405
7455
  var import_webgl = require("@luma.gl/webgl");
7456
+ var import_constants10 = require("@luma.gl/webgl/constants");
7406
7457
  var import_engine3 = require("@luma.gl/engine");
7407
7458
  var import_engine4 = require("@luma.gl/engine");
7408
- var import_constants11 = require("@luma.gl/webgl/constants");
7409
7459
  var import_stats2 = require("@probe.gl/stats");
7410
7460
  var import_mjolnir2 = require("mjolnir.js");
7411
7461
  function noop2() {
@@ -9016,10 +9066,14 @@ var Attribute = class extends DataColumn {
9016
9066
  }
9017
9067
  if (!this.value) {
9018
9068
  } else if (this.constant || !this.buffer || this.buffer.byteLength < this.value.byteLength + this.byteOffset) {
9019
- this.setData({
9020
- value: this.value,
9021
- constant: this.constant
9022
- });
9069
+ if (this.constant) {
9070
+ this.setConstantValue(context, this.value);
9071
+ } else {
9072
+ this.setData({
9073
+ value: this.value,
9074
+ constant: this.constant
9075
+ });
9076
+ }
9023
9077
  this.constant = false;
9024
9078
  } else {
9025
9079
  for (const [startRow, endRow] of updateRanges) {
@@ -9039,17 +9093,13 @@ var Attribute = class extends DataColumn {
9039
9093
  // Use generic value
9040
9094
  // Returns true if successful
9041
9095
  setConstantValue(context, value) {
9042
- const isWebGPU = this.device.type === "webgpu";
9043
- if (isWebGPU || value === void 0 || typeof value === "function") {
9044
- if (isWebGPU && typeof value !== "function") {
9045
- const normalisedValue = this._normalizeValue(value, [], 0);
9046
- if (!this._areValuesEqual(normalisedValue, this.value)) {
9047
- this.setNeedsUpdate("WebGPU constant updated");
9048
- }
9049
- }
9096
+ if (value === void 0 || typeof value === "function") {
9050
9097
  return false;
9051
9098
  }
9052
9099
  const transformedValue = this.settings.transform && context ? this.settings.transform.call(context, value) : value;
9100
+ if (this.device.type === "webgpu") {
9101
+ return this.setConstantBufferValue(transformedValue, this.numInstances);
9102
+ }
9053
9103
  const hasChanged = this.setData({ constant: true, value: transformedValue });
9054
9104
  if (hasChanged) {
9055
9105
  this.setNeedsRedraw();
@@ -9057,6 +9107,41 @@ var Attribute = class extends DataColumn {
9057
9107
  this.clearNeedsUpdate();
9058
9108
  return true;
9059
9109
  }
9110
+ setConstantBufferValue(value, numInstances) {
9111
+ const ArrayType = this.settings.defaultType;
9112
+ const constantValue = this._normalizeValue(value, new ArrayType(this.size), 0);
9113
+ if (this._hasConstantBufferValue(constantValue, numInstances)) {
9114
+ this.constant = false;
9115
+ this.clearNeedsUpdate();
9116
+ return false;
9117
+ }
9118
+ const repeatedValue = new ArrayType(Math.max(numInstances, 1) * this.size);
9119
+ for (let i = 0; i < repeatedValue.length; i += this.size) {
9120
+ repeatedValue.set(constantValue, i);
9121
+ }
9122
+ const hasChanged = this.setData({ value: repeatedValue });
9123
+ this.constant = false;
9124
+ this.clearNeedsUpdate();
9125
+ if (hasChanged) {
9126
+ this.setNeedsRedraw();
9127
+ }
9128
+ return hasChanged;
9129
+ }
9130
+ _hasConstantBufferValue(value, numInstances) {
9131
+ const currentValue = this.value;
9132
+ const expectedLength = Math.max(numInstances, 1) * this.size;
9133
+ if (!ArrayBuffer.isView(currentValue) || currentValue.length !== expectedLength || currentValue.length % this.size !== 0) {
9134
+ return false;
9135
+ }
9136
+ for (let i = 0; i < currentValue.length; i += this.size) {
9137
+ for (let j = 0; j < this.size; j++) {
9138
+ if (currentValue[i + j] !== value[j]) {
9139
+ return false;
9140
+ }
9141
+ }
9142
+ }
9143
+ return true;
9144
+ }
9060
9145
  // Use external buffer
9061
9146
  // Returns true if successful
9062
9147
  // eslint-disable-next-line max-statements
@@ -9153,18 +9238,10 @@ var Attribute = class extends DataColumn {
9153
9238
  }
9154
9239
  /* eslint-disable max-depth, max-statements */
9155
9240
  _autoUpdater(attribute, { data, startRow, endRow, props, numInstances }) {
9156
- if (attribute.constant) {
9157
- if (this.context.device.type !== "webgpu") {
9158
- return;
9159
- }
9160
- }
9161
9241
  const { settings, state, value, size, startIndices } = attribute;
9162
9242
  const { accessor, transform } = settings;
9163
- let accessorFunc = state.binaryAccessor || // @ts-ignore
9243
+ const accessorFunc = state.binaryAccessor || // @ts-ignore
9164
9244
  (typeof accessor === "function" ? accessor : props[accessor]);
9165
- if (typeof accessorFunc !== "function" && typeof accessor === "string") {
9166
- accessorFunc = () => props[accessor];
9167
- }
9168
9245
  assert(typeof accessorFunc === "function", `accessor "${accessor}" is not a function`);
9169
9246
  let i = attribute.getVertexOffset(startRow);
9170
9247
  const { iterable, objectInfo } = createIterable(data, startRow, endRow);
@@ -9238,8 +9315,8 @@ var Attribute = class extends DataColumn {
9238
9315
 
9239
9316
  // dist/transitions/gpu-interpolation-transition.js
9240
9317
  var import_engine5 = require("@luma.gl/engine");
9241
- var import_shadertools6 = require("@luma.gl/shadertools");
9242
- var import_constants14 = require("@luma.gl/webgl/constants");
9318
+ var import_shadertools5 = require("@luma.gl/shadertools");
9319
+ var import_constants13 = require("@luma.gl/webgl/constants");
9243
9320
 
9244
9321
  // dist/utils/array-utils.js
9245
9322
  function padArrayChunk(options) {
@@ -9306,7 +9383,7 @@ function padArray({ source: source3, target, size, getData, sourceStartIndices,
9306
9383
  }
9307
9384
 
9308
9385
  // dist/transitions/gpu-transition-utils.js
9309
- var import_constants13 = require("@luma.gl/webgl/constants");
9386
+ var import_constants12 = require("@luma.gl/webgl/constants");
9310
9387
  function cloneAttribute(attribute) {
9311
9388
  const { device, settings, value } = attribute;
9312
9389
  const newAttribute = new Attribute(device, settings);
@@ -9602,7 +9679,7 @@ function getTransform(device, attribute) {
9602
9679
  }
9603
9680
  ],
9604
9681
  // @ts-expect-error fp64 module only sets ONE uniform via defaultUniforms
9605
- modules: [import_shadertools6.fp64arithmetic, interpolationUniforms],
9682
+ modules: [import_shadertools5.fp64arithmetic, interpolationUniforms],
9606
9683
  defines: {
9607
9684
  // @ts-expect-error TODO fix luma type
9608
9685
  ATTRIBUTE_TYPE: attributeType,
@@ -10544,6 +10621,8 @@ function createTexture(owner, device, image, sampler) {
10544
10621
  });
10545
10622
  if (device.type === "webgl") {
10546
10623
  texture.generateMipmapsWebGL();
10624
+ } else if (device.type === "webgpu") {
10625
+ device.generateMipmapsWebGPU(texture);
10547
10626
  }
10548
10627
  internalTextures[texture.id] = owner;
10549
10628
  return texture;
@@ -11229,7 +11308,7 @@ var defaultProps2 = {
11229
11308
  onDragStart: { type: "function", value: null, optional: true },
11230
11309
  onDrag: { type: "function", value: null, optional: true },
11231
11310
  onDragEnd: { type: "function", value: null, optional: true },
11232
- coordinateSystem: COORDINATE_SYSTEM.DEFAULT,
11311
+ coordinateSystem: "default",
11233
11312
  coordinateOrigin: { type: "array", value: [0, 0, 0], compare: true },
11234
11313
  modelMatrix: { type: "array", value: null, compare: true, optional: true },
11235
11314
  wrapLongitude: false,
@@ -11372,7 +11451,7 @@ var Layer = class extends component_default {
11372
11451
  }
11373
11452
  use64bitPositions() {
11374
11453
  const { coordinateSystem } = this.props;
11375
- return coordinateSystem === COORDINATE_SYSTEM.DEFAULT || coordinateSystem === COORDINATE_SYSTEM.LNGLAT || coordinateSystem === COORDINATE_SYSTEM.CARTESIAN;
11454
+ return coordinateSystem === "default" || coordinateSystem === "lnglat" || coordinateSystem === "cartesian";
11376
11455
  }
11377
11456
  // Event handling
11378
11457
  onHover(info, pickingEvent) {
@@ -11754,7 +11833,6 @@ var Layer = class extends component_default {
11754
11833
  /* (Internal) Called by layer manager when a new layer is found */
11755
11834
  _initialize() {
11756
11835
  assert(!this.internalState);
11757
- assert(Number.isFinite(this.props.coordinateSystem));
11758
11836
  debug(TRACE_INITIALIZE, this);
11759
11837
  const attributeManager = this._getAttributeManager();
11760
11838
  if (attributeManager) {