@babylonjs/core 7.2.2 → 7.2.3

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 (376) hide show
  1. package/Animations/runtimeAnimation.d.ts +1 -0
  2. package/Animations/runtimeAnimation.js +12 -3
  3. package/Animations/runtimeAnimation.js.map +1 -1
  4. package/Audio/audioEngine.js +2 -2
  5. package/Audio/audioEngine.js.map +1 -1
  6. package/Bones/boneLookController.js +3 -0
  7. package/Bones/boneLookController.js.map +1 -1
  8. package/Buffers/buffer.d.ts +5 -5
  9. package/Buffers/buffer.js.map +1 -1
  10. package/Buffers/storageBuffer.d.ts +2 -2
  11. package/Buffers/storageBuffer.js.map +1 -1
  12. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js.map +1 -1
  13. package/Cameras/Inputs/flyCameraKeyboardInput.js.map +1 -1
  14. package/Cameras/Inputs/followCameraKeyboardMoveInput.js.map +1 -1
  15. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
  16. package/Compute/computeEffect.d.ts +3 -3
  17. package/Compute/computeEffect.js.map +1 -1
  18. package/Compute/computeShader.d.ts +10 -2
  19. package/Compute/computeShader.js +53 -35
  20. package/Compute/computeShader.js.map +1 -1
  21. package/DeviceInput/InputDevices/deviceSourceManager.d.ts +2 -2
  22. package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
  23. package/DeviceInput/internalDeviceSourceManager.d.ts +4 -4
  24. package/DeviceInput/internalDeviceSourceManager.js.map +1 -1
  25. package/DeviceInput/webDeviceInputSystem.d.ts +2 -2
  26. package/DeviceInput/webDeviceInputSystem.js.map +1 -1
  27. package/Engines/AbstractEngine/abstractEngine.alpha.d.ts +10 -0
  28. package/Engines/AbstractEngine/abstractEngine.alpha.js +29 -0
  29. package/Engines/AbstractEngine/abstractEngine.alpha.js.map +1 -0
  30. package/Engines/AbstractEngine/abstractEngine.cubeTexture.d.ts +17 -0
  31. package/Engines/AbstractEngine/abstractEngine.cubeTexture.js +138 -0
  32. package/Engines/AbstractEngine/abstractEngine.cubeTexture.js.map +1 -0
  33. package/Engines/AbstractEngine/abstractEngine.dom.d.ts +61 -0
  34. package/Engines/AbstractEngine/abstractEngine.dom.js +27 -0
  35. package/Engines/AbstractEngine/abstractEngine.dom.js.map +1 -0
  36. package/Engines/AbstractEngine/abstractEngine.loadingScreen.d.ts +30 -0
  37. package/Engines/AbstractEngine/abstractEngine.loadingScreen.js +48 -0
  38. package/Engines/AbstractEngine/abstractEngine.loadingScreen.js.map +1 -0
  39. package/Engines/AbstractEngine/abstractEngine.query.d.ts +122 -0
  40. package/Engines/AbstractEngine/abstractEngine.query.js +175 -0
  41. package/Engines/AbstractEngine/abstractEngine.query.js.map +1 -0
  42. package/Engines/AbstractEngine/abstractEngine.renderPass.d.ts +26 -0
  43. package/Engines/AbstractEngine/abstractEngine.renderPass.js +29 -0
  44. package/Engines/AbstractEngine/abstractEngine.renderPass.js.map +1 -0
  45. package/Engines/AbstractEngine/abstractEngine.states.d.ts +162 -0
  46. package/Engines/AbstractEngine/abstractEngine.states.js +105 -0
  47. package/Engines/AbstractEngine/abstractEngine.states.js.map +1 -0
  48. package/Engines/AbstractEngine/abstractEngine.texture.d.ts +16 -0
  49. package/Engines/AbstractEngine/abstractEngine.texture.js +11 -0
  50. package/Engines/AbstractEngine/abstractEngine.texture.js.map +1 -0
  51. package/Engines/AbstractEngine/index.d.ts +8 -0
  52. package/Engines/AbstractEngine/index.js +10 -0
  53. package/Engines/AbstractEngine/index.js.map +1 -0
  54. package/Engines/Extensions/engine.alpha.d.ts +0 -24
  55. package/Engines/Extensions/engine.alpha.js +0 -35
  56. package/Engines/Extensions/engine.alpha.js.map +1 -1
  57. package/Engines/Extensions/engine.computeShader.d.ts +15 -2
  58. package/Engines/Extensions/engine.computeShader.js +5 -1
  59. package/Engines/Extensions/engine.computeShader.js.map +1 -1
  60. package/Engines/Extensions/engine.cubeTexture.d.ts +0 -8
  61. package/Engines/Extensions/engine.cubeTexture.js +2 -135
  62. package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
  63. package/Engines/Extensions/engine.debugging.d.ts +2 -2
  64. package/Engines/Extensions/engine.debugging.js +5 -5
  65. package/Engines/Extensions/engine.debugging.js.map +1 -1
  66. package/Engines/Extensions/engine.dynamicTexture.js +3 -2
  67. package/Engines/Extensions/engine.dynamicTexture.js.map +1 -1
  68. package/Engines/Extensions/engine.multiview.js.map +1 -1
  69. package/Engines/Extensions/engine.query.d.ts +5 -120
  70. package/Engines/Extensions/engine.query.js +14 -150
  71. package/Engines/Extensions/engine.query.js.map +1 -1
  72. package/Engines/Extensions/engine.renderTarget.js +0 -9
  73. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  74. package/Engines/Extensions/engine.views.d.ts +3 -2
  75. package/Engines/Extensions/engine.views.js.map +1 -1
  76. package/Engines/Processors/iShaderProcessor.d.ts +2 -2
  77. package/Engines/Processors/iShaderProcessor.js.map +1 -1
  78. package/Engines/Processors/shaderProcessor.d.ts +3 -3
  79. package/Engines/Processors/shaderProcessor.js.map +1 -1
  80. package/Engines/WebGL/webGLRenderTargetWrapper.js +12 -9
  81. package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
  82. package/Engines/WebGL/webGLShaderProcessors.d.ts +2 -2
  83. package/Engines/WebGL/webGLShaderProcessors.js.map +1 -1
  84. package/Engines/WebGPU/Extensions/engine.alpha.d.ts +35 -0
  85. package/Engines/WebGPU/Extensions/engine.alpha.js +4 -4
  86. package/Engines/WebGPU/Extensions/engine.alpha.js.map +1 -1
  87. package/Engines/WebGPU/Extensions/engine.computeShader.d.ts +9 -0
  88. package/Engines/WebGPU/Extensions/engine.computeShader.js +13 -2
  89. package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
  90. package/Engines/WebGPU/Extensions/engine.cubeTexture.d.ts +78 -1
  91. package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
  92. package/Engines/WebGPU/Extensions/engine.dynamicTexture.d.ts +27 -1
  93. package/Engines/WebGPU/Extensions/engine.dynamicTexture.js +3 -3
  94. package/Engines/WebGPU/Extensions/engine.dynamicTexture.js.map +1 -1
  95. package/Engines/WebGPU/Extensions/engine.externalTexture.d.ts +16 -0
  96. package/Engines/WebGPU/Extensions/engine.externalTexture.js.map +1 -1
  97. package/Engines/WebGPU/Extensions/engine.multiRender.d.ts +55 -1
  98. package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
  99. package/Engines/WebGPU/Extensions/engine.query.d.ts +1 -1
  100. package/Engines/WebGPU/Extensions/engine.query.js +1 -0
  101. package/Engines/WebGPU/Extensions/engine.query.js.map +1 -1
  102. package/Engines/WebGPU/Extensions/engine.rawTexture.d.ts +185 -1
  103. package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
  104. package/Engines/WebGPU/Extensions/engine.readTexture.d.ts +10 -1
  105. package/Engines/WebGPU/Extensions/engine.readTexture.js.map +1 -1
  106. package/Engines/WebGPU/Extensions/engine.renderTarget.d.ts +38 -1
  107. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  108. package/Engines/WebGPU/Extensions/engine.renderTargetCube.d.ts +13 -1
  109. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
  110. package/Engines/WebGPU/Extensions/engine.storageBuffer.d.ts +38 -1
  111. package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
  112. package/Engines/WebGPU/Extensions/engine.textureSampler.d.ts +10 -0
  113. package/Engines/WebGPU/Extensions/engine.textureSampler.js.map +1 -1
  114. package/Engines/WebGPU/Extensions/engine.videoTexture.d.ts +14 -1
  115. package/Engines/WebGPU/Extensions/engine.videoTexture.js.map +1 -1
  116. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.d.ts +2 -2
  117. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
  118. package/Engines/abstractEngine.d.ts +1688 -0
  119. package/Engines/abstractEngine.js +1354 -0
  120. package/Engines/abstractEngine.js.map +1 -0
  121. package/Engines/engine.common.d.ts +39 -0
  122. package/Engines/engine.common.js +226 -0
  123. package/Engines/engine.common.js.map +1 -0
  124. package/Engines/engine.d.ts +40 -447
  125. package/Engines/engine.js +64 -810
  126. package/Engines/engine.js.map +1 -1
  127. package/Engines/engineFactory.d.ts +2 -2
  128. package/Engines/engineFactory.js.map +1 -1
  129. package/Engines/engineStore.d.ts +4 -4
  130. package/Engines/engineStore.js.map +1 -1
  131. package/Engines/index.d.ts +3 -0
  132. package/Engines/index.js +3 -0
  133. package/Engines/index.js.map +1 -1
  134. package/Engines/nativeEngine.d.ts +1 -1
  135. package/Engines/nativeEngine.js +2 -1
  136. package/Engines/nativeEngine.js.map +1 -1
  137. package/Engines/nullEngine.d.ts +2 -2
  138. package/Engines/nullEngine.js +2 -3
  139. package/Engines/nullEngine.js.map +1 -1
  140. package/Engines/renderTargetWrapper.d.ts +3 -3
  141. package/Engines/renderTargetWrapper.js.map +1 -1
  142. package/Engines/thinEngine.d.ts +35 -591
  143. package/Engines/thinEngine.js +84 -1134
  144. package/Engines/thinEngine.js.map +1 -1
  145. package/Engines/webgpuEngine.d.ts +149 -109
  146. package/Engines/webgpuEngine.js +249 -161
  147. package/Engines/webgpuEngine.js.map +1 -1
  148. package/Instrumentation/engineInstrumentation.d.ts +5 -4
  149. package/Instrumentation/engineInstrumentation.js.map +1 -1
  150. package/Layers/effectLayer.d.ts +2 -2
  151. package/Layers/effectLayer.js +3 -3
  152. package/Layers/effectLayer.js.map +1 -1
  153. package/Layers/effectLayerSceneComponent.js.map +1 -1
  154. package/Layers/glowLayer.js +3 -3
  155. package/Layers/glowLayer.js.map +1 -1
  156. package/Layers/highlightLayer.js +3 -3
  157. package/Layers/highlightLayer.js.map +1 -1
  158. package/Layers/layerSceneComponent.js.map +1 -1
  159. package/Loading/loadingScreen.js +2 -2
  160. package/Loading/loadingScreen.js.map +1 -1
  161. package/Loading/sceneLoader.d.ts +3 -3
  162. package/Loading/sceneLoader.js +1 -1
  163. package/Loading/sceneLoader.js.map +1 -1
  164. package/Materials/GreasedLine/greasedLinePluginMaterial.js.map +1 -1
  165. package/Materials/Textures/Filtering/hdrFiltering.d.ts +2 -2
  166. package/Materials/Textures/Filtering/hdrFiltering.js.map +1 -1
  167. package/Materials/Textures/Loaders/basisTextureLoader.js +2 -2
  168. package/Materials/Textures/Loaders/basisTextureLoader.js.map +1 -1
  169. package/Materials/Textures/MultiviewRenderTarget.d.ts +1 -0
  170. package/Materials/Textures/MultiviewRenderTarget.js +1 -0
  171. package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
  172. package/Materials/Textures/Procedurals/proceduralTexture.js +1 -1
  173. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  174. package/Materials/Textures/baseTexture.d.ts +3 -3
  175. package/Materials/Textures/baseTexture.js.map +1 -1
  176. package/Materials/Textures/colorGradingTexture.d.ts +2 -2
  177. package/Materials/Textures/colorGradingTexture.js.map +1 -1
  178. package/Materials/Textures/cubeTexture.d.ts +3 -2
  179. package/Materials/Textures/cubeTexture.js +1 -0
  180. package/Materials/Textures/cubeTexture.js.map +1 -1
  181. package/Materials/Textures/hdrCubeTexture.d.ts +2 -2
  182. package/Materials/Textures/hdrCubeTexture.js.map +1 -1
  183. package/Materials/Textures/htmlElementTexture.d.ts +2 -2
  184. package/Materials/Textures/htmlElementTexture.js.map +1 -1
  185. package/Materials/Textures/internalTexture.d.ts +3 -3
  186. package/Materials/Textures/internalTexture.js.map +1 -1
  187. package/Materials/Textures/rawTexture.d.ts +10 -10
  188. package/Materials/Textures/rawTexture.js.map +1 -1
  189. package/Materials/Textures/renderTargetTexture.d.ts +4 -4
  190. package/Materials/Textures/renderTargetTexture.js +4 -4
  191. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  192. package/Materials/Textures/texture.d.ts +2 -2
  193. package/Materials/Textures/texture.js.map +1 -1
  194. package/Materials/Textures/thinTexture.d.ts +3 -3
  195. package/Materials/Textures/thinTexture.js +1 -1
  196. package/Materials/Textures/thinTexture.js.map +1 -1
  197. package/Materials/drawWrapper.d.ts +2 -3
  198. package/Materials/drawWrapper.functions.d.ts +8 -0
  199. package/Materials/drawWrapper.functions.js +9 -0
  200. package/Materials/drawWrapper.functions.js.map +1 -0
  201. package/Materials/drawWrapper.js +0 -3
  202. package/Materials/drawWrapper.js.map +1 -1
  203. package/Materials/effect.d.ts +4 -5
  204. package/Materials/effect.js.map +1 -1
  205. package/Materials/effectRenderer.d.ts +4 -4
  206. package/Materials/effectRenderer.js.map +1 -1
  207. package/Materials/index.d.ts +1 -0
  208. package/Materials/index.js +1 -0
  209. package/Materials/index.js.map +1 -1
  210. package/Materials/materialHelper.functions.d.ts +2 -2
  211. package/Materials/materialHelper.functions.js.map +1 -1
  212. package/Materials/materialPluginBase.d.ts +4 -4
  213. package/Materials/materialPluginBase.js.map +1 -1
  214. package/Materials/materialPluginManager.d.ts +2 -2
  215. package/Materials/materialPluginManager.js.map +1 -1
  216. package/Materials/meshDebugPluginMaterial.js +1 -1
  217. package/Materials/meshDebugPluginMaterial.js.map +1 -1
  218. package/Materials/uniformBuffer.d.ts +2 -2
  219. package/Materials/uniformBuffer.js.map +1 -1
  220. package/Meshes/Builders/greasedLineBuilder.d.ts +6 -0
  221. package/Meshes/Builders/greasedLineBuilder.js +15 -8
  222. package/Meshes/Builders/greasedLineBuilder.js.map +1 -1
  223. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +1 -1
  224. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  225. package/Meshes/GreasedLine/greasedLineBaseMesh.d.ts +2 -2
  226. package/Meshes/GreasedLine/greasedLineBaseMesh.js.map +1 -1
  227. package/Meshes/GreasedLine/greasedLineMesh.js +1 -1
  228. package/Meshes/GreasedLine/greasedLineMesh.js.map +1 -1
  229. package/Meshes/geometry.d.ts +2 -2
  230. package/Meshes/geometry.js +3 -2
  231. package/Meshes/geometry.js.map +1 -1
  232. package/Meshes/instancedMesh.js.map +1 -1
  233. package/Meshes/mesh.d.ts +3 -3
  234. package/Meshes/mesh.js.map +1 -1
  235. package/Meshes/subMesh.d.ts +2 -2
  236. package/Meshes/subMesh.js.map +1 -1
  237. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js.map +1 -1
  238. package/Misc/copyTextureToTexture.d.ts +2 -2
  239. package/Misc/copyTextureToTexture.js.map +1 -1
  240. package/Misc/dds.d.ts +3 -2
  241. package/Misc/dds.js +2 -1
  242. package/Misc/dds.js.map +1 -1
  243. package/Misc/dumpTools.d.ts +2 -2
  244. package/Misc/dumpTools.js.map +1 -1
  245. package/Misc/fileTools.js +3 -3
  246. package/Misc/fileTools.js.map +1 -1
  247. package/Misc/khronosTextureContainer2.d.ts +8 -2
  248. package/Misc/khronosTextureContainer2.js +3 -2
  249. package/Misc/khronosTextureContainer2.js.map +1 -1
  250. package/Misc/minMaxReducer.d.ts +2 -2
  251. package/Misc/minMaxReducer.js.map +1 -1
  252. package/Misc/textureTools.js.map +1 -1
  253. package/Misc/tools.d.ts +7 -7
  254. package/Misc/tools.functions.d.ts +26 -0
  255. package/Misc/tools.functions.js +62 -0
  256. package/Misc/tools.functions.js.map +1 -1
  257. package/Misc/tools.js.map +1 -1
  258. package/Misc/videoRecorder.d.ts +3 -3
  259. package/Misc/videoRecorder.js.map +1 -1
  260. package/Particles/baseParticleSystem.d.ts +2 -2
  261. package/Particles/baseParticleSystem.js.map +1 -1
  262. package/Particles/computeShaderParticleSystem.d.ts +2 -2
  263. package/Particles/computeShaderParticleSystem.js.map +1 -1
  264. package/Particles/gpuParticleSystem.d.ts +3 -3
  265. package/Particles/gpuParticleSystem.js +2 -2
  266. package/Particles/gpuParticleSystem.js.map +1 -1
  267. package/Particles/particle.js +1 -1
  268. package/Particles/particle.js.map +1 -1
  269. package/Particles/particleSystem.d.ts +3 -3
  270. package/Particles/particleSystem.js +3 -3
  271. package/Particles/particleSystem.js.map +1 -1
  272. package/Particles/particleSystemComponent.d.ts +2 -2
  273. package/Particles/particleSystemComponent.js +2 -2
  274. package/Particles/particleSystemComponent.js.map +1 -1
  275. package/Particles/subEmitter.d.ts +3 -3
  276. package/Particles/subEmitter.js.map +1 -1
  277. package/Particles/thinParticleSystem.d.ts +2 -2
  278. package/Particles/thinParticleSystem.js.map +1 -1
  279. package/Physics/v2/physicsBody.js +3 -3
  280. package/Physics/v2/physicsBody.js.map +1 -1
  281. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
  282. package/PostProcesses/RenderPipeline/postProcessRenderEffect.d.ts +2 -2
  283. package/PostProcesses/RenderPipeline/postProcessRenderEffect.js.map +1 -1
  284. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.d.ts +2 -2
  285. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
  286. package/PostProcesses/blackAndWhitePostProcess.d.ts +2 -2
  287. package/PostProcesses/blackAndWhitePostProcess.js.map +1 -1
  288. package/PostProcesses/bloomMergePostProcess.d.ts +2 -2
  289. package/PostProcesses/bloomMergePostProcess.js.map +1 -1
  290. package/PostProcesses/blurPostProcess.d.ts +2 -2
  291. package/PostProcesses/blurPostProcess.js.map +1 -1
  292. package/PostProcesses/chromaticAberrationPostProcess.d.ts +2 -2
  293. package/PostProcesses/chromaticAberrationPostProcess.js.map +1 -1
  294. package/PostProcesses/circleOfConfusionPostProcess.d.ts +2 -2
  295. package/PostProcesses/circleOfConfusionPostProcess.js.map +1 -1
  296. package/PostProcesses/colorCorrectionPostProcess.d.ts +2 -2
  297. package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
  298. package/PostProcesses/convolutionPostProcess.d.ts +2 -2
  299. package/PostProcesses/convolutionPostProcess.js.map +1 -1
  300. package/PostProcesses/depthOfFieldBlurPostProcess.d.ts +2 -2
  301. package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
  302. package/PostProcesses/depthOfFieldEffect.js +1 -1
  303. package/PostProcesses/depthOfFieldEffect.js.map +1 -1
  304. package/PostProcesses/depthOfFieldMergePostProcess.d.ts +2 -2
  305. package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
  306. package/PostProcesses/displayPassPostProcess.d.ts +2 -2
  307. package/PostProcesses/displayPassPostProcess.js.map +1 -1
  308. package/PostProcesses/extractHighlightsPostProcess.d.ts +2 -2
  309. package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
  310. package/PostProcesses/filterPostProcess.d.ts +2 -2
  311. package/PostProcesses/filterPostProcess.js.map +1 -1
  312. package/PostProcesses/fxaaPostProcess.d.ts +2 -2
  313. package/PostProcesses/fxaaPostProcess.js +2 -2
  314. package/PostProcesses/fxaaPostProcess.js.map +1 -1
  315. package/PostProcesses/grainPostProcess.d.ts +2 -2
  316. package/PostProcesses/grainPostProcess.js.map +1 -1
  317. package/PostProcesses/imageProcessingPostProcess.d.ts +2 -2
  318. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  319. package/PostProcesses/motionBlurPostProcess.d.ts +2 -2
  320. package/PostProcesses/motionBlurPostProcess.js.map +1 -1
  321. package/PostProcesses/passPostProcess.d.ts +3 -3
  322. package/PostProcesses/passPostProcess.js +2 -2
  323. package/PostProcesses/passPostProcess.js.map +1 -1
  324. package/PostProcesses/postProcess.d.ts +4 -4
  325. package/PostProcesses/postProcess.js +3 -3
  326. package/PostProcesses/postProcess.js.map +1 -1
  327. package/PostProcesses/refractionPostProcess.d.ts +2 -2
  328. package/PostProcesses/refractionPostProcess.js.map +1 -1
  329. package/PostProcesses/screenSpaceCurvaturePostProcess.d.ts +2 -2
  330. package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
  331. package/PostProcesses/screenSpaceReflectionPostProcess.d.ts +2 -2
  332. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  333. package/PostProcesses/sharpenPostProcess.d.ts +2 -2
  334. package/PostProcesses/sharpenPostProcess.js.map +1 -1
  335. package/PostProcesses/subSurfaceScatteringPostProcess.d.ts +2 -2
  336. package/PostProcesses/subSurfaceScatteringPostProcess.js.map +1 -1
  337. package/PostProcesses/volumetricLightScatteringPostProcess.d.ts +2 -2
  338. package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
  339. package/Rendering/GlobalIllumination/giRSMManager.js.map +1 -1
  340. package/Rendering/depthPeelingRenderer.js.map +1 -1
  341. package/Rendering/fluidRenderer/fluidRenderer.js.map +1 -1
  342. package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.d.ts +2 -2
  343. package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js.map +1 -1
  344. package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +2 -2
  345. package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
  346. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.d.ts +2 -2
  347. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
  348. package/Rendering/fluidRenderer/fluidRenderingTextures.d.ts +2 -2
  349. package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -1
  350. package/Rendering/geometryBufferRenderer.js +24 -18
  351. package/Rendering/geometryBufferRenderer.js.map +1 -1
  352. package/Rendering/outlineRenderer.js.map +1 -1
  353. package/Rendering/prePassRenderer.js.map +1 -1
  354. package/Sprites/spriteRenderer.d.ts +2 -2
  355. package/Sprites/spriteRenderer.js.map +1 -1
  356. package/XR/features/WebXRDepthSensing.js.map +1 -1
  357. package/XR/features/WebXRImageTracking.js.map +1 -1
  358. package/XR/features/WebXRLayers.d.ts +2 -2
  359. package/XR/features/WebXRLayers.js.map +1 -1
  360. package/XR/features/WebXRLightEstimation.js.map +1 -1
  361. package/XR/features/WebXRRawCameraAccess.d.ts +1 -1
  362. package/XR/features/WebXRRawCameraAccess.js.map +1 -1
  363. package/XR/features/WebXRSpaceWarp.js +1 -3
  364. package/XR/features/WebXRSpaceWarp.js.map +1 -1
  365. package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
  366. package/XR/webXRExperienceHelper.js.map +1 -1
  367. package/XR/webXRManagedOutputCanvas.d.ts +2 -2
  368. package/XR/webXRManagedOutputCanvas.js.map +1 -1
  369. package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
  370. package/XR/webXRSessionManager.js.map +1 -1
  371. package/assetContainer.js.map +1 -1
  372. package/node.d.ts +2 -2
  373. package/node.js.map +1 -1
  374. package/package.json +1 -1
  375. package/scene.d.ts +3 -3
  376. package/scene.js.map +1 -1
@@ -0,0 +1,1354 @@
1
+ import { EngineStore } from "./engineStore.js";
2
+ import { Logger } from "../Misc/logger.js";
3
+ import { Effect } from "../Materials/effect.js";
4
+ import { PerformanceConfigurator } from "./performanceConfigurator.js";
5
+ import { PrecisionDate } from "../Misc/precisionDate.js";
6
+ import { DepthCullingState } from "../States/depthCullingState.js";
7
+ import { StencilStateComposer } from "../States/stencilStateComposer.js";
8
+ import { StencilState } from "../States/stencilState.js";
9
+ import { AlphaState } from "../States/alphaCullingState.js";
10
+ import { _WarnImport } from "../Misc/devTools.js";
11
+ import { InternalTexture, InternalTextureSource } from "../Materials/Textures/internalTexture.js";
12
+ import { IsDocumentAvailable, IsNavigatorAvailable, IsWindowObjectExist } from "../Misc/domManagement.js";
13
+
14
+ import { Observable } from "../Misc/observable.js";
15
+ /**
16
+ * Queue a new function into the requested animation frame pool (ie. this function will be executed by the browser (or the javascript engine) for the next frame)
17
+ * @param func - the function to be called
18
+ * @param requester - the object that will request the next frame. Falls back to window.
19
+ * @returns frame number
20
+ */
21
+ export function QueueNewFrame(func, requester) {
22
+ // Note that there is kind of a typing issue here, as `setTimeout` might return something else than a number (NodeJs returns a NodeJS.Timeout object).
23
+ // Also if the global `requestAnimationFrame`'s returnType is number, `requester.requestPostAnimationFrame` and `requester.requestAnimationFrame` types
24
+ // are `any`.
25
+ if (!IsWindowObjectExist()) {
26
+ if (typeof requestAnimationFrame === "function") {
27
+ return requestAnimationFrame(func);
28
+ }
29
+ }
30
+ else {
31
+ const { requestAnimationFrame } = requester || window;
32
+ if (typeof requestAnimationFrame === "function") {
33
+ return requestAnimationFrame(func);
34
+ }
35
+ }
36
+ // fallback to the global `setTimeout`.
37
+ // In most cases (aka in the browser), `window` is the global object, so instead of calling `window.setTimeout` we could call the global `setTimeout`.
38
+ return setTimeout(func, 16);
39
+ }
40
+ /**
41
+ * The parent class for specialized engines (WebGL, WebGPU)
42
+ */
43
+ export class AbstractEngine {
44
+ /**
45
+ * Gets the current frame id
46
+ */
47
+ get frameId() {
48
+ return this._frameId;
49
+ }
50
+ /**
51
+ * Gets a boolean indicating if the engine runs in WebGPU or not.
52
+ */
53
+ get isWebGPU() {
54
+ return this._isWebGPU;
55
+ }
56
+ /**
57
+ * @internal
58
+ */
59
+ _getShaderProcessor(shaderLanguage) {
60
+ return this._shaderProcessor;
61
+ }
62
+ /**
63
+ * Gets the shader platform name used by the effects.
64
+ */
65
+ get shaderPlatformName() {
66
+ return this._shaderPlatformName;
67
+ }
68
+ _clearEmptyResources() {
69
+ this._emptyTexture = null;
70
+ this._emptyCubeTexture = null;
71
+ this._emptyTexture3D = null;
72
+ this._emptyTexture2DArray = null;
73
+ }
74
+ /**
75
+ * Gets or sets a boolean indicating if depth buffer should be reverse, going from far to near.
76
+ * This can provide greater z depth for distant objects.
77
+ */
78
+ get useReverseDepthBuffer() {
79
+ return this._useReverseDepthBuffer;
80
+ }
81
+ set useReverseDepthBuffer(useReverse) {
82
+ if (useReverse === this._useReverseDepthBuffer) {
83
+ return;
84
+ }
85
+ this._useReverseDepthBuffer = useReverse;
86
+ if (useReverse) {
87
+ this._depthCullingState.depthFunc = 518;
88
+ }
89
+ else {
90
+ this._depthCullingState.depthFunc = 515;
91
+ }
92
+ }
93
+ /**
94
+ * Enable or disable color writing
95
+ * @param enable defines the state to set
96
+ */
97
+ setColorWrite(enable) {
98
+ if (enable !== this._colorWrite) {
99
+ this._colorWriteChanged = true;
100
+ this._colorWrite = enable;
101
+ }
102
+ }
103
+ /**
104
+ * Gets a boolean indicating if color writing is enabled
105
+ * @returns the current color writing state
106
+ */
107
+ getColorWrite() {
108
+ return this._colorWrite;
109
+ }
110
+ /**
111
+ * Gets the depth culling state manager
112
+ */
113
+ get depthCullingState() {
114
+ return this._depthCullingState;
115
+ }
116
+ /**
117
+ * Gets the alpha state manager
118
+ */
119
+ get alphaState() {
120
+ return this._alphaState;
121
+ }
122
+ /**
123
+ * Gets the stencil state manager
124
+ */
125
+ get stencilState() {
126
+ return this._stencilState;
127
+ }
128
+ /**
129
+ * Gets the stencil state composer
130
+ */
131
+ get stencilStateComposer() {
132
+ return this._stencilStateComposer;
133
+ }
134
+ /** @internal */
135
+ _getGlobalDefines(defines) {
136
+ if (defines) {
137
+ if (this.isNDCHalfZRange) {
138
+ defines["IS_NDC_HALF_ZRANGE"] = "";
139
+ }
140
+ else {
141
+ delete defines["IS_NDC_HALF_ZRANGE"];
142
+ }
143
+ if (this.useReverseDepthBuffer) {
144
+ defines["USE_REVERSE_DEPTHBUFFER"] = "";
145
+ }
146
+ else {
147
+ delete defines["USE_REVERSE_DEPTHBUFFER"];
148
+ }
149
+ if (this.useExactSrgbConversions) {
150
+ defines["USE_EXACT_SRGB_CONVERSIONS"] = "";
151
+ }
152
+ else {
153
+ delete defines["USE_EXACT_SRGB_CONVERSIONS"];
154
+ }
155
+ return;
156
+ }
157
+ else {
158
+ let s = "";
159
+ if (this.isNDCHalfZRange) {
160
+ s += "#define IS_NDC_HALF_ZRANGE";
161
+ }
162
+ if (this.useReverseDepthBuffer) {
163
+ if (s) {
164
+ s += "\n";
165
+ }
166
+ s += "#define USE_REVERSE_DEPTHBUFFER";
167
+ }
168
+ if (this.useExactSrgbConversions) {
169
+ if (s) {
170
+ s += "\n";
171
+ }
172
+ s += "#define USE_EXACT_SRGB_CONVERSIONS";
173
+ }
174
+ return s;
175
+ }
176
+ }
177
+ _rebuildInternalTextures() {
178
+ const currentState = this._internalTexturesCache.slice(); // Do a copy because the rebuild will add proxies
179
+ for (const internalTexture of currentState) {
180
+ internalTexture._rebuild();
181
+ }
182
+ }
183
+ _rebuildRenderTargetWrappers() {
184
+ const currentState = this._renderTargetWrapperCache.slice(); // Do a copy because the rebuild will add proxies
185
+ for (const renderTargetWrapper of currentState) {
186
+ renderTargetWrapper._rebuild();
187
+ }
188
+ }
189
+ _rebuildEffects() {
190
+ for (const key in this._compiledEffects) {
191
+ const effect = this._compiledEffects[key];
192
+ effect._pipelineContext = null; // because _prepareEffect will try to dispose this pipeline before recreating it and that would lead to webgl errors
193
+ effect._prepareEffect();
194
+ }
195
+ Effect.ResetCache();
196
+ }
197
+ _rebuildGraphicsResources() {
198
+ // Ensure webgl and engine states are matching
199
+ this.wipeCaches(true);
200
+ // Rebuild effects
201
+ this._rebuildEffects();
202
+ this._rebuildComputeEffects?.();
203
+ // Note:
204
+ // The call to _rebuildBuffers must be made before the call to _rebuildInternalTextures because in the process of _rebuildBuffers the buffers used by the post process managers will be rebuilt
205
+ // and we may need to use the post process manager of the scene during _rebuildInternalTextures (in WebGL1, non-POT textures are rescaled using a post process + post process manager of the scene)
206
+ // Rebuild buffers
207
+ this._rebuildBuffers();
208
+ // Rebuild textures
209
+ this._rebuildInternalTextures();
210
+ // Rebuild textures
211
+ this._rebuildTextures();
212
+ // Rebuild textures
213
+ this._rebuildRenderTargetWrappers();
214
+ // Reset engine states after all the buffer/textures/... have been rebuilt
215
+ this.wipeCaches(true);
216
+ }
217
+ _flagContextRestored() {
218
+ Logger.Warn(this.name + " context successfully restored.");
219
+ this.onContextRestoredObservable.notifyObservers(this);
220
+ this._contextWasLost = false;
221
+ }
222
+ _restoreEngineAfterContextLost(initEngine) {
223
+ // Adding a timeout to avoid race condition at browser level
224
+ setTimeout(async () => {
225
+ this._clearEmptyResources();
226
+ const depthTest = this._depthCullingState.depthTest; // backup those values because the call to initEngine / wipeCaches will reset them
227
+ const depthFunc = this._depthCullingState.depthFunc;
228
+ const depthMask = this._depthCullingState.depthMask;
229
+ const stencilTest = this._stencilState.stencilTest;
230
+ // Rebuild context
231
+ await initEngine();
232
+ this._rebuildGraphicsResources();
233
+ this._depthCullingState.depthTest = depthTest;
234
+ this._depthCullingState.depthFunc = depthFunc;
235
+ this._depthCullingState.depthMask = depthMask;
236
+ this._stencilState.stencilTest = stencilTest;
237
+ this._flagContextRestored();
238
+ }, 0);
239
+ }
240
+ /** Gets a boolean indicating if the engine was disposed */
241
+ get isDisposed() {
242
+ return this._isDisposed;
243
+ }
244
+ /**
245
+ * Enables or disables the snapshot rendering mode
246
+ * Note that the WebGL engine does not support snapshot rendering so setting the value won't have any effect for this engine
247
+ */
248
+ get snapshotRendering() {
249
+ return false;
250
+ }
251
+ set snapshotRendering(activate) {
252
+ // Do nothing
253
+ }
254
+ /**
255
+ * Gets or sets the snapshot rendering mode
256
+ */
257
+ get snapshotRenderingMode() {
258
+ return 0;
259
+ }
260
+ set snapshotRenderingMode(mode) { }
261
+ /**
262
+ * Returns the string "AbstractEngine"
263
+ * @returns "AbstractEngine"
264
+ */
265
+ getClassName() {
266
+ return "AbstractEngine";
267
+ }
268
+ /**
269
+ * Gets the default empty texture
270
+ */
271
+ get emptyTexture() {
272
+ if (!this._emptyTexture) {
273
+ this._emptyTexture = this.createRawTexture(new Uint8Array(4), 1, 1, 5, false, false, 1);
274
+ }
275
+ return this._emptyTexture;
276
+ }
277
+ /**
278
+ * Gets the default empty 3D texture
279
+ */
280
+ get emptyTexture3D() {
281
+ if (!this._emptyTexture3D) {
282
+ this._emptyTexture3D = this.createRawTexture3D(new Uint8Array(4), 1, 1, 1, 5, false, false, 1);
283
+ }
284
+ return this._emptyTexture3D;
285
+ }
286
+ /**
287
+ * Gets the default empty 2D array texture
288
+ */
289
+ get emptyTexture2DArray() {
290
+ if (!this._emptyTexture2DArray) {
291
+ this._emptyTexture2DArray = this.createRawTexture2DArray(new Uint8Array(4), 1, 1, 1, 5, false, false, 1);
292
+ }
293
+ return this._emptyTexture2DArray;
294
+ }
295
+ /**
296
+ * Gets the default empty cube texture
297
+ */
298
+ get emptyCubeTexture() {
299
+ if (!this._emptyCubeTexture) {
300
+ const faceData = new Uint8Array(4);
301
+ const cubeData = [faceData, faceData, faceData, faceData, faceData, faceData];
302
+ this._emptyCubeTexture = this.createRawCubeTexture(cubeData, 1, 5, 0, false, false, 1);
303
+ }
304
+ return this._emptyCubeTexture;
305
+ }
306
+ /**
307
+ * Gets the list of current active render loop functions
308
+ * @returns a read only array with the current render loop functions
309
+ */
310
+ get activeRenderLoops() {
311
+ return this._activeRenderLoops;
312
+ }
313
+ /**
314
+ * stop executing a render loop function and remove it from the execution array
315
+ * @param renderFunction defines the function to be removed. If not provided all functions will be removed.
316
+ */
317
+ stopRenderLoop(renderFunction) {
318
+ if (!renderFunction) {
319
+ this._activeRenderLoops.length = 0;
320
+ this._cancelFrame();
321
+ return;
322
+ }
323
+ const index = this._activeRenderLoops.indexOf(renderFunction);
324
+ if (index >= 0) {
325
+ this._activeRenderLoops.splice(index, 1);
326
+ if (this._activeRenderLoops.length == 0) {
327
+ this._cancelFrame();
328
+ }
329
+ }
330
+ }
331
+ _cancelFrame() {
332
+ if (this._frameHandler !== 0) {
333
+ const handlerToCancel = this._frameHandler;
334
+ this._frameHandler = 0;
335
+ if (!IsWindowObjectExist()) {
336
+ if (typeof cancelAnimationFrame === "function") {
337
+ return cancelAnimationFrame(handlerToCancel);
338
+ }
339
+ }
340
+ else {
341
+ const { cancelAnimationFrame } = this.getHostWindow() || window;
342
+ if (typeof cancelAnimationFrame === "function") {
343
+ return cancelAnimationFrame(handlerToCancel);
344
+ }
345
+ }
346
+ return clearTimeout(handlerToCancel);
347
+ }
348
+ }
349
+ /**
350
+ * Begin a new frame
351
+ */
352
+ beginFrame() {
353
+ this.onBeginFrameObservable.notifyObservers(this);
354
+ }
355
+ /**
356
+ * End the current frame
357
+ */
358
+ endFrame() {
359
+ this._frameId++;
360
+ this.onEndFrameObservable.notifyObservers(this);
361
+ }
362
+ /** @internal */
363
+ _renderLoop() {
364
+ this._frameHandler = 0;
365
+ if (!this._contextWasLost) {
366
+ let shouldRender = true;
367
+ if (this._isDisposed || (!this.renderEvenInBackground && this._windowIsBackground)) {
368
+ shouldRender = false;
369
+ }
370
+ if (shouldRender) {
371
+ // Start new frame
372
+ this.beginFrame();
373
+ for (let index = 0; index < this._activeRenderLoops.length; index++) {
374
+ const renderFunction = this._activeRenderLoops[index];
375
+ renderFunction();
376
+ }
377
+ // Present
378
+ this.endFrame();
379
+ }
380
+ }
381
+ if (this._frameHandler === 0) {
382
+ this._frameHandler = this._queueNewFrame(this._boundRenderFunction, this.getHostWindow());
383
+ }
384
+ }
385
+ /**
386
+ * Can be used to override the current requestAnimationFrame requester.
387
+ * @internal
388
+ */
389
+ _queueNewFrame(bindedRenderFunction, requester) {
390
+ return QueueNewFrame(bindedRenderFunction, requester);
391
+ }
392
+ /**
393
+ * Register and execute a render loop. The engine can have more than one render function
394
+ * @param renderFunction defines the function to continuously execute
395
+ */
396
+ runRenderLoop(renderFunction) {
397
+ if (this._activeRenderLoops.indexOf(renderFunction) !== -1) {
398
+ return;
399
+ }
400
+ this._activeRenderLoops.push(renderFunction);
401
+ // On the first added function, start the render loop.
402
+ if (this._activeRenderLoops.length === 1 && this._frameHandler === 0) {
403
+ this._frameHandler = this._queueNewFrame(this._boundRenderFunction, this.getHostWindow());
404
+ }
405
+ }
406
+ /**
407
+ * Gets a boolean indicating if depth testing is enabled
408
+ * @returns the current state
409
+ */
410
+ getDepthBuffer() {
411
+ return this._depthCullingState.depthTest;
412
+ }
413
+ /**
414
+ * Enable or disable depth buffering
415
+ * @param enable defines the state to set
416
+ */
417
+ setDepthBuffer(enable) {
418
+ this._depthCullingState.depthTest = enable;
419
+ }
420
+ /**
421
+ * Set the z offset Factor to apply to current rendering
422
+ * @param value defines the offset to apply
423
+ */
424
+ setZOffset(value) {
425
+ this._depthCullingState.zOffset = this.useReverseDepthBuffer ? -value : value;
426
+ }
427
+ /**
428
+ * Gets the current value of the zOffset Factor
429
+ * @returns the current zOffset Factor state
430
+ */
431
+ getZOffset() {
432
+ const zOffset = this._depthCullingState.zOffset;
433
+ return this.useReverseDepthBuffer ? -zOffset : zOffset;
434
+ }
435
+ /**
436
+ * Set the z offset Units to apply to current rendering
437
+ * @param value defines the offset to apply
438
+ */
439
+ setZOffsetUnits(value) {
440
+ this._depthCullingState.zOffsetUnits = this.useReverseDepthBuffer ? -value : value;
441
+ }
442
+ /**
443
+ * Gets the current value of the zOffset Units
444
+ * @returns the current zOffset Units state
445
+ */
446
+ getZOffsetUnits() {
447
+ const zOffsetUnits = this._depthCullingState.zOffsetUnits;
448
+ return this.useReverseDepthBuffer ? -zOffsetUnits : zOffsetUnits;
449
+ }
450
+ /**
451
+ * Gets host window
452
+ * @returns the host window object
453
+ */
454
+ getHostWindow() {
455
+ if (!IsWindowObjectExist()) {
456
+ return null;
457
+ }
458
+ if (this._renderingCanvas && this._renderingCanvas.ownerDocument && this._renderingCanvas.ownerDocument.defaultView) {
459
+ return this._renderingCanvas.ownerDocument.defaultView;
460
+ }
461
+ return window;
462
+ }
463
+ /**
464
+ * (WebGPU only) True (default) to be in compatibility mode, meaning rendering all existing scenes without artifacts (same rendering than WebGL).
465
+ * Setting the property to false will improve performances but may not work in some scenes if some precautions are not taken.
466
+ * See https://doc.babylonjs.com/setup/support/webGPU/webGPUOptimization/webGPUNonCompatibilityMode for more details
467
+ */
468
+ get compatibilityMode() {
469
+ return this._compatibilityMode;
470
+ }
471
+ set compatibilityMode(mode) {
472
+ // not supported in WebGL
473
+ this._compatibilityMode = true;
474
+ }
475
+ _rebuildTextures() {
476
+ for (const scene of this.scenes) {
477
+ scene._rebuildTextures();
478
+ }
479
+ for (const scene of this._virtualScenes) {
480
+ scene._rebuildTextures();
481
+ }
482
+ }
483
+ /**
484
+ * @internal
485
+ */
486
+ _releaseRenderTargetWrapper(rtWrapper) {
487
+ const index = this._renderTargetWrapperCache.indexOf(rtWrapper);
488
+ if (index !== -1) {
489
+ this._renderTargetWrapperCache.splice(index, 1);
490
+ }
491
+ }
492
+ /**
493
+ * Gets the current viewport
494
+ */
495
+ get currentViewport() {
496
+ return this._cachedViewport;
497
+ }
498
+ /**
499
+ * Set the WebGL's viewport
500
+ * @param viewport defines the viewport element to be used
501
+ * @param requiredWidth defines the width required for rendering. If not provided the rendering canvas' width is used
502
+ * @param requiredHeight defines the height required for rendering. If not provided the rendering canvas' height is used
503
+ */
504
+ setViewport(viewport, requiredWidth, requiredHeight) {
505
+ const width = requiredWidth || this.getRenderWidth();
506
+ const height = requiredHeight || this.getRenderHeight();
507
+ const x = viewport.x || 0;
508
+ const y = viewport.y || 0;
509
+ this._cachedViewport = viewport;
510
+ this._viewport(x * width, y * height, width * viewport.width, height * viewport.height);
511
+ }
512
+ /**
513
+ * Create an image to use with canvas
514
+ * @returns IImage interface
515
+ */
516
+ createCanvasImage() {
517
+ return document.createElement("img");
518
+ }
519
+ /**
520
+ * Returns a string describing the current engine
521
+ */
522
+ get description() {
523
+ let description = this.name + this.version;
524
+ if (this._caps.parallelShaderCompile) {
525
+ description += " - Parallel shader compilation";
526
+ }
527
+ return description;
528
+ }
529
+ _createTextureBase(url, noMipmap, invertY, scene, samplingMode = 3, onLoad = null, onError = null, prepareTexture, prepareTextureProcessFunction, buffer = null, fallback = null, format = null, forcedExtension = null, mimeType, loaderOptions, useSRGBBuffer) {
530
+ url = url || "";
531
+ const fromData = url.substr(0, 5) === "data:";
532
+ const fromBlob = url.substr(0, 5) === "blob:";
533
+ const isBase64 = fromData && url.indexOf(";base64,") !== -1;
534
+ const texture = fallback ? fallback : new InternalTexture(this, InternalTextureSource.Url);
535
+ if (texture !== fallback) {
536
+ texture.label = url.substring(0, 60); // default label, can be overriden by the caller
537
+ }
538
+ const originalUrl = url;
539
+ if (this._transformTextureUrl && !isBase64 && !fallback && !buffer) {
540
+ url = this._transformTextureUrl(url);
541
+ }
542
+ if (originalUrl !== url) {
543
+ texture._originalUrl = originalUrl;
544
+ }
545
+ // establish the file extension, if possible
546
+ const lastDot = url.lastIndexOf(".");
547
+ let extension = forcedExtension ? forcedExtension : lastDot > -1 ? url.substring(lastDot).toLowerCase() : "";
548
+ let loader = null;
549
+ // Remove query string
550
+ const queryStringIndex = extension.indexOf("?");
551
+ if (queryStringIndex > -1) {
552
+ extension = extension.split("?")[0];
553
+ }
554
+ for (const availableLoader of AbstractEngine._TextureLoaders) {
555
+ if (availableLoader.canLoad(extension, mimeType)) {
556
+ loader = availableLoader;
557
+ break;
558
+ }
559
+ }
560
+ if (scene) {
561
+ scene.addPendingData(texture);
562
+ }
563
+ texture.url = url;
564
+ texture.generateMipMaps = !noMipmap;
565
+ texture.samplingMode = samplingMode;
566
+ texture.invertY = invertY;
567
+ texture._useSRGBBuffer = this._getUseSRGBBuffer(!!useSRGBBuffer, noMipmap);
568
+ if (!this._doNotHandleContextLost) {
569
+ // Keep a link to the buffer only if we plan to handle context lost
570
+ texture._buffer = buffer;
571
+ }
572
+ let onLoadObserver = null;
573
+ if (onLoad && !fallback) {
574
+ onLoadObserver = texture.onLoadedObservable.add(onLoad);
575
+ }
576
+ if (!fallback) {
577
+ this._internalTexturesCache.push(texture);
578
+ }
579
+ const onInternalError = (message, exception) => {
580
+ if (scene) {
581
+ scene.removePendingData(texture);
582
+ }
583
+ if (url === originalUrl) {
584
+ if (onLoadObserver) {
585
+ texture.onLoadedObservable.remove(onLoadObserver);
586
+ }
587
+ if (EngineStore.UseFallbackTexture && url !== EngineStore.FallbackTexture) {
588
+ this._createTextureBase(EngineStore.FallbackTexture, noMipmap, texture.invertY, scene, samplingMode, null, onError, prepareTexture, prepareTextureProcessFunction, buffer, texture);
589
+ }
590
+ message = (message || "Unknown error") + (EngineStore.UseFallbackTexture ? " - Fallback texture was used" : "");
591
+ texture.onErrorObservable.notifyObservers({ message, exception });
592
+ if (onError) {
593
+ onError(message, exception);
594
+ }
595
+ }
596
+ else {
597
+ // fall back to the original url if the transformed url fails to load
598
+ Logger.Warn(`Failed to load ${url}, falling back to ${originalUrl}`);
599
+ this._createTextureBase(originalUrl, noMipmap, texture.invertY, scene, samplingMode, onLoad, onError, prepareTexture, prepareTextureProcessFunction, buffer, texture, format, forcedExtension, mimeType, loaderOptions, useSRGBBuffer);
600
+ }
601
+ };
602
+ // processing for non-image formats
603
+ if (loader) {
604
+ const callback = (data) => {
605
+ loader.loadData(data, texture, (width, height, loadMipmap, isCompressed, done, loadFailed) => {
606
+ if (loadFailed) {
607
+ onInternalError("TextureLoader failed to load data");
608
+ }
609
+ else {
610
+ prepareTexture(texture, extension, scene, { width, height }, texture.invertY, !loadMipmap, isCompressed, () => {
611
+ done();
612
+ return false;
613
+ }, samplingMode);
614
+ }
615
+ }, loaderOptions);
616
+ };
617
+ if (!buffer) {
618
+ this._loadFile(url, (data) => callback(new Uint8Array(data)), undefined, scene ? scene.offlineProvider : undefined, true, (request, exception) => {
619
+ onInternalError("Unable to load " + (request ? request.responseURL : url, exception));
620
+ });
621
+ }
622
+ else {
623
+ if (buffer instanceof ArrayBuffer) {
624
+ callback(new Uint8Array(buffer));
625
+ }
626
+ else if (ArrayBuffer.isView(buffer)) {
627
+ callback(buffer);
628
+ }
629
+ else {
630
+ if (onError) {
631
+ onError("Unable to load: only ArrayBuffer or ArrayBufferView is supported", null);
632
+ }
633
+ }
634
+ }
635
+ }
636
+ else {
637
+ const onload = (img) => {
638
+ if (fromBlob && !this._doNotHandleContextLost) {
639
+ // We need to store the image if we need to rebuild the texture
640
+ // in case of a webgl context lost
641
+ texture._buffer = img;
642
+ }
643
+ prepareTexture(texture, extension, scene, img, texture.invertY, noMipmap, false, prepareTextureProcessFunction, samplingMode);
644
+ };
645
+ // According to the WebGL spec section 6.10, ImageBitmaps must be inverted on creation.
646
+ // So, we pass imageOrientation to _FileToolsLoadImage() as it may create an ImageBitmap.
647
+ if (!fromData || isBase64) {
648
+ if (buffer && (typeof buffer.decoding === "string" || buffer.close)) {
649
+ onload(buffer);
650
+ }
651
+ else {
652
+ AbstractEngine._FileToolsLoadImage(url || "", onload, onInternalError, scene ? scene.offlineProvider : null, mimeType, texture.invertY && this._features.needsInvertingBitmap ? { imageOrientation: "flipY" } : undefined);
653
+ }
654
+ }
655
+ else if (typeof buffer === "string" || buffer instanceof ArrayBuffer || ArrayBuffer.isView(buffer) || buffer instanceof Blob) {
656
+ AbstractEngine._FileToolsLoadImage(buffer, onload, onInternalError, scene ? scene.offlineProvider : null, mimeType, texture.invertY && this._features.needsInvertingBitmap ? { imageOrientation: "flipY" } : undefined);
657
+ }
658
+ else if (buffer) {
659
+ onload(buffer);
660
+ }
661
+ }
662
+ return texture;
663
+ }
664
+ _rebuildBuffers() {
665
+ // Uniforms
666
+ for (const uniformBuffer of this._uniformBuffers) {
667
+ uniformBuffer._rebuildAfterContextLost();
668
+ }
669
+ }
670
+ /** @internal */
671
+ get _shouldUseHighPrecisionShader() {
672
+ return !!(this._caps.highPrecisionShaderSupported && this._highPrecisionShadersAllowed);
673
+ }
674
+ /**
675
+ * Gets host document
676
+ * @returns the host document object
677
+ */
678
+ getHostDocument() {
679
+ if (this._renderingCanvas && this._renderingCanvas.ownerDocument) {
680
+ return this._renderingCanvas.ownerDocument;
681
+ }
682
+ return IsDocumentAvailable() ? document : null;
683
+ }
684
+ /**
685
+ * Gets the list of loaded textures
686
+ * @returns an array containing all loaded textures
687
+ */
688
+ getLoadedTexturesCache() {
689
+ return this._internalTexturesCache;
690
+ }
691
+ /**
692
+ * Clears the list of texture accessible through engine.
693
+ * This can help preventing texture load conflict due to name collision.
694
+ */
695
+ clearInternalTexturesCache() {
696
+ this._internalTexturesCache.length = 0;
697
+ }
698
+ /**
699
+ * Gets the object containing all engine capabilities
700
+ * @returns the EngineCapabilities object
701
+ */
702
+ getCaps() {
703
+ return this._caps;
704
+ }
705
+ /**
706
+ * Reset the texture cache to empty state
707
+ */
708
+ resetTextureCache() {
709
+ for (const key in this._boundTexturesCache) {
710
+ if (!Object.prototype.hasOwnProperty.call(this._boundTexturesCache, key)) {
711
+ continue;
712
+ }
713
+ this._boundTexturesCache[key] = null;
714
+ }
715
+ this._currentTextureChannel = -1;
716
+ }
717
+ /**
718
+ * Gets or sets the name of the engine
719
+ */
720
+ get name() {
721
+ return this._name;
722
+ }
723
+ set name(value) {
724
+ this._name = value;
725
+ }
726
+ /**
727
+ * Returns the current npm package of the sdk
728
+ */
729
+ // Not mixed with Version for tooling purpose.
730
+ static get NpmPackage() {
731
+ return "babylonjs@7.2.3";
732
+ }
733
+ /**
734
+ * Returns the current version of the framework
735
+ */
736
+ static get Version() {
737
+ return "7.2.3";
738
+ }
739
+ /**
740
+ * Gets the HTML canvas attached with the current webGL context
741
+ * @returns a HTML canvas
742
+ */
743
+ getRenderingCanvas() {
744
+ return this._renderingCanvas;
745
+ }
746
+ /**
747
+ * Gets the audio context specified in engine initialization options
748
+ * @returns an Audio Context
749
+ */
750
+ getAudioContext() {
751
+ return this._audioContext;
752
+ }
753
+ /**
754
+ * Gets the audio destination specified in engine initialization options
755
+ * @returns an audio destination node
756
+ */
757
+ getAudioDestination() {
758
+ return this._audioDestination;
759
+ }
760
+ /**
761
+ * Defines the hardware scaling level.
762
+ * By default the hardware scaling level is computed from the window device ratio.
763
+ * if level = 1 then the engine will render at the exact resolution of the canvas. If level = 0.5 then the engine will render at twice the size of the canvas.
764
+ * @param level defines the level to use
765
+ */
766
+ setHardwareScalingLevel(level) {
767
+ this._hardwareScalingLevel = level;
768
+ this.resize();
769
+ }
770
+ /**
771
+ * Gets the current hardware scaling level.
772
+ * By default the hardware scaling level is computed from the window device ratio.
773
+ * if level = 1 then the engine will render at the exact resolution of the canvas. If level = 0.5 then the engine will render at twice the size of the canvas.
774
+ * @returns a number indicating the current hardware scaling level
775
+ */
776
+ getHardwareScalingLevel() {
777
+ return this._hardwareScalingLevel;
778
+ }
779
+ /**
780
+ * Gets or sets a boolean indicating if resources should be retained to be able to handle context lost events
781
+ * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/optimize_your_scene#handling-webgl-context-lost
782
+ */
783
+ get doNotHandleContextLost() {
784
+ return this._doNotHandleContextLost;
785
+ }
786
+ set doNotHandleContextLost(value) {
787
+ this._doNotHandleContextLost = value;
788
+ }
789
+ /**
790
+ * Returns true if the stencil buffer has been enabled through the creation option of the context.
791
+ */
792
+ get isStencilEnable() {
793
+ return this._isStencilEnable;
794
+ }
795
+ /**
796
+ * Creates a new engine
797
+ * @param antialias defines enable antialiasing (default: false)
798
+ * @param options defines further options to be sent to the creation context
799
+ * @param adaptToDeviceRatio defines whether to adapt to the device's viewport characteristics (default: false)
800
+ */
801
+ constructor(antialias, options, adaptToDeviceRatio) {
802
+ // States
803
+ /** @internal */
804
+ this._colorWrite = true;
805
+ /** @internal */
806
+ this._colorWriteChanged = true;
807
+ /** @internal */
808
+ this._depthCullingState = new DepthCullingState();
809
+ /** @internal */
810
+ this._stencilStateComposer = new StencilStateComposer();
811
+ /** @internal */
812
+ this._stencilState = new StencilState();
813
+ /** @internal */
814
+ this._alphaState = new AlphaState();
815
+ /** @internal */
816
+ this._alphaMode = 1;
817
+ /** @internal */
818
+ this._alphaEquation = 0;
819
+ /** @internal */
820
+ this._badOS = false;
821
+ /** @internal */
822
+ this._badDesktopOS = false;
823
+ this._compatibilityMode = true;
824
+ /** @internal */
825
+ this._internalTexturesCache = new Array();
826
+ this._activeRequests = new Array();
827
+ /** @internal */
828
+ this._currentRenderTarget = null;
829
+ /** @internal */
830
+ this._boundTexturesCache = {};
831
+ /** @internal */
832
+ this._activeChannel = 0;
833
+ /** @internal */
834
+ this._currentTextureChannel = -1;
835
+ /** @internal */
836
+ this._viewportCached = { x: 0, y: 0, z: 0, w: 0 };
837
+ /** @internal */
838
+ this._isWebGPU = false;
839
+ /**
840
+ * Observable event triggered each time the canvas loses focus
841
+ */
842
+ this.onCanvasBlurObservable = new Observable();
843
+ /**
844
+ * Observable event triggered each time the canvas gains focus
845
+ */
846
+ this.onCanvasFocusObservable = new Observable();
847
+ /**
848
+ * Event raised when a new scene is created
849
+ */
850
+ this.onNewSceneAddedObservable = new Observable();
851
+ /**
852
+ * Observable event triggered each time the rendering canvas is resized
853
+ */
854
+ this.onResizeObservable = new Observable();
855
+ /**
856
+ * Observable event triggered each time the canvas receives pointerout event
857
+ */
858
+ this.onCanvasPointerOutObservable = new Observable();
859
+ /**
860
+ * Turn this value on if you want to pause FPS computation when in background
861
+ */
862
+ this.disablePerformanceMonitorInBackground = false;
863
+ /**
864
+ * Gets or sets a boolean indicating that vertex array object must be disabled even if they are supported
865
+ */
866
+ this.disableVertexArrayObjects = false;
867
+ /** @internal */
868
+ this._frameId = 0;
869
+ /**
870
+ * Gets information about the current host
871
+ */
872
+ this.hostInformation = {
873
+ isMobile: false,
874
+ };
875
+ /**
876
+ * Gets a boolean indicating if the engine is currently rendering in fullscreen mode
877
+ */
878
+ this.isFullscreen = false;
879
+ /**
880
+ * Gets or sets a boolean to enable/disable IndexedDB support and avoid XHR on .manifest
881
+ **/
882
+ this.enableOfflineSupport = false;
883
+ /**
884
+ * Gets or sets a boolean to enable/disable checking manifest if IndexedDB support is enabled (js will always consider the database is up to date)
885
+ **/
886
+ this.disableManifestCheck = false;
887
+ /**
888
+ * Gets or sets a boolean to enable/disable the context menu (right-click) from appearing on the main canvas
889
+ */
890
+ this.disableContextMenu = true;
891
+ /**
892
+ * Gets or sets the current render pass id
893
+ */
894
+ this.currentRenderPassId = 0;
895
+ /**
896
+ * Gets a boolean indicating if the pointer is currently locked
897
+ */
898
+ this.isPointerLock = false;
899
+ /**
900
+ * Gets the list of created postprocesses
901
+ */
902
+ this.postProcesses = [];
903
+ /** Gets or sets the tab index to set to the rendering canvas. 1 is the minimum value to set to be able to capture keyboard events */
904
+ this.canvasTabIndex = 1;
905
+ /** @internal */
906
+ this._contextWasLost = false;
907
+ this._useReverseDepthBuffer = false;
908
+ /**
909
+ * Indicates if the z range in NDC space is 0..1 (value: true) or -1..1 (value: false)
910
+ */
911
+ this.isNDCHalfZRange = false;
912
+ /**
913
+ * Indicates that the origin of the texture/framebuffer space is the bottom left corner. If false, the origin is top left
914
+ */
915
+ this.hasOriginBottomLeft = true;
916
+ /** @internal */
917
+ this._renderTargetWrapperCache = new Array();
918
+ /** @internal */
919
+ this._compiledEffects = {};
920
+ /** @internal */
921
+ this._isDisposed = false;
922
+ /**
923
+ * Gets the list of created scenes
924
+ */
925
+ this.scenes = [];
926
+ /** @internal */
927
+ this._virtualScenes = new Array();
928
+ /**
929
+ * Observable event triggered before each texture is initialized
930
+ */
931
+ this.onBeforeTextureInitObservable = new Observable();
932
+ /**
933
+ * Gets or sets a boolean indicating if the engine must keep rendering even if the window is not in foreground
934
+ */
935
+ this.renderEvenInBackground = true;
936
+ /**
937
+ * Gets or sets a boolean indicating that cache can be kept between frames
938
+ */
939
+ this.preventCacheWipeBetweenFrames = false;
940
+ /** @internal */
941
+ this._frameHandler = 0;
942
+ /** @internal */
943
+ this._activeRenderLoops = new Array();
944
+ /** @internal */
945
+ this._windowIsBackground = false;
946
+ /** @internal */
947
+ this._boundRenderFunction = () => this._renderLoop();
948
+ /**
949
+ * Observable raised when the engine is about to compile a shader
950
+ */
951
+ this.onBeforeShaderCompilationObservable = new Observable();
952
+ /**
953
+ * Observable raised when the engine has just compiled a shader
954
+ */
955
+ this.onAfterShaderCompilationObservable = new Observable();
956
+ /**
957
+ * Observable raised when the engine begins a new frame
958
+ */
959
+ this.onBeginFrameObservable = new Observable();
960
+ /**
961
+ * Observable raised when the engine ends the current frame
962
+ */
963
+ this.onEndFrameObservable = new Observable();
964
+ /** @internal */
965
+ this._transformTextureUrl = null;
966
+ /** @internal */
967
+ this._uniformBuffers = new Array();
968
+ /** @internal */
969
+ this._storageBuffers = new Array();
970
+ this._highPrecisionShadersAllowed = true;
971
+ // Lost context
972
+ /**
973
+ * Observable signaled when a context lost event is raised
974
+ */
975
+ this.onContextLostObservable = new Observable();
976
+ /**
977
+ * Observable signaled when a context restored event is raised
978
+ */
979
+ this.onContextRestoredObservable = new Observable();
980
+ /** @internal */
981
+ this._name = "";
982
+ /**
983
+ * Defines whether the engine has been created with the premultipliedAlpha option on or not.
984
+ */
985
+ this.premultipliedAlpha = true;
986
+ /**
987
+ * If set to true zooming in and out in the browser will rescale the hardware-scaling correctly.
988
+ */
989
+ this.adaptToDeviceRatio = false;
990
+ /** @internal */
991
+ this._lastDevicePixelRatio = 1.0;
992
+ /** @internal */
993
+ this._doNotHandleContextLost = false;
994
+ /**
995
+ * Gets or sets a boolean indicating if back faces must be culled. If false, front faces are culled instead (true by default)
996
+ * If non null, this takes precedence over the value from the material
997
+ */
998
+ this.cullBackFaces = null;
999
+ /** @internal */
1000
+ this._renderPassNames = ["main"];
1001
+ // FPS
1002
+ this._fps = 60;
1003
+ this._deltaTime = 0;
1004
+ // Deterministic lockstepMaxSteps
1005
+ /** @internal */
1006
+ this._deterministicLockstep = false;
1007
+ /** @internal */
1008
+ this._lockstepMaxSteps = 4;
1009
+ /** @internal */
1010
+ this._timeStep = 1 / 60;
1011
+ /**
1012
+ * An event triggered when the engine is disposed.
1013
+ */
1014
+ this.onDisposeObservable = new Observable();
1015
+ EngineStore.Instances.push(this);
1016
+ this.startTime = PrecisionDate.Now;
1017
+ this._stencilStateComposer.stencilGlobal = this._stencilState;
1018
+ PerformanceConfigurator.SetMatrixPrecision(!!options.useHighPrecisionMatrix);
1019
+ if (IsNavigatorAvailable() && navigator.userAgent) {
1020
+ // Detect if we are running on a faulty buggy OS.
1021
+ this._badOS = /iPad/i.test(navigator.userAgent) || /iPhone/i.test(navigator.userAgent);
1022
+ // Detect if we are running on a faulty buggy desktop OS.
1023
+ this._badDesktopOS = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
1024
+ }
1025
+ // Save this off for use in resize().
1026
+ this.adaptToDeviceRatio = adaptToDeviceRatio ?? false;
1027
+ options.antialias = antialias ?? options.antialias;
1028
+ options.deterministicLockstep = options.deterministicLockstep ?? false;
1029
+ options.lockstepMaxSteps = options.lockstepMaxSteps ?? 4;
1030
+ options.timeStep = options.timeStep ?? 1 / 60;
1031
+ options.audioEngine = options.audioEngine ?? true;
1032
+ options.stencil = options.stencil ?? true;
1033
+ this._audioContext = options.audioEngineOptions?.audioContext ?? null;
1034
+ this._audioDestination = options.audioEngineOptions?.audioDestination ?? null;
1035
+ this.premultipliedAlpha = options.premultipliedAlpha ?? true;
1036
+ this._doNotHandleContextLost = !!options.doNotHandleContextLost;
1037
+ this._isStencilEnable = options.stencil ? true : false;
1038
+ this.useExactSrgbConversions = options.useExactSrgbConversions ?? false;
1039
+ const devicePixelRatio = IsWindowObjectExist() ? window.devicePixelRatio || 1.0 : 1.0;
1040
+ const limitDeviceRatio = options.limitDeviceRatio || devicePixelRatio;
1041
+ // Viewport
1042
+ adaptToDeviceRatio = adaptToDeviceRatio || options.adaptToDeviceRatio || false;
1043
+ this._hardwareScalingLevel = adaptToDeviceRatio ? 1.0 / Math.min(limitDeviceRatio, devicePixelRatio) : 1.0;
1044
+ this._lastDevicePixelRatio = devicePixelRatio;
1045
+ }
1046
+ /**
1047
+ * Resize the view according to the canvas' size
1048
+ * @param forceSetSize true to force setting the sizes of the underlying canvas
1049
+ */
1050
+ resize(forceSetSize = false) {
1051
+ let width;
1052
+ let height;
1053
+ // Re-query hardware scaling level to handle zoomed-in resizing.
1054
+ if (this.adaptToDeviceRatio) {
1055
+ const devicePixelRatio = IsWindowObjectExist() ? window.devicePixelRatio || 1.0 : 1.0;
1056
+ const changeRatio = this._lastDevicePixelRatio / devicePixelRatio;
1057
+ this._lastDevicePixelRatio = devicePixelRatio;
1058
+ this._hardwareScalingLevel *= changeRatio;
1059
+ }
1060
+ if (IsWindowObjectExist() && IsDocumentAvailable()) {
1061
+ // make sure it is a Node object, and is a part of the document.
1062
+ if (this._renderingCanvas) {
1063
+ const boundingRect = this._renderingCanvas.getBoundingClientRect
1064
+ ? this._renderingCanvas.getBoundingClientRect()
1065
+ : {
1066
+ // fallback to last solution in case the function doesn't exist
1067
+ width: this._renderingCanvas.width * this._hardwareScalingLevel,
1068
+ height: this._renderingCanvas.height * this._hardwareScalingLevel,
1069
+ };
1070
+ width = this._renderingCanvas.clientWidth || boundingRect.width || this._renderingCanvas.width || 100;
1071
+ height = this._renderingCanvas.clientHeight || boundingRect.height || this._renderingCanvas.height || 100;
1072
+ }
1073
+ else {
1074
+ width = window.innerWidth;
1075
+ height = window.innerHeight;
1076
+ }
1077
+ }
1078
+ else {
1079
+ width = this._renderingCanvas ? this._renderingCanvas.width : 100;
1080
+ height = this._renderingCanvas ? this._renderingCanvas.height : 100;
1081
+ }
1082
+ this.setSize(width / this._hardwareScalingLevel, height / this._hardwareScalingLevel, forceSetSize);
1083
+ }
1084
+ /**
1085
+ * Force a specific size of the canvas
1086
+ * @param width defines the new canvas' width
1087
+ * @param height defines the new canvas' height
1088
+ * @param forceSetSize true to force setting the sizes of the underlying canvas
1089
+ * @returns true if the size was changed
1090
+ */
1091
+ setSize(width, height, forceSetSize = false) {
1092
+ if (!this._renderingCanvas) {
1093
+ return false;
1094
+ }
1095
+ width = width | 0;
1096
+ height = height | 0;
1097
+ if (!forceSetSize && this._renderingCanvas.width === width && this._renderingCanvas.height === height) {
1098
+ return false;
1099
+ }
1100
+ this._renderingCanvas.width = width;
1101
+ this._renderingCanvas.height = height;
1102
+ return true;
1103
+ }
1104
+ /**
1105
+ * Shared initialization across engines types.
1106
+ * @param canvas The canvas associated with this instance of the engine.
1107
+ */
1108
+ _sharedInit(canvas) {
1109
+ this._renderingCanvas = canvas;
1110
+ }
1111
+ _setupMobileChecks() {
1112
+ if (!(navigator && navigator.userAgent)) {
1113
+ return;
1114
+ }
1115
+ // Function to check if running on mobile device
1116
+ this._checkForMobile = () => {
1117
+ const currentUA = navigator.userAgent;
1118
+ this.hostInformation.isMobile =
1119
+ currentUA.indexOf("Mobile") !== -1 ||
1120
+ // Needed for iOS 13+ detection on iPad (inspired by solution from https://stackoverflow.com/questions/9038625/detect-if-device-is-ios)
1121
+ (currentUA.indexOf("Mac") !== -1 && IsDocumentAvailable() && "ontouchend" in document);
1122
+ };
1123
+ // Set initial isMobile value
1124
+ this._checkForMobile();
1125
+ // Set up event listener to check when window is resized (used to get emulator activation to work properly)
1126
+ if (IsWindowObjectExist()) {
1127
+ window.addEventListener("resize", this._checkForMobile);
1128
+ }
1129
+ }
1130
+ /**
1131
+ * creates and returns a new video element
1132
+ * @param constraints video constraints
1133
+ * @returns video element
1134
+ */
1135
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1136
+ createVideoElement(constraints) {
1137
+ return document.createElement("video");
1138
+ }
1139
+ /**
1140
+ * @internal
1141
+ */
1142
+ _reportDrawCall(numDrawCalls = 1) {
1143
+ this._drawCalls?.addCount(numDrawCalls, false);
1144
+ }
1145
+ /**
1146
+ * Gets the current framerate
1147
+ * @returns a number representing the framerate
1148
+ */
1149
+ getFps() {
1150
+ return this._fps;
1151
+ }
1152
+ /**
1153
+ * Gets the time spent between current and previous frame
1154
+ * @returns a number representing the delta time in ms
1155
+ */
1156
+ getDeltaTime() {
1157
+ return this._deltaTime;
1158
+ }
1159
+ /**
1160
+ * Gets a boolean indicating that the engine is running in deterministic lock step mode
1161
+ * @see https://doc.babylonjs.com/features/featuresDeepDive/animation/advanced_animations#deterministic-lockstep
1162
+ * @returns true if engine is in deterministic lock step mode
1163
+ */
1164
+ isDeterministicLockStep() {
1165
+ return this._deterministicLockstep;
1166
+ }
1167
+ /**
1168
+ * Gets the max steps when engine is running in deterministic lock step
1169
+ * @see https://doc.babylonjs.com/features/featuresDeepDive/animation/advanced_animations#deterministic-lockstep
1170
+ * @returns the max steps
1171
+ */
1172
+ getLockstepMaxSteps() {
1173
+ return this._lockstepMaxSteps;
1174
+ }
1175
+ /**
1176
+ * Returns the time in ms between steps when using deterministic lock step.
1177
+ * @returns time step in (ms)
1178
+ */
1179
+ getTimeStep() {
1180
+ return this._timeStep * 1000;
1181
+ }
1182
+ /**
1183
+ * Engine abstraction for loading and creating an image bitmap from a given source string.
1184
+ * @param imageSource source to load the image from.
1185
+ * @param options An object that sets options for the image's extraction.
1186
+ */
1187
+ _createImageBitmapFromSource(imageSource, options) {
1188
+ throw new Error("createImageBitmapFromSource is not implemented");
1189
+ }
1190
+ /**
1191
+ * Engine abstraction for createImageBitmap
1192
+ * @param image source for image
1193
+ * @param options An object that sets options for the image's extraction.
1194
+ * @returns ImageBitmap
1195
+ */
1196
+ createImageBitmap(image, options) {
1197
+ return createImageBitmap(image, options);
1198
+ }
1199
+ /**
1200
+ * Resize an image and returns the image data as an uint8array
1201
+ * @param image image to resize
1202
+ * @param bufferWidth destination buffer width
1203
+ * @param bufferHeight destination buffer height
1204
+ */
1205
+ resizeImageBitmap(image, bufferWidth, bufferHeight) {
1206
+ throw new Error("resizeImageBitmap is not implemented");
1207
+ }
1208
+ /**
1209
+ * Get Font size information
1210
+ * @param font font name
1211
+ */
1212
+ getFontOffset(font) {
1213
+ throw new Error("getFontOffset is not implemented");
1214
+ }
1215
+ static _CreateCanvas(width, height) {
1216
+ if (typeof document === "undefined") {
1217
+ return new OffscreenCanvas(width, height);
1218
+ }
1219
+ const canvas = document.createElement("canvas");
1220
+ canvas.width = width;
1221
+ canvas.height = height;
1222
+ return canvas;
1223
+ }
1224
+ /**
1225
+ * Create a canvas. This method is overridden by other engines
1226
+ * @param width width
1227
+ * @param height height
1228
+ * @returns ICanvas interface
1229
+ */
1230
+ createCanvas(width, height) {
1231
+ return AbstractEngine._CreateCanvas(width, height);
1232
+ }
1233
+ /**
1234
+ * Loads an image as an HTMLImageElement.
1235
+ * @param input url string, ArrayBuffer, or Blob to load
1236
+ * @param onLoad callback called when the image successfully loads
1237
+ * @param onError callback called when the image fails to load
1238
+ * @param offlineProvider offline provider for caching
1239
+ * @param mimeType optional mime type
1240
+ * @param imageBitmapOptions optional the options to use when creating an ImageBitmap
1241
+ * @returns the HTMLImageElement of the loaded image
1242
+ * @internal
1243
+ */
1244
+ static _FileToolsLoadImage(input, onLoad, onError, offlineProvider, mimeType, imageBitmapOptions) {
1245
+ throw _WarnImport("FileTools");
1246
+ }
1247
+ /**
1248
+ * Loads a file from a url
1249
+ * @param url url to load
1250
+ * @param onSuccess callback called when the file successfully loads
1251
+ * @param onProgress callback called while file is loading (if the server supports this mode)
1252
+ * @param offlineProvider defines the offline provider for caching
1253
+ * @param useArrayBuffer defines a boolean indicating that date must be returned as ArrayBuffer
1254
+ * @param onError callback called when the file fails to load
1255
+ * @returns a file request object
1256
+ * @internal
1257
+ */
1258
+ static _FileToolsLoadFile(url, onSuccess, onProgress, offlineProvider, useArrayBuffer, onError) {
1259
+ throw _WarnImport("FileTools");
1260
+ }
1261
+ /**
1262
+ * @internal
1263
+ */
1264
+ _loadFile(url, onSuccess, onProgress, offlineProvider, useArrayBuffer, onError) {
1265
+ const request = AbstractEngine._FileToolsLoadFile(url, onSuccess, onProgress, offlineProvider, useArrayBuffer, onError);
1266
+ this._activeRequests.push(request);
1267
+ request.onCompleteObservable.add((request) => {
1268
+ this._activeRequests.splice(this._activeRequests.indexOf(request), 1);
1269
+ });
1270
+ return request;
1271
+ }
1272
+ /**
1273
+ * Dispose and release all associated resources
1274
+ */
1275
+ dispose() {
1276
+ this.hideLoadingUI();
1277
+ this._isDisposed = true;
1278
+ this.stopRenderLoop();
1279
+ // Empty texture
1280
+ if (this._emptyTexture) {
1281
+ this._releaseTexture(this._emptyTexture);
1282
+ this._emptyTexture = null;
1283
+ }
1284
+ if (this._emptyCubeTexture) {
1285
+ this._releaseTexture(this._emptyCubeTexture);
1286
+ this._emptyCubeTexture = null;
1287
+ }
1288
+ this._renderingCanvas = null;
1289
+ // Clear observables
1290
+ if (this.onBeforeTextureInitObservable) {
1291
+ this.onBeforeTextureInitObservable.clear();
1292
+ }
1293
+ // Release postProcesses
1294
+ while (this.postProcesses.length) {
1295
+ this.postProcesses[0].dispose();
1296
+ }
1297
+ // Release scenes
1298
+ while (this.scenes.length) {
1299
+ this.scenes[0].dispose();
1300
+ }
1301
+ while (this._virtualScenes.length) {
1302
+ this._virtualScenes[0].dispose();
1303
+ }
1304
+ // Release effects
1305
+ this.releaseComputeEffects?.();
1306
+ Effect.ResetCache();
1307
+ // Abort active requests
1308
+ for (const request of this._activeRequests) {
1309
+ request.abort();
1310
+ }
1311
+ this._boundRenderFunction = null;
1312
+ this.onDisposeObservable.notifyObservers(this);
1313
+ this.onDisposeObservable.clear();
1314
+ this.onResizeObservable.clear();
1315
+ this.onCanvasBlurObservable.clear();
1316
+ this.onCanvasFocusObservable.clear();
1317
+ this.onCanvasPointerOutObservable.clear();
1318
+ this.onNewSceneAddedObservable.clear();
1319
+ if (IsWindowObjectExist()) {
1320
+ window.removeEventListener("resize", this._checkForMobile);
1321
+ }
1322
+ // Remove from Instances
1323
+ const index = EngineStore.Instances.indexOf(this);
1324
+ if (index >= 0) {
1325
+ EngineStore.Instances.splice(index, 1);
1326
+ }
1327
+ // no more engines left in the engine store? Notify!
1328
+ if (!EngineStore.Instances.length) {
1329
+ EngineStore.OnEnginesDisposedObservable.notifyObservers(this);
1330
+ }
1331
+ // Observables
1332
+ this.onBeginFrameObservable.clear();
1333
+ this.onEndFrameObservable.clear();
1334
+ }
1335
+ /**
1336
+ * Method called to create the default loading screen.
1337
+ * This can be overridden in your own app.
1338
+ * @param canvas The rendering canvas element
1339
+ */
1340
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1341
+ static DefaultLoadingScreenFactory(canvas) {
1342
+ throw _WarnImport("LoadingScreen");
1343
+ }
1344
+ }
1345
+ /** @internal */
1346
+ AbstractEngine._TextureLoaders = [];
1347
+ // eslint-disable-next-line @typescript-eslint/naming-convention
1348
+ /** @internal */
1349
+ AbstractEngine._RenderPassIdCounter = 0;
1350
+ /**
1351
+ * Method called to create the default rescale post process on each engine.
1352
+ */
1353
+ AbstractEngine._RescalePostProcessFactory = null;
1354
+ //# sourceMappingURL=abstractEngine.js.map