@babylonjs/core 7.42.0 → 7.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/Actions/actionEvent.d.ts +4 -4
  2. package/Animations/animation.js +1 -1
  3. package/Animations/animation.js.map +1 -1
  4. package/Buffers/bufferUtils.d.ts +8 -1
  5. package/Buffers/bufferUtils.js +15 -0
  6. package/Buffers/bufferUtils.js.map +1 -1
  7. package/Culling/Helper/boundingInfoHelper.d.ts +2 -9
  8. package/Culling/Helper/boundingInfoHelper.js +2 -9
  9. package/Culling/Helper/boundingInfoHelper.js.map +1 -1
  10. package/Culling/Helper/computeShaderBoundingHelper.js +3 -4
  11. package/Culling/Helper/computeShaderBoundingHelper.js.map +1 -1
  12. package/Culling/Helper/transformFeedbackBoundingHelper.js +27 -64
  13. package/Culling/Helper/transformFeedbackBoundingHelper.js.map +1 -1
  14. package/Engines/Extensions/engine.multiRender.js +3 -2
  15. package/Engines/Extensions/engine.multiRender.js.map +1 -1
  16. package/Engines/WebGPU/webgpuCacheRenderPipeline.d.ts +1 -0
  17. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +5 -0
  18. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  19. package/Engines/WebGPU/webgpuTextureManager.js +6 -1
  20. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  21. package/Engines/abstractEngine.js +2 -2
  22. package/Engines/abstractEngine.js.map +1 -1
  23. package/Engines/engine.d.ts +5 -2
  24. package/FlowGraph/flowGraphConnection.d.ts +1 -1
  25. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.d.ts +64 -0
  26. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.js +147 -0
  27. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.js.map +1 -0
  28. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.d.ts +42 -0
  29. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js +78 -0
  30. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js.map +1 -0
  31. package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.d.ts +3 -19
  32. package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.js +3 -49
  33. package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.js.map +1 -1
  34. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.d.ts +3 -19
  35. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.js +3 -49
  36. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.js.map +1 -1
  37. package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.d.ts +3 -19
  38. package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.js +3 -49
  39. package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.js.map +1 -1
  40. package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.d.ts +2 -17
  41. package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.js +3 -45
  42. package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.js.map +1 -1
  43. package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.d.ts +2 -17
  44. package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.js +3 -44
  45. package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.js.map +1 -1
  46. package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.d.ts +3 -19
  47. package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.js +3 -49
  48. package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.js.map +1 -1
  49. package/FrameGraph/Node/Blocks/PostProcesses/passPostProcessBlock.d.ts +47 -0
  50. package/FrameGraph/Node/Blocks/PostProcesses/passPostProcessBlock.js +65 -0
  51. package/FrameGraph/Node/Blocks/PostProcesses/passPostProcessBlock.js.map +1 -0
  52. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +0 -15
  53. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
  54. package/FrameGraph/Node/Blocks/Rendering/baseShadowGeneratorBlock.d.ts +4 -0
  55. package/FrameGraph/Node/Blocks/Rendering/baseShadowGeneratorBlock.js +9 -0
  56. package/FrameGraph/Node/Blocks/Rendering/baseShadowGeneratorBlock.js.map +1 -1
  57. package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.d.ts +1 -6
  58. package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.js +0 -13
  59. package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.js.map +1 -1
  60. package/FrameGraph/Node/Blocks/Rendering/shadowGeneratorBlock.js +0 -1
  61. package/FrameGraph/Node/Blocks/Rendering/shadowGeneratorBlock.js.map +1 -1
  62. package/FrameGraph/Node/Blocks/index.d.ts +2 -0
  63. package/FrameGraph/Node/Blocks/index.js +2 -0
  64. package/FrameGraph/Node/Blocks/index.js.map +1 -1
  65. package/FrameGraph/Node/nodeRenderGraphBlock.js +17 -0
  66. package/FrameGraph/Node/nodeRenderGraphBlock.js.map +1 -1
  67. package/FrameGraph/Passes/renderPass.d.ts +0 -8
  68. package/FrameGraph/Passes/renderPass.js +0 -10
  69. package/FrameGraph/Passes/renderPass.js.map +1 -1
  70. package/FrameGraph/Tasks/Layers/glowLayerTask.d.ts +57 -0
  71. package/FrameGraph/Tasks/Layers/glowLayerTask.js +173 -0
  72. package/FrameGraph/Tasks/Layers/glowLayerTask.js.map +1 -0
  73. package/FrameGraph/Tasks/PostProcesses/bloomMergeTask.js +1 -1
  74. package/FrameGraph/Tasks/PostProcesses/bloomMergeTask.js.map +1 -1
  75. package/FrameGraph/Tasks/PostProcesses/bloomTask.js +7 -0
  76. package/FrameGraph/Tasks/PostProcesses/bloomTask.js.map +1 -1
  77. package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.js +1 -1
  78. package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.js.map +1 -1
  79. package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js +1 -1
  80. package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js.map +1 -1
  81. package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js +5 -5
  82. package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js.map +1 -1
  83. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js +12 -4
  84. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js.map +1 -1
  85. package/FrameGraph/Tasks/PostProcesses/passTask.d.ts +29 -0
  86. package/FrameGraph/Tasks/PostProcesses/passTask.js +31 -0
  87. package/FrameGraph/Tasks/PostProcesses/passTask.js.map +1 -0
  88. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js +1 -1
  89. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js.map +1 -1
  90. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.d.ts +0 -8
  91. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js +1 -17
  92. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js.map +1 -1
  93. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +3 -0
  94. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
  95. package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +4 -6
  96. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +20 -22
  97. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  98. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.d.ts +7 -1
  99. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js +21 -5
  100. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js.map +1 -1
  101. package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js +4 -6
  102. package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js.map +1 -1
  103. package/FrameGraph/Tasks/Texture/copyToTextureTask.js +1 -1
  104. package/FrameGraph/Tasks/Texture/copyToTextureTask.js.map +1 -1
  105. package/FrameGraph/frameGraph.js +22 -11
  106. package/FrameGraph/frameGraph.js.map +1 -1
  107. package/FrameGraph/frameGraphRenderContext.d.ts +2 -1
  108. package/FrameGraph/frameGraphRenderContext.js +2 -1
  109. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  110. package/FrameGraph/frameGraphTask.d.ts +11 -1
  111. package/FrameGraph/frameGraphTask.js +8 -0
  112. package/FrameGraph/frameGraphTask.js.map +1 -1
  113. package/FrameGraph/frameGraphTextureManager.d.ts +9 -3
  114. package/FrameGraph/frameGraphTextureManager.js +10 -4
  115. package/FrameGraph/frameGraphTextureManager.js.map +1 -1
  116. package/FrameGraph/index.d.ts +2 -0
  117. package/FrameGraph/index.js +2 -0
  118. package/FrameGraph/index.js.map +1 -1
  119. package/Gizmos/planeRotationGizmo.js +10 -0
  120. package/Gizmos/planeRotationGizmo.js.map +1 -1
  121. package/Inputs/scene.inputManager.js +2 -2
  122. package/Inputs/scene.inputManager.js.map +1 -1
  123. package/Layers/effectLayer.d.ts +32 -33
  124. package/Layers/effectLayer.js +144 -530
  125. package/Layers/effectLayer.js.map +1 -1
  126. package/Layers/glowLayer.d.ts +14 -41
  127. package/Layers/glowLayer.js +92 -178
  128. package/Layers/glowLayer.js.map +1 -1
  129. package/Layers/highlightLayer.d.ts +0 -1
  130. package/Layers/highlightLayer.js +0 -1
  131. package/Layers/highlightLayer.js.map +1 -1
  132. package/Layers/index.d.ts +2 -0
  133. package/Layers/index.js +2 -0
  134. package/Layers/index.js.map +1 -1
  135. package/Layers/thinEffectLayer.d.ts +230 -0
  136. package/Layers/thinEffectLayer.js +734 -0
  137. package/Layers/thinEffectLayer.js.map +1 -0
  138. package/Layers/thinGlowLayer.d.ts +141 -0
  139. package/Layers/thinGlowLayer.js +292 -0
  140. package/Layers/thinGlowLayer.js.map +1 -0
  141. package/Lights/Shadows/shadowGenerator.js +40 -19
  142. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  143. package/Materials/GreasedLine/greasedLinePluginMaterial.d.ts +6 -2
  144. package/Materials/GreasedLine/greasedLinePluginMaterial.js +8 -2
  145. package/Materials/GreasedLine/greasedLinePluginMaterial.js.map +1 -1
  146. package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js +17 -11
  147. package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js.map +1 -1
  148. package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.js +29 -15
  149. package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.js.map +1 -1
  150. package/Materials/GreasedLine/greasedLineSimpleMaterial.d.ts +1 -0
  151. package/Materials/GreasedLine/greasedLineSimpleMaterial.js +1 -0
  152. package/Materials/GreasedLine/greasedLineSimpleMaterial.js.map +1 -1
  153. package/Materials/Node/Blocks/Input/inputBlock.js +34 -2
  154. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  155. package/Materials/Node/Blocks/PBR/reflectionBlock.js +1 -3
  156. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  157. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +3 -3
  158. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
  159. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +34 -24
  160. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  161. package/Materials/Node/nodeMaterial.d.ts +14 -2
  162. package/Materials/Node/nodeMaterial.js +19 -5
  163. package/Materials/Node/nodeMaterial.js.map +1 -1
  164. package/Materials/PBR/pbrBaseMaterial.d.ts +5 -0
  165. package/Materials/PBR/pbrBaseMaterial.js +6 -0
  166. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  167. package/Materials/Textures/Filtering/hdrFiltering.js +1 -0
  168. package/Materials/Textures/Filtering/hdrFiltering.js.map +1 -1
  169. package/Materials/Textures/Filtering/hdrIrradianceFiltering.d.ts +69 -0
  170. package/Materials/Textures/Filtering/hdrIrradianceFiltering.js +187 -0
  171. package/Materials/Textures/Filtering/hdrIrradianceFiltering.js.map +1 -0
  172. package/Materials/Textures/hdrCubeTexture.d.ts +5 -1
  173. package/Materials/Textures/hdrCubeTexture.js +29 -3
  174. package/Materials/Textures/hdrCubeTexture.js.map +1 -1
  175. package/Materials/Textures/index.d.ts +4 -0
  176. package/Materials/Textures/index.js +4 -0
  177. package/Materials/Textures/index.js.map +1 -1
  178. package/Materials/Textures/renderTargetTexture.d.ts +12 -0
  179. package/Materials/Textures/renderTargetTexture.js +29 -8
  180. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  181. package/Materials/materialHelper.functions.d.ts +17 -1
  182. package/Materials/materialHelper.functions.js +76 -4
  183. package/Materials/materialHelper.functions.js.map +1 -1
  184. package/Materials/shaderMaterial.d.ts +5 -4
  185. package/Materials/shaderMaterial.js +28 -51
  186. package/Materials/shaderMaterial.js.map +1 -1
  187. package/Materials/standardMaterial.d.ts +6 -2
  188. package/Materials/standardMaterial.js +5 -2
  189. package/Materials/standardMaterial.js.map +1 -1
  190. package/Meshes/Builders/greasedLineBuilder.d.ts +1 -1
  191. package/Meshes/Builders/planeBuilder.js +2 -2
  192. package/Meshes/Builders/planeBuilder.js.map +1 -1
  193. package/Meshes/Compression/dracoCodec.d.ts +4 -4
  194. package/Meshes/Compression/dracoCodec.js.map +1 -1
  195. package/Meshes/Compression/dracoCompression.d.ts +1 -1
  196. package/Meshes/Compression/dracoCompression.js.map +1 -1
  197. package/Meshes/Compression/dracoCompressionWorker.d.ts +16 -30
  198. package/Meshes/Compression/dracoCompressionWorker.js +128 -22
  199. package/Meshes/Compression/dracoCompressionWorker.js.map +1 -1
  200. package/Meshes/Compression/dracoDecoder.d.ts +4 -9
  201. package/Meshes/Compression/dracoDecoder.js +5 -5
  202. package/Meshes/Compression/dracoDecoder.js.map +1 -1
  203. package/Meshes/Compression/dracoDecoder.types.d.ts +52 -0
  204. package/Meshes/Compression/dracoDecoder.types.js +2 -0
  205. package/Meshes/Compression/dracoDecoder.types.js.map +1 -0
  206. package/Meshes/Compression/dracoEncoder.d.ts +91 -0
  207. package/Meshes/Compression/dracoEncoder.js +239 -0
  208. package/Meshes/Compression/dracoEncoder.js.map +1 -0
  209. package/Meshes/Compression/dracoEncoder.types.d.ts +82 -0
  210. package/Meshes/Compression/dracoEncoder.types.js +2 -0
  211. package/Meshes/Compression/dracoEncoder.types.js.map +1 -0
  212. package/Meshes/Compression/index.d.ts +1 -0
  213. package/Meshes/Compression/index.js +1 -0
  214. package/Meshes/Compression/index.js.map +1 -1
  215. package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +92 -2
  216. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +308 -32
  217. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  218. package/Meshes/GreasedLine/greasedLineBaseMesh.js +4 -1
  219. package/Meshes/GreasedLine/greasedLineBaseMesh.js.map +1 -1
  220. package/Meshes/GreasedLine/greasedLineRibbonMesh.js +1 -1
  221. package/Meshes/GreasedLine/greasedLineRibbonMesh.js.map +1 -1
  222. package/Meshes/Node/Blocks/Textures/geometryTextureBlock.d.ts +1 -1
  223. package/Meshes/abstractMesh.d.ts +1 -2
  224. package/Meshes/abstractMesh.js +1 -2
  225. package/Meshes/abstractMesh.js.map +1 -1
  226. package/Meshes/linesMesh.js +2 -2
  227. package/Meshes/linesMesh.js.map +1 -1
  228. package/Meshes/mesh.d.ts +32 -5
  229. package/Meshes/mesh.js +56 -29
  230. package/Meshes/mesh.js.map +1 -1
  231. package/Meshes/subMesh.js +16 -3
  232. package/Meshes/subMesh.js.map +1 -1
  233. package/Meshes/transformNode.js +2 -0
  234. package/Meshes/transformNode.js.map +1 -1
  235. package/Misc/decorators.serialization.js +2 -0
  236. package/Misc/decorators.serialization.js.map +1 -1
  237. package/Misc/fileTools.js +14 -7
  238. package/Misc/fileTools.js.map +1 -1
  239. package/Misc/greasedLineTools.d.ts +1 -1
  240. package/Misc/logger.d.ts +2 -1
  241. package/Misc/logger.js +2 -1
  242. package/Misc/logger.js.map +1 -1
  243. package/Morph/morphTargetManager.d.ts +21 -0
  244. package/Morph/morphTargetManager.js +37 -2
  245. package/Morph/morphTargetManager.js.map +1 -1
  246. package/Particles/pointsCloudSystem.d.ts +3 -3
  247. package/Physics/v2/Plugins/havokPlugin.d.ts +2 -2
  248. package/PostProcesses/index.d.ts +1 -0
  249. package/PostProcesses/index.js +1 -0
  250. package/PostProcesses/index.js.map +1 -1
  251. package/PostProcesses/passPostProcess.d.ts +2 -3
  252. package/PostProcesses/passPostProcess.js +36 -48
  253. package/PostProcesses/passPostProcess.js.map +1 -1
  254. package/PostProcesses/thinPassPostProcess.d.ts +48 -0
  255. package/PostProcesses/thinPassPostProcess.js +113 -0
  256. package/PostProcesses/thinPassPostProcess.js.map +1 -0
  257. package/PostProcesses/volumetricLightScatteringPostProcess.js +15 -16
  258. package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
  259. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +1 -1
  260. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
  261. package/Rendering/depthRenderer.js +13 -15
  262. package/Rendering/depthRenderer.js.map +1 -1
  263. package/Rendering/geometryBufferRenderer.js +13 -15
  264. package/Rendering/geometryBufferRenderer.js.map +1 -1
  265. package/Rendering/iblCdfGenerator.d.ts +13 -5
  266. package/Rendering/iblCdfGenerator.js +67 -10
  267. package/Rendering/iblCdfGenerator.js.map +1 -1
  268. package/Rendering/objectRenderer.d.ts +9 -2
  269. package/Rendering/objectRenderer.js +44 -7
  270. package/Rendering/objectRenderer.js.map +1 -1
  271. package/Rendering/outlineRenderer.js +13 -15
  272. package/Rendering/outlineRenderer.js.map +1 -1
  273. package/Shaders/ShadersInclude/gaussianSplatting.js +6 -6
  274. package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
  275. package/Shaders/ShadersInclude/morphTargetsVertex.js +16 -4
  276. package/Shaders/ShadersInclude/morphTargetsVertex.js.map +1 -1
  277. package/Shaders/ShadersInclude/pbrBlockReflection.js +13 -8
  278. package/Shaders/ShadersInclude/pbrBlockReflection.js.map +1 -1
  279. package/Shaders/gaussianSplatting.vertex.js +2 -1
  280. package/Shaders/gaussianSplatting.vertex.js.map +1 -1
  281. package/Shaders/hdrIrradianceFiltering.fragment.d.ts +9 -0
  282. package/Shaders/hdrIrradianceFiltering.fragment.js +25 -0
  283. package/Shaders/hdrIrradianceFiltering.fragment.js.map +1 -0
  284. package/Shaders/hdrIrradianceFiltering.vertex.d.ts +5 -0
  285. package/Shaders/hdrIrradianceFiltering.vertex.js +15 -0
  286. package/Shaders/hdrIrradianceFiltering.vertex.js.map +1 -0
  287. package/Shaders/pbr.fragment.js +1 -3
  288. package/Shaders/pbr.fragment.js.map +1 -1
  289. package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js +17 -5
  290. package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js.map +1 -1
  291. package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js +13 -8
  292. package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js.map +1 -1
  293. package/ShadersWGSL/greasedLine.fragment.js +9 -3
  294. package/ShadersWGSL/greasedLine.fragment.js.map +1 -1
  295. package/ShadersWGSL/greasedLine.vertex.js +12 -2
  296. package/ShadersWGSL/greasedLine.vertex.js.map +1 -1
  297. package/ShadersWGSL/hdrIrradianceFiltering.fragment.d.ts +9 -0
  298. package/ShadersWGSL/hdrIrradianceFiltering.fragment.js +26 -0
  299. package/ShadersWGSL/hdrIrradianceFiltering.fragment.js.map +1 -0
  300. package/ShadersWGSL/hdrIrradianceFiltering.vertex.d.ts +5 -0
  301. package/ShadersWGSL/hdrIrradianceFiltering.vertex.js +16 -0
  302. package/ShadersWGSL/hdrIrradianceFiltering.vertex.js.map +1 -0
  303. package/ShadersWGSL/outline.fragment.js +1 -1
  304. package/ShadersWGSL/outline.fragment.js.map +1 -1
  305. package/ShadersWGSL/passCube.fragment.js +1 -1
  306. package/ShadersWGSL/passCube.fragment.js.map +1 -1
  307. package/ShadersWGSL/pbr.fragment.js +1 -3
  308. package/ShadersWGSL/pbr.fragment.js.map +1 -1
  309. package/XR/features/WebXRDepthSensing.d.ts +24 -2
  310. package/XR/features/WebXRDepthSensing.js +320 -26
  311. package/XR/features/WebXRDepthSensing.js.map +1 -1
  312. package/assetContainer.d.ts +43 -0
  313. package/assetContainer.js +67 -0
  314. package/assetContainer.js.map +1 -1
  315. package/package.json +1 -1
  316. package/scene.js +19 -8
  317. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"objectRendererTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Rendering/objectRendererTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\r\n FrameGraph,\r\n FrameGraphTextureHandle,\r\n Scene,\r\n Camera,\r\n FrameGraphObjectList,\r\n FrameGraphRenderContext,\r\n ObjectRendererOptions,\r\n Light,\r\n Nullable,\r\n Observer,\r\n FrameGraphShadowGeneratorTask,\r\n // eslint-disable-next-line import/no-internal-modules\r\n} from \"core/index\";\r\nimport { backbufferColorTextureHandle, backbufferDepthStencilTextureHandle } from \"../../frameGraphTypes\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { ObjectRenderer } from \"../../../Rendering/objectRenderer\";\r\nimport { FrameGraphCascadedShadowGeneratorTask } from \"./csmShadowGeneratorTask\";\r\n\r\n/**\r\n * Task used to render objects to a texture.\r\n */\r\nexport class FrameGraphObjectRendererTask extends FrameGraphTask {\r\n /**\r\n * The destination texture where the objects will be rendered.\r\n */\r\n public destinationTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The depth attachment texture where the objects will be rendered (optional).\r\n */\r\n public depthTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The dependencies of the task (optional).\r\n */\r\n public dependencies?: FrameGraphTextureHandle[] = [];\r\n\r\n /**\r\n * The shadow generators used to render the objects (optional).\r\n */\r\n public shadowGenerators?: FrameGraphShadowGeneratorTask[] = [];\r\n\r\n private _camera: Camera;\r\n\r\n /**\r\n * Gets or sets the camera used to render the objects.\r\n */\r\n public get camera() {\r\n return this._camera;\r\n }\r\n\r\n public set camera(camera: Camera) {\r\n this._camera = camera;\r\n this._renderer.activeCamera = this.camera;\r\n }\r\n\r\n /**\r\n * The list of objects to render.\r\n */\r\n public objectList: FrameGraphObjectList;\r\n\r\n /**\r\n * If depth testing should be enabled (default is true).\r\n */\r\n public depthTest = true;\r\n\r\n /**\r\n * If depth writing should be enabled (default is true).\r\n */\r\n public depthWrite = true;\r\n\r\n /**\r\n * If shadows should be disabled (default is false).\r\n */\r\n public disableShadows = false;\r\n\r\n /**\r\n * The output texture.\r\n * This texture will point to the same texture than the destinationTexture property if it is set.\r\n * Note, however, that the handle itself will be different!\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The output depth attachment texture.\r\n * This texture will point to the same texture than the depthTexture property if it is set.\r\n * Note, however, that the handle itself will be different!\r\n */\r\n public readonly outputDepthTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The object renderer used to render the objects.\r\n */\r\n public get objectRenderer() {\r\n return this._renderer;\r\n }\r\n\r\n public override get name() {\r\n return this._name;\r\n }\r\n\r\n public override set name(value: string) {\r\n this._name = value;\r\n if (this._renderer) {\r\n this._renderer.name = value;\r\n }\r\n }\r\n\r\n protected readonly _scene: Scene;\r\n protected readonly _renderer: ObjectRenderer;\r\n protected _textureWidth: number;\r\n protected _textureHeight: number;\r\n protected _onBeforeRenderObservable: Nullable<Observer<number>> = null;\r\n protected _onAfterRenderObservable: Nullable<Observer<number>> = null;\r\n\r\n /**\r\n * Constructs a new object renderer task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph the task belongs to.\r\n * @param scene The scene the frame graph is associated with.\r\n * @param options The options of the object renderer.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, scene: Scene, options?: ObjectRendererOptions) {\r\n super(name, frameGraph);\r\n\r\n this._scene = scene;\r\n this._renderer = new ObjectRenderer(name, scene, options);\r\n this.name = name;\r\n\r\n this._renderer.onBeforeRenderingManagerRenderObservable.add(() => {\r\n if (!this._renderer.options.doNotChangeAspectRatio) {\r\n scene.updateTransformMatrix(true);\r\n }\r\n });\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.outputDepthTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n public override isReady() {\r\n return this._renderer.isReadyForRendering(this._textureWidth, this._textureHeight);\r\n }\r\n\r\n public record(skipCreationOfDisabledPasses = false, additionalExecute?: (context: FrameGraphRenderContext) => void) {\r\n if (this.destinationTexture === undefined || this.objectList === undefined) {\r\n throw new Error(`FrameGraphObjectRendererTask ${this.name}: destinationTexture and objectList are required`);\r\n }\r\n\r\n const outputTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.destinationTexture);\r\n\r\n let depthEnabled = false;\r\n\r\n if (this.depthTexture !== undefined) {\r\n if (this.depthTexture === backbufferDepthStencilTextureHandle && this.destinationTexture !== backbufferColorTextureHandle) {\r\n throw new Error(\r\n `FrameGraphObjectRendererTask ${this.name}: the back buffer color texture is the only color texture allowed when the depth is the back buffer depth/stencil`\r\n );\r\n }\r\n if (this.depthTexture !== backbufferDepthStencilTextureHandle && this.destinationTexture === backbufferColorTextureHandle) {\r\n throw new Error(\r\n `FrameGraphObjectRendererTask ${this.name}: the back buffer depth/stencil texture is the only depth texture allowed when the destination is the back buffer color`\r\n );\r\n }\r\n\r\n const depthTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.depthTexture);\r\n if (depthTextureDescription.options.samples !== outputTextureDescription.options.samples) {\r\n throw new Error(`FrameGraphObjectRendererTask ${this.name}: the depth texture and the output texture must have the same number of samples`);\r\n }\r\n\r\n depthEnabled = true;\r\n }\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.destinationTexture);\r\n if (this.depthTexture !== undefined) {\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputDepthTexture, this.depthTexture);\r\n }\r\n\r\n this._textureWidth = outputTextureDescription.size.width;\r\n this._textureHeight = outputTextureDescription.size.height;\r\n\r\n this._setLightsForShadow();\r\n\r\n const pass = this._frameGraph.addRenderPass(this.name);\r\n\r\n pass.setRenderTarget(this.destinationTexture);\r\n pass.setRenderTargetDepth(this.depthTexture);\r\n pass.setExecuteFunc((context) => {\r\n this._renderer.renderList = this.objectList.meshes;\r\n this._renderer.particleSystemList = this.objectList.particleSystems;\r\n\r\n context.setDepthStates(this.depthTest && depthEnabled, this.depthWrite && depthEnabled);\r\n context.render(this._renderer, this._textureWidth, this._textureHeight);\r\n\r\n additionalExecute?.(context);\r\n });\r\n\r\n if (this.dependencies !== undefined) {\r\n for (const handle of this.dependencies) {\r\n pass.useTexture(handle);\r\n }\r\n }\r\n\r\n if (!skipCreationOfDisabledPasses) {\r\n const passDisabled = this._frameGraph.addRenderPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setRenderTarget(this.destinationTexture);\r\n passDisabled.setRenderTargetDepth(this.depthTexture);\r\n passDisabled.setExecuteFunc((_context) => {});\r\n\r\n if (this.dependencies !== undefined) {\r\n for (const handle of this.dependencies) {\r\n passDisabled.useTexture(handle);\r\n }\r\n }\r\n }\r\n }\r\n\r\n public override dispose(): void {\r\n this._renderer.dispose();\r\n super.dispose();\r\n }\r\n\r\n private _setLightsForShadow() {\r\n const lightsForShadow: Set<Light> = new Set();\r\n const shadowEnabled: Map<Light, boolean> = new Map();\r\n\r\n if (this.shadowGenerators) {\r\n for (const shadowGeneratorTask of this.shadowGenerators) {\r\n const shadowGenerator = shadowGeneratorTask.shadowGenerator;\r\n const light = shadowGenerator.getLight();\r\n if (light.isEnabled() && light.shadowEnabled) {\r\n lightsForShadow.add(light);\r\n if (FrameGraphCascadedShadowGeneratorTask.IsCascadedShadowGenerator(shadowGeneratorTask)) {\r\n light._shadowGenerators!.set(shadowGeneratorTask.camera, shadowGenerator);\r\n } else {\r\n light._shadowGenerators!.set(null, shadowGenerator);\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._renderer.onBeforeRenderObservable.remove(this._onBeforeRenderObservable);\r\n this._onBeforeRenderObservable = this._renderer.onBeforeRenderObservable.add(() => {\r\n for (let i = 0; i < this._scene.lights.length; i++) {\r\n const light = this._scene.lights[i];\r\n shadowEnabled.set(light, light.shadowEnabled);\r\n light.shadowEnabled = !this.disableShadows && lightsForShadow.has(light);\r\n }\r\n });\r\n\r\n this._renderer.onAfterRenderObservable.remove(this._onAfterRenderObservable);\r\n this._onAfterRenderObservable = this._renderer.onAfterRenderObservable.add(() => {\r\n for (let i = 0; i < this._scene.lights.length; i++) {\r\n const light = this._scene.lights[i];\r\n light.shadowEnabled = shadowEnabled.get(light)!;\r\n }\r\n });\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"objectRendererTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Rendering/objectRendererTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\r\n FrameGraph,\r\n FrameGraphTextureHandle,\r\n Scene,\r\n Camera,\r\n FrameGraphObjectList,\r\n FrameGraphRenderContext,\r\n ObjectRendererOptions,\r\n Light,\r\n Nullable,\r\n Observer,\r\n FrameGraphShadowGeneratorTask,\r\n // eslint-disable-next-line import/no-internal-modules\r\n} from \"core/index\";\r\nimport { backbufferColorTextureHandle, backbufferDepthStencilTextureHandle } from \"../../frameGraphTypes\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { ObjectRenderer } from \"../../../Rendering/objectRenderer\";\r\nimport { FrameGraphCascadedShadowGeneratorTask } from \"./csmShadowGeneratorTask\";\r\n\r\n/**\r\n * Task used to render objects to a texture.\r\n */\r\nexport class FrameGraphObjectRendererTask extends FrameGraphTask {\r\n /**\r\n * The destination texture where the objects will be rendered.\r\n */\r\n public destinationTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The depth attachment texture where the objects will be rendered (optional).\r\n */\r\n public depthTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The shadow generators used to render the objects (optional).\r\n */\r\n public shadowGenerators?: FrameGraphShadowGeneratorTask[] = [];\r\n\r\n private _camera: Camera;\r\n\r\n /**\r\n * Gets or sets the camera used to render the objects.\r\n */\r\n public get camera() {\r\n return this._camera;\r\n }\r\n\r\n public set camera(camera: Camera) {\r\n this._camera = camera;\r\n this._renderer.activeCamera = this.camera;\r\n }\r\n\r\n /**\r\n * The list of objects to render.\r\n */\r\n public objectList: FrameGraphObjectList;\r\n\r\n /**\r\n * If depth testing should be enabled (default is true).\r\n */\r\n public depthTest = true;\r\n\r\n /**\r\n * If depth writing should be enabled (default is true).\r\n */\r\n public depthWrite = true;\r\n\r\n /**\r\n * If shadows should be disabled (default is false).\r\n */\r\n public disableShadows = false;\r\n\r\n /**\r\n * The output texture.\r\n * This texture will point to the same texture than the destinationTexture property if it is set.\r\n * Note, however, that the handle itself will be different!\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The output depth attachment texture.\r\n * This texture will point to the same texture than the depthTexture property if it is set.\r\n * Note, however, that the handle itself will be different!\r\n */\r\n public readonly outputDepthTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The object renderer used to render the objects.\r\n */\r\n public get objectRenderer() {\r\n return this._renderer;\r\n }\r\n\r\n public override get name() {\r\n return this._name;\r\n }\r\n\r\n public override set name(value: string) {\r\n this._name = value;\r\n if (this._renderer) {\r\n this._renderer.name = value;\r\n }\r\n }\r\n\r\n protected readonly _scene: Scene;\r\n protected readonly _renderer: ObjectRenderer;\r\n protected _textureWidth: number;\r\n protected _textureHeight: number;\r\n protected _onBeforeRenderObservable: Nullable<Observer<number>> = null;\r\n protected _onAfterRenderObservable: Nullable<Observer<number>> = null;\r\n protected _externalObjectRenderer = false;\r\n\r\n /**\r\n * Constructs a new object renderer task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph the task belongs to.\r\n * @param scene The scene the frame graph is associated with.\r\n * @param options The options of the object renderer.\r\n * @param existingObjectRenderer An existing object renderer to use (optional). If provided, the options parameter will be ignored.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, scene: Scene, options?: ObjectRendererOptions, existingObjectRenderer?: ObjectRenderer) {\r\n super(name, frameGraph);\r\n\r\n this._scene = scene;\r\n this._externalObjectRenderer = !!existingObjectRenderer;\r\n this._renderer = existingObjectRenderer ?? new ObjectRenderer(name, scene, options);\r\n this.name = name;\r\n\r\n if (!this._externalObjectRenderer) {\r\n this._renderer.onBeforeRenderingManagerRenderObservable.add(() => {\r\n if (!this._renderer.options.doNotChangeAspectRatio) {\r\n scene.updateTransformMatrix(true);\r\n }\r\n });\r\n }\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n this.outputDepthTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n public override isReady() {\r\n return this._renderer.isReadyForRendering(this._textureWidth, this._textureHeight);\r\n }\r\n\r\n public record(skipCreationOfDisabledPasses = false, additionalExecute?: (context: FrameGraphRenderContext) => void) {\r\n if (this.destinationTexture === undefined || this.objectList === undefined) {\r\n throw new Error(`FrameGraphObjectRendererTask ${this.name}: destinationTexture and objectList are required`);\r\n }\r\n\r\n // Make sure the renderList / particleSystemList are set when FrameGraphObjectRendererTask.isReady() is called!\r\n this._renderer.renderList = this.objectList.meshes;\r\n this._renderer.particleSystemList = this.objectList.particleSystems;\r\n\r\n const outputTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.destinationTexture);\r\n\r\n let depthEnabled = false;\r\n\r\n if (this.depthTexture !== undefined) {\r\n if (this.depthTexture === backbufferDepthStencilTextureHandle && this.destinationTexture !== backbufferColorTextureHandle) {\r\n throw new Error(\r\n `FrameGraphObjectRendererTask ${this.name}: the back buffer color texture is the only color texture allowed when the depth is the back buffer depth/stencil`\r\n );\r\n }\r\n if (this.depthTexture !== backbufferDepthStencilTextureHandle && this.destinationTexture === backbufferColorTextureHandle) {\r\n throw new Error(\r\n `FrameGraphObjectRendererTask ${this.name}: the back buffer depth/stencil texture is the only depth texture allowed when the destination is the back buffer color`\r\n );\r\n }\r\n\r\n const depthTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.depthTexture);\r\n if (depthTextureDescription.options.samples !== outputTextureDescription.options.samples) {\r\n throw new Error(`FrameGraphObjectRendererTask ${this.name}: the depth texture and the output texture must have the same number of samples`);\r\n }\r\n\r\n depthEnabled = true;\r\n }\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.destinationTexture);\r\n if (this.depthTexture !== undefined) {\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputDepthTexture, this.depthTexture);\r\n }\r\n\r\n this._textureWidth = outputTextureDescription.size.width;\r\n this._textureHeight = outputTextureDescription.size.height;\r\n\r\n this._setLightsForShadow();\r\n\r\n const pass = this._frameGraph.addRenderPass(this.name);\r\n\r\n pass.setRenderTarget(this.destinationTexture);\r\n pass.setRenderTargetDepth(this.depthTexture);\r\n pass.setExecuteFunc((context) => {\r\n this._renderer.renderList = this.objectList.meshes;\r\n this._renderer.particleSystemList = this.objectList.particleSystems;\r\n\r\n context.setDepthStates(this.depthTest && depthEnabled, this.depthWrite && depthEnabled);\r\n context.render(this._renderer, this._textureWidth, this._textureHeight);\r\n\r\n additionalExecute?.(context);\r\n });\r\n\r\n if (!skipCreationOfDisabledPasses) {\r\n const passDisabled = this._frameGraph.addRenderPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setRenderTarget(this.destinationTexture);\r\n passDisabled.setRenderTargetDepth(this.depthTexture);\r\n passDisabled.setExecuteFunc((_context) => {});\r\n }\r\n }\r\n\r\n public override dispose(): void {\r\n this._renderer.onBeforeRenderObservable.remove(this._onBeforeRenderObservable);\r\n this._renderer.onAfterRenderObservable.remove(this._onAfterRenderObservable);\r\n if (!this._externalObjectRenderer) {\r\n this._renderer.dispose();\r\n }\r\n super.dispose();\r\n }\r\n\r\n protected _setLightsForShadow() {\r\n const lightsForShadow: Set<Light> = new Set();\r\n const shadowEnabled: Map<Light, boolean> = new Map();\r\n\r\n if (this.shadowGenerators) {\r\n for (const shadowGeneratorTask of this.shadowGenerators) {\r\n const shadowGenerator = shadowGeneratorTask.shadowGenerator;\r\n const light = shadowGenerator.getLight();\r\n if (light.isEnabled() && light.shadowEnabled) {\r\n lightsForShadow.add(light);\r\n if (FrameGraphCascadedShadowGeneratorTask.IsCascadedShadowGenerator(shadowGeneratorTask)) {\r\n light._shadowGenerators!.set(shadowGeneratorTask.camera, shadowGenerator);\r\n } else {\r\n light._shadowGenerators!.set(null, shadowGenerator);\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._renderer.onBeforeRenderObservable.remove(this._onBeforeRenderObservable);\r\n this._onBeforeRenderObservable = this._renderer.onBeforeRenderObservable.add(() => {\r\n for (let i = 0; i < this._scene.lights.length; i++) {\r\n const light = this._scene.lights[i];\r\n shadowEnabled.set(light, light.shadowEnabled);\r\n light.shadowEnabled = !this.disableShadows && lightsForShadow.has(light);\r\n }\r\n });\r\n\r\n this._renderer.onAfterRenderObservable.remove(this._onAfterRenderObservable);\r\n this._onAfterRenderObservable = this._renderer.onAfterRenderObservable.add(() => {\r\n for (let i = 0; i < this._scene.lights.length; i++) {\r\n const light = this._scene.lights[i];\r\n light.shadowEnabled = shadowEnabled.get(light)!;\r\n }\r\n });\r\n }\r\n}\r\n"]}
@@ -1,4 +1,4 @@
1
- import type { Scene, FrameGraph, FrameGraphObjectList, IShadowLight, FrameGraphTextureHandle } from "../../../index.js";
1
+ import type { Scene, FrameGraph, FrameGraphObjectList, IShadowLight, FrameGraphTextureHandle, Camera } from "../../../index.js";
2
2
  import { FrameGraphTask } from "../../frameGraphTask";
3
3
  import { ShadowGenerator } from "../../../Lights/Shadows/shadowGenerator";
4
4
  /**
@@ -15,6 +15,12 @@ export declare class FrameGraphShadowGeneratorTask extends FrameGraphTask {
15
15
  */
16
16
  get light(): IShadowLight;
17
17
  set light(value: IShadowLight);
18
+ private _camera;
19
+ /**
20
+ * Gets or sets the camera used to generate the shadow generator.
21
+ */
22
+ get camera(): Camera;
23
+ set camera(camera: Camera);
18
24
  private _mapSize;
19
25
  /**
20
26
  * The size of the shadow map.
@@ -17,6 +17,16 @@ export class FrameGraphShadowGeneratorTask extends FrameGraphTask {
17
17
  this._light = value;
18
18
  this._setupShadowGenerator();
19
19
  }
20
+ /**
21
+ * Gets or sets the camera used to generate the shadow generator.
22
+ */
23
+ get camera() {
24
+ return this._camera;
25
+ }
26
+ set camera(camera) {
27
+ this._camera = camera;
28
+ this._setupShadowGenerator();
29
+ }
20
30
  /**
21
31
  * The size of the shadow map.
22
32
  */
@@ -196,7 +206,9 @@ export class FrameGraphShadowGeneratorTask extends FrameGraphTask {
196
206
  shadowGenerator.useOpacityTextureForTransparentShadow = this._useOpacityTextureForTransparentShadow;
197
207
  shadowGenerator.filter = this._filter;
198
208
  shadowGenerator.filteringQuality = this._filteringQuality;
199
- shadowGenerator.getShadowMap()._disableEngineStages = true;
209
+ const shadowMap = shadowGenerator.getShadowMap();
210
+ shadowMap._disableEngineStages = true;
211
+ shadowMap.cameraForLOD = this._camera;
200
212
  this.shadowGenerator = shadowGenerator;
201
213
  }
202
214
  }
@@ -227,11 +239,15 @@ export class FrameGraphShadowGeneratorTask extends FrameGraphTask {
227
239
  this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();
228
240
  }
229
241
  record() {
230
- if (this.light === undefined || this.objectList === undefined) {
231
- throw new Error(`FrameGraphShadowGeneratorTask ${this.name}: light and objectList are required`);
242
+ if (this.light === undefined || this.objectList === undefined || this.camera === undefined) {
243
+ throw new Error(`FrameGraphShadowGeneratorTask ${this.name}: light, objectList and camera are required`);
232
244
  }
233
- const shadowMap = this._frameGraph.textureManager.importTexture(`${this.name} shadowmap`, this._shadowGenerator.getShadowMap().getInternalTexture());
234
- this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, shadowMap);
245
+ // Make sure the renderList / particleSystemList are set when FrameGraphShadowGeneratorTask.isReady() is called!
246
+ const shadowMap = this._shadowGenerator.getShadowMap();
247
+ shadowMap.renderList = this.objectList.meshes;
248
+ shadowMap.particleSystemList = this.objectList.particleSystems;
249
+ const shadowTextureHandle = this._frameGraph.textureManager.importTexture(`${this.name} shadowmap`, this._shadowGenerator.getShadowMap().getInternalTexture());
250
+ this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, shadowTextureHandle);
235
251
  const pass = this._frameGraph.addPass(this.name);
236
252
  pass.setExecuteFunc((_context) => {
237
253
  if (!this.light.isEnabled() || !this.light.shadowEnabled) {
@@ -1 +1 @@
1
- {"version":3,"file":"shadowGeneratorTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Rendering/shadowGeneratorTask.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAE1E;;GAEG;AACH,MAAM,OAAO,6BAA8B,SAAQ,cAAc;IAO7D;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,IAAW,KAAK,CAAC,KAAmB;QAChC,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YACxB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACjC,CAAC;IAGD;;OAEG;IACH,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,IAAW,OAAO,CAAC,KAAa;QAC5B,IAAI,KAAK,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1B,OAAO;QACX,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACjC,CAAC;IAGD;;OAEG;IACH,IAAW,qBAAqB;QAC5B,OAAO,IAAI,CAAC,sBAAsB,CAAC;IACvC,CAAC;IAED,IAAW,qBAAqB,CAAC,KAAc;QAC3C,IAAI,KAAK,KAAK,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACxC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;QACpC,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACjC,CAAC;IAGD;;OAEG;IACH,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IAED,IAAW,mBAAmB,CAAC,KAAc;QACzC,IAAI,KAAK,KAAK,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACtC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QAClC,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACjC,CAAC;IAGD;;OAEG;IACH,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,IAAW,IAAI,CAAC,KAAa;QACzB,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACvB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,CAAC,IAAI,GAAG,KAAK,CAAC;QACvC,CAAC;IACL,CAAC;IAGD;;OAEG;IACH,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,IAAW,UAAU,CAAC,KAAa;QAC/B,IAAI,KAAK,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;YAC7B,OAAO;QACX,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,CAAC,UAAU,GAAG,KAAK,CAAC;QAC7C,CAAC;IACL,CAAC;IAGD;;OAEG;IACH,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,IAAW,QAAQ,CAAC,KAAa;QAC7B,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YAC3B,OAAO;QACX,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC3C,CAAC;IACL,CAAC;IAGD;;OAEG;IACH,IAAW,kBAAkB;QACzB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IACpC,CAAC;IAED,IAAW,kBAAkB,CAAC,KAAc;QACxC,IAAI,KAAK,KAAK,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACrC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,GAAG,KAAK,CAAC;QACrD,CAAC;IACL,CAAC;IAGD;;OAEG;IACH,IAAW,2BAA2B;QAClC,OAAO,IAAI,CAAC,4BAA4B,CAAC;IAC7C,CAAC;IAED,IAAW,2BAA2B,CAAC,KAAc;QACjD,IAAI,KAAK,KAAK,IAAI,CAAC,4BAA4B,EAAE,CAAC;YAC9C,OAAO;QACX,CAAC;QAED,IAAI,CAAC,4BAA4B,GAAG,KAAK,CAAC;QAC1C,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,GAAG,KAAK,CAAC;QAC9D,CAAC;IACL,CAAC;IAGD;;OAEG;IACH,IAAW,qCAAqC;QAC5C,OAAO,IAAI,CAAC,sCAAsC,CAAC;IACvD,CAAC;IAED,IAAW,qCAAqC,CAAC,KAAc;QAC3D,IAAI,KAAK,KAAK,IAAI,CAAC,sCAAsC,EAAE,CAAC;YACxD,OAAO;QACX,CAAC;QAED,IAAI,CAAC,sCAAsC,GAAG,KAAK,CAAC;QACpD,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,CAAC,qCAAqC,GAAG,KAAK,CAAC;QACxE,CAAC;IACL,CAAC;IAGD;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,IAAW,MAAM,CAAC,KAAa;QAC3B,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,KAAK,CAAC;QACzC,CAAC;IACL,CAAC;IAGD;;OAEG;IACH,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAED,IAAW,gBAAgB,CAAC,KAAa;QACrC,IAAI,KAAK,KAAK,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACnC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,GAAG,KAAK,CAAC;QACnD,CAAC;IACL,CAAC;IAcS,sBAAsB;QAC5B,IAAI,CAAC,gBAAgB,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,sBAAsB,EAAE,SAAS,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAC/I,CAAC;IAES,qBAAqB;QAC3B,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAClC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9B,MAAM,eAAe,GAAG,IAAI,CAAC,gBAA+C,CAAC;YAC7E,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;gBAChC,OAAO;YACX,CAAC;YACD,eAAe,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;YAClC,eAAe,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;YAC9C,eAAe,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;YAC1C,eAAe,CAAC,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC;YAC9D,eAAe,CAAC,2BAA2B,GAAG,IAAI,CAAC,4BAA4B,CAAC;YAChF,eAAe,CAAC,qCAAqC,GAAG,IAAI,CAAC,sCAAsC,CAAC;YACpG,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;YACtC,eAAe,CAAC,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC;YAC1D,eAAe,CAAC,YAAY,EAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC;YAC3D,IAAI,CAAC,eAA+D,GAAG,eAAe,CAAC;QAC5F,CAAC;IACL,CAAC;IAEe,OAAO;QACnB,OAAO,CAAC,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,EAAE,mBAAmB,EAAE,CAAC;IACpG,CAAC;IAKD;;;;;OAKG;IACH,YAAY,IAAY,EAAE,UAAsB,EAAE,KAAY;QAC1D,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QA/PpB,aAAQ,GAAG,IAAI,CAAC;QAiBhB,2BAAsB,GAAG,KAAK,CAAC;QAiB/B,yBAAoB,GAAG,IAAI,CAAC;QAiB5B,UAAK,GAAG,IAAI,CAAC;QAmBb,gBAAW,GAAG,CAAC,CAAC;QAmBhB,cAAS,GAAG,CAAC,CAAC;QAmBd,wBAAmB,GAAG,KAAK,CAAC;QAmB5B,iCAA4B,GAAG,KAAK,CAAC;QAmBrC,2CAAsC,GAAG,KAAK,CAAC;QAmB/C,YAAO,GAAG,eAAe,CAAC,UAAU,CAAC;QAmBrC,sBAAiB,GAAG,eAAe,CAAC,YAAY,CAAC;QAyErD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAEpB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC;IAChF,CAAC;IAEM,MAAM;QACT,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,CAAC,IAAI,qCAAqC,CAAC,CAAC;QACrG,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,IAAI,YAAY,EAAE,IAAI,CAAC,gBAAiB,CAAC,YAAY,EAAG,CAAC,kBAAkB,EAAG,CAAC,CAAC;QAExJ,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;QAErF,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEjD,IAAI,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC7B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;gBACvD,OAAO;YACX,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAiB,CAAC,YAAY,EAAG,CAAC;YAEzD,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAC9C,SAAS,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;YAE/D,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC;YAE9D,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;YAElC,SAAS,CAAC,MAAM,EAAE,CAAC;YAEnB,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,KAAK,mBAAmB,EAAE,CAAC;gBAC5D,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBACvB,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC;gBAC7C,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;gBACtD,CAAC;YACL,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,WAAW,EAAE,IAAI,CAAC,CAAC;QAE7E,YAAY,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,EAAE,GAAE,CAAC,CAAC,CAAC;IAClD,CAAC;IAEe,OAAO;QACnB,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;IACtC,CAAC;CACJ","sourcesContent":["// eslint-disable-next-line import/no-internal-modules\r\nimport type { Scene, FrameGraph, FrameGraphObjectList, IShadowLight, WritableObject, AbstractEngine, FrameGraphTextureHandle } from \"core/index\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { ShadowGenerator } from \"../../../Lights/Shadows/shadowGenerator\";\r\n\r\n/**\r\n * Task used to generate shadows from a list of objects.\r\n */\r\nexport class FrameGraphShadowGeneratorTask extends FrameGraphTask {\r\n /**\r\n * The object list that generates shadows.\r\n */\r\n public objectList: FrameGraphObjectList;\r\n\r\n private _light: IShadowLight;\r\n /**\r\n * The light to generate shadows from.\r\n */\r\n public get light(): IShadowLight {\r\n return this._light;\r\n }\r\n\r\n public set light(value: IShadowLight) {\r\n if (value === this._light) {\r\n return;\r\n }\r\n\r\n this._light = value;\r\n this._setupShadowGenerator();\r\n }\r\n\r\n private _mapSize = 1024;\r\n /**\r\n * The size of the shadow map.\r\n */\r\n public get mapSize() {\r\n return this._mapSize;\r\n }\r\n\r\n public set mapSize(value: number) {\r\n if (value === this._mapSize) {\r\n return;\r\n }\r\n\r\n this._mapSize = value;\r\n this._setupShadowGenerator();\r\n }\r\n\r\n private _useFloat32TextureType = false;\r\n /**\r\n * If true, the shadow map will use a 32 bits float texture type (else, 16 bits float is used if supported).\r\n */\r\n public get useFloat32TextureType() {\r\n return this._useFloat32TextureType;\r\n }\r\n\r\n public set useFloat32TextureType(value: boolean) {\r\n if (value === this._useFloat32TextureType) {\r\n return;\r\n }\r\n\r\n this._useFloat32TextureType = value;\r\n this._setupShadowGenerator();\r\n }\r\n\r\n private _useRedTextureFormat = true;\r\n /**\r\n * If true, the shadow map will use a red texture format (else, a RGBA format is used).\r\n */\r\n public get useRedTextureFormat() {\r\n return this._useRedTextureFormat;\r\n }\r\n\r\n public set useRedTextureFormat(value: boolean) {\r\n if (value === this._useRedTextureFormat) {\r\n return;\r\n }\r\n\r\n this._useRedTextureFormat = value;\r\n this._setupShadowGenerator();\r\n }\r\n\r\n private _bias = 0.01;\r\n /**\r\n * The bias to apply to the shadow map.\r\n */\r\n public get bias() {\r\n return this._bias;\r\n }\r\n\r\n public set bias(value: number) {\r\n if (value === this._bias) {\r\n return;\r\n }\r\n\r\n this._bias = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.bias = value;\r\n }\r\n }\r\n\r\n private _normalBias = 0;\r\n /**\r\n * The normal bias to apply to the shadow map.\r\n */\r\n public get normalBias() {\r\n return this._normalBias;\r\n }\r\n\r\n public set normalBias(value: number) {\r\n if (value === this._normalBias) {\r\n return;\r\n }\r\n\r\n this._normalBias = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.normalBias = value;\r\n }\r\n }\r\n\r\n private _darkness = 0;\r\n /**\r\n * The darkness of the shadows.\r\n */\r\n public get darkness() {\r\n return this._darkness;\r\n }\r\n\r\n public set darkness(value: number) {\r\n if (value === this._darkness) {\r\n return;\r\n }\r\n\r\n this._darkness = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.darkness = value;\r\n }\r\n }\r\n\r\n private _transparencyShadow = false;\r\n /**\r\n * Gets or sets the ability to have transparent shadow\r\n */\r\n public get transparencyShadow() {\r\n return this._transparencyShadow;\r\n }\r\n\r\n public set transparencyShadow(value: boolean) {\r\n if (value === this._transparencyShadow) {\r\n return;\r\n }\r\n\r\n this._transparencyShadow = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.transparencyShadow = value;\r\n }\r\n }\r\n\r\n private _enableSoftTransparentShadow = false;\r\n /**\r\n * Enables or disables shadows with varying strength based on the transparency\r\n */\r\n public get enableSoftTransparentShadow() {\r\n return this._enableSoftTransparentShadow;\r\n }\r\n\r\n public set enableSoftTransparentShadow(value: boolean) {\r\n if (value === this._enableSoftTransparentShadow) {\r\n return;\r\n }\r\n\r\n this._enableSoftTransparentShadow = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.enableSoftTransparentShadow = value;\r\n }\r\n }\r\n\r\n private _useOpacityTextureForTransparentShadow = false;\r\n /**\r\n * If this is true, use the opacity texture's alpha channel for transparent shadows instead of the diffuse one\r\n */\r\n public get useOpacityTextureForTransparentShadow() {\r\n return this._useOpacityTextureForTransparentShadow;\r\n }\r\n\r\n public set useOpacityTextureForTransparentShadow(value: boolean) {\r\n if (value === this._useOpacityTextureForTransparentShadow) {\r\n return;\r\n }\r\n\r\n this._useOpacityTextureForTransparentShadow = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.useOpacityTextureForTransparentShadow = value;\r\n }\r\n }\r\n\r\n private _filter = ShadowGenerator.FILTER_PCF;\r\n /**\r\n * The filter to apply to the shadow map.\r\n */\r\n public get filter() {\r\n return this._filter;\r\n }\r\n\r\n public set filter(value: number) {\r\n if (value === this._filter) {\r\n return;\r\n }\r\n\r\n this._filter = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.filter = value;\r\n }\r\n }\r\n\r\n private _filteringQuality = ShadowGenerator.QUALITY_HIGH;\r\n /**\r\n * The filtering quality to apply to the filter.\r\n */\r\n public get filteringQuality() {\r\n return this._filteringQuality;\r\n }\r\n\r\n public set filteringQuality(value: number) {\r\n if (value === this._filteringQuality) {\r\n return;\r\n }\r\n\r\n this._filteringQuality = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.filteringQuality = value;\r\n }\r\n }\r\n\r\n /**\r\n * The shadow generator.\r\n */\r\n public readonly shadowGenerator: ShadowGenerator;\r\n\r\n /**\r\n * The shadow map texture.\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n protected _shadowGenerator: ShadowGenerator | undefined;\r\n\r\n protected _createShadowGenerator() {\r\n this._shadowGenerator = new ShadowGenerator(this._mapSize, this._light, this._useFloat32TextureType, undefined, this._useRedTextureFormat);\r\n }\r\n\r\n protected _setupShadowGenerator() {\r\n this._shadowGenerator?.dispose();\r\n this._shadowGenerator = undefined;\r\n if (this._light !== undefined) {\r\n this._createShadowGenerator();\r\n const shadowGenerator = this._shadowGenerator as ShadowGenerator | undefined;\r\n if (shadowGenerator === undefined) {\r\n return;\r\n }\r\n shadowGenerator.bias = this._bias;\r\n shadowGenerator.normalBias = this._normalBias;\r\n shadowGenerator.darkness = this._darkness;\r\n shadowGenerator.transparencyShadow = this._transparencyShadow;\r\n shadowGenerator.enableSoftTransparentShadow = this._enableSoftTransparentShadow;\r\n shadowGenerator.useOpacityTextureForTransparentShadow = this._useOpacityTextureForTransparentShadow;\r\n shadowGenerator.filter = this._filter;\r\n shadowGenerator.filteringQuality = this._filteringQuality;\r\n shadowGenerator.getShadowMap()!._disableEngineStages = true;\r\n (this.shadowGenerator as WritableObject<ShadowGenerator | undefined>) = shadowGenerator;\r\n }\r\n }\r\n\r\n public override isReady(): boolean {\r\n return !!this._shadowGenerator && !!this._shadowGenerator.getShadowMap()?.isReadyForRendering();\r\n }\r\n\r\n private _engine: AbstractEngine;\r\n private _scene: Scene;\r\n\r\n /**\r\n * Creates a new shadow generator task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph the task belongs to.\r\n * @param scene The scene to create the shadow generator for.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, scene: Scene) {\r\n super(name, frameGraph);\r\n\r\n this._engine = scene.getEngine();\r\n this._scene = scene;\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n public record() {\r\n if (this.light === undefined || this.objectList === undefined) {\r\n throw new Error(`FrameGraphShadowGeneratorTask ${this.name}: light and objectList are required`);\r\n }\r\n\r\n const shadowMap = this._frameGraph.textureManager.importTexture(`${this.name} shadowmap`, this._shadowGenerator!.getShadowMap()!.getInternalTexture()!);\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, shadowMap);\r\n\r\n const pass = this._frameGraph.addPass(this.name);\r\n\r\n pass.setExecuteFunc((_context) => {\r\n if (!this.light.isEnabled() || !this.light.shadowEnabled) {\r\n return;\r\n }\r\n\r\n const shadowMap = this._shadowGenerator!.getShadowMap()!;\r\n\r\n shadowMap.renderList = this.objectList.meshes;\r\n shadowMap.particleSystemList = this.objectList.particleSystems;\r\n\r\n const currentRenderTarget = this._engine._currentRenderTarget;\r\n\r\n this._scene.incrementRenderId();\r\n this._scene.resetCachedMaterial();\r\n\r\n shadowMap.render();\r\n\r\n if (this._engine._currentRenderTarget !== currentRenderTarget) {\r\n if (!currentRenderTarget) {\r\n this._engine.restoreDefaultFramebuffer();\r\n } else {\r\n this._engine.bindFramebuffer(currentRenderTarget);\r\n }\r\n }\r\n });\r\n\r\n const passDisabled = this._frameGraph.addPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setExecuteFunc((_context) => {});\r\n }\r\n\r\n public override dispose() {\r\n this._shadowGenerator?.dispose();\r\n this._shadowGenerator = undefined;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"shadowGeneratorTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Rendering/shadowGeneratorTask.ts"],"names":[],"mappings":"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","sourcesContent":["// eslint-disable-next-line import/no-internal-modules\r\nimport type { Scene, FrameGraph, FrameGraphObjectList, IShadowLight, WritableObject, AbstractEngine, FrameGraphTextureHandle, Camera } from \"core/index\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { ShadowGenerator } from \"../../../Lights/Shadows/shadowGenerator\";\r\n\r\n/**\r\n * Task used to generate shadows from a list of objects.\r\n */\r\nexport class FrameGraphShadowGeneratorTask extends FrameGraphTask {\r\n /**\r\n * The object list that generates shadows.\r\n */\r\n public objectList: FrameGraphObjectList;\r\n\r\n private _light: IShadowLight;\r\n /**\r\n * The light to generate shadows from.\r\n */\r\n public get light(): IShadowLight {\r\n return this._light;\r\n }\r\n\r\n public set light(value: IShadowLight) {\r\n if (value === this._light) {\r\n return;\r\n }\r\n\r\n this._light = value;\r\n this._setupShadowGenerator();\r\n }\r\n\r\n private _camera: Camera;\r\n /**\r\n * Gets or sets the camera used to generate the shadow generator.\r\n */\r\n public get camera() {\r\n return this._camera;\r\n }\r\n\r\n public set camera(camera: Camera) {\r\n this._camera = camera;\r\n this._setupShadowGenerator();\r\n }\r\n\r\n private _mapSize = 1024;\r\n /**\r\n * The size of the shadow map.\r\n */\r\n public get mapSize() {\r\n return this._mapSize;\r\n }\r\n\r\n public set mapSize(value: number) {\r\n if (value === this._mapSize) {\r\n return;\r\n }\r\n\r\n this._mapSize = value;\r\n this._setupShadowGenerator();\r\n }\r\n\r\n private _useFloat32TextureType = false;\r\n /**\r\n * If true, the shadow map will use a 32 bits float texture type (else, 16 bits float is used if supported).\r\n */\r\n public get useFloat32TextureType() {\r\n return this._useFloat32TextureType;\r\n }\r\n\r\n public set useFloat32TextureType(value: boolean) {\r\n if (value === this._useFloat32TextureType) {\r\n return;\r\n }\r\n\r\n this._useFloat32TextureType = value;\r\n this._setupShadowGenerator();\r\n }\r\n\r\n private _useRedTextureFormat = true;\r\n /**\r\n * If true, the shadow map will use a red texture format (else, a RGBA format is used).\r\n */\r\n public get useRedTextureFormat() {\r\n return this._useRedTextureFormat;\r\n }\r\n\r\n public set useRedTextureFormat(value: boolean) {\r\n if (value === this._useRedTextureFormat) {\r\n return;\r\n }\r\n\r\n this._useRedTextureFormat = value;\r\n this._setupShadowGenerator();\r\n }\r\n\r\n private _bias = 0.01;\r\n /**\r\n * The bias to apply to the shadow map.\r\n */\r\n public get bias() {\r\n return this._bias;\r\n }\r\n\r\n public set bias(value: number) {\r\n if (value === this._bias) {\r\n return;\r\n }\r\n\r\n this._bias = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.bias = value;\r\n }\r\n }\r\n\r\n private _normalBias = 0;\r\n /**\r\n * The normal bias to apply to the shadow map.\r\n */\r\n public get normalBias() {\r\n return this._normalBias;\r\n }\r\n\r\n public set normalBias(value: number) {\r\n if (value === this._normalBias) {\r\n return;\r\n }\r\n\r\n this._normalBias = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.normalBias = value;\r\n }\r\n }\r\n\r\n private _darkness = 0;\r\n /**\r\n * The darkness of the shadows.\r\n */\r\n public get darkness() {\r\n return this._darkness;\r\n }\r\n\r\n public set darkness(value: number) {\r\n if (value === this._darkness) {\r\n return;\r\n }\r\n\r\n this._darkness = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.darkness = value;\r\n }\r\n }\r\n\r\n private _transparencyShadow = false;\r\n /**\r\n * Gets or sets the ability to have transparent shadow\r\n */\r\n public get transparencyShadow() {\r\n return this._transparencyShadow;\r\n }\r\n\r\n public set transparencyShadow(value: boolean) {\r\n if (value === this._transparencyShadow) {\r\n return;\r\n }\r\n\r\n this._transparencyShadow = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.transparencyShadow = value;\r\n }\r\n }\r\n\r\n private _enableSoftTransparentShadow = false;\r\n /**\r\n * Enables or disables shadows with varying strength based on the transparency\r\n */\r\n public get enableSoftTransparentShadow() {\r\n return this._enableSoftTransparentShadow;\r\n }\r\n\r\n public set enableSoftTransparentShadow(value: boolean) {\r\n if (value === this._enableSoftTransparentShadow) {\r\n return;\r\n }\r\n\r\n this._enableSoftTransparentShadow = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.enableSoftTransparentShadow = value;\r\n }\r\n }\r\n\r\n private _useOpacityTextureForTransparentShadow = false;\r\n /**\r\n * If this is true, use the opacity texture's alpha channel for transparent shadows instead of the diffuse one\r\n */\r\n public get useOpacityTextureForTransparentShadow() {\r\n return this._useOpacityTextureForTransparentShadow;\r\n }\r\n\r\n public set useOpacityTextureForTransparentShadow(value: boolean) {\r\n if (value === this._useOpacityTextureForTransparentShadow) {\r\n return;\r\n }\r\n\r\n this._useOpacityTextureForTransparentShadow = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.useOpacityTextureForTransparentShadow = value;\r\n }\r\n }\r\n\r\n private _filter = ShadowGenerator.FILTER_PCF;\r\n /**\r\n * The filter to apply to the shadow map.\r\n */\r\n public get filter() {\r\n return this._filter;\r\n }\r\n\r\n public set filter(value: number) {\r\n if (value === this._filter) {\r\n return;\r\n }\r\n\r\n this._filter = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.filter = value;\r\n }\r\n }\r\n\r\n private _filteringQuality = ShadowGenerator.QUALITY_HIGH;\r\n /**\r\n * The filtering quality to apply to the filter.\r\n */\r\n public get filteringQuality() {\r\n return this._filteringQuality;\r\n }\r\n\r\n public set filteringQuality(value: number) {\r\n if (value === this._filteringQuality) {\r\n return;\r\n }\r\n\r\n this._filteringQuality = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.filteringQuality = value;\r\n }\r\n }\r\n\r\n /**\r\n * The shadow generator.\r\n */\r\n public readonly shadowGenerator: ShadowGenerator;\r\n\r\n /**\r\n * The shadow map texture.\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n protected _shadowGenerator: ShadowGenerator | undefined;\r\n\r\n protected _createShadowGenerator() {\r\n this._shadowGenerator = new ShadowGenerator(this._mapSize, this._light, this._useFloat32TextureType, undefined, this._useRedTextureFormat);\r\n }\r\n\r\n protected _setupShadowGenerator() {\r\n this._shadowGenerator?.dispose();\r\n this._shadowGenerator = undefined;\r\n if (this._light !== undefined) {\r\n this._createShadowGenerator();\r\n const shadowGenerator = this._shadowGenerator as ShadowGenerator | undefined;\r\n if (shadowGenerator === undefined) {\r\n return;\r\n }\r\n shadowGenerator.bias = this._bias;\r\n shadowGenerator.normalBias = this._normalBias;\r\n shadowGenerator.darkness = this._darkness;\r\n shadowGenerator.transparencyShadow = this._transparencyShadow;\r\n shadowGenerator.enableSoftTransparentShadow = this._enableSoftTransparentShadow;\r\n shadowGenerator.useOpacityTextureForTransparentShadow = this._useOpacityTextureForTransparentShadow;\r\n shadowGenerator.filter = this._filter;\r\n shadowGenerator.filteringQuality = this._filteringQuality;\r\n\r\n const shadowMap = shadowGenerator.getShadowMap()!;\r\n shadowMap._disableEngineStages = true;\r\n shadowMap.cameraForLOD = this._camera;\r\n\r\n (this.shadowGenerator as WritableObject<ShadowGenerator | undefined>) = shadowGenerator;\r\n }\r\n }\r\n\r\n public override isReady(): boolean {\r\n return !!this._shadowGenerator && !!this._shadowGenerator.getShadowMap()?.isReadyForRendering();\r\n }\r\n\r\n private _engine: AbstractEngine;\r\n private _scene: Scene;\r\n\r\n /**\r\n * Creates a new shadow generator task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph the task belongs to.\r\n * @param scene The scene to create the shadow generator for.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, scene: Scene) {\r\n super(name, frameGraph);\r\n\r\n this._engine = scene.getEngine();\r\n this._scene = scene;\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n public record() {\r\n if (this.light === undefined || this.objectList === undefined || this.camera === undefined) {\r\n throw new Error(`FrameGraphShadowGeneratorTask ${this.name}: light, objectList and camera are required`);\r\n }\r\n\r\n // Make sure the renderList / particleSystemList are set when FrameGraphShadowGeneratorTask.isReady() is called!\r\n const shadowMap = this._shadowGenerator!.getShadowMap()!;\r\n\r\n shadowMap.renderList = this.objectList.meshes;\r\n shadowMap.particleSystemList = this.objectList.particleSystems;\r\n\r\n const shadowTextureHandle = this._frameGraph.textureManager.importTexture(`${this.name} shadowmap`, this._shadowGenerator!.getShadowMap()!.getInternalTexture()!);\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, shadowTextureHandle);\r\n\r\n const pass = this._frameGraph.addPass(this.name);\r\n\r\n pass.setExecuteFunc((_context) => {\r\n if (!this.light.isEnabled() || !this.light.shadowEnabled) {\r\n return;\r\n }\r\n\r\n const shadowMap = this._shadowGenerator!.getShadowMap()!;\r\n\r\n shadowMap.renderList = this.objectList.meshes;\r\n shadowMap.particleSystemList = this.objectList.particleSystems;\r\n\r\n const currentRenderTarget = this._engine._currentRenderTarget;\r\n\r\n this._scene.incrementRenderId();\r\n this._scene.resetCachedMaterial();\r\n\r\n shadowMap.render();\r\n\r\n if (this._engine._currentRenderTarget !== currentRenderTarget) {\r\n if (!currentRenderTarget) {\r\n this._engine.restoreDefaultFramebuffer();\r\n } else {\r\n this._engine.bindFramebuffer(currentRenderTarget);\r\n }\r\n }\r\n });\r\n\r\n const passDisabled = this._frameGraph.addPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setExecuteFunc((_context) => {});\r\n }\r\n\r\n public override dispose() {\r\n this._shadowGenerator?.dispose();\r\n this._shadowGenerator = undefined;\r\n }\r\n}\r\n"]}
@@ -25,6 +25,9 @@ export class FrameGraphTAAObjectRendererTask extends FrameGraphObjectRendererTas
25
25
  if (this.destinationTexture === backbufferColorTextureHandle || this.depthTexture === backbufferDepthStencilTextureHandle) {
26
26
  throw new Error(`FrameGraphTAAObjectRendererTask ${this.name}: the back buffer color/depth textures are not allowed. Use regular textures instead.`);
27
27
  }
28
+ // Make sure the renderList / particleSystemList are set when FrameGraphObjectRendererTask.isReady() is called!
29
+ this._renderer.renderList = this.objectList.meshes;
30
+ this._renderer.particleSystemList = this.objectList.particleSystems;
28
31
  const outputTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.destinationTexture);
29
32
  let depthEnabled = false;
30
33
  if (this.depthTexture !== undefined) {
@@ -59,6 +62,7 @@ export class FrameGraphTAAObjectRendererTask extends FrameGraphObjectRendererTas
59
62
  this._textureWidth = outputTextureDescription.size.width;
60
63
  this._textureHeight = outputTextureDescription.size.height;
61
64
  let pingPongRenderTargetWrapper;
65
+ this._setLightsForShadow();
62
66
  const pass = this._frameGraph.addRenderPass(this.name);
63
67
  pass.setRenderTarget(this.destinationTexture);
64
68
  pass.setRenderTargetDepth(this.depthTexture);
@@ -94,12 +98,6 @@ export class FrameGraphTAAObjectRendererTask extends FrameGraphObjectRendererTas
94
98
  passDisabled.setExecuteFunc((context) => {
95
99
  context.copyTexture(this.destinationTexture);
96
100
  });
97
- if (this.dependencies !== undefined) {
98
- for (const handle of this.dependencies) {
99
- pass.useTexture(handle);
100
- passDisabled.useTexture(handle);
101
- }
102
- }
103
101
  }
104
102
  }
105
103
  //# sourceMappingURL=taaObjectRendererTask.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"taaObjectRendererTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Rendering/taaObjectRendererTask.ts"],"names":[],"mappings":"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","sourcesContent":["// eslint-disable-next-line import/no-internal-modules\r\nimport type { FrameGraph, Scene, DrawWrapper, FrameGraphTextureCreationOptions, ObjectRendererOptions, FrameGraphRenderTarget } from \"core/index\";\r\nimport { backbufferColorTextureHandle, backbufferDepthStencilTextureHandle } from \"../../frameGraphTypes\";\r\nimport { FrameGraphObjectRendererTask } from \"./objectRendererTask\";\r\nimport { ThinTAAPostProcess } from \"core/PostProcesses/thinTAAPostProcess\";\r\nimport { Constants } from \"core/Engines/constants\";\r\n\r\n/**\r\n * Task used to render objects to a texture with Temporal Anti-Aliasing (TAA).\r\n */\r\nexport class FrameGraphTAAObjectRendererTask extends FrameGraphObjectRendererTask {\r\n /**\r\n * The TAA post process.\r\n */\r\n public readonly postProcess: ThinTAAPostProcess;\r\n\r\n protected readonly _postProcessDrawWrapper: DrawWrapper;\r\n\r\n /**\r\n * Constructs a new TAA object renderer task.\r\n * @param name The name of the task\r\n * @param frameGraph The frame graph the task belongs to.\r\n * @param scene The scene the frame graph is associated with.\r\n * @param options The options of the object renderer.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, scene: Scene, options?: ObjectRendererOptions) {\r\n super(name, frameGraph, scene, options);\r\n\r\n this.postProcess = new ThinTAAPostProcess(`${name} post-process`, scene.getEngine());\r\n this._postProcessDrawWrapper = this.postProcess.drawWrapper;\r\n }\r\n\r\n public override record() {\r\n if (this.destinationTexture === undefined || this.objectList === undefined) {\r\n throw new Error(`FrameGraphTAAObjectRendererTask ${this.name}: destinationTexture and objectList are required`);\r\n }\r\n\r\n if (this.destinationTexture === backbufferColorTextureHandle || this.depthTexture === backbufferDepthStencilTextureHandle) {\r\n throw new Error(`FrameGraphTAAObjectRendererTask ${this.name}: the back buffer color/depth textures are not allowed. Use regular textures instead.`);\r\n }\r\n\r\n const outputTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.destinationTexture);\r\n\r\n let depthEnabled = false;\r\n\r\n if (this.depthTexture !== undefined) {\r\n const depthTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.depthTexture);\r\n if (depthTextureDescription.options.samples !== outputTextureDescription.options.samples) {\r\n throw new Error(`FrameGraphTAAObjectRendererTask ${this.name}: the depth texture and the output texture must have the same number of samples`);\r\n }\r\n\r\n depthEnabled = true;\r\n }\r\n\r\n this.postProcess.camera = this.camera;\r\n this.postProcess.textureWidth = outputTextureDescription.size.width;\r\n this.postProcess.textureHeight = outputTextureDescription.size.height;\r\n\r\n const textureCreationOptions: FrameGraphTextureCreationOptions = {\r\n size: outputTextureDescription.size,\r\n options: {\r\n createMipMaps: outputTextureDescription.options.createMipMaps,\r\n types: [Constants.TEXTURETYPE_HALF_FLOAT],\r\n formats: [Constants.TEXTUREFORMAT_RGBA],\r\n samples: 1,\r\n useSRGBBuffers: [false],\r\n creationFlags: [0],\r\n labels: [\"\"],\r\n },\r\n sizeIsPercentage: false,\r\n isHistoryTexture: true,\r\n };\r\n\r\n const pingPongHandle = this._frameGraph.textureManager.createRenderTargetTexture(`${this.name} history`, textureCreationOptions);\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, pingPongHandle);\r\n if (this.depthTexture !== undefined) {\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputDepthTexture, this.depthTexture);\r\n }\r\n\r\n this._textureWidth = outputTextureDescription.size.width;\r\n this._textureHeight = outputTextureDescription.size.height;\r\n\r\n let pingPongRenderTargetWrapper: FrameGraphRenderTarget | undefined;\r\n\r\n const pass = this._frameGraph.addRenderPass(this.name);\r\n\r\n pass.setRenderTarget(this.destinationTexture);\r\n pass.setRenderTargetDepth(this.depthTexture);\r\n pass.setExecuteFunc((context) => {\r\n this._renderer.renderList = this.objectList.meshes;\r\n this._renderer.particleSystemList = this.objectList.particleSystems;\r\n\r\n this.postProcess.updateProjectionMatrix();\r\n\r\n context.setDepthStates(this.depthTest && depthEnabled, this.depthWrite && depthEnabled);\r\n\r\n // We define the active camera and transformation matrices ourselves, otherwise this will be done by calling context.render, in which case\r\n // getProjectionMatrix will be called with a \"true\" parameter, forcing recalculation of the projection matrix and losing our changes.\r\n if (!this.postProcess.disabled) {\r\n this._scene.activeCamera = this.camera;\r\n this._scene.setTransformMatrix(this.camera.getViewMatrix(), this.camera.getProjectionMatrix());\r\n }\r\n\r\n context.render(this._renderer, this._textureWidth, this._textureHeight);\r\n\r\n this._scene.activeCamera = null;\r\n\r\n pingPongRenderTargetWrapper = pingPongRenderTargetWrapper || context.createRenderTarget(`${this.name} ping/pong`, pingPongHandle);\r\n\r\n context.bindRenderTarget(pingPongRenderTargetWrapper, \"frame graph - TAA merge with history texture\");\r\n\r\n if (!this.postProcess.disabled) {\r\n context.applyFullScreenEffect(this._postProcessDrawWrapper, () => {\r\n this.postProcess.bind();\r\n context.bindTextureHandle(this._postProcessDrawWrapper.effect!, \"textureSampler\", this.destinationTexture);\r\n context.bindTextureHandle(this._postProcessDrawWrapper.effect!, \"historySampler\", pingPongHandle);\r\n });\r\n } else {\r\n context.copyTexture(this.destinationTexture);\r\n }\r\n });\r\n\r\n const passDisabled = this._frameGraph.addRenderPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setRenderTarget(this.outputTexture);\r\n passDisabled.setRenderTargetDepth(this.depthTexture);\r\n passDisabled.setExecuteFunc((context) => {\r\n context.copyTexture(this.destinationTexture);\r\n });\r\n\r\n if (this.dependencies !== undefined) {\r\n for (const handle of this.dependencies) {\r\n pass.useTexture(handle);\r\n passDisabled.useTexture(handle);\r\n }\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"taaObjectRendererTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Rendering/taaObjectRendererTask.ts"],"names":[],"mappings":"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","sourcesContent":["// eslint-disable-next-line import/no-internal-modules\r\nimport type { FrameGraph, Scene, DrawWrapper, FrameGraphTextureCreationOptions, ObjectRendererOptions, FrameGraphRenderTarget } from \"core/index\";\r\nimport { backbufferColorTextureHandle, backbufferDepthStencilTextureHandle } from \"../../frameGraphTypes\";\r\nimport { FrameGraphObjectRendererTask } from \"./objectRendererTask\";\r\nimport { ThinTAAPostProcess } from \"core/PostProcesses/thinTAAPostProcess\";\r\nimport { Constants } from \"core/Engines/constants\";\r\n\r\n/**\r\n * Task used to render objects to a texture with Temporal Anti-Aliasing (TAA).\r\n */\r\nexport class FrameGraphTAAObjectRendererTask extends FrameGraphObjectRendererTask {\r\n /**\r\n * The TAA post process.\r\n */\r\n public readonly postProcess: ThinTAAPostProcess;\r\n\r\n protected readonly _postProcessDrawWrapper: DrawWrapper;\r\n\r\n /**\r\n * Constructs a new TAA object renderer task.\r\n * @param name The name of the task\r\n * @param frameGraph The frame graph the task belongs to.\r\n * @param scene The scene the frame graph is associated with.\r\n * @param options The options of the object renderer.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, scene: Scene, options?: ObjectRendererOptions) {\r\n super(name, frameGraph, scene, options);\r\n\r\n this.postProcess = new ThinTAAPostProcess(`${name} post-process`, scene.getEngine());\r\n this._postProcessDrawWrapper = this.postProcess.drawWrapper;\r\n }\r\n\r\n public override record() {\r\n if (this.destinationTexture === undefined || this.objectList === undefined) {\r\n throw new Error(`FrameGraphTAAObjectRendererTask ${this.name}: destinationTexture and objectList are required`);\r\n }\r\n\r\n if (this.destinationTexture === backbufferColorTextureHandle || this.depthTexture === backbufferDepthStencilTextureHandle) {\r\n throw new Error(`FrameGraphTAAObjectRendererTask ${this.name}: the back buffer color/depth textures are not allowed. Use regular textures instead.`);\r\n }\r\n\r\n // Make sure the renderList / particleSystemList are set when FrameGraphObjectRendererTask.isReady() is called!\r\n this._renderer.renderList = this.objectList.meshes;\r\n this._renderer.particleSystemList = this.objectList.particleSystems;\r\n\r\n const outputTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.destinationTexture);\r\n\r\n let depthEnabled = false;\r\n\r\n if (this.depthTexture !== undefined) {\r\n const depthTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.depthTexture);\r\n if (depthTextureDescription.options.samples !== outputTextureDescription.options.samples) {\r\n throw new Error(`FrameGraphTAAObjectRendererTask ${this.name}: the depth texture and the output texture must have the same number of samples`);\r\n }\r\n\r\n depthEnabled = true;\r\n }\r\n\r\n this.postProcess.camera = this.camera;\r\n this.postProcess.textureWidth = outputTextureDescription.size.width;\r\n this.postProcess.textureHeight = outputTextureDescription.size.height;\r\n\r\n const textureCreationOptions: FrameGraphTextureCreationOptions = {\r\n size: outputTextureDescription.size,\r\n options: {\r\n createMipMaps: outputTextureDescription.options.createMipMaps,\r\n types: [Constants.TEXTURETYPE_HALF_FLOAT],\r\n formats: [Constants.TEXTUREFORMAT_RGBA],\r\n samples: 1,\r\n useSRGBBuffers: [false],\r\n creationFlags: [0],\r\n labels: [\"\"],\r\n },\r\n sizeIsPercentage: false,\r\n isHistoryTexture: true,\r\n };\r\n\r\n const pingPongHandle = this._frameGraph.textureManager.createRenderTargetTexture(`${this.name} history`, textureCreationOptions);\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, pingPongHandle);\r\n if (this.depthTexture !== undefined) {\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputDepthTexture, this.depthTexture);\r\n }\r\n\r\n this._textureWidth = outputTextureDescription.size.width;\r\n this._textureHeight = outputTextureDescription.size.height;\r\n\r\n let pingPongRenderTargetWrapper: FrameGraphRenderTarget | undefined;\r\n\r\n this._setLightsForShadow();\r\n\r\n const pass = this._frameGraph.addRenderPass(this.name);\r\n\r\n pass.setRenderTarget(this.destinationTexture);\r\n pass.setRenderTargetDepth(this.depthTexture);\r\n pass.setExecuteFunc((context) => {\r\n this._renderer.renderList = this.objectList.meshes;\r\n this._renderer.particleSystemList = this.objectList.particleSystems;\r\n\r\n this.postProcess.updateProjectionMatrix();\r\n\r\n context.setDepthStates(this.depthTest && depthEnabled, this.depthWrite && depthEnabled);\r\n\r\n // We define the active camera and transformation matrices ourselves, otherwise this will be done by calling context.render, in which case\r\n // getProjectionMatrix will be called with a \"true\" parameter, forcing recalculation of the projection matrix and losing our changes.\r\n if (!this.postProcess.disabled) {\r\n this._scene.activeCamera = this.camera;\r\n this._scene.setTransformMatrix(this.camera.getViewMatrix(), this.camera.getProjectionMatrix());\r\n }\r\n\r\n context.render(this._renderer, this._textureWidth, this._textureHeight);\r\n\r\n this._scene.activeCamera = null;\r\n\r\n pingPongRenderTargetWrapper = pingPongRenderTargetWrapper || context.createRenderTarget(`${this.name} ping/pong`, pingPongHandle);\r\n\r\n context.bindRenderTarget(pingPongRenderTargetWrapper, \"frame graph - TAA merge with history texture\");\r\n\r\n if (!this.postProcess.disabled) {\r\n context.applyFullScreenEffect(this._postProcessDrawWrapper, () => {\r\n this.postProcess.bind();\r\n context.bindTextureHandle(this._postProcessDrawWrapper.effect!, \"textureSampler\", this.destinationTexture);\r\n context.bindTextureHandle(this._postProcessDrawWrapper.effect!, \"historySampler\", pingPongHandle);\r\n });\r\n } else {\r\n context.copyTexture(this.destinationTexture);\r\n }\r\n });\r\n\r\n const passDisabled = this._frameGraph.addRenderPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setRenderTarget(this.outputTexture);\r\n passDisabled.setRenderTargetDepth(this.depthTexture);\r\n passDisabled.setExecuteFunc((context) => {\r\n context.copyTexture(this.destinationTexture);\r\n });\r\n }\r\n}\r\n"]}
@@ -17,8 +17,8 @@ export class FrameGraphCopyToTextureTask extends FrameGraphTask {
17
17
  throw new Error(`FrameGraphCopyToTextureTask "${this.name}": sourceTexture and destinationTexture are required`);
18
18
  }
19
19
  this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.destinationTexture);
20
+ this._internalDependencies.push(this.sourceTexture);
20
21
  const pass = this._frameGraph.addRenderPass(this.name);
21
- pass.useTexture(this.sourceTexture);
22
22
  pass.setRenderTarget(this.outputTexture);
23
23
  pass.setExecuteFunc((context) => {
24
24
  context.copyTexture(this.sourceTexture);
@@ -1 +1 @@
1
- {"version":3,"file":"copyToTextureTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Texture/copyToTextureTask.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;GAEG;AACH,MAAM,OAAO,2BAA4B,SAAQ,cAAc;IAgB3D;;;;OAIG;IACH,YAAY,IAAY,EAAE,UAAsB;QAC5C,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAExB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC;IAChF,CAAC;IAEM,MAAM;QACT,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,IAAI,sDAAsD,CAAC,CAAC;QACrH,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAEnG,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEvD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACpC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE;YAC5B,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,GAAG,WAAW,EAAE,IAAI,CAAC,CAAC;QAEnF,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjD,YAAY,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,EAAE,GAAE,CAAC,CAAC,CAAC;IAClD,CAAC;CACJ","sourcesContent":["// eslint-disable-next-line import/no-internal-modules\r\nimport type { FrameGraph, FrameGraphTextureHandle } from \"core/index\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\n\r\n/**\r\n * Task used to copy a texture to another texture.\r\n */\r\nexport class FrameGraphCopyToTextureTask extends FrameGraphTask {\r\n /**\r\n * The source texture to copy from.\r\n */\r\n public sourceTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The destination texture to copy to.\r\n */\r\n public destinationTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The output texture (same as destinationTexture, but the handle may be different).\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * Constructs a new FrameGraphCopyToTextureTask.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph the task belongs to.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph) {\r\n super(name, frameGraph);\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n public record() {\r\n if (this.sourceTexture === undefined || this.destinationTexture === undefined) {\r\n throw new Error(`FrameGraphCopyToTextureTask \"${this.name}\": sourceTexture and destinationTexture are required`);\r\n }\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.destinationTexture);\r\n\r\n const pass = this._frameGraph.addRenderPass(this.name);\r\n\r\n pass.useTexture(this.sourceTexture);\r\n pass.setRenderTarget(this.outputTexture);\r\n pass.setExecuteFunc((context) => {\r\n context.copyTexture(this.sourceTexture);\r\n });\r\n\r\n const passDisabled = this._frameGraph.addRenderPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setRenderTarget(this.outputTexture);\r\n passDisabled.setExecuteFunc((_context) => {});\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"copyToTextureTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Texture/copyToTextureTask.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;GAEG;AACH,MAAM,OAAO,2BAA4B,SAAQ,cAAc;IAgB3D;;;;OAIG;IACH,YAAY,IAAY,EAAE,UAAsB;QAC5C,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAExB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC;IAChF,CAAC;IAEM,MAAM;QACT,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,IAAI,sDAAsD,CAAC,CAAC;QACrH,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAEnG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEpD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEvD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE;YAC5B,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,GAAG,WAAW,EAAE,IAAI,CAAC,CAAC;QAEnF,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjD,YAAY,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,EAAE,GAAE,CAAC,CAAC,CAAC;IAClD,CAAC;CACJ","sourcesContent":["// eslint-disable-next-line import/no-internal-modules\r\nimport type { FrameGraph, FrameGraphTextureHandle } from \"core/index\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\n\r\n/**\r\n * Task used to copy a texture to another texture.\r\n */\r\nexport class FrameGraphCopyToTextureTask extends FrameGraphTask {\r\n /**\r\n * The source texture to copy from.\r\n */\r\n public sourceTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The destination texture to copy to.\r\n */\r\n public destinationTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The output texture (same as destinationTexture, but the handle may be different).\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * Constructs a new FrameGraphCopyToTextureTask.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph the task belongs to.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph) {\r\n super(name, frameGraph);\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n public record() {\r\n if (this.sourceTexture === undefined || this.destinationTexture === undefined) {\r\n throw new Error(`FrameGraphCopyToTextureTask \"${this.name}\": sourceTexture and destinationTexture are required`);\r\n }\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.destinationTexture);\r\n\r\n this._internalDependencies.push(this.sourceTexture);\r\n\r\n const pass = this._frameGraph.addRenderPass(this.name);\r\n\r\n pass.setRenderTarget(this.outputTexture);\r\n pass.setExecuteFunc((context) => {\r\n context.copyTexture(this.sourceTexture);\r\n });\r\n\r\n const passDisabled = this._frameGraph.addRenderPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setRenderTarget(this.outputTexture);\r\n passDisabled.setExecuteFunc((_context) => {});\r\n }\r\n}\r\n"]}
@@ -111,19 +111,30 @@ export class FrameGraph {
111
111
  */
112
112
  build() {
113
113
  this.textureManager._releaseTextures(false);
114
- for (const task of this._tasks) {
115
- task._reset();
116
- this._currentProcessedTask = task;
117
- this.textureManager._isRecordingTask = true;
118
- task.record();
119
- this.textureManager._isRecordingTask = false;
120
- this._currentProcessedTask = null;
114
+ try {
115
+ for (const task of this._tasks) {
116
+ task._reset();
117
+ this._currentProcessedTask = task;
118
+ this.textureManager._isRecordingTask = true;
119
+ task.record();
120
+ this.textureManager._isRecordingTask = false;
121
+ this._currentProcessedTask = null;
122
+ }
123
+ this.textureManager._allocateTextures();
124
+ for (const task of this._tasks) {
125
+ task._checkTask();
126
+ }
127
+ for (const task of this._tasks) {
128
+ task.onTexturesAllocatedObservable.notifyObservers(this._renderContext);
129
+ }
130
+ this.onBuildObservable.notifyObservers(this);
121
131
  }
122
- this.textureManager._allocateTextures();
123
- for (const task of this._tasks) {
124
- task._checkTask();
132
+ catch (e) {
133
+ this._tasks.length = 0;
134
+ this._currentProcessedTask = null;
135
+ this.textureManager._isRecordingTask = false;
136
+ throw e;
125
137
  }
126
- this.onBuildObservable.notifyObservers(this);
127
138
  }
128
139
  /**
129
140
  * Returns a promise that resolves when the frame graph is ready to be executed
@@ -1 +1 @@
1
- {"version":3,"file":"frameGraph.js","sourceRoot":"","sources":["../../../../dev/core/src/FrameGraph/frameGraph.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-internal-modules */\r\nimport type { Scene, AbstractEngine, FrameGraphTask } from \"core/index\";\r\nimport { FrameGraphPass } from \"./Passes/pass\";\r\nimport { FrameGraphRenderPass } from \"./Passes/renderPass\";\r\nimport { FrameGraphCullPass } from \"./Passes/cullPass\";\r\nimport { FrameGraphRenderContext } from \"./frameGraphRenderContext\";\r\nimport { FrameGraphContext } from \"./frameGraphContext\";\r\nimport { FrameGraphTextureManager } from \"./frameGraphTextureManager\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { _retryWithInterval } from \"core/Misc/timingTools\";\r\n\r\nenum FrameGraphPassType {\r\n Normal = 0,\r\n Render = 1,\r\n Cull = 2,\r\n}\r\n\r\n/**\r\n * Class used to implement a frame graph\r\n * @experimental\r\n */\r\nexport class FrameGraph {\r\n /**\r\n * Gets the texture manager used by the frame graph\r\n */\r\n public readonly textureManager: FrameGraphTextureManager;\r\n\r\n private readonly _engine: AbstractEngine;\r\n private readonly _tasks: FrameGraphTask[] = [];\r\n private readonly _passContext: FrameGraphContext;\r\n private readonly _renderContext: FrameGraphRenderContext;\r\n private _currentProcessedTask: FrameGraphTask | null = null;\r\n\r\n /**\r\n * Observable raised when the node render graph is built\r\n */\r\n public onBuildObservable = new Observable<FrameGraph>();\r\n\r\n /**\r\n * Gets the engine used by the frame graph\r\n */\r\n public get engine() {\r\n return this._engine;\r\n }\r\n\r\n /**\r\n * Constructs the frame graph\r\n * @param engine defines the hosting engine\r\n * @param debugTextures defines a boolean indicating that textures created by the frame graph should be visible in the inspector\r\n * @param scene defines the scene the frame graph is associated with\r\n */\r\n constructor(engine: AbstractEngine, debugTextures = false, scene: Scene) {\r\n this._engine = engine;\r\n this.textureManager = new FrameGraphTextureManager(this._engine, debugTextures, scene);\r\n this._passContext = new FrameGraphContext();\r\n this._renderContext = new FrameGraphRenderContext(this._engine, this.textureManager, scene);\r\n }\r\n\r\n /**\r\n * Gets a task by name\r\n * @param name Name of the task to get\r\n * @returns The task or undefined if not found\r\n */\r\n public getTaskByName<T extends FrameGraphTask>(name: string): T | undefined {\r\n return this._tasks.find((t) => t.name === name) as T;\r\n }\r\n\r\n /**\r\n * Adds a task to the frame graph\r\n * @param task Task to add\r\n */\r\n public addTask(task: FrameGraphTask): void {\r\n if (this._currentProcessedTask !== null) {\r\n throw new Error(`FrameGraph.addTask: Can't add the task \"${task.name}\" while another task is currently building (task: ${this._currentProcessedTask.name}).`);\r\n }\r\n\r\n this._tasks.push(task);\r\n }\r\n\r\n /**\r\n * Adds a pass to a task. This method can only be called during a Task.record execution.\r\n * @param name The name of the pass\r\n * @param whenTaskDisabled If true, the pass will be added to the list of passes to execute when the task is disabled (default is false)\r\n * @returns The render pass created\r\n */\r\n public addPass(name: string, whenTaskDisabled = false): FrameGraphPass<FrameGraphContext> {\r\n return this._addPass(name, FrameGraphPassType.Normal, whenTaskDisabled) as FrameGraphPass<FrameGraphContext>;\r\n }\r\n\r\n /**\r\n * Adds a render pass to a task. This method can only be called during a Task.record execution.\r\n * @param name The name of the pass\r\n * @param whenTaskDisabled If true, the pass will be added to the list of passes to execute when the task is disabled (default is false)\r\n * @returns The render pass created\r\n */\r\n public addRenderPass(name: string, whenTaskDisabled = false): FrameGraphRenderPass {\r\n return this._addPass(name, FrameGraphPassType.Render, whenTaskDisabled) as FrameGraphRenderPass;\r\n }\r\n\r\n /**\r\n * Adds a cull pass to a task. This method can only be called during a Task.record execution.\r\n * @param name The name of the pass\r\n * @param whenTaskDisabled If true, the pass will be added to the list of passes to execute when the task is disabled (default is false)\r\n * @returns The cull pass created\r\n */\r\n public addCullPass(name: string, whenTaskDisabled = false): FrameGraphCullPass {\r\n return this._addPass(name, FrameGraphPassType.Cull, whenTaskDisabled) as FrameGraphCullPass;\r\n }\r\n\r\n private _addPass(name: string, passType: FrameGraphPassType, whenTaskDisabled = false): FrameGraphPass<FrameGraphContext> | FrameGraphRenderPass {\r\n if (!this._currentProcessedTask) {\r\n throw new Error(\"FrameGraph: A pass must be created during a Task.record execution only.\");\r\n }\r\n\r\n let pass: FrameGraphPass<FrameGraphContext> | FrameGraphRenderPass;\r\n\r\n switch (passType) {\r\n case FrameGraphPassType.Render:\r\n pass = new FrameGraphRenderPass(name, this._currentProcessedTask, this._renderContext, this._engine);\r\n break;\r\n case FrameGraphPassType.Cull:\r\n pass = new FrameGraphCullPass(name, this._currentProcessedTask, this._passContext, this._engine);\r\n break;\r\n default:\r\n pass = new FrameGraphPass(name, this._currentProcessedTask, this._passContext);\r\n break;\r\n }\r\n\r\n this._currentProcessedTask._addPass(pass, whenTaskDisabled);\r\n\r\n return pass;\r\n }\r\n\r\n /**\r\n * Builds the frame graph.\r\n * This method should be called after all tasks have been added to the frame graph (FrameGraph.addTask) and before the graph is executed (FrameGraph.execute).\r\n */\r\n public build(): void {\r\n this.textureManager._releaseTextures(false);\r\n\r\n for (const task of this._tasks) {\r\n task._reset();\r\n\r\n this._currentProcessedTask = task;\r\n this.textureManager._isRecordingTask = true;\r\n\r\n task.record();\r\n\r\n this.textureManager._isRecordingTask = false;\r\n this._currentProcessedTask = null;\r\n }\r\n\r\n this.textureManager._allocateTextures();\r\n\r\n for (const task of this._tasks) {\r\n task._checkTask();\r\n }\r\n\r\n this.onBuildObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Returns a promise that resolves when the frame graph is ready to be executed\r\n * This method must be called after the graph has been built (FrameGraph.build called)!\r\n * @param timeout Timeout in ms between retries (default is 16)\r\n * @returns The promise that resolves when the graph is ready\r\n */\r\n public whenReadyAsync(timeout = 16): Promise<void> {\r\n return new Promise((resolve) => {\r\n _retryWithInterval(\r\n () => {\r\n let ready = this._renderContext._isReady();\r\n for (const task of this._tasks) {\r\n ready = task.isReady() && ready;\r\n }\r\n return ready;\r\n },\r\n resolve,\r\n undefined,\r\n timeout\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Executes the frame graph.\r\n */\r\n public execute(): void {\r\n this._renderContext.bindRenderTarget();\r\n\r\n this.textureManager._updateHistoryTextures();\r\n\r\n for (const task of this._tasks) {\r\n const passes = task._getPasses();\r\n\r\n for (const pass of passes) {\r\n pass._execute();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Clears the frame graph (remove the tasks and release the textures).\r\n * The frame graph can be built again after this method is called.\r\n */\r\n public clear(): void {\r\n for (const task of this._tasks) {\r\n task._reset();\r\n }\r\n\r\n this._tasks.length = 0;\r\n this.textureManager._releaseTextures();\r\n this._currentProcessedTask = null;\r\n }\r\n\r\n /**\r\n * Disposes the frame graph\r\n */\r\n public dispose(): void {\r\n this.clear();\r\n this.textureManager._dispose();\r\n this._renderContext._dispose();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"frameGraph.js","sourceRoot":"","sources":["../../../../dev/core/src/FrameGraph/frameGraph.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-internal-modules */\r\nimport type { Scene, AbstractEngine, FrameGraphTask } from \"core/index\";\r\nimport { FrameGraphPass } from \"./Passes/pass\";\r\nimport { FrameGraphRenderPass } from \"./Passes/renderPass\";\r\nimport { FrameGraphCullPass } from \"./Passes/cullPass\";\r\nimport { FrameGraphRenderContext } from \"./frameGraphRenderContext\";\r\nimport { FrameGraphContext } from \"./frameGraphContext\";\r\nimport { FrameGraphTextureManager } from \"./frameGraphTextureManager\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { _retryWithInterval } from \"core/Misc/timingTools\";\r\n\r\nenum FrameGraphPassType {\r\n Normal = 0,\r\n Render = 1,\r\n Cull = 2,\r\n}\r\n\r\n/**\r\n * Class used to implement a frame graph\r\n * @experimental\r\n */\r\nexport class FrameGraph {\r\n /**\r\n * Gets the texture manager used by the frame graph\r\n */\r\n public readonly textureManager: FrameGraphTextureManager;\r\n\r\n private readonly _engine: AbstractEngine;\r\n private readonly _tasks: FrameGraphTask[] = [];\r\n private readonly _passContext: FrameGraphContext;\r\n private readonly _renderContext: FrameGraphRenderContext;\r\n private _currentProcessedTask: FrameGraphTask | null = null;\r\n\r\n /**\r\n * Observable raised when the node render graph is built\r\n */\r\n public onBuildObservable = new Observable<FrameGraph>();\r\n\r\n /**\r\n * Gets the engine used by the frame graph\r\n */\r\n public get engine() {\r\n return this._engine;\r\n }\r\n\r\n /**\r\n * Constructs the frame graph\r\n * @param engine defines the hosting engine\r\n * @param debugTextures defines a boolean indicating that textures created by the frame graph should be visible in the inspector\r\n * @param scene defines the scene the frame graph is associated with\r\n */\r\n constructor(engine: AbstractEngine, debugTextures = false, scene: Scene) {\r\n this._engine = engine;\r\n this.textureManager = new FrameGraphTextureManager(this._engine, debugTextures, scene);\r\n this._passContext = new FrameGraphContext();\r\n this._renderContext = new FrameGraphRenderContext(this._engine, this.textureManager, scene);\r\n }\r\n\r\n /**\r\n * Gets a task by name\r\n * @param name Name of the task to get\r\n * @returns The task or undefined if not found\r\n */\r\n public getTaskByName<T extends FrameGraphTask>(name: string): T | undefined {\r\n return this._tasks.find((t) => t.name === name) as T;\r\n }\r\n\r\n /**\r\n * Adds a task to the frame graph\r\n * @param task Task to add\r\n */\r\n public addTask(task: FrameGraphTask): void {\r\n if (this._currentProcessedTask !== null) {\r\n throw new Error(`FrameGraph.addTask: Can't add the task \"${task.name}\" while another task is currently building (task: ${this._currentProcessedTask.name}).`);\r\n }\r\n\r\n this._tasks.push(task);\r\n }\r\n\r\n /**\r\n * Adds a pass to a task. This method can only be called during a Task.record execution.\r\n * @param name The name of the pass\r\n * @param whenTaskDisabled If true, the pass will be added to the list of passes to execute when the task is disabled (default is false)\r\n * @returns The render pass created\r\n */\r\n public addPass(name: string, whenTaskDisabled = false): FrameGraphPass<FrameGraphContext> {\r\n return this._addPass(name, FrameGraphPassType.Normal, whenTaskDisabled) as FrameGraphPass<FrameGraphContext>;\r\n }\r\n\r\n /**\r\n * Adds a render pass to a task. This method can only be called during a Task.record execution.\r\n * @param name The name of the pass\r\n * @param whenTaskDisabled If true, the pass will be added to the list of passes to execute when the task is disabled (default is false)\r\n * @returns The render pass created\r\n */\r\n public addRenderPass(name: string, whenTaskDisabled = false): FrameGraphRenderPass {\r\n return this._addPass(name, FrameGraphPassType.Render, whenTaskDisabled) as FrameGraphRenderPass;\r\n }\r\n\r\n /**\r\n * Adds a cull pass to a task. This method can only be called during a Task.record execution.\r\n * @param name The name of the pass\r\n * @param whenTaskDisabled If true, the pass will be added to the list of passes to execute when the task is disabled (default is false)\r\n * @returns The cull pass created\r\n */\r\n public addCullPass(name: string, whenTaskDisabled = false): FrameGraphCullPass {\r\n return this._addPass(name, FrameGraphPassType.Cull, whenTaskDisabled) as FrameGraphCullPass;\r\n }\r\n\r\n private _addPass(name: string, passType: FrameGraphPassType, whenTaskDisabled = false): FrameGraphPass<FrameGraphContext> | FrameGraphRenderPass {\r\n if (!this._currentProcessedTask) {\r\n throw new Error(\"FrameGraph: A pass must be created during a Task.record execution only.\");\r\n }\r\n\r\n let pass: FrameGraphPass<FrameGraphContext> | FrameGraphRenderPass;\r\n\r\n switch (passType) {\r\n case FrameGraphPassType.Render:\r\n pass = new FrameGraphRenderPass(name, this._currentProcessedTask, this._renderContext, this._engine);\r\n break;\r\n case FrameGraphPassType.Cull:\r\n pass = new FrameGraphCullPass(name, this._currentProcessedTask, this._passContext, this._engine);\r\n break;\r\n default:\r\n pass = new FrameGraphPass(name, this._currentProcessedTask, this._passContext);\r\n break;\r\n }\r\n\r\n this._currentProcessedTask._addPass(pass, whenTaskDisabled);\r\n\r\n return pass;\r\n }\r\n\r\n /**\r\n * Builds the frame graph.\r\n * This method should be called after all tasks have been added to the frame graph (FrameGraph.addTask) and before the graph is executed (FrameGraph.execute).\r\n */\r\n public build(): void {\r\n this.textureManager._releaseTextures(false);\r\n\r\n try {\r\n for (const task of this._tasks) {\r\n task._reset();\r\n\r\n this._currentProcessedTask = task;\r\n this.textureManager._isRecordingTask = true;\r\n\r\n task.record();\r\n\r\n this.textureManager._isRecordingTask = false;\r\n this._currentProcessedTask = null;\r\n }\r\n\r\n this.textureManager._allocateTextures();\r\n\r\n for (const task of this._tasks) {\r\n task._checkTask();\r\n }\r\n\r\n for (const task of this._tasks) {\r\n task.onTexturesAllocatedObservable.notifyObservers(this._renderContext);\r\n }\r\n\r\n this.onBuildObservable.notifyObservers(this);\r\n } catch (e) {\r\n this._tasks.length = 0;\r\n this._currentProcessedTask = null;\r\n this.textureManager._isRecordingTask = false;\r\n throw e;\r\n }\r\n }\r\n\r\n /**\r\n * Returns a promise that resolves when the frame graph is ready to be executed\r\n * This method must be called after the graph has been built (FrameGraph.build called)!\r\n * @param timeout Timeout in ms between retries (default is 16)\r\n * @returns The promise that resolves when the graph is ready\r\n */\r\n public whenReadyAsync(timeout = 16): Promise<void> {\r\n return new Promise((resolve) => {\r\n _retryWithInterval(\r\n () => {\r\n let ready = this._renderContext._isReady();\r\n for (const task of this._tasks) {\r\n ready = task.isReady() && ready;\r\n }\r\n return ready;\r\n },\r\n resolve,\r\n undefined,\r\n timeout\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Executes the frame graph.\r\n */\r\n public execute(): void {\r\n this._renderContext.bindRenderTarget();\r\n\r\n this.textureManager._updateHistoryTextures();\r\n\r\n for (const task of this._tasks) {\r\n const passes = task._getPasses();\r\n\r\n for (const pass of passes) {\r\n pass._execute();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Clears the frame graph (remove the tasks and release the textures).\r\n * The frame graph can be built again after this method is called.\r\n */\r\n public clear(): void {\r\n for (const task of this._tasks) {\r\n task._reset();\r\n }\r\n\r\n this._tasks.length = 0;\r\n this.textureManager._releaseTextures();\r\n this._currentProcessedTask = null;\r\n }\r\n\r\n /**\r\n * Disposes the frame graph\r\n */\r\n public dispose(): void {\r\n this.clear();\r\n this.textureManager._dispose();\r\n this._renderContext._dispose();\r\n }\r\n}\r\n"]}
@@ -116,7 +116,8 @@ export declare class FrameGraphRenderContext extends FrameGraphContext {
116
116
  bindRenderTarget(renderTarget?: FrameGraphRenderTarget, debugMessage?: string): void;
117
117
  /** @internal */
118
118
  _flushDebugMessages(): void;
119
- private _applyRenderTarget;
119
+ /** @internal */
120
+ _applyRenderTarget(): void;
120
121
  /** @internal */
121
122
  _isReady(): boolean;
122
123
  /** @internal */
@@ -197,9 +197,9 @@ export class FrameGraphRenderContext extends FrameGraphContext {
197
197
  if (object.shouldRender()) {
198
198
  this._scene.incrementRenderId();
199
199
  this._scene.resetCachedMaterial();
200
+ this._applyRenderTarget();
200
201
  object.prepareRenderList();
201
202
  object.initRender(viewportWidth, viewportHeight);
202
- this._applyRenderTarget();
203
203
  object.render();
204
204
  object.finishRender();
205
205
  }
@@ -238,6 +238,7 @@ export class FrameGraphRenderContext extends FrameGraphContext {
238
238
  this._debugMessageHasBeenPushed = false;
239
239
  }
240
240
  }
241
+ /** @internal */
241
242
  _applyRenderTarget() {
242
243
  if (this._renderTargetIsBound) {
243
244
  return;