@babylonjs/core 5.25.0 → 5.26.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/Audio/audioEngine.js +1 -2
- package/Audio/audioEngine.js.map +1 -1
- package/Cameras/Inputs/freeCameraDeviceOrientationInput.d.ts +4 -1
- package/Cameras/Inputs/freeCameraDeviceOrientationInput.js +17 -4
- package/Cameras/Inputs/freeCameraDeviceOrientationInput.js.map +1 -1
- package/Cameras/VR/vrExperienceHelper.js +1 -24
- package/Cameras/VR/vrExperienceHelper.js.map +1 -1
- package/Culling/Octrees/octreeSceneComponent.js +1 -5
- package/Culling/Octrees/octreeSceneComponent.js.map +1 -1
- package/DeviceInput/webDeviceInputSystem.js +0 -18
- package/DeviceInput/webDeviceInputSystem.js.map +1 -1
- package/Engines/Extensions/engine.cubeTexture.js +3 -2
- package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
- package/Engines/engine.js +3 -34
- package/Engines/engine.js.map +1 -1
- package/Engines/thinEngine.js +2 -14
- package/Engines/thinEngine.js.map +1 -1
- package/Gamepads/gamepadManager.js +2 -2
- package/Gamepads/gamepadManager.js.map +1 -1
- package/Layers/layer.d.ts +7 -0
- package/Layers/layer.js +11 -0
- package/Layers/layer.js.map +1 -1
- package/Layers/layerSceneComponent.d.ts +4 -2
- package/Layers/layerSceneComponent.js +27 -11
- package/Layers/layerSceneComponent.js.map +1 -1
- package/Loading/loadingScreen.js +6 -6
- package/Loading/loadingScreen.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.js +3 -0
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/thinRenderTargetTexture.js +1 -1
- package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
- package/Materials/Textures/videoTexture.js +2 -2
- package/Materials/Textures/videoTexture.js.map +1 -1
- package/Materials/material.js +5 -2
- package/Materials/material.js.map +1 -1
- package/Materials/materialHelper.js +1 -6
- package/Materials/materialHelper.js.map +1 -1
- package/Maths/math.vector.d.ts +47 -10
- package/Maths/math.vector.js +89 -10
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/instancedMesh.js +1 -1
- package/Meshes/instancedMesh.js.map +1 -1
- package/Meshes/mesh.d.ts +1 -1
- package/Meshes/mesh.js +4 -6
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/subMesh.d.ts +2 -0
- package/Meshes/subMesh.js +2 -0
- package/Meshes/subMesh.js.map +1 -1
- package/Misc/tools.d.ts +9 -0
- package/Misc/tools.js +14 -5
- package/Misc/tools.js.map +1 -1
- package/Misc/virtualJoystick.js +0 -1
- package/Misc/virtualJoystick.js.map +1 -1
- package/Particles/IParticleSystem.d.ts +6 -0
- package/Particles/IParticleSystem.js.map +1 -1
- package/Particles/baseParticleSystem.d.ts +8 -0
- package/Particles/baseParticleSystem.js +12 -0
- package/Particles/baseParticleSystem.js.map +1 -1
- package/Particles/gpuParticleSystem.d.ts +1 -1
- package/Particles/gpuParticleSystem.js +12 -2
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particleSystem.d.ts +1 -1
- package/Particles/particleSystem.js +17 -2
- package/Particles/particleSystem.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/Rendering/renderingManager.d.ts +11 -0
- package/Rendering/renderingManager.js +55 -9
- package/Rendering/renderingManager.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js +2 -2
- package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
- package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js +1 -1
- package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/vertexColorMixing.js +1 -1
- package/Shaders/ShadersInclude/vertexColorMixing.js.map +1 -1
- package/Shaders/color.fragment.js +3 -2
- package/Shaders/color.fragment.js.map +1 -1
- package/Shaders/color.vertex.js +1 -1
- package/Shaders/color.vertex.js.map +1 -1
- package/Shaders/default.fragment.js +3 -3
- package/Shaders/default.fragment.js.map +1 -1
- package/Shaders/default.vertex.js +1 -1
- package/Shaders/default.vertex.js.map +1 -1
- package/Shaders/gpuRenderParticles.fragment.d.ts +2 -0
- package/Shaders/gpuRenderParticles.fragment.js +8 -1
- package/Shaders/gpuRenderParticles.fragment.js.map +1 -1
- package/Shaders/gpuRenderParticles.vertex.d.ts +2 -0
- package/Shaders/gpuRenderParticles.vertex.js +4 -0
- package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
- package/Shaders/particles.fragment.d.ts +2 -0
- package/Shaders/particles.fragment.js +8 -1
- package/Shaders/particles.fragment.js.map +1 -1
- package/Shaders/particles.vertex.d.ts +2 -0
- package/Shaders/particles.vertex.js +4 -0
- package/Shaders/particles.vertex.js.map +1 -1
- package/Shaders/pbr.vertex.js +1 -1
- package/Shaders/pbr.vertex.js.map +1 -1
- package/Sprites/spriteManager.d.ts +4 -0
- package/Sprites/spriteManager.js +2 -0
- package/Sprites/spriteManager.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +14 -0
- package/scene.js +37 -12
- package/scene.js.map +1 -1
- package/sceneComponent.d.ts +2 -0
- package/sceneComponent.js +2 -0
- package/sceneComponent.js.map +1 -1
|
@@ -29,7 +29,7 @@ export class GamepadManager {
|
|
|
29
29
|
}
|
|
30
30
|
else {
|
|
31
31
|
this._gamepadEventSupported = "GamepadEvent" in window;
|
|
32
|
-
this._gamepadSupport = navigator &&
|
|
32
|
+
this._gamepadSupport = navigator && navigator.getGamepads;
|
|
33
33
|
}
|
|
34
34
|
this.onGamepadConnectedObservable = new Observable((observer) => {
|
|
35
35
|
// This will be used to raise the onGamepadConnected for all gamepads ALREADY connected
|
|
@@ -200,7 +200,7 @@ export class GamepadManager {
|
|
|
200
200
|
// This function is called only on Chrome, which does not properly support
|
|
201
201
|
// connection/disconnection events and forces you to recopy again the gamepad object
|
|
202
202
|
_updateGamepadObjects() {
|
|
203
|
-
const gamepads = navigator.getGamepads ? navigator.getGamepads() :
|
|
203
|
+
const gamepads = navigator.getGamepads ? navigator.getGamepads() : [];
|
|
204
204
|
for (let i = 0; i < gamepads.length; i++) {
|
|
205
205
|
const gamepad = gamepads[i];
|
|
206
206
|
if (gamepad) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gamepadManager.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Gamepads/gamepadManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"../Misc/observable\";\r\nimport { IsWindowObjectExist } from \"../Misc/domManagement\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { Scene } from \"../scene\";\r\nimport { PoseEnabledControllerHelper } from \"../Gamepads/Controllers/poseEnabledController\";\r\nimport { Xbox360Pad } from \"./xboxGamepad\";\r\nimport { Gamepad, GenericPad } from \"./gamepad\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport { DualShockPad } from \"./dualShockGamepad\";\r\nimport { Tools } from \"../Misc/tools\";\r\n/**\r\n * Manager for handling gamepads\r\n */\r\nexport class GamepadManager {\r\n private _babylonGamepads: Array<Gamepad> = [];\r\n private _oneGamepadConnected: boolean = false;\r\n\r\n /** @internal */\r\n public _isMonitoring: boolean = false;\r\n private _gamepadEventSupported: boolean;\r\n private _gamepadSupport?: () => Array<any>;\r\n\r\n /**\r\n * observable to be triggered when the gamepad controller has been connected\r\n */\r\n public onGamepadConnectedObservable: Observable<Gamepad>;\r\n\r\n /**\r\n * observable to be triggered when the gamepad controller has been disconnected\r\n */\r\n public onGamepadDisconnectedObservable = new Observable<Gamepad>();\r\n\r\n private _onGamepadConnectedEvent: Nullable<(evt: any) => void>;\r\n private _onGamepadDisconnectedEvent: Nullable<(evt: any) => void>;\r\n\r\n /**\r\n * Initializes the gamepad manager\r\n * @param _scene BabylonJS scene\r\n */\r\n constructor(private _scene?: Scene) {\r\n if (!IsWindowObjectExist()) {\r\n this._gamepadEventSupported = false;\r\n } else {\r\n this._gamepadEventSupported = \"GamepadEvent\" in window;\r\n this._gamepadSupport = navigator && (navigator.getGamepads || navigator.webkitGetGamepads || navigator.msGetGamepads || navigator.webkitGamepads);\r\n }\r\n\r\n this.onGamepadConnectedObservable = new Observable<Gamepad>((observer) => {\r\n // This will be used to raise the onGamepadConnected for all gamepads ALREADY connected\r\n for (const i in this._babylonGamepads) {\r\n const gamepad = this._babylonGamepads[i];\r\n if (gamepad && gamepad._isConnected) {\r\n this.onGamepadConnectedObservable.notifyObserver(observer, gamepad);\r\n }\r\n }\r\n });\r\n\r\n this._onGamepadConnectedEvent = (evt) => {\r\n const gamepad = evt.gamepad;\r\n\r\n if (gamepad.index in this._babylonGamepads) {\r\n if (this._babylonGamepads[gamepad.index].isConnected) {\r\n return;\r\n }\r\n }\r\n\r\n let newGamepad: Gamepad;\r\n\r\n if (this._babylonGamepads[gamepad.index]) {\r\n newGamepad = this._babylonGamepads[gamepad.index];\r\n newGamepad.browserGamepad = gamepad;\r\n newGamepad._isConnected = true;\r\n } else {\r\n newGamepad = this._addNewGamepad(gamepad);\r\n }\r\n this.onGamepadConnectedObservable.notifyObservers(newGamepad);\r\n this._startMonitoringGamepads();\r\n };\r\n\r\n this._onGamepadDisconnectedEvent = (evt) => {\r\n const gamepad = evt.gamepad;\r\n\r\n // Remove the gamepad from the list of gamepads to monitor.\r\n for (const i in this._babylonGamepads) {\r\n if (this._babylonGamepads[i].index === gamepad.index) {\r\n const disconnectedGamepad = this._babylonGamepads[i];\r\n disconnectedGamepad._isConnected = false;\r\n\r\n this.onGamepadDisconnectedObservable.notifyObservers(disconnectedGamepad);\r\n disconnectedGamepad.dispose && disconnectedGamepad.dispose();\r\n break;\r\n }\r\n }\r\n };\r\n\r\n if (this._gamepadSupport) {\r\n //first add already-connected gamepads\r\n this._updateGamepadObjects();\r\n if (this._babylonGamepads.length) {\r\n this._startMonitoringGamepads();\r\n }\r\n // Checking if the gamepad connected event is supported (like in Firefox)\r\n if (this._gamepadEventSupported) {\r\n const hostWindow = this._scene ? this._scene.getEngine().getHostWindow() : window;\r\n\r\n if (hostWindow) {\r\n hostWindow.addEventListener(\"gamepadconnected\", this._onGamepadConnectedEvent, false);\r\n hostWindow.addEventListener(\"gamepaddisconnected\", this._onGamepadDisconnectedEvent, false);\r\n }\r\n } else {\r\n this._startMonitoringGamepads();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * The gamepads in the game pad manager\r\n */\r\n public get gamepads(): Gamepad[] {\r\n return this._babylonGamepads;\r\n }\r\n\r\n /**\r\n * Get the gamepad controllers based on type\r\n * @param type The type of gamepad controller\r\n * @returns Nullable gamepad\r\n */\r\n public getGamepadByType(type: number = Gamepad.XBOX): Nullable<Gamepad> {\r\n for (const gamepad of this._babylonGamepads) {\r\n if (gamepad && gamepad.type === type) {\r\n return gamepad;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Disposes the gamepad manager\r\n */\r\n public dispose() {\r\n if (this._gamepadEventSupported) {\r\n if (this._onGamepadConnectedEvent) {\r\n window.removeEventListener(\"gamepadconnected\", this._onGamepadConnectedEvent);\r\n }\r\n\r\n if (this._onGamepadDisconnectedEvent) {\r\n window.removeEventListener(\"gamepaddisconnected\", this._onGamepadDisconnectedEvent);\r\n }\r\n this._onGamepadConnectedEvent = null;\r\n this._onGamepadDisconnectedEvent = null;\r\n }\r\n\r\n this._babylonGamepads.forEach((gamepad) => {\r\n gamepad.dispose();\r\n });\r\n\r\n this.onGamepadConnectedObservable.clear();\r\n this.onGamepadDisconnectedObservable.clear();\r\n\r\n this._oneGamepadConnected = false;\r\n this._stopMonitoringGamepads();\r\n this._babylonGamepads = [];\r\n }\r\n\r\n private _addNewGamepad(gamepad: any): Gamepad {\r\n if (!this._oneGamepadConnected) {\r\n this._oneGamepadConnected = true;\r\n }\r\n\r\n let newGamepad;\r\n const dualShock: boolean = (<string>gamepad.id).search(\"054c\") !== -1 && (<string>gamepad.id).search(\"0ce6\") === -1;\r\n const xboxOne: boolean = (<string>gamepad.id).search(\"Xbox One\") !== -1;\r\n if (\r\n xboxOne ||\r\n (<string>gamepad.id).search(\"Xbox 360\") !== -1 ||\r\n (<string>gamepad.id).search(\"xinput\") !== -1 ||\r\n ((<string>gamepad.id).search(\"045e\") !== -1 && (<string>gamepad.id).search(\"Surface Dock\") === -1)\r\n ) {\r\n // make sure the Surface Dock Extender is not detected as an xbox controller\r\n newGamepad = new Xbox360Pad(gamepad.id, gamepad.index, gamepad, xboxOne);\r\n } else if (dualShock) {\r\n newGamepad = new DualShockPad(gamepad.id, gamepad.index, gamepad);\r\n }\r\n // if pose is supported, use the (WebVR) pose enabled controller\r\n else if (gamepad.pose) {\r\n newGamepad = PoseEnabledControllerHelper.InitiateController(gamepad);\r\n } else {\r\n newGamepad = new GenericPad(gamepad.id, gamepad.index, gamepad);\r\n }\r\n this._babylonGamepads[newGamepad.index] = newGamepad;\r\n return newGamepad;\r\n }\r\n\r\n private _startMonitoringGamepads() {\r\n if (!this._isMonitoring) {\r\n this._isMonitoring = true;\r\n //back-comp\r\n if (!this._scene) {\r\n this._checkGamepadsStatus();\r\n }\r\n }\r\n }\r\n\r\n private _stopMonitoringGamepads() {\r\n this._isMonitoring = false;\r\n }\r\n\r\n private _loggedErrors: number[];\r\n\r\n /** @internal */\r\n public _checkGamepadsStatus() {\r\n // Hack to be compatible Chrome\r\n this._updateGamepadObjects();\r\n\r\n for (const i in this._babylonGamepads) {\r\n const gamepad = this._babylonGamepads[i];\r\n if (!gamepad || !gamepad.isConnected) {\r\n continue;\r\n }\r\n try {\r\n gamepad.update();\r\n } catch {\r\n if (this._loggedErrors.indexOf(gamepad.index) === -1) {\r\n Tools.Warn(`Error updating gamepad ${gamepad.id}`);\r\n this._loggedErrors.push(gamepad.index);\r\n }\r\n }\r\n }\r\n\r\n if (this._isMonitoring && !this._scene) {\r\n Engine.QueueNewFrame(() => {\r\n this._checkGamepadsStatus();\r\n });\r\n }\r\n }\r\n\r\n // This function is called only on Chrome, which does not properly support\r\n // connection/disconnection events and forces you to recopy again the gamepad object\r\n private _updateGamepadObjects() {\r\n const gamepads = navigator.getGamepads ? navigator.getGamepads() : navigator.webkitGetGamepads ? navigator.webkitGetGamepads() : [];\r\n for (let i = 0; i < gamepads.length; i++) {\r\n const gamepad = gamepads[i];\r\n if (gamepad) {\r\n if (!this._babylonGamepads[gamepad.index]) {\r\n const newGamepad = this._addNewGamepad(gamepad);\r\n this.onGamepadConnectedObservable.notifyObservers(newGamepad);\r\n } else {\r\n // Forced to copy again this object for Chrome for unknown reason\r\n this._babylonGamepads[i].browserGamepad = gamepad;\r\n\r\n if (!this._babylonGamepads[i].isConnected) {\r\n this._babylonGamepads[i]._isConnected = true;\r\n this.onGamepadConnectedObservable.notifyObservers(this._babylonGamepads[i]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"gamepadManager.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Gamepads/gamepadManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"../Misc/observable\";\r\nimport { IsWindowObjectExist } from \"../Misc/domManagement\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { Scene } from \"../scene\";\r\nimport { PoseEnabledControllerHelper } from \"../Gamepads/Controllers/poseEnabledController\";\r\nimport { Xbox360Pad } from \"./xboxGamepad\";\r\nimport { Gamepad, GenericPad } from \"./gamepad\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport { DualShockPad } from \"./dualShockGamepad\";\r\nimport { Tools } from \"../Misc/tools\";\r\n/**\r\n * Manager for handling gamepads\r\n */\r\nexport class GamepadManager {\r\n private _babylonGamepads: Array<Gamepad> = [];\r\n private _oneGamepadConnected: boolean = false;\r\n\r\n /** @internal */\r\n public _isMonitoring: boolean = false;\r\n private _gamepadEventSupported: boolean;\r\n private _gamepadSupport?: () => Array<any>;\r\n\r\n /**\r\n * observable to be triggered when the gamepad controller has been connected\r\n */\r\n public onGamepadConnectedObservable: Observable<Gamepad>;\r\n\r\n /**\r\n * observable to be triggered when the gamepad controller has been disconnected\r\n */\r\n public onGamepadDisconnectedObservable = new Observable<Gamepad>();\r\n\r\n private _onGamepadConnectedEvent: Nullable<(evt: any) => void>;\r\n private _onGamepadDisconnectedEvent: Nullable<(evt: any) => void>;\r\n\r\n /**\r\n * Initializes the gamepad manager\r\n * @param _scene BabylonJS scene\r\n */\r\n constructor(private _scene?: Scene) {\r\n if (!IsWindowObjectExist()) {\r\n this._gamepadEventSupported = false;\r\n } else {\r\n this._gamepadEventSupported = \"GamepadEvent\" in window;\r\n this._gamepadSupport = navigator && navigator.getGamepads;\r\n }\r\n\r\n this.onGamepadConnectedObservable = new Observable<Gamepad>((observer) => {\r\n // This will be used to raise the onGamepadConnected for all gamepads ALREADY connected\r\n for (const i in this._babylonGamepads) {\r\n const gamepad = this._babylonGamepads[i];\r\n if (gamepad && gamepad._isConnected) {\r\n this.onGamepadConnectedObservable.notifyObserver(observer, gamepad);\r\n }\r\n }\r\n });\r\n\r\n this._onGamepadConnectedEvent = (evt) => {\r\n const gamepad = evt.gamepad;\r\n\r\n if (gamepad.index in this._babylonGamepads) {\r\n if (this._babylonGamepads[gamepad.index].isConnected) {\r\n return;\r\n }\r\n }\r\n\r\n let newGamepad: Gamepad;\r\n\r\n if (this._babylonGamepads[gamepad.index]) {\r\n newGamepad = this._babylonGamepads[gamepad.index];\r\n newGamepad.browserGamepad = gamepad;\r\n newGamepad._isConnected = true;\r\n } else {\r\n newGamepad = this._addNewGamepad(gamepad);\r\n }\r\n this.onGamepadConnectedObservable.notifyObservers(newGamepad);\r\n this._startMonitoringGamepads();\r\n };\r\n\r\n this._onGamepadDisconnectedEvent = (evt) => {\r\n const gamepad = evt.gamepad;\r\n\r\n // Remove the gamepad from the list of gamepads to monitor.\r\n for (const i in this._babylonGamepads) {\r\n if (this._babylonGamepads[i].index === gamepad.index) {\r\n const disconnectedGamepad = this._babylonGamepads[i];\r\n disconnectedGamepad._isConnected = false;\r\n\r\n this.onGamepadDisconnectedObservable.notifyObservers(disconnectedGamepad);\r\n disconnectedGamepad.dispose && disconnectedGamepad.dispose();\r\n break;\r\n }\r\n }\r\n };\r\n\r\n if (this._gamepadSupport) {\r\n //first add already-connected gamepads\r\n this._updateGamepadObjects();\r\n if (this._babylonGamepads.length) {\r\n this._startMonitoringGamepads();\r\n }\r\n // Checking if the gamepad connected event is supported (like in Firefox)\r\n if (this._gamepadEventSupported) {\r\n const hostWindow = this._scene ? this._scene.getEngine().getHostWindow() : window;\r\n\r\n if (hostWindow) {\r\n hostWindow.addEventListener(\"gamepadconnected\", this._onGamepadConnectedEvent, false);\r\n hostWindow.addEventListener(\"gamepaddisconnected\", this._onGamepadDisconnectedEvent, false);\r\n }\r\n } else {\r\n this._startMonitoringGamepads();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * The gamepads in the game pad manager\r\n */\r\n public get gamepads(): Gamepad[] {\r\n return this._babylonGamepads;\r\n }\r\n\r\n /**\r\n * Get the gamepad controllers based on type\r\n * @param type The type of gamepad controller\r\n * @returns Nullable gamepad\r\n */\r\n public getGamepadByType(type: number = Gamepad.XBOX): Nullable<Gamepad> {\r\n for (const gamepad of this._babylonGamepads) {\r\n if (gamepad && gamepad.type === type) {\r\n return gamepad;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Disposes the gamepad manager\r\n */\r\n public dispose() {\r\n if (this._gamepadEventSupported) {\r\n if (this._onGamepadConnectedEvent) {\r\n window.removeEventListener(\"gamepadconnected\", this._onGamepadConnectedEvent);\r\n }\r\n\r\n if (this._onGamepadDisconnectedEvent) {\r\n window.removeEventListener(\"gamepaddisconnected\", this._onGamepadDisconnectedEvent);\r\n }\r\n this._onGamepadConnectedEvent = null;\r\n this._onGamepadDisconnectedEvent = null;\r\n }\r\n\r\n this._babylonGamepads.forEach((gamepad) => {\r\n gamepad.dispose();\r\n });\r\n\r\n this.onGamepadConnectedObservable.clear();\r\n this.onGamepadDisconnectedObservable.clear();\r\n\r\n this._oneGamepadConnected = false;\r\n this._stopMonitoringGamepads();\r\n this._babylonGamepads = [];\r\n }\r\n\r\n private _addNewGamepad(gamepad: any): Gamepad {\r\n if (!this._oneGamepadConnected) {\r\n this._oneGamepadConnected = true;\r\n }\r\n\r\n let newGamepad;\r\n const dualShock: boolean = (<string>gamepad.id).search(\"054c\") !== -1 && (<string>gamepad.id).search(\"0ce6\") === -1;\r\n const xboxOne: boolean = (<string>gamepad.id).search(\"Xbox One\") !== -1;\r\n if (\r\n xboxOne ||\r\n (<string>gamepad.id).search(\"Xbox 360\") !== -1 ||\r\n (<string>gamepad.id).search(\"xinput\") !== -1 ||\r\n ((<string>gamepad.id).search(\"045e\") !== -1 && (<string>gamepad.id).search(\"Surface Dock\") === -1)\r\n ) {\r\n // make sure the Surface Dock Extender is not detected as an xbox controller\r\n newGamepad = new Xbox360Pad(gamepad.id, gamepad.index, gamepad, xboxOne);\r\n } else if (dualShock) {\r\n newGamepad = new DualShockPad(gamepad.id, gamepad.index, gamepad);\r\n }\r\n // if pose is supported, use the (WebVR) pose enabled controller\r\n else if (gamepad.pose) {\r\n newGamepad = PoseEnabledControllerHelper.InitiateController(gamepad);\r\n } else {\r\n newGamepad = new GenericPad(gamepad.id, gamepad.index, gamepad);\r\n }\r\n this._babylonGamepads[newGamepad.index] = newGamepad;\r\n return newGamepad;\r\n }\r\n\r\n private _startMonitoringGamepads() {\r\n if (!this._isMonitoring) {\r\n this._isMonitoring = true;\r\n //back-comp\r\n if (!this._scene) {\r\n this._checkGamepadsStatus();\r\n }\r\n }\r\n }\r\n\r\n private _stopMonitoringGamepads() {\r\n this._isMonitoring = false;\r\n }\r\n\r\n private _loggedErrors: number[];\r\n\r\n /** @internal */\r\n public _checkGamepadsStatus() {\r\n // Hack to be compatible Chrome\r\n this._updateGamepadObjects();\r\n\r\n for (const i in this._babylonGamepads) {\r\n const gamepad = this._babylonGamepads[i];\r\n if (!gamepad || !gamepad.isConnected) {\r\n continue;\r\n }\r\n try {\r\n gamepad.update();\r\n } catch {\r\n if (this._loggedErrors.indexOf(gamepad.index) === -1) {\r\n Tools.Warn(`Error updating gamepad ${gamepad.id}`);\r\n this._loggedErrors.push(gamepad.index);\r\n }\r\n }\r\n }\r\n\r\n if (this._isMonitoring && !this._scene) {\r\n Engine.QueueNewFrame(() => {\r\n this._checkGamepadsStatus();\r\n });\r\n }\r\n }\r\n\r\n // This function is called only on Chrome, which does not properly support\r\n // connection/disconnection events and forces you to recopy again the gamepad object\r\n private _updateGamepadObjects() {\r\n const gamepads = navigator.getGamepads ? navigator.getGamepads() : [];\r\n for (let i = 0; i < gamepads.length; i++) {\r\n const gamepad = gamepads[i];\r\n if (gamepad) {\r\n if (!this._babylonGamepads[gamepad.index]) {\r\n const newGamepad = this._addNewGamepad(gamepad);\r\n this.onGamepadConnectedObservable.notifyObservers(newGamepad);\r\n } else {\r\n // Forced to copy again this object for Chrome for unknown reason\r\n this._babylonGamepads[i].browserGamepad = gamepad;\r\n\r\n if (!this._babylonGamepads[i].isConnected) {\r\n this._babylonGamepads[i]._isConnected = true;\r\n this.onGamepadConnectedObservable.notifyObservers(this._babylonGamepads[i]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
package/Layers/layer.d.ts
CHANGED
|
@@ -25,6 +25,13 @@ export declare class Layer {
|
|
|
25
25
|
* Is the layer in background or foreground.
|
|
26
26
|
*/
|
|
27
27
|
isBackground: boolean;
|
|
28
|
+
private _applyPostProcess;
|
|
29
|
+
/**
|
|
30
|
+
* Determines if the layer is drawn before (true) or after (false) post-processing.
|
|
31
|
+
* If the layer is background, it is always before.
|
|
32
|
+
*/
|
|
33
|
+
set applyPostProcess(value: boolean);
|
|
34
|
+
get applyPostProcess(): boolean;
|
|
28
35
|
/**
|
|
29
36
|
* Define the color of the layer (instead of texture).
|
|
30
37
|
*/
|
package/Layers/layer.js
CHANGED
|
@@ -34,6 +34,7 @@ export class Layer {
|
|
|
34
34
|
*/
|
|
35
35
|
name, imgUrl, scene, isBackground, color) {
|
|
36
36
|
this.name = name;
|
|
37
|
+
this._applyPostProcess = true;
|
|
37
38
|
/**
|
|
38
39
|
* Define the scale of the layer in order to zoom in out of the texture.
|
|
39
40
|
*/
|
|
@@ -98,6 +99,16 @@ export class Layer {
|
|
|
98
99
|
this._vertexBuffers[VertexBuffer.PositionKind] = vertexBuffer;
|
|
99
100
|
this._createIndexBuffer();
|
|
100
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* Determines if the layer is drawn before (true) or after (false) post-processing.
|
|
104
|
+
* If the layer is background, it is always before.
|
|
105
|
+
*/
|
|
106
|
+
set applyPostProcess(value) {
|
|
107
|
+
this._applyPostProcess = value;
|
|
108
|
+
}
|
|
109
|
+
get applyPostProcess() {
|
|
110
|
+
return this.isBackground || this._applyPostProcess;
|
|
111
|
+
}
|
|
101
112
|
/**
|
|
102
113
|
* Back compatibility with callback before the onDisposeObservable existed.
|
|
103
114
|
* The set callback will be triggered when the layer has been disposed.
|
package/Layers/layer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layer.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Layers/layer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { Scene } from \"../scene\";\r\nimport { Vector2 } from \"../Maths/math.vector\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { Material } from \"../Materials/material\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport type { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport { SceneComponentConstants } from \"../sceneComponent\";\r\nimport { LayerSceneComponent } from \"./layerSceneComponent\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport type { DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { DrawWrapper } from \"../Materials/drawWrapper\";\r\n\r\nimport \"../Shaders/layer.fragment\";\r\nimport \"../Shaders/layer.vertex\";\r\n\r\n/**\r\n * This represents a full screen 2d layer.\r\n * This can be useful to display a picture in the background of your scene for instance.\r\n * @see https://www.babylonjs-playground.com/#08A2BS#1\r\n */\r\nexport class Layer {\r\n /**\r\n * Define the texture the layer should display.\r\n */\r\n public texture: Nullable<BaseTexture>;\r\n\r\n /**\r\n * Is the layer in background or foreground.\r\n */\r\n public isBackground: boolean;\r\n\r\n /**\r\n * Define the color of the layer (instead of texture).\r\n */\r\n public color: Color4;\r\n\r\n /**\r\n * Define the scale of the layer in order to zoom in out of the texture.\r\n */\r\n public scale = new Vector2(1, 1);\r\n\r\n /**\r\n * Define an offset for the layer in order to shift the texture.\r\n */\r\n public offset = new Vector2(0, 0);\r\n\r\n /**\r\n * Define the alpha blending mode used in the layer in case the texture or color has an alpha.\r\n */\r\n public alphaBlendingMode = Constants.ALPHA_COMBINE;\r\n\r\n /**\r\n * Define if the layer should alpha test or alpha blend with the rest of the scene.\r\n * Alpha test will not mix with the background color in case of transparency.\r\n * It will either use the texture color or the background depending on the alpha value of the current pixel.\r\n */\r\n public alphaTest: boolean;\r\n\r\n /**\r\n * Define a mask to restrict the layer to only some of the scene cameras.\r\n */\r\n public layerMask: number = 0x0fffffff;\r\n\r\n /**\r\n * Define the list of render target the layer is visible into.\r\n */\r\n public renderTargetTextures: RenderTargetTexture[] = [];\r\n\r\n /**\r\n * Define if the layer is only used in renderTarget or if it also\r\n * renders in the main frame buffer of the canvas.\r\n */\r\n public renderOnlyInRenderTargetTextures = false;\r\n\r\n /**\r\n * Define if the layer is enabled (ie. should be displayed). Default: true\r\n */\r\n public isEnabled = true;\r\n\r\n private _scene: Scene;\r\n private _vertexBuffers: { [key: string]: Nullable<VertexBuffer> } = {};\r\n private _indexBuffer: Nullable<DataBuffer>;\r\n private _drawWrapper: DrawWrapper;\r\n private _previousDefines: string;\r\n\r\n /**\r\n * An event triggered when the layer is disposed.\r\n */\r\n public onDisposeObservable = new Observable<Layer>();\r\n\r\n private _onDisposeObserver: Nullable<Observer<Layer>>;\r\n /**\r\n * Back compatibility with callback before the onDisposeObservable existed.\r\n * The set callback will be triggered when the layer has been disposed.\r\n */\r\n public set onDispose(callback: () => void) {\r\n if (this._onDisposeObserver) {\r\n this.onDisposeObservable.remove(this._onDisposeObserver);\r\n }\r\n this._onDisposeObserver = this.onDisposeObservable.add(callback);\r\n }\r\n\r\n /**\r\n * An event triggered before rendering the scene\r\n */\r\n public onBeforeRenderObservable = new Observable<Layer>();\r\n\r\n private _onBeforeRenderObserver: Nullable<Observer<Layer>>;\r\n /**\r\n * Back compatibility with callback before the onBeforeRenderObservable existed.\r\n * The set callback will be triggered just before rendering the layer.\r\n */\r\n public set onBeforeRender(callback: () => void) {\r\n if (this._onBeforeRenderObserver) {\r\n this.onBeforeRenderObservable.remove(this._onBeforeRenderObserver);\r\n }\r\n this._onBeforeRenderObserver = this.onBeforeRenderObservable.add(callback);\r\n }\r\n\r\n /**\r\n * An event triggered after rendering the scene\r\n */\r\n public onAfterRenderObservable = new Observable<Layer>();\r\n\r\n private _onAfterRenderObserver: Nullable<Observer<Layer>>;\r\n /**\r\n * Back compatibility with callback before the onAfterRenderObservable existed.\r\n * The set callback will be triggered just after rendering the layer.\r\n */\r\n public set onAfterRender(callback: () => void) {\r\n if (this._onAfterRenderObserver) {\r\n this.onAfterRenderObservable.remove(this._onAfterRenderObserver);\r\n }\r\n this._onAfterRenderObserver = this.onAfterRenderObservable.add(callback);\r\n }\r\n\r\n /**\r\n * Instantiates a new layer.\r\n * This represents a full screen 2d layer.\r\n * This can be useful to display a picture in the background of your scene for instance.\r\n * @see https://www.babylonjs-playground.com/#08A2BS#1\r\n * @param name Define the name of the layer in the scene\r\n * @param imgUrl Define the url of the texture to display in the layer\r\n * @param scene Define the scene the layer belongs to\r\n * @param isBackground Defines whether the layer is displayed in front or behind the scene\r\n * @param color Defines a color for the layer\r\n */\r\n constructor(\r\n /**\r\n * Define the name of the layer.\r\n */\r\n public name: string,\r\n imgUrl: Nullable<string>,\r\n scene: Nullable<Scene>,\r\n isBackground?: boolean,\r\n color?: Color4\r\n ) {\r\n this.texture = imgUrl ? new Texture(imgUrl, scene, true) : null;\r\n this.isBackground = isBackground === undefined ? true : isBackground;\r\n this.color = color === undefined ? new Color4(1, 1, 1, 1) : color;\r\n\r\n this._scene = <Scene>(scene || EngineStore.LastCreatedScene);\r\n let layerComponent = this._scene._getComponent(SceneComponentConstants.NAME_LAYER) as LayerSceneComponent;\r\n if (!layerComponent) {\r\n layerComponent = new LayerSceneComponent(this._scene);\r\n this._scene._addComponent(layerComponent);\r\n }\r\n this._scene.layers.push(this);\r\n\r\n const engine = this._scene.getEngine();\r\n\r\n this._drawWrapper = new DrawWrapper(engine);\r\n\r\n // VBO\r\n const vertices = [];\r\n vertices.push(1, 1);\r\n vertices.push(-1, 1);\r\n vertices.push(-1, -1);\r\n vertices.push(1, -1);\r\n\r\n const vertexBuffer = new VertexBuffer(engine, vertices, VertexBuffer.PositionKind, false, false, 2);\r\n this._vertexBuffers[VertexBuffer.PositionKind] = vertexBuffer;\r\n\r\n this._createIndexBuffer();\r\n }\r\n\r\n private _createIndexBuffer(): void {\r\n const engine = this._scene.getEngine();\r\n\r\n // Indices\r\n const indices = [];\r\n indices.push(0);\r\n indices.push(1);\r\n indices.push(2);\r\n\r\n indices.push(0);\r\n indices.push(2);\r\n indices.push(3);\r\n\r\n this._indexBuffer = engine.createIndexBuffer(indices);\r\n }\r\n\r\n /** @internal */\r\n public _rebuild(): void {\r\n const vb = this._vertexBuffers[VertexBuffer.PositionKind];\r\n\r\n if (vb) {\r\n vb._rebuild();\r\n }\r\n\r\n this._createIndexBuffer();\r\n }\r\n\r\n /**\r\n * Renders the layer in the scene.\r\n */\r\n public render(): void {\r\n if (!this.isEnabled) {\r\n return;\r\n }\r\n\r\n const engine = this._scene.getEngine();\r\n\r\n let defines = \"\";\r\n\r\n if (this.alphaTest) {\r\n defines = \"#define ALPHATEST\";\r\n }\r\n\r\n if (this.texture && !this.texture.gammaSpace) {\r\n defines += \"\\r\\n#define LINEAR\";\r\n }\r\n\r\n if (this._previousDefines !== defines) {\r\n this._previousDefines = defines;\r\n this._drawWrapper.effect = engine.createEffect(\"layer\", [VertexBuffer.PositionKind], [\"textureMatrix\", \"color\", \"scale\", \"offset\"], [\"textureSampler\"], defines);\r\n }\r\n const currentEffect = this._drawWrapper.effect;\r\n\r\n // Check\r\n if (!currentEffect || !currentEffect.isReady() || !this.texture || !this.texture.isReady()) {\r\n return;\r\n }\r\n\r\n this.onBeforeRenderObservable.notifyObservers(this);\r\n\r\n // Render\r\n engine.enableEffect(this._drawWrapper);\r\n engine.setState(false);\r\n\r\n // Texture\r\n currentEffect.setTexture(\"textureSampler\", this.texture);\r\n currentEffect.setMatrix(\"textureMatrix\", this.texture.getTextureMatrix());\r\n\r\n // Color\r\n currentEffect.setFloat4(\"color\", this.color.r, this.color.g, this.color.b, this.color.a);\r\n\r\n // Scale / offset\r\n currentEffect.setVector2(\"offset\", this.offset);\r\n currentEffect.setVector2(\"scale\", this.scale);\r\n\r\n // VBOs\r\n engine.bindBuffers(this._vertexBuffers, this._indexBuffer, currentEffect);\r\n\r\n // Draw order\r\n if (!this.alphaTest) {\r\n engine.setAlphaMode(this.alphaBlendingMode);\r\n engine.drawElementsType(Material.TriangleFillMode, 0, 6);\r\n engine.setAlphaMode(Constants.ALPHA_DISABLE);\r\n } else {\r\n engine.drawElementsType(Material.TriangleFillMode, 0, 6);\r\n }\r\n\r\n this.onAfterRenderObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Disposes and releases the associated resources.\r\n */\r\n public dispose(): void {\r\n const vertexBuffer = this._vertexBuffers[VertexBuffer.PositionKind];\r\n if (vertexBuffer) {\r\n vertexBuffer.dispose();\r\n this._vertexBuffers[VertexBuffer.PositionKind] = null;\r\n }\r\n\r\n if (this._indexBuffer) {\r\n this._scene.getEngine()._releaseBuffer(this._indexBuffer);\r\n this._indexBuffer = null;\r\n }\r\n\r\n if (this.texture) {\r\n this.texture.dispose();\r\n this.texture = null;\r\n }\r\n\r\n // Clean RTT list\r\n this.renderTargetTextures = [];\r\n\r\n // Remove from scene\r\n const index = this._scene.layers.indexOf(this);\r\n this._scene.layers.splice(index, 1);\r\n\r\n // Callback\r\n this.onDisposeObservable.notifyObservers(this);\r\n\r\n this.onDisposeObservable.clear();\r\n this.onAfterRenderObservable.clear();\r\n this.onBeforeRenderObservable.clear();\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"layer.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Layers/layer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { Scene } from \"../scene\";\r\nimport { Vector2 } from \"../Maths/math.vector\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { Material } from \"../Materials/material\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport type { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport { SceneComponentConstants } from \"../sceneComponent\";\r\nimport { LayerSceneComponent } from \"./layerSceneComponent\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport type { DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { DrawWrapper } from \"../Materials/drawWrapper\";\r\n\r\nimport \"../Shaders/layer.fragment\";\r\nimport \"../Shaders/layer.vertex\";\r\n\r\n/**\r\n * This represents a full screen 2d layer.\r\n * This can be useful to display a picture in the background of your scene for instance.\r\n * @see https://www.babylonjs-playground.com/#08A2BS#1\r\n */\r\nexport class Layer {\r\n /**\r\n * Define the texture the layer should display.\r\n */\r\n public texture: Nullable<BaseTexture>;\r\n\r\n /**\r\n * Is the layer in background or foreground.\r\n */\r\n public isBackground: boolean;\r\n\r\n private _applyPostProcess: boolean = true;\r\n /**\r\n * Determines if the layer is drawn before (true) or after (false) post-processing.\r\n * If the layer is background, it is always before.\r\n */\r\n public set applyPostProcess(value: boolean) {\r\n this._applyPostProcess = value;\r\n }\r\n public get applyPostProcess(): boolean {\r\n return this.isBackground || this._applyPostProcess;\r\n }\r\n\r\n /**\r\n * Define the color of the layer (instead of texture).\r\n */\r\n public color: Color4;\r\n\r\n /**\r\n * Define the scale of the layer in order to zoom in out of the texture.\r\n */\r\n public scale = new Vector2(1, 1);\r\n\r\n /**\r\n * Define an offset for the layer in order to shift the texture.\r\n */\r\n public offset = new Vector2(0, 0);\r\n\r\n /**\r\n * Define the alpha blending mode used in the layer in case the texture or color has an alpha.\r\n */\r\n public alphaBlendingMode = Constants.ALPHA_COMBINE;\r\n\r\n /**\r\n * Define if the layer should alpha test or alpha blend with the rest of the scene.\r\n * Alpha test will not mix with the background color in case of transparency.\r\n * It will either use the texture color or the background depending on the alpha value of the current pixel.\r\n */\r\n public alphaTest: boolean;\r\n\r\n /**\r\n * Define a mask to restrict the layer to only some of the scene cameras.\r\n */\r\n public layerMask: number = 0x0fffffff;\r\n\r\n /**\r\n * Define the list of render target the layer is visible into.\r\n */\r\n public renderTargetTextures: RenderTargetTexture[] = [];\r\n\r\n /**\r\n * Define if the layer is only used in renderTarget or if it also\r\n * renders in the main frame buffer of the canvas.\r\n */\r\n public renderOnlyInRenderTargetTextures = false;\r\n\r\n /**\r\n * Define if the layer is enabled (ie. should be displayed). Default: true\r\n */\r\n public isEnabled = true;\r\n\r\n private _scene: Scene;\r\n private _vertexBuffers: { [key: string]: Nullable<VertexBuffer> } = {};\r\n private _indexBuffer: Nullable<DataBuffer>;\r\n private _drawWrapper: DrawWrapper;\r\n private _previousDefines: string;\r\n\r\n /**\r\n * An event triggered when the layer is disposed.\r\n */\r\n public onDisposeObservable = new Observable<Layer>();\r\n\r\n private _onDisposeObserver: Nullable<Observer<Layer>>;\r\n /**\r\n * Back compatibility with callback before the onDisposeObservable existed.\r\n * The set callback will be triggered when the layer has been disposed.\r\n */\r\n public set onDispose(callback: () => void) {\r\n if (this._onDisposeObserver) {\r\n this.onDisposeObservable.remove(this._onDisposeObserver);\r\n }\r\n this._onDisposeObserver = this.onDisposeObservable.add(callback);\r\n }\r\n\r\n /**\r\n * An event triggered before rendering the scene\r\n */\r\n public onBeforeRenderObservable = new Observable<Layer>();\r\n\r\n private _onBeforeRenderObserver: Nullable<Observer<Layer>>;\r\n /**\r\n * Back compatibility with callback before the onBeforeRenderObservable existed.\r\n * The set callback will be triggered just before rendering the layer.\r\n */\r\n public set onBeforeRender(callback: () => void) {\r\n if (this._onBeforeRenderObserver) {\r\n this.onBeforeRenderObservable.remove(this._onBeforeRenderObserver);\r\n }\r\n this._onBeforeRenderObserver = this.onBeforeRenderObservable.add(callback);\r\n }\r\n\r\n /**\r\n * An event triggered after rendering the scene\r\n */\r\n public onAfterRenderObservable = new Observable<Layer>();\r\n\r\n private _onAfterRenderObserver: Nullable<Observer<Layer>>;\r\n /**\r\n * Back compatibility with callback before the onAfterRenderObservable existed.\r\n * The set callback will be triggered just after rendering the layer.\r\n */\r\n public set onAfterRender(callback: () => void) {\r\n if (this._onAfterRenderObserver) {\r\n this.onAfterRenderObservable.remove(this._onAfterRenderObserver);\r\n }\r\n this._onAfterRenderObserver = this.onAfterRenderObservable.add(callback);\r\n }\r\n\r\n /**\r\n * Instantiates a new layer.\r\n * This represents a full screen 2d layer.\r\n * This can be useful to display a picture in the background of your scene for instance.\r\n * @see https://www.babylonjs-playground.com/#08A2BS#1\r\n * @param name Define the name of the layer in the scene\r\n * @param imgUrl Define the url of the texture to display in the layer\r\n * @param scene Define the scene the layer belongs to\r\n * @param isBackground Defines whether the layer is displayed in front or behind the scene\r\n * @param color Defines a color for the layer\r\n */\r\n constructor(\r\n /**\r\n * Define the name of the layer.\r\n */\r\n public name: string,\r\n imgUrl: Nullable<string>,\r\n scene: Nullable<Scene>,\r\n isBackground?: boolean,\r\n color?: Color4\r\n ) {\r\n this.texture = imgUrl ? new Texture(imgUrl, scene, true) : null;\r\n this.isBackground = isBackground === undefined ? true : isBackground;\r\n this.color = color === undefined ? new Color4(1, 1, 1, 1) : color;\r\n\r\n this._scene = <Scene>(scene || EngineStore.LastCreatedScene);\r\n let layerComponent = this._scene._getComponent(SceneComponentConstants.NAME_LAYER) as LayerSceneComponent;\r\n if (!layerComponent) {\r\n layerComponent = new LayerSceneComponent(this._scene);\r\n this._scene._addComponent(layerComponent);\r\n }\r\n this._scene.layers.push(this);\r\n\r\n const engine = this._scene.getEngine();\r\n\r\n this._drawWrapper = new DrawWrapper(engine);\r\n\r\n // VBO\r\n const vertices = [];\r\n vertices.push(1, 1);\r\n vertices.push(-1, 1);\r\n vertices.push(-1, -1);\r\n vertices.push(1, -1);\r\n\r\n const vertexBuffer = new VertexBuffer(engine, vertices, VertexBuffer.PositionKind, false, false, 2);\r\n this._vertexBuffers[VertexBuffer.PositionKind] = vertexBuffer;\r\n\r\n this._createIndexBuffer();\r\n }\r\n\r\n private _createIndexBuffer(): void {\r\n const engine = this._scene.getEngine();\r\n\r\n // Indices\r\n const indices = [];\r\n indices.push(0);\r\n indices.push(1);\r\n indices.push(2);\r\n\r\n indices.push(0);\r\n indices.push(2);\r\n indices.push(3);\r\n\r\n this._indexBuffer = engine.createIndexBuffer(indices);\r\n }\r\n\r\n /** @internal */\r\n public _rebuild(): void {\r\n const vb = this._vertexBuffers[VertexBuffer.PositionKind];\r\n\r\n if (vb) {\r\n vb._rebuild();\r\n }\r\n\r\n this._createIndexBuffer();\r\n }\r\n\r\n /**\r\n * Renders the layer in the scene.\r\n */\r\n public render(): void {\r\n if (!this.isEnabled) {\r\n return;\r\n }\r\n\r\n const engine = this._scene.getEngine();\r\n\r\n let defines = \"\";\r\n\r\n if (this.alphaTest) {\r\n defines = \"#define ALPHATEST\";\r\n }\r\n\r\n if (this.texture && !this.texture.gammaSpace) {\r\n defines += \"\\r\\n#define LINEAR\";\r\n }\r\n\r\n if (this._previousDefines !== defines) {\r\n this._previousDefines = defines;\r\n this._drawWrapper.effect = engine.createEffect(\"layer\", [VertexBuffer.PositionKind], [\"textureMatrix\", \"color\", \"scale\", \"offset\"], [\"textureSampler\"], defines);\r\n }\r\n const currentEffect = this._drawWrapper.effect;\r\n\r\n // Check\r\n if (!currentEffect || !currentEffect.isReady() || !this.texture || !this.texture.isReady()) {\r\n return;\r\n }\r\n\r\n this.onBeforeRenderObservable.notifyObservers(this);\r\n\r\n // Render\r\n engine.enableEffect(this._drawWrapper);\r\n engine.setState(false);\r\n\r\n // Texture\r\n currentEffect.setTexture(\"textureSampler\", this.texture);\r\n currentEffect.setMatrix(\"textureMatrix\", this.texture.getTextureMatrix());\r\n\r\n // Color\r\n currentEffect.setFloat4(\"color\", this.color.r, this.color.g, this.color.b, this.color.a);\r\n\r\n // Scale / offset\r\n currentEffect.setVector2(\"offset\", this.offset);\r\n currentEffect.setVector2(\"scale\", this.scale);\r\n\r\n // VBOs\r\n engine.bindBuffers(this._vertexBuffers, this._indexBuffer, currentEffect);\r\n\r\n // Draw order\r\n if (!this.alphaTest) {\r\n engine.setAlphaMode(this.alphaBlendingMode);\r\n engine.drawElementsType(Material.TriangleFillMode, 0, 6);\r\n engine.setAlphaMode(Constants.ALPHA_DISABLE);\r\n } else {\r\n engine.drawElementsType(Material.TriangleFillMode, 0, 6);\r\n }\r\n\r\n this.onAfterRenderObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Disposes and releases the associated resources.\r\n */\r\n public dispose(): void {\r\n const vertexBuffer = this._vertexBuffers[VertexBuffer.PositionKind];\r\n if (vertexBuffer) {\r\n vertexBuffer.dispose();\r\n this._vertexBuffers[VertexBuffer.PositionKind] = null;\r\n }\r\n\r\n if (this._indexBuffer) {\r\n this._scene.getEngine()._releaseBuffer(this._indexBuffer);\r\n this._indexBuffer = null;\r\n }\r\n\r\n if (this.texture) {\r\n this.texture.dispose();\r\n this.texture = null;\r\n }\r\n\r\n // Clean RTT list\r\n this.renderTargetTextures = [];\r\n\r\n // Remove from scene\r\n const index = this._scene.layers.indexOf(this);\r\n this._scene.layers.splice(index, 1);\r\n\r\n // Callback\r\n this.onDisposeObservable.notifyObservers(this);\r\n\r\n this.onDisposeObservable.clear();\r\n this.onAfterRenderObservable.clear();\r\n this.onBeforeRenderObservable.clear();\r\n }\r\n}\r\n"]}
|
|
@@ -45,10 +45,12 @@ export declare class LayerSceneComponent implements ISceneComponent {
|
|
|
45
45
|
private _draw;
|
|
46
46
|
private _drawCameraPredicate;
|
|
47
47
|
private _drawCameraBackground;
|
|
48
|
-
private
|
|
48
|
+
private _drawCameraForegroundWithPostProcessing;
|
|
49
|
+
private _drawCameraForegroundWithoutPostProcessing;
|
|
49
50
|
private _drawRenderTargetPredicate;
|
|
50
51
|
private _drawRenderTargetBackground;
|
|
51
|
-
private
|
|
52
|
+
private _drawRenderTargetForegroundWithPostProcessing;
|
|
53
|
+
private _drawRenderTargetForegroundWithoutPostProcessing;
|
|
52
54
|
/**
|
|
53
55
|
* Adds all the elements from the container to the scene
|
|
54
56
|
* @param container the container holding the elements
|
|
@@ -26,9 +26,11 @@ export class LayerSceneComponent {
|
|
|
26
26
|
*/
|
|
27
27
|
register() {
|
|
28
28
|
this.scene._beforeCameraDrawStage.registerStep(SceneComponentConstants.STEP_BEFORECAMERADRAW_LAYER, this, this._drawCameraBackground);
|
|
29
|
-
this.scene._afterCameraDrawStage.registerStep(SceneComponentConstants.STEP_AFTERCAMERADRAW_LAYER, this, this.
|
|
29
|
+
this.scene._afterCameraDrawStage.registerStep(SceneComponentConstants.STEP_AFTERCAMERADRAW_LAYER, this, this._drawCameraForegroundWithPostProcessing);
|
|
30
|
+
this.scene._afterCameraPostProcessStage.registerStep(SceneComponentConstants.STEP_AFTERCAMERAPOSTPROCESS_LAYER, this, this._drawCameraForegroundWithoutPostProcessing);
|
|
30
31
|
this.scene._beforeRenderTargetDrawStage.registerStep(SceneComponentConstants.STEP_BEFORERENDERTARGETDRAW_LAYER, this, this._drawRenderTargetBackground);
|
|
31
|
-
this.scene._afterRenderTargetDrawStage.registerStep(SceneComponentConstants.STEP_AFTERRENDERTARGETDRAW_LAYER, this, this.
|
|
32
|
+
this.scene._afterRenderTargetDrawStage.registerStep(SceneComponentConstants.STEP_AFTERRENDERTARGETDRAW_LAYER, this, this._drawRenderTargetForegroundWithPostProcessing);
|
|
33
|
+
this.scene._afterRenderTargetPostProcessStage.registerStep(SceneComponentConstants.STEP_AFTERRENDERTARGETPOSTPROCESS_LAYER, this, this._drawRenderTargetForegroundWithoutPostProcessing);
|
|
32
34
|
}
|
|
33
35
|
/**
|
|
34
36
|
* Rebuilds the elements related to this component in case of
|
|
@@ -61,33 +63,47 @@ export class LayerSceneComponent {
|
|
|
61
63
|
this._engine.setDepthBuffer(true);
|
|
62
64
|
}
|
|
63
65
|
}
|
|
64
|
-
_drawCameraPredicate(layer, isBackground, cameraLayerMask) {
|
|
65
|
-
return !layer.renderOnlyInRenderTargetTextures &&
|
|
66
|
+
_drawCameraPredicate(layer, isBackground, applyPostProcess, cameraLayerMask) {
|
|
67
|
+
return (!layer.renderOnlyInRenderTargetTextures &&
|
|
68
|
+
layer.isBackground === isBackground &&
|
|
69
|
+
layer.applyPostProcess === applyPostProcess &&
|
|
70
|
+
(layer.layerMask & cameraLayerMask) !== 0);
|
|
66
71
|
}
|
|
67
72
|
_drawCameraBackground(camera) {
|
|
68
73
|
this._draw((layer) => {
|
|
69
|
-
return this._drawCameraPredicate(layer, true, camera.layerMask);
|
|
74
|
+
return this._drawCameraPredicate(layer, true, true, camera.layerMask);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
_drawCameraForegroundWithPostProcessing(camera) {
|
|
78
|
+
this._draw((layer) => {
|
|
79
|
+
return this._drawCameraPredicate(layer, false, true, camera.layerMask);
|
|
70
80
|
});
|
|
71
81
|
}
|
|
72
|
-
|
|
82
|
+
_drawCameraForegroundWithoutPostProcessing(camera) {
|
|
73
83
|
this._draw((layer) => {
|
|
74
|
-
return this._drawCameraPredicate(layer, false, camera.layerMask);
|
|
84
|
+
return this._drawCameraPredicate(layer, false, false, camera.layerMask);
|
|
75
85
|
});
|
|
76
86
|
}
|
|
77
|
-
_drawRenderTargetPredicate(layer, isBackground, cameraLayerMask, renderTargetTexture) {
|
|
87
|
+
_drawRenderTargetPredicate(layer, isBackground, applyPostProcess, cameraLayerMask, renderTargetTexture) {
|
|
78
88
|
return (layer.renderTargetTextures.length > 0 &&
|
|
79
89
|
layer.isBackground === isBackground &&
|
|
90
|
+
layer.applyPostProcess === applyPostProcess &&
|
|
80
91
|
layer.renderTargetTextures.indexOf(renderTargetTexture) > -1 &&
|
|
81
92
|
(layer.layerMask & cameraLayerMask) !== 0);
|
|
82
93
|
}
|
|
83
94
|
_drawRenderTargetBackground(renderTarget) {
|
|
84
95
|
this._draw((layer) => {
|
|
85
|
-
return this._drawRenderTargetPredicate(layer, true, this.scene.activeCamera.layerMask, renderTarget);
|
|
96
|
+
return this._drawRenderTargetPredicate(layer, true, true, this.scene.activeCamera.layerMask, renderTarget);
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
_drawRenderTargetForegroundWithPostProcessing(renderTarget) {
|
|
100
|
+
this._draw((layer) => {
|
|
101
|
+
return this._drawRenderTargetPredicate(layer, false, true, this.scene.activeCamera.layerMask, renderTarget);
|
|
86
102
|
});
|
|
87
103
|
}
|
|
88
|
-
|
|
104
|
+
_drawRenderTargetForegroundWithoutPostProcessing(renderTarget) {
|
|
89
105
|
this._draw((layer) => {
|
|
90
|
-
return this._drawRenderTargetPredicate(layer, false, this.scene.activeCamera.layerMask, renderTarget);
|
|
106
|
+
return this._drawRenderTargetPredicate(layer, false, false, this.scene.activeCamera.layerMask, renderTarget);
|
|
91
107
|
});
|
|
92
108
|
}
|
|
93
109
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layerSceneComponent.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Layers/layerSceneComponent.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Camera } from \"../Cameras/camera\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { Engine } from \"../Engines/engine\";\r\nimport type { ISceneComponent } from \"../sceneComponent\";\r\nimport { SceneComponentConstants } from \"../sceneComponent\";\r\nimport type { Layer } from \"./layer\";\r\nimport type { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport type { AbstractScene } from \"../abstractScene\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\n\r\ndeclare module \"../abstractScene\" {\r\n export interface AbstractScene {\r\n /**\r\n * The list of layers (background and foreground) of the scene\r\n */\r\n layers: Array<Layer>;\r\n }\r\n}\r\n\r\n/**\r\n * Defines the layer scene component responsible to manage any layers\r\n * in a given scene.\r\n */\r\nexport class LayerSceneComponent implements ISceneComponent {\r\n /**\r\n * The component name helpful to identify the component in the list of scene components.\r\n */\r\n public readonly name = SceneComponentConstants.NAME_LAYER;\r\n\r\n /**\r\n * The scene the component belongs to.\r\n */\r\n public scene: Scene;\r\n\r\n private _engine: Engine;\r\n\r\n /**\r\n * Creates a new instance of the component for the given scene\r\n * @param scene Defines the scene to register the component in\r\n */\r\n constructor(scene?: Scene) {\r\n this.scene = scene || <Scene>EngineStore.LastCreatedScene;\r\n if (!this.scene) {\r\n return;\r\n }\r\n this._engine = this.scene.getEngine();\r\n this.scene.layers = new Array<Layer>();\r\n }\r\n\r\n /**\r\n * Registers the component in a given scene\r\n */\r\n public register(): void {\r\n this.scene._beforeCameraDrawStage.registerStep(SceneComponentConstants.STEP_BEFORECAMERADRAW_LAYER, this, this._drawCameraBackground);\r\n this.scene._afterCameraDrawStage.registerStep(SceneComponentConstants.STEP_AFTERCAMERADRAW_LAYER, this, this._drawCameraForeground);\r\n\r\n this.scene._beforeRenderTargetDrawStage.registerStep(SceneComponentConstants.STEP_BEFORERENDERTARGETDRAW_LAYER, this, this._drawRenderTargetBackground);\r\n this.scene._afterRenderTargetDrawStage.registerStep(SceneComponentConstants.STEP_AFTERRENDERTARGETDRAW_LAYER, this, this._drawRenderTargetForeground);\r\n }\r\n\r\n /**\r\n * Rebuilds the elements related to this component in case of\r\n * context lost for instance.\r\n */\r\n public rebuild(): void {\r\n const layers = this.scene.layers;\r\n\r\n for (const layer of layers) {\r\n layer._rebuild();\r\n }\r\n }\r\n\r\n /**\r\n * Disposes the component and the associated resources.\r\n */\r\n public dispose(): void {\r\n const layers = this.scene.layers;\r\n\r\n while (layers.length) {\r\n layers[0].dispose();\r\n }\r\n }\r\n\r\n private _draw(predicate: (layer: Layer) => boolean): void {\r\n const layers = this.scene.layers;\r\n\r\n if (layers.length) {\r\n this._engine.setDepthBuffer(false);\r\n for (const layer of layers) {\r\n if (predicate(layer)) {\r\n layer.render();\r\n }\r\n }\r\n this._engine.setDepthBuffer(true);\r\n }\r\n }\r\n\r\n private _drawCameraPredicate(layer: Layer, isBackground: boolean, cameraLayerMask: number): boolean {\r\n return !layer.renderOnlyInRenderTargetTextures && layer.isBackground === isBackground && (layer.layerMask & cameraLayerMask) !== 0;\r\n }\r\n\r\n private _drawCameraBackground(camera: Camera): void {\r\n this._draw((layer: Layer) => {\r\n return this._drawCameraPredicate(layer, true, camera.layerMask);\r\n });\r\n }\r\n\r\n private _drawCameraForeground(camera: Camera): void {\r\n this._draw((layer: Layer) => {\r\n return this._drawCameraPredicate(layer, false, camera.layerMask);\r\n });\r\n }\r\n\r\n private _drawRenderTargetPredicate(layer: Layer, isBackground: boolean, cameraLayerMask: number, renderTargetTexture: RenderTargetTexture): boolean {\r\n return (\r\n layer.renderTargetTextures.length > 0 &&\r\n layer.isBackground === isBackground &&\r\n layer.renderTargetTextures.indexOf(renderTargetTexture) > -1 &&\r\n (layer.layerMask & cameraLayerMask) !== 0\r\n );\r\n }\r\n\r\n private _drawRenderTargetBackground(renderTarget: RenderTargetTexture): void {\r\n this._draw((layer: Layer) => {\r\n return this._drawRenderTargetPredicate(layer, true, this.scene.activeCamera!.layerMask, renderTarget);\r\n });\r\n }\r\n\r\n private _drawRenderTargetForeground(renderTarget: RenderTargetTexture): void {\r\n this._draw((layer: Layer) => {\r\n return this._drawRenderTargetPredicate(layer, false, this.scene.activeCamera!.layerMask, renderTarget);\r\n });\r\n }\r\n\r\n /**\r\n * Adds all the elements from the container to the scene\r\n * @param container the container holding the elements\r\n */\r\n public addFromContainer(container: AbstractScene): void {\r\n if (!container.layers) {\r\n return;\r\n }\r\n container.layers.forEach((layer) => {\r\n this.scene.layers.push(layer);\r\n });\r\n }\r\n\r\n /**\r\n * Removes all the elements in the container from the scene\r\n * @param container contains the elements to remove\r\n * @param dispose if the removed element should be disposed (default: false)\r\n */\r\n public removeFromContainer(container: AbstractScene, dispose = false): void {\r\n if (!container.layers) {\r\n return;\r\n }\r\n container.layers.forEach((layer) => {\r\n const index = this.scene.layers.indexOf(layer);\r\n if (index !== -1) {\r\n this.scene.layers.splice(index, 1);\r\n }\r\n if (dispose) {\r\n layer.dispose();\r\n }\r\n });\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"layerSceneComponent.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Layers/layerSceneComponent.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Camera } from \"../Cameras/camera\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { Engine } from \"../Engines/engine\";\r\nimport type { ISceneComponent } from \"../sceneComponent\";\r\nimport { SceneComponentConstants } from \"../sceneComponent\";\r\nimport type { Layer } from \"./layer\";\r\nimport type { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport type { AbstractScene } from \"../abstractScene\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\n\r\ndeclare module \"../abstractScene\" {\r\n export interface AbstractScene {\r\n /**\r\n * The list of layers (background and foreground) of the scene\r\n */\r\n layers: Array<Layer>;\r\n }\r\n}\r\n\r\n/**\r\n * Defines the layer scene component responsible to manage any layers\r\n * in a given scene.\r\n */\r\nexport class LayerSceneComponent implements ISceneComponent {\r\n /**\r\n * The component name helpful to identify the component in the list of scene components.\r\n */\r\n public readonly name = SceneComponentConstants.NAME_LAYER;\r\n\r\n /**\r\n * The scene the component belongs to.\r\n */\r\n public scene: Scene;\r\n\r\n private _engine: Engine;\r\n\r\n /**\r\n * Creates a new instance of the component for the given scene\r\n * @param scene Defines the scene to register the component in\r\n */\r\n constructor(scene?: Scene) {\r\n this.scene = scene || <Scene>EngineStore.LastCreatedScene;\r\n if (!this.scene) {\r\n return;\r\n }\r\n this._engine = this.scene.getEngine();\r\n this.scene.layers = new Array<Layer>();\r\n }\r\n\r\n /**\r\n * Registers the component in a given scene\r\n */\r\n public register(): void {\r\n this.scene._beforeCameraDrawStage.registerStep(SceneComponentConstants.STEP_BEFORECAMERADRAW_LAYER, this, this._drawCameraBackground);\r\n this.scene._afterCameraDrawStage.registerStep(SceneComponentConstants.STEP_AFTERCAMERADRAW_LAYER, this, this._drawCameraForegroundWithPostProcessing);\r\n this.scene._afterCameraPostProcessStage.registerStep(SceneComponentConstants.STEP_AFTERCAMERAPOSTPROCESS_LAYER, this, this._drawCameraForegroundWithoutPostProcessing);\r\n\r\n this.scene._beforeRenderTargetDrawStage.registerStep(SceneComponentConstants.STEP_BEFORERENDERTARGETDRAW_LAYER, this, this._drawRenderTargetBackground);\r\n this.scene._afterRenderTargetDrawStage.registerStep(SceneComponentConstants.STEP_AFTERRENDERTARGETDRAW_LAYER, this, this._drawRenderTargetForegroundWithPostProcessing);\r\n this.scene._afterRenderTargetPostProcessStage.registerStep(\r\n SceneComponentConstants.STEP_AFTERRENDERTARGETPOSTPROCESS_LAYER,\r\n this,\r\n this._drawRenderTargetForegroundWithoutPostProcessing\r\n );\r\n }\r\n\r\n /**\r\n * Rebuilds the elements related to this component in case of\r\n * context lost for instance.\r\n */\r\n public rebuild(): void {\r\n const layers = this.scene.layers;\r\n\r\n for (const layer of layers) {\r\n layer._rebuild();\r\n }\r\n }\r\n\r\n /**\r\n * Disposes the component and the associated resources.\r\n */\r\n public dispose(): void {\r\n const layers = this.scene.layers;\r\n\r\n while (layers.length) {\r\n layers[0].dispose();\r\n }\r\n }\r\n\r\n private _draw(predicate: (layer: Layer) => boolean): void {\r\n const layers = this.scene.layers;\r\n\r\n if (layers.length) {\r\n this._engine.setDepthBuffer(false);\r\n for (const layer of layers) {\r\n if (predicate(layer)) {\r\n layer.render();\r\n }\r\n }\r\n this._engine.setDepthBuffer(true);\r\n }\r\n }\r\n\r\n private _drawCameraPredicate(layer: Layer, isBackground: boolean, applyPostProcess: boolean, cameraLayerMask: number): boolean {\r\n return (\r\n !layer.renderOnlyInRenderTargetTextures &&\r\n layer.isBackground === isBackground &&\r\n layer.applyPostProcess === applyPostProcess &&\r\n (layer.layerMask & cameraLayerMask) !== 0\r\n );\r\n }\r\n\r\n private _drawCameraBackground(camera: Camera): void {\r\n this._draw((layer: Layer) => {\r\n return this._drawCameraPredicate(layer, true, true, camera.layerMask);\r\n });\r\n }\r\n\r\n private _drawCameraForegroundWithPostProcessing(camera: Camera): void {\r\n this._draw((layer: Layer) => {\r\n return this._drawCameraPredicate(layer, false, true, camera.layerMask);\r\n });\r\n }\r\n\r\n private _drawCameraForegroundWithoutPostProcessing(camera: Camera): void {\r\n this._draw((layer: Layer) => {\r\n return this._drawCameraPredicate(layer, false, false, camera.layerMask);\r\n });\r\n }\r\n\r\n private _drawRenderTargetPredicate(layer: Layer, isBackground: boolean, applyPostProcess: boolean, cameraLayerMask: number, renderTargetTexture: RenderTargetTexture): boolean {\r\n return (\r\n layer.renderTargetTextures.length > 0 &&\r\n layer.isBackground === isBackground &&\r\n layer.applyPostProcess === applyPostProcess &&\r\n layer.renderTargetTextures.indexOf(renderTargetTexture) > -1 &&\r\n (layer.layerMask & cameraLayerMask) !== 0\r\n );\r\n }\r\n\r\n private _drawRenderTargetBackground(renderTarget: RenderTargetTexture): void {\r\n this._draw((layer: Layer) => {\r\n return this._drawRenderTargetPredicate(layer, true, true, this.scene.activeCamera!.layerMask, renderTarget);\r\n });\r\n }\r\n\r\n private _drawRenderTargetForegroundWithPostProcessing(renderTarget: RenderTargetTexture): void {\r\n this._draw((layer: Layer) => {\r\n return this._drawRenderTargetPredicate(layer, false, true, this.scene.activeCamera!.layerMask, renderTarget);\r\n });\r\n }\r\n\r\n private _drawRenderTargetForegroundWithoutPostProcessing(renderTarget: RenderTargetTexture): void {\r\n this._draw((layer: Layer) => {\r\n return this._drawRenderTargetPredicate(layer, false, false, this.scene.activeCamera!.layerMask, renderTarget);\r\n });\r\n }\r\n\r\n /**\r\n * Adds all the elements from the container to the scene\r\n * @param container the container holding the elements\r\n */\r\n public addFromContainer(container: AbstractScene): void {\r\n if (!container.layers) {\r\n return;\r\n }\r\n container.layers.forEach((layer) => {\r\n this.scene.layers.push(layer);\r\n });\r\n }\r\n\r\n /**\r\n * Removes all the elements in the container from the scene\r\n * @param container contains the elements to remove\r\n * @param dispose if the removed element should be disposed (default: false)\r\n */\r\n public removeFromContainer(container: AbstractScene, dispose = false): void {\r\n if (!container.layers) {\r\n return;\r\n }\r\n container.layers.forEach((layer) => {\r\n const index = this.scene.layers.indexOf(layer);\r\n if (index !== -1) {\r\n this.scene.layers.splice(index, 1);\r\n }\r\n if (dispose) {\r\n layer.dispose();\r\n }\r\n });\r\n }\r\n}\r\n"]}
|
package/Loading/loadingScreen.js
CHANGED
|
@@ -146,16 +146,16 @@ export class DefaultLoadingScreen {
|
|
|
146
146
|
return;
|
|
147
147
|
}
|
|
148
148
|
const onTransitionEnd = () => {
|
|
149
|
+
if (this._loadingTextDiv) {
|
|
150
|
+
this._loadingTextDiv.remove();
|
|
151
|
+
this._loadingTextDiv = null;
|
|
152
|
+
}
|
|
149
153
|
if (this._loadingDiv) {
|
|
150
|
-
|
|
151
|
-
this._loadingDiv.parentElement.removeChild(this._loadingDiv);
|
|
152
|
-
}
|
|
154
|
+
this._loadingDiv.remove();
|
|
153
155
|
this._loadingDiv = null;
|
|
154
156
|
}
|
|
155
157
|
if (this._style) {
|
|
156
|
-
|
|
157
|
-
this._style.parentElement.removeChild(this._style);
|
|
158
|
-
}
|
|
158
|
+
this._style.remove();
|
|
159
159
|
this._style = null;
|
|
160
160
|
}
|
|
161
161
|
window.removeEventListener("resize", this._resizeLoadingUI);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadingScreen.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Loading/loadingScreen.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { Engine } from \"../Engines/engine\";\r\n/**\r\n * Interface used to present a loading screen while loading a scene\r\n * @see https://doc.babylonjs.com/how_to/creating_a_custom_loading_screen\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/how_to/creating_a_custom_loading_screen\r\n */\r\nexport class DefaultLoadingScreen implements ILoadingScreen {\r\n private _loadingDiv: Nullable<HTMLDivElement>;\r\n private _loadingTextDiv: 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(private _renderingCanvas: HTMLCanvasElement, private _loadingText = \"\", private _loadingDivBackgroundColor = \"black\") {}\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.webkitAnimation = \"spin1 0.75s infinite linear\";\r\n imgSpinner.style.transformOrigin = \"50% 50%\";\r\n imgSpinner.style.webkitTransformOrigin = \"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._loadingDiv) {\r\n if (this._loadingDiv.parentElement) {\r\n this._loadingDiv.parentElement.removeChild(this._loadingDiv);\r\n }\r\n this._loadingDiv = null;\r\n }\r\n if (this._style) {\r\n if (this._style.parentElement) {\r\n this._style.parentElement.removeChild(this._style);\r\n }\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\nEngine.DefaultLoadingScreenFactory = (canvas: HTMLCanvasElement) => {\r\n return new DefaultLoadingScreen(canvas);\r\n};\r\n"]}
|
|
1
|
+
{"version":3,"file":"loadingScreen.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Loading/loadingScreen.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { Engine } from \"../Engines/engine\";\r\n/**\r\n * Interface used to present a loading screen while loading a scene\r\n * @see https://doc.babylonjs.com/how_to/creating_a_custom_loading_screen\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/how_to/creating_a_custom_loading_screen\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(private _renderingCanvas: HTMLCanvasElement, private _loadingText = \"\", private _loadingDivBackgroundColor = \"black\") {}\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.webkitAnimation = \"spin1 0.75s infinite linear\";\r\n imgSpinner.style.transformOrigin = \"50% 50%\";\r\n imgSpinner.style.webkitTransformOrigin = \"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\nEngine.DefaultLoadingScreenFactory = (canvas: HTMLCanvasElement) => {\r\n return new DefaultLoadingScreen(canvas);\r\n};\r\n"]}
|
|
@@ -861,6 +861,9 @@ export class RenderTargetTexture extends Texture {
|
|
|
861
861
|
else if (useCameraPostProcess) {
|
|
862
862
|
scene.postProcessManager._finalizeFrame(false, this._renderTarget ?? undefined, faceIndex);
|
|
863
863
|
}
|
|
864
|
+
for (const step of scene._afterRenderTargetPostProcessStage) {
|
|
865
|
+
step.action(this, faceIndex, layer);
|
|
866
|
+
}
|
|
864
867
|
if (this._texture) {
|
|
865
868
|
this._texture.generateMipMaps = saveGenerateMipMaps;
|
|
866
869
|
}
|