@babylonjs/core 5.0.0-beta.4 → 5.0.0-beta.5

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 (431) hide show
  1. package/Audio/sound.js +3 -1
  2. package/Audio/sound.js.map +1 -1
  3. package/Behaviors/Meshes/baseSixDofDragBehavior.js +29 -26
  4. package/Behaviors/Meshes/baseSixDofDragBehavior.js.map +1 -1
  5. package/Behaviors/Meshes/pointerDragBehavior.js +2 -0
  6. package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
  7. package/Bones/bone.d.ts +2 -1
  8. package/Bones/bone.js +28 -18
  9. package/Bones/bone.js.map +1 -1
  10. package/Bones/skeleton.js +3 -3
  11. package/Bones/skeleton.js.map +1 -1
  12. package/Buffers/buffer.js +2 -2
  13. package/Buffers/buffer.js.map +1 -1
  14. package/Cameras/Inputs/freeCameraTouchInput.js +2 -4
  15. package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
  16. package/Cameras/camera.js +1 -1
  17. package/Cameras/camera.js.map +1 -1
  18. package/Compute/computeEffect.js +2 -2
  19. package/Compute/computeEffect.js.map +1 -1
  20. package/Debug/debugLayer.js +1 -1
  21. package/Debug/debugLayer.js.map +1 -1
  22. package/DeviceInput/Helpers/eventFactory.js +1 -1
  23. package/DeviceInput/Helpers/eventFactory.js.map +1 -1
  24. package/DeviceInput/InputDevices/deviceEnums.d.ts +52 -1
  25. package/DeviceInput/InputDevices/deviceEnums.js +52 -0
  26. package/DeviceInput/InputDevices/deviceEnums.js.map +1 -1
  27. package/DeviceInput/InputDevices/deviceTypes.d.ts +2 -2
  28. package/DeviceInput/InputDevices/deviceTypes.js.map +1 -1
  29. package/DeviceInput/InputDevices/internalDeviceSourceManager.js +1 -0
  30. package/DeviceInput/InputDevices/internalDeviceSourceManager.js.map +1 -1
  31. package/DeviceInput/InputDevices/webDeviceInputSystem.js +22 -18
  32. package/DeviceInput/InputDevices/webDeviceInputSystem.js.map +1 -1
  33. package/Engines/Extensions/engine.cubeTexture.js +1 -1
  34. package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
  35. package/Engines/Extensions/engine.multiview.d.ts +5 -0
  36. package/Engines/Extensions/engine.multiview.js +4 -1
  37. package/Engines/Extensions/engine.multiview.js.map +1 -1
  38. package/Engines/Native/nativeInterfaces.d.ts +1 -0
  39. package/Engines/Native/nativeInterfaces.js.map +1 -1
  40. package/Engines/Processors/Expressions/shaderDefineExpression.js +1 -1
  41. package/Engines/Processors/Expressions/shaderDefineExpression.js.map +1 -1
  42. package/Engines/Processors/shaderCodeInliner.js +13 -13
  43. package/Engines/Processors/shaderCodeInliner.js.map +1 -1
  44. package/Engines/WebGPU/webgpuCacheBindGroups.js +9 -9
  45. package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
  46. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +1 -1
  47. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  48. package/Engines/WebGPU/webgpuComputeContext.js +1 -1
  49. package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
  50. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +13 -13
  51. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
  52. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +30 -30
  53. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  54. package/Engines/WebGPU/webgpuTextureHelper.js +4 -4
  55. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  56. package/Engines/engine.d.ts +1 -1
  57. package/Engines/engine.js +1 -1
  58. package/Engines/engine.js.map +1 -1
  59. package/Engines/nativeEngine.d.ts +1 -0
  60. package/Engines/nativeEngine.js +36 -11
  61. package/Engines/nativeEngine.js.map +1 -1
  62. package/Engines/nullEngine.js +1 -1
  63. package/Engines/nullEngine.js.map +1 -1
  64. package/Engines/thinEngine.js +8 -8
  65. package/Engines/thinEngine.js.map +1 -1
  66. package/Engines/webgpuEngine.js +4 -4
  67. package/Engines/webgpuEngine.js.map +1 -1
  68. package/Gamepads/Controllers/daydreamController.js +1 -1
  69. package/Gamepads/Controllers/daydreamController.js.map +1 -1
  70. package/Gamepads/gamepadManager.js +1 -1
  71. package/Gamepads/gamepadManager.js.map +1 -1
  72. package/Gizmos/gizmoManager.d.ts +2 -0
  73. package/Gizmos/gizmoManager.js +28 -24
  74. package/Gizmos/gizmoManager.js.map +1 -1
  75. package/Instrumentation/sceneInstrumentation.js +2 -2
  76. package/Instrumentation/sceneInstrumentation.js.map +1 -1
  77. package/Layers/layer.d.ts +2 -2
  78. package/Layers/layer.js.map +1 -1
  79. package/Lights/Shadows/cascadedShadowGenerator.js +2 -2
  80. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  81. package/Lights/Shadows/shadowGenerator.js +2 -2
  82. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  83. package/Loading/Plugins/babylonFileLoader.js +78 -27
  84. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  85. package/Loading/loadingScreen.js +8 -8
  86. package/Loading/loadingScreen.js.map +1 -1
  87. package/Loading/sceneLoader.js +3 -3
  88. package/Loading/sceneLoader.js.map +1 -1
  89. package/Materials/Node/Blocks/Dual/clipPlanesBlock.d.ts +37 -0
  90. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js +117 -0
  91. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -0
  92. package/Materials/Node/Blocks/Dual/currentScreenBlock.js +12 -12
  93. package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
  94. package/Materials/Node/Blocks/Dual/fogBlock.js +5 -5
  95. package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
  96. package/Materials/Node/Blocks/Dual/imageSourceBlock.js +11 -11
  97. package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
  98. package/Materials/Node/Blocks/Dual/index.d.ts +1 -0
  99. package/Materials/Node/Blocks/Dual/index.js +1 -0
  100. package/Materials/Node/Blocks/Dual/index.js.map +1 -1
  101. package/Materials/Node/Blocks/Dual/lightBlock.js +10 -10
  102. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  103. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +26 -26
  104. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  105. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js +1 -1
  106. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js.map +1 -1
  107. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +7 -7
  108. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  109. package/Materials/Node/Blocks/Dual/textureBlock.js +30 -30
  110. package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
  111. package/Materials/Node/Blocks/Fragment/derivativeBlock.js +2 -2
  112. package/Materials/Node/Blocks/Fragment/derivativeBlock.js.map +1 -1
  113. package/Materials/Node/Blocks/Fragment/discardBlock.js +1 -1
  114. package/Materials/Node/Blocks/Fragment/discardBlock.js.map +1 -1
  115. package/Materials/Node/Blocks/Fragment/fragCoordBlock.js +1 -1
  116. package/Materials/Node/Blocks/Fragment/fragCoordBlock.js.map +1 -1
  117. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +10 -10
  118. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  119. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +7 -7
  120. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  121. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +12 -12
  122. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  123. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js +1 -1
  124. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js.map +1 -1
  125. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js +7 -7
  126. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js.map +1 -1
  127. package/Materials/Node/Blocks/Fragment/twirlBlock.js +4 -4
  128. package/Materials/Node/Blocks/Fragment/twirlBlock.js.map +1 -1
  129. package/Materials/Node/Blocks/Input/inputBlock.d.ts +2 -1
  130. package/Materials/Node/Blocks/Input/inputBlock.js +29 -24
  131. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  132. package/Materials/Node/Blocks/PBR/anisotropyBlock.js +5 -5
  133. package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
  134. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +5 -5
  135. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  136. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +33 -33
  137. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  138. package/Materials/Node/Blocks/PBR/reflectionBlock.js +11 -11
  139. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  140. package/Materials/Node/Blocks/PBR/refractionBlock.js +11 -11
  141. package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
  142. package/Materials/Node/Blocks/PBR/sheenBlock.js +3 -3
  143. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  144. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +1 -1
  145. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
  146. package/Materials/Node/Blocks/Particle/particleBlendMultiplyBlock.js +1 -1
  147. package/Materials/Node/Blocks/Particle/particleBlendMultiplyBlock.js.map +1 -1
  148. package/Materials/Node/Blocks/Particle/particleRampGradientBlock.js +1 -1
  149. package/Materials/Node/Blocks/Particle/particleRampGradientBlock.js.map +1 -1
  150. package/Materials/Node/Blocks/Particle/particleTextureBlock.js +7 -7
  151. package/Materials/Node/Blocks/Particle/particleTextureBlock.js.map +1 -1
  152. package/Materials/Node/Blocks/Vertex/bonesBlock.js +3 -3
  153. package/Materials/Node/Blocks/Vertex/bonesBlock.js.map +1 -1
  154. package/Materials/Node/Blocks/Vertex/instancesBlock.js +3 -3
  155. package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
  156. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js +5 -5
  157. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js.map +1 -1
  158. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +16 -16
  159. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  160. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js +1 -1
  161. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js.map +1 -1
  162. package/Materials/Node/Blocks/addBlock.js +1 -1
  163. package/Materials/Node/Blocks/addBlock.js.map +1 -1
  164. package/Materials/Node/Blocks/arcTan2Block.js +1 -1
  165. package/Materials/Node/Blocks/arcTan2Block.js.map +1 -1
  166. package/Materials/Node/Blocks/clampBlock.js +3 -3
  167. package/Materials/Node/Blocks/clampBlock.js.map +1 -1
  168. package/Materials/Node/Blocks/cloudBlock.js +7 -7
  169. package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
  170. package/Materials/Node/Blocks/colorMergerBlock.js +8 -8
  171. package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
  172. package/Materials/Node/Blocks/colorSplitterBlock.js +5 -5
  173. package/Materials/Node/Blocks/colorSplitterBlock.js.map +1 -1
  174. package/Materials/Node/Blocks/conditionalBlock.js +10 -10
  175. package/Materials/Node/Blocks/conditionalBlock.js.map +1 -1
  176. package/Materials/Node/Blocks/crossBlock.js +1 -1
  177. package/Materials/Node/Blocks/crossBlock.js.map +1 -1
  178. package/Materials/Node/Blocks/customBlock.js +1 -1
  179. package/Materials/Node/Blocks/customBlock.js.map +1 -1
  180. package/Materials/Node/Blocks/desaturateBlock.js +4 -4
  181. package/Materials/Node/Blocks/desaturateBlock.js.map +1 -1
  182. package/Materials/Node/Blocks/distanceBlock.js +1 -1
  183. package/Materials/Node/Blocks/distanceBlock.js.map +1 -1
  184. package/Materials/Node/Blocks/divideBlock.js +1 -1
  185. package/Materials/Node/Blocks/divideBlock.js.map +1 -1
  186. package/Materials/Node/Blocks/dotBlock.js +1 -1
  187. package/Materials/Node/Blocks/dotBlock.js.map +1 -1
  188. package/Materials/Node/Blocks/elbowBlock.d.ts +27 -0
  189. package/Materials/Node/Blocks/elbowBlock.js +60 -0
  190. package/Materials/Node/Blocks/elbowBlock.js.map +1 -0
  191. package/Materials/Node/Blocks/fresnelBlock.js +2 -2
  192. package/Materials/Node/Blocks/fresnelBlock.js.map +1 -1
  193. package/Materials/Node/Blocks/gradientBlock.js +8 -8
  194. package/Materials/Node/Blocks/gradientBlock.js.map +1 -1
  195. package/Materials/Node/Blocks/index.d.ts +1 -0
  196. package/Materials/Node/Blocks/index.js +1 -0
  197. package/Materials/Node/Blocks/index.js.map +1 -1
  198. package/Materials/Node/Blocks/lengthBlock.js +1 -1
  199. package/Materials/Node/Blocks/lengthBlock.js.map +1 -1
  200. package/Materials/Node/Blocks/lerpBlock.js +1 -1
  201. package/Materials/Node/Blocks/lerpBlock.js.map +1 -1
  202. package/Materials/Node/Blocks/matrixBuilderBlock.js +1 -1
  203. package/Materials/Node/Blocks/matrixBuilderBlock.js.map +1 -1
  204. package/Materials/Node/Blocks/maxBlock.js +1 -1
  205. package/Materials/Node/Blocks/maxBlock.js.map +1 -1
  206. package/Materials/Node/Blocks/minBlock.js +1 -1
  207. package/Materials/Node/Blocks/minBlock.js.map +1 -1
  208. package/Materials/Node/Blocks/modBlock.js +1 -1
  209. package/Materials/Node/Blocks/modBlock.js.map +1 -1
  210. package/Materials/Node/Blocks/multiplyBlock.js +1 -1
  211. package/Materials/Node/Blocks/multiplyBlock.js.map +1 -1
  212. package/Materials/Node/Blocks/nLerpBlock.js +1 -1
  213. package/Materials/Node/Blocks/nLerpBlock.js.map +1 -1
  214. package/Materials/Node/Blocks/negateBlock.js +1 -1
  215. package/Materials/Node/Blocks/negateBlock.js.map +1 -1
  216. package/Materials/Node/Blocks/normalBlendBlock.js +5 -5
  217. package/Materials/Node/Blocks/normalBlendBlock.js.map +1 -1
  218. package/Materials/Node/Blocks/normalizeBlock.js +1 -1
  219. package/Materials/Node/Blocks/normalizeBlock.js.map +1 -1
  220. package/Materials/Node/Blocks/oneMinusBlock.js +1 -1
  221. package/Materials/Node/Blocks/oneMinusBlock.js.map +1 -1
  222. package/Materials/Node/Blocks/posterizeBlock.js +1 -1
  223. package/Materials/Node/Blocks/posterizeBlock.js.map +1 -1
  224. package/Materials/Node/Blocks/powBlock.js +1 -1
  225. package/Materials/Node/Blocks/powBlock.js.map +1 -1
  226. package/Materials/Node/Blocks/randomNumberBlock.js +2 -2
  227. package/Materials/Node/Blocks/randomNumberBlock.js.map +1 -1
  228. package/Materials/Node/Blocks/reciprocalBlock.js +1 -1
  229. package/Materials/Node/Blocks/reciprocalBlock.js.map +1 -1
  230. package/Materials/Node/Blocks/reflectBlock.js +1 -1
  231. package/Materials/Node/Blocks/reflectBlock.js.map +1 -1
  232. package/Materials/Node/Blocks/refractBlock.js +1 -1
  233. package/Materials/Node/Blocks/refractBlock.js.map +1 -1
  234. package/Materials/Node/Blocks/remapBlock.js +3 -3
  235. package/Materials/Node/Blocks/remapBlock.js.map +1 -1
  236. package/Materials/Node/Blocks/replaceColorBlock.js +3 -3
  237. package/Materials/Node/Blocks/replaceColorBlock.js.map +1 -1
  238. package/Materials/Node/Blocks/rotate2dBlock.js +1 -1
  239. package/Materials/Node/Blocks/rotate2dBlock.js.map +1 -1
  240. package/Materials/Node/Blocks/scaleBlock.js +1 -1
  241. package/Materials/Node/Blocks/scaleBlock.js.map +1 -1
  242. package/Materials/Node/Blocks/simplexPerlin3DBlock.js +1 -1
  243. package/Materials/Node/Blocks/simplexPerlin3DBlock.js.map +1 -1
  244. package/Materials/Node/Blocks/smoothStepBlock.js +1 -1
  245. package/Materials/Node/Blocks/smoothStepBlock.js.map +1 -1
  246. package/Materials/Node/Blocks/stepBlock.js +1 -1
  247. package/Materials/Node/Blocks/stepBlock.js.map +1 -1
  248. package/Materials/Node/Blocks/subtractBlock.js +1 -1
  249. package/Materials/Node/Blocks/subtractBlock.js.map +1 -1
  250. package/Materials/Node/Blocks/transformBlock.js +13 -13
  251. package/Materials/Node/Blocks/transformBlock.js.map +1 -1
  252. package/Materials/Node/Blocks/trigonometryBlock.js +2 -2
  253. package/Materials/Node/Blocks/trigonometryBlock.js.map +1 -1
  254. package/Materials/Node/Blocks/vectorMergerBlock.js +22 -22
  255. package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
  256. package/Materials/Node/Blocks/vectorSplitterBlock.js +8 -8
  257. package/Materials/Node/Blocks/vectorSplitterBlock.js.map +1 -1
  258. package/Materials/Node/Blocks/viewDirectionBlock.js +1 -1
  259. package/Materials/Node/Blocks/viewDirectionBlock.js.map +1 -1
  260. package/Materials/Node/Blocks/voronoiNoiseBlock.js +5 -5
  261. package/Materials/Node/Blocks/voronoiNoiseBlock.js.map +1 -1
  262. package/Materials/Node/Blocks/waveBlock.js +3 -3
  263. package/Materials/Node/Blocks/waveBlock.js.map +1 -1
  264. package/Materials/Node/Blocks/worleyNoise3DBlock.js +5 -5
  265. package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
  266. package/Materials/Node/Enums/nodeMaterialSystemValues.d.ts +3 -1
  267. package/Materials/Node/Enums/nodeMaterialSystemValues.js +2 -0
  268. package/Materials/Node/Enums/nodeMaterialSystemValues.js.map +1 -1
  269. package/Materials/Node/nodeMaterial.d.ts +4 -0
  270. package/Materials/Node/nodeMaterial.js +20 -10
  271. package/Materials/Node/nodeMaterial.js.map +1 -1
  272. package/Materials/Node/nodeMaterialBlock.js +12 -12
  273. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  274. package/Materials/Node/nodeMaterialBuildState.js +24 -24
  275. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  276. package/Materials/Node/nodeMaterialBuildStateSharedData.js +1 -1
  277. package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
  278. package/Materials/PBR/pbrBaseMaterial.js +2 -2
  279. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  280. package/Materials/PBR/pbrMaterial.js +1 -2
  281. package/Materials/PBR/pbrMaterial.js.map +1 -1
  282. package/Materials/Textures/Loaders/ktxTextureLoader.js +1 -1
  283. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  284. package/Materials/Textures/MultiviewRenderTarget.d.ts +1 -0
  285. package/Materials/Textures/MultiviewRenderTarget.js +10 -2
  286. package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
  287. package/Materials/Textures/Procedurals/proceduralTexture.js +1 -1
  288. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  289. package/Materials/Textures/equiRectangularCubeTexture.js +1 -1
  290. package/Materials/Textures/equiRectangularCubeTexture.js.map +1 -1
  291. package/Materials/Textures/mirrorTexture.js +2 -2
  292. package/Materials/Textures/mirrorTexture.js.map +1 -1
  293. package/Materials/Textures/renderTargetTexture.js +2 -2
  294. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  295. package/Materials/Textures/videoTexture.js +1 -0
  296. package/Materials/Textures/videoTexture.js.map +1 -1
  297. package/Materials/effect.js +3 -3
  298. package/Materials/effect.js.map +1 -1
  299. package/Materials/material.d.ts +2 -0
  300. package/Materials/material.js +4 -1
  301. package/Materials/material.js.map +1 -1
  302. package/Materials/materialHelper.js +1 -1
  303. package/Materials/materialHelper.js.map +1 -1
  304. package/Materials/materialPluginManager.js +3 -3
  305. package/Materials/materialPluginManager.js.map +1 -1
  306. package/Materials/multiMaterial.d.ts +2 -0
  307. package/Materials/multiMaterial.js +12 -10
  308. package/Materials/multiMaterial.js.map +1 -1
  309. package/Materials/shaderMaterial.js +1 -1
  310. package/Materials/shaderMaterial.js.map +1 -1
  311. package/Materials/shadowDepthWrapper.js +1 -1
  312. package/Materials/shadowDepthWrapper.js.map +1 -1
  313. package/Materials/standardMaterial.d.ts +0 -5
  314. package/Materials/standardMaterial.js +1 -10
  315. package/Materials/standardMaterial.js.map +1 -1
  316. package/Maths/math.size.js +1 -1
  317. package/Maths/math.size.js.map +1 -1
  318. package/Maths/math.vector.js +4 -4
  319. package/Maths/math.vector.js.map +1 -1
  320. package/Meshes/Builders/cylinderBuilder.d.ts +1 -1
  321. package/Meshes/Builders/cylinderBuilder.js +1 -1
  322. package/Meshes/Builders/cylinderBuilder.js.map +1 -1
  323. package/Meshes/Builders/linesBuilder.js.map +1 -1
  324. package/Meshes/Compression/dracoCompression.d.ts +3 -0
  325. package/Meshes/Compression/dracoCompression.js +23 -7
  326. package/Meshes/Compression/dracoCompression.js.map +1 -1
  327. package/Meshes/abstractMesh.d.ts +2 -0
  328. package/Meshes/abstractMesh.js +2 -0
  329. package/Meshes/abstractMesh.js.map +1 -1
  330. package/Meshes/mesh.js +8 -6
  331. package/Meshes/mesh.js.map +1 -1
  332. package/Meshes/mesh.lts.d.ts +1 -1
  333. package/Meshes/mesh.lts.js.map +1 -1
  334. package/Meshes/mesh.vertexData.d.ts +1 -1
  335. package/Meshes/mesh.vertexData.js +2 -2
  336. package/Meshes/mesh.vertexData.js.map +1 -1
  337. package/Misc/PerformanceViewer/performanceViewerCollector.js +6 -6
  338. package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
  339. package/Misc/assetsManager.d.ts +1 -0
  340. package/Misc/assetsManager.js +13 -0
  341. package/Misc/assetsManager.js.map +1 -1
  342. package/Misc/basis.js +1 -1
  343. package/Misc/basis.js.map +1 -1
  344. package/Misc/devTools.js +1 -1
  345. package/Misc/devTools.js.map +1 -1
  346. package/Misc/environmentTextureTools.js +2 -2
  347. package/Misc/environmentTextureTools.js.map +1 -1
  348. package/Misc/fileTools.js +3 -3
  349. package/Misc/fileTools.js.map +1 -1
  350. package/Misc/khronosTextureContainer2.js +4 -3
  351. package/Misc/khronosTextureContainer2.js.map +1 -1
  352. package/Misc/reflector.js +6 -6
  353. package/Misc/reflector.js.map +1 -1
  354. package/Misc/tools.js +15 -13
  355. package/Misc/tools.js.map +1 -1
  356. package/Misc/uniqueIdGenerator.js +1 -1
  357. package/Misc/uniqueIdGenerator.js.map +1 -1
  358. package/Offline/database.js +1 -1
  359. package/Offline/database.js.map +1 -1
  360. package/Particles/baseParticleSystem.d.ts +4 -1
  361. package/Particles/baseParticleSystem.js +20 -5
  362. package/Particles/baseParticleSystem.js.map +1 -1
  363. package/Particles/particleHelper.js +2 -2
  364. package/Particles/particleHelper.js.map +1 -1
  365. package/Physics/Plugins/ammoJSPlugin.js +4 -4
  366. package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
  367. package/Physics/physicsImpostor.d.ts +2 -2
  368. package/Physics/physicsImpostor.js.map +1 -1
  369. package/PostProcesses/blurPostProcess.js +5 -5
  370. package/PostProcesses/blurPostProcess.js.map +1 -1
  371. package/PostProcesses/imageProcessingPostProcess.js +1 -1
  372. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  373. package/PostProcesses/postProcess.js +1 -1
  374. package/PostProcesses/postProcess.js.map +1 -1
  375. package/PostProcesses/postProcessManager.js +2 -2
  376. package/PostProcesses/postProcessManager.js.map +1 -1
  377. package/Probes/reflectionProbe.js +2 -2
  378. package/Probes/reflectionProbe.js.map +1 -1
  379. package/Rendering/depthPeelingRenderer.js +3 -3
  380. package/Rendering/depthPeelingRenderer.js.map +1 -1
  381. package/Rendering/geometryBufferRenderer.js +8 -8
  382. package/Rendering/geometryBufferRenderer.js.map +1 -1
  383. package/Rendering/outlineRenderer.js +1 -1
  384. package/Rendering/outlineRenderer.js.map +1 -1
  385. package/Rendering/utilityLayerRenderer.js +4 -0
  386. package/Rendering/utilityLayerRenderer.js.map +1 -1
  387. package/Shaders/ShadersInclude/prePassVertex.js +1 -1
  388. package/Shaders/ShadersInclude/prePassVertex.js.map +1 -1
  389. package/ShadersWGSL/gpuUpdateParticles.compute.js +1 -1
  390. package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
  391. package/Sprites/spriteManager.js +5 -6
  392. package/Sprites/spriteManager.js.map +1 -1
  393. package/Sprites/spriteMap.js +2 -2
  394. package/Sprites/spriteMap.js.map +1 -1
  395. package/Sprites/spriteRenderer.js +1 -1
  396. package/Sprites/spriteRenderer.js.map +1 -1
  397. package/XR/features/WebXRDOMOverlay.js +1 -1
  398. package/XR/features/WebXRDOMOverlay.js.map +1 -1
  399. package/XR/features/WebXRHandTracking.js +27 -27
  400. package/XR/features/WebXRHandTracking.js.map +1 -1
  401. package/XR/features/WebXRImageTracking.js +2 -2
  402. package/XR/features/WebXRImageTracking.js.map +1 -1
  403. package/XR/features/WebXRLayers.d.ts +28 -5
  404. package/XR/features/WebXRLayers.js +54 -20
  405. package/XR/features/WebXRLayers.js.map +1 -1
  406. package/XR/features/WebXRNearInteraction.d.ts +35 -3
  407. package/XR/features/WebXRNearInteraction.js +201 -40
  408. package/XR/features/WebXRNearInteraction.js.map +1 -1
  409. package/XR/motionController/webXRAbstractMotionController.js +1 -1
  410. package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
  411. package/XR/motionController/webXRMotionControllerManager.js +2 -2
  412. package/XR/motionController/webXRMotionControllerManager.js.map +1 -1
  413. package/XR/motionController/webXRProfiledMotionController.js +1 -1
  414. package/XR/motionController/webXRProfiledMotionController.js.map +1 -1
  415. package/XR/webXRCamera.js +17 -4
  416. package/XR/webXRCamera.js.map +1 -1
  417. package/XR/webXREnterExitUI.js +2 -2
  418. package/XR/webXREnterExitUI.js.map +1 -1
  419. package/XR/webXRFeaturesManager.js +6 -6
  420. package/XR/webXRFeaturesManager.js.map +1 -1
  421. package/XR/webXRInputSource.js +3 -3
  422. package/XR/webXRInputSource.js.map +1 -1
  423. package/XR/webXRRenderTargetTextureProvider.d.ts +3 -2
  424. package/XR/webXRRenderTargetTextureProvider.js +37 -18
  425. package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
  426. package/node.d.ts +1 -1
  427. package/node.js.map +1 -1
  428. package/package.json +7 -1
  429. package/scene.d.ts +3 -1
  430. package/scene.js +28 -4
  431. package/scene.js.map +1 -1
@@ -20,6 +20,7 @@ export interface INativeEngine {
20
20
  createTexture(): WebGLTexture;
21
21
  loadTexture(texture: WebGLTexture, data: ArrayBufferView, generateMips: boolean, invertY: boolean, srgb: boolean, onSuccess: () => void, onError: () => void): void;
22
22
  loadRawTexture(texture: WebGLTexture, data: ArrayBufferView, width: number, height: number, format: number, generateMips: boolean, invertY: boolean): void;
23
+ loadRawTexture2DArray(texture: WebGLTexture, data: Nullable<ArrayBufferView>, width: number, height: number, depth: number, format: number, generateMipMaps: boolean, invertY: boolean): void;
23
24
  loadCubeTexture(texture: WebGLTexture, data: Array<ArrayBufferView>, generateMips: boolean, invertY: boolean, srgb: boolean, onSuccess: () => void, onError: () => void): void;
24
25
  loadCubeTextureWithMips(texture: WebGLTexture, data: Array<Array<ArrayBufferView>>, invertY: boolean, srgb: boolean, onSuccess: () => void, onError: () => void): void;
25
26
  getTextureWidth(texture: WebGLTexture): number;
@@ -1 +1 @@
1
- {"version":3,"file":"nativeInterfaces.js","sourceRoot":"","sources":["../../../../sourceES6/core/Engines/Native/nativeInterfaces.ts"],"names":[],"mappings":"","sourcesContent":["import { INativeInput } from \"../../DeviceInput/InputDevices/inputInterfaces\";\r\nimport { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport { Nullable } from \"../../types\";\r\nimport { ICanvas, IImage } from \"../ICanvas\";\r\nimport { NativeData, NativeDataStream } from \"./nativeDataStream\";\r\n\r\n/** @hidden */\r\nexport interface INativeEngine {\r\n dispose(): void;\r\n\r\n requestAnimationFrame(callback: () => void): void;\r\n\r\n createVertexArray(): NativeData;\r\n\r\n createIndexBuffer(bytes: ArrayBuffer, byteOffset: number, byteLength: number, is32Bits: boolean, dynamic: boolean): NativeData;\r\n recordIndexBuffer(vertexArray: NativeData, indexBuffer: NativeData): void;\r\n updateDynamicIndexBuffer(buffer: NativeData, bytes: ArrayBuffer, byteOffset: number, byteLength: number, startIndex: number): void;\r\n\r\n createVertexBuffer(bytes: ArrayBuffer, byteOffset: number, byteLength: number, dynamic: boolean): NativeData;\r\n recordVertexBuffer(vertexArray: NativeData, vertexBuffer: NativeData, location: number, byteOffset: number, byteStride: number, numElements: number, type: number, normalized: boolean): void;\r\n updateDynamicVertexBuffer(vertexBuffer: NativeData, bytes: ArrayBuffer, byteOffset: number, byteLength: number): void;\r\n\r\n createProgram(vertexShader: string, fragmentShader: string): any;\r\n getUniforms(shaderProgram: any, uniformsNames: string[]): WebGLUniformLocation[];\r\n getAttributes(shaderProgram: any, attributeNames: string[]): number[];\r\n\r\n createTexture(): WebGLTexture;\r\n loadTexture(texture: WebGLTexture, data: ArrayBufferView, generateMips: boolean, invertY: boolean, srgb: boolean, onSuccess: () => void, onError: () => void): void;\r\n loadRawTexture(texture: WebGLTexture, data: ArrayBufferView, width: number, height: number, format: number, generateMips: boolean, invertY: boolean): void;\r\n loadCubeTexture(texture: WebGLTexture, data: Array<ArrayBufferView>, generateMips: boolean, invertY: boolean, srgb: boolean, onSuccess: () => void, onError: () => void): void;\r\n loadCubeTextureWithMips(texture: WebGLTexture, data: Array<Array<ArrayBufferView>>, invertY: boolean, srgb: boolean, onSuccess: () => void, onError: () => void): void;\r\n getTextureWidth(texture: WebGLTexture): number;\r\n getTextureHeight(texture: WebGLTexture): number;\r\n copyTexture(desination: Nullable<WebGLTexture>, source: Nullable<WebGLTexture>): void;\r\n deleteTexture(texture: Nullable<WebGLTexture>): void;\r\n\r\n createImageBitmap(data: ArrayBufferView): ImageBitmap;\r\n resizeImageBitmap(image: ImageBitmap, bufferWidth: number, bufferHeight: number): Uint8Array;\r\n\r\n createFrameBuffer(texture: WebGLTexture, width: number, height: number, format: number, generateStencilBuffer: boolean, generateDepthBuffer: boolean, generateMips: boolean): WebGLFramebuffer;\r\n\r\n getRenderWidth(): number;\r\n getRenderHeight(): number;\r\n getHardwareScalingLevel(): number;\r\n setHardwareScalingLevel(level: number): void;\r\n\r\n setViewPort(x: number, y: number, width: number, height: number): void;\r\n\r\n setCommandDataStream(dataStream: NativeDataStream): void;\r\n submitCommands(): void;\r\n}\r\n\r\n/** @hidden */\r\ninterface INativeEngineConstructor {\r\n prototype: INativeEngine;\r\n new(): INativeEngine;\r\n\r\n readonly PROTOCOL_VERSION: number;\r\n\r\n readonly TEXTURE_NEAREST_NEAREST: number;\r\n readonly TEXTURE_LINEAR_LINEAR: number;\r\n readonly TEXTURE_LINEAR_LINEAR_MIPLINEAR: number;\r\n readonly TEXTURE_NEAREST_NEAREST_MIPNEAREST: number;\r\n readonly TEXTURE_NEAREST_LINEAR_MIPNEAREST: number;\r\n readonly TEXTURE_NEAREST_LINEAR_MIPLINEAR: number;\r\n readonly TEXTURE_NEAREST_LINEAR: number;\r\n readonly TEXTURE_NEAREST_NEAREST_MIPLINEAR: number;\r\n readonly TEXTURE_LINEAR_NEAREST_MIPNEAREST: number;\r\n readonly TEXTURE_LINEAR_NEAREST_MIPLINEAR: number;\r\n readonly TEXTURE_LINEAR_LINEAR_MIPNEAREST: number;\r\n readonly TEXTURE_LINEAR_NEAREST: number;\r\n\r\n readonly DEPTH_TEST_LESS: number;\r\n readonly DEPTH_TEST_LEQUAL: number;\r\n readonly DEPTH_TEST_EQUAL: number;\r\n readonly DEPTH_TEST_GEQUAL: number;\r\n readonly DEPTH_TEST_GREATER: number;\r\n readonly DEPTH_TEST_NOTEQUAL: number;\r\n readonly DEPTH_TEST_NEVER: number;\r\n readonly DEPTH_TEST_ALWAYS: number;\r\n\r\n readonly ADDRESS_MODE_WRAP: number;\r\n readonly ADDRESS_MODE_MIRROR: number;\r\n readonly ADDRESS_MODE_CLAMP: number;\r\n readonly ADDRESS_MODE_BORDER: number;\r\n readonly ADDRESS_MODE_MIRROR_ONCE: number;\r\n\r\n readonly TEXTURE_FORMAT_RGB8: number;\r\n readonly TEXTURE_FORMAT_RGBA8: number;\r\n readonly TEXTURE_FORMAT_RGBA32F: number;\r\n\r\n readonly ATTRIB_TYPE_INT8: number;\r\n readonly ATTRIB_TYPE_UINT8: number;\r\n readonly ATTRIB_TYPE_INT16: number;\r\n readonly ATTRIB_TYPE_UINT16: number;\r\n readonly ATTRIB_TYPE_FLOAT: number;\r\n\r\n readonly ALPHA_DISABLE: number;\r\n readonly ALPHA_ADD: number;\r\n readonly ALPHA_COMBINE: number;\r\n readonly ALPHA_SUBTRACT: number;\r\n readonly ALPHA_MULTIPLY: number;\r\n readonly ALPHA_MAXIMIZED: number;\r\n readonly ALPHA_ONEONE: number;\r\n readonly ALPHA_PREMULTIPLIED: number;\r\n readonly ALPHA_PREMULTIPLIED_PORTERDUFF: number;\r\n readonly ALPHA_INTERPOLATE: number;\r\n readonly ALPHA_SCREENMODE: number;\r\n\r\n readonly STENCIL_TEST_LESS: number;\r\n readonly STENCIL_TEST_LEQUAL: number;\r\n readonly STENCIL_TEST_EQUAL: number;\r\n readonly STENCIL_TEST_GEQUAL: number;\r\n readonly STENCIL_TEST_GREATER: number;\r\n readonly STENCIL_TEST_NOTEQUAL: number;\r\n readonly STENCIL_TEST_NEVER: number;\r\n readonly STENCIL_TEST_ALWAYS: number;\r\n\r\n readonly STENCIL_OP_FAIL_S_ZERO: number;\r\n readonly STENCIL_OP_FAIL_S_KEEP: number;\r\n readonly STENCIL_OP_FAIL_S_REPLACE: number;\r\n readonly STENCIL_OP_FAIL_S_INCR: number;\r\n readonly STENCIL_OP_FAIL_S_INCRSAT: number;\r\n readonly STENCIL_OP_FAIL_S_DECR: number;\r\n readonly STENCIL_OP_FAIL_S_DECRSAT: number;\r\n readonly STENCIL_OP_FAIL_S_INVERT: number;\r\n\r\n readonly STENCIL_OP_FAIL_Z_ZERO: number;\r\n readonly STENCIL_OP_FAIL_Z_KEEP: number;\r\n readonly STENCIL_OP_FAIL_Z_REPLACE: number;\r\n readonly STENCIL_OP_FAIL_Z_INCR: number;\r\n readonly STENCIL_OP_FAIL_Z_INCRSAT: number;\r\n readonly STENCIL_OP_FAIL_Z_DECR: number;\r\n readonly STENCIL_OP_FAIL_Z_DECRSAT: number;\r\n readonly STENCIL_OP_FAIL_Z_INVERT: number;\r\n\r\n readonly STENCIL_OP_PASS_Z_ZERO: number;\r\n readonly STENCIL_OP_PASS_Z_KEEP: number;\r\n readonly STENCIL_OP_PASS_Z_REPLACE: number;\r\n readonly STENCIL_OP_PASS_Z_INCR: number;\r\n readonly STENCIL_OP_PASS_Z_INCRSAT: number;\r\n readonly STENCIL_OP_PASS_Z_DECR: number;\r\n readonly STENCIL_OP_PASS_Z_DECRSAT: number;\r\n readonly STENCIL_OP_PASS_Z_INVERT: number;\r\n\r\n readonly COMMAND_DELETEVERTEXARRAY: NativeData;\r\n readonly COMMAND_DELETEINDEXBUFFER: NativeData;\r\n readonly COMMAND_DELETEVERTEXBUFFER: NativeData;\r\n readonly COMMAND_SETPROGRAM: NativeData;\r\n readonly COMMAND_SETMATRIX: NativeData;\r\n readonly COMMAND_SETMATRIX3X3: NativeData;\r\n readonly COMMAND_SETMATRIX2X2: NativeData;\r\n readonly COMMAND_SETMATRICES: NativeData;\r\n readonly COMMAND_SETINT: NativeData;\r\n readonly COMMAND_SETINTARRAY: NativeData;\r\n readonly COMMAND_SETINTARRAY2: NativeData;\r\n readonly COMMAND_SETINTARRAY3: NativeData;\r\n readonly COMMAND_SETINTARRAY4: NativeData;\r\n readonly COMMAND_SETFLOATARRAY: NativeData;\r\n readonly COMMAND_SETFLOATARRAY2: NativeData;\r\n readonly COMMAND_SETFLOATARRAY3: NativeData;\r\n readonly COMMAND_SETFLOATARRAY4: NativeData;\r\n readonly COMMAND_SETTEXTURESAMPLING: NativeData;\r\n readonly COMMAND_SETTEXTUREWRAPMODE: NativeData;\r\n readonly COMMAND_SETTEXTUREANISOTROPICLEVEL: NativeData;\r\n readonly COMMAND_SETTEXTURE: NativeData;\r\n readonly COMMAND_BINDVERTEXARRAY: NativeData;\r\n readonly COMMAND_SETSTATE: NativeData;\r\n readonly COMMAND_DELETEPROGRAM: NativeData;\r\n readonly COMMAND_SETZOFFSET: NativeData;\r\n readonly COMMAND_SETZOFFSETUNITS: NativeData;\r\n readonly COMMAND_SETDEPTHTEST: NativeData;\r\n readonly COMMAND_SETDEPTHWRITE: NativeData;\r\n readonly COMMAND_SETCOLORWRITE: NativeData;\r\n readonly COMMAND_SETBLENDMODE: NativeData;\r\n readonly COMMAND_SETFLOAT: NativeData;\r\n readonly COMMAND_SETFLOAT2: NativeData;\r\n readonly COMMAND_SETFLOAT3: NativeData;\r\n readonly COMMAND_SETFLOAT4: NativeData;\r\n readonly COMMAND_BINDFRAMEBUFFER: NativeData;\r\n readonly COMMAND_UNBINDFRAMEBUFFER: NativeData;\r\n readonly COMMAND_DELETEFRAMEBUFFER: NativeData;\r\n readonly COMMAND_DRAWINDEXED: NativeData;\r\n readonly COMMAND_DRAW: NativeData;\r\n readonly COMMAND_CLEAR: NativeData;\r\n readonly COMMAND_SETSTENCIL: NativeData;\r\n}\r\n\r\n/** @hidden */\r\nexport interface INativeCamera {\r\n createVideo(constraints: MediaTrackConstraints): any;\r\n updateVideoTexture(texture: Nullable<InternalTexture>, video: HTMLVideoElement, invertY: boolean): void;\r\n}\r\n\r\n/** @hidden */\r\ninterface INativeCameraConstructor {\r\n prototype: INativeCamera;\r\n new(): INativeCamera;\r\n}\r\n\r\n/** @hidden */\r\ninterface INativeCanvasConstructor {\r\n prototype: ICanvas;\r\n new(): ICanvas;\r\n\r\n loadTTFAsync(fontName: string, buffer: ArrayBuffer): void;\r\n}\r\n\r\n/** @hidden */\r\ninterface INativeImageConstructor {\r\n prototype: IImage;\r\n new(): IImage;\r\n}\r\n\r\n/** @hidden */\r\ninterface IDeviceInputSystemConstructor {\r\n prototype: INativeInput;\r\n new(): INativeInput;\r\n}\r\n\r\n/** @hidden */\r\nexport interface INativeDataStream {\r\n writeBuffer(buffer: ArrayBuffer, length: number): void;\r\n}\r\n\r\n/** @hidden */\r\ninterface INativeDataStreamConstructor {\r\n prototype: INativeDataStream;\r\n new(requestFlushCallback: () => void): INativeDataStream;\r\n\r\n readonly VALIDATION_ENABLED: boolean;\r\n readonly VALIDATION_UINT_32: number;\r\n readonly VALIDATION_INT_32: number;\r\n readonly VALIDATION_FLOAT_32: number;\r\n readonly VALIDATION_UINT_32_ARRAY: number;\r\n readonly VALIDATION_INT_32_ARRAY: number;\r\n readonly VALIDATION_FLOAT_32_ARRAY: number;\r\n readonly VALIDATION_NATIVE_DATA: number;\r\n readonly VALIDATION_BOOLEAN: number;\r\n}\r\n\r\n/** @hidden */\r\nexport interface INative {\r\n Engine: INativeEngineConstructor;\r\n Camera: INativeCameraConstructor;\r\n Canvas: INativeCanvasConstructor;\r\n Image: INativeImageConstructor;\r\n XMLHttpRequest: any; // TODO: how to do this?\r\n DeviceInputSystem: IDeviceInputSystemConstructor;\r\n NativeDataStream: INativeDataStreamConstructor;\r\n}\r\n"]}
1
+ {"version":3,"file":"nativeInterfaces.js","sourceRoot":"","sources":["../../../../sourceES6/core/Engines/Native/nativeInterfaces.ts"],"names":[],"mappings":"","sourcesContent":["import { INativeInput } from \"../../DeviceInput/InputDevices/inputInterfaces\";\r\nimport { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport { Nullable } from \"../../types\";\r\nimport { ICanvas, IImage } from \"../ICanvas\";\r\nimport { NativeData, NativeDataStream } from \"./nativeDataStream\";\r\n\r\n/** @hidden */\r\nexport interface INativeEngine {\r\n dispose(): void;\r\n\r\n requestAnimationFrame(callback: () => void): void;\r\n\r\n createVertexArray(): NativeData;\r\n\r\n createIndexBuffer(bytes: ArrayBuffer, byteOffset: number, byteLength: number, is32Bits: boolean, dynamic: boolean): NativeData;\r\n recordIndexBuffer(vertexArray: NativeData, indexBuffer: NativeData): void;\r\n updateDynamicIndexBuffer(buffer: NativeData, bytes: ArrayBuffer, byteOffset: number, byteLength: number, startIndex: number): void;\r\n\r\n createVertexBuffer(bytes: ArrayBuffer, byteOffset: number, byteLength: number, dynamic: boolean): NativeData;\r\n recordVertexBuffer(vertexArray: NativeData, vertexBuffer: NativeData, location: number, byteOffset: number, byteStride: number, numElements: number, type: number, normalized: boolean): void;\r\n updateDynamicVertexBuffer(vertexBuffer: NativeData, bytes: ArrayBuffer, byteOffset: number, byteLength: number): void;\r\n\r\n createProgram(vertexShader: string, fragmentShader: string): any;\r\n getUniforms(shaderProgram: any, uniformsNames: string[]): WebGLUniformLocation[];\r\n getAttributes(shaderProgram: any, attributeNames: string[]): number[];\r\n\r\n createTexture(): WebGLTexture;\r\n loadTexture(texture: WebGLTexture, data: ArrayBufferView, generateMips: boolean, invertY: boolean, srgb: boolean, onSuccess: () => void, onError: () => void): void;\r\n loadRawTexture(texture: WebGLTexture, data: ArrayBufferView, width: number, height: number, format: number, generateMips: boolean, invertY: boolean): void;\r\n loadRawTexture2DArray(texture: WebGLTexture, data: Nullable<ArrayBufferView>, width: number, height: number, depth: number, format: number, generateMipMaps: boolean, invertY: boolean): void;\r\n loadCubeTexture(texture: WebGLTexture, data: Array<ArrayBufferView>, generateMips: boolean, invertY: boolean, srgb: boolean, onSuccess: () => void, onError: () => void): void;\r\n loadCubeTextureWithMips(texture: WebGLTexture, data: Array<Array<ArrayBufferView>>, invertY: boolean, srgb: boolean, onSuccess: () => void, onError: () => void): void;\r\n getTextureWidth(texture: WebGLTexture): number;\r\n getTextureHeight(texture: WebGLTexture): number;\r\n copyTexture(desination: Nullable<WebGLTexture>, source: Nullable<WebGLTexture>): void;\r\n deleteTexture(texture: Nullable<WebGLTexture>): void;\r\n\r\n createImageBitmap(data: ArrayBufferView): ImageBitmap;\r\n resizeImageBitmap(image: ImageBitmap, bufferWidth: number, bufferHeight: number): Uint8Array;\r\n\r\n createFrameBuffer(texture: WebGLTexture, width: number, height: number, format: number, generateStencilBuffer: boolean, generateDepthBuffer: boolean, generateMips: boolean): WebGLFramebuffer;\r\n\r\n getRenderWidth(): number;\r\n getRenderHeight(): number;\r\n getHardwareScalingLevel(): number;\r\n setHardwareScalingLevel(level: number): void;\r\n\r\n setViewPort(x: number, y: number, width: number, height: number): void;\r\n\r\n setCommandDataStream(dataStream: NativeDataStream): void;\r\n submitCommands(): void;\r\n}\r\n\r\n/** @hidden */\r\ninterface INativeEngineConstructor {\r\n prototype: INativeEngine;\r\n new(): INativeEngine;\r\n\r\n readonly PROTOCOL_VERSION: number;\r\n\r\n readonly TEXTURE_NEAREST_NEAREST: number;\r\n readonly TEXTURE_LINEAR_LINEAR: number;\r\n readonly TEXTURE_LINEAR_LINEAR_MIPLINEAR: number;\r\n readonly TEXTURE_NEAREST_NEAREST_MIPNEAREST: number;\r\n readonly TEXTURE_NEAREST_LINEAR_MIPNEAREST: number;\r\n readonly TEXTURE_NEAREST_LINEAR_MIPLINEAR: number;\r\n readonly TEXTURE_NEAREST_LINEAR: number;\r\n readonly TEXTURE_NEAREST_NEAREST_MIPLINEAR: number;\r\n readonly TEXTURE_LINEAR_NEAREST_MIPNEAREST: number;\r\n readonly TEXTURE_LINEAR_NEAREST_MIPLINEAR: number;\r\n readonly TEXTURE_LINEAR_LINEAR_MIPNEAREST: number;\r\n readonly TEXTURE_LINEAR_NEAREST: number;\r\n\r\n readonly DEPTH_TEST_LESS: number;\r\n readonly DEPTH_TEST_LEQUAL: number;\r\n readonly DEPTH_TEST_EQUAL: number;\r\n readonly DEPTH_TEST_GEQUAL: number;\r\n readonly DEPTH_TEST_GREATER: number;\r\n readonly DEPTH_TEST_NOTEQUAL: number;\r\n readonly DEPTH_TEST_NEVER: number;\r\n readonly DEPTH_TEST_ALWAYS: number;\r\n\r\n readonly ADDRESS_MODE_WRAP: number;\r\n readonly ADDRESS_MODE_MIRROR: number;\r\n readonly ADDRESS_MODE_CLAMP: number;\r\n readonly ADDRESS_MODE_BORDER: number;\r\n readonly ADDRESS_MODE_MIRROR_ONCE: number;\r\n\r\n readonly TEXTURE_FORMAT_RGB8: number;\r\n readonly TEXTURE_FORMAT_RGBA8: number;\r\n readonly TEXTURE_FORMAT_RGBA32F: number;\r\n\r\n readonly ATTRIB_TYPE_INT8: number;\r\n readonly ATTRIB_TYPE_UINT8: number;\r\n readonly ATTRIB_TYPE_INT16: number;\r\n readonly ATTRIB_TYPE_UINT16: number;\r\n readonly ATTRIB_TYPE_FLOAT: number;\r\n\r\n readonly ALPHA_DISABLE: number;\r\n readonly ALPHA_ADD: number;\r\n readonly ALPHA_COMBINE: number;\r\n readonly ALPHA_SUBTRACT: number;\r\n readonly ALPHA_MULTIPLY: number;\r\n readonly ALPHA_MAXIMIZED: number;\r\n readonly ALPHA_ONEONE: number;\r\n readonly ALPHA_PREMULTIPLIED: number;\r\n readonly ALPHA_PREMULTIPLIED_PORTERDUFF: number;\r\n readonly ALPHA_INTERPOLATE: number;\r\n readonly ALPHA_SCREENMODE: number;\r\n\r\n readonly STENCIL_TEST_LESS: number;\r\n readonly STENCIL_TEST_LEQUAL: number;\r\n readonly STENCIL_TEST_EQUAL: number;\r\n readonly STENCIL_TEST_GEQUAL: number;\r\n readonly STENCIL_TEST_GREATER: number;\r\n readonly STENCIL_TEST_NOTEQUAL: number;\r\n readonly STENCIL_TEST_NEVER: number;\r\n readonly STENCIL_TEST_ALWAYS: number;\r\n\r\n readonly STENCIL_OP_FAIL_S_ZERO: number;\r\n readonly STENCIL_OP_FAIL_S_KEEP: number;\r\n readonly STENCIL_OP_FAIL_S_REPLACE: number;\r\n readonly STENCIL_OP_FAIL_S_INCR: number;\r\n readonly STENCIL_OP_FAIL_S_INCRSAT: number;\r\n readonly STENCIL_OP_FAIL_S_DECR: number;\r\n readonly STENCIL_OP_FAIL_S_DECRSAT: number;\r\n readonly STENCIL_OP_FAIL_S_INVERT: number;\r\n\r\n readonly STENCIL_OP_FAIL_Z_ZERO: number;\r\n readonly STENCIL_OP_FAIL_Z_KEEP: number;\r\n readonly STENCIL_OP_FAIL_Z_REPLACE: number;\r\n readonly STENCIL_OP_FAIL_Z_INCR: number;\r\n readonly STENCIL_OP_FAIL_Z_INCRSAT: number;\r\n readonly STENCIL_OP_FAIL_Z_DECR: number;\r\n readonly STENCIL_OP_FAIL_Z_DECRSAT: number;\r\n readonly STENCIL_OP_FAIL_Z_INVERT: number;\r\n\r\n readonly STENCIL_OP_PASS_Z_ZERO: number;\r\n readonly STENCIL_OP_PASS_Z_KEEP: number;\r\n readonly STENCIL_OP_PASS_Z_REPLACE: number;\r\n readonly STENCIL_OP_PASS_Z_INCR: number;\r\n readonly STENCIL_OP_PASS_Z_INCRSAT: number;\r\n readonly STENCIL_OP_PASS_Z_DECR: number;\r\n readonly STENCIL_OP_PASS_Z_DECRSAT: number;\r\n readonly STENCIL_OP_PASS_Z_INVERT: number;\r\n\r\n readonly COMMAND_DELETEVERTEXARRAY: NativeData;\r\n readonly COMMAND_DELETEINDEXBUFFER: NativeData;\r\n readonly COMMAND_DELETEVERTEXBUFFER: NativeData;\r\n readonly COMMAND_SETPROGRAM: NativeData;\r\n readonly COMMAND_SETMATRIX: NativeData;\r\n readonly COMMAND_SETMATRIX3X3: NativeData;\r\n readonly COMMAND_SETMATRIX2X2: NativeData;\r\n readonly COMMAND_SETMATRICES: NativeData;\r\n readonly COMMAND_SETINT: NativeData;\r\n readonly COMMAND_SETINTARRAY: NativeData;\r\n readonly COMMAND_SETINTARRAY2: NativeData;\r\n readonly COMMAND_SETINTARRAY3: NativeData;\r\n readonly COMMAND_SETINTARRAY4: NativeData;\r\n readonly COMMAND_SETFLOATARRAY: NativeData;\r\n readonly COMMAND_SETFLOATARRAY2: NativeData;\r\n readonly COMMAND_SETFLOATARRAY3: NativeData;\r\n readonly COMMAND_SETFLOATARRAY4: NativeData;\r\n readonly COMMAND_SETTEXTURESAMPLING: NativeData;\r\n readonly COMMAND_SETTEXTUREWRAPMODE: NativeData;\r\n readonly COMMAND_SETTEXTUREANISOTROPICLEVEL: NativeData;\r\n readonly COMMAND_SETTEXTURE: NativeData;\r\n readonly COMMAND_BINDVERTEXARRAY: NativeData;\r\n readonly COMMAND_SETSTATE: NativeData;\r\n readonly COMMAND_DELETEPROGRAM: NativeData;\r\n readonly COMMAND_SETZOFFSET: NativeData;\r\n readonly COMMAND_SETZOFFSETUNITS: NativeData;\r\n readonly COMMAND_SETDEPTHTEST: NativeData;\r\n readonly COMMAND_SETDEPTHWRITE: NativeData;\r\n readonly COMMAND_SETCOLORWRITE: NativeData;\r\n readonly COMMAND_SETBLENDMODE: NativeData;\r\n readonly COMMAND_SETFLOAT: NativeData;\r\n readonly COMMAND_SETFLOAT2: NativeData;\r\n readonly COMMAND_SETFLOAT3: NativeData;\r\n readonly COMMAND_SETFLOAT4: NativeData;\r\n readonly COMMAND_BINDFRAMEBUFFER: NativeData;\r\n readonly COMMAND_UNBINDFRAMEBUFFER: NativeData;\r\n readonly COMMAND_DELETEFRAMEBUFFER: NativeData;\r\n readonly COMMAND_DRAWINDEXED: NativeData;\r\n readonly COMMAND_DRAW: NativeData;\r\n readonly COMMAND_CLEAR: NativeData;\r\n readonly COMMAND_SETSTENCIL: NativeData;\r\n}\r\n\r\n/** @hidden */\r\nexport interface INativeCamera {\r\n createVideo(constraints: MediaTrackConstraints): any;\r\n updateVideoTexture(texture: Nullable<InternalTexture>, video: HTMLVideoElement, invertY: boolean): void;\r\n}\r\n\r\n/** @hidden */\r\ninterface INativeCameraConstructor {\r\n prototype: INativeCamera;\r\n new(): INativeCamera;\r\n}\r\n\r\n/** @hidden */\r\ninterface INativeCanvasConstructor {\r\n prototype: ICanvas;\r\n new(): ICanvas;\r\n\r\n loadTTFAsync(fontName: string, buffer: ArrayBuffer): void;\r\n}\r\n\r\n/** @hidden */\r\ninterface INativeImageConstructor {\r\n prototype: IImage;\r\n new(): IImage;\r\n}\r\n\r\n/** @hidden */\r\ninterface IDeviceInputSystemConstructor {\r\n prototype: INativeInput;\r\n new(): INativeInput;\r\n}\r\n\r\n/** @hidden */\r\nexport interface INativeDataStream {\r\n writeBuffer(buffer: ArrayBuffer, length: number): void;\r\n}\r\n\r\n/** @hidden */\r\ninterface INativeDataStreamConstructor {\r\n prototype: INativeDataStream;\r\n new(requestFlushCallback: () => void): INativeDataStream;\r\n\r\n readonly VALIDATION_ENABLED: boolean;\r\n readonly VALIDATION_UINT_32: number;\r\n readonly VALIDATION_INT_32: number;\r\n readonly VALIDATION_FLOAT_32: number;\r\n readonly VALIDATION_UINT_32_ARRAY: number;\r\n readonly VALIDATION_INT_32_ARRAY: number;\r\n readonly VALIDATION_FLOAT_32_ARRAY: number;\r\n readonly VALIDATION_NATIVE_DATA: number;\r\n readonly VALIDATION_BOOLEAN: number;\r\n}\r\n\r\n/** @hidden */\r\nexport interface INative {\r\n Engine: INativeEngineConstructor;\r\n Camera: INativeCameraConstructor;\r\n Canvas: INativeCanvasConstructor;\r\n Image: INativeImageConstructor;\r\n XMLHttpRequest: any; // TODO: how to do this?\r\n DeviceInputSystem: IDeviceInputSystemConstructor;\r\n NativeDataStream: INativeDataStreamConstructor;\r\n}\r\n"]}
@@ -15,7 +15,7 @@ var ShaderDefineExpression = /** @class */ (function () {
15
15
  else {
16
16
  var v1 = stack[stack.length - 1], v2 = stack[stack.length - 2];
17
17
  stack.length -= 2;
18
- stack.push("(" + v2 + c + v1 + ")");
18
+ stack.push("(".concat(v2).concat(c).concat(v1, ")"));
19
19
  }
20
20
  }
21
21
  return stack[stack.length - 1];
@@ -1 +1 @@
1
- {"version":3,"file":"shaderDefineExpression.js","sourceRoot":"","sources":["../../../../../sourceES6/core/Engines/Processors/Expressions/shaderDefineExpression.ts"],"names":[],"mappings":"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","sourcesContent":["/** @hidden */\r\nexport class ShaderDefineExpression {\r\n public isTrue(preprocessors: { [key: string]: string }): boolean {\r\n return true;\r\n }\r\n\r\n private static _OperatorPriority: { [name: string]: number } = {\r\n \")\": 0,\r\n \"(\": 1,\r\n \"||\": 2,\r\n \"&&\": 3,\r\n };\r\n\r\n private static _Stack = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''];\r\n\r\n public static postfixToInfix(postfix: string[]): string {\r\n const stack: string[] = [];\r\n\r\n for (let c of postfix) {\r\n if (ShaderDefineExpression._OperatorPriority[c] === undefined) {\r\n stack.push(c);\r\n } else {\r\n const v1 = stack[stack.length - 1],\r\n v2 = stack[stack.length - 2];\r\n\r\n stack.length -= 2;\r\n stack.push(`(${v2}${c}${v1})`);\r\n }\r\n }\r\n\r\n return stack[stack.length - 1];\r\n }\r\n\r\n public static infixToPostfix(infix: string): string[] {\r\n const result: string[] = [];\r\n\r\n let stackIdx = -1;\r\n\r\n const pushOperand = () => {\r\n operand = operand.trim();\r\n if (operand !== '') {\r\n result.push(operand);\r\n operand = '';\r\n }\r\n };\r\n\r\n const push = (s: string) => {\r\n if (stackIdx < ShaderDefineExpression._Stack.length - 1) {\r\n ShaderDefineExpression._Stack[++stackIdx] = s;\r\n }\r\n };\r\n\r\n const peek = () => ShaderDefineExpression._Stack[stackIdx];\r\n\r\n const pop = () => stackIdx === -1 ? '!!INVALID EXPRESSION!!' : ShaderDefineExpression._Stack[stackIdx--];\r\n\r\n let idx = 0,\r\n operand = '';\r\n\r\n while (idx < infix.length) {\r\n const c = infix.charAt(idx),\r\n token = idx < infix.length - 1 ? infix.substr(idx, 2) : '';\r\n\r\n if (c === '(') {\r\n operand = '';\r\n push(c);\r\n } else if (c === ')') {\r\n pushOperand();\r\n while (stackIdx !== -1 && peek() !== '(') {\r\n result.push(pop());\r\n }\r\n pop();\r\n } else if (ShaderDefineExpression._OperatorPriority[token] > 1) {\r\n pushOperand();\r\n while (stackIdx !== -1 && ShaderDefineExpression._OperatorPriority[peek()] >= ShaderDefineExpression._OperatorPriority[token]) {\r\n result.push(pop());\r\n }\r\n push(token);\r\n idx++;\r\n } else {\r\n operand += c;\r\n }\r\n idx++;\r\n }\r\n\r\n pushOperand();\r\n\r\n while (stackIdx !== -1) {\r\n if (peek() === '(') {\r\n pop();\r\n } else {\r\n result.push(pop());\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n}"]}
1
+ {"version":3,"file":"shaderDefineExpression.js","sourceRoot":"","sources":["../../../../../sourceES6/core/Engines/Processors/Expressions/shaderDefineExpression.ts"],"names":[],"mappings":"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","sourcesContent":["/** @hidden */\r\nexport class ShaderDefineExpression {\r\n public isTrue(preprocessors: { [key: string]: string }): boolean {\r\n return true;\r\n }\r\n\r\n private static _OperatorPriority: { [name: string]: number } = {\r\n \")\": 0,\r\n \"(\": 1,\r\n \"||\": 2,\r\n \"&&\": 3,\r\n };\r\n\r\n private static _Stack = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''];\r\n\r\n public static postfixToInfix(postfix: string[]): string {\r\n const stack: string[] = [];\r\n\r\n for (let c of postfix) {\r\n if (ShaderDefineExpression._OperatorPriority[c] === undefined) {\r\n stack.push(c);\r\n } else {\r\n const v1 = stack[stack.length - 1],\r\n v2 = stack[stack.length - 2];\r\n\r\n stack.length -= 2;\r\n stack.push(`(${v2}${c}${v1})`);\r\n }\r\n }\r\n\r\n return stack[stack.length - 1];\r\n }\r\n\r\n public static infixToPostfix(infix: string): string[] {\r\n const result: string[] = [];\r\n\r\n let stackIdx = -1;\r\n\r\n const pushOperand = () => {\r\n operand = operand.trim();\r\n if (operand !== '') {\r\n result.push(operand);\r\n operand = '';\r\n }\r\n };\r\n\r\n const push = (s: string) => {\r\n if (stackIdx < ShaderDefineExpression._Stack.length - 1) {\r\n ShaderDefineExpression._Stack[++stackIdx] = s;\r\n }\r\n };\r\n\r\n const peek = () => ShaderDefineExpression._Stack[stackIdx];\r\n\r\n const pop = () => stackIdx === -1 ? '!!INVALID EXPRESSION!!' : ShaderDefineExpression._Stack[stackIdx--];\r\n\r\n let idx = 0,\r\n operand = '';\r\n\r\n while (idx < infix.length) {\r\n const c = infix.charAt(idx),\r\n token = idx < infix.length - 1 ? infix.substr(idx, 2) : '';\r\n\r\n if (c === '(') {\r\n operand = '';\r\n push(c);\r\n } else if (c === ')') {\r\n pushOperand();\r\n while (stackIdx !== -1 && peek() !== '(') {\r\n result.push(pop());\r\n }\r\n pop();\r\n } else if (ShaderDefineExpression._OperatorPriority[token] > 1) {\r\n pushOperand();\r\n while (stackIdx !== -1 && ShaderDefineExpression._OperatorPriority[peek()] >= ShaderDefineExpression._OperatorPriority[token]) {\r\n result.push(pop());\r\n }\r\n push(token);\r\n idx++;\r\n } else {\r\n operand += c;\r\n }\r\n idx++;\r\n }\r\n\r\n pushOperand();\r\n\r\n while (stackIdx !== -1) {\r\n if (peek() === '(') {\r\n pop();\r\n } else {\r\n result.push(pop());\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n}"]}
@@ -30,7 +30,7 @@ var ShaderCodeInliner = /** @class */ (function () {
30
30
  */
31
31
  ShaderCodeInliner.prototype.processCode = function () {
32
32
  if (this.debug) {
33
- console.log("Start inlining process (code size=" + this._sourceCode.length + ")...");
33
+ console.log("Start inlining process (code size=".concat(this._sourceCode.length, ")..."));
34
34
  }
35
35
  this._collectFunctions();
36
36
  this._processInlining(this._numMaxIterations);
@@ -49,7 +49,7 @@ var ShaderCodeInliner = /** @class */ (function () {
49
49
  var funcParamsStartIndex = this._sourceCode.indexOf("(", inlineTokenIndex + this.inlineToken.length);
50
50
  if (funcParamsStartIndex < 0) {
51
51
  if (this.debug) {
52
- console.warn("Could not find the opening parenthesis after the token. startIndex=" + startIndex);
52
+ console.warn("Could not find the opening parenthesis after the token. startIndex=".concat(startIndex));
53
53
  }
54
54
  startIndex = inlineTokenIndex + this.inlineToken.length;
55
55
  continue;
@@ -57,7 +57,7 @@ var ShaderCodeInliner = /** @class */ (function () {
57
57
  var funcNameMatch = ShaderCodeInliner._RegexpFindFunctionNameAndType.exec(this._sourceCode.substring(inlineTokenIndex + this.inlineToken.length, funcParamsStartIndex));
58
58
  if (!funcNameMatch) {
59
59
  if (this.debug) {
60
- console.warn("Could not extract the name/type of the function from: " + this._sourceCode.substring(inlineTokenIndex + this.inlineToken.length, funcParamsStartIndex));
60
+ console.warn("Could not extract the name/type of the function from: ".concat(this._sourceCode.substring(inlineTokenIndex + this.inlineToken.length, funcParamsStartIndex)));
61
61
  }
62
62
  startIndex = inlineTokenIndex + this.inlineToken.length;
63
63
  continue;
@@ -67,7 +67,7 @@ var ShaderCodeInliner = /** @class */ (function () {
67
67
  var funcParamsEndIndex = ExtractBetweenMarkers('(', ')', this._sourceCode, funcParamsStartIndex);
68
68
  if (funcParamsEndIndex < 0) {
69
69
  if (this.debug) {
70
- console.warn("Could not extract the parameters the function '" + funcName + "' (type=" + funcType + "). funcParamsStartIndex=" + funcParamsStartIndex);
70
+ console.warn("Could not extract the parameters the function '".concat(funcName, "' (type=").concat(funcType, "). funcParamsStartIndex=").concat(funcParamsStartIndex));
71
71
  }
72
72
  startIndex = inlineTokenIndex + this.inlineToken.length;
73
73
  continue;
@@ -77,7 +77,7 @@ var ShaderCodeInliner = /** @class */ (function () {
77
77
  var funcBodyStartIndex = SkipWhitespaces(this._sourceCode, funcParamsEndIndex + 1);
78
78
  if (funcBodyStartIndex === this._sourceCode.length) {
79
79
  if (this.debug) {
80
- console.warn("Could not extract the body of the function '" + funcName + "' (type=" + funcType + "). funcParamsEndIndex=" + funcParamsEndIndex);
80
+ console.warn("Could not extract the body of the function '".concat(funcName, "' (type=").concat(funcType, "). funcParamsEndIndex=").concat(funcParamsEndIndex));
81
81
  }
82
82
  startIndex = inlineTokenIndex + this.inlineToken.length;
83
83
  continue;
@@ -85,7 +85,7 @@ var ShaderCodeInliner = /** @class */ (function () {
85
85
  var funcBodyEndIndex = ExtractBetweenMarkers('{', '}', this._sourceCode, funcBodyStartIndex);
86
86
  if (funcBodyEndIndex < 0) {
87
87
  if (this.debug) {
88
- console.warn("Could not extract the body of the function '" + funcName + "' (type=" + funcType + "). funcBodyStartIndex=" + funcBodyStartIndex);
88
+ console.warn("Could not extract the body of the function '".concat(funcName, "' (type=").concat(funcType, "). funcBodyStartIndex=").concat(funcBodyStartIndex));
89
89
  }
90
90
  startIndex = inlineTokenIndex + this.inlineToken.length;
91
91
  continue;
@@ -121,7 +121,7 @@ var ShaderCodeInliner = /** @class */ (function () {
121
121
  startIndex -= funcBodyEndIndex + 1 - inlineTokenIndex;
122
122
  }
123
123
  if (this.debug) {
124
- console.log("Collect functions: " + this._functionDescr.length + " functions found. functionDescr=", this._functionDescr);
124
+ console.log("Collect functions: ".concat(this._functionDescr.length, " functions found. functionDescr="), this._functionDescr);
125
125
  }
126
126
  };
127
127
  ShaderCodeInliner.prototype._processInlining = function (numMaxIterations) {
@@ -132,7 +132,7 @@ var ShaderCodeInliner = /** @class */ (function () {
132
132
  }
133
133
  }
134
134
  if (this.debug) {
135
- console.log("numMaxIterations is " + numMaxIterations + " after inlining process");
135
+ console.log("numMaxIterations is ".concat(numMaxIterations, " after inlining process"));
136
136
  }
137
137
  return numMaxIterations >= 0;
138
138
  };
@@ -163,7 +163,7 @@ var ShaderCodeInliner = /** @class */ (function () {
163
163
  var callParamsEndIndex = ExtractBetweenMarkers('(', ')', this._sourceCode, callParamsStartIndex);
164
164
  if (callParamsEndIndex < 0) {
165
165
  if (this.debug) {
166
- console.warn("Could not extract the parameters of the function call. Function '" + name_1 + "' (type=" + type + "). callParamsStartIndex=" + callParamsStartIndex);
166
+ console.warn("Could not extract the parameters of the function call. Function '".concat(name_1, "' (type=").concat(type, "). callParamsStartIndex=").concat(callParamsStartIndex));
167
167
  }
168
168
  startIndex = functionCallIndex + name_1.length;
169
169
  continue;
@@ -197,7 +197,7 @@ var ShaderCodeInliner = /** @class */ (function () {
197
197
  var params = splitParameterCall(RemoveComments(callParams));
198
198
  if (params === null) {
199
199
  if (this.debug) {
200
- console.warn("Invalid function call: can't extract the parameters of the function call. Function '" + name_1 + "' (type=" + type + "). callParamsStartIndex=" + callParamsStartIndex + ", callParams=" + callParams);
200
+ console.warn("Invalid function call: can't extract the parameters of the function call. Function '".concat(name_1, "' (type=").concat(type, "). callParamsStartIndex=").concat(callParamsStartIndex, ", callParams=") + callParams);
201
201
  }
202
202
  startIndex = functionCallIndex + name_1.length;
203
203
  continue;
@@ -213,7 +213,7 @@ var ShaderCodeInliner = /** @class */ (function () {
213
213
  }
214
214
  if (paramNames.length !== parameters.length) {
215
215
  if (this.debug) {
216
- console.warn("Invalid function call: not the same number of parameters for the call than the number expected by the function. Function '" + name_1 + "' (type=" + type + "). function parameters=" + parameters + ", call parameters=" + paramNames);
216
+ console.warn("Invalid function call: not the same number of parameters for the call than the number expected by the function. Function '".concat(name_1, "' (type=").concat(type, "). function parameters=").concat(parameters, ", call parameters=").concat(paramNames));
217
217
  }
218
218
  startIndex = functionCallIndex + name_1.length;
219
219
  continue;
@@ -233,7 +233,7 @@ var ShaderCodeInliner = /** @class */ (function () {
233
233
  var partBetween = this._sourceCode.substring(injectDeclarationIndex + 1, functionCallIndex);
234
234
  this._sourceCode = partBefore + type + " " + retParamName + ";\n" + funcBody + "\n" + partBetween + retParamName + partAfter;
235
235
  if (this.debug) {
236
- console.log("Replace function call by code. Function '" + name_1 + "' (type=" + type + "). injectDeclarationIndex=" + injectDeclarationIndex + ", call parameters=" + paramNames);
236
+ console.log("Replace function call by code. Function '".concat(name_1, "' (type=").concat(type, "). injectDeclarationIndex=").concat(injectDeclarationIndex, ", call parameters=").concat(paramNames));
237
237
  }
238
238
  }
239
239
  else {
@@ -241,7 +241,7 @@ var ShaderCodeInliner = /** @class */ (function () {
241
241
  this._sourceCode = partBefore + funcBody + partAfter;
242
242
  startIndex += funcBody.length - (callParamsEndIndex + 1 - functionCallIndex);
243
243
  if (this.debug) {
244
- console.log("Replace function call by code. Function '" + name_1 + "' (type=" + type + "). functionCallIndex=" + functionCallIndex + ", call parameters=" + paramNames);
244
+ console.log("Replace function call by code. Function '".concat(name_1, "' (type=").concat(type, "). functionCallIndex=").concat(functionCallIndex, ", call parameters=").concat(paramNames));
245
245
  }
246
246
  }
247
247
  doAgain = true;
@@ -1 +1 @@
1
- {"version":3,"file":"shaderCodeInliner.js","sourceRoot":"","sources":["../../../../sourceES6/core/Engines/Processors/shaderCodeInliner.ts"],"names":[],"mappings":"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","sourcesContent":["import { EscapeRegExp, ExtractBetweenMarkers, FindBackward, IsIdentifierChar, RemoveComments, SkipWhitespaces } from \"../../Misc/codeStringParsingTools\";\r\n\r\ninterface IInlineFunctionDescr {\r\n name: string;\r\n type: string;\r\n parameters: string[];\r\n body: string;\r\n callIndex: number;\r\n}\r\n\r\n/**\r\n * Class used to inline functions in shader code\r\n*/\r\nexport class ShaderCodeInliner {\r\n\r\n private static readonly _RegexpFindFunctionNameAndType = /((\\s+?)(\\w+)\\s+(\\w+)\\s*?)$/;\r\n\r\n private _sourceCode: string;\r\n private _functionDescr: IInlineFunctionDescr[];\r\n private _numMaxIterations: number;\r\n\r\n /** Gets or sets the token used to mark the functions to inline */\r\n public inlineToken: string;\r\n\r\n /** Gets or sets the debug mode */\r\n public debug: boolean = false;\r\n\r\n /** Gets the code after the inlining process */\r\n public get code(): string {\r\n return this._sourceCode;\r\n }\r\n\r\n /**\r\n * Initializes the inliner\r\n * @param sourceCode shader code source to inline\r\n * @param numMaxIterations maximum number of iterations (used to detect recursive calls)\r\n */\r\n constructor(sourceCode: string, numMaxIterations = 20) {\r\n this._sourceCode = sourceCode;\r\n this._numMaxIterations = numMaxIterations;\r\n this._functionDescr = [];\r\n this.inlineToken = \"#define inline\";\r\n }\r\n\r\n /**\r\n * Start the processing of the shader code\r\n */\r\n public processCode() {\r\n if (this.debug) {\r\n console.log(`Start inlining process (code size=${this._sourceCode.length})...`);\r\n }\r\n this._collectFunctions();\r\n this._processInlining(this._numMaxIterations);\r\n if (this.debug) {\r\n console.log(\"End of inlining process.\");\r\n }\r\n }\r\n\r\n private _collectFunctions() {\r\n let startIndex = 0;\r\n\r\n while (startIndex < this._sourceCode.length) {\r\n // locate the function to inline and extract its name\r\n const inlineTokenIndex = this._sourceCode.indexOf(this.inlineToken, startIndex);\r\n if (inlineTokenIndex < 0) {\r\n break;\r\n }\r\n\r\n const funcParamsStartIndex = this._sourceCode.indexOf(\"(\", inlineTokenIndex + this.inlineToken.length);\r\n if (funcParamsStartIndex < 0) {\r\n if (this.debug) {\r\n console.warn(`Could not find the opening parenthesis after the token. startIndex=${startIndex}`);\r\n }\r\n startIndex = inlineTokenIndex + this.inlineToken.length;\r\n continue;\r\n }\r\n\r\n const funcNameMatch = ShaderCodeInliner._RegexpFindFunctionNameAndType.exec(this._sourceCode.substring(inlineTokenIndex + this.inlineToken.length, funcParamsStartIndex));\r\n if (!funcNameMatch) {\r\n if (this.debug) {\r\n console.warn(`Could not extract the name/type of the function from: ${this._sourceCode.substring(inlineTokenIndex + this.inlineToken.length, funcParamsStartIndex)}`);\r\n }\r\n startIndex = inlineTokenIndex + this.inlineToken.length;\r\n continue;\r\n }\r\n const [funcType, funcName] = [funcNameMatch[3], funcNameMatch[4]];\r\n\r\n // extract the parameters of the function as a whole string (without the leading / trailing parenthesis)\r\n const funcParamsEndIndex = ExtractBetweenMarkers('(', ')', this._sourceCode, funcParamsStartIndex);\r\n if (funcParamsEndIndex < 0) {\r\n if (this.debug) {\r\n console.warn(`Could not extract the parameters the function '${funcName}' (type=${funcType}). funcParamsStartIndex=${funcParamsStartIndex}`);\r\n }\r\n startIndex = inlineTokenIndex + this.inlineToken.length;\r\n continue;\r\n }\r\n const funcParams = this._sourceCode.substring(funcParamsStartIndex + 1, funcParamsEndIndex);\r\n\r\n // extract the body of the function (with the curly brackets)\r\n const funcBodyStartIndex = SkipWhitespaces(this._sourceCode, funcParamsEndIndex + 1);\r\n if (funcBodyStartIndex === this._sourceCode.length) {\r\n if (this.debug) {\r\n console.warn(`Could not extract the body of the function '${funcName}' (type=${funcType}). funcParamsEndIndex=${funcParamsEndIndex}`);\r\n }\r\n startIndex = inlineTokenIndex + this.inlineToken.length;\r\n continue;\r\n }\r\n\r\n const funcBodyEndIndex = ExtractBetweenMarkers('{', '}', this._sourceCode, funcBodyStartIndex);\r\n if (funcBodyEndIndex < 0) {\r\n if (this.debug) {\r\n console.warn(`Could not extract the body of the function '${funcName}' (type=${funcType}). funcBodyStartIndex=${funcBodyStartIndex}`);\r\n }\r\n startIndex = inlineTokenIndex + this.inlineToken.length;\r\n continue;\r\n }\r\n const funcBody = this._sourceCode.substring(funcBodyStartIndex, funcBodyEndIndex + 1);\r\n\r\n // process the parameters: extract each names\r\n const params = RemoveComments(funcParams).split(\",\");\r\n const paramNames = [];\r\n\r\n for (let p = 0; p < params.length; ++p) {\r\n const param = params[p].trim();\r\n const idx = param.lastIndexOf(\" \");\r\n\r\n if (idx >= 0) {\r\n paramNames.push(param.substring(idx + 1));\r\n }\r\n }\r\n\r\n if (funcType !== 'void') {\r\n // for functions that return a value, we will replace \"return\" by \"tempvarname = \", tempvarname being a unique generated name\r\n paramNames.push('return');\r\n }\r\n\r\n // collect the function\r\n this._functionDescr.push({\r\n \"name\": funcName,\r\n \"type\": funcType,\r\n \"parameters\": paramNames,\r\n \"body\": funcBody,\r\n \"callIndex\": 0,\r\n });\r\n\r\n startIndex = funcBodyEndIndex + 1;\r\n\r\n // remove the function from the source code\r\n const partBefore = inlineTokenIndex > 0 ? this._sourceCode.substring(0, inlineTokenIndex) : \"\";\r\n const partAfter = funcBodyEndIndex + 1 < this._sourceCode.length - 1 ? this._sourceCode.substring(funcBodyEndIndex + 1) : \"\";\r\n\r\n this._sourceCode = partBefore + partAfter;\r\n\r\n startIndex -= funcBodyEndIndex + 1 - inlineTokenIndex;\r\n }\r\n\r\n if (this.debug) {\r\n console.log(`Collect functions: ${this._functionDescr.length} functions found. functionDescr=`, this._functionDescr);\r\n }\r\n }\r\n\r\n private _processInlining(numMaxIterations: number = 20): boolean {\r\n while (numMaxIterations-- >= 0) {\r\n if (!this._replaceFunctionCallsByCode()) {\r\n break;\r\n }\r\n }\r\n\r\n if (this.debug) {\r\n console.log(`numMaxIterations is ${numMaxIterations} after inlining process`);\r\n }\r\n\r\n return numMaxIterations >= 0;\r\n }\r\n\r\n private _replaceFunctionCallsByCode(): boolean {\r\n let doAgain = false;\r\n\r\n for (const func of this._functionDescr) {\r\n const { name, type, parameters, body } = func;\r\n\r\n let startIndex = 0;\r\n\r\n while (startIndex < this._sourceCode.length) {\r\n // Look for the function name in the source code\r\n const functionCallIndex = this._sourceCode.indexOf(name, startIndex);\r\n\r\n if (functionCallIndex < 0) {\r\n break;\r\n }\r\n\r\n // Make sure \"name\" is not part of a bigger string\r\n if (functionCallIndex === 0 || IsIdentifierChar(this._sourceCode.charAt(functionCallIndex - 1))) {\r\n startIndex = functionCallIndex + name.length;\r\n continue;\r\n }\r\n\r\n // Find the opening parenthesis\r\n const callParamsStartIndex = SkipWhitespaces(this._sourceCode, functionCallIndex + name.length);\r\n if (callParamsStartIndex === this._sourceCode.length || this._sourceCode.charAt(callParamsStartIndex) !== '(') {\r\n startIndex = functionCallIndex + name.length;\r\n continue;\r\n }\r\n\r\n // extract the parameters of the function call as a whole string (without the leading / trailing parenthesis)\r\n const callParamsEndIndex = ExtractBetweenMarkers('(', ')', this._sourceCode, callParamsStartIndex);\r\n if (callParamsEndIndex < 0) {\r\n if (this.debug) {\r\n console.warn(`Could not extract the parameters of the function call. Function '${name}' (type=${type}). callParamsStartIndex=${callParamsStartIndex}`);\r\n }\r\n startIndex = functionCallIndex + name.length;\r\n continue;\r\n }\r\n const callParams = this._sourceCode.substring(callParamsStartIndex + 1, callParamsEndIndex);\r\n\r\n // process the parameter call: extract each names\r\n\r\n // this function split the parameter list used in the function call at ',' boundaries by taking care of potential parenthesis like in:\r\n // myfunc(a, vec2(1., 0.), 4.)\r\n const splitParameterCall = (s: string) => {\r\n const parameters = [];\r\n let curIdx = 0, startParamIdx = 0;\r\n while (curIdx < s.length) {\r\n if (s.charAt(curIdx) === '(') {\r\n const idx2 = ExtractBetweenMarkers('(', ')', s, curIdx);\r\n if (idx2 < 0) {\r\n return null;\r\n }\r\n curIdx = idx2;\r\n } else if (s.charAt(curIdx) === ',') {\r\n parameters.push(s.substring(startParamIdx, curIdx));\r\n startParamIdx = curIdx + 1;\r\n }\r\n curIdx++;\r\n }\r\n if (startParamIdx < curIdx) {\r\n parameters.push(s.substring(startParamIdx, curIdx));\r\n }\r\n return parameters;\r\n };\r\n\r\n const params = splitParameterCall(RemoveComments(callParams));\r\n\r\n if (params === null) {\r\n if (this.debug) {\r\n console.warn(`Invalid function call: can't extract the parameters of the function call. Function '${name}' (type=${type}). callParamsStartIndex=${callParamsStartIndex}, callParams=` + callParams);\r\n }\r\n startIndex = functionCallIndex + name.length;\r\n continue;\r\n }\r\n\r\n const paramNames = [];\r\n\r\n for (let p = 0; p < params.length; ++p) {\r\n const param = params[p].trim();\r\n paramNames.push(param);\r\n }\r\n\r\n const retParamName = type !== 'void' ? name + '_' + (func.callIndex++) : null;\r\n\r\n if (retParamName) {\r\n paramNames.push(retParamName + ' =');\r\n }\r\n\r\n if (paramNames.length !== parameters.length) {\r\n if (this.debug) {\r\n console.warn(`Invalid function call: not the same number of parameters for the call than the number expected by the function. Function '${name}' (type=${type}). function parameters=${parameters}, call parameters=${paramNames}`);\r\n }\r\n startIndex = functionCallIndex + name.length;\r\n continue;\r\n }\r\n\r\n startIndex = callParamsEndIndex + 1;\r\n\r\n // replace the function call by the body function\r\n const funcBody = this._replaceNames(body, parameters, paramNames);\r\n\r\n let partBefore = functionCallIndex > 0 ? this._sourceCode.substring(0, functionCallIndex) : \"\";\r\n let partAfter = callParamsEndIndex + 1 < this._sourceCode.length - 1 ? this._sourceCode.substring(callParamsEndIndex + 1) : \"\";\r\n\r\n if (retParamName) {\r\n // case where the function returns a value. We generate:\r\n // FUNCTYPE retParamName;\r\n // {function body}\r\n // and replace the function call by retParamName\r\n const injectDeclarationIndex = FindBackward(this._sourceCode, functionCallIndex - 1, '\\n');\r\n\r\n partBefore = this._sourceCode.substring(0, injectDeclarationIndex + 1);\r\n let partBetween = this._sourceCode.substring(injectDeclarationIndex + 1, functionCallIndex);\r\n\r\n this._sourceCode = partBefore + type + \" \" + retParamName + \";\\n\" + funcBody + \"\\n\" + partBetween + retParamName + partAfter;\r\n\r\n if (this.debug) {\r\n console.log(`Replace function call by code. Function '${name}' (type=${type}). injectDeclarationIndex=${injectDeclarationIndex}, call parameters=${paramNames}`);\r\n }\r\n } else {\r\n // simple case where the return value of the function is \"void\"\r\n this._sourceCode = partBefore + funcBody + partAfter;\r\n\r\n startIndex += funcBody.length - (callParamsEndIndex + 1 - functionCallIndex);\r\n\r\n if (this.debug) {\r\n console.log(`Replace function call by code. Function '${name}' (type=${type}). functionCallIndex=${functionCallIndex}, call parameters=${paramNames}`);\r\n }\r\n }\r\n\r\n doAgain = true;\r\n }\r\n }\r\n\r\n return doAgain;\r\n }\r\n\r\n private _replaceNames(code: string, sources: string[], destinations: string[]): string {\r\n for (let i = 0; i < sources.length; ++i) {\r\n const source = new RegExp(EscapeRegExp(sources[i]), 'g'),\r\n sourceLen = sources[i].length,\r\n destination = destinations[i];\r\n\r\n code = code.replace(source, (match, ...args) => {\r\n const offset: number = args[0];\r\n // Make sure \"source\" is not part of a bigger identifier (for eg, if source=view and we matched it with viewDirection)\r\n if (IsIdentifierChar(code.charAt(offset - 1)) || IsIdentifierChar(code.charAt(offset + sourceLen))) {\r\n return sources[i];\r\n }\r\n return destination;\r\n });\r\n }\r\n\r\n return code;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"shaderCodeInliner.js","sourceRoot":"","sources":["../../../../sourceES6/core/Engines/Processors/shaderCodeInliner.ts"],"names":[],"mappings":"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","sourcesContent":["import { EscapeRegExp, ExtractBetweenMarkers, FindBackward, IsIdentifierChar, RemoveComments, SkipWhitespaces } from \"../../Misc/codeStringParsingTools\";\r\n\r\ninterface IInlineFunctionDescr {\r\n name: string;\r\n type: string;\r\n parameters: string[];\r\n body: string;\r\n callIndex: number;\r\n}\r\n\r\n/**\r\n * Class used to inline functions in shader code\r\n*/\r\nexport class ShaderCodeInliner {\r\n\r\n private static readonly _RegexpFindFunctionNameAndType = /((\\s+?)(\\w+)\\s+(\\w+)\\s*?)$/;\r\n\r\n private _sourceCode: string;\r\n private _functionDescr: IInlineFunctionDescr[];\r\n private _numMaxIterations: number;\r\n\r\n /** Gets or sets the token used to mark the functions to inline */\r\n public inlineToken: string;\r\n\r\n /** Gets or sets the debug mode */\r\n public debug: boolean = false;\r\n\r\n /** Gets the code after the inlining process */\r\n public get code(): string {\r\n return this._sourceCode;\r\n }\r\n\r\n /**\r\n * Initializes the inliner\r\n * @param sourceCode shader code source to inline\r\n * @param numMaxIterations maximum number of iterations (used to detect recursive calls)\r\n */\r\n constructor(sourceCode: string, numMaxIterations = 20) {\r\n this._sourceCode = sourceCode;\r\n this._numMaxIterations = numMaxIterations;\r\n this._functionDescr = [];\r\n this.inlineToken = \"#define inline\";\r\n }\r\n\r\n /**\r\n * Start the processing of the shader code\r\n */\r\n public processCode() {\r\n if (this.debug) {\r\n console.log(`Start inlining process (code size=${this._sourceCode.length})...`);\r\n }\r\n this._collectFunctions();\r\n this._processInlining(this._numMaxIterations);\r\n if (this.debug) {\r\n console.log(\"End of inlining process.\");\r\n }\r\n }\r\n\r\n private _collectFunctions() {\r\n let startIndex = 0;\r\n\r\n while (startIndex < this._sourceCode.length) {\r\n // locate the function to inline and extract its name\r\n const inlineTokenIndex = this._sourceCode.indexOf(this.inlineToken, startIndex);\r\n if (inlineTokenIndex < 0) {\r\n break;\r\n }\r\n\r\n const funcParamsStartIndex = this._sourceCode.indexOf(\"(\", inlineTokenIndex + this.inlineToken.length);\r\n if (funcParamsStartIndex < 0) {\r\n if (this.debug) {\r\n console.warn(`Could not find the opening parenthesis after the token. startIndex=${startIndex}`);\r\n }\r\n startIndex = inlineTokenIndex + this.inlineToken.length;\r\n continue;\r\n }\r\n\r\n const funcNameMatch = ShaderCodeInliner._RegexpFindFunctionNameAndType.exec(this._sourceCode.substring(inlineTokenIndex + this.inlineToken.length, funcParamsStartIndex));\r\n if (!funcNameMatch) {\r\n if (this.debug) {\r\n console.warn(`Could not extract the name/type of the function from: ${this._sourceCode.substring(inlineTokenIndex + this.inlineToken.length, funcParamsStartIndex)}`);\r\n }\r\n startIndex = inlineTokenIndex + this.inlineToken.length;\r\n continue;\r\n }\r\n const [funcType, funcName] = [funcNameMatch[3], funcNameMatch[4]];\r\n\r\n // extract the parameters of the function as a whole string (without the leading / trailing parenthesis)\r\n const funcParamsEndIndex = ExtractBetweenMarkers('(', ')', this._sourceCode, funcParamsStartIndex);\r\n if (funcParamsEndIndex < 0) {\r\n if (this.debug) {\r\n console.warn(`Could not extract the parameters the function '${funcName}' (type=${funcType}). funcParamsStartIndex=${funcParamsStartIndex}`);\r\n }\r\n startIndex = inlineTokenIndex + this.inlineToken.length;\r\n continue;\r\n }\r\n const funcParams = this._sourceCode.substring(funcParamsStartIndex + 1, funcParamsEndIndex);\r\n\r\n // extract the body of the function (with the curly brackets)\r\n const funcBodyStartIndex = SkipWhitespaces(this._sourceCode, funcParamsEndIndex + 1);\r\n if (funcBodyStartIndex === this._sourceCode.length) {\r\n if (this.debug) {\r\n console.warn(`Could not extract the body of the function '${funcName}' (type=${funcType}). funcParamsEndIndex=${funcParamsEndIndex}`);\r\n }\r\n startIndex = inlineTokenIndex + this.inlineToken.length;\r\n continue;\r\n }\r\n\r\n const funcBodyEndIndex = ExtractBetweenMarkers('{', '}', this._sourceCode, funcBodyStartIndex);\r\n if (funcBodyEndIndex < 0) {\r\n if (this.debug) {\r\n console.warn(`Could not extract the body of the function '${funcName}' (type=${funcType}). funcBodyStartIndex=${funcBodyStartIndex}`);\r\n }\r\n startIndex = inlineTokenIndex + this.inlineToken.length;\r\n continue;\r\n }\r\n const funcBody = this._sourceCode.substring(funcBodyStartIndex, funcBodyEndIndex + 1);\r\n\r\n // process the parameters: extract each names\r\n const params = RemoveComments(funcParams).split(\",\");\r\n const paramNames = [];\r\n\r\n for (let p = 0; p < params.length; ++p) {\r\n const param = params[p].trim();\r\n const idx = param.lastIndexOf(\" \");\r\n\r\n if (idx >= 0) {\r\n paramNames.push(param.substring(idx + 1));\r\n }\r\n }\r\n\r\n if (funcType !== 'void') {\r\n // for functions that return a value, we will replace \"return\" by \"tempvarname = \", tempvarname being a unique generated name\r\n paramNames.push('return');\r\n }\r\n\r\n // collect the function\r\n this._functionDescr.push({\r\n \"name\": funcName,\r\n \"type\": funcType,\r\n \"parameters\": paramNames,\r\n \"body\": funcBody,\r\n \"callIndex\": 0,\r\n });\r\n\r\n startIndex = funcBodyEndIndex + 1;\r\n\r\n // remove the function from the source code\r\n const partBefore = inlineTokenIndex > 0 ? this._sourceCode.substring(0, inlineTokenIndex) : \"\";\r\n const partAfter = funcBodyEndIndex + 1 < this._sourceCode.length - 1 ? this._sourceCode.substring(funcBodyEndIndex + 1) : \"\";\r\n\r\n this._sourceCode = partBefore + partAfter;\r\n\r\n startIndex -= funcBodyEndIndex + 1 - inlineTokenIndex;\r\n }\r\n\r\n if (this.debug) {\r\n console.log(`Collect functions: ${this._functionDescr.length} functions found. functionDescr=`, this._functionDescr);\r\n }\r\n }\r\n\r\n private _processInlining(numMaxIterations: number = 20): boolean {\r\n while (numMaxIterations-- >= 0) {\r\n if (!this._replaceFunctionCallsByCode()) {\r\n break;\r\n }\r\n }\r\n\r\n if (this.debug) {\r\n console.log(`numMaxIterations is ${numMaxIterations} after inlining process`);\r\n }\r\n\r\n return numMaxIterations >= 0;\r\n }\r\n\r\n private _replaceFunctionCallsByCode(): boolean {\r\n let doAgain = false;\r\n\r\n for (const func of this._functionDescr) {\r\n const { name, type, parameters, body } = func;\r\n\r\n let startIndex = 0;\r\n\r\n while (startIndex < this._sourceCode.length) {\r\n // Look for the function name in the source code\r\n const functionCallIndex = this._sourceCode.indexOf(name, startIndex);\r\n\r\n if (functionCallIndex < 0) {\r\n break;\r\n }\r\n\r\n // Make sure \"name\" is not part of a bigger string\r\n if (functionCallIndex === 0 || IsIdentifierChar(this._sourceCode.charAt(functionCallIndex - 1))) {\r\n startIndex = functionCallIndex + name.length;\r\n continue;\r\n }\r\n\r\n // Find the opening parenthesis\r\n const callParamsStartIndex = SkipWhitespaces(this._sourceCode, functionCallIndex + name.length);\r\n if (callParamsStartIndex === this._sourceCode.length || this._sourceCode.charAt(callParamsStartIndex) !== '(') {\r\n startIndex = functionCallIndex + name.length;\r\n continue;\r\n }\r\n\r\n // extract the parameters of the function call as a whole string (without the leading / trailing parenthesis)\r\n const callParamsEndIndex = ExtractBetweenMarkers('(', ')', this._sourceCode, callParamsStartIndex);\r\n if (callParamsEndIndex < 0) {\r\n if (this.debug) {\r\n console.warn(`Could not extract the parameters of the function call. Function '${name}' (type=${type}). callParamsStartIndex=${callParamsStartIndex}`);\r\n }\r\n startIndex = functionCallIndex + name.length;\r\n continue;\r\n }\r\n const callParams = this._sourceCode.substring(callParamsStartIndex + 1, callParamsEndIndex);\r\n\r\n // process the parameter call: extract each names\r\n\r\n // this function split the parameter list used in the function call at ',' boundaries by taking care of potential parenthesis like in:\r\n // myfunc(a, vec2(1., 0.), 4.)\r\n const splitParameterCall = (s: string) => {\r\n const parameters = [];\r\n let curIdx = 0, startParamIdx = 0;\r\n while (curIdx < s.length) {\r\n if (s.charAt(curIdx) === '(') {\r\n const idx2 = ExtractBetweenMarkers('(', ')', s, curIdx);\r\n if (idx2 < 0) {\r\n return null;\r\n }\r\n curIdx = idx2;\r\n } else if (s.charAt(curIdx) === ',') {\r\n parameters.push(s.substring(startParamIdx, curIdx));\r\n startParamIdx = curIdx + 1;\r\n }\r\n curIdx++;\r\n }\r\n if (startParamIdx < curIdx) {\r\n parameters.push(s.substring(startParamIdx, curIdx));\r\n }\r\n return parameters;\r\n };\r\n\r\n const params = splitParameterCall(RemoveComments(callParams));\r\n\r\n if (params === null) {\r\n if (this.debug) {\r\n console.warn(`Invalid function call: can't extract the parameters of the function call. Function '${name}' (type=${type}). callParamsStartIndex=${callParamsStartIndex}, callParams=` + callParams);\r\n }\r\n startIndex = functionCallIndex + name.length;\r\n continue;\r\n }\r\n\r\n const paramNames = [];\r\n\r\n for (let p = 0; p < params.length; ++p) {\r\n const param = params[p].trim();\r\n paramNames.push(param);\r\n }\r\n\r\n const retParamName = type !== 'void' ? name + '_' + (func.callIndex++) : null;\r\n\r\n if (retParamName) {\r\n paramNames.push(retParamName + ' =');\r\n }\r\n\r\n if (paramNames.length !== parameters.length) {\r\n if (this.debug) {\r\n console.warn(`Invalid function call: not the same number of parameters for the call than the number expected by the function. Function '${name}' (type=${type}). function parameters=${parameters}, call parameters=${paramNames}`);\r\n }\r\n startIndex = functionCallIndex + name.length;\r\n continue;\r\n }\r\n\r\n startIndex = callParamsEndIndex + 1;\r\n\r\n // replace the function call by the body function\r\n const funcBody = this._replaceNames(body, parameters, paramNames);\r\n\r\n let partBefore = functionCallIndex > 0 ? this._sourceCode.substring(0, functionCallIndex) : \"\";\r\n let partAfter = callParamsEndIndex + 1 < this._sourceCode.length - 1 ? this._sourceCode.substring(callParamsEndIndex + 1) : \"\";\r\n\r\n if (retParamName) {\r\n // case where the function returns a value. We generate:\r\n // FUNCTYPE retParamName;\r\n // {function body}\r\n // and replace the function call by retParamName\r\n const injectDeclarationIndex = FindBackward(this._sourceCode, functionCallIndex - 1, '\\n');\r\n\r\n partBefore = this._sourceCode.substring(0, injectDeclarationIndex + 1);\r\n let partBetween = this._sourceCode.substring(injectDeclarationIndex + 1, functionCallIndex);\r\n\r\n this._sourceCode = partBefore + type + \" \" + retParamName + \";\\n\" + funcBody + \"\\n\" + partBetween + retParamName + partAfter;\r\n\r\n if (this.debug) {\r\n console.log(`Replace function call by code. Function '${name}' (type=${type}). injectDeclarationIndex=${injectDeclarationIndex}, call parameters=${paramNames}`);\r\n }\r\n } else {\r\n // simple case where the return value of the function is \"void\"\r\n this._sourceCode = partBefore + funcBody + partAfter;\r\n\r\n startIndex += funcBody.length - (callParamsEndIndex + 1 - functionCallIndex);\r\n\r\n if (this.debug) {\r\n console.log(`Replace function call by code. Function '${name}' (type=${type}). functionCallIndex=${functionCallIndex}, call parameters=${paramNames}`);\r\n }\r\n }\r\n\r\n doAgain = true;\r\n }\r\n }\r\n\r\n return doAgain;\r\n }\r\n\r\n private _replaceNames(code: string, sources: string[], destinations: string[]): string {\r\n for (let i = 0; i < sources.length; ++i) {\r\n const source = new RegExp(EscapeRegExp(sources[i]), 'g'),\r\n sourceLen = sources[i].length,\r\n destination = destinations[i];\r\n\r\n code = code.replace(source, (match, ...args) => {\r\n const offset: number = args[0];\r\n // Make sure \"source\" is not part of a bigger identifier (for eg, if source=view and we matched it with viewDirection)\r\n if (IsIdentifierChar(code.charAt(offset - 1)) || IsIdentifierChar(code.charAt(offset + sourceLen))) {\r\n return sources[i];\r\n }\r\n return destination;\r\n });\r\n }\r\n\r\n return code;\r\n }\r\n}\r\n"]}
@@ -108,50 +108,50 @@ var WebGPUCacheBindGroups = /** @class */ (function () {
108
108
  var sampler = bindingInfo.sampler;
109
109
  if (!sampler) {
110
110
  if (this._engine.dbgSanityChecks) {
111
- Logger.Error("Trying to bind a null sampler! entry=" + JSON.stringify(entry) + ", name=" + name_1 + ", bindingInfo=" + JSON.stringify(bindingInfo, function (key, value) { return key === 'texture' ? '<no dump>' : value; }) + ", materialContext.uniqueId=" + materialContext.uniqueId, 50);
111
+ Logger.Error("Trying to bind a null sampler! entry=".concat(JSON.stringify(entry), ", name=").concat(name_1, ", bindingInfo=").concat(JSON.stringify(bindingInfo, function (key, value) { return key === 'texture' ? '<no dump>' : value; }), ", materialContext.uniqueId=").concat(materialContext.uniqueId), 50);
112
112
  }
113
113
  continue;
114
114
  }
115
115
  entries[j].resource = this._cacheSampler.getSampler(sampler, false, bindingInfo.hashCode);
116
116
  }
117
117
  else {
118
- Logger.Error("Sampler \"" + name_1 + "\" could not be bound. entry=" + JSON.stringify(entry) + ", materialContext=" + JSON.stringify(materialContext, function (key, value) { return key === 'texture' || key === 'sampler' ? '<no dump>' : value; }), 50);
118
+ Logger.Error("Sampler \"".concat(name_1, "\" could not be bound. entry=").concat(JSON.stringify(entry), ", materialContext=").concat(JSON.stringify(materialContext, function (key, value) { return key === 'texture' || key === 'sampler' ? '<no dump>' : value; })), 50);
119
119
  }
120
120
  }
121
121
  else if (entry.texture || entry.storageTexture) {
122
122
  var bindingInfo = materialContext.textures[name_1];
123
123
  if (bindingInfo) {
124
124
  if (this._engine.dbgSanityChecks && bindingInfo.texture === null) {
125
- Logger.Error("Trying to bind a null texture! entry=" + JSON.stringify(entry) + ", bindingInfo=" + JSON.stringify(bindingInfo, function (key, value) { return key === 'texture' ? '<no dump>' : value; }) + ", materialContext.uniqueId=" + materialContext.uniqueId, 50);
125
+ Logger.Error("Trying to bind a null texture! entry=".concat(JSON.stringify(entry), ", bindingInfo=").concat(JSON.stringify(bindingInfo, function (key, value) { return key === 'texture' ? '<no dump>' : value; }), ", materialContext.uniqueId=").concat(materialContext.uniqueId), 50);
126
126
  continue;
127
127
  }
128
128
  var hardwareTexture = bindingInfo.texture._hardwareTexture;
129
129
  if (this._engine.dbgSanityChecks && (!hardwareTexture || entry.texture && !hardwareTexture.view || entry.storageTexture && !hardwareTexture.viewForWriting)) {
130
- Logger.Error("Trying to bind a null gpu texture or view! entry=" + JSON.stringify(entry) + ", name=" + name_1 + ", bindingInfo=" + JSON.stringify(bindingInfo, function (key, value) { return key === 'texture' ? '<no dump>' : value; }) + ", isReady=" + ((_j = bindingInfo.texture) === null || _j === void 0 ? void 0 : _j.isReady) + ", materialContext.uniqueId=" + materialContext.uniqueId, 50);
130
+ Logger.Error("Trying to bind a null gpu texture or view! entry=".concat(JSON.stringify(entry), ", name=").concat(name_1, ", bindingInfo=").concat(JSON.stringify(bindingInfo, function (key, value) { return key === 'texture' ? '<no dump>' : value; }), ", isReady=").concat((_j = bindingInfo.texture) === null || _j === void 0 ? void 0 : _j.isReady, ", materialContext.uniqueId=").concat(materialContext.uniqueId), 50);
131
131
  continue;
132
132
  }
133
133
  entries[j].resource = entry.storageTexture ? hardwareTexture.viewForWriting : hardwareTexture.view;
134
134
  }
135
135
  else {
136
- Logger.Error("Texture \"" + name_1 + "\" could not be bound. entry=" + JSON.stringify(entry) + ", materialContext=" + JSON.stringify(materialContext, function (key, value) { return key === 'texture' || key === 'sampler' ? '<no dump>' : value; }), 50);
136
+ Logger.Error("Texture \"".concat(name_1, "\" could not be bound. entry=").concat(JSON.stringify(entry), ", materialContext=").concat(JSON.stringify(materialContext, function (key, value) { return key === 'texture' || key === 'sampler' ? '<no dump>' : value; })), 50);
137
137
  }
138
138
  }
139
139
  else if (entry.externalTexture) {
140
140
  var bindingInfo = materialContext.textures[name_1];
141
141
  if (bindingInfo) {
142
142
  if (this._engine.dbgSanityChecks && bindingInfo.texture === null) {
143
- Logger.Error("Trying to bind a null external texture! entry=" + JSON.stringify(entry) + ", name=" + name_1 + ", bindingInfo=" + JSON.stringify(bindingInfo, function (key, value) { return key === 'texture' ? '<no dump>' : value; }) + ", materialContext.uniqueId=" + materialContext.uniqueId, 50);
143
+ Logger.Error("Trying to bind a null external texture! entry=".concat(JSON.stringify(entry), ", name=").concat(name_1, ", bindingInfo=").concat(JSON.stringify(bindingInfo, function (key, value) { return key === 'texture' ? '<no dump>' : value; }), ", materialContext.uniqueId=").concat(materialContext.uniqueId), 50);
144
144
  continue;
145
145
  }
146
146
  var externalTexture = bindingInfo.texture.underlyingResource;
147
147
  if (this._engine.dbgSanityChecks && !externalTexture) {
148
- Logger.Error("Trying to bind a null gpu external texture! entry=" + JSON.stringify(entry) + ", name=" + name_1 + ", bindingInfo=" + JSON.stringify(bindingInfo, function (key, value) { return key === 'texture' ? '<no dump>' : value; }) + ", isReady=" + ((_k = bindingInfo.texture) === null || _k === void 0 ? void 0 : _k.isReady) + ", materialContext.uniqueId=" + materialContext.uniqueId, 50);
148
+ Logger.Error("Trying to bind a null gpu external texture! entry=".concat(JSON.stringify(entry), ", name=").concat(name_1, ", bindingInfo=").concat(JSON.stringify(bindingInfo, function (key, value) { return key === 'texture' ? '<no dump>' : value; }), ", isReady=").concat((_k = bindingInfo.texture) === null || _k === void 0 ? void 0 : _k.isReady, ", materialContext.uniqueId=").concat(materialContext.uniqueId), 50);
149
149
  continue;
150
150
  }
151
151
  entries[j].resource = this._device.importExternalTexture({ source: externalTexture });
152
152
  }
153
153
  else {
154
- Logger.Error("Texture \"" + name_1 + "\" could not be bound. entry=" + JSON.stringify(entry) + ", materialContext=" + JSON.stringify(materialContext, function (key, value) { return key === 'texture' || key === 'sampler' ? '<no dump>' : value; }), 50);
154
+ Logger.Error("Texture \"".concat(name_1, "\" could not be bound. entry=").concat(JSON.stringify(entry), ", materialContext=").concat(JSON.stringify(materialContext, function (key, value) { return key === 'texture' || key === 'sampler' ? '<no dump>' : value; })), 50);
155
155
  }
156
156
  }
157
157
  else if (entry.buffer) {
@@ -162,7 +162,7 @@ var WebGPUCacheBindGroups = /** @class */ (function () {
162
162
  entries[j].resource.size = dataBuffer.capacity;
163
163
  }
164
164
  else {
165
- Logger.Error("Can't find buffer \"" + name_1 + "\". entry=" + JSON.stringify(entry) + ", buffers=" + JSON.stringify(drawContext.buffers) + ", drawContext.uniqueId=" + drawContext.uniqueId, 50);
165
+ Logger.Error("Can't find buffer \"".concat(name_1, "\". entry=").concat(JSON.stringify(entry), ", buffers=").concat(JSON.stringify(drawContext.buffers), ", drawContext.uniqueId=").concat(drawContext.uniqueId), 50);
166
166
  }
167
167
  }
168
168
  }
@@ -1 +1 @@
1
- {"version":3,"file":"webgpuCacheBindGroups.js","sourceRoot":"","sources":["../../../../sourceES6/core/Engines/WebGPU/webgpuCacheBindGroups.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../../Misc/logger\";\r\nimport { WebGPUCacheSampler } from \"./webgpuCacheSampler\";\r\nimport { WebGPUMaterialContext } from \"./webgpuMaterialContext\";\r\nimport { WebGPUPipelineContext } from \"./webgpuPipelineContext\";\r\nimport { WebGPUEngine } from \"../webgpuEngine\";\r\nimport { WebGPUHardwareTexture } from \"./webgpuHardwareTexture\";\r\nimport { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport { ExternalTexture } from \"../../Materials/Textures/externalTexture\";\r\nimport { WebGPUDrawContext } from \"./webgpuDrawContext\";\r\n\r\nclass WebGPUBindGroupCacheNode {\r\n public values: { [id: number]: WebGPUBindGroupCacheNode };\r\n public bindGroups: GPUBindGroup[];\r\n\r\n constructor() {\r\n this.values = {};\r\n }\r\n}\r\n\r\n/** @hidden */\r\nexport class WebGPUCacheBindGroups {\r\n\r\n public static NumBindGroupsCreatedTotal = 0;\r\n public static NumBindGroupsCreatedLastFrame = 0;\r\n public static NumBindGroupsLookupLastFrame = 0;\r\n public static NumBindGroupsNoLookupLastFrame = 0;\r\n\r\n private static _Cache: WebGPUBindGroupCacheNode = new WebGPUBindGroupCacheNode();\r\n\r\n private static _NumBindGroupsCreatedCurrentFrame = 0;\r\n private static _NumBindGroupsLookupCurrentFrame = 0;\r\n private static _NumBindGroupsNoLookupCurrentFrame = 0;\r\n\r\n private _device: GPUDevice;\r\n private _cacheSampler: WebGPUCacheSampler;\r\n private _engine: WebGPUEngine;\r\n\r\n public disabled = false;\r\n\r\n public static get Statistics() {\r\n return {\r\n totalCreated: WebGPUCacheBindGroups.NumBindGroupsCreatedTotal,\r\n lastFrameCreated: WebGPUCacheBindGroups.NumBindGroupsCreatedLastFrame,\r\n lookupLastFrame: WebGPUCacheBindGroups.NumBindGroupsLookupLastFrame,\r\n noLookupLastFrame: WebGPUCacheBindGroups.NumBindGroupsNoLookupLastFrame,\r\n };\r\n }\r\n\r\n constructor(device: GPUDevice, cacheSampler: WebGPUCacheSampler, engine: WebGPUEngine) {\r\n this._device = device;\r\n this._cacheSampler = cacheSampler;\r\n this._engine = engine;\r\n }\r\n\r\n public endFrame(): void {\r\n WebGPUCacheBindGroups.NumBindGroupsCreatedLastFrame = WebGPUCacheBindGroups._NumBindGroupsCreatedCurrentFrame;\r\n WebGPUCacheBindGroups.NumBindGroupsLookupLastFrame = WebGPUCacheBindGroups._NumBindGroupsLookupCurrentFrame;\r\n WebGPUCacheBindGroups.NumBindGroupsNoLookupLastFrame = WebGPUCacheBindGroups._NumBindGroupsNoLookupCurrentFrame;\r\n WebGPUCacheBindGroups._NumBindGroupsCreatedCurrentFrame = 0;\r\n WebGPUCacheBindGroups._NumBindGroupsLookupCurrentFrame = 0;\r\n WebGPUCacheBindGroups._NumBindGroupsNoLookupCurrentFrame = 0;\r\n }\r\n\r\n /**\r\n * Cache is currently based on the uniform/storage buffers, samplers and textures used by the binding groups.\r\n * Note that all uniform buffers have an offset of 0 in Babylon and we don't have a use case where we would have the same buffer used with different capacity values:\r\n * that means we don't need to factor in the offset/size of the buffer in the cache, only the id\r\n */\r\n public getBindGroups(webgpuPipelineContext: WebGPUPipelineContext, drawContext: WebGPUDrawContext, materialContext: WebGPUMaterialContext): GPUBindGroup[] {\r\n let bindGroups: GPUBindGroup[] | undefined = undefined;\r\n let node = WebGPUCacheBindGroups._Cache;\r\n\r\n const cacheIsDisabled = this.disabled || materialContext.forceBindGroupCreation;\r\n if (!cacheIsDisabled) {\r\n if (!drawContext.isDirty(materialContext.updateId) && !materialContext.isDirty) {\r\n WebGPUCacheBindGroups._NumBindGroupsNoLookupCurrentFrame++;\r\n return drawContext.bindGroups!;\r\n }\r\n\r\n for (const bufferName of webgpuPipelineContext.shaderProcessingContext.bufferNames) {\r\n const uboId = drawContext.buffers[bufferName]?.uniqueId ?? 0;\r\n let nextNode = node.values[uboId];\r\n if (!nextNode) {\r\n nextNode = new WebGPUBindGroupCacheNode();\r\n node.values[uboId] = nextNode;\r\n }\r\n node = nextNode;\r\n }\r\n\r\n for (const samplerName of webgpuPipelineContext.shaderProcessingContext.samplerNames) {\r\n const samplerHashCode = materialContext.samplers[samplerName]?.hashCode ?? 0;\r\n let nextNode = node.values[samplerHashCode];\r\n if (!nextNode) {\r\n nextNode = new WebGPUBindGroupCacheNode();\r\n node.values[samplerHashCode] = nextNode;\r\n }\r\n node = nextNode;\r\n }\r\n\r\n for (const textureName of webgpuPipelineContext.shaderProcessingContext.textureNames) {\r\n const textureId = materialContext.textures[textureName]?.texture?.uniqueId ?? 0;\r\n let nextNode = node.values[textureId];\r\n if (!nextNode) {\r\n nextNode = new WebGPUBindGroupCacheNode();\r\n node.values[textureId] = nextNode;\r\n }\r\n node = nextNode;\r\n }\r\n\r\n bindGroups = node.bindGroups;\r\n }\r\n\r\n drawContext.resetIsDirty(materialContext.updateId);\r\n materialContext.isDirty = false;\r\n\r\n if (bindGroups) {\r\n drawContext.bindGroups = bindGroups;\r\n WebGPUCacheBindGroups._NumBindGroupsLookupCurrentFrame++;\r\n return bindGroups;\r\n }\r\n\r\n bindGroups = [];\r\n drawContext.bindGroups = bindGroups;\r\n\r\n if (!cacheIsDisabled) {\r\n node.bindGroups = bindGroups;\r\n }\r\n\r\n WebGPUCacheBindGroups.NumBindGroupsCreatedTotal++;\r\n WebGPUCacheBindGroups._NumBindGroupsCreatedCurrentFrame++;\r\n\r\n const bindGroupLayouts = webgpuPipelineContext.bindGroupLayouts;\r\n for (let i = 0; i < webgpuPipelineContext.shaderProcessingContext.bindGroupLayoutEntries.length; i++) {\r\n const setDefinition = webgpuPipelineContext.shaderProcessingContext.bindGroupLayoutEntries[i];\r\n\r\n const entries = webgpuPipelineContext.shaderProcessingContext.bindGroupEntries[i];\r\n for (let j = 0; j < setDefinition.length; j++) {\r\n const entry = webgpuPipelineContext.shaderProcessingContext.bindGroupLayoutEntries[i][j];\r\n const entryInfo = webgpuPipelineContext.shaderProcessingContext.bindGroupLayoutEntryInfo[i][entry.binding];\r\n const name = entryInfo.nameInArrayOfTexture ?? entryInfo.name;\r\n\r\n if (entry.sampler) {\r\n const bindingInfo = materialContext.samplers[name];\r\n if (bindingInfo) {\r\n const sampler = bindingInfo.sampler;\r\n if (!sampler) {\r\n if (this._engine.dbgSanityChecks) {\r\n Logger.Error(`Trying to bind a null sampler! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(bindingInfo, (key: string, value: any) => key === 'texture' ? '<no dump>' : value)}, materialContext.uniqueId=${materialContext.uniqueId}`, 50);\r\n }\r\n continue;\r\n }\r\n entries[j].resource = this._cacheSampler.getSampler(sampler, false, bindingInfo.hashCode);\r\n } else {\r\n Logger.Error(`Sampler \"${name}\" could not be bound. entry=${JSON.stringify(entry)}, materialContext=${JSON.stringify(materialContext, (key: string, value: any) => key === 'texture' || key === 'sampler' ? '<no dump>' : value)}`, 50);\r\n }\r\n } else if (entry.texture || entry.storageTexture) {\r\n const bindingInfo = materialContext.textures[name];\r\n if (bindingInfo) {\r\n if (this._engine.dbgSanityChecks && bindingInfo.texture === null) {\r\n Logger.Error(`Trying to bind a null texture! entry=${JSON.stringify(entry)}, bindingInfo=${JSON.stringify(bindingInfo, (key: string, value: any) => key === 'texture' ? '<no dump>' : value)}, materialContext.uniqueId=${materialContext.uniqueId}`, 50);\r\n continue;\r\n }\r\n const hardwareTexture = (bindingInfo.texture as InternalTexture)._hardwareTexture as WebGPUHardwareTexture;\r\n\r\n if (this._engine.dbgSanityChecks && (!hardwareTexture || entry.texture && !hardwareTexture.view || entry.storageTexture && !hardwareTexture.viewForWriting)) {\r\n Logger.Error(`Trying to bind a null gpu texture or view! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(bindingInfo, (key: string, value: any) => key === 'texture' ? '<no dump>' : value)}, isReady=${bindingInfo.texture?.isReady}, materialContext.uniqueId=${materialContext.uniqueId}`, 50);\r\n continue;\r\n }\r\n\r\n entries[j].resource = entry.storageTexture ? hardwareTexture.viewForWriting! : hardwareTexture.view!;\r\n } else {\r\n Logger.Error(`Texture \"${name}\" could not be bound. entry=${JSON.stringify(entry)}, materialContext=${JSON.stringify(materialContext, (key: string, value: any) => key === 'texture' || key === 'sampler' ? '<no dump>' : value)}`, 50);\r\n }\r\n } else if (entry.externalTexture) {\r\n const bindingInfo = materialContext.textures[name];\r\n if (bindingInfo) {\r\n if (this._engine.dbgSanityChecks && bindingInfo.texture === null) {\r\n Logger.Error(`Trying to bind a null external texture! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(bindingInfo, (key: string, value: any) => key === 'texture' ? '<no dump>' : value)}, materialContext.uniqueId=${materialContext.uniqueId}`, 50);\r\n continue;\r\n }\r\n const externalTexture = (bindingInfo.texture as ExternalTexture).underlyingResource;\r\n\r\n if (this._engine.dbgSanityChecks && !externalTexture) {\r\n Logger.Error(`Trying to bind a null gpu external texture! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(bindingInfo, (key: string, value: any) => key === 'texture' ? '<no dump>' : value)}, isReady=${bindingInfo.texture?.isReady}, materialContext.uniqueId=${materialContext.uniqueId}`, 50);\r\n continue;\r\n }\r\n\r\n entries[j].resource = this._device.importExternalTexture({ source: externalTexture });\r\n } else {\r\n Logger.Error(`Texture \"${name}\" could not be bound. entry=${JSON.stringify(entry)}, materialContext=${JSON.stringify(materialContext, (key: string, value: any) => key === 'texture' || key === 'sampler' ? '<no dump>' : value)}`, 50);\r\n }\r\n } else if (entry.buffer) {\r\n const dataBuffer = drawContext.buffers[name];\r\n if (dataBuffer) {\r\n const webgpuBuffer = dataBuffer.underlyingResource as GPUBuffer;\r\n (entries[j].resource as GPUBufferBinding).buffer = webgpuBuffer;\r\n (entries[j].resource as GPUBufferBinding).size = dataBuffer.capacity;\r\n } else {\r\n Logger.Error(`Can't find buffer \"${name}\". entry=${JSON.stringify(entry)}, buffers=${JSON.stringify(drawContext.buffers)}, drawContext.uniqueId=${drawContext.uniqueId}`, 50);\r\n }\r\n }\r\n }\r\n\r\n let groupLayout = bindGroupLayouts[i];\r\n bindGroups[i] = this._device.createBindGroup({\r\n layout: groupLayout,\r\n entries,\r\n });\r\n }\r\n\r\n return bindGroups;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webgpuCacheBindGroups.js","sourceRoot":"","sources":["../../../../sourceES6/core/Engines/WebGPU/webgpuCacheBindGroups.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../../Misc/logger\";\r\nimport { WebGPUCacheSampler } from \"./webgpuCacheSampler\";\r\nimport { WebGPUMaterialContext } from \"./webgpuMaterialContext\";\r\nimport { WebGPUPipelineContext } from \"./webgpuPipelineContext\";\r\nimport { WebGPUEngine } from \"../webgpuEngine\";\r\nimport { WebGPUHardwareTexture } from \"./webgpuHardwareTexture\";\r\nimport { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport { ExternalTexture } from \"../../Materials/Textures/externalTexture\";\r\nimport { WebGPUDrawContext } from \"./webgpuDrawContext\";\r\n\r\nclass WebGPUBindGroupCacheNode {\r\n public values: { [id: number]: WebGPUBindGroupCacheNode };\r\n public bindGroups: GPUBindGroup[];\r\n\r\n constructor() {\r\n this.values = {};\r\n }\r\n}\r\n\r\n/** @hidden */\r\nexport class WebGPUCacheBindGroups {\r\n\r\n public static NumBindGroupsCreatedTotal = 0;\r\n public static NumBindGroupsCreatedLastFrame = 0;\r\n public static NumBindGroupsLookupLastFrame = 0;\r\n public static NumBindGroupsNoLookupLastFrame = 0;\r\n\r\n private static _Cache: WebGPUBindGroupCacheNode = new WebGPUBindGroupCacheNode();\r\n\r\n private static _NumBindGroupsCreatedCurrentFrame = 0;\r\n private static _NumBindGroupsLookupCurrentFrame = 0;\r\n private static _NumBindGroupsNoLookupCurrentFrame = 0;\r\n\r\n private _device: GPUDevice;\r\n private _cacheSampler: WebGPUCacheSampler;\r\n private _engine: WebGPUEngine;\r\n\r\n public disabled = false;\r\n\r\n public static get Statistics() {\r\n return {\r\n totalCreated: WebGPUCacheBindGroups.NumBindGroupsCreatedTotal,\r\n lastFrameCreated: WebGPUCacheBindGroups.NumBindGroupsCreatedLastFrame,\r\n lookupLastFrame: WebGPUCacheBindGroups.NumBindGroupsLookupLastFrame,\r\n noLookupLastFrame: WebGPUCacheBindGroups.NumBindGroupsNoLookupLastFrame,\r\n };\r\n }\r\n\r\n constructor(device: GPUDevice, cacheSampler: WebGPUCacheSampler, engine: WebGPUEngine) {\r\n this._device = device;\r\n this._cacheSampler = cacheSampler;\r\n this._engine = engine;\r\n }\r\n\r\n public endFrame(): void {\r\n WebGPUCacheBindGroups.NumBindGroupsCreatedLastFrame = WebGPUCacheBindGroups._NumBindGroupsCreatedCurrentFrame;\r\n WebGPUCacheBindGroups.NumBindGroupsLookupLastFrame = WebGPUCacheBindGroups._NumBindGroupsLookupCurrentFrame;\r\n WebGPUCacheBindGroups.NumBindGroupsNoLookupLastFrame = WebGPUCacheBindGroups._NumBindGroupsNoLookupCurrentFrame;\r\n WebGPUCacheBindGroups._NumBindGroupsCreatedCurrentFrame = 0;\r\n WebGPUCacheBindGroups._NumBindGroupsLookupCurrentFrame = 0;\r\n WebGPUCacheBindGroups._NumBindGroupsNoLookupCurrentFrame = 0;\r\n }\r\n\r\n /**\r\n * Cache is currently based on the uniform/storage buffers, samplers and textures used by the binding groups.\r\n * Note that all uniform buffers have an offset of 0 in Babylon and we don't have a use case where we would have the same buffer used with different capacity values:\r\n * that means we don't need to factor in the offset/size of the buffer in the cache, only the id\r\n */\r\n public getBindGroups(webgpuPipelineContext: WebGPUPipelineContext, drawContext: WebGPUDrawContext, materialContext: WebGPUMaterialContext): GPUBindGroup[] {\r\n let bindGroups: GPUBindGroup[] | undefined = undefined;\r\n let node = WebGPUCacheBindGroups._Cache;\r\n\r\n const cacheIsDisabled = this.disabled || materialContext.forceBindGroupCreation;\r\n if (!cacheIsDisabled) {\r\n if (!drawContext.isDirty(materialContext.updateId) && !materialContext.isDirty) {\r\n WebGPUCacheBindGroups._NumBindGroupsNoLookupCurrentFrame++;\r\n return drawContext.bindGroups!;\r\n }\r\n\r\n for (const bufferName of webgpuPipelineContext.shaderProcessingContext.bufferNames) {\r\n const uboId = drawContext.buffers[bufferName]?.uniqueId ?? 0;\r\n let nextNode = node.values[uboId];\r\n if (!nextNode) {\r\n nextNode = new WebGPUBindGroupCacheNode();\r\n node.values[uboId] = nextNode;\r\n }\r\n node = nextNode;\r\n }\r\n\r\n for (const samplerName of webgpuPipelineContext.shaderProcessingContext.samplerNames) {\r\n const samplerHashCode = materialContext.samplers[samplerName]?.hashCode ?? 0;\r\n let nextNode = node.values[samplerHashCode];\r\n if (!nextNode) {\r\n nextNode = new WebGPUBindGroupCacheNode();\r\n node.values[samplerHashCode] = nextNode;\r\n }\r\n node = nextNode;\r\n }\r\n\r\n for (const textureName of webgpuPipelineContext.shaderProcessingContext.textureNames) {\r\n const textureId = materialContext.textures[textureName]?.texture?.uniqueId ?? 0;\r\n let nextNode = node.values[textureId];\r\n if (!nextNode) {\r\n nextNode = new WebGPUBindGroupCacheNode();\r\n node.values[textureId] = nextNode;\r\n }\r\n node = nextNode;\r\n }\r\n\r\n bindGroups = node.bindGroups;\r\n }\r\n\r\n drawContext.resetIsDirty(materialContext.updateId);\r\n materialContext.isDirty = false;\r\n\r\n if (bindGroups) {\r\n drawContext.bindGroups = bindGroups;\r\n WebGPUCacheBindGroups._NumBindGroupsLookupCurrentFrame++;\r\n return bindGroups;\r\n }\r\n\r\n bindGroups = [];\r\n drawContext.bindGroups = bindGroups;\r\n\r\n if (!cacheIsDisabled) {\r\n node.bindGroups = bindGroups;\r\n }\r\n\r\n WebGPUCacheBindGroups.NumBindGroupsCreatedTotal++;\r\n WebGPUCacheBindGroups._NumBindGroupsCreatedCurrentFrame++;\r\n\r\n const bindGroupLayouts = webgpuPipelineContext.bindGroupLayouts;\r\n for (let i = 0; i < webgpuPipelineContext.shaderProcessingContext.bindGroupLayoutEntries.length; i++) {\r\n const setDefinition = webgpuPipelineContext.shaderProcessingContext.bindGroupLayoutEntries[i];\r\n\r\n const entries = webgpuPipelineContext.shaderProcessingContext.bindGroupEntries[i];\r\n for (let j = 0; j < setDefinition.length; j++) {\r\n const entry = webgpuPipelineContext.shaderProcessingContext.bindGroupLayoutEntries[i][j];\r\n const entryInfo = webgpuPipelineContext.shaderProcessingContext.bindGroupLayoutEntryInfo[i][entry.binding];\r\n const name = entryInfo.nameInArrayOfTexture ?? entryInfo.name;\r\n\r\n if (entry.sampler) {\r\n const bindingInfo = materialContext.samplers[name];\r\n if (bindingInfo) {\r\n const sampler = bindingInfo.sampler;\r\n if (!sampler) {\r\n if (this._engine.dbgSanityChecks) {\r\n Logger.Error(`Trying to bind a null sampler! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(bindingInfo, (key: string, value: any) => key === 'texture' ? '<no dump>' : value)}, materialContext.uniqueId=${materialContext.uniqueId}`, 50);\r\n }\r\n continue;\r\n }\r\n entries[j].resource = this._cacheSampler.getSampler(sampler, false, bindingInfo.hashCode);\r\n } else {\r\n Logger.Error(`Sampler \"${name}\" could not be bound. entry=${JSON.stringify(entry)}, materialContext=${JSON.stringify(materialContext, (key: string, value: any) => key === 'texture' || key === 'sampler' ? '<no dump>' : value)}`, 50);\r\n }\r\n } else if (entry.texture || entry.storageTexture) {\r\n const bindingInfo = materialContext.textures[name];\r\n if (bindingInfo) {\r\n if (this._engine.dbgSanityChecks && bindingInfo.texture === null) {\r\n Logger.Error(`Trying to bind a null texture! entry=${JSON.stringify(entry)}, bindingInfo=${JSON.stringify(bindingInfo, (key: string, value: any) => key === 'texture' ? '<no dump>' : value)}, materialContext.uniqueId=${materialContext.uniqueId}`, 50);\r\n continue;\r\n }\r\n const hardwareTexture = (bindingInfo.texture as InternalTexture)._hardwareTexture as WebGPUHardwareTexture;\r\n\r\n if (this._engine.dbgSanityChecks && (!hardwareTexture || entry.texture && !hardwareTexture.view || entry.storageTexture && !hardwareTexture.viewForWriting)) {\r\n Logger.Error(`Trying to bind a null gpu texture or view! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(bindingInfo, (key: string, value: any) => key === 'texture' ? '<no dump>' : value)}, isReady=${bindingInfo.texture?.isReady}, materialContext.uniqueId=${materialContext.uniqueId}`, 50);\r\n continue;\r\n }\r\n\r\n entries[j].resource = entry.storageTexture ? hardwareTexture.viewForWriting! : hardwareTexture.view!;\r\n } else {\r\n Logger.Error(`Texture \"${name}\" could not be bound. entry=${JSON.stringify(entry)}, materialContext=${JSON.stringify(materialContext, (key: string, value: any) => key === 'texture' || key === 'sampler' ? '<no dump>' : value)}`, 50);\r\n }\r\n } else if (entry.externalTexture) {\r\n const bindingInfo = materialContext.textures[name];\r\n if (bindingInfo) {\r\n if (this._engine.dbgSanityChecks && bindingInfo.texture === null) {\r\n Logger.Error(`Trying to bind a null external texture! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(bindingInfo, (key: string, value: any) => key === 'texture' ? '<no dump>' : value)}, materialContext.uniqueId=${materialContext.uniqueId}`, 50);\r\n continue;\r\n }\r\n const externalTexture = (bindingInfo.texture as ExternalTexture).underlyingResource;\r\n\r\n if (this._engine.dbgSanityChecks && !externalTexture) {\r\n Logger.Error(`Trying to bind a null gpu external texture! entry=${JSON.stringify(entry)}, name=${name}, bindingInfo=${JSON.stringify(bindingInfo, (key: string, value: any) => key === 'texture' ? '<no dump>' : value)}, isReady=${bindingInfo.texture?.isReady}, materialContext.uniqueId=${materialContext.uniqueId}`, 50);\r\n continue;\r\n }\r\n\r\n entries[j].resource = this._device.importExternalTexture({ source: externalTexture });\r\n } else {\r\n Logger.Error(`Texture \"${name}\" could not be bound. entry=${JSON.stringify(entry)}, materialContext=${JSON.stringify(materialContext, (key: string, value: any) => key === 'texture' || key === 'sampler' ? '<no dump>' : value)}`, 50);\r\n }\r\n } else if (entry.buffer) {\r\n const dataBuffer = drawContext.buffers[name];\r\n if (dataBuffer) {\r\n const webgpuBuffer = dataBuffer.underlyingResource as GPUBuffer;\r\n (entries[j].resource as GPUBufferBinding).buffer = webgpuBuffer;\r\n (entries[j].resource as GPUBufferBinding).size = dataBuffer.capacity;\r\n } else {\r\n Logger.Error(`Can't find buffer \"${name}\". entry=${JSON.stringify(entry)}, buffers=${JSON.stringify(drawContext.buffers)}, drawContext.uniqueId=${drawContext.uniqueId}`, 50);\r\n }\r\n }\r\n }\r\n\r\n let groupLayout = bindGroupLayouts[i];\r\n bindGroups[i] = this._device.createBindGroup({\r\n layout: groupLayout,\r\n entries,\r\n });\r\n }\r\n\r\n return bindGroups;\r\n }\r\n}\r\n"]}
@@ -515,7 +515,7 @@ var WebGPUCacheRenderPipeline = /** @class */ (function () {
515
515
  }
516
516
  break;
517
517
  }
518
- throw new Error("Invalid Format '" + vertexBuffer.getKind() + "' - type=" + type + ", normalized=" + normalized + ", size=" + size);
518
+ throw new Error("Invalid Format '".concat(vertexBuffer.getKind(), "' - type=").concat(type, ", normalized=").concat(normalized, ", size=").concat(size));
519
519
  };
520
520
  WebGPUCacheRenderPipeline.prototype._getAphaBlendState = function () {
521
521
  if (!this._alphaBlendEnabled) {