@openglobus/og 1.0.0-rc2 → 1.0.0-rc21

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 (119) hide show
  1. package/README.md +2 -0
  2. package/lib/Globe.d.ts +21 -8
  3. package/lib/Object3d.d.ts +1 -1
  4. package/lib/assets/LabelWorker.worker-C24YLEkW.js.map +1 -0
  5. package/lib/assets/PlainSegmentWorker.worker-DJHXd0bF.js.map +1 -0
  6. package/lib/assets/TerrainWorker.worker-BwueoQpg.js.map +1 -0
  7. package/lib/camera/Camera.d.ts +57 -8
  8. package/lib/camera/Frustum.d.ts +37 -1
  9. package/lib/camera/PlanetCamera.d.ts +29 -4
  10. package/lib/control/DebugInfo.d.ts +1 -0
  11. package/lib/control/FramebufferPreview.d.ts +18 -2
  12. package/lib/control/FreeNavigation.d.ts +253 -0
  13. package/lib/control/LayerSwitcher.d.ts +18 -0
  14. package/lib/control/Lighting.d.ts +3 -0
  15. package/lib/control/Navigation.d.ts +18 -1
  16. package/lib/control/ShowFps.d.ts +15 -3
  17. package/lib/control/Sun.d.ts +59 -0
  18. package/lib/control/depthCamera/DepthCamera.d.ts +132 -0
  19. package/lib/control/depthCamera/DepthCameraHandler.d.ts +25 -0
  20. package/lib/control/depthCamera/depth_camera.d.ts +2 -0
  21. package/lib/control/entityEditor/CameraEditorView.d.ts +60 -0
  22. package/lib/control/entityEditor/EntityEditor.d.ts +2 -1
  23. package/lib/control/entityEditor/EntityEditorDialog.d.ts +15 -47
  24. package/lib/control/entityEditor/EntityEditorScene.d.ts +16 -0
  25. package/lib/control/entityEditor/EntityEditorView.d.ts +68 -0
  26. package/lib/control/entityEditor/ProjectorEditorView.d.ts +31 -0
  27. package/lib/control/entityEditor/RotateEntity.d.ts +5 -1
  28. package/lib/control/index.d.ts +3 -3
  29. package/lib/control/timeline/TimelineControl.d.ts +86 -0
  30. package/lib/control/timeline/TimelineModel.d.ts +46 -1
  31. package/lib/control/timeline/TimelineView.d.ts +55 -2
  32. package/lib/entity/Entity.d.ts +18 -0
  33. package/lib/entity/EntityCollection.d.ts +71 -13
  34. package/lib/entity/billboard/BaseBillboardHandler.d.ts +16 -0
  35. package/lib/entity/geoObject/GeoObjectHandler.d.ts +3 -0
  36. package/lib/entity/geoObject/InstanceData.d.ts +6 -0
  37. package/lib/entity/geometry/Geometry.d.ts +18 -0
  38. package/lib/entity/geometry/GeometryHandler.d.ts +1 -0
  39. package/lib/entity/label/Label.d.ts +8 -6
  40. package/lib/entity/pointCloud/PointCloud.d.ts +1 -0
  41. package/lib/entity/pointCloud/PointCloudHandler.d.ts +5 -0
  42. package/lib/entity/polyline/Polyline.d.ts +15 -0
  43. package/lib/entity/polyline/PolylineBatchRenderer.d.ts +1 -0
  44. package/lib/entity/polyline/PolylineHandler.d.ts +5 -0
  45. package/lib/entity/ray/Ray.d.ts +2 -0
  46. package/lib/entity/ray/RayHandler.d.ts +1 -0
  47. package/lib/index.d.ts +20 -3
  48. package/lib/input/KeyboardHandler.d.ts +5 -1
  49. package/lib/layer/BaseTileMaterialLayer.d.ts +36 -0
  50. package/lib/layer/CanvasTiles.d.ts +8 -12
  51. package/lib/layer/Layer.d.ts +8 -1
  52. package/lib/layer/Vector.d.ts +74 -18
  53. package/lib/layer/XYZ.d.ts +5 -21
  54. package/lib/math/Line2.d.ts +9 -0
  55. package/lib/math.d.ts +8 -0
  56. package/lib/og.css +2 -1
  57. package/lib/og.es.js +1 -1
  58. package/lib/og.es.js.map +1 -1
  59. package/lib/quadTree/EntityCollectionsTreeStrategy.d.ts +3 -0
  60. package/lib/quadTree/QuadTreeStrategy.d.ts +18 -1
  61. package/lib/quadTree/earth/EarthEntityCollectionsTreeStrategy.d.ts +3 -0
  62. package/lib/quadTree/equi/EquiEntityCollectionsTreeStrategy.d.ts +3 -0
  63. package/lib/renderer/PhongDeferredShading.d.ts +2 -0
  64. package/lib/renderer/Renderer.d.ts +89 -6
  65. package/lib/renderer/RendererEvents.d.ts +2 -0
  66. package/lib/renderer/cascadeShadows/CascadeShadowManager.d.ts +34 -0
  67. package/lib/renderer/cascadeShadows/CascadeShadowMap.d.ts +110 -0
  68. package/lib/renderer/cascadeShadows/cascade_shadow_depth.d.ts +2 -0
  69. package/lib/renderer/projectors/Projector.d.ts +67 -0
  70. package/lib/renderer/projectors/ProjectorManager.d.ts +86 -0
  71. package/lib/renderer/projectors/ProjectorsPass.d.ts +37 -0
  72. package/lib/renderer/shadows/ShadowManager.d.ts +41 -0
  73. package/lib/renderer/shadows/ShadowMap.d.ts +21 -0
  74. package/lib/renderer/textureUnits.d.ts +6 -0
  75. package/lib/scene/Planet.d.ts +80 -8
  76. package/lib/scene/Scene.d.ts +1 -8
  77. package/lib/scene/SkyBox.d.ts +2 -1
  78. package/lib/segment/Segment.d.ts +18 -1
  79. package/lib/shaders/common/uniforms.d.ts +29 -0
  80. package/lib/shaders/geo_object/geo_object.d.ts +1 -0
  81. package/lib/shaders/projectorsPass/projectorsPass.d.ts +2 -0
  82. package/lib/shaders/tone_mapping/toneMapping.d.ts +1 -1
  83. package/lib/shaders/varianceBlur.d.ts +2 -0
  84. package/lib/terrain/EmptyTerrain.d.ts +43 -2
  85. package/lib/terrain/GlobusRgbTerrain.d.ts +1 -0
  86. package/lib/terrain/MapterhornTerrain.d.ts +11 -0
  87. package/lib/terrain/RgbTerrain.d.ts +11 -0
  88. package/lib/terrain/index.d.ts +6 -2
  89. package/lib/ui/Button.d.ts +1 -0
  90. package/lib/ui/Checkbox.d.ts +1 -0
  91. package/lib/ui/Color.d.ts +6 -2
  92. package/lib/ui/Dialog.d.ts +46 -1
  93. package/lib/ui/Dock.d.ts +151 -0
  94. package/lib/ui/Input.d.ts +14 -1
  95. package/lib/ui/Slider.d.ts +1 -0
  96. package/lib/ui/TitleBarView.d.ts +21 -0
  97. package/lib/ui/index.d.ts +2 -0
  98. package/lib/utils/FontAtlas.d.ts +5 -3
  99. package/lib/utils/GeoImageCreator.d.ts +7 -0
  100. package/lib/utils/Loader.d.ts +6 -0
  101. package/lib/utils/NormalMapCreator.d.ts +6 -0
  102. package/lib/utils/TerrainWorker.d.ts +1 -0
  103. package/lib/utils/VectorTileCreator.d.ts +6 -0
  104. package/lib/utils/cameraFootprint.d.ts +72 -0
  105. package/lib/utils/gltf/types.d.ts +5 -4
  106. package/lib/utils/shadowCameraFit.d.ts +175 -0
  107. package/lib/utils/shared.d.ts +11 -0
  108. package/lib/webgl/BaseFramebuffer.d.ts +28 -0
  109. package/lib/webgl/Framebuffer.d.ts +5 -7
  110. package/lib/webgl/Handler.d.ts +28 -0
  111. package/package.json +11 -9
  112. package/lib/assets/LabelWorker.worker-DYd7xn3M.js.map +0 -1
  113. package/lib/assets/PlainSegmentWorker.worker-JsKldq-e.js.map +0 -1
  114. package/lib/assets/TerrainWorker.worker-CqUJvMOv.js.map +0 -1
  115. package/lib/control/CameraFrameComposer.d.ts +0 -19
  116. package/lib/control/CameraFrameHandler.d.ts +0 -26
  117. package/lib/control/cameraDepthHandler/CameraDepthHandler.d.ts +0 -42
  118. package/lib/control/cameraDepthHandler/camera_depth.d.ts +0 -2
  119. package/lib/tsconfig.tsbuildinfo +0 -1
@@ -19,6 +19,9 @@ export declare class EntityCollectionsTreeStrategy {
19
19
  constructor(quadTreeStrategy: QuadTreeStrategy, layer: Vector, nodeCapacity: number);
20
20
  insertEntity(entity: Entity, rightNow?: boolean): void;
21
21
  setPickingEnabled(pickingEnabled: boolean): void;
22
+ setReceiveProjectors(receiveProjectors: boolean): void;
23
+ setReceiveShadows(receiveShadows: boolean): void;
24
+ setReceiveFrameTransparency(receiveFrameTransparency: boolean): void;
22
25
  dispose(): void;
23
26
  insertEntities(entitiesForTree: Entity[]): void;
24
27
  collectVisibleEntityCollections(outArr: EntityCollection[]): void;
@@ -21,9 +21,12 @@ export interface QuadTreeStrategyParams {
21
21
  }
22
22
  export declare class QuadTreeStrategy {
23
23
  events: EventsHandler<QuadTreeStrategyEventsList>;
24
+ maxZoomLimit: number;
24
25
  name: string;
25
26
  projection: Proj;
26
27
  readonly planet: Planet;
28
+ lodCamera: PlanetCamera | null;
29
+ disableNeighbors: boolean;
27
30
  /**
28
31
  * grid tree list.
29
32
  * @protected
@@ -42,9 +45,16 @@ export declare class QuadTreeStrategy {
42
45
  * @type {Node}
43
46
  */
44
47
  _renderedNodes: Node[];
48
+ /**
49
+ * Geocentric distance range of the terrain collected for the current rendering frame. * @public
50
+ * @type {number}
51
+ */
52
+ minTerrainRadius: number;
53
+ maxTerrainRadius: number;
54
+ _minTerrainRadiusAcc: number;
55
+ _maxTerrainRadiusAcc: number;
45
56
  _renderedNodesInFrustum: Node[][];
46
57
  _fadingNodes: Map<number, Node>;
47
- _fadingNodesInFrustum: Node[][];
48
58
  _fadingOpaqueSegments: Segment[];
49
59
  _transparentSegments: Segment[];
50
60
  /**
@@ -90,6 +100,13 @@ export declare class QuadTreeStrategy {
90
100
  */
91
101
  clearLayerMaterial(layer: Layer, keepRendered?: boolean): void;
92
102
  get terrainReady(): boolean;
103
+ /**
104
+ * Returns true when every rendered segment has got its materials applied and
105
+ * the completion has already been announced.
106
+ * @public
107
+ * @returns {boolean}
108
+ */
109
+ get renderReady(): boolean;
93
110
  protected _checkRendercompleted(): void;
94
111
  protected _initEvents(): void;
95
112
  protected _updateRenderedNodesInFrustumArray(camera: PlanetCamera): void;
@@ -14,6 +14,9 @@ export declare class EarthEntityCollectionsTreeStrategy extends EntityCollection
14
14
  constructor(quadTreeStrategy: QuadTreeStrategy, layer: Vector, nodeCapacity: number);
15
15
  insertEntity(entity: Entity, rightNow?: boolean): void;
16
16
  setPickingEnabled(pickingEnabled: boolean): void;
17
+ setReceiveProjectors(receiveProjectors: boolean): void;
18
+ setReceiveShadows(receiveShadows: boolean): void;
19
+ setReceiveFrameTransparency(receiveFrameTransparency: boolean): void;
17
20
  dispose(): void;
18
21
  insertEntities(entitiesForTree: Entity[]): void;
19
22
  collectVisibleEntityCollections(outArr: EntityCollection[]): void;
@@ -12,6 +12,9 @@ export declare class EquiEntityCollectionsTreeStrategy extends EntityCollections
12
12
  constructor(quadTreeStrategy: QuadTreeStrategy, layer: Vector, nodeCapacity: number);
13
13
  insertEntity(entity: Entity, rightNow?: boolean): void;
14
14
  setPickingEnabled(pickingEnabled: boolean): void;
15
+ setReceiveProjectors(receiveProjectors: boolean): void;
16
+ setReceiveShadows(receiveShadows: boolean): void;
17
+ setReceiveFrameTransparency(receiveFrameTransparency: boolean): void;
15
18
  dispose(): void;
16
19
  insertEntities(entitiesForTree: Entity[]): void;
17
20
  collectVisibleEntityCollections(outArr: EntityCollection[]): void;
@@ -1,9 +1,11 @@
1
1
  import { Framebuffer } from "../webgl/Framebuffer";
2
+ import { ProjectorsPass } from "./projectors/ProjectorsPass";
2
3
  import type { IDeferredShadingPass } from "./IDeferredShadingPass";
3
4
  import type { Renderer } from "./Renderer";
4
5
  export declare class PhongDeferredShading implements IDeferredShadingPass {
5
6
  protected _renderer: Renderer;
6
7
  protected _framebuffer: Framebuffer | null;
8
+ protected _projectorPass: ProjectorsPass;
7
9
  constructor(renderer: Renderer);
8
10
  init(): void;
9
11
  beginPass(): void;
@@ -10,6 +10,9 @@ import { LabelWorker } from "../entity/label/LabelWorker";
10
10
  import { Scene } from "../scene/Scene";
11
11
  import type { IDeferredShadingPass } from "./IDeferredShadingPass";
12
12
  import type { ITransparencyPass } from "./ITransparencyPass";
13
+ import { ProjectorManager } from "./projectors/ProjectorManager";
14
+ import { CascadeShadowManager } from "./cascadeShadows/CascadeShadowManager";
15
+ import { ShadowManager } from "./shadows/ShadowManager";
13
16
  import { TextureResourceManager } from "../utils/TextureResourceManager";
14
17
  import type { RendererTextureRequest } from "../utils/TextureResourceManager";
15
18
  import { TextureAtlas } from "../utils/TextureAtlas";
@@ -22,15 +25,19 @@ export interface IRendererParams {
22
25
  controls?: Control[];
23
26
  msaa?: number;
24
27
  autoActivate?: boolean;
28
+ deferredDisabled?: boolean;
25
29
  fontsSrc?: string;
26
30
  gamma?: number;
27
31
  exposure?: number;
32
+ frameOpacity?: number;
33
+ toneMapping?: string;
28
34
  dpi?: number;
29
35
  clearColor?: [number, number, number, number];
30
36
  lightPosition?: NumberArray3;
31
37
  lightAmbient?: NumberArray3;
32
38
  lightDiffuse?: NumberArray3;
33
39
  lightSpecular?: NumberArray4;
40
+ idleMode?: boolean;
34
41
  }
35
42
  interface IPickingObject {
36
43
  _pickingColor?: Vec3;
@@ -49,16 +56,19 @@ interface IFrameCallbackHandler {
49
56
  * - controls: Control instances to add to the renderer
50
57
  * - msaa: MSAA (Multi-Sample Anti-Aliasing) level
51
58
  * - autoActivate: Start rendering automatically after creation
59
+ * - deferredDisabled: Disable deferred shading pipeline and render deferred objects with forward shaders
52
60
  * - fontsSrc: Path to font resources
53
61
  * - gamma: Gamma correction value
54
62
  * - exposure: HDR exposure value
63
+ * - frameOpacity: Scene objects opacity used with transparentBackground to achieve an AR effect
64
+ * - toneMapping: HDR tone mapping operator
55
65
  * - dpi: Device pixel ratio
56
66
  * - clearColor: RGBA clear color array
57
67
  * - lightPosition: Light position `[x, y, z]`
58
68
  * - lightAmbient: Light ambient color `[r, g, b]`
59
69
  * - lightDiffuse: Light diffuse color `[r, g, b]`
60
70
  * - lightSpecular: Light specular `[r, g, b, shininess]`
61
- * @fires draw - Triggered before each frame is rendered.
71
+ * @fires predraw - Triggered before each frame is rendered.
62
72
  * @fires resize - Triggered when the canvas is resized.
63
73
  * @fires mousemove - Triggered when the mouse moves over the canvas.
64
74
  * @fires mousestop - Triggered when the mouse stops moving.
@@ -96,6 +106,10 @@ declare class Renderer {
96
106
  * @type {HTMLElement | null}
97
107
  */
98
108
  div: HTMLDivElementExt | null;
109
+ /**
110
+ * Where dialogs or any other external elements are put.
111
+ */
112
+ uiContainer: HTMLElement | null;
99
113
  protected _topLeftContainer: HTMLDivElement;
100
114
  protected _topRightContainer: HTMLDivElement;
101
115
  protected _bottomRightContainer: HTMLDivElement;
@@ -105,10 +119,11 @@ declare class Renderer {
105
119
  * @type {Handler}
106
120
  */
107
121
  handler: Handler;
108
- exposure: number;
109
- gamma: number;
110
- whitepoint: number;
111
- brightThreshold: number;
122
+ protected _exposure: number;
123
+ protected _gamma: number;
124
+ protected _whitepoint: number;
125
+ protected _toneMapping: string;
126
+ protected _brightThreshold: number;
112
127
  /**
113
128
  * Render nodes drawing queue.
114
129
  * @public
@@ -128,7 +143,7 @@ declare class Renderer {
128
143
  */
129
144
  activeCamera: Camera;
130
145
  /**
131
- * Renderer events. Represents interface for setting events like mousemove, draw, keypress etc.
146
+ * Renderer events. Represents interface for setting events like mousemove, predraw, keypress etc.
132
147
  * @public
133
148
  * @type {RendererEvents}
134
149
  */
@@ -174,6 +189,8 @@ declare class Renderer {
174
189
  protected _depthRefreshRequired: boolean;
175
190
  forwardFramebuffer: Multisample | null;
176
191
  protected hdrFramebuffer: Framebuffer | null;
192
+ deferredDisabled: boolean;
193
+ protected _frameOpacity: number;
177
194
  deferredShadingPass: IDeferredShadingPass;
178
195
  transparencyPass: ITransparencyPass;
179
196
  protected toneMappingFramebuffer: Framebuffer | null;
@@ -209,6 +226,9 @@ declare class Renderer {
209
226
  _lightAmbient: Float32Array;
210
227
  _lightDiffuse: Float32Array;
211
228
  _lightSpecular: Float32Array;
229
+ projectors: ProjectorManager;
230
+ cascadeShadowManager: CascadeShadowManager;
231
+ shadows: ShadowManager;
212
232
  constructor(handler: Handler | string | HTMLCanvasElement, params?: IRendererParams);
213
233
  enableBlendOneSrcAlpha(): void;
214
234
  set lightAmbient(lightAmbient: NumberArray3 | Float32Array);
@@ -217,6 +237,53 @@ declare class Renderer {
217
237
  get lightDiffuse(): NumberArray3;
218
238
  set lightSpecular(lightSpecular: NumberArray4 | Float32Array);
219
239
  get lightSpecular(): NumberArray4;
240
+ /**
241
+ * HDR exposure.
242
+ * @public
243
+ * @type {number}
244
+ */
245
+ set exposure(exposure: number);
246
+ get exposure(): number;
247
+ /**
248
+ * Gamma correction value.
249
+ * @public
250
+ * @type {number}
251
+ */
252
+ set gamma(gamma: number);
253
+ get gamma(): number;
254
+ /**
255
+ * Tone mapping white point.
256
+ * @public
257
+ * @type {number}
258
+ */
259
+ set whitepoint(whitepoint: number);
260
+ get whitepoint(): number;
261
+ /**
262
+ * Scene objects opacity used with transparentBackground to achieve an AR effect.
263
+ * @public
264
+ * @type {number}
265
+ */
266
+ set frameOpacity(frameOpacity: number);
267
+ get frameOpacity(): number;
268
+ /**
269
+ * Bloom bright pass threshold.
270
+ * @public
271
+ * @type {number}
272
+ */
273
+ set brightThreshold(brightThreshold: number);
274
+ get brightThreshold(): number;
275
+ /**
276
+ * Sets HDR tone mapping operator and recompiles tone mapping shader.
277
+ * @public
278
+ * @param {string} operator - Tone mapping operator name.
279
+ */
280
+ setToneMapping(operator: string): this;
281
+ /**
282
+ * Returns HDR tone mapping operator.
283
+ * @public
284
+ * @returns {string}
285
+ */
286
+ getToneMapping(): string;
220
287
  enableBlendDefault(): void;
221
288
  enableBlendWoit(): void;
222
289
  /**
@@ -307,6 +374,11 @@ declare class Renderer {
307
374
  protected _appendControlContainers(): void;
308
375
  acquireTexture(params: RendererTextureRequest): WebGLTextureExt | null;
309
376
  releaseTexture(texture: WebGLTextureExt | null | undefined): void;
377
+ /** The element the canvas is drawn in. */
378
+ getInnerContainer(): HTMLElement;
379
+ getAttributionsContainer(): HTMLElement | null;
380
+ /** Where the interface goes: the container given for it, or the inner one. */
381
+ getUIContainer(): HTMLElement;
310
382
  topLeftContainer(): HTMLDivElement;
311
383
  topRightContainer(): HTMLDivElement;
312
384
  bottomRightContainer(): HTMLDivElement;
@@ -354,11 +426,22 @@ declare class Renderer {
354
426
  markForDepthRefresh(): void;
355
427
  protected _drawGBufferEntityCollections(depthOrder: number): void;
356
428
  protected _drawForwardEntityCollections(depthOrder: number): void;
429
+ protected _drawLabelsForwardEntityCollections(depthOrder: number): void;
357
430
  protected _drawTransparentEntityCollections(depthOrder: number): void;
358
431
  protected _drawTransparentEntityCollectionsForward(depthOrder: number): void;
359
432
  protected _drawPickingEntityCollections(depthOrder: number): void;
360
433
  protected _drawDepthEntityCollections(depthOrder: number): void;
361
434
  protected _clearEntityCollectionQueue(depthOrder: number): void;
435
+ /**
436
+ * Requests the next frame to be rendered.
437
+ * @public
438
+ */
439
+ requestRedraw(): void;
440
+ /**
441
+ * Returns true when the renderer skips frames because nothing has been changed.
442
+ * @public
443
+ */
444
+ get isIdle(): boolean;
362
445
  /**
363
446
  * Draw nodes.
364
447
  * @public
@@ -13,6 +13,7 @@ export declare function createRendererEvents(renderer: Renderer): RendererEvents
13
13
  export type RendererEventsType = [
14
14
  "projchanged",
15
15
  "changerelativecenter",
16
+ "predraw",
16
17
  "draw",
17
18
  "forwardpass",
18
19
  "postforwardpass",
@@ -217,6 +218,7 @@ declare class RendererEvents extends Events<RendererEventsType> implements Rende
217
218
  handleEvents(): void;
218
219
  on(name: string, p0: EventCallback | number, p1?: number | EventCallback, p2?: any, keyPriority?: number): void;
219
220
  off(name: string, p1?: EventCallback | number | null, p2?: EventCallback): void;
221
+ destroy(): void;
220
222
  /**
221
223
  * Check key is pressed.
222
224
  * @public
@@ -0,0 +1,34 @@
1
+ import type { Planet } from "../../scene/Planet";
2
+ import type { ShaderProgram } from "../../webgl/ShaderProgram";
3
+ import type { Renderer } from "../Renderer";
4
+ import { CascadeShadowMap } from "./CascadeShadowMap";
5
+ export declare class CascadeShadowManager {
6
+ protected _renderer: Renderer;
7
+ protected _planet: Planet | null;
8
+ protected _cascadeShadowMaps: CascadeShadowMap[];
9
+ protected _activeCascadeShadowMaps: CascadeShadowMap[];
10
+ protected _viewProjData: Float32Array;
11
+ protected _eyeRelData: Float32Array;
12
+ protected _paramsData: Float32Array;
13
+ protected _splitsData: Float32Array;
14
+ protected _viewForwardData: Float32Array;
15
+ protected _layerData: Int32Array;
16
+ protected _updateActiveCascadeShadowMaps: boolean;
17
+ protected _initialized: boolean;
18
+ constructor(renderer: Renderer);
19
+ get activeCount(): number;
20
+ get active(): CascadeShadowMap[];
21
+ init(): void;
22
+ bindPlanet(planet: Planet): void;
23
+ unbindPlanet(): void;
24
+ add(cascadeShadowMap: CascadeShadowMap): number;
25
+ update(cascadeShadowMap: CascadeShadowMap): boolean;
26
+ remove(cascadeShadowMap: CascadeShadowMap): boolean;
27
+ clear(): void;
28
+ destroy(): void;
29
+ bindForward(program: ShaderProgram, textureUnitStart?: number): number;
30
+ protected _initCascadeShadowMap(cascadeShadowMap: CascadeShadowMap): void;
31
+ protected _collectActiveCascadeShadowMaps(): CascadeShadowMap[];
32
+ protected _getActiveCascadeShadowMaps(): CascadeShadowMap[];
33
+ protected _onDraw: () => void;
34
+ }
@@ -0,0 +1,110 @@
1
+ import { Sphere } from "../../bv/Sphere";
2
+ import { Camera } from "../../camera/Camera";
3
+ import { PlanetCamera } from "../../camera/PlanetCamera";
4
+ import { Vector } from "../../layer/Vector";
5
+ import { Vec3 } from "../../math/Vec3";
6
+ import { QuadTreeStrategy } from "../../quadTree";
7
+ import type { Node } from "../../quadTree/Node";
8
+ import type { Renderer } from "../../renderer/Renderer";
9
+ import type { Planet } from "../../scene/Planet";
10
+ import type { Segment } from "../../segment/Segment";
11
+ import { Framebuffer } from "../../webgl";
12
+ import type { CascadeShadowManager } from "./CascadeShadowManager";
13
+ /**
14
+ * Cascade shadow map split configuration.
15
+ * @property enabled - Enables the cascade.
16
+ * @property splitNear - Near split distance.
17
+ * @property splitFar - Far split distance.
18
+ * @property depthBiasWorld - Occlusion bias in meters.
19
+ * @property normalBias - Surface normal offset in RTC/world units.
20
+ */
21
+ export interface CascadeParams {
22
+ enabled: boolean;
23
+ splitNear: number;
24
+ splitFar: number;
25
+ depthBiasWorld: number;
26
+ normalBias: number;
27
+ }
28
+ /**
29
+ * Cascade shadow map configuration options.
30
+ * @property enabled - Enables cascade shadow rendering.
31
+ * @property size - Shadow map texture size in pixels.
32
+ * @property cascadeCount - Number of generated cascade splits when cascades is not provided.
33
+ * @property maxDistance - Maximum camera distance covered by all cascade splits.
34
+ * @property splitLambda - Blend factor between uniform and logarithmic split distribution.
35
+ * @property verticalViewAngle - Vertical view angle for the orthographic cascade camera.
36
+ * @property casterMargin - Minimum light-space depth margin for shadow casters in world units.
37
+ * @property excludeLayers - Vector layers excluded from cascade shadow rendering.
38
+ * @property cascades - Per-cascade parameter overrides. When provided, its length defines cascade count.
39
+ */
40
+ export interface ICascadeShadowMapParams {
41
+ enabled?: boolean;
42
+ size?: number;
43
+ cascadeCount?: number;
44
+ maxDistance?: number;
45
+ splitLambda?: number;
46
+ verticalViewAngle?: number;
47
+ casterMargin?: number;
48
+ excludeLayers?: Vector[];
49
+ cascades?: Partial<CascadeParams>[];
50
+ }
51
+ export declare class CascadeShadowMap {
52
+ protected static __counter__: number;
53
+ readonly id: number;
54
+ readonly size: number;
55
+ readonly maxDistance: number;
56
+ readonly splitLambda: number;
57
+ readonly verticalViewAngle: number;
58
+ readonly casterMargin: number;
59
+ readonly excludeLayers: Vector[];
60
+ depthCamera: Camera;
61
+ framebuffer: Framebuffer | null;
62
+ quadTreeStrategy: QuadTreeStrategy | null;
63
+ readonly cascades: CascadeParams[];
64
+ _manager: CascadeShadowManager | null;
65
+ protected _planet: Planet | null;
66
+ protected _renderer: Renderer | null;
67
+ protected _initialized: boolean;
68
+ protected _enabled: boolean;
69
+ protected _depthArrayTexture: WebGLTexture | null;
70
+ protected _lastPlanetHeightFactor: number;
71
+ protected _cascadeBoundingSpheres: Sphere[];
72
+ protected _depthCameraBoundingSphere: Sphere;
73
+ constructor(params?: ICascadeShadowMapParams);
74
+ get initialized(): boolean;
75
+ get enabled(): boolean;
76
+ set enabled(enabled: boolean);
77
+ get depthArrayTexture(): WebGLTexture | null;
78
+ init(renderer: Renderer): void;
79
+ bindPlanet(planet: Planet): void;
80
+ unbindPlanet(): void;
81
+ destroy(): void;
82
+ frame(): void;
83
+ protected _prepareFrame(): void;
84
+ protected _finishFrame(): void;
85
+ protected _createCascadeParams(params: ICascadeShadowMapParams, cascadeCount: number): CascadeParams[];
86
+ protected _computeCascadeSplitDistance(splitIndex: number, splitDistributionNear: number, cascadeCount: number): number;
87
+ protected _createCascadeBoundingSpheres(): Sphere[];
88
+ protected _createDepthCamera(planet?: Planet | null): Camera;
89
+ protected _createFramebuffer(renderer: Renderer): Framebuffer;
90
+ protected _createDepthArrayTexture(renderer: Renderer): WebGLTexture | null;
91
+ protected _validateFramebufferLayers(): void;
92
+ protected _createQuadTreeStrategy(planet: Planet, camera: PlanetCamera): QuadTreeStrategy;
93
+ protected _initPlanetSource(planet: Planet): void;
94
+ protected _syncPlanetHeightFactor(): void;
95
+ protected _updateCascadeBounds(): void;
96
+ protected _updateDepthCamera(): void;
97
+ protected _computeDepthCameraBoundingSphere(outSphere: Sphere): number;
98
+ protected _extendSphereBySphere(outSphere: Sphere, sphere: Sphere): void;
99
+ protected _getDepthCameraUp(lightDirection: Vec3): Vec3;
100
+ /**
101
+ * Computes a minimum bounding sphere for the main camera perspective frustum slice.
102
+ * Cascade split distances are linear distances from the main camera eye.
103
+ */
104
+ protected _computeCascadeBoundingSphere(cascade: CascadeParams, outSphere: Sphere): void;
105
+ protected _collectRenderNodes(): QuadTreeStrategy | null;
106
+ protected _drawFrame(): void;
107
+ protected _renderCascade(cascade: CascadeParams, cascadeIndex: number, renderedNodes: Node[], fadingOpaqueSegments: Segment[]): void;
108
+ protected _segmentsPass(camera: Camera, renderedNodes: Node[], fadingOpaqueSegments: Segment[]): void;
109
+ protected _geoObjectsPass(camera: Camera): void;
110
+ }
@@ -0,0 +1,2 @@
1
+ import { ShaderProgram } from "../../webgl";
2
+ export declare function cascade_shadow_depth(): ShaderProgram;
@@ -0,0 +1,67 @@
1
+ import type { DepthCamera } from "../../control/depthCamera/DepthCamera";
2
+ import type { NumberArray3 } from "../../math/Vec3";
3
+ import type { NumberArray4 } from "../../math/Vec4";
4
+ import { TypedArray } from "../../utils/shared";
5
+ import type { ProjectorManager } from "./ProjectorManager";
6
+ export type ProjectorSourceType = "color" | "image" | "video" | "texture";
7
+ export type ProjectorRenderMode = "color" | "light";
8
+ export type ProjectorColor = NumberArray3 | NumberArray4 | TypedArray | string;
9
+ export declare const PROJECTOR_RENDER_MODE_COLOR = 0;
10
+ export declare const PROJECTOR_RENDER_MODE_LIGHT = 1;
11
+ export interface IProjectorParams {
12
+ enabled?: boolean;
13
+ depthCamera: DepthCamera;
14
+ color?: ProjectorColor;
15
+ sourceType?: ProjectorSourceType;
16
+ renderMode?: ProjectorRenderMode;
17
+ priority?: number;
18
+ }
19
+ export declare class Projector {
20
+ protected static __staticCounter__: number;
21
+ readonly id: number;
22
+ depthCamera: DepthCamera;
23
+ color: Float32Array;
24
+ sourceType: ProjectorSourceType;
25
+ protected _enabled: boolean;
26
+ protected _renderMode: number;
27
+ protected _priority: number;
28
+ /**
29
+ * Layer index in the manager-owned depth array texture. -1 if not yet added.
30
+ */
31
+ _slot: number;
32
+ /**
33
+ * Manager that owns this projector. Set in ProjectorManager.add(), cleared on remove().
34
+ */
35
+ _manager: ProjectorManager | null;
36
+ constructor(params: IProjectorParams);
37
+ get enabled(): boolean;
38
+ set enabled(enabled: boolean);
39
+ get renderMode(): number;
40
+ set renderMode(renderMode: ProjectorRenderMode | number);
41
+ get priority(): number;
42
+ set priority(priority: number);
43
+ protected static _resolveRenderMode(renderMode?: ProjectorRenderMode | number): number;
44
+ protected static _resolveColor(color?: ProjectorColor): Float32Array;
45
+ setColorHTML(color: string): void;
46
+ setColor(r: number, g: number, b: number, a?: number): void;
47
+ setOpacity(a: number): void;
48
+ getColor(): string;
49
+ getOpacity(): number;
50
+ /**
51
+ * @public
52
+ * @return number
53
+ * Gets allocated layer index inside the depth array texture.
54
+ */
55
+ get slot(): number;
56
+ /**
57
+ * Gets Manager-owned TEXTURE_2D_ARRAY used as the depth target.
58
+ * @return WebGLTexture | null
59
+ */
60
+ get arrayTexture(): WebGLTexture | null;
61
+ /**
62
+ * Gets original framebuffer color texture (TEXTURE_2D) used by projector depth pass.
63
+ * ProjectorManager temporarily rebinds framebuffer attachment to array-layer,
64
+ * but framebuffer.textures[0] remains the original texture reference.
65
+ */
66
+ get depthTexture(): WebGLTexture | null;
67
+ }
@@ -0,0 +1,86 @@
1
+ import { Mat4 } from "../../math/Mat4";
2
+ import type { ShaderProgram } from "../../webgl/ShaderProgram";
3
+ import type { DepthCamera } from "../../control/depthCamera/DepthCamera";
4
+ import type { Renderer } from "../Renderer";
5
+ import { Projector } from "./Projector";
6
+ /**
7
+ * Maximum number of depth layers allocated in manager-owned projector array texture.
8
+ * Defines how many projectors can be added to the manager at once.
9
+ */
10
+ export declare const MAX_PROJECTOR_LAYERS = 64;
11
+ /**
12
+ * Maximum number of projectors processed in a single shader invocation.
13
+ * Used by forward / WOIT paths as top-K by priority per draw call.
14
+ * Deferred projector pass binds one projector per draw (`chunkSize = 1`).
15
+ */
16
+ export declare const MAX_FORWARD_PROJECTORS = 8;
17
+ /** Default texture unit where the depth array sampler is bound. */
18
+ export declare class ProjectorManager {
19
+ protected _renderer: Renderer;
20
+ protected _projectors: Projector[];
21
+ protected _activeProjectors: Projector[];
22
+ protected _viewProjData: Float32Array;
23
+ protected _invViewProjData: Float32Array;
24
+ protected _eyeRelData: Float32Array;
25
+ protected _colorIntensityData: Float32Array;
26
+ protected _paramsData: Float32Array;
27
+ protected _depthRangeData: Float32Array;
28
+ protected _layerData: Int32Array;
29
+ protected _updateActiveProjectors: boolean;
30
+ protected _depthArrayTexture: WebGLTexture | null;
31
+ /** Layer size of `_depthArrayTexture`. Determined by the first projector added. */
32
+ protected _depthSize: number;
33
+ protected _depthCapacity: number;
34
+ protected _freeSlots: number[];
35
+ protected _tmpInverse: Mat4;
36
+ constructor(renderer: Renderer);
37
+ /** Total active projectors count (used by consumers to choose _proj / _noproj programs). */
38
+ get activeCount(): number;
39
+ /** Manager-owned TEXTURE_2D_ARRAY containing depth maps for all projectors. */
40
+ get depthArrayTexture(): WebGLTexture | null;
41
+ /** Snapshot of currently active projectors (sorted by priority desc). */
42
+ get active(): Projector[];
43
+ add(projector: Projector): number;
44
+ /**
45
+ * Rebinds projector.depthCamera.framebuffer COLOR_ATTACHMENT0 from its own TEXTURE_2D
46
+ * to (this._depthArrayTexture, projector._slot) so renders go directly into
47
+ * the array layer without any per-frame copy. The original TEXTURE_2D stays
48
+ * referenced inside framebuffer.textures[0] so framebuffer.destroy() can free it
49
+ * normally — we never overwrite that slot with the shared array texture.
50
+ */
51
+ protected _rebindFramebufferToLayer(projector: Projector): boolean;
52
+ /**
53
+ * Restores projector.depthCamera.framebuffer COLOR_ATTACHMENT0 back to its original TEXTURE_2D
54
+ * so subsequent depth renders no longer touch the freed array layer.
55
+ */
56
+ protected _restoreFramebufferAttachment(projector: Projector): void;
57
+ update(projector: Projector): boolean;
58
+ getByDepthCamera(depthCamera: DepthCamera): Projector | null;
59
+ remove(projector: Projector): boolean;
60
+ clear(): void;
61
+ dispose(): void;
62
+ /**
63
+ * Binds forward/WOIT projectors to the given shader program.
64
+ * Uses top-K projectors by priority for current draw call.
65
+ *
66
+ * @returns Actual projector count uploaded (0..MAX_FORWARD_PROJECTORS).
67
+ */
68
+ bindForward(program: ShaderProgram, textureUnitStart?: number): number;
69
+ /**
70
+ * Binds exactly one projector for deferred frustum-geometry draw call.
71
+ *
72
+ * @param projectorIndex - Active projector index in priority-sorted array.
73
+ * @returns 1 if projector was bound, 0 if index is out of range.
74
+ */
75
+ bindDeferred(program: ShaderProgram, textureUnitStart?: number, projectorIndex?: number): number;
76
+ /**
77
+ * Lazily allocates the manager-owned TEXTURE_2D_ARRAY at the size of the first
78
+ * projector to be added.
79
+ * Returns false if a size mismatch is detected.
80
+ */
81
+ protected _ensureDepthArrayTexture(size: number, capacity: number): boolean;
82
+ protected _createDepthArrayTexture(size: number, capacity: number): boolean;
83
+ protected _growDepthArrayTexture(): boolean;
84
+ protected _collectActiveProjectors(): Projector[];
85
+ protected _getActiveProjectors(): Projector[];
86
+ }
@@ -0,0 +1,37 @@
1
+ import { Mat4 } from "../../math/Mat4";
2
+ import type { Renderer } from "../Renderer";
3
+ import type { Framebuffer } from "../../webgl/Framebuffer";
4
+ import type { Projector } from "./Projector";
5
+ import type { NumberArray16 } from "../../math/Mat4";
6
+ import type { Vec3 } from "../../math/Vec3";
7
+ /**
8
+ * Deferred projector lighting pass.
9
+ * For every active projector draws a fullscreen quad clipped by a per-projector screen-space.
10
+ * Skipped entirely when no projectors are active.
11
+ * Scissor gives only ~5% optimization.
12
+ */
13
+ export declare class ProjectorsPass {
14
+ protected _renderer: Renderer;
15
+ protected _cornerBuffer: WebGLBuffer | null;
16
+ protected _indexBuffer: WebGLBuffer | null;
17
+ protected _indexCount: number;
18
+ protected _tmpInverse: Mat4;
19
+ protected _scissor: [number, number, number, number];
20
+ constructor(renderer: Renderer);
21
+ init(): void;
22
+ dispose(): void;
23
+ /**
24
+ * Compute the projector frustum screen-space AABB in pixels (origin = bottom-left).
25
+ * Returns:
26
+ * - true + filled `_scissor` rect when the projector is on-screen.
27
+ * - false when the projector is entirely off-screen (caller should skip the draw).
28
+ *
29
+ * If any frustum corner is behind the main camera (w<=0), falls back to the full viewport
30
+ * (CPU-side near-plane clipping of the volume is too costly to be worth it here).
31
+ */
32
+ protected _computeScissor(projector: Projector, mainPV: NumberArray16, mainEye: Vec3, viewportW: number, viewportH: number): boolean;
33
+ /**
34
+ * Apply per-projector additive projector color(lighting) into the currently bound framebuffer.
35
+ */
36
+ apply(gBuffer: Framebuffer): void;
37
+ }