@babylonjs/core 8.32.1 → 8.32.3

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 (163) hide show
  1. package/Engines/abstractEngine.js +2 -2
  2. package/Engines/abstractEngine.js.map +1 -1
  3. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.d.ts +1 -0
  4. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.js +1 -1
  5. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.js.map +1 -1
  6. package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.d.ts +1 -0
  7. package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.js.map +1 -1
  8. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.d.ts +1 -0
  9. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.js.map +1 -1
  10. package/FrameGraph/Node/Blocks/PostProcesses/convolutionPostProcessBlock.d.ts +1 -0
  11. package/FrameGraph/Node/Blocks/PostProcesses/convolutionPostProcessBlock.js.map +1 -1
  12. package/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.d.ts +94 -0
  13. package/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.js +312 -0
  14. package/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.js.map +1 -0
  15. package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.d.ts +1 -0
  16. package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.js.map +1 -1
  17. package/FrameGraph/Node/Blocks/PostProcesses/taaPostProcessBlock.d.ts +55 -0
  18. package/FrameGraph/Node/Blocks/PostProcesses/taaPostProcessBlock.js +147 -0
  19. package/FrameGraph/Node/Blocks/PostProcesses/taaPostProcessBlock.js.map +1 -0
  20. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.d.ts +1 -0
  21. package/FrameGraph/Node/Blocks/PostProcesses/tonemapPostProcessBlock.js.map +1 -1
  22. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.d.ts +1 -0
  23. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
  24. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.d.ts +1 -0
  25. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js +1 -1
  26. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js.map +1 -1
  27. package/FrameGraph/Node/Blocks/index.d.ts +2 -1
  28. package/FrameGraph/Node/Blocks/index.js +2 -1
  29. package/FrameGraph/Node/Blocks/index.js.map +1 -1
  30. package/FrameGraph/Node/nodeRenderGraph.js +1 -1
  31. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  32. package/FrameGraph/Tasks/Layers/baseLayerTask.js +1 -7
  33. package/FrameGraph/Tasks/Layers/baseLayerTask.js.map +1 -1
  34. package/FrameGraph/Tasks/PostProcesses/bloomTask.js +0 -6
  35. package/FrameGraph/Tasks/PostProcesses/bloomTask.js.map +1 -1
  36. package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.js +3 -4
  37. package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.js.map +1 -1
  38. package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js +3 -4
  39. package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js.map +1 -1
  40. package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js +3 -4
  41. package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js.map +1 -1
  42. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js +0 -8
  43. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js.map +1 -1
  44. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js +4 -11
  45. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js.map +1 -1
  46. package/FrameGraph/Tasks/PostProcesses/ssao2BlurTask.d.ts +13 -0
  47. package/FrameGraph/Tasks/PostProcesses/ssao2BlurTask.js +25 -0
  48. package/FrameGraph/Tasks/PostProcesses/ssao2BlurTask.js.map +1 -0
  49. package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.d.ts +76 -0
  50. package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js +147 -0
  51. package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js.map +1 -0
  52. package/FrameGraph/Tasks/PostProcesses/ssao2Task.d.ts +14 -0
  53. package/FrameGraph/Tasks/PostProcesses/ssao2Task.js +29 -0
  54. package/FrameGraph/Tasks/PostProcesses/ssao2Task.js.map +1 -0
  55. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js +2 -11
  56. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js.map +1 -1
  57. package/FrameGraph/Tasks/PostProcesses/ssrTask.js +8 -9
  58. package/FrameGraph/Tasks/PostProcesses/ssrTask.js.map +1 -1
  59. package/FrameGraph/Tasks/PostProcesses/taaTask.d.ts +29 -0
  60. package/FrameGraph/Tasks/PostProcesses/taaTask.js +102 -0
  61. package/FrameGraph/Tasks/PostProcesses/taaTask.js.map +1 -0
  62. package/FrameGraph/frameGraphTextureManager.d.ts +9 -0
  63. package/FrameGraph/frameGraphTextureManager.js +15 -0
  64. package/FrameGraph/frameGraphTextureManager.js.map +1 -1
  65. package/FrameGraph/index.d.ts +2 -1
  66. package/FrameGraph/index.js +2 -1
  67. package/FrameGraph/index.js.map +1 -1
  68. package/Lights/Clustered/clusteredLightContainer.js +4 -3
  69. package/Lights/Clustered/clusteredLightContainer.js.map +1 -1
  70. package/Lights/pointLight.js +6 -4
  71. package/Lights/pointLight.js.map +1 -1
  72. package/Lights/rectAreaLight.js +6 -4
  73. package/Lights/rectAreaLight.js.map +1 -1
  74. package/Lights/spotLight.js +3 -2
  75. package/Lights/spotLight.js.map +1 -1
  76. package/Materials/Background/backgroundMaterial.js +1 -1
  77. package/Materials/Background/backgroundMaterial.js.map +1 -1
  78. package/Materials/GaussianSplatting/gaussianSplattingMaterial.d.ts +11 -0
  79. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +74 -27
  80. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
  81. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.d.ts +4 -0
  82. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +6 -0
  83. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  84. package/Materials/Node/nodeMaterial.js +1 -1
  85. package/Materials/Node/nodeMaterial.js.map +1 -1
  86. package/Materials/PBR/openPbrMaterial.js +1 -1
  87. package/Materials/PBR/openPbrMaterial.js.map +1 -1
  88. package/Materials/PBR/pbrBaseMaterial.js +1 -1
  89. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  90. package/Materials/material.d.ts +7 -3
  91. package/Materials/material.js +11 -7
  92. package/Materials/material.js.map +1 -1
  93. package/Materials/standardMaterial.js +1 -1
  94. package/Materials/standardMaterial.js.map +1 -1
  95. package/Maths/math.vector.d.ts +1 -1
  96. package/Maths/math.vector.js +1 -1
  97. package/Maths/math.vector.js.map +1 -1
  98. package/Meshes/Node/nodeGeometry.js +1 -1
  99. package/Meshes/Node/nodeGeometry.js.map +1 -1
  100. package/Meshes/mesh.js +9 -0
  101. package/Meshes/mesh.js.map +1 -1
  102. package/Morph/morphTargetManager.d.ts +2 -0
  103. package/Morph/morphTargetManager.js +19 -1
  104. package/Morph/morphTargetManager.js.map +1 -1
  105. package/Particles/Node/nodeParticleSystemSet.d.ts +14 -6
  106. package/Particles/Node/nodeParticleSystemSet.js +38 -7
  107. package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
  108. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.d.ts +21 -30
  109. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +163 -256
  110. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
  111. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.d.ts +1 -3
  112. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
  113. package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.js +1 -1
  114. package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.js.map +1 -1
  115. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.d.ts +0 -1
  116. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.js +4 -22
  117. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.js.map +1 -1
  118. package/PostProcesses/RenderPipeline/Pipelines/thinSSAO2RenderingPipeline.d.ts +130 -0
  119. package/PostProcesses/RenderPipeline/Pipelines/thinSSAO2RenderingPipeline.js +193 -0
  120. package/PostProcesses/RenderPipeline/Pipelines/thinSSAO2RenderingPipeline.js.map +1 -0
  121. package/PostProcesses/thinSSAO2BlurPostProcess.d.ts +26 -0
  122. package/PostProcesses/thinSSAO2BlurPostProcess.js +81 -0
  123. package/PostProcesses/thinSSAO2BlurPostProcess.js.map +1 -0
  124. package/PostProcesses/thinSSAO2CombinePostProcess.d.ts +15 -0
  125. package/PostProcesses/thinSSAO2CombinePostProcess.js +48 -0
  126. package/PostProcesses/thinSSAO2CombinePostProcess.js.map +1 -0
  127. package/PostProcesses/thinSSAO2PostProcess.d.ts +45 -0
  128. package/PostProcesses/thinSSAO2PostProcess.js +208 -0
  129. package/PostProcesses/thinSSAO2PostProcess.js.map +1 -0
  130. package/PostProcesses/thinTAAPostProcess.d.ts +10 -5
  131. package/PostProcesses/thinTAAPostProcess.js +37 -7
  132. package/PostProcesses/thinTAAPostProcess.js.map +1 -1
  133. package/Rendering/boundingBoxRenderer.js +6 -1
  134. package/Rendering/boundingBoxRenderer.js.map +1 -1
  135. package/Rendering/edgesRenderer.js +4 -0
  136. package/Rendering/edgesRenderer.js.map +1 -1
  137. package/Shaders/ShadersInclude/gaussianSplatting.js +10 -2
  138. package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
  139. package/Shaders/ShadersInclude/shadowsFragmentFunctions.js +29 -4
  140. package/Shaders/ShadersInclude/shadowsFragmentFunctions.js.map +1 -1
  141. package/Shaders/gaussianSplattingDepth.fragment.d.ts +5 -0
  142. package/Shaders/gaussianSplattingDepth.fragment.js +11 -0
  143. package/Shaders/gaussianSplattingDepth.fragment.js.map +1 -0
  144. package/Shaders/gaussianSplattingDepth.vertex.d.ts +8 -0
  145. package/Shaders/gaussianSplattingDepth.vertex.js +17 -0
  146. package/Shaders/gaussianSplattingDepth.vertex.js.map +1 -0
  147. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js +7 -1
  148. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js.map +1 -1
  149. package/ShadersWGSL/gaussianSplattingDepth.fragment.d.ts +6 -0
  150. package/ShadersWGSL/gaussianSplattingDepth.fragment.js +17 -0
  151. package/ShadersWGSL/gaussianSplattingDepth.fragment.js.map +1 -0
  152. package/ShadersWGSL/gaussianSplattingDepth.vertex.d.ts +8 -0
  153. package/ShadersWGSL/gaussianSplattingDepth.vertex.js +19 -0
  154. package/ShadersWGSL/gaussianSplattingDepth.vertex.js.map +1 -0
  155. package/package.json +1 -1
  156. package/scene.js +6 -5
  157. package/scene.js.map +1 -1
  158. package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.d.ts +0 -48
  159. package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.js +0 -119
  160. package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.js.map +0 -1
  161. package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.d.ts +0 -24
  162. package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js +0 -109
  163. package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js.map +0 -1
@@ -0,0 +1,102 @@
1
+ import { ThinTAAPostProcess } from "../../../PostProcesses/thinTAAPostProcess.js";
2
+ import { FrameGraphPostProcessTask } from "./postProcessTask.js";
3
+
4
+ /**
5
+ * Task which applies a Temporal Anti-Aliasing post process.
6
+ */
7
+ export class FrameGraphTAATask extends FrameGraphPostProcessTask {
8
+ /**
9
+ * Constructs a new Temporal Anti-Aliasing task.
10
+ * @param name The name of the task.
11
+ * @param frameGraph The frame graph this task is associated with.
12
+ * @param thinPostProcess The thin post process to use for the Temporal Anti-Aliasing effect. If not provided, a new one will be created.
13
+ */
14
+ constructor(name, frameGraph, thinPostProcess) {
15
+ super(name, frameGraph, thinPostProcess || new ThinTAAPostProcess(name, frameGraph.scene));
16
+ }
17
+ record() {
18
+ if (this.sourceTexture === undefined || this.objectRendererTask === undefined) {
19
+ throw new Error(`FrameGraphPostProcessTask "${this.name}": sourceTexture and objectRendererTask are required`);
20
+ }
21
+ this._frameGraph.scene.onBeforeRenderObservable.remove(this._onBeforeRenderSceneObserver);
22
+ this._onBeforeRenderSceneObserver = this._frameGraph.scene.onBeforeRenderObservable.add(() => {
23
+ if (this.postProcess.reprojectHistory && !this.disabled) {
24
+ this.postProcess._updateJitter();
25
+ }
26
+ });
27
+ const objectRenderer = this.objectRendererTask.objectRenderer;
28
+ objectRenderer.onInitRenderingObservable.remove(this._initRenderingObserver);
29
+ this._initRenderingObserver = objectRenderer.onInitRenderingObservable.add(() => {
30
+ if (!this.postProcess.reprojectHistory && !this.disabled) {
31
+ this.postProcess._updateJitter();
32
+ // We pass false to this.camera.getProjectionMatrix() when TAA is enabled to avoid overwriting the projection matrix calculated by the call to this.postProcess.updateJitter()
33
+ const camera = objectRenderer.activeCamera;
34
+ this._frameGraph.scene.setTransformMatrix(camera.getViewMatrix(), camera.getProjectionMatrix(this.postProcess.disabled));
35
+ }
36
+ });
37
+ const textureManager = this._frameGraph.textureManager;
38
+ const sourceSize = textureManager.getTextureAbsoluteDimensions(this.sourceTexture);
39
+ this._sourceWidth = this._outputWidth = sourceSize.width;
40
+ this._sourceHeight = this._outputHeight = sourceSize.height;
41
+ const renderTextureSize = textureManager.getTextureAbsoluteDimensions(this.objectRendererTask.outputTexture);
42
+ this.postProcess.textureWidth = renderTextureSize.width;
43
+ this.postProcess.textureHeight = renderTextureSize.height;
44
+ const pingPongTextureCreationOptions = {
45
+ size: sourceSize,
46
+ options: {
47
+ createMipMaps: false,
48
+ types: [2],
49
+ formats: [5],
50
+ samples: 1,
51
+ useSRGBBuffers: [false],
52
+ creationFlags: [0],
53
+ labels: [""],
54
+ },
55
+ sizeIsPercentage: false,
56
+ isHistoryTexture: true,
57
+ };
58
+ const pingPongHandle = textureManager.createRenderTargetTexture(`${this.name} history`, pingPongTextureCreationOptions);
59
+ textureManager.resolveDanglingHandle(this.outputTexture, pingPongHandle);
60
+ const pass = this._frameGraph.addRenderPass(this.name);
61
+ pass.depthReadOnly = this.depthReadOnly;
62
+ pass.stencilReadOnly = this.stencilReadOnly;
63
+ pass.addDependencies(this.sourceTexture);
64
+ pass.setRenderTarget(this.outputTexture);
65
+ pass.setRenderTargetDepth(this.depthAttachmentTexture);
66
+ pass.setExecuteFunc((context) => {
67
+ objectRenderer.dontSetTransformationMatrix = !this.postProcess.reprojectHistory;
68
+ this.postProcess.camera = objectRenderer.activeCamera;
69
+ if (this.sourceTexture !== undefined) {
70
+ context.setTextureSamplingMode(this.sourceTexture, this.sourceSamplingMode);
71
+ }
72
+ if (this.velocityTexture !== undefined) {
73
+ context.setTextureSamplingMode(this.velocityTexture, 2);
74
+ }
75
+ context.setTextureSamplingMode(pingPongHandle, 2);
76
+ context.applyFullScreenEffect(this._postProcessDrawWrapper, () => {
77
+ context.bindTextureHandle(this._postProcessDrawWrapper.effect, "textureSampler", this.sourceTexture);
78
+ context.bindTextureHandle(this._postProcessDrawWrapper.effect, "historySampler", pingPongHandle);
79
+ if (this.postProcess.reprojectHistory && this.velocityTexture !== undefined) {
80
+ context.bindTextureHandle(this._postProcessDrawWrapper.effect, "velocitySampler", this.velocityTexture);
81
+ }
82
+ this.postProcess.bind();
83
+ }, this.stencilState, this.disableColorWrite, this.drawBackFace, this.depthTest);
84
+ });
85
+ const passDisabled = this._frameGraph.addRenderPass(this.name + "_disabled", true);
86
+ passDisabled.depthReadOnly = this.depthReadOnly;
87
+ passDisabled.stencilReadOnly = this.stencilReadOnly;
88
+ passDisabled.addDependencies(this.sourceTexture);
89
+ passDisabled.setRenderTarget(this.outputTexture);
90
+ passDisabled.setRenderTargetDepth(this.depthAttachmentTexture);
91
+ passDisabled.setExecuteFunc((context) => {
92
+ context.copyTexture(this.sourceTexture);
93
+ });
94
+ return pass;
95
+ }
96
+ dispose() {
97
+ this.objectRendererTask?.objectRenderer.onInitRenderingObservable.remove(this._initRenderingObserver);
98
+ this._frameGraph.scene.onBeforeRenderObservable.remove(this._onBeforeRenderSceneObserver);
99
+ super.dispose();
100
+ }
101
+ }
102
+ //# sourceMappingURL=taaTask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taaTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/taaTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\r\n FrameGraph,\r\n FrameGraphRenderPass,\r\n FrameGraphObjectRendererTask,\r\n FrameGraphTextureCreationOptions,\r\n Observer,\r\n ObjectRenderer,\r\n FrameGraphTextureHandle,\r\n Scene,\r\n} from \"core/index\";\r\nimport { ThinTAAPostProcess } from \"core/PostProcesses/thinTAAPostProcess\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\nimport { Constants } from \"core/Engines/constants\";\r\n\r\n/**\r\n * Task which applies a Temporal Anti-Aliasing post process.\r\n */\r\nexport class FrameGraphTAATask extends FrameGraphPostProcessTask {\r\n public override readonly postProcess: ThinTAAPostProcess;\r\n\r\n /**\r\n * The object renderer task used to render the scene objects.\r\n */\r\n public objectRendererTask: FrameGraphObjectRendererTask;\r\n\r\n /**\r\n * The handle to the velocity texture. Only needed if postProcess.reprojectHistory is enabled.\r\n * Note that you must use the linear velocity texture!\r\n */\r\n public velocityTexture: FrameGraphTextureHandle;\r\n\r\n protected _onBeforeRenderSceneObserver: Observer<Scene>;\r\n protected _initRenderingObserver: Observer<ObjectRenderer>;\r\n\r\n /**\r\n * Constructs a new Temporal Anti-Aliasing task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph this task is associated with.\r\n * @param thinPostProcess The thin post process to use for the Temporal Anti-Aliasing effect. If not provided, a new one will be created.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinTAAPostProcess) {\r\n super(name, frameGraph, thinPostProcess || new ThinTAAPostProcess(name, frameGraph.scene));\r\n }\r\n\r\n public override record(): FrameGraphRenderPass {\r\n if (this.sourceTexture === undefined || this.objectRendererTask === undefined) {\r\n throw new Error(`FrameGraphPostProcessTask \"${this.name}\": sourceTexture and objectRendererTask are required`);\r\n }\r\n\r\n this._frameGraph.scene.onBeforeRenderObservable.remove(this._onBeforeRenderSceneObserver);\r\n this._onBeforeRenderSceneObserver = this._frameGraph.scene.onBeforeRenderObservable.add(() => {\r\n if (this.postProcess.reprojectHistory && !this.disabled) {\r\n this.postProcess._updateJitter();\r\n }\r\n });\r\n\r\n const objectRenderer = this.objectRendererTask.objectRenderer;\r\n\r\n objectRenderer.onInitRenderingObservable.remove(this._initRenderingObserver);\r\n this._initRenderingObserver = objectRenderer.onInitRenderingObservable.add(() => {\r\n if (!this.postProcess.reprojectHistory && !this.disabled) {\r\n this.postProcess._updateJitter();\r\n\r\n // We pass false to this.camera.getProjectionMatrix() when TAA is enabled to avoid overwriting the projection matrix calculated by the call to this.postProcess.updateJitter()\r\n const camera = objectRenderer.activeCamera!;\r\n this._frameGraph.scene.setTransformMatrix(camera.getViewMatrix(), camera.getProjectionMatrix(this.postProcess.disabled));\r\n }\r\n });\r\n\r\n const textureManager = this._frameGraph.textureManager;\r\n const sourceSize = textureManager.getTextureAbsoluteDimensions(this.sourceTexture);\r\n\r\n this._sourceWidth = this._outputWidth = sourceSize.width;\r\n this._sourceHeight = this._outputHeight = sourceSize.height;\r\n\r\n const renderTextureSize = textureManager.getTextureAbsoluteDimensions(this.objectRendererTask.outputTexture);\r\n\r\n this.postProcess.textureWidth = renderTextureSize.width;\r\n this.postProcess.textureHeight = renderTextureSize.height;\r\n\r\n const pingPongTextureCreationOptions: FrameGraphTextureCreationOptions = {\r\n size: sourceSize,\r\n options: {\r\n createMipMaps: false,\r\n types: [Constants.TEXTURETYPE_HALF_FLOAT],\r\n formats: [Constants.TEXTUREFORMAT_RGBA],\r\n samples: 1,\r\n useSRGBBuffers: [false],\r\n creationFlags: [0],\r\n labels: [\"\"],\r\n },\r\n sizeIsPercentage: false,\r\n isHistoryTexture: true,\r\n };\r\n\r\n const pingPongHandle = textureManager.createRenderTargetTexture(`${this.name} history`, pingPongTextureCreationOptions);\r\n\r\n textureManager.resolveDanglingHandle(this.outputTexture, pingPongHandle);\r\n\r\n const pass = this._frameGraph.addRenderPass(this.name);\r\n\r\n pass.depthReadOnly = this.depthReadOnly;\r\n pass.stencilReadOnly = this.stencilReadOnly;\r\n\r\n pass.addDependencies(this.sourceTexture);\r\n\r\n pass.setRenderTarget(this.outputTexture);\r\n pass.setRenderTargetDepth(this.depthAttachmentTexture);\r\n pass.setExecuteFunc((context) => {\r\n objectRenderer.dontSetTransformationMatrix = !this.postProcess.reprojectHistory;\r\n this.postProcess.camera = objectRenderer.activeCamera;\r\n\r\n if (this.sourceTexture !== undefined) {\r\n context.setTextureSamplingMode(this.sourceTexture, this.sourceSamplingMode);\r\n }\r\n if (this.velocityTexture !== undefined) {\r\n context.setTextureSamplingMode(this.velocityTexture, Constants.TEXTURE_BILINEAR_SAMPLINGMODE);\r\n }\r\n\r\n context.setTextureSamplingMode(pingPongHandle, Constants.TEXTURE_BILINEAR_SAMPLINGMODE);\r\n\r\n context.applyFullScreenEffect(\r\n this._postProcessDrawWrapper,\r\n () => {\r\n context.bindTextureHandle(this._postProcessDrawWrapper.effect!, \"textureSampler\", this.sourceTexture!);\r\n context.bindTextureHandle(this._postProcessDrawWrapper.effect!, \"historySampler\", pingPongHandle);\r\n if (this.postProcess.reprojectHistory && this.velocityTexture !== undefined) {\r\n context.bindTextureHandle(this._postProcessDrawWrapper.effect!, \"velocitySampler\", this.velocityTexture);\r\n }\r\n this.postProcess.bind();\r\n },\r\n this.stencilState,\r\n this.disableColorWrite,\r\n this.drawBackFace,\r\n this.depthTest\r\n );\r\n });\r\n\r\n const passDisabled = this._frameGraph.addRenderPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.depthReadOnly = this.depthReadOnly;\r\n passDisabled.stencilReadOnly = this.stencilReadOnly;\r\n\r\n passDisabled.addDependencies(this.sourceTexture);\r\n\r\n passDisabled.setRenderTarget(this.outputTexture);\r\n passDisabled.setRenderTargetDepth(this.depthAttachmentTexture);\r\n passDisabled.setExecuteFunc((context) => {\r\n context.copyTexture(this.sourceTexture!);\r\n });\r\n\r\n return pass;\r\n }\r\n\r\n public override dispose() {\r\n this.objectRendererTask?.objectRenderer.onInitRenderingObservable.remove(this._initRenderingObserver);\r\n this._frameGraph.scene.onBeforeRenderObservable.remove(this._onBeforeRenderSceneObserver);\r\n super.dispose();\r\n }\r\n}\r\n"]}
@@ -172,6 +172,15 @@ export declare class FrameGraphTextureManager {
172
172
  width: number;
173
173
  height: number;
174
174
  };
175
+ /**
176
+ * Gets the absolute dimensions of a texture from its handle or creation options.
177
+ * @param handleOrCreationOptions The handle or creation options of the texture
178
+ * @returns The absolute dimensions of the texture
179
+ */
180
+ getTextureAbsoluteDimensions(handleOrCreationOptions: FrameGraphTextureHandle | FrameGraphTextureCreationOptions): {
181
+ width: number;
182
+ height: number;
183
+ };
175
184
  /**
176
185
  * Calculates the total byte size of all textures used by the frame graph texture manager (including external textures)
177
186
  * @param optimizedSize True if the calculation should not factor in aliased textures
@@ -326,6 +326,21 @@ export class FrameGraphTextureManager {
326
326
  height: Math.floor((height * screenHeight) / 100),
327
327
  };
328
328
  }
329
+ /**
330
+ * Gets the absolute dimensions of a texture from its handle or creation options.
331
+ * @param handleOrCreationOptions The handle or creation options of the texture
332
+ * @returns The absolute dimensions of the texture
333
+ */
334
+ getTextureAbsoluteDimensions(handleOrCreationOptions) {
335
+ if (typeof handleOrCreationOptions === "number") {
336
+ handleOrCreationOptions = this.getTextureCreationOptions(handleOrCreationOptions);
337
+ }
338
+ return !handleOrCreationOptions.sizeIsPercentage
339
+ ? textureSizeIsObject(handleOrCreationOptions.size)
340
+ ? handleOrCreationOptions.size
341
+ : { width: handleOrCreationOptions.size, height: handleOrCreationOptions.size }
342
+ : this.getAbsoluteDimensions(handleOrCreationOptions.size);
343
+ }
329
344
  /**
330
345
  * Calculates the total byte size of all textures used by the frame graph texture manager (including external textures)
331
346
  * @param optimizedSize True if the calculation should not factor in aliased textures