@onerjs/core 8.56.4 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (482) 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 +7 -1
  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/WebGPU/Extensions/engine.multiRender.pure.js +4 -0
  51. package/Engines/WebGPU/Extensions/engine.multiRender.pure.js.map +1 -1
  52. package/Engines/WebGPU/Extensions/engine.multiRender.types.d.ts +13 -0
  53. package/Engines/WebGPU/Extensions/engine.multiRender.types.js.map +1 -1
  54. package/Engines/WebGPU/Extensions/engine.query.pure.js +11 -3
  55. package/Engines/WebGPU/Extensions/engine.query.pure.js.map +1 -1
  56. package/Engines/WebGPU/Extensions/index.d.ts +1 -0
  57. package/Engines/WebGPU/Extensions/index.js +1 -0
  58. package/Engines/WebGPU/Extensions/index.js.map +1 -1
  59. package/Engines/WebGPU/Extensions/pure.d.ts +1 -1
  60. package/Engines/WebGPU/Extensions/pure.js +1 -1
  61. package/Engines/WebGPU/Extensions/pure.js.map +1 -1
  62. package/Engines/WebGPU/webgpuBundleList.d.ts +2 -0
  63. package/Engines/WebGPU/webgpuBundleList.js +4 -0
  64. package/Engines/WebGPU/webgpuBundleList.js.map +1 -1
  65. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +5 -2
  66. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  67. package/Engines/WebGPU/webgpuHardwareTexture.js +3 -1
  68. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  69. package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -1
  70. package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
  71. package/Engines/WebGPU/webgpuSnapshotRendering.d.ts +4 -0
  72. package/Engines/WebGPU/webgpuSnapshotRendering.js +40 -7
  73. package/Engines/WebGPU/webgpuSnapshotRendering.js.map +1 -1
  74. package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -1
  75. package/Engines/WebGPU/webgpuTextureHelper.js +2 -2
  76. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  77. package/Engines/WebGPU/webgpuTextureManager.d.ts +2 -0
  78. package/Engines/WebGPU/webgpuTextureManager.js +286 -13
  79. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  80. package/Engines/abstractEngine.pure.d.ts +2 -0
  81. package/Engines/abstractEngine.pure.js +7 -3
  82. package/Engines/abstractEngine.pure.js.map +1 -1
  83. package/Engines/constants.d.ts +4 -0
  84. package/Engines/constants.js +4 -0
  85. package/Engines/constants.js.map +1 -1
  86. package/Engines/thinEngine.pure.d.ts +14 -0
  87. package/Engines/thinEngine.pure.js +48 -12
  88. package/Engines/thinEngine.pure.js.map +1 -1
  89. package/Engines/thinNativeEngine.pure.d.ts +1 -0
  90. package/Engines/thinNativeEngine.pure.js +7 -1
  91. package/Engines/thinNativeEngine.pure.js.map +1 -1
  92. package/Engines/thinWebGPUEngine.d.ts +4 -0
  93. package/Engines/thinWebGPUEngine.js +10 -1
  94. package/Engines/thinWebGPUEngine.js.map +1 -1
  95. package/Engines/webgpuEngine.pure.d.ts +5 -2
  96. package/Engines/webgpuEngine.pure.js +48 -13
  97. package/Engines/webgpuEngine.pure.js.map +1 -1
  98. package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.pure.js +2 -2
  99. package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.pure.js.map +1 -1
  100. package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.d.ts +11 -2
  101. package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.js +1 -1
  102. package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.js.map +1 -1
  103. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.d.ts +9 -1
  104. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.js +6 -8
  105. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.js.map +1 -1
  106. package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.d.ts +2 -0
  107. package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.js +5 -1
  108. package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.js.map +1 -1
  109. package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.d.ts +2 -0
  110. package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.js +5 -1
  111. package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.js.map +1 -1
  112. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.d.ts +9 -0
  113. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.js +34 -9
  114. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.js.map +1 -1
  115. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.d.ts +2 -0
  116. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.js +4 -0
  117. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.js.map +1 -1
  118. package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.d.ts +2 -0
  119. package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.js +4 -0
  120. package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.js.map +1 -1
  121. package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.pure.js +19 -7
  122. package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.pure.js.map +1 -1
  123. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.d.ts +20 -2
  124. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.js +53 -10
  125. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.js.map +1 -1
  126. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.d.ts +16 -1
  127. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.js +64 -14
  128. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.js.map +1 -1
  129. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.pure.js +64 -16
  130. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.pure.js.map +1 -1
  131. package/FlowGraph/flowGraph.d.ts +4 -0
  132. package/FlowGraph/flowGraph.js +38 -7
  133. package/FlowGraph/flowGraph.js.map +1 -1
  134. package/FlowGraph/flowGraphBlock.js +3 -0
  135. package/FlowGraph/flowGraphBlock.js.map +1 -1
  136. package/FlowGraph/flowGraphConnection.d.ts +7 -0
  137. package/FlowGraph/flowGraphConnection.js +7 -0
  138. package/FlowGraph/flowGraphConnection.js.map +1 -1
  139. package/FlowGraph/flowGraphContext.d.ts +2 -1
  140. package/FlowGraph/flowGraphContext.js +4 -3
  141. package/FlowGraph/flowGraphContext.js.map +1 -1
  142. package/FlowGraph/flowGraphCoordinator.d.ts +15 -1
  143. package/FlowGraph/flowGraphCoordinator.js +47 -16
  144. package/FlowGraph/flowGraphCoordinator.js.map +1 -1
  145. package/FlowGraph/flowGraphEventBlock.d.ts +5 -0
  146. package/FlowGraph/flowGraphEventBlock.js +7 -0
  147. package/FlowGraph/flowGraphEventBlock.js.map +1 -1
  148. package/FlowGraph/flowGraphHostResolver.d.ts +2 -1
  149. package/FlowGraph/flowGraphHostResolver.js.map +1 -1
  150. package/FlowGraph/flowGraphParser.js +60 -2
  151. package/FlowGraph/flowGraphParser.js.map +1 -1
  152. package/FlowGraph/serialization.d.ts +2 -0
  153. package/FlowGraph/serialization.js +10 -22
  154. package/FlowGraph/serialization.js.map +1 -1
  155. package/FlowGraph/typeDefinitions.d.ts +8 -0
  156. package/FlowGraph/typeDefinitions.js.map +1 -1
  157. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.d.ts +5 -0
  158. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.js +8 -0
  159. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.js.map +1 -0
  160. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.d.ts +87 -0
  161. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.js +295 -0
  162. package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.js.map +1 -0
  163. package/FrameGraph/Node/Blocks/PostProcesses/pure.d.ts +1 -0
  164. package/FrameGraph/Node/Blocks/PostProcesses/pure.js +1 -0
  165. package/FrameGraph/Node/Blocks/PostProcesses/pure.js.map +1 -1
  166. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +4 -4
  167. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
  168. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.d.ts +5 -1
  169. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js +13 -1
  170. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js.map +1 -1
  171. package/FrameGraph/Node/Blocks/allBlocks.pure.js +2 -0
  172. package/FrameGraph/Node/Blocks/allBlocks.pure.js.map +1 -1
  173. package/FrameGraph/Node/Blocks/index.d.ts +1 -0
  174. package/FrameGraph/Node/Blocks/index.js +1 -0
  175. package/FrameGraph/Node/Blocks/index.js.map +1 -1
  176. package/FrameGraph/Node/Blocks/inputBlock.pure.js +20 -1
  177. package/FrameGraph/Node/Blocks/inputBlock.pure.js.map +1 -1
  178. package/FrameGraph/Node/Blocks/pure.d.ts +1 -0
  179. package/FrameGraph/Node/Blocks/pure.js +1 -0
  180. package/FrameGraph/Node/Blocks/pure.js.map +1 -1
  181. package/FrameGraph/Node/Types/nodeRenderGraphTypes.d.ts +4 -2
  182. package/FrameGraph/Node/Types/nodeRenderGraphTypes.js +4 -2
  183. package/FrameGraph/Node/Types/nodeRenderGraphTypes.js.map +1 -1
  184. package/FrameGraph/Node/nodeRenderGraph.js +1 -1
  185. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  186. package/FrameGraph/Tasks/Layers/selectionOutlineTask.js +1 -0
  187. package/FrameGraph/Tasks/Layers/selectionOutlineTask.js.map +1 -1
  188. package/FrameGraph/Tasks/Misc/cullObjectsTask.js +5 -1
  189. package/FrameGraph/Tasks/Misc/cullObjectsTask.js.map +1 -1
  190. package/FrameGraph/Tasks/Misc/lightingVolumeTask.js +1 -0
  191. package/FrameGraph/Tasks/Misc/lightingVolumeTask.js.map +1 -1
  192. package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.d.ts +69 -0
  193. package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.js +223 -0
  194. package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.js.map +1 -0
  195. package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +25 -3
  196. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +69 -33
  197. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
  198. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +3 -1
  199. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  200. package/FrameGraph/frameGraphObjectList.d.ts +6 -1
  201. package/FrameGraph/frameGraphObjectList.js.map +1 -1
  202. package/FrameGraph/frameGraphRenderContext.d.ts +3 -1
  203. package/FrameGraph/frameGraphRenderContext.js +5 -5
  204. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  205. package/FrameGraph/index.d.ts +1 -0
  206. package/FrameGraph/index.js +1 -0
  207. package/FrameGraph/index.js.map +1 -1
  208. package/FrameGraph/pure.d.ts +1 -0
  209. package/FrameGraph/pure.js +1 -0
  210. package/FrameGraph/pure.js.map +1 -1
  211. package/Inputs/scene.inputManager.d.ts +4 -0
  212. package/Inputs/scene.inputManager.js +50 -8
  213. package/Inputs/scene.inputManager.js.map +1 -1
  214. package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js +5 -5
  215. package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js.map +1 -1
  216. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js +5 -5
  217. package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js.map +1 -1
  218. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.d.ts +26 -1
  219. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js +151 -47
  220. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js.map +1 -1
  221. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js +5 -5
  222. package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js.map +1 -1
  223. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js +11 -1
  224. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js.map +1 -1
  225. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js +17 -2
  226. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js.map +1 -1
  227. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js +2 -2
  228. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js.map +1 -1
  229. package/Materials/Node/nodeMaterial.pure.d.ts +4 -0
  230. package/Materials/Node/nodeMaterial.pure.js +4 -0
  231. package/Materials/Node/nodeMaterial.pure.js.map +1 -1
  232. package/Materials/Node/nodeMaterialBuildState.d.ts +1 -1
  233. package/Materials/Node/nodeMaterialBuildState.js +25 -3
  234. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  235. package/Materials/PBR/openpbrMaterial.pure.d.ts +2 -0
  236. package/Materials/PBR/pbrBaseMaterial.pure.d.ts +2 -0
  237. package/Materials/Textures/Procedurals/proceduralTexture.pure.d.ts +13 -14
  238. package/Materials/Textures/Procedurals/proceduralTexture.pure.js +6 -6
  239. package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
  240. package/Materials/Textures/baseTexture.pure.js +3 -0
  241. package/Materials/Textures/baseTexture.pure.js.map +1 -1
  242. package/Materials/Textures/cubeTexture.pure.js +1 -1
  243. package/Materials/Textures/cubeTexture.pure.js.map +1 -1
  244. package/Materials/Textures/internalTexture.d.ts +8 -1
  245. package/Materials/Textures/internalTexture.js +9 -2
  246. package/Materials/Textures/internalTexture.js.map +1 -1
  247. package/Materials/Textures/rawTexture2DArray.functions.d.ts +3 -3
  248. package/Materials/Textures/rawTexture2DArray.functions.js.map +1 -1
  249. package/Materials/Textures/rawTexture3D.d.ts +1 -1
  250. package/Materials/Textures/rawTexture3D.js +1 -1
  251. package/Materials/Textures/rawTexture3D.js.map +1 -1
  252. package/Materials/Textures/textureHelper.functions.d.ts +14 -0
  253. package/Materials/Textures/textureHelper.functions.js +24 -0
  254. package/Materials/Textures/textureHelper.functions.js.map +1 -1
  255. package/Materials/ditheredTileFadeMaterialPlugin.d.ts +210 -0
  256. package/Materials/ditheredTileFadeMaterialPlugin.js +509 -0
  257. package/Materials/ditheredTileFadeMaterialPlugin.js.map +1 -0
  258. package/Materials/index.d.ts +1 -0
  259. package/Materials/index.js +1 -0
  260. package/Materials/index.js.map +1 -1
  261. package/Materials/materialHelper.geometryrendering.d.ts +46 -1
  262. package/Materials/materialHelper.geometryrendering.js +105 -8
  263. package/Materials/materialHelper.geometryrendering.js.map +1 -1
  264. package/Materials/prepass.defines.d.ts +2 -0
  265. package/Materials/prepass.defines.js +2 -0
  266. package/Materials/prepass.defines.js.map +1 -1
  267. package/Materials/pure.d.ts +1 -0
  268. package/Materials/pure.js +1 -0
  269. package/Materials/pure.js.map +1 -1
  270. package/Materials/standardMaterial.pure.d.ts +2 -0
  271. package/Materials/standardMaterial.pure.js +6 -3
  272. package/Materials/standardMaterial.pure.js.map +1 -1
  273. package/Meshes/Builders/polygonBuilder.pure.d.ts +4 -0
  274. package/Meshes/Builders/polygonBuilder.pure.js +4 -1
  275. package/Meshes/Builders/polygonBuilder.pure.js.map +1 -1
  276. package/Meshes/GaussianSplatting/gaussianSplatting.functions.d.ts +19 -0
  277. package/Meshes/GaussianSplatting/gaussianSplatting.functions.js +23 -0
  278. package/Meshes/GaussianSplatting/gaussianSplatting.functions.js.map +1 -0
  279. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.d.ts +3 -14
  280. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +20 -24
  281. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
  282. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +2 -0
  283. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +11 -4
  284. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
  285. package/Meshes/abstractMesh.pure.d.ts +18 -0
  286. package/Meshes/abstractMesh.pure.js +22 -0
  287. package/Meshes/abstractMesh.pure.js.map +1 -1
  288. package/Meshes/index.d.ts +1 -0
  289. package/Meshes/index.js +1 -0
  290. package/Meshes/index.js.map +1 -1
  291. package/Meshes/instancedMesh.pure.d.ts +5 -0
  292. package/Meshes/instancedMesh.pure.js +12 -0
  293. package/Meshes/instancedMesh.pure.js.map +1 -1
  294. package/Meshes/mesh.pure.js +23 -8
  295. package/Meshes/mesh.pure.js.map +1 -1
  296. package/Meshes/meshBlendingTag.d.ts +47 -0
  297. package/Meshes/meshBlendingTag.js +64 -0
  298. package/Meshes/meshBlendingTag.js.map +1 -0
  299. package/Meshes/polygonMesh.js +2 -2
  300. package/Meshes/polygonMesh.js.map +1 -1
  301. package/Meshes/pure.d.ts +1 -0
  302. package/Meshes/pure.js +1 -0
  303. package/Meshes/pure.js.map +1 -1
  304. package/Misc/fileTools.pure.js +21 -0
  305. package/Misc/fileTools.pure.js.map +1 -1
  306. package/Misc/snapshotRenderingHelper.js +2 -2
  307. package/Misc/snapshotRenderingHelper.js.map +1 -1
  308. package/Misc/tools.pure.js +1 -1
  309. package/Misc/tools.pure.js.map +1 -1
  310. package/Particles/gpuParticleSystem.pure.d.ts +2 -0
  311. package/Particles/gpuParticleSystem.pure.js +89 -28
  312. package/Particles/gpuParticleSystem.pure.js.map +1 -1
  313. package/Particles/thinParticleSystem.pure.d.ts +2 -0
  314. package/Particles/thinParticleSystem.pure.js +84 -19
  315. package/Particles/thinParticleSystem.pure.js.map +1 -1
  316. package/Particles/webgl2ParticleSystem.pure.d.ts +1 -0
  317. package/Particles/webgl2ParticleSystem.pure.js +12 -4
  318. package/Particles/webgl2ParticleSystem.pure.js.map +1 -1
  319. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js +7 -0
  320. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js.map +1 -1
  321. package/PostProcesses/index.d.ts +2 -0
  322. package/PostProcesses/index.js +2 -0
  323. package/PostProcesses/index.js.map +1 -1
  324. package/PostProcesses/meshBlendingBlueNoise.d.ts +15 -0
  325. package/PostProcesses/meshBlendingBlueNoise.js +77 -0
  326. package/PostProcesses/meshBlendingBlueNoise.js.map +1 -0
  327. package/PostProcesses/meshBlendingPostProcess.d.ts +131 -0
  328. package/PostProcesses/meshBlendingPostProcess.js +315 -0
  329. package/PostProcesses/meshBlendingPostProcess.js.map +1 -0
  330. package/PostProcesses/pure.d.ts +2 -0
  331. package/PostProcesses/pure.js +2 -0
  332. package/PostProcesses/pure.js.map +1 -1
  333. package/PostProcesses/thinMeshBlendingPostProcess.d.ts +339 -0
  334. package/PostProcesses/thinMeshBlendingPostProcess.js +771 -0
  335. package/PostProcesses/thinMeshBlendingPostProcess.js.map +1 -0
  336. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js +6 -6
  337. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js.map +1 -1
  338. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js +8 -8
  339. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js.map +1 -1
  340. package/Rendering/boundingBoxRenderer.pure.js +2 -1
  341. package/Rendering/boundingBoxRenderer.pure.js.map +1 -1
  342. package/Rendering/depthRenderer.pure.js +3 -4
  343. package/Rendering/depthRenderer.pure.js.map +1 -1
  344. package/Rendering/edgesRenderer.pure.d.ts +4 -2
  345. package/Rendering/edgesRenderer.pure.js +11 -2
  346. package/Rendering/edgesRenderer.pure.js.map +1 -1
  347. package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +10 -0
  348. package/Rendering/fluidRenderer/fluidRenderingObject.js +20 -0
  349. package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
  350. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.d.ts +9 -3
  351. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +14 -9
  352. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -1
  353. package/Rendering/geometryBufferRenderer.pure.d.ts +38 -4
  354. package/Rendering/geometryBufferRenderer.pure.js +126 -17
  355. package/Rendering/geometryBufferRenderer.pure.js.map +1 -1
  356. package/Rendering/objectRenderer.d.ts +7 -1
  357. package/Rendering/objectRenderer.js +45 -7
  358. package/Rendering/objectRenderer.js.map +1 -1
  359. package/Rendering/outlineRenderer.pure.js +6 -2
  360. package/Rendering/outlineRenderer.pure.js.map +1 -1
  361. package/Rendering/renderingManager.d.ts +1 -1
  362. package/Rendering/renderingManager.js +5 -4
  363. package/Rendering/renderingManager.js.map +1 -1
  364. package/Shaders/ShadersInclude/defaultFragmentAlpha.d.ts +5 -0
  365. package/Shaders/ShadersInclude/defaultFragmentAlpha.js +34 -0
  366. package/Shaders/ShadersInclude/defaultFragmentAlpha.js.map +1 -0
  367. package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js +5 -1
  368. package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js.map +1 -1
  369. package/Shaders/ShadersInclude/geometryRenderingFragment.d.ts +5 -0
  370. package/Shaders/ShadersInclude/geometryRenderingFragment.js +74 -0
  371. package/Shaders/ShadersInclude/geometryRenderingFragment.js.map +1 -0
  372. package/Shaders/ShadersInclude/mrtFragmentDeclaration.js +89 -0
  373. package/Shaders/ShadersInclude/mrtFragmentDeclaration.js.map +1 -1
  374. package/Shaders/ShadersInclude/openpbrBlockPrePass.js +24 -17
  375. package/Shaders/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
  376. package/Shaders/ShadersInclude/pbrBlockPrePass.js +27 -20
  377. package/Shaders/ShadersInclude/pbrBlockPrePass.js.map +1 -1
  378. package/Shaders/ShadersInclude/pbrDebug.js +6 -2
  379. package/Shaders/ShadersInclude/pbrDebug.js.map +1 -1
  380. package/Shaders/ShadersInclude/prePassDeclaration.js +95 -2
  381. package/Shaders/ShadersInclude/prePassDeclaration.js.map +1 -1
  382. package/Shaders/default.fragment.js +31 -40
  383. package/Shaders/default.fragment.js.map +1 -1
  384. package/Shaders/depthOfField.fragment.js +13 -9
  385. package/Shaders/depthOfField.fragment.js.map +1 -1
  386. package/Shaders/fluidRenderingParticleDepth.vertex.js +16 -1
  387. package/Shaders/fluidRenderingParticleDepth.vertex.js.map +1 -1
  388. package/Shaders/fluidRenderingParticleThickness.vertex.js +16 -1
  389. package/Shaders/fluidRenderingParticleThickness.vertex.js.map +1 -1
  390. package/Shaders/gaussianSplatting.fragment.js +63 -3
  391. package/Shaders/gaussianSplatting.fragment.js.map +1 -1
  392. package/Shaders/gaussianSplatting.vertex.js +80 -0
  393. package/Shaders/gaussianSplatting.vertex.js.map +1 -1
  394. package/Shaders/geometry.fragment.js +17 -11
  395. package/Shaders/geometry.fragment.js.map +1 -1
  396. package/Shaders/gpuRenderParticles.fragment.js +43 -1
  397. package/Shaders/gpuRenderParticles.fragment.js.map +1 -1
  398. package/Shaders/gpuRenderParticles.vertex.js +96 -16
  399. package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
  400. package/Shaders/meshBlending.fragment.d.ts +5 -0
  401. package/Shaders/meshBlending.fragment.js +519 -0
  402. package/Shaders/meshBlending.fragment.js.map +1 -0
  403. package/Shaders/particles.fragment.js +43 -1
  404. package/Shaders/particles.fragment.js.map +1 -1
  405. package/Shaders/particles.vertex.js +84 -3
  406. package/Shaders/particles.vertex.js.map +1 -1
  407. package/Shaders/sprites.fragment.js +52 -2
  408. package/Shaders/sprites.fragment.js.map +1 -1
  409. package/Shaders/sprites.vertex.js +62 -1
  410. package/Shaders/sprites.vertex.js.map +1 -1
  411. package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.d.ts +5 -0
  412. package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.js +33 -0
  413. package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.js.map +1 -0
  414. package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.d.ts +6 -0
  415. package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.js +76 -0
  416. package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.js.map +1 -0
  417. package/ShadersWGSL/ShadersInclude/lightFragment.js +1 -1
  418. package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
  419. package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.d.ts +5 -0
  420. package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.js +18 -0
  421. package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.js.map +1 -0
  422. package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.d.ts +1 -0
  423. package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js +11 -25
  424. package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
  425. package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.d.ts +1 -0
  426. package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js +11 -25
  427. package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js.map +1 -1
  428. package/ShadersWGSL/ShadersInclude/pbrDebug.js +5 -1
  429. package/ShadersWGSL/ShadersInclude/pbrDebug.js.map +1 -1
  430. package/ShadersWGSL/ShadersInclude/prePassDeclaration.js +6 -1
  431. package/ShadersWGSL/ShadersInclude/prePassDeclaration.js.map +1 -1
  432. package/ShadersWGSL/default.fragment.js +17 -48
  433. package/ShadersWGSL/default.fragment.js.map +1 -1
  434. package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js +15 -2
  435. package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js.map +1 -1
  436. package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js +15 -2
  437. package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js.map +1 -1
  438. package/ShadersWGSL/gaussianSplatting.fragment.js +63 -2
  439. package/ShadersWGSL/gaussianSplatting.fragment.js.map +1 -1
  440. package/ShadersWGSL/gaussianSplatting.vertex.js +80 -0
  441. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  442. package/ShadersWGSL/geometry.fragment.js +37 -2
  443. package/ShadersWGSL/geometry.fragment.js.map +1 -1
  444. package/ShadersWGSL/gpuRenderParticles.fragment.js +47 -2
  445. package/ShadersWGSL/gpuRenderParticles.fragment.js.map +1 -1
  446. package/ShadersWGSL/gpuRenderParticles.vertex.js +110 -7
  447. package/ShadersWGSL/gpuRenderParticles.vertex.js.map +1 -1
  448. package/ShadersWGSL/meshBlending.fragment.d.ts +5 -0
  449. package/ShadersWGSL/meshBlending.fragment.js +576 -0
  450. package/ShadersWGSL/meshBlending.fragment.js.map +1 -0
  451. package/ShadersWGSL/openpbr.fragment.js +2 -1
  452. package/ShadersWGSL/openpbr.fragment.js.map +1 -1
  453. package/ShadersWGSL/particles.fragment.js +45 -1
  454. package/ShadersWGSL/particles.fragment.js.map +1 -1
  455. package/ShadersWGSL/particles.vertex.js +86 -4
  456. package/ShadersWGSL/particles.vertex.js.map +1 -1
  457. package/ShadersWGSL/pbr.fragment.js +2 -1
  458. package/ShadersWGSL/pbr.fragment.js.map +1 -1
  459. package/ShadersWGSL/sprites.fragment.js +56 -2
  460. package/ShadersWGSL/sprites.fragment.js.map +1 -1
  461. package/ShadersWGSL/sprites.vertex.js +62 -1
  462. package/ShadersWGSL/sprites.vertex.js.map +1 -1
  463. package/Sprites/spriteManager.d.ts +13 -0
  464. package/Sprites/spriteManager.js +15 -0
  465. package/Sprites/spriteManager.js.map +1 -1
  466. package/Sprites/spriteRenderer.d.ts +24 -1
  467. package/Sprites/spriteRenderer.js +368 -50
  468. package/Sprites/spriteRenderer.js.map +1 -1
  469. package/Sprites/thinSprite.d.ts +4 -0
  470. package/Sprites/thinSprite.js +4 -0
  471. package/Sprites/thinSprite.js.map +1 -1
  472. package/States/alphaCullingState.d.ts +3 -1
  473. package/States/alphaCullingState.js +18 -3
  474. package/States/alphaCullingState.js.map +1 -1
  475. package/XR/webXRDefaultExperience.d.ts +5 -1
  476. package/XR/webXRDefaultExperience.js.map +1 -1
  477. package/XR/webXREnterExitUI.d.ts +2 -1
  478. package/XR/webXREnterExitUI.js.map +1 -1
  479. package/package.json +1 -1
  480. package/scene.pure.d.ts +23 -0
  481. package/scene.pure.js +35 -0
  482. package/scene.pure.js.map +1 -1
@@ -3,7 +3,9 @@ import { Buffer, VertexBuffer } from "../Buffers/buffer.pure.js";
3
3
  import { DrawWrapper } from "../Materials/drawWrapper.js";
4
4
  import { Logger } from "../Misc/logger.js";
5
5
  import { BindLogDepth } from "../Materials/materialHelper.functions.js";
6
- import { Vector3 } from "../Maths/math.vector.pure.js";
6
+ import { Matrix, Vector3 } from "../Maths/math.vector.pure.js";
7
+ import { MaterialHelperGeometryRendering } from "../Materials/materialHelper.geometryrendering.js";
8
+ import { Observable } from "../Misc/observable.pure.js";
7
9
  /**
8
10
  * Class used to render sprites.
9
11
  *
@@ -98,7 +100,13 @@ export class SpriteRenderer {
98
100
  this._useVAO = false;
99
101
  this._useInstancing = false;
100
102
  this._vertexBuffers = {};
103
+ this._previousVertexData = null;
104
+ this._previousBuffer = null;
105
+ this._vertexBuffersWithPrevious = null;
106
+ this._drawCaches = [];
107
+ this._inverseViewMatrix = null;
101
108
  this._isDisposed = false;
109
+ this._renderPassObserver = null;
102
110
  this._shadersLoaded = false;
103
111
  this._pixelPerfect = rendererOptions?.pixelPerfect ?? false;
104
112
  this._capacity = capacity;
@@ -162,34 +170,291 @@ export class SpriteRenderer {
162
170
  this._shadersLoaded = true;
163
171
  this._createEffects();
164
172
  }
173
+ /**
174
+ * Checks whether the texture and shader variant for the current render pass are ready.
175
+ * This prepares the effect without updating or drawing any sprites.
176
+ * @returns true when the renderer can draw sprites
177
+ * @see https://playground.babylonjs.com/#PVK3RV#2
178
+ */
179
+ isReady() {
180
+ if (this._isDisposed || !this._shadersLoaded || !this.texture?.isReady()) {
181
+ return false;
182
+ }
183
+ const renderPassId = this._engine._features.supportRenderPasses ? this._engine.currentRenderPassId : 0;
184
+ return !!this._getDrawCache(renderPassId).drawWrapperBase.effect?.isReady();
185
+ }
165
186
  _createEffects() {
166
187
  if (this._isDisposed || !this._shadersLoaded) {
167
188
  return;
168
189
  }
169
- this._drawWrapperBase?.dispose();
170
- this._drawWrapperDepth?.dispose();
171
- this._drawWrapperBase = new DrawWrapper(this._engine);
172
- this._drawWrapperDepth = new DrawWrapper(this._engine, false);
173
- if (this._drawWrapperBase.drawContext) {
174
- this._drawWrapperBase.drawContext.useInstancing = this._useInstancing;
175
- }
176
- if (this._drawWrapperDepth.drawContext) {
177
- this._drawWrapperDepth.drawContext.useInstancing = this._useInstancing;
178
- }
179
- let defines = "";
190
+ this._disposeDrawCaches();
191
+ const mainCache = this._getDrawCache(0);
192
+ this._drawWrapperBase = mainCache.drawWrapperBase;
193
+ this._drawWrapperDepth = mainCache.drawWrapperDepth;
194
+ }
195
+ _getDrawCache(renderPassId) {
196
+ var _a;
197
+ const fogEnabled = !!(this._scene && this._scene.fogEnabled && this._scene.fogMode !== 0 && this._fogEnabled);
198
+ const variantKey = (this._pixelPerfect ? 1 : 0) | (fogEnabled ? 2 : 0) | (this._useLogarithmicDepth ? 4 : 0);
199
+ const geometryConfiguration = MaterialHelperGeometryRendering.GetConfiguration(renderPassId);
200
+ const geometryDefines = geometryConfiguration?._defines;
201
+ let cache = this._drawCaches[renderPassId];
202
+ if (cache?.variantKey === variantKey && cache.geometryDefines === geometryDefines && cache.geometryConfiguration === geometryConfiguration) {
203
+ return cache;
204
+ }
205
+ const defines = [];
180
206
  if (this._pixelPerfect) {
181
- defines += "#define PIXEL_PERFECT\n";
207
+ defines.push("#define PIXEL_PERFECT");
182
208
  }
183
- if (this._scene && this._scene.fogEnabled && this._scene.fogMode !== 0 && this._fogEnabled) {
184
- defines += "#define FOG\n";
209
+ if (fogEnabled) {
210
+ defines.push("#define FOG");
185
211
  }
186
212
  if (this._useLogarithmicDepth) {
187
- defines += "#define LOGARITHMICDEPTH\n";
213
+ defines.push("#define LOGARITHMICDEPTH");
214
+ }
215
+ const usesGeometryRendering = MaterialHelperGeometryRendering._PrepareStringDefines(renderPassId, defines);
216
+ const mrtCount = usesGeometryRendering ? (MaterialHelperGeometryRendering.GetConfiguration(renderPassId)._mrtCount ?? 0) : 0;
217
+ if (!usesGeometryRendering) {
218
+ defines.push("#define SCENE_MRT_COUNT 0");
219
+ }
220
+ const joinedDefines = defines.join("\n");
221
+ if (cache) {
222
+ this._disposeDrawCache(cache);
223
+ this._drawCaches[renderPassId] = undefined;
224
+ }
225
+ const usesVelocity = joinedDefines.indexOf("#define PREPASS_VELOCITY\n") !== -1 || joinedDefines.indexOf("#define PREPASS_VELOCITY_LINEAR\n") !== -1;
226
+ const usesObjectId = joinedDefines.indexOf("#define PREPASS_OBJECT_ID\n") !== -1;
227
+ const usesMeshBlendTag = joinedDefines.indexOf("#define PREPASS_MESH_BLEND_TAG\n") !== -1;
228
+ const attributes = [VertexBuffer.PositionKind, "options", "offsets", "inverts", "cellInfo", VertexBuffer.ColorKind];
229
+ let vertexBuffers = this._vertexBuffers;
230
+ if (usesVelocity) {
231
+ vertexBuffers = this._ensurePreviousVertexBuffer();
232
+ attributes.push("previousPosition", "previousOptions");
233
+ }
234
+ const uniforms = [
235
+ "view",
236
+ "projection",
237
+ "textureInfos",
238
+ "alphaTest",
239
+ "vFogInfos",
240
+ "vFogColor",
241
+ "logarithmicDepthConstant",
242
+ "invView",
243
+ "cameraInfo",
244
+ "spriteNormalSign",
245
+ "previousView",
246
+ "previousProjection",
247
+ "objectId",
248
+ "meshBlendTag",
249
+ "geometryZeroAlphaDiscard",
250
+ ];
251
+ const drawWrapperBase = new DrawWrapper(this._engine);
252
+ const drawWrapperDepth = new DrawWrapper(this._engine, false);
253
+ if (drawWrapperBase.drawContext) {
254
+ drawWrapperBase.drawContext.useInstancing = this._useInstancing;
255
+ }
256
+ if (drawWrapperDepth.drawContext) {
257
+ drawWrapperDepth.drawContext.useInstancing = this._useInstancing;
258
+ }
259
+ const effectOptions = {
260
+ attributes,
261
+ uniformsNames: uniforms,
262
+ samplers: ["diffuseSampler"],
263
+ defines: joinedDefines,
264
+ fallbacks: null,
265
+ onCompiled: null,
266
+ onError: null,
267
+ indexParameters: { SCENE_MRT_COUNT: mrtCount },
268
+ multiTarget: usesGeometryRendering,
269
+ shaderLanguage: this._shaderLanguage,
270
+ };
271
+ const effect = this._engine.createEffect("sprites", effectOptions, this._engine);
272
+ drawWrapperBase.effect = effect;
273
+ drawWrapperBase.defines = joinedDefines;
274
+ drawWrapperDepth.effect = effect;
275
+ effect._refCount++;
276
+ drawWrapperDepth.defines = joinedDefines;
277
+ drawWrapperDepth.materialContext = drawWrapperBase.materialContext;
278
+ cache = {
279
+ drawWrapperBase,
280
+ drawWrapperDepth,
281
+ defines: joinedDefines,
282
+ geometryDefines,
283
+ geometryConfiguration,
284
+ variantKey,
285
+ vertexBuffers,
286
+ usesGeometryRendering,
287
+ usesVelocity,
288
+ usesObjectId,
289
+ usesMeshBlendTag,
290
+ usesInverseView: geometryConfiguration?.defines.PREPASS_POSITION_INDEX !== undefined || geometryConfiguration?.defines.PREPASS_WORLD_NORMAL_INDEX !== undefined,
291
+ usesNormals: geometryConfiguration?.defines.PREPASS_NORMAL_INDEX !== undefined || geometryConfiguration?.defines.PREPASS_WORLD_NORMAL_INDEX !== undefined,
292
+ usesNormalizedDepth: geometryConfiguration?.defines.PREPASS_NORMALIZED_VIEW_DEPTH_INDEX !== undefined,
293
+ cameraHistories: usesVelocity ? new WeakMap() : undefined,
294
+ };
295
+ this._drawCaches[renderPassId] = cache;
296
+ if (renderPassId !== 0 && !this._renderPassObserver) {
297
+ this._renderPassObserver = ((_a = this._engine)._onReleaseRenderPassObservable ?? (_a._onReleaseRenderPassObservable = new Observable())).add((id) => {
298
+ const releasedCache = this._drawCaches[id];
299
+ if (releasedCache) {
300
+ this._disposeDrawCache(releasedCache);
301
+ delete this._drawCaches[id];
302
+ this._disposePreviousVertexBufferIfUnused();
303
+ }
304
+ });
305
+ }
306
+ this._disposePreviousVertexBufferIfUnused();
307
+ return cache;
308
+ }
309
+ _ensurePreviousVertexBuffer() {
310
+ if (this._vertexBuffersWithPrevious) {
311
+ return this._vertexBuffersWithPrevious;
312
+ }
313
+ const previousVertexBufferSize = 6;
314
+ this._previousVertexData = new Float32Array(this._capacity * previousVertexBufferSize * (this._useInstancing ? 1 : 4));
315
+ this._previousBuffer = new Buffer(this._engine, this._previousVertexData, true, previousVertexBufferSize);
316
+ this._vertexBuffersWithPrevious = { ...this._vertexBuffers };
317
+ this._vertexBuffersWithPrevious["previousPosition"] = this._previousBuffer.createVertexBuffer("previousPosition", 0, 4, previousVertexBufferSize, this._useInstancing);
318
+ this._vertexBuffersWithPrevious["previousOptions"] = this._previousBuffer.createVertexBuffer("previousOptions", 4, 2, previousVertexBufferSize, this._useInstancing);
319
+ return this._vertexBuffersWithPrevious;
320
+ }
321
+ _disposeDrawCache(cache) {
322
+ if (cache.vertexArrayObject) {
323
+ this._engine.releaseVertexArrayObject(cache.vertexArrayObject);
324
+ }
325
+ cache.drawWrapperBase.dispose();
326
+ cache.drawWrapperDepth.dispose();
327
+ }
328
+ _disposeDrawCaches() {
329
+ for (const cache of this._drawCaches) {
330
+ if (cache) {
331
+ this._disposeDrawCache(cache);
332
+ }
333
+ }
334
+ this._drawCaches = [];
335
+ this._disposePreviousVertexBuffer();
336
+ }
337
+ _disposePreviousVertexBufferIfUnused() {
338
+ for (const cache of this._drawCaches) {
339
+ if (cache?.usesVelocity) {
340
+ return;
341
+ }
342
+ }
343
+ this._disposePreviousVertexBuffer();
344
+ }
345
+ _disposePreviousVertexBuffer() {
346
+ if (this._previousBuffer) {
347
+ this._previousBuffer.dispose();
348
+ this._previousBuffer = null;
349
+ this._previousVertexData = null;
350
+ this._vertexBuffersWithPrevious = null;
351
+ }
352
+ }
353
+ _bindVertexBuffers(cache, effect) {
354
+ if (this._useVAO) {
355
+ if (!cache.vertexArrayObject) {
356
+ cache.vertexArrayObject = this._engine.recordVertexArrayObject(cache.vertexBuffers, this._indexBuffer, effect);
357
+ }
358
+ this._engine.bindVertexArrayObject(cache.vertexArrayObject, this._indexBuffer);
359
+ }
360
+ else {
361
+ this._engine.bindBuffers(cache.vertexBuffers, this._indexBuffer, effect);
362
+ }
363
+ }
364
+ _getCameraHistory(cache, viewMatrix, projectionMatrix, frameId) {
365
+ const cameraKey = (this._scene?.activeCamera ?? viewMatrix);
366
+ let history = cache.cameraHistories.get(cameraKey);
367
+ if (!history) {
368
+ const currentView = Matrix.FromArray(viewMatrix.asArray());
369
+ const currentProjection = Matrix.FromArray(projectionMatrix.asArray());
370
+ history = {
371
+ previousView: currentView.clone(),
372
+ previousProjection: currentProjection.clone(),
373
+ currentView,
374
+ currentProjection,
375
+ sprites: new WeakMap(),
376
+ frameId,
377
+ };
378
+ cache.cameraHistories.set(cameraKey, history);
379
+ }
380
+ else {
381
+ if (history.frameId !== frameId) {
382
+ if (history.frameId === frameId - 1) {
383
+ history.previousView.copyFrom(history.currentView);
384
+ history.previousProjection.copyFrom(history.currentProjection);
385
+ }
386
+ else {
387
+ Matrix.FromArrayToRef(viewMatrix.asArray(), 0, history.previousView);
388
+ Matrix.FromArrayToRef(projectionMatrix.asArray(), 0, history.previousProjection);
389
+ history.sprites = new WeakMap();
390
+ }
391
+ history.frameId = frameId;
392
+ }
393
+ Matrix.FromArrayToRef(viewMatrix.asArray(), 0, history.currentView);
394
+ Matrix.FromArrayToRef(projectionMatrix.asArray(), 0, history.currentProjection);
395
+ }
396
+ return history;
397
+ }
398
+ _prepareSpriteHistory(history, sprite, frameId) {
399
+ const spriteHistory = history.sprites.get(sprite);
400
+ if (spriteHistory && spriteHistory.frameId !== frameId) {
401
+ if (spriteHistory.frameId !== frameId - 1) {
402
+ history.sprites.delete(sprite);
403
+ return null;
404
+ }
405
+ spriteHistory.previousX = spriteHistory.currentX;
406
+ spriteHistory.previousY = spriteHistory.currentY;
407
+ spriteHistory.previousZ = spriteHistory.currentZ;
408
+ spriteHistory.previousAngle = spriteHistory.currentAngle;
409
+ spriteHistory.previousWidth = spriteHistory.currentWidth;
410
+ spriteHistory.previousHeight = spriteHistory.currentHeight;
411
+ spriteHistory.frameId = frameId;
412
+ }
413
+ return spriteHistory ?? null;
414
+ }
415
+ _updateSpriteHistory(history, sprite, spriteHistory, floatingOriginOffset, frameId) {
416
+ const x = sprite.position.x - floatingOriginOffset.x;
417
+ const y = sprite.position.y - floatingOriginOffset.y;
418
+ const z = sprite.position.z - floatingOriginOffset.z;
419
+ if (!spriteHistory) {
420
+ history.sprites.set(sprite, {
421
+ previousX: x,
422
+ previousY: y,
423
+ previousZ: z,
424
+ previousAngle: sprite.angle,
425
+ previousWidth: sprite.width,
426
+ previousHeight: sprite.height,
427
+ currentX: x,
428
+ currentY: y,
429
+ currentZ: z,
430
+ currentAngle: sprite.angle,
431
+ currentWidth: sprite.width,
432
+ currentHeight: sprite.height,
433
+ frameId,
434
+ });
435
+ return;
436
+ }
437
+ if (spriteHistory.frameId === frameId) {
438
+ spriteHistory.currentX = x;
439
+ spriteHistory.currentY = y;
440
+ spriteHistory.currentZ = z;
441
+ spriteHistory.currentAngle = sprite.angle;
442
+ spriteHistory.currentWidth = sprite.width;
443
+ spriteHistory.currentHeight = sprite.height;
444
+ }
445
+ }
446
+ _animateSprite(sprite, deltaTime) {
447
+ if (!this._scene) {
448
+ sprite._animate(deltaTime);
449
+ return;
450
+ }
451
+ const frameId = this._scene.getFrameId();
452
+ const frameGraphRendering = !!this._scene.frameGraph || !!MaterialHelperGeometryRendering.GetConfiguration(this._engine.currentRenderPassId);
453
+ if (!frameGraphRendering || sprite._animationFrameId !== frameId || sprite._animationSceneId !== this._scene.uniqueId) {
454
+ sprite._animationFrameId = frameId;
455
+ sprite._animationSceneId = this._scene.uniqueId;
456
+ sprite._animate(deltaTime);
188
457
  }
189
- this._drawWrapperBase.effect = this._engine.createEffect("sprites", [VertexBuffer.PositionKind, "options", "offsets", "inverts", "cellInfo", VertexBuffer.ColorKind], ["view", "projection", "textureInfos", "alphaTest", "vFogInfos", "vFogColor", "logarithmicDepthConstant"], ["diffuseSampler"], defines, undefined, undefined, undefined, undefined, this._shaderLanguage);
190
- this._drawWrapperDepth.effect = this._drawWrapperBase.effect;
191
- this._drawWrapperBase.effect._refCount++;
192
- this._drawWrapperDepth.materialContext = this._drawWrapperBase.materialContext;
193
458
  }
194
459
  /**
195
460
  * Render all child sprites
@@ -203,16 +468,21 @@ export class SpriteRenderer {
203
468
  if (!this._shadersLoaded || !this.texture || !this.texture.isReady() || !sprites.length) {
204
469
  return;
205
470
  }
206
- const drawWrapper = this._drawWrapperBase;
207
- const drawWrapperDepth = this._drawWrapperDepth;
471
+ const engine = this._engine;
472
+ const renderPassId = engine._features.supportRenderPasses ? engine.currentRenderPassId : 0;
473
+ const drawCache = this._getDrawCache(renderPassId);
474
+ const drawWrapper = drawCache.drawWrapperBase;
475
+ const drawWrapperDepth = drawCache.drawWrapperDepth;
208
476
  const shouldRenderFog = this.fogEnabled && this._scene && this._scene.fogEnabled && this._scene.fogMode !== 0;
209
477
  const effect = drawWrapper.effect;
210
478
  // Check
211
479
  if (!effect.isReady()) {
212
480
  return;
213
481
  }
214
- const engine = this._engine;
215
482
  const useRightHandedSystem = !!(this._scene && this._scene.useRightHandedSystem);
483
+ const frameId = this._scene?.getFrameId() ?? engine.frameId;
484
+ const usesVelocity = drawCache.usesVelocity;
485
+ const cameraHistory = usesVelocity ? this._getCameraHistory(drawCache, viewMatrix, projectionMatrix, frameId) : null;
216
486
  // Sprites
217
487
  const max = Math.min(this._capacity, sprites.length);
218
488
  let offset = 0;
@@ -224,19 +494,26 @@ export class SpriteRenderer {
224
494
  continue;
225
495
  }
226
496
  noSprite = false;
227
- sprite._animate(deltaTime);
497
+ this._animateSprite(sprite, deltaTime);
228
498
  const baseSize = this.texture.getBaseSize(); // This could be change by the user inside the animate callback (like onAnimationEnd)
229
- this._appendSpriteVertex(offset++, sprite, 0, 0, baseSize, useRightHandedSystem, customSpriteUpdate, floatingOriginOffset);
499
+ const spriteHistory = cameraHistory ? this._prepareSpriteHistory(cameraHistory, sprite, frameId) : null;
500
+ this._appendSpriteVertex(offset++, sprite, 0, 0, baseSize, useRightHandedSystem, customSpriteUpdate, floatingOriginOffset, spriteHistory, usesVelocity);
230
501
  if (!this._useInstancing) {
231
- this._appendSpriteVertex(offset++, sprite, 1, 0, baseSize, useRightHandedSystem, customSpriteUpdate, floatingOriginOffset);
232
- this._appendSpriteVertex(offset++, sprite, 1, 1, baseSize, useRightHandedSystem, customSpriteUpdate, floatingOriginOffset);
233
- this._appendSpriteVertex(offset++, sprite, 0, 1, baseSize, useRightHandedSystem, customSpriteUpdate, floatingOriginOffset);
502
+ this._appendSpriteVertex(offset++, sprite, 1, 0, baseSize, useRightHandedSystem, customSpriteUpdate, floatingOriginOffset, spriteHistory, usesVelocity);
503
+ this._appendSpriteVertex(offset++, sprite, 1, 1, baseSize, useRightHandedSystem, customSpriteUpdate, floatingOriginOffset, spriteHistory, usesVelocity);
504
+ this._appendSpriteVertex(offset++, sprite, 0, 1, baseSize, useRightHandedSystem, customSpriteUpdate, floatingOriginOffset, spriteHistory, usesVelocity);
505
+ }
506
+ if (cameraHistory) {
507
+ this._updateSpriteHistory(cameraHistory, sprite, spriteHistory, floatingOriginOffset, frameId);
234
508
  }
235
509
  }
236
510
  if (noSprite) {
237
511
  return;
238
512
  }
239
513
  this._buffer.update(this._vertexData);
514
+ if (usesVelocity) {
515
+ this._previousBuffer.update(this._previousVertexData);
516
+ }
240
517
  const culling = !!engine.depthCullingState.cull;
241
518
  const zOffset = engine.depthCullingState.zOffset;
242
519
  const zOffsetUnits = engine.depthCullingState.zOffsetUnits;
@@ -246,6 +523,30 @@ export class SpriteRenderer {
246
523
  effect.setTexture("diffuseSampler", this.texture);
247
524
  effect.setMatrix("view", viewMatrix);
248
525
  effect.setMatrix("projection", projectionMatrix);
526
+ if (drawCache.usesGeometryRendering) {
527
+ if (drawCache.usesInverseView) {
528
+ this._inverseViewMatrix ?? (this._inverseViewMatrix = Matrix.Identity());
529
+ Matrix.FromArrayToRef(viewMatrix.asArray(), 0, this._inverseViewMatrix).invertToRef(this._inverseViewMatrix);
530
+ effect.setMatrix("invView", this._inverseViewMatrix);
531
+ }
532
+ if (drawCache.usesNormals) {
533
+ effect.setFloat("spriteNormalSign", useRightHandedSystem ? 1 : -1);
534
+ }
535
+ if (drawCache.usesNormalizedDepth) {
536
+ const camera = this._scene?.activeCamera;
537
+ effect.setFloat2("cameraInfo", camera?.minZ ?? 0, camera?.maxZ ?? 1);
538
+ }
539
+ if (drawCache.usesObjectId) {
540
+ effect.setFloat("objectId", 0);
541
+ }
542
+ if (drawCache.usesMeshBlendTag) {
543
+ effect.setInt("meshBlendTag", 0);
544
+ }
545
+ if (cameraHistory) {
546
+ effect.setMatrix("previousView", cameraHistory.previousView);
547
+ effect.setMatrix("previousProjection", cameraHistory.previousProjection);
548
+ }
549
+ }
249
550
  // Scene Info
250
551
  if (shouldRenderFog) {
251
552
  const scene = this._scene;
@@ -257,16 +558,7 @@ export class SpriteRenderer {
257
558
  if (this.useLogarithmicDepth && this._scene) {
258
559
  BindLogDepth(drawWrapper.defines, effect, this._scene);
259
560
  }
260
- if (this._useVAO) {
261
- if (!this._vertexArrayObject) {
262
- this._vertexArrayObject = engine.recordVertexArrayObject(this._vertexBuffers, this._indexBuffer, effect);
263
- }
264
- engine.bindVertexArrayObject(this._vertexArrayObject, this._indexBuffer);
265
- }
266
- else {
267
- // VBOs
268
- engine.bindBuffers(this._vertexBuffers, this._indexBuffer, effect);
269
- }
561
+ this._bindVertexBuffers(drawCache, effect);
270
562
  // Draw order
271
563
  engine.depthCullingState.depthFunc = engine.useReverseDepthBuffer ? 518 : 515;
272
564
  if (!this.disableDepthWrite) {
@@ -284,11 +576,21 @@ export class SpriteRenderer {
284
576
  effect.setBool("alphaTest", false);
285
577
  }
286
578
  engine.setAlphaMode(this.blendMode);
287
- if (this._useInstancing) {
288
- engine.drawArraysType(7, 0, 4, offset);
579
+ if (drawCache.usesGeometryRendering) {
580
+ MaterialHelperGeometryRendering._BindZeroAlphaDiscard(engine, effect);
581
+ }
582
+ try {
583
+ if (MaterialHelperGeometryRendering._BindAttachmentsForEffect(engine, effect)) {
584
+ if (this._useInstancing) {
585
+ engine.drawArraysType(7, 0, 4, offset);
586
+ }
587
+ else {
588
+ engine.drawElementsType(0, 0, (offset / 4) * 6);
589
+ }
590
+ }
289
591
  }
290
- else {
291
- engine.drawElementsType(0, 0, (offset / 4) * 6);
592
+ finally {
593
+ MaterialHelperGeometryRendering._RestoreAttachments(engine);
292
594
  }
293
595
  if (this.autoResetAlpha) {
294
596
  engine.setAlphaMode(0);
@@ -299,7 +601,7 @@ export class SpriteRenderer {
299
601
  }
300
602
  engine.unbindInstanceAttributes();
301
603
  }
302
- _appendSpriteVertex(index, sprite, offsetX, offsetY, baseSize, useRightHandedSystem, customSpriteUpdate, floatingOriginOffset) {
604
+ _appendSpriteVertex(index, sprite, offsetX, offsetY, baseSize, useRightHandedSystem, customSpriteUpdate, floatingOriginOffset, spriteHistory, writeHistory) {
303
605
  let arrayOffset = index * this._vertexBufferSize;
304
606
  if (offsetX === 0) {
305
607
  offsetX = this._epsilon;
@@ -359,6 +661,15 @@ export class SpriteRenderer {
359
661
  this._vertexData[arrayOffset + 15] = sprite.color.g;
360
662
  this._vertexData[arrayOffset + 16] = sprite.color.b;
361
663
  this._vertexData[arrayOffset + 17] = sprite.color.a;
664
+ if (writeHistory && this._previousVertexData) {
665
+ const previousArrayOffset = index * 6;
666
+ this._previousVertexData[previousArrayOffset] = spriteHistory?.previousX ?? sprite.position.x - floatingOriginOffset.x;
667
+ this._previousVertexData[previousArrayOffset + 1] = spriteHistory?.previousY ?? sprite.position.y - floatingOriginOffset.y;
668
+ this._previousVertexData[previousArrayOffset + 2] = spriteHistory?.previousZ ?? sprite.position.z - floatingOriginOffset.z;
669
+ this._previousVertexData[previousArrayOffset + 3] = spriteHistory?.previousAngle ?? sprite.angle;
670
+ this._previousVertexData[previousArrayOffset + 4] = spriteHistory?.previousWidth ?? sprite.width;
671
+ this._previousVertexData[previousArrayOffset + 5] = spriteHistory?.previousHeight ?? sprite.height;
672
+ }
362
673
  }
363
674
  _buildIndexBuffer() {
364
675
  const indices = [];
@@ -382,7 +693,16 @@ export class SpriteRenderer {
382
693
  this._buildIndexBuffer();
383
694
  }
384
695
  if (this._useVAO) {
385
- this._vertexArrayObject = undefined;
696
+ for (const cache of this._drawCaches) {
697
+ if (cache) {
698
+ cache.vertexArrayObject = undefined;
699
+ }
700
+ }
701
+ }
702
+ for (const cache of this._drawCaches) {
703
+ if (cache?.usesVelocity) {
704
+ cache.cameraHistories = new WeakMap();
705
+ }
386
706
  }
387
707
  this._buffer._rebuild();
388
708
  for (const key in this._vertexBuffers) {
@@ -390,11 +710,15 @@ export class SpriteRenderer {
390
710
  vertexBuffer._rebuild();
391
711
  }
392
712
  this._spriteBuffer?._rebuild();
713
+ this._previousBuffer?._rebuild();
393
714
  }
394
715
  /**
395
716
  * Release associated resources
396
717
  */
397
718
  dispose() {
719
+ this._engine._onReleaseRenderPassObservable?.remove(this._renderPassObserver);
720
+ this._renderPassObserver = null;
721
+ this._disposeDrawCaches();
398
722
  if (this._buffer) {
399
723
  this._buffer.dispose();
400
724
  this._buffer = null;
@@ -407,16 +731,10 @@ export class SpriteRenderer {
407
731
  this._engine._releaseBuffer(this._indexBuffer);
408
732
  this._indexBuffer = null;
409
733
  }
410
- if (this._vertexArrayObject) {
411
- this._engine.releaseVertexArrayObject(this._vertexArrayObject);
412
- this._vertexArrayObject = null;
413
- }
414
734
  if (this.texture) {
415
735
  this.texture.dispose();
416
736
  this.texture = null;
417
737
  }
418
- this._drawWrapperBase?.dispose();
419
- this._drawWrapperDepth?.dispose();
420
738
  this._isDisposed = true;
421
739
  }
422
740
  }