@babylonjs/core 7.45.0 → 7.47.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 (257) hide show
  1. package/Buffers/bufferUtils.d.ts +28 -1
  2. package/Buffers/bufferUtils.js +104 -1
  3. package/Buffers/bufferUtils.js.map +1 -1
  4. package/Cameras/arcRotateCamera.d.ts +13 -0
  5. package/Cameras/arcRotateCamera.js +28 -12
  6. package/Cameras/arcRotateCamera.js.map +1 -1
  7. package/Decorators/nodeDecorator.js +1 -1
  8. package/Decorators/nodeDecorator.js.map +1 -1
  9. package/Engines/Extensions/engine.renderTarget.js +2 -1
  10. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  11. package/Engines/WebGL/webGLRenderTargetWrapper.js +1 -1
  12. package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
  13. package/Engines/WebGPU/Extensions/engine.renderTarget.js +2 -1
  14. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  15. package/Engines/WebGPU/webgpuSnapshotRendering.d.ts +2 -0
  16. package/Engines/WebGPU/webgpuSnapshotRendering.js +22 -6
  17. package/Engines/WebGPU/webgpuSnapshotRendering.js.map +1 -1
  18. package/Engines/abstractEngine.js +2 -2
  19. package/Engines/abstractEngine.js.map +1 -1
  20. package/Engines/renderTargetWrapper.js +1 -1
  21. package/Engines/renderTargetWrapper.js.map +1 -1
  22. package/Engines/thinEngine.functions.d.ts +1 -0
  23. package/Engines/thinEngine.functions.js +1 -1
  24. package/Engines/thinEngine.functions.js.map +1 -1
  25. package/Engines/thinEngine.js +4 -2
  26. package/Engines/thinEngine.js.map +1 -1
  27. package/Engines/webgpuEngine.js +2 -1
  28. package/Engines/webgpuEngine.js.map +1 -1
  29. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.d.ts +5 -0
  30. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js +7 -0
  31. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js.map +1 -1
  32. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.d.ts +3 -0
  33. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +13 -0
  34. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
  35. package/FrameGraph/Node/Blocks/Rendering/objectRendererBlock.d.ts +0 -3
  36. package/FrameGraph/Node/Blocks/Rendering/objectRendererBlock.js +0 -13
  37. package/FrameGraph/Node/Blocks/Rendering/objectRendererBlock.js.map +1 -1
  38. package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.js +3 -0
  39. package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.js.map +1 -1
  40. package/FrameGraph/Node/nodeRenderGraph.js +9 -5
  41. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  42. package/FrameGraph/Node/nodeRenderGraphBlock.js +1 -0
  43. package/FrameGraph/Node/nodeRenderGraphBlock.js.map +1 -1
  44. package/FrameGraph/Passes/renderPass.d.ts +11 -0
  45. package/FrameGraph/Passes/renderPass.js +40 -0
  46. package/FrameGraph/Passes/renderPass.js.map +1 -1
  47. package/FrameGraph/Tasks/Layers/baseLayerTask.js +3 -2
  48. package/FrameGraph/Tasks/Layers/baseLayerTask.js.map +1 -1
  49. package/FrameGraph/Tasks/Layers/highlightLayerTask.js +1 -1
  50. package/FrameGraph/Tasks/Layers/highlightLayerTask.js.map +1 -1
  51. package/FrameGraph/Tasks/PostProcesses/bloomMergeTask.js +1 -1
  52. package/FrameGraph/Tasks/PostProcesses/bloomMergeTask.js.map +1 -1
  53. package/FrameGraph/Tasks/PostProcesses/bloomTask.js +1 -1
  54. package/FrameGraph/Tasks/PostProcesses/bloomTask.js.map +1 -1
  55. package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.js +1 -1
  56. package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.js.map +1 -1
  57. package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js +1 -1
  58. package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js.map +1 -1
  59. package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js +2 -2
  60. package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js.map +1 -1
  61. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js +1 -0
  62. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js.map +1 -1
  63. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js +2 -1
  64. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js.map +1 -1
  65. package/FrameGraph/Tasks/Texture/copyToBackbufferColorTask.js +1 -0
  66. package/FrameGraph/Tasks/Texture/copyToBackbufferColorTask.js.map +1 -1
  67. package/FrameGraph/Tasks/Texture/copyToTextureTask.js +1 -1
  68. package/FrameGraph/Tasks/Texture/copyToTextureTask.js.map +1 -1
  69. package/FrameGraph/frameGraph.d.ts +5 -5
  70. package/FrameGraph/frameGraph.js +31 -21
  71. package/FrameGraph/frameGraph.js.map +1 -1
  72. package/FrameGraph/frameGraphTask.d.ts +8 -2
  73. package/FrameGraph/frameGraphTask.js +12 -12
  74. package/FrameGraph/frameGraphTask.js.map +1 -1
  75. package/FrameGraph/frameGraphTextureManager.d.ts +33 -2
  76. package/FrameGraph/frameGraphTextureManager.js +368 -27
  77. package/FrameGraph/frameGraphTextureManager.js.map +1 -1
  78. package/Lights/LTC/ltcTextureTool.d.ts +20 -0
  79. package/Lights/LTC/ltcTextureTool.js +24 -0
  80. package/Lights/LTC/ltcTextureTool.js.map +1 -0
  81. package/Lights/Shadows/shadowGenerator.d.ts +10 -0
  82. package/Lights/Shadows/shadowGenerator.js +5 -0
  83. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  84. package/Lights/Shadows/shadowGeneratorSceneComponent.js +6 -0
  85. package/Lights/Shadows/shadowGeneratorSceneComponent.js.map +1 -1
  86. package/Lights/areaLight.d.ts +39 -0
  87. package/Lights/areaLight.js +81 -0
  88. package/Lights/areaLight.js.map +1 -0
  89. package/Lights/index.d.ts +2 -0
  90. package/Lights/index.js +2 -0
  91. package/Lights/index.js.map +1 -1
  92. package/Lights/light.d.ts +8 -0
  93. package/Lights/light.js +10 -0
  94. package/Lights/light.js.map +1 -1
  95. package/Lights/lightConstants.d.ts +4 -0
  96. package/Lights/lightConstants.js +4 -0
  97. package/Lights/lightConstants.js.map +1 -1
  98. package/Lights/rectAreaLight.d.ts +61 -0
  99. package/Lights/rectAreaLight.js +127 -0
  100. package/Lights/rectAreaLight.js.map +1 -0
  101. package/Loading/loadingScreen.d.ts +21 -1
  102. package/Loading/loadingScreen.js +125 -52
  103. package/Loading/loadingScreen.js.map +1 -1
  104. package/Materials/Node/Blocks/Dual/lightBlock.js +2 -0
  105. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  106. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +1 -1
  107. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  108. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +2 -1
  109. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  110. package/Materials/Node/Blocks/debugBlock.d.ts +38 -0
  111. package/Materials/Node/Blocks/debugBlock.js +92 -0
  112. package/Materials/Node/Blocks/debugBlock.js.map +1 -0
  113. package/Materials/Node/Blocks/index.d.ts +1 -0
  114. package/Materials/Node/Blocks/index.js +1 -0
  115. package/Materials/Node/Blocks/index.js.map +1 -1
  116. package/Materials/Node/nodeMaterial.d.ts +2 -0
  117. package/Materials/Node/nodeMaterial.js +20 -2
  118. package/Materials/Node/nodeMaterial.js.map +1 -1
  119. package/Materials/Node/nodeMaterialBlock.d.ts +8 -1
  120. package/Materials/Node/nodeMaterialBlock.js +13 -1
  121. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  122. package/Materials/PBR/index.d.ts +1 -0
  123. package/Materials/PBR/index.js +1 -0
  124. package/Materials/PBR/index.js.map +1 -1
  125. package/Materials/PBR/pbrBaseMaterial.d.ts +13 -0
  126. package/Materials/PBR/pbrBaseMaterial.js +60 -0
  127. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  128. package/Materials/PBR/pbrMaterial.d.ts +8 -0
  129. package/Materials/PBR/pbrMaterial.js +12 -0
  130. package/Materials/PBR/pbrMaterial.js.map +1 -1
  131. package/Materials/Textures/internalTexture.d.ts +0 -18
  132. package/Materials/Textures/internalTexture.js +0 -46
  133. package/Materials/Textures/internalTexture.js.map +1 -1
  134. package/Materials/Textures/rawTexture.d.ts +6 -2
  135. package/Materials/Textures/rawTexture.js +10 -3
  136. package/Materials/Textures/rawTexture.js.map +1 -1
  137. package/Materials/Textures/textureHelper.functions.d.ts +18 -0
  138. package/Materials/Textures/textureHelper.functions.js +47 -0
  139. package/Materials/Textures/textureHelper.functions.js.map +1 -0
  140. package/Materials/effect.d.ts +6 -1
  141. package/Materials/effect.functions.d.ts +5 -0
  142. package/Materials/effect.functions.js +6 -2
  143. package/Materials/effect.functions.js.map +1 -1
  144. package/Materials/effect.js +3 -1
  145. package/Materials/effect.js.map +1 -1
  146. package/Materials/effect.webgl.functions.js +1 -0
  147. package/Materials/effect.webgl.functions.js.map +1 -1
  148. package/Materials/materialFlags.d.ts +6 -0
  149. package/Materials/materialFlags.js +14 -0
  150. package/Materials/materialFlags.js.map +1 -1
  151. package/Materials/materialHelper.functions.js +4 -2
  152. package/Materials/materialHelper.functions.js.map +1 -1
  153. package/Materials/standardMaterial.d.ts +1 -0
  154. package/Materials/standardMaterial.js +14 -0
  155. package/Materials/standardMaterial.js.map +1 -1
  156. package/Meshes/Compression/dracoCompressionWorker.js +0 -1
  157. package/Meshes/Compression/dracoCompressionWorker.js.map +1 -1
  158. package/Misc/snapshotRenderingHelper.d.ts +12 -0
  159. package/Misc/snapshotRenderingHelper.js +74 -20
  160. package/Misc/snapshotRenderingHelper.js.map +1 -1
  161. package/Misc/timingTools.d.ts +2 -2
  162. package/Misc/timingTools.js +15 -10
  163. package/Misc/timingTools.js.map +1 -1
  164. package/Particles/gpuParticleSystem.js +8 -2
  165. package/Particles/gpuParticleSystem.js.map +1 -1
  166. package/Rendering/IBLShadows/iblShadowsPluginMaterial.d.ts +4 -0
  167. package/Rendering/IBLShadows/iblShadowsPluginMaterial.js +66 -16
  168. package/Rendering/IBLShadows/iblShadowsPluginMaterial.js.map +1 -1
  169. package/Rendering/IBLShadows/iblShadowsRenderPipeline.d.ts +8 -0
  170. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +16 -0
  171. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
  172. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.d.ts +9 -0
  173. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +28 -11
  174. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
  175. package/Shaders/ShadersInclude/defaultFragmentDeclaration.js +1 -1
  176. package/Shaders/ShadersInclude/defaultFragmentDeclaration.js.map +1 -1
  177. package/Shaders/ShadersInclude/gaussianSplatting.js +1 -1
  178. package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
  179. package/Shaders/ShadersInclude/lightFragment.js +19 -1
  180. package/Shaders/ShadersInclude/lightFragment.js.map +1 -1
  181. package/Shaders/ShadersInclude/lightFragmentDeclaration.js +3 -0
  182. package/Shaders/ShadersInclude/lightFragmentDeclaration.js.map +1 -1
  183. package/Shaders/ShadersInclude/lightUboDeclaration.js +3 -0
  184. package/Shaders/ShadersInclude/lightUboDeclaration.js.map +1 -1
  185. package/Shaders/ShadersInclude/lightVxFragmentDeclaration.js +3 -0
  186. package/Shaders/ShadersInclude/lightVxFragmentDeclaration.js.map +1 -1
  187. package/Shaders/ShadersInclude/lightVxUboDeclaration.js +3 -0
  188. package/Shaders/ShadersInclude/lightVxUboDeclaration.js.map +1 -1
  189. package/Shaders/ShadersInclude/lightsFragmentFunctions.d.ts +1 -0
  190. package/Shaders/ShadersInclude/lightsFragmentFunctions.js +14 -1
  191. package/Shaders/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
  192. package/Shaders/ShadersInclude/ltcHelperFunctions.d.ts +5 -0
  193. package/Shaders/ShadersInclude/ltcHelperFunctions.js +31 -0
  194. package/Shaders/ShadersInclude/ltcHelperFunctions.js.map +1 -0
  195. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js +11 -2
  196. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
  197. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +6 -0
  198. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  199. package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.d.ts +1 -0
  200. package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js +18 -1
  201. package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js.map +1 -1
  202. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js +6 -3
  203. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js.map +1 -1
  204. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js +4 -0
  205. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
  206. package/Shaders/ShadersInclude/pbrUboDeclaration.js +1 -1
  207. package/Shaders/ShadersInclude/pbrUboDeclaration.js.map +1 -1
  208. package/Shaders/ShadersInclude/pbrVertexDeclaration.js +5 -2
  209. package/Shaders/ShadersInclude/pbrVertexDeclaration.js.map +1 -1
  210. package/Shaders/iblShadowAccumulation.fragment.js +6 -5
  211. package/Shaders/iblShadowAccumulation.fragment.js.map +1 -1
  212. package/Shaders/iblShadowSpatialBlur.fragment.js +3 -3
  213. package/Shaders/iblShadowSpatialBlur.fragment.js.map +1 -1
  214. package/Shaders/iblShadowVoxelTracing.fragment.js +26 -8
  215. package/Shaders/iblShadowVoxelTracing.fragment.js.map +1 -1
  216. package/Shaders/pbr.fragment.js +11 -3
  217. package/Shaders/pbr.fragment.js.map +1 -1
  218. package/Shaders/pbr.vertex.js +2 -0
  219. package/Shaders/pbr.vertex.js.map +1 -1
  220. package/ShadersWGSL/ShadersInclude/lightFragment.js +19 -1
  221. package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
  222. package/ShadersWGSL/ShadersInclude/lightUboDeclaration.js +4 -0
  223. package/ShadersWGSL/ShadersInclude/lightUboDeclaration.js.map +1 -1
  224. package/ShadersWGSL/ShadersInclude/lightVxFragmentDeclaration.js +3 -0
  225. package/ShadersWGSL/ShadersInclude/lightVxFragmentDeclaration.js.map +1 -1
  226. package/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.js +4 -0
  227. package/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.js.map +1 -1
  228. package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.d.ts +1 -0
  229. package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js +12 -1
  230. package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
  231. package/ShadersWGSL/ShadersInclude/ltcHelperFunctions.d.ts +5 -0
  232. package/ShadersWGSL/ShadersInclude/ltcHelperFunctions.js +35 -0
  233. package/ShadersWGSL/ShadersInclude/ltcHelperFunctions.js.map +1 -0
  234. package/ShadersWGSL/ShadersInclude/pbrBlockAlbedoOpacity.js +10 -1
  235. package/ShadersWGSL/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
  236. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +4 -0
  237. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  238. package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.d.ts +1 -0
  239. package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.js +18 -1
  240. package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.js.map +1 -1
  241. package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js +4 -0
  242. package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
  243. package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.js +1 -1
  244. package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.js.map +1 -1
  245. package/ShadersWGSL/iblShadowAccumulation.fragment.js +4 -3
  246. package/ShadersWGSL/iblShadowAccumulation.fragment.js.map +1 -1
  247. package/ShadersWGSL/iblShadowSpatialBlur.fragment.js +3 -3
  248. package/ShadersWGSL/iblShadowSpatialBlur.fragment.js.map +1 -1
  249. package/ShadersWGSL/iblShadowVoxelTracing.fragment.js +26 -8
  250. package/ShadersWGSL/iblShadowVoxelTracing.fragment.js.map +1 -1
  251. package/ShadersWGSL/pbr.fragment.js +10 -2
  252. package/ShadersWGSL/pbr.fragment.js.map +1 -1
  253. package/ShadersWGSL/pbr.vertex.js +2 -0
  254. package/ShadersWGSL/pbr.vertex.js.map +1 -1
  255. package/Sprites/spriteRenderer.js +1 -0
  256. package/Sprites/spriteRenderer.js.map +1 -1
  257. package/package.json +1 -1
@@ -6,7 +6,6 @@ import { Observable } from "../Misc/observable.js";
6
6
  */
7
7
  export declare abstract class FrameGraphTask {
8
8
  protected readonly _frameGraph: FrameGraph;
9
- protected readonly _internalDependencies: Set<FrameGraphTextureHandle>;
10
9
  private readonly _passes;
11
10
  private readonly _passesDisabled;
12
11
  protected _name: string;
@@ -21,6 +20,14 @@ export declare abstract class FrameGraphTask {
21
20
  */
22
21
  get disabled(): boolean;
23
22
  set disabled(value: boolean);
23
+ /**
24
+ * Gets the render passes of the task.
25
+ */
26
+ get passes(): IFrameGraphPass[];
27
+ /**
28
+ * Gets the disabled render passes of the task.
29
+ */
30
+ get passesDisabled(): IFrameGraphPass[];
24
31
  /**
25
32
  * The (texture) dependencies of the task (optional).
26
33
  */
@@ -56,6 +63,5 @@ export declare abstract class FrameGraphTask {
56
63
  _checkTask(): void;
57
64
  /** @internal */
58
65
  _getPasses(): IFrameGraphPass[];
59
- protected _addInternalDependencies(dependencies: FrameGraphTextureHandle | FrameGraphTextureHandle[]): void;
60
66
  private _checkSameRenderTarget;
61
67
  }
@@ -24,6 +24,18 @@ export class FrameGraphTask {
24
24
  set disabled(value) {
25
25
  this._disabled = value;
26
26
  }
27
+ /**
28
+ * Gets the render passes of the task.
29
+ */
30
+ get passes() {
31
+ return this._passes;
32
+ }
33
+ /**
34
+ * Gets the disabled render passes of the task.
35
+ */
36
+ get passesDisabled() {
37
+ return this._passesDisabled;
38
+ }
27
39
  /**
28
40
  * Checks if the task is ready to be executed.
29
41
  * @returns True if the task is ready to be executed, else false.
@@ -44,7 +56,6 @@ export class FrameGraphTask {
44
56
  * @param frameGraph The frame graph this task is associated with.
45
57
  */
46
58
  constructor(name, frameGraph) {
47
- this._internalDependencies = new Set();
48
59
  this._passes = [];
49
60
  this._passesDisabled = [];
50
61
  this._disabled = false;
@@ -60,7 +71,6 @@ export class FrameGraphTask {
60
71
  _reset() {
61
72
  this._passes.length = 0;
62
73
  this._passesDisabled.length = 0;
63
- this._internalDependencies.clear();
64
74
  }
65
75
  /** @internal */
66
76
  _addPass(pass, disabled) {
@@ -144,16 +154,6 @@ export class FrameGraphTask {
144
154
  _getPasses() {
145
155
  return this.disabled && this._passesDisabled.length > 0 ? this._passesDisabled : this._passes;
146
156
  }
147
- _addInternalDependencies(dependencies) {
148
- if (Array.isArray(dependencies)) {
149
- for (const dependency of dependencies) {
150
- this._internalDependencies.add(dependency);
151
- }
152
- }
153
- else {
154
- this._internalDependencies.add(dependencies);
155
- }
156
- }
157
157
  _checkSameRenderTarget(src, dst) {
158
158
  if (src === null || dst === null) {
159
159
  return src === dst;
@@ -1 +1 @@
1
- {"version":3,"file":"frameGraphTask.js","sourceRoot":"","sources":["../../../../dev/core/src/FrameGraph/frameGraphTask.ts"],"names":[],"mappings":"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","sourcesContent":["// eslint-disable-next-line import/no-internal-modules\r\nimport type { FrameGraph, FrameGraphObjectList, IFrameGraphPass, Nullable, FrameGraphTextureHandle, InternalTexture, FrameGraphRenderContext } from \"core/index\";\r\nimport { FrameGraphCullPass } from \"./Passes/cullPass\";\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 protected readonly _internalDependencies: Set<FrameGraphTextureHandle> = new Set();\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 * 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 */\r\n public abstract record(): 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 * 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 }\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 this._internalDependencies.clear();\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 (FrameGraphCullPass.IsCullPass(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 (FrameGraphCullPass.IsCullPass(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 _getPasses(): IFrameGraphPass[] {\r\n return this.disabled && this._passesDisabled.length > 0 ? this._passesDisabled : this._passes;\r\n }\r\n\r\n protected _addInternalDependencies(dependencies: FrameGraphTextureHandle | FrameGraphTextureHandle[]) {\r\n if (Array.isArray(dependencies)) {\r\n for (const dependency of dependencies) {\r\n this._internalDependencies.add(dependency);\r\n }\r\n } else {\r\n this._internalDependencies.add(dependencies);\r\n }\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":["// eslint-disable-next-line import/no-internal-modules\r\nimport type { FrameGraph, FrameGraphObjectList, IFrameGraphPass, Nullable, FrameGraphTextureHandle, InternalTexture, FrameGraphRenderContext } from \"core/index\";\r\nimport { FrameGraphCullPass } from \"./Passes/cullPass\";\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 */\r\n public abstract record(): 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 * 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 }\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 (FrameGraphCullPass.IsCullPass(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 (FrameGraphCullPass.IsCullPass(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 _getPasses(): IFrameGraphPass[] {\r\n return this.disabled && this._passesDisabled.length > 0 ? this._passesDisabled : this._passes;\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,4 +1,4 @@
1
- import type { Scene, AbstractEngine, TextureSize, Nullable, FrameGraphTextureCreationOptions, FrameGraphTextureHandle, InternalTexture, FrameGraphTextureOptions, FrameGraphTextureDescription, RenderTargetWrapper } from "../index.js";
1
+ import type { Scene, AbstractEngine, TextureSize, Nullable, FrameGraphTextureCreationOptions, FrameGraphTextureHandle, InternalTexture, FrameGraphTextureOptions, FrameGraphTextureDescription, RenderTargetWrapper, FrameGraphTask } from "../index.js";
2
2
  import { Texture } from "../Materials/Textures/texture";
3
3
  import { FrameGraphRenderTarget } from "./frameGraphRenderTarget";
4
4
  type HistoryTexture = {
@@ -10,6 +10,10 @@ type HistoryTexture = {
10
10
  textureIndex: number;
11
11
  }>;
12
12
  };
13
+ type TextureLifespan = {
14
+ firstTask: number;
15
+ lastTask: number;
16
+ };
13
17
  type TextureEntry = {
14
18
  texture: Nullable<InternalTexture>;
15
19
  name: string;
@@ -18,6 +22,9 @@ type TextureEntry = {
18
22
  textureIndex?: number;
19
23
  debug?: Texture;
20
24
  refHandle?: FrameGraphTextureHandle;
25
+ textureDescriptionHash?: string;
26
+ lifespan?: TextureLifespan;
27
+ aliasHandle?: FrameGraphTextureHandle;
21
28
  };
22
29
  declare enum FrameGraphTextureNamespace {
23
30
  Task = 0,
@@ -39,6 +46,10 @@ export declare class FrameGraphTextureManager {
39
46
  readonly _historyTextures: Map<FrameGraphTextureHandle, HistoryTexture>;
40
47
  /** @internal */
41
48
  _isRecordingTask: boolean;
49
+ /**
50
+ * Gets or sets a boolean indicating if debug logs should be shown when applying texture allocation optimization (default: false)
51
+ */
52
+ showDebugLogsForTextureAllcationOptimization: boolean;
42
53
  /**
43
54
  * Constructs a new instance of the texture manager
44
55
  * @param engine The engine to use
@@ -149,10 +160,18 @@ export declare class FrameGraphTextureManager {
149
160
  width: number;
150
161
  height: number;
151
162
  };
163
+ /**
164
+ * Calculates the total byte size of all textures used by the frame graph texture manager (including external textures)
165
+ * @param optimizedSize True if the calculation should not factor in aliased textures
166
+ * @param outputWidth The output width of the frame graph. Will be used to calculate the size of percentage-based textures
167
+ * @param outputHeight The output height of the frame graph. Will be used to calculate the size of percentage-based textures
168
+ * @returns The total size of all textures
169
+ */
170
+ computeTotalTextureSize(optimizedSize: boolean, outputWidth: number, outputHeight: number): number;
152
171
  /** @internal */
153
172
  _dispose(): void;
154
173
  /** @internal */
155
- _allocateTextures(): void;
174
+ _allocateTextures(tasks?: FrameGraphTask[]): void;
156
175
  /** @internal */
157
176
  _releaseTextures(releaseAll?: boolean): void;
158
177
  /** @internal */
@@ -161,6 +180,11 @@ export declare class FrameGraphTextureManager {
161
180
  private _createDebugTexture;
162
181
  private _freeEntry;
163
182
  private _createHandleForTexture;
183
+ private _createTextureDescriptionHash;
184
+ private _optimizeTextureAllocation;
185
+ private _computeTextureLifespan;
186
+ private _computeTextureLifespanForPasses;
187
+ private _updateLifespan;
164
188
  /**
165
189
  * Clones a texture options
166
190
  * @param options The options to clone
@@ -168,5 +192,12 @@ export declare class FrameGraphTextureManager {
168
192
  * @returns The cloned options
169
193
  */
170
194
  static CloneTextureOptions(options: FrameGraphTextureOptions, textureIndex?: number): FrameGraphTextureOptions;
195
+ /**
196
+ * Gets the texture block information.
197
+ * @param type Type of the texture.
198
+ * @param format Format of the texture.
199
+ * @returns The texture block information. You can calculate the byte size of the texture by doing: Math.ceil(width / blockInfo.width) * Math.ceil(height / blockInfo.height) * blockInfo.length
200
+ */
201
+ private static _GetTextureBlockInformation;
171
202
  }
172
203
  export {};