@babylonjs/core 8.38.0 → 8.39.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (235) hide show
  1. package/Animations/animation.d.ts +2 -1
  2. package/Animations/animation.js +3 -2
  3. package/Animations/animation.js.map +1 -1
  4. package/Audio/Interfaces/ISoundOptions.d.ts +1 -1
  5. package/Audio/Interfaces/ISoundOptions.js.map +1 -1
  6. package/Audio/audioEngine.d.ts +3 -4
  7. package/Audio/audioEngine.js +9 -6
  8. package/Audio/audioEngine.js.map +1 -1
  9. package/Audio/sound.d.ts +33 -54
  10. package/Audio/sound.js +450 -718
  11. package/Audio/sound.js.map +1 -1
  12. package/AudioV2/abstractAudio/abstractAudioOutNode.d.ts +1 -1
  13. package/AudioV2/abstractAudio/abstractAudioOutNode.js +1 -1
  14. package/AudioV2/abstractAudio/abstractAudioOutNode.js.map +1 -1
  15. package/AudioV2/abstractAudio/abstractSound.d.ts +1 -1
  16. package/AudioV2/abstractAudio/abstractSound.js +2 -2
  17. package/AudioV2/abstractAudio/abstractSound.js.map +1 -1
  18. package/AudioV2/abstractAudio/abstractSoundSource.d.ts +11 -3
  19. package/AudioV2/abstractAudio/abstractSoundSource.js +37 -1
  20. package/AudioV2/abstractAudio/abstractSoundSource.js.map +1 -1
  21. package/AudioV2/abstractAudio/audioBus.d.ts +8 -3
  22. package/AudioV2/abstractAudio/audioBus.js +24 -1
  23. package/AudioV2/abstractAudio/audioBus.js.map +1 -1
  24. package/AudioV2/abstractAudio/staticSound.d.ts +1 -1
  25. package/AudioV2/abstractAudio/staticSound.js +2 -2
  26. package/AudioV2/abstractAudio/staticSound.js.map +1 -1
  27. package/AudioV2/abstractAudio/streamingSound.d.ts +1 -1
  28. package/AudioV2/abstractAudio/streamingSound.js +2 -2
  29. package/AudioV2/abstractAudio/streamingSound.js.map +1 -1
  30. package/AudioV2/abstractAudio/subNodes/abstractAudioSubGraph.d.ts +1 -1
  31. package/AudioV2/abstractAudio/subNodes/abstractAudioSubGraph.js +3 -0
  32. package/AudioV2/abstractAudio/subNodes/abstractAudioSubGraph.js.map +1 -1
  33. package/AudioV2/abstractAudio/subNodes/spatialAudioSubNode.d.ts +1 -0
  34. package/AudioV2/abstractAudio/subNodes/spatialAudioSubNode.js +1 -0
  35. package/AudioV2/abstractAudio/subNodes/spatialAudioSubNode.js.map +1 -1
  36. package/AudioV2/abstractAudio/subProperties/abstractSpatialAudio.d.ts +12 -2
  37. package/AudioV2/abstractAudio/subProperties/abstractSpatialAudio.js +2 -0
  38. package/AudioV2/abstractAudio/subProperties/abstractSpatialAudio.js.map +1 -1
  39. package/AudioV2/abstractAudio/subProperties/spatialAudio.d.ts +6 -0
  40. package/AudioV2/abstractAudio/subProperties/spatialAudio.js +25 -0
  41. package/AudioV2/abstractAudio/subProperties/spatialAudio.js.map +1 -1
  42. package/AudioV2/webAudio/components/webAudioParameterComponent.js +2 -2
  43. package/AudioV2/webAudio/components/webAudioParameterComponent.js.map +1 -1
  44. package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.d.ts +3 -0
  45. package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.js +14 -17
  46. package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.js.map +1 -1
  47. package/AudioV2/webAudio/subNodes/webAudioBusAndSoundSubGraph.js +1 -0
  48. package/AudioV2/webAudio/subNodes/webAudioBusAndSoundSubGraph.js.map +1 -1
  49. package/AudioV2/webAudio/subProperties/spatialWebAudio.js +1 -0
  50. package/AudioV2/webAudio/subProperties/spatialWebAudio.js.map +1 -1
  51. package/AudioV2/webAudio/webAudioBus.d.ts +2 -7
  52. package/AudioV2/webAudio/webAudioBus.js +4 -24
  53. package/AudioV2/webAudio/webAudioBus.js.map +1 -1
  54. package/AudioV2/webAudio/webAudioEngine.js +1 -0
  55. package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
  56. package/AudioV2/webAudio/webAudioSoundSource.d.ts +2 -7
  57. package/AudioV2/webAudio/webAudioSoundSource.js +3 -24
  58. package/AudioV2/webAudio/webAudioSoundSource.js.map +1 -1
  59. package/AudioV2/webAudio/webAudioStaticSound.d.ts +3 -7
  60. package/AudioV2/webAudio/webAudioStaticSound.js +13 -26
  61. package/AudioV2/webAudio/webAudioStaticSound.js.map +1 -1
  62. package/AudioV2/webAudio/webAudioStreamingSound.d.ts +3 -7
  63. package/AudioV2/webAudio/webAudioStreamingSound.js +6 -23
  64. package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -1
  65. package/Behaviors/Cameras/autoRotationBehavior.d.ts +4 -0
  66. package/Behaviors/Cameras/autoRotationBehavior.js +7 -0
  67. package/Behaviors/Cameras/autoRotationBehavior.js.map +1 -1
  68. package/Behaviors/Cameras/bouncingBehavior.d.ts +5 -0
  69. package/Behaviors/Cameras/bouncingBehavior.js +8 -0
  70. package/Behaviors/Cameras/bouncingBehavior.js.map +1 -1
  71. package/Behaviors/Cameras/framingBehavior.d.ts +4 -0
  72. package/Behaviors/Cameras/framingBehavior.js +7 -0
  73. package/Behaviors/Cameras/framingBehavior.js.map +1 -1
  74. package/Behaviors/Cameras/interpolatingBehavior.d.ts +7 -1
  75. package/Behaviors/Cameras/interpolatingBehavior.js +11 -3
  76. package/Behaviors/Cameras/interpolatingBehavior.js.map +1 -1
  77. package/Behaviors/Meshes/attachToBoxBehavior.d.ts +5 -0
  78. package/Behaviors/Meshes/attachToBoxBehavior.js +8 -1
  79. package/Behaviors/Meshes/attachToBoxBehavior.js.map +1 -1
  80. package/Behaviors/Meshes/baseSixDofDragBehavior.d.ts +5 -2
  81. package/Behaviors/Meshes/baseSixDofDragBehavior.js +8 -0
  82. package/Behaviors/Meshes/baseSixDofDragBehavior.js.map +1 -1
  83. package/Behaviors/Meshes/fadeInOutBehavior.d.ts +5 -0
  84. package/Behaviors/Meshes/fadeInOutBehavior.js +6 -0
  85. package/Behaviors/Meshes/fadeInOutBehavior.js.map +1 -1
  86. package/Behaviors/Meshes/handConstraintBehavior.d.ts +5 -0
  87. package/Behaviors/Meshes/handConstraintBehavior.js +8 -0
  88. package/Behaviors/Meshes/handConstraintBehavior.js.map +1 -1
  89. package/Behaviors/Meshes/multiPointerScaleBehavior.d.ts +5 -0
  90. package/Behaviors/Meshes/multiPointerScaleBehavior.js +8 -0
  91. package/Behaviors/Meshes/multiPointerScaleBehavior.js.map +1 -1
  92. package/Behaviors/Meshes/sixDofDragBehavior.js +1 -1
  93. package/Behaviors/Meshes/sixDofDragBehavior.js.map +1 -1
  94. package/Behaviors/Meshes/surfaceMagnetismBehavior.d.ts +5 -0
  95. package/Behaviors/Meshes/surfaceMagnetismBehavior.js +7 -0
  96. package/Behaviors/Meshes/surfaceMagnetismBehavior.js.map +1 -1
  97. package/Behaviors/behavior.d.ts +4 -0
  98. package/Behaviors/behavior.js.map +1 -1
  99. package/Cameras/geospatialCamera.d.ts +13 -5
  100. package/Cameras/geospatialCamera.js +116 -48
  101. package/Cameras/geospatialCamera.js.map +1 -1
  102. package/Cameras/geospatialCameraMovement.d.ts +6 -2
  103. package/Cameras/geospatialCameraMovement.js +11 -11
  104. package/Cameras/geospatialCameraMovement.js.map +1 -1
  105. package/Engines/WebGPU/Extensions/engine.multiRender.d.ts +2 -1
  106. package/Engines/WebGPU/Extensions/engine.multiRender.js +5 -2
  107. package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
  108. package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -0
  109. package/Engines/WebGPU/webgpuTextureHelper.js +11 -0
  110. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  111. package/Engines/WebGPU/webgpuTextureManager.d.ts +1 -0
  112. package/Engines/WebGPU/webgpuTextureManager.js +100 -9
  113. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  114. package/Engines/abstractEngine.d.ts +2 -2
  115. package/Engines/abstractEngine.js +2 -2
  116. package/Engines/abstractEngine.js.map +1 -1
  117. package/Engines/renderTargetWrapper.js +6 -1
  118. package/Engines/renderTargetWrapper.js.map +1 -1
  119. package/Engines/thinEngine.js +1 -1
  120. package/Engines/thinEngine.js.map +1 -1
  121. package/Engines/webgpuEngine.d.ts +7 -4
  122. package/Engines/webgpuEngine.js +53 -25
  123. package/Engines/webgpuEngine.js.map +1 -1
  124. package/FrameGraph/Node/Blocks/PostProcesses/volumetricLightingBlock.d.ts +74 -0
  125. package/FrameGraph/Node/Blocks/PostProcesses/volumetricLightingBlock.js +179 -0
  126. package/FrameGraph/Node/Blocks/PostProcesses/volumetricLightingBlock.js.map +1 -0
  127. package/FrameGraph/Node/Blocks/index.d.ts +2 -0
  128. package/FrameGraph/Node/Blocks/index.js +2 -0
  129. package/FrameGraph/Node/Blocks/index.js.map +1 -1
  130. package/FrameGraph/Node/Blocks/lightingVolumeBlock.d.ts +46 -0
  131. package/FrameGraph/Node/Blocks/lightingVolumeBlock.js +106 -0
  132. package/FrameGraph/Node/Blocks/lightingVolumeBlock.js.map +1 -0
  133. package/FrameGraph/Node/nodeRenderGraph.d.ts +22 -5
  134. package/FrameGraph/Node/nodeRenderGraph.js +39 -18
  135. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  136. package/FrameGraph/Passes/pass.d.ts +2 -0
  137. package/FrameGraph/Passes/pass.js +2 -0
  138. package/FrameGraph/Passes/pass.js.map +1 -1
  139. package/FrameGraph/Passes/renderPass.d.ts +2 -0
  140. package/FrameGraph/Passes/renderPass.js +4 -0
  141. package/FrameGraph/Passes/renderPass.js.map +1 -1
  142. package/FrameGraph/Tasks/Misc/lightingVolumeTask.d.ts +31 -0
  143. package/FrameGraph/Tasks/Misc/lightingVolumeTask.js +56 -0
  144. package/FrameGraph/Tasks/Misc/lightingVolumeTask.js.map +1 -0
  145. package/FrameGraph/Tasks/PostProcesses/postProcessTask.d.ts +2 -2
  146. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js.map +1 -1
  147. package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.d.ts +30 -0
  148. package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.js +57 -0
  149. package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.js.map +1 -0
  150. package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.d.ts +91 -0
  151. package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js +210 -0
  152. package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js.map +1 -0
  153. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +1 -1
  154. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  155. package/FrameGraph/Tasks/Texture/clearTextureTask.js +1 -1
  156. package/FrameGraph/Tasks/Texture/clearTextureTask.js.map +1 -1
  157. package/FrameGraph/frameGraph.d.ts +13 -4
  158. package/FrameGraph/frameGraph.js +45 -5
  159. package/FrameGraph/frameGraph.js.map +1 -1
  160. package/FrameGraph/frameGraphRenderContext.d.ts +2 -2
  161. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  162. package/FrameGraph/frameGraphRenderTarget.d.ts +1 -0
  163. package/FrameGraph/frameGraphRenderTarget.js +3 -0
  164. package/FrameGraph/frameGraphRenderTarget.js.map +1 -1
  165. package/FrameGraph/frameGraphTask.d.ts +6 -0
  166. package/FrameGraph/frameGraphTask.js +17 -2
  167. package/FrameGraph/frameGraphTask.js.map +1 -1
  168. package/FrameGraph/frameGraphTypes.d.ts +2 -0
  169. package/FrameGraph/frameGraphTypes.js.map +1 -1
  170. package/FrameGraph/index.d.ts +2 -0
  171. package/FrameGraph/index.js +2 -0
  172. package/FrameGraph/index.js.map +1 -1
  173. package/Helpers/sceneHelpers.js +1 -1
  174. package/Helpers/sceneHelpers.js.map +1 -1
  175. package/Lights/index.d.ts +1 -0
  176. package/Lights/index.js +1 -0
  177. package/Lights/index.js.map +1 -1
  178. package/Lights/lightingVolume.d.ts +89 -0
  179. package/Lights/lightingVolume.js +435 -0
  180. package/Lights/lightingVolume.js.map +1 -0
  181. package/Materials/GaussianSplatting/gaussianSplattingMaterial.d.ts +7 -0
  182. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +19 -5
  183. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
  184. package/Materials/Node/nodeMaterial.js +8 -2
  185. package/Materials/Node/nodeMaterial.js.map +1 -1
  186. package/Materials/floatingOriginMatrixOverrides.js +6 -5
  187. package/Materials/floatingOriginMatrixOverrides.js.map +1 -1
  188. package/Materials/uniformBuffer.d.ts +1 -0
  189. package/Materials/uniformBuffer.js +8 -1
  190. package/Materials/uniformBuffer.js.map +1 -1
  191. package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +5 -2
  192. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +138 -45
  193. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  194. package/Meshes/mesh.js +1 -1
  195. package/Meshes/mesh.js.map +1 -1
  196. package/Misc/screenshotTools.js +2 -8
  197. package/Misc/screenshotTools.js.map +1 -1
  198. package/Particles/solidParticle.d.ts +9 -0
  199. package/Particles/solidParticle.js +11 -0
  200. package/Particles/solidParticle.js.map +1 -1
  201. package/Particles/solidParticleSystem.d.ts +28 -0
  202. package/Particles/solidParticleSystem.js +75 -0
  203. package/Particles/solidParticleSystem.js.map +1 -1
  204. package/Physics/v2/characterController.d.ts +42 -2
  205. package/Physics/v2/characterController.js +140 -46
  206. package/Physics/v2/characterController.js.map +1 -1
  207. package/Shaders/volumetricLightingBlendVolume.fragment.d.ts +5 -0
  208. package/Shaders/volumetricLightingBlendVolume.fragment.js +21 -0
  209. package/Shaders/volumetricLightingBlendVolume.fragment.js.map +1 -0
  210. package/Shaders/volumetricLightingRenderVolume.fragment.d.ts +7 -0
  211. package/Shaders/volumetricLightingRenderVolume.fragment.js +25 -0
  212. package/Shaders/volumetricLightingRenderVolume.fragment.js.map +1 -0
  213. package/Shaders/volumetricLightingRenderVolume.vertex.d.ts +9 -0
  214. package/Shaders/volumetricLightingRenderVolume.vertex.js +18 -0
  215. package/Shaders/volumetricLightingRenderVolume.vertex.js.map +1 -0
  216. package/ShadersWGSL/gaussianSplattingDepth.fragment.d.ts +0 -1
  217. package/ShadersWGSL/gaussianSplattingDepth.fragment.js +0 -2
  218. package/ShadersWGSL/gaussianSplattingDepth.fragment.js.map +1 -1
  219. package/ShadersWGSL/lightingVolume.compute.d.ts +5 -0
  220. package/ShadersWGSL/lightingVolume.compute.js +27 -0
  221. package/ShadersWGSL/lightingVolume.compute.js.map +1 -0
  222. package/ShadersWGSL/volumetricLightingBlendVolume.fragment.d.ts +5 -0
  223. package/ShadersWGSL/volumetricLightingBlendVolume.fragment.js +22 -0
  224. package/ShadersWGSL/volumetricLightingBlendVolume.fragment.js.map +1 -0
  225. package/ShadersWGSL/volumetricLightingRenderVolume.fragment.d.ts +7 -0
  226. package/ShadersWGSL/volumetricLightingRenderVolume.fragment.js +27 -0
  227. package/ShadersWGSL/volumetricLightingRenderVolume.fragment.js.map +1 -0
  228. package/ShadersWGSL/volumetricLightingRenderVolume.vertex.d.ts +7 -0
  229. package/ShadersWGSL/volumetricLightingRenderVolume.vertex.js +17 -0
  230. package/ShadersWGSL/volumetricLightingRenderVolume.vertex.js.map +1 -0
  231. package/States/IStencilState.d.ts +48 -2
  232. package/States/IStencilState.js.map +1 -1
  233. package/package.json +1 -1
  234. package/scene.js +6 -4
  235. package/scene.js.map +1 -1
@@ -13,4 +13,5 @@ export declare class FrameGraphRenderTarget {
13
13
  constructor(name: string, textureManager: FrameGraphTextureManager, renderTargets?: FrameGraphTextureHandle | FrameGraphTextureHandle[], renderTargetDepth?: FrameGraphTextureHandle);
14
14
  get renderTargetWrapper(): RenderTargetWrapper | undefined;
15
15
  equals(other: FrameGraphRenderTarget): boolean;
16
+ dispose(): void;
16
17
  }
@@ -63,5 +63,8 @@ export class FrameGraphRenderTarget {
63
63
  }
64
64
  return this._renderTargetDepth === other._renderTargetDepth;
65
65
  }
66
+ dispose() {
67
+ this._renderTargetWrapper?.dispose();
68
+ }
66
69
  }
67
70
  //# sourceMappingURL=frameGraphRenderTarget.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"frameGraphRenderTarget.js","sourceRoot":"","sources":["../../../../dev/core/src/FrameGraph/frameGraphRenderTarget.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FrameGraphTextureHandle, FrameGraphTextureManager, IMultiRenderTargetOptions, RenderTargetWrapper } from \"core/index\";\r\n\r\n/**\r\n * @internal\r\n * @experimental\r\n */\r\nexport class FrameGraphRenderTarget {\r\n protected readonly _textureManager: FrameGraphTextureManager;\r\n protected readonly _renderTargets: FrameGraphTextureHandle[] | undefined;\r\n protected readonly _renderTargetDepth: FrameGraphTextureHandle | undefined;\r\n protected _renderTargetWrapper: RenderTargetWrapper | undefined;\r\n protected _isBackBuffer = false;\r\n\r\n public readonly name: string;\r\n\r\n constructor(\r\n name: string,\r\n textureManager: FrameGraphTextureManager,\r\n renderTargets?: FrameGraphTextureHandle | FrameGraphTextureHandle[],\r\n renderTargetDepth?: FrameGraphTextureHandle\r\n ) {\r\n this.name = name;\r\n this._textureManager = textureManager;\r\n this._renderTargets = renderTargets === undefined ? undefined : Array.isArray(renderTargets) ? renderTargets : [renderTargets];\r\n this._renderTargetDepth = renderTargetDepth;\r\n }\r\n\r\n public get renderTargetWrapper() {\r\n if (this._isBackBuffer) {\r\n return undefined;\r\n }\r\n\r\n if (!this._renderTargetWrapper) {\r\n const engine = this._textureManager.engine;\r\n\r\n // _renderTargets and _renderTargetDepth cannot both be undefined\r\n const textureHandle = this._renderTargets === undefined || this._renderTargets.length === 0 ? this._renderTargetDepth! : this._renderTargets[0];\r\n\r\n if (this._textureManager.isBackbuffer(textureHandle)) {\r\n this._isBackBuffer = true;\r\n return undefined;\r\n }\r\n\r\n const textureDescription = this._textureManager.getTextureDescription(textureHandle);\r\n\r\n const creationOptionsForTexture: IMultiRenderTargetOptions = {\r\n textureCount: this._renderTargets?.length ?? 0,\r\n generateDepthBuffer: false,\r\n label: this.name,\r\n samples: textureDescription.options.samples ?? 1,\r\n dontCreateTextures: true,\r\n };\r\n\r\n this._renderTargetWrapper = engine.createMultipleRenderTarget(textureDescription.size, creationOptionsForTexture, true);\r\n\r\n for (let i = 0; i < creationOptionsForTexture.textureCount!; i++) {\r\n const handle = this._renderTargets![i];\r\n const texture = this._textureManager.getTextureFromHandle(handle);\r\n\r\n if (!texture) {\r\n throw new Error(\r\n `FrameGraphRenderTarget.renderTargetWrapper: Failed to get texture from handle. handle: ${handle}, name: ${this.name}, index: ${i}, renderTargets: ${this._renderTargets}`\r\n );\r\n }\r\n\r\n this._renderTargetWrapper.setTexture(texture, i, false);\r\n }\r\n\r\n if (this._renderTargetDepth !== undefined) {\r\n this._renderTargetWrapper.setDepthStencilTexture(this._textureManager.getTextureFromHandle(this._renderTargetDepth), false);\r\n }\r\n }\r\n\r\n return this._renderTargetWrapper;\r\n }\r\n\r\n public equals(other: FrameGraphRenderTarget): boolean {\r\n const src = this._renderTargets;\r\n const dst = other._renderTargets;\r\n\r\n if (src !== undefined && dst !== undefined) {\r\n if (src.length !== dst.length) {\r\n return false;\r\n }\r\n\r\n for (let i = 0; i < src.length; i++) {\r\n if (src[i] !== dst[i]) {\r\n return false;\r\n }\r\n }\r\n } else if ((src === undefined && dst !== undefined) || (src !== undefined && dst === undefined)) {\r\n return false;\r\n }\r\n\r\n return this._renderTargetDepth === other._renderTargetDepth;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"frameGraphRenderTarget.js","sourceRoot":"","sources":["../../../../dev/core/src/FrameGraph/frameGraphRenderTarget.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FrameGraphTextureHandle, FrameGraphTextureManager, IMultiRenderTargetOptions, RenderTargetWrapper } from \"core/index\";\r\n\r\n/**\r\n * @internal\r\n * @experimental\r\n */\r\nexport class FrameGraphRenderTarget {\r\n protected readonly _textureManager: FrameGraphTextureManager;\r\n protected readonly _renderTargets: FrameGraphTextureHandle[] | undefined;\r\n protected readonly _renderTargetDepth: FrameGraphTextureHandle | undefined;\r\n protected _renderTargetWrapper: RenderTargetWrapper | undefined;\r\n protected _isBackBuffer = false;\r\n\r\n public readonly name: string;\r\n\r\n constructor(\r\n name: string,\r\n textureManager: FrameGraphTextureManager,\r\n renderTargets?: FrameGraphTextureHandle | FrameGraphTextureHandle[],\r\n renderTargetDepth?: FrameGraphTextureHandle\r\n ) {\r\n this.name = name;\r\n this._textureManager = textureManager;\r\n this._renderTargets = renderTargets === undefined ? undefined : Array.isArray(renderTargets) ? renderTargets : [renderTargets];\r\n this._renderTargetDepth = renderTargetDepth;\r\n }\r\n\r\n public get renderTargetWrapper() {\r\n if (this._isBackBuffer) {\r\n return undefined;\r\n }\r\n\r\n if (!this._renderTargetWrapper) {\r\n const engine = this._textureManager.engine;\r\n\r\n // _renderTargets and _renderTargetDepth cannot both be undefined\r\n const textureHandle = this._renderTargets === undefined || this._renderTargets.length === 0 ? this._renderTargetDepth! : this._renderTargets[0];\r\n\r\n if (this._textureManager.isBackbuffer(textureHandle)) {\r\n this._isBackBuffer = true;\r\n return undefined;\r\n }\r\n\r\n const textureDescription = this._textureManager.getTextureDescription(textureHandle);\r\n\r\n const creationOptionsForTexture: IMultiRenderTargetOptions = {\r\n textureCount: this._renderTargets?.length ?? 0,\r\n generateDepthBuffer: false,\r\n label: this.name,\r\n samples: textureDescription.options.samples ?? 1,\r\n dontCreateTextures: true,\r\n };\r\n\r\n this._renderTargetWrapper = engine.createMultipleRenderTarget(textureDescription.size, creationOptionsForTexture, true);\r\n\r\n for (let i = 0; i < creationOptionsForTexture.textureCount!; i++) {\r\n const handle = this._renderTargets![i];\r\n const texture = this._textureManager.getTextureFromHandle(handle);\r\n\r\n if (!texture) {\r\n throw new Error(\r\n `FrameGraphRenderTarget.renderTargetWrapper: Failed to get texture from handle. handle: ${handle}, name: ${this.name}, index: ${i}, renderTargets: ${this._renderTargets}`\r\n );\r\n }\r\n\r\n this._renderTargetWrapper.setTexture(texture, i, false);\r\n }\r\n\r\n if (this._renderTargetDepth !== undefined) {\r\n this._renderTargetWrapper.setDepthStencilTexture(this._textureManager.getTextureFromHandle(this._renderTargetDepth), false);\r\n }\r\n }\r\n\r\n return this._renderTargetWrapper;\r\n }\r\n\r\n public equals(other: FrameGraphRenderTarget): boolean {\r\n const src = this._renderTargets;\r\n const dst = other._renderTargets;\r\n\r\n if (src !== undefined && dst !== undefined) {\r\n if (src.length !== dst.length) {\r\n return false;\r\n }\r\n\r\n for (let i = 0; i < src.length; i++) {\r\n if (src[i] !== dst[i]) {\r\n return false;\r\n }\r\n }\r\n } else if ((src === undefined && dst !== undefined) || (src !== undefined && dst === undefined)) {\r\n return false;\r\n }\r\n\r\n return this._renderTargetDepth === other._renderTargetDepth;\r\n }\r\n\r\n public dispose() {\r\n this._renderTargetWrapper?.dispose();\r\n }\r\n}\r\n"]}
@@ -37,6 +37,12 @@ export declare abstract class FrameGraphTask {
37
37
  * @param skipCreationOfDisabledPasses If true, the disabled passe(s) won't be created.
38
38
  */
39
39
  abstract record(skipCreationOfDisabledPasses?: boolean): void;
40
+ /**
41
+ * This function is called once after the task has been added to the frame graph and before the frame graph is built for the first time.
42
+ * This allows you to initialize asynchronous resources, which is not possible in the constructor.
43
+ * @returns A promise that resolves when the initialization is complete.
44
+ */
45
+ initAsync(): Promise<void>;
40
46
  /**
41
47
  * An observable that is triggered after the textures have been allocated.
42
48
  */
@@ -36,6 +36,15 @@ export class FrameGraphTask {
36
36
  get passesDisabled() {
37
37
  return this._passesDisabled;
38
38
  }
39
+ /**
40
+ * This function is called once after the task has been added to the frame graph and before the frame graph is built for the first time.
41
+ * This allows you to initialize asynchronous resources, which is not possible in the constructor.
42
+ * @returns A promise that resolves when the initialization is complete.
43
+ */
44
+ // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax
45
+ initAsync() {
46
+ return Promise.resolve();
47
+ }
39
48
  /**
40
49
  * Checks if the task is ready to be executed.
41
50
  * @returns True if the task is ready to be executed, else false.
@@ -79,6 +88,12 @@ export class FrameGraphTask {
79
88
  }
80
89
  /** @internal */
81
90
  _reset() {
91
+ for (const pass of this._passes) {
92
+ pass._dispose();
93
+ }
94
+ for (const pass of this._passesDisabled) {
95
+ pass._dispose();
96
+ }
82
97
  this._passes.length = 0;
83
98
  this._passesDisabled.length = 0;
84
99
  }
@@ -152,10 +167,10 @@ export class FrameGraphTask {
152
167
  throw new Error(`The output texture of the task "${this.name}" is different when it is enabled or disabled.`);
153
168
  }
154
169
  }
155
- if (outputDepthTexture !== disabledOutputDepthTexture) {
170
+ if (outputDepthTexture !== disabledOutputDepthTexture && disabledOutputDepthTexture !== null) {
156
171
  throw new Error(`The output depth texture of the task "${this.name}" is different when it is enabled or disabled.`);
157
172
  }
158
- if (outputObjectList !== disabledOutputObjectList) {
173
+ if (outputObjectList !== disabledOutputObjectList && disabledOutputObjectList !== null) {
159
174
  throw new Error(`The output object list of the task "${this.name}" is different when it is enabled or disabled.`);
160
175
  }
161
176
  }
@@ -1 +1 @@
1
- {"version":3,"file":"frameGraphTask.js","sourceRoot":"","sources":["../../../../dev/core/src/FrameGraph/frameGraphTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FrameGraph, FrameGraphObjectList, IFrameGraphPass, Nullable, FrameGraphTextureHandle, InternalTexture, FrameGraphRenderContext } from \"core/index\";\r\nimport { FrameGraphObjectListPass } from \"./Passes/objectListPass\";\r\nimport { FrameGraphRenderPass } from \"./Passes/renderPass\";\r\nimport { Observable } from \"core/Misc/observable\";\r\n\r\n/**\r\n * Represents a task in a frame graph.\r\n * @experimental\r\n */\r\nexport abstract class FrameGraphTask {\r\n protected readonly _frameGraph: FrameGraph;\r\n\r\n private readonly _passes: IFrameGraphPass[] = [];\r\n private readonly _passesDisabled: IFrameGraphPass[] = [];\r\n\r\n // Note: must be a getter/setter even if there's no specific processing, otherwise inherited classes can't make it a getter/setter!\r\n // Same thing for the disabled property\r\n protected _name: string;\r\n\r\n /**\r\n * The name of the task.\r\n */\r\n public get name() {\r\n return this._name;\r\n }\r\n\r\n public set name(value: string) {\r\n this._name = value;\r\n }\r\n\r\n protected _disabled = false;\r\n\r\n /**\r\n * Whether the task is disabled.\r\n */\r\n public get disabled() {\r\n return this._disabled;\r\n }\r\n\r\n public set disabled(value: boolean) {\r\n this._disabled = value;\r\n }\r\n\r\n /**\r\n * Gets the render passes of the task.\r\n */\r\n public get passes() {\r\n return this._passes;\r\n }\r\n\r\n /**\r\n * Gets the disabled render passes of the task.\r\n */\r\n public get passesDisabled() {\r\n return this._passesDisabled;\r\n }\r\n\r\n /**\r\n * The (texture) dependencies of the task (optional).\r\n */\r\n public dependencies?: Set<FrameGraphTextureHandle>;\r\n\r\n /**\r\n * Records the task in the frame graph. Use this function to add content (render passes, ...) to the task.\r\n * @param skipCreationOfDisabledPasses If true, the disabled passe(s) won't be created.\r\n */\r\n public abstract record(skipCreationOfDisabledPasses?: boolean): void;\r\n\r\n /**\r\n * An observable that is triggered after the textures have been allocated.\r\n */\r\n public onTexturesAllocatedObservable: Observable<FrameGraphRenderContext> = new Observable();\r\n\r\n /**\r\n * An observable that is triggered before the task is executed.\r\n */\r\n public onBeforeTaskExecute: Observable<FrameGraphTask> = new Observable();\r\n\r\n /**\r\n * An observable that is triggered after the task is executed.\r\n */\r\n public onAfterTaskExecute: Observable<FrameGraphTask> = new Observable();\r\n\r\n /**\r\n * Checks if the task is ready to be executed.\r\n * @returns True if the task is ready to be executed, else false.\r\n */\r\n public isReady(): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Disposes of the task.\r\n */\r\n public dispose() {\r\n this._reset();\r\n this.onTexturesAllocatedObservable.clear();\r\n this.onBeforeTaskExecute.clear();\r\n this.onAfterTaskExecute.clear();\r\n }\r\n\r\n /**\r\n * Constructs a new frame graph task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph this task is associated with.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph) {\r\n this.name = name;\r\n this._frameGraph = frameGraph;\r\n this._reset();\r\n }\r\n\r\n /** @internal */\r\n public _reset() {\r\n this._passes.length = 0;\r\n this._passesDisabled.length = 0;\r\n }\r\n\r\n /** @internal */\r\n public _addPass(pass: IFrameGraphPass, disabled: boolean) {\r\n if (disabled) {\r\n this._passesDisabled.push(pass);\r\n } else {\r\n this._passes.push(pass);\r\n }\r\n }\r\n\r\n /** @internal */\r\n public _checkTask() {\r\n let outputTexture: Nullable<Nullable<InternalTexture>[]> = null;\r\n let outputDepthTexture: Nullable<InternalTexture> = null;\r\n let outputObjectList: FrameGraphObjectList | undefined;\r\n\r\n for (const pass of this._passes) {\r\n const errMsg = pass._isValid();\r\n if (errMsg) {\r\n throw new Error(`Pass \"${pass.name}\" is not valid. ${errMsg}`);\r\n }\r\n if (FrameGraphRenderPass.IsRenderPass(pass)) {\r\n const handles = Array.isArray(pass.renderTarget) ? pass.renderTarget : [pass.renderTarget];\r\n outputTexture = [];\r\n for (const handle of handles) {\r\n if (handle !== undefined) {\r\n outputTexture.push(this._frameGraph.textureManager.getTextureFromHandle(handle));\r\n }\r\n }\r\n outputDepthTexture = pass.renderTargetDepth !== undefined ? this._frameGraph.textureManager.getTextureFromHandle(pass.renderTargetDepth) : null;\r\n } else if (FrameGraphObjectListPass.IsObjectListPass(pass)) {\r\n outputObjectList = pass.objectList;\r\n }\r\n }\r\n\r\n let disabledOutputTexture: Nullable<Nullable<InternalTexture>[]> = null;\r\n let disabledOutputTextureHandle: (FrameGraphTextureHandle | undefined)[] = [];\r\n let disabledOutputDepthTexture: Nullable<InternalTexture> = null;\r\n let disabledOutputObjectList: FrameGraphObjectList | undefined;\r\n\r\n for (const pass of this._passesDisabled) {\r\n const errMsg = pass._isValid();\r\n if (errMsg) {\r\n throw new Error(`Pass \"${pass.name}\" is not valid. ${errMsg}`);\r\n }\r\n if (FrameGraphRenderPass.IsRenderPass(pass)) {\r\n const handles = Array.isArray(pass.renderTarget) ? pass.renderTarget : [pass.renderTarget];\r\n disabledOutputTexture = [];\r\n for (const handle of handles) {\r\n if (handle !== undefined) {\r\n disabledOutputTexture.push(this._frameGraph.textureManager.getTextureFromHandle(handle));\r\n }\r\n }\r\n disabledOutputTextureHandle = handles;\r\n disabledOutputDepthTexture = pass.renderTargetDepth !== undefined ? this._frameGraph.textureManager.getTextureFromHandle(pass.renderTargetDepth) : null;\r\n } else if (FrameGraphObjectListPass.IsObjectListPass(pass)) {\r\n disabledOutputObjectList = pass.objectList;\r\n }\r\n }\r\n\r\n if (this._passesDisabled.length > 0) {\r\n if (!this._checkSameRenderTarget(outputTexture, disabledOutputTexture)) {\r\n let ok = true;\r\n for (const handle of disabledOutputTextureHandle) {\r\n if (handle !== undefined && !this._frameGraph.textureManager.isHistoryTexture(handle)) {\r\n ok = false;\r\n break;\r\n }\r\n }\r\n if (!ok) {\r\n throw new Error(`The output texture of the task \"${this.name}\" is different when it is enabled or disabled.`);\r\n }\r\n }\r\n if (outputDepthTexture !== disabledOutputDepthTexture) {\r\n throw new Error(`The output depth texture of the task \"${this.name}\" is different when it is enabled or disabled.`);\r\n }\r\n if (outputObjectList !== disabledOutputObjectList) {\r\n throw new Error(`The output object list of the task \"${this.name}\" is different when it is enabled or disabled.`);\r\n }\r\n }\r\n }\r\n\r\n /** @internal */\r\n public _execute() {\r\n const passes = this._disabled && this._passesDisabled.length > 0 ? this._passesDisabled : this._passes;\r\n\r\n this.onBeforeTaskExecute.notifyObservers(this);\r\n\r\n for (const pass of passes) {\r\n pass._execute();\r\n }\r\n\r\n this.onAfterTaskExecute.notifyObservers(this);\r\n }\r\n\r\n private _checkSameRenderTarget(src: Nullable<Nullable<InternalTexture>[]>, dst: Nullable<Nullable<InternalTexture>[]>) {\r\n if (src === null || dst === null) {\r\n return src === dst;\r\n }\r\n\r\n if (src.length !== dst.length) {\r\n return false;\r\n }\r\n\r\n for (let i = 0; i < src.length; i++) {\r\n if (src[i] !== dst[i]) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"frameGraphTask.js","sourceRoot":"","sources":["../../../../dev/core/src/FrameGraph/frameGraphTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FrameGraph, FrameGraphObjectList, IFrameGraphPass, Nullable, FrameGraphTextureHandle, InternalTexture, FrameGraphRenderContext } from \"core/index\";\r\nimport { FrameGraphObjectListPass } from \"./Passes/objectListPass\";\r\nimport { FrameGraphRenderPass } from \"./Passes/renderPass\";\r\nimport { Observable } from \"core/Misc/observable\";\r\n\r\n/**\r\n * Represents a task in a frame graph.\r\n * @experimental\r\n */\r\nexport abstract class FrameGraphTask {\r\n protected readonly _frameGraph: FrameGraph;\r\n\r\n private readonly _passes: IFrameGraphPass[] = [];\r\n private readonly _passesDisabled: IFrameGraphPass[] = [];\r\n\r\n // Note: must be a getter/setter even if there's no specific processing, otherwise inherited classes can't make it a getter/setter!\r\n // Same thing for the disabled property\r\n protected _name: string;\r\n\r\n /**\r\n * The name of the task.\r\n */\r\n public get name() {\r\n return this._name;\r\n }\r\n\r\n public set name(value: string) {\r\n this._name = value;\r\n }\r\n\r\n protected _disabled = false;\r\n\r\n /**\r\n * Whether the task is disabled.\r\n */\r\n public get disabled() {\r\n return this._disabled;\r\n }\r\n\r\n public set disabled(value: boolean) {\r\n this._disabled = value;\r\n }\r\n\r\n /**\r\n * Gets the render passes of the task.\r\n */\r\n public get passes() {\r\n return this._passes;\r\n }\r\n\r\n /**\r\n * Gets the disabled render passes of the task.\r\n */\r\n public get passesDisabled() {\r\n return this._passesDisabled;\r\n }\r\n\r\n /**\r\n * The (texture) dependencies of the task (optional).\r\n */\r\n public dependencies?: Set<FrameGraphTextureHandle>;\r\n\r\n /**\r\n * Records the task in the frame graph. Use this function to add content (render passes, ...) to the task.\r\n * @param skipCreationOfDisabledPasses If true, the disabled passe(s) won't be created.\r\n */\r\n public abstract record(skipCreationOfDisabledPasses?: boolean): void;\r\n\r\n /**\r\n * This function is called once after the task has been added to the frame graph and before the frame graph is built for the first time.\r\n * This allows you to initialize asynchronous resources, which is not possible in the constructor.\r\n * @returns A promise that resolves when the initialization is complete.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n public initAsync(): Promise<void> {\r\n return Promise.resolve();\r\n }\r\n\r\n /**\r\n * An observable that is triggered after the textures have been allocated.\r\n */\r\n public onTexturesAllocatedObservable: Observable<FrameGraphRenderContext> = new Observable();\r\n\r\n /**\r\n * An observable that is triggered before the task is executed.\r\n */\r\n public onBeforeTaskExecute: Observable<FrameGraphTask> = new Observable();\r\n\r\n /**\r\n * An observable that is triggered after the task is executed.\r\n */\r\n public onAfterTaskExecute: Observable<FrameGraphTask> = new Observable();\r\n\r\n /**\r\n * Checks if the task is ready to be executed.\r\n * @returns True if the task is ready to be executed, else false.\r\n */\r\n public isReady(): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Disposes of the task.\r\n */\r\n public dispose() {\r\n this._reset();\r\n this.onTexturesAllocatedObservable.clear();\r\n this.onBeforeTaskExecute.clear();\r\n this.onAfterTaskExecute.clear();\r\n }\r\n\r\n /**\r\n * Constructs a new frame graph task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph this task is associated with.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph) {\r\n this.name = name;\r\n this._frameGraph = frameGraph;\r\n this._reset();\r\n }\r\n\r\n /** @internal */\r\n public _reset() {\r\n for (const pass of this._passes) {\r\n pass._dispose();\r\n }\r\n for (const pass of this._passesDisabled) {\r\n pass._dispose();\r\n }\r\n this._passes.length = 0;\r\n this._passesDisabled.length = 0;\r\n }\r\n\r\n /** @internal */\r\n public _addPass(pass: IFrameGraphPass, disabled: boolean) {\r\n if (disabled) {\r\n this._passesDisabled.push(pass);\r\n } else {\r\n this._passes.push(pass);\r\n }\r\n }\r\n\r\n /** @internal */\r\n public _checkTask() {\r\n let outputTexture: Nullable<Nullable<InternalTexture>[]> = null;\r\n let outputDepthTexture: Nullable<InternalTexture> = null;\r\n let outputObjectList: FrameGraphObjectList | undefined;\r\n\r\n for (const pass of this._passes) {\r\n const errMsg = pass._isValid();\r\n if (errMsg) {\r\n throw new Error(`Pass \"${pass.name}\" is not valid. ${errMsg}`);\r\n }\r\n if (FrameGraphRenderPass.IsRenderPass(pass)) {\r\n const handles = Array.isArray(pass.renderTarget) ? pass.renderTarget : [pass.renderTarget];\r\n outputTexture = [];\r\n for (const handle of handles) {\r\n if (handle !== undefined) {\r\n outputTexture.push(this._frameGraph.textureManager.getTextureFromHandle(handle));\r\n }\r\n }\r\n outputDepthTexture = pass.renderTargetDepth !== undefined ? this._frameGraph.textureManager.getTextureFromHandle(pass.renderTargetDepth) : null;\r\n } else if (FrameGraphObjectListPass.IsObjectListPass(pass)) {\r\n outputObjectList = pass.objectList;\r\n }\r\n }\r\n\r\n let disabledOutputTexture: Nullable<Nullable<InternalTexture>[]> = null;\r\n let disabledOutputTextureHandle: (FrameGraphTextureHandle | undefined)[] = [];\r\n let disabledOutputDepthTexture: Nullable<InternalTexture> = null;\r\n let disabledOutputObjectList: FrameGraphObjectList | undefined;\r\n\r\n for (const pass of this._passesDisabled) {\r\n const errMsg = pass._isValid();\r\n if (errMsg) {\r\n throw new Error(`Pass \"${pass.name}\" is not valid. ${errMsg}`);\r\n }\r\n if (FrameGraphRenderPass.IsRenderPass(pass)) {\r\n const handles = Array.isArray(pass.renderTarget) ? pass.renderTarget : [pass.renderTarget];\r\n disabledOutputTexture = [];\r\n for (const handle of handles) {\r\n if (handle !== undefined) {\r\n disabledOutputTexture.push(this._frameGraph.textureManager.getTextureFromHandle(handle));\r\n }\r\n }\r\n disabledOutputTextureHandle = handles;\r\n disabledOutputDepthTexture = pass.renderTargetDepth !== undefined ? this._frameGraph.textureManager.getTextureFromHandle(pass.renderTargetDepth) : null;\r\n } else if (FrameGraphObjectListPass.IsObjectListPass(pass)) {\r\n disabledOutputObjectList = pass.objectList;\r\n }\r\n }\r\n\r\n if (this._passesDisabled.length > 0) {\r\n if (!this._checkSameRenderTarget(outputTexture, disabledOutputTexture)) {\r\n let ok = true;\r\n for (const handle of disabledOutputTextureHandle) {\r\n if (handle !== undefined && !this._frameGraph.textureManager.isHistoryTexture(handle)) {\r\n ok = false;\r\n break;\r\n }\r\n }\r\n if (!ok) {\r\n throw new Error(`The output texture of the task \"${this.name}\" is different when it is enabled or disabled.`);\r\n }\r\n }\r\n if (outputDepthTexture !== disabledOutputDepthTexture && disabledOutputDepthTexture !== null) {\r\n throw new Error(`The output depth texture of the task \"${this.name}\" is different when it is enabled or disabled.`);\r\n }\r\n if (outputObjectList !== disabledOutputObjectList && disabledOutputObjectList !== null) {\r\n throw new Error(`The output object list of the task \"${this.name}\" is different when it is enabled or disabled.`);\r\n }\r\n }\r\n }\r\n\r\n /** @internal */\r\n public _execute() {\r\n const passes = this._disabled && this._passesDisabled.length > 0 ? this._passesDisabled : this._passes;\r\n\r\n this.onBeforeTaskExecute.notifyObservers(this);\r\n\r\n for (const pass of passes) {\r\n pass._execute();\r\n }\r\n\r\n this.onAfterTaskExecute.notifyObservers(this);\r\n }\r\n\r\n private _checkSameRenderTarget(src: Nullable<Nullable<InternalTexture>[]>, dst: Nullable<Nullable<InternalTexture>[]>) {\r\n if (src === null || dst === null) {\r\n return src === dst;\r\n }\r\n\r\n if (src.length !== dst.length) {\r\n return false;\r\n }\r\n\r\n for (let i = 0; i < src.length; i++) {\r\n if (src[i] !== dst[i]) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n"]}
@@ -77,4 +77,6 @@ export interface IFrameGraphPass {
77
77
  _execute(): void;
78
78
  /** @internal */
79
79
  _isValid(): Nullable<string>;
80
+ /** @internal */
81
+ _dispose(): void;
80
82
  }
@@ -1 +1 @@
1
- {"version":3,"file":"frameGraphTypes.js","sourceRoot":"","sources":["../../../../dev/core/src/FrameGraph/frameGraphTypes.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,gEAAgE;AAChE,MAAM,CAAC,MAAM,4BAA4B,GAA4B,CAAC,CAAC;AAEvE;;GAEG;AACH,gEAAgE;AAChE,MAAM,CAAC,MAAM,mCAAmC,GAA4B,CAAC,CAAC","sourcesContent":["import type { Nullable, TextureSize, FrameGraphContext } from \"core/index\";\r\n\r\n/**\r\n * Represents a texture handle in the frame graph.\r\n */\r\nexport type FrameGraphTextureHandle = number;\r\n\r\n/**\r\n * Represents a texture handle for the backbuffer color texture.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const backbufferColorTextureHandle: FrameGraphTextureHandle = 0;\r\n\r\n/**\r\n * Represents a texture handle for the backbuffer depth/stencil texture.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const backbufferDepthStencilTextureHandle: FrameGraphTextureHandle = 1;\r\n\r\n/**\r\n * Options used to describe a texture to be created in the frame graph.\r\n */\r\nexport type FrameGraphTextureOptions = {\r\n /** Specifies if mipmaps must be created for the textures (default: false) */\r\n createMipMaps?: boolean;\r\n\r\n /** Defines sample count (default: 1) */\r\n samples?: number;\r\n\r\n /** Defines the types of the textures */\r\n types?: number[];\r\n\r\n /** Defines the format of the textures (RED, RG, RGB, RGBA, ALPHA...) */\r\n formats?: number[];\r\n\r\n /** Defines if sRGB format should be used for each of texture */\r\n useSRGBBuffers?: boolean[];\r\n\r\n /** Defines the creation flags of the textures (Constants.TEXTURE_CREATIONFLAG_STORAGE for storage textures, for eg) */\r\n creationFlags?: number[];\r\n\r\n /** Defines the names of the textures (used for debugging purpose) */\r\n labels?: string[];\r\n};\r\n\r\n/**\r\n * Options used to create a texture / list of textures in the frame graph.\r\n */\r\nexport type FrameGraphTextureCreationOptions = {\r\n /** Size of the textures. If sizeIsPercentage is true, these are percentages relative to the screen size (100 = 100%) */\r\n size: TextureSize;\r\n\r\n /** Options used to create the textures */\r\n options: FrameGraphTextureOptions;\r\n\r\n /** If true, indicates that \"size\" is percentages relative to the screen size */\r\n sizeIsPercentage: boolean;\r\n\r\n /** Indicates that the texture is a history texture (default: false) */\r\n isHistoryTexture?: boolean;\r\n};\r\n\r\n/**\r\n * Represents a texture description in the frame graph.\r\n * This is basically the same thing than FrameGraphTextureCreationOptions, but the size is never in percentage and always in pixels.\r\n */\r\nexport type FrameGraphTextureDescription = {\r\n /** Size of the texture */\r\n size: { width: number; height: number };\r\n\r\n /** Options used to create the texture */\r\n options: FrameGraphTextureOptions;\r\n};\r\n\r\n/**\r\n * Defines a pass in the frame graph.\r\n */\r\nexport interface IFrameGraphPass {\r\n /**\r\n * The name of the pass.\r\n */\r\n name: string;\r\n\r\n /**\r\n * Whether the pass is disabled.\r\n */\r\n disabled: boolean;\r\n\r\n /**\r\n * Sets the function to execute when the pass is executed\r\n * @param func The function to execute when the pass is executed\r\n */\r\n setExecuteFunc(func: (context: FrameGraphContext) => void): void;\r\n\r\n /** @internal */\r\n _execute(): void;\r\n\r\n /** @internal */\r\n _isValid(): Nullable<string>;\r\n}\r\n"]}
1
+ {"version":3,"file":"frameGraphTypes.js","sourceRoot":"","sources":["../../../../dev/core/src/FrameGraph/frameGraphTypes.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,gEAAgE;AAChE,MAAM,CAAC,MAAM,4BAA4B,GAA4B,CAAC,CAAC;AAEvE;;GAEG;AACH,gEAAgE;AAChE,MAAM,CAAC,MAAM,mCAAmC,GAA4B,CAAC,CAAC","sourcesContent":["import type { Nullable, TextureSize, FrameGraphContext } from \"core/index\";\r\n\r\n/**\r\n * Represents a texture handle in the frame graph.\r\n */\r\nexport type FrameGraphTextureHandle = number;\r\n\r\n/**\r\n * Represents a texture handle for the backbuffer color texture.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const backbufferColorTextureHandle: FrameGraphTextureHandle = 0;\r\n\r\n/**\r\n * Represents a texture handle for the backbuffer depth/stencil texture.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const backbufferDepthStencilTextureHandle: FrameGraphTextureHandle = 1;\r\n\r\n/**\r\n * Options used to describe a texture to be created in the frame graph.\r\n */\r\nexport type FrameGraphTextureOptions = {\r\n /** Specifies if mipmaps must be created for the textures (default: false) */\r\n createMipMaps?: boolean;\r\n\r\n /** Defines sample count (default: 1) */\r\n samples?: number;\r\n\r\n /** Defines the types of the textures */\r\n types?: number[];\r\n\r\n /** Defines the format of the textures (RED, RG, RGB, RGBA, ALPHA...) */\r\n formats?: number[];\r\n\r\n /** Defines if sRGB format should be used for each of texture */\r\n useSRGBBuffers?: boolean[];\r\n\r\n /** Defines the creation flags of the textures (Constants.TEXTURE_CREATIONFLAG_STORAGE for storage textures, for eg) */\r\n creationFlags?: number[];\r\n\r\n /** Defines the names of the textures (used for debugging purpose) */\r\n labels?: string[];\r\n};\r\n\r\n/**\r\n * Options used to create a texture / list of textures in the frame graph.\r\n */\r\nexport type FrameGraphTextureCreationOptions = {\r\n /** Size of the textures. If sizeIsPercentage is true, these are percentages relative to the screen size (100 = 100%) */\r\n size: TextureSize;\r\n\r\n /** Options used to create the textures */\r\n options: FrameGraphTextureOptions;\r\n\r\n /** If true, indicates that \"size\" is percentages relative to the screen size */\r\n sizeIsPercentage: boolean;\r\n\r\n /** Indicates that the texture is a history texture (default: false) */\r\n isHistoryTexture?: boolean;\r\n};\r\n\r\n/**\r\n * Represents a texture description in the frame graph.\r\n * This is basically the same thing than FrameGraphTextureCreationOptions, but the size is never in percentage and always in pixels.\r\n */\r\nexport type FrameGraphTextureDescription = {\r\n /** Size of the texture */\r\n size: { width: number; height: number };\r\n\r\n /** Options used to create the texture */\r\n options: FrameGraphTextureOptions;\r\n};\r\n\r\n/**\r\n * Defines a pass in the frame graph.\r\n */\r\nexport interface IFrameGraphPass {\r\n /**\r\n * The name of the pass.\r\n */\r\n name: string;\r\n\r\n /**\r\n * Whether the pass is disabled.\r\n */\r\n disabled: boolean;\r\n\r\n /**\r\n * Sets the function to execute when the pass is executed\r\n * @param func The function to execute when the pass is executed\r\n */\r\n setExecuteFunc(func: (context: FrameGraphContext) => void): void;\r\n\r\n /** @internal */\r\n _execute(): void;\r\n\r\n /** @internal */\r\n _isValid(): Nullable<string>;\r\n\r\n /** @internal */\r\n _dispose(): void;\r\n}\r\n"]}
@@ -12,6 +12,7 @@ export * from "./Tasks/Layers/highlightLayerTask.js";
12
12
  export * from "./Tasks/Misc/computeShaderTask.js";
13
13
  export * from "./Tasks/Misc/cullObjectsTask.js";
14
14
  export * from "./Tasks/Misc/executeTask.js";
15
+ export * from "./Tasks/Misc/lightingVolumeTask.js";
15
16
  export * from "./Tasks/PostProcesses/anaglyphTask.js";
16
17
  export * from "./Tasks/PostProcesses/blackAndWhiteTask.js";
17
18
  export * from "./Tasks/PostProcesses/bloomTask.js";
@@ -36,6 +37,7 @@ export * from "./Tasks/PostProcesses/ssao2RenderingPipelineTask.js";
36
37
  export * from "./Tasks/PostProcesses/ssrRenderingPipelineTask.js";
37
38
  export * from "./Tasks/PostProcesses/taaTask.js";
38
39
  export * from "./Tasks/PostProcesses/tonemapTask.js";
40
+ export * from "./Tasks/PostProcesses/volumetricLightingTask.js";
39
41
  export * from "./Tasks/Texture/clearTextureTask.js";
40
42
  export * from "./Tasks/Texture/copyToBackbufferColorTask.js";
41
43
  export * from "./Tasks/Texture/copyToTextureTask.js";
@@ -13,6 +13,7 @@ export * from "./Tasks/Layers/highlightLayerTask.js";
13
13
  export * from "./Tasks/Misc/computeShaderTask.js";
14
14
  export * from "./Tasks/Misc/cullObjectsTask.js";
15
15
  export * from "./Tasks/Misc/executeTask.js";
16
+ export * from "./Tasks/Misc/lightingVolumeTask.js";
16
17
  export * from "./Tasks/PostProcesses/anaglyphTask.js";
17
18
  export * from "./Tasks/PostProcesses/blackAndWhiteTask.js";
18
19
  export * from "./Tasks/PostProcesses/bloomTask.js";
@@ -37,6 +38,7 @@ export * from "./Tasks/PostProcesses/ssao2RenderingPipelineTask.js";
37
38
  export * from "./Tasks/PostProcesses/ssrRenderingPipelineTask.js";
38
39
  export * from "./Tasks/PostProcesses/taaTask.js";
39
40
  export * from "./Tasks/PostProcesses/tonemapTask.js";
41
+ export * from "./Tasks/PostProcesses/volumetricLightingTask.js";
40
42
  export * from "./Tasks/Texture/clearTextureTask.js";
41
43
  export * from "./Tasks/Texture/copyToBackbufferColorTask.js";
42
44
  export * from "./Tasks/Texture/copyToTextureTask.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../dev/core/src/FrameGraph/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4CAA4C,CAAC;AAC3D,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC;AAClD,cAAc,qBAAqB,CAAC;AAEpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AAEpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAElD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AAEzC,cAAc,oCAAoC,CAAC;AACnD,cAAc,yCAAyC,CAAC;AACxD,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+CAA+C,CAAC;AAC9D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,uCAAuC,CAAC;AACtD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,wCAAwC,CAAC;AACvD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uCAAuC,CAAC;AACtD,cAAc,mCAAmC,CAAC;AAClD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,kDAAkD,CAAC;AACjE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mCAAmC,CAAC;AAElD,cAAc,kCAAkC,CAAC;AACjD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,mCAAmC,CAAC;AAClD,cAAc,qCAAqC,CAAC;AAEpD,cAAc,0CAA0C,CAAC;AACzD,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,4CAA4C,CAAC;AAE3D,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-restricted-imports */\r\nexport * from \"./Node/nodeRenderGraph\";\r\nexport * from \"./Node/nodeRenderGraphBlock\";\r\nexport * from \"./Node/nodeRenderGraphBlockConnectionPoint\";\r\nexport * from \"./Node/nodeRenderGraphBuildState\";\r\nexport * from \"./Node/Types/nodeRenderGraphTypes\";\r\nexport * from \"./Node/Blocks/index\";\r\n\r\nexport * from \"./Passes/objectListPass\";\r\nexport * from \"./Passes/pass\";\r\nexport * from \"./Passes/renderPass\";\r\n\r\nexport * from \"./Tasks/Layers/glowLayerTask\";\r\nexport * from \"./Tasks/Layers/highlightLayerTask\";\r\n\r\nexport * from \"./Tasks/Misc/computeShaderTask\";\r\nexport * from \"./Tasks/Misc/cullObjectsTask\";\r\nexport * from \"./Tasks/Misc/executeTask\";\r\n\r\nexport * from \"./Tasks/PostProcesses/anaglyphTask\";\r\nexport * from \"./Tasks/PostProcesses/blackAndWhiteTask\";\r\nexport * from \"./Tasks/PostProcesses/bloomTask\";\r\nexport * from \"./Tasks/PostProcesses/blurTask\";\r\nexport * from \"./Tasks/PostProcesses/chromaticAberrationTask\";\r\nexport * from \"./Tasks/PostProcesses/circleOfConfusionTask\";\r\nexport * from \"./Tasks/PostProcesses/colorCorrectionTask\";\r\nexport * from \"./Tasks/PostProcesses/convolutionTask\";\r\nexport * from \"./Tasks/PostProcesses/customPostProcessTask\";\r\nexport * from \"./Tasks/PostProcesses/depthOfFieldTask\";\r\nexport * from \"./Tasks/PostProcesses/extractHighlightsTask\";\r\nexport * from \"./Tasks/PostProcesses/filterTask\";\r\nexport * from \"./Tasks/PostProcesses/fxaaTask\";\r\nexport * from \"./Tasks/PostProcesses/grainTask\";\r\nexport * from \"./Tasks/PostProcesses/imageProcessingTask\";\r\nexport * from \"./Tasks/PostProcesses/motionBlurTask\";\r\nexport * from \"./Tasks/PostProcesses/passTask\";\r\nexport * from \"./Tasks/PostProcesses/postProcessTask\";\r\nexport * from \"./Tasks/PostProcesses/sharpenTask\";\r\nexport * from \"./Tasks/PostProcesses/screenSpaceCurvatureTask\";\r\nexport * from \"./Tasks/PostProcesses/ssao2RenderingPipelineTask\";\r\nexport * from \"./Tasks/PostProcesses/ssrRenderingPipelineTask\";\r\nexport * from \"./Tasks/PostProcesses/taaTask\";\r\nexport * from \"./Tasks/PostProcesses/tonemapTask\";\r\n\r\nexport * from \"./Tasks/Texture/clearTextureTask\";\r\nexport * from \"./Tasks/Texture/copyToBackbufferColorTask\";\r\nexport * from \"./Tasks/Texture/copyToTextureTask\";\r\nexport * from \"./Tasks/Texture/generateMipMapsTask\";\r\n\r\nexport * from \"./Tasks/Rendering/csmShadowGeneratorTask\";\r\nexport * from \"./Tasks/Rendering/geometryRendererTask\";\r\nexport * from \"./Tasks/Rendering/objectRendererTask\";\r\nexport * from \"./Tasks/Rendering/shadowGeneratorTask\";\r\nexport * from \"./Tasks/Rendering/utilityLayerRendererTask\";\r\n\r\nexport * from \"./frameGraph\";\r\nexport * from \"./frameGraphContext\";\r\nexport * from \"./frameGraphObjectList\";\r\nexport * from \"./frameGraphRenderContext\";\r\nexport * from \"./frameGraphRenderTarget\";\r\nexport * from \"./frameGraphTask\";\r\nexport * from \"./frameGraphTextureManager\";\r\nexport * from \"./frameGraphTypes\";\r\nexport * from \"./frameGraphUtils\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../dev/core/src/FrameGraph/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4CAA4C,CAAC;AAC3D,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC;AAClD,cAAc,qBAAqB,CAAC;AAEpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AAEpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAElD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,iCAAiC,CAAC;AAEhD,cAAc,oCAAoC,CAAC;AACnD,cAAc,yCAAyC,CAAC;AACxD,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+CAA+C,CAAC;AAC9D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,uCAAuC,CAAC;AACtD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,wCAAwC,CAAC;AACvD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uCAAuC,CAAC;AACtD,cAAc,mCAAmC,CAAC;AAClD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,kDAAkD,CAAC;AACjE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mCAAmC,CAAC;AAClD,cAAc,8CAA8C,CAAC;AAE7D,cAAc,kCAAkC,CAAC;AACjD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,mCAAmC,CAAC;AAClD,cAAc,qCAAqC,CAAC;AAEpD,cAAc,0CAA0C,CAAC;AACzD,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,4CAA4C,CAAC;AAE3D,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-restricted-imports */\r\nexport * from \"./Node/nodeRenderGraph\";\r\nexport * from \"./Node/nodeRenderGraphBlock\";\r\nexport * from \"./Node/nodeRenderGraphBlockConnectionPoint\";\r\nexport * from \"./Node/nodeRenderGraphBuildState\";\r\nexport * from \"./Node/Types/nodeRenderGraphTypes\";\r\nexport * from \"./Node/Blocks/index\";\r\n\r\nexport * from \"./Passes/objectListPass\";\r\nexport * from \"./Passes/pass\";\r\nexport * from \"./Passes/renderPass\";\r\n\r\nexport * from \"./Tasks/Layers/glowLayerTask\";\r\nexport * from \"./Tasks/Layers/highlightLayerTask\";\r\n\r\nexport * from \"./Tasks/Misc/computeShaderTask\";\r\nexport * from \"./Tasks/Misc/cullObjectsTask\";\r\nexport * from \"./Tasks/Misc/executeTask\";\r\nexport * from \"./Tasks/Misc/lightingVolumeTask\";\r\n\r\nexport * from \"./Tasks/PostProcesses/anaglyphTask\";\r\nexport * from \"./Tasks/PostProcesses/blackAndWhiteTask\";\r\nexport * from \"./Tasks/PostProcesses/bloomTask\";\r\nexport * from \"./Tasks/PostProcesses/blurTask\";\r\nexport * from \"./Tasks/PostProcesses/chromaticAberrationTask\";\r\nexport * from \"./Tasks/PostProcesses/circleOfConfusionTask\";\r\nexport * from \"./Tasks/PostProcesses/colorCorrectionTask\";\r\nexport * from \"./Tasks/PostProcesses/convolutionTask\";\r\nexport * from \"./Tasks/PostProcesses/customPostProcessTask\";\r\nexport * from \"./Tasks/PostProcesses/depthOfFieldTask\";\r\nexport * from \"./Tasks/PostProcesses/extractHighlightsTask\";\r\nexport * from \"./Tasks/PostProcesses/filterTask\";\r\nexport * from \"./Tasks/PostProcesses/fxaaTask\";\r\nexport * from \"./Tasks/PostProcesses/grainTask\";\r\nexport * from \"./Tasks/PostProcesses/imageProcessingTask\";\r\nexport * from \"./Tasks/PostProcesses/motionBlurTask\";\r\nexport * from \"./Tasks/PostProcesses/passTask\";\r\nexport * from \"./Tasks/PostProcesses/postProcessTask\";\r\nexport * from \"./Tasks/PostProcesses/sharpenTask\";\r\nexport * from \"./Tasks/PostProcesses/screenSpaceCurvatureTask\";\r\nexport * from \"./Tasks/PostProcesses/ssao2RenderingPipelineTask\";\r\nexport * from \"./Tasks/PostProcesses/ssrRenderingPipelineTask\";\r\nexport * from \"./Tasks/PostProcesses/taaTask\";\r\nexport * from \"./Tasks/PostProcesses/tonemapTask\";\r\nexport * from \"./Tasks/PostProcesses/volumetricLightingTask\";\r\n\r\nexport * from \"./Tasks/Texture/clearTextureTask\";\r\nexport * from \"./Tasks/Texture/copyToBackbufferColorTask\";\r\nexport * from \"./Tasks/Texture/copyToTextureTask\";\r\nexport * from \"./Tasks/Texture/generateMipMapsTask\";\r\n\r\nexport * from \"./Tasks/Rendering/csmShadowGeneratorTask\";\r\nexport * from \"./Tasks/Rendering/geometryRendererTask\";\r\nexport * from \"./Tasks/Rendering/objectRendererTask\";\r\nexport * from \"./Tasks/Rendering/shadowGeneratorTask\";\r\nexport * from \"./Tasks/Rendering/utilityLayerRendererTask\";\r\n\r\nexport * from \"./frameGraph\";\r\nexport * from \"./frameGraphContext\";\r\nexport * from \"./frameGraphObjectList\";\r\nexport * from \"./frameGraphRenderContext\";\r\nexport * from \"./frameGraphRenderTarget\";\r\nexport * from \"./frameGraphTask\";\r\nexport * from \"./frameGraphTextureManager\";\r\nexport * from \"./frameGraphTypes\";\r\nexport * from \"./frameGraphUtils\";\r\n"]}
@@ -47,7 +47,7 @@ Scene.prototype.createDefaultCamera = function (createArcRotateCamera = false, r
47
47
  let camera;
48
48
  let radius = worldSize.length() * 1.5;
49
49
  // empty scene scenario!
50
- if (!isFinite(radius)) {
50
+ if (!isFinite(radius) || radius === 0) {
51
51
  radius = 1;
52
52
  worldCenter.copyFromFloats(0, 0, 0);
53
53
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sceneHelpers.js","sourceRoot":"","sources":["../../../../dev/core/src/Helpers/sceneHelpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../Misc/logger\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Scene } from \"../scene\";\r\nimport { Vector3 } from \"../Maths/math.vector\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport type { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial\";\r\nimport { PBRMaterial } from \"../Materials/PBR/pbrMaterial\";\r\nimport { HemisphericLight } from \"../Lights/hemisphericLight\";\r\nimport type { IEnvironmentHelperOptions } from \"./environmentHelper\";\r\nimport { EnvironmentHelper } from \"./environmentHelper\";\r\nimport { FreeCamera } from \"../Cameras/freeCamera\";\r\nimport { ArcRotateCamera } from \"../Cameras/arcRotateCamera\";\r\nimport type { TargetCamera } from \"../Cameras/targetCamera\";\r\nimport type { VRExperienceHelperOptions } from \"../Cameras/VR/vrExperienceHelper\";\r\nimport { VRExperienceHelper } from \"../Cameras/VR/vrExperienceHelper\";\r\n\r\nimport \"../Materials/Textures/Loaders/ddsTextureLoader\";\r\nimport \"../Materials/Textures/Loaders/envTextureLoader\";\r\nimport \"../Materials/Textures/Loaders/ktxTextureLoader\";\r\nimport { CreateBox } from \"../Meshes/Builders/boxBuilder\";\r\nimport type { WebXRDefaultExperienceOptions } from \"../XR/webXRDefaultExperience\";\r\nimport { WebXRDefaultExperience } from \"../XR/webXRDefaultExperience\";\r\n\r\n/** @internal */\r\n// eslint-disable-next-line no-var, @typescript-eslint/naming-convention\r\nexport var _forceSceneHelpersToBundle = true;\r\n\r\ndeclare module \"../scene\" {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n export interface Scene {\r\n /**\r\n * Creates a default light for the scene.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/fastBuildWorld#create-default-light\r\n * @param replace has the default false, when true replaces the existing lights in the scene with a hemispheric light\r\n */\r\n createDefaultLight(replace?: boolean): void;\r\n\r\n /**\r\n * Creates a default camera for the scene.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/fastBuildWorld#create-default-camera\r\n * @param createArcRotateCamera has the default false which creates a free camera, when true creates an arc rotate camera\r\n * @param replace has default false, when true replaces the active camera in the scene\r\n * @param attachCameraControls has default false, when true attaches camera controls to the canvas.\r\n */\r\n createDefaultCamera(createArcRotateCamera?: boolean, replace?: boolean, attachCameraControls?: boolean): void;\r\n\r\n /**\r\n * Creates a default camera and a default light.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/fastBuildWorld#create-default-camera-or-light\r\n * @param createArcRotateCamera has the default false which creates a free camera, when true creates an arc rotate camera\r\n * @param replace has the default false, when true replaces the active camera/light in the scene\r\n * @param attachCameraControls has the default false, when true attaches camera controls to the canvas.\r\n */\r\n createDefaultCameraOrLight(createArcRotateCamera?: boolean, replace?: boolean, attachCameraControls?: boolean): void;\r\n\r\n /**\r\n * Creates a new sky box\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/fastBuildWorld#create-default-skybox\r\n * @param environmentTexture defines the texture to use as environment texture\r\n * @param pbr has default false which requires the StandardMaterial to be used, when true PBRMaterial must be used\r\n * @param scale defines the overall scale of the skybox\r\n * @param blur is only available when pbr is true, default is 0, no blur, maximum value is 1\r\n * @param setGlobalEnvTexture has default true indicating that scene.environmentTexture must match the current skybox texture\r\n * @returns a new mesh holding the sky box\r\n */\r\n createDefaultSkybox(environmentTexture?: BaseTexture, pbr?: boolean, scale?: number, blur?: number, setGlobalEnvTexture?: boolean): Nullable<Mesh>;\r\n\r\n /**\r\n * Creates a new environment\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/fastBuildWorld#create-default-environment\r\n * @param options defines the options you can use to configure the environment\r\n * @returns the new EnvironmentHelper\r\n */\r\n createDefaultEnvironment(options?: Partial<IEnvironmentHelperOptions>): Nullable<EnvironmentHelper>;\r\n\r\n /**\r\n * Creates a new VREXperienceHelper\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/webVRHelper\r\n * @param webVROptions defines the options used to create the new VREXperienceHelper\r\n * @deprecated Please use createDefaultXRExperienceAsync instead\r\n * @returns a new VREXperienceHelper\r\n */\r\n createDefaultVRExperience(webVROptions?: VRExperienceHelperOptions): VRExperienceHelper;\r\n\r\n /**\r\n * Creates a new WebXRDefaultExperience\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/webXR/introToWebXR\r\n * @param options experience options\r\n * @returns a promise for a new WebXRDefaultExperience\r\n */\r\n createDefaultXRExperienceAsync(options?: WebXRDefaultExperienceOptions): Promise<WebXRDefaultExperience>;\r\n }\r\n}\r\n\r\nScene.prototype.createDefaultLight = function (replace = false): void {\r\n // Dispose existing light in replace mode.\r\n if (replace) {\r\n if (this.lights) {\r\n for (let i = 0; i < this.lights.length; i++) {\r\n this.lights[i].dispose();\r\n }\r\n }\r\n }\r\n\r\n // Light\r\n if (this.lights.length === 0) {\r\n new HemisphericLight(\"default light\", Vector3.Up(), this);\r\n }\r\n};\r\n\r\nScene.prototype.createDefaultCamera = function (createArcRotateCamera = false, replace = false, attachCameraControls = false): void {\r\n // Dispose existing camera in replace mode.\r\n if (replace) {\r\n if (this.activeCamera) {\r\n this.activeCamera.dispose();\r\n this.activeCamera = null;\r\n }\r\n }\r\n\r\n // Camera\r\n if (!this.activeCamera) {\r\n const worldExtends = this.getWorldExtends((mesh) => mesh.isVisible && mesh.isEnabled());\r\n const worldSize = worldExtends.max.subtract(worldExtends.min);\r\n const worldCenter = worldExtends.min.add(worldSize.scale(0.5));\r\n\r\n let camera: TargetCamera;\r\n let radius = worldSize.length() * 1.5;\r\n // empty scene scenario!\r\n if (!isFinite(radius)) {\r\n radius = 1;\r\n worldCenter.copyFromFloats(0, 0, 0);\r\n }\r\n if (createArcRotateCamera) {\r\n const arcRotateCamera = new ArcRotateCamera(\"default camera\", -(Math.PI / 2), Math.PI / 2, radius, worldCenter, this);\r\n arcRotateCamera.lowerRadiusLimit = radius * 0.01;\r\n arcRotateCamera.wheelPrecision = 100 / radius;\r\n camera = arcRotateCamera;\r\n } else {\r\n const freeCamera = new FreeCamera(\"default camera\", new Vector3(worldCenter.x, worldCenter.y, -radius), this);\r\n freeCamera.setTarget(worldCenter);\r\n camera = freeCamera;\r\n }\r\n camera.minZ = radius * 0.01;\r\n camera.maxZ = radius * 1000;\r\n camera.speed = radius * 0.2;\r\n this.activeCamera = camera;\r\n\r\n if (attachCameraControls) {\r\n camera.attachControl();\r\n }\r\n }\r\n};\r\n\r\nScene.prototype.createDefaultCameraOrLight = function (createArcRotateCamera = false, replace = false, attachCameraControls = false): void {\r\n this.createDefaultLight(replace);\r\n this.createDefaultCamera(createArcRotateCamera, replace, attachCameraControls);\r\n};\r\n\r\nScene.prototype.createDefaultSkybox = function (environmentTexture?: BaseTexture, pbr = false, scale = 1000, blur = 0, setGlobalEnvTexture = true): Nullable<Mesh> {\r\n if (!environmentTexture) {\r\n Logger.Warn(\"Can not create default skybox without environment texture.\");\r\n return null;\r\n }\r\n\r\n if (setGlobalEnvTexture) {\r\n if (environmentTexture) {\r\n this.environmentTexture = environmentTexture;\r\n }\r\n }\r\n\r\n // Skybox\r\n const hdrSkybox = CreateBox(\"hdrSkyBox\", { size: scale }, this);\r\n if (pbr) {\r\n const hdrSkyboxMaterial = new PBRMaterial(\"skyBox\", this);\r\n hdrSkyboxMaterial.backFaceCulling = false;\r\n hdrSkyboxMaterial.reflectionTexture = environmentTexture.clone();\r\n if (hdrSkyboxMaterial.reflectionTexture) {\r\n hdrSkyboxMaterial.reflectionTexture.coordinatesMode = Texture.SKYBOX_MODE;\r\n }\r\n hdrSkyboxMaterial.microSurface = 1.0 - blur;\r\n hdrSkyboxMaterial.disableLighting = true;\r\n hdrSkyboxMaterial.twoSidedLighting = true;\r\n hdrSkybox.material = hdrSkyboxMaterial;\r\n } else {\r\n const skyboxMaterial = new StandardMaterial(\"skyBox\", this);\r\n skyboxMaterial.backFaceCulling = false;\r\n skyboxMaterial.reflectionTexture = environmentTexture.clone();\r\n if (skyboxMaterial.reflectionTexture) {\r\n skyboxMaterial.reflectionTexture.coordinatesMode = Texture.SKYBOX_MODE;\r\n }\r\n skyboxMaterial.disableLighting = true;\r\n hdrSkybox.material = skyboxMaterial;\r\n }\r\n hdrSkybox.isPickable = false;\r\n hdrSkybox.infiniteDistance = true;\r\n hdrSkybox.ignoreCameraMaxZ = true;\r\n return hdrSkybox;\r\n};\r\n\r\nScene.prototype.createDefaultEnvironment = function (options: Partial<IEnvironmentHelperOptions>): Nullable<EnvironmentHelper> {\r\n if (EnvironmentHelper) {\r\n return new EnvironmentHelper(options, this);\r\n }\r\n return null;\r\n};\r\n\r\nScene.prototype.createDefaultVRExperience = function (webVROptions: VRExperienceHelperOptions = {}): VRExperienceHelper {\r\n return new VRExperienceHelper(this, webVROptions);\r\n};\r\n\r\nScene.prototype.createDefaultXRExperienceAsync = async function (options: WebXRDefaultExperienceOptions = {}): Promise<WebXRDefaultExperience> {\r\n return await WebXRDefaultExperience.CreateAsync(this, options);\r\n};\r\n"]}
1
+ {"version":3,"file":"sceneHelpers.js","sourceRoot":"","sources":["../../../../dev/core/src/Helpers/sceneHelpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../Misc/logger\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Scene } from \"../scene\";\r\nimport { Vector3 } from \"../Maths/math.vector\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport type { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial\";\r\nimport { PBRMaterial } from \"../Materials/PBR/pbrMaterial\";\r\nimport { HemisphericLight } from \"../Lights/hemisphericLight\";\r\nimport type { IEnvironmentHelperOptions } from \"./environmentHelper\";\r\nimport { EnvironmentHelper } from \"./environmentHelper\";\r\nimport { FreeCamera } from \"../Cameras/freeCamera\";\r\nimport { ArcRotateCamera } from \"../Cameras/arcRotateCamera\";\r\nimport type { TargetCamera } from \"../Cameras/targetCamera\";\r\nimport type { VRExperienceHelperOptions } from \"../Cameras/VR/vrExperienceHelper\";\r\nimport { VRExperienceHelper } from \"../Cameras/VR/vrExperienceHelper\";\r\n\r\nimport \"../Materials/Textures/Loaders/ddsTextureLoader\";\r\nimport \"../Materials/Textures/Loaders/envTextureLoader\";\r\nimport \"../Materials/Textures/Loaders/ktxTextureLoader\";\r\nimport { CreateBox } from \"../Meshes/Builders/boxBuilder\";\r\nimport type { WebXRDefaultExperienceOptions } from \"../XR/webXRDefaultExperience\";\r\nimport { WebXRDefaultExperience } from \"../XR/webXRDefaultExperience\";\r\n\r\n/** @internal */\r\n// eslint-disable-next-line no-var, @typescript-eslint/naming-convention\r\nexport var _forceSceneHelpersToBundle = true;\r\n\r\ndeclare module \"../scene\" {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n export interface Scene {\r\n /**\r\n * Creates a default light for the scene.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/fastBuildWorld#create-default-light\r\n * @param replace has the default false, when true replaces the existing lights in the scene with a hemispheric light\r\n */\r\n createDefaultLight(replace?: boolean): void;\r\n\r\n /**\r\n * Creates a default camera for the scene.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/fastBuildWorld#create-default-camera\r\n * @param createArcRotateCamera has the default false which creates a free camera, when true creates an arc rotate camera\r\n * @param replace has default false, when true replaces the active camera in the scene\r\n * @param attachCameraControls has default false, when true attaches camera controls to the canvas.\r\n */\r\n createDefaultCamera(createArcRotateCamera?: boolean, replace?: boolean, attachCameraControls?: boolean): void;\r\n\r\n /**\r\n * Creates a default camera and a default light.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/fastBuildWorld#create-default-camera-or-light\r\n * @param createArcRotateCamera has the default false which creates a free camera, when true creates an arc rotate camera\r\n * @param replace has the default false, when true replaces the active camera/light in the scene\r\n * @param attachCameraControls has the default false, when true attaches camera controls to the canvas.\r\n */\r\n createDefaultCameraOrLight(createArcRotateCamera?: boolean, replace?: boolean, attachCameraControls?: boolean): void;\r\n\r\n /**\r\n * Creates a new sky box\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/fastBuildWorld#create-default-skybox\r\n * @param environmentTexture defines the texture to use as environment texture\r\n * @param pbr has default false which requires the StandardMaterial to be used, when true PBRMaterial must be used\r\n * @param scale defines the overall scale of the skybox\r\n * @param blur is only available when pbr is true, default is 0, no blur, maximum value is 1\r\n * @param setGlobalEnvTexture has default true indicating that scene.environmentTexture must match the current skybox texture\r\n * @returns a new mesh holding the sky box\r\n */\r\n createDefaultSkybox(environmentTexture?: BaseTexture, pbr?: boolean, scale?: number, blur?: number, setGlobalEnvTexture?: boolean): Nullable<Mesh>;\r\n\r\n /**\r\n * Creates a new environment\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/fastBuildWorld#create-default-environment\r\n * @param options defines the options you can use to configure the environment\r\n * @returns the new EnvironmentHelper\r\n */\r\n createDefaultEnvironment(options?: Partial<IEnvironmentHelperOptions>): Nullable<EnvironmentHelper>;\r\n\r\n /**\r\n * Creates a new VREXperienceHelper\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/webVRHelper\r\n * @param webVROptions defines the options used to create the new VREXperienceHelper\r\n * @deprecated Please use createDefaultXRExperienceAsync instead\r\n * @returns a new VREXperienceHelper\r\n */\r\n createDefaultVRExperience(webVROptions?: VRExperienceHelperOptions): VRExperienceHelper;\r\n\r\n /**\r\n * Creates a new WebXRDefaultExperience\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/webXR/introToWebXR\r\n * @param options experience options\r\n * @returns a promise for a new WebXRDefaultExperience\r\n */\r\n createDefaultXRExperienceAsync(options?: WebXRDefaultExperienceOptions): Promise<WebXRDefaultExperience>;\r\n }\r\n}\r\n\r\nScene.prototype.createDefaultLight = function (replace = false): void {\r\n // Dispose existing light in replace mode.\r\n if (replace) {\r\n if (this.lights) {\r\n for (let i = 0; i < this.lights.length; i++) {\r\n this.lights[i].dispose();\r\n }\r\n }\r\n }\r\n\r\n // Light\r\n if (this.lights.length === 0) {\r\n new HemisphericLight(\"default light\", Vector3.Up(), this);\r\n }\r\n};\r\n\r\nScene.prototype.createDefaultCamera = function (createArcRotateCamera = false, replace = false, attachCameraControls = false): void {\r\n // Dispose existing camera in replace mode.\r\n if (replace) {\r\n if (this.activeCamera) {\r\n this.activeCamera.dispose();\r\n this.activeCamera = null;\r\n }\r\n }\r\n\r\n // Camera\r\n if (!this.activeCamera) {\r\n const worldExtends = this.getWorldExtends((mesh) => mesh.isVisible && mesh.isEnabled());\r\n const worldSize = worldExtends.max.subtract(worldExtends.min);\r\n const worldCenter = worldExtends.min.add(worldSize.scale(0.5));\r\n\r\n let camera: TargetCamera;\r\n let radius = worldSize.length() * 1.5;\r\n // empty scene scenario!\r\n if (!isFinite(radius) || radius === 0) {\r\n radius = 1;\r\n worldCenter.copyFromFloats(0, 0, 0);\r\n }\r\n if (createArcRotateCamera) {\r\n const arcRotateCamera = new ArcRotateCamera(\"default camera\", -(Math.PI / 2), Math.PI / 2, radius, worldCenter, this);\r\n arcRotateCamera.lowerRadiusLimit = radius * 0.01;\r\n arcRotateCamera.wheelPrecision = 100 / radius;\r\n camera = arcRotateCamera;\r\n } else {\r\n const freeCamera = new FreeCamera(\"default camera\", new Vector3(worldCenter.x, worldCenter.y, -radius), this);\r\n freeCamera.setTarget(worldCenter);\r\n camera = freeCamera;\r\n }\r\n camera.minZ = radius * 0.01;\r\n camera.maxZ = radius * 1000;\r\n camera.speed = radius * 0.2;\r\n this.activeCamera = camera;\r\n\r\n if (attachCameraControls) {\r\n camera.attachControl();\r\n }\r\n }\r\n};\r\n\r\nScene.prototype.createDefaultCameraOrLight = function (createArcRotateCamera = false, replace = false, attachCameraControls = false): void {\r\n this.createDefaultLight(replace);\r\n this.createDefaultCamera(createArcRotateCamera, replace, attachCameraControls);\r\n};\r\n\r\nScene.prototype.createDefaultSkybox = function (environmentTexture?: BaseTexture, pbr = false, scale = 1000, blur = 0, setGlobalEnvTexture = true): Nullable<Mesh> {\r\n if (!environmentTexture) {\r\n Logger.Warn(\"Can not create default skybox without environment texture.\");\r\n return null;\r\n }\r\n\r\n if (setGlobalEnvTexture) {\r\n if (environmentTexture) {\r\n this.environmentTexture = environmentTexture;\r\n }\r\n }\r\n\r\n // Skybox\r\n const hdrSkybox = CreateBox(\"hdrSkyBox\", { size: scale }, this);\r\n if (pbr) {\r\n const hdrSkyboxMaterial = new PBRMaterial(\"skyBox\", this);\r\n hdrSkyboxMaterial.backFaceCulling = false;\r\n hdrSkyboxMaterial.reflectionTexture = environmentTexture.clone();\r\n if (hdrSkyboxMaterial.reflectionTexture) {\r\n hdrSkyboxMaterial.reflectionTexture.coordinatesMode = Texture.SKYBOX_MODE;\r\n }\r\n hdrSkyboxMaterial.microSurface = 1.0 - blur;\r\n hdrSkyboxMaterial.disableLighting = true;\r\n hdrSkyboxMaterial.twoSidedLighting = true;\r\n hdrSkybox.material = hdrSkyboxMaterial;\r\n } else {\r\n const skyboxMaterial = new StandardMaterial(\"skyBox\", this);\r\n skyboxMaterial.backFaceCulling = false;\r\n skyboxMaterial.reflectionTexture = environmentTexture.clone();\r\n if (skyboxMaterial.reflectionTexture) {\r\n skyboxMaterial.reflectionTexture.coordinatesMode = Texture.SKYBOX_MODE;\r\n }\r\n skyboxMaterial.disableLighting = true;\r\n hdrSkybox.material = skyboxMaterial;\r\n }\r\n hdrSkybox.isPickable = false;\r\n hdrSkybox.infiniteDistance = true;\r\n hdrSkybox.ignoreCameraMaxZ = true;\r\n return hdrSkybox;\r\n};\r\n\r\nScene.prototype.createDefaultEnvironment = function (options: Partial<IEnvironmentHelperOptions>): Nullable<EnvironmentHelper> {\r\n if (EnvironmentHelper) {\r\n return new EnvironmentHelper(options, this);\r\n }\r\n return null;\r\n};\r\n\r\nScene.prototype.createDefaultVRExperience = function (webVROptions: VRExperienceHelperOptions = {}): VRExperienceHelper {\r\n return new VRExperienceHelper(this, webVROptions);\r\n};\r\n\r\nScene.prototype.createDefaultXRExperienceAsync = async function (options: WebXRDefaultExperienceOptions = {}): Promise<WebXRDefaultExperience> {\r\n return await WebXRDefaultExperience.CreateAsync(this, options);\r\n};\r\n"]}
package/Lights/index.d.ts CHANGED
@@ -10,3 +10,4 @@ export * from "./rectAreaLight.js";
10
10
  export * from "./Clustered/index.js";
11
11
  export * from "./IES/iesLoader.js";
12
12
  export * from "./lightConstants.js";
13
+ export * from "./lightingVolume.js";
package/Lights/index.js CHANGED
@@ -11,4 +11,5 @@ export * from "./rectAreaLight.js";
11
11
  export * from "./Clustered/index.js";
12
12
  export * from "./IES/iesLoader.js";
13
13
  export * from "./lightConstants.js";
14
+ export * from "./lightingVolume.js";
14
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../dev/core/src/Lights/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-restricted-imports */\r\nexport * from \"./light\";\r\nexport * from \"./shadowLight\";\r\nexport * from \"./Shadows/index\";\r\nexport * from \"./directionalLight\";\r\nexport * from \"./hemisphericLight\";\r\nexport * from \"./pointLight\";\r\nexport * from \"./spotLight\";\r\nexport * from \"./areaLight\";\r\nexport * from \"./rectAreaLight\";\r\nexport * from \"./Clustered/index\";\r\nexport * from \"./IES/iesLoader\";\r\nexport * from \"./lightConstants\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../dev/core/src/Lights/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-restricted-imports */\r\nexport * from \"./light\";\r\nexport * from \"./shadowLight\";\r\nexport * from \"./Shadows/index\";\r\nexport * from \"./directionalLight\";\r\nexport * from \"./hemisphericLight\";\r\nexport * from \"./pointLight\";\r\nexport * from \"./spotLight\";\r\nexport * from \"./areaLight\";\r\nexport * from \"./rectAreaLight\";\r\nexport * from \"./Clustered/index\";\r\nexport * from \"./IES/iesLoader\";\r\nexport * from \"./lightConstants\";\r\nexport * from \"./lightingVolume\";\r\n"]}
@@ -0,0 +1,89 @@
1
+ import type { Scene, ShadowGenerator } from "../index.js";
2
+ import { Mesh } from "../Meshes/mesh.js";
3
+ import "../ShadersWGSL/lightingVolume.compute.js";
4
+ /**
5
+ * Class used to create a lighting volume from a directional light's shadow generator.
6
+ */
7
+ export declare class LightingVolume {
8
+ private readonly _engine;
9
+ private readonly _scene;
10
+ private readonly _mesh;
11
+ private readonly _copyTexture?;
12
+ private readonly _uBuffer?;
13
+ private _name;
14
+ private _cs?;
15
+ private _light?;
16
+ private _fallbackTexture?;
17
+ private _storageBuffer?;
18
+ private _depthCopy?;
19
+ private _readPixelPromise;
20
+ private _readPixelAbortController;
21
+ private _numFrames;
22
+ private _firstUpdate;
23
+ private _shadowGenerator?;
24
+ /**
25
+ * The shadow generator used to create the lighting volume.
26
+ */
27
+ get shadowGenerator(): ShadowGenerator;
28
+ set shadowGenerator(sg: ShadowGenerator);
29
+ private _tesselation;
30
+ /**
31
+ * The tesselation level of the lighting volume.
32
+ */
33
+ get tesselation(): number;
34
+ set tesselation(n: number);
35
+ private _buildFullVolume;
36
+ /**
37
+ * Indicates whether to build the full volume (true) or only the near plane (false). Default is false.
38
+ */
39
+ get buildFullVolume(): boolean;
40
+ set buildFullVolume(value: boolean);
41
+ /**
42
+ * The mesh used as a support for the lighting volume.
43
+ * Note that this mesh is not automatically added to the scene's mesh array.
44
+ * If you want to render it, you need to add it manually.
45
+ */
46
+ get mesh(): Mesh;
47
+ private _frequency;
48
+ /**
49
+ * The frequency (in number of times you call updateMesh) at which the lighting volume is updated.
50
+ */
51
+ get frequency(): number;
52
+ set frequency(value: number);
53
+ /**
54
+ * The name of the lighting volume.
55
+ */
56
+ get name(): string;
57
+ set name(name: string);
58
+ /**
59
+ * Indicates whether this is the first update of the lighting volume.
60
+ * If true, the volume has not yet been updated for the first time.
61
+ */
62
+ get firstUpdate(): boolean;
63
+ /**
64
+ * Creates a new LightingVolume.
65
+ * @param name The name of the lighting volume.
66
+ * @param scene The scene the lighting volume belongs to.
67
+ * @param shadowGenerator The shadow generator used to create the lighting volume. This is optional in the constructor, but must be set before calling updateMesh.
68
+ * @param tesselation The tesselation level of the lighting volume (default: 64).
69
+ */
70
+ constructor(name: string, scene: Scene, shadowGenerator?: ShadowGenerator, tesselation?: number);
71
+ /**
72
+ * Checks if the lighting volume is ready to be updated.
73
+ * @returns True if the volume is ready to be updated.
74
+ */
75
+ isReady(): boolean;
76
+ /**
77
+ * Updates the lighting volume mesh.
78
+ * @param forceUpdate If true, forces the update even if the frequency condition is not met.
79
+ */
80
+ update(forceUpdate?: boolean): void;
81
+ /**
82
+ * Disposes the lighting volume and associated resources.
83
+ */
84
+ dispose(): void;
85
+ private _createComputeShader;
86
+ private _createFallbackTextures;
87
+ private _fallbackReadPixelAsync;
88
+ private _createGeometry;
89
+ }