@babylonjs/core 6.33.1 → 6.34.0-alpha.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 (488) hide show
  1. package/Animations/animation.js +1 -1
  2. package/Animations/animation.js.map +1 -1
  3. package/Animations/animationGroup.js +2 -2
  4. package/Animations/animationGroup.js.map +1 -1
  5. package/Animations/animationGroupMask.d.ts +4 -0
  6. package/Animations/animationGroupMask.js +4 -0
  7. package/Animations/animationGroupMask.js.map +1 -1
  8. package/Buffers/storageBuffer.d.ts +2 -1
  9. package/Buffers/storageBuffer.js +3 -2
  10. package/Buffers/storageBuffer.js.map +1 -1
  11. package/Cameras/Inputs/followCameraMouseWheelInput.js +12 -9
  12. package/Cameras/Inputs/followCameraMouseWheelInput.js.map +1 -1
  13. package/Cameras/Inputs/followCameraPointersInput.js +28 -9
  14. package/Cameras/Inputs/followCameraPointersInput.js.map +1 -1
  15. package/Cameras/arcRotateCamera.js +1 -1
  16. package/Cameras/arcRotateCamera.js.map +1 -1
  17. package/Cameras/followCameraInputsManager.js +2 -1
  18. package/Cameras/followCameraInputsManager.js.map +1 -1
  19. package/Compute/computeShader.d.ts +5 -0
  20. package/Compute/computeShader.js +42 -32
  21. package/Compute/computeShader.js.map +1 -1
  22. package/Debug/skeletonViewer.js +2 -1
  23. package/Debug/skeletonViewer.js.map +1 -1
  24. package/Engines/Extensions/engine.alpha.js +8 -116
  25. package/Engines/Extensions/engine.alpha.js.map +1 -1
  26. package/Engines/Extensions/engine.cubeTexture.d.ts +1 -1
  27. package/Engines/Extensions/engine.cubeTexture.js +11 -213
  28. package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
  29. package/Engines/Extensions/engine.dynamicBuffer.js +5 -42
  30. package/Engines/Extensions/engine.dynamicBuffer.js.map +1 -1
  31. package/Engines/Extensions/engine.dynamicTexture.d.ts +1 -1
  32. package/Engines/Extensions/engine.dynamicTexture.js +5 -47
  33. package/Engines/Extensions/engine.dynamicTexture.js.map +1 -1
  34. package/Engines/Extensions/engine.multiRender.js +11 -341
  35. package/Engines/Extensions/engine.multiRender.js.map +1 -1
  36. package/Engines/Extensions/engine.multiview.js +6 -57
  37. package/Engines/Extensions/engine.multiview.js.map +1 -1
  38. package/Engines/Extensions/engine.query.d.ts +8 -2
  39. package/Engines/Extensions/engine.query.js +44 -152
  40. package/Engines/Extensions/engine.query.js.map +1 -1
  41. package/Engines/Extensions/engine.rawTexture.d.ts +1 -1
  42. package/Engines/Extensions/engine.rawTexture.js +20 -361
  43. package/Engines/Extensions/engine.rawTexture.js.map +1 -1
  44. package/Engines/Extensions/engine.readTexture.js +6 -112
  45. package/Engines/Extensions/engine.readTexture.js.map +1 -1
  46. package/Engines/Extensions/engine.renderTarget.d.ts +1 -1
  47. package/Engines/Extensions/engine.renderTarget.js +8 -173
  48. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  49. package/Engines/Extensions/engine.renderTargetCube.js +4 -55
  50. package/Engines/Extensions/engine.renderTargetCube.js.map +1 -1
  51. package/Engines/Extensions/engine.storageBuffer.d.ts +2 -1
  52. package/Engines/Extensions/engine.storageBuffer.js.map +1 -1
  53. package/Engines/Extensions/engine.textureSelector.js +11 -52
  54. package/Engines/Extensions/engine.textureSelector.js.map +1 -1
  55. package/Engines/Extensions/engine.transformFeedback.js +10 -11
  56. package/Engines/Extensions/engine.transformFeedback.js.map +1 -1
  57. package/Engines/Extensions/engine.uniformBuffer.js +9 -59
  58. package/Engines/Extensions/engine.uniformBuffer.js.map +1 -1
  59. package/Engines/Extensions/engine.videoTexture.js +4 -54
  60. package/Engines/Extensions/engine.videoTexture.js.map +1 -1
  61. package/Engines/Extensions/engine.views.d.ts +2 -24
  62. package/Engines/Extensions/engine.views.js +17 -136
  63. package/Engines/Extensions/engine.views.js.map +1 -1
  64. package/Engines/Processors/shaderCodeInliner.js +15 -14
  65. package/Engines/Processors/shaderCodeInliner.js.map +1 -1
  66. package/Engines/WebGPU/Extensions/engine.computeShader.js +7 -4
  67. package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
  68. package/Engines/WebGPU/Extensions/engine.storageBuffer.js +14 -5
  69. package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
  70. package/Engines/WebGPU/webgpuShaderProcessor.js +2 -1
  71. package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
  72. package/Engines/WebGPU/webgpuTintWASM.js +3 -2
  73. package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
  74. package/Engines/engine.d.ts +31 -74
  75. package/Engines/engine.js +322 -773
  76. package/Engines/engine.js.map +1 -1
  77. package/Engines/nativeEngine.d.ts +1 -1
  78. package/Engines/nativeEngine.js.map +1 -1
  79. package/Engines/nullEngine.d.ts +1 -1
  80. package/Engines/nullEngine.js.map +1 -1
  81. package/Engines/thinEngine.d.ts +160 -151
  82. package/Engines/thinEngine.js +712 -3280
  83. package/Engines/thinEngine.js.map +1 -1
  84. package/Engines/webgpuEngine.d.ts +5 -8
  85. package/Engines/webgpuEngine.js +143 -112
  86. package/Engines/webgpuEngine.js.map +1 -1
  87. package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.d.ts +296 -0
  88. package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.js +758 -0
  89. package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.js.map +1 -0
  90. package/FlowGraph/Blocks/Data/Math/index.d.ts +1 -5
  91. package/FlowGraph/Blocks/Data/Math/index.js +1 -5
  92. package/FlowGraph/Blocks/Data/Math/index.js.map +1 -1
  93. package/FlowGraph/Blocks/Data/flowGraphBinaryOperationBlock.d.ts +2 -2
  94. package/FlowGraph/Blocks/Data/flowGraphBinaryOperationBlock.js +3 -3
  95. package/FlowGraph/Blocks/Data/flowGraphBinaryOperationBlock.js.map +1 -1
  96. package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.d.ts +1 -1
  97. package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.js +3 -3
  98. package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.js.map +1 -1
  99. package/FlowGraph/Blocks/Data/flowGraphConstantBlock.d.ts +1 -0
  100. package/FlowGraph/Blocks/Data/flowGraphConstantBlock.js +5 -0
  101. package/FlowGraph/Blocks/Data/flowGraphConstantBlock.js.map +1 -1
  102. package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.d.ts +25 -0
  103. package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.js +22 -0
  104. package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.js.map +1 -0
  105. package/FlowGraph/Blocks/Data/flowGraphGetVariableBlock.d.ts +11 -5
  106. package/FlowGraph/Blocks/Data/flowGraphGetVariableBlock.js +12 -6
  107. package/FlowGraph/Blocks/Data/flowGraphGetVariableBlock.js.map +1 -1
  108. package/FlowGraph/Blocks/Data/flowGraphTernaryOperationBlock.d.ts +19 -0
  109. package/FlowGraph/Blocks/Data/flowGraphTernaryOperationBlock.js +22 -0
  110. package/FlowGraph/Blocks/Data/flowGraphTernaryOperationBlock.js.map +1 -0
  111. package/FlowGraph/Blocks/Data/index.d.ts +1 -0
  112. package/FlowGraph/Blocks/Data/index.js +1 -0
  113. package/FlowGraph/Blocks/Data/index.js.map +1 -1
  114. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.d.ts +10 -5
  115. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.js +15 -5
  116. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.js.map +1 -1
  117. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.d.ts +1 -0
  118. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.js +2 -1
  119. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.js.map +1 -1
  120. package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.d.ts +1 -0
  121. package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.js +3 -2
  122. package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.js.map +1 -1
  123. package/FlowGraph/Blocks/Execution/Animation/flowGraphPauseAnimationBlock.d.ts +2 -2
  124. package/FlowGraph/Blocks/Execution/Animation/flowGraphPauseAnimationBlock.js +3 -3
  125. package/FlowGraph/Blocks/Execution/Animation/flowGraphPauseAnimationBlock.js.map +1 -1
  126. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.d.ts +0 -5
  127. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.js +2 -3
  128. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.js.map +1 -1
  129. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.d.ts +2 -2
  130. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.js +3 -3
  131. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.js.map +1 -1
  132. package/FlowGraph/Blocks/Execution/Audio/flowGraphPlayAudioBlock.d.ts +2 -2
  133. package/FlowGraph/Blocks/Execution/Audio/flowGraphPlayAudioBlock.js +3 -3
  134. package/FlowGraph/Blocks/Execution/Audio/flowGraphPlayAudioBlock.js.map +1 -1
  135. package/FlowGraph/Blocks/Execution/Audio/flowGraphStopAudioBlock.d.ts +2 -2
  136. package/FlowGraph/Blocks/Execution/Audio/flowGraphStopAudioBlock.js +2 -2
  137. package/FlowGraph/Blocks/Execution/Audio/flowGraphStopAudioBlock.js.map +1 -1
  138. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCounterBlock.d.ts +2 -2
  139. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCounterBlock.js +3 -3
  140. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCounterBlock.js.map +1 -1
  141. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDebounceBlock.d.ts +2 -2
  142. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDebounceBlock.js +3 -3
  143. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDebounceBlock.js.map +1 -1
  144. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDoNBlock.d.ts +13 -5
  145. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDoNBlock.js +14 -12
  146. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDoNBlock.js.map +1 -1
  147. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphForLoopBlock.d.ts +2 -6
  148. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphForLoopBlock.js +3 -4
  149. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphForLoopBlock.js.map +1 -1
  150. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSequenceBlock.d.ts +16 -0
  151. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSequenceBlock.js +26 -0
  152. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSequenceBlock.js.map +1 -0
  153. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.d.ts +2 -2
  154. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.js +3 -3
  155. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.js.map +1 -1
  156. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphTimerBlock.d.ts +1 -6
  157. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphTimerBlock.js +4 -4
  158. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphTimerBlock.js.map +1 -1
  159. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWaitAllBlock.d.ts +2 -2
  160. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWaitAllBlock.js +4 -4
  161. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWaitAllBlock.js.map +1 -1
  162. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWhileLoopBlock.d.ts +3 -2
  163. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWhileLoopBlock.js +6 -5
  164. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWhileLoopBlock.js.map +1 -1
  165. package/FlowGraph/Blocks/Execution/ControlFlow/index.d.ts +1 -0
  166. package/FlowGraph/Blocks/Execution/ControlFlow/index.js +1 -0
  167. package/FlowGraph/Blocks/Execution/ControlFlow/index.js.map +1 -1
  168. package/FlowGraph/Blocks/Execution/{flowGraphLogBlock.d.ts → flowGraphConsoleLogBlock.d.ts} +3 -2
  169. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.js +29 -0
  170. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.js.map +1 -0
  171. package/FlowGraph/Blocks/Execution/flowGraphSendCustomEventBlock.d.ts +16 -8
  172. package/FlowGraph/Blocks/Execution/flowGraphSendCustomEventBlock.js +17 -10
  173. package/FlowGraph/Blocks/Execution/flowGraphSendCustomEventBlock.js.map +1 -1
  174. package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.d.ts +4 -3
  175. package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.js +7 -6
  176. package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.js.map +1 -1
  177. package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.d.ts +12 -7
  178. package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.js +10 -9
  179. package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.js.map +1 -1
  180. package/FlowGraph/Blocks/Execution/index.d.ts +1 -2
  181. package/FlowGraph/Blocks/Execution/index.js +1 -3
  182. package/FlowGraph/Blocks/Execution/index.js.map +1 -1
  183. package/FlowGraph/flowGraph.d.ts +3 -1
  184. package/FlowGraph/flowGraph.js +6 -2
  185. package/FlowGraph/flowGraph.js.map +1 -1
  186. package/FlowGraph/flowGraphAsyncExecutionBlock.d.ts +6 -2
  187. package/FlowGraph/flowGraphAsyncExecutionBlock.js +2 -1
  188. package/FlowGraph/flowGraphAsyncExecutionBlock.js.map +1 -1
  189. package/FlowGraph/flowGraphBlock.d.ts +7 -2
  190. package/FlowGraph/flowGraphBlock.js +21 -19
  191. package/FlowGraph/flowGraphBlock.js.map +1 -1
  192. package/FlowGraph/flowGraphContext.d.ts +9 -5
  193. package/FlowGraph/flowGraphContext.js +7 -2
  194. package/FlowGraph/flowGraphContext.js.map +1 -1
  195. package/FlowGraph/flowGraphCoordinator.d.ts +4 -5
  196. package/FlowGraph/flowGraphCoordinator.js +12 -7
  197. package/FlowGraph/flowGraphCoordinator.js.map +1 -1
  198. package/FlowGraph/flowGraphEventBlock.js +1 -1
  199. package/FlowGraph/flowGraphEventBlock.js.map +1 -1
  200. package/FlowGraph/flowGraphExecutionBlock.d.ts +4 -2
  201. package/FlowGraph/flowGraphExecutionBlock.js +25 -9
  202. package/FlowGraph/flowGraphExecutionBlock.js.map +1 -1
  203. package/FlowGraph/flowGraphPath.d.ts +20 -2
  204. package/FlowGraph/flowGraphPath.js +27 -7
  205. package/FlowGraph/flowGraphPath.js.map +1 -1
  206. package/FlowGraph/flowGraphWithOnDoneExecutionBlock.d.ts +3 -3
  207. package/FlowGraph/flowGraphWithOnDoneExecutionBlock.js +3 -3
  208. package/FlowGraph/flowGraphWithOnDoneExecutionBlock.js.map +1 -1
  209. package/FlowGraph/index.d.ts +3 -0
  210. package/FlowGraph/index.js +3 -0
  211. package/FlowGraph/index.js.map +1 -1
  212. package/FlowGraph/serialization.js +20 -6
  213. package/FlowGraph/serialization.js.map +1 -1
  214. package/FlowGraph/typeDefinitions.d.ts +33 -0
  215. package/FlowGraph/typeDefinitions.js +2 -0
  216. package/FlowGraph/typeDefinitions.js.map +1 -0
  217. package/Gizmos/axisScaleGizmo.d.ts +1 -0
  218. package/Gizmos/axisScaleGizmo.js +12 -0
  219. package/Gizmos/axisScaleGizmo.js.map +1 -1
  220. package/Gizmos/lightGizmo.js +2 -1
  221. package/Gizmos/lightGizmo.js.map +1 -1
  222. package/Gizmos/rotationGizmo.js +1 -1
  223. package/Gizmos/rotationGizmo.js.map +1 -1
  224. package/Lights/Shadows/cascadedShadowGenerator.js +1 -1
  225. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  226. package/Lights/light.d.ts +15 -0
  227. package/Lights/light.js +18 -0
  228. package/Lights/light.js.map +1 -1
  229. package/Lights/shadowLight.d.ts +18 -1
  230. package/Lights/shadowLight.js +34 -1
  231. package/Lights/shadowLight.js.map +1 -1
  232. package/Materials/Node/Blocks/Dual/lightBlock.js +2 -1
  233. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  234. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js +3 -2
  235. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js.map +1 -1
  236. package/Materials/Node/Blocks/Fragment/fragDepthBlock.js +2 -1
  237. package/Materials/Node/Blocks/Fragment/fragDepthBlock.js.map +1 -1
  238. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js +2 -1
  239. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js.map +1 -1
  240. package/Materials/Node/Blocks/PBR/anisotropyBlock.js +2 -1
  241. package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
  242. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +3 -2
  243. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  244. package/Materials/Node/Blocks/PBR/reflectionBlock.js +2 -1
  245. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  246. package/Materials/Node/nodeMaterial.js +9 -8
  247. package/Materials/Node/nodeMaterial.js.map +1 -1
  248. package/Materials/Node/nodeMaterialBlock.js +2 -1
  249. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  250. package/Materials/drawWrapper.js +3 -2
  251. package/Materials/drawWrapper.js.map +1 -1
  252. package/Materials/effect.js +2 -1
  253. package/Materials/effect.js.map +1 -1
  254. package/Materials/material.js +2 -1
  255. package/Materials/material.js.map +1 -1
  256. package/Materials/uniformBuffer.d.ts +4 -1
  257. package/Materials/uniformBuffer.js +5 -2
  258. package/Materials/uniformBuffer.js.map +1 -1
  259. package/Meshes/Node/nodeGeometryBlock.js +11 -2
  260. package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
  261. package/Meshes/abstractMesh.js +3 -1
  262. package/Meshes/abstractMesh.js.map +1 -1
  263. package/Misc/assetsManager.js +2 -2
  264. package/Misc/assetsManager.js.map +1 -1
  265. package/Misc/dds.d.ts +2 -0
  266. package/Misc/dds.js +27 -23
  267. package/Misc/dds.js.map +1 -1
  268. package/Misc/logger.d.ts +3 -3
  269. package/Misc/logger.js +8 -4
  270. package/Misc/logger.js.map +1 -1
  271. package/Misc/sceneSerializer.js +2 -1
  272. package/Misc/sceneSerializer.js.map +1 -1
  273. package/Navigation/Plugins/recastJSPlugin.js +2 -2
  274. package/Navigation/Plugins/recastJSPlugin.js.map +1 -1
  275. package/Physics/v2/Plugins/havokPlugin.js +1 -1
  276. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  277. package/Physics/v2/index.d.ts +1 -0
  278. package/Physics/v2/index.js +1 -0
  279. package/Physics/v2/index.js.map +1 -1
  280. package/Physics/v2/ragdoll.d.ts +107 -0
  281. package/Physics/v2/ragdoll.js +228 -0
  282. package/Physics/v2/ragdoll.js.map +1 -0
  283. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +2 -2
  284. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
  285. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js +3 -2
  286. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
  287. package/PostProcesses/index.d.ts +1 -1
  288. package/PostProcesses/index.js +1 -1
  289. package/PostProcesses/index.js.map +1 -1
  290. package/PostProcesses/passPostProcess.d.ts +1 -0
  291. package/PostProcesses/passPostProcess.js +6 -2
  292. package/PostProcesses/passPostProcess.js.map +1 -1
  293. package/PostProcesses/screenSpaceCurvaturePostProcess.js +1 -1
  294. package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
  295. package/PostProcesses/screenSpaceReflectionPostProcess.js +3 -2
  296. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  297. package/Rendering/depthPeelingRenderer.js +2 -1
  298. package/Rendering/depthPeelingRenderer.js.map +1 -1
  299. package/Shaders/ShadersInclude/pbrBlockSubSurface.js +3 -2
  300. package/Shaders/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
  301. package/XR/features/WebXRControllerPhysics.js +2 -2
  302. package/XR/features/WebXRControllerPhysics.js.map +1 -1
  303. package/XR/features/WebXRMeshDetector.d.ts +14 -2
  304. package/XR/features/WebXRMeshDetector.js +45 -9
  305. package/XR/features/WebXRMeshDetector.js.map +1 -1
  306. package/XR/features/WebXRWalkingLocomotion.js +1 -1
  307. package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
  308. package/XR/webXRExperienceHelper.js +2 -2
  309. package/XR/webXRExperienceHelper.js.map +1 -1
  310. package/assetContainer.js +2 -2
  311. package/assetContainer.js.map +1 -1
  312. package/esm/Engines/Extensions/alpha/alpha.base.d.ts +34 -0
  313. package/esm/Engines/Extensions/alpha/alpha.base.js +2 -0
  314. package/esm/Engines/Extensions/alpha/alpha.base.js.map +1 -0
  315. package/esm/Engines/Extensions/computeShaders/computeShaders.base.d.ts +87 -0
  316. package/esm/Engines/Extensions/computeShaders/computeShaders.base.js +12 -0
  317. package/esm/Engines/Extensions/computeShaders/computeShaders.base.js.map +1 -0
  318. package/esm/Engines/Extensions/cubeTexture/cubeTexture.base.d.ts +79 -0
  319. package/esm/Engines/Extensions/cubeTexture/cubeTexture.base.js +2 -0
  320. package/esm/Engines/Extensions/cubeTexture/cubeTexture.base.js.map +1 -0
  321. package/esm/Engines/Extensions/debugging/debugging.base.d.ts +11 -0
  322. package/esm/Engines/Extensions/debugging/debugging.base.js +2 -0
  323. package/esm/Engines/Extensions/debugging/debugging.base.js.map +1 -0
  324. package/esm/Engines/Extensions/dynamicBuffer/dynamicBuffer.base.d.ts +20 -0
  325. package/esm/Engines/Extensions/dynamicBuffer/dynamicBuffer.base.js +2 -0
  326. package/esm/Engines/Extensions/dynamicBuffer/dynamicBuffer.base.js.map +1 -0
  327. package/esm/Engines/Extensions/dynamicTexture/dynamicTexture.base.d.ts +26 -0
  328. package/esm/Engines/Extensions/dynamicTexture/dynamicTexture.base.js +2 -0
  329. package/esm/Engines/Extensions/dynamicTexture/dynamicTexture.base.js.map +1 -0
  330. package/esm/Engines/Extensions/engine.extensions.d.ts +67 -0
  331. package/esm/Engines/Extensions/engine.extensions.js +49 -0
  332. package/esm/Engines/Extensions/engine.extensions.js.map +1 -0
  333. package/esm/Engines/Extensions/externalTexture/externalTexture.base.d.ts +16 -0
  334. package/esm/Engines/Extensions/externalTexture/externalTexture.base.js +2 -0
  335. package/esm/Engines/Extensions/externalTexture/externalTexture.base.js.map +1 -0
  336. package/esm/Engines/Extensions/multiRender/multiRender.base.d.ts +54 -0
  337. package/esm/Engines/Extensions/multiRender/multiRender.base.js +2 -0
  338. package/esm/Engines/Extensions/multiRender/multiRender.base.js.map +1 -0
  339. package/esm/Engines/Extensions/multiview/multiview.base.d.ts +67 -0
  340. package/esm/Engines/Extensions/multiview/multiview.base.js +79 -0
  341. package/esm/Engines/Extensions/multiview/multiview.base.js.map +1 -0
  342. package/esm/Engines/Extensions/query/query.base.d.ts +164 -0
  343. package/esm/Engines/Extensions/query/query.base.js +168 -0
  344. package/esm/Engines/Extensions/query/query.base.js.map +1 -0
  345. package/esm/Engines/Extensions/rawTexture/engine.rawTexture.base.d.ts +187 -0
  346. package/esm/Engines/Extensions/rawTexture/engine.rawTexture.base.js +2 -0
  347. package/esm/Engines/Extensions/rawTexture/engine.rawTexture.base.js.map +1 -0
  348. package/esm/Engines/Extensions/readTexture/readTexture.base.d.ts +9 -0
  349. package/esm/Engines/Extensions/readTexture/readTexture.base.js +2 -0
  350. package/esm/Engines/Extensions/readTexture/readTexture.base.js.map +1 -0
  351. package/esm/Engines/Extensions/renderTarget/renderTarget.base.d.ts +35 -0
  352. package/esm/Engines/Extensions/renderTarget/renderTarget.base.js +2 -0
  353. package/esm/Engines/Extensions/renderTarget/renderTarget.base.js.map +1 -0
  354. package/esm/Engines/Extensions/renderTargetCube/renderTargetCube.base.d.ts +12 -0
  355. package/esm/Engines/Extensions/renderTargetCube/renderTargetCube.base.js +2 -0
  356. package/esm/Engines/Extensions/renderTargetCube/renderTargetCube.base.js.map +1 -0
  357. package/esm/Engines/Extensions/storageBuffer/storageBuffer.base.d.ts +36 -0
  358. package/esm/Engines/Extensions/storageBuffer/storageBuffer.base.js +2 -0
  359. package/esm/Engines/Extensions/storageBuffer/storageBuffer.base.js.map +1 -0
  360. package/esm/Engines/Extensions/textureSampler/textureSampler.base.d.ts +11 -0
  361. package/esm/Engines/Extensions/textureSampler/textureSampler.base.js +2 -0
  362. package/esm/Engines/Extensions/textureSampler/textureSampler.base.js.map +1 -0
  363. package/esm/Engines/Extensions/textureSelector/textureSelector.base.d.ts +50 -0
  364. package/esm/Engines/Extensions/textureSelector/textureSelector.base.js +53 -0
  365. package/esm/Engines/Extensions/textureSelector/textureSelector.base.js.map +1 -0
  366. package/esm/Engines/Extensions/transformFeedback/engine.transformFeedback.base.d.ts +42 -0
  367. package/esm/Engines/Extensions/transformFeedback/engine.transformFeedback.base.js +2 -0
  368. package/esm/Engines/Extensions/transformFeedback/engine.transformFeedback.base.js.map +1 -0
  369. package/esm/Engines/Extensions/uniformBuffer/uniformBuffer.base.d.ts +48 -0
  370. package/esm/Engines/Extensions/uniformBuffer/uniformBuffer.base.js +2 -0
  371. package/esm/Engines/Extensions/uniformBuffer/uniformBuffer.base.js.map +1 -0
  372. package/esm/Engines/Extensions/videoTexture/videoTexture.base.d.ts +13 -0
  373. package/esm/Engines/Extensions/videoTexture/videoTexture.base.js +2 -0
  374. package/esm/Engines/Extensions/videoTexture/videoTexture.base.js.map +1 -0
  375. package/esm/Engines/Extensions/views/views.base.d.ts +85 -0
  376. package/esm/Engines/Extensions/views/views.base.js +33 -0
  377. package/esm/Engines/Extensions/views/views.base.js.map +1 -0
  378. package/esm/Engines/WebGL/Extensions/alpha/alpha.webgl.d.ts +8 -0
  379. package/esm/Engines/WebGL/Extensions/alpha/alpha.webgl.js +137 -0
  380. package/esm/Engines/WebGL/Extensions/alpha/alpha.webgl.js.map +1 -0
  381. package/esm/Engines/WebGL/Extensions/cubeTexture/cubeTexture.webgl.d.ts +11 -0
  382. package/esm/Engines/WebGL/Extensions/cubeTexture/cubeTexture.webgl.js +251 -0
  383. package/esm/Engines/WebGL/Extensions/cubeTexture/cubeTexture.webgl.js.map +1 -0
  384. package/esm/Engines/WebGL/Extensions/dynamicBuffer/dynamicBuffer.webgl.d.ts +5 -0
  385. package/esm/Engines/WebGL/Extensions/dynamicBuffer/dynamicBuffer.webgl.js +55 -0
  386. package/esm/Engines/WebGL/Extensions/dynamicBuffer/dynamicBuffer.webgl.js.map +1 -0
  387. package/esm/Engines/WebGL/Extensions/dynamicTexture/dynamicTexture.webgl.d.ts +5 -0
  388. package/esm/Engines/WebGL/Extensions/dynamicTexture/dynamicTexture.webgl.js +65 -0
  389. package/esm/Engines/WebGL/Extensions/dynamicTexture/dynamicTexture.webgl.js.map +1 -0
  390. package/esm/Engines/WebGL/Extensions/multiRender/multiRender.webgl.d.ts +10 -0
  391. package/esm/Engines/WebGL/Extensions/multiRender/multiRender.webgl.js +375 -0
  392. package/esm/Engines/WebGL/Extensions/multiRender/multiRender.webgl.js.map +1 -0
  393. package/esm/Engines/WebGL/Extensions/multiview/multiview.webgl.d.ts +6 -0
  394. package/esm/Engines/WebGL/Extensions/multiview/multiview.webgl.js +77 -0
  395. package/esm/Engines/WebGL/Extensions/multiview/multiview.webgl.js.map +1 -0
  396. package/esm/Engines/WebGL/Extensions/query/query.webgl.d.ts +21 -0
  397. package/esm/Engines/WebGL/Extensions/query/query.webgl.js +220 -0
  398. package/esm/Engines/WebGL/Extensions/query/query.webgl.js.map +1 -0
  399. package/esm/Engines/WebGL/Extensions/rawTexture/engine.rawTexture.webgl.d.ts +15 -0
  400. package/esm/Engines/WebGL/Extensions/rawTexture/engine.rawTexture.webgl.js +392 -0
  401. package/esm/Engines/WebGL/Extensions/rawTexture/engine.rawTexture.webgl.js.map +1 -0
  402. package/esm/Engines/WebGL/Extensions/readTexture/readTexture.webgl.d.ts +17 -0
  403. package/esm/Engines/WebGL/Extensions/readTexture/readTexture.webgl.js +133 -0
  404. package/esm/Engines/WebGL/Extensions/readTexture/readTexture.webgl.js.map +1 -0
  405. package/esm/Engines/WebGL/Extensions/renderTarget/renderTarget.webgl.d.ts +8 -0
  406. package/esm/Engines/WebGL/Extensions/renderTarget/renderTarget.webgl.js +199 -0
  407. package/esm/Engines/WebGL/Extensions/renderTarget/renderTarget.webgl.js.map +1 -0
  408. package/esm/Engines/WebGL/Extensions/renderTargetCube/renderTargetCube.webgl.d.ts +2 -0
  409. package/esm/Engines/WebGL/Extensions/renderTargetCube/renderTargetCube.webgl.js +62 -0
  410. package/esm/Engines/WebGL/Extensions/renderTargetCube/renderTargetCube.webgl.js.map +1 -0
  411. package/esm/Engines/WebGL/Extensions/textureSelector/textureSelector.webgl.d.ts +5 -0
  412. package/esm/Engines/WebGL/Extensions/textureSelector/textureSelector.webgl.js +28 -0
  413. package/esm/Engines/WebGL/Extensions/textureSelector/textureSelector.webgl.js.map +1 -0
  414. package/esm/Engines/WebGL/Extensions/transformFeedback/engine.transformFeedback.webgl.d.ts +11 -0
  415. package/esm/Engines/WebGL/Extensions/transformFeedback/engine.transformFeedback.webgl.js +45 -0
  416. package/esm/Engines/WebGL/Extensions/transformFeedback/engine.transformFeedback.webgl.js.map +1 -0
  417. package/esm/Engines/WebGL/Extensions/uniformBuffer/uniformBuffer.webgl.d.ts +9 -0
  418. package/esm/Engines/WebGL/Extensions/uniformBuffer/uniformBuffer.webgl.js +78 -0
  419. package/esm/Engines/WebGL/Extensions/uniformBuffer/uniformBuffer.webgl.js.map +1 -0
  420. package/esm/Engines/WebGL/Extensions/videoTexture/videoTexture.webgl.d.ts +4 -0
  421. package/esm/Engines/WebGL/Extensions/videoTexture/videoTexture.webgl.js +67 -0
  422. package/esm/Engines/WebGL/Extensions/videoTexture/videoTexture.webgl.js.map +1 -0
  423. package/esm/Engines/WebGL/Extensions/views/views.webgl.d.ts +18 -0
  424. package/esm/Engines/WebGL/Extensions/views/views.webgl.js +152 -0
  425. package/esm/Engines/WebGL/Extensions/views/views.webgl.js.map +1 -0
  426. package/esm/Engines/WebGL/engine.adapterHelpers.d.ts +43 -0
  427. package/esm/Engines/WebGL/engine.adapterHelpers.js +107 -0
  428. package/esm/Engines/WebGL/engine.adapterHelpers.js.map +1 -0
  429. package/esm/Engines/WebGL/engine.webgl.d.ts +1030 -0
  430. package/esm/Engines/WebGL/engine.webgl.js +4083 -0
  431. package/esm/Engines/WebGL/engine.webgl.js.map +1 -0
  432. package/esm/Engines/WebGPU/engine.adapterHelpers.d.ts +7 -0
  433. package/esm/Engines/WebGPU/engine.adapterHelpers.js +20 -0
  434. package/esm/Engines/WebGPU/engine.adapterHelpers.js.map +1 -0
  435. package/esm/Engines/WebGPU/engine.webgpu.constants.d.ts +391 -0
  436. package/esm/Engines/WebGPU/engine.webgpu.constants.js +2 -0
  437. package/esm/Engines/WebGPU/engine.webgpu.constants.js.map +1 -0
  438. package/esm/Engines/WebGPU/engine.webgpu.d.ts +277 -0
  439. package/esm/Engines/WebGPU/engine.webgpu.js +1281 -0
  440. package/esm/Engines/WebGPU/engine.webgpu.js.map +1 -0
  441. package/esm/Engines/engine.adapters.d.ts +32 -0
  442. package/esm/Engines/engine.adapters.js +27 -0
  443. package/esm/Engines/engine.adapters.js.map +1 -0
  444. package/esm/Engines/engine.base.d.ts +807 -0
  445. package/esm/Engines/engine.base.js +1235 -0
  446. package/esm/Engines/engine.base.js.map +1 -0
  447. package/esm/Engines/engine.constants.d.ts +735 -0
  448. package/esm/Engines/engine.constants.js +3 -0
  449. package/esm/Engines/engine.constants.js.map +1 -0
  450. package/esm/Engines/engine.extendable.d.ts +180 -0
  451. package/esm/Engines/engine.extendable.js +477 -0
  452. package/esm/Engines/engine.extendable.js.map +1 -0
  453. package/esm/Engines/engine.interfaces.d.ts +16 -0
  454. package/esm/Engines/engine.interfaces.js +9 -0
  455. package/esm/Engines/engine.interfaces.js.map +1 -0
  456. package/esm/Engines/engine.static.d.ts +215 -0
  457. package/esm/Engines/engine.static.js +345 -0
  458. package/esm/Engines/engine.static.js.map +1 -0
  459. package/esm/Engines/engine.tools.d.ts +20 -0
  460. package/esm/Engines/engine.tools.js +33 -0
  461. package/esm/Engines/engine.tools.js.map +1 -0
  462. package/esm/Engines/public.d.ts +1 -0
  463. package/esm/Engines/public.js +2 -0
  464. package/esm/Engines/public.js.map +1 -0
  465. package/esm/Engines/runtimeEnvironment.d.ts +37 -0
  466. package/esm/Engines/runtimeEnvironment.js +56 -0
  467. package/esm/Engines/runtimeEnvironment.js.map +1 -0
  468. package/package.json +2 -1
  469. package/scene.d.ts +1 -2
  470. package/scene.js +1 -1
  471. package/scene.js.map +1 -1
  472. package/FlowGraph/Blocks/Data/Math/flowGraphMatrixBlocks.d.ts +0 -172
  473. package/FlowGraph/Blocks/Data/Math/flowGraphMatrixBlocks.js +0 -235
  474. package/FlowGraph/Blocks/Data/Math/flowGraphMatrixBlocks.js.map +0 -1
  475. package/FlowGraph/Blocks/Data/Math/flowGraphNumberMathBlocks.d.ts +0 -269
  476. package/FlowGraph/Blocks/Data/Math/flowGraphNumberMathBlocks.js +0 -429
  477. package/FlowGraph/Blocks/Data/Math/flowGraphNumberMathBlocks.js.map +0 -1
  478. package/FlowGraph/Blocks/Data/Math/flowGraphVector2MathBlocks.d.ts +0 -115
  479. package/FlowGraph/Blocks/Data/Math/flowGraphVector2MathBlocks.js +0 -146
  480. package/FlowGraph/Blocks/Data/Math/flowGraphVector2MathBlocks.js.map +0 -1
  481. package/FlowGraph/Blocks/Data/Math/flowGraphVector3MathBlocks.d.ts +0 -155
  482. package/FlowGraph/Blocks/Data/Math/flowGraphVector3MathBlocks.js +0 -190
  483. package/FlowGraph/Blocks/Data/Math/flowGraphVector3MathBlocks.js.map +0 -1
  484. package/FlowGraph/Blocks/Data/Math/flowGraphVector4MathBlocks.d.ts +0 -116
  485. package/FlowGraph/Blocks/Data/Math/flowGraphVector4MathBlocks.js +0 -144
  486. package/FlowGraph/Blocks/Data/Math/flowGraphVector4MathBlocks.js.map +0 -1
  487. package/FlowGraph/Blocks/Execution/flowGraphLogBlock.js +0 -27
  488. package/FlowGraph/Blocks/Execution/flowGraphLogBlock.js.map +0 -1
@@ -0,0 +1,1235 @@
1
+ /**
2
+ * Base engine functionality to be used in all other different engines
3
+ */
4
+ /* eslint-disable jsdoc/require-jsdoc */
5
+ import { Effect } from "../../Materials/effect.js";
6
+ import { Observable } from "../../Misc/observable.js";
7
+ import { PrecisionDate } from "../../Misc/precisionDate.js";
8
+ import { AlphaState } from "../../States/alphaCullingState.js";
9
+ import { EngineType } from "./engine.interfaces.js";
10
+ import { IsDocumentAvailable, IsWindowObjectExist, hostInformation } from "./runtimeEnvironment.js";
11
+ import { PerformanceConfigurator } from "../../Engines/performanceConfigurator.js";
12
+ import { EngineStore, _CreateCanvas, _ExitFullscreen, _ExitPointerlock, _RequestFullscreen, _RequestPointerlock } from "./engine.static.js";
13
+ import { PerformanceMonitor } from "../../Misc/performanceMonitor.js";
14
+ import { StencilState } from "../../States/stencilState.js";
15
+ import { augmentEngineStateWithExtensions } from "./Extensions/engine.extensions.js";
16
+ let engineCounter = 0;
17
+ /**
18
+ * @internal
19
+ */
20
+ export function initBaseEngineState(overrides = {}, options = {}) {
21
+ var _a, _b, _c, _d, _e;
22
+ const devicePixelRatio = IsWindowObjectExist() ? window.devicePixelRatio || 1.0 : 1.0;
23
+ const limitDeviceRatio = options.limitDeviceRatio || devicePixelRatio;
24
+ options.deterministicLockstep = (_a = options.deterministicLockstep) !== null && _a !== void 0 ? _a : false;
25
+ options.lockstepMaxSteps = (_b = options.lockstepMaxSteps) !== null && _b !== void 0 ? _b : 4;
26
+ options.timeStep = (_c = options.timeStep) !== null && _c !== void 0 ? _c : 1 / 60;
27
+ options.stencil = (_d = options.stencil) !== null && _d !== void 0 ? _d : true;
28
+ // TODO - this needs to be a module as well
29
+ PerformanceConfigurator.SetMatrixPrecision(!!options.useHighPrecisionMatrix);
30
+ const engineState = {
31
+ // module: {},
32
+ uniqueId: engineCounter++,
33
+ _type: EngineType.BASE,
34
+ get description() {
35
+ let description = engineState.name + engineState._version;
36
+ if (engineState._caps.parallelShaderCompile) {
37
+ description += " - Parallel shader compilation";
38
+ }
39
+ return description;
40
+ },
41
+ name: "Base",
42
+ _version: 1,
43
+ _isDisposed: false,
44
+ get isDisposed() {
45
+ return engineState._isDisposed;
46
+ },
47
+ forcePOTTextures: false,
48
+ isFullscreen: false,
49
+ cullBackFaces: null,
50
+ renderEvenInBackground: true,
51
+ preventCacheWipeBetweenFrames: false,
52
+ validateShaderPrograms: false,
53
+ _useReverseDepthBuffer: false,
54
+ get useReverseDepthBuffer() {
55
+ return engineState._useReverseDepthBuffer;
56
+ },
57
+ set useReverseDepthBuffer(useReverse) {
58
+ if (useReverse === engineState._useReverseDepthBuffer) {
59
+ return;
60
+ }
61
+ engineState._useReverseDepthBuffer = useReverse;
62
+ if (engineState._depthCullingState) {
63
+ if (useReverse) {
64
+ engineState._depthCullingState.depthFunc = 518 /* 518 */;
65
+ }
66
+ else {
67
+ engineState._depthCullingState.depthFunc = 515 /* 515 */;
68
+ }
69
+ }
70
+ },
71
+ isNDCHalfZRange: false,
72
+ hasOriginBottomLeft: true,
73
+ disableUniformBuffers: false,
74
+ onDisposeObservable: new Observable(),
75
+ _frameId: 0,
76
+ get frameId() {
77
+ return engineState._frameId;
78
+ },
79
+ startTime: PrecisionDate.Now,
80
+ get needPOTTextures() {
81
+ return engineState.forcePOTTextures;
82
+ },
83
+ _renderingQueueLaunched: false,
84
+ _activeRenderLoops: [],
85
+ get activeRenderLoops() {
86
+ return engineState._activeRenderLoops;
87
+ },
88
+ onContextLostObservable: new Observable(),
89
+ onContextRestoredObservable: new Observable(),
90
+ doNotHandleContextLost: false,
91
+ disableVertexArrayObjects: false,
92
+ adaptToDeviceRatio: (_e = options.adaptToDeviceRatio) !== null && _e !== void 0 ? _e : false,
93
+ get currentViewport() {
94
+ return engineState._cachedViewport;
95
+ },
96
+ premultipliedAlpha: true,
97
+ onBeforeTextureInitObservable: new Observable(),
98
+ get isWebGPU() {
99
+ return engineState._type === EngineType.WEBGPU;
100
+ },
101
+ get shaderPlatformName() {
102
+ return engineState._shaderPlatformName;
103
+ },
104
+ get supportsUniformBuffers() {
105
+ return false;
106
+ },
107
+ useExactSrgbConversions: options.useExactSrgbConversions || false,
108
+ onBeginFrameObservable: new Observable(),
109
+ onEndFrameObservable: new Observable(),
110
+ onBeforeShaderCompilationObservable: new Observable(),
111
+ onAfterShaderCompilationObservable: new Observable(),
112
+ scenes: [],
113
+ postProcesses: [],
114
+ onResizeObservable: new Observable(),
115
+ onCanvasBlurObservable: new Observable(),
116
+ onCanvasFocusObservable: new Observable(),
117
+ onCanvasPointerOutObservable: new Observable(),
118
+ disableContextMenu: true,
119
+ disablePerformanceMonitorInBackground: false,
120
+ isPointerLock: false,
121
+ get isStencilEnable() {
122
+ return engineState._isStencilEnable;
123
+ },
124
+ enableOfflineSupport: false,
125
+ disableManifestCheck: false,
126
+ onNewSceneAddedObservable: new Observable(),
127
+ customAnimationFrameRequester: null,
128
+ canvasTabIndex: 1,
129
+ currentRenderPassId: 0,
130
+ get alphaState() {
131
+ return engineState._alphaState;
132
+ },
133
+ emptyTexture: null,
134
+ emptyCubeTexture: null,
135
+ emptyTexture3D: null,
136
+ emptyTexture2DArray: null,
137
+ // internals
138
+ _uniformBuffers: [],
139
+ _storageBuffers: [],
140
+ _windowIsBackground: false,
141
+ get _shouldUseHighPrecisionShader() {
142
+ return !!(engineState._caps.highPrecisionShaderSupported && engineState._highPrecisionShadersAllowed);
143
+ },
144
+ _badOS: false,
145
+ _badDesktopOS: false,
146
+ _contextWasLost: false,
147
+ _internalTexturesCache: [],
148
+ _renderTargetWrapperCache: [],
149
+ _activeChannel: 0,
150
+ _currentTextureChannel: -1,
151
+ _boundTexturesCache: {},
152
+ _compiledEffects: {},
153
+ _vertexAttribArraysEnabled: [],
154
+ _lastDevicePixelRatio: devicePixelRatio,
155
+ _hardwareScalingLevel: options.adaptToDeviceRatio ? 1.0 / Math.min(limitDeviceRatio, devicePixelRatio) : 1.0,
156
+ _transformTextureUrl: null,
157
+ _renderWidthOverride: null,
158
+ _creationOptions: options,
159
+ _isStencilEnable: !!options.stencil,
160
+ _virtualScenes: [],
161
+ _videoTextureSupported: false,
162
+ _stencilState: new StencilState(),
163
+ // Missing vars
164
+ _shaderProcessor: null,
165
+ _renderingCanvas: null,
166
+ _caps: {},
167
+ _features: {},
168
+ _alphaState: new AlphaState(),
169
+ _alphaMode: 1 /* 1 */,
170
+ _alphaEquation: 0 /* 0 */,
171
+ _currentRenderTarget: null,
172
+ _boundRenderFunction: () => void 0,
173
+ _frameHandler: -1,
174
+ _highPrecisionShadersAllowed: true,
175
+ _colorWrite: true,
176
+ _colorWriteChanged: true,
177
+ // _depthCullingState: null,
178
+ // _stencilStateComposer: null,
179
+ // _stencilState: null,
180
+ _currentEffect: null,
181
+ _cachedViewport: null,
182
+ _workingCanvas: null,
183
+ _workingContext: null,
184
+ _shaderPlatformName: "",
185
+ _emptyTexture: null,
186
+ _emptyCubeTexture: null,
187
+ _emptyTexture3D: null,
188
+ _emptyTexture2DArray: null,
189
+ _dimensionsObject: null,
190
+ _viewportCached: { x: 0, y: 0, z: 0, w: 0 },
191
+ _activeRequests: [],
192
+ _performanceMonitor: null,
193
+ _fps: 60,
194
+ _deltaTime: 0,
195
+ _pointerLockRequested: false,
196
+ _deterministicLockstep: false,
197
+ _lockstepMaxSteps: 4,
198
+ _timeStep: 1 / 60,
199
+ _renderPassNames: ["main"],
200
+ _cachedStencilBuffer: false,
201
+ _cachedStencilFunction: -1,
202
+ _cachedStencilMask: -1,
203
+ _cachedStencilOperationPass: -1,
204
+ _cachedStencilOperationFail: -1,
205
+ _cachedStencilOperationDepthFail: -1,
206
+ _cachedStencilReference: -1,
207
+ };
208
+ // TODO is getOwnPropertyDescriptors supported in native? if it doesn't we will need to use getOwnPropertyNames
209
+ // Extend the engine state with the overrides
210
+ Object.defineProperties(engineState, Object.getOwnPropertyDescriptors(overrides));
211
+ // TODO - this actually prevents tree shaking. Should be done by the dev, apart from the most basic functions.
212
+ // populateBaseModule(engineState);
213
+ EngineStore.Instances.push(engineState);
214
+ augmentEngineStateWithExtensions(engineState);
215
+ return engineState;
216
+ }
217
+ export function getPerformanceMonitor(engineState) {
218
+ if (!engineState._performanceMonitor) {
219
+ engineState._performanceMonitor = new PerformanceMonitor();
220
+ }
221
+ return engineState._performanceMonitor;
222
+ }
223
+ export function getFps(engineState) {
224
+ return engineState._fps;
225
+ }
226
+ export function getDeltaTime(engineState) {
227
+ return engineState._deltaTime;
228
+ }
229
+ /**
230
+ * Force a specific size of the canvas
231
+ * @param engineState defines the engine state
232
+ * @param width defines the new canvas' width
233
+ * @param height defines the new canvas' height
234
+ * @param forceSetSize true to force setting the sizes of the underlying canvas
235
+ * @returns true if the size was changed
236
+ */
237
+ export function setSizeBase(engineState, width, height, forceSetSize = false) {
238
+ const fes = engineState;
239
+ if (!fes._renderingCanvas) {
240
+ return false;
241
+ }
242
+ width = width | 0;
243
+ height = height | 0;
244
+ if (!forceSetSize && fes._renderingCanvas.width === width && fes._renderingCanvas.height === height) {
245
+ return false;
246
+ }
247
+ fes._renderingCanvas.width = width;
248
+ fes._renderingCanvas.height = height;
249
+ return true;
250
+ }
251
+ /**
252
+ * Gets the default empty texture
253
+ * @param engineState defines the engine state
254
+ * @param createRawTexture defines a function used to create the raw texture from the rawTexture extension
255
+ * @returns the default empty texture
256
+ */
257
+ export function getEmptyTexture(engineState, { createRawTexture }) {
258
+ if (!engineState._emptyTexture) {
259
+ engineState._emptyTexture = createRawTexture(engineState, new Uint8Array(4), 1, 1, 5 /* 5 */, false, false, 1 /* 1 */);
260
+ }
261
+ return engineState._emptyTexture;
262
+ }
263
+ /**
264
+ * Gets the default empty 3D texture
265
+ * @param engineState defines the engine state
266
+ * @param createRawTexture3D defines a function used to create the raw texture from the rawTexture extension
267
+ * @returns the default empty 3D texture
268
+ */
269
+ export function getEmptyTexture3D(engineState, { createRawTexture3D }) {
270
+ if (!engineState._emptyTexture3D) {
271
+ engineState._emptyTexture3D = createRawTexture3D(engineState, new Uint8Array(4), 1, 1, 1, 5 /* 5 */, false, false, 1 /* 1 */);
272
+ }
273
+ return engineState._emptyTexture3D;
274
+ }
275
+ /**
276
+ * Gets the default empty texture 2D
277
+ * @param engineState defines the engine state
278
+ * @param createRawCubeTexture defines a function used to create the raw texture 2D from the rawTexture extension
279
+ * @returns the default empty texture 2D
280
+ */
281
+ export function getEmptyTexture2DArray(engineState, { createRawTexture2DArray }) {
282
+ if (!engineState._emptyTexture2DArray) {
283
+ engineState._emptyTexture2DArray = createRawTexture2DArray(engineState, new Uint8Array(4), 1, 1, 1, 5 /* 5 */, false, false, 1 /* 1 */);
284
+ }
285
+ return engineState._emptyTexture2DArray;
286
+ }
287
+ /**
288
+ * Gets the default empty cube texture
289
+ * @param engineState defines the engine state
290
+ * @param createRawCubeTexture defines a function used to create the raw cube texture from the rawTexture extension
291
+ * @returns the default empty cube texture
292
+ */
293
+ export function getEmptyCubeTexture(engineState, { createRawCubeTexture }) {
294
+ if (!engineState._emptyCubeTexture) {
295
+ const faceData = new Uint8Array(4);
296
+ const cubeData = [faceData, faceData, faceData, faceData, faceData, faceData];
297
+ engineState._emptyCubeTexture = createRawCubeTexture(engineState, cubeData, 1, 5 /* 5 */, 0 /* 0 */, false, false, 1 /* 1 */);
298
+ }
299
+ return engineState._emptyCubeTexture;
300
+ }
301
+ /**
302
+ * Gets a boolean indicating if all created effects are ready
303
+ * @param engineState defines the engine state
304
+ * @returns true if all effects are ready
305
+ */
306
+ export function areAllEffectsReady(engineState) {
307
+ const fes = engineState;
308
+ for (const key in fes._compiledEffects) {
309
+ const effect = fes._compiledEffects[key];
310
+ if (!effect.isReady()) {
311
+ return false;
312
+ }
313
+ }
314
+ return true;
315
+ }
316
+ /**
317
+ * @internal
318
+ */
319
+ export function _rebuildBuffers(engineState) {
320
+ const fes = engineState;
321
+ // from Engine
322
+ // Index / Vertex
323
+ for (const scene of engineState.scenes) {
324
+ scene.resetCachedMaterial();
325
+ scene._rebuildGeometries();
326
+ scene._rebuildTextures();
327
+ }
328
+ for (const scene of fes._virtualScenes) {
329
+ scene.resetCachedMaterial();
330
+ scene._rebuildGeometries();
331
+ scene._rebuildTextures();
332
+ }
333
+ // From ThinEngine
334
+ // Uniforms
335
+ for (const uniformBuffer of fes._uniformBuffers) {
336
+ uniformBuffer._rebuild();
337
+ }
338
+ // Storage buffers
339
+ for (const storageBuffer of fes._storageBuffers) {
340
+ storageBuffer._rebuild();
341
+ }
342
+ }
343
+ /**
344
+ * Reset the texture cache to empty state
345
+ */
346
+ export function resetTextureCache(engineState) {
347
+ const fes = engineState;
348
+ for (const key in fes._boundTexturesCache) {
349
+ if (!Object.prototype.hasOwnProperty.call(fes._boundTexturesCache, key)) {
350
+ continue;
351
+ }
352
+ fes._boundTexturesCache[key] = null;
353
+ }
354
+ fes._currentTextureChannel = -1;
355
+ }
356
+ function _measureFps(engineState) {
357
+ const fes = engineState;
358
+ if (fes._performanceMonitor) {
359
+ fes._performanceMonitor.sampleFrame();
360
+ fes._fps = fes._performanceMonitor.averageFPS;
361
+ fes._deltaTime = fes._performanceMonitor.instantaneousFrameTime || 0;
362
+ }
363
+ }
364
+ /**
365
+ * Begin a new frame
366
+ */
367
+ export function beginFrame(engineState) {
368
+ _measureFps(engineState);
369
+ engineState.onBeginFrameObservable.notifyObservers(engineState);
370
+ }
371
+ /**
372
+ * stop executing a render loop function and remove it from the execution array
373
+ * @param engineState defines the engine state
374
+ * @param renderFunction defines the function to be removed. If not provided all functions will be removed.
375
+ */
376
+ export function stopRenderLoop(engineState, renderFunction, cancelFrame = _cancelFrame) {
377
+ const fes = engineState;
378
+ if (!renderFunction) {
379
+ fes._activeRenderLoops.length = 0;
380
+ cancelFrame(engineState);
381
+ return;
382
+ }
383
+ const index = fes._activeRenderLoops.indexOf(renderFunction);
384
+ if (index >= 0) {
385
+ fes._activeRenderLoops.splice(index, 1);
386
+ if (fes._activeRenderLoops.length == 0) {
387
+ cancelFrame(engineState);
388
+ }
389
+ }
390
+ }
391
+ /**
392
+ * Enf the current frame
393
+ */
394
+ export function endFrame(engineState) {
395
+ const fes = engineState;
396
+ fes._frameId++;
397
+ }
398
+ // Just for thin engine reconstruction
399
+ export function _cancelFrameThin(engineState) {
400
+ const fes = engineState;
401
+ if (fes._renderingQueueLaunched && fes._frameHandler) {
402
+ fes._renderingQueueLaunched = false;
403
+ if (!IsWindowObjectExist()) {
404
+ if (typeof cancelAnimationFrame === "function") {
405
+ return cancelAnimationFrame(fes._frameHandler);
406
+ }
407
+ }
408
+ else {
409
+ const { cancelAnimationFrame } = getHostWindow(fes) || window;
410
+ if (typeof cancelAnimationFrame === "function") {
411
+ return cancelAnimationFrame(fes._frameHandler);
412
+ }
413
+ }
414
+ return clearTimeout(fes._frameHandler);
415
+ }
416
+ }
417
+ // Was protected, now passed as a variable
418
+ export function _cancelFrame(engineState) {
419
+ const fes = engineState;
420
+ if (fes._renderingQueueLaunched && fes.customAnimationFrameRequester) {
421
+ fes._renderingQueueLaunched = false;
422
+ const { cancelAnimationFrame } = fes.customAnimationFrameRequester;
423
+ if (cancelAnimationFrame) {
424
+ cancelAnimationFrame(fes.customAnimationFrameRequester.requestID);
425
+ }
426
+ }
427
+ else if (fes._renderingQueueLaunched && fes._frameHandler) {
428
+ fes._renderingQueueLaunched = false;
429
+ if (!IsWindowObjectExist()) {
430
+ if (typeof cancelAnimationFrame === "function") {
431
+ return cancelAnimationFrame(fes._frameHandler);
432
+ }
433
+ }
434
+ else {
435
+ const { cancelAnimationFrame } = getHostWindow(engineState) || window;
436
+ if (typeof cancelAnimationFrame === "function") {
437
+ return cancelAnimationFrame(fes._frameHandler);
438
+ }
439
+ }
440
+ return clearTimeout(fes._frameHandler);
441
+ }
442
+ }
443
+ /**
444
+ * Gets host window
445
+ * @returns the host window object
446
+ */
447
+ export function getHostWindow(engineState) {
448
+ const fes = engineState;
449
+ if (!IsWindowObjectExist()) {
450
+ return null;
451
+ }
452
+ if (fes._renderingCanvas && fes._renderingCanvas.ownerDocument && fes._renderingCanvas.ownerDocument.defaultView) {
453
+ return fes._renderingCanvas.ownerDocument.defaultView;
454
+ }
455
+ return window;
456
+ }
457
+ /**
458
+ * Gets host document
459
+ * @returns the host document object
460
+ */
461
+ export function getHostDocument(engineState) {
462
+ const fes = engineState;
463
+ if (fes._renderingCanvas && fes._renderingCanvas.ownerDocument) {
464
+ return fes._renderingCanvas.ownerDocument;
465
+ }
466
+ return IsDocumentAvailable() ? document : null;
467
+ }
468
+ /**
469
+ * Gets the current render width
470
+ * @param engineState defines the engine state
471
+ * @param useScreen defines if screen size must be used (or the current render target if any)
472
+ * @returns a number defining the current render width
473
+ */
474
+ export function getRenderWidth(engineState, useScreen = false) {
475
+ const fes = engineState;
476
+ if (!useScreen && fes._currentRenderTarget) {
477
+ return fes._currentRenderTarget.width;
478
+ }
479
+ return fes._dimensionsObject ? fes._dimensionsObject.width : 0;
480
+ }
481
+ /**
482
+ * Gets the current render height
483
+ * @param engineState defines the engine state
484
+ * @param useScreen defines if screen size must be used (or the current render target if any)
485
+ * @returns a number defining the current render height
486
+ */
487
+ export function getRenderHeight(engineState, useScreen = false) {
488
+ const fes = engineState;
489
+ if (!useScreen && fes._currentRenderTarget) {
490
+ return fes._currentRenderTarget.height;
491
+ }
492
+ return fes._dimensionsObject ? fes._dimensionsObject.height : 0;
493
+ }
494
+ /**
495
+ * @internal
496
+ */
497
+ export function _viewport(engineState, x, y, width, height) {
498
+ const fes = engineState;
499
+ fes._viewportCached.x = x;
500
+ fes._viewportCached.y = y;
501
+ fes._viewportCached.z = width;
502
+ fes._viewportCached.w = height;
503
+ }
504
+ /** @internal */
505
+ export function _getGlobalDefines(engineState, defines) {
506
+ if (defines) {
507
+ if (engineState.isNDCHalfZRange) {
508
+ defines["IS_NDC_HALF_ZRANGE"] = "";
509
+ }
510
+ else {
511
+ delete defines["IS_NDC_HALF_ZRANGE"];
512
+ }
513
+ if (engineState.useReverseDepthBuffer) {
514
+ defines["USE_REVERSE_DEPTHBUFFER"] = "";
515
+ }
516
+ else {
517
+ delete defines["USE_REVERSE_DEPTHBUFFER"];
518
+ }
519
+ if (engineState.useExactSrgbConversions) {
520
+ defines["USE_EXACT_SRGB_CONVERSIONS"] = "";
521
+ }
522
+ else {
523
+ delete defines["USE_EXACT_SRGB_CONVERSIONS"];
524
+ }
525
+ return;
526
+ }
527
+ else {
528
+ let s = "";
529
+ if (engineState.isNDCHalfZRange) {
530
+ s += "#define IS_NDC_HALF_ZRANGE";
531
+ }
532
+ if (engineState.useReverseDepthBuffer) {
533
+ if (s) {
534
+ s += "\n";
535
+ }
536
+ s += "#define USE_REVERSE_DEPTHBUFFER";
537
+ }
538
+ if (engineState.useExactSrgbConversions) {
539
+ if (s) {
540
+ s += "\n";
541
+ }
542
+ s += "#define USE_EXACT_SRGB_CONVERSIONS";
543
+ }
544
+ return s;
545
+ }
546
+ }
547
+ /**
548
+ * Clears the list of texture accessible through engine.
549
+ * This can help preventing texture load conflict due to name collision.
550
+ */
551
+ export function clearInternalTexturesCache(engineState) {
552
+ engineState._internalTexturesCache.length = 0;
553
+ }
554
+ /** @internal */
555
+ export function _prepareWorkingCanvas(engineState) {
556
+ const fes = engineState;
557
+ if (fes._workingCanvas) {
558
+ return;
559
+ }
560
+ fes._workingCanvas = _CreateCanvas(1, 1);
561
+ const context = fes._workingCanvas.getContext("2d");
562
+ if (context) {
563
+ fes._workingContext = context;
564
+ }
565
+ }
566
+ export function _setupMobileChecks(engineState) {
567
+ const fes = engineState;
568
+ if (!(navigator && navigator.userAgent)) {
569
+ return;
570
+ }
571
+ // Function to check if running on mobile device
572
+ fes._checkForMobile = () => {
573
+ const currentUA = navigator.userAgent;
574
+ hostInformation.isMobile =
575
+ currentUA.indexOf("Mobile") !== -1 ||
576
+ // Needed for iOS 13+ detection on iPad (inspired by solution from https://stackoverflow.com/questions/9038625/detect-if-device-is-ios)
577
+ (currentUA.indexOf("Mac") !== -1 && IsDocumentAvailable() && "ontouchend" in document);
578
+ };
579
+ // Set initial isMobile value
580
+ fes._checkForMobile();
581
+ // Set up event listener to check when window is resized (used to get emulator activation to work properly)
582
+ if (IsWindowObjectExist()) {
583
+ window.addEventListener("resize", fes._checkForMobile);
584
+ }
585
+ }
586
+ /**
587
+ * Dispose and release all associated resources
588
+ */
589
+ export function dispose(engineState) {
590
+ const fes = engineState;
591
+ fes._isDisposed = true;
592
+ stopRenderLoop(engineState);
593
+ hideLoadingUI(engineState);
594
+ engineState.onNewSceneAddedObservable.clear();
595
+ // Release postProcesses
596
+ while (engineState.postProcesses.length) {
597
+ engineState.postProcesses[0].dispose();
598
+ }
599
+ // Release scenes
600
+ while (fes.scenes.length) {
601
+ fes.scenes[0].dispose();
602
+ }
603
+ while (fes._virtualScenes.length) {
604
+ fes._virtualScenes[0].dispose();
605
+ }
606
+ // TODO Release audio engine
607
+ // if (EngineStore.Instances.length === 1 && Engine.audioEngine) {
608
+ // Engine.audioEngine.dispose();
609
+ // Engine.audioEngine = null;
610
+ // }
611
+ // Clear observables
612
+ if (engineState.onBeforeTextureInitObservable) {
613
+ engineState.onBeforeTextureInitObservable.clear();
614
+ }
615
+ if (IsWindowObjectExist()) {
616
+ if (fes._checkForMobile) {
617
+ window.removeEventListener("resize", fes._checkForMobile);
618
+ }
619
+ }
620
+ // Events
621
+ const hostWindow = getHostWindow(engineState); // it calls IsWindowObjectExist()
622
+ if (hostWindow && typeof hostWindow.removeEventListener === "function") {
623
+ fes._onBlur && hostWindow.removeEventListener("blur", fes._onBlur);
624
+ fes._onFocus && hostWindow.removeEventListener("focus", fes._onFocus);
625
+ }
626
+ if (fes._renderingCanvas) {
627
+ fes._onCanvasFocus && fes._renderingCanvas.removeEventListener("focus", fes._onCanvasFocus);
628
+ fes._onCanvasBlur && fes._renderingCanvas.removeEventListener("blur", fes._onCanvasBlur);
629
+ fes._onCanvasPointerOut && fes._renderingCanvas.removeEventListener("pointerout", fes._onCanvasPointerOut);
630
+ fes._onCanvasContextMenu && fes._renderingCanvas.removeEventListener("contextmenu", fes._onCanvasContextMenu);
631
+ }
632
+ if (IsDocumentAvailable()) {
633
+ if (fes._onFullscreenChange) {
634
+ document.removeEventListener("fullscreenchange", fes._onFullscreenChange);
635
+ document.removeEventListener("mozfullscreenchange", fes._onFullscreenChange);
636
+ document.removeEventListener("webkitfullscreenchange", fes._onFullscreenChange);
637
+ document.removeEventListener("msfullscreenchange", fes._onFullscreenChange);
638
+ }
639
+ if (fes._onPointerLockChange) {
640
+ document.removeEventListener("pointerlockchange", fes._onPointerLockChange);
641
+ document.removeEventListener("mspointerlockchange", fes._onPointerLockChange);
642
+ document.removeEventListener("mozpointerlockchange", fes._onPointerLockChange);
643
+ document.removeEventListener("webkitpointerlockchange", fes._onPointerLockChange);
644
+ }
645
+ }
646
+ fes._workingCanvas = null;
647
+ fes._workingContext = null;
648
+ fes._renderingCanvas = null;
649
+ Effect.ResetCache();
650
+ // Abort active requests
651
+ for (const request of fes._activeRequests) {
652
+ request.abort();
653
+ }
654
+ // Remove from Instances
655
+ const index = EngineStore.Instances.indexOf(engineState);
656
+ if (index >= 0) {
657
+ EngineStore.Instances.splice(index, 1);
658
+ }
659
+ // no more engines left in the engine store? Notify!
660
+ if (!EngineStore.Instances.length) {
661
+ EngineStore.OnEnginesDisposedObservable.notifyObservers(engineState);
662
+ }
663
+ // Observables
664
+ engineState.onResizeObservable.clear();
665
+ engineState.onCanvasBlurObservable.clear();
666
+ engineState.onCanvasFocusObservable.clear();
667
+ engineState.onCanvasPointerOutObservable.clear();
668
+ engineState.onBeginFrameObservable.clear();
669
+ engineState.onEndFrameObservable.clear();
670
+ fes.onDisposeObservable.notifyObservers(fes);
671
+ fes.onDisposeObservable.clear();
672
+ }
673
+ // Loading screen
674
+ /**
675
+ * Display the loading screen
676
+ * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/customLoadingScreen
677
+ */
678
+ export function displayLoadingUI(engineState) {
679
+ if (!IsWindowObjectExist()) {
680
+ return;
681
+ }
682
+ const loadingScreen = getLoadingScreen(engineState);
683
+ if (loadingScreen) {
684
+ loadingScreen.displayLoadingUI();
685
+ }
686
+ }
687
+ /**
688
+ * Hide the loading screen
689
+ * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/customLoadingScreen
690
+ */
691
+ export function hideLoadingUI(engineState) {
692
+ if (!IsWindowObjectExist()) {
693
+ return;
694
+ }
695
+ const loadingScreen = engineState._loadingScreen;
696
+ if (loadingScreen) {
697
+ loadingScreen.hideLoadingUI();
698
+ }
699
+ }
700
+ /**
701
+ * Gets the current loading screen object
702
+ * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/customLoadingScreen
703
+ */
704
+ export function getLoadingScreen(engineState) {
705
+ var _a;
706
+ const fes = engineState;
707
+ if (!fes._loadingScreen && fes._renderingCanvas) {
708
+ fes._loadingScreen = (_a = EngineStore.DefaultLoadingScreenFactory) === null || _a === void 0 ? void 0 : _a.call(EngineStore, fes._renderingCanvas);
709
+ }
710
+ return fes._loadingScreen;
711
+ }
712
+ /**
713
+ * Sets the current loading screen object
714
+ * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/customLoadingScreen
715
+ */
716
+ export function setLoadingScreen(engineState, loadingScreen) {
717
+ engineState._loadingScreen = loadingScreen;
718
+ }
719
+ /**
720
+ * creates and returns a new video element
721
+ * @param constraints video constraints
722
+ * @returns video element
723
+ */
724
+ export function createVideoElement(_engineState, _constraints) {
725
+ return document.createElement("video");
726
+ }
727
+ /**
728
+ * Gets the object containing all engine capabilities
729
+ * @param engineState defines the engine state
730
+ * @returns the EngineCapabilities object
731
+ */
732
+ export function getCaps(engineState) {
733
+ const fes = engineState;
734
+ return fes._caps;
735
+ }
736
+ // From Engine
737
+ // createImageBitmap is just a proxy to the browser's native implementation
738
+ // Should not be implemented
739
+ /**
740
+ * Shared initialization across engines types.
741
+ * @param canvas The canvas associated with this instance of the engine.
742
+ */
743
+ export function _sharedInit(engineState, canvas) {
744
+ const fes = engineState;
745
+ // moved from thinEngine
746
+ fes._renderingCanvas = canvas;
747
+ fes._onCanvasFocus = () => {
748
+ fes.onCanvasFocusObservable.notifyObservers(engineState);
749
+ };
750
+ fes._onCanvasBlur = () => {
751
+ fes.onCanvasBlurObservable.notifyObservers(engineState);
752
+ };
753
+ fes._onCanvasContextMenu = (evt) => {
754
+ if (fes.disableContextMenu) {
755
+ evt.preventDefault();
756
+ }
757
+ };
758
+ canvas.addEventListener("focus", fes._onCanvasFocus);
759
+ canvas.addEventListener("blur", fes._onCanvasBlur);
760
+ canvas.addEventListener("contextmenu", fes._onCanvasContextMenu);
761
+ const performanceMonitor = getPerformanceMonitor(engineState);
762
+ fes._onBlur = () => {
763
+ if (fes.disablePerformanceMonitorInBackground) {
764
+ performanceMonitor.disable();
765
+ }
766
+ fes._windowIsBackground = true;
767
+ };
768
+ fes._onFocus = () => {
769
+ if (fes.disablePerformanceMonitorInBackground) {
770
+ performanceMonitor.enable();
771
+ }
772
+ fes._windowIsBackground = false;
773
+ };
774
+ fes._onCanvasPointerOut = (ev) => {
775
+ // Check that the element at the point of the pointer out isn't the canvas and if it isn't, notify observers
776
+ // Note: This is a workaround for a bug with Safari
777
+ if (document.elementFromPoint(ev.clientX, ev.clientY) !== canvas) {
778
+ fes.onCanvasPointerOutObservable.notifyObservers(ev);
779
+ }
780
+ };
781
+ const hostWindow = getHostWindow(engineState); // it calls IsWindowObjectExist()
782
+ if (hostWindow && typeof hostWindow.addEventListener === "function") {
783
+ hostWindow.addEventListener("blur", fes._onBlur);
784
+ hostWindow.addEventListener("focus", fes._onFocus);
785
+ }
786
+ canvas.addEventListener("pointerout", fes._onCanvasPointerOut);
787
+ if (!fes._creationOptions.doNotHandleTouchAction) {
788
+ _disableTouchAction(fes);
789
+ }
790
+ // Create Audio Engine if needed.
791
+ // if (!Engine.audioEngine && fes._creationOptions.audioEngine && Engine.AudioEngineFactory) {
792
+ // Engine.audioEngine = Engine.AudioEngineFactory(this.getRenderingCanvas(), this.getAudioContext(), this.getAudioDestination());
793
+ // }
794
+ if (IsDocumentAvailable()) {
795
+ // Fullscreen
796
+ fes._onFullscreenChange = () => {
797
+ fes.isFullscreen = !!document.fullscreenElement;
798
+ // Pointer lock
799
+ if (fes.isFullscreen && fes._pointerLockRequested && canvas) {
800
+ _RequestPointerlock(canvas);
801
+ }
802
+ };
803
+ document.addEventListener("fullscreenchange", fes._onFullscreenChange, false);
804
+ document.addEventListener("webkitfullscreenchange", fes._onFullscreenChange, false);
805
+ // Pointer lock
806
+ fes._onPointerLockChange = () => {
807
+ fes.isPointerLock = document.pointerLockElement === canvas;
808
+ };
809
+ document.addEventListener("pointerlockchange", fes._onPointerLockChange, false);
810
+ document.addEventListener("webkitpointerlockchange", fes._onPointerLockChange, false);
811
+ }
812
+ // fes.enableOfflineSupport = Engine.OfflineProviderFactory !== undefined; // ESMTODO
813
+ fes._deterministicLockstep = !!fes._creationOptions.deterministicLockstep;
814
+ fes._lockstepMaxSteps = fes._creationOptions.lockstepMaxSteps || 0;
815
+ fes._timeStep = fes._creationOptions.timeStep || 1 / 60;
816
+ }
817
+ function _disableTouchAction(engineState) {
818
+ const fes = engineState;
819
+ if (!fes._renderingCanvas || !fes._renderingCanvas.setAttribute) {
820
+ return;
821
+ }
822
+ fes._renderingCanvas.setAttribute("touch-action", "none");
823
+ fes._renderingCanvas.style.touchAction = "none";
824
+ fes._renderingCanvas.style.webkitTapHighlightColor = "transparent";
825
+ }
826
+ /** @internal */
827
+ export function _verifyPointerLock(engineState) {
828
+ var _a, _b;
829
+ (_b = (_a = engineState)._onPointerLockChange) === null || _b === void 0 ? void 0 : _b.call(_a);
830
+ }
831
+ /**
832
+ * Gets the list of loaded textures
833
+ * @returns an array containing all loaded textures
834
+ */
835
+ export function getLoadedTexturesCache(engineState) {
836
+ return engineState._internalTexturesCache;
837
+ }
838
+ /**
839
+ * Gets the HTML canvas attached with the current webGL context
840
+ * @returns a HTML canvas
841
+ */
842
+ export function getRenderingCanvas(engineState) {
843
+ return engineState._renderingCanvas;
844
+ }
845
+ /**
846
+ * Gets the client rect of the HTML canvas attached with the current webGL context
847
+ * @returns a client rectangle
848
+ */
849
+ export function getRenderingCanvasClientRect(engineState) {
850
+ const fes = engineState;
851
+ if (!fes._renderingCanvas) {
852
+ return null;
853
+ }
854
+ return fes._renderingCanvas.getBoundingClientRect();
855
+ }
856
+ /**
857
+ * Gets the HTML element used to attach event listeners
858
+ * @returns a HTML element
859
+ */
860
+ export function getInputElement(engineState) {
861
+ return engineState._renderingCanvas;
862
+ }
863
+ /**
864
+ * Gets the client rect of the HTML element used for events
865
+ * @returns a client rectangle
866
+ */
867
+ export function getInputElementClientRect(engineState) {
868
+ const fes = engineState;
869
+ if (!fes._renderingCanvas) {
870
+ return null;
871
+ }
872
+ return getInputElement(fes).getBoundingClientRect();
873
+ }
874
+ /**
875
+ * Gets a boolean indicating that the engine is running in deterministic lock step mode
876
+ * @see https://doc.babylonjs.com/features/featuresDeepDive/animation/advanced_animations#deterministic-lockstep
877
+ * @returns true if engine is in deterministic lock step mode
878
+ */
879
+ export function isDeterministicLockStep(engineState) {
880
+ return engineState._deterministicLockstep;
881
+ }
882
+ /**
883
+ * Gets the max steps when engine is running in deterministic lock step
884
+ * @see https://doc.babylonjs.com/features/featuresDeepDive/animation/advanced_animations#deterministic-lockstep
885
+ * @returns the max steps
886
+ */
887
+ export function getLockstepMaxSteps(engineState) {
888
+ return engineState._lockstepMaxSteps;
889
+ }
890
+ /**
891
+ * Returns the time in ms between steps when using deterministic lock step.
892
+ * @returns time step in (ms)
893
+ */
894
+ export function getTimeStep(engineState) {
895
+ return engineState._timeStep * 1000;
896
+ }
897
+ /** States */
898
+ /**
899
+ * Gets a boolean indicating if depth writing is enabled
900
+ * @returns the current depth writing state
901
+ */
902
+ export function getDepthWrite(engineState) {
903
+ return engineState._depthCullingState.depthMask;
904
+ }
905
+ /**
906
+ * Enable or disable depth writing
907
+ * @param enable defines the state to set
908
+ */
909
+ export function setDepthWrite(engineState, enable) {
910
+ engineState._depthCullingState.depthMask = enable;
911
+ }
912
+ /**
913
+ * Gets a boolean indicating if stencil buffer is enabled
914
+ * @returns the current stencil buffer state
915
+ */
916
+ export function getStencilBuffer(engineState) {
917
+ return engineState._stencilState.stencilTest;
918
+ }
919
+ /**
920
+ * Enable or disable the stencil buffer
921
+ * @param enable defines if the stencil buffer must be enabled or disabled
922
+ */
923
+ export function setStencilBuffer(engineState, enable) {
924
+ engineState._stencilState.stencilTest = enable;
925
+ }
926
+ /**
927
+ * Gets the current stencil mask
928
+ * @returns a number defining the new stencil mask to use
929
+ */
930
+ export function getStencilMask(engineState) {
931
+ return engineState._stencilState.stencilMask;
932
+ }
933
+ /**
934
+ * Sets the current stencil mask
935
+ * @param mask defines the new stencil mask to use
936
+ */
937
+ export function setStencilMask(engineState, mask) {
938
+ engineState._stencilState.stencilMask = mask;
939
+ }
940
+ /**
941
+ * Gets the current stencil function
942
+ * @returns a number defining the stencil function to use
943
+ */
944
+ export function getStencilFunction(engineState) {
945
+ return engineState._stencilState.stencilFunc;
946
+ }
947
+ /**
948
+ * Gets the current stencil reference value
949
+ * @returns a number defining the stencil reference value to use
950
+ */
951
+ export function getStencilFunctionReference(engineState) {
952
+ return engineState._stencilState.stencilFuncRef;
953
+ }
954
+ /**
955
+ * Gets the current stencil mask
956
+ * @returns a number defining the stencil mask to use
957
+ */
958
+ export function getStencilFunctionMask(engineState) {
959
+ return engineState._stencilState.stencilFuncMask;
960
+ }
961
+ /**
962
+ * Sets the current stencil function
963
+ * @param stencilFunc defines the new stencil function to use
964
+ */
965
+ export function setStencilFunction(engineState, stencilFunc) {
966
+ engineState._stencilState.stencilFunc = stencilFunc;
967
+ }
968
+ /**
969
+ * Sets the current stencil reference
970
+ * @param reference defines the new stencil reference to use
971
+ */
972
+ export function setStencilFunctionReference(engineState, reference) {
973
+ engineState._stencilState.stencilFuncRef = reference;
974
+ }
975
+ /**
976
+ * Sets the current stencil mask
977
+ * @param mask defines the new stencil mask to use
978
+ */
979
+ export function setStencilFunctionMask(engineState, mask) {
980
+ engineState._stencilState.stencilFuncMask = mask;
981
+ }
982
+ /**
983
+ * Gets the current stencil operation when stencil fails
984
+ * @returns a number defining stencil operation to use when stencil fails
985
+ */
986
+ export function getStencilOperationFail(engineState) {
987
+ return engineState._stencilState.stencilOpStencilFail;
988
+ }
989
+ /**
990
+ * Gets the current stencil operation when depth fails
991
+ * @returns a number defining stencil operation to use when depth fails
992
+ */
993
+ export function getStencilOperationDepthFail(engineState) {
994
+ return engineState._stencilState.stencilOpDepthFail;
995
+ }
996
+ /**
997
+ * Gets the current stencil operation when stencil passes
998
+ * @returns a number defining stencil operation to use when stencil passes
999
+ */
1000
+ export function getStencilOperationPass(engineState) {
1001
+ return engineState._stencilState.stencilOpStencilDepthPass;
1002
+ }
1003
+ /**
1004
+ * Sets the stencil operation to use when stencil fails
1005
+ * @param operation defines the stencil operation to use when stencil fails
1006
+ */
1007
+ export function setStencilOperationFail(engineState, operation) {
1008
+ engineState._stencilState.stencilOpStencilFail = operation;
1009
+ }
1010
+ /**
1011
+ * Sets the stencil operation to use when depth fails
1012
+ * @param operation defines the stencil operation to use when depth fails
1013
+ */
1014
+ export function setStencilOperationDepthFail(engineState, operation) {
1015
+ engineState._stencilState.stencilOpDepthFail = operation;
1016
+ }
1017
+ /**
1018
+ * Sets the stencil operation to use when stencil passes
1019
+ * @param operation defines the stencil operation to use when stencil passes
1020
+ */
1021
+ export function setStencilOperationPass(engineState, operation) {
1022
+ engineState._stencilState.stencilOpStencilDepthPass = operation;
1023
+ }
1024
+ /**
1025
+ * Gets the current depth function
1026
+ * @returns a number defining the depth function
1027
+ */
1028
+ export function getDepthFunction(engineState) {
1029
+ return engineState._depthCullingState.depthFunc;
1030
+ }
1031
+ /**
1032
+ * Sets the current depth function
1033
+ * @param depthFunc defines the function to use
1034
+ */
1035
+ export function setDepthFunction(engineState, depthFunc) {
1036
+ engineState._depthCullingState.depthFunc = depthFunc;
1037
+ }
1038
+ /**
1039
+ * Sets the current depth function to GREATER
1040
+ */
1041
+ export function setDepthFunctionToGreater(engineState) {
1042
+ setDepthFunction(engineState, 516 /* 516 */);
1043
+ }
1044
+ /**
1045
+ * Sets the current depth function to GEQUAL
1046
+ */
1047
+ export function setDepthFunctionToGreaterOrEqual(engineState) {
1048
+ setDepthFunction(engineState, 518 /* 518 */);
1049
+ }
1050
+ /**
1051
+ * Sets the current depth function to LESS
1052
+ */
1053
+ export function setDepthFunctionToLess(engineState) {
1054
+ setDepthFunction(engineState, 513 /* 513 */);
1055
+ }
1056
+ /**
1057
+ * Sets the current depth function to LEQUAL
1058
+ */
1059
+ export function setDepthFunctionToLessOrEqual(engineState) {
1060
+ setDepthFunction(engineState, 515 /* 515 */);
1061
+ }
1062
+ /**
1063
+ * Caches the state of the stencil buffer
1064
+ */
1065
+ export function cacheStencilState(engineState) {
1066
+ const fes = engineState;
1067
+ fes._cachedStencilBuffer = getStencilBuffer(engineState);
1068
+ fes._cachedStencilFunction = getStencilFunction(engineState);
1069
+ fes._cachedStencilMask = getStencilMask(engineState);
1070
+ fes._cachedStencilOperationPass = getStencilOperationPass(engineState);
1071
+ fes._cachedStencilOperationFail = getStencilOperationFail(engineState);
1072
+ fes._cachedStencilOperationDepthFail = getStencilOperationDepthFail(engineState);
1073
+ fes._cachedStencilReference = getStencilFunctionReference(engineState);
1074
+ }
1075
+ /**
1076
+ * Restores the state of the stencil buffer
1077
+ */
1078
+ export function restoreStencilState(engineState) {
1079
+ const fes = engineState;
1080
+ setStencilFunction(engineState, fes._cachedStencilFunction);
1081
+ setStencilMask(engineState, fes._cachedStencilMask);
1082
+ setStencilBuffer(engineState, fes._cachedStencilBuffer);
1083
+ setStencilOperationPass(engineState, fes._cachedStencilOperationPass);
1084
+ setStencilOperationFail(engineState, fes._cachedStencilOperationFail);
1085
+ setStencilOperationDepthFail(engineState, fes._cachedStencilOperationDepthFail);
1086
+ setStencilFunctionReference(engineState, fes._cachedStencilReference);
1087
+ }
1088
+ /**
1089
+ * Toggle full screen mode
1090
+ * @param requestPointerLock defines if a pointer lock should be requested from the user
1091
+ */
1092
+ export function switchFullscreen(engineState, requestPointerLock) {
1093
+ if (engineState.isFullscreen) {
1094
+ exitFullscreen(engineState);
1095
+ }
1096
+ else {
1097
+ enterFullscreen(engineState, requestPointerLock);
1098
+ }
1099
+ }
1100
+ /**
1101
+ * Enters full screen mode
1102
+ * @param requestPointerLock defines if a pointer lock should be requested from the user
1103
+ */
1104
+ export function enterFullscreen(engineState, requestPointerLock) {
1105
+ const fes = engineState;
1106
+ if (!engineState.isFullscreen) {
1107
+ fes._pointerLockRequested = requestPointerLock;
1108
+ if (fes._renderingCanvas) {
1109
+ _RequestFullscreen(fes._renderingCanvas);
1110
+ }
1111
+ }
1112
+ }
1113
+ /**
1114
+ * Exits full screen mode
1115
+ */
1116
+ export function exitFullscreen(engineState) {
1117
+ if (engineState.isFullscreen) {
1118
+ _ExitFullscreen();
1119
+ }
1120
+ }
1121
+ /**
1122
+ * Enters Pointerlock mode
1123
+ */
1124
+ export function enterPointerlock(engineState) {
1125
+ const fes = engineState;
1126
+ if (fes._renderingCanvas) {
1127
+ _RequestPointerlock(fes._renderingCanvas);
1128
+ }
1129
+ }
1130
+ /**
1131
+ * // TODO - this is probably not needed...
1132
+ * Exits Pointerlock mode
1133
+ */
1134
+ export function exitPointerlock(engineState) {
1135
+ _ExitPointerlock();
1136
+ }
1137
+ /**
1138
+ * @internal
1139
+ */
1140
+ export function _releaseRenderTargetWrapper(engineState, rtWrapper) {
1141
+ const fes = engineState;
1142
+ const index = fes._renderTargetWrapperCache.indexOf(rtWrapper);
1143
+ if (index !== -1) {
1144
+ fes._renderTargetWrapperCache.splice(index, 1);
1145
+ }
1146
+ // From Engine
1147
+ // Set output texture of post process to null if the framebuffer has been released/disposed
1148
+ fes.scenes.forEach((scene) => {
1149
+ scene.postProcesses.forEach((postProcess) => {
1150
+ if (postProcess._outputTexture === rtWrapper) {
1151
+ postProcess._outputTexture = null;
1152
+ }
1153
+ });
1154
+ scene.cameras.forEach((camera) => {
1155
+ camera._postProcesses.forEach((postProcess) => {
1156
+ if (postProcess) {
1157
+ if (postProcess._outputTexture === rtWrapper) {
1158
+ postProcess._outputTexture = null;
1159
+ }
1160
+ }
1161
+ });
1162
+ });
1163
+ });
1164
+ }
1165
+ let renderPassIdCounter = 0;
1166
+ /**
1167
+ * Gets the names of the render passes that are currently created
1168
+ * @returns list of the render pass names
1169
+ */
1170
+ export function getRenderPassNames(engineState) {
1171
+ return engineState._renderPassNames;
1172
+ }
1173
+ /**
1174
+ * Gets the name of the current render pass
1175
+ * @returns name of the current render pass
1176
+ */
1177
+ export function getCurrentRenderPassName(engineState) {
1178
+ return engineState._renderPassNames[engineState.currentRenderPassId];
1179
+ }
1180
+ /**
1181
+ * Creates a render pass id
1182
+ * @param name Name of the render pass (for debug purpose only)
1183
+ * @returns the id of the new render pass
1184
+ */
1185
+ export function createRenderPassId(engineState, name) {
1186
+ // Note: render pass id == 0 is always for the main render pass
1187
+ const id = ++renderPassIdCounter;
1188
+ engineState._renderPassNames[id] = name !== null && name !== void 0 ? name : "NONAME";
1189
+ return id;
1190
+ }
1191
+ /**
1192
+ * Releases a render pass id
1193
+ * @param id id of the render pass to release
1194
+ */
1195
+ export function releaseRenderPassId(engineState, id) {
1196
+ engineState._renderPassNames[id] = undefined;
1197
+ for (let s = 0; s < engineState.scenes.length; ++s) {
1198
+ const scene = engineState.scenes[s];
1199
+ for (let m = 0; m < scene.meshes.length; ++m) {
1200
+ const mesh = scene.meshes[m];
1201
+ if (mesh.subMeshes) {
1202
+ for (let b = 0; b < mesh.subMeshes.length; ++b) {
1203
+ const subMesh = mesh.subMeshes[b];
1204
+ subMesh._removeDrawWrapper(id);
1205
+ }
1206
+ }
1207
+ }
1208
+ }
1209
+ }
1210
+ /**
1211
+ * Enable or disable color writing
1212
+ * @param enable defines the state to set
1213
+ */
1214
+ export function setColorWrite(engineState, enable) {
1215
+ const fes = engineState;
1216
+ if (enable !== fes._colorWrite) {
1217
+ fes._colorWriteChanged = true;
1218
+ fes._colorWrite = enable;
1219
+ }
1220
+ }
1221
+ /**
1222
+ * Gets a boolean indicating if color writing is enabled
1223
+ * @returns the current color writing state
1224
+ */
1225
+ export function getColorWrite(engineState) {
1226
+ return engineState._colorWrite;
1227
+ }
1228
+ export function _renderFrame(engineState) {
1229
+ const fes = engineState;
1230
+ for (let index = 0; index < fes._activeRenderLoops.length; index++) {
1231
+ const renderFunction = fes._activeRenderLoops[index];
1232
+ renderFunction();
1233
+ }
1234
+ }
1235
+ //# sourceMappingURL=engine.base.js.map