@babylonjs/core 5.35.1 → 5.37.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.
Files changed (274) hide show
  1. package/Audio/sound.d.ts +5 -0
  2. package/Audio/sound.js +7 -0
  3. package/Audio/sound.js.map +1 -1
  4. package/Cameras/arcRotateCamera.d.ts +2 -2
  5. package/Cameras/arcRotateCamera.js.map +1 -1
  6. package/Debug/physicsViewer.d.ts +4 -3
  7. package/Debug/physicsViewer.js +2 -2
  8. package/Debug/physicsViewer.js.map +1 -1
  9. package/Engines/Extensions/engine.views.d.ts +4 -0
  10. package/Engines/Extensions/engine.views.js +61 -42
  11. package/Engines/Extensions/engine.views.js.map +1 -1
  12. package/Engines/thinEngine.js +2 -2
  13. package/Engines/thinEngine.js.map +1 -1
  14. package/Gizmos/planeRotationGizmo.js +3 -1
  15. package/Gizmos/planeRotationGizmo.js.map +1 -1
  16. package/Inputs/scene.inputManager.js +4 -4
  17. package/Inputs/scene.inputManager.js.map +1 -1
  18. package/Loading/Plugins/babylonFileLoader.js +3 -3
  19. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  20. package/Materials/Node/Blocks/Dual/currentScreenBlock.js +2 -3
  21. package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
  22. package/Materials/Node/Blocks/Dual/fogBlock.js +4 -4
  23. package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
  24. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js +2 -2
  25. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js.map +1 -1
  26. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +2 -3
  27. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  28. package/Materials/Node/Blocks/Dual/textureBlock.js +4 -5
  29. package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
  30. package/Materials/Node/Blocks/Fragment/TBNBlock.js +2 -2
  31. package/Materials/Node/Blocks/Fragment/TBNBlock.js.map +1 -1
  32. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +2 -2
  33. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  34. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js +2 -2
  35. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js.map +1 -1
  36. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.d.ts +4 -0
  37. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +35 -19
  38. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  39. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js +2 -2
  40. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js.map +1 -1
  41. package/Materials/Node/Blocks/Fragment/shadowMapBlock.js +2 -2
  42. package/Materials/Node/Blocks/Fragment/shadowMapBlock.js.map +1 -1
  43. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +2 -2
  44. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  45. package/Materials/Node/Blocks/PBR/reflectionBlock.js +2 -2
  46. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  47. package/Materials/Node/Blocks/Particle/particleTextureBlock.js +2 -3
  48. package/Materials/Node/Blocks/Particle/particleTextureBlock.js.map +1 -1
  49. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +2 -2
  50. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  51. package/Materials/Node/Blocks/gradientBlock.js +7 -6
  52. package/Materials/Node/Blocks/gradientBlock.js.map +1 -1
  53. package/Materials/Node/Blocks/normalBlendBlock.js +10 -8
  54. package/Materials/Node/Blocks/normalBlendBlock.js.map +1 -1
  55. package/Materials/Node/Blocks/randomNumberBlock.js +6 -5
  56. package/Materials/Node/Blocks/randomNumberBlock.js.map +1 -1
  57. package/Materials/Node/Blocks/reflectBlock.js +10 -8
  58. package/Materials/Node/Blocks/reflectBlock.js.map +1 -1
  59. package/Materials/Node/Blocks/refractBlock.js +10 -8
  60. package/Materials/Node/Blocks/refractBlock.js.map +1 -1
  61. package/Materials/Node/Blocks/triPlanarBlock.js +4 -4
  62. package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
  63. package/Materials/Node/Enums/nodeMaterialBlockConnectionPointTypes.d.ts +3 -1
  64. package/Materials/Node/Enums/nodeMaterialBlockConnectionPointTypes.js +2 -0
  65. package/Materials/Node/Enums/nodeMaterialBlockConnectionPointTypes.js.map +1 -1
  66. package/Materials/Node/nodeMaterial.d.ts +19 -1
  67. package/Materials/Node/nodeMaterial.js +30 -0
  68. package/Materials/Node/nodeMaterial.js.map +1 -1
  69. package/Materials/Node/nodeMaterialBlockConnectionPoint.d.ts +5 -0
  70. package/Materials/Node/nodeMaterialBlockConnectionPoint.js +13 -0
  71. package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
  72. package/Materials/Node/nodeMaterialBuildStateSharedData.d.ts +2 -8
  73. package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
  74. package/Materials/Textures/baseTexture.d.ts +2 -1
  75. package/Materials/Textures/baseTexture.js +3 -2
  76. package/Materials/Textures/baseTexture.js.map +1 -1
  77. package/Materials/Textures/internalTexture.d.ts +2 -0
  78. package/Materials/Textures/internalTexture.js +4 -0
  79. package/Materials/Textures/internalTexture.js.map +1 -1
  80. package/Materials/Textures/mirrorTexture.js +0 -2
  81. package/Materials/Textures/mirrorTexture.js.map +1 -1
  82. package/Materials/Textures/texture.d.ts +2 -0
  83. package/Materials/Textures/texture.js +35 -7
  84. package/Materials/Textures/texture.js.map +1 -1
  85. package/Materials/Textures/videoTexture.d.ts +5 -0
  86. package/Materials/Textures/videoTexture.js +27 -23
  87. package/Materials/Textures/videoTexture.js.map +1 -1
  88. package/Materials/material.js +1 -1
  89. package/Materials/material.js.map +1 -1
  90. package/Materials/materialHelper.js +3 -0
  91. package/Materials/materialHelper.js.map +1 -1
  92. package/Meshes/abstractMesh.d.ts +4 -4
  93. package/Meshes/abstractMesh.js +4 -4
  94. package/Meshes/abstractMesh.js.map +1 -1
  95. package/Meshes/mesh.d.ts +2 -2
  96. package/Meshes/mesh.js +1 -1
  97. package/Meshes/mesh.js.map +1 -1
  98. package/Misc/copyTextureToTexture.d.ts +9 -2
  99. package/Misc/copyTextureToTexture.js +23 -1
  100. package/Misc/copyTextureToTexture.js.map +1 -1
  101. package/Misc/virtualJoystick.d.ts +1 -0
  102. package/Misc/virtualJoystick.js +6 -0
  103. package/Misc/virtualJoystick.js.map +1 -1
  104. package/Particles/IParticleSystem.d.ts +15 -1
  105. package/Particles/IParticleSystem.js.map +1 -1
  106. package/Particles/gpuParticleSystem.d.ts +24 -2
  107. package/Particles/gpuParticleSystem.js +98 -43
  108. package/Particles/gpuParticleSystem.js.map +1 -1
  109. package/Particles/particleSystem.d.ts +6 -1
  110. package/Particles/particleSystem.js +7 -2
  111. package/Particles/particleSystem.js.map +1 -1
  112. package/Physics/IPhysicsEngine.d.ts +8 -108
  113. package/Physics/IPhysicsEngine.js.map +1 -1
  114. package/Physics/Plugins/ammoJSPlugin.d.ts +1 -389
  115. package/Physics/Plugins/ammoJSPlugin.js +2 -1414
  116. package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
  117. package/Physics/Plugins/cannonJSPlugin.d.ts +1 -75
  118. package/Physics/Plugins/cannonJSPlugin.js +2 -664
  119. package/Physics/Plugins/cannonJSPlugin.js.map +1 -1
  120. package/Physics/Plugins/oimoJSPlugin.d.ts +1 -59
  121. package/Physics/Plugins/oimoJSPlugin.js +2 -432
  122. package/Physics/Plugins/oimoJSPlugin.js.map +1 -1
  123. package/Physics/index.d.ts +3 -6
  124. package/Physics/index.js +3 -6
  125. package/Physics/index.js.map +1 -1
  126. package/Physics/physicsEngine.d.ts +1 -135
  127. package/Physics/physicsEngine.js +2 -221
  128. package/Physics/physicsEngine.js.map +1 -1
  129. package/Physics/physicsEngineComponent.d.ts +7 -42
  130. package/Physics/physicsEngineComponent.js +11 -71
  131. package/Physics/physicsEngineComponent.js.map +1 -1
  132. package/Physics/physicsHelper.d.ts +1 -411
  133. package/Physics/physicsHelper.js +2 -708
  134. package/Physics/physicsHelper.js.map +1 -1
  135. package/Physics/physicsImpostor.d.ts +1 -640
  136. package/Physics/physicsImpostor.js +2 -1004
  137. package/Physics/physicsImpostor.js.map +1 -1
  138. package/Physics/physicsJoint.d.ts +1 -275
  139. package/Physics/physicsJoint.js +2 -222
  140. package/Physics/physicsJoint.js.map +1 -1
  141. package/Physics/v1/IPhysicsEnginePlugin.d.ts +73 -0
  142. package/Physics/v1/IPhysicsEnginePlugin.js +2 -0
  143. package/Physics/v1/IPhysicsEnginePlugin.js.map +1 -0
  144. package/Physics/v1/Plugins/ammoJSPlugin.d.ts +401 -0
  145. package/Physics/v1/Plugins/ammoJSPlugin.js +1431 -0
  146. package/Physics/v1/Plugins/ammoJSPlugin.js.map +1 -0
  147. package/Physics/v1/Plugins/cannonJSPlugin.d.ts +87 -0
  148. package/Physics/v1/Plugins/cannonJSPlugin.js +683 -0
  149. package/Physics/v1/Plugins/cannonJSPlugin.js.map +1 -0
  150. package/Physics/{Plugins → v1/Plugins}/index.d.ts +0 -0
  151. package/Physics/{Plugins → v1/Plugins}/index.js +0 -0
  152. package/Physics/v1/Plugins/index.js.map +1 -0
  153. package/Physics/v1/Plugins/oimoJSPlugin.d.ts +71 -0
  154. package/Physics/v1/Plugins/oimoJSPlugin.js +450 -0
  155. package/Physics/v1/Plugins/oimoJSPlugin.js.map +1 -0
  156. package/Physics/v1/index.d.ts +7 -0
  157. package/Physics/v1/index.js +9 -0
  158. package/Physics/v1/index.js.map +1 -0
  159. package/Physics/v1/physicsEngine.d.ts +147 -0
  160. package/Physics/v1/physicsEngine.js +237 -0
  161. package/Physics/v1/physicsEngine.js.map +1 -0
  162. package/Physics/v1/physicsEngineComponent.d.ts +45 -0
  163. package/Physics/v1/physicsEngineComponent.js +70 -0
  164. package/Physics/v1/physicsEngineComponent.js.map +1 -0
  165. package/Physics/v1/physicsHelper.d.ts +411 -0
  166. package/Physics/v1/physicsHelper.js +709 -0
  167. package/Physics/v1/physicsHelper.js.map +1 -0
  168. package/Physics/v1/physicsImpostor.d.ts +636 -0
  169. package/Physics/v1/physicsImpostor.js +1001 -0
  170. package/Physics/v1/physicsImpostor.js.map +1 -0
  171. package/Physics/v1/physicsJoint.d.ts +275 -0
  172. package/Physics/v1/physicsJoint.js +223 -0
  173. package/Physics/v1/physicsJoint.js.map +1 -0
  174. package/Physics/v2/IPhysicsEnginePlugin.d.ts +170 -0
  175. package/Physics/v2/IPhysicsEnginePlugin.js +47 -0
  176. package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -0
  177. package/Physics/v2/Plugins/index.d.ts +0 -0
  178. package/Physics/v2/Plugins/index.js +2 -0
  179. package/Physics/v2/Plugins/index.js.map +1 -0
  180. package/Physics/v2/index.d.ts +6 -0
  181. package/Physics/v2/index.js +8 -0
  182. package/Physics/v2/index.js.map +1 -0
  183. package/Physics/v2/physicsAggregate.d.ts +114 -0
  184. package/Physics/v2/physicsAggregate.js +46 -0
  185. package/Physics/v2/physicsAggregate.js.map +1 -0
  186. package/Physics/v2/physicsBody.d.ts +109 -0
  187. package/Physics/v2/physicsBody.js +158 -0
  188. package/Physics/v2/physicsBody.js.map +1 -0
  189. package/Physics/v2/physicsConstraint.d.ts +184 -0
  190. package/Physics/v2/physicsConstraint.js +257 -0
  191. package/Physics/v2/physicsConstraint.js.map +1 -0
  192. package/Physics/v2/physicsEngine.d.ts +103 -0
  193. package/Physics/v2/physicsEngine.js +146 -0
  194. package/Physics/v2/physicsEngine.js.map +1 -0
  195. package/Physics/v2/physicsEngineComponent.d.ts +31 -0
  196. package/Physics/v2/physicsEngineComponent.js +50 -0
  197. package/Physics/v2/physicsEngineComponent.js.map +1 -0
  198. package/Physics/v2/physicsMaterial.d.ts +45 -0
  199. package/Physics/v2/physicsMaterial.js +67 -0
  200. package/Physics/v2/physicsMaterial.js.map +1 -0
  201. package/Physics/v2/physicsShape.d.ts +182 -0
  202. package/Physics/v2/physicsShape.js +229 -0
  203. package/Physics/v2/physicsShape.js.map +1 -0
  204. package/PostProcesses/postProcess.d.ts +3 -1
  205. package/PostProcesses/postProcess.js +4 -1
  206. package/PostProcesses/postProcess.js.map +1 -1
  207. package/Rendering/fluidRenderer/fluidRenderer.d.ts +153 -0
  208. package/Rendering/fluidRenderer/fluidRenderer.js +410 -0
  209. package/Rendering/fluidRenderer/fluidRenderer.js.map +1 -0
  210. package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.d.ts +13 -0
  211. package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js +31 -0
  212. package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js.map +1 -0
  213. package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +81 -0
  214. package/Rendering/fluidRenderer/fluidRenderingObject.js +180 -0
  215. package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -0
  216. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.d.ts +63 -0
  217. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js +130 -0
  218. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -0
  219. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.d.ts +64 -0
  220. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +104 -0
  221. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -0
  222. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.d.ts +234 -0
  223. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +690 -0
  224. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -0
  225. package/Rendering/fluidRenderer/fluidRenderingTextures.d.ts +56 -0
  226. package/Rendering/fluidRenderer/fluidRenderingTextures.js +261 -0
  227. package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -0
  228. package/Rendering/fluidRenderer/index.d.ts +5 -0
  229. package/Rendering/fluidRenderer/index.js +6 -0
  230. package/Rendering/fluidRenderer/index.js.map +1 -0
  231. package/Rendering/index.d.ts +1 -0
  232. package/Rendering/index.js +2 -0
  233. package/Rendering/index.js.map +1 -1
  234. package/Shaders/copyTextureToTexture.fragment.js +4 -1
  235. package/Shaders/copyTextureToTexture.fragment.js.map +1 -1
  236. package/Shaders/fluidRenderingBilateralBlur.fragment.d.ts +5 -0
  237. package/Shaders/fluidRenderingBilateralBlur.fragment.js +9 -0
  238. package/Shaders/fluidRenderingBilateralBlur.fragment.js.map +1 -0
  239. package/Shaders/fluidRenderingParticleDepth.fragment.d.ts +5 -0
  240. package/Shaders/fluidRenderingParticleDepth.fragment.js +17 -0
  241. package/Shaders/fluidRenderingParticleDepth.fragment.js.map +1 -0
  242. package/Shaders/fluidRenderingParticleDepth.vertex.d.ts +5 -0
  243. package/Shaders/fluidRenderingParticleDepth.vertex.js +13 -0
  244. package/Shaders/fluidRenderingParticleDepth.vertex.js.map +1 -0
  245. package/Shaders/fluidRenderingParticleDiffuse.fragment.d.ts +5 -0
  246. package/Shaders/fluidRenderingParticleDiffuse.fragment.js +9 -0
  247. package/Shaders/fluidRenderingParticleDiffuse.fragment.js.map +1 -0
  248. package/Shaders/fluidRenderingParticleDiffuse.vertex.d.ts +5 -0
  249. package/Shaders/fluidRenderingParticleDiffuse.vertex.js +4 -0
  250. package/Shaders/fluidRenderingParticleDiffuse.vertex.js.map +1 -0
  251. package/Shaders/fluidRenderingParticleThickness.fragment.d.ts +5 -0
  252. package/Shaders/fluidRenderingParticleThickness.fragment.js +9 -0
  253. package/Shaders/fluidRenderingParticleThickness.fragment.js.map +1 -0
  254. package/Shaders/fluidRenderingParticleThickness.vertex.d.ts +5 -0
  255. package/Shaders/fluidRenderingParticleThickness.vertex.js +9 -0
  256. package/Shaders/fluidRenderingParticleThickness.vertex.js.map +1 -0
  257. package/Shaders/fluidRenderingRender.fragment.d.ts +5 -0
  258. package/Shaders/fluidRenderingRender.fragment.js +46 -0
  259. package/Shaders/fluidRenderingRender.fragment.js.map +1 -0
  260. package/Shaders/fluidRenderingStandardBlur.fragment.d.ts +5 -0
  261. package/Shaders/fluidRenderingStandardBlur.fragment.js +9 -0
  262. package/Shaders/fluidRenderingStandardBlur.fragment.js.map +1 -0
  263. package/XR/features/WebXRControllerPhysics.d.ts +1 -1
  264. package/XR/features/WebXRControllerPhysics.js +1 -1
  265. package/XR/features/WebXRControllerPhysics.js.map +1 -1
  266. package/XR/features/WebXRHandTracking.js +1 -1
  267. package/XR/features/WebXRHandTracking.js.map +1 -1
  268. package/package.json +1 -1
  269. package/scene.js +6 -1
  270. package/scene.js.map +1 -1
  271. package/sceneComponent.d.ts +3 -0
  272. package/sceneComponent.js +3 -0
  273. package/sceneComponent.js.map +1 -1
  274. package/Physics/Plugins/index.js.map +0 -1
@@ -71,6 +71,58 @@ Engine.prototype.unRegisterView = function (canvas) {
71
71
  }
72
72
  return this;
73
73
  };
74
+ Engine.prototype._renderViewStep = function (view) {
75
+ const canvas = view.target;
76
+ const context = canvas.getContext("2d");
77
+ if (!context) {
78
+ return true;
79
+ }
80
+ const parent = this.getRenderingCanvas();
81
+ _onBeforeViewRenderObservable.notifyObservers(view);
82
+ const camera = view.camera;
83
+ let previewCamera = null;
84
+ let scene = null;
85
+ if (camera) {
86
+ scene = camera.getScene();
87
+ if (!scene || (scene.activeCameras && scene.activeCameras.length)) {
88
+ return true;
89
+ }
90
+ this.activeView = view;
91
+ previewCamera = scene.activeCamera;
92
+ scene.activeCamera = camera;
93
+ }
94
+ if (view.customResize) {
95
+ view.customResize(canvas);
96
+ }
97
+ else {
98
+ // Set sizes
99
+ const width = Math.floor(canvas.clientWidth / this._hardwareScalingLevel);
100
+ const height = Math.floor(canvas.clientHeight / this._hardwareScalingLevel);
101
+ const dimsChanged = width !== canvas.width || parent.width !== canvas.width || height !== canvas.height || parent.height !== canvas.height;
102
+ if (canvas.clientWidth && canvas.clientHeight && dimsChanged) {
103
+ canvas.width = width;
104
+ canvas.height = height;
105
+ this.setSize(width, height);
106
+ }
107
+ }
108
+ if (!parent.width || !parent.height) {
109
+ return false;
110
+ }
111
+ // Render the frame
112
+ this._renderFrame();
113
+ this.flushFramebuffer();
114
+ // Copy to target
115
+ if (view.clearBeforeCopy) {
116
+ context.clearRect(0, 0, parent.width, parent.height);
117
+ }
118
+ context.drawImage(parent, 0, 0);
119
+ // Restore
120
+ if (previewCamera && scene) {
121
+ scene.activeCamera = previewCamera;
122
+ }
123
+ _onAfterViewRenderObservable.notifyObservers(view);
124
+ return true;
125
+ };
74
126
  Engine.prototype._renderViews = function () {
75
127
  if (!this.views || this.views.length === 0) {
76
128
  return false;
@@ -79,58 +131,25 @@ Engine.prototype._renderViews = function () {
79
131
  if (!parent) {
80
132
  return false;
81
133
  }
134
+ let inputElementView;
82
135
  for (const view of this.views) {
83
136
  if (!view.enabled) {
84
137
  continue;
85
138
  }
86
139
  const canvas = view.target;
87
- const context = canvas.getContext("2d");
88
- if (!context) {
140
+ // Always render the view correspondent to the inputElement for last
141
+ if (canvas === this.inputElement) {
142
+ inputElementView = view;
89
143
  continue;
90
144
  }
91
- _onBeforeViewRenderObservable.notifyObservers(view);
92
- const camera = view.camera;
93
- let previewCamera = null;
94
- let scene = null;
95
- if (camera) {
96
- scene = camera.getScene();
97
- if (scene.activeCameras && scene.activeCameras.length) {
98
- continue;
99
- }
100
- this.activeView = view;
101
- previewCamera = scene.activeCamera;
102
- scene.activeCamera = camera;
103
- }
104
- if (view.customResize) {
105
- view.customResize(canvas);
106
- }
107
- else {
108
- // Set sizes
109
- const width = Math.floor(canvas.clientWidth / this._hardwareScalingLevel);
110
- const height = Math.floor(canvas.clientHeight / this._hardwareScalingLevel);
111
- const dimsChanged = width !== canvas.width || parent.width !== canvas.width || height !== canvas.height || parent.height !== canvas.height;
112
- if (canvas.clientWidth && canvas.clientHeight && dimsChanged) {
113
- canvas.width = width;
114
- canvas.height = height;
115
- this.setSize(width, height);
116
- }
117
- }
118
- if (!parent.width || !parent.height) {
145
+ if (!this._renderViewStep(view)) {
119
146
  return false;
120
147
  }
121
- // Render the frame
122
- this._renderFrame();
123
- this.flushFramebuffer();
124
- // Copy to target
125
- if (view.clearBeforeCopy) {
126
- context.clearRect(0, 0, parent.width, parent.height);
127
- }
128
- context.drawImage(parent, 0, 0);
129
- // Restore
130
- if (previewCamera && scene) {
131
- scene.activeCamera = previewCamera;
148
+ }
149
+ if (inputElementView) {
150
+ if (!this._renderViewStep(inputElementView)) {
151
+ return false;
132
152
  }
133
- _onAfterViewRenderObservable.notifyObservers(view);
134
153
  }
135
154
  this.activeView = null;
136
155
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"engine.views.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Engines/Extensions/engine.views.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAInC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD;;;GAGG;AACH,MAAM,OAAO,UAAU;CAetB;AAsDD,MAAM,6BAA6B,GAAG,IAAI,UAAU,EAAc,CAAC;AACnE,MAAM,4BAA4B,GAAG,IAAI,UAAU,EAAc,CAAC;AAElE,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,8BAA8B,EAAE;IACpE,GAAG,EAAE;QACD,OAAO,6BAA6B,CAAC;IACzC,CAAC;CACJ,CAAC,CAAC;AAEH,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,6BAA6B,EAAE;IACnE,GAAG,EAAE;QACD,OAAO,4BAA4B,CAAC;IACxC,CAAC;CACJ,CAAC,CAAC;AAEH,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,cAAc,EAAE;IACpD,GAAG,EAAE;QACD,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IACD,GAAG,EAAE,UAAwB,KAAkB;;QAC3C,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE;YAC9B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,MAAA,IAAI,CAAC,oBAAoB,oDAAI,CAAC;SACjC;IACL,CAAC;CACJ,CAAC,CAAC;AAEH,MAAM,CAAC,SAAS,CAAC,eAAe,GAAG;IAC/B,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,UAAU,MAAyB,EAAE,MAAe,EAAE,eAAyB;IAC3G,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;QACb,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;KACnB;IAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;QAC3B,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;YACxB,OAAO,IAAI,CAAC;SACf;KACJ;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC/C,IAAI,YAAY,EAAE;QACd,MAAM,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;QAClC,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;KACvC;IAED,MAAM,OAAO,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;IACnH,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEzB,IAAI,MAAM,EAAE;QACR,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE;YAChC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;KACN;IAED,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,CAAC,SAAS,CAAC,cAAc,GAAG,UAAU,MAAyB;IACjE,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QACxC,OAAO,IAAI,CAAC;KACf;IAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;QAC3B,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;YACxB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAEvC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;gBACd,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;aAC/B;YACD,MAAM;SACT;KACJ;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG;IAC5B,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QACxC,OAAO,KAAK,CAAC;KAChB;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAEzC,IAAI,CAAC,MAAM,EAAE;QACT,OAAO,KAAK,CAAC;KAChB;IAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;QAC3B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,SAAS;SACZ;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,EAAE;YACV,SAAS;SACZ;QACD,6BAA6B,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,aAAa,GAAqB,IAAI,CAAC;QAC3C,IAAI,KAAK,GAAoB,IAAI,CAAC;QAClC,IAAI,MAAM,EAAE;YACR,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YAE1B,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE;gBACnD,SAAS;aACZ;YAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YAEvB,aAAa,GAAG,KAAK,CAAC,YAAY,CAAC;YACnC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC;SAC/B;QAED,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;SAC7B;aAAM;YACH,YAAY;YACZ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAE5E,MAAM,WAAW,GAAG,KAAK,KAAK,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,IAAI,MAAM,KAAK,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC;YAC3I,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,YAAY,IAAI,WAAW,EAAE;gBAC1D,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;gBACrB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;gBACvB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;aAC/B;SACJ;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YACjC,OAAO,KAAK,CAAC;SAChB;QAED,mBAAmB;QACnB,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,iBAAiB;QACjB,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;SACxD;QACD,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAEhC,UAAU;QACV,IAAI,aAAa,IAAI,KAAK,EAAE;YACxB,KAAK,CAAC,YAAY,GAAG,aAAa,CAAC;SACtC;QACD,4BAA4B,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;KACtD;IAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IAEvB,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC","sourcesContent":["import { Engine } from \"../engine\";\r\nimport type { Camera } from \"../../Cameras/camera\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Observable } from \"../../Misc/observable\";\r\n\r\n/**\r\n * Class used to define an additional view for the engine\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/multiCanvas\r\n */\r\nexport class EngineView {\r\n /**\r\n * A randomly generated unique id\r\n */\r\n readonly id: string;\r\n /** Defines the canvas where to render the view */\r\n target: HTMLCanvasElement;\r\n /** Defines an optional camera used to render the view (will use active camera else) */\r\n camera?: Camera;\r\n /** Indicates if the destination view canvas should be cleared before copying the parent canvas. Can help if the scene clear color has alpha < 1 */\r\n clearBeforeCopy?: boolean;\r\n /** Indicates if the view is enabled (true by default) */\r\n enabled: boolean;\r\n /** Defines a custom function to handle canvas size changes. (the canvas to render into is provided to the callback) */\r\n customResize?: (canvas: HTMLCanvasElement) => void;\r\n}\r\n\r\ndeclare module \"../../Engines/engine\" {\r\n export interface Engine {\r\n /** @internal */\r\n _inputElement: Nullable<HTMLElement>;\r\n\r\n /**\r\n * Gets or sets the HTML element to use for attaching events\r\n */\r\n inputElement: Nullable<HTMLElement>;\r\n\r\n /**\r\n * Observable to handle when a change to inputElement occurs\r\n * @internal\r\n */\r\n _onEngineViewChanged?: () => void;\r\n\r\n /**\r\n * Will be triggered before the view renders\r\n */\r\n readonly onBeforeViewRenderObservable: Observable<EngineView>;\r\n /**\r\n * Will be triggered after the view rendered\r\n */\r\n readonly onAfterViewRenderObservable: Observable<EngineView>;\r\n\r\n /**\r\n * Gets the current engine view\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/multiCanvas\r\n */\r\n activeView: Nullable<EngineView>;\r\n\r\n /** Gets or sets the list of views */\r\n views: EngineView[];\r\n\r\n /**\r\n * Register a new child canvas\r\n * @param canvas defines the canvas to register\r\n * @param camera defines an optional camera to use with this canvas (it will overwrite the scene.camera for this view)\r\n * @param clearBeforeCopy Indicates if the destination view canvas should be cleared before copying the parent canvas. Can help if the scene clear color has alpha < 1\r\n * @returns the associated view\r\n */\r\n registerView(canvas: HTMLCanvasElement, camera?: Camera, clearBeforeCopy?: boolean): EngineView;\r\n\r\n /**\r\n * Remove a registered child canvas\r\n * @param canvas defines the canvas to remove\r\n * @returns the current engine\r\n */\r\n unRegisterView(canvas: HTMLCanvasElement): Engine;\r\n }\r\n}\r\n\r\nconst _onBeforeViewRenderObservable = new Observable<EngineView>();\r\nconst _onAfterViewRenderObservable = new Observable<EngineView>();\r\n\r\nObject.defineProperty(Engine.prototype, \"onBeforeViewRenderObservable\", {\r\n get: function (this: Engine) {\r\n return _onBeforeViewRenderObservable;\r\n },\r\n});\r\n\r\nObject.defineProperty(Engine.prototype, \"onAfterViewRenderObservable\", {\r\n get: function (this: Engine) {\r\n return _onAfterViewRenderObservable;\r\n },\r\n});\r\n\r\nObject.defineProperty(Engine.prototype, \"inputElement\", {\r\n get: function (this: Engine) {\r\n return this._inputElement;\r\n },\r\n set: function (this: Engine, value: HTMLElement) {\r\n if (this._inputElement !== value) {\r\n this._inputElement = value;\r\n this._onEngineViewChanged?.();\r\n }\r\n },\r\n});\r\n\r\nEngine.prototype.getInputElement = function (): Nullable<HTMLElement> {\r\n return this.inputElement || this.getRenderingCanvas();\r\n};\r\n\r\nEngine.prototype.registerView = function (canvas: HTMLCanvasElement, camera?: Camera, clearBeforeCopy?: boolean): EngineView {\r\n if (!this.views) {\r\n this.views = [];\r\n }\r\n\r\n for (const view of this.views) {\r\n if (view.target === canvas) {\r\n return view;\r\n }\r\n }\r\n\r\n const masterCanvas = this.getRenderingCanvas();\r\n if (masterCanvas) {\r\n canvas.width = masterCanvas.width;\r\n canvas.height = masterCanvas.height;\r\n }\r\n\r\n const newView = { target: canvas, camera, clearBeforeCopy, enabled: true, id: (Math.random() * 100000).toFixed() };\r\n this.views.push(newView);\r\n\r\n if (camera) {\r\n camera.onDisposeObservable.add(() => {\r\n this.unRegisterView(canvas);\r\n });\r\n }\r\n\r\n return newView;\r\n};\r\n\r\nEngine.prototype.unRegisterView = function (canvas: HTMLCanvasElement): Engine {\r\n if (!this.views || this.views.length === 0) {\r\n return this;\r\n }\r\n\r\n for (const view of this.views) {\r\n if (view.target === canvas) {\r\n const index = this.views.indexOf(view);\r\n\r\n if (index !== -1) {\r\n this.views.splice(index, 1);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return this;\r\n};\r\n\r\nEngine.prototype._renderViews = function () {\r\n if (!this.views || this.views.length === 0) {\r\n return false;\r\n }\r\n\r\n const parent = this.getRenderingCanvas();\r\n\r\n if (!parent) {\r\n return false;\r\n }\r\n\r\n for (const view of this.views) {\r\n if (!view.enabled) {\r\n continue;\r\n }\r\n const canvas = view.target;\r\n const context = canvas.getContext(\"2d\");\r\n if (!context) {\r\n continue;\r\n }\r\n _onBeforeViewRenderObservable.notifyObservers(view);\r\n const camera = view.camera;\r\n let previewCamera: Nullable<Camera> = null;\r\n let scene: Nullable<Scene> = null;\r\n if (camera) {\r\n scene = camera.getScene();\r\n\r\n if (scene.activeCameras && scene.activeCameras.length) {\r\n continue;\r\n }\r\n\r\n this.activeView = view;\r\n\r\n previewCamera = scene.activeCamera;\r\n scene.activeCamera = camera;\r\n }\r\n\r\n if (view.customResize) {\r\n view.customResize(canvas);\r\n } else {\r\n // Set sizes\r\n const width = Math.floor(canvas.clientWidth / this._hardwareScalingLevel);\r\n const height = Math.floor(canvas.clientHeight / this._hardwareScalingLevel);\r\n\r\n const dimsChanged = width !== canvas.width || parent.width !== canvas.width || height !== canvas.height || parent.height !== canvas.height;\r\n if (canvas.clientWidth && canvas.clientHeight && dimsChanged) {\r\n canvas.width = width;\r\n canvas.height = height;\r\n this.setSize(width, height);\r\n }\r\n }\r\n\r\n if (!parent.width || !parent.height) {\r\n return false;\r\n }\r\n\r\n // Render the frame\r\n this._renderFrame();\r\n\r\n this.flushFramebuffer();\r\n\r\n // Copy to target\r\n if (view.clearBeforeCopy) {\r\n context.clearRect(0, 0, parent.width, parent.height);\r\n }\r\n context.drawImage(parent, 0, 0);\r\n\r\n // Restore\r\n if (previewCamera && scene) {\r\n scene.activeCamera = previewCamera;\r\n }\r\n _onAfterViewRenderObservable.notifyObservers(view);\r\n }\r\n\r\n this.activeView = null;\r\n\r\n return true;\r\n};\r\n"]}
1
+ {"version":3,"file":"engine.views.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Engines/Extensions/engine.views.ts"],"names":[],"mappings":"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","sourcesContent":["import { Engine } from \"../engine\";\r\nimport type { Camera } from \"../../Cameras/camera\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Observable } from \"../../Misc/observable\";\r\n\r\n/**\r\n * Class used to define an additional view for the engine\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/multiCanvas\r\n */\r\nexport class EngineView {\r\n /**\r\n * A randomly generated unique id\r\n */\r\n readonly id: string;\r\n /** Defines the canvas where to render the view */\r\n target: HTMLCanvasElement;\r\n /** Defines an optional camera used to render the view (will use active camera else) */\r\n camera?: Camera;\r\n /** Indicates if the destination view canvas should be cleared before copying the parent canvas. Can help if the scene clear color has alpha < 1 */\r\n clearBeforeCopy?: boolean;\r\n /** Indicates if the view is enabled (true by default) */\r\n enabled: boolean;\r\n /** Defines a custom function to handle canvas size changes. (the canvas to render into is provided to the callback) */\r\n customResize?: (canvas: HTMLCanvasElement) => void;\r\n}\r\n\r\ndeclare module \"../../Engines/engine\" {\r\n export interface Engine {\r\n /** @internal */\r\n _inputElement: Nullable<HTMLElement>;\r\n\r\n /**\r\n * Gets or sets the HTML element to use for attaching events\r\n */\r\n inputElement: Nullable<HTMLElement>;\r\n\r\n /**\r\n * Observable to handle when a change to inputElement occurs\r\n * @internal\r\n */\r\n _onEngineViewChanged?: () => void;\r\n\r\n /**\r\n * Will be triggered before the view renders\r\n */\r\n readonly onBeforeViewRenderObservable: Observable<EngineView>;\r\n /**\r\n * Will be triggered after the view rendered\r\n */\r\n readonly onAfterViewRenderObservable: Observable<EngineView>;\r\n\r\n /**\r\n * Gets the current engine view\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/multiCanvas\r\n */\r\n activeView: Nullable<EngineView>;\r\n\r\n /** Gets or sets the list of views */\r\n views: EngineView[];\r\n\r\n /**\r\n * Register a new child canvas\r\n * @param canvas defines the canvas to register\r\n * @param camera defines an optional camera to use with this canvas (it will overwrite the scene.camera for this view)\r\n * @param clearBeforeCopy Indicates if the destination view canvas should be cleared before copying the parent canvas. Can help if the scene clear color has alpha < 1\r\n * @returns the associated view\r\n */\r\n registerView(canvas: HTMLCanvasElement, camera?: Camera, clearBeforeCopy?: boolean): EngineView;\r\n\r\n /**\r\n * Remove a registered child canvas\r\n * @param canvas defines the canvas to remove\r\n * @returns the current engine\r\n */\r\n unRegisterView(canvas: HTMLCanvasElement): Engine;\r\n\r\n /**\r\n * @internal\r\n */\r\n _renderViewStep(view: EngineView): boolean;\r\n }\r\n}\r\n\r\nconst _onBeforeViewRenderObservable = new Observable<EngineView>();\r\nconst _onAfterViewRenderObservable = new Observable<EngineView>();\r\n\r\nObject.defineProperty(Engine.prototype, \"onBeforeViewRenderObservable\", {\r\n get: function (this: Engine) {\r\n return _onBeforeViewRenderObservable;\r\n },\r\n});\r\n\r\nObject.defineProperty(Engine.prototype, \"onAfterViewRenderObservable\", {\r\n get: function (this: Engine) {\r\n return _onAfterViewRenderObservable;\r\n },\r\n});\r\n\r\nObject.defineProperty(Engine.prototype, \"inputElement\", {\r\n get: function (this: Engine) {\r\n return this._inputElement;\r\n },\r\n set: function (this: Engine, value: HTMLElement) {\r\n if (this._inputElement !== value) {\r\n this._inputElement = value;\r\n this._onEngineViewChanged?.();\r\n }\r\n },\r\n});\r\n\r\nEngine.prototype.getInputElement = function (): Nullable<HTMLElement> {\r\n return this.inputElement || this.getRenderingCanvas();\r\n};\r\n\r\nEngine.prototype.registerView = function (canvas: HTMLCanvasElement, camera?: Camera, clearBeforeCopy?: boolean): EngineView {\r\n if (!this.views) {\r\n this.views = [];\r\n }\r\n\r\n for (const view of this.views) {\r\n if (view.target === canvas) {\r\n return view;\r\n }\r\n }\r\n\r\n const masterCanvas = this.getRenderingCanvas();\r\n if (masterCanvas) {\r\n canvas.width = masterCanvas.width;\r\n canvas.height = masterCanvas.height;\r\n }\r\n\r\n const newView = { target: canvas, camera, clearBeforeCopy, enabled: true, id: (Math.random() * 100000).toFixed() };\r\n this.views.push(newView);\r\n\r\n if (camera) {\r\n camera.onDisposeObservable.add(() => {\r\n this.unRegisterView(canvas);\r\n });\r\n }\r\n\r\n return newView;\r\n};\r\n\r\nEngine.prototype.unRegisterView = function (canvas: HTMLCanvasElement): Engine {\r\n if (!this.views || this.views.length === 0) {\r\n return this;\r\n }\r\n\r\n for (const view of this.views) {\r\n if (view.target === canvas) {\r\n const index = this.views.indexOf(view);\r\n\r\n if (index !== -1) {\r\n this.views.splice(index, 1);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return this;\r\n};\r\n\r\nEngine.prototype._renderViewStep = function (view: EngineView): boolean {\r\n const canvas = view.target;\r\n const context = canvas.getContext(\"2d\");\r\n if (!context) {\r\n return true;\r\n }\r\n const parent = this.getRenderingCanvas()!;\r\n\r\n _onBeforeViewRenderObservable.notifyObservers(view);\r\n const camera = view.camera;\r\n let previewCamera: Nullable<Camera> = null;\r\n let scene: Nullable<Scene> = null;\r\n if (camera) {\r\n scene = camera.getScene();\r\n\r\n if (!scene || (scene.activeCameras && scene.activeCameras.length)) {\r\n return true;\r\n }\r\n\r\n this.activeView = view;\r\n\r\n previewCamera = scene.activeCamera;\r\n scene.activeCamera = camera;\r\n }\r\n\r\n if (view.customResize) {\r\n view.customResize(canvas);\r\n } else {\r\n // Set sizes\r\n const width = Math.floor(canvas.clientWidth / this._hardwareScalingLevel);\r\n const height = Math.floor(canvas.clientHeight / this._hardwareScalingLevel);\r\n\r\n const dimsChanged = width !== canvas.width || parent.width !== canvas.width || height !== canvas.height || parent.height !== canvas.height;\r\n if (canvas.clientWidth && canvas.clientHeight && dimsChanged) {\r\n canvas.width = width;\r\n canvas.height = height;\r\n this.setSize(width, height);\r\n }\r\n }\r\n\r\n if (!parent.width || !parent.height) {\r\n return false;\r\n }\r\n\r\n // Render the frame\r\n this._renderFrame();\r\n\r\n this.flushFramebuffer();\r\n\r\n // Copy to target\r\n if (view.clearBeforeCopy) {\r\n context.clearRect(0, 0, parent.width, parent.height);\r\n }\r\n context.drawImage(parent, 0, 0);\r\n\r\n // Restore\r\n if (previewCamera && scene) {\r\n scene.activeCamera = previewCamera;\r\n }\r\n _onAfterViewRenderObservable.notifyObservers(view);\r\n return true;\r\n};\r\n\r\nEngine.prototype._renderViews = function () {\r\n if (!this.views || this.views.length === 0) {\r\n return false;\r\n }\r\n\r\n const parent = this.getRenderingCanvas();\r\n\r\n if (!parent) {\r\n return false;\r\n }\r\n\r\n let inputElementView;\r\n for (const view of this.views) {\r\n if (!view.enabled) {\r\n continue;\r\n }\r\n const canvas = view.target;\r\n // Always render the view correspondent to the inputElement for last\r\n if (canvas === this.inputElement) {\r\n inputElementView = view;\r\n continue;\r\n }\r\n\r\n if (!this._renderViewStep(view)) {\r\n return false;\r\n }\r\n }\r\n\r\n if (inputElementView) {\r\n if (!this._renderViewStep(inputElementView)) {\r\n return false;\r\n }\r\n }\r\n\r\n this.activeView = null;\r\n\r\n return true;\r\n};\r\n"]}
@@ -401,13 +401,13 @@ export class ThinEngine {
401
401
  */
402
402
  // Not mixed with Version for tooling purpose.
403
403
  static get NpmPackage() {
404
- return "babylonjs@5.35.1";
404
+ return "babylonjs@5.37.0";
405
405
  }
406
406
  /**
407
407
  * Returns the current version of the framework
408
408
  */
409
409
  static get Version() {
410
- return "5.35.1";
410
+ return "5.37.0";
411
411
  }
412
412
  /**
413
413
  * Returns a string describing the current engine