@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.
- package/README.md +2 -0
- package/lib/Globe.d.ts +21 -8
- package/lib/Object3d.d.ts +1 -1
- package/lib/assets/LabelWorker.worker-C24YLEkW.js.map +1 -0
- package/lib/assets/PlainSegmentWorker.worker-DJHXd0bF.js.map +1 -0
- package/lib/assets/TerrainWorker.worker-BwueoQpg.js.map +1 -0
- package/lib/camera/Camera.d.ts +57 -8
- package/lib/camera/Frustum.d.ts +37 -1
- package/lib/camera/PlanetCamera.d.ts +29 -4
- package/lib/control/DebugInfo.d.ts +1 -0
- package/lib/control/FramebufferPreview.d.ts +18 -2
- package/lib/control/FreeNavigation.d.ts +253 -0
- package/lib/control/LayerSwitcher.d.ts +18 -0
- package/lib/control/Lighting.d.ts +3 -0
- package/lib/control/Navigation.d.ts +18 -1
- package/lib/control/ShowFps.d.ts +15 -3
- package/lib/control/Sun.d.ts +59 -0
- package/lib/control/depthCamera/DepthCamera.d.ts +132 -0
- package/lib/control/depthCamera/DepthCameraHandler.d.ts +25 -0
- package/lib/control/depthCamera/depth_camera.d.ts +2 -0
- package/lib/control/entityEditor/CameraEditorView.d.ts +60 -0
- package/lib/control/entityEditor/EntityEditor.d.ts +2 -1
- package/lib/control/entityEditor/EntityEditorDialog.d.ts +15 -47
- package/lib/control/entityEditor/EntityEditorScene.d.ts +16 -0
- package/lib/control/entityEditor/EntityEditorView.d.ts +68 -0
- package/lib/control/entityEditor/ProjectorEditorView.d.ts +31 -0
- package/lib/control/entityEditor/RotateEntity.d.ts +5 -1
- package/lib/control/index.d.ts +3 -3
- package/lib/control/timeline/TimelineControl.d.ts +86 -0
- package/lib/control/timeline/TimelineModel.d.ts +46 -1
- package/lib/control/timeline/TimelineView.d.ts +55 -2
- package/lib/entity/Entity.d.ts +18 -0
- package/lib/entity/EntityCollection.d.ts +71 -13
- package/lib/entity/billboard/BaseBillboardHandler.d.ts +16 -0
- package/lib/entity/geoObject/GeoObjectHandler.d.ts +3 -0
- package/lib/entity/geoObject/InstanceData.d.ts +6 -0
- package/lib/entity/geometry/Geometry.d.ts +18 -0
- package/lib/entity/geometry/GeometryHandler.d.ts +1 -0
- package/lib/entity/label/Label.d.ts +8 -6
- package/lib/entity/pointCloud/PointCloud.d.ts +1 -0
- package/lib/entity/pointCloud/PointCloudHandler.d.ts +5 -0
- package/lib/entity/polyline/Polyline.d.ts +15 -0
- package/lib/entity/polyline/PolylineBatchRenderer.d.ts +1 -0
- package/lib/entity/polyline/PolylineHandler.d.ts +5 -0
- package/lib/entity/ray/Ray.d.ts +2 -0
- package/lib/entity/ray/RayHandler.d.ts +1 -0
- package/lib/index.d.ts +20 -3
- package/lib/input/KeyboardHandler.d.ts +5 -1
- package/lib/layer/BaseTileMaterialLayer.d.ts +36 -0
- package/lib/layer/CanvasTiles.d.ts +8 -12
- package/lib/layer/Layer.d.ts +8 -1
- package/lib/layer/Vector.d.ts +74 -18
- package/lib/layer/XYZ.d.ts +5 -21
- package/lib/math/Line2.d.ts +9 -0
- package/lib/math.d.ts +8 -0
- package/lib/og.css +2 -1
- package/lib/og.es.js +1 -1
- package/lib/og.es.js.map +1 -1
- package/lib/quadTree/EntityCollectionsTreeStrategy.d.ts +3 -0
- package/lib/quadTree/QuadTreeStrategy.d.ts +18 -1
- package/lib/quadTree/earth/EarthEntityCollectionsTreeStrategy.d.ts +3 -0
- package/lib/quadTree/equi/EquiEntityCollectionsTreeStrategy.d.ts +3 -0
- package/lib/renderer/PhongDeferredShading.d.ts +2 -0
- package/lib/renderer/Renderer.d.ts +89 -6
- package/lib/renderer/RendererEvents.d.ts +2 -0
- package/lib/renderer/cascadeShadows/CascadeShadowManager.d.ts +34 -0
- package/lib/renderer/cascadeShadows/CascadeShadowMap.d.ts +110 -0
- package/lib/renderer/cascadeShadows/cascade_shadow_depth.d.ts +2 -0
- package/lib/renderer/projectors/Projector.d.ts +67 -0
- package/lib/renderer/projectors/ProjectorManager.d.ts +86 -0
- package/lib/renderer/projectors/ProjectorsPass.d.ts +37 -0
- package/lib/renderer/shadows/ShadowManager.d.ts +41 -0
- package/lib/renderer/shadows/ShadowMap.d.ts +21 -0
- package/lib/renderer/textureUnits.d.ts +6 -0
- package/lib/scene/Planet.d.ts +80 -8
- package/lib/scene/Scene.d.ts +1 -8
- package/lib/scene/SkyBox.d.ts +2 -1
- package/lib/segment/Segment.d.ts +18 -1
- package/lib/shaders/common/uniforms.d.ts +29 -0
- package/lib/shaders/geo_object/geo_object.d.ts +1 -0
- package/lib/shaders/projectorsPass/projectorsPass.d.ts +2 -0
- package/lib/shaders/tone_mapping/toneMapping.d.ts +1 -1
- package/lib/shaders/varianceBlur.d.ts +2 -0
- package/lib/terrain/EmptyTerrain.d.ts +43 -2
- package/lib/terrain/GlobusRgbTerrain.d.ts +1 -0
- package/lib/terrain/MapterhornTerrain.d.ts +11 -0
- package/lib/terrain/RgbTerrain.d.ts +11 -0
- package/lib/terrain/index.d.ts +6 -2
- package/lib/ui/Button.d.ts +1 -0
- package/lib/ui/Checkbox.d.ts +1 -0
- package/lib/ui/Color.d.ts +6 -2
- package/lib/ui/Dialog.d.ts +46 -1
- package/lib/ui/Dock.d.ts +151 -0
- package/lib/ui/Input.d.ts +14 -1
- package/lib/ui/Slider.d.ts +1 -0
- package/lib/ui/TitleBarView.d.ts +21 -0
- package/lib/ui/index.d.ts +2 -0
- package/lib/utils/FontAtlas.d.ts +5 -3
- package/lib/utils/GeoImageCreator.d.ts +7 -0
- package/lib/utils/Loader.d.ts +6 -0
- package/lib/utils/NormalMapCreator.d.ts +6 -0
- package/lib/utils/TerrainWorker.d.ts +1 -0
- package/lib/utils/VectorTileCreator.d.ts +6 -0
- package/lib/utils/cameraFootprint.d.ts +72 -0
- package/lib/utils/gltf/types.d.ts +5 -4
- package/lib/utils/shadowCameraFit.d.ts +175 -0
- package/lib/utils/shared.d.ts +11 -0
- package/lib/webgl/BaseFramebuffer.d.ts +28 -0
- package/lib/webgl/Framebuffer.d.ts +5 -7
- package/lib/webgl/Handler.d.ts +28 -0
- package/package.json +11 -9
- package/lib/assets/LabelWorker.worker-DYd7xn3M.js.map +0 -1
- package/lib/assets/PlainSegmentWorker.worker-JsKldq-e.js.map +0 -1
- package/lib/assets/TerrainWorker.worker-CqUJvMOv.js.map +0 -1
- package/lib/control/CameraFrameComposer.d.ts +0 -19
- package/lib/control/CameraFrameHandler.d.ts +0 -26
- package/lib/control/cameraDepthHandler/CameraDepthHandler.d.ts +0 -42
- package/lib/control/cameraDepthHandler/camera_depth.d.ts +0 -2
- 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
|
|
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
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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,
|
|
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,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
|
+
}
|