@babylonjs/core 6.19.1 → 6.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (303) hide show
  1. package/Actions/actionManager.js +2 -2
  2. package/Actions/actionManager.js.map +1 -1
  3. package/Animations/animation.d.ts +51 -3
  4. package/Animations/animation.js +92 -106
  5. package/Animations/animation.js.map +1 -1
  6. package/Animations/animationGroup.d.ts +60 -8
  7. package/Animations/animationGroup.js +132 -29
  8. package/Animations/animationGroup.js.map +1 -1
  9. package/Animations/runtimeAnimation.js +2 -2
  10. package/Animations/runtimeAnimation.js.map +1 -1
  11. package/Cameras/Inputs/flyCameraMouseInput.js +2 -7
  12. package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
  13. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js +2 -7
  14. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
  15. package/Cameras/Inputs/freeCameraMouseInput.js +4 -14
  16. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  17. package/Cameras/Inputs/freeCameraTouchInput.js +2 -1
  18. package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
  19. package/Cameras/arcRotateCamera.js +2 -7
  20. package/Cameras/arcRotateCamera.js.map +1 -1
  21. package/Cameras/camera.d.ts +2 -0
  22. package/Cameras/camera.js +8 -0
  23. package/Cameras/camera.js.map +1 -1
  24. package/Compute/computeShader.d.ts +15 -0
  25. package/Compute/computeShader.js +39 -0
  26. package/Compute/computeShader.js.map +1 -1
  27. package/Debug/physicsViewer.d.ts +33 -0
  28. package/Debug/physicsViewer.js +205 -0
  29. package/Debug/physicsViewer.js.map +1 -1
  30. package/Engines/Extensions/engine.computeShader.d.ts +2 -1
  31. package/Engines/Extensions/engine.computeShader.js +1 -0
  32. package/Engines/Extensions/engine.computeShader.js.map +1 -1
  33. package/Engines/Extensions/engine.query.js +1 -1
  34. package/Engines/Extensions/engine.query.js.map +1 -1
  35. package/Engines/WebGPU/Extensions/engine.query.js +1 -1
  36. package/Engines/WebGPU/Extensions/engine.query.js.map +1 -1
  37. package/Engines/WebGPU/Extensions/engine.renderTarget.js +3 -2
  38. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  39. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js +2 -0
  40. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
  41. package/Engines/WebGPU/webgpuComputeContext.js +15 -0
  42. package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
  43. package/Engines/WebGPU/webgpuOcclusionQuery.d.ts +3 -1
  44. package/Engines/WebGPU/webgpuOcclusionQuery.js +18 -6
  45. package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
  46. package/Engines/WebGPU/webgpuQuerySet.d.ts +1 -1
  47. package/Engines/WebGPU/webgpuQuerySet.js +2 -1
  48. package/Engines/WebGPU/webgpuQuerySet.js.map +1 -1
  49. package/Engines/renderTargetWrapper.d.ts +6 -1
  50. package/Engines/renderTargetWrapper.js +3 -1
  51. package/Engines/renderTargetWrapper.js.map +1 -1
  52. package/Engines/thinEngine.js +2 -2
  53. package/Engines/thinEngine.js.map +1 -1
  54. package/Engines/webgpuEngine.js +5 -3
  55. package/Engines/webgpuEngine.js.map +1 -1
  56. package/FlowGraph/Blocks/Data/flowGraphAddBlock.d.ts +23 -0
  57. package/FlowGraph/Blocks/Data/flowGraphAddBlock.js +18 -0
  58. package/FlowGraph/Blocks/Data/flowGraphAddBlock.js.map +1 -0
  59. package/FlowGraph/Blocks/Data/flowGraphConditionalDataBlock.d.ts +30 -0
  60. package/FlowGraph/Blocks/Data/flowGraphConditionalDataBlock.js +22 -0
  61. package/FlowGraph/Blocks/Data/flowGraphConditionalDataBlock.js.map +1 -0
  62. package/FlowGraph/Blocks/Data/flowGraphGetVariableBlock.d.ts +33 -0
  63. package/FlowGraph/Blocks/Data/flowGraphGetVariableBlock.js +30 -0
  64. package/FlowGraph/Blocks/Data/flowGraphGetVariableBlock.js.map +1 -0
  65. package/FlowGraph/Blocks/Data/index.d.ts +3 -1
  66. package/FlowGraph/Blocks/Data/index.js +3 -1
  67. package/FlowGraph/Blocks/Data/index.js.map +1 -1
  68. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.d.ts +12 -10
  69. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.js +25 -29
  70. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.js.map +1 -1
  71. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.d.ts +25 -0
  72. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.js +31 -0
  73. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.js.map +1 -0
  74. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.d.ts +3 -7
  75. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.js +11 -11
  76. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.js.map +1 -1
  77. package/FlowGraph/Blocks/Event/index.d.ts +1 -0
  78. package/FlowGraph/Blocks/Event/index.js +1 -0
  79. package/FlowGraph/Blocks/Event/index.js.map +1 -1
  80. package/FlowGraph/Blocks/Execution/flowGraphConditionalBlock.d.ts +24 -0
  81. package/FlowGraph/Blocks/Execution/flowGraphConditionalBlock.js +23 -0
  82. package/FlowGraph/Blocks/Execution/flowGraphConditionalBlock.js.map +1 -0
  83. package/FlowGraph/Blocks/Execution/flowGraphForLoopBlock.d.ts +10 -13
  84. package/FlowGraph/Blocks/Execution/flowGraphForLoopBlock.js +28 -22
  85. package/FlowGraph/Blocks/Execution/flowGraphForLoopBlock.js.map +1 -1
  86. package/FlowGraph/Blocks/Execution/flowGraphLogBlock.d.ts +5 -5
  87. package/FlowGraph/Blocks/Execution/flowGraphLogBlock.js +8 -6
  88. package/FlowGraph/Blocks/Execution/flowGraphLogBlock.js.map +1 -1
  89. package/FlowGraph/Blocks/Execution/flowGraphPlayAnimationBlock.d.ts +56 -0
  90. package/FlowGraph/Blocks/Execution/flowGraphPlayAnimationBlock.js +66 -0
  91. package/FlowGraph/Blocks/Execution/flowGraphPlayAnimationBlock.js.map +1 -0
  92. package/FlowGraph/Blocks/Execution/flowGraphSendCustomEventBlock.d.ts +18 -0
  93. package/FlowGraph/Blocks/Execution/flowGraphSendCustomEventBlock.js +19 -0
  94. package/FlowGraph/Blocks/Execution/flowGraphSendCustomEventBlock.js.map +1 -0
  95. package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.d.ts +26 -0
  96. package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.js +36 -0
  97. package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.js.map +1 -0
  98. package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.d.ts +23 -0
  99. package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.js +25 -0
  100. package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.js.map +1 -0
  101. package/FlowGraph/Blocks/Execution/flowGraphStopAnimationBlock.d.ts +16 -0
  102. package/FlowGraph/Blocks/Execution/flowGraphStopAnimationBlock.js +18 -0
  103. package/FlowGraph/Blocks/Execution/flowGraphStopAnimationBlock.js.map +1 -0
  104. package/FlowGraph/Blocks/Execution/flowGraphTimerBlock.d.ts +32 -0
  105. package/FlowGraph/Blocks/Execution/flowGraphTimerBlock.js +62 -0
  106. package/FlowGraph/Blocks/Execution/flowGraphTimerBlock.js.map +1 -0
  107. package/FlowGraph/Blocks/Execution/index.d.ts +7 -0
  108. package/FlowGraph/Blocks/Execution/index.js +7 -0
  109. package/FlowGraph/Blocks/Execution/index.js.map +1 -1
  110. package/FlowGraph/flowGraph.d.ts +42 -12
  111. package/FlowGraph/flowGraph.js +37 -23
  112. package/FlowGraph/flowGraph.js.map +1 -1
  113. package/FlowGraph/flowGraphAsyncExecutionBlock.d.ts +29 -0
  114. package/FlowGraph/flowGraphAsyncExecutionBlock.js +21 -0
  115. package/FlowGraph/flowGraphAsyncExecutionBlock.js.map +1 -0
  116. package/FlowGraph/flowGraphBlock.d.ts +9 -11
  117. package/FlowGraph/flowGraphBlock.js +12 -8
  118. package/FlowGraph/flowGraphBlock.js.map +1 -1
  119. package/FlowGraph/flowGraphConnection.d.ts +17 -7
  120. package/FlowGraph/flowGraphConnection.js +26 -9
  121. package/FlowGraph/flowGraphConnection.js.map +1 -1
  122. package/FlowGraph/flowGraphContext.d.ts +102 -0
  123. package/FlowGraph/flowGraphContext.js +111 -0
  124. package/FlowGraph/flowGraphContext.js.map +1 -0
  125. package/FlowGraph/flowGraphCustomEvent.d.ts +5 -0
  126. package/FlowGraph/flowGraphCustomEvent.js +2 -0
  127. package/FlowGraph/flowGraphCustomEvent.js.map +1 -0
  128. package/FlowGraph/flowGraphDataConnection.d.ts +10 -2
  129. package/FlowGraph/flowGraphDataConnection.js +16 -8
  130. package/FlowGraph/flowGraphDataConnection.js.map +1 -1
  131. package/FlowGraph/flowGraphEventBlock.d.ts +5 -12
  132. package/FlowGraph/flowGraphEventBlock.js +5 -5
  133. package/FlowGraph/flowGraphEventBlock.js.map +1 -1
  134. package/FlowGraph/flowGraphEventCoordinator.d.ts +23 -0
  135. package/FlowGraph/flowGraphEventCoordinator.js +37 -0
  136. package/FlowGraph/flowGraphEventCoordinator.js.map +1 -0
  137. package/FlowGraph/flowGraphExecutionBlock.d.ts +5 -5
  138. package/FlowGraph/flowGraphExecutionBlock.js +3 -3
  139. package/FlowGraph/flowGraphExecutionBlock.js.map +1 -1
  140. package/FlowGraph/flowGraphRichTypes.d.ts +28 -0
  141. package/FlowGraph/flowGraphRichTypes.js +43 -0
  142. package/FlowGraph/flowGraphRichTypes.js.map +1 -0
  143. package/FlowGraph/flowGraphSignalConnection.d.ts +7 -1
  144. package/FlowGraph/flowGraphSignalConnection.js +11 -4
  145. package/FlowGraph/flowGraphSignalConnection.js.map +1 -1
  146. package/FlowGraph/flowGraphVariableDefinitions.d.ts +12 -0
  147. package/FlowGraph/flowGraphVariableDefinitions.js +22 -0
  148. package/FlowGraph/flowGraphVariableDefinitions.js.map +1 -0
  149. package/FlowGraph/flowGraphWithOnDoneExecutionBlock.d.ts +10 -2
  150. package/FlowGraph/flowGraphWithOnDoneExecutionBlock.js +8 -2
  151. package/FlowGraph/flowGraphWithOnDoneExecutionBlock.js.map +1 -1
  152. package/FlowGraph/index.d.ts +3 -0
  153. package/FlowGraph/index.js +3 -0
  154. package/FlowGraph/index.js.map +1 -1
  155. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +1 -0
  156. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  157. package/Materials/Node/nodeMaterial.d.ts +6 -1
  158. package/Materials/Node/nodeMaterial.js +36 -2
  159. package/Materials/Node/nodeMaterial.js.map +1 -1
  160. package/Materials/PBR/pbrBaseMaterial.d.ts +1 -0
  161. package/Materials/PBR/pbrBaseMaterial.js +1 -0
  162. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  163. package/Materials/Textures/videoTexture.d.ts +5 -0
  164. package/Materials/Textures/videoTexture.js +6 -0
  165. package/Materials/Textures/videoTexture.js.map +1 -1
  166. package/Materials/materialHelper.js +1 -0
  167. package/Materials/materialHelper.js.map +1 -1
  168. package/Materials/standardMaterial.d.ts +1 -0
  169. package/Materials/standardMaterial.js +1 -0
  170. package/Materials/standardMaterial.js.map +1 -1
  171. package/Materials/uniformBuffer.d.ts +7 -0
  172. package/Materials/uniformBuffer.js +8 -0
  173. package/Materials/uniformBuffer.js.map +1 -1
  174. package/Maths/math.vector.d.ts +5 -0
  175. package/Maths/math.vector.js +7 -0
  176. package/Maths/math.vector.js.map +1 -1
  177. package/Meshes/Node/Blocks/Instances/instantiateBlock.d.ts +11 -5
  178. package/Meshes/Node/Blocks/Instances/instantiateBlock.js +24 -11
  179. package/Meshes/Node/Blocks/Instances/instantiateBlock.js.map +1 -1
  180. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.d.ts +15 -9
  181. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js +28 -15
  182. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js.map +1 -1
  183. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.d.ts +15 -9
  184. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.js +28 -15
  185. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.js.map +1 -1
  186. package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.d.ts +15 -9
  187. package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.js +28 -15
  188. package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.js.map +1 -1
  189. package/Meshes/Node/Blocks/Set/setColorsBlock.d.ts +12 -0
  190. package/Meshes/Node/Blocks/Set/setColorsBlock.js +65 -27
  191. package/Meshes/Node/Blocks/Set/setColorsBlock.js.map +1 -1
  192. package/Meshes/Node/Blocks/Set/setMaterialIDBlock.d.ts +7 -0
  193. package/Meshes/Node/Blocks/Set/setMaterialIDBlock.js +20 -0
  194. package/Meshes/Node/Blocks/Set/setMaterialIDBlock.js.map +1 -1
  195. package/Meshes/Node/Blocks/Set/setNormalsBlock.d.ts +12 -0
  196. package/Meshes/Node/Blocks/Set/setNormalsBlock.js +65 -27
  197. package/Meshes/Node/Blocks/Set/setNormalsBlock.js.map +1 -1
  198. package/Meshes/Node/Blocks/Set/setPositionsBlock.d.ts +12 -0
  199. package/Meshes/Node/Blocks/Set/setPositionsBlock.js +57 -19
  200. package/Meshes/Node/Blocks/Set/setPositionsBlock.js.map +1 -1
  201. package/Meshes/Node/Blocks/Set/setTangentsBlock.d.ts +12 -0
  202. package/Meshes/Node/Blocks/Set/setTangentsBlock.js +65 -27
  203. package/Meshes/Node/Blocks/Set/setTangentsBlock.js.map +1 -1
  204. package/Meshes/Node/Blocks/Set/setUVsBlock.d.ts +5 -0
  205. package/Meshes/Node/Blocks/Set/setUVsBlock.js +68 -46
  206. package/Meshes/Node/Blocks/Set/setUVsBlock.js.map +1 -1
  207. package/Meshes/Node/Blocks/Sources/boxBlock.js +3 -1
  208. package/Meshes/Node/Blocks/Sources/boxBlock.js.map +1 -1
  209. package/Meshes/Node/Blocks/Sources/capsuleBlock.js +3 -1
  210. package/Meshes/Node/Blocks/Sources/capsuleBlock.js.map +1 -1
  211. package/Meshes/Node/Blocks/Sources/cylinderBlock.js +3 -1
  212. package/Meshes/Node/Blocks/Sources/cylinderBlock.js.map +1 -1
  213. package/Meshes/Node/Blocks/Sources/discBlock.js +3 -1
  214. package/Meshes/Node/Blocks/Sources/discBlock.js.map +1 -1
  215. package/Meshes/Node/Blocks/Sources/gridBlock.js +3 -1
  216. package/Meshes/Node/Blocks/Sources/gridBlock.js.map +1 -1
  217. package/Meshes/Node/Blocks/Sources/icoSphereBlock.js +3 -1
  218. package/Meshes/Node/Blocks/Sources/icoSphereBlock.js.map +1 -1
  219. package/Meshes/Node/Blocks/Sources/meshBlock.js +4 -1
  220. package/Meshes/Node/Blocks/Sources/meshBlock.js.map +1 -1
  221. package/Meshes/Node/Blocks/Sources/planeBlock.js +3 -1
  222. package/Meshes/Node/Blocks/Sources/planeBlock.js.map +1 -1
  223. package/Meshes/Node/Blocks/Sources/sphereBlock.js +3 -1
  224. package/Meshes/Node/Blocks/Sources/sphereBlock.js.map +1 -1
  225. package/Meshes/Node/Blocks/Sources/torusBlock.js +3 -1
  226. package/Meshes/Node/Blocks/Sources/torusBlock.js.map +1 -1
  227. package/Meshes/Node/Blocks/debugBlock.js +5 -1
  228. package/Meshes/Node/Blocks/debugBlock.js.map +1 -1
  229. package/Meshes/Node/Blocks/geometryCollectionBlock.js +1 -0
  230. package/Meshes/Node/Blocks/geometryCollectionBlock.js.map +1 -1
  231. package/Meshes/Node/Blocks/geometryInputBlock.js +1 -0
  232. package/Meshes/Node/Blocks/geometryInputBlock.js.map +1 -1
  233. package/Meshes/Node/Blocks/geometryOptimizeBlock.js +1 -0
  234. package/Meshes/Node/Blocks/geometryOptimizeBlock.js.map +1 -1
  235. package/Meshes/Node/Blocks/geometryTransformBlock.js +1 -0
  236. package/Meshes/Node/Blocks/geometryTransformBlock.js.map +1 -1
  237. package/Meshes/Node/Blocks/intFloatConverterBlock.js +2 -2
  238. package/Meshes/Node/Blocks/intFloatConverterBlock.js.map +1 -1
  239. package/Meshes/Node/Blocks/mapRangeBlock.js +8 -1
  240. package/Meshes/Node/Blocks/mapRangeBlock.js.map +1 -1
  241. package/Meshes/Node/Blocks/mathBlock.js +1 -0
  242. package/Meshes/Node/Blocks/mathBlock.js.map +1 -1
  243. package/Meshes/Node/Blocks/matrixComposeBlock.d.ts +30 -0
  244. package/Meshes/Node/Blocks/matrixComposeBlock.js +58 -0
  245. package/Meshes/Node/Blocks/matrixComposeBlock.js.map +1 -0
  246. package/Meshes/Node/Blocks/mergeGeometryBlock.js +1 -0
  247. package/Meshes/Node/Blocks/mergeGeometryBlock.js.map +1 -1
  248. package/Meshes/Node/Enums/nodeGeometryContextualSources.d.ts +3 -1
  249. package/Meshes/Node/Enums/nodeGeometryContextualSources.js +2 -0
  250. package/Meshes/Node/Enums/nodeGeometryContextualSources.js.map +1 -1
  251. package/Meshes/Node/Interfaces/nodeGeometryInstancingContext.d.ts +10 -0
  252. package/Meshes/Node/Interfaces/nodeGeometryInstancingContext.js +2 -0
  253. package/Meshes/Node/Interfaces/nodeGeometryInstancingContext.js.map +1 -0
  254. package/Meshes/Node/index.d.ts +1 -0
  255. package/Meshes/Node/index.js +1 -0
  256. package/Meshes/Node/index.js.map +1 -1
  257. package/Meshes/Node/nodeGeometry.js +2 -2
  258. package/Meshes/Node/nodeGeometry.js.map +1 -1
  259. package/Meshes/Node/nodeGeometryBlock.js +10 -6
  260. package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
  261. package/Meshes/Node/nodeGeometryBuildState.d.ts +41 -2
  262. package/Meshes/Node/nodeGeometryBuildState.js +82 -4
  263. package/Meshes/Node/nodeGeometryBuildState.js.map +1 -1
  264. package/Meshes/abstractMesh.js +4 -1
  265. package/Meshes/abstractMesh.js.map +1 -1
  266. package/Meshes/geometry.js +10 -10
  267. package/Meshes/geometry.js.map +1 -1
  268. package/Meshes/mesh.js +7 -5
  269. package/Meshes/mesh.js.map +1 -1
  270. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js +2 -1
  271. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js.map +1 -1
  272. package/Misc/dumpTools.js +3 -2
  273. package/Misc/dumpTools.js.map +1 -1
  274. package/Misc/equirectangularCapture.d.ts +39 -0
  275. package/Misc/equirectangularCapture.js +56 -0
  276. package/Misc/equirectangularCapture.js.map +1 -0
  277. package/Misc/index.d.ts +1 -0
  278. package/Misc/index.js +1 -0
  279. package/Misc/index.js.map +1 -1
  280. package/Physics/v2/IPhysicsEnginePlugin.d.ts +10 -0
  281. package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -1
  282. package/Physics/v2/Plugins/havokPlugin.d.ts +8 -1
  283. package/Physics/v2/Plugins/havokPlugin.js +34 -0
  284. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  285. package/Physics/v2/physicsConstraint.d.ts +11 -1
  286. package/Physics/v2/physicsConstraint.js +7 -0
  287. package/Physics/v2/physicsConstraint.js.map +1 -1
  288. package/Rendering/prePassRenderer.d.ts +6 -0
  289. package/Rendering/prePassRenderer.js +14 -0
  290. package/Rendering/prePassRenderer.js.map +1 -1
  291. package/Shaders/ShadersInclude/pbrDebug.js +3 -0
  292. package/Shaders/ShadersInclude/pbrDebug.js.map +1 -1
  293. package/Shaders/default.fragment.js +4 -0
  294. package/Shaders/default.fragment.js.map +1 -1
  295. package/Shaders/equirectangularPanorama.fragment.d.ts +5 -0
  296. package/Shaders/equirectangularPanorama.fragment.js +17 -0
  297. package/Shaders/equirectangularPanorama.fragment.js.map +1 -0
  298. package/Shaders/pbr.fragment.js +4 -0
  299. package/Shaders/pbr.fragment.js.map +1 -1
  300. package/package.json +1 -1
  301. package/FlowGraph/Blocks/Data/flowGraphBinaryOpBlocks.d.ts +0 -34
  302. package/FlowGraph/Blocks/Data/flowGraphBinaryOpBlocks.js +0 -29
  303. package/FlowGraph/Blocks/Data/flowGraphBinaryOpBlocks.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"engine.renderTarget.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Engines/WebGPU/Extensions/engine.renderTarget.ts"],"names":[],"mappings":"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","sourcesContent":["import { InternalTexture, InternalTextureSource } from \"../../../Materials/Textures/internalTexture\";\r\nimport type { RenderTargetCreationOptions, DepthTextureCreationOptions, TextureSize } from \"../../../Materials/Textures/textureCreationOptions\";\r\nimport type { Nullable } from \"../../../types\";\r\nimport { Constants } from \"../../constants\";\r\nimport type { RenderTargetWrapper } from \"../../renderTargetWrapper\";\r\nimport { WebGPUEngine } from \"../../webgpuEngine\";\r\nimport { WebGPURenderTargetWrapper } from \"../webgpuRenderTargetWrapper\";\r\n\r\nWebGPUEngine.prototype._createHardwareRenderTargetWrapper = function (isMulti: boolean, isCube: boolean, size: TextureSize): WebGPURenderTargetWrapper {\r\n const rtWrapper = new WebGPURenderTargetWrapper(isMulti, isCube, size, this);\r\n this._renderTargetWrapperCache.push(rtWrapper);\r\n return rtWrapper;\r\n};\r\n\r\nWebGPUEngine.prototype.createRenderTargetTexture = function (size: TextureSize, options: boolean | RenderTargetCreationOptions): WebGPURenderTargetWrapper {\r\n const rtWrapper = this._createHardwareRenderTargetWrapper(false, false, size) as WebGPURenderTargetWrapper;\r\n\r\n const fullOptions: RenderTargetCreationOptions = {};\r\n\r\n if (options !== undefined && typeof options === \"object\") {\r\n fullOptions.generateMipMaps = options.generateMipMaps;\r\n fullOptions.generateDepthBuffer = options.generateDepthBuffer === undefined ? true : options.generateDepthBuffer;\r\n fullOptions.generateStencilBuffer = fullOptions.generateDepthBuffer && options.generateStencilBuffer;\r\n fullOptions.samplingMode = options.samplingMode === undefined ? Constants.TEXTURE_TRILINEAR_SAMPLINGMODE : options.samplingMode;\r\n fullOptions.creationFlags = options.creationFlags ?? 0;\r\n fullOptions.noColorAttachment = !!options.noColorAttachment;\r\n fullOptions.samples = options.samples;\r\n fullOptions.label = options.label;\r\n } else {\r\n fullOptions.generateMipMaps = <boolean>options;\r\n fullOptions.generateDepthBuffer = true;\r\n fullOptions.generateStencilBuffer = false;\r\n fullOptions.samplingMode = Constants.TEXTURE_TRILINEAR_SAMPLINGMODE;\r\n fullOptions.creationFlags = 0;\r\n fullOptions.noColorAttachment = false;\r\n }\r\n\r\n const texture = fullOptions.noColorAttachment ? null : this._createInternalTexture(size, options, true, InternalTextureSource.RenderTarget);\r\n\r\n rtWrapper._samples = fullOptions.samples ?? 1;\r\n rtWrapper._generateDepthBuffer = fullOptions.generateDepthBuffer;\r\n rtWrapper._generateStencilBuffer = fullOptions.generateStencilBuffer ? true : false;\r\n\r\n rtWrapper.setTextures(texture);\r\n\r\n if (rtWrapper._generateDepthBuffer || rtWrapper._generateStencilBuffer) {\r\n rtWrapper.createDepthStencilTexture(\r\n 0,\r\n this._caps.textureFloatLinearFiltering &&\r\n (fullOptions.samplingMode === undefined ||\r\n fullOptions.samplingMode === Constants.TEXTURE_BILINEAR_SAMPLINGMODE ||\r\n fullOptions.samplingMode === Constants.TEXTURE_LINEAR_LINEAR ||\r\n fullOptions.samplingMode === Constants.TEXTURE_TRILINEAR_SAMPLINGMODE ||\r\n fullOptions.samplingMode === Constants.TEXTURE_LINEAR_LINEAR_MIPLINEAR ||\r\n fullOptions.samplingMode === Constants.TEXTURE_NEAREST_LINEAR_MIPNEAREST ||\r\n fullOptions.samplingMode === Constants.TEXTURE_NEAREST_LINEAR_MIPLINEAR ||\r\n fullOptions.samplingMode === Constants.TEXTURE_NEAREST_LINEAR ||\r\n fullOptions.samplingMode === Constants.TEXTURE_LINEAR_LINEAR_MIPNEAREST),\r\n rtWrapper._generateStencilBuffer,\r\n rtWrapper.samples,\r\n fullOptions.generateStencilBuffer ? Constants.TEXTUREFORMAT_DEPTH24_STENCIL8 : Constants.TEXTUREFORMAT_DEPTH32_FLOAT,\r\n fullOptions.label ? fullOptions.label + \"-DepthStencil\" : undefined\r\n );\r\n }\r\n\r\n if (texture) {\r\n if (options !== undefined && typeof options === \"object\" && options.createMipMaps && !fullOptions.generateMipMaps) {\r\n texture.generateMipMaps = true;\r\n }\r\n\r\n this._textureHelper.createGPUTextureForInternalTexture(texture, undefined, undefined, undefined, fullOptions.creationFlags);\r\n\r\n if (options !== undefined && typeof options === \"object\" && options.createMipMaps && !fullOptions.generateMipMaps) {\r\n texture.generateMipMaps = false;\r\n }\r\n }\r\n\r\n return rtWrapper;\r\n};\r\n\r\nWebGPUEngine.prototype._createDepthStencilTexture = function (size: TextureSize, options: DepthTextureCreationOptions): InternalTexture {\r\n const internalTexture = new InternalTexture(this, InternalTextureSource.DepthStencil);\r\n\r\n internalTexture.label = options.label;\r\n\r\n const internalOptions = {\r\n bilinearFiltering: false,\r\n comparisonFunction: 0,\r\n generateStencil: false,\r\n samples: 1,\r\n depthTextureFormat: options.generateStencil ? Constants.TEXTUREFORMAT_DEPTH24_STENCIL8 : Constants.TEXTUREFORMAT_DEPTH32_FLOAT,\r\n ...options,\r\n };\r\n\r\n internalTexture.format = internalOptions.depthTextureFormat;\r\n\r\n this._setupDepthStencilTexture(\r\n internalTexture,\r\n size,\r\n internalOptions.generateStencil,\r\n internalOptions.bilinearFiltering,\r\n internalOptions.comparisonFunction,\r\n internalOptions.samples\r\n );\r\n\r\n this._textureHelper.createGPUTextureForInternalTexture(internalTexture);\r\n\r\n this._internalTexturesCache.push(internalTexture);\r\n\r\n return internalTexture;\r\n};\r\n\r\nWebGPUEngine.prototype._setupDepthStencilTexture = function (\r\n internalTexture: InternalTexture,\r\n size: TextureSize,\r\n generateStencil: boolean,\r\n bilinearFiltering: boolean,\r\n comparisonFunction: number,\r\n samples = 1\r\n): void {\r\n const width = (<{ width: number; height: number; layers?: number }>size).width || <number>size;\r\n const height = (<{ width: number; height: number; layers?: number }>size).height || <number>size;\r\n const layers = (<{ width: number; height: number; layers?: number }>size).layers || 0;\r\n\r\n internalTexture.baseWidth = width;\r\n internalTexture.baseHeight = height;\r\n internalTexture.width = width;\r\n internalTexture.height = height;\r\n internalTexture.is2DArray = layers > 0;\r\n internalTexture.depth = layers;\r\n internalTexture.isReady = true;\r\n internalTexture.samples = samples;\r\n internalTexture.generateMipMaps = false;\r\n internalTexture.samplingMode = bilinearFiltering ? Constants.TEXTURE_BILINEAR_SAMPLINGMODE : Constants.TEXTURE_NEAREST_SAMPLINGMODE;\r\n internalTexture.type = Constants.TEXTURETYPE_FLOAT;\r\n internalTexture._comparisonFunction = comparisonFunction;\r\n internalTexture._cachedWrapU = Constants.TEXTURE_CLAMP_ADDRESSMODE;\r\n internalTexture._cachedWrapV = Constants.TEXTURE_CLAMP_ADDRESSMODE;\r\n};\r\n\r\nWebGPUEngine.prototype.updateRenderTargetTextureSampleCount = function (rtWrapper: Nullable<RenderTargetWrapper>, samples: number): number {\r\n if (!rtWrapper || !rtWrapper.texture || rtWrapper.samples === samples) {\r\n return samples;\r\n }\r\n\r\n samples = Math.min(samples, this.getCaps().maxMSAASamples);\r\n\r\n this._textureHelper.createMSAATexture(rtWrapper.texture, samples);\r\n\r\n if (rtWrapper._depthStencilTexture) {\r\n this._textureHelper.createMSAATexture(rtWrapper._depthStencilTexture, samples);\r\n rtWrapper._depthStencilTexture.samples = samples;\r\n }\r\n\r\n rtWrapper._samples = samples;\r\n rtWrapper.texture.samples = samples;\r\n\r\n return samples;\r\n};\r\n"]}
1
+ {"version":3,"file":"engine.renderTarget.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Engines/WebGPU/Extensions/engine.renderTarget.ts"],"names":[],"mappings":"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","sourcesContent":["import { InternalTexture, InternalTextureSource } from \"../../../Materials/Textures/internalTexture\";\r\nimport type { RenderTargetCreationOptions, DepthTextureCreationOptions, TextureSize } from \"../../../Materials/Textures/textureCreationOptions\";\r\nimport type { Nullable } from \"../../../types\";\r\nimport { Constants } from \"../../constants\";\r\nimport type { RenderTargetWrapper } from \"../../renderTargetWrapper\";\r\nimport { WebGPUEngine } from \"../../webgpuEngine\";\r\nimport { WebGPURenderTargetWrapper } from \"../webgpuRenderTargetWrapper\";\r\n\r\nWebGPUEngine.prototype._createHardwareRenderTargetWrapper = function (isMulti: boolean, isCube: boolean, size: TextureSize): WebGPURenderTargetWrapper {\r\n const rtWrapper = new WebGPURenderTargetWrapper(isMulti, isCube, size, this);\r\n this._renderTargetWrapperCache.push(rtWrapper);\r\n return rtWrapper;\r\n};\r\n\r\nWebGPUEngine.prototype.createRenderTargetTexture = function (size: TextureSize, options: boolean | RenderTargetCreationOptions): WebGPURenderTargetWrapper {\r\n const rtWrapper = this._createHardwareRenderTargetWrapper(false, false, size) as WebGPURenderTargetWrapper;\r\n\r\n const fullOptions: RenderTargetCreationOptions = {};\r\n\r\n if (options !== undefined && typeof options === \"object\") {\r\n fullOptions.generateMipMaps = options.generateMipMaps;\r\n fullOptions.generateDepthBuffer = options.generateDepthBuffer === undefined ? true : options.generateDepthBuffer;\r\n fullOptions.generateStencilBuffer = fullOptions.generateDepthBuffer && options.generateStencilBuffer;\r\n fullOptions.samplingMode = options.samplingMode === undefined ? Constants.TEXTURE_TRILINEAR_SAMPLINGMODE : options.samplingMode;\r\n fullOptions.creationFlags = options.creationFlags ?? 0;\r\n fullOptions.noColorAttachment = !!options.noColorAttachment;\r\n fullOptions.samples = options.samples;\r\n fullOptions.label = options.label;\r\n } else {\r\n fullOptions.generateMipMaps = <boolean>options;\r\n fullOptions.generateDepthBuffer = true;\r\n fullOptions.generateStencilBuffer = false;\r\n fullOptions.samplingMode = Constants.TEXTURE_TRILINEAR_SAMPLINGMODE;\r\n fullOptions.creationFlags = 0;\r\n fullOptions.noColorAttachment = false;\r\n }\r\n\r\n const texture = fullOptions.noColorAttachment ? null : this._createInternalTexture(size, options, true, InternalTextureSource.RenderTarget);\r\n\r\n rtWrapper.label = fullOptions.label ?? \"RenderTargetWrapper\";\r\n rtWrapper._samples = fullOptions.samples ?? 1;\r\n rtWrapper._generateDepthBuffer = fullOptions.generateDepthBuffer;\r\n rtWrapper._generateStencilBuffer = fullOptions.generateStencilBuffer ? true : false;\r\n\r\n rtWrapper.setTextures(texture);\r\n\r\n if (rtWrapper._generateDepthBuffer || rtWrapper._generateStencilBuffer) {\r\n rtWrapper.createDepthStencilTexture(\r\n 0,\r\n this._caps.textureFloatLinearFiltering &&\r\n (fullOptions.samplingMode === undefined ||\r\n fullOptions.samplingMode === Constants.TEXTURE_BILINEAR_SAMPLINGMODE ||\r\n fullOptions.samplingMode === Constants.TEXTURE_LINEAR_LINEAR ||\r\n fullOptions.samplingMode === Constants.TEXTURE_TRILINEAR_SAMPLINGMODE ||\r\n fullOptions.samplingMode === Constants.TEXTURE_LINEAR_LINEAR_MIPLINEAR ||\r\n fullOptions.samplingMode === Constants.TEXTURE_NEAREST_LINEAR_MIPNEAREST ||\r\n fullOptions.samplingMode === Constants.TEXTURE_NEAREST_LINEAR_MIPLINEAR ||\r\n fullOptions.samplingMode === Constants.TEXTURE_NEAREST_LINEAR ||\r\n fullOptions.samplingMode === Constants.TEXTURE_LINEAR_LINEAR_MIPNEAREST),\r\n rtWrapper._generateStencilBuffer,\r\n rtWrapper.samples,\r\n fullOptions.generateStencilBuffer ? Constants.TEXTUREFORMAT_DEPTH24_STENCIL8 : Constants.TEXTUREFORMAT_DEPTH32_FLOAT,\r\n fullOptions.label ? fullOptions.label + \"-DepthStencil\" : undefined\r\n );\r\n }\r\n\r\n if (texture) {\r\n if (options !== undefined && typeof options === \"object\" && options.createMipMaps && !fullOptions.generateMipMaps) {\r\n texture.generateMipMaps = true;\r\n }\r\n\r\n this._textureHelper.createGPUTextureForInternalTexture(texture, undefined, undefined, undefined, fullOptions.creationFlags);\r\n\r\n if (options !== undefined && typeof options === \"object\" && options.createMipMaps && !fullOptions.generateMipMaps) {\r\n texture.generateMipMaps = false;\r\n }\r\n }\r\n\r\n return rtWrapper;\r\n};\r\n\r\nWebGPUEngine.prototype._createDepthStencilTexture = function (size: TextureSize, options: DepthTextureCreationOptions): InternalTexture {\r\n const internalTexture = new InternalTexture(this, InternalTextureSource.DepthStencil);\r\n\r\n internalTexture.label = options.label;\r\n\r\n const internalOptions = {\r\n bilinearFiltering: false,\r\n comparisonFunction: 0,\r\n generateStencil: false,\r\n samples: 1,\r\n depthTextureFormat: options.generateStencil ? Constants.TEXTUREFORMAT_DEPTH24_STENCIL8 : Constants.TEXTUREFORMAT_DEPTH32_FLOAT,\r\n ...options,\r\n };\r\n\r\n internalTexture.format = internalOptions.depthTextureFormat;\r\n\r\n this._setupDepthStencilTexture(\r\n internalTexture,\r\n size,\r\n internalOptions.generateStencil,\r\n internalOptions.bilinearFiltering,\r\n internalOptions.comparisonFunction,\r\n internalOptions.samples\r\n );\r\n\r\n this._textureHelper.createGPUTextureForInternalTexture(internalTexture);\r\n\r\n this._internalTexturesCache.push(internalTexture);\r\n\r\n return internalTexture;\r\n};\r\n\r\nWebGPUEngine.prototype._setupDepthStencilTexture = function (\r\n internalTexture: InternalTexture,\r\n size: TextureSize,\r\n generateStencil: boolean,\r\n bilinearFiltering: boolean,\r\n comparisonFunction: number,\r\n samples = 1\r\n): void {\r\n const width = (<{ width: number; height: number; layers?: number }>size).width || <number>size;\r\n const height = (<{ width: number; height: number; layers?: number }>size).height || <number>size;\r\n const layers = (<{ width: number; height: number; layers?: number }>size).layers || 0;\r\n\r\n internalTexture.baseWidth = width;\r\n internalTexture.baseHeight = height;\r\n internalTexture.width = width;\r\n internalTexture.height = height;\r\n internalTexture.is2DArray = layers > 0;\r\n internalTexture.depth = layers;\r\n internalTexture.isReady = true;\r\n internalTexture.samples = samples;\r\n internalTexture.generateMipMaps = false;\r\n internalTexture.samplingMode = bilinearFiltering ? Constants.TEXTURE_BILINEAR_SAMPLINGMODE : Constants.TEXTURE_NEAREST_SAMPLINGMODE;\r\n internalTexture.type = Constants.TEXTURETYPE_FLOAT;\r\n internalTexture._comparisonFunction = comparisonFunction;\r\n internalTexture._cachedWrapU = Constants.TEXTURE_CLAMP_ADDRESSMODE;\r\n internalTexture._cachedWrapV = Constants.TEXTURE_CLAMP_ADDRESSMODE;\r\n};\r\n\r\nWebGPUEngine.prototype.updateRenderTargetTextureSampleCount = function (rtWrapper: Nullable<RenderTargetWrapper>, samples: number): number {\r\n if (!rtWrapper || !rtWrapper.texture || rtWrapper.samples === samples) {\r\n return samples;\r\n }\r\n\r\n samples = Math.min(samples, this.getCaps().maxMSAASamples);\r\n\r\n this._textureHelper.createMSAATexture(rtWrapper.texture, samples);\r\n\r\n if (rtWrapper._depthStencilTexture) {\r\n this._textureHelper.createMSAATexture(rtWrapper._depthStencilTexture, samples);\r\n rtWrapper._depthStencilTexture.samples = samples;\r\n }\r\n\r\n rtWrapper._samples = samples;\r\n rtWrapper.texture.samples = samples;\r\n\r\n return samples;\r\n};\r\n"]}
@@ -2,9 +2,11 @@ import { InternalTexture, InternalTextureSource } from "../../../Materials/Textu
2
2
 
3
3
  import { WebGPUEngine } from "../../webgpuEngine.js";
4
4
  WebGPUEngine.prototype.createRenderTargetCubeTexture = function (size, options) {
5
+ var _a;
5
6
  const rtWrapper = this._createHardwareRenderTargetWrapper(false, true, size);
6
7
  const fullOptions = Object.assign({ generateMipMaps: true, generateDepthBuffer: true, generateStencilBuffer: false, type: 0, samplingMode: 3, format: 5, samples: 1 }, options);
7
8
  fullOptions.generateStencilBuffer = fullOptions.generateDepthBuffer && fullOptions.generateStencilBuffer;
9
+ rtWrapper.label = (_a = fullOptions.label) !== null && _a !== void 0 ? _a : "RenderTargetWrapper";
8
10
  rtWrapper._generateDepthBuffer = fullOptions.generateDepthBuffer;
9
11
  rtWrapper._generateStencilBuffer = fullOptions.generateStencilBuffer;
10
12
  const texture = new InternalTexture(this, InternalTextureSource.RenderTarget);
@@ -1 +1 @@
1
- {"version":3,"file":"engine.renderTargetCube.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Engines/WebGPU/Extensions/engine.renderTargetCube.ts"],"names":[],"mappings":"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","sourcesContent":["import { InternalTexture, InternalTextureSource } from \"../../../Materials/Textures/internalTexture\";\r\nimport type { RenderTargetCreationOptions } from \"../../../Materials/Textures/textureCreationOptions\";\r\nimport { Constants } from \"../../constants\";\r\nimport type { RenderTargetWrapper } from \"../../renderTargetWrapper\";\r\nimport { WebGPUEngine } from \"../../webgpuEngine\";\r\n\r\nWebGPUEngine.prototype.createRenderTargetCubeTexture = function (size: number, options?: RenderTargetCreationOptions): RenderTargetWrapper {\r\n const rtWrapper = this._createHardwareRenderTargetWrapper(false, true, size);\r\n\r\n const fullOptions = {\r\n generateMipMaps: true,\r\n generateDepthBuffer: true,\r\n generateStencilBuffer: false,\r\n type: Constants.TEXTURETYPE_UNSIGNED_INT,\r\n samplingMode: Constants.TEXTURE_TRILINEAR_SAMPLINGMODE,\r\n format: Constants.TEXTUREFORMAT_RGBA,\r\n samples: 1,\r\n ...options,\r\n };\r\n fullOptions.generateStencilBuffer = fullOptions.generateDepthBuffer && fullOptions.generateStencilBuffer;\r\n\r\n rtWrapper._generateDepthBuffer = fullOptions.generateDepthBuffer;\r\n rtWrapper._generateStencilBuffer = fullOptions.generateStencilBuffer;\r\n\r\n const texture = new InternalTexture(this, InternalTextureSource.RenderTarget);\r\n\r\n texture.width = size;\r\n texture.height = size;\r\n texture.depth = 0;\r\n texture.isReady = true;\r\n texture.isCube = true;\r\n texture.samples = fullOptions.samples;\r\n texture.generateMipMaps = fullOptions.generateMipMaps;\r\n texture.samplingMode = fullOptions.samplingMode;\r\n texture.type = fullOptions.type;\r\n texture.format = fullOptions.format;\r\n\r\n this._internalTexturesCache.push(texture);\r\n rtWrapper.setTextures(texture);\r\n\r\n if (rtWrapper._generateDepthBuffer || rtWrapper._generateStencilBuffer) {\r\n rtWrapper.createDepthStencilTexture(\r\n 0,\r\n fullOptions.samplingMode === undefined ||\r\n fullOptions.samplingMode === Constants.TEXTURE_BILINEAR_SAMPLINGMODE ||\r\n fullOptions.samplingMode === Constants.TEXTURE_LINEAR_LINEAR ||\r\n fullOptions.samplingMode === Constants.TEXTURE_TRILINEAR_SAMPLINGMODE ||\r\n fullOptions.samplingMode === Constants.TEXTURE_LINEAR_LINEAR_MIPLINEAR ||\r\n fullOptions.samplingMode === Constants.TEXTURE_NEAREST_LINEAR_MIPNEAREST ||\r\n fullOptions.samplingMode === Constants.TEXTURE_NEAREST_LINEAR_MIPLINEAR ||\r\n fullOptions.samplingMode === Constants.TEXTURE_NEAREST_LINEAR ||\r\n fullOptions.samplingMode === Constants.TEXTURE_LINEAR_LINEAR_MIPNEAREST,\r\n rtWrapper._generateStencilBuffer,\r\n rtWrapper.samples\r\n );\r\n }\r\n\r\n if (options && options.createMipMaps && !fullOptions.generateMipMaps) {\r\n texture.generateMipMaps = true;\r\n }\r\n\r\n this._textureHelper.createGPUTextureForInternalTexture(texture);\r\n\r\n if (options && options.createMipMaps && !fullOptions.generateMipMaps) {\r\n texture.generateMipMaps = false;\r\n }\r\n\r\n return rtWrapper;\r\n};\r\n"]}
1
+ {"version":3,"file":"engine.renderTargetCube.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Engines/WebGPU/Extensions/engine.renderTargetCube.ts"],"names":[],"mappings":"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","sourcesContent":["import { InternalTexture, InternalTextureSource } from \"../../../Materials/Textures/internalTexture\";\r\nimport type { RenderTargetCreationOptions } from \"../../../Materials/Textures/textureCreationOptions\";\r\nimport { Constants } from \"../../constants\";\r\nimport type { RenderTargetWrapper } from \"../../renderTargetWrapper\";\r\nimport { WebGPUEngine } from \"../../webgpuEngine\";\r\n\r\nWebGPUEngine.prototype.createRenderTargetCubeTexture = function (size: number, options?: RenderTargetCreationOptions): RenderTargetWrapper {\r\n const rtWrapper = this._createHardwareRenderTargetWrapper(false, true, size);\r\n\r\n const fullOptions = {\r\n generateMipMaps: true,\r\n generateDepthBuffer: true,\r\n generateStencilBuffer: false,\r\n type: Constants.TEXTURETYPE_UNSIGNED_INT,\r\n samplingMode: Constants.TEXTURE_TRILINEAR_SAMPLINGMODE,\r\n format: Constants.TEXTUREFORMAT_RGBA,\r\n samples: 1,\r\n ...options,\r\n };\r\n fullOptions.generateStencilBuffer = fullOptions.generateDepthBuffer && fullOptions.generateStencilBuffer;\r\n\r\n rtWrapper.label = fullOptions.label ?? \"RenderTargetWrapper\";\r\n rtWrapper._generateDepthBuffer = fullOptions.generateDepthBuffer;\r\n rtWrapper._generateStencilBuffer = fullOptions.generateStencilBuffer;\r\n\r\n const texture = new InternalTexture(this, InternalTextureSource.RenderTarget);\r\n\r\n texture.width = size;\r\n texture.height = size;\r\n texture.depth = 0;\r\n texture.isReady = true;\r\n texture.isCube = true;\r\n texture.samples = fullOptions.samples;\r\n texture.generateMipMaps = fullOptions.generateMipMaps;\r\n texture.samplingMode = fullOptions.samplingMode;\r\n texture.type = fullOptions.type;\r\n texture.format = fullOptions.format;\r\n\r\n this._internalTexturesCache.push(texture);\r\n rtWrapper.setTextures(texture);\r\n\r\n if (rtWrapper._generateDepthBuffer || rtWrapper._generateStencilBuffer) {\r\n rtWrapper.createDepthStencilTexture(\r\n 0,\r\n fullOptions.samplingMode === undefined ||\r\n fullOptions.samplingMode === Constants.TEXTURE_BILINEAR_SAMPLINGMODE ||\r\n fullOptions.samplingMode === Constants.TEXTURE_LINEAR_LINEAR ||\r\n fullOptions.samplingMode === Constants.TEXTURE_TRILINEAR_SAMPLINGMODE ||\r\n fullOptions.samplingMode === Constants.TEXTURE_LINEAR_LINEAR_MIPLINEAR ||\r\n fullOptions.samplingMode === Constants.TEXTURE_NEAREST_LINEAR_MIPNEAREST ||\r\n fullOptions.samplingMode === Constants.TEXTURE_NEAREST_LINEAR_MIPLINEAR ||\r\n fullOptions.samplingMode === Constants.TEXTURE_NEAREST_LINEAR ||\r\n fullOptions.samplingMode === Constants.TEXTURE_LINEAR_LINEAR_MIPNEAREST,\r\n rtWrapper._generateStencilBuffer,\r\n rtWrapper.samples\r\n );\r\n }\r\n\r\n if (options && options.createMipMaps && !fullOptions.generateMipMaps) {\r\n texture.generateMipMaps = true;\r\n }\r\n\r\n this._textureHelper.createGPUTextureForInternalTexture(texture);\r\n\r\n if (options && options.createMipMaps && !fullOptions.generateMipMaps) {\r\n texture.generateMipMaps = false;\r\n }\r\n\r\n return rtWrapper;\r\n};\r\n"]}
@@ -74,6 +74,21 @@ export class WebGPUComputeContext {
74
74
  }
75
75
  break;
76
76
  }
77
+ case ComputeBindingType.ExternalTexture: {
78
+ const texture = object;
79
+ const externalTexture = texture.underlyingResource;
80
+ if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {
81
+ entries[indexInGroupEntries].resource = this._device.importExternalTexture({ source: externalTexture });
82
+ }
83
+ else {
84
+ binding.indexInGroupEntries = entries.length;
85
+ entries.push({
86
+ binding: index,
87
+ resource: this._device.importExternalTexture({ source: externalTexture }),
88
+ });
89
+ }
90
+ break;
91
+ }
77
92
  case ComputeBindingType.UniformBuffer:
78
93
  case ComputeBindingType.StorageBuffer: {
79
94
  const buffer = type === ComputeBindingType.UniformBuffer ? object : object;
@@ -1 +1 @@
1
- {"version":3,"file":"webgpuComputeContext.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuComputeContext.ts"],"names":[],"mappings":"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","sourcesContent":["import type { StorageBuffer } from \"../../Buffers/storageBuffer\";\r\nimport type { IComputeContext } from \"../../Compute/IComputeContext\";\r\nimport type { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport type { TextureSampler } from \"../../Materials/Textures/textureSampler\";\r\nimport type { UniformBuffer } from \"../../Materials/uniformBuffer\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport type { ComputeBindingList, ComputeBindingMapping } from \"../Extensions/engine.computeShader\";\r\nimport { ComputeBindingType } from \"../Extensions/engine.computeShader\";\r\nimport type { WebGPUCacheSampler } from \"./webgpuCacheSampler\";\r\nimport * as WebGPUConstants from \"./webgpuConstants\";\r\nimport type { WebGPUHardwareTexture } from \"./webgpuHardwareTexture\";\r\n\r\n/** @internal */\r\nexport class WebGPUComputeContext implements IComputeContext {\r\n private static _Counter = 0;\r\n\r\n public readonly uniqueId: number;\r\n\r\n private _device: GPUDevice;\r\n private _cacheSampler: WebGPUCacheSampler;\r\n private _bindGroups: GPUBindGroup[];\r\n private _bindGroupEntries: GPUBindGroupEntry[][];\r\n\r\n public getBindGroups(bindings: ComputeBindingList, computePipeline: GPUComputePipeline, bindingsMapping?: ComputeBindingMapping): GPUBindGroup[] {\r\n if (!bindingsMapping) {\r\n throw new Error(\"WebGPUComputeContext.getBindGroups: bindingsMapping is required until browsers support reflection for wgsl shaders!\");\r\n }\r\n if (this._bindGroups.length === 0) {\r\n const bindGroupEntriesExist = this._bindGroupEntries.length > 0;\r\n for (const key in bindings) {\r\n const binding = bindings[key],\r\n location = bindingsMapping[key],\r\n group = location.group,\r\n index = location.binding,\r\n type = binding.type,\r\n object = binding.object;\r\n let indexInGroupEntries = binding.indexInGroupEntries;\r\n\r\n let entries = this._bindGroupEntries[group];\r\n if (!entries) {\r\n entries = this._bindGroupEntries[group] = [];\r\n }\r\n\r\n switch (type) {\r\n case ComputeBindingType.Sampler: {\r\n const sampler = object as TextureSampler;\r\n if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {\r\n entries[indexInGroupEntries].resource = this._cacheSampler.getSampler(sampler);\r\n } else {\r\n binding.indexInGroupEntries = entries.length;\r\n entries.push({\r\n binding: index,\r\n resource: this._cacheSampler.getSampler(sampler),\r\n });\r\n }\r\n break;\r\n }\r\n\r\n case ComputeBindingType.Texture:\r\n case ComputeBindingType.TextureWithoutSampler: {\r\n const texture = object as BaseTexture;\r\n const hardwareTexture = texture._texture!._hardwareTexture as WebGPUHardwareTexture;\r\n if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {\r\n if (type === ComputeBindingType.Texture) {\r\n entries[indexInGroupEntries++].resource = this._cacheSampler.getSampler(texture._texture!);\r\n }\r\n entries[indexInGroupEntries].resource = hardwareTexture.view!;\r\n } else {\r\n binding.indexInGroupEntries = entries.length;\r\n if (type === ComputeBindingType.Texture) {\r\n entries.push({\r\n binding: index - 1,\r\n resource: this._cacheSampler.getSampler(texture._texture!),\r\n });\r\n }\r\n entries.push({\r\n binding: index,\r\n resource: hardwareTexture.view!,\r\n });\r\n }\r\n break;\r\n }\r\n\r\n case ComputeBindingType.StorageTexture: {\r\n const texture = object as BaseTexture;\r\n const hardwareTexture = texture._texture!._hardwareTexture as WebGPUHardwareTexture;\r\n if ((hardwareTexture.textureAdditionalUsages & WebGPUConstants.TextureUsage.StorageBinding) === 0) {\r\n Logger.Error(`computeDispatch: The texture (name=${texture.name}, uniqueId=${texture.uniqueId}) is not a storage texture!`, 50);\r\n }\r\n if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {\r\n entries[indexInGroupEntries].resource = hardwareTexture.viewForWriting!;\r\n } else {\r\n binding.indexInGroupEntries = entries.length;\r\n entries.push({\r\n binding: index,\r\n resource: hardwareTexture.viewForWriting!,\r\n });\r\n }\r\n break;\r\n }\r\n\r\n case ComputeBindingType.UniformBuffer:\r\n case ComputeBindingType.StorageBuffer: {\r\n const buffer = type === ComputeBindingType.UniformBuffer ? (object as UniformBuffer) : (object as StorageBuffer);\r\n const dataBuffer = buffer.getBuffer()!;\r\n const webgpuBuffer = dataBuffer.underlyingResource as GPUBuffer;\r\n if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {\r\n (entries[indexInGroupEntries].resource as GPUBufferBinding).buffer = webgpuBuffer;\r\n (entries[indexInGroupEntries].resource as GPUBufferBinding).size = dataBuffer.capacity;\r\n } else {\r\n binding.indexInGroupEntries = entries.length;\r\n entries.push({\r\n binding: index,\r\n resource: {\r\n buffer: webgpuBuffer,\r\n offset: 0,\r\n size: dataBuffer.capacity,\r\n },\r\n });\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < this._bindGroupEntries.length; ++i) {\r\n const entries = this._bindGroupEntries[i];\r\n if (!entries) {\r\n this._bindGroups[i] = undefined as any;\r\n continue;\r\n }\r\n this._bindGroups[i] = this._device.createBindGroup({\r\n layout: computePipeline.getBindGroupLayout(i),\r\n entries,\r\n });\r\n }\r\n\r\n this._bindGroups.length = this._bindGroupEntries.length;\r\n }\r\n\r\n return this._bindGroups;\r\n }\r\n\r\n constructor(device: GPUDevice, cacheSampler: WebGPUCacheSampler) {\r\n this._device = device;\r\n this._cacheSampler = cacheSampler;\r\n this.uniqueId = WebGPUComputeContext._Counter++;\r\n this._bindGroupEntries = [];\r\n this.clear();\r\n }\r\n\r\n public clear(): void {\r\n this._bindGroups = [];\r\n // Don't reset _bindGroupEntries if they have already been created, they are still ok even if we have to clear _bindGroups (the layout of the compute shader can't change once created)\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webgpuComputeContext.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuComputeContext.ts"],"names":[],"mappings":"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","sourcesContent":["import type { StorageBuffer } from \"../../Buffers/storageBuffer\";\r\nimport type { IComputeContext } from \"../../Compute/IComputeContext\";\r\nimport type { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport type { TextureSampler } from \"../../Materials/Textures/textureSampler\";\r\nimport type { UniformBuffer } from \"../../Materials/uniformBuffer\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport type { ComputeBindingList, ComputeBindingMapping } from \"../Extensions/engine.computeShader\";\r\nimport { ComputeBindingType } from \"../Extensions/engine.computeShader\";\r\nimport type { WebGPUCacheSampler } from \"./webgpuCacheSampler\";\r\nimport * as WebGPUConstants from \"./webgpuConstants\";\r\nimport type { WebGPUHardwareTexture } from \"./webgpuHardwareTexture\";\r\nimport type { ExternalTexture } from \"core/Materials/Textures/externalTexture\";\r\n\r\n/** @internal */\r\nexport class WebGPUComputeContext implements IComputeContext {\r\n private static _Counter = 0;\r\n\r\n public readonly uniqueId: number;\r\n\r\n private _device: GPUDevice;\r\n private _cacheSampler: WebGPUCacheSampler;\r\n private _bindGroups: GPUBindGroup[];\r\n private _bindGroupEntries: GPUBindGroupEntry[][];\r\n\r\n public getBindGroups(bindings: ComputeBindingList, computePipeline: GPUComputePipeline, bindingsMapping?: ComputeBindingMapping): GPUBindGroup[] {\r\n if (!bindingsMapping) {\r\n throw new Error(\"WebGPUComputeContext.getBindGroups: bindingsMapping is required until browsers support reflection for wgsl shaders!\");\r\n }\r\n if (this._bindGroups.length === 0) {\r\n const bindGroupEntriesExist = this._bindGroupEntries.length > 0;\r\n for (const key in bindings) {\r\n const binding = bindings[key],\r\n location = bindingsMapping[key],\r\n group = location.group,\r\n index = location.binding,\r\n type = binding.type,\r\n object = binding.object;\r\n let indexInGroupEntries = binding.indexInGroupEntries;\r\n\r\n let entries = this._bindGroupEntries[group];\r\n if (!entries) {\r\n entries = this._bindGroupEntries[group] = [];\r\n }\r\n\r\n switch (type) {\r\n case ComputeBindingType.Sampler: {\r\n const sampler = object as TextureSampler;\r\n if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {\r\n entries[indexInGroupEntries].resource = this._cacheSampler.getSampler(sampler);\r\n } else {\r\n binding.indexInGroupEntries = entries.length;\r\n entries.push({\r\n binding: index,\r\n resource: this._cacheSampler.getSampler(sampler),\r\n });\r\n }\r\n break;\r\n }\r\n\r\n case ComputeBindingType.Texture:\r\n case ComputeBindingType.TextureWithoutSampler: {\r\n const texture = object as BaseTexture;\r\n const hardwareTexture = texture._texture!._hardwareTexture as WebGPUHardwareTexture;\r\n if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {\r\n if (type === ComputeBindingType.Texture) {\r\n entries[indexInGroupEntries++].resource = this._cacheSampler.getSampler(texture._texture!);\r\n }\r\n entries[indexInGroupEntries].resource = hardwareTexture.view!;\r\n } else {\r\n binding.indexInGroupEntries = entries.length;\r\n if (type === ComputeBindingType.Texture) {\r\n entries.push({\r\n binding: index - 1,\r\n resource: this._cacheSampler.getSampler(texture._texture!),\r\n });\r\n }\r\n entries.push({\r\n binding: index,\r\n resource: hardwareTexture.view!,\r\n });\r\n }\r\n break;\r\n }\r\n\r\n case ComputeBindingType.StorageTexture: {\r\n const texture = object as BaseTexture;\r\n const hardwareTexture = texture._texture!._hardwareTexture as WebGPUHardwareTexture;\r\n if ((hardwareTexture.textureAdditionalUsages & WebGPUConstants.TextureUsage.StorageBinding) === 0) {\r\n Logger.Error(`computeDispatch: The texture (name=${texture.name}, uniqueId=${texture.uniqueId}) is not a storage texture!`, 50);\r\n }\r\n if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {\r\n entries[indexInGroupEntries].resource = hardwareTexture.viewForWriting!;\r\n } else {\r\n binding.indexInGroupEntries = entries.length;\r\n entries.push({\r\n binding: index,\r\n resource: hardwareTexture.viewForWriting!,\r\n });\r\n }\r\n break;\r\n }\r\n\r\n case ComputeBindingType.ExternalTexture: {\r\n const texture = object as ExternalTexture;\r\n const externalTexture = texture.underlyingResource;\r\n if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {\r\n entries[indexInGroupEntries].resource = this._device.importExternalTexture({ source: externalTexture });\r\n } else {\r\n binding.indexInGroupEntries = entries.length;\r\n entries.push({\r\n binding: index,\r\n resource: this._device.importExternalTexture({ source: externalTexture }),\r\n });\r\n }\r\n break;\r\n }\r\n\r\n case ComputeBindingType.UniformBuffer:\r\n case ComputeBindingType.StorageBuffer: {\r\n const buffer = type === ComputeBindingType.UniformBuffer ? (object as UniformBuffer) : (object as StorageBuffer);\r\n const dataBuffer = buffer.getBuffer()!;\r\n const webgpuBuffer = dataBuffer.underlyingResource as GPUBuffer;\r\n if (indexInGroupEntries !== undefined && bindGroupEntriesExist) {\r\n (entries[indexInGroupEntries].resource as GPUBufferBinding).buffer = webgpuBuffer;\r\n (entries[indexInGroupEntries].resource as GPUBufferBinding).size = dataBuffer.capacity;\r\n } else {\r\n binding.indexInGroupEntries = entries.length;\r\n entries.push({\r\n binding: index,\r\n resource: {\r\n buffer: webgpuBuffer,\r\n offset: 0,\r\n size: dataBuffer.capacity,\r\n },\r\n });\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < this._bindGroupEntries.length; ++i) {\r\n const entries = this._bindGroupEntries[i];\r\n if (!entries) {\r\n this._bindGroups[i] = undefined as any;\r\n continue;\r\n }\r\n this._bindGroups[i] = this._device.createBindGroup({\r\n layout: computePipeline.getBindGroupLayout(i),\r\n entries,\r\n });\r\n }\r\n\r\n this._bindGroups.length = this._bindGroupEntries.length;\r\n }\r\n\r\n return this._bindGroups;\r\n }\r\n\r\n constructor(device: GPUDevice, cacheSampler: WebGPUCacheSampler) {\r\n this._device = device;\r\n this._cacheSampler = cacheSampler;\r\n this.uniqueId = WebGPUComputeContext._Counter++;\r\n this._bindGroupEntries = [];\r\n this.clear();\r\n }\r\n\r\n public clear(): void {\r\n this._bindGroups = [];\r\n // Don't reset _bindGroupEntries if they have already been created, they are still ok even if we have to clear _bindGroups (the layout of the compute shader can't change once created)\r\n }\r\n}\r\n"]}
@@ -11,9 +11,11 @@ export declare class WebGPUOcclusionQuery {
11
11
  private _availableIndices;
12
12
  private _lastBuffer;
13
13
  private _frameLastBuffer;
14
+ private _frameQuerySetIsDirty;
15
+ private _queryFrameId;
14
16
  get querySet(): GPUQuerySet;
15
17
  get hasQueries(): boolean;
16
- get canBeginQuery(): boolean;
18
+ canBeginQuery(index: number): boolean;
17
19
  constructor(engine: WebGPUEngine, device: GPUDevice, bufferManager: WebGPUBufferManager, startCount?: number, incrementCount?: number);
18
20
  createQuery(): number;
19
21
  deleteQuery(index: number): void;
@@ -8,20 +8,31 @@ export class WebGPUOcclusionQuery {
8
8
  get hasQueries() {
9
9
  return this._currentTotalIndices !== this._availableIndices.length;
10
10
  }
11
- get canBeginQuery() {
11
+ canBeginQuery(index) {
12
+ if (this._frameQuerySetIsDirty === this._engine.frameId || this._queryFrameId[index] === this._engine.frameId) {
13
+ return false;
14
+ }
15
+ let canBegin = false;
12
16
  const passIndex = this._engine._getCurrentRenderPassIndex();
13
17
  switch (passIndex) {
14
18
  case 0: {
15
- return this._engine._mainRenderPassWrapper.renderPassDescriptor.occlusionQuerySet !== undefined;
19
+ canBegin = this._engine._mainRenderPassWrapper.renderPassDescriptor.occlusionQuerySet !== undefined;
20
+ break;
16
21
  }
17
22
  case 1: {
18
- return this._engine._rttRenderPassWrapper.renderPassDescriptor.occlusionQuerySet !== undefined;
23
+ canBegin = this._engine._rttRenderPassWrapper.renderPassDescriptor.occlusionQuerySet !== undefined;
24
+ break;
19
25
  }
20
26
  }
21
- return false;
27
+ if (canBegin) {
28
+ this._queryFrameId[index] = this._engine.frameId;
29
+ }
30
+ return canBegin;
22
31
  }
23
32
  constructor(engine, device, bufferManager, startCount = 50, incrementCount = 100) {
24
33
  this._availableIndices = [];
34
+ this._frameQuerySetIsDirty = -1;
35
+ this._queryFrameId = [];
25
36
  this._engine = engine;
26
37
  this._device = device;
27
38
  this._bufferManager = bufferManager;
@@ -39,7 +50,7 @@ export class WebGPUOcclusionQuery {
39
50
  return index;
40
51
  }
41
52
  deleteQuery(index) {
42
- this._availableIndices[this._availableIndices.length - 1] = index;
53
+ this._availableIndices[this._availableIndices.length] = index;
43
54
  }
44
55
  isQueryResultAvailable(index) {
45
56
  this._retrieveQueryBuffer();
@@ -67,7 +78,8 @@ export class WebGPUOcclusionQuery {
67
78
  this._availableIndices.push(this._currentTotalIndices + i);
68
79
  }
69
80
  this._currentTotalIndices += numIndices;
70
- this._querySet = new WebGPUQuerySet(this._currentTotalIndices, WebGPUConstants.QueryType.Occlusion, this._device, this._bufferManager, false);
81
+ this._querySet = new WebGPUQuerySet(this._currentTotalIndices, WebGPUConstants.QueryType.Occlusion, this._device, this._bufferManager, false, "QuerySet_OcclusionQuery_count_" + this._currentTotalIndices);
82
+ this._frameQuerySetIsDirty = this._engine.frameId;
71
83
  }
72
84
  _delayQuerySetDispose() {
73
85
  const querySet = this._querySet;
@@ -1 +1 @@
1
- {"version":3,"file":"webgpuOcclusionQuery.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuOcclusionQuery.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,eAAe,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,gBAAgB;AAChB,MAAM,OAAO,oBAAoB;IAY7B,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;IACnC,CAAC;IAED,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,oBAAoB,KAAK,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;IACvE,CAAC;IAED,IAAW,aAAa;QACpB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,0BAA0B,EAAE,CAAC;QAC5D,QAAQ,SAAS,EAAE;YACf,KAAK,CAAC,CAAC,CAAC;gBACJ,OAAO,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,oBAAqB,CAAC,iBAAiB,KAAK,SAAS,CAAC;aACpG;YACD,KAAK,CAAC,CAAC,CAAC;gBACJ,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,oBAAqB,CAAC,iBAAiB,KAAK,SAAS,CAAC;aACnG;SACJ;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,YAAY,MAAoB,EAAE,MAAiB,EAAE,aAAkC,EAAE,UAAU,GAAG,EAAE,EAAE,cAAc,GAAG,GAAG;QA1BtH,sBAAiB,GAAa,EAAE,CAAC;QA2BrC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QAEpC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QAEtC,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAEM,WAAW;QACd,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE;YACrC,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC9B;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;QAEhC,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,WAAW,CAAC,KAAa;QAC5B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;IACtE,CAAC;IAEM,sBAAsB,CAAC,KAAa;QACvC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IACjE,CAAC;IAEM,cAAc,CAAC,KAAa;;QAC/B,OAAO,MAAM,CAAC,MAAA,MAAA,IAAI,CAAC,WAAW,0CAAG,KAAK,CAAC,mCAAI,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IAEO,oBAAoB;QACxB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YACpE,OAAO;SACV;QAED,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YAChD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YAC7C,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE;gBACzE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;YACnC,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IAEO,mBAAmB,CAAC,UAAmB;QAC3C,UAAU,GAAG,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,IAAI,CAAC,eAAe,CAAC;QAEhD,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,EAAE,CAAC,EAAE;YACjC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC,CAAC;SAC9D;QAED,IAAI,CAAC,oBAAoB,IAAI,UAAU,CAAC;QACxC,IAAI,CAAC,SAAS,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,oBAAoB,EAAE,eAAe,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IAClJ,CAAC;IAEO,qBAAqB;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,QAAQ,EAAE;YACV,6FAA6F;YAC7F,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;SAC5C;IACL,CAAC;IAEM,OAAO;;QACV,MAAA,IAAI,CAAC,SAAS,0CAAE,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;IACtC,CAAC;CACJ","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport type { WebGPUEngine } from \"../webgpuEngine\";\r\nimport type { WebGPUBufferManager } from \"./webgpuBufferManager\";\r\nimport * as WebGPUConstants from \"./webgpuConstants\";\r\nimport { WebGPUQuerySet } from \"./webgpuQuerySet\";\r\n\r\n/** @internal */\r\nexport class WebGPUOcclusionQuery {\r\n private _engine: WebGPUEngine;\r\n private _device: GPUDevice;\r\n private _bufferManager: WebGPUBufferManager;\r\n\r\n private _currentTotalIndices: number;\r\n private _countIncrement: number;\r\n private _querySet: WebGPUQuerySet;\r\n private _availableIndices: number[] = [];\r\n private _lastBuffer: Nullable<BigUint64Array>;\r\n private _frameLastBuffer: number;\r\n\r\n public get querySet(): GPUQuerySet {\r\n return this._querySet.querySet;\r\n }\r\n\r\n public get hasQueries(): boolean {\r\n return this._currentTotalIndices !== this._availableIndices.length;\r\n }\r\n\r\n public get canBeginQuery(): boolean {\r\n const passIndex = this._engine._getCurrentRenderPassIndex();\r\n switch (passIndex) {\r\n case 0: {\r\n return this._engine._mainRenderPassWrapper.renderPassDescriptor!.occlusionQuerySet !== undefined;\r\n }\r\n case 1: {\r\n return this._engine._rttRenderPassWrapper.renderPassDescriptor!.occlusionQuerySet !== undefined;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n constructor(engine: WebGPUEngine, device: GPUDevice, bufferManager: WebGPUBufferManager, startCount = 50, incrementCount = 100) {\r\n this._engine = engine;\r\n this._device = device;\r\n this._bufferManager = bufferManager;\r\n\r\n this._frameLastBuffer = -1;\r\n this._currentTotalIndices = 0;\r\n this._countIncrement = incrementCount;\r\n\r\n this._allocateNewIndices(startCount);\r\n }\r\n\r\n public createQuery(): number {\r\n if (this._availableIndices.length === 0) {\r\n this._allocateNewIndices();\r\n }\r\n\r\n const index = this._availableIndices[this._availableIndices.length - 1];\r\n this._availableIndices.length--;\r\n\r\n return index;\r\n }\r\n\r\n public deleteQuery(index: number): void {\r\n this._availableIndices[this._availableIndices.length - 1] = index;\r\n }\r\n\r\n public isQueryResultAvailable(index: number): boolean {\r\n this._retrieveQueryBuffer();\r\n\r\n return !!this._lastBuffer && index < this._lastBuffer.length;\r\n }\r\n\r\n public getQueryResult(index: number): number {\r\n return Number(this._lastBuffer?.[index] ?? -1);\r\n }\r\n\r\n private _retrieveQueryBuffer(): void {\r\n if (this._lastBuffer && this._frameLastBuffer === this._engine.frameId) {\r\n return;\r\n }\r\n\r\n if (this._frameLastBuffer !== this._engine.frameId) {\r\n this._frameLastBuffer = this._engine.frameId;\r\n this._querySet.readValues(0, this._currentTotalIndices).then((arrayBuffer) => {\r\n this._lastBuffer = arrayBuffer;\r\n });\r\n }\r\n }\r\n\r\n private _allocateNewIndices(numIndices?: number): void {\r\n numIndices = numIndices ?? this._countIncrement;\r\n\r\n this._delayQuerySetDispose();\r\n\r\n for (let i = 0; i < numIndices; ++i) {\r\n this._availableIndices.push(this._currentTotalIndices + i);\r\n }\r\n\r\n this._currentTotalIndices += numIndices;\r\n this._querySet = new WebGPUQuerySet(this._currentTotalIndices, WebGPUConstants.QueryType.Occlusion, this._device, this._bufferManager, false);\r\n }\r\n\r\n private _delayQuerySetDispose(): void {\r\n const querySet = this._querySet;\r\n if (querySet) {\r\n // Wait a bit before disposing of the queryset, in case some queries are still running for it\r\n setTimeout(() => querySet.dispose, 1000);\r\n }\r\n }\r\n\r\n public dispose(): void {\r\n this._querySet?.dispose();\r\n this._availableIndices.length = 0;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webgpuOcclusionQuery.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuOcclusionQuery.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport type { WebGPUEngine } from \"../webgpuEngine\";\r\nimport type { WebGPUBufferManager } from \"./webgpuBufferManager\";\r\nimport * as WebGPUConstants from \"./webgpuConstants\";\r\nimport { WebGPUQuerySet } from \"./webgpuQuerySet\";\r\n\r\n/** @internal */\r\nexport class WebGPUOcclusionQuery {\r\n private _engine: WebGPUEngine;\r\n private _device: GPUDevice;\r\n private _bufferManager: WebGPUBufferManager;\r\n\r\n private _currentTotalIndices: number;\r\n private _countIncrement: number;\r\n private _querySet: WebGPUQuerySet;\r\n private _availableIndices: number[] = [];\r\n private _lastBuffer: Nullable<BigUint64Array>;\r\n private _frameLastBuffer: number;\r\n private _frameQuerySetIsDirty = -1;\r\n private _queryFrameId: number[] = [];\r\n\r\n public get querySet(): GPUQuerySet {\r\n return this._querySet.querySet;\r\n }\r\n\r\n public get hasQueries(): boolean {\r\n return this._currentTotalIndices !== this._availableIndices.length;\r\n }\r\n\r\n public canBeginQuery(index: number): boolean {\r\n if (this._frameQuerySetIsDirty === this._engine.frameId || this._queryFrameId[index] === this._engine.frameId) {\r\n return false;\r\n }\r\n\r\n let canBegin = false;\r\n\r\n const passIndex = this._engine._getCurrentRenderPassIndex();\r\n switch (passIndex) {\r\n case 0: {\r\n canBegin = this._engine._mainRenderPassWrapper.renderPassDescriptor!.occlusionQuerySet !== undefined;\r\n break;\r\n }\r\n case 1: {\r\n canBegin = this._engine._rttRenderPassWrapper.renderPassDescriptor!.occlusionQuerySet !== undefined;\r\n break;\r\n }\r\n }\r\n\r\n if (canBegin) {\r\n this._queryFrameId[index] = this._engine.frameId;\r\n }\r\n\r\n return canBegin;\r\n }\r\n\r\n constructor(engine: WebGPUEngine, device: GPUDevice, bufferManager: WebGPUBufferManager, startCount = 50, incrementCount = 100) {\r\n this._engine = engine;\r\n this._device = device;\r\n this._bufferManager = bufferManager;\r\n\r\n this._frameLastBuffer = -1;\r\n this._currentTotalIndices = 0;\r\n this._countIncrement = incrementCount;\r\n\r\n this._allocateNewIndices(startCount);\r\n }\r\n\r\n public createQuery(): number {\r\n if (this._availableIndices.length === 0) {\r\n this._allocateNewIndices();\r\n }\r\n\r\n const index = this._availableIndices[this._availableIndices.length - 1];\r\n this._availableIndices.length--;\r\n\r\n return index;\r\n }\r\n\r\n public deleteQuery(index: number): void {\r\n this._availableIndices[this._availableIndices.length] = index;\r\n }\r\n\r\n public isQueryResultAvailable(index: number): boolean {\r\n this._retrieveQueryBuffer();\r\n\r\n return !!this._lastBuffer && index < this._lastBuffer.length;\r\n }\r\n\r\n public getQueryResult(index: number): number {\r\n return Number(this._lastBuffer?.[index] ?? -1);\r\n }\r\n\r\n private _retrieveQueryBuffer(): void {\r\n if (this._lastBuffer && this._frameLastBuffer === this._engine.frameId) {\r\n return;\r\n }\r\n\r\n if (this._frameLastBuffer !== this._engine.frameId) {\r\n this._frameLastBuffer = this._engine.frameId;\r\n this._querySet.readValues(0, this._currentTotalIndices).then((arrayBuffer) => {\r\n this._lastBuffer = arrayBuffer;\r\n });\r\n }\r\n }\r\n\r\n private _allocateNewIndices(numIndices?: number): void {\r\n numIndices = numIndices ?? this._countIncrement;\r\n\r\n this._delayQuerySetDispose();\r\n\r\n for (let i = 0; i < numIndices; ++i) {\r\n this._availableIndices.push(this._currentTotalIndices + i);\r\n }\r\n\r\n this._currentTotalIndices += numIndices;\r\n this._querySet = new WebGPUQuerySet(\r\n this._currentTotalIndices,\r\n WebGPUConstants.QueryType.Occlusion,\r\n this._device,\r\n this._bufferManager,\r\n false,\r\n \"QuerySet_OcclusionQuery_count_\" + this._currentTotalIndices\r\n );\r\n\r\n this._frameQuerySetIsDirty = this._engine.frameId;\r\n }\r\n\r\n private _delayQuerySetDispose(): void {\r\n const querySet = this._querySet;\r\n if (querySet) {\r\n // Wait a bit before disposing of the queryset, in case some queries are still running for it\r\n setTimeout(() => querySet.dispose, 1000);\r\n }\r\n }\r\n\r\n public dispose(): void {\r\n this._querySet?.dispose();\r\n this._availableIndices.length = 0;\r\n }\r\n}\r\n"]}
@@ -10,7 +10,7 @@ export declare class WebGPUQuerySet {
10
10
  private _queryBuffer;
11
11
  private _dstBuffers;
12
12
  get querySet(): GPUQuerySet;
13
- constructor(count: number, type: QueryType, device: GPUDevice, bufferManager: WebGPUBufferManager, canUseMultipleBuffers?: boolean);
13
+ constructor(count: number, type: QueryType, device: GPUDevice, bufferManager: WebGPUBufferManager, canUseMultipleBuffers?: boolean, label?: string);
14
14
  private _getBuffer;
15
15
  readValues(firstQuery?: number, queryCount?: number): Promise<BigUint64Array | null>;
16
16
  readValue(firstQuery?: number): Promise<number | null>;
@@ -4,13 +4,14 @@ export class WebGPUQuerySet {
4
4
  get querySet() {
5
5
  return this._querySet;
6
6
  }
7
- constructor(count, type, device, bufferManager, canUseMultipleBuffers = true) {
7
+ constructor(count, type, device, bufferManager, canUseMultipleBuffers = true, label) {
8
8
  this._dstBuffers = [];
9
9
  this._device = device;
10
10
  this._bufferManager = bufferManager;
11
11
  this._count = count;
12
12
  this._canUseMultipleBuffers = canUseMultipleBuffers;
13
13
  this._querySet = device.createQuerySet({
14
+ label,
14
15
  type,
15
16
  count,
16
17
  });
@@ -1 +1 @@
1
- {"version":3,"file":"webgpuQuerySet.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuQuerySet.ts"],"names":[],"mappings":"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","sourcesContent":["import type { WebGPUBufferManager } from \"./webgpuBufferManager\";\r\nimport * as WebGPUConstants from \"./webgpuConstants\";\r\nimport type { QueryType } from \"./webgpuConstants\";\r\n\r\n/** @internal */\r\nexport class WebGPUQuerySet {\r\n private _device: GPUDevice;\r\n private _bufferManager: WebGPUBufferManager;\r\n\r\n private _count: number;\r\n private _canUseMultipleBuffers: boolean;\r\n private _querySet: GPUQuerySet;\r\n private _queryBuffer: GPUBuffer;\r\n private _dstBuffers: GPUBuffer[] = [];\r\n\r\n public get querySet(): GPUQuerySet {\r\n return this._querySet;\r\n }\r\n\r\n constructor(count: number, type: QueryType, device: GPUDevice, bufferManager: WebGPUBufferManager, canUseMultipleBuffers = true) {\r\n this._device = device;\r\n this._bufferManager = bufferManager;\r\n this._count = count;\r\n this._canUseMultipleBuffers = canUseMultipleBuffers;\r\n\r\n this._querySet = device.createQuerySet({\r\n type,\r\n count,\r\n });\r\n\r\n this._queryBuffer = bufferManager.createRawBuffer(8 * count, WebGPUConstants.BufferUsage.QueryResolve | WebGPUConstants.BufferUsage.CopySrc);\r\n\r\n if (!canUseMultipleBuffers) {\r\n this._dstBuffers.push(this._bufferManager.createRawBuffer(8 * this._count, WebGPUConstants.BufferUsage.MapRead | WebGPUConstants.BufferUsage.CopyDst));\r\n }\r\n }\r\n\r\n private _getBuffer(firstQuery: number, queryCount: number): GPUBuffer | null {\r\n if (!this._canUseMultipleBuffers && this._dstBuffers.length === 0) {\r\n return null;\r\n }\r\n\r\n const encoderResult = this._device.createCommandEncoder();\r\n\r\n let buffer: GPUBuffer;\r\n if (this._dstBuffers.length === 0) {\r\n buffer = this._bufferManager.createRawBuffer(8 * this._count, WebGPUConstants.BufferUsage.MapRead | WebGPUConstants.BufferUsage.CopyDst);\r\n } else {\r\n buffer = this._dstBuffers[this._dstBuffers.length - 1];\r\n this._dstBuffers.length--;\r\n }\r\n\r\n encoderResult.resolveQuerySet(this._querySet, firstQuery, queryCount, this._queryBuffer, 0);\r\n encoderResult.copyBufferToBuffer(this._queryBuffer, 0, buffer, 0, 8 * queryCount);\r\n\r\n this._device.queue.submit([encoderResult.finish()]);\r\n\r\n return buffer;\r\n }\r\n\r\n public async readValues(firstQuery = 0, queryCount = 1): Promise<BigUint64Array | null> {\r\n const buffer = this._getBuffer(firstQuery, queryCount);\r\n if (buffer === null) {\r\n return null;\r\n }\r\n\r\n await buffer.mapAsync(WebGPUConstants.MapMode.Read);\r\n\r\n const arrayBuf = new BigUint64Array(buffer.getMappedRange()).slice();\r\n\r\n buffer.unmap();\r\n\r\n this._dstBuffers[this._dstBuffers.length] = buffer;\r\n\r\n return arrayBuf;\r\n }\r\n\r\n public async readValue(firstQuery = 0): Promise<number | null> {\r\n const buffer = this._getBuffer(firstQuery, 1);\r\n if (buffer === null) {\r\n return null;\r\n }\r\n\r\n await buffer.mapAsync(WebGPUConstants.MapMode.Read);\r\n\r\n const arrayBuf = new BigUint64Array(buffer.getMappedRange());\r\n const value = Number(arrayBuf[0]);\r\n\r\n buffer.unmap();\r\n\r\n this._dstBuffers[this._dstBuffers.length] = buffer;\r\n\r\n return value;\r\n }\r\n\r\n public async readTwoValuesAndSubtract(firstQuery = 0): Promise<number | null> {\r\n const buffer = this._getBuffer(firstQuery, 2);\r\n if (buffer === null) {\r\n return null;\r\n }\r\n\r\n await buffer.mapAsync(WebGPUConstants.MapMode.Read);\r\n\r\n const arrayBuf = new BigUint64Array(buffer.getMappedRange());\r\n const value = Number(arrayBuf[1] - arrayBuf[0]);\r\n\r\n buffer.unmap();\r\n\r\n this._dstBuffers[this._dstBuffers.length] = buffer;\r\n\r\n return value;\r\n }\r\n\r\n public dispose() {\r\n this._querySet.destroy();\r\n this._bufferManager.releaseBuffer(this._queryBuffer);\r\n for (let i = 0; i < this._dstBuffers.length; ++i) {\r\n this._bufferManager.releaseBuffer(this._dstBuffers[i]);\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webgpuQuerySet.js","sourceRoot":"","sources":["../../../../../dev/core/src/Engines/WebGPU/webgpuQuerySet.ts"],"names":[],"mappings":"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","sourcesContent":["import type { WebGPUBufferManager } from \"./webgpuBufferManager\";\r\nimport * as WebGPUConstants from \"./webgpuConstants\";\r\nimport type { QueryType } from \"./webgpuConstants\";\r\n\r\n/** @internal */\r\nexport class WebGPUQuerySet {\r\n private _device: GPUDevice;\r\n private _bufferManager: WebGPUBufferManager;\r\n\r\n private _count: number;\r\n private _canUseMultipleBuffers: boolean;\r\n private _querySet: GPUQuerySet;\r\n private _queryBuffer: GPUBuffer;\r\n private _dstBuffers: GPUBuffer[] = [];\r\n\r\n public get querySet(): GPUQuerySet {\r\n return this._querySet;\r\n }\r\n\r\n constructor(count: number, type: QueryType, device: GPUDevice, bufferManager: WebGPUBufferManager, canUseMultipleBuffers = true, label?: string) {\r\n this._device = device;\r\n this._bufferManager = bufferManager;\r\n this._count = count;\r\n this._canUseMultipleBuffers = canUseMultipleBuffers;\r\n\r\n this._querySet = device.createQuerySet({\r\n label,\r\n type,\r\n count,\r\n });\r\n\r\n this._queryBuffer = bufferManager.createRawBuffer(8 * count, WebGPUConstants.BufferUsage.QueryResolve | WebGPUConstants.BufferUsage.CopySrc);\r\n\r\n if (!canUseMultipleBuffers) {\r\n this._dstBuffers.push(this._bufferManager.createRawBuffer(8 * this._count, WebGPUConstants.BufferUsage.MapRead | WebGPUConstants.BufferUsage.CopyDst));\r\n }\r\n }\r\n\r\n private _getBuffer(firstQuery: number, queryCount: number): GPUBuffer | null {\r\n if (!this._canUseMultipleBuffers && this._dstBuffers.length === 0) {\r\n return null;\r\n }\r\n\r\n const encoderResult = this._device.createCommandEncoder();\r\n\r\n let buffer: GPUBuffer;\r\n if (this._dstBuffers.length === 0) {\r\n buffer = this._bufferManager.createRawBuffer(8 * this._count, WebGPUConstants.BufferUsage.MapRead | WebGPUConstants.BufferUsage.CopyDst);\r\n } else {\r\n buffer = this._dstBuffers[this._dstBuffers.length - 1];\r\n this._dstBuffers.length--;\r\n }\r\n\r\n encoderResult.resolveQuerySet(this._querySet, firstQuery, queryCount, this._queryBuffer, 0);\r\n encoderResult.copyBufferToBuffer(this._queryBuffer, 0, buffer, 0, 8 * queryCount);\r\n\r\n this._device.queue.submit([encoderResult.finish()]);\r\n\r\n return buffer;\r\n }\r\n\r\n public async readValues(firstQuery = 0, queryCount = 1): Promise<BigUint64Array | null> {\r\n const buffer = this._getBuffer(firstQuery, queryCount);\r\n if (buffer === null) {\r\n return null;\r\n }\r\n\r\n await buffer.mapAsync(WebGPUConstants.MapMode.Read);\r\n\r\n const arrayBuf = new BigUint64Array(buffer.getMappedRange()).slice();\r\n\r\n buffer.unmap();\r\n\r\n this._dstBuffers[this._dstBuffers.length] = buffer;\r\n\r\n return arrayBuf;\r\n }\r\n\r\n public async readValue(firstQuery = 0): Promise<number | null> {\r\n const buffer = this._getBuffer(firstQuery, 1);\r\n if (buffer === null) {\r\n return null;\r\n }\r\n\r\n await buffer.mapAsync(WebGPUConstants.MapMode.Read);\r\n\r\n const arrayBuf = new BigUint64Array(buffer.getMappedRange());\r\n const value = Number(arrayBuf[0]);\r\n\r\n buffer.unmap();\r\n\r\n this._dstBuffers[this._dstBuffers.length] = buffer;\r\n\r\n return value;\r\n }\r\n\r\n public async readTwoValuesAndSubtract(firstQuery = 0): Promise<number | null> {\r\n const buffer = this._getBuffer(firstQuery, 2);\r\n if (buffer === null) {\r\n return null;\r\n }\r\n\r\n await buffer.mapAsync(WebGPUConstants.MapMode.Read);\r\n\r\n const arrayBuf = new BigUint64Array(buffer.getMappedRange());\r\n const value = Number(arrayBuf[1] - arrayBuf[0]);\r\n\r\n buffer.unmap();\r\n\r\n this._dstBuffers[this._dstBuffers.length] = buffer;\r\n\r\n return value;\r\n }\r\n\r\n public dispose() {\r\n this._querySet.destroy();\r\n this._bufferManager.releaseBuffer(this._queryBuffer);\r\n for (let i = 0; i < this._dstBuffers.length; ++i) {\r\n this._bufferManager.releaseBuffer(this._dstBuffers[i]);\r\n }\r\n }\r\n}\r\n"]}
@@ -34,6 +34,10 @@ export declare class RenderTargetWrapper {
34
34
  _depthStencilTexture: Nullable<InternalTexture>;
35
35
  /** @internal */
36
36
  _depthStencilTextureWithStencil: boolean;
37
+ /**
38
+ * Gets or sets the label of the render target wrapper (optional, for debugging purpose)
39
+ */
40
+ label?: string;
37
41
  /**
38
42
  * Gets the depth/stencil texture (if created by a createDepthStencilTexture() call)
39
43
  */
@@ -104,8 +108,9 @@ export declare class RenderTargetWrapper {
104
108
  * @param isCube true if the wrapper should render to a cube texture
105
109
  * @param size size of the render target (width/height/layers)
106
110
  * @param engine engine used to create the render target
111
+ * @param label defines the label to use for the wrapper (for debugging purpose only)
107
112
  */
108
- constructor(isMulti: boolean, isCube: boolean, size: TextureSize, engine: ThinEngine);
113
+ constructor(isMulti: boolean, isCube: boolean, size: TextureSize, engine: ThinEngine, label?: string);
109
114
  /**
110
115
  * Sets the render target texture(s)
111
116
  * @param textures texture(s) to set
@@ -112,8 +112,9 @@ export class RenderTargetWrapper {
112
112
  * @param isCube true if the wrapper should render to a cube texture
113
113
  * @param size size of the render target (width/height/layers)
114
114
  * @param engine engine used to create the render target
115
+ * @param label defines the label to use for the wrapper (for debugging purpose only)
115
116
  */
116
- constructor(isMulti, isCube, size, engine) {
117
+ constructor(isMulti, isCube, size, engine, label) {
117
118
  this._textures = null;
118
119
  this._faceIndices = null;
119
120
  this._layerIndices = null;
@@ -132,6 +133,7 @@ export class RenderTargetWrapper {
132
133
  this._size = size;
133
134
  this._engine = engine;
134
135
  this._depthStencilTexture = null;
136
+ this.label = label;
135
137
  }
136
138
  /**
137
139
  * Sets the render target texture(s)
@@ -1 +1 @@
1
- {"version":3,"file":"renderTargetWrapper.js","sourceRoot":"","sources":["../../../../dev/core/src/Engines/renderTargetWrapper.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InternalTexture } from \"../Materials/Textures/internalTexture\";\r\nimport { InternalTextureSource } from \"../Materials/Textures/internalTexture\";\r\nimport type { RenderTargetCreationOptions, TextureSize } from \"../Materials/Textures/textureCreationOptions\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Constants } from \"./constants\";\r\nimport type { ThinEngine } from \"./thinEngine\";\r\nimport type { IMultiRenderTargetOptions } from \"../Materials/Textures/multiRenderTarget\";\r\n\r\n/**\r\n * An interface enforcing the renderTarget accessor to used by render target textures.\r\n */\r\nexport interface IRenderTargetTexture {\r\n /**\r\n * Entry point to access the wrapper on a texture.\r\n */\r\n renderTarget: Nullable<RenderTargetWrapper>;\r\n}\r\n\r\n/**\r\n * Wrapper around a render target (either single or multi textures)\r\n */\r\nexport class RenderTargetWrapper {\r\n protected _engine: ThinEngine;\r\n private _size: TextureSize;\r\n private _isCube: boolean;\r\n private _isMulti: boolean;\r\n private _textures: Nullable<InternalTexture[]> = null;\r\n private _faceIndices: Nullable<number[]> = null;\r\n private _layerIndices: Nullable<number[]> = null;\r\n /** @internal */\r\n public _samples = 1;\r\n\r\n /** @internal */\r\n public _attachments: Nullable<number[]> = null;\r\n /** @internal */\r\n public _generateStencilBuffer: boolean = false;\r\n /** @internal */\r\n public _generateDepthBuffer: boolean = false;\r\n\r\n /** @internal */\r\n public _depthStencilTexture: Nullable<InternalTexture>;\r\n /** @internal */\r\n public _depthStencilTextureWithStencil: boolean = false;\r\n\r\n /**\r\n * Gets the depth/stencil texture (if created by a createDepthStencilTexture() call)\r\n */\r\n public get depthStencilTexture() {\r\n return this._depthStencilTexture;\r\n }\r\n\r\n /**\r\n * Indicates if the depth/stencil texture has a stencil aspect\r\n */\r\n public get depthStencilTextureWithStencil() {\r\n return this._depthStencilTextureWithStencil;\r\n }\r\n\r\n /**\r\n * Defines if the render target wrapper is for a cube texture or if false a 2d texture\r\n */\r\n public get isCube(): boolean {\r\n return this._isCube;\r\n }\r\n\r\n /**\r\n * Defines if the render target wrapper is for a single or multi target render wrapper\r\n */\r\n public get isMulti(): boolean {\r\n return this._isMulti;\r\n }\r\n\r\n /**\r\n * Defines if the render target wrapper is for a single or an array of textures\r\n */\r\n public get is2DArray(): boolean {\r\n return this.layers > 0;\r\n }\r\n\r\n /**\r\n * Gets the size of the render target wrapper (used for cubes, as width=height in this case)\r\n */\r\n public get size(): number {\r\n return this.width;\r\n }\r\n\r\n /**\r\n * Gets the width of the render target wrapper\r\n */\r\n public get width(): number {\r\n return (<{ width: number; height: number }>this._size).width || <number>this._size;\r\n }\r\n\r\n /**\r\n * Gets the height of the render target wrapper\r\n */\r\n public get height(): number {\r\n return (<{ width: number; height: number }>this._size).height || <number>this._size;\r\n }\r\n\r\n /**\r\n * Gets the number of layers of the render target wrapper (only used if is2DArray is true and wrapper is not a multi render target)\r\n */\r\n public get layers(): number {\r\n return (<{ width: number; height: number; layers?: number }>this._size).layers || 0;\r\n }\r\n\r\n /**\r\n * Gets the render texture. If this is a multi render target, gets the first texture\r\n */\r\n public get texture(): Nullable<InternalTexture> {\r\n return this._textures?.[0] ?? null;\r\n }\r\n\r\n /**\r\n * Gets the list of render textures. If we are not in a multi render target, the list will be null (use the texture getter instead)\r\n */\r\n public get textures(): Nullable<InternalTexture[]> {\r\n return this._textures;\r\n }\r\n\r\n /**\r\n * Gets the face indices that correspond to the list of render textures. If we are not in a multi render target, the list will be null\r\n */\r\n public get faceIndices(): Nullable<number[]> {\r\n return this._faceIndices;\r\n }\r\n\r\n /**\r\n * Gets the layer indices that correspond to the list of render textures. If we are not in a multi render target, the list will be null\r\n */\r\n public get layerIndices(): Nullable<number[]> {\r\n return this._layerIndices;\r\n }\r\n\r\n /**\r\n * Gets the sample count of the render target\r\n */\r\n public get samples(): number {\r\n return this._samples;\r\n }\r\n\r\n /**\r\n * Sets the sample count of the render target\r\n * @param value sample count\r\n * @param initializeBuffers If set to true, the engine will make an initializing call to drawBuffers (only used when isMulti=true).\r\n * @param force true to force calling the update sample count engine function even if the current sample count is equal to value\r\n * @returns the sample count that has been set\r\n */\r\n public setSamples(value: number, initializeBuffers = true, force = false): number {\r\n if (this.samples === value && !force) {\r\n return value;\r\n }\r\n\r\n const result = this._isMulti\r\n ? this._engine.updateMultipleRenderTargetTextureSampleCount(this, value, initializeBuffers)\r\n : this._engine.updateRenderTargetTextureSampleCount(this, value);\r\n this._samples = value;\r\n return result;\r\n }\r\n\r\n /**\r\n * Initializes the render target wrapper\r\n * @param isMulti true if the wrapper is a multi render target\r\n * @param isCube true if the wrapper should render to a cube texture\r\n * @param size size of the render target (width/height/layers)\r\n * @param engine engine used to create the render target\r\n */\r\n constructor(isMulti: boolean, isCube: boolean, size: TextureSize, engine: ThinEngine) {\r\n this._isMulti = isMulti;\r\n this._isCube = isCube;\r\n this._size = size;\r\n this._engine = engine;\r\n this._depthStencilTexture = null;\r\n }\r\n\r\n /**\r\n * Sets the render target texture(s)\r\n * @param textures texture(s) to set\r\n */\r\n public setTextures(textures: Nullable<InternalTexture> | Nullable<InternalTexture[]>): void {\r\n if (Array.isArray(textures)) {\r\n this._textures = textures;\r\n } else if (textures) {\r\n this._textures = [textures];\r\n } else {\r\n this._textures = null;\r\n }\r\n }\r\n\r\n /**\r\n * Set a texture in the textures array\r\n * @param texture The texture to set\r\n * @param index The index in the textures array to set\r\n * @param disposePrevious If this function should dispose the previous texture\r\n */\r\n public setTexture(texture: InternalTexture, index: number = 0, disposePrevious: boolean = true): void {\r\n if (!this._textures) {\r\n this._textures = [];\r\n }\r\n if (this._textures[index] === texture) {\r\n return;\r\n }\r\n\r\n if (this._textures[index] && disposePrevious) {\r\n this._textures[index].dispose();\r\n }\r\n\r\n this._textures[index] = texture;\r\n }\r\n\r\n /**\r\n * Sets the layer and face indices of every render target texture bound to each color attachment\r\n * @param layers The layers of each texture to be set\r\n * @param faces The faces of each texture to be set\r\n */\r\n public setLayerAndFaceIndices(layers: number[], faces: number[]) {\r\n this._layerIndices = layers;\r\n this._faceIndices = faces;\r\n }\r\n\r\n /**\r\n * Sets the layer and face indices of a texture in the textures array that should be bound to each color attachment\r\n * @param index The index of the texture in the textures array to modify\r\n * @param layer The layer of the texture to be set\r\n * @param face The face of the texture to be set\r\n */\r\n public setLayerAndFaceIndex(index: number = 0, layer?: number, face?: number): void {\r\n if (!this._layerIndices) {\r\n this._layerIndices = [];\r\n }\r\n if (!this._faceIndices) {\r\n this._faceIndices = [];\r\n }\r\n\r\n if (layer !== undefined && layer >= 0) {\r\n this._layerIndices[index] = layer;\r\n }\r\n if (face !== undefined && face >= 0) {\r\n this._faceIndices[index] = face;\r\n }\r\n }\r\n\r\n /**\r\n * Creates the depth/stencil texture\r\n * @param comparisonFunction Comparison function to use for the texture\r\n * @param bilinearFiltering true if bilinear filtering should be used when sampling the texture\r\n * @param generateStencil true if the stencil aspect should also be created\r\n * @param samples sample count to use when creating the texture\r\n * @param format format of the depth texture\r\n * @param label defines the label to use for the texture (for debugging purpose only)\r\n * @returns the depth/stencil created texture\r\n */\r\n public createDepthStencilTexture(\r\n comparisonFunction: number = 0,\r\n bilinearFiltering: boolean = true,\r\n generateStencil: boolean = false,\r\n samples: number = 1,\r\n format: number = Constants.TEXTUREFORMAT_DEPTH32_FLOAT,\r\n label?: string\r\n ): InternalTexture {\r\n this._depthStencilTexture?.dispose();\r\n\r\n this._depthStencilTextureWithStencil = generateStencil;\r\n this._depthStencilTexture = this._engine.createDepthStencilTexture(\r\n this._size,\r\n {\r\n bilinearFiltering,\r\n comparisonFunction,\r\n generateStencil,\r\n isCube: this._isCube,\r\n samples,\r\n depthTextureFormat: format,\r\n label,\r\n },\r\n this\r\n );\r\n\r\n return this._depthStencilTexture;\r\n }\r\n\r\n /**\r\n * Shares the depth buffer of this render target with another render target.\r\n * @internal\r\n * @param renderTarget Destination renderTarget\r\n */\r\n public _shareDepth(renderTarget: RenderTargetWrapper): void {\r\n if (this._depthStencilTexture) {\r\n if (renderTarget._depthStencilTexture) {\r\n renderTarget._depthStencilTexture.dispose();\r\n }\r\n\r\n renderTarget._depthStencilTexture = this._depthStencilTexture;\r\n this._depthStencilTexture.incrementReferences();\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _swapAndDie(target: InternalTexture): void {\r\n if (this.texture) {\r\n this.texture._swapAndDie(target);\r\n }\r\n this._textures = null;\r\n this.dispose(true);\r\n }\r\n\r\n protected _cloneRenderTargetWrapper(): Nullable<RenderTargetWrapper> {\r\n let rtw: Nullable<RenderTargetWrapper> = null;\r\n\r\n if (this._isMulti) {\r\n const textureArray = this.textures;\r\n if (textureArray && textureArray.length > 0) {\r\n let generateDepthTexture = false;\r\n let textureCount = textureArray.length;\r\n\r\n const lastTextureSource = textureArray[textureArray.length - 1]._source;\r\n if (lastTextureSource === InternalTextureSource.Depth || lastTextureSource === InternalTextureSource.DepthStencil) {\r\n generateDepthTexture = true;\r\n textureCount--;\r\n }\r\n\r\n const samplingModes: number[] = [];\r\n const types: number[] = [];\r\n const formats: number[] = [];\r\n const targetTypes: number[] = [];\r\n const faceIndex: number[] = [];\r\n const layerIndex: number[] = [];\r\n const layerCounts: number[] = [];\r\n const internalTexture2Index: { [id: number]: number } = {};\r\n\r\n for (let i = 0; i < textureCount; ++i) {\r\n const texture = textureArray[i];\r\n\r\n samplingModes.push(texture.samplingMode);\r\n types.push(texture.type);\r\n formats.push(texture.format);\r\n\r\n const index = internalTexture2Index[texture.uniqueId];\r\n if (index !== undefined) {\r\n targetTypes.push(-1);\r\n layerCounts.push(0);\r\n } else {\r\n internalTexture2Index[texture.uniqueId] = i;\r\n if (texture.is2DArray) {\r\n targetTypes.push(Constants.TEXTURE_2D_ARRAY);\r\n layerCounts.push(texture.depth);\r\n } else if (texture.isCube) {\r\n targetTypes.push(Constants.TEXTURE_CUBE_MAP);\r\n layerCounts.push(0);\r\n } /*else if (texture.isCubeArray) {\r\n targetTypes.push(Constants.TEXTURE_CUBE_MAP_ARRAY);\r\n layerCounts.push(texture.depth);\r\n }*/ else if (texture.is3D) {\r\n targetTypes.push(Constants.TEXTURE_3D);\r\n layerCounts.push(texture.depth);\r\n } else {\r\n targetTypes.push(Constants.TEXTURE_2D);\r\n layerCounts.push(0);\r\n }\r\n }\r\n\r\n if (this._faceIndices) {\r\n faceIndex.push(this._faceIndices[i] ?? 0);\r\n }\r\n if (this._layerIndices) {\r\n layerIndex.push(this._layerIndices[i] ?? 0);\r\n }\r\n }\r\n\r\n const optionsMRT: IMultiRenderTargetOptions = {\r\n samplingModes,\r\n generateMipMaps: textureArray[0].generateMipMaps,\r\n generateDepthBuffer: this._generateDepthBuffer,\r\n generateStencilBuffer: this._generateStencilBuffer,\r\n generateDepthTexture,\r\n types,\r\n formats,\r\n textureCount,\r\n targetTypes,\r\n faceIndex,\r\n layerIndex,\r\n layerCounts,\r\n };\r\n const size = {\r\n width: this.width,\r\n height: this.height,\r\n };\r\n\r\n rtw = this._engine.createMultipleRenderTarget(size, optionsMRT);\r\n\r\n for (let i = 0; i < textureCount; ++i) {\r\n if (targetTypes[i] !== -1) {\r\n continue;\r\n }\r\n const index = internalTexture2Index[textureArray[i].uniqueId];\r\n rtw.setTexture(rtw.textures![index], i);\r\n }\r\n }\r\n } else {\r\n const options: RenderTargetCreationOptions = {};\r\n\r\n options.generateDepthBuffer = this._generateDepthBuffer;\r\n options.generateMipMaps = this.texture?.generateMipMaps ?? false;\r\n options.generateStencilBuffer = this._generateStencilBuffer;\r\n options.samplingMode = this.texture?.samplingMode;\r\n options.type = this.texture?.type;\r\n options.format = this.texture?.format;\r\n\r\n if (this.isCube) {\r\n rtw = this._engine.createRenderTargetCubeTexture(this.width, options);\r\n } else {\r\n const size = {\r\n width: this.width,\r\n height: this.height,\r\n layers: this.is2DArray ? this.texture?.depth : undefined,\r\n };\r\n\r\n rtw = this._engine.createRenderTargetTexture(size, options);\r\n }\r\n rtw.texture!.isReady = true;\r\n }\r\n\r\n return rtw;\r\n }\r\n\r\n protected _swapRenderTargetWrapper(target: RenderTargetWrapper): void {\r\n if (this._textures && target._textures) {\r\n for (let i = 0; i < this._textures.length; ++i) {\r\n this._textures[i]._swapAndDie(target._textures[i], false);\r\n target._textures[i].isReady = true;\r\n }\r\n }\r\n if (this._depthStencilTexture && target._depthStencilTexture) {\r\n this._depthStencilTexture._swapAndDie(target._depthStencilTexture);\r\n target._depthStencilTexture.isReady = true;\r\n }\r\n\r\n this._textures = null;\r\n this._depthStencilTexture = null;\r\n }\r\n\r\n /** @internal */\r\n public _rebuild(): void {\r\n const rtw = this._cloneRenderTargetWrapper();\r\n if (!rtw) {\r\n return;\r\n }\r\n\r\n if (this._depthStencilTexture) {\r\n const samplingMode = this._depthStencilTexture.samplingMode;\r\n const bilinear =\r\n samplingMode === Constants.TEXTURE_BILINEAR_SAMPLINGMODE ||\r\n samplingMode === Constants.TEXTURE_TRILINEAR_SAMPLINGMODE ||\r\n samplingMode === Constants.TEXTURE_LINEAR_LINEAR_MIPNEAREST;\r\n rtw.createDepthStencilTexture(this._depthStencilTexture._comparisonFunction, bilinear, this._depthStencilTextureWithStencil, this._depthStencilTexture.samples);\r\n }\r\n\r\n if (this.samples > 1) {\r\n rtw.setSamples(this.samples);\r\n }\r\n\r\n rtw._swapRenderTargetWrapper(this);\r\n rtw.dispose();\r\n }\r\n\r\n /**\r\n * Releases the internal render textures\r\n */\r\n public releaseTextures(): void {\r\n if (this._textures) {\r\n for (let i = 0; i < this._textures?.length ?? 0; ++i) {\r\n this._textures[i].dispose();\r\n }\r\n }\r\n this._textures = null;\r\n }\r\n\r\n /**\r\n * Disposes the whole render target wrapper\r\n * @param disposeOnlyFramebuffers true if only the frame buffers should be released (used for the WebGL engine). If false, all the textures will also be released\r\n */\r\n public dispose(disposeOnlyFramebuffers = false): void {\r\n if (!disposeOnlyFramebuffers) {\r\n this._depthStencilTexture?.dispose();\r\n this._depthStencilTexture = null;\r\n this.releaseTextures();\r\n }\r\n\r\n this._engine._releaseRenderTargetWrapper(this);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"renderTargetWrapper.js","sourceRoot":"","sources":["../../../../dev/core/src/Engines/renderTargetWrapper.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InternalTexture } from \"../Materials/Textures/internalTexture\";\r\nimport { InternalTextureSource } from \"../Materials/Textures/internalTexture\";\r\nimport type { RenderTargetCreationOptions, TextureSize } from \"../Materials/Textures/textureCreationOptions\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Constants } from \"./constants\";\r\nimport type { ThinEngine } from \"./thinEngine\";\r\nimport type { IMultiRenderTargetOptions } from \"../Materials/Textures/multiRenderTarget\";\r\n\r\n/**\r\n * An interface enforcing the renderTarget accessor to used by render target textures.\r\n */\r\nexport interface IRenderTargetTexture {\r\n /**\r\n * Entry point to access the wrapper on a texture.\r\n */\r\n renderTarget: Nullable<RenderTargetWrapper>;\r\n}\r\n\r\n/**\r\n * Wrapper around a render target (either single or multi textures)\r\n */\r\nexport class RenderTargetWrapper {\r\n protected _engine: ThinEngine;\r\n private _size: TextureSize;\r\n private _isCube: boolean;\r\n private _isMulti: boolean;\r\n private _textures: Nullable<InternalTexture[]> = null;\r\n private _faceIndices: Nullable<number[]> = null;\r\n private _layerIndices: Nullable<number[]> = null;\r\n /** @internal */\r\n public _samples = 1;\r\n\r\n /** @internal */\r\n public _attachments: Nullable<number[]> = null;\r\n /** @internal */\r\n public _generateStencilBuffer: boolean = false;\r\n /** @internal */\r\n public _generateDepthBuffer: boolean = false;\r\n\r\n /** @internal */\r\n public _depthStencilTexture: Nullable<InternalTexture>;\r\n /** @internal */\r\n public _depthStencilTextureWithStencil: boolean = false;\r\n\r\n /**\r\n * Gets or sets the label of the render target wrapper (optional, for debugging purpose)\r\n */\r\n public label?: string;\r\n\r\n /**\r\n * Gets the depth/stencil texture (if created by a createDepthStencilTexture() call)\r\n */\r\n public get depthStencilTexture() {\r\n return this._depthStencilTexture;\r\n }\r\n\r\n /**\r\n * Indicates if the depth/stencil texture has a stencil aspect\r\n */\r\n public get depthStencilTextureWithStencil() {\r\n return this._depthStencilTextureWithStencil;\r\n }\r\n\r\n /**\r\n * Defines if the render target wrapper is for a cube texture or if false a 2d texture\r\n */\r\n public get isCube(): boolean {\r\n return this._isCube;\r\n }\r\n\r\n /**\r\n * Defines if the render target wrapper is for a single or multi target render wrapper\r\n */\r\n public get isMulti(): boolean {\r\n return this._isMulti;\r\n }\r\n\r\n /**\r\n * Defines if the render target wrapper is for a single or an array of textures\r\n */\r\n public get is2DArray(): boolean {\r\n return this.layers > 0;\r\n }\r\n\r\n /**\r\n * Gets the size of the render target wrapper (used for cubes, as width=height in this case)\r\n */\r\n public get size(): number {\r\n return this.width;\r\n }\r\n\r\n /**\r\n * Gets the width of the render target wrapper\r\n */\r\n public get width(): number {\r\n return (<{ width: number; height: number }>this._size).width || <number>this._size;\r\n }\r\n\r\n /**\r\n * Gets the height of the render target wrapper\r\n */\r\n public get height(): number {\r\n return (<{ width: number; height: number }>this._size).height || <number>this._size;\r\n }\r\n\r\n /**\r\n * Gets the number of layers of the render target wrapper (only used if is2DArray is true and wrapper is not a multi render target)\r\n */\r\n public get layers(): number {\r\n return (<{ width: number; height: number; layers?: number }>this._size).layers || 0;\r\n }\r\n\r\n /**\r\n * Gets the render texture. If this is a multi render target, gets the first texture\r\n */\r\n public get texture(): Nullable<InternalTexture> {\r\n return this._textures?.[0] ?? null;\r\n }\r\n\r\n /**\r\n * Gets the list of render textures. If we are not in a multi render target, the list will be null (use the texture getter instead)\r\n */\r\n public get textures(): Nullable<InternalTexture[]> {\r\n return this._textures;\r\n }\r\n\r\n /**\r\n * Gets the face indices that correspond to the list of render textures. If we are not in a multi render target, the list will be null\r\n */\r\n public get faceIndices(): Nullable<number[]> {\r\n return this._faceIndices;\r\n }\r\n\r\n /**\r\n * Gets the layer indices that correspond to the list of render textures. If we are not in a multi render target, the list will be null\r\n */\r\n public get layerIndices(): Nullable<number[]> {\r\n return this._layerIndices;\r\n }\r\n\r\n /**\r\n * Gets the sample count of the render target\r\n */\r\n public get samples(): number {\r\n return this._samples;\r\n }\r\n\r\n /**\r\n * Sets the sample count of the render target\r\n * @param value sample count\r\n * @param initializeBuffers If set to true, the engine will make an initializing call to drawBuffers (only used when isMulti=true).\r\n * @param force true to force calling the update sample count engine function even if the current sample count is equal to value\r\n * @returns the sample count that has been set\r\n */\r\n public setSamples(value: number, initializeBuffers = true, force = false): number {\r\n if (this.samples === value && !force) {\r\n return value;\r\n }\r\n\r\n const result = this._isMulti\r\n ? this._engine.updateMultipleRenderTargetTextureSampleCount(this, value, initializeBuffers)\r\n : this._engine.updateRenderTargetTextureSampleCount(this, value);\r\n this._samples = value;\r\n return result;\r\n }\r\n\r\n /**\r\n * Initializes the render target wrapper\r\n * @param isMulti true if the wrapper is a multi render target\r\n * @param isCube true if the wrapper should render to a cube texture\r\n * @param size size of the render target (width/height/layers)\r\n * @param engine engine used to create the render target\r\n * @param label defines the label to use for the wrapper (for debugging purpose only)\r\n */\r\n constructor(isMulti: boolean, isCube: boolean, size: TextureSize, engine: ThinEngine, label?: string) {\r\n this._isMulti = isMulti;\r\n this._isCube = isCube;\r\n this._size = size;\r\n this._engine = engine;\r\n this._depthStencilTexture = null;\r\n this.label = label;\r\n }\r\n\r\n /**\r\n * Sets the render target texture(s)\r\n * @param textures texture(s) to set\r\n */\r\n public setTextures(textures: Nullable<InternalTexture> | Nullable<InternalTexture[]>): void {\r\n if (Array.isArray(textures)) {\r\n this._textures = textures;\r\n } else if (textures) {\r\n this._textures = [textures];\r\n } else {\r\n this._textures = null;\r\n }\r\n }\r\n\r\n /**\r\n * Set a texture in the textures array\r\n * @param texture The texture to set\r\n * @param index The index in the textures array to set\r\n * @param disposePrevious If this function should dispose the previous texture\r\n */\r\n public setTexture(texture: InternalTexture, index: number = 0, disposePrevious: boolean = true): void {\r\n if (!this._textures) {\r\n this._textures = [];\r\n }\r\n if (this._textures[index] === texture) {\r\n return;\r\n }\r\n\r\n if (this._textures[index] && disposePrevious) {\r\n this._textures[index].dispose();\r\n }\r\n\r\n this._textures[index] = texture;\r\n }\r\n\r\n /**\r\n * Sets the layer and face indices of every render target texture bound to each color attachment\r\n * @param layers The layers of each texture to be set\r\n * @param faces The faces of each texture to be set\r\n */\r\n public setLayerAndFaceIndices(layers: number[], faces: number[]) {\r\n this._layerIndices = layers;\r\n this._faceIndices = faces;\r\n }\r\n\r\n /**\r\n * Sets the layer and face indices of a texture in the textures array that should be bound to each color attachment\r\n * @param index The index of the texture in the textures array to modify\r\n * @param layer The layer of the texture to be set\r\n * @param face The face of the texture to be set\r\n */\r\n public setLayerAndFaceIndex(index: number = 0, layer?: number, face?: number): void {\r\n if (!this._layerIndices) {\r\n this._layerIndices = [];\r\n }\r\n if (!this._faceIndices) {\r\n this._faceIndices = [];\r\n }\r\n\r\n if (layer !== undefined && layer >= 0) {\r\n this._layerIndices[index] = layer;\r\n }\r\n if (face !== undefined && face >= 0) {\r\n this._faceIndices[index] = face;\r\n }\r\n }\r\n\r\n /**\r\n * Creates the depth/stencil texture\r\n * @param comparisonFunction Comparison function to use for the texture\r\n * @param bilinearFiltering true if bilinear filtering should be used when sampling the texture\r\n * @param generateStencil true if the stencil aspect should also be created\r\n * @param samples sample count to use when creating the texture\r\n * @param format format of the depth texture\r\n * @param label defines the label to use for the texture (for debugging purpose only)\r\n * @returns the depth/stencil created texture\r\n */\r\n public createDepthStencilTexture(\r\n comparisonFunction: number = 0,\r\n bilinearFiltering: boolean = true,\r\n generateStencil: boolean = false,\r\n samples: number = 1,\r\n format: number = Constants.TEXTUREFORMAT_DEPTH32_FLOAT,\r\n label?: string\r\n ): InternalTexture {\r\n this._depthStencilTexture?.dispose();\r\n\r\n this._depthStencilTextureWithStencil = generateStencil;\r\n this._depthStencilTexture = this._engine.createDepthStencilTexture(\r\n this._size,\r\n {\r\n bilinearFiltering,\r\n comparisonFunction,\r\n generateStencil,\r\n isCube: this._isCube,\r\n samples,\r\n depthTextureFormat: format,\r\n label,\r\n },\r\n this\r\n );\r\n\r\n return this._depthStencilTexture;\r\n }\r\n\r\n /**\r\n * Shares the depth buffer of this render target with another render target.\r\n * @internal\r\n * @param renderTarget Destination renderTarget\r\n */\r\n public _shareDepth(renderTarget: RenderTargetWrapper): void {\r\n if (this._depthStencilTexture) {\r\n if (renderTarget._depthStencilTexture) {\r\n renderTarget._depthStencilTexture.dispose();\r\n }\r\n\r\n renderTarget._depthStencilTexture = this._depthStencilTexture;\r\n this._depthStencilTexture.incrementReferences();\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _swapAndDie(target: InternalTexture): void {\r\n if (this.texture) {\r\n this.texture._swapAndDie(target);\r\n }\r\n this._textures = null;\r\n this.dispose(true);\r\n }\r\n\r\n protected _cloneRenderTargetWrapper(): Nullable<RenderTargetWrapper> {\r\n let rtw: Nullable<RenderTargetWrapper> = null;\r\n\r\n if (this._isMulti) {\r\n const textureArray = this.textures;\r\n if (textureArray && textureArray.length > 0) {\r\n let generateDepthTexture = false;\r\n let textureCount = textureArray.length;\r\n\r\n const lastTextureSource = textureArray[textureArray.length - 1]._source;\r\n if (lastTextureSource === InternalTextureSource.Depth || lastTextureSource === InternalTextureSource.DepthStencil) {\r\n generateDepthTexture = true;\r\n textureCount--;\r\n }\r\n\r\n const samplingModes: number[] = [];\r\n const types: number[] = [];\r\n const formats: number[] = [];\r\n const targetTypes: number[] = [];\r\n const faceIndex: number[] = [];\r\n const layerIndex: number[] = [];\r\n const layerCounts: number[] = [];\r\n const internalTexture2Index: { [id: number]: number } = {};\r\n\r\n for (let i = 0; i < textureCount; ++i) {\r\n const texture = textureArray[i];\r\n\r\n samplingModes.push(texture.samplingMode);\r\n types.push(texture.type);\r\n formats.push(texture.format);\r\n\r\n const index = internalTexture2Index[texture.uniqueId];\r\n if (index !== undefined) {\r\n targetTypes.push(-1);\r\n layerCounts.push(0);\r\n } else {\r\n internalTexture2Index[texture.uniqueId] = i;\r\n if (texture.is2DArray) {\r\n targetTypes.push(Constants.TEXTURE_2D_ARRAY);\r\n layerCounts.push(texture.depth);\r\n } else if (texture.isCube) {\r\n targetTypes.push(Constants.TEXTURE_CUBE_MAP);\r\n layerCounts.push(0);\r\n } /*else if (texture.isCubeArray) {\r\n targetTypes.push(Constants.TEXTURE_CUBE_MAP_ARRAY);\r\n layerCounts.push(texture.depth);\r\n }*/ else if (texture.is3D) {\r\n targetTypes.push(Constants.TEXTURE_3D);\r\n layerCounts.push(texture.depth);\r\n } else {\r\n targetTypes.push(Constants.TEXTURE_2D);\r\n layerCounts.push(0);\r\n }\r\n }\r\n\r\n if (this._faceIndices) {\r\n faceIndex.push(this._faceIndices[i] ?? 0);\r\n }\r\n if (this._layerIndices) {\r\n layerIndex.push(this._layerIndices[i] ?? 0);\r\n }\r\n }\r\n\r\n const optionsMRT: IMultiRenderTargetOptions = {\r\n samplingModes,\r\n generateMipMaps: textureArray[0].generateMipMaps,\r\n generateDepthBuffer: this._generateDepthBuffer,\r\n generateStencilBuffer: this._generateStencilBuffer,\r\n generateDepthTexture,\r\n types,\r\n formats,\r\n textureCount,\r\n targetTypes,\r\n faceIndex,\r\n layerIndex,\r\n layerCounts,\r\n };\r\n const size = {\r\n width: this.width,\r\n height: this.height,\r\n };\r\n\r\n rtw = this._engine.createMultipleRenderTarget(size, optionsMRT);\r\n\r\n for (let i = 0; i < textureCount; ++i) {\r\n if (targetTypes[i] !== -1) {\r\n continue;\r\n }\r\n const index = internalTexture2Index[textureArray[i].uniqueId];\r\n rtw.setTexture(rtw.textures![index], i);\r\n }\r\n }\r\n } else {\r\n const options: RenderTargetCreationOptions = {};\r\n\r\n options.generateDepthBuffer = this._generateDepthBuffer;\r\n options.generateMipMaps = this.texture?.generateMipMaps ?? false;\r\n options.generateStencilBuffer = this._generateStencilBuffer;\r\n options.samplingMode = this.texture?.samplingMode;\r\n options.type = this.texture?.type;\r\n options.format = this.texture?.format;\r\n\r\n if (this.isCube) {\r\n rtw = this._engine.createRenderTargetCubeTexture(this.width, options);\r\n } else {\r\n const size = {\r\n width: this.width,\r\n height: this.height,\r\n layers: this.is2DArray ? this.texture?.depth : undefined,\r\n };\r\n\r\n rtw = this._engine.createRenderTargetTexture(size, options);\r\n }\r\n rtw.texture!.isReady = true;\r\n }\r\n\r\n return rtw;\r\n }\r\n\r\n protected _swapRenderTargetWrapper(target: RenderTargetWrapper): void {\r\n if (this._textures && target._textures) {\r\n for (let i = 0; i < this._textures.length; ++i) {\r\n this._textures[i]._swapAndDie(target._textures[i], false);\r\n target._textures[i].isReady = true;\r\n }\r\n }\r\n if (this._depthStencilTexture && target._depthStencilTexture) {\r\n this._depthStencilTexture._swapAndDie(target._depthStencilTexture);\r\n target._depthStencilTexture.isReady = true;\r\n }\r\n\r\n this._textures = null;\r\n this._depthStencilTexture = null;\r\n }\r\n\r\n /** @internal */\r\n public _rebuild(): void {\r\n const rtw = this._cloneRenderTargetWrapper();\r\n if (!rtw) {\r\n return;\r\n }\r\n\r\n if (this._depthStencilTexture) {\r\n const samplingMode = this._depthStencilTexture.samplingMode;\r\n const bilinear =\r\n samplingMode === Constants.TEXTURE_BILINEAR_SAMPLINGMODE ||\r\n samplingMode === Constants.TEXTURE_TRILINEAR_SAMPLINGMODE ||\r\n samplingMode === Constants.TEXTURE_LINEAR_LINEAR_MIPNEAREST;\r\n rtw.createDepthStencilTexture(this._depthStencilTexture._comparisonFunction, bilinear, this._depthStencilTextureWithStencil, this._depthStencilTexture.samples);\r\n }\r\n\r\n if (this.samples > 1) {\r\n rtw.setSamples(this.samples);\r\n }\r\n\r\n rtw._swapRenderTargetWrapper(this);\r\n rtw.dispose();\r\n }\r\n\r\n /**\r\n * Releases the internal render textures\r\n */\r\n public releaseTextures(): void {\r\n if (this._textures) {\r\n for (let i = 0; i < this._textures?.length ?? 0; ++i) {\r\n this._textures[i].dispose();\r\n }\r\n }\r\n this._textures = null;\r\n }\r\n\r\n /**\r\n * Disposes the whole render target wrapper\r\n * @param disposeOnlyFramebuffers true if only the frame buffers should be released (used for the WebGL engine). If false, all the textures will also be released\r\n */\r\n public dispose(disposeOnlyFramebuffers = false): void {\r\n if (!disposeOnlyFramebuffers) {\r\n this._depthStencilTexture?.dispose();\r\n this._depthStencilTexture = null;\r\n this.releaseTextures();\r\n }\r\n\r\n this._engine._releaseRenderTargetWrapper(this);\r\n }\r\n}\r\n"]}
@@ -34,13 +34,13 @@ export class ThinEngine {
34
34
  */
35
35
  // Not mixed with Version for tooling purpose.
36
36
  static get NpmPackage() {
37
- return "babylonjs@6.19.1";
37
+ return "babylonjs@6.20.1";
38
38
  }
39
39
  /**
40
40
  * Returns the current version of the framework
41
41
  */
42
42
  static get Version() {
43
- return "6.19.1";
43
+ return "6.20.1";
44
44
  }
45
45
  /**
46
46
  * Returns a string describing the current engine