@onerjs/core 8.56.4 → 9.0.1

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 (722) hide show
  1. package/Animations/animatable.core.js +36 -0
  2. package/Animations/animatable.core.js.map +1 -1
  3. package/Animations/animationGroup.pure.d.ts +61 -1
  4. package/Animations/animationGroup.pure.js +191 -2
  5. package/Animations/animationGroup.pure.js.map +1 -1
  6. package/Animations/index.d.ts +1 -0
  7. package/Animations/index.js +1 -0
  8. package/Animations/index.js.map +1 -1
  9. package/Animations/pure.d.ts +1 -0
  10. package/Animations/pure.js +1 -0
  11. package/Animations/pure.js.map +1 -1
  12. package/Animations/rootMotion.d.ts +560 -0
  13. package/Animations/rootMotion.js +1709 -0
  14. package/Animations/rootMotion.js.map +1 -0
  15. package/Animations/runtimeAnimation.d.ts +57 -0
  16. package/Animations/runtimeAnimation.js +127 -3
  17. package/Animations/runtimeAnimation.js.map +1 -1
  18. package/Cameras/arcRotateCamera.pure.d.ts +2 -0
  19. package/Cameras/arcRotateCamera.pure.js +2 -0
  20. package/Cameras/arcRotateCamera.pure.js.map +1 -1
  21. package/Cameras/targetCamera.pure.d.ts +2 -0
  22. package/Cameras/targetCamera.pure.js +13 -2
  23. package/Cameras/targetCamera.pure.js.map +1 -1
  24. package/Collisions/gpuPicker.js +5 -5
  25. package/Collisions/gpuPicker.js.map +1 -1
  26. package/Engines/AbstractEngine/abstractEngine.query.pure.js +4 -2
  27. package/Engines/AbstractEngine/abstractEngine.query.pure.js.map +1 -1
  28. package/Engines/AbstractEngine/abstractEngine.query.types.d.ts +11 -2
  29. package/Engines/AbstractEngine/abstractEngine.query.types.js.map +1 -1
  30. package/Engines/AbstractEngine/abstractEngine.renderPass.pure.js +1 -0
  31. package/Engines/AbstractEngine/abstractEngine.renderPass.pure.js.map +1 -1
  32. package/Engines/Extensions/engine.multiRender.pure.js +63 -0
  33. package/Engines/Extensions/engine.multiRender.pure.js.map +1 -1
  34. package/Engines/Extensions/engine.multiRender.types.d.ts +13 -0
  35. package/Engines/Extensions/engine.multiRender.types.js.map +1 -1
  36. package/Engines/Extensions/engine.prefilteredCubeTexture.pure.js +2 -2
  37. package/Engines/Extensions/engine.prefilteredCubeTexture.pure.js.map +1 -1
  38. package/Engines/Extensions/engine.prefilteredCubeTexture.types.d.ts +2 -1
  39. package/Engines/Extensions/engine.prefilteredCubeTexture.types.js.map +1 -1
  40. package/Engines/Extensions/index.d.ts +1 -0
  41. package/Engines/Extensions/index.js +1 -0
  42. package/Engines/Extensions/index.js.map +1 -1
  43. package/Engines/Extensions/pure.d.ts +1 -1
  44. package/Engines/Extensions/pure.js +1 -1
  45. package/Engines/Extensions/pure.js.map +1 -1
  46. package/Engines/Native/Extensions/nativeEngine.cubeTexture.pure.js +88 -39
  47. package/Engines/Native/Extensions/nativeEngine.cubeTexture.pure.js.map +1 -1
  48. package/Engines/Native/Extensions/nativeEngine.cubeTexture.types.d.ts +20 -2
  49. package/Engines/Native/Extensions/nativeEngine.cubeTexture.types.js.map +1 -1
  50. package/Engines/Native/nativeHardwareTexture.d.ts +8 -1
  51. package/Engines/Native/nativeHardwareTexture.js +7 -0
  52. package/Engines/Native/nativeHardwareTexture.js.map +1 -1
  53. package/Engines/Native/nativeHelpers.js +56 -1
  54. package/Engines/Native/nativeHelpers.js.map +1 -1
  55. package/Engines/Native/nativeInterfaces.d.ts +37 -8
  56. package/Engines/Native/nativeInterfaces.js.map +1 -1
  57. package/Engines/Native/nativeRenderTargetWrapper.d.ts +40 -0
  58. package/Engines/Native/nativeRenderTargetWrapper.js +265 -5
  59. package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -1
  60. package/Engines/Processors/shaderCodeCursor.d.ts +1 -0
  61. package/Engines/Processors/shaderCodeCursor.js +40 -3
  62. package/Engines/Processors/shaderCodeCursor.js.map +1 -1
  63. package/Engines/WebGPU/Extensions/engine.multiRender.pure.js +4 -0
  64. package/Engines/WebGPU/Extensions/engine.multiRender.pure.js.map +1 -1
  65. package/Engines/WebGPU/Extensions/engine.multiRender.types.d.ts +13 -0
  66. package/Engines/WebGPU/Extensions/engine.multiRender.types.js.map +1 -1
  67. package/Engines/WebGPU/Extensions/engine.query.pure.js +11 -3
  68. package/Engines/WebGPU/Extensions/engine.query.pure.js.map +1 -1
  69. package/Engines/WebGPU/Extensions/engine.renderTarget.pure.js +1 -0
  70. package/Engines/WebGPU/Extensions/engine.renderTarget.pure.js.map +1 -1
  71. package/Engines/WebGPU/Extensions/index.d.ts +1 -0
  72. package/Engines/WebGPU/Extensions/index.js +1 -0
  73. package/Engines/WebGPU/Extensions/index.js.map +1 -1
  74. package/Engines/WebGPU/Extensions/pure.d.ts +1 -1
  75. package/Engines/WebGPU/Extensions/pure.js +1 -1
  76. package/Engines/WebGPU/Extensions/pure.js.map +1 -1
  77. package/Engines/WebGPU/webgpuBundleList.d.ts +2 -0
  78. package/Engines/WebGPU/webgpuBundleList.js +4 -0
  79. package/Engines/WebGPU/webgpuBundleList.js.map +1 -1
  80. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +5 -2
  81. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  82. package/Engines/WebGPU/webgpuHardwareTexture.js +3 -1
  83. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  84. package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -1
  85. package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
  86. package/Engines/WebGPU/webgpuSnapshotRendering.d.ts +4 -0
  87. package/Engines/WebGPU/webgpuSnapshotRendering.js +40 -7
  88. package/Engines/WebGPU/webgpuSnapshotRendering.js.map +1 -1
  89. package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -1
  90. package/Engines/WebGPU/webgpuTextureHelper.js +2 -2
  91. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  92. package/Engines/WebGPU/webgpuTextureManager.d.ts +2 -0
  93. package/Engines/WebGPU/webgpuTextureManager.js +286 -13
  94. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  95. package/Engines/abstractEngine.pure.d.ts +17 -1
  96. package/Engines/abstractEngine.pure.js +17 -5
  97. package/Engines/abstractEngine.pure.js.map +1 -1
  98. package/Engines/constants.d.ts +4 -0
  99. package/Engines/constants.js +4 -0
  100. package/Engines/constants.js.map +1 -1
  101. package/Engines/engine.pure.d.ts +0 -1
  102. package/Engines/engine.pure.js +0 -7
  103. package/Engines/engine.pure.js.map +1 -1
  104. package/Engines/nativeEngine.pure.js +1 -1
  105. package/Engines/nativeEngine.pure.js.map +1 -1
  106. package/Engines/thinEngine.pure.d.ts +15 -0
  107. package/Engines/thinEngine.pure.js +61 -14
  108. package/Engines/thinEngine.pure.js.map +1 -1
  109. package/Engines/thinNativeEngine.pure.d.ts +218 -17
  110. package/Engines/thinNativeEngine.pure.js +1438 -165
  111. package/Engines/thinNativeEngine.pure.js.map +1 -1
  112. package/Engines/thinWebGPUEngine.d.ts +4 -0
  113. package/Engines/thinWebGPUEngine.js +16 -2
  114. package/Engines/thinWebGPUEngine.js.map +1 -1
  115. package/Engines/webgpuEngine.pure.d.ts +17 -3
  116. package/Engines/webgpuEngine.pure.js +56 -13
  117. package/Engines/webgpuEngine.pure.js.map +1 -1
  118. package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.pure.js +2 -2
  119. package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.pure.js.map +1 -1
  120. package/FlowGraph/Blocks/Data/Transformers/flowGraphJsonPointerParserBlock.pure.d.ts +10 -0
  121. package/FlowGraph/Blocks/Data/Transformers/flowGraphJsonPointerParserBlock.pure.js +24 -12
  122. package/FlowGraph/Blocks/Data/Transformers/flowGraphJsonPointerParserBlock.pure.js.map +1 -1
  123. package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.d.ts +11 -2
  124. package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.js +1 -1
  125. package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.js.map +1 -1
  126. package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.pure.d.ts +7 -0
  127. package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.pure.js +43 -0
  128. package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.pure.js.map +1 -1
  129. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.d.ts +9 -1
  130. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.js +6 -8
  131. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.js.map +1 -1
  132. package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.d.ts +2 -0
  133. package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.js +5 -1
  134. package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.js.map +1 -1
  135. package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.d.ts +2 -0
  136. package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.js +5 -1
  137. package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.js.map +1 -1
  138. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.d.ts +9 -0
  139. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.js +34 -9
  140. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.js.map +1 -1
  141. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.d.ts +2 -0
  142. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.js +4 -0
  143. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.js.map +1 -1
  144. package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.d.ts +18 -4
  145. package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.js +24 -6
  146. package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.js.map +1 -1
  147. package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.pure.js +19 -7
  148. package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.pure.js.map +1 -1
  149. package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.pure.js +3 -3
  150. package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.pure.js.map +1 -1
  151. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.d.ts +20 -2
  152. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.js +85 -25
  153. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.js.map +1 -1
  154. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.d.ts +16 -1
  155. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.js +64 -14
  156. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.js.map +1 -1
  157. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.pure.d.ts +12 -1
  158. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.pure.js +8 -0
  159. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.pure.js.map +1 -1
  160. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphForLoopBlock.pure.js +4 -1
  161. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphForLoopBlock.pure.js.map +1 -1
  162. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.pure.d.ts +12 -1
  163. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.pure.js +5 -1
  164. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.pure.js.map +1 -1
  165. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.pure.js +64 -16
  166. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.pure.js.map +1 -1
  167. package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.pure.d.ts +2 -0
  168. package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.pure.js +14 -2
  169. package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.pure.js.map +1 -1
  170. package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.pure.d.ts +5 -1
  171. package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.pure.js +23 -8
  172. package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.pure.js.map +1 -1
  173. package/FlowGraph/CustomTypes/flowGraphInteger.pure.d.ts +5 -0
  174. package/FlowGraph/CustomTypes/flowGraphInteger.pure.js +7 -0
  175. package/FlowGraph/CustomTypes/flowGraphInteger.pure.js.map +1 -1
  176. package/FlowGraph/CustomTypes/flowGraphMatrix.d.ts +10 -0
  177. package/FlowGraph/CustomTypes/flowGraphMatrix.js +14 -0
  178. package/FlowGraph/CustomTypes/flowGraphMatrix.js.map +1 -1
  179. package/FlowGraph/flowGraph.d.ts +6 -1
  180. package/FlowGraph/flowGraph.js +41 -9
  181. package/FlowGraph/flowGraph.js.map +1 -1
  182. package/FlowGraph/flowGraphAnimationHelpers.d.ts +24 -0
  183. package/FlowGraph/flowGraphAnimationHelpers.js +21 -0
  184. package/FlowGraph/flowGraphAnimationHelpers.js.map +1 -0
  185. package/FlowGraph/flowGraphBlock.js +3 -0
  186. package/FlowGraph/flowGraphBlock.js.map +1 -1
  187. package/FlowGraph/flowGraphConnection.d.ts +7 -0
  188. package/FlowGraph/flowGraphConnection.js +7 -0
  189. package/FlowGraph/flowGraphConnection.js.map +1 -1
  190. package/FlowGraph/flowGraphContext.d.ts +2 -1
  191. package/FlowGraph/flowGraphContext.js +5 -3
  192. package/FlowGraph/flowGraphContext.js.map +1 -1
  193. package/FlowGraph/flowGraphCoordinator.d.ts +15 -1
  194. package/FlowGraph/flowGraphCoordinator.js +47 -16
  195. package/FlowGraph/flowGraphCoordinator.js.map +1 -1
  196. package/FlowGraph/flowGraphEventBlock.d.ts +5 -0
  197. package/FlowGraph/flowGraphEventBlock.js +7 -0
  198. package/FlowGraph/flowGraphEventBlock.js.map +1 -1
  199. package/FlowGraph/flowGraphHostResolver.d.ts +2 -1
  200. package/FlowGraph/flowGraphHostResolver.js.map +1 -1
  201. package/FlowGraph/flowGraphParser.js +60 -2
  202. package/FlowGraph/flowGraphParser.js.map +1 -1
  203. package/FlowGraph/flowGraphValidator.js +0 -4
  204. package/FlowGraph/flowGraphValidator.js.map +1 -1
  205. package/FlowGraph/index.d.ts +2 -0
  206. package/FlowGraph/index.js +2 -0
  207. package/FlowGraph/index.js.map +1 -1
  208. package/FlowGraph/pure.d.ts +2 -0
  209. package/FlowGraph/pure.js +2 -0
  210. package/FlowGraph/pure.js.map +1 -1
  211. package/FlowGraph/serialization.d.ts +4 -2
  212. package/FlowGraph/serialization.js +12 -24
  213. package/FlowGraph/serialization.js.map +1 -1
  214. package/FlowGraph/typeDefinitions.d.ts +9 -1
  215. package/FlowGraph/typeDefinitions.js.map +1 -1
  216. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.d.ts +5 -0
  217. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.js +8 -0
  218. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.js.map +1 -0
  219. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.d.ts +87 -0
  220. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.js +295 -0
  221. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.js.map +1 -0
  222. package/FrameGraph/Node/Blocks/PostProcesses/pure.d.ts +1 -0
  223. package/FrameGraph/Node/Blocks/PostProcesses/pure.js +1 -0
  224. package/FrameGraph/Node/Blocks/PostProcesses/pure.js.map +1 -1
  225. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +4 -4
  226. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
  227. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.d.ts +5 -1
  228. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js +13 -1
  229. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js.map +1 -1
  230. package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.d.ts +1 -0
  231. package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.js +4 -0
  232. package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.js.map +1 -0
  233. package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.pure.d.ts +54 -0
  234. package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.pure.js +155 -0
  235. package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.pure.js.map +1 -0
  236. package/FrameGraph/Node/Blocks/Textures/pure.d.ts +1 -0
  237. package/FrameGraph/Node/Blocks/Textures/pure.js +1 -0
  238. package/FrameGraph/Node/Blocks/Textures/pure.js.map +1 -1
  239. package/FrameGraph/Node/Blocks/allBlocks.pure.js +4 -0
  240. package/FrameGraph/Node/Blocks/allBlocks.pure.js.map +1 -1
  241. package/FrameGraph/Node/Blocks/index.d.ts +2 -0
  242. package/FrameGraph/Node/Blocks/index.js +2 -0
  243. package/FrameGraph/Node/Blocks/index.js.map +1 -1
  244. package/FrameGraph/Node/Blocks/inputBlock.pure.js +20 -1
  245. package/FrameGraph/Node/Blocks/inputBlock.pure.js.map +1 -1
  246. package/FrameGraph/Node/Blocks/pure.d.ts +2 -0
  247. package/FrameGraph/Node/Blocks/pure.js +2 -0
  248. package/FrameGraph/Node/Blocks/pure.js.map +1 -1
  249. package/FrameGraph/Node/Types/nodeRenderGraphTypes.d.ts +4 -2
  250. package/FrameGraph/Node/Types/nodeRenderGraphTypes.js +4 -2
  251. package/FrameGraph/Node/Types/nodeRenderGraphTypes.js.map +1 -1
  252. package/FrameGraph/Node/nodeRenderGraph.js +1 -1
  253. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  254. package/FrameGraph/Tasks/Layers/selectionOutlineTask.js +1 -0
  255. package/FrameGraph/Tasks/Layers/selectionOutlineTask.js.map +1 -1
  256. package/FrameGraph/Tasks/Misc/cullObjectsTask.js +5 -1
  257. package/FrameGraph/Tasks/Misc/cullObjectsTask.js.map +1 -1
  258. package/FrameGraph/Tasks/Misc/lightingVolumeTask.js +1 -0
  259. package/FrameGraph/Tasks/Misc/lightingVolumeTask.js.map +1 -1
  260. package/FrameGraph/Tasks/Misc/minMaxReducerTask.d.ts +62 -0
  261. package/FrameGraph/Tasks/Misc/minMaxReducerTask.js +159 -0
  262. package/FrameGraph/Tasks/Misc/minMaxReducerTask.js.map +1 -0
  263. package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.d.ts +69 -0
  264. package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.js +223 -0
  265. package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.js.map +1 -0
  266. package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +25 -3
  267. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +72 -34
  268. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
  269. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +3 -1
  270. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  271. package/FrameGraph/frameGraph.d.ts +4 -0
  272. package/FrameGraph/frameGraph.js +14 -0
  273. package/FrameGraph/frameGraph.js.map +1 -1
  274. package/FrameGraph/frameGraphObjectList.d.ts +6 -1
  275. package/FrameGraph/frameGraphObjectList.js.map +1 -1
  276. package/FrameGraph/frameGraphRenderContext.d.ts +3 -1
  277. package/FrameGraph/frameGraphRenderContext.js +5 -5
  278. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  279. package/FrameGraph/index.d.ts +2 -0
  280. package/FrameGraph/index.js +2 -0
  281. package/FrameGraph/index.js.map +1 -1
  282. package/FrameGraph/pure.d.ts +2 -0
  283. package/FrameGraph/pure.js +2 -0
  284. package/FrameGraph/pure.js.map +1 -1
  285. package/Inputs/scene.inputManager.d.ts +4 -0
  286. package/Inputs/scene.inputManager.js +50 -8
  287. package/Inputs/scene.inputManager.js.map +1 -1
  288. package/Lights/Clustered/clusteredLightingSceneComponent.pure.d.ts +5 -0
  289. package/Lights/Clustered/clusteredLightingSceneComponent.pure.js +22 -1
  290. package/Lights/Clustered/clusteredLightingSceneComponent.pure.js.map +1 -1
  291. package/Lights/Shadows/cascadedShadowGenerator.pure.js +7 -3
  292. package/Lights/Shadows/cascadedShadowGenerator.pure.js.map +1 -1
  293. package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.d.ts +7 -0
  294. package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.js +8 -0
  295. package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.js.map +1 -0
  296. package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.pure.d.ts +54 -0
  297. package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.pure.js +81 -0
  298. package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.pure.js.map +1 -0
  299. package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.d.ts +7 -0
  300. package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.js +8 -0
  301. package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.js.map +1 -0
  302. package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.pure.d.ts +60 -0
  303. package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.pure.js +90 -0
  304. package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.pure.js.map +1 -0
  305. package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.d.ts +31 -0
  306. package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js +103 -5
  307. package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js.map +1 -1
  308. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js +6 -6
  309. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js.map +1 -1
  310. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.d.ts +26 -1
  311. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js +153 -49
  312. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js.map +1 -1
  313. package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.d.ts +1 -0
  314. package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.js +4 -0
  315. package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.js.map +1 -0
  316. package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.pure.d.ts +83 -0
  317. package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.pure.js +191 -0
  318. package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.pure.js.map +1 -0
  319. package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.d.ts +1 -0
  320. package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.js +4 -0
  321. package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.js.map +1 -0
  322. package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.pure.d.ts +62 -0
  323. package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.pure.js +125 -0
  324. package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.pure.js.map +1 -0
  325. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js +5 -5
  326. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js.map +1 -1
  327. package/Materials/GaussianSplatting/pure.d.ts +4 -0
  328. package/Materials/GaussianSplatting/pure.js +4 -0
  329. package/Materials/GaussianSplatting/pure.js.map +1 -1
  330. package/Materials/Node/Blocks/Dual/imageSourceBlock.pure.d.ts +1 -0
  331. package/Materials/Node/Blocks/Dual/imageSourceBlock.pure.js +12 -0
  332. package/Materials/Node/Blocks/Dual/imageSourceBlock.pure.js.map +1 -1
  333. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js +11 -1
  334. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js.map +1 -1
  335. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js +17 -2
  336. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js.map +1 -1
  337. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js +2 -2
  338. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js.map +1 -1
  339. package/Materials/Node/nodeMaterial.pure.d.ts +4 -0
  340. package/Materials/Node/nodeMaterial.pure.js +4 -0
  341. package/Materials/Node/nodeMaterial.pure.js.map +1 -1
  342. package/Materials/Node/nodeMaterialBuildState.d.ts +1 -1
  343. package/Materials/Node/nodeMaterialBuildState.js +25 -3
  344. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  345. package/Materials/PBR/openpbrMaterial.pure.d.ts +2 -0
  346. package/Materials/PBR/pbrBaseMaterial.pure.d.ts +2 -0
  347. package/Materials/Textures/Procedurals/proceduralTexture.pure.d.ts +14 -14
  348. package/Materials/Textures/Procedurals/proceduralTexture.pure.js +37 -13
  349. package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
  350. package/Materials/Textures/baseTexture.pure.js +3 -0
  351. package/Materials/Textures/baseTexture.pure.js.map +1 -1
  352. package/Materials/Textures/cubeTexture.pure.js +1 -1
  353. package/Materials/Textures/cubeTexture.pure.js.map +1 -1
  354. package/Materials/Textures/internalTexture.d.ts +8 -1
  355. package/Materials/Textures/internalTexture.js +9 -2
  356. package/Materials/Textures/internalTexture.js.map +1 -1
  357. package/Materials/Textures/mirrorTexture.pure.js +3 -1
  358. package/Materials/Textures/mirrorTexture.pure.js.map +1 -1
  359. package/Materials/Textures/rawTexture2DArray.functions.d.ts +3 -3
  360. package/Materials/Textures/rawTexture2DArray.functions.js.map +1 -1
  361. package/Materials/Textures/rawTexture3D.d.ts +1 -1
  362. package/Materials/Textures/rawTexture3D.js +1 -1
  363. package/Materials/Textures/rawTexture3D.js.map +1 -1
  364. package/Materials/Textures/texture.pure.js +1 -1
  365. package/Materials/Textures/texture.pure.js.map +1 -1
  366. package/Materials/Textures/textureHelper.functions.d.ts +14 -0
  367. package/Materials/Textures/textureHelper.functions.js +24 -0
  368. package/Materials/Textures/textureHelper.functions.js.map +1 -1
  369. package/Materials/ditheredTileFadeMaterialPlugin.d.ts +210 -0
  370. package/Materials/ditheredTileFadeMaterialPlugin.js +509 -0
  371. package/Materials/ditheredTileFadeMaterialPlugin.js.map +1 -0
  372. package/Materials/effectRenderer.pure.d.ts +4 -0
  373. package/Materials/effectRenderer.pure.js +3 -2
  374. package/Materials/effectRenderer.pure.js.map +1 -1
  375. package/Materials/index.d.ts +5 -0
  376. package/Materials/index.js +5 -0
  377. package/Materials/index.js.map +1 -1
  378. package/Materials/material.pure.js +25 -12
  379. package/Materials/material.pure.js.map +1 -1
  380. package/Materials/materialHelper.geometryrendering.d.ts +46 -1
  381. package/Materials/materialHelper.geometryrendering.js +105 -8
  382. package/Materials/materialHelper.geometryrendering.js.map +1 -1
  383. package/Materials/prepass.defines.d.ts +2 -0
  384. package/Materials/prepass.defines.js +2 -0
  385. package/Materials/prepass.defines.js.map +1 -1
  386. package/Materials/pure.d.ts +5 -0
  387. package/Materials/pure.js +5 -0
  388. package/Materials/pure.js.map +1 -1
  389. package/Materials/standardMaterial.pure.d.ts +10 -0
  390. package/Materials/standardMaterial.pure.js +30 -5
  391. package/Materials/standardMaterial.pure.js.map +1 -1
  392. package/Meshes/Builders/polygonBuilder.pure.d.ts +4 -0
  393. package/Meshes/Builders/polygonBuilder.pure.js +3 -0
  394. package/Meshes/Builders/polygonBuilder.pure.js.map +1 -1
  395. package/Meshes/GaussianSplatting/gaussianPointSplattingController.d.ts +8 -0
  396. package/Meshes/GaussianSplatting/gaussianPointSplattingController.js +11 -0
  397. package/Meshes/GaussianSplatting/gaussianPointSplattingController.js.map +1 -0
  398. package/Meshes/GaussianSplatting/gaussianPointSplattingController.pure.d.ts +231 -0
  399. package/Meshes/GaussianSplatting/gaussianPointSplattingController.pure.js +1212 -0
  400. package/Meshes/GaussianSplatting/gaussianPointSplattingController.pure.js.map +1 -0
  401. package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.d.ts +14 -0
  402. package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.js +15 -0
  403. package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.js.map +1 -0
  404. package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.pure.d.ts +285 -0
  405. package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.pure.js +812 -0
  406. package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.pure.js.map +1 -0
  407. package/Meshes/GaussianSplatting/gaussianSplatting.functions.d.ts +19 -0
  408. package/Meshes/GaussianSplatting/gaussianSplatting.functions.js +23 -0
  409. package/Meshes/GaussianSplatting/gaussianSplatting.functions.js.map +1 -0
  410. package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +1 -0
  411. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +2 -0
  412. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  413. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.d.ts +163 -14
  414. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +239 -24
  415. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
  416. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +34 -4
  417. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +125 -25
  418. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
  419. package/Meshes/GaussianSplatting/pure.d.ts +2 -0
  420. package/Meshes/GaussianSplatting/pure.js +2 -0
  421. package/Meshes/GaussianSplatting/pure.js.map +1 -1
  422. package/Meshes/Node/Blocks/booleanGeometryBlock.pure.js +25 -11
  423. package/Meshes/Node/Blocks/booleanGeometryBlock.pure.js.map +1 -1
  424. package/Meshes/abstractMesh.pure.d.ts +30 -0
  425. package/Meshes/abstractMesh.pure.js +54 -0
  426. package/Meshes/abstractMesh.pure.js.map +1 -1
  427. package/Meshes/index.d.ts +2 -0
  428. package/Meshes/index.js +2 -0
  429. package/Meshes/index.js.map +1 -1
  430. package/Meshes/instancedMesh.pure.d.ts +5 -0
  431. package/Meshes/instancedMesh.pure.js +12 -0
  432. package/Meshes/instancedMesh.pure.js.map +1 -1
  433. package/Meshes/mesh.pure.js +23 -8
  434. package/Meshes/mesh.pure.js.map +1 -1
  435. package/Meshes/meshBlendingTag.d.ts +47 -0
  436. package/Meshes/meshBlendingTag.js +64 -0
  437. package/Meshes/meshBlendingTag.js.map +1 -0
  438. package/Meshes/polygonMesh.js +2 -2
  439. package/Meshes/polygonMesh.js.map +1 -1
  440. package/Meshes/pure.d.ts +2 -0
  441. package/Meshes/pure.js +2 -0
  442. package/Meshes/pure.js.map +1 -1
  443. package/Meshes/subMesh.pure.d.ts +11 -2
  444. package/Meshes/subMesh.pure.js +20 -5
  445. package/Meshes/subMesh.pure.js.map +1 -1
  446. package/Meshes/thinInstanceMesh.pure.js +1 -0
  447. package/Meshes/thinInstanceMesh.pure.js.map +1 -1
  448. package/Misc/andOrNotEvaluator.js +4 -0
  449. package/Misc/andOrNotEvaluator.js.map +1 -1
  450. package/Misc/fileTools.pure.js +21 -0
  451. package/Misc/fileTools.pure.js.map +1 -1
  452. package/Misc/minMaxReducer.pure.d.ts +6 -0
  453. package/Misc/minMaxReducer.pure.js +10 -0
  454. package/Misc/minMaxReducer.pure.js.map +1 -1
  455. package/Misc/snapshotRenderingHelper.js +2 -2
  456. package/Misc/snapshotRenderingHelper.js.map +1 -1
  457. package/Misc/thinMinMaxReducer.d.ts +19 -2
  458. package/Misc/thinMinMaxReducer.js +74 -21
  459. package/Misc/thinMinMaxReducer.js.map +1 -1
  460. package/Misc/tools.pure.js +1 -1
  461. package/Misc/tools.pure.js.map +1 -1
  462. package/Particles/Node/Blocks/Update/updateNoiseBlock.pure.js +19 -7
  463. package/Particles/Node/Blocks/Update/updateNoiseBlock.pure.js.map +1 -1
  464. package/Particles/Node/Blocks/particleSourceTextureBlock.pure.js +3 -2
  465. package/Particles/Node/Blocks/particleSourceTextureBlock.pure.js.map +1 -1
  466. package/Particles/gpuParticleSystem.pure.d.ts +4 -0
  467. package/Particles/gpuParticleSystem.pure.js +101 -32
  468. package/Particles/gpuParticleSystem.pure.js.map +1 -1
  469. package/Particles/particle.js +3 -2
  470. package/Particles/particle.js.map +1 -1
  471. package/Particles/solidParticleSystem.js +7 -1
  472. package/Particles/solidParticleSystem.js.map +1 -1
  473. package/Particles/thinParticleSystem.function.d.ts +6 -0
  474. package/Particles/thinParticleSystem.function.js +144 -88
  475. package/Particles/thinParticleSystem.function.js.map +1 -1
  476. package/Particles/thinParticleSystem.pure.d.ts +8 -0
  477. package/Particles/thinParticleSystem.pure.js +154 -28
  478. package/Particles/thinParticleSystem.pure.js.map +1 -1
  479. package/Particles/webgl2ParticleSystem.pure.d.ts +1 -0
  480. package/Particles/webgl2ParticleSystem.pure.js +12 -4
  481. package/Particles/webgl2ParticleSystem.pure.js.map +1 -1
  482. package/Physics/v2/ragdoll.d.ts +2 -4
  483. package/Physics/v2/ragdoll.js +11 -4
  484. package/Physics/v2/ragdoll.js.map +1 -1
  485. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js +7 -0
  486. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js.map +1 -1
  487. package/PostProcesses/index.d.ts +2 -0
  488. package/PostProcesses/index.js +2 -0
  489. package/PostProcesses/index.js.map +1 -1
  490. package/PostProcesses/meshBlendingBlueNoise.d.ts +15 -0
  491. package/PostProcesses/meshBlendingBlueNoise.js +77 -0
  492. package/PostProcesses/meshBlendingBlueNoise.js.map +1 -0
  493. package/PostProcesses/meshBlendingPostProcess.d.ts +131 -0
  494. package/PostProcesses/meshBlendingPostProcess.js +315 -0
  495. package/PostProcesses/meshBlendingPostProcess.js.map +1 -0
  496. package/PostProcesses/pure.d.ts +2 -0
  497. package/PostProcesses/pure.js +2 -0
  498. package/PostProcesses/pure.js.map +1 -1
  499. package/PostProcesses/thinMeshBlendingPostProcess.d.ts +339 -0
  500. package/PostProcesses/thinMeshBlendingPostProcess.js +771 -0
  501. package/PostProcesses/thinMeshBlendingPostProcess.js.map +1 -0
  502. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js +6 -6
  503. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js.map +1 -1
  504. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.d.ts +12 -0
  505. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js +50 -25
  506. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js.map +1 -1
  507. package/Rendering/boundingBoxRenderer.pure.js +2 -1
  508. package/Rendering/boundingBoxRenderer.pure.js.map +1 -1
  509. package/Rendering/depthRenderer.pure.d.ts +9 -0
  510. package/Rendering/depthRenderer.pure.js +15 -4
  511. package/Rendering/depthRenderer.pure.js.map +1 -1
  512. package/Rendering/edgesRenderer.pure.d.ts +4 -2
  513. package/Rendering/edgesRenderer.pure.js +11 -2
  514. package/Rendering/edgesRenderer.pure.js.map +1 -1
  515. package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +14 -0
  516. package/Rendering/fluidRenderer/fluidRenderingObject.js +26 -0
  517. package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
  518. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.d.ts +13 -3
  519. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +22 -9
  520. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -1
  521. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +3 -0
  522. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
  523. package/Rendering/geometryBufferRenderer.pure.d.ts +38 -4
  524. package/Rendering/geometryBufferRenderer.pure.js +130 -18
  525. package/Rendering/geometryBufferRenderer.pure.js.map +1 -1
  526. package/Rendering/objectRenderer.d.ts +7 -1
  527. package/Rendering/objectRenderer.js +45 -7
  528. package/Rendering/objectRenderer.js.map +1 -1
  529. package/Rendering/outlineRenderer.pure.js +6 -2
  530. package/Rendering/outlineRenderer.pure.js.map +1 -1
  531. package/Rendering/prePassRenderer.pure.js +3 -3
  532. package/Rendering/prePassRenderer.pure.js.map +1 -1
  533. package/Rendering/renderingManager.d.ts +1 -1
  534. package/Rendering/renderingManager.js +5 -4
  535. package/Rendering/renderingManager.js.map +1 -1
  536. package/Shaders/ShadersInclude/defaultFragmentAlpha.d.ts +5 -0
  537. package/Shaders/ShadersInclude/defaultFragmentAlpha.js +34 -0
  538. package/Shaders/ShadersInclude/defaultFragmentAlpha.js.map +1 -0
  539. package/Shaders/ShadersInclude/gaussianSplatting.js +3 -1
  540. package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
  541. package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js +5 -1
  542. package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js.map +1 -1
  543. package/Shaders/ShadersInclude/geometryRenderingFragment.d.ts +5 -0
  544. package/Shaders/ShadersInclude/geometryRenderingFragment.js +74 -0
  545. package/Shaders/ShadersInclude/geometryRenderingFragment.js.map +1 -0
  546. package/Shaders/ShadersInclude/lightsFragmentFunctions.js +27 -3
  547. package/Shaders/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
  548. package/Shaders/ShadersInclude/mrtFragmentDeclaration.js +89 -0
  549. package/Shaders/ShadersInclude/mrtFragmentDeclaration.js.map +1 -1
  550. package/Shaders/ShadersInclude/oitDeclaration.js +1 -1
  551. package/Shaders/ShadersInclude/oitDeclaration.js.map +1 -1
  552. package/Shaders/ShadersInclude/openpbrBlockPrePass.js +24 -17
  553. package/Shaders/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
  554. package/Shaders/ShadersInclude/pbrBlockPrePass.js +27 -20
  555. package/Shaders/ShadersInclude/pbrBlockPrePass.js.map +1 -1
  556. package/Shaders/ShadersInclude/pbrDebug.js +6 -2
  557. package/Shaders/ShadersInclude/pbrDebug.js.map +1 -1
  558. package/Shaders/ShadersInclude/prePassDeclaration.js +95 -2
  559. package/Shaders/ShadersInclude/prePassDeclaration.js.map +1 -1
  560. package/Shaders/default.fragment.js +31 -40
  561. package/Shaders/default.fragment.js.map +1 -1
  562. package/Shaders/depthOfField.fragment.js +13 -9
  563. package/Shaders/depthOfField.fragment.js.map +1 -1
  564. package/Shaders/fluidRenderingParticleDepth.vertex.js +16 -1
  565. package/Shaders/fluidRenderingParticleDepth.vertex.js.map +1 -1
  566. package/Shaders/fluidRenderingParticleThickness.vertex.js +16 -1
  567. package/Shaders/fluidRenderingParticleThickness.vertex.js.map +1 -1
  568. package/Shaders/gaussianSplatting.fragment.js +63 -3
  569. package/Shaders/gaussianSplatting.fragment.js.map +1 -1
  570. package/Shaders/gaussianSplatting.vertex.js +80 -0
  571. package/Shaders/gaussianSplatting.vertex.js.map +1 -1
  572. package/Shaders/geometry.fragment.js +17 -11
  573. package/Shaders/geometry.fragment.js.map +1 -1
  574. package/Shaders/gpuRenderParticles.fragment.js +43 -1
  575. package/Shaders/gpuRenderParticles.fragment.js.map +1 -1
  576. package/Shaders/gpuRenderParticles.vertex.js +96 -16
  577. package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
  578. package/Shaders/meshBlending.fragment.d.ts +5 -0
  579. package/Shaders/meshBlending.fragment.js +519 -0
  580. package/Shaders/meshBlending.fragment.js.map +1 -0
  581. package/Shaders/minmaxRedux.fragment.js +6 -1
  582. package/Shaders/minmaxRedux.fragment.js.map +1 -1
  583. package/Shaders/particles.fragment.js +43 -1
  584. package/Shaders/particles.fragment.js.map +1 -1
  585. package/Shaders/particles.vertex.js +84 -3
  586. package/Shaders/particles.vertex.js.map +1 -1
  587. package/Shaders/sprites.fragment.js +52 -2
  588. package/Shaders/sprites.fragment.js.map +1 -1
  589. package/Shaders/sprites.vertex.js +62 -1
  590. package/Shaders/sprites.vertex.js.map +1 -1
  591. package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.d.ts +5 -0
  592. package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.js +33 -0
  593. package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.js.map +1 -0
  594. package/ShadersWGSL/ShadersInclude/gaussianPointSplatting.d.ts +5 -0
  595. package/ShadersWGSL/ShadersInclude/gaussianPointSplatting.js +65 -0
  596. package/ShadersWGSL/ShadersInclude/gaussianPointSplatting.js.map +1 -0
  597. package/ShadersWGSL/ShadersInclude/gaussianPointSplattingScan.d.ts +5 -0
  598. package/ShadersWGSL/ShadersInclude/gaussianPointSplattingScan.js +17 -0
  599. package/ShadersWGSL/ShadersInclude/gaussianPointSplattingScan.js.map +1 -0
  600. package/ShadersWGSL/ShadersInclude/gaussianSplatting.d.ts +1 -0
  601. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js +6 -78
  602. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js.map +1 -1
  603. package/ShadersWGSL/ShadersInclude/gaussianSplattingFragmentDeclaration.js +2 -2
  604. package/ShadersWGSL/ShadersInclude/gaussianSplattingFragmentDeclaration.js.map +1 -1
  605. package/ShadersWGSL/ShadersInclude/gaussianSplattingShared.d.ts +5 -0
  606. package/ShadersWGSL/ShadersInclude/gaussianSplattingShared.js +79 -0
  607. package/ShadersWGSL/ShadersInclude/gaussianSplattingShared.js.map +1 -0
  608. package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.d.ts +6 -0
  609. package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.js +76 -0
  610. package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.js.map +1 -0
  611. package/ShadersWGSL/ShadersInclude/lightFragment.js +1 -1
  612. package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
  613. package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js +27 -3
  614. package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
  615. package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.d.ts +5 -0
  616. package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.js +18 -0
  617. package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.js.map +1 -0
  618. package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.d.ts +1 -0
  619. package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js +11 -25
  620. package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
  621. package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.d.ts +1 -0
  622. package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js +11 -25
  623. package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js.map +1 -1
  624. package/ShadersWGSL/ShadersInclude/pbrDebug.js +5 -1
  625. package/ShadersWGSL/ShadersInclude/pbrDebug.js.map +1 -1
  626. package/ShadersWGSL/ShadersInclude/prePassDeclaration.js +6 -1
  627. package/ShadersWGSL/ShadersInclude/prePassDeclaration.js.map +1 -1
  628. package/ShadersWGSL/default.fragment.js +17 -48
  629. package/ShadersWGSL/default.fragment.js.map +1 -1
  630. package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js +15 -2
  631. package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js.map +1 -1
  632. package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js +15 -2
  633. package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js.map +1 -1
  634. package/ShadersWGSL/gaussianPointSplattingBlit.fragment.d.ts +5 -0
  635. package/ShadersWGSL/gaussianPointSplattingBlit.fragment.js +22 -0
  636. package/ShadersWGSL/gaussianPointSplattingBlit.fragment.js.map +1 -0
  637. package/ShadersWGSL/gaussianPointSplattingBlit.vertex.d.ts +5 -0
  638. package/ShadersWGSL/gaussianPointSplattingBlit.vertex.js +19 -0
  639. package/ShadersWGSL/gaussianPointSplattingBlit.vertex.js.map +1 -0
  640. package/ShadersWGSL/gaussianPointSplattingDepthBlit.fragment.d.ts +5 -0
  641. package/ShadersWGSL/gaussianPointSplattingDepthBlit.fragment.js +21 -0
  642. package/ShadersWGSL/gaussianPointSplattingDepthBlit.fragment.js.map +1 -0
  643. package/ShadersWGSL/gaussianSplatting.fragment.js +63 -2
  644. package/ShadersWGSL/gaussianSplatting.fragment.js.map +1 -1
  645. package/ShadersWGSL/gaussianSplatting.vertex.js +82 -1
  646. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  647. package/ShadersWGSL/gaussianSplattingDepth.vertex.js +2 -1
  648. package/ShadersWGSL/gaussianSplattingDepth.vertex.js.map +1 -1
  649. package/ShadersWGSL/gaussianSplattingVoxel.vertex.js +2 -1
  650. package/ShadersWGSL/gaussianSplattingVoxel.vertex.js.map +1 -1
  651. package/ShadersWGSL/geometry.fragment.js +37 -2
  652. package/ShadersWGSL/geometry.fragment.js.map +1 -1
  653. package/ShadersWGSL/gpsHiZBuild.compute.d.ts +5 -0
  654. package/ShadersWGSL/gpsHiZBuild.compute.js +16 -0
  655. package/ShadersWGSL/gpsHiZBuild.compute.js.map +1 -0
  656. package/ShadersWGSL/gpsPartition.compute.d.ts +5 -0
  657. package/ShadersWGSL/gpsPartition.compute.js +27 -0
  658. package/ShadersWGSL/gpsPartition.compute.js.map +1 -0
  659. package/ShadersWGSL/gpsPreprocess.compute.d.ts +5 -0
  660. package/ShadersWGSL/gpsPreprocess.compute.js +86 -0
  661. package/ShadersWGSL/gpsPreprocess.compute.js.map +1 -0
  662. package/ShadersWGSL/gpsResolve.compute.d.ts +5 -0
  663. package/ShadersWGSL/gpsResolve.compute.js +41 -0
  664. package/ShadersWGSL/gpsResolve.compute.js.map +1 -0
  665. package/ShadersWGSL/gpsScanAdd.compute.d.ts +5 -0
  666. package/ShadersWGSL/gpsScanAdd.compute.js +22 -0
  667. package/ShadersWGSL/gpsScanAdd.compute.js.map +1 -0
  668. package/ShadersWGSL/gpsScanBlocks.compute.d.ts +5 -0
  669. package/ShadersWGSL/gpsScanBlocks.compute.js +23 -0
  670. package/ShadersWGSL/gpsScanBlocks.compute.js.map +1 -0
  671. package/ShadersWGSL/gpsScanSums.compute.d.ts +5 -0
  672. package/ShadersWGSL/gpsScanSums.compute.js +30 -0
  673. package/ShadersWGSL/gpsScanSums.compute.js.map +1 -0
  674. package/ShadersWGSL/gpsSplat.compute.d.ts +5 -0
  675. package/ShadersWGSL/gpsSplat.compute.js +37 -0
  676. package/ShadersWGSL/gpsSplat.compute.js.map +1 -0
  677. package/ShadersWGSL/gpuRenderParticles.fragment.js +47 -2
  678. package/ShadersWGSL/gpuRenderParticles.fragment.js.map +1 -1
  679. package/ShadersWGSL/gpuRenderParticles.vertex.js +110 -7
  680. package/ShadersWGSL/gpuRenderParticles.vertex.js.map +1 -1
  681. package/ShadersWGSL/meshBlending.fragment.d.ts +5 -0
  682. package/ShadersWGSL/meshBlending.fragment.js +576 -0
  683. package/ShadersWGSL/meshBlending.fragment.js.map +1 -0
  684. package/ShadersWGSL/minmaxRedux.fragment.js +20 -3
  685. package/ShadersWGSL/minmaxRedux.fragment.js.map +1 -1
  686. package/ShadersWGSL/openpbr.fragment.js +2 -1
  687. package/ShadersWGSL/openpbr.fragment.js.map +1 -1
  688. package/ShadersWGSL/particles.fragment.js +45 -1
  689. package/ShadersWGSL/particles.fragment.js.map +1 -1
  690. package/ShadersWGSL/particles.vertex.js +86 -4
  691. package/ShadersWGSL/particles.vertex.js.map +1 -1
  692. package/ShadersWGSL/pbr.fragment.js +2 -1
  693. package/ShadersWGSL/pbr.fragment.js.map +1 -1
  694. package/ShadersWGSL/sprites.fragment.js +56 -2
  695. package/ShadersWGSL/sprites.fragment.js.map +1 -1
  696. package/ShadersWGSL/sprites.vertex.js +62 -1
  697. package/ShadersWGSL/sprites.vertex.js.map +1 -1
  698. package/Sprites/spriteManager.d.ts +13 -0
  699. package/Sprites/spriteManager.js +15 -0
  700. package/Sprites/spriteManager.js.map +1 -1
  701. package/Sprites/spriteRenderer.d.ts +24 -1
  702. package/Sprites/spriteRenderer.js +368 -50
  703. package/Sprites/spriteRenderer.js.map +1 -1
  704. package/Sprites/thinSprite.d.ts +4 -0
  705. package/Sprites/thinSprite.js +4 -0
  706. package/Sprites/thinSprite.js.map +1 -1
  707. package/States/alphaCullingState.d.ts +3 -1
  708. package/States/alphaCullingState.js +18 -3
  709. package/States/alphaCullingState.js.map +1 -1
  710. package/XR/features/WebXRSpaceWarp.pure.js +2 -1
  711. package/XR/features/WebXRSpaceWarp.pure.js.map +1 -1
  712. package/XR/webXRDefaultExperience.d.ts +5 -1
  713. package/XR/webXRDefaultExperience.js.map +1 -1
  714. package/XR/webXREnterExitUI.d.ts +2 -1
  715. package/XR/webXREnterExitUI.js.map +1 -1
  716. package/assetContainer.d.ts +1 -0
  717. package/assetContainer.js +5 -1
  718. package/assetContainer.js.map +1 -1
  719. package/package.json +1 -1
  720. package/scene.pure.d.ts +36 -2
  721. package/scene.pure.js +63 -4
  722. package/scene.pure.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"engine.pure.js","sourceRoot":"","sources":["../../../../dev/core/src/Engines/engine.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { type Nullable } from \"../types\";\r\nimport { type Scene } from \"../scene.pure\";\r\nimport { InternalTexture, InternalTextureSource } from \"../Materials/Textures/internalTexture\";\r\nimport { type ILoadingScreen } from \"../Loading/loadingScreen.pure\";\r\nimport { EngineStore } from \"./engineStore\";\r\nimport { type WebGLPipelineContext } from \"./WebGL/webGLPipelineContext\";\r\nimport { type IPipelineContext } from \"./IPipelineContext\";\r\nimport { type EngineOptions, ThinEngine } from \"./thinEngine.pure\";\r\nimport { Constants } from \"./constants\";\r\nimport { type IViewportLike, type IColor4Like } from \"../Maths/math.like\";\r\nimport { PerformanceMonitor } from \"../Misc/performanceMonitor\";\r\nimport { type DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { WebGLDataBuffer } from \"../Meshes/WebGL/webGLDataBuffer\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { type RenderTargetWrapper } from \"./renderTargetWrapper\";\r\nimport { WebGLHardwareTexture } from \"./WebGL/webGLHardwareTexture\";\r\nimport { type WebGLRenderTargetWrapper } from \"./WebGL/webGLRenderTargetWrapper\";\r\n\r\nimport { type PostProcess } from \"../PostProcesses/postProcess.pure\";\r\nimport { AbstractEngine } from \"./abstractEngine.pure\";\r\nimport {\r\n CreateImageBitmapFromSource,\r\n ExitFullscreen,\r\n ExitPointerlock,\r\n GetFontOffset,\r\n RequestFullscreen,\r\n RequestPointerlock,\r\n ResizeImageBitmap,\r\n _CommonDispose,\r\n _CommonInit,\r\n} from \"./engine.common\";\r\nimport { PerfCounter } from \"../Misc/perfCounter\";\r\nimport { _RetryWithInterval } from \"core/Misc/timingTools\";\r\nimport { RegisterAbstractEngineDom } from \"./AbstractEngine/abstractEngine.dom.pure\";\r\nimport { RegisterAbstractEngineRenderPass } from \"./AbstractEngine/abstractEngine.renderPass.pure\";\r\n\r\n/**\r\n * The engine class is responsible for interfacing with all lower-level APIs such as WebGL and Audio\r\n */\r\nexport class Engine extends ThinEngine {\r\n // Const statics\r\n\r\n /** Defines that alpha blending is disabled */\r\n public static readonly ALPHA_DISABLE = Constants.ALPHA_DISABLE;\r\n /** Defines that alpha blending to SRC ALPHA * SRC + DEST */\r\n public static readonly ALPHA_ADD = Constants.ALPHA_ADD;\r\n /** Defines that alpha blending to SRC ALPHA * SRC + (1 - SRC ALPHA) * DEST */\r\n public static readonly ALPHA_COMBINE = Constants.ALPHA_COMBINE;\r\n /** Defines that alpha blending to DEST - SRC * DEST */\r\n public static readonly ALPHA_SUBTRACT = Constants.ALPHA_SUBTRACT;\r\n /** Defines that alpha blending to SRC * DEST */\r\n public static readonly ALPHA_MULTIPLY = Constants.ALPHA_MULTIPLY;\r\n /** Defines that alpha blending to SRC ALPHA * SRC + (1 - SRC) * DEST */\r\n public static readonly ALPHA_MAXIMIZED = Constants.ALPHA_MAXIMIZED;\r\n /** Defines that alpha blending to SRC + DEST */\r\n public static readonly ALPHA_ONEONE = Constants.ALPHA_ONEONE;\r\n /** Defines that alpha blending to SRC + (1 - SRC ALPHA) * DEST */\r\n public static readonly ALPHA_PREMULTIPLIED = Constants.ALPHA_PREMULTIPLIED;\r\n /**\r\n * Defines that alpha blending to SRC + (1 - SRC ALPHA) * DEST\r\n * Alpha will be set to (1 - SRC ALPHA) * DEST ALPHA\r\n */\r\n public static readonly ALPHA_PREMULTIPLIED_PORTERDUFF = Constants.ALPHA_PREMULTIPLIED_PORTERDUFF;\r\n /** Defines that alpha blending to CST * SRC + (1 - CST) * DEST */\r\n public static readonly ALPHA_INTERPOLATE = Constants.ALPHA_INTERPOLATE;\r\n /**\r\n * Defines that alpha blending to SRC + (1 - SRC) * DEST\r\n * Alpha will be set to SRC ALPHA + (1 - SRC ALPHA) * DEST ALPHA\r\n */\r\n public static readonly ALPHA_SCREENMODE = Constants.ALPHA_SCREENMODE;\r\n\r\n /** Defines that the resource is not delayed*/\r\n public static readonly DELAYLOADSTATE_NONE = Constants.DELAYLOADSTATE_NONE;\r\n /** Defines that the resource was successfully delay loaded */\r\n public static readonly DELAYLOADSTATE_LOADED = Constants.DELAYLOADSTATE_LOADED;\r\n /** Defines that the resource is currently delay loading */\r\n public static readonly DELAYLOADSTATE_LOADING = Constants.DELAYLOADSTATE_LOADING;\r\n /** Defines that the resource is delayed and has not started loading */\r\n public static readonly DELAYLOADSTATE_NOTLOADED = Constants.DELAYLOADSTATE_NOTLOADED;\r\n\r\n // Depht or Stencil test Constants.\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will never pass. i.e. Nothing will be drawn */\r\n public static readonly NEVER = Constants.NEVER;\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will always pass. i.e. Pixels will be drawn in the order they are drawn */\r\n public static readonly ALWAYS = Constants.ALWAYS;\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is less than the stored value */\r\n public static readonly LESS = Constants.LESS;\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is equals to the stored value */\r\n public static readonly EQUAL = Constants.EQUAL;\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is less than or equal to the stored value */\r\n public static readonly LEQUAL = Constants.LEQUAL;\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is greater than the stored value */\r\n public static readonly GREATER = Constants.GREATER;\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is greater than or equal to the stored value */\r\n public static readonly GEQUAL = Constants.GEQUAL;\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is not equal to the stored value */\r\n public static readonly NOTEQUAL = Constants.NOTEQUAL;\r\n\r\n // Stencil Actions Constants.\r\n /** Passed to stencilOperation to specify that stencil value must be kept */\r\n public static readonly KEEP = Constants.KEEP;\r\n /** Passed to stencilOperation to specify that stencil value must be replaced */\r\n public static readonly REPLACE = Constants.REPLACE;\r\n /** Passed to stencilOperation to specify that stencil value must be incremented */\r\n public static readonly INCR = Constants.INCR;\r\n /** Passed to stencilOperation to specify that stencil value must be decremented */\r\n public static readonly DECR = Constants.DECR;\r\n /** Passed to stencilOperation to specify that stencil value must be inverted */\r\n public static readonly INVERT = Constants.INVERT;\r\n /** Passed to stencilOperation to specify that stencil value must be incremented with wrapping */\r\n public static readonly INCR_WRAP = Constants.INCR_WRAP;\r\n /** Passed to stencilOperation to specify that stencil value must be decremented with wrapping */\r\n public static readonly DECR_WRAP = Constants.DECR_WRAP;\r\n\r\n /** Texture is not repeating outside of 0..1 UVs */\r\n public static readonly TEXTURE_CLAMP_ADDRESSMODE = Constants.TEXTURE_CLAMP_ADDRESSMODE;\r\n /** Texture is repeating outside of 0..1 UVs */\r\n public static readonly TEXTURE_WRAP_ADDRESSMODE = Constants.TEXTURE_WRAP_ADDRESSMODE;\r\n /** Texture is repeating and mirrored */\r\n public static readonly TEXTURE_MIRROR_ADDRESSMODE = Constants.TEXTURE_MIRROR_ADDRESSMODE;\r\n\r\n /** ALPHA */\r\n public static readonly TEXTUREFORMAT_ALPHA = Constants.TEXTUREFORMAT_ALPHA;\r\n /** LUMINANCE */\r\n public static readonly TEXTUREFORMAT_LUMINANCE = Constants.TEXTUREFORMAT_LUMINANCE;\r\n /** LUMINANCE_ALPHA */\r\n public static readonly TEXTUREFORMAT_LUMINANCE_ALPHA = Constants.TEXTUREFORMAT_LUMINANCE_ALPHA;\r\n /** RGB */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGB = Constants.TEXTUREFORMAT_RGB;\r\n /** RGBA */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGBA = Constants.TEXTUREFORMAT_RGBA;\r\n /** RED */\r\n public static readonly TEXTUREFORMAT_RED = Constants.TEXTUREFORMAT_RED;\r\n /** RED (2nd reference) */\r\n public static readonly TEXTUREFORMAT_R = Constants.TEXTUREFORMAT_R;\r\n /** RED unsigned short normed to [0, 1] **/\r\n public static readonly TEXTUREFORMAT_R16_UNORM = Constants.TEXTUREFORMAT_R16_UNORM;\r\n /** RG unsigned short normed to [0, 1] **/\r\n public static readonly TEXTUREFORMAT_RG16_UNORM = Constants.TEXTUREFORMAT_RG16_UNORM;\r\n /** RGB unsigned short normed to [0, 1] **/\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGB16_UNORM = Constants.TEXTUREFORMAT_RGB16_UNORM;\r\n /** RGBA unsigned short normed to [0, 1] **/\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGBA16_UNORM = Constants.TEXTUREFORMAT_RGBA16_UNORM;\r\n /** RED signed short normed to [-1, 1] **/\r\n public static readonly TEXTUREFORMAT_R16_SNORM = Constants.TEXTUREFORMAT_R16_SNORM;\r\n /** RG signed short normed to [-1, 1] **/\r\n public static readonly TEXTUREFORMAT_RG16_SNORM = Constants.TEXTUREFORMAT_RG16_SNORM;\r\n /** RGB signed short normed to [-1, 1] **/\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGB16_SNORM = Constants.TEXTUREFORMAT_RGB16_SNORM;\r\n /** RGBA signed short normed to [-1, 1] **/\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGBA16_SNORM = Constants.TEXTUREFORMAT_RGBA16_SNORM;\r\n /** RG */\r\n public static readonly TEXTUREFORMAT_RG = Constants.TEXTUREFORMAT_RG;\r\n /** RED_INTEGER */\r\n public static readonly TEXTUREFORMAT_RED_INTEGER = Constants.TEXTUREFORMAT_RED_INTEGER;\r\n /** RED_INTEGER (2nd reference) */\r\n public static readonly TEXTUREFORMAT_R_INTEGER = Constants.TEXTUREFORMAT_R_INTEGER;\r\n /** RG_INTEGER */\r\n public static readonly TEXTUREFORMAT_RG_INTEGER = Constants.TEXTUREFORMAT_RG_INTEGER;\r\n /** RGB_INTEGER */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGB_INTEGER = Constants.TEXTUREFORMAT_RGB_INTEGER;\r\n /** RGBA_INTEGER */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGBA_INTEGER = Constants.TEXTUREFORMAT_RGBA_INTEGER;\r\n\r\n /** UNSIGNED_BYTE */\r\n public static readonly TEXTURETYPE_UNSIGNED_BYTE = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n /** @deprecated use more explicit TEXTURETYPE_UNSIGNED_BYTE instead. Use TEXTURETYPE_UNSIGNED_INTEGER for 32bits values.*/\r\n public static readonly TEXTURETYPE_UNSIGNED_INT = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n /** FLOAT */\r\n public static readonly TEXTURETYPE_FLOAT = Constants.TEXTURETYPE_FLOAT;\r\n /** HALF_FLOAT */\r\n public static readonly TEXTURETYPE_HALF_FLOAT = Constants.TEXTURETYPE_HALF_FLOAT;\r\n /** BYTE */\r\n public static readonly TEXTURETYPE_BYTE = Constants.TEXTURETYPE_BYTE;\r\n /** SHORT */\r\n public static readonly TEXTURETYPE_SHORT = Constants.TEXTURETYPE_SHORT;\r\n /** UNSIGNED_SHORT */\r\n public static readonly TEXTURETYPE_UNSIGNED_SHORT = Constants.TEXTURETYPE_UNSIGNED_SHORT;\r\n /** INT */\r\n public static readonly TEXTURETYPE_INT = Constants.TEXTURETYPE_INT;\r\n /** UNSIGNED_INT */\r\n public static readonly TEXTURETYPE_UNSIGNED_INTEGER = Constants.TEXTURETYPE_UNSIGNED_INTEGER;\r\n /** UNSIGNED_SHORT_4_4_4_4 */\r\n public static readonly TEXTURETYPE_UNSIGNED_SHORT_4_4_4_4 = Constants.TEXTURETYPE_UNSIGNED_SHORT_4_4_4_4;\r\n /** UNSIGNED_SHORT_5_5_5_1 */\r\n public static readonly TEXTURETYPE_UNSIGNED_SHORT_5_5_5_1 = Constants.TEXTURETYPE_UNSIGNED_SHORT_5_5_5_1;\r\n /** UNSIGNED_SHORT_5_6_5 */\r\n public static readonly TEXTURETYPE_UNSIGNED_SHORT_5_6_5 = Constants.TEXTURETYPE_UNSIGNED_SHORT_5_6_5;\r\n /** UNSIGNED_INT_2_10_10_10_REV */\r\n public static readonly TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV = Constants.TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV;\r\n /** UNSIGNED_INT_24_8 */\r\n public static readonly TEXTURETYPE_UNSIGNED_INT_24_8 = Constants.TEXTURETYPE_UNSIGNED_INT_24_8;\r\n /** UNSIGNED_INT_10F_11F_11F_REV */\r\n public static readonly TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV = Constants.TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV;\r\n /** UNSIGNED_INT_5_9_9_9_REV */\r\n public static readonly TEXTURETYPE_UNSIGNED_INT_5_9_9_9_REV = Constants.TEXTURETYPE_UNSIGNED_INT_5_9_9_9_REV;\r\n /** FLOAT_32_UNSIGNED_INT_24_8_REV */\r\n public static readonly TEXTURETYPE_FLOAT_32_UNSIGNED_INT_24_8_REV = Constants.TEXTURETYPE_FLOAT_32_UNSIGNED_INT_24_8_REV;\r\n\r\n /** nearest is mag = nearest and min = nearest and mip = none */\r\n public static readonly TEXTURE_NEAREST_SAMPLINGMODE = Constants.TEXTURE_NEAREST_SAMPLINGMODE;\r\n /** Bilinear is mag = linear and min = linear and mip = nearest */\r\n public static readonly TEXTURE_BILINEAR_SAMPLINGMODE = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n /** Trilinear is mag = linear and min = linear and mip = linear */\r\n public static readonly TEXTURE_TRILINEAR_SAMPLINGMODE = Constants.TEXTURE_TRILINEAR_SAMPLINGMODE;\r\n /** nearest is mag = nearest and min = nearest and mip = linear */\r\n public static readonly TEXTURE_NEAREST_NEAREST_MIPLINEAR = Constants.TEXTURE_NEAREST_NEAREST_MIPLINEAR;\r\n /** Bilinear is mag = linear and min = linear and mip = nearest */\r\n public static readonly TEXTURE_LINEAR_LINEAR_MIPNEAREST = Constants.TEXTURE_LINEAR_LINEAR_MIPNEAREST;\r\n /** Trilinear is mag = linear and min = linear and mip = linear */\r\n public static readonly TEXTURE_LINEAR_LINEAR_MIPLINEAR = Constants.TEXTURE_LINEAR_LINEAR_MIPLINEAR;\r\n /** mag = nearest and min = nearest and mip = nearest */\r\n public static readonly TEXTURE_NEAREST_NEAREST_MIPNEAREST = Constants.TEXTURE_NEAREST_NEAREST_MIPNEAREST;\r\n /** mag = nearest and min = linear and mip = nearest */\r\n public static readonly TEXTURE_NEAREST_LINEAR_MIPNEAREST = Constants.TEXTURE_NEAREST_LINEAR_MIPNEAREST;\r\n /** mag = nearest and min = linear and mip = linear */\r\n public static readonly TEXTURE_NEAREST_LINEAR_MIPLINEAR = Constants.TEXTURE_NEAREST_LINEAR_MIPLINEAR;\r\n /** mag = nearest and min = linear and mip = none */\r\n public static readonly TEXTURE_NEAREST_LINEAR = Constants.TEXTURE_NEAREST_LINEAR;\r\n /** mag = nearest and min = nearest and mip = none */\r\n public static readonly TEXTURE_NEAREST_NEAREST = Constants.TEXTURE_NEAREST_NEAREST;\r\n /** mag = linear and min = nearest and mip = nearest */\r\n public static readonly TEXTURE_LINEAR_NEAREST_MIPNEAREST = Constants.TEXTURE_LINEAR_NEAREST_MIPNEAREST;\r\n /** mag = linear and min = nearest and mip = linear */\r\n public static readonly TEXTURE_LINEAR_NEAREST_MIPLINEAR = Constants.TEXTURE_LINEAR_NEAREST_MIPLINEAR;\r\n /** mag = linear and min = linear and mip = none */\r\n public static readonly TEXTURE_LINEAR_LINEAR = Constants.TEXTURE_LINEAR_LINEAR;\r\n /** mag = linear and min = nearest and mip = none */\r\n public static readonly TEXTURE_LINEAR_NEAREST = Constants.TEXTURE_LINEAR_NEAREST;\r\n\r\n /** Explicit coordinates mode */\r\n public static readonly TEXTURE_EXPLICIT_MODE = Constants.TEXTURE_EXPLICIT_MODE;\r\n /** Spherical coordinates mode */\r\n public static readonly TEXTURE_SPHERICAL_MODE = Constants.TEXTURE_SPHERICAL_MODE;\r\n /** Planar coordinates mode */\r\n public static readonly TEXTURE_PLANAR_MODE = Constants.TEXTURE_PLANAR_MODE;\r\n /** Cubic coordinates mode */\r\n public static readonly TEXTURE_CUBIC_MODE = Constants.TEXTURE_CUBIC_MODE;\r\n /** Projection coordinates mode */\r\n public static readonly TEXTURE_PROJECTION_MODE = Constants.TEXTURE_PROJECTION_MODE;\r\n /** Skybox coordinates mode */\r\n public static readonly TEXTURE_SKYBOX_MODE = Constants.TEXTURE_SKYBOX_MODE;\r\n /** Inverse Cubic coordinates mode */\r\n public static readonly TEXTURE_INVCUBIC_MODE = Constants.TEXTURE_INVCUBIC_MODE;\r\n /** Equirectangular coordinates mode */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTURE_EQUIRECTANGULAR_MODE = Constants.TEXTURE_EQUIRECTANGULAR_MODE;\r\n /** Equirectangular Fixed coordinates mode */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTURE_FIXED_EQUIRECTANGULAR_MODE = Constants.TEXTURE_FIXED_EQUIRECTANGULAR_MODE;\r\n /** Equirectangular Fixed Mirrored coordinates mode */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTURE_FIXED_EQUIRECTANGULAR_MIRRORED_MODE = Constants.TEXTURE_FIXED_EQUIRECTANGULAR_MIRRORED_MODE;\r\n\r\n // Texture rescaling mode\r\n /** Defines that texture rescaling will use a floor to find the closer power of 2 size */\r\n public static readonly SCALEMODE_FLOOR = Constants.SCALEMODE_FLOOR;\r\n /** Defines that texture rescaling will look for the nearest power of 2 size */\r\n public static readonly SCALEMODE_NEAREST = Constants.SCALEMODE_NEAREST;\r\n /** Defines that texture rescaling will use a ceil to find the closer power of 2 size */\r\n public static readonly SCALEMODE_CEILING = Constants.SCALEMODE_CEILING;\r\n\r\n /**\r\n * Returns the current npm package of the sdk\r\n */\r\n // Not mixed with Version for tooling purpose.\r\n public static override get NpmPackage(): string {\r\n return AbstractEngine.NpmPackage;\r\n }\r\n\r\n /**\r\n * Returns the current version of the framework\r\n */\r\n public static override get Version(): string {\r\n return AbstractEngine.Version;\r\n }\r\n\r\n /** Gets the list of created engines */\r\n public static get Instances(): AbstractEngine[] {\r\n return EngineStore.Instances;\r\n }\r\n\r\n /**\r\n * Gets the latest created engine\r\n */\r\n public static get LastCreatedEngine(): Nullable<AbstractEngine> {\r\n return EngineStore.LastCreatedEngine;\r\n }\r\n\r\n /**\r\n * Gets the latest created scene\r\n */\r\n public static get LastCreatedScene(): Nullable<Scene> {\r\n return EngineStore.LastCreatedScene;\r\n }\r\n\r\n /** @internal */\r\n\r\n // eslint-disable-next-line jsdoc/require-returns-check\r\n /**\r\n * Method called to create the default loading screen.\r\n * This can be overridden in your own app.\r\n * @param canvas The rendering canvas element\r\n * @returns The loading screen\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public static override DefaultLoadingScreenFactory(canvas: HTMLCanvasElement): ILoadingScreen {\r\n return AbstractEngine.DefaultLoadingScreenFactory(canvas);\r\n }\r\n\r\n // Members\r\n\r\n private _rescalePostProcess: Nullable<PostProcess>;\r\n\r\n protected override get _supportsHardwareTextureRescaling() {\r\n return !!Engine._RescalePostProcessFactory;\r\n }\r\n\r\n private _measureFps(): void {\r\n this._performanceMonitor.sampleFrame();\r\n this._fps = this._performanceMonitor.averageFPS;\r\n this._deltaTime = this._performanceMonitor.instantaneousFrameTime || 0;\r\n }\r\n\r\n private _performanceMonitor = new PerformanceMonitor();\r\n /**\r\n * Gets the performance monitor attached to this engine\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/optimize_your_scene#engineinstrumentation\r\n */\r\n public override get performanceMonitor(): PerformanceMonitor {\r\n return this._performanceMonitor;\r\n }\r\n\r\n // Events\r\n\r\n /**\r\n * Creates a new engine\r\n * @param canvasOrContext defines the canvas or WebGL context to use for rendering. If you provide a WebGL context, Babylon.js will not hook events on the canvas (like pointers, keyboards, etc...) so no event observables will be available. This is mostly used when Babylon.js is used as a plugin on a system which already used the WebGL context\r\n * @param antialias defines enable antialiasing (default: false)\r\n * @param options defines further options to be sent to the getContext() function\r\n * @param adaptToDeviceRatio defines whether to adapt to the device's viewport characteristics (default: false)\r\n */\r\n constructor(\r\n canvasOrContext: Nullable<HTMLCanvasElement | OffscreenCanvas | WebGLRenderingContext | WebGL2RenderingContext>,\r\n antialias?: boolean,\r\n options?: EngineOptions,\r\n adaptToDeviceRatio: boolean = false\r\n ) {\r\n RegisterAbstractEngineDom();\r\n RegisterAbstractEngineRenderPass();\r\n super(canvasOrContext, antialias, options, adaptToDeviceRatio);\r\n\r\n this._drawCalls = new PerfCounter();\r\n\r\n if (!canvasOrContext) {\r\n return;\r\n }\r\n\r\n this._features.supportRenderPasses = true;\r\n }\r\n\r\n protected override _initGLContext(): void {\r\n super._initGLContext();\r\n\r\n this._rescalePostProcess = null;\r\n }\r\n\r\n /**\r\n * Shared initialization across engines types.\r\n * @param canvas The canvas associated with this instance of the engine.\r\n */\r\n protected override _sharedInit(canvas: HTMLCanvasElement) {\r\n super._sharedInit(canvas);\r\n\r\n _CommonInit(this, canvas, this._creationOptions);\r\n }\r\n\r\n /**\r\n * Resize an image and returns the image data as an uint8array\r\n * @param image image to resize\r\n * @param bufferWidth destination buffer width\r\n * @param bufferHeight destination buffer height\r\n * @returns an uint8array containing RGBA values of bufferWidth * bufferHeight size\r\n */\r\n public override resizeImageBitmap(image: HTMLImageElement | ImageBitmap, bufferWidth: number, bufferHeight: number): Uint8Array {\r\n return ResizeImageBitmap(this, image, bufferWidth, bufferHeight);\r\n }\r\n\r\n /**\r\n * Engine abstraction for loading and creating an image bitmap from a given source string.\r\n * @param imageSource source to load the image from.\r\n * @param options An object that sets options for the image's extraction.\r\n * @returns ImageBitmap\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public override async _createImageBitmapFromSource(imageSource: string, options?: ImageBitmapOptions): Promise<ImageBitmap> {\r\n return await CreateImageBitmapFromSource(this, imageSource, options);\r\n }\r\n\r\n /**\r\n * Toggle full screen mode\r\n * @param requestPointerLock defines if a pointer lock should be requested from the user\r\n */\r\n public override switchFullscreen(requestPointerLock: boolean): void {\r\n if (this.isFullscreen) {\r\n this.exitFullscreen();\r\n } else {\r\n this.enterFullscreen(requestPointerLock);\r\n }\r\n }\r\n\r\n /**\r\n * Enters full screen mode\r\n * @param requestPointerLock defines if a pointer lock should be requested from the user\r\n */\r\n public override enterFullscreen(requestPointerLock: boolean): void {\r\n if (!this.isFullscreen) {\r\n this._pointerLockRequested = requestPointerLock;\r\n if (this._renderingCanvas) {\r\n RequestFullscreen(this._renderingCanvas);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Exits full screen mode\r\n */\r\n public override exitFullscreen(): void {\r\n if (this.isFullscreen) {\r\n ExitFullscreen();\r\n }\r\n }\r\n\r\n /** States */\r\n\r\n /**\r\n * Sets a boolean indicating if the dithering state is enabled or disabled\r\n * @param value defines the dithering state\r\n */\r\n public setDitheringState(value: boolean): void {\r\n if (value) {\r\n this._gl.enable(this._gl.DITHER);\r\n } else {\r\n this._gl.disable(this._gl.DITHER);\r\n }\r\n }\r\n\r\n /**\r\n * Sets a boolean indicating if the rasterizer state is enabled or disabled\r\n * @param value defines the rasterizer state\r\n */\r\n public setRasterizerState(value: boolean): void {\r\n if (value) {\r\n this._gl.disable(this._gl.RASTERIZER_DISCARD);\r\n } else {\r\n this._gl.enable(this._gl.RASTERIZER_DISCARD);\r\n }\r\n }\r\n\r\n /**\r\n * Directly set the WebGL Viewport\r\n * @param x defines the x coordinate of the viewport (in screen space)\r\n * @param y defines the y coordinate of the viewport (in screen space)\r\n * @param width defines the width of the viewport (in screen space)\r\n * @param height defines the height of the viewport (in screen space)\r\n * @returns the current viewport Object (if any) that is being replaced by this call. You can restore this viewport later on to go back to the original state\r\n */\r\n public setDirectViewport(x: number, y: number, width: number, height: number): Nullable<IViewportLike> {\r\n const currentViewport = this._cachedViewport;\r\n this._cachedViewport = null;\r\n\r\n this._viewport(x, y, width, height);\r\n\r\n return currentViewport;\r\n }\r\n\r\n /**\r\n * Executes a scissor clear (ie. a clear on a specific portion of the screen)\r\n * @param x defines the x-coordinate of the bottom left corner of the clear rectangle\r\n * @param y defines the y-coordinate of the corner of the clear rectangle\r\n * @param width defines the width of the clear rectangle\r\n * @param height defines the height of the clear rectangle\r\n * @param clearColor defines the clear color\r\n */\r\n public scissorClear(x: number, y: number, width: number, height: number, clearColor: IColor4Like): void {\r\n this.enableScissor(x, y, width, height);\r\n this.clear(clearColor, true, true, true);\r\n this.disableScissor();\r\n }\r\n\r\n /**\r\n * Gets the source code of the vertex shader associated with a specific webGL program\r\n * @param program defines the program to use\r\n * @returns a string containing the source code of the vertex shader associated with the program\r\n */\r\n public getVertexShaderSource(program: WebGLProgram): Nullable<string> {\r\n const shaders = this._gl.getAttachedShaders(program);\r\n\r\n if (!shaders) {\r\n return null;\r\n }\r\n\r\n return this._gl.getShaderSource(shaders[0]);\r\n }\r\n\r\n /**\r\n * Gets the source code of the fragment shader associated with a specific webGL program\r\n * @param program defines the program to use\r\n * @returns a string containing the source code of the fragment shader associated with the program\r\n */\r\n public getFragmentShaderSource(program: WebGLProgram): Nullable<string> {\r\n const shaders = this._gl.getAttachedShaders(program);\r\n\r\n if (!shaders) {\r\n return null;\r\n }\r\n\r\n return this._gl.getShaderSource(shaders[1]);\r\n }\r\n\r\n /**\r\n * sets the object from which width and height will be taken from when getting render width and height\r\n * Will fallback to the gl object\r\n * @param dimensions the framebuffer width and height that will be used.\r\n */\r\n public override set framebufferDimensionsObject(dimensions: Nullable<{ framebufferWidth: number; framebufferHeight: number }>) {\r\n this._framebufferDimensionsObject = dimensions;\r\n if (this._framebufferDimensionsObject) {\r\n this.onResizeObservable.notifyObservers(this);\r\n }\r\n }\r\n\r\n protected override _rebuildBuffers(): void {\r\n // Index / Vertex\r\n for (const scene of this.scenes) {\r\n scene.resetCachedMaterial();\r\n scene._rebuildGeometries();\r\n }\r\n\r\n for (const scene of this._virtualScenes) {\r\n scene.resetCachedMaterial();\r\n scene._rebuildGeometries();\r\n }\r\n\r\n super._rebuildBuffers();\r\n }\r\n\r\n /**\r\n * Get Font size information\r\n * @param font font name\r\n * @returns an object containing ascent, height and descent\r\n */\r\n public override getFontOffset(font: string): { ascent: number; height: number; descent: number } {\r\n return GetFontOffset(font);\r\n }\r\n\r\n /**\r\n * Enters Pointerlock mode\r\n */\r\n public enterPointerlock(): void {\r\n if (this._renderingCanvas) {\r\n RequestPointerlock(this._renderingCanvas);\r\n }\r\n }\r\n\r\n /**\r\n * Exits Pointerlock mode\r\n */\r\n public exitPointerlock(): void {\r\n ExitPointerlock();\r\n }\r\n\r\n /**\r\n * Begin a new frame\r\n */\r\n public override beginFrame(): void {\r\n this._measureFps();\r\n super.beginFrame();\r\n }\r\n\r\n public override _deletePipelineContext(pipelineContext: IPipelineContext): void {\r\n const webGLPipelineContext = pipelineContext as WebGLPipelineContext;\r\n if (webGLPipelineContext && webGLPipelineContext.program) {\r\n if (webGLPipelineContext.transformFeedback) {\r\n this.deleteTransformFeedback(webGLPipelineContext.transformFeedback);\r\n webGLPipelineContext.transformFeedback = null;\r\n }\r\n }\r\n super._deletePipelineContext(pipelineContext);\r\n }\r\n\r\n public override createShaderProgram(\r\n pipelineContext: IPipelineContext,\r\n vertexCode: string,\r\n fragmentCode: string,\r\n defines: Nullable<string>,\r\n context?: WebGLRenderingContext,\r\n transformFeedbackVaryings: Nullable<string[]> = null\r\n ): WebGLProgram {\r\n context = context || this._gl;\r\n\r\n this.onBeforeShaderCompilationObservable.notifyObservers(this);\r\n\r\n const program = super.createShaderProgram(pipelineContext, vertexCode, fragmentCode, defines, context, transformFeedbackVaryings);\r\n this.onAfterShaderCompilationObservable.notifyObservers(this);\r\n\r\n return program;\r\n }\r\n\r\n protected override _createShaderProgram(\r\n pipelineContext: WebGLPipelineContext,\r\n vertexShader: WebGLShader,\r\n fragmentShader: WebGLShader,\r\n context: WebGLRenderingContext,\r\n transformFeedbackVaryings: Nullable<string[]> = null\r\n ): WebGLProgram {\r\n const shaderProgram = context.createProgram();\r\n pipelineContext.program = shaderProgram;\r\n\r\n if (!shaderProgram) {\r\n throw new Error(\"Unable to create program\");\r\n }\r\n\r\n context.attachShader(shaderProgram, vertexShader);\r\n context.attachShader(shaderProgram, fragmentShader);\r\n\r\n if (this.webGLVersion > 1 && transformFeedbackVaryings) {\r\n const transformFeedback = this.createTransformFeedback();\r\n\r\n this.bindTransformFeedback(transformFeedback);\r\n this.setTranformFeedbackVaryings(shaderProgram, transformFeedbackVaryings);\r\n pipelineContext.transformFeedback = transformFeedback;\r\n }\r\n\r\n context.linkProgram(shaderProgram);\r\n\r\n if (this.webGLVersion > 1 && transformFeedbackVaryings) {\r\n this.bindTransformFeedback(null);\r\n }\r\n\r\n pipelineContext.context = context;\r\n pipelineContext.vertexShader = vertexShader;\r\n pipelineContext.fragmentShader = fragmentShader;\r\n\r\n if (!pipelineContext.isParallelCompiled) {\r\n this._finalizePipelineContext(pipelineContext);\r\n }\r\n\r\n return shaderProgram;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _releaseTexture(texture: InternalTexture): void {\r\n super._releaseTexture(texture);\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _releaseRenderTargetWrapper(rtWrapper: RenderTargetWrapper): void {\r\n super._releaseRenderTargetWrapper(rtWrapper);\r\n\r\n // Set output texture of post process to null if the framebuffer has been released/disposed\r\n for (const scene of this.scenes) {\r\n for (const postProcess of scene.postProcesses) {\r\n if (postProcess._outputTexture === rtWrapper) {\r\n postProcess._outputTexture = null;\r\n }\r\n }\r\n for (const camera of scene.cameras) {\r\n for (const postProcess of camera._postProcesses) {\r\n if (postProcess) {\r\n if (postProcess._outputTexture === rtWrapper) {\r\n postProcess._outputTexture = null;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n * Rescales a texture\r\n * @param source input texture\r\n * @param destination destination texture\r\n * @param scene scene to use to render the resize\r\n * @param internalFormat format to use when resizing\r\n * @param onComplete callback to be called when resize has completed\r\n */\r\n public override _rescaleTexture(source: InternalTexture, destination: InternalTexture, scene: Nullable<any>, internalFormat: number, onComplete: () => void): void {\r\n this._gl.texParameteri(this._gl.TEXTURE_2D, this._gl.TEXTURE_MAG_FILTER, this._gl.LINEAR);\r\n this._gl.texParameteri(this._gl.TEXTURE_2D, this._gl.TEXTURE_MIN_FILTER, this._gl.LINEAR);\r\n this._gl.texParameteri(this._gl.TEXTURE_2D, this._gl.TEXTURE_WRAP_S, this._gl.CLAMP_TO_EDGE);\r\n this._gl.texParameteri(this._gl.TEXTURE_2D, this._gl.TEXTURE_WRAP_T, this._gl.CLAMP_TO_EDGE);\r\n\r\n const rtt = this.createRenderTargetTexture(\r\n {\r\n width: destination.width,\r\n height: destination.height,\r\n },\r\n {\r\n generateMipMaps: false,\r\n type: Constants.TEXTURETYPE_UNSIGNED_INT,\r\n samplingMode: Constants.TEXTURE_BILINEAR_SAMPLINGMODE,\r\n generateDepthBuffer: false,\r\n generateStencilBuffer: false,\r\n }\r\n );\r\n\r\n if (!this._rescalePostProcess && Engine._RescalePostProcessFactory) {\r\n this._rescalePostProcess = Engine._RescalePostProcessFactory(this);\r\n }\r\n\r\n if (this._rescalePostProcess) {\r\n this._rescalePostProcess.externalTextureSamplerBinding = true;\r\n const onCompiled = () => {\r\n this._rescalePostProcess!.onApply = function (effect) {\r\n effect._bindTexture(\"textureSampler\", source);\r\n };\r\n\r\n let hostingScene: Scene = scene;\r\n\r\n if (!hostingScene) {\r\n hostingScene = this.scenes[this.scenes.length - 1];\r\n }\r\n hostingScene.postProcessManager.directRender([this._rescalePostProcess!], rtt, true);\r\n\r\n this._bindTextureDirectly(this._gl.TEXTURE_2D, destination, true);\r\n this._gl.copyTexImage2D(this._gl.TEXTURE_2D, 0, internalFormat, 0, 0, destination.width, destination.height, 0);\r\n\r\n this.unBindFramebuffer(rtt);\r\n rtt.dispose();\r\n\r\n if (onComplete) {\r\n onComplete();\r\n }\r\n };\r\n const effect = this._rescalePostProcess.getEffect();\r\n if (effect) {\r\n effect.executeWhenCompiled(onCompiled);\r\n } else {\r\n this._rescalePostProcess.onEffectCreatedObservable.addOnce((effect) => {\r\n effect.executeWhenCompiled(onCompiled);\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Wraps an external web gl texture in a Babylon texture.\r\n * @param texture defines the external texture\r\n * @param hasMipMaps defines whether the external texture has mip maps (default: false)\r\n * @param samplingMode defines the sampling mode for the external texture (default: Constants.TEXTURE_TRILINEAR_SAMPLINGMODE)\r\n * @param width defines the width for the external texture (default: 0)\r\n * @param height defines the height for the external texture (default: 0)\r\n * @returns the babylon internal texture\r\n */\r\n public wrapWebGLTexture(\r\n texture: WebGLTexture,\r\n hasMipMaps: boolean = false,\r\n samplingMode: number = Constants.TEXTURE_TRILINEAR_SAMPLINGMODE,\r\n width: number = 0,\r\n height: number = 0\r\n ): InternalTexture {\r\n const hardwareTexture = new WebGLHardwareTexture(texture, this._gl);\r\n const internalTexture = new InternalTexture(this, InternalTextureSource.External, true);\r\n internalTexture._hardwareTexture = hardwareTexture;\r\n internalTexture.baseWidth = width;\r\n internalTexture.baseHeight = height;\r\n internalTexture.width = width;\r\n internalTexture.height = height;\r\n internalTexture.isReady = true;\r\n internalTexture.useMipMaps = hasMipMaps;\r\n this.updateTextureSamplingMode(samplingMode, internalTexture);\r\n return internalTexture;\r\n }\r\n\r\n /**\r\n * Replaces the underlying WebGL handle of a texture previously created via {@link wrapWebGLTexture}, preserving\r\n * the InternalTexture identity.\r\n *\r\n * Intended for the context-loss / context-restored flow: when the host application recreates its external resource\r\n * on the new WebGL context, it calls this method to repoint Babylon's wrapper at the new handle without losing\r\n * references held by materials, render-target wrappers, particle systems, etc.\r\n *\r\n * The new handle must describe a texture with the same dimensions the wrapped texture was created with. A WebGL\r\n * handle is opaque (the dimensions can't be introspected), so we can't validate this -- passing a mismatched\r\n * handle is undefined behaviour. Sampling mode and mip-map flag are properties of the logical wrapped texture and\r\n * are re-applied to the new resource. Any render-target wrapper holding this texture as its color attachment has\r\n * its framebuffer rebuilt with the new handle (including a fresh depth/stencil renderbuffer, since the old one\r\n * came from the dead context). If the wrapper is multisampled, the MSAA framebuffer + color renderbuffer + MSAA\r\n * depth/stencil buffer are rebuilt too.\r\n *\r\n * Throws if the target was not produced by {@link wrapWebGLTexture}, if the wrapped texture is part of a multi\r\n * render-target wrapper, or if the wrapper has a depth/stencil texture (these are not supported in this version;\r\n * dispose and re-wrap).\r\n * @param internalTexture defines the wrapped InternalTexture to repoint\r\n * @param texture defines the new WebGL handle to wrap\r\n */\r\n public updateWrappedWebGLTexture(internalTexture: InternalTexture, texture: WebGLTexture): void {\r\n if (internalTexture.source !== InternalTextureSource.External) {\r\n throw new Error(\"updateWrappedWebGLTexture: target InternalTexture was not produced by wrapWebGLTexture.\");\r\n }\r\n\r\n // Pre-validate before mutating any state so a thrown precondition leaves the InternalTexture untouched.\r\n // Note: rtWrapper.texture only returns _textures[0]; walk every attachment to catch the multi-RT case where\r\n // the wrapped texture is at index > 0.\r\n for (const rtWrapper of this._renderTargetWrapperCache) {\r\n if (!rtWrapper.textures?.includes(internalTexture)) {\r\n continue;\r\n }\r\n if (rtWrapper.isMulti) {\r\n throw new Error(\"updateWrappedWebGLTexture: wrapped texture is part of a multi render-target; not supported. Dispose and re-wrap.\");\r\n }\r\n if (rtWrapper._depthStencilTexture) {\r\n // The depth/stencil texture's GL handle was also lost on context restore. Rebuilding it from the\r\n // wrapper's stored depth settings + re-attaching is feasible but non-trivial; v1 rejects and asks\r\n // the caller to dispose + re-wrap (which also recreates the depth/stencil texture via the public API).\r\n throw new Error(\"updateWrappedWebGLTexture: wrapped texture's render-target wrapper has a depth/stencil texture; not supported. Dispose and re-wrap.\");\r\n }\r\n }\r\n\r\n internalTexture._hardwareTexture = new WebGLHardwareTexture(texture, this._gl);\r\n internalTexture.isReady = true;\r\n\r\n // The new GL texture has default sampler state; clear the per-InternalTexture cached sampler params so the\r\n // next _setTexture re-applies them, then drop any binding-cache slot pointing at this InternalTexture so the\r\n // identity short-circuit (this._boundTexturesCache[channel] === internalTexture) doesn't skip the rebind.\r\n internalTexture._cachedCoordinatesMode = null;\r\n internalTexture._cachedWrapU = null;\r\n internalTexture._cachedWrapV = null;\r\n internalTexture._cachedWrapR = null;\r\n internalTexture._cachedAnisotropicFilteringLevel = null;\r\n for (const key in this._boundTexturesCache) {\r\n if (this._boundTexturesCache[key] === internalTexture) {\r\n this._boundTexturesCache[key] = null;\r\n }\r\n }\r\n\r\n this.updateTextureSamplingMode(internalTexture.samplingMode, internalTexture);\r\n\r\n // Rebuild the framebuffer of any render-target wrapper holding this wrapped texture as its color attachment.\r\n // After a context-loss / restore cycle the GL framebuffer + depth/stencil renderbuffer came from the dead\r\n // context; the consumer-supplied new texture is the moment we have a fresh handle to rebuild against.\r\n const gl = this._gl;\r\n for (const rtWrapper of this._renderTargetWrapperCache) {\r\n if (rtWrapper.texture !== internalTexture) {\r\n continue;\r\n }\r\n const webGLRtWrapper = rtWrapper as WebGLRenderTargetWrapper;\r\n const savedSamples = rtWrapper.samples;\r\n const isMSAA = savedSamples > 1;\r\n\r\n if (webGLRtWrapper._framebuffer) {\r\n gl.deleteFramebuffer(webGLRtWrapper._framebuffer);\r\n }\r\n if (!isMSAA && webGLRtWrapper._depthStencilBuffer) {\r\n gl.deleteRenderbuffer(webGLRtWrapper._depthStencilBuffer);\r\n webGLRtWrapper._depthStencilBuffer = null;\r\n }\r\n\r\n const previousFramebuffer = this._currentFramebuffer;\r\n const framebuffer = gl.createFramebuffer();\r\n this._bindUnboundFramebuffer(framebuffer);\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);\r\n if (!isMSAA) {\r\n webGLRtWrapper._depthStencilBuffer = this._setupFramebufferDepthAttachments(\r\n rtWrapper._generateStencilBuffer,\r\n rtWrapper._generateDepthBuffer,\r\n rtWrapper.width,\r\n rtWrapper.height\r\n );\r\n }\r\n this._bindUnboundFramebuffer(previousFramebuffer);\r\n webGLRtWrapper._framebuffer = framebuffer;\r\n\r\n if (isMSAA) {\r\n // Defer MSAA framebuffer + color renderbuffer + multisampled depth/stencil rebuild to the existing\r\n // helper. The helper early-returns when samples matches the cached value, so zero the cache first\r\n // to force the work; updateRenderTargetTextureSampleCount restores _samples to savedSamples.\r\n rtWrapper._samples = 1;\r\n this.updateRenderTargetTextureSampleCount(webGLRtWrapper, savedSamples);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _uploadImageToTexture(texture: InternalTexture, image: HTMLImageElement | ImageBitmap, faceIndex: number = 0, lod: number = 0) {\r\n const gl = this._gl;\r\n\r\n const textureType = this._getWebGLTextureType(texture.type);\r\n const format = this._getInternalFormat(texture.format);\r\n const internalFormat = this._getRGBABufferInternalSizedFormat(texture.type, format);\r\n\r\n const bindTarget = texture.isCube ? gl.TEXTURE_CUBE_MAP : gl.TEXTURE_2D;\r\n\r\n this._bindTextureDirectly(bindTarget, texture, true);\r\n this._unpackFlipY(texture.invertY);\r\n\r\n let target: GLenum = gl.TEXTURE_2D;\r\n if (texture.isCube) {\r\n target = gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex;\r\n }\r\n\r\n gl.texImage2D(target, lod, internalFormat, format, textureType, image);\r\n this._bindTextureDirectly(bindTarget, null, true);\r\n }\r\n\r\n /**\r\n * Updates a depth texture Comparison Mode and Function.\r\n * If the comparison Function is equal to 0, the mode will be set to none.\r\n * Otherwise, this only works in webgl 2 and requires a shadow sampler in the shader.\r\n * @param texture The texture to set the comparison function for\r\n * @param comparisonFunction The comparison function to set, 0 if no comparison required\r\n */\r\n public updateTextureComparisonFunction(texture: InternalTexture, comparisonFunction: number): void {\r\n if (this.webGLVersion === 1) {\r\n Logger.Error(\"WebGL 1 does not support texture comparison.\");\r\n return;\r\n }\r\n\r\n const gl = this._gl;\r\n\r\n if (texture.isCube) {\r\n this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP, texture, true);\r\n\r\n if (comparisonFunction === 0) {\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_COMPARE_FUNC, Constants.LEQUAL);\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_COMPARE_MODE, gl.NONE);\r\n } else {\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_COMPARE_FUNC, comparisonFunction);\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_COMPARE_MODE, gl.COMPARE_REF_TO_TEXTURE);\r\n }\r\n\r\n this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP, null);\r\n } else {\r\n this._bindTextureDirectly(this._gl.TEXTURE_2D, texture, true);\r\n\r\n if (comparisonFunction === 0) {\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_COMPARE_FUNC, Constants.LEQUAL);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_COMPARE_MODE, gl.NONE);\r\n } else {\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_COMPARE_FUNC, comparisonFunction);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_COMPARE_MODE, gl.COMPARE_REF_TO_TEXTURE);\r\n }\r\n\r\n this._bindTextureDirectly(this._gl.TEXTURE_2D, null);\r\n }\r\n\r\n texture._comparisonFunction = comparisonFunction;\r\n }\r\n\r\n /**\r\n * Creates a webGL buffer to use with instantiation\r\n * @param capacity defines the size of the buffer\r\n * @returns the webGL buffer\r\n */\r\n public createInstancesBuffer(capacity: number): DataBuffer {\r\n const buffer = this._gl.createBuffer();\r\n\r\n if (!buffer) {\r\n throw new Error(\"Unable to create instance buffer\");\r\n }\r\n\r\n const result = new WebGLDataBuffer(buffer);\r\n result.capacity = capacity;\r\n\r\n this.bindArrayBuffer(result);\r\n this._gl.bufferData(this._gl.ARRAY_BUFFER, capacity, this._gl.DYNAMIC_DRAW);\r\n\r\n result.references = 1;\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Delete a webGL buffer used with instantiation\r\n * @param buffer defines the webGL buffer to delete\r\n */\r\n public deleteInstancesBuffer(buffer: WebGLBuffer): void {\r\n this._gl.deleteBuffer(buffer);\r\n }\r\n\r\n private async _clientWaitAsync(sync: WebGLSync, flags = 0, intervalms = 10): Promise<void> {\r\n const gl = <WebGL2RenderingContext>(this._gl as any);\r\n return await new Promise((resolve, reject) => {\r\n _RetryWithInterval(\r\n () => {\r\n const res = gl.clientWaitSync(sync, flags, 0);\r\n if (res == gl.WAIT_FAILED) {\r\n throw new Error(\"clientWaitSync failed\");\r\n }\r\n if (res == gl.TIMEOUT_EXPIRED) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n resolve,\r\n reject,\r\n intervalms\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * This function might return null synchronously, so it is technically not async.\r\n * @internal\r\n */\r\n // eslint-disable-next-line no-restricted-syntax\r\n public _readPixelsAsync(x: number, y: number, w: number, h: number, format: number, type: number, outputBuffer: ArrayBufferView): Nullable<Promise<ArrayBufferView>> {\r\n if (this._webGLVersion < 2) {\r\n throw new Error(\"_readPixelsAsync only work on WebGL2+\");\r\n }\r\n\r\n const gl = <WebGL2RenderingContext>(this._gl as any);\r\n const buf = gl.createBuffer();\r\n gl.bindBuffer(gl.PIXEL_PACK_BUFFER, buf);\r\n gl.bufferData(gl.PIXEL_PACK_BUFFER, outputBuffer.byteLength, gl.STREAM_READ);\r\n gl.readPixels(x, y, w, h, format, type, 0);\r\n gl.bindBuffer(gl.PIXEL_PACK_BUFFER, null);\r\n\r\n const sync = gl.fenceSync(gl.SYNC_GPU_COMMANDS_COMPLETE, 0);\r\n if (!sync) {\r\n return null;\r\n }\r\n\r\n gl.flush();\r\n\r\n // eslint-disable-next-line github/no-then\r\n return this._clientWaitAsync(sync, 0, 10).then(() => {\r\n gl.deleteSync(sync);\r\n\r\n gl.bindBuffer(gl.PIXEL_PACK_BUFFER, buf);\r\n gl.getBufferSubData(gl.PIXEL_PACK_BUFFER, 0, outputBuffer);\r\n gl.bindBuffer(gl.PIXEL_PACK_BUFFER, null);\r\n gl.deleteBuffer(buf);\r\n\r\n return outputBuffer;\r\n });\r\n }\r\n\r\n public override dispose(): void {\r\n this.hideLoadingUI?.();\r\n\r\n // Rescale PP\r\n if (this._rescalePostProcess) {\r\n this._rescalePostProcess.dispose();\r\n }\r\n\r\n _CommonDispose(this, this._renderingCanvas);\r\n\r\n super.dispose();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"engine.pure.js","sourceRoot":"","sources":["../../../../dev/core/src/Engines/engine.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { type Nullable } from \"../types\";\r\nimport { type Scene } from \"../scene.pure\";\r\nimport { InternalTexture, InternalTextureSource } from \"../Materials/Textures/internalTexture\";\r\nimport { type ILoadingScreen } from \"../Loading/loadingScreen.pure\";\r\nimport { EngineStore } from \"./engineStore\";\r\nimport { type WebGLPipelineContext } from \"./WebGL/webGLPipelineContext\";\r\nimport { type IPipelineContext } from \"./IPipelineContext\";\r\nimport { type EngineOptions, ThinEngine } from \"./thinEngine.pure\";\r\nimport { Constants } from \"./constants\";\r\nimport { type IViewportLike, type IColor4Like } from \"../Maths/math.like\";\r\nimport { PerformanceMonitor } from \"../Misc/performanceMonitor\";\r\nimport { type DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { WebGLDataBuffer } from \"../Meshes/WebGL/webGLDataBuffer\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { type RenderTargetWrapper } from \"./renderTargetWrapper\";\r\nimport { WebGLHardwareTexture } from \"./WebGL/webGLHardwareTexture\";\r\nimport { type WebGLRenderTargetWrapper } from \"./WebGL/webGLRenderTargetWrapper\";\r\n\r\nimport { type PostProcess } from \"../PostProcesses/postProcess.pure\";\r\nimport { AbstractEngine } from \"./abstractEngine.pure\";\r\nimport {\r\n CreateImageBitmapFromSource,\r\n ExitFullscreen,\r\n ExitPointerlock,\r\n GetFontOffset,\r\n RequestFullscreen,\r\n RequestPointerlock,\r\n ResizeImageBitmap,\r\n _CommonDispose,\r\n _CommonInit,\r\n} from \"./engine.common\";\r\nimport { PerfCounter } from \"../Misc/perfCounter\";\r\nimport { _RetryWithInterval } from \"core/Misc/timingTools\";\r\nimport { RegisterAbstractEngineDom } from \"./AbstractEngine/abstractEngine.dom.pure\";\r\nimport { RegisterAbstractEngineRenderPass } from \"./AbstractEngine/abstractEngine.renderPass.pure\";\r\n\r\n/**\r\n * The engine class is responsible for interfacing with all lower-level APIs such as WebGL and Audio\r\n */\r\nexport class Engine extends ThinEngine {\r\n // Const statics\r\n\r\n /** Defines that alpha blending is disabled */\r\n public static readonly ALPHA_DISABLE = Constants.ALPHA_DISABLE;\r\n /** Defines that alpha blending to SRC ALPHA * SRC + DEST */\r\n public static readonly ALPHA_ADD = Constants.ALPHA_ADD;\r\n /** Defines that alpha blending to SRC ALPHA * SRC + (1 - SRC ALPHA) * DEST */\r\n public static readonly ALPHA_COMBINE = Constants.ALPHA_COMBINE;\r\n /** Defines that alpha blending to DEST - SRC * DEST */\r\n public static readonly ALPHA_SUBTRACT = Constants.ALPHA_SUBTRACT;\r\n /** Defines that alpha blending to SRC * DEST */\r\n public static readonly ALPHA_MULTIPLY = Constants.ALPHA_MULTIPLY;\r\n /** Defines that alpha blending to SRC ALPHA * SRC + (1 - SRC) * DEST */\r\n public static readonly ALPHA_MAXIMIZED = Constants.ALPHA_MAXIMIZED;\r\n /** Defines that alpha blending to SRC + DEST */\r\n public static readonly ALPHA_ONEONE = Constants.ALPHA_ONEONE;\r\n /** Defines that alpha blending to SRC + (1 - SRC ALPHA) * DEST */\r\n public static readonly ALPHA_PREMULTIPLIED = Constants.ALPHA_PREMULTIPLIED;\r\n /**\r\n * Defines that alpha blending to SRC + (1 - SRC ALPHA) * DEST\r\n * Alpha will be set to (1 - SRC ALPHA) * DEST ALPHA\r\n */\r\n public static readonly ALPHA_PREMULTIPLIED_PORTERDUFF = Constants.ALPHA_PREMULTIPLIED_PORTERDUFF;\r\n /** Defines that alpha blending to CST * SRC + (1 - CST) * DEST */\r\n public static readonly ALPHA_INTERPOLATE = Constants.ALPHA_INTERPOLATE;\r\n /**\r\n * Defines that alpha blending to SRC + (1 - SRC) * DEST\r\n * Alpha will be set to SRC ALPHA + (1 - SRC ALPHA) * DEST ALPHA\r\n */\r\n public static readonly ALPHA_SCREENMODE = Constants.ALPHA_SCREENMODE;\r\n\r\n /** Defines that the resource is not delayed*/\r\n public static readonly DELAYLOADSTATE_NONE = Constants.DELAYLOADSTATE_NONE;\r\n /** Defines that the resource was successfully delay loaded */\r\n public static readonly DELAYLOADSTATE_LOADED = Constants.DELAYLOADSTATE_LOADED;\r\n /** Defines that the resource is currently delay loading */\r\n public static readonly DELAYLOADSTATE_LOADING = Constants.DELAYLOADSTATE_LOADING;\r\n /** Defines that the resource is delayed and has not started loading */\r\n public static readonly DELAYLOADSTATE_NOTLOADED = Constants.DELAYLOADSTATE_NOTLOADED;\r\n\r\n // Depht or Stencil test Constants.\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will never pass. i.e. Nothing will be drawn */\r\n public static readonly NEVER = Constants.NEVER;\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will always pass. i.e. Pixels will be drawn in the order they are drawn */\r\n public static readonly ALWAYS = Constants.ALWAYS;\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is less than the stored value */\r\n public static readonly LESS = Constants.LESS;\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is equals to the stored value */\r\n public static readonly EQUAL = Constants.EQUAL;\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is less than or equal to the stored value */\r\n public static readonly LEQUAL = Constants.LEQUAL;\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is greater than the stored value */\r\n public static readonly GREATER = Constants.GREATER;\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is greater than or equal to the stored value */\r\n public static readonly GEQUAL = Constants.GEQUAL;\r\n /** Passed to depthFunction or stencilFunction to specify depth or stencil tests will pass if the new depth value is not equal to the stored value */\r\n public static readonly NOTEQUAL = Constants.NOTEQUAL;\r\n\r\n // Stencil Actions Constants.\r\n /** Passed to stencilOperation to specify that stencil value must be kept */\r\n public static readonly KEEP = Constants.KEEP;\r\n /** Passed to stencilOperation to specify that stencil value must be replaced */\r\n public static readonly REPLACE = Constants.REPLACE;\r\n /** Passed to stencilOperation to specify that stencil value must be incremented */\r\n public static readonly INCR = Constants.INCR;\r\n /** Passed to stencilOperation to specify that stencil value must be decremented */\r\n public static readonly DECR = Constants.DECR;\r\n /** Passed to stencilOperation to specify that stencil value must be inverted */\r\n public static readonly INVERT = Constants.INVERT;\r\n /** Passed to stencilOperation to specify that stencil value must be incremented with wrapping */\r\n public static readonly INCR_WRAP = Constants.INCR_WRAP;\r\n /** Passed to stencilOperation to specify that stencil value must be decremented with wrapping */\r\n public static readonly DECR_WRAP = Constants.DECR_WRAP;\r\n\r\n /** Texture is not repeating outside of 0..1 UVs */\r\n public static readonly TEXTURE_CLAMP_ADDRESSMODE = Constants.TEXTURE_CLAMP_ADDRESSMODE;\r\n /** Texture is repeating outside of 0..1 UVs */\r\n public static readonly TEXTURE_WRAP_ADDRESSMODE = Constants.TEXTURE_WRAP_ADDRESSMODE;\r\n /** Texture is repeating and mirrored */\r\n public static readonly TEXTURE_MIRROR_ADDRESSMODE = Constants.TEXTURE_MIRROR_ADDRESSMODE;\r\n\r\n /** ALPHA */\r\n public static readonly TEXTUREFORMAT_ALPHA = Constants.TEXTUREFORMAT_ALPHA;\r\n /** LUMINANCE */\r\n public static readonly TEXTUREFORMAT_LUMINANCE = Constants.TEXTUREFORMAT_LUMINANCE;\r\n /** LUMINANCE_ALPHA */\r\n public static readonly TEXTUREFORMAT_LUMINANCE_ALPHA = Constants.TEXTUREFORMAT_LUMINANCE_ALPHA;\r\n /** RGB */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGB = Constants.TEXTUREFORMAT_RGB;\r\n /** RGBA */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGBA = Constants.TEXTUREFORMAT_RGBA;\r\n /** RED */\r\n public static readonly TEXTUREFORMAT_RED = Constants.TEXTUREFORMAT_RED;\r\n /** RED (2nd reference) */\r\n public static readonly TEXTUREFORMAT_R = Constants.TEXTUREFORMAT_R;\r\n /** RED unsigned short normed to [0, 1] **/\r\n public static readonly TEXTUREFORMAT_R16_UNORM = Constants.TEXTUREFORMAT_R16_UNORM;\r\n /** RG unsigned short normed to [0, 1] **/\r\n public static readonly TEXTUREFORMAT_RG16_UNORM = Constants.TEXTUREFORMAT_RG16_UNORM;\r\n /** RGB unsigned short normed to [0, 1] **/\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGB16_UNORM = Constants.TEXTUREFORMAT_RGB16_UNORM;\r\n /** RGBA unsigned short normed to [0, 1] **/\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGBA16_UNORM = Constants.TEXTUREFORMAT_RGBA16_UNORM;\r\n /** RED signed short normed to [-1, 1] **/\r\n public static readonly TEXTUREFORMAT_R16_SNORM = Constants.TEXTUREFORMAT_R16_SNORM;\r\n /** RG signed short normed to [-1, 1] **/\r\n public static readonly TEXTUREFORMAT_RG16_SNORM = Constants.TEXTUREFORMAT_RG16_SNORM;\r\n /** RGB signed short normed to [-1, 1] **/\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGB16_SNORM = Constants.TEXTUREFORMAT_RGB16_SNORM;\r\n /** RGBA signed short normed to [-1, 1] **/\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGBA16_SNORM = Constants.TEXTUREFORMAT_RGBA16_SNORM;\r\n /** RG */\r\n public static readonly TEXTUREFORMAT_RG = Constants.TEXTUREFORMAT_RG;\r\n /** RED_INTEGER */\r\n public static readonly TEXTUREFORMAT_RED_INTEGER = Constants.TEXTUREFORMAT_RED_INTEGER;\r\n /** RED_INTEGER (2nd reference) */\r\n public static readonly TEXTUREFORMAT_R_INTEGER = Constants.TEXTUREFORMAT_R_INTEGER;\r\n /** RG_INTEGER */\r\n public static readonly TEXTUREFORMAT_RG_INTEGER = Constants.TEXTUREFORMAT_RG_INTEGER;\r\n /** RGB_INTEGER */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGB_INTEGER = Constants.TEXTUREFORMAT_RGB_INTEGER;\r\n /** RGBA_INTEGER */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTUREFORMAT_RGBA_INTEGER = Constants.TEXTUREFORMAT_RGBA_INTEGER;\r\n\r\n /** UNSIGNED_BYTE */\r\n public static readonly TEXTURETYPE_UNSIGNED_BYTE = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n /** @deprecated use more explicit TEXTURETYPE_UNSIGNED_BYTE instead. Use TEXTURETYPE_UNSIGNED_INTEGER for 32bits values.*/\r\n public static readonly TEXTURETYPE_UNSIGNED_INT = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n /** FLOAT */\r\n public static readonly TEXTURETYPE_FLOAT = Constants.TEXTURETYPE_FLOAT;\r\n /** HALF_FLOAT */\r\n public static readonly TEXTURETYPE_HALF_FLOAT = Constants.TEXTURETYPE_HALF_FLOAT;\r\n /** BYTE */\r\n public static readonly TEXTURETYPE_BYTE = Constants.TEXTURETYPE_BYTE;\r\n /** SHORT */\r\n public static readonly TEXTURETYPE_SHORT = Constants.TEXTURETYPE_SHORT;\r\n /** UNSIGNED_SHORT */\r\n public static readonly TEXTURETYPE_UNSIGNED_SHORT = Constants.TEXTURETYPE_UNSIGNED_SHORT;\r\n /** INT */\r\n public static readonly TEXTURETYPE_INT = Constants.TEXTURETYPE_INT;\r\n /** UNSIGNED_INT */\r\n public static readonly TEXTURETYPE_UNSIGNED_INTEGER = Constants.TEXTURETYPE_UNSIGNED_INTEGER;\r\n /** UNSIGNED_SHORT_4_4_4_4 */\r\n public static readonly TEXTURETYPE_UNSIGNED_SHORT_4_4_4_4 = Constants.TEXTURETYPE_UNSIGNED_SHORT_4_4_4_4;\r\n /** UNSIGNED_SHORT_5_5_5_1 */\r\n public static readonly TEXTURETYPE_UNSIGNED_SHORT_5_5_5_1 = Constants.TEXTURETYPE_UNSIGNED_SHORT_5_5_5_1;\r\n /** UNSIGNED_SHORT_5_6_5 */\r\n public static readonly TEXTURETYPE_UNSIGNED_SHORT_5_6_5 = Constants.TEXTURETYPE_UNSIGNED_SHORT_5_6_5;\r\n /** UNSIGNED_INT_2_10_10_10_REV */\r\n public static readonly TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV = Constants.TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV;\r\n /** UNSIGNED_INT_24_8 */\r\n public static readonly TEXTURETYPE_UNSIGNED_INT_24_8 = Constants.TEXTURETYPE_UNSIGNED_INT_24_8;\r\n /** UNSIGNED_INT_10F_11F_11F_REV */\r\n public static readonly TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV = Constants.TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV;\r\n /** UNSIGNED_INT_5_9_9_9_REV */\r\n public static readonly TEXTURETYPE_UNSIGNED_INT_5_9_9_9_REV = Constants.TEXTURETYPE_UNSIGNED_INT_5_9_9_9_REV;\r\n /** FLOAT_32_UNSIGNED_INT_24_8_REV */\r\n public static readonly TEXTURETYPE_FLOAT_32_UNSIGNED_INT_24_8_REV = Constants.TEXTURETYPE_FLOAT_32_UNSIGNED_INT_24_8_REV;\r\n\r\n /** nearest is mag = nearest and min = nearest and mip = none */\r\n public static readonly TEXTURE_NEAREST_SAMPLINGMODE = Constants.TEXTURE_NEAREST_SAMPLINGMODE;\r\n /** Bilinear is mag = linear and min = linear and mip = nearest */\r\n public static readonly TEXTURE_BILINEAR_SAMPLINGMODE = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n /** Trilinear is mag = linear and min = linear and mip = linear */\r\n public static readonly TEXTURE_TRILINEAR_SAMPLINGMODE = Constants.TEXTURE_TRILINEAR_SAMPLINGMODE;\r\n /** nearest is mag = nearest and min = nearest and mip = linear */\r\n public static readonly TEXTURE_NEAREST_NEAREST_MIPLINEAR = Constants.TEXTURE_NEAREST_NEAREST_MIPLINEAR;\r\n /** Bilinear is mag = linear and min = linear and mip = nearest */\r\n public static readonly TEXTURE_LINEAR_LINEAR_MIPNEAREST = Constants.TEXTURE_LINEAR_LINEAR_MIPNEAREST;\r\n /** Trilinear is mag = linear and min = linear and mip = linear */\r\n public static readonly TEXTURE_LINEAR_LINEAR_MIPLINEAR = Constants.TEXTURE_LINEAR_LINEAR_MIPLINEAR;\r\n /** mag = nearest and min = nearest and mip = nearest */\r\n public static readonly TEXTURE_NEAREST_NEAREST_MIPNEAREST = Constants.TEXTURE_NEAREST_NEAREST_MIPNEAREST;\r\n /** mag = nearest and min = linear and mip = nearest */\r\n public static readonly TEXTURE_NEAREST_LINEAR_MIPNEAREST = Constants.TEXTURE_NEAREST_LINEAR_MIPNEAREST;\r\n /** mag = nearest and min = linear and mip = linear */\r\n public static readonly TEXTURE_NEAREST_LINEAR_MIPLINEAR = Constants.TEXTURE_NEAREST_LINEAR_MIPLINEAR;\r\n /** mag = nearest and min = linear and mip = none */\r\n public static readonly TEXTURE_NEAREST_LINEAR = Constants.TEXTURE_NEAREST_LINEAR;\r\n /** mag = nearest and min = nearest and mip = none */\r\n public static readonly TEXTURE_NEAREST_NEAREST = Constants.TEXTURE_NEAREST_NEAREST;\r\n /** mag = linear and min = nearest and mip = nearest */\r\n public static readonly TEXTURE_LINEAR_NEAREST_MIPNEAREST = Constants.TEXTURE_LINEAR_NEAREST_MIPNEAREST;\r\n /** mag = linear and min = nearest and mip = linear */\r\n public static readonly TEXTURE_LINEAR_NEAREST_MIPLINEAR = Constants.TEXTURE_LINEAR_NEAREST_MIPLINEAR;\r\n /** mag = linear and min = linear and mip = none */\r\n public static readonly TEXTURE_LINEAR_LINEAR = Constants.TEXTURE_LINEAR_LINEAR;\r\n /** mag = linear and min = nearest and mip = none */\r\n public static readonly TEXTURE_LINEAR_NEAREST = Constants.TEXTURE_LINEAR_NEAREST;\r\n\r\n /** Explicit coordinates mode */\r\n public static readonly TEXTURE_EXPLICIT_MODE = Constants.TEXTURE_EXPLICIT_MODE;\r\n /** Spherical coordinates mode */\r\n public static readonly TEXTURE_SPHERICAL_MODE = Constants.TEXTURE_SPHERICAL_MODE;\r\n /** Planar coordinates mode */\r\n public static readonly TEXTURE_PLANAR_MODE = Constants.TEXTURE_PLANAR_MODE;\r\n /** Cubic coordinates mode */\r\n public static readonly TEXTURE_CUBIC_MODE = Constants.TEXTURE_CUBIC_MODE;\r\n /** Projection coordinates mode */\r\n public static readonly TEXTURE_PROJECTION_MODE = Constants.TEXTURE_PROJECTION_MODE;\r\n /** Skybox coordinates mode */\r\n public static readonly TEXTURE_SKYBOX_MODE = Constants.TEXTURE_SKYBOX_MODE;\r\n /** Inverse Cubic coordinates mode */\r\n public static readonly TEXTURE_INVCUBIC_MODE = Constants.TEXTURE_INVCUBIC_MODE;\r\n /** Equirectangular coordinates mode */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTURE_EQUIRECTANGULAR_MODE = Constants.TEXTURE_EQUIRECTANGULAR_MODE;\r\n /** Equirectangular Fixed coordinates mode */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTURE_FIXED_EQUIRECTANGULAR_MODE = Constants.TEXTURE_FIXED_EQUIRECTANGULAR_MODE;\r\n /** Equirectangular Fixed Mirrored coordinates mode */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public static readonly TEXTURE_FIXED_EQUIRECTANGULAR_MIRRORED_MODE = Constants.TEXTURE_FIXED_EQUIRECTANGULAR_MIRRORED_MODE;\r\n\r\n // Texture rescaling mode\r\n /** Defines that texture rescaling will use a floor to find the closer power of 2 size */\r\n public static readonly SCALEMODE_FLOOR = Constants.SCALEMODE_FLOOR;\r\n /** Defines that texture rescaling will look for the nearest power of 2 size */\r\n public static readonly SCALEMODE_NEAREST = Constants.SCALEMODE_NEAREST;\r\n /** Defines that texture rescaling will use a ceil to find the closer power of 2 size */\r\n public static readonly SCALEMODE_CEILING = Constants.SCALEMODE_CEILING;\r\n\r\n /**\r\n * Returns the current npm package of the sdk\r\n */\r\n // Not mixed with Version for tooling purpose.\r\n public static override get NpmPackage(): string {\r\n return AbstractEngine.NpmPackage;\r\n }\r\n\r\n /**\r\n * Returns the current version of the framework\r\n */\r\n public static override get Version(): string {\r\n return AbstractEngine.Version;\r\n }\r\n\r\n /** Gets the list of created engines */\r\n public static get Instances(): AbstractEngine[] {\r\n return EngineStore.Instances;\r\n }\r\n\r\n /**\r\n * Gets the latest created engine\r\n */\r\n public static get LastCreatedEngine(): Nullable<AbstractEngine> {\r\n return EngineStore.LastCreatedEngine;\r\n }\r\n\r\n /**\r\n * Gets the latest created scene\r\n */\r\n public static get LastCreatedScene(): Nullable<Scene> {\r\n return EngineStore.LastCreatedScene;\r\n }\r\n\r\n /** @internal */\r\n\r\n // eslint-disable-next-line jsdoc/require-returns-check\r\n /**\r\n * Method called to create the default loading screen.\r\n * This can be overridden in your own app.\r\n * @param canvas The rendering canvas element\r\n * @returns The loading screen\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public static override DefaultLoadingScreenFactory(canvas: HTMLCanvasElement): ILoadingScreen {\r\n return AbstractEngine.DefaultLoadingScreenFactory(canvas);\r\n }\r\n\r\n // Members\r\n\r\n private _rescalePostProcess: Nullable<PostProcess>;\r\n\r\n protected override get _supportsHardwareTextureRescaling() {\r\n return !!Engine._RescalePostProcessFactory;\r\n }\r\n\r\n private _measureFps(): void {\r\n this._performanceMonitor.sampleFrame();\r\n this._fps = this._performanceMonitor.averageFPS;\r\n this._deltaTime = this._performanceMonitor.instantaneousFrameTime || 0;\r\n }\r\n\r\n private _performanceMonitor = new PerformanceMonitor();\r\n /**\r\n * Gets the performance monitor attached to this engine\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/optimize_your_scene#engineinstrumentation\r\n */\r\n public override get performanceMonitor(): PerformanceMonitor {\r\n return this._performanceMonitor;\r\n }\r\n\r\n // Events\r\n\r\n /**\r\n * Creates a new engine\r\n * @param canvasOrContext defines the canvas or WebGL context to use for rendering. If you provide a WebGL context, Babylon.js will not hook events on the canvas (like pointers, keyboards, etc...) so no event observables will be available. This is mostly used when Babylon.js is used as a plugin on a system which already used the WebGL context\r\n * @param antialias defines enable antialiasing (default: false)\r\n * @param options defines further options to be sent to the getContext() function\r\n * @param adaptToDeviceRatio defines whether to adapt to the device's viewport characteristics (default: false)\r\n */\r\n constructor(\r\n canvasOrContext: Nullable<HTMLCanvasElement | OffscreenCanvas | WebGLRenderingContext | WebGL2RenderingContext>,\r\n antialias?: boolean,\r\n options?: EngineOptions,\r\n adaptToDeviceRatio: boolean = false\r\n ) {\r\n RegisterAbstractEngineDom();\r\n RegisterAbstractEngineRenderPass();\r\n super(canvasOrContext, antialias, options, adaptToDeviceRatio);\r\n\r\n this._drawCalls = new PerfCounter();\r\n\r\n if (!canvasOrContext) {\r\n return;\r\n }\r\n\r\n this._features.supportRenderPasses = true;\r\n }\r\n\r\n protected override _initGLContext(): void {\r\n super._initGLContext();\r\n\r\n this._rescalePostProcess = null;\r\n }\r\n\r\n /**\r\n * Shared initialization across engines types.\r\n * @param canvas The canvas associated with this instance of the engine.\r\n */\r\n protected override _sharedInit(canvas: HTMLCanvasElement) {\r\n super._sharedInit(canvas);\r\n\r\n _CommonInit(this, canvas, this._creationOptions);\r\n }\r\n\r\n /**\r\n * Resize an image and returns the image data as an uint8array\r\n * @param image image to resize\r\n * @param bufferWidth destination buffer width\r\n * @param bufferHeight destination buffer height\r\n * @returns an uint8array containing RGBA values of bufferWidth * bufferHeight size\r\n */\r\n public override resizeImageBitmap(image: HTMLImageElement | ImageBitmap, bufferWidth: number, bufferHeight: number): Uint8Array {\r\n return ResizeImageBitmap(this, image, bufferWidth, bufferHeight);\r\n }\r\n\r\n /**\r\n * Engine abstraction for loading and creating an image bitmap from a given source string.\r\n * @param imageSource source to load the image from.\r\n * @param options An object that sets options for the image's extraction.\r\n * @returns ImageBitmap\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public override async _createImageBitmapFromSource(imageSource: string, options?: ImageBitmapOptions): Promise<ImageBitmap> {\r\n return await CreateImageBitmapFromSource(this, imageSource, options);\r\n }\r\n\r\n /**\r\n * Toggle full screen mode\r\n * @param requestPointerLock defines if a pointer lock should be requested from the user\r\n */\r\n public override switchFullscreen(requestPointerLock: boolean): void {\r\n if (this.isFullscreen) {\r\n this.exitFullscreen();\r\n } else {\r\n this.enterFullscreen(requestPointerLock);\r\n }\r\n }\r\n\r\n /**\r\n * Enters full screen mode\r\n * @param requestPointerLock defines if a pointer lock should be requested from the user\r\n */\r\n public override enterFullscreen(requestPointerLock: boolean): void {\r\n if (!this.isFullscreen) {\r\n this._pointerLockRequested = requestPointerLock;\r\n if (this._renderingCanvas) {\r\n RequestFullscreen(this._renderingCanvas);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Exits full screen mode\r\n */\r\n public override exitFullscreen(): void {\r\n if (this.isFullscreen) {\r\n ExitFullscreen();\r\n }\r\n }\r\n\r\n /** States */\r\n\r\n /**\r\n * Sets a boolean indicating if the dithering state is enabled or disabled\r\n * @param value defines the dithering state\r\n */\r\n public setDitheringState(value: boolean): void {\r\n if (value) {\r\n this._gl.enable(this._gl.DITHER);\r\n } else {\r\n this._gl.disable(this._gl.DITHER);\r\n }\r\n }\r\n\r\n /**\r\n * Sets a boolean indicating if the rasterizer state is enabled or disabled\r\n * @param value defines the rasterizer state\r\n */\r\n public setRasterizerState(value: boolean): void {\r\n if (value) {\r\n this._gl.disable(this._gl.RASTERIZER_DISCARD);\r\n } else {\r\n this._gl.enable(this._gl.RASTERIZER_DISCARD);\r\n }\r\n }\r\n\r\n /**\r\n * Directly set the WebGL Viewport\r\n * @param x defines the x coordinate of the viewport (in screen space)\r\n * @param y defines the y coordinate of the viewport (in screen space)\r\n * @param width defines the width of the viewport (in screen space)\r\n * @param height defines the height of the viewport (in screen space)\r\n * @returns the current viewport Object (if any) that is being replaced by this call. You can restore this viewport later on to go back to the original state\r\n */\r\n public setDirectViewport(x: number, y: number, width: number, height: number): Nullable<IViewportLike> {\r\n const currentViewport = this._cachedViewport;\r\n this._cachedViewport = null;\r\n\r\n this._viewport(x, y, width, height);\r\n\r\n return currentViewport;\r\n }\r\n\r\n /**\r\n * Executes a scissor clear (ie. a clear on a specific portion of the screen)\r\n * @param x defines the x-coordinate of the bottom left corner of the clear rectangle\r\n * @param y defines the y-coordinate of the corner of the clear rectangle\r\n * @param width defines the width of the clear rectangle\r\n * @param height defines the height of the clear rectangle\r\n * @param clearColor defines the clear color\r\n */\r\n public scissorClear(x: number, y: number, width: number, height: number, clearColor: IColor4Like): void {\r\n this.enableScissor(x, y, width, height);\r\n this.clear(clearColor, true, true, true);\r\n this.disableScissor();\r\n }\r\n\r\n /**\r\n * Gets the source code of the vertex shader associated with a specific webGL program\r\n * @param program defines the program to use\r\n * @returns a string containing the source code of the vertex shader associated with the program\r\n */\r\n public getVertexShaderSource(program: WebGLProgram): Nullable<string> {\r\n const shaders = this._gl.getAttachedShaders(program);\r\n\r\n if (!shaders) {\r\n return null;\r\n }\r\n\r\n return this._gl.getShaderSource(shaders[0]);\r\n }\r\n\r\n /**\r\n * Gets the source code of the fragment shader associated with a specific webGL program\r\n * @param program defines the program to use\r\n * @returns a string containing the source code of the fragment shader associated with the program\r\n */\r\n public getFragmentShaderSource(program: WebGLProgram): Nullable<string> {\r\n const shaders = this._gl.getAttachedShaders(program);\r\n\r\n if (!shaders) {\r\n return null;\r\n }\r\n\r\n return this._gl.getShaderSource(shaders[1]);\r\n }\r\n\r\n /**\r\n * sets the object from which width and height will be taken from when getting render width and height\r\n * Will fallback to the gl object\r\n * @param dimensions the framebuffer width and height that will be used.\r\n */\r\n public override set framebufferDimensionsObject(dimensions: Nullable<{ framebufferWidth: number; framebufferHeight: number }>) {\r\n this._framebufferDimensionsObject = dimensions;\r\n if (this._framebufferDimensionsObject) {\r\n this.onResizeObservable.notifyObservers(this);\r\n }\r\n }\r\n\r\n protected override _rebuildBuffers(): void {\r\n // Index / Vertex\r\n for (const scene of this.scenes) {\r\n scene.resetCachedMaterial();\r\n scene._rebuildGeometries();\r\n }\r\n\r\n for (const scene of this._virtualScenes) {\r\n scene.resetCachedMaterial();\r\n scene._rebuildGeometries();\r\n }\r\n\r\n super._rebuildBuffers();\r\n }\r\n\r\n /**\r\n * Get Font size information\r\n * @param font font name\r\n * @returns an object containing ascent, height and descent\r\n */\r\n public override getFontOffset(font: string): { ascent: number; height: number; descent: number } {\r\n return GetFontOffset(font);\r\n }\r\n\r\n /**\r\n * Enters Pointerlock mode\r\n */\r\n public enterPointerlock(): void {\r\n if (this._renderingCanvas) {\r\n RequestPointerlock(this._renderingCanvas);\r\n }\r\n }\r\n\r\n /**\r\n * Exits Pointerlock mode\r\n */\r\n public exitPointerlock(): void {\r\n ExitPointerlock();\r\n }\r\n\r\n /**\r\n * Begin a new frame\r\n */\r\n public override beginFrame(): void {\r\n this._measureFps();\r\n super.beginFrame();\r\n }\r\n\r\n public override _deletePipelineContext(pipelineContext: IPipelineContext): void {\r\n const webGLPipelineContext = pipelineContext as WebGLPipelineContext;\r\n if (webGLPipelineContext && webGLPipelineContext.program) {\r\n if (webGLPipelineContext.transformFeedback) {\r\n this.deleteTransformFeedback(webGLPipelineContext.transformFeedback);\r\n webGLPipelineContext.transformFeedback = null;\r\n }\r\n }\r\n super._deletePipelineContext(pipelineContext);\r\n }\r\n\r\n protected override _createShaderProgram(\r\n pipelineContext: WebGLPipelineContext,\r\n vertexShader: WebGLShader,\r\n fragmentShader: WebGLShader,\r\n context: WebGLRenderingContext,\r\n transformFeedbackVaryings: Nullable<string[]> = null\r\n ): WebGLProgram {\r\n const shaderProgram = context.createProgram();\r\n pipelineContext.program = shaderProgram;\r\n\r\n if (!shaderProgram) {\r\n throw new Error(\"Unable to create program\");\r\n }\r\n\r\n context.attachShader(shaderProgram, vertexShader);\r\n context.attachShader(shaderProgram, fragmentShader);\r\n\r\n if (this.webGLVersion > 1 && transformFeedbackVaryings) {\r\n const transformFeedback = this.createTransformFeedback();\r\n\r\n this.bindTransformFeedback(transformFeedback);\r\n this.setTranformFeedbackVaryings(shaderProgram, transformFeedbackVaryings);\r\n pipelineContext.transformFeedback = transformFeedback;\r\n }\r\n\r\n context.linkProgram(shaderProgram);\r\n\r\n if (this.webGLVersion > 1 && transformFeedbackVaryings) {\r\n this.bindTransformFeedback(null);\r\n }\r\n\r\n pipelineContext.context = context;\r\n pipelineContext.vertexShader = vertexShader;\r\n pipelineContext.fragmentShader = fragmentShader;\r\n\r\n if (!pipelineContext.isParallelCompiled) {\r\n this._finalizePipelineContext(pipelineContext);\r\n }\r\n\r\n return shaderProgram;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _releaseTexture(texture: InternalTexture): void {\r\n super._releaseTexture(texture);\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _releaseRenderTargetWrapper(rtWrapper: RenderTargetWrapper): void {\r\n super._releaseRenderTargetWrapper(rtWrapper);\r\n\r\n // Set output texture of post process to null if the framebuffer has been released/disposed\r\n for (const scene of this.scenes) {\r\n for (const postProcess of scene.postProcesses) {\r\n if (postProcess._outputTexture === rtWrapper) {\r\n postProcess._outputTexture = null;\r\n }\r\n }\r\n for (const camera of scene.cameras) {\r\n for (const postProcess of camera._postProcesses) {\r\n if (postProcess) {\r\n if (postProcess._outputTexture === rtWrapper) {\r\n postProcess._outputTexture = null;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n * Rescales a texture\r\n * @param source input texture\r\n * @param destination destination texture\r\n * @param scene scene to use to render the resize\r\n * @param internalFormat format to use when resizing\r\n * @param onComplete callback to be called when resize has completed\r\n */\r\n public override _rescaleTexture(source: InternalTexture, destination: InternalTexture, scene: Nullable<any>, internalFormat: number, onComplete: () => void): void {\r\n this._gl.texParameteri(this._gl.TEXTURE_2D, this._gl.TEXTURE_MAG_FILTER, this._gl.LINEAR);\r\n this._gl.texParameteri(this._gl.TEXTURE_2D, this._gl.TEXTURE_MIN_FILTER, this._gl.LINEAR);\r\n this._gl.texParameteri(this._gl.TEXTURE_2D, this._gl.TEXTURE_WRAP_S, this._gl.CLAMP_TO_EDGE);\r\n this._gl.texParameteri(this._gl.TEXTURE_2D, this._gl.TEXTURE_WRAP_T, this._gl.CLAMP_TO_EDGE);\r\n\r\n const rtt = this.createRenderTargetTexture(\r\n {\r\n width: destination.width,\r\n height: destination.height,\r\n },\r\n {\r\n generateMipMaps: false,\r\n type: Constants.TEXTURETYPE_UNSIGNED_INT,\r\n samplingMode: Constants.TEXTURE_BILINEAR_SAMPLINGMODE,\r\n generateDepthBuffer: false,\r\n generateStencilBuffer: false,\r\n }\r\n );\r\n\r\n if (!this._rescalePostProcess && Engine._RescalePostProcessFactory) {\r\n this._rescalePostProcess = Engine._RescalePostProcessFactory(this);\r\n }\r\n\r\n if (this._rescalePostProcess) {\r\n this._rescalePostProcess.externalTextureSamplerBinding = true;\r\n const onCompiled = () => {\r\n this._rescalePostProcess!.onApply = function (effect) {\r\n effect._bindTexture(\"textureSampler\", source);\r\n };\r\n\r\n let hostingScene: Scene = scene;\r\n\r\n if (!hostingScene) {\r\n hostingScene = this.scenes[this.scenes.length - 1];\r\n }\r\n hostingScene.postProcessManager.directRender([this._rescalePostProcess!], rtt, true);\r\n\r\n this._bindTextureDirectly(this._gl.TEXTURE_2D, destination, true);\r\n this._gl.copyTexImage2D(this._gl.TEXTURE_2D, 0, internalFormat, 0, 0, destination.width, destination.height, 0);\r\n\r\n this.unBindFramebuffer(rtt);\r\n rtt.dispose();\r\n\r\n if (onComplete) {\r\n onComplete();\r\n }\r\n };\r\n const effect = this._rescalePostProcess.getEffect();\r\n if (effect) {\r\n effect.executeWhenCompiled(onCompiled);\r\n } else {\r\n this._rescalePostProcess.onEffectCreatedObservable.addOnce((effect) => {\r\n effect.executeWhenCompiled(onCompiled);\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Wraps an external web gl texture in a Babylon texture.\r\n * @param texture defines the external texture\r\n * @param hasMipMaps defines whether the external texture has mip maps (default: false)\r\n * @param samplingMode defines the sampling mode for the external texture (default: Constants.TEXTURE_TRILINEAR_SAMPLINGMODE)\r\n * @param width defines the width for the external texture (default: 0)\r\n * @param height defines the height for the external texture (default: 0)\r\n * @returns the babylon internal texture\r\n */\r\n public wrapWebGLTexture(\r\n texture: WebGLTexture,\r\n hasMipMaps: boolean = false,\r\n samplingMode: number = Constants.TEXTURE_TRILINEAR_SAMPLINGMODE,\r\n width: number = 0,\r\n height: number = 0\r\n ): InternalTexture {\r\n const hardwareTexture = new WebGLHardwareTexture(texture, this._gl);\r\n const internalTexture = new InternalTexture(this, InternalTextureSource.External, true);\r\n internalTexture._hardwareTexture = hardwareTexture;\r\n internalTexture.baseWidth = width;\r\n internalTexture.baseHeight = height;\r\n internalTexture.width = width;\r\n internalTexture.height = height;\r\n internalTexture.isReady = true;\r\n internalTexture.useMipMaps = hasMipMaps;\r\n this.updateTextureSamplingMode(samplingMode, internalTexture);\r\n return internalTexture;\r\n }\r\n\r\n /**\r\n * Replaces the underlying WebGL handle of a texture previously created via {@link wrapWebGLTexture}, preserving\r\n * the InternalTexture identity.\r\n *\r\n * Intended for the context-loss / context-restored flow: when the host application recreates its external resource\r\n * on the new WebGL context, it calls this method to repoint Babylon's wrapper at the new handle without losing\r\n * references held by materials, render-target wrappers, particle systems, etc.\r\n *\r\n * The new handle must describe a texture with the same dimensions the wrapped texture was created with. A WebGL\r\n * handle is opaque (the dimensions can't be introspected), so we can't validate this -- passing a mismatched\r\n * handle is undefined behaviour. Sampling mode and mip-map flag are properties of the logical wrapped texture and\r\n * are re-applied to the new resource. Any render-target wrapper holding this texture as its color attachment has\r\n * its framebuffer rebuilt with the new handle (including a fresh depth/stencil renderbuffer, since the old one\r\n * came from the dead context). If the wrapper is multisampled, the MSAA framebuffer + color renderbuffer + MSAA\r\n * depth/stencil buffer are rebuilt too.\r\n *\r\n * Throws if the target was not produced by {@link wrapWebGLTexture}, if the wrapped texture is part of a multi\r\n * render-target wrapper, or if the wrapper has a depth/stencil texture (these are not supported in this version;\r\n * dispose and re-wrap).\r\n * @param internalTexture defines the wrapped InternalTexture to repoint\r\n * @param texture defines the new WebGL handle to wrap\r\n */\r\n public updateWrappedWebGLTexture(internalTexture: InternalTexture, texture: WebGLTexture): void {\r\n if (internalTexture.source !== InternalTextureSource.External) {\r\n throw new Error(\"updateWrappedWebGLTexture: target InternalTexture was not produced by wrapWebGLTexture.\");\r\n }\r\n\r\n // Pre-validate before mutating any state so a thrown precondition leaves the InternalTexture untouched.\r\n // Note: rtWrapper.texture only returns _textures[0]; walk every attachment to catch the multi-RT case where\r\n // the wrapped texture is at index > 0.\r\n for (const rtWrapper of this._renderTargetWrapperCache) {\r\n if (!rtWrapper.textures?.includes(internalTexture)) {\r\n continue;\r\n }\r\n if (rtWrapper.isMulti) {\r\n throw new Error(\"updateWrappedWebGLTexture: wrapped texture is part of a multi render-target; not supported. Dispose and re-wrap.\");\r\n }\r\n if (rtWrapper._depthStencilTexture) {\r\n // The depth/stencil texture's GL handle was also lost on context restore. Rebuilding it from the\r\n // wrapper's stored depth settings + re-attaching is feasible but non-trivial; v1 rejects and asks\r\n // the caller to dispose + re-wrap (which also recreates the depth/stencil texture via the public API).\r\n throw new Error(\"updateWrappedWebGLTexture: wrapped texture's render-target wrapper has a depth/stencil texture; not supported. Dispose and re-wrap.\");\r\n }\r\n }\r\n\r\n internalTexture._hardwareTexture = new WebGLHardwareTexture(texture, this._gl);\r\n internalTexture.isReady = true;\r\n\r\n // The new GL texture has default sampler state; clear the per-InternalTexture cached sampler params so the\r\n // next _setTexture re-applies them, then drop any binding-cache slot pointing at this InternalTexture so the\r\n // identity short-circuit (this._boundTexturesCache[channel] === internalTexture) doesn't skip the rebind.\r\n internalTexture._cachedCoordinatesMode = null;\r\n internalTexture._cachedWrapU = null;\r\n internalTexture._cachedWrapV = null;\r\n internalTexture._cachedWrapR = null;\r\n internalTexture._cachedAnisotropicFilteringLevel = null;\r\n for (const key in this._boundTexturesCache) {\r\n if (this._boundTexturesCache[key] === internalTexture) {\r\n this._boundTexturesCache[key] = null;\r\n }\r\n }\r\n\r\n this.updateTextureSamplingMode(internalTexture.samplingMode, internalTexture);\r\n\r\n // Rebuild the framebuffer of any render-target wrapper holding this wrapped texture as its color attachment.\r\n // After a context-loss / restore cycle the GL framebuffer + depth/stencil renderbuffer came from the dead\r\n // context; the consumer-supplied new texture is the moment we have a fresh handle to rebuild against.\r\n const gl = this._gl;\r\n for (const rtWrapper of this._renderTargetWrapperCache) {\r\n if (rtWrapper.texture !== internalTexture) {\r\n continue;\r\n }\r\n const webGLRtWrapper = rtWrapper as WebGLRenderTargetWrapper;\r\n const savedSamples = rtWrapper.samples;\r\n const isMSAA = savedSamples > 1;\r\n\r\n if (webGLRtWrapper._framebuffer) {\r\n gl.deleteFramebuffer(webGLRtWrapper._framebuffer);\r\n }\r\n if (!isMSAA && webGLRtWrapper._depthStencilBuffer) {\r\n gl.deleteRenderbuffer(webGLRtWrapper._depthStencilBuffer);\r\n webGLRtWrapper._depthStencilBuffer = null;\r\n }\r\n\r\n const previousFramebuffer = this._currentFramebuffer;\r\n const framebuffer = gl.createFramebuffer();\r\n this._bindUnboundFramebuffer(framebuffer);\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);\r\n if (!isMSAA) {\r\n webGLRtWrapper._depthStencilBuffer = this._setupFramebufferDepthAttachments(\r\n rtWrapper._generateStencilBuffer,\r\n rtWrapper._generateDepthBuffer,\r\n rtWrapper.width,\r\n rtWrapper.height\r\n );\r\n }\r\n this._bindUnboundFramebuffer(previousFramebuffer);\r\n webGLRtWrapper._framebuffer = framebuffer;\r\n\r\n if (isMSAA) {\r\n // Defer MSAA framebuffer + color renderbuffer + multisampled depth/stencil rebuild to the existing\r\n // helper. The helper early-returns when samples matches the cached value, so zero the cache first\r\n // to force the work; updateRenderTargetTextureSampleCount restores _samples to savedSamples.\r\n rtWrapper._samples = 1;\r\n this.updateRenderTargetTextureSampleCount(webGLRtWrapper, savedSamples);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _uploadImageToTexture(texture: InternalTexture, image: HTMLImageElement | ImageBitmap, faceIndex: number = 0, lod: number = 0) {\r\n const gl = this._gl;\r\n\r\n const textureType = this._getWebGLTextureType(texture.type);\r\n const format = this._getInternalFormat(texture.format);\r\n const internalFormat = this._getRGBABufferInternalSizedFormat(texture.type, format);\r\n\r\n const bindTarget = texture.isCube ? gl.TEXTURE_CUBE_MAP : gl.TEXTURE_2D;\r\n\r\n this._bindTextureDirectly(bindTarget, texture, true);\r\n this._unpackFlipY(texture.invertY);\r\n\r\n let target: GLenum = gl.TEXTURE_2D;\r\n if (texture.isCube) {\r\n target = gl.TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex;\r\n }\r\n\r\n gl.texImage2D(target, lod, internalFormat, format, textureType, image);\r\n this._bindTextureDirectly(bindTarget, null, true);\r\n }\r\n\r\n /**\r\n * Updates a depth texture Comparison Mode and Function.\r\n * If the comparison Function is equal to 0, the mode will be set to none.\r\n * Otherwise, this only works in webgl 2 and requires a shadow sampler in the shader.\r\n * @param texture The texture to set the comparison function for\r\n * @param comparisonFunction The comparison function to set, 0 if no comparison required\r\n */\r\n public updateTextureComparisonFunction(texture: InternalTexture, comparisonFunction: number): void {\r\n if (this.webGLVersion === 1) {\r\n Logger.Error(\"WebGL 1 does not support texture comparison.\");\r\n return;\r\n }\r\n\r\n const gl = this._gl;\r\n\r\n if (texture.isCube) {\r\n this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP, texture, true);\r\n\r\n if (comparisonFunction === 0) {\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_COMPARE_FUNC, Constants.LEQUAL);\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_COMPARE_MODE, gl.NONE);\r\n } else {\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_COMPARE_FUNC, comparisonFunction);\r\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_COMPARE_MODE, gl.COMPARE_REF_TO_TEXTURE);\r\n }\r\n\r\n this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP, null);\r\n } else {\r\n this._bindTextureDirectly(this._gl.TEXTURE_2D, texture, true);\r\n\r\n if (comparisonFunction === 0) {\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_COMPARE_FUNC, Constants.LEQUAL);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_COMPARE_MODE, gl.NONE);\r\n } else {\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_COMPARE_FUNC, comparisonFunction);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_COMPARE_MODE, gl.COMPARE_REF_TO_TEXTURE);\r\n }\r\n\r\n this._bindTextureDirectly(this._gl.TEXTURE_2D, null);\r\n }\r\n\r\n texture._comparisonFunction = comparisonFunction;\r\n }\r\n\r\n /**\r\n * Creates a webGL buffer to use with instantiation\r\n * @param capacity defines the size of the buffer\r\n * @returns the webGL buffer\r\n */\r\n public createInstancesBuffer(capacity: number): DataBuffer {\r\n const buffer = this._gl.createBuffer();\r\n\r\n if (!buffer) {\r\n throw new Error(\"Unable to create instance buffer\");\r\n }\r\n\r\n const result = new WebGLDataBuffer(buffer);\r\n result.capacity = capacity;\r\n\r\n this.bindArrayBuffer(result);\r\n this._gl.bufferData(this._gl.ARRAY_BUFFER, capacity, this._gl.DYNAMIC_DRAW);\r\n\r\n result.references = 1;\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Delete a webGL buffer used with instantiation\r\n * @param buffer defines the webGL buffer to delete\r\n */\r\n public deleteInstancesBuffer(buffer: WebGLBuffer): void {\r\n this._gl.deleteBuffer(buffer);\r\n }\r\n\r\n private async _clientWaitAsync(sync: WebGLSync, flags = 0, intervalms = 10): Promise<void> {\r\n const gl = <WebGL2RenderingContext>(this._gl as any);\r\n return await new Promise((resolve, reject) => {\r\n _RetryWithInterval(\r\n () => {\r\n const res = gl.clientWaitSync(sync, flags, 0);\r\n if (res == gl.WAIT_FAILED) {\r\n throw new Error(\"clientWaitSync failed\");\r\n }\r\n if (res == gl.TIMEOUT_EXPIRED) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n resolve,\r\n reject,\r\n intervalms\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * This function might return null synchronously, so it is technically not async.\r\n * @internal\r\n */\r\n // eslint-disable-next-line no-restricted-syntax\r\n public _readPixelsAsync(x: number, y: number, w: number, h: number, format: number, type: number, outputBuffer: ArrayBufferView): Nullable<Promise<ArrayBufferView>> {\r\n if (this._webGLVersion < 2) {\r\n throw new Error(\"_readPixelsAsync only work on WebGL2+\");\r\n }\r\n\r\n const gl = <WebGL2RenderingContext>(this._gl as any);\r\n const buf = gl.createBuffer();\r\n gl.bindBuffer(gl.PIXEL_PACK_BUFFER, buf);\r\n gl.bufferData(gl.PIXEL_PACK_BUFFER, outputBuffer.byteLength, gl.STREAM_READ);\r\n gl.readPixels(x, y, w, h, format, type, 0);\r\n gl.bindBuffer(gl.PIXEL_PACK_BUFFER, null);\r\n\r\n const sync = gl.fenceSync(gl.SYNC_GPU_COMMANDS_COMPLETE, 0);\r\n if (!sync) {\r\n return null;\r\n }\r\n\r\n gl.flush();\r\n\r\n // eslint-disable-next-line github/no-then\r\n return this._clientWaitAsync(sync, 0, 10).then(() => {\r\n gl.deleteSync(sync);\r\n\r\n gl.bindBuffer(gl.PIXEL_PACK_BUFFER, buf);\r\n gl.getBufferSubData(gl.PIXEL_PACK_BUFFER, 0, outputBuffer);\r\n gl.bindBuffer(gl.PIXEL_PACK_BUFFER, null);\r\n gl.deleteBuffer(buf);\r\n\r\n return outputBuffer;\r\n });\r\n }\r\n\r\n public override dispose(): void {\r\n this.hideLoadingUI?.();\r\n\r\n // Rescale PP\r\n if (this._rescalePostProcess) {\r\n this._rescalePostProcess.dispose();\r\n }\r\n\r\n _CommonDispose(this, this._renderingCanvas);\r\n\r\n super.dispose();\r\n }\r\n}\r\n"]}
@@ -13,7 +13,7 @@ export class NativeEngine extends Engine {
13
13
  * @internal
14
14
  */
15
15
  constructor(options = {}) {
16
- super(null, false, undefined, options.adaptToDeviceRatio);
16
+ super(null, false, options, options.adaptToDeviceRatio);
17
17
  this._initializeNativeEngine(options.adaptToDeviceRatio ?? false);
18
18
  }
19
19
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"nativeEngine.pure.js","sourceRoot":"","sources":["../../../../dev/core/src/Engines/nativeEngine.pure.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAG7D,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAU3D,gBAAgB;AAChB,MAAM,OAAO,YAAa,SAAQ,MAAM;IACpC;;;;OAIG;IACO,uBAAuB,CAAC,mBAA4B,IAAS,CAAC;IAExE;;OAEG;IACH,YAAmB,UAA+B,EAAE;QAChD,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAE1D,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,kBAAkB,IAAI,KAAK,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACa,gBAAgB;QAC5B,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACzF,CAAC;IAED;;OAEG;IACa,yBAAyB;QACrC,MAAM,IAAI,KAAK,CAAC,qFAAqF,CAAC,CAAC;IAC3G,CAAC;IAED;;OAEG;IACa,qBAAqB,CAAC,OAAwB,EAAE,KAAuB,EAAE,aAAqB,CAAC,EAAE,OAAe,CAAC;QAC7H,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACxE,CAAC;CACJ;AAQD;;;GAGG;AAEH,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAChC,IAAI,WAAW,EAAE,CAAC;QACd,OAAO;IACX,CAAC;IACD,WAAW,GAAG,IAAI,CAAC;IAEnB,SAAS,WAAW,CAAC,WAAgB,EAAE,YAAmB;QACtD,YAAY,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC9B,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC5D,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;oBACzB,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAC3D,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED,yDAAyD;IACzD,WAAW,CAAC,YAAY,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAClD,CAAC","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { type InternalTexture } from \"../Materials/Textures/internalTexture\";\r\nimport { Engine } from \"./engine.pure\";\r\nimport { ThinNativeEngine } from \"./thinNativeEngine.pure\";\r\nimport { type ThinNativeEngineOptions } from \"./thinNativeEngine\";\r\n\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\n\r\n/**\r\n * Options to create the Native engine\r\n */\r\nexport interface NativeEngineOptions extends ThinNativeEngineOptions {}\r\n\r\n/** @internal */\r\nexport class NativeEngine extends Engine {\r\n /**\r\n * @internal\r\n * Will be overriden by the Thin Native engine implementation\r\n * No code should be placed here\r\n */\r\n protected _initializeNativeEngine(_adaptToDeviceRatio: boolean): void {}\r\n\r\n /**\r\n * @internal\r\n */\r\n public constructor(options: NativeEngineOptions = {}) {\r\n super(null, false, undefined, options.adaptToDeviceRatio);\r\n\r\n this._initializeNativeEngine(options.adaptToDeviceRatio ?? false);\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override wrapWebGLTexture(): InternalTexture {\r\n throw new Error(\"wrapWebGLTexture is not supported, use wrapNativeTexture instead.\");\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override updateWrappedWebGLTexture(): void {\r\n throw new Error(\"updateWrappedWebGLTexture is not supported, use updateWrappedNativeTexture instead.\");\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _uploadImageToTexture(texture: InternalTexture, image: HTMLImageElement, _faceIndex: number = 0, _lod: number = 0) {\r\n throw new Error(\"_uploadArrayBufferViewToTexture not implemented.\");\r\n }\r\n}\r\n\r\n/**\r\n * @internal\r\n * Augments the NativeEngine type to include ThinNativeEngine methods and preventing dupplicate TS errors\r\n */\r\nexport interface NativeEngine extends Omit<ThinNativeEngine, keyof Engine> {}\r\n\r\n/**\r\n * @internal\r\n * Applies the functionality of one or more base constructors to a derived constructor.\r\n */\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for nativeEngine.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterNativeEngine(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n function applyMixins(derivedCtor: any, constructors: any[]) {\r\n constructors.forEach((baseCtor) => {\r\n Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {\r\n if (name !== \"constructor\") {\r\n derivedCtor.prototype[name] = baseCtor.prototype[name];\r\n }\r\n });\r\n });\r\n }\r\n\r\n // Apply the ThinNativeEngine mixins to the NativeEngine.\r\n applyMixins(NativeEngine, [ThinNativeEngine]);\r\n}\r\n"]}
1
+ {"version":3,"file":"nativeEngine.pure.js","sourceRoot":"","sources":["../../../../dev/core/src/Engines/nativeEngine.pure.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAG7D,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAU3D,gBAAgB;AAChB,MAAM,OAAO,YAAa,SAAQ,MAAM;IACpC;;;;OAIG;IACO,uBAAuB,CAAC,mBAA4B,IAAS,CAAC;IAExE;;OAEG;IACH,YAAmB,UAA+B,EAAE;QAChD,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAExD,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,kBAAkB,IAAI,KAAK,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACa,gBAAgB;QAC5B,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACzF,CAAC;IAED;;OAEG;IACa,yBAAyB;QACrC,MAAM,IAAI,KAAK,CAAC,qFAAqF,CAAC,CAAC;IAC3G,CAAC;IAED;;OAEG;IACa,qBAAqB,CAAC,OAAwB,EAAE,KAAuB,EAAE,aAAqB,CAAC,EAAE,OAAe,CAAC;QAC7H,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACxE,CAAC;CACJ;AAQD;;;GAGG;AAEH,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAChC,IAAI,WAAW,EAAE,CAAC;QACd,OAAO;IACX,CAAC;IACD,WAAW,GAAG,IAAI,CAAC;IAEnB,SAAS,WAAW,CAAC,WAAgB,EAAE,YAAmB;QACtD,YAAY,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC9B,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC5D,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;oBACzB,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAC3D,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED,yDAAyD;IACzD,WAAW,CAAC,YAAY,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAClD,CAAC","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { type InternalTexture } from \"../Materials/Textures/internalTexture\";\r\nimport { Engine } from \"./engine.pure\";\r\nimport { ThinNativeEngine } from \"./thinNativeEngine.pure\";\r\nimport { type ThinNativeEngineOptions } from \"./thinNativeEngine\";\r\n\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\n\r\n/**\r\n * Options to create the Native engine\r\n */\r\nexport interface NativeEngineOptions extends ThinNativeEngineOptions {}\r\n\r\n/** @internal */\r\nexport class NativeEngine extends Engine {\r\n /**\r\n * @internal\r\n * Will be overriden by the Thin Native engine implementation\r\n * No code should be placed here\r\n */\r\n protected _initializeNativeEngine(_adaptToDeviceRatio: boolean): void {}\r\n\r\n /**\r\n * @internal\r\n */\r\n public constructor(options: NativeEngineOptions = {}) {\r\n super(null, false, options, options.adaptToDeviceRatio);\r\n\r\n this._initializeNativeEngine(options.adaptToDeviceRatio ?? false);\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override wrapWebGLTexture(): InternalTexture {\r\n throw new Error(\"wrapWebGLTexture is not supported, use wrapNativeTexture instead.\");\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override updateWrappedWebGLTexture(): void {\r\n throw new Error(\"updateWrappedWebGLTexture is not supported, use updateWrappedNativeTexture instead.\");\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public override _uploadImageToTexture(texture: InternalTexture, image: HTMLImageElement, _faceIndex: number = 0, _lod: number = 0) {\r\n throw new Error(\"_uploadArrayBufferViewToTexture not implemented.\");\r\n }\r\n}\r\n\r\n/**\r\n * @internal\r\n * Augments the NativeEngine type to include ThinNativeEngine methods and preventing dupplicate TS errors\r\n */\r\nexport interface NativeEngine extends Omit<ThinNativeEngine, keyof Engine> {}\r\n\r\n/**\r\n * @internal\r\n * Applies the functionality of one or more base constructors to a derived constructor.\r\n */\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for nativeEngine.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterNativeEngine(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n function applyMixins(derivedCtor: any, constructors: any[]) {\r\n constructors.forEach((baseCtor) => {\r\n Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {\r\n if (name !== \"constructor\") {\r\n derivedCtor.prototype[name] = baseCtor.prototype[name];\r\n }\r\n });\r\n });\r\n }\r\n\r\n // Apply the ThinNativeEngine mixins to the NativeEngine.\r\n applyMixins(NativeEngine, [ThinNativeEngine]);\r\n}\r\n"]}
@@ -62,6 +62,7 @@ export interface EngineOptions extends AbstractEngineOptions, WebGLContextAttrib
62
62
  export declare class ThinEngine extends AbstractEngine {
63
63
  private static _TempClearColorUint32;
64
64
  private static _TempClearColorInt32;
65
+ private static _TempClearColorFloat32;
65
66
  /** Use this array to turn off some WebGL2 features on known buggy browsers version */
66
67
  static ExceptionList: ({
67
68
  key: string;
@@ -110,6 +111,8 @@ export declare class ThinEngine extends AbstractEngine {
110
111
  /** @internal */
111
112
  _webGLVersion: number;
112
113
  /** @internal */
114
+ _integerMRTAttachmentsMask: number;
115
+ /** @internal */
113
116
  _glSRGBExtensionValues: {
114
117
  SRGB: typeof WebGL2RenderingContext.SRGB;
115
118
  SRGB8: typeof WebGL2RenderingContext.SRGB8 | EXT_sRGB["SRGB_ALPHA_EXT"];
@@ -136,6 +139,7 @@ export declare class ThinEngine extends AbstractEngine {
136
139
  private _currentBufferPointers;
137
140
  private _currentInstanceLocations;
138
141
  private _currentInstanceBuffers;
142
+ private _cachedVertexBuffersSetInstanceDivisors;
139
143
  private _textureUnits;
140
144
  /** @internal */
141
145
  _workingCanvas: Nullable<ICanvas>;
@@ -224,6 +228,15 @@ export declare class ThinEngine extends AbstractEngine {
224
228
  * @param stencilClearValue defines the value to use to clear the stencil buffer (default is 0)
225
229
  */
226
230
  clear(color: Nullable<IColor4Like>, backBuffer: boolean, depth: boolean, stencil?: boolean, stencilClearValue?: number): void;
231
+ /**
232
+ * Clears one color attachment using the operation required by its texture format.
233
+ * @param attachmentIndex The color attachment index.
234
+ * @param color The clear value.
235
+ * @param format The texture format.
236
+ * @param type The texture type.
237
+ * @internal
238
+ */
239
+ _clearColorAttachment(attachmentIndex: number, color: IColor4Like, format: number, type: number): void;
227
240
  /**
228
241
  * @internal
229
242
  */
@@ -791,6 +804,8 @@ export declare class ThinEngine extends AbstractEngine {
791
804
  * @returns true if the value was set
792
805
  */
793
806
  setFloat4(uniform: Nullable<WebGLUniformLocation>, x: number, y: number, z: number, w: number): boolean;
807
+ /** @internal */
808
+ _applyColorWriteState(): void;
794
809
  /**
795
810
  * Apply all cached states (depth, culling, stencil and alpha)
796
811
  */
@@ -15,7 +15,7 @@ import { WebGLHardwareTexture } from "./WebGL/webGLHardwareTexture.js";
15
15
  import { InternalTexture } from "../Materials/Textures/internalTexture.js";
16
16
  import { _ConcatenateShader, _GetGlobalDefines } from "./abstractEngine.functions.js";
17
17
  import { resetCachedPipeline } from "../Materials/effect.functions.js";
18
- import { HasStencilAspect, IsDepthTexture } from "../Materials/Textures/textureHelper.functions.js";
18
+ import { HasStencilAspect, IsDepthTexture, IsIntegerTextureFormat, IsUnsignedIntegerTextureType } from "../Materials/Textures/textureHelper.functions.js";
19
19
  import { AlphaState } from "../States/alphaCullingState.js";
20
20
  /**
21
21
  * Keeps track of all the buffer info used in engine.
@@ -97,6 +97,8 @@ export class ThinEngine extends AbstractEngine {
97
97
  this.disableUniformBuffers = false;
98
98
  /** @internal */
99
99
  this._webGLVersion = 1.0;
100
+ /** @internal */
101
+ this._integerMRTAttachmentsMask = 0;
100
102
  this._vertexAttribArraysEnabled = [];
101
103
  this._uintIndicesCurrentlySet = false;
102
104
  this._currentBoundBuffer = new Array();
@@ -107,6 +109,7 @@ export class ThinEngine extends AbstractEngine {
107
109
  this._currentBufferPointers = new Array();
108
110
  this._currentInstanceLocations = new Array();
109
111
  this._currentInstanceBuffers = new Array();
112
+ this._cachedVertexBuffersSetInstanceDivisors = false;
110
113
  this._vaoRecordInProgress = false;
111
114
  this._mustWipeVertexAttributes = false;
112
115
  this._nextFreeTextureSlots = new Array();
@@ -602,7 +605,7 @@ export class ThinEngine extends AbstractEngine {
602
605
  }
603
606
  // Depth buffer
604
607
  this._depthCullingState.depthTest = true;
605
- this._depthCullingState.depthFunc = this._gl.LEQUAL;
608
+ this._depthCullingState.depthFunc = this.useReverseDepthBuffer ? this._gl.GEQUAL : this._gl.LEQUAL;
606
609
  this._depthCullingState.depthMask = true;
607
610
  // Texture maps
608
611
  this._maxSimultaneousTextures = this._caps.maxCombinedTexturesImageUnits;
@@ -735,12 +738,9 @@ export class ThinEngine extends AbstractEngine {
735
738
  let setBackBufferColor = true;
736
739
  if (this._currentRenderTarget) {
737
740
  const textureFormat = this._currentRenderTarget.texture?.format;
738
- if (textureFormat === 8 ||
739
- textureFormat === 9 ||
740
- textureFormat === 10 ||
741
- textureFormat === 11) {
741
+ if (textureFormat !== undefined && IsIntegerTextureFormat(textureFormat)) {
742
742
  const textureType = this._currentRenderTarget.texture?.type;
743
- if (textureType === 7 || textureType === 5) {
743
+ if (textureType !== undefined && IsUnsignedIntegerTextureType(textureType)) {
744
744
  ThinEngine._TempClearColorUint32[0] = color.r * 255;
745
745
  ThinEngine._TempClearColorUint32[1] = color.g * 255;
746
746
  ThinEngine._TempClearColorUint32[2] = color.b * 255;
@@ -779,6 +779,36 @@ export class ThinEngine extends AbstractEngine {
779
779
  }
780
780
  this._gl.clear(mode);
781
781
  }
782
+ /**
783
+ * Clears one color attachment using the operation required by its texture format.
784
+ * @param attachmentIndex The color attachment index.
785
+ * @param color The clear value.
786
+ * @param format The texture format.
787
+ * @param type The texture type.
788
+ * @internal
789
+ */
790
+ _clearColorAttachment(attachmentIndex, color, format, type) {
791
+ if (IsIntegerTextureFormat(format)) {
792
+ const unsigned = IsUnsignedIntegerTextureType(type);
793
+ const values = unsigned ? ThinEngine._TempClearColorUint32 : ThinEngine._TempClearColorInt32;
794
+ values[0] = color.r;
795
+ values[1] = color.g;
796
+ values[2] = color.b;
797
+ values[3] = color.a;
798
+ if (unsigned) {
799
+ this._gl.clearBufferuiv(this._gl.COLOR, attachmentIndex, values);
800
+ }
801
+ else {
802
+ this._gl.clearBufferiv(this._gl.COLOR, attachmentIndex, values);
803
+ }
804
+ return;
805
+ }
806
+ ThinEngine._TempClearColorFloat32[0] = color.r;
807
+ ThinEngine._TempClearColorFloat32[1] = color.g;
808
+ ThinEngine._TempClearColorFloat32[2] = color.b;
809
+ ThinEngine._TempClearColorFloat32[3] = color.a;
810
+ this._gl.clearBufferfv(this._gl.COLOR, attachmentIndex, ThinEngine._TempClearColorFloat32);
811
+ }
782
812
  /**
783
813
  * @internal
784
814
  */
@@ -824,6 +854,7 @@ export class ThinEngine extends AbstractEngine {
824
854
  this._resolveAndGenerateMipMapsFramebuffer(this._currentRenderTarget);
825
855
  }
826
856
  this._currentRenderTarget = rtWrapper;
857
+ this._integerMRTAttachmentsMask = !rtWrapper.isMulti && rtWrapper.texture && IsIntegerTextureFormat(rtWrapper.texture.format) ? 1 : 0;
827
858
  this._bindUnboundFramebuffer(webglRtWrapper._framebuffer);
828
859
  const gl = this._gl;
829
860
  if (!rtWrapper.isMulti) {
@@ -966,6 +997,7 @@ export class ThinEngine extends AbstractEngine {
966
997
  unBindFramebuffer(texture, disableGenerateMipMaps, onBeforeUnbind) {
967
998
  const webglRtWrapper = texture;
968
999
  this._currentRenderTarget = null;
1000
+ this._integerMRTAttachmentsMask = 0;
969
1001
  this._resolveAndGenerateMipMapsFramebuffer(texture, disableGenerateMipMaps);
970
1002
  if (onBeforeUnbind) {
971
1003
  if (webglRtWrapper._MSAAFramebuffer) {
@@ -1264,6 +1296,7 @@ export class ThinEngine extends AbstractEngine {
1264
1296
  if (!this._vaoRecordInProgress) {
1265
1297
  this._currentInstanceLocations.push(order);
1266
1298
  this._currentInstanceBuffers.push(buffer);
1299
+ this._cachedVertexBuffersSetInstanceDivisors = true;
1267
1300
  }
1268
1301
  }
1269
1302
  }
@@ -1377,6 +1410,12 @@ export class ThinEngine extends AbstractEngine {
1377
1410
  }
1378
1411
  this._currentInstanceBuffers.length = 0;
1379
1412
  this._currentInstanceLocations.length = 0;
1413
+ // The cached bindBuffers() binding set some of the divisors just reset: a later bindBuffers() call
1414
+ // with the same buffers and effect must rebind instead of drawing with divisor 0.
1415
+ if (this._cachedVertexBuffersSetInstanceDivisors) {
1416
+ this._cachedVertexBuffersSetInstanceDivisors = false;
1417
+ this._cachedVertexBuffers = null;
1418
+ }
1380
1419
  }
1381
1420
  /**
1382
1421
  * Release and free the memory of a vertex array object
@@ -1700,11 +1739,14 @@ export class ThinEngine extends AbstractEngine {
1700
1739
  * @returns the new webGL program
1701
1740
  */
1702
1741
  createShaderProgram(pipelineContext, vertexCode, fragmentCode, defines, context, transformFeedbackVaryings = null) {
1742
+ this.onBeforeShaderCompilationObservable.notifyObservers(this);
1703
1743
  const stateObject = getStateObject(this._gl);
1704
1744
  // assure the state object is correct
1705
1745
  stateObject._contextWasLost = this._contextWasLost;
1706
1746
  stateObject.validateShaderPrograms = this.validateShaderPrograms;
1707
- return createShaderProgram(pipelineContext, vertexCode, fragmentCode, defines, context || this._gl, transformFeedbackVaryings);
1747
+ const program = createShaderProgram(pipelineContext, vertexCode, fragmentCode, defines, context || this._gl, transformFeedbackVaryings);
1748
+ this.onAfterShaderCompilationObservable.notifyObservers(this);
1749
+ return program;
1708
1750
  }
1709
1751
  /**
1710
1752
  * Inline functions in shader code that are marked to be inlined
@@ -2205,18 +2247,22 @@ export class ThinEngine extends AbstractEngine {
2205
2247
  return true;
2206
2248
  }
2207
2249
  // States
2250
+ /** @internal */
2251
+ _applyColorWriteState() {
2252
+ if (this._colorWriteChanged) {
2253
+ this._colorWriteChanged = false;
2254
+ const enable = this._colorWrite;
2255
+ this._gl.colorMask(enable, enable, enable, enable);
2256
+ }
2257
+ }
2208
2258
  /**
2209
2259
  * Apply all cached states (depth, culling, stencil and alpha)
2210
2260
  */
2211
2261
  applyStates() {
2212
2262
  this._depthCullingState.apply(this._gl);
2213
2263
  this._stencilStateComposer.apply(this._gl);
2214
- this._alphaState.apply(this._gl, this._currentRenderTarget && this._currentRenderTarget.textures ? this._currentRenderTarget.textures.length : 1);
2215
- if (this._colorWriteChanged) {
2216
- this._colorWriteChanged = false;
2217
- const enable = this._colorWrite;
2218
- this._gl.colorMask(enable, enable, enable, enable);
2219
- }
2264
+ this._alphaState.apply(this._gl, this._currentRenderTarget && this._currentRenderTarget.textures ? this._currentRenderTarget.textures.length : 1, this._integerMRTAttachmentsMask);
2265
+ this._applyColorWriteState();
2220
2266
  }
2221
2267
  // Textures
2222
2268
  /**
@@ -3830,6 +3876,7 @@ export class ThinEngine extends AbstractEngine {
3830
3876
  }
3831
3877
  ThinEngine._TempClearColorUint32 = /*#__PURE__*/ new Uint32Array(4);
3832
3878
  ThinEngine._TempClearColorInt32 = /*#__PURE__*/ new Int32Array(4);
3879
+ ThinEngine._TempClearColorFloat32 = /*#__PURE__*/ new Float32Array(4);
3833
3880
  /** Use this array to turn off some WebGL2 features on known buggy browsers version */
3834
3881
  ThinEngine.ExceptionList = [
3835
3882
  { key: "Chrome/63.0", capture: "63\\.0\\.3239\\.(\\d+)", captureConstraint: 108, targets: ["uniformBuffer"] },