@babylonjs/core 7.45.0 → 7.46.0
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/Buffers/bufferUtils.d.ts +28 -1
- package/Buffers/bufferUtils.js +104 -1
- package/Buffers/bufferUtils.js.map +1 -1
- package/Decorators/nodeDecorator.js +1 -1
- package/Decorators/nodeDecorator.js.map +1 -1
- package/Engines/Extensions/engine.renderTarget.js +2 -1
- package/Engines/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/WebGL/webGLRenderTargetWrapper.js +1 -1
- package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.js +2 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/renderTargetWrapper.js +1 -1
- package/Engines/renderTargetWrapper.js.map +1 -1
- package/Engines/thinEngine.js +2 -1
- package/Engines/thinEngine.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.d.ts +5 -0
- package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js +7 -0
- package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.d.ts +3 -0
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +13 -0
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/objectRendererBlock.d.ts +0 -3
- package/FrameGraph/Node/Blocks/Rendering/objectRendererBlock.js +0 -13
- package/FrameGraph/Node/Blocks/Rendering/objectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.js +3 -0
- package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraph.js +9 -5
- package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraphBlock.js +1 -0
- package/FrameGraph/Node/nodeRenderGraphBlock.js.map +1 -1
- package/FrameGraph/Passes/renderPass.d.ts +11 -0
- package/FrameGraph/Passes/renderPass.js +40 -0
- package/FrameGraph/Passes/renderPass.js.map +1 -1
- package/FrameGraph/Tasks/Layers/baseLayerTask.js +3 -2
- package/FrameGraph/Tasks/Layers/baseLayerTask.js.map +1 -1
- package/FrameGraph/Tasks/Layers/highlightLayerTask.js +1 -1
- package/FrameGraph/Tasks/Layers/highlightLayerTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/bloomMergeTask.js +1 -1
- package/FrameGraph/Tasks/PostProcesses/bloomMergeTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/bloomTask.js +1 -1
- package/FrameGraph/Tasks/PostProcesses/bloomTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.js +1 -1
- package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js +1 -1
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js +2 -2
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js +1 -0
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/postProcessTask.js +2 -1
- package/FrameGraph/Tasks/PostProcesses/postProcessTask.js.map +1 -1
- package/FrameGraph/Tasks/Texture/copyToBackbufferColorTask.js +1 -0
- package/FrameGraph/Tasks/Texture/copyToBackbufferColorTask.js.map +1 -1
- package/FrameGraph/Tasks/Texture/copyToTextureTask.js +1 -1
- package/FrameGraph/Tasks/Texture/copyToTextureTask.js.map +1 -1
- package/FrameGraph/frameGraph.d.ts +5 -5
- package/FrameGraph/frameGraph.js +31 -21
- package/FrameGraph/frameGraph.js.map +1 -1
- package/FrameGraph/frameGraphTask.d.ts +8 -2
- package/FrameGraph/frameGraphTask.js +12 -12
- package/FrameGraph/frameGraphTask.js.map +1 -1
- package/FrameGraph/frameGraphTextureManager.d.ts +33 -2
- package/FrameGraph/frameGraphTextureManager.js +368 -27
- package/FrameGraph/frameGraphTextureManager.js.map +1 -1
- package/Lights/LTC/ltcTextureTool.d.ts +20 -0
- package/Lights/LTC/ltcTextureTool.js +24 -0
- package/Lights/LTC/ltcTextureTool.js.map +1 -0
- package/Lights/Shadows/shadowGenerator.d.ts +10 -0
- package/Lights/Shadows/shadowGenerator.js +5 -0
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/Shadows/shadowGeneratorSceneComponent.js +6 -0
- package/Lights/Shadows/shadowGeneratorSceneComponent.js.map +1 -1
- package/Lights/areaLight.d.ts +39 -0
- package/Lights/areaLight.js +81 -0
- package/Lights/areaLight.js.map +1 -0
- package/Lights/index.d.ts +2 -0
- package/Lights/index.js +2 -0
- package/Lights/index.js.map +1 -1
- package/Lights/light.d.ts +8 -0
- package/Lights/light.js +10 -0
- package/Lights/light.js.map +1 -1
- package/Lights/lightConstants.d.ts +4 -0
- package/Lights/lightConstants.js +4 -0
- package/Lights/lightConstants.js.map +1 -1
- package/Lights/rectAreaLight.d.ts +61 -0
- package/Lights/rectAreaLight.js +127 -0
- package/Lights/rectAreaLight.js.map +1 -0
- package/Loading/loadingScreen.d.ts +21 -1
- package/Loading/loadingScreen.js +125 -52
- package/Loading/loadingScreen.js.map +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.js +2 -0
- package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +2 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/debugBlock.d.ts +38 -0
- package/Materials/Node/Blocks/debugBlock.js +92 -0
- package/Materials/Node/Blocks/debugBlock.js.map +1 -0
- package/Materials/Node/Blocks/index.d.ts +1 -0
- package/Materials/Node/Blocks/index.js +1 -0
- package/Materials/Node/Blocks/index.js.map +1 -1
- package/Materials/Node/nodeMaterial.d.ts +2 -0
- package/Materials/Node/nodeMaterial.js +20 -2
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBlock.d.ts +8 -1
- package/Materials/Node/nodeMaterialBlock.js +13 -1
- package/Materials/Node/nodeMaterialBlock.js.map +1 -1
- package/Materials/PBR/index.d.ts +1 -0
- package/Materials/PBR/index.js +1 -0
- package/Materials/PBR/index.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +13 -0
- package/Materials/PBR/pbrBaseMaterial.js +60 -0
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrMaterial.d.ts +8 -0
- package/Materials/PBR/pbrMaterial.js +12 -0
- package/Materials/PBR/pbrMaterial.js.map +1 -1
- package/Materials/Textures/internalTexture.d.ts +0 -18
- package/Materials/Textures/internalTexture.js +0 -46
- package/Materials/Textures/internalTexture.js.map +1 -1
- package/Materials/Textures/rawTexture.d.ts +6 -2
- package/Materials/Textures/rawTexture.js +10 -3
- package/Materials/Textures/rawTexture.js.map +1 -1
- package/Materials/Textures/textureHelper.functions.d.ts +18 -0
- package/Materials/Textures/textureHelper.functions.js +47 -0
- package/Materials/Textures/textureHelper.functions.js.map +1 -0
- package/Materials/materialFlags.d.ts +6 -0
- package/Materials/materialFlags.js +14 -0
- package/Materials/materialFlags.js.map +1 -1
- package/Materials/materialHelper.functions.js +3 -1
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Materials/standardMaterial.d.ts +1 -0
- package/Materials/standardMaterial.js +14 -0
- package/Materials/standardMaterial.js.map +1 -1
- package/Meshes/Compression/dracoCompressionWorker.js +0 -1
- package/Meshes/Compression/dracoCompressionWorker.js.map +1 -1
- package/Misc/timingTools.d.ts +2 -2
- package/Misc/timingTools.js +15 -10
- package/Misc/timingTools.js.map +1 -1
- package/Particles/gpuParticleSystem.js +8 -2
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.d.ts +4 -0
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.js +66 -16
- package/Rendering/IBLShadows/iblShadowsPluginMaterial.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.d.ts +8 -0
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +16 -0
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.d.ts +9 -0
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +28 -11
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
- package/Shaders/ShadersInclude/defaultFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/defaultFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/gaussianSplatting.js +1 -1
- package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
- package/Shaders/ShadersInclude/lightFragment.js +19 -1
- package/Shaders/ShadersInclude/lightFragment.js.map +1 -1
- package/Shaders/ShadersInclude/lightFragmentDeclaration.js +3 -0
- package/Shaders/ShadersInclude/lightFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/lightUboDeclaration.js +3 -0
- package/Shaders/ShadersInclude/lightUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/lightVxFragmentDeclaration.js +3 -0
- package/Shaders/ShadersInclude/lightVxFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/lightVxUboDeclaration.js +3 -0
- package/Shaders/ShadersInclude/lightVxUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/lightsFragmentFunctions.d.ts +1 -0
- package/Shaders/ShadersInclude/lightsFragmentFunctions.js +14 -1
- package/Shaders/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/ltcHelperFunctions.d.ts +5 -0
- package/Shaders/ShadersInclude/ltcHelperFunctions.js +31 -0
- package/Shaders/ShadersInclude/ltcHelperFunctions.js.map +1 -0
- package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js +11 -2
- package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +6 -0
- package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.d.ts +1 -0
- package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js +18 -1
- package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrFragmentDeclaration.js +6 -3
- package/Shaders/ShadersInclude/pbrFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js +4 -0
- package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/pbrUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrVertexDeclaration.js +5 -2
- package/Shaders/ShadersInclude/pbrVertexDeclaration.js.map +1 -1
- package/Shaders/iblShadowAccumulation.fragment.js +6 -5
- package/Shaders/iblShadowAccumulation.fragment.js.map +1 -1
- package/Shaders/iblShadowSpatialBlur.fragment.js +3 -3
- package/Shaders/iblShadowSpatialBlur.fragment.js.map +1 -1
- package/Shaders/iblShadowVoxelTracing.fragment.js +26 -8
- package/Shaders/iblShadowVoxelTracing.fragment.js.map +1 -1
- package/Shaders/pbr.fragment.js +11 -3
- package/Shaders/pbr.fragment.js.map +1 -1
- package/Shaders/pbr.vertex.js +2 -0
- package/Shaders/pbr.vertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightFragment.js +19 -1
- package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightUboDeclaration.js +4 -0
- package/ShadersWGSL/ShadersInclude/lightUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightVxFragmentDeclaration.js +3 -0
- package/ShadersWGSL/ShadersInclude/lightVxFragmentDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.js +4 -0
- package/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.d.ts +1 -0
- package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js +12 -1
- package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/ltcHelperFunctions.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/ltcHelperFunctions.js +35 -0
- package/ShadersWGSL/ShadersInclude/ltcHelperFunctions.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockAlbedoOpacity.js +10 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +4 -0
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.d.ts +1 -0
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.js +18 -1
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js +4 -0
- package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.js.map +1 -1
- package/ShadersWGSL/iblShadowAccumulation.fragment.js +4 -3
- package/ShadersWGSL/iblShadowAccumulation.fragment.js.map +1 -1
- package/ShadersWGSL/iblShadowSpatialBlur.fragment.js +3 -3
- package/ShadersWGSL/iblShadowSpatialBlur.fragment.js.map +1 -1
- package/ShadersWGSL/iblShadowVoxelTracing.fragment.js +26 -8
- package/ShadersWGSL/iblShadowVoxelTracing.fragment.js.map +1 -1
- package/ShadersWGSL/pbr.fragment.js +10 -2
- package/ShadersWGSL/pbr.fragment.js.map +1 -1
- package/ShadersWGSL/pbr.vertex.js +2 -0
- package/ShadersWGSL/pbr.vertex.js.map +1 -1
- package/Sprites/spriteRenderer.js +1 -0
- package/Sprites/spriteRenderer.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Vector3 } from "../Maths/math.vector";
|
|
2
|
+
import type { Effect } from "../Materials/effect.js";
|
|
3
|
+
import type { Scene } from "../scene.js";
|
|
4
|
+
import { AreaLight } from "./areaLight";
|
|
5
|
+
/**
|
|
6
|
+
* A rectangular area light defined by an unique point in world space, a width and a height.
|
|
7
|
+
* The light is emitted from the rectangular area in the -Z direction.
|
|
8
|
+
*/
|
|
9
|
+
export declare class RectAreaLight extends AreaLight {
|
|
10
|
+
private readonly _width;
|
|
11
|
+
private readonly _height;
|
|
12
|
+
protected readonly _pointTransformedPosition: Vector3;
|
|
13
|
+
protected readonly _pointTransformedWidth: Vector3;
|
|
14
|
+
protected readonly _pointTransformedHeight: Vector3;
|
|
15
|
+
/**
|
|
16
|
+
* Rect Area Light width.
|
|
17
|
+
*/
|
|
18
|
+
get width(): number;
|
|
19
|
+
/**
|
|
20
|
+
* Rect Area Light width.
|
|
21
|
+
*/
|
|
22
|
+
set width(value: number);
|
|
23
|
+
/**
|
|
24
|
+
* Rect Area Light height.
|
|
25
|
+
*/
|
|
26
|
+
get height(): number;
|
|
27
|
+
/**
|
|
28
|
+
* Rect Area Light height.
|
|
29
|
+
*/
|
|
30
|
+
set height(value: number);
|
|
31
|
+
/**
|
|
32
|
+
* Creates a rectangular area light object.
|
|
33
|
+
* Documentation : https://doc.babylonjs.com/features/featuresDeepDive/lights/lights_introduction
|
|
34
|
+
* @param name The friendly name of the light
|
|
35
|
+
* @param position The position of the area light.
|
|
36
|
+
* @param width The width of the area light.
|
|
37
|
+
* @param height The height of the area light.
|
|
38
|
+
* @param scene The scene the light belongs to
|
|
39
|
+
*/
|
|
40
|
+
constructor(name: string, position: Vector3, width: number, height: number, scene?: Scene);
|
|
41
|
+
/**
|
|
42
|
+
* Returns the string "RectAreaLight"
|
|
43
|
+
* @returns the class name
|
|
44
|
+
*/
|
|
45
|
+
getClassName(): string;
|
|
46
|
+
/**
|
|
47
|
+
* Returns the integer 4.
|
|
48
|
+
* @returns The light Type id as a constant defines in Light.LIGHTTYPEID_x
|
|
49
|
+
*/
|
|
50
|
+
getTypeID(): number;
|
|
51
|
+
protected _buildUniformLayout(): void;
|
|
52
|
+
protected _computeTransformedInformation(): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Sets the passed Effect "effect" with the PointLight transformed position (or position, if none) and passed name (string).
|
|
55
|
+
* @param effect The effect to update
|
|
56
|
+
* @param lightIndex The index of the light in the effect to update
|
|
57
|
+
* @returns The point light
|
|
58
|
+
*/
|
|
59
|
+
transferToEffect(effect: Effect, lightIndex: string): RectAreaLight;
|
|
60
|
+
transferToNodeMaterialEffect(effect: Effect, lightDataUniformName: string): this;
|
|
61
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { __decorate } from "../tslib.es6.js";
|
|
2
|
+
import { Vector3 } from "../Maths/math.vector.js";
|
|
3
|
+
import { Node } from "../node.js";
|
|
4
|
+
import { Light } from "./light.js";
|
|
5
|
+
import { RegisterClass } from "../Misc/typeStore.js";
|
|
6
|
+
import { serialize } from "../Misc/decorators.js";
|
|
7
|
+
import { AreaLight } from "./areaLight.js";
|
|
8
|
+
Node.AddNodeConstructor("Light_Type_4", (name, scene) => {
|
|
9
|
+
return () => new RectAreaLight(name, Vector3.Zero(), 1, 1, scene);
|
|
10
|
+
});
|
|
11
|
+
/**
|
|
12
|
+
* A rectangular area light defined by an unique point in world space, a width and a height.
|
|
13
|
+
* The light is emitted from the rectangular area in the -Z direction.
|
|
14
|
+
*/
|
|
15
|
+
export class RectAreaLight extends AreaLight {
|
|
16
|
+
/**
|
|
17
|
+
* Rect Area Light width.
|
|
18
|
+
*/
|
|
19
|
+
get width() {
|
|
20
|
+
return this._width.x;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Rect Area Light width.
|
|
24
|
+
*/
|
|
25
|
+
set width(value) {
|
|
26
|
+
this._width.x = value;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Rect Area Light height.
|
|
30
|
+
*/
|
|
31
|
+
get height() {
|
|
32
|
+
return this._height.y;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Rect Area Light height.
|
|
36
|
+
*/
|
|
37
|
+
set height(value) {
|
|
38
|
+
this._height.y = value;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Creates a rectangular area light object.
|
|
42
|
+
* Documentation : https://doc.babylonjs.com/features/featuresDeepDive/lights/lights_introduction
|
|
43
|
+
* @param name The friendly name of the light
|
|
44
|
+
* @param position The position of the area light.
|
|
45
|
+
* @param width The width of the area light.
|
|
46
|
+
* @param height The height of the area light.
|
|
47
|
+
* @param scene The scene the light belongs to
|
|
48
|
+
*/
|
|
49
|
+
constructor(name, position, width, height, scene) {
|
|
50
|
+
super(name, position, scene);
|
|
51
|
+
this._width = new Vector3(width, 0, 0);
|
|
52
|
+
this._height = new Vector3(0, height, 0);
|
|
53
|
+
this._pointTransformedPosition = Vector3.Zero();
|
|
54
|
+
this._pointTransformedWidth = Vector3.Zero();
|
|
55
|
+
this._pointTransformedHeight = Vector3.Zero();
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Returns the string "RectAreaLight"
|
|
59
|
+
* @returns the class name
|
|
60
|
+
*/
|
|
61
|
+
getClassName() {
|
|
62
|
+
return "RectAreaLight";
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Returns the integer 4.
|
|
66
|
+
* @returns The light Type id as a constant defines in Light.LIGHTTYPEID_x
|
|
67
|
+
*/
|
|
68
|
+
getTypeID() {
|
|
69
|
+
return Light.LIGHTTYPEID_RECT_AREALIGHT;
|
|
70
|
+
}
|
|
71
|
+
_buildUniformLayout() {
|
|
72
|
+
this._uniformBuffer.addUniform("vLightData", 4);
|
|
73
|
+
this._uniformBuffer.addUniform("vLightDiffuse", 4);
|
|
74
|
+
this._uniformBuffer.addUniform("vLightSpecular", 4);
|
|
75
|
+
this._uniformBuffer.addUniform("vLightWidth", 4);
|
|
76
|
+
this._uniformBuffer.addUniform("vLightHeight", 4);
|
|
77
|
+
this._uniformBuffer.addUniform("shadowsInfo", 3);
|
|
78
|
+
this._uniformBuffer.addUniform("depthValues", 2);
|
|
79
|
+
this._uniformBuffer.create();
|
|
80
|
+
}
|
|
81
|
+
_computeTransformedInformation() {
|
|
82
|
+
if (this.parent && this.parent.getWorldMatrix) {
|
|
83
|
+
Vector3.TransformCoordinatesToRef(this.position, this.parent.getWorldMatrix(), this._pointTransformedPosition);
|
|
84
|
+
Vector3.TransformNormalToRef(this._width, this.parent.getWorldMatrix(), this._pointTransformedWidth);
|
|
85
|
+
Vector3.TransformNormalToRef(this._height, this.parent.getWorldMatrix(), this._pointTransformedHeight);
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Sets the passed Effect "effect" with the PointLight transformed position (or position, if none) and passed name (string).
|
|
92
|
+
* @param effect The effect to update
|
|
93
|
+
* @param lightIndex The index of the light in the effect to update
|
|
94
|
+
* @returns The point light
|
|
95
|
+
*/
|
|
96
|
+
transferToEffect(effect, lightIndex) {
|
|
97
|
+
if (this._computeTransformedInformation()) {
|
|
98
|
+
this._uniformBuffer.updateFloat4("vLightData", this._pointTransformedPosition.x, this._pointTransformedPosition.y, this._pointTransformedPosition.z, 0, lightIndex);
|
|
99
|
+
this._uniformBuffer.updateFloat4("vLightWidth", this._pointTransformedWidth.x / 2, this._pointTransformedWidth.y / 2, this._pointTransformedWidth.z / 2, 0, lightIndex);
|
|
100
|
+
this._uniformBuffer.updateFloat4("vLightHeight", this._pointTransformedHeight.x / 2, this._pointTransformedHeight.y / 2, this._pointTransformedHeight.z / 2, 0, lightIndex);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
this._uniformBuffer.updateFloat4("vLightData", this.position.x, this.position.y, this.position.z, 0, lightIndex);
|
|
104
|
+
this._uniformBuffer.updateFloat4("vLightWidth", this._width.x / 2, this._width.y / 2, this._width.z / 2, 0.0, lightIndex);
|
|
105
|
+
this._uniformBuffer.updateFloat4("vLightHeight", this._height.x / 2, this._height.y / 2, this._height.z / 2, 0.0, lightIndex);
|
|
106
|
+
}
|
|
107
|
+
return this;
|
|
108
|
+
}
|
|
109
|
+
transferToNodeMaterialEffect(effect, lightDataUniformName) {
|
|
110
|
+
if (this._computeTransformedInformation()) {
|
|
111
|
+
effect.setFloat3(lightDataUniformName, this._pointTransformedPosition.x, this._pointTransformedPosition.y, this._pointTransformedPosition.z);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
effect.setFloat3(lightDataUniformName, this.position.x, this.position.y, this.position.z);
|
|
115
|
+
}
|
|
116
|
+
return this;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
__decorate([
|
|
120
|
+
serialize()
|
|
121
|
+
], RectAreaLight.prototype, "width", null);
|
|
122
|
+
__decorate([
|
|
123
|
+
serialize()
|
|
124
|
+
], RectAreaLight.prototype, "height", null);
|
|
125
|
+
// Register Class Name
|
|
126
|
+
RegisterClass("BABYLON.RectAreaLight", RectAreaLight);
|
|
127
|
+
//# sourceMappingURL=rectAreaLight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rectAreaLight.js","sourceRoot":"","sources":["../../../../dev/core/src/Lights/rectAreaLight.ts"],"names":[],"mappings":"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","sourcesContent":["import { Vector3 } from \"../Maths/math.vector\";\nimport { Node } from \"../node\";\nimport { Light } from \"./light\";\nimport type { Effect } from \"core/Materials/effect\";\nimport { RegisterClass } from \"core/Misc/typeStore\";\nimport { serialize } from \"../Misc/decorators\";\nimport type { Scene } from \"core/scene\";\nimport { AreaLight } from \"./areaLight\";\n\nNode.AddNodeConstructor(\"Light_Type_4\", (name, scene) => {\n return () => new RectAreaLight(name, Vector3.Zero(), 1, 1, scene);\n});\n\n/**\n * A rectangular area light defined by an unique point in world space, a width and a height.\n * The light is emitted from the rectangular area in the -Z direction.\n */\nexport class RectAreaLight extends AreaLight {\n private readonly _width: Vector3;\n private readonly _height: Vector3;\n protected readonly _pointTransformedPosition: Vector3;\n protected readonly _pointTransformedWidth: Vector3;\n protected readonly _pointTransformedHeight: Vector3;\n\n /**\n * Rect Area Light width.\n */\n @serialize()\n public get width(): number {\n return this._width.x;\n }\n /**\n * Rect Area Light width.\n */\n public set width(value: number) {\n this._width.x = value;\n }\n\n /**\n * Rect Area Light height.\n */\n @serialize()\n public get height(): number {\n return this._height.y;\n }\n /**\n * Rect Area Light height.\n */\n public set height(value: number) {\n this._height.y = value;\n }\n\n /**\n * Creates a rectangular area light object.\n * Documentation : https://doc.babylonjs.com/features/featuresDeepDive/lights/lights_introduction\n * @param name The friendly name of the light\n * @param position The position of the area light.\n * @param width The width of the area light.\n * @param height The height of the area light.\n * @param scene The scene the light belongs to\n */\n constructor(name: string, position: Vector3, width: number, height: number, scene?: Scene) {\n super(name, position, scene);\n this._width = new Vector3(width, 0, 0);\n this._height = new Vector3(0, height, 0);\n this._pointTransformedPosition = Vector3.Zero();\n this._pointTransformedWidth = Vector3.Zero();\n this._pointTransformedHeight = Vector3.Zero();\n }\n\n /**\n * Returns the string \"RectAreaLight\"\n * @returns the class name\n */\n public override getClassName(): string {\n return \"RectAreaLight\";\n }\n\n /**\n * Returns the integer 4.\n * @returns The light Type id as a constant defines in Light.LIGHTTYPEID_x\n */\n public override getTypeID(): number {\n return Light.LIGHTTYPEID_RECT_AREALIGHT;\n }\n\n protected _buildUniformLayout(): void {\n this._uniformBuffer.addUniform(\"vLightData\", 4);\n this._uniformBuffer.addUniform(\"vLightDiffuse\", 4);\n this._uniformBuffer.addUniform(\"vLightSpecular\", 4);\n this._uniformBuffer.addUniform(\"vLightWidth\", 4);\n this._uniformBuffer.addUniform(\"vLightHeight\", 4);\n this._uniformBuffer.addUniform(\"shadowsInfo\", 3);\n this._uniformBuffer.addUniform(\"depthValues\", 2);\n this._uniformBuffer.create();\n }\n\n protected _computeTransformedInformation(): boolean {\n if (this.parent && this.parent.getWorldMatrix) {\n Vector3.TransformCoordinatesToRef(this.position, this.parent.getWorldMatrix(), this._pointTransformedPosition);\n Vector3.TransformNormalToRef(this._width, this.parent.getWorldMatrix(), this._pointTransformedWidth);\n Vector3.TransformNormalToRef(this._height, this.parent.getWorldMatrix(), this._pointTransformedHeight);\n return true;\n }\n\n return false;\n }\n\n /**\n * Sets the passed Effect \"effect\" with the PointLight transformed position (or position, if none) and passed name (string).\n * @param effect The effect to update\n * @param lightIndex The index of the light in the effect to update\n * @returns The point light\n */\n public transferToEffect(effect: Effect, lightIndex: string): RectAreaLight {\n if (this._computeTransformedInformation()) {\n this._uniformBuffer.updateFloat4(\"vLightData\", this._pointTransformedPosition.x, this._pointTransformedPosition.y, this._pointTransformedPosition.z, 0, lightIndex);\n this._uniformBuffer.updateFloat4(\"vLightWidth\", this._pointTransformedWidth.x / 2, this._pointTransformedWidth.y / 2, this._pointTransformedWidth.z / 2, 0, lightIndex);\n this._uniformBuffer.updateFloat4(\n \"vLightHeight\",\n this._pointTransformedHeight.x / 2,\n this._pointTransformedHeight.y / 2,\n this._pointTransformedHeight.z / 2,\n 0,\n lightIndex\n );\n } else {\n this._uniformBuffer.updateFloat4(\"vLightData\", this.position.x, this.position.y, this.position.z, 0, lightIndex);\n this._uniformBuffer.updateFloat4(\"vLightWidth\", this._width.x / 2, this._width.y / 2, this._width.z / 2, 0.0, lightIndex);\n this._uniformBuffer.updateFloat4(\"vLightHeight\", this._height.x / 2, this._height.y / 2, this._height.z / 2, 0.0, lightIndex);\n }\n return this;\n }\n\n public transferToNodeMaterialEffect(effect: Effect, lightDataUniformName: string) {\n if (this._computeTransformedInformation()) {\n effect.setFloat3(lightDataUniformName, this._pointTransformedPosition.x, this._pointTransformedPosition.y, this._pointTransformedPosition.z);\n } else {\n effect.setFloat3(lightDataUniformName, this.position.x, this.position.y, this.position.z);\n }\n return this;\n }\n}\n\n// Register Class Name\nRegisterClass(\"BABYLON.RectAreaLight\", RectAreaLight);\n"]}
|
|
@@ -28,7 +28,14 @@ export declare class DefaultLoadingScreen implements ILoadingScreen {
|
|
|
28
28
|
private _renderingCanvas;
|
|
29
29
|
private _loadingText;
|
|
30
30
|
private _loadingDivBackgroundColor;
|
|
31
|
-
private
|
|
31
|
+
private _engine;
|
|
32
|
+
private _resizeObserver;
|
|
33
|
+
private _isLoading;
|
|
34
|
+
/**
|
|
35
|
+
* Maps a loading `HTMLDivElement` to a tuple containing the associated `HTMLCanvasElement`
|
|
36
|
+
* and its `DOMRect` (or `null` if not yet available).
|
|
37
|
+
*/
|
|
38
|
+
private _loadingDivToRenderingCanvasMap;
|
|
32
39
|
private _loadingTextDiv;
|
|
33
40
|
private _style;
|
|
34
41
|
/** Gets or sets the logo url to use for the default loading screen */
|
|
@@ -60,5 +67,18 @@ export declare class DefaultLoadingScreen implements ILoadingScreen {
|
|
|
60
67
|
*/
|
|
61
68
|
get loadingUIBackgroundColor(): string;
|
|
62
69
|
set loadingUIBackgroundColor(color: string);
|
|
70
|
+
/**
|
|
71
|
+
* Checks if the layout of the canvas has changed by comparing the current layout
|
|
72
|
+
* rectangle with the previous one.
|
|
73
|
+
*
|
|
74
|
+
* This function compares of the two `DOMRect` objects to determine if any of the layout dimensions have changed.
|
|
75
|
+
* If the layout has changed or if there is no previous layout (i.e., `previousCanvasRect` is `null`),
|
|
76
|
+
* it returns `true`. Otherwise, it returns `false`.
|
|
77
|
+
*
|
|
78
|
+
* @param previousCanvasRect defines the previously recorded `DOMRect` of the canvas, or `null` if no previous state exists.
|
|
79
|
+
* @param currentCanvasRect defines the current `DOMRect` of the canvas to compare against the previous layout.
|
|
80
|
+
* @returns `true` if the layout has changed, otherwise `false`.
|
|
81
|
+
*/
|
|
82
|
+
private _isCanvasLayoutChanged;
|
|
63
83
|
private _resizeLoadingUI;
|
|
64
84
|
}
|
package/Loading/loadingScreen.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AbstractEngine } from "../Engines/abstractEngine.js";
|
|
2
|
+
import { EngineStore } from "../Engines/engineStore.js";
|
|
2
3
|
/**
|
|
3
4
|
* Class used for the default loading screen
|
|
4
5
|
* @see https://doc.babylonjs.com/features/featuresDeepDive/scene/customLoadingScreen
|
|
@@ -14,38 +15,51 @@ export class DefaultLoadingScreen {
|
|
|
14
15
|
this._renderingCanvas = _renderingCanvas;
|
|
15
16
|
this._loadingText = _loadingText;
|
|
16
17
|
this._loadingDivBackgroundColor = _loadingDivBackgroundColor;
|
|
18
|
+
/**
|
|
19
|
+
* Maps a loading `HTMLDivElement` to a tuple containing the associated `HTMLCanvasElement`
|
|
20
|
+
* and its `DOMRect` (or `null` if not yet available).
|
|
21
|
+
*/
|
|
22
|
+
this._loadingDivToRenderingCanvasMap = new Map();
|
|
17
23
|
// Resize
|
|
18
24
|
this._resizeLoadingUI = () => {
|
|
19
|
-
|
|
20
|
-
const canvasPositioning = window.getComputedStyle(this._renderingCanvas).position;
|
|
21
|
-
if (!this._loadingDiv) {
|
|
25
|
+
if (!this._isLoading) {
|
|
22
26
|
return;
|
|
23
27
|
}
|
|
24
|
-
this.
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
this._loadingDivToRenderingCanvasMap.forEach(([canvas, previousCanvasRect], loadingDiv) => {
|
|
29
|
+
const currentCanvasRect = canvas.getBoundingClientRect();
|
|
30
|
+
if (this._isCanvasLayoutChanged(previousCanvasRect, currentCanvasRect)) {
|
|
31
|
+
const canvasPositioning = window.getComputedStyle(canvas).position;
|
|
32
|
+
loadingDiv.style.position = canvasPositioning === "fixed" ? "fixed" : "absolute";
|
|
33
|
+
loadingDiv.style.left = currentCanvasRect.left + "px";
|
|
34
|
+
loadingDiv.style.top = currentCanvasRect.top + "px";
|
|
35
|
+
loadingDiv.style.width = currentCanvasRect.width + "px";
|
|
36
|
+
loadingDiv.style.height = currentCanvasRect.height + "px";
|
|
37
|
+
this._loadingDivToRenderingCanvasMap.set(loadingDiv, [canvas, currentCanvasRect]);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
29
40
|
};
|
|
30
41
|
}
|
|
31
42
|
/**
|
|
32
43
|
* Function called to display the loading screen
|
|
33
44
|
*/
|
|
34
45
|
displayLoadingUI() {
|
|
35
|
-
if (this.
|
|
36
|
-
// Do not add a loading screen if
|
|
46
|
+
if (this._isLoading) {
|
|
47
|
+
// Do not add a loading screen if it is already loading
|
|
37
48
|
return;
|
|
38
49
|
}
|
|
39
|
-
this.
|
|
40
|
-
|
|
41
|
-
this.
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
50
|
+
this._isLoading = true;
|
|
51
|
+
// get current engine by rendering canvas
|
|
52
|
+
this._engine = EngineStore.Instances.find((engine) => engine.getRenderingCanvas() === this._renderingCanvas);
|
|
53
|
+
const loadingDiv = document.createElement("div");
|
|
54
|
+
loadingDiv.id = "babylonjsLoadingDiv";
|
|
55
|
+
loadingDiv.style.opacity = "0";
|
|
56
|
+
loadingDiv.style.transition = "opacity 1.5s ease";
|
|
57
|
+
loadingDiv.style.pointerEvents = "none";
|
|
58
|
+
loadingDiv.style.display = "grid";
|
|
59
|
+
loadingDiv.style.gridTemplateRows = "100%";
|
|
60
|
+
loadingDiv.style.gridTemplateColumns = "100%";
|
|
61
|
+
loadingDiv.style.justifyItems = "center";
|
|
62
|
+
loadingDiv.style.alignItems = "center";
|
|
49
63
|
// Loading text
|
|
50
64
|
this._loadingTextDiv = document.createElement("div");
|
|
51
65
|
this._loadingTextDiv.style.position = "absolute";
|
|
@@ -60,20 +74,20 @@ export class DefaultLoadingScreen {
|
|
|
60
74
|
this._loadingTextDiv.style.textAlign = "center";
|
|
61
75
|
this._loadingTextDiv.style.zIndex = "1";
|
|
62
76
|
this._loadingTextDiv.innerHTML = "Loading";
|
|
63
|
-
|
|
77
|
+
loadingDiv.appendChild(this._loadingTextDiv);
|
|
64
78
|
//set the predefined text
|
|
65
79
|
this._loadingTextDiv.innerHTML = this._loadingText;
|
|
66
80
|
// Generating keyframes
|
|
67
81
|
this._style = document.createElement("style");
|
|
68
82
|
this._style.type = "text/css";
|
|
69
83
|
const keyFrames = `@-webkit-keyframes spin1 {\
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
84
|
+
0% { -webkit-transform: rotate(0deg);}
|
|
85
|
+
100% { -webkit-transform: rotate(360deg);}
|
|
86
|
+
}\
|
|
87
|
+
@keyframes spin1 {\
|
|
88
|
+
0% { transform: rotate(0deg);}
|
|
89
|
+
100% { transform: rotate(360deg);}
|
|
90
|
+
}`;
|
|
77
91
|
this._style.innerHTML = keyFrames;
|
|
78
92
|
document.getElementsByTagName("head")[0].appendChild(this._style);
|
|
79
93
|
const svgSupport = !!window.SVGSVGElement;
|
|
@@ -128,38 +142,72 @@ export class DefaultLoadingScreen {
|
|
|
128
142
|
imgSpinner.style.top = `calc(50% - ${loadingSize.h / 2}vh)`;
|
|
129
143
|
}
|
|
130
144
|
imageSpinnerContainer.appendChild(imgSpinner);
|
|
131
|
-
|
|
132
|
-
|
|
145
|
+
loadingDiv.appendChild(imgBack);
|
|
146
|
+
loadingDiv.appendChild(imageSpinnerContainer);
|
|
147
|
+
loadingDiv.style.backgroundColor = this._loadingDivBackgroundColor;
|
|
148
|
+
loadingDiv.style.opacity = "1";
|
|
149
|
+
const canvases = [];
|
|
150
|
+
const views = this._engine.views;
|
|
151
|
+
if (views?.length) {
|
|
152
|
+
for (const view of views) {
|
|
153
|
+
if (view.enabled) {
|
|
154
|
+
canvases.push(view.target);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
canvases.push(this._renderingCanvas);
|
|
160
|
+
}
|
|
161
|
+
canvases.forEach((canvas, index) => {
|
|
162
|
+
const clonedLoadingDiv = loadingDiv.cloneNode(true);
|
|
163
|
+
clonedLoadingDiv.id += `-${index}`;
|
|
164
|
+
this._loadingDivToRenderingCanvasMap.set(clonedLoadingDiv, [canvas, null]);
|
|
165
|
+
});
|
|
133
166
|
this._resizeLoadingUI();
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
this.
|
|
167
|
+
this._resizeObserver = this._engine.onResizeObservable.add(() => {
|
|
168
|
+
this._resizeLoadingUI();
|
|
169
|
+
});
|
|
170
|
+
this._loadingDivToRenderingCanvasMap.forEach((_, loadingDiv) => {
|
|
171
|
+
document.body.appendChild(loadingDiv);
|
|
172
|
+
});
|
|
138
173
|
}
|
|
139
174
|
/**
|
|
140
175
|
* Function called to hide the loading screen
|
|
141
176
|
*/
|
|
142
177
|
hideLoadingUI() {
|
|
143
|
-
if (!this.
|
|
178
|
+
if (!this._isLoading) {
|
|
144
179
|
return;
|
|
145
180
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
if (
|
|
152
|
-
|
|
153
|
-
|
|
181
|
+
let completedTransitions = 0;
|
|
182
|
+
const onTransitionEnd = (event) => {
|
|
183
|
+
const loadingDiv = event.target;
|
|
184
|
+
// ensure that ending transition event is generated by one of the current loadingDivs
|
|
185
|
+
const isTransitionEndOnLoadingDiv = this._loadingDivToRenderingCanvasMap.has(loadingDiv);
|
|
186
|
+
if (isTransitionEndOnLoadingDiv) {
|
|
187
|
+
completedTransitions++;
|
|
188
|
+
loadingDiv.remove();
|
|
189
|
+
const allTransitionsCompleted = completedTransitions === this._loadingDivToRenderingCanvasMap.size;
|
|
190
|
+
if (allTransitionsCompleted) {
|
|
191
|
+
if (this._loadingTextDiv) {
|
|
192
|
+
this._loadingTextDiv.remove();
|
|
193
|
+
this._loadingTextDiv = null;
|
|
194
|
+
}
|
|
195
|
+
if (this._style) {
|
|
196
|
+
this._style.remove();
|
|
197
|
+
this._style = null;
|
|
198
|
+
}
|
|
199
|
+
window.removeEventListener("transitionend", onTransitionEnd);
|
|
200
|
+
this._engine.onResizeObservable.remove(this._resizeObserver);
|
|
201
|
+
this._loadingDivToRenderingCanvasMap.clear();
|
|
202
|
+
this._engine = null;
|
|
203
|
+
this._isLoading = false;
|
|
204
|
+
}
|
|
154
205
|
}
|
|
155
|
-
if (this._style) {
|
|
156
|
-
this._style.remove();
|
|
157
|
-
this._style = null;
|
|
158
|
-
}
|
|
159
|
-
window.removeEventListener("resize", this._resizeLoadingUI);
|
|
160
206
|
};
|
|
161
|
-
this.
|
|
162
|
-
|
|
207
|
+
this._loadingDivToRenderingCanvasMap.forEach((_, loadingDiv) => {
|
|
208
|
+
loadingDiv.style.opacity = "0";
|
|
209
|
+
});
|
|
210
|
+
window.addEventListener("transitionend", onTransitionEnd);
|
|
163
211
|
}
|
|
164
212
|
/**
|
|
165
213
|
* Gets or sets the text to display while loading
|
|
@@ -181,10 +229,35 @@ export class DefaultLoadingScreen {
|
|
|
181
229
|
}
|
|
182
230
|
set loadingUIBackgroundColor(color) {
|
|
183
231
|
this._loadingDivBackgroundColor = color;
|
|
184
|
-
if (!this.
|
|
232
|
+
if (!this._isLoading) {
|
|
185
233
|
return;
|
|
186
234
|
}
|
|
187
|
-
this.
|
|
235
|
+
this._loadingDivToRenderingCanvasMap.forEach((_, loadingDiv) => {
|
|
236
|
+
loadingDiv.style.backgroundColor = this._loadingDivBackgroundColor;
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Checks if the layout of the canvas has changed by comparing the current layout
|
|
241
|
+
* rectangle with the previous one.
|
|
242
|
+
*
|
|
243
|
+
* This function compares of the two `DOMRect` objects to determine if any of the layout dimensions have changed.
|
|
244
|
+
* If the layout has changed or if there is no previous layout (i.e., `previousCanvasRect` is `null`),
|
|
245
|
+
* it returns `true`. Otherwise, it returns `false`.
|
|
246
|
+
*
|
|
247
|
+
* @param previousCanvasRect defines the previously recorded `DOMRect` of the canvas, or `null` if no previous state exists.
|
|
248
|
+
* @param currentCanvasRect defines the current `DOMRect` of the canvas to compare against the previous layout.
|
|
249
|
+
* @returns `true` if the layout has changed, otherwise `false`.
|
|
250
|
+
*/
|
|
251
|
+
_isCanvasLayoutChanged(previousCanvasRect, currentCanvasRect) {
|
|
252
|
+
return (!previousCanvasRect ||
|
|
253
|
+
previousCanvasRect.left !== currentCanvasRect.left ||
|
|
254
|
+
previousCanvasRect.top !== currentCanvasRect.top ||
|
|
255
|
+
previousCanvasRect.right !== currentCanvasRect.right ||
|
|
256
|
+
previousCanvasRect.bottom !== currentCanvasRect.bottom ||
|
|
257
|
+
previousCanvasRect.width !== currentCanvasRect.width ||
|
|
258
|
+
previousCanvasRect.height !== currentCanvasRect.height ||
|
|
259
|
+
previousCanvasRect.x !== currentCanvasRect.x ||
|
|
260
|
+
previousCanvasRect.y !== currentCanvasRect.y);
|
|
188
261
|
}
|
|
189
262
|
}
|
|
190
263
|
/** Gets or sets the logo url to use for the default loading screen */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadingScreen.js","sourceRoot":"","sources":["../../../../dev/core/src/Loading/loadingScreen.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { AbstractEngine } from \"../Engines/abstractEngine\";\r\n/**\r\n * Interface used to present a loading screen while loading a scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/customLoadingScreen\r\n */\r\nexport interface ILoadingScreen {\r\n /**\r\n * Function called to display the loading screen\r\n */\r\n displayLoadingUI: () => void;\r\n /**\r\n * Function called to hide the loading screen\r\n */\r\n hideLoadingUI: () => void;\r\n /**\r\n * Gets or sets the color to use for the background\r\n */\r\n loadingUIBackgroundColor: string;\r\n /**\r\n * Gets or sets the text to display while loading\r\n */\r\n loadingUIText: string;\r\n}\r\n\r\n/**\r\n * Class used for the default loading screen\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/customLoadingScreen\r\n */\r\nexport class DefaultLoadingScreen implements ILoadingScreen {\r\n private _loadingDiv: Nullable<HTMLDivElement>;\r\n private _loadingTextDiv: Nullable<HTMLDivElement>;\r\n private _style: Nullable<HTMLStyleElement>;\r\n\r\n /** Gets or sets the logo url to use for the default loading screen */\r\n public static DefaultLogoUrl = \"\";\r\n\r\n /** Gets or sets the spinner url to use for the default loading screen */\r\n public static DefaultSpinnerUrl = \"\";\r\n\r\n /**\r\n * Creates a new default loading screen\r\n * @param _renderingCanvas defines the canvas used to render the scene\r\n * @param _loadingText defines the default text to display\r\n * @param _loadingDivBackgroundColor defines the default background color\r\n */\r\n constructor(\r\n private _renderingCanvas: HTMLCanvasElement,\r\n private _loadingText = \"\",\r\n private _loadingDivBackgroundColor = \"black\"\r\n ) {}\r\n\r\n /**\r\n * Function called to display the loading screen\r\n */\r\n public displayLoadingUI(): void {\r\n if (this._loadingDiv) {\r\n // Do not add a loading screen if there is already one\r\n return;\r\n }\r\n\r\n this._loadingDiv = document.createElement(\"div\");\r\n\r\n this._loadingDiv.id = \"babylonjsLoadingDiv\";\r\n this._loadingDiv.style.opacity = \"0\";\r\n this._loadingDiv.style.transition = \"opacity 1.5s ease\";\r\n this._loadingDiv.style.pointerEvents = \"none\";\r\n this._loadingDiv.style.display = \"grid\";\r\n this._loadingDiv.style.gridTemplateRows = \"100%\";\r\n this._loadingDiv.style.gridTemplateColumns = \"100%\";\r\n this._loadingDiv.style.justifyItems = \"center\";\r\n this._loadingDiv.style.alignItems = \"center\";\r\n\r\n // Loading text\r\n this._loadingTextDiv = document.createElement(\"div\");\r\n this._loadingTextDiv.style.position = \"absolute\";\r\n this._loadingTextDiv.style.left = \"0\";\r\n this._loadingTextDiv.style.top = \"50%\";\r\n this._loadingTextDiv.style.marginTop = \"80px\";\r\n this._loadingTextDiv.style.width = \"100%\";\r\n this._loadingTextDiv.style.height = \"20px\";\r\n this._loadingTextDiv.style.fontFamily = \"Arial\";\r\n this._loadingTextDiv.style.fontSize = \"14px\";\r\n this._loadingTextDiv.style.color = \"white\";\r\n this._loadingTextDiv.style.textAlign = \"center\";\r\n this._loadingTextDiv.style.zIndex = \"1\";\r\n this._loadingTextDiv.innerHTML = \"Loading\";\r\n\r\n this._loadingDiv.appendChild(this._loadingTextDiv);\r\n\r\n //set the predefined text\r\n this._loadingTextDiv.innerHTML = this._loadingText;\r\n\r\n // Generating keyframes\r\n this._style = document.createElement(\"style\");\r\n this._style.type = \"text/css\";\r\n const keyFrames = `@-webkit-keyframes spin1 {\\\r\n 0% { -webkit-transform: rotate(0deg);}\r\n 100% { -webkit-transform: rotate(360deg);}\r\n }\\\r\n @keyframes spin1 {\\\r\n 0% { transform: rotate(0deg);}\r\n 100% { transform: rotate(360deg);}\r\n }`;\r\n this._style.innerHTML = keyFrames;\r\n document.getElementsByTagName(\"head\")[0].appendChild(this._style);\r\n\r\n const svgSupport = !!window.SVGSVGElement;\r\n // Loading img\r\n const imgBack = new Image();\r\n if (!DefaultLoadingScreen.DefaultLogoUrl) {\r\n imgBack.src = !svgSupport\r\n ? \"https://cdn.babylonjs.com/Assets/babylonLogo.png\"\r\n : `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxODAuMTcgMjA4LjA0Ij48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2ZmZjt9LmNscy0ye2ZpbGw6I2UwNjg0Yjt9LmNscy0ze2ZpbGw6I2JiNDY0Yjt9LmNscy00e2ZpbGw6I2UwZGVkODt9LmNscy01e2ZpbGw6I2Q1ZDJjYTt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPkJhYnlsb25Mb2dvPC90aXRsZT48ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIj48ZyBpZD0iUGFnZV9FbGVtZW50cyIgZGF0YS1uYW1lPSJQYWdlIEVsZW1lbnRzIj48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik05MC4wOSwwLDAsNTJWMTU2bDkwLjA5LDUyLDkwLjA4LTUyVjUyWiIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMiIgcG9pbnRzPSIxODAuMTcgNTIuMDEgMTUxLjk3IDM1LjczIDEyNC44NSA1MS4zOSAxNTMuMDUgNjcuNjcgMTgwLjE3IDUyLjAxIi8+PHBvbHlnb24gY2xhc3M9ImNscy0yIiBwb2ludHM9IjI3LjEyIDY3LjY3IDExNy4yMSAxNS42NiA5MC4wOCAwIDAgNTIuMDEgMjcuMTIgNjcuNjciLz48cG9seWdvbiBjbGFzcz0iY2xzLTIiIHBvaW50cz0iNjEuODkgMTIwLjMgOTAuMDggMTM2LjU4IDExOC4yOCAxMjAuMyA5MC4wOCAxMDQuMDIgNjEuODkgMTIwLjMiLz48cG9seWdvbiBjbGFzcz0iY2xzLTMiIHBvaW50cz0iMTUzLjA1IDY3LjY3IDE1My4wNSAxNDAuMzcgOTAuMDggMTc2LjcyIDI3LjEyIDE0MC4zNyAyNy4xMiA2Ny42NyAwIDUyLjAxIDAgMTU2LjAzIDkwLjA4IDIwOC4wNCAxODAuMTcgMTU2LjAzIDE4MC4xNyA1Mi4wMSAxNTMuMDUgNjcuNjciLz48cG9seWdvbiBjbGFzcz0iY2xzLTMiIHBvaW50cz0iOTAuMDggNzEuNDYgNjEuODkgODcuNzQgNjEuODkgMTIwLjMgOTAuMDggMTA0LjAyIDExOC4yOCAxMjAuMyAxMTguMjggODcuNzQgOTAuMDggNzEuNDYiLz48cG9seWdvbiBjbGFzcz0iY2xzLTQiIHBvaW50cz0iMTUzLjA1IDY3LjY3IDExOC4yOCA4Ny43NCAxMTguMjggMTIwLjMgOTAuMDggMTM2LjU4IDkwLjA4IDE3Ni43MiAxNTMuMDUgMTQwLjM3IDE1My4wNSA2Ny42NyIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtNSIgcG9pbnRzPSIyNy4xMiA2Ny42NyA2MS44OSA4Ny43NCA2MS44OSAxMjAuMyA5MC4wOCAxMzYuNTggOTAuMDggMTc2LjcyIDI3LjEyIDE0MC4zNyAyNy4xMiA2Ny42NyIvPjwvZz48L2c+PC9zdmc+`;\r\n } else {\r\n imgBack.src = DefaultLoadingScreen.DefaultLogoUrl;\r\n }\r\n\r\n imgBack.style.width = \"150px\";\r\n imgBack.style.gridColumn = \"1\";\r\n imgBack.style.gridRow = \"1\";\r\n imgBack.style.top = \"50%\";\r\n imgBack.style.left = \"50%\";\r\n imgBack.style.transform = \"translate(-50%, -50%)\";\r\n imgBack.style.position = \"absolute\";\r\n\r\n const imageSpinnerContainer = document.createElement(\"div\");\r\n imageSpinnerContainer.style.width = \"300px\";\r\n imageSpinnerContainer.style.gridColumn = \"1\";\r\n imageSpinnerContainer.style.gridRow = \"1\";\r\n imageSpinnerContainer.style.top = \"50%\";\r\n imageSpinnerContainer.style.left = \"50%\";\r\n imageSpinnerContainer.style.transform = \"translate(-50%, -50%)\";\r\n imageSpinnerContainer.style.position = \"absolute\";\r\n\r\n // Loading spinner\r\n const imgSpinner = new Image();\r\n\r\n if (!DefaultLoadingScreen.DefaultSpinnerUrl) {\r\n imgSpinner.src = !svgSupport\r\n ? \"https://cdn.babylonjs.com/Assets/loadingIcon.png\"\r\n : `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzOTIgMzkyIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2UwNjg0Yjt9LmNscy0ye2ZpbGw6bm9uZTt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPlNwaW5uZXJJY29uPC90aXRsZT48ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIj48ZyBpZD0iU3Bpbm5lciI+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNNDAuMjEsMTI2LjQzYzMuNy03LjMxLDcuNjctMTQuNDQsMTItMjEuMzJsMy4zNi01LjEsMy41Mi01YzEuMjMtMS42MywyLjQxLTMuMjksMy42NS00LjkxczIuNTMtMy4yMSwzLjgyLTQuNzlBMTg1LjIsMTg1LjIsMCwwLDEsODMuNCw2Ny40M2EyMDgsMjA4LDAsMCwxLDE5LTE1LjY2YzMuMzUtMi40MSw2Ljc0LTQuNzgsMTAuMjUtN3M3LjExLTQuMjgsMTAuNzUtNi4zMmM3LjI5LTQsMTQuNzMtOCwyMi41My0xMS40OSwzLjktMS43Miw3Ljg4LTMuMywxMi00LjY0YTEwNC4yMiwxMDQuMjIsMCwwLDEsMTIuNDQtMy4yMyw2Mi40NCw2Mi40NCwwLDAsMSwxMi43OC0xLjM5QTI1LjkyLDI1LjkyLDAsMCwxLDE5NiwyMS40NGE2LjU1LDYuNTUsMCwwLDEsMi4wNSw5LDYuNjYsNi42NiwwLDAsMS0xLjY0LDEuNzhsLS40MS4yOWEyMi4wNywyMi4wNywwLDAsMS01Ljc4LDMsMzAuNDIsMzAuNDIsMCwwLDEtNS42NywxLjYyLDM3LjgyLDM3LjgyLDAsMCwxLTUuNjkuNzFjLTEsMC0xLjkuMTgtMi44NS4yNmwtMi44NS4yNHEtNS43Mi41MS0xMS40OCwxLjFjLTMuODQuNC03LjcxLjgyLTExLjU4LDEuNGExMTIuMzQsMTEyLjM0LDAsMCwwLTIyLjk0LDUuNjFjLTMuNzIsMS4zNS03LjM0LDMtMTAuOTQsNC42NHMtNy4xNCwzLjUxLTEwLjYsNS41MUExNTEuNiwxNTEuNiwwLDAsMCw2OC41Niw4N0M2Ny4yMyw4OC40OCw2Niw5MCw2NC42NCw5MS41NnMtMi41MSwzLjE1LTMuNzUsNC43M2wtMy41NCw0LjljLTEuMTMsMS42Ni0yLjIzLDMuMzUtMy4zMyw1YTEyNywxMjcsMCwwLDAtMTAuOTMsMjEuNDksMS41OCwxLjU4LDAsMSwxLTMtMS4xNVM0MC4xOSwxMjYuNDcsNDAuMjEsMTI2LjQzWiIvPjxyZWN0IGNsYXNzPSJjbHMtMiIgd2lkdGg9IjM5MiIgaGVpZ2h0PSIzOTIiLz48L2c+PC9nPjwvc3ZnPg==`;\r\n } else {\r\n imgSpinner.src = DefaultLoadingScreen.DefaultSpinnerUrl;\r\n }\r\n\r\n imgSpinner.style.animation = \"spin1 0.75s infinite linear\";\r\n imgSpinner.style.transformOrigin = \"50% 50%\";\r\n\r\n if (!svgSupport) {\r\n const logoSize = { w: 16, h: 18.5 };\r\n const loadingSize = { w: 30, h: 30 };\r\n // set styling correctly\r\n imgBack.style.width = `${logoSize.w}vh`;\r\n imgBack.style.height = `${logoSize.h}vh`;\r\n imgBack.style.left = `calc(50% - ${logoSize.w / 2}vh)`;\r\n imgBack.style.top = `calc(50% - ${logoSize.h / 2}vh)`;\r\n\r\n imgSpinner.style.width = `${loadingSize.w}vh`;\r\n imgSpinner.style.height = `${loadingSize.h}vh`;\r\n imgSpinner.style.left = `calc(50% - ${loadingSize.w / 2}vh)`;\r\n imgSpinner.style.top = `calc(50% - ${loadingSize.h / 2}vh)`;\r\n }\r\n\r\n imageSpinnerContainer.appendChild(imgSpinner);\r\n\r\n this._loadingDiv.appendChild(imgBack);\r\n this._loadingDiv.appendChild(imageSpinnerContainer);\r\n\r\n this._resizeLoadingUI();\r\n\r\n window.addEventListener(\"resize\", this._resizeLoadingUI);\r\n\r\n this._loadingDiv.style.backgroundColor = this._loadingDivBackgroundColor;\r\n document.body.appendChild(this._loadingDiv);\r\n\r\n this._loadingDiv.style.opacity = \"1\";\r\n }\r\n\r\n /**\r\n * Function called to hide the loading screen\r\n */\r\n public hideLoadingUI(): void {\r\n if (!this._loadingDiv) {\r\n return;\r\n }\r\n\r\n const onTransitionEnd = () => {\r\n if (this._loadingTextDiv) {\r\n this._loadingTextDiv.remove();\r\n this._loadingTextDiv = null;\r\n }\r\n if (this._loadingDiv) {\r\n this._loadingDiv.remove();\r\n this._loadingDiv = null;\r\n }\r\n if (this._style) {\r\n this._style.remove();\r\n this._style = null;\r\n }\r\n window.removeEventListener(\"resize\", this._resizeLoadingUI);\r\n };\r\n\r\n this._loadingDiv.style.opacity = \"0\";\r\n this._loadingDiv.addEventListener(\"transitionend\", onTransitionEnd);\r\n }\r\n\r\n /**\r\n * Gets or sets the text to display while loading\r\n */\r\n public set loadingUIText(text: string) {\r\n this._loadingText = text;\r\n\r\n if (this._loadingTextDiv) {\r\n this._loadingTextDiv.innerHTML = this._loadingText;\r\n }\r\n }\r\n\r\n public get loadingUIText(): string {\r\n return this._loadingText;\r\n }\r\n\r\n /**\r\n * Gets or sets the color to use for the background\r\n */\r\n public get loadingUIBackgroundColor(): string {\r\n return this._loadingDivBackgroundColor;\r\n }\r\n\r\n public set loadingUIBackgroundColor(color: string) {\r\n this._loadingDivBackgroundColor = color;\r\n\r\n if (!this._loadingDiv) {\r\n return;\r\n }\r\n\r\n this._loadingDiv.style.backgroundColor = this._loadingDivBackgroundColor;\r\n }\r\n\r\n // Resize\r\n private _resizeLoadingUI = () => {\r\n const canvasRect = this._renderingCanvas.getBoundingClientRect();\r\n const canvasPositioning = window.getComputedStyle(this._renderingCanvas).position;\r\n\r\n if (!this._loadingDiv) {\r\n return;\r\n }\r\n\r\n this._loadingDiv.style.position = canvasPositioning === \"fixed\" ? \"fixed\" : \"absolute\";\r\n this._loadingDiv.style.left = canvasRect.left + \"px\";\r\n this._loadingDiv.style.top = canvasRect.top + \"px\";\r\n this._loadingDiv.style.width = canvasRect.width + \"px\";\r\n this._loadingDiv.style.height = canvasRect.height + \"px\";\r\n };\r\n}\r\n\r\nAbstractEngine.DefaultLoadingScreenFactory = (canvas: HTMLCanvasElement) => {\r\n return new DefaultLoadingScreen(canvas);\r\n};\r\n"]}
|
|
1
|
+
{"version":3,"file":"loadingScreen.js","sourceRoot":"","sources":["../../../../dev/core/src/Loading/loadingScreen.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { Observer } from \"../Misc/observable\";\r\n/**\r\n * Interface used to present a loading screen while loading a scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/customLoadingScreen\r\n */\r\nexport interface ILoadingScreen {\r\n /**\r\n * Function called to display the loading screen\r\n */\r\n displayLoadingUI: () => void;\r\n /**\r\n * Function called to hide the loading screen\r\n */\r\n hideLoadingUI: () => void;\r\n /**\r\n * Gets or sets the color to use for the background\r\n */\r\n loadingUIBackgroundColor: string;\r\n /**\r\n * Gets or sets the text to display while loading\r\n */\r\n loadingUIText: string;\r\n}\r\n\r\n/**\r\n * Class used for the default loading screen\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/customLoadingScreen\r\n */\r\nexport class DefaultLoadingScreen implements ILoadingScreen {\r\n private _engine: Nullable<AbstractEngine>;\r\n private _resizeObserver: Nullable<Observer<AbstractEngine>>;\r\n private _isLoading: boolean;\r\n /**\r\n * Maps a loading `HTMLDivElement` to a tuple containing the associated `HTMLCanvasElement`\r\n * and its `DOMRect` (or `null` if not yet available).\r\n */\r\n private _loadingDivToRenderingCanvasMap: Map<HTMLDivElement, [HTMLCanvasElement, DOMRect | null]> = new Map();\r\n private _loadingTextDiv: Nullable<HTMLDivElement>;\r\n private _style: Nullable<HTMLStyleElement>;\r\n\r\n /** Gets or sets the logo url to use for the default loading screen */\r\n public static DefaultLogoUrl = \"\";\r\n\r\n /** Gets or sets the spinner url to use for the default loading screen */\r\n public static DefaultSpinnerUrl = \"\";\r\n\r\n /**\r\n * Creates a new default loading screen\r\n * @param _renderingCanvas defines the canvas used to render the scene\r\n * @param _loadingText defines the default text to display\r\n * @param _loadingDivBackgroundColor defines the default background color\r\n */\r\n constructor(\r\n private _renderingCanvas: HTMLCanvasElement,\r\n private _loadingText = \"\",\r\n private _loadingDivBackgroundColor = \"black\"\r\n ) {}\r\n\r\n /**\r\n * Function called to display the loading screen\r\n */\r\n public displayLoadingUI(): void {\r\n if (this._isLoading) {\r\n // Do not add a loading screen if it is already loading\r\n return;\r\n }\r\n\r\n this._isLoading = true;\r\n // get current engine by rendering canvas\r\n this._engine = EngineStore.Instances.find((engine) => engine.getRenderingCanvas() === this._renderingCanvas) as AbstractEngine;\r\n\r\n const loadingDiv = document.createElement(\"div\");\r\n\r\n loadingDiv.id = \"babylonjsLoadingDiv\";\r\n loadingDiv.style.opacity = \"0\";\r\n loadingDiv.style.transition = \"opacity 1.5s ease\";\r\n loadingDiv.style.pointerEvents = \"none\";\r\n loadingDiv.style.display = \"grid\";\r\n loadingDiv.style.gridTemplateRows = \"100%\";\r\n loadingDiv.style.gridTemplateColumns = \"100%\";\r\n loadingDiv.style.justifyItems = \"center\";\r\n loadingDiv.style.alignItems = \"center\";\r\n\r\n // Loading text\r\n this._loadingTextDiv = document.createElement(\"div\");\r\n this._loadingTextDiv.style.position = \"absolute\";\r\n this._loadingTextDiv.style.left = \"0\";\r\n this._loadingTextDiv.style.top = \"50%\";\r\n this._loadingTextDiv.style.marginTop = \"80px\";\r\n this._loadingTextDiv.style.width = \"100%\";\r\n this._loadingTextDiv.style.height = \"20px\";\r\n this._loadingTextDiv.style.fontFamily = \"Arial\";\r\n this._loadingTextDiv.style.fontSize = \"14px\";\r\n this._loadingTextDiv.style.color = \"white\";\r\n this._loadingTextDiv.style.textAlign = \"center\";\r\n this._loadingTextDiv.style.zIndex = \"1\";\r\n this._loadingTextDiv.innerHTML = \"Loading\";\r\n\r\n loadingDiv.appendChild(this._loadingTextDiv);\r\n\r\n //set the predefined text\r\n this._loadingTextDiv.innerHTML = this._loadingText;\r\n\r\n // Generating keyframes\r\n this._style = document.createElement(\"style\");\r\n this._style.type = \"text/css\";\r\n const keyFrames = `@-webkit-keyframes spin1 {\\\r\n 0% { -webkit-transform: rotate(0deg);}\r\n 100% { -webkit-transform: rotate(360deg);}\r\n }\\\r\n @keyframes spin1 {\\\r\n 0% { transform: rotate(0deg);}\r\n 100% { transform: rotate(360deg);}\r\n }`;\r\n this._style.innerHTML = keyFrames;\r\n document.getElementsByTagName(\"head\")[0].appendChild(this._style);\r\n\r\n const svgSupport = !!window.SVGSVGElement;\r\n // Loading img\r\n const imgBack = new Image();\r\n if (!DefaultLoadingScreen.DefaultLogoUrl) {\r\n imgBack.src = !svgSupport\r\n ? \"https://cdn.babylonjs.com/Assets/babylonLogo.png\"\r\n : `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxODAuMTcgMjA4LjA0Ij48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2ZmZjt9LmNscy0ye2ZpbGw6I2UwNjg0Yjt9LmNscy0ze2ZpbGw6I2JiNDY0Yjt9LmNscy00e2ZpbGw6I2UwZGVkODt9LmNscy01e2ZpbGw6I2Q1ZDJjYTt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPkJhYnlsb25Mb2dvPC90aXRsZT48ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIj48ZyBpZD0iUGFnZV9FbGVtZW50cyIgZGF0YS1uYW1lPSJQYWdlIEVsZW1lbnRzIj48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik05MC4wOSwwLDAsNTJWMTU2bDkwLjA5LDUyLDkwLjA4LTUyVjUyWiIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMiIgcG9pbnRzPSIxODAuMTcgNTIuMDEgMTUxLjk3IDM1LjczIDEyNC44NSA1MS4zOSAxNTMuMDUgNjcuNjcgMTgwLjE3IDUyLjAxIi8+PHBvbHlnb24gY2xhc3M9ImNscy0yIiBwb2ludHM9IjI3LjEyIDY3LjY3IDExNy4yMSAxNS42NiA5MC4wOCAwIDAgNTIuMDEgMjcuMTIgNjcuNjciLz48cG9seWdvbiBjbGFzcz0iY2xzLTIiIHBvaW50cz0iNjEuODkgMTIwLjMgOTAuMDggMTM2LjU4IDExOC4yOCAxMjAuMyA5MC4wOCAxMDQuMDIgNjEuODkgMTIwLjMiLz48cG9seWdvbiBjbGFzcz0iY2xzLTMiIHBvaW50cz0iMTUzLjA1IDY3LjY3IDE1My4wNSAxNDAuMzcgOTAuMDggMTc2LjcyIDI3LjEyIDE0MC4zNyAyNy4xMiA2Ny42NyAwIDUyLjAxIDAgMTU2LjAzIDkwLjA4IDIwOC4wNCAxODAuMTcgMTU2LjAzIDE4MC4xNyA1Mi4wMSAxNTMuMDUgNjcuNjciLz48cG9seWdvbiBjbGFzcz0iY2xzLTMiIHBvaW50cz0iOTAuMDggNzEuNDYgNjEuODkgODcuNzQgNjEuODkgMTIwLjMgOTAuMDggMTA0LjAyIDExOC4yOCAxMjAuMyAxMTguMjggODcuNzQgOTAuMDggNzEuNDYiLz48cG9seWdvbiBjbGFzcz0iY2xzLTQiIHBvaW50cz0iMTUzLjA1IDY3LjY3IDExOC4yOCA4Ny43NCAxMTguMjggMTIwLjMgOTAuMDggMTM2LjU4IDkwLjA4IDE3Ni43MiAxNTMuMDUgMTQwLjM3IDE1My4wNSA2Ny42NyIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtNSIgcG9pbnRzPSIyNy4xMiA2Ny42NyA2MS44OSA4Ny43NCA2MS44OSAxMjAuMyA5MC4wOCAxMzYuNTggOTAuMDggMTc2LjcyIDI3LjEyIDE0MC4zNyAyNy4xMiA2Ny42NyIvPjwvZz48L2c+PC9zdmc+`;\r\n } else {\r\n imgBack.src = DefaultLoadingScreen.DefaultLogoUrl;\r\n }\r\n\r\n imgBack.style.width = \"150px\";\r\n imgBack.style.gridColumn = \"1\";\r\n imgBack.style.gridRow = \"1\";\r\n imgBack.style.top = \"50%\";\r\n imgBack.style.left = \"50%\";\r\n imgBack.style.transform = \"translate(-50%, -50%)\";\r\n imgBack.style.position = \"absolute\";\r\n\r\n const imageSpinnerContainer = document.createElement(\"div\");\r\n imageSpinnerContainer.style.width = \"300px\";\r\n imageSpinnerContainer.style.gridColumn = \"1\";\r\n imageSpinnerContainer.style.gridRow = \"1\";\r\n imageSpinnerContainer.style.top = \"50%\";\r\n imageSpinnerContainer.style.left = \"50%\";\r\n imageSpinnerContainer.style.transform = \"translate(-50%, -50%)\";\r\n imageSpinnerContainer.style.position = \"absolute\";\r\n\r\n // Loading spinner\r\n const imgSpinner = new Image();\r\n\r\n if (!DefaultLoadingScreen.DefaultSpinnerUrl) {\r\n imgSpinner.src = !svgSupport\r\n ? \"https://cdn.babylonjs.com/Assets/loadingIcon.png\"\r\n : `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzOTIgMzkyIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2UwNjg0Yjt9LmNscy0ye2ZpbGw6bm9uZTt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPlNwaW5uZXJJY29uPC90aXRsZT48ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIj48ZyBpZD0iU3Bpbm5lciI+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNNDAuMjEsMTI2LjQzYzMuNy03LjMxLDcuNjctMTQuNDQsMTItMjEuMzJsMy4zNi01LjEsMy41Mi01YzEuMjMtMS42MywyLjQxLTMuMjksMy42NS00LjkxczIuNTMtMy4yMSwzLjgyLTQuNzlBMTg1LjIsMTg1LjIsMCwwLDEsODMuNCw2Ny40M2EyMDgsMjA4LDAsMCwxLDE5LTE1LjY2YzMuMzUtMi40MSw2Ljc0LTQuNzgsMTAuMjUtN3M3LjExLTQuMjgsMTAuNzUtNi4zMmM3LjI5LTQsMTQuNzMtOCwyMi41My0xMS40OSwzLjktMS43Miw3Ljg4LTMuMywxMi00LjY0YTEwNC4yMiwxMDQuMjIsMCwwLDEsMTIuNDQtMy4yMyw2Mi40NCw2Mi40NCwwLDAsMSwxMi43OC0xLjM5QTI1LjkyLDI1LjkyLDAsMCwxLDE5NiwyMS40NGE2LjU1LDYuNTUsMCwwLDEsMi4wNSw5LDYuNjYsNi42NiwwLDAsMS0xLjY0LDEuNzhsLS40MS4yOWEyMi4wNywyMi4wNywwLDAsMS01Ljc4LDMsMzAuNDIsMzAuNDIsMCwwLDEtNS42NywxLjYyLDM3LjgyLDM3LjgyLDAsMCwxLTUuNjkuNzFjLTEsMC0xLjkuMTgtMi44NS4yNmwtMi44NS4yNHEtNS43Mi41MS0xMS40OCwxLjFjLTMuODQuNC03LjcxLjgyLTExLjU4LDEuNGExMTIuMzQsMTEyLjM0LDAsMCwwLTIyLjk0LDUuNjFjLTMuNzIsMS4zNS03LjM0LDMtMTAuOTQsNC42NHMtNy4xNCwzLjUxLTEwLjYsNS41MUExNTEuNiwxNTEuNiwwLDAsMCw2OC41Niw4N0M2Ny4yMyw4OC40OCw2Niw5MCw2NC42NCw5MS41NnMtMi41MSwzLjE1LTMuNzUsNC43M2wtMy41NCw0LjljLTEuMTMsMS42Ni0yLjIzLDMuMzUtMy4zMyw1YTEyNywxMjcsMCwwLDAtMTAuOTMsMjEuNDksMS41OCwxLjU4LDAsMSwxLTMtMS4xNVM0MC4xOSwxMjYuNDcsNDAuMjEsMTI2LjQzWiIvPjxyZWN0IGNsYXNzPSJjbHMtMiIgd2lkdGg9IjM5MiIgaGVpZ2h0PSIzOTIiLz48L2c+PC9nPjwvc3ZnPg==`;\r\n } else {\r\n imgSpinner.src = DefaultLoadingScreen.DefaultSpinnerUrl;\r\n }\r\n\r\n imgSpinner.style.animation = \"spin1 0.75s infinite linear\";\r\n imgSpinner.style.transformOrigin = \"50% 50%\";\r\n\r\n if (!svgSupport) {\r\n const logoSize = { w: 16, h: 18.5 };\r\n const loadingSize = { w: 30, h: 30 };\r\n // set styling correctly\r\n imgBack.style.width = `${logoSize.w}vh`;\r\n imgBack.style.height = `${logoSize.h}vh`;\r\n imgBack.style.left = `calc(50% - ${logoSize.w / 2}vh)`;\r\n imgBack.style.top = `calc(50% - ${logoSize.h / 2}vh)`;\r\n\r\n imgSpinner.style.width = `${loadingSize.w}vh`;\r\n imgSpinner.style.height = `${loadingSize.h}vh`;\r\n imgSpinner.style.left = `calc(50% - ${loadingSize.w / 2}vh)`;\r\n imgSpinner.style.top = `calc(50% - ${loadingSize.h / 2}vh)`;\r\n }\r\n\r\n imageSpinnerContainer.appendChild(imgSpinner);\r\n\r\n loadingDiv.appendChild(imgBack);\r\n loadingDiv.appendChild(imageSpinnerContainer);\r\n loadingDiv.style.backgroundColor = this._loadingDivBackgroundColor;\r\n loadingDiv.style.opacity = \"1\";\r\n\r\n const canvases: Array<HTMLCanvasElement> = [];\r\n const views = this._engine.views;\r\n if (views?.length) {\r\n for (const view of views) {\r\n if (view.enabled) {\r\n canvases.push(view.target);\r\n }\r\n }\r\n } else {\r\n canvases.push(this._renderingCanvas);\r\n }\r\n canvases.forEach((canvas, index) => {\r\n const clonedLoadingDiv = loadingDiv!.cloneNode(true) as HTMLDivElement;\r\n clonedLoadingDiv.id += `-${index}`;\r\n this._loadingDivToRenderingCanvasMap.set(clonedLoadingDiv, [canvas, null]);\r\n });\r\n\r\n this._resizeLoadingUI();\r\n\r\n this._resizeObserver = this._engine.onResizeObservable.add(() => {\r\n this._resizeLoadingUI();\r\n });\r\n\r\n this._loadingDivToRenderingCanvasMap.forEach((_, loadingDiv) => {\r\n document.body.appendChild(loadingDiv);\r\n });\r\n }\r\n\r\n /**\r\n * Function called to hide the loading screen\r\n */\r\n public hideLoadingUI(): void {\r\n if (!this._isLoading) {\r\n return;\r\n }\r\n\r\n let completedTransitions = 0;\r\n\r\n const onTransitionEnd = (event: TransitionEvent) => {\r\n const loadingDiv = event.target as HTMLDivElement;\r\n // ensure that ending transition event is generated by one of the current loadingDivs\r\n const isTransitionEndOnLoadingDiv = this._loadingDivToRenderingCanvasMap.has(loadingDiv);\r\n\r\n if (isTransitionEndOnLoadingDiv) {\r\n completedTransitions++;\r\n loadingDiv.remove();\r\n\r\n const allTransitionsCompleted = completedTransitions === this._loadingDivToRenderingCanvasMap.size;\r\n if (allTransitionsCompleted) {\r\n if (this._loadingTextDiv) {\r\n this._loadingTextDiv.remove();\r\n this._loadingTextDiv = null;\r\n }\r\n if (this._style) {\r\n this._style.remove();\r\n this._style = null;\r\n }\r\n\r\n window.removeEventListener(\"transitionend\", onTransitionEnd);\r\n this._engine!.onResizeObservable.remove(this._resizeObserver);\r\n this._loadingDivToRenderingCanvasMap.clear();\r\n this._engine = null;\r\n this._isLoading = false;\r\n }\r\n }\r\n };\r\n\r\n this._loadingDivToRenderingCanvasMap.forEach((_, loadingDiv) => {\r\n loadingDiv.style.opacity = \"0\";\r\n });\r\n\r\n window.addEventListener(\"transitionend\", onTransitionEnd);\r\n }\r\n\r\n /**\r\n * Gets or sets the text to display while loading\r\n */\r\n public set loadingUIText(text: string) {\r\n this._loadingText = text;\r\n\r\n if (this._loadingTextDiv) {\r\n this._loadingTextDiv.innerHTML = this._loadingText;\r\n }\r\n }\r\n\r\n public get loadingUIText(): string {\r\n return this._loadingText;\r\n }\r\n\r\n /**\r\n * Gets or sets the color to use for the background\r\n */\r\n public get loadingUIBackgroundColor(): string {\r\n return this._loadingDivBackgroundColor;\r\n }\r\n\r\n public set loadingUIBackgroundColor(color: string) {\r\n this._loadingDivBackgroundColor = color;\r\n\r\n if (!this._isLoading) {\r\n return;\r\n }\r\n\r\n this._loadingDivToRenderingCanvasMap.forEach((_, loadingDiv) => {\r\n loadingDiv.style.backgroundColor = this._loadingDivBackgroundColor;\r\n });\r\n }\r\n\r\n /**\r\n * Checks if the layout of the canvas has changed by comparing the current layout\r\n * rectangle with the previous one.\r\n *\r\n * This function compares of the two `DOMRect` objects to determine if any of the layout dimensions have changed.\r\n * If the layout has changed or if there is no previous layout (i.e., `previousCanvasRect` is `null`),\r\n * it returns `true`. Otherwise, it returns `false`.\r\n *\r\n * @param previousCanvasRect defines the previously recorded `DOMRect` of the canvas, or `null` if no previous state exists.\r\n * @param currentCanvasRect defines the current `DOMRect` of the canvas to compare against the previous layout.\r\n * @returns `true` if the layout has changed, otherwise `false`.\r\n */\r\n private _isCanvasLayoutChanged(previousCanvasRect: DOMRect | null, currentCanvasRect: DOMRect) {\r\n return (\r\n !previousCanvasRect ||\r\n previousCanvasRect.left !== currentCanvasRect.left ||\r\n previousCanvasRect.top !== currentCanvasRect.top ||\r\n previousCanvasRect.right !== currentCanvasRect.right ||\r\n previousCanvasRect.bottom !== currentCanvasRect.bottom ||\r\n previousCanvasRect.width !== currentCanvasRect.width ||\r\n previousCanvasRect.height !== currentCanvasRect.height ||\r\n previousCanvasRect.x !== currentCanvasRect.x ||\r\n previousCanvasRect.y !== currentCanvasRect.y\r\n );\r\n }\r\n\r\n // Resize\r\n private _resizeLoadingUI = () => {\r\n if (!this._isLoading) {\r\n return;\r\n }\r\n\r\n this._loadingDivToRenderingCanvasMap.forEach(([canvas, previousCanvasRect], loadingDiv) => {\r\n const currentCanvasRect = canvas.getBoundingClientRect();\r\n if (this._isCanvasLayoutChanged(previousCanvasRect, currentCanvasRect)) {\r\n const canvasPositioning = window.getComputedStyle(canvas).position;\r\n\r\n loadingDiv.style.position = canvasPositioning === \"fixed\" ? \"fixed\" : \"absolute\";\r\n loadingDiv.style.left = currentCanvasRect.left + \"px\";\r\n loadingDiv.style.top = currentCanvasRect.top + \"px\";\r\n loadingDiv.style.width = currentCanvasRect.width + \"px\";\r\n loadingDiv.style.height = currentCanvasRect.height + \"px\";\r\n\r\n this._loadingDivToRenderingCanvasMap.set(loadingDiv, [canvas, currentCanvasRect]);\r\n }\r\n });\r\n };\r\n}\r\n\r\nAbstractEngine.DefaultLoadingScreenFactory = (canvas: HTMLCanvasElement) => {\r\n return new DefaultLoadingScreen(canvas);\r\n};\r\n"]}
|
|
@@ -186,6 +186,8 @@ export class LightBlock extends NodeMaterialBlock {
|
|
|
186
186
|
}
|
|
187
187
|
}
|
|
188
188
|
updateUniformsAndSamples(state, nodeMaterial, defines, uniformBuffers) {
|
|
189
|
+
state.samplers.push("areaLightsLTC1Sampler");
|
|
190
|
+
state.samplers.push("areaLightsLTC2Sampler");
|
|
189
191
|
for (let lightIndex = 0; lightIndex < nodeMaterial.maxSimultaneousLights; lightIndex++) {
|
|
190
192
|
if (!defines["LIGHT" + lightIndex]) {
|
|
191
193
|
break;
|