@luma.gl/engine 9.3.0-alpha.4 → 9.3.0-alpha.8

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 (177) hide show
  1. package/dist/animation-loop/animation-loop.d.ts +8 -4
  2. package/dist/animation-loop/animation-loop.d.ts.map +1 -1
  3. package/dist/animation-loop/animation-loop.js +73 -43
  4. package/dist/animation-loop/animation-loop.js.map +1 -1
  5. package/dist/animation-loop/make-animation-loop.js +7 -1
  6. package/dist/animation-loop/make-animation-loop.js.map +1 -1
  7. package/dist/animation-loop/request-animation-frame.d.ts.map +1 -1
  8. package/dist/animation-loop/request-animation-frame.js +23 -6
  9. package/dist/animation-loop/request-animation-frame.js.map +1 -1
  10. package/dist/compute/computation.d.ts +3 -7
  11. package/dist/compute/computation.d.ts.map +1 -1
  12. package/dist/compute/computation.js +14 -12
  13. package/dist/compute/computation.js.map +1 -1
  14. package/dist/dist.dev.js +2310 -1638
  15. package/dist/dist.min.js +307 -360
  16. package/dist/dynamic-texture/dynamic-texture.d.ts +12 -5
  17. package/dist/dynamic-texture/dynamic-texture.d.ts.map +1 -1
  18. package/dist/dynamic-texture/dynamic-texture.js +222 -55
  19. package/dist/dynamic-texture/dynamic-texture.js.map +1 -1
  20. package/dist/dynamic-texture/texture-data.d.ts +8 -1
  21. package/dist/dynamic-texture/texture-data.d.ts.map +1 -1
  22. package/dist/dynamic-texture/texture-data.js +27 -2
  23. package/dist/dynamic-texture/texture-data.js.map +1 -1
  24. package/dist/geometries/cone-geometry.d.ts +3 -1
  25. package/dist/geometries/cone-geometry.d.ts.map +1 -1
  26. package/dist/geometries/cone-geometry.js.map +1 -1
  27. package/dist/geometries/cylinder-geometry.d.ts +2 -1
  28. package/dist/geometries/cylinder-geometry.d.ts.map +1 -1
  29. package/dist/geometries/cylinder-geometry.js.map +1 -1
  30. package/dist/geometry/gpu-geometry.d.ts.map +1 -1
  31. package/dist/geometry/gpu-geometry.js +8 -3
  32. package/dist/geometry/gpu-geometry.js.map +1 -1
  33. package/dist/index.cjs +2897 -2272
  34. package/dist/index.cjs.map +4 -4
  35. package/dist/index.d.ts +12 -3
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +8 -3
  38. package/dist/index.js.map +1 -1
  39. package/dist/material/material-factory.d.ts +73 -0
  40. package/dist/material/material-factory.d.ts.map +1 -0
  41. package/dist/material/material-factory.js +111 -0
  42. package/dist/material/material-factory.js.map +1 -0
  43. package/dist/material/material.d.ts +84 -0
  44. package/dist/material/material.d.ts.map +1 -0
  45. package/dist/material/material.js +176 -0
  46. package/dist/material/material.js.map +1 -0
  47. package/dist/model/model.d.ts +17 -7
  48. package/dist/model/model.d.ts.map +1 -1
  49. package/dist/model/model.js +80 -34
  50. package/dist/model/model.js.map +1 -1
  51. package/dist/model/split-uniforms-and-bindings.d.ts +4 -3
  52. package/dist/model/split-uniforms-and-bindings.d.ts.map +1 -1
  53. package/dist/model/split-uniforms-and-bindings.js +2 -2
  54. package/dist/model/split-uniforms-and-bindings.js.map +1 -1
  55. package/dist/models/billboard-texture-model.d.ts.map +1 -1
  56. package/dist/models/billboard-texture-model.js +10 -8
  57. package/dist/models/billboard-texture-model.js.map +1 -1
  58. package/dist/models/clip-space.js +7 -7
  59. package/dist/models/directional-light-model.d.ts +7 -0
  60. package/dist/models/directional-light-model.d.ts.map +1 -0
  61. package/dist/models/directional-light-model.js +23 -0
  62. package/dist/models/directional-light-model.js.map +1 -0
  63. package/dist/models/light-model-utils.d.ts +69 -0
  64. package/dist/models/light-model-utils.d.ts.map +1 -0
  65. package/dist/models/light-model-utils.js +395 -0
  66. package/dist/models/light-model-utils.js.map +1 -0
  67. package/dist/models/point-light-model.d.ts +7 -0
  68. package/dist/models/point-light-model.d.ts.map +1 -0
  69. package/dist/models/point-light-model.js +22 -0
  70. package/dist/models/point-light-model.js.map +1 -0
  71. package/dist/models/spot-light-model.d.ts +7 -0
  72. package/dist/models/spot-light-model.d.ts.map +1 -0
  73. package/dist/models/spot-light-model.js +23 -0
  74. package/dist/models/spot-light-model.js.map +1 -0
  75. package/dist/modules/picking/color-picking.d.ts +5 -9
  76. package/dist/modules/picking/color-picking.d.ts.map +1 -1
  77. package/dist/modules/picking/color-picking.js +122 -115
  78. package/dist/modules/picking/color-picking.js.map +1 -1
  79. package/dist/modules/picking/index-picking.d.ts +2 -2
  80. package/dist/modules/picking/index-picking.d.ts.map +1 -1
  81. package/dist/modules/picking/index-picking.js +36 -16
  82. package/dist/modules/picking/index-picking.js.map +1 -1
  83. package/dist/modules/picking/legacy-color-picking.d.ts +26 -0
  84. package/dist/modules/picking/legacy-color-picking.d.ts.map +1 -0
  85. package/dist/modules/picking/legacy-color-picking.js +7 -0
  86. package/dist/modules/picking/legacy-color-picking.js.map +1 -0
  87. package/dist/modules/picking/picking-manager.d.ts +29 -3
  88. package/dist/modules/picking/picking-manager.d.ts.map +1 -1
  89. package/dist/modules/picking/picking-manager.js +188 -41
  90. package/dist/modules/picking/picking-manager.js.map +1 -1
  91. package/dist/modules/picking/picking-uniforms.d.ts +12 -11
  92. package/dist/modules/picking/picking-uniforms.d.ts.map +1 -1
  93. package/dist/modules/picking/picking-uniforms.js +26 -13
  94. package/dist/modules/picking/picking-uniforms.js.map +1 -1
  95. package/dist/modules/picking/picking.d.ts +25 -0
  96. package/dist/modules/picking/picking.d.ts.map +1 -0
  97. package/dist/modules/picking/picking.js +18 -0
  98. package/dist/modules/picking/picking.js.map +1 -0
  99. package/dist/passes/get-fragment-shader.js +11 -30
  100. package/dist/passes/get-fragment-shader.js.map +1 -1
  101. package/dist/passes/shader-pass-renderer.d.ts +0 -2
  102. package/dist/passes/shader-pass-renderer.d.ts.map +1 -1
  103. package/dist/passes/shader-pass-renderer.js +4 -31
  104. package/dist/passes/shader-pass-renderer.js.map +1 -1
  105. package/dist/scenegraph/group-node.d.ts +5 -0
  106. package/dist/scenegraph/group-node.d.ts.map +1 -1
  107. package/dist/scenegraph/group-node.js +12 -0
  108. package/dist/scenegraph/group-node.js.map +1 -1
  109. package/dist/scenegraph/model-node.d.ts +2 -2
  110. package/dist/scenegraph/model-node.d.ts.map +1 -1
  111. package/dist/scenegraph/model-node.js.map +1 -1
  112. package/dist/scenegraph/scenegraph-node.d.ts +1 -1
  113. package/dist/scenegraph/scenegraph-node.d.ts.map +1 -1
  114. package/dist/scenegraph/scenegraph-node.js +23 -15
  115. package/dist/scenegraph/scenegraph-node.js.map +1 -1
  116. package/dist/shader-inputs.d.ts +9 -7
  117. package/dist/shader-inputs.d.ts.map +1 -1
  118. package/dist/shader-inputs.js +84 -4
  119. package/dist/shader-inputs.js.map +1 -1
  120. package/dist/utils/shader-module-utils.d.ts +7 -0
  121. package/dist/utils/shader-module-utils.d.ts.map +1 -0
  122. package/dist/utils/shader-module-utils.js +46 -0
  123. package/dist/utils/shader-module-utils.js.map +1 -0
  124. package/package.json +4 -4
  125. package/src/animation-loop/animation-loop.ts +78 -46
  126. package/src/animation-loop/make-animation-loop.ts +13 -5
  127. package/src/animation-loop/request-animation-frame.ts +32 -6
  128. package/src/compute/computation.ts +31 -17
  129. package/src/dynamic-texture/dynamic-texture.ts +301 -68
  130. package/src/dynamic-texture/texture-data.ts +39 -4
  131. package/src/geometries/cone-geometry.ts +6 -1
  132. package/src/geometries/cylinder-geometry.ts +5 -1
  133. package/src/geometry/gpu-geometry.ts +8 -3
  134. package/src/index.ts +29 -4
  135. package/src/material/material-factory.ts +157 -0
  136. package/src/material/material.ts +254 -0
  137. package/src/model/model.ts +122 -50
  138. package/src/model/split-uniforms-and-bindings.ts +8 -6
  139. package/src/models/billboard-texture-model.ts +10 -8
  140. package/src/models/clip-space.ts +7 -7
  141. package/src/models/directional-light-model.ts +32 -0
  142. package/src/models/light-model-utils.ts +587 -0
  143. package/src/models/point-light-model.ts +31 -0
  144. package/src/models/spot-light-model.ts +32 -0
  145. package/src/modules/picking/color-picking.ts +123 -122
  146. package/src/modules/picking/index-picking.ts +36 -16
  147. package/src/modules/picking/legacy-color-picking.ts +8 -0
  148. package/src/modules/picking/picking-manager.ts +252 -50
  149. package/src/modules/picking/picking-uniforms.ts +38 -23
  150. package/src/modules/picking/picking.ts +22 -0
  151. package/src/passes/get-fragment-shader.ts +11 -30
  152. package/src/passes/shader-pass-renderer.ts +4 -33
  153. package/src/scenegraph/group-node.ts +16 -0
  154. package/src/scenegraph/model-node.ts +2 -2
  155. package/src/scenegraph/scenegraph-node.ts +27 -16
  156. package/src/shader-inputs.ts +165 -15
  157. package/src/utils/shader-module-utils.ts +65 -0
  158. package/dist/dynamic-texture/mipmaps.d.ts +0 -6
  159. package/dist/dynamic-texture/mipmaps.d.ts.map +0 -1
  160. package/dist/dynamic-texture/mipmaps.js +0 -441
  161. package/dist/dynamic-texture/mipmaps.js.map +0 -1
  162. package/dist/factories/pipeline-factory.d.ts +0 -37
  163. package/dist/factories/pipeline-factory.d.ts.map +0 -1
  164. package/dist/factories/pipeline-factory.js +0 -181
  165. package/dist/factories/pipeline-factory.js.map +0 -1
  166. package/dist/factories/shader-factory.d.ts +0 -22
  167. package/dist/factories/shader-factory.d.ts.map +0 -1
  168. package/dist/factories/shader-factory.js +0 -89
  169. package/dist/factories/shader-factory.js.map +0 -1
  170. package/dist/types.d.ts +0 -7
  171. package/dist/types.d.ts.map +0 -1
  172. package/dist/types.js +0 -5
  173. package/dist/types.js.map +0 -1
  174. package/src/dynamic-texture/mipmaps.ts +0 -517
  175. package/src/factories/pipeline-factory.ts +0 -225
  176. package/src/factories/shader-factory.ts +0 -105
  177. package/src/types.ts +0 -11
@@ -6,9 +6,9 @@ import { Geometry } from "../geometry/geometry.js";
6
6
  import { uid } from "../utils/uid.js";
7
7
  const CLIPSPACE_VERTEX_SHADER_WGSL = /* wgsl */ `\
8
8
  struct VertexInputs {
9
- @location(0) clipSpacePosition: vec2<f32>,
10
- @location(1) texCoord: vec2<f32>,
11
- @location(2) coordinate: vec2<f32>
9
+ @location(0) clipSpacePositions: vec2<f32>,
10
+ @location(1) texCoords: vec2<f32>,
11
+ @location(2) coordinates: vec2<f32>
12
12
  }
13
13
 
14
14
  struct FragmentInputs {
@@ -21,10 +21,10 @@ struct FragmentInputs {
21
21
  @vertex
22
22
  fn vertexMain(inputs: VertexInputs) -> FragmentInputs {
23
23
  var outputs: FragmentInputs;
24
- outputs.Position = vec4(inputs.clipSpacePosition, 0., 1.);
25
- outputs.position = inputs.clipSpacePosition;
26
- outputs.coordinate = inputs.coordinate;
27
- outputs.uv = inputs.texCoord;
24
+ outputs.Position = vec4(inputs.clipSpacePositions, 0., 1.);
25
+ outputs.position = inputs.clipSpacePositions;
26
+ outputs.coordinate = inputs.coordinates;
27
+ outputs.uv = inputs.texCoords;
28
28
  return outputs;
29
29
  }
30
30
  `;
@@ -0,0 +1,7 @@
1
+ import { Device } from '@luma.gl/core';
2
+ import { BaseLightModel, type DirectionalLightModelProps } from "./light-model-utils.js";
3
+ export type { DirectionalLightModelProps } from "./light-model-utils.js";
4
+ export declare class DirectionalLightModel extends BaseLightModel<DirectionalLightModelProps> {
5
+ constructor(device: Device, props: DirectionalLightModelProps);
6
+ }
7
+ //# sourceMappingURL=directional-light-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directional-light-model.d.ts","sourceRoot":"","sources":["../../src/models/directional-light-model.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AAErC,OAAO,EACL,cAAc,EAEd,KAAK,0BAA0B,EAChC,+BAA4B;AAS7B,YAAY,EAAC,0BAA0B,EAAC,+BAA4B;AAEpE,qBAAa,qBAAsB,SAAQ,cAAc,CAAC,0BAA0B,CAAC;gBACvE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,0BAA0B;CAS9D"}
@@ -0,0 +1,23 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { ConeGeometry } from "../geometries/cone-geometry.js";
5
+ import { BaseLightModel, buildDirectionalLightInstanceData } from "./light-model-utils.js";
6
+ const DIRECTIONAL_LIGHT_GEOMETRY = new ConeGeometry({
7
+ cap: true,
8
+ nradial: 12,
9
+ nvertical: 1,
10
+ radius: 1
11
+ });
12
+ export class DirectionalLightModel extends BaseLightModel {
13
+ constructor(device, props) {
14
+ super(device, props, {
15
+ anchorMode: 'apex',
16
+ buildInstanceData: buildDirectionalLightInstanceData,
17
+ geometry: DIRECTIONAL_LIGHT_GEOMETRY,
18
+ idPrefix: 'directional-light-model',
19
+ sizePropNames: ['directionalLightLength']
20
+ });
21
+ }
22
+ }
23
+ //# sourceMappingURL=directional-light-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directional-light-model.js","sourceRoot":"","sources":["../../src/models/directional-light-model.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,EAAC,YAAY,EAAC,uCAAoC;AACzD,OAAO,EACL,cAAc,EACd,iCAAiC,EAElC,+BAA4B;AAE7B,MAAM,0BAA0B,GAAG,IAAI,YAAY,CAAC;IAClD,GAAG,EAAE,IAAI;IACT,OAAO,EAAE,EAAE;IACX,SAAS,EAAE,CAAC;IACZ,MAAM,EAAE,CAAC;CACV,CAAC,CAAC;AAIH,MAAM,OAAO,qBAAsB,SAAQ,cAA0C;IACnF,YAAY,MAAc,EAAE,KAAiC;QAC3D,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE;YACnB,UAAU,EAAE,MAAM;YAClB,iBAAiB,EAAE,iCAAiC;YACpD,QAAQ,EAAE,0BAA0B;YACpC,QAAQ,EAAE,yBAAyB;YACnC,aAAa,EAAE,CAAC,wBAAwB,CAAC;SAC1C,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,69 @@
1
+ import { Buffer, Device, type RenderPass } from '@luma.gl/core';
2
+ import { type NumericArray } from '@math.gl/core';
3
+ import type { DirectionalLight, Light, PointLight, SpotLight } from '@luma.gl/shadertools';
4
+ import { Model, type ModelProps } from "../model/model.js";
5
+ import type { Geometry } from "../geometry/geometry.js";
6
+ export type LightModelBounds = [[number, number, number], [number, number, number]];
7
+ export type BaseLightModelProps = Omit<ModelProps, 'geometry' | 'modules' | 'shaderInputs' | 'source' | 'vs' | 'fs' | 'instanceCount'> & {
8
+ lights: ReadonlyArray<Light>;
9
+ viewMatrix: NumericArray;
10
+ projectionMatrix: NumericArray;
11
+ bounds?: LightModelBounds;
12
+ markerScale?: number;
13
+ };
14
+ export type PointLightModelProps = BaseLightModelProps & {
15
+ pointLightRadius?: number;
16
+ };
17
+ export type SpotLightModelProps = BaseLightModelProps & {
18
+ spotLightLength?: number;
19
+ };
20
+ export type DirectionalLightModelProps = BaseLightModelProps & {
21
+ directionalLightLength?: number;
22
+ };
23
+ export type LightMarkerInstanceData = {
24
+ instanceCount: number;
25
+ instancePositions: Float32Array;
26
+ instanceDirections: Float32Array;
27
+ instanceScales: Float32Array;
28
+ instanceColors: Float32Array;
29
+ };
30
+ type ManagedInstanceBuffers = Record<'instancePosition' | 'instanceDirection' | 'instanceScale' | 'instanceColor', Buffer>;
31
+ type LightMarkerAnchorMode = 'centered' | 'apex';
32
+ type LightMarkerModelOptions<PropsT extends BaseLightModelProps> = {
33
+ anchorMode: LightMarkerAnchorMode;
34
+ buildInstanceData: (props: PropsT) => LightMarkerInstanceData;
35
+ geometry: Geometry;
36
+ idPrefix: string;
37
+ sizePropNames: Array<keyof PropsT>;
38
+ };
39
+ export declare abstract class BaseLightModel<PropsT extends BaseLightModelProps> extends Model {
40
+ protected lightModelProps: PropsT;
41
+ protected _instanceData: LightMarkerInstanceData;
42
+ protected _managedBuffers: ManagedInstanceBuffers;
43
+ private readonly buildInstanceData;
44
+ private readonly sizePropNames;
45
+ constructor(device: Device, props: PropsT, options: LightMarkerModelOptions<PropsT>);
46
+ destroy(): void;
47
+ draw(renderPass: RenderPass): boolean;
48
+ setProps(props: Partial<PropsT>): void;
49
+ private rebuildInstanceData;
50
+ }
51
+ export declare function buildPointLightInstanceData(props: PointLightModelProps): LightMarkerInstanceData;
52
+ export declare function buildSpotLightInstanceData(props: SpotLightModelProps): LightMarkerInstanceData;
53
+ export declare function buildDirectionalLightInstanceData(props: DirectionalLightModelProps): LightMarkerInstanceData;
54
+ export declare function getPointLights(lights: ReadonlyArray<Light>): PointLight[];
55
+ export declare function getSpotLights(lights: ReadonlyArray<Light>): SpotLight[];
56
+ export declare function getDirectionalLights(lights: ReadonlyArray<Light>): DirectionalLight[];
57
+ export declare function getLightMarkerContext(props: BaseLightModelProps): {
58
+ bounds: LightModelBounds;
59
+ markerScale: number;
60
+ sceneCenter: [number, number, number];
61
+ sceneScale: number;
62
+ };
63
+ export declare function getDisplayColor(light: {
64
+ color?: Readonly<[number, number, number]>;
65
+ intensity?: number;
66
+ }): [number, number, number, number];
67
+ export declare function normalizeDirection(direction?: Readonly<[number, number, number]>): [number, number, number];
68
+ export {};
69
+ //# sourceMappingURL=light-model-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"light-model-utils.d.ts","sourceRoot":"","sources":["../../src/models/light-model-utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,MAAM,EAAE,MAAM,EAAE,KAAK,UAAU,EAAgC,MAAM,eAAe,CAAC;AAC7F,OAAO,EAAU,KAAK,YAAY,EAAC,MAAM,eAAe,CAAC;AACzD,OAAO,KAAK,EACV,gBAAgB,EAChB,KAAK,EACL,UAAU,EAEV,SAAS,EACV,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAC,KAAK,EAAE,KAAK,UAAU,EAAC,0BAAuB;AAEtD,OAAO,KAAK,EAAC,QAAQ,EAAC,gCAA6B;AAcnD,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAEpF,MAAM,MAAM,mBAAmB,GAAG,IAAI,CACpC,UAAU,EACV,UAAU,GAAG,SAAS,GAAG,cAAc,GAAG,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,eAAe,CACnF,GAAG;IACF,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAC7B,UAAU,EAAE,YAAY,CAAC;IACzB,gBAAgB,EAAE,YAAY,CAAC;IAC/B,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,mBAAmB,GAAG;IACvD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,mBAAmB,GAAG;IACtD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,mBAAmB,GAAG;IAC7D,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC,CAAC;AAMF,MAAM,MAAM,uBAAuB,GAAG;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,YAAY,CAAC;IAChC,kBAAkB,EAAE,YAAY,CAAC;IACjC,cAAc,EAAE,YAAY,CAAC;IAC7B,cAAc,EAAE,YAAY,CAAC;CAC9B,CAAC;AAEF,KAAK,sBAAsB,GAAG,MAAM,CAClC,kBAAkB,GAAG,mBAAmB,GAAG,eAAe,GAAG,eAAe,EAC5E,MAAM,CACP,CAAC;AAEF,KAAK,qBAAqB,GAAG,UAAU,GAAG,MAAM,CAAC;AAEjD,KAAK,uBAAuB,CAAC,MAAM,SAAS,mBAAmB,IAAI;IACjE,UAAU,EAAE,qBAAqB,CAAC;IAClC,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,uBAAuB,CAAC;IAC9D,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,KAAK,CAAC,MAAM,MAAM,CAAC,CAAC;CACpC,CAAC;AA+BF,8BAAsB,cAAc,CAAC,MAAM,SAAS,mBAAmB,CAAE,SAAQ,KAAK;IACpF,SAAS,CAAC,eAAe,EAAE,MAAM,CAAC;IAClC,SAAS,CAAC,aAAa,EAAE,uBAAuB,CAAC;IACjD,SAAS,CAAC,eAAe,EAAE,sBAAsB,CAAC;IAElD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA6C;IAC/E,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;gBAExC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,CAAC,MAAM,CAAC;IAsC1E,OAAO,IAAI,IAAI;IAMf,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;IAO9C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI;IAmBtC,OAAO,CAAC,mBAAmB;CAW5B;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,oBAAoB,GAAG,uBAAuB,CAiBhG;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,mBAAmB,GAAG,uBAAuB,CA0B9F;AAED,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,0BAA0B,GAChC,uBAAuB,CA8BzB;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,UAAU,EAAE,CAEzE;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,SAAS,EAAE,CAEvE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,gBAAgB,EAAE,CAErF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,mBAAmB,GAAG;IACjE,MAAM,EAAE,gBAAgB,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC;CACpB,CAsBA;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE;IACrC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAWnC;AAED,wBAAgB,kBAAkB,CAChC,SAAS,CAAC,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,GAC7C,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAO1B"}
@@ -0,0 +1,395 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { Matrix4 } from '@math.gl/core';
5
+ import { Model } from "../model/model.js";
6
+ import { ShaderInputs } from "../shader-inputs.js";
7
+ const DEFAULT_POINT_LIGHT_RADIUS_FACTOR = 0.02;
8
+ const DEFAULT_SPOT_LIGHT_LENGTH_FACTOR = 0.12;
9
+ const DEFAULT_DIRECTIONAL_LIGHT_LENGTH_FACTOR = 0.15;
10
+ const DEFAULT_DIRECTIONAL_LIGHT_RADIUS_FACTOR = 0.2;
11
+ const DEFAULT_DIRECTION_FALLBACK = [0, 1, 0];
12
+ const DEFAULT_LIGHT_COLOR = [255, 255, 255];
13
+ const DEFAULT_MARKER_SCALE = 1;
14
+ const DIRECTIONAL_ANCHOR_DISTANCE_FACTOR = 0.35;
15
+ const LIGHT_COLOR_FACTOR = 255;
16
+ const MIN_SCENE_SCALE = 1;
17
+ const SPOTLIGHT_OUTER_CONE_EPSILON = 0.01;
18
+ const LIGHT_MARKER_PARAMETERS = {
19
+ depthCompare: 'less-equal',
20
+ depthWriteEnabled: false,
21
+ cullMode: 'none'
22
+ };
23
+ const INSTANCE_BUFFER_LAYOUT = [
24
+ { name: 'instancePosition', format: 'float32x3', stepMode: 'instance' },
25
+ { name: 'instanceDirection', format: 'float32x3', stepMode: 'instance' },
26
+ { name: 'instanceScale', format: 'float32x3', stepMode: 'instance' },
27
+ { name: 'instanceColor', format: 'float32x4', stepMode: 'instance' }
28
+ ];
29
+ const lightMarker = {
30
+ name: 'lightMarker',
31
+ props: {},
32
+ uniforms: {},
33
+ uniformTypes: {
34
+ viewProjectionMatrix: 'mat4x4<f32>'
35
+ }
36
+ };
37
+ const CENTERED_LOCAL_POSITION_WGSL = 'inputs.positions * inputs.instanceScale';
38
+ const APEX_LOCAL_POSITION_WGSL = 'vec3<f32>(inputs.positions.x * inputs.instanceScale.x, (inputs.positions.y - 0.5) * inputs.instanceScale.y, inputs.positions.z * inputs.instanceScale.z)';
39
+ const CENTERED_LOCAL_POSITION_GLSL = 'positions * instanceScale';
40
+ const APEX_LOCAL_POSITION_GLSL = 'vec3(positions.x * instanceScale.x, (positions.y - 0.5) * instanceScale.y, positions.z * instanceScale.z)';
41
+ export class BaseLightModel extends Model {
42
+ lightModelProps;
43
+ _instanceData;
44
+ _managedBuffers;
45
+ buildInstanceData;
46
+ sizePropNames;
47
+ constructor(device, props, options) {
48
+ const instanceData = options.buildInstanceData(props);
49
+ const managedBuffers = createManagedInstanceBuffers(device, props.id || options.idPrefix, instanceData);
50
+ const shaderInputs = new ShaderInputs({ lightMarker });
51
+ shaderInputs.setProps({
52
+ lightMarker: { viewProjectionMatrix: createViewProjectionMatrix(props) }
53
+ });
54
+ const { source, vs, fs } = getLightMarkerShaders(options.anchorMode);
55
+ const modelProps = props;
56
+ super(device, {
57
+ ...modelProps,
58
+ id: props.id || options.idPrefix,
59
+ source,
60
+ vs,
61
+ fs,
62
+ geometry: options.geometry,
63
+ shaderInputs,
64
+ bufferLayout: [...INSTANCE_BUFFER_LAYOUT],
65
+ attributes: managedBuffers,
66
+ instanceCount: instanceData.instanceCount,
67
+ parameters: mergeLightMarkerParameters(props.parameters)
68
+ });
69
+ this.lightModelProps = props;
70
+ this._instanceData = instanceData;
71
+ this._managedBuffers = managedBuffers;
72
+ this.buildInstanceData = options.buildInstanceData;
73
+ this.sizePropNames = options.sizePropNames;
74
+ }
75
+ destroy() {
76
+ super.destroy();
77
+ destroyManagedInstanceBuffers(this._managedBuffers);
78
+ this._managedBuffers = {};
79
+ }
80
+ draw(renderPass) {
81
+ if (this.instanceCount === 0) {
82
+ return true;
83
+ }
84
+ return super.draw(renderPass);
85
+ }
86
+ setProps(props) {
87
+ this.lightModelProps = { ...this.lightModelProps, ...props };
88
+ if (props.parameters) {
89
+ this.setParameters(mergeLightMarkerParameters(this.lightModelProps.parameters));
90
+ }
91
+ if ('viewMatrix' in props || 'projectionMatrix' in props) {
92
+ this.shaderInputs.setProps({
93
+ lightMarker: { viewProjectionMatrix: createViewProjectionMatrix(this.lightModelProps) }
94
+ });
95
+ this.setNeedsRedraw('lightMarker camera');
96
+ }
97
+ if (shouldRebuildInstanceData(props, this.sizePropNames)) {
98
+ this.rebuildInstanceData();
99
+ }
100
+ }
101
+ rebuildInstanceData() {
102
+ const nextInstanceData = this.buildInstanceData(this.lightModelProps);
103
+ const nextManagedBuffers = createManagedInstanceBuffers(this.device, this.id, nextInstanceData);
104
+ this.setAttributes(nextManagedBuffers);
105
+ this.setInstanceCount(nextInstanceData.instanceCount);
106
+ destroyManagedInstanceBuffers(this._managedBuffers);
107
+ this._managedBuffers = nextManagedBuffers;
108
+ this._instanceData = nextInstanceData;
109
+ }
110
+ }
111
+ export function buildPointLightInstanceData(props) {
112
+ const pointLights = getPointLights(props.lights);
113
+ const context = getLightMarkerContext(props);
114
+ const pointLightRadius = props.pointLightRadius ??
115
+ DEFAULT_POINT_LIGHT_RADIUS_FACTOR * context.sceneScale * context.markerScale;
116
+ return createLightMarkerInstanceData(pointLights.length, (light, _index) => ({
117
+ color: getDisplayColor(light),
118
+ direction: DEFAULT_DIRECTION_FALLBACK,
119
+ position: light.position,
120
+ scale: [pointLightRadius, pointLightRadius, pointLightRadius]
121
+ }), pointLights);
122
+ }
123
+ export function buildSpotLightInstanceData(props) {
124
+ const spotLights = getSpotLights(props.lights);
125
+ const context = getLightMarkerContext(props);
126
+ const spotLightLength = props.spotLightLength ??
127
+ DEFAULT_SPOT_LIGHT_LENGTH_FACTOR * context.sceneScale * context.markerScale;
128
+ return createLightMarkerInstanceData(spotLights.length, (light, _index) => {
129
+ const outerConeAngle = clamp(light.outerConeAngle ?? Math.PI / 4, 0, Math.PI / 2 - SPOTLIGHT_OUTER_CONE_EPSILON);
130
+ const radius = Math.tan(outerConeAngle) * spotLightLength;
131
+ return {
132
+ color: getDisplayColor(light),
133
+ direction: normalizeDirection(light.direction),
134
+ position: light.position,
135
+ scale: [radius, spotLightLength, radius]
136
+ };
137
+ }, spotLights);
138
+ }
139
+ export function buildDirectionalLightInstanceData(props) {
140
+ const directionalLights = getDirectionalLights(props.lights);
141
+ const context = getLightMarkerContext(props);
142
+ const directionalLightLength = props.directionalLightLength ??
143
+ DEFAULT_DIRECTIONAL_LIGHT_LENGTH_FACTOR * context.sceneScale * context.markerScale;
144
+ const directionalLightRadius = directionalLightLength * DEFAULT_DIRECTIONAL_LIGHT_RADIUS_FACTOR;
145
+ return createLightMarkerInstanceData(directionalLights.length, (light, _index) => {
146
+ const direction = normalizeDirection(light.direction);
147
+ const position = [
148
+ context.sceneCenter[0] -
149
+ direction[0] * context.sceneScale * DIRECTIONAL_ANCHOR_DISTANCE_FACTOR,
150
+ context.sceneCenter[1] -
151
+ direction[1] * context.sceneScale * DIRECTIONAL_ANCHOR_DISTANCE_FACTOR,
152
+ context.sceneCenter[2] -
153
+ direction[2] * context.sceneScale * DIRECTIONAL_ANCHOR_DISTANCE_FACTOR
154
+ ];
155
+ return {
156
+ color: getDisplayColor(light),
157
+ direction,
158
+ position,
159
+ scale: [directionalLightRadius, directionalLightLength, directionalLightRadius]
160
+ };
161
+ }, directionalLights);
162
+ }
163
+ export function getPointLights(lights) {
164
+ return lights.filter((light) => light.type === 'point');
165
+ }
166
+ export function getSpotLights(lights) {
167
+ return lights.filter((light) => light.type === 'spot');
168
+ }
169
+ export function getDirectionalLights(lights) {
170
+ return lights.filter((light) => light.type === 'directional');
171
+ }
172
+ export function getLightMarkerContext(props) {
173
+ const bounds = getSceneBounds(props.lights, props.bounds);
174
+ const sceneCenter = [
175
+ (bounds[0][0] + bounds[1][0]) / 2,
176
+ (bounds[0][1] + bounds[1][1]) / 2,
177
+ (bounds[0][2] + bounds[1][2]) / 2
178
+ ];
179
+ const sceneScale = Math.max(Math.hypot(bounds[1][0] - bounds[0][0], bounds[1][1] - bounds[0][1], bounds[1][2] - bounds[0][2]), MIN_SCENE_SCALE);
180
+ return {
181
+ bounds,
182
+ markerScale: Math.max(props.markerScale ?? DEFAULT_MARKER_SCALE, 0),
183
+ sceneCenter,
184
+ sceneScale
185
+ };
186
+ }
187
+ export function getDisplayColor(light) {
188
+ const color = light.color || DEFAULT_LIGHT_COLOR;
189
+ const intensity = Math.max(light.intensity ?? 1, 0);
190
+ const brightness = clamp(0.35 + 0.3 * Math.log10(intensity + 1), 0.35, 1);
191
+ return [
192
+ clamp(color[0] / LIGHT_COLOR_FACTOR, 0, 1) * brightness,
193
+ clamp(color[1] / LIGHT_COLOR_FACTOR, 0, 1) * brightness,
194
+ clamp(color[2] / LIGHT_COLOR_FACTOR, 0, 1) * brightness,
195
+ 1
196
+ ];
197
+ }
198
+ export function normalizeDirection(direction) {
199
+ const [x, y, z] = direction || DEFAULT_DIRECTION_FALLBACK;
200
+ const length = Math.hypot(x, y, z);
201
+ if (length === 0) {
202
+ return [...DEFAULT_DIRECTION_FALLBACK];
203
+ }
204
+ return [x / length, y / length, z / length];
205
+ }
206
+ function createLightMarkerInstanceData(instanceCount, getInstance, lights = []) {
207
+ const instancePositions = new Float32Array(instanceCount * 3);
208
+ const instanceDirections = new Float32Array(instanceCount * 3);
209
+ const instanceScales = new Float32Array(instanceCount * 3);
210
+ const instanceColors = new Float32Array(instanceCount * 4);
211
+ for (const [index, light] of lights.entries()) {
212
+ const instance = getInstance(light, index);
213
+ instancePositions.set(instance.position, index * 3);
214
+ instanceDirections.set(instance.direction, index * 3);
215
+ instanceScales.set(instance.scale, index * 3);
216
+ instanceColors.set(instance.color, index * 4);
217
+ }
218
+ return {
219
+ instanceCount,
220
+ instancePositions,
221
+ instanceDirections,
222
+ instanceScales,
223
+ instanceColors
224
+ };
225
+ }
226
+ function getSceneBounds(lights, bounds) {
227
+ if (bounds) {
228
+ return cloneBounds(bounds);
229
+ }
230
+ const positions = [
231
+ ...getPointLights(lights).map(light => light.position),
232
+ ...getSpotLights(lights).map(light => light.position)
233
+ ];
234
+ if (positions.length === 0) {
235
+ return [
236
+ [-0.5, -0.5, -0.5],
237
+ [0.5, 0.5, 0.5]
238
+ ];
239
+ }
240
+ const minBounds = [...positions[0]];
241
+ const maxBounds = [...positions[0]];
242
+ for (const position of positions.slice(1)) {
243
+ minBounds[0] = Math.min(minBounds[0], position[0]);
244
+ minBounds[1] = Math.min(minBounds[1], position[1]);
245
+ minBounds[2] = Math.min(minBounds[2], position[2]);
246
+ maxBounds[0] = Math.max(maxBounds[0], position[0]);
247
+ maxBounds[1] = Math.max(maxBounds[1], position[1]);
248
+ maxBounds[2] = Math.max(maxBounds[2], position[2]);
249
+ }
250
+ return [minBounds, maxBounds];
251
+ }
252
+ function cloneBounds(bounds) {
253
+ return [[...bounds[0]], [...bounds[1]]];
254
+ }
255
+ function createManagedInstanceBuffers(device, idPrefix, instanceData) {
256
+ return {
257
+ instancePosition: device.createBuffer({
258
+ id: `${idPrefix}-instance-position`,
259
+ data: getBufferDataOrPlaceholder(instanceData.instancePositions, 3)
260
+ }),
261
+ instanceDirection: device.createBuffer({
262
+ id: `${idPrefix}-instance-direction`,
263
+ data: getBufferDataOrPlaceholder(instanceData.instanceDirections, 3)
264
+ }),
265
+ instanceScale: device.createBuffer({
266
+ id: `${idPrefix}-instance-scale`,
267
+ data: getBufferDataOrPlaceholder(instanceData.instanceScales, 3)
268
+ }),
269
+ instanceColor: device.createBuffer({
270
+ id: `${idPrefix}-instance-color`,
271
+ data: getBufferDataOrPlaceholder(instanceData.instanceColors, 4)
272
+ })
273
+ };
274
+ }
275
+ function getBufferDataOrPlaceholder(data, size) {
276
+ return data.length > 0 ? data : new Float32Array(size);
277
+ }
278
+ function destroyManagedInstanceBuffers(managedBuffers) {
279
+ for (const buffer of Object.values(managedBuffers)) {
280
+ buffer?.destroy();
281
+ }
282
+ }
283
+ function createViewProjectionMatrix(props) {
284
+ return new Matrix4(props.projectionMatrix).multiplyRight(props.viewMatrix);
285
+ }
286
+ function shouldRebuildInstanceData(props, sizePropNames) {
287
+ if ('lights' in props || 'bounds' in props || 'markerScale' in props) {
288
+ return true;
289
+ }
290
+ return sizePropNames.some(sizePropName => sizePropName in props);
291
+ }
292
+ function mergeLightMarkerParameters(parameters) {
293
+ return {
294
+ ...LIGHT_MARKER_PARAMETERS,
295
+ ...(parameters || {})
296
+ };
297
+ }
298
+ function getLightMarkerShaders(anchorMode) {
299
+ const localPositionWGSL = anchorMode === 'apex' ? APEX_LOCAL_POSITION_WGSL : CENTERED_LOCAL_POSITION_WGSL;
300
+ const localPositionGLSL = anchorMode === 'apex' ? APEX_LOCAL_POSITION_GLSL : CENTERED_LOCAL_POSITION_GLSL;
301
+ return {
302
+ source: `\
303
+ struct lightMarkerUniforms {
304
+ viewProjectionMatrix: mat4x4<f32>,
305
+ };
306
+
307
+ @binding(0) @group(0) var<uniform> lightMarker : lightMarkerUniforms;
308
+
309
+ struct VertexInputs {
310
+ @location(0) positions : vec3<f32>,
311
+ @location(1) instancePosition : vec3<f32>,
312
+ @location(2) instanceDirection : vec3<f32>,
313
+ @location(3) instanceScale : vec3<f32>,
314
+ @location(4) instanceColor : vec4<f32>,
315
+ };
316
+
317
+ struct FragmentInputs {
318
+ @builtin(position) Position : vec4<f32>,
319
+ @location(0) color : vec4<f32>,
320
+ };
321
+
322
+ fn lightMarker_rotate(localPosition: vec3<f32>, direction: vec3<f32>) -> vec3<f32> {
323
+ let forward = normalize(direction);
324
+ var helperAxis = vec3<f32>(0.0, 1.0, 0.0);
325
+ if (abs(forward.y) > 0.999) {
326
+ helperAxis = vec3<f32>(1.0, 0.0, 0.0);
327
+ }
328
+
329
+ let tangent = normalize(cross(helperAxis, forward));
330
+ let bitangent = cross(forward, tangent);
331
+ return tangent * localPosition.x + forward * localPosition.y + bitangent * localPosition.z;
332
+ }
333
+
334
+ @vertex
335
+ fn vertexMain(inputs: VertexInputs) -> FragmentInputs {
336
+ var outputs : FragmentInputs;
337
+ let localPosition = ${localPositionWGSL};
338
+ let worldPosition = inputs.instancePosition + lightMarker_rotate(localPosition, inputs.instanceDirection);
339
+ outputs.Position = lightMarker.viewProjectionMatrix * vec4<f32>(worldPosition, 1.0);
340
+ outputs.color = inputs.instanceColor;
341
+ return outputs;
342
+ }
343
+
344
+ @fragment
345
+ fn fragmentMain(inputs: FragmentInputs) -> @location(0) vec4<f32> {
346
+ return inputs.color;
347
+ }
348
+ `,
349
+ vs: `\
350
+ #version 300 es
351
+
352
+ in vec3 positions;
353
+ in vec3 instancePosition;
354
+ in vec3 instanceDirection;
355
+ in vec3 instanceScale;
356
+ in vec4 instanceColor;
357
+
358
+ uniform lightMarkerUniforms {
359
+ mat4 viewProjectionMatrix;
360
+ } lightMarker;
361
+
362
+ out vec4 vColor;
363
+
364
+ vec3 lightMarker_rotate(vec3 localPosition, vec3 direction) {
365
+ vec3 forward = normalize(direction);
366
+ vec3 helperAxis = abs(forward.y) > 0.999 ? vec3(1.0, 0.0, 0.0) : vec3(0.0, 1.0, 0.0);
367
+ vec3 tangent = normalize(cross(helperAxis, forward));
368
+ vec3 bitangent = cross(forward, tangent);
369
+ return tangent * localPosition.x + forward * localPosition.y + bitangent * localPosition.z;
370
+ }
371
+
372
+ void main(void) {
373
+ vec3 localPosition = ${localPositionGLSL};
374
+ vec3 worldPosition = instancePosition + lightMarker_rotate(localPosition, instanceDirection);
375
+ gl_Position = lightMarker.viewProjectionMatrix * vec4(worldPosition, 1.0);
376
+ vColor = instanceColor;
377
+ }
378
+ `,
379
+ fs: `\
380
+ #version 300 es
381
+ precision highp float;
382
+
383
+ in vec4 vColor;
384
+ out vec4 fragColor;
385
+
386
+ void main(void) {
387
+ fragColor = vColor;
388
+ }
389
+ `
390
+ };
391
+ }
392
+ function clamp(value, minValue, maxValue) {
393
+ return Math.min(maxValue, Math.max(minValue, value));
394
+ }
395
+ //# sourceMappingURL=light-model-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"light-model-utils.js","sourceRoot":"","sources":["../../src/models/light-model-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Device } from '@luma.gl/core';
2
+ import { BaseLightModel, type PointLightModelProps } from "./light-model-utils.js";
3
+ export type { PointLightModelProps } from "./light-model-utils.js";
4
+ export declare class PointLightModel extends BaseLightModel<PointLightModelProps> {
5
+ constructor(device: Device, props: PointLightModelProps);
6
+ }
7
+ //# sourceMappingURL=point-light-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"point-light-model.d.ts","sourceRoot":"","sources":["../../src/models/point-light-model.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AAErC,OAAO,EACL,cAAc,EAEd,KAAK,oBAAoB,EAC1B,+BAA4B;AAQ7B,YAAY,EAAC,oBAAoB,EAAC,+BAA4B;AAE9D,qBAAa,eAAgB,SAAQ,cAAc,CAAC,oBAAoB,CAAC;gBAC3D,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB;CASxD"}
@@ -0,0 +1,22 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { SphereGeometry } from "../geometries/sphere-geometry.js";
5
+ import { BaseLightModel, buildPointLightInstanceData } from "./light-model-utils.js";
6
+ const POINT_LIGHT_GEOMETRY = new SphereGeometry({
7
+ nlat: 8,
8
+ nlong: 12,
9
+ radius: 1
10
+ });
11
+ export class PointLightModel extends BaseLightModel {
12
+ constructor(device, props) {
13
+ super(device, props, {
14
+ anchorMode: 'centered',
15
+ buildInstanceData: buildPointLightInstanceData,
16
+ geometry: POINT_LIGHT_GEOMETRY,
17
+ idPrefix: 'point-light-model',
18
+ sizePropNames: ['pointLightRadius']
19
+ });
20
+ }
21
+ }
22
+ //# sourceMappingURL=point-light-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"point-light-model.js","sourceRoot":"","sources":["../../src/models/point-light-model.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,EAAC,cAAc,EAAC,yCAAsC;AAC7D,OAAO,EACL,cAAc,EACd,2BAA2B,EAE5B,+BAA4B;AAE7B,MAAM,oBAAoB,GAAG,IAAI,cAAc,CAAC;IAC9C,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,CAAC;CACV,CAAC,CAAC;AAIH,MAAM,OAAO,eAAgB,SAAQ,cAAoC;IACvE,YAAY,MAAc,EAAE,KAA2B;QACrD,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE;YACnB,UAAU,EAAE,UAAU;YACtB,iBAAiB,EAAE,2BAA2B;YAC9C,QAAQ,EAAE,oBAAoB;YAC9B,QAAQ,EAAE,mBAAmB;YAC7B,aAAa,EAAE,CAAC,kBAAkB,CAAC;SACpC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ import { Device } from '@luma.gl/core';
2
+ import { BaseLightModel, type SpotLightModelProps } from "./light-model-utils.js";
3
+ export type { SpotLightModelProps } from "./light-model-utils.js";
4
+ export declare class SpotLightModel extends BaseLightModel<SpotLightModelProps> {
5
+ constructor(device: Device, props: SpotLightModelProps);
6
+ }
7
+ //# sourceMappingURL=spot-light-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spot-light-model.d.ts","sourceRoot":"","sources":["../../src/models/spot-light-model.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AAErC,OAAO,EACL,cAAc,EAEd,KAAK,mBAAmB,EACzB,+BAA4B;AAS7B,YAAY,EAAC,mBAAmB,EAAC,+BAA4B;AAE7D,qBAAa,cAAe,SAAQ,cAAc,CAAC,mBAAmB,CAAC;gBACzD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB;CASvD"}
@@ -0,0 +1,23 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { ConeGeometry } from "../geometries/cone-geometry.js";
5
+ import { BaseLightModel, buildSpotLightInstanceData } from "./light-model-utils.js";
6
+ const SPOT_LIGHT_GEOMETRY = new ConeGeometry({
7
+ cap: true,
8
+ nradial: 16,
9
+ nvertical: 1,
10
+ radius: 1
11
+ });
12
+ export class SpotLightModel extends BaseLightModel {
13
+ constructor(device, props) {
14
+ super(device, props, {
15
+ anchorMode: 'apex',
16
+ buildInstanceData: buildSpotLightInstanceData,
17
+ geometry: SPOT_LIGHT_GEOMETRY,
18
+ idPrefix: 'spot-light-model',
19
+ sizePropNames: ['spotLightLength']
20
+ });
21
+ }
22
+ }
23
+ //# sourceMappingURL=spot-light-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spot-light-model.js","sourceRoot":"","sources":["../../src/models/spot-light-model.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAGpC,OAAO,EAAC,YAAY,EAAC,uCAAoC;AACzD,OAAO,EACL,cAAc,EACd,0BAA0B,EAE3B,+BAA4B;AAE7B,MAAM,mBAAmB,GAAG,IAAI,YAAY,CAAC;IAC3C,GAAG,EAAE,IAAI;IACT,OAAO,EAAE,EAAE;IACX,SAAS,EAAE,CAAC;IACZ,MAAM,EAAE,CAAC;CACV,CAAC,CAAC;AAIH,MAAM,OAAO,cAAe,SAAQ,cAAmC;IACrE,YAAY,MAAc,EAAE,KAA0B;QACpD,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE;YACnB,UAAU,EAAE,MAAM;YAClB,iBAAiB,EAAE,0BAA0B;YAC7C,QAAQ,EAAE,mBAAmB;YAC7B,QAAQ,EAAE,kBAAkB;YAC5B,aAAa,EAAE,CAAC,iBAAiB,CAAC;SACnC,CAAC,CAAC;IACL,CAAC;CACF"}