@babylonjs/core 8.49.6 → 8.49.7

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 (161) hide show
  1. package/Animations/animationGroup.d.ts +2 -3
  2. package/Animations/animationGroup.js +10 -15
  3. package/Animations/animationGroup.js.map +1 -1
  4. package/Bones/bone.d.ts +2 -0
  5. package/Bones/bone.js +2 -0
  6. package/Bones/bone.js.map +1 -1
  7. package/Bones/skeleton.js +7 -0
  8. package/Bones/skeleton.js.map +1 -1
  9. package/Cameras/Limits/geospatialLimits.d.ts +1 -1
  10. package/Cameras/Limits/geospatialLimits.js +1 -1
  11. package/Cameras/Limits/geospatialLimits.js.map +1 -1
  12. package/Culling/ray.core.js +2 -2
  13. package/Culling/ray.core.js.map +1 -1
  14. package/Engines/abstractEngine.js +2 -2
  15. package/Engines/abstractEngine.js.map +1 -1
  16. package/FrameGraph/Node/Blocks/Layers/selectionOutlineLayerBlock.d.ts +76 -0
  17. package/FrameGraph/Node/Blocks/Layers/selectionOutlineLayerBlock.js +209 -0
  18. package/FrameGraph/Node/Blocks/Layers/selectionOutlineLayerBlock.js.map +1 -0
  19. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.d.ts +5 -0
  20. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js +34 -0
  21. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js.map +1 -1
  22. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.js +1 -1
  23. package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.js.map +1 -1
  24. package/FrameGraph/Node/Blocks/index.d.ts +1 -0
  25. package/FrameGraph/Node/Blocks/index.js +1 -0
  26. package/FrameGraph/Node/Blocks/index.js.map +1 -1
  27. package/FrameGraph/Tasks/Layers/baseLayerTask.d.ts +20 -6
  28. package/FrameGraph/Tasks/Layers/baseLayerTask.js +108 -77
  29. package/FrameGraph/Tasks/Layers/baseLayerTask.js.map +1 -1
  30. package/FrameGraph/Tasks/Layers/glowLayerTask.js +1 -1
  31. package/FrameGraph/Tasks/Layers/glowLayerTask.js.map +1 -1
  32. package/FrameGraph/Tasks/Layers/highlightLayerTask.js +1 -1
  33. package/FrameGraph/Tasks/Layers/highlightLayerTask.js.map +1 -1
  34. package/FrameGraph/Tasks/Layers/selectionOutlineTask.d.ts +28 -0
  35. package/FrameGraph/Tasks/Layers/selectionOutlineTask.js +36 -0
  36. package/FrameGraph/Tasks/Layers/selectionOutlineTask.js.map +1 -0
  37. package/FrameGraph/Tasks/PostProcesses/bloomTask.d.ts +5 -0
  38. package/FrameGraph/Tasks/PostProcesses/bloomTask.js +12 -1
  39. package/FrameGraph/Tasks/PostProcesses/bloomTask.js.map +1 -1
  40. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.d.ts +5 -0
  41. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js +12 -1
  42. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js.map +1 -1
  43. package/FrameGraph/Tasks/PostProcesses/postProcessTask.d.ts +5 -0
  44. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js +10 -1
  45. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js.map +1 -1
  46. package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.d.ts +5 -0
  47. package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js +12 -1
  48. package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js.map +1 -1
  49. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.d.ts +5 -0
  50. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js +12 -1
  51. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js.map +1 -1
  52. package/FrameGraph/frameGraphRenderContext.d.ts +2 -1
  53. package/FrameGraph/frameGraphRenderContext.js +3 -1
  54. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  55. package/FrameGraph/index.d.ts +1 -0
  56. package/FrameGraph/index.js +1 -0
  57. package/FrameGraph/index.js.map +1 -1
  58. package/Layers/effectLayer.d.ts +4 -0
  59. package/Layers/effectLayer.js +2 -0
  60. package/Layers/effectLayer.js.map +1 -1
  61. package/Layers/highlightLayer.js +1 -0
  62. package/Layers/highlightLayer.js.map +1 -1
  63. package/Layers/index.d.ts +2 -0
  64. package/Layers/index.js +2 -0
  65. package/Layers/index.js.map +1 -1
  66. package/Layers/selectionOutlineLayer.d.ts +180 -0
  67. package/Layers/selectionOutlineLayer.js +319 -0
  68. package/Layers/selectionOutlineLayer.js.map +1 -0
  69. package/Layers/thinEffectLayer.d.ts +5 -1
  70. package/Layers/thinEffectLayer.js +21 -16
  71. package/Layers/thinEffectLayer.js.map +1 -1
  72. package/Layers/thinGlowLayer.js +1 -0
  73. package/Layers/thinGlowLayer.js.map +1 -1
  74. package/Layers/thinHighlightLayer.js +1 -0
  75. package/Layers/thinHighlightLayer.js.map +1 -1
  76. package/Layers/thinSelectionOutlineLayer.d.ts +148 -0
  77. package/Layers/thinSelectionOutlineLayer.js +579 -0
  78. package/Layers/thinSelectionOutlineLayer.js.map +1 -0
  79. package/Loading/Plugins/babylonFileLoader.js +136 -48
  80. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  81. package/Materials/Node/Blocks/Dual/textureBlock.d.ts +6 -0
  82. package/Materials/Node/Blocks/Dual/textureBlock.js +10 -0
  83. package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
  84. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +2 -2
  85. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  86. package/Materials/Node/Blocks/Teleport/teleportOutBlock.js +9 -0
  87. package/Materials/Node/Blocks/Teleport/teleportOutBlock.js.map +1 -1
  88. package/Materials/Node/Blocks/index.d.ts +1 -0
  89. package/Materials/Node/Blocks/index.js +1 -0
  90. package/Materials/Node/Blocks/index.js.map +1 -1
  91. package/Materials/Node/Blocks/pannerBlock.d.ts +39 -0
  92. package/Materials/Node/Blocks/pannerBlock.js +88 -0
  93. package/Materials/Node/Blocks/pannerBlock.js.map +1 -0
  94. package/Materials/Node/nodeMaterialBuildStateSharedData.js +1 -1
  95. package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
  96. package/Maths/math.vector.functions.d.ts +11 -3
  97. package/Maths/math.vector.functions.js +10 -0
  98. package/Maths/math.vector.functions.js.map +1 -1
  99. package/Meshes/Compression/dracoCompressionWorker.d.ts +1 -1
  100. package/Meshes/Compression/dracoCompressionWorker.js +14 -9
  101. package/Meshes/Compression/dracoCompressionWorker.js.map +1 -1
  102. package/Meshes/Compression/dracoDecoder.js +1 -1
  103. package/Meshes/Compression/dracoDecoder.js.map +1 -1
  104. package/Meshes/Compression/dracoEncoder.d.ts +2 -2
  105. package/Meshes/Compression/dracoEncoder.js +11 -5
  106. package/Meshes/Compression/dracoEncoder.js.map +1 -1
  107. package/Meshes/Compression/dracoEncoder.types.d.ts +8 -5
  108. package/Meshes/Compression/dracoEncoder.types.js.map +1 -1
  109. package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +18 -0
  110. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +122 -28
  111. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  112. package/Meshes/GaussianSplatting/gaussianSplattingPartProxyMesh.d.ts +74 -0
  113. package/Meshes/GaussianSplatting/gaussianSplattingPartProxyMesh.js +107 -0
  114. package/Meshes/GaussianSplatting/gaussianSplattingPartProxyMesh.js.map +1 -0
  115. package/Meshes/abstractMesh.d.ts +4 -0
  116. package/Meshes/abstractMesh.js +4 -0
  117. package/Meshes/abstractMesh.js.map +1 -1
  118. package/Meshes/csg2.js +9 -1
  119. package/Meshes/csg2.js.map +1 -1
  120. package/Meshes/instancedMesh.js +2 -2
  121. package/Meshes/instancedMesh.js.map +1 -1
  122. package/Meshes/mesh.js +6 -1
  123. package/Meshes/mesh.js.map +1 -1
  124. package/Misc/environmentTextureTools.js +1 -1
  125. package/Misc/environmentTextureTools.js.map +1 -1
  126. package/Misc/fileTools.js +1 -1
  127. package/Misc/fileTools.js.map +1 -1
  128. package/Misc/textureTools.d.ts +2 -1
  129. package/Misc/textureTools.js +5 -3
  130. package/Misc/textureTools.js.map +1 -1
  131. package/Morph/morphTarget.js +2 -1
  132. package/Morph/morphTarget.js.map +1 -1
  133. package/Particles/Node/Blocks/systemBlock.d.ts +27 -4
  134. package/Particles/Node/Blocks/systemBlock.js +36 -8
  135. package/Particles/Node/Blocks/systemBlock.js.map +1 -1
  136. package/Particles/Node/nodeParticleSystemSet.helper.js +42 -6
  137. package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
  138. package/Shaders/selection.fragment.d.ts +7 -0
  139. package/Shaders/selection.fragment.js +47 -0
  140. package/Shaders/selection.fragment.js.map +1 -0
  141. package/Shaders/selection.vertex.d.ts +17 -0
  142. package/Shaders/selection.vertex.js +95 -0
  143. package/Shaders/selection.vertex.js.map +1 -0
  144. package/Shaders/selectionOutline.fragment.d.ts +5 -0
  145. package/Shaders/selectionOutline.fragment.js +23 -0
  146. package/Shaders/selectionOutline.fragment.js.map +1 -0
  147. package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.js +1 -1
  148. package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.js.map +1 -1
  149. package/ShadersWGSL/selection.fragment.d.ts +7 -0
  150. package/ShadersWGSL/selection.fragment.js +47 -0
  151. package/ShadersWGSL/selection.fragment.js.map +1 -0
  152. package/ShadersWGSL/selection.vertex.d.ts +17 -0
  153. package/ShadersWGSL/selection.vertex.js +96 -0
  154. package/ShadersWGSL/selection.vertex.js.map +1 -0
  155. package/ShadersWGSL/selectionOutline.fragment.d.ts +5 -0
  156. package/ShadersWGSL/selectionOutline.fragment.js +24 -0
  157. package/ShadersWGSL/selectionOutline.fragment.js.map +1 -0
  158. package/package.json +1 -1
  159. package/scene.d.ts +2 -2
  160. package/scene.js +10 -2
  161. package/scene.js.map +1 -1
@@ -9,6 +9,13 @@ import { FrameGraphPostProcessTask } from "../PostProcesses/postProcessTask.js";
9
9
  import { Vector2 } from "../../../Maths/math.vector.js";
10
10
  import { ThinGlowBlurPostProcess } from "../../../Layers/thinEffectLayer.js";
11
11
  import { FrameGraphExecuteTask } from "../Misc/executeTask.js";
12
+ /** @internal */
13
+ export var FrameGraphBaseLayerBlurType;
14
+ (function (FrameGraphBaseLayerBlurType) {
15
+ FrameGraphBaseLayerBlurType["None"] = "none";
16
+ FrameGraphBaseLayerBlurType["Standard"] = "standard";
17
+ FrameGraphBaseLayerBlurType["Glow"] = "glow";
18
+ })(FrameGraphBaseLayerBlurType || (FrameGraphBaseLayerBlurType = {}));
12
19
  class FrameGraphGlowBlurTask extends FrameGraphPostProcessTask {
13
20
  /**
14
21
  * Constructs a new glow blur task.
@@ -47,18 +54,18 @@ export class FrameGraphBaseLayerTask extends FrameGraphTask {
47
54
  this._blurY[i].name = `${name} Blur Y${i}`;
48
55
  }
49
56
  }
50
- if (this._clearLayerTextures) {
51
- this._clearLayerTextures.name = name + " Clear Layer";
57
+ if (this._clearLayerTextureTask) {
58
+ this._clearLayerTextureTask.name = name + " Clear Layer";
52
59
  }
53
- if (this._objectRendererForLayer) {
54
- this._objectRendererForLayer.name = name + " Render to Layer";
60
+ if (this._objectRendererForLayerTask) {
61
+ this._objectRendererForLayerTask.name = name + " Render to Layer";
55
62
  }
56
63
  }
57
64
  /**
58
65
  * Gets the object renderer used to render the layer.
59
66
  */
60
67
  get objectRendererForLayer() {
61
- return this._objectRendererForLayer;
68
+ return this._objectRendererForLayerTask;
62
69
  }
63
70
  /**
64
71
  * Constructs a new layer task.
@@ -67,39 +74,45 @@ export class FrameGraphBaseLayerTask extends FrameGraphTask {
67
74
  * @param scene The scene to render the layer in.
68
75
  * @param layer The layer.
69
76
  * @param numBlurPasses The number of blur passes applied by the layer.
70
- * @param useCustomBlur If true, the layer will use a custom blur post process instead of the default one.
77
+ * @param _blurType The type of blur to use for the layer.
71
78
  * @param _setRenderTargetDepth If true, the task will set the render target depth.
72
79
  * @param _notifyBlurObservable If true, the task will notify before and after blurring occurs.
80
+ * @param _setObjectList If true, the object list of the object renderer for the layer will be set to the object list of the object renderer task.
73
81
  */
74
- constructor(name, frameGraph, scene, layer, numBlurPasses, useCustomBlur = false, _setRenderTargetDepth = false, _notifyBlurObservable = false) {
82
+ constructor(name, frameGraph, scene, layer, numBlurPasses, _blurType = "standard" /* FrameGraphBaseLayerBlurType.Standard */, _setRenderTargetDepth = false, _notifyBlurObservable = false, _setObjectList = true) {
75
83
  super(name, frameGraph);
84
+ this._blurType = _blurType;
76
85
  this._setRenderTargetDepth = _setRenderTargetDepth;
77
86
  this._notifyBlurObservable = _notifyBlurObservable;
87
+ this._setObjectList = _setObjectList;
78
88
  this._blurX = [];
79
89
  this._blurY = [];
80
90
  this._onBeforeBlurTask = null;
81
91
  this._onAfterBlurTask = null;
82
92
  this._onBeforeObservableObserver = null;
93
+ this._onBeforeObservableObserver2 = null;
83
94
  this._onAfterObservableObserver = null;
84
95
  this._onAfterRenderingGroupObserver = null;
85
96
  this._scene = scene;
86
97
  this._engine = scene.getEngine();
87
98
  this.layer = layer;
88
- for (let i = 0; i < numBlurPasses; i++) {
89
- if (useCustomBlur) {
90
- this._blurX.push(new FrameGraphGlowBlurTask(`${name} Blur X${i}`, this._frameGraph, this.layer._postProcesses[1 + i * 2 + 0]));
91
- this._blurY.push(new FrameGraphGlowBlurTask(`${name} Blur Y${i}`, this._frameGraph, this.layer._postProcesses[1 + i * 2 + 1]));
92
- }
93
- else {
94
- this._blurX.push(new FrameGraphBlurTask(`${name} Blur X${i}`, this._frameGraph, this.layer._postProcesses[i * 2 + 0]));
95
- this._blurY.push(new FrameGraphBlurTask(`${name} Blur Y${i}`, this._frameGraph, this.layer._postProcesses[i * 2 + 1]));
99
+ if (this._blurType !== "none" /* FrameGraphBaseLayerBlurType.None */) {
100
+ for (let i = 0; i < numBlurPasses; i++) {
101
+ if (this._blurType === "glow" /* FrameGraphBaseLayerBlurType.Glow */) {
102
+ this._blurX.push(new FrameGraphGlowBlurTask(`${name} Blur X${i}`, this._frameGraph, this.layer._postProcesses[1 + i * 2 + 0]));
103
+ this._blurY.push(new FrameGraphGlowBlurTask(`${name} Blur Y${i}`, this._frameGraph, this.layer._postProcesses[1 + i * 2 + 1]));
104
+ }
105
+ else {
106
+ this._blurX.push(new FrameGraphBlurTask(`${name} Blur X${i}`, this._frameGraph, this.layer._postProcesses[i * 2 + 0]));
107
+ this._blurY.push(new FrameGraphBlurTask(`${name} Blur Y${i}`, this._frameGraph, this.layer._postProcesses[i * 2 + 1]));
108
+ }
96
109
  }
97
110
  }
98
- this._clearLayerTextures = new FrameGraphClearTextureTask(name + " Clear Layer", frameGraph);
99
- this._clearLayerTextures.clearColor = true;
100
- this._clearLayerTextures.clearDepth = true;
101
- this._objectRendererForLayer = new FrameGraphObjectRendererTask(name + " Render to Layer", frameGraph, scene, undefined, this.layer.objectRenderer);
102
- if (this._notifyBlurObservable) {
111
+ this._clearLayerTextureTask = new FrameGraphClearTextureTask(name + " Clear Layer", frameGraph);
112
+ this._clearLayerTextureTask.clearColor = true;
113
+ this._clearLayerTextureTask.clearDepth = true;
114
+ this._objectRendererForLayerTask = new FrameGraphObjectRendererTask(name + " Render to Layer", frameGraph, scene, undefined, this.layer.objectRenderer);
115
+ if (this._blurType !== "none" /* FrameGraphBaseLayerBlurType.None */ && this._notifyBlurObservable) {
103
116
  this._onBeforeBlurTask = new FrameGraphExecuteTask(name + " On Before Blur", frameGraph);
104
117
  this._onAfterBlurTask = new FrameGraphExecuteTask(name + " On After Blur", frameGraph);
105
118
  this._onBeforeBlurTask.func = () => {
@@ -116,12 +129,12 @@ export class FrameGraphBaseLayerTask extends FrameGraphTask {
116
129
  this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();
117
130
  }
118
131
  isReady() {
119
- return this._objectRendererForLayer.isReady() && this.layer.isLayerReady();
132
+ return this._objectRendererForLayerTask.isReady() && this.layer.isLayerReady();
120
133
  }
121
134
  getClassName() {
122
135
  return "FrameGraphBaseLayerTask";
123
136
  }
124
- record() {
137
+ record(_skipCreationOfDisabledPasses, additionalComposeBindings) {
125
138
  if (this.targetTexture === undefined || this.objectRendererTask === undefined) {
126
139
  throw new Error(`${this.constructor.name} "${this.name}": targetTexture and objectRendererTask are required`);
127
140
  }
@@ -147,7 +160,7 @@ export class FrameGraphBaseLayerTask extends FrameGraphTask {
147
160
  options: {
148
161
  createMipMaps: false,
149
162
  types: [this.layer._options.mainTextureType],
150
- formats: [5],
163
+ formats: [this.layer._options.mainTextureFormat],
151
164
  samples: 1,
152
165
  useSRGBBuffers: [false],
153
166
  creationFlags: [0],
@@ -156,6 +169,7 @@ export class FrameGraphBaseLayerTask extends FrameGraphTask {
156
169
  };
157
170
  colorLayerOutput = this._frameGraph.textureManager.createRenderTargetTexture(`${this.name} Color`, textureCreationOptions);
158
171
  }
172
+ this._layerTextureDimensions = this._frameGraph.textureManager.getTextureAbsoluteDimensions(textureCreationOptions);
159
173
  // Creates a depth texture, used to render objects to the layer
160
174
  // We don't reuse the depth texture of the objectRendererTask, as the size of the layer texture will generally be different (smaller).
161
175
  const textureDepthCreationOptions = {
@@ -166,49 +180,68 @@ export class FrameGraphBaseLayerTask extends FrameGraphTask {
166
180
  textureDepthCreationOptions.options.formats[0] = 14;
167
181
  const depthLayerOutput = this._frameGraph.textureManager.createRenderTargetTexture(`${this.name} Depth`, textureDepthCreationOptions);
168
182
  // Clears the textures
169
- this._clearLayerTextures.targetTexture = colorLayerOutput;
170
- this._clearLayerTextures.depthTexture = depthLayerOutput;
171
- this._clearLayerTextures.color = this.layer.neutralColor;
172
- this._clearLayerTextures.clearDepth = true;
173
- const clearTaskPass = this._clearLayerTextures.record();
183
+ this._clearLayerTextureTask.targetTexture = colorLayerOutput;
184
+ this._clearLayerTextureTask.depthTexture = depthLayerOutput;
185
+ this._clearLayerTextureTask.color = this.layer.neutralColor;
186
+ this._clearLayerTextureTask.clearDepth = true;
187
+ const clearTaskPass = this._clearLayerTextureTask.record(true);
174
188
  // Renders the objects to the layer texture
175
- this._objectRendererForLayer.targetTexture = this._clearLayerTextures.outputTexture;
176
- this._objectRendererForLayer.depthTexture = this._clearLayerTextures.outputDepthTexture;
177
- this._objectRendererForLayer.camera = this.objectRendererTask.camera;
178
- this._objectRendererForLayer.objectList = this.objectRendererTask.objectList;
179
- this._objectRendererForLayer.disableShadows = true;
180
- const objectRendererForLayerTaskPass = this._objectRendererForLayer.record();
181
- // Blurs the layer color texture
182
- let blurTextureType = 0;
183
- if (this._engine.getCaps().textureHalfFloatRender) {
184
- blurTextureType = 2;
185
- }
186
- else {
187
- blurTextureType = 0;
189
+ this._objectRendererForLayerTask.targetTexture = this._clearLayerTextureTask.outputTexture;
190
+ this._objectRendererForLayerTask.depthTexture = this._clearLayerTextureTask.outputDepthTexture;
191
+ this._objectRendererForLayerTask.camera = this.objectRendererTask.camera;
192
+ if (this._setObjectList) {
193
+ this._objectRendererForLayerTask.objectList = this.objectRendererTask.objectList;
188
194
  }
189
- textureCreationOptions.options.types[0] = blurTextureType;
190
- const blurTextureSizeRatio = this.layer._options.blurTextureSizeRatio !== undefined ? this.layer._options.blurTextureSizeRatio || 0.1 : undefined;
191
- if (blurTextureSizeRatio !== undefined) {
192
- textureSize.width = Math.floor(textureSize.width * blurTextureSizeRatio) || 1;
193
- textureSize.height = Math.floor(textureSize.height * blurTextureSizeRatio) || 1;
194
- }
195
- const onBeforeBlurPass = this._onBeforeBlurTask?.record();
196
- const blurPasses = [];
197
- for (let i = 0; i < this._blurX.length; i++) {
198
- const blurXTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._blurX[i].name, textureCreationOptions);
199
- this._blurX[i].sourceTexture = i === 0 ? this._objectRendererForLayer.outputTexture : this._blurY[i - 1].outputTexture;
200
- this._blurX[i].sourceSamplingMode = 2;
201
- this._blurX[i].targetTexture = blurXTextureHandle;
202
- blurPasses.push(this._blurX[i].record(true));
203
- const blurYTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._blurY[i].name, textureCreationOptions);
204
- this._blurY[i].sourceTexture = this._blurX[i].outputTexture;
205
- this._blurY[i].sourceSamplingMode = 2;
206
- this._blurY[i].targetTexture = blurYTextureHandle;
207
- blurPasses.push(this._blurY[i].record(true));
208
- textureSize.width = textureSize.width >> 1;
209
- textureSize.height = textureSize.height >> 1;
195
+ this._objectRendererForLayerTask.disableShadows = true;
196
+ const objectRendererForLayerTaskPass = this._objectRendererForLayerTask.record(true);
197
+ // Blurs the layer color texture
198
+ let onBeforeBlurPass;
199
+ let onAfterBlurPass;
200
+ if (this._blurType !== "none" /* FrameGraphBaseLayerBlurType.None */) {
201
+ let blurTextureType = 0;
202
+ if (this._engine.getCaps().textureHalfFloatRender) {
203
+ blurTextureType = 2;
204
+ }
205
+ else {
206
+ blurTextureType = 0;
207
+ }
208
+ textureCreationOptions.options.types[0] = blurTextureType;
209
+ const blurTextureSizeRatio = this.layer._options.blurTextureSizeRatio !== undefined ? this.layer._options.blurTextureSizeRatio || 0.1 : undefined;
210
+ if (blurTextureSizeRatio !== undefined) {
211
+ textureSize.width = Math.floor(textureSize.width * blurTextureSizeRatio) || 1;
212
+ textureSize.height = Math.floor(textureSize.height * blurTextureSizeRatio) || 1;
213
+ }
214
+ onBeforeBlurPass = this._onBeforeBlurTask?.record();
215
+ const blurPasses = [];
216
+ for (let i = 0; i < this._blurX.length; i++) {
217
+ const blurXTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._blurX[i].name, textureCreationOptions);
218
+ this._blurX[i].sourceTexture = i === 0 ? this._objectRendererForLayerTask.outputTexture : this._blurY[i - 1].outputTexture;
219
+ this._blurX[i].sourceSamplingMode = 2;
220
+ this._blurX[i].targetTexture = blurXTextureHandle;
221
+ blurPasses.push(this._blurX[i].record(true));
222
+ const blurYTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._blurY[i].name, textureCreationOptions);
223
+ this._blurY[i].sourceTexture = this._blurX[i].outputTexture;
224
+ this._blurY[i].sourceSamplingMode = 2;
225
+ this._blurY[i].targetTexture = blurYTextureHandle;
226
+ blurPasses.push(this._blurY[i].record(true));
227
+ textureSize.width = textureSize.width >> 1;
228
+ textureSize.height = textureSize.height >> 1;
229
+ }
230
+ onAfterBlurPass = this._onAfterBlurTask?.record();
231
+ this.objectRendererTask.objectRenderer.onBeforeRenderObservable.remove(this._onBeforeObservableObserver2);
232
+ this._onBeforeObservableObserver2 = this.objectRendererTask.objectRenderer.onBeforeRenderObservable.add(() => {
233
+ const shouldRender = this.layer.shouldRender();
234
+ if (onBeforeBlurPass) {
235
+ onBeforeBlurPass.disabled = !shouldRender;
236
+ }
237
+ for (let i = 0; i < blurPasses.length; i++) {
238
+ blurPasses[i].disabled = !shouldRender;
239
+ }
240
+ if (onAfterBlurPass) {
241
+ onAfterBlurPass.disabled = !shouldRender;
242
+ }
243
+ });
210
244
  }
211
- const onAfterBlurPass = this._onAfterBlurTask?.record();
212
245
  // Enables stencil (if stencil is needed) when rendering objects to the main texture
213
246
  // We also disable the internal passes if the layer should not render
214
247
  this.objectRendererTask.objectRenderer.onBeforeRenderObservable.remove(this._onBeforeObservableObserver);
@@ -216,15 +249,6 @@ export class FrameGraphBaseLayerTask extends FrameGraphTask {
216
249
  const shouldRender = this.layer.shouldRender();
217
250
  clearTaskPass.disabled = !shouldRender;
218
251
  objectRendererForLayerTaskPass.disabled = !shouldRender;
219
- if (onBeforeBlurPass) {
220
- onBeforeBlurPass.disabled = !shouldRender;
221
- }
222
- for (let i = 0; i < blurPasses.length; i++) {
223
- blurPasses[i].disabled = !shouldRender;
224
- }
225
- if (onAfterBlurPass) {
226
- onAfterBlurPass.disabled = !shouldRender;
227
- }
228
252
  if (shouldRender && this.layer.needStencil()) {
229
253
  this._engine.setStencilBuffer(true);
230
254
  this._engine.setStencilFunctionReference(1);
@@ -252,6 +276,7 @@ export class FrameGraphBaseLayerTask extends FrameGraphTask {
252
276
  for (let i = 0; i < this._blurY.length; i++) {
253
277
  context.bindTextureHandle(effect, `textureSampler${i > 0 ? i + 1 : ""}`, this._blurY[i].outputTexture);
254
278
  }
279
+ additionalComposeBindings?.(context, effect);
255
280
  };
256
281
  if (this.layer._options.renderingGroupId === -1) {
257
282
  return;
@@ -262,7 +287,9 @@ export class FrameGraphBaseLayerTask extends FrameGraphTask {
262
287
  info.renderingManager !== this.objectRendererTask.objectRenderer.renderingManager) {
263
288
  return;
264
289
  }
265
- this._objectRendererForLayer.objectList = this.objectRendererTask.objectList;
290
+ if (this._setObjectList) {
291
+ this._objectRendererForLayerTask.objectList = this.objectRendererTask.objectList;
292
+ }
266
293
  context.saveDepthStates();
267
294
  context.setDepthStates(false, false);
268
295
  context._applyRenderTarget();
@@ -271,9 +298,13 @@ export class FrameGraphBaseLayerTask extends FrameGraphTask {
271
298
  });
272
299
  });
273
300
  pass.setExecuteFunc((context) => {
274
- context.setTextureSamplingMode(this._blurY[this._blurY.length - 1].targetTexture, 2);
301
+ if (this._blurY.length > 0) {
302
+ context.setTextureSamplingMode(this._blurY[this._blurY.length - 1].targetTexture, 2);
303
+ }
275
304
  if (this.layer._options.renderingGroupId === -1 && this.layer.shouldRender()) {
276
- this._objectRendererForLayer.objectList = this.objectRendererTask.objectList; // in case the object list has changed in objectRendererTask
305
+ if (this._setObjectList) {
306
+ this._objectRendererForLayerTask.objectList = this.objectRendererTask.objectList; // in case the object list has changed in objectRendererTask
307
+ }
277
308
  context.setDepthStates(false, false);
278
309
  context._applyRenderTarget();
279
310
  this.layer.compose();
@@ -292,8 +323,8 @@ export class FrameGraphBaseLayerTask extends FrameGraphTask {
292
323
  }
293
324
  dispose() {
294
325
  this._clearAfterRenderingGroupObserver();
295
- this._clearLayerTextures.dispose();
296
- this._objectRendererForLayer.dispose();
326
+ this._clearLayerTextureTask.dispose();
327
+ this._objectRendererForLayerTask.dispose();
297
328
  this._onBeforeBlurTask?.dispose();
298
329
  this._onAfterBlurTask?.dispose();
299
330
  this.layer.dispose();
@@ -1 +1 @@
1
- {"version":3,"file":"baseLayerTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Layers/baseLayerTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\r\n FrameGraph,\r\n FrameGraphTextureHandle,\r\n Scene,\r\n FrameGraphTextureCreationOptions,\r\n Effect,\r\n ThinBlurPostProcess,\r\n AbstractEngine,\r\n Nullable,\r\n Observer,\r\n RenderingGroupInfo,\r\n ThinEffectLayer,\r\n FrameGraphRenderPass,\r\n FrameGraphRenderContext,\r\n} from \"core/index\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { FrameGraphObjectRendererTask } from \"../Rendering/objectRendererTask\";\r\nimport { FrameGraphClearTextureTask } from \"../Texture/clearTextureTask\";\r\nimport { FrameGraphBlurTask } from \"../PostProcesses/blurTask\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { FrameGraphTextureManager } from \"../../frameGraphTextureManager\";\r\nimport { getDimensionsFromTextureSize } from \"../../../Materials/Textures/textureCreationOptions\";\r\nimport { FrameGraphPostProcessTask } from \"../PostProcesses/postProcessTask\";\r\nimport { Vector2 } from \"core/Maths/math.vector\";\r\nimport { ThinGlowBlurPostProcess } from \"../../../Layers/thinEffectLayer\";\r\nimport { FrameGraphExecuteTask } from \"../Misc/executeTask\";\r\n\r\nclass FrameGraphGlowBlurTask extends FrameGraphPostProcessTask {\r\n public override readonly postProcess: ThinGlowBlurPostProcess;\r\n\r\n /**\r\n * Constructs a new glow blur 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 glow blur effect. If not provided, a new one will be created.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinGlowBlurPostProcess) {\r\n super(name, frameGraph, thinPostProcess || new ThinGlowBlurPostProcess(name, frameGraph.engine, new Vector2(1, 0), 1));\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphGlowBlurTask\";\r\n }\r\n\r\n public override record(\r\n skipCreationOfDisabledPasses = false,\r\n additionalExecute?: (context: FrameGraphRenderContext) => void,\r\n additionalBindings?: (context: FrameGraphRenderContext) => void\r\n ): FrameGraphRenderPass {\r\n const pass = super.record(skipCreationOfDisabledPasses, additionalExecute, additionalBindings);\r\n\r\n this.postProcess.textureWidth = this._outputWidth;\r\n this.postProcess.textureHeight = this._outputHeight;\r\n\r\n return pass;\r\n }\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class FrameGraphBaseLayerTask extends FrameGraphTask {\r\n /**\r\n * The target texture to apply the effect layer to.\r\n * The effect will be blended with the contents of this texture.\r\n */\r\n public targetTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The object renderer task used to render the objects in the texture to which the layer will be applied.\r\n * This is needed because the layer may have to inject code in the rendering manager used by object renderer task.\r\n */\r\n public objectRendererTask: FrameGraphObjectRendererTask;\r\n\r\n /**\r\n * The layer texture to render the effect into.\r\n * If not provided, a default texture will be created.\r\n */\r\n public layerTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The output texture of the task (same as targetTexture, but the handle will be different).\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The layer object. Use this object to update the layer properties.\r\n */\r\n public readonly layer: ThinEffectLayer;\r\n\r\n /**\r\n * The name of the task.\r\n */\r\n public override get name() {\r\n return this._name;\r\n }\r\n\r\n public override set name(name: string) {\r\n this._name = name;\r\n if (this._blurX) {\r\n for (let i = 0; i < this._blurX.length; i++) {\r\n this._blurX[i].name = `${name} Blur X${i}`;\r\n this._blurY[i].name = `${name} Blur Y${i}`;\r\n }\r\n }\r\n\r\n if (this._clearLayerTextures) {\r\n this._clearLayerTextures.name = name + \" Clear Layer\";\r\n }\r\n\r\n if (this._objectRendererForLayer) {\r\n this._objectRendererForLayer.name = name + \" Render to Layer\";\r\n }\r\n }\r\n\r\n /**\r\n * Gets the object renderer used to render the layer.\r\n */\r\n public get objectRendererForLayer() {\r\n return this._objectRendererForLayer;\r\n }\r\n\r\n protected readonly _scene: Scene;\r\n protected readonly _engine: AbstractEngine;\r\n protected readonly _clearLayerTextures: FrameGraphClearTextureTask;\r\n protected readonly _objectRendererForLayer: FrameGraphObjectRendererTask;\r\n protected readonly _blurX: Array<FrameGraphBlurTask | FrameGraphGlowBlurTask> = [];\r\n protected readonly _blurY: Array<FrameGraphBlurTask | FrameGraphGlowBlurTask> = [];\r\n private readonly _onBeforeBlurTask: Nullable<FrameGraphExecuteTask> = null;\r\n private readonly _onAfterBlurTask: Nullable<FrameGraphExecuteTask> = null;\r\n private _onBeforeObservableObserver: Nullable<Observer<number>> = null;\r\n private _onAfterObservableObserver: Nullable<Observer<number>> = null;\r\n private _onAfterRenderingGroupObserver: Nullable<Observer<RenderingGroupInfo>> = null;\r\n\r\n /**\r\n * Constructs a new layer task.\r\n * @param name Name of the task.\r\n * @param frameGraph The frame graph this task is associated with.\r\n * @param scene The scene to render the layer in.\r\n * @param layer The layer.\r\n * @param numBlurPasses The number of blur passes applied by the layer.\r\n * @param useCustomBlur If true, the layer will use a custom blur post process instead of the default one.\r\n * @param _setRenderTargetDepth If true, the task will set the render target depth.\r\n * @param _notifyBlurObservable If true, the task will notify before and after blurring occurs.\r\n */\r\n constructor(\r\n name: string,\r\n frameGraph: FrameGraph,\r\n scene: Scene,\r\n layer: ThinEffectLayer,\r\n numBlurPasses: number,\r\n useCustomBlur = false,\r\n private _setRenderTargetDepth = false,\r\n private _notifyBlurObservable = false\r\n ) {\r\n super(name, frameGraph);\r\n\r\n this._scene = scene;\r\n this._engine = scene.getEngine();\r\n\r\n this.layer = layer;\r\n for (let i = 0; i < numBlurPasses; i++) {\r\n if (useCustomBlur) {\r\n this._blurX.push(new FrameGraphGlowBlurTask(`${name} Blur X${i}`, this._frameGraph, this.layer._postProcesses[1 + i * 2 + 0] as ThinGlowBlurPostProcess));\r\n this._blurY.push(new FrameGraphGlowBlurTask(`${name} Blur Y${i}`, this._frameGraph, this.layer._postProcesses[1 + i * 2 + 1] as ThinGlowBlurPostProcess));\r\n } else {\r\n this._blurX.push(new FrameGraphBlurTask(`${name} Blur X${i}`, this._frameGraph, this.layer._postProcesses[i * 2 + 0] as ThinBlurPostProcess));\r\n this._blurY.push(new FrameGraphBlurTask(`${name} Blur Y${i}`, this._frameGraph, this.layer._postProcesses[i * 2 + 1] as ThinBlurPostProcess));\r\n }\r\n }\r\n\r\n this._clearLayerTextures = new FrameGraphClearTextureTask(name + \" Clear Layer\", frameGraph);\r\n this._clearLayerTextures.clearColor = true;\r\n this._clearLayerTextures.clearDepth = true;\r\n\r\n this._objectRendererForLayer = new FrameGraphObjectRendererTask(name + \" Render to Layer\", frameGraph, scene, undefined, this.layer.objectRenderer);\r\n\r\n if (this._notifyBlurObservable) {\r\n this._onBeforeBlurTask = new FrameGraphExecuteTask(name + \" On Before Blur\", frameGraph);\r\n this._onAfterBlurTask = new FrameGraphExecuteTask(name + \" On After Blur\", frameGraph);\r\n\r\n this._onBeforeBlurTask.func = () => {\r\n if (this.layer.onBeforeBlurObservable.hasObservers()) {\r\n this.layer.onBeforeBlurObservable.notifyObservers(this.layer);\r\n }\r\n };\r\n this._onAfterBlurTask.func = () => {\r\n if (this.layer.onAfterBlurObservable.hasObservers()) {\r\n this.layer.onAfterBlurObservable.notifyObservers(this.layer);\r\n }\r\n };\r\n }\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n public override isReady() {\r\n return this._objectRendererForLayer.isReady() && this.layer.isLayerReady();\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphBaseLayerTask\";\r\n }\r\n\r\n public record() {\r\n if (this.targetTexture === undefined || this.objectRendererTask === undefined) {\r\n throw new Error(`${this.constructor.name} \"${this.name}\": targetTexture and objectRendererTask are required`);\r\n }\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.targetTexture);\r\n\r\n // Uses the layerTexture or creates a color texture to render the layer to\r\n let textureSize: {\r\n width: number;\r\n height: number;\r\n };\r\n let textureCreationOptions: FrameGraphTextureCreationOptions;\r\n\r\n let colorLayerOutput: FrameGraphTextureHandle;\r\n\r\n if (this.layerTexture) {\r\n colorLayerOutput = this.layerTexture;\r\n textureCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.layerTexture);\r\n textureSize = getDimensionsFromTextureSize(textureCreationOptions.size);\r\n textureCreationOptions.size = textureSize;\r\n } else {\r\n const targetTextureCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.targetTexture);\r\n const fixedTextureSize = this.layer._options.mainTextureFixedSize ? Math.max(2, this.layer._options.mainTextureFixedSize) : 0;\r\n\r\n textureSize = getDimensionsFromTextureSize(targetTextureCreationOptions.size);\r\n textureSize.width = fixedTextureSize || Math.floor(textureSize.width * (this.layer._options.mainTextureRatio || 0.1)) || 1;\r\n textureSize.height = fixedTextureSize || Math.floor(textureSize.height * (this.layer._options.mainTextureRatio || 0.1)) || 1;\r\n\r\n textureCreationOptions = {\r\n size: textureSize,\r\n options: {\r\n createMipMaps: false,\r\n types: [this.layer._options.mainTextureType],\r\n formats: [Constants.TEXTUREFORMAT_RGBA],\r\n samples: 1,\r\n useSRGBBuffers: [false],\r\n creationFlags: [0],\r\n },\r\n sizeIsPercentage: this.layer._options.mainTextureFixedSize ? false : targetTextureCreationOptions.sizeIsPercentage,\r\n };\r\n colorLayerOutput = this._frameGraph.textureManager.createRenderTargetTexture(`${this.name} Color`, textureCreationOptions);\r\n }\r\n\r\n // Creates a depth texture, used to render objects to the layer\r\n // We don't reuse the depth texture of the objectRendererTask, as the size of the layer texture will generally be different (smaller).\r\n const textureDepthCreationOptions: FrameGraphTextureCreationOptions = {\r\n size: textureSize,\r\n options: FrameGraphTextureManager.CloneTextureOptions(textureCreationOptions.options),\r\n sizeIsPercentage: textureCreationOptions.sizeIsPercentage,\r\n };\r\n\r\n textureDepthCreationOptions.options.formats![0] = Constants.TEXTUREFORMAT_DEPTH32_FLOAT;\r\n\r\n const depthLayerOutput = this._frameGraph.textureManager.createRenderTargetTexture(`${this.name} Depth`, textureDepthCreationOptions);\r\n\r\n // Clears the textures\r\n this._clearLayerTextures.targetTexture = colorLayerOutput;\r\n this._clearLayerTextures.depthTexture = depthLayerOutput;\r\n this._clearLayerTextures.color = this.layer.neutralColor;\r\n this._clearLayerTextures.clearDepth = true;\r\n\r\n const clearTaskPass = this._clearLayerTextures.record();\r\n\r\n // Renders the objects to the layer texture\r\n this._objectRendererForLayer.targetTexture = this._clearLayerTextures.outputTexture;\r\n this._objectRendererForLayer.depthTexture = this._clearLayerTextures.outputDepthTexture;\r\n this._objectRendererForLayer.camera = this.objectRendererTask.camera;\r\n this._objectRendererForLayer.objectList = this.objectRendererTask.objectList;\r\n this._objectRendererForLayer.disableShadows = true;\r\n\r\n const objectRendererForLayerTaskPass = this._objectRendererForLayer.record();\r\n\r\n // Blurs the layer color texture\r\n let blurTextureType = 0;\r\n if (this._engine.getCaps().textureHalfFloatRender) {\r\n blurTextureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n } else {\r\n blurTextureType = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n }\r\n\r\n textureCreationOptions.options.types![0] = blurTextureType;\r\n\r\n const blurTextureSizeRatio = (this.layer._options as any).blurTextureSizeRatio !== undefined ? (this.layer._options as any).blurTextureSizeRatio || 0.1 : undefined;\r\n if (blurTextureSizeRatio !== undefined) {\r\n textureSize.width = Math.floor(textureSize.width * blurTextureSizeRatio) || 1;\r\n textureSize.height = Math.floor(textureSize.height * blurTextureSizeRatio) || 1;\r\n }\r\n\r\n const onBeforeBlurPass = this._onBeforeBlurTask?.record();\r\n\r\n const blurPasses: FrameGraphRenderPass[] = [];\r\n\r\n for (let i = 0; i < this._blurX.length; i++) {\r\n const blurXTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._blurX[i].name, textureCreationOptions);\r\n\r\n this._blurX[i].sourceTexture = i === 0 ? this._objectRendererForLayer.outputTexture : this._blurY[i - 1].outputTexture;\r\n this._blurX[i].sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n this._blurX[i].targetTexture = blurXTextureHandle;\r\n blurPasses.push(this._blurX[i].record(true));\r\n\r\n const blurYTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._blurY[i].name, textureCreationOptions);\r\n\r\n this._blurY[i].sourceTexture = this._blurX[i].outputTexture;\r\n this._blurY[i].sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n this._blurY[i].targetTexture = blurYTextureHandle;\r\n blurPasses.push(this._blurY[i].record(true));\r\n\r\n textureSize.width = textureSize.width >> 1;\r\n textureSize.height = textureSize.height >> 1;\r\n }\r\n\r\n const onAfterBlurPass = this._onAfterBlurTask?.record();\r\n\r\n // Enables stencil (if stencil is needed) when rendering objects to the main texture\r\n // We also disable the internal passes if the layer should not render\r\n this.objectRendererTask.objectRenderer.onBeforeRenderObservable.remove(this._onBeforeObservableObserver);\r\n this._onBeforeObservableObserver = this.objectRendererTask.objectRenderer.onBeforeRenderObservable.add(() => {\r\n const shouldRender = this.layer.shouldRender();\r\n\r\n clearTaskPass.disabled = !shouldRender;\r\n objectRendererForLayerTaskPass.disabled = !shouldRender;\r\n if (onBeforeBlurPass) {\r\n onBeforeBlurPass.disabled = !shouldRender;\r\n }\r\n for (let i = 0; i < blurPasses.length; i++) {\r\n blurPasses[i].disabled = !shouldRender;\r\n }\r\n if (onAfterBlurPass) {\r\n onAfterBlurPass.disabled = !shouldRender;\r\n }\r\n\r\n if (shouldRender && this.layer.needStencil()) {\r\n this._engine.setStencilBuffer(true);\r\n this._engine.setStencilFunctionReference(1);\r\n }\r\n });\r\n\r\n this.objectRendererTask.objectRenderer.onAfterRenderObservable.remove(this._onAfterObservableObserver);\r\n this._onAfterObservableObserver = this.objectRendererTask.objectRenderer.onAfterRenderObservable.add(() => {\r\n if (this.layer.shouldRender() && this.layer.needStencil()) {\r\n this._engine.setStencilBuffer(false);\r\n }\r\n });\r\n\r\n // Composes the layer with the target texture\r\n this.layer.bindTexturesForCompose = undefined as any;\r\n\r\n this._clearAfterRenderingGroupObserver();\r\n\r\n const pass = this._frameGraph.addRenderPass(this.name);\r\n\r\n for (let i = 0; i < this._blurY.length; i++) {\r\n pass.addDependencies(this._blurY[i].outputTexture);\r\n }\r\n\r\n pass.setRenderTarget(this.outputTexture);\r\n if (this._setRenderTargetDepth) {\r\n pass.setRenderTargetDepth(this.objectRendererTask.depthTexture);\r\n }\r\n pass.setInitializeFunc((context) => {\r\n this.layer.bindTexturesForCompose = (effect: Effect) => {\r\n for (let i = 0; i < this._blurY.length; i++) {\r\n context.bindTextureHandle(effect, `textureSampler${i > 0 ? i + 1 : \"\"}`, this._blurY[i].outputTexture);\r\n }\r\n };\r\n\r\n if (this.layer._options.renderingGroupId === -1) {\r\n return;\r\n }\r\n\r\n this._onAfterRenderingGroupObserver = this._scene.onAfterRenderingGroupObservable.add((info) => {\r\n if (\r\n !this.layer.shouldRender() ||\r\n info.renderingGroupId !== this.layer._options.renderingGroupId ||\r\n info.renderingManager !== this.objectRendererTask.objectRenderer.renderingManager\r\n ) {\r\n return;\r\n }\r\n this._objectRendererForLayer.objectList = this.objectRendererTask.objectList;\r\n context.saveDepthStates();\r\n context.setDepthStates(false, false);\r\n context._applyRenderTarget();\r\n this.layer.compose();\r\n context.restoreDepthStates();\r\n });\r\n });\r\n pass.setExecuteFunc((context) => {\r\n context.setTextureSamplingMode(this._blurY[this._blurY.length - 1].targetTexture!, Constants.TEXTURE_BILINEAR_SAMPLINGMODE);\r\n\r\n if (this.layer._options.renderingGroupId === -1 && this.layer.shouldRender()) {\r\n this._objectRendererForLayer.objectList = this.objectRendererTask.objectList; // in case the object list has changed in objectRendererTask\r\n\r\n context.setDepthStates(false, false);\r\n context._applyRenderTarget();\r\n\r\n this.layer.compose();\r\n }\r\n });\r\n\r\n const passDisabled = this._frameGraph.addRenderPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setRenderTarget(this.outputTexture);\r\n if (this._setRenderTargetDepth) {\r\n passDisabled.setRenderTargetDepth(this.objectRendererTask.depthTexture);\r\n }\r\n passDisabled.setExecuteFunc((_context) => {});\r\n }\r\n\r\n private _clearAfterRenderingGroupObserver() {\r\n this._scene.onAfterRenderingGroupObservable.remove(this._onAfterRenderingGroupObserver);\r\n this._onAfterRenderingGroupObserver = null;\r\n }\r\n\r\n public override dispose(): void {\r\n this._clearAfterRenderingGroupObserver();\r\n this._clearLayerTextures.dispose();\r\n this._objectRendererForLayer.dispose();\r\n this._onBeforeBlurTask?.dispose();\r\n this._onAfterBlurTask?.dispose();\r\n this.layer.dispose();\r\n for (let i = 0; i < this._blurX.length; i++) {\r\n this._blurX[i].dispose();\r\n this._blurY[i].dispose();\r\n }\r\n super.dispose();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"baseLayerTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Layers/baseLayerTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\r\n FrameGraph,\r\n FrameGraphTextureHandle,\r\n Scene,\r\n FrameGraphTextureCreationOptions,\r\n Effect,\r\n ThinBlurPostProcess,\r\n AbstractEngine,\r\n Nullable,\r\n Observer,\r\n RenderingGroupInfo,\r\n ThinEffectLayer,\r\n FrameGraphRenderPass,\r\n FrameGraphRenderContext,\r\n FrameGraphPass,\r\n FrameGraphContext,\r\n} from \"core/index\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { FrameGraphObjectRendererTask } from \"../Rendering/objectRendererTask\";\r\nimport { FrameGraphClearTextureTask } from \"../Texture/clearTextureTask\";\r\nimport { FrameGraphBlurTask } from \"../PostProcesses/blurTask\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { FrameGraphTextureManager } from \"../../frameGraphTextureManager\";\r\nimport { getDimensionsFromTextureSize } from \"../../../Materials/Textures/textureCreationOptions\";\r\nimport { FrameGraphPostProcessTask } from \"../PostProcesses/postProcessTask\";\r\nimport { Vector2 } from \"core/Maths/math.vector\";\r\nimport { ThinGlowBlurPostProcess } from \"../../../Layers/thinEffectLayer\";\r\nimport { FrameGraphExecuteTask } from \"../Misc/executeTask\";\r\n\r\n/** @internal */\r\nexport const enum FrameGraphBaseLayerBlurType {\r\n None = \"none\",\r\n Standard = \"standard\",\r\n Glow = \"glow\",\r\n}\r\n\r\nclass FrameGraphGlowBlurTask extends FrameGraphPostProcessTask {\r\n public override readonly postProcess: ThinGlowBlurPostProcess;\r\n\r\n /**\r\n * Constructs a new glow blur 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 glow blur effect. If not provided, a new one will be created.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinGlowBlurPostProcess) {\r\n super(name, frameGraph, thinPostProcess || new ThinGlowBlurPostProcess(name, frameGraph.engine, new Vector2(1, 0), 1));\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphGlowBlurTask\";\r\n }\r\n\r\n public override record(\r\n skipCreationOfDisabledPasses = false,\r\n additionalExecute?: (context: FrameGraphRenderContext) => void,\r\n additionalBindings?: (context: FrameGraphRenderContext) => void\r\n ): FrameGraphRenderPass {\r\n const pass = super.record(skipCreationOfDisabledPasses, additionalExecute, additionalBindings);\r\n\r\n this.postProcess.textureWidth = this._outputWidth;\r\n this.postProcess.textureHeight = this._outputHeight;\r\n\r\n return pass;\r\n }\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class FrameGraphBaseLayerTask extends FrameGraphTask {\r\n /**\r\n * The target texture to apply the effect layer to.\r\n * The effect will be blended with the contents of this texture.\r\n */\r\n public targetTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The object renderer task used to render the objects in the texture to which the layer will be applied.\r\n * This is needed because the layer may have to inject code in the rendering manager used by object renderer task.\r\n */\r\n public objectRendererTask: FrameGraphObjectRendererTask;\r\n\r\n /**\r\n * The layer texture to render the effect into.\r\n * If not provided, a default texture will be created.\r\n */\r\n public layerTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The output texture of the task (same as targetTexture, but the handle will be different).\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The layer object. Use this object to update the layer properties.\r\n */\r\n public readonly layer: ThinEffectLayer;\r\n\r\n /**\r\n * The name of the task.\r\n */\r\n public override get name() {\r\n return this._name;\r\n }\r\n\r\n public override set name(name: string) {\r\n this._name = name;\r\n if (this._blurX) {\r\n for (let i = 0; i < this._blurX.length; i++) {\r\n this._blurX[i].name = `${name} Blur X${i}`;\r\n this._blurY[i].name = `${name} Blur Y${i}`;\r\n }\r\n }\r\n\r\n if (this._clearLayerTextureTask) {\r\n this._clearLayerTextureTask.name = name + \" Clear Layer\";\r\n }\r\n\r\n if (this._objectRendererForLayerTask) {\r\n this._objectRendererForLayerTask.name = name + \" Render to Layer\";\r\n }\r\n }\r\n\r\n /**\r\n * Gets the object renderer used to render the layer.\r\n */\r\n public get objectRendererForLayer() {\r\n return this._objectRendererForLayerTask;\r\n }\r\n\r\n protected readonly _scene: Scene;\r\n protected readonly _engine: AbstractEngine;\r\n protected readonly _clearLayerTextureTask: FrameGraphClearTextureTask;\r\n protected readonly _objectRendererForLayerTask: FrameGraphObjectRendererTask;\r\n protected readonly _blurX: Array<FrameGraphBlurTask | FrameGraphGlowBlurTask> = [];\r\n protected readonly _blurY: Array<FrameGraphBlurTask | FrameGraphGlowBlurTask> = [];\r\n protected _layerTextureDimensions: { width: number; height: number };\r\n private readonly _onBeforeBlurTask: Nullable<FrameGraphExecuteTask> = null;\r\n private readonly _onAfterBlurTask: Nullable<FrameGraphExecuteTask> = null;\r\n private _onBeforeObservableObserver: Nullable<Observer<number>> = null;\r\n private _onBeforeObservableObserver2: Nullable<Observer<number>> = null;\r\n private _onAfterObservableObserver: Nullable<Observer<number>> = null;\r\n private _onAfterRenderingGroupObserver: Nullable<Observer<RenderingGroupInfo>> = null;\r\n\r\n /**\r\n * Constructs a new layer task.\r\n * @param name Name of the task.\r\n * @param frameGraph The frame graph this task is associated with.\r\n * @param scene The scene to render the layer in.\r\n * @param layer The layer.\r\n * @param numBlurPasses The number of blur passes applied by the layer.\r\n * @param _blurType The type of blur to use for the layer.\r\n * @param _setRenderTargetDepth If true, the task will set the render target depth.\r\n * @param _notifyBlurObservable If true, the task will notify before and after blurring occurs.\r\n * @param _setObjectList If true, the object list of the object renderer for the layer will be set to the object list of the object renderer task.\r\n */\r\n constructor(\r\n name: string,\r\n frameGraph: FrameGraph,\r\n scene: Scene,\r\n layer: ThinEffectLayer,\r\n numBlurPasses: number,\r\n private _blurType: FrameGraphBaseLayerBlurType = FrameGraphBaseLayerBlurType.Standard,\r\n private _setRenderTargetDepth = false,\r\n private _notifyBlurObservable = false,\r\n private _setObjectList = true\r\n ) {\r\n super(name, frameGraph);\r\n\r\n this._scene = scene;\r\n this._engine = scene.getEngine();\r\n\r\n this.layer = layer;\r\n if (this._blurType !== FrameGraphBaseLayerBlurType.None) {\r\n for (let i = 0; i < numBlurPasses; i++) {\r\n if (this._blurType === FrameGraphBaseLayerBlurType.Glow) {\r\n this._blurX.push(new FrameGraphGlowBlurTask(`${name} Blur X${i}`, this._frameGraph, this.layer._postProcesses[1 + i * 2 + 0] as ThinGlowBlurPostProcess));\r\n this._blurY.push(new FrameGraphGlowBlurTask(`${name} Blur Y${i}`, this._frameGraph, this.layer._postProcesses[1 + i * 2 + 1] as ThinGlowBlurPostProcess));\r\n } else {\r\n this._blurX.push(new FrameGraphBlurTask(`${name} Blur X${i}`, this._frameGraph, this.layer._postProcesses[i * 2 + 0] as ThinBlurPostProcess));\r\n this._blurY.push(new FrameGraphBlurTask(`${name} Blur Y${i}`, this._frameGraph, this.layer._postProcesses[i * 2 + 1] as ThinBlurPostProcess));\r\n }\r\n }\r\n }\r\n\r\n this._clearLayerTextureTask = new FrameGraphClearTextureTask(name + \" Clear Layer\", frameGraph);\r\n this._clearLayerTextureTask.clearColor = true;\r\n this._clearLayerTextureTask.clearDepth = true;\r\n\r\n this._objectRendererForLayerTask = new FrameGraphObjectRendererTask(name + \" Render to Layer\", frameGraph, scene, undefined, this.layer.objectRenderer);\r\n\r\n if (this._blurType !== FrameGraphBaseLayerBlurType.None && this._notifyBlurObservable) {\r\n this._onBeforeBlurTask = new FrameGraphExecuteTask(name + \" On Before Blur\", frameGraph);\r\n this._onAfterBlurTask = new FrameGraphExecuteTask(name + \" On After Blur\", frameGraph);\r\n\r\n this._onBeforeBlurTask.func = () => {\r\n if (this.layer.onBeforeBlurObservable.hasObservers()) {\r\n this.layer.onBeforeBlurObservable.notifyObservers(this.layer);\r\n }\r\n };\r\n this._onAfterBlurTask.func = () => {\r\n if (this.layer.onAfterBlurObservable.hasObservers()) {\r\n this.layer.onAfterBlurObservable.notifyObservers(this.layer);\r\n }\r\n };\r\n }\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n public override isReady() {\r\n return this._objectRendererForLayerTask.isReady() && this.layer.isLayerReady();\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphBaseLayerTask\";\r\n }\r\n\r\n public record(_skipCreationOfDisabledPasses?: boolean, additionalComposeBindings?: (context: FrameGraphRenderContext, effect: Effect) => void) {\r\n if (this.targetTexture === undefined || this.objectRendererTask === undefined) {\r\n throw new Error(`${this.constructor.name} \"${this.name}\": targetTexture and objectRendererTask are required`);\r\n }\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.targetTexture);\r\n\r\n // Uses the layerTexture or creates a color texture to render the layer to\r\n let textureSize: {\r\n width: number;\r\n height: number;\r\n };\r\n let textureCreationOptions: FrameGraphTextureCreationOptions;\r\n\r\n let colorLayerOutput: FrameGraphTextureHandle;\r\n\r\n if (this.layerTexture) {\r\n colorLayerOutput = this.layerTexture;\r\n textureCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.layerTexture);\r\n textureSize = getDimensionsFromTextureSize(textureCreationOptions.size);\r\n textureCreationOptions.size = textureSize;\r\n } else {\r\n const targetTextureCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.targetTexture);\r\n const fixedTextureSize = this.layer._options.mainTextureFixedSize ? Math.max(2, this.layer._options.mainTextureFixedSize) : 0;\r\n\r\n textureSize = getDimensionsFromTextureSize(targetTextureCreationOptions.size);\r\n textureSize.width = fixedTextureSize || Math.floor(textureSize.width * (this.layer._options.mainTextureRatio || 0.1)) || 1;\r\n textureSize.height = fixedTextureSize || Math.floor(textureSize.height * (this.layer._options.mainTextureRatio || 0.1)) || 1;\r\n\r\n textureCreationOptions = {\r\n size: textureSize,\r\n options: {\r\n createMipMaps: false,\r\n types: [this.layer._options.mainTextureType],\r\n formats: [this.layer._options.mainTextureFormat],\r\n samples: 1,\r\n useSRGBBuffers: [false],\r\n creationFlags: [0],\r\n },\r\n sizeIsPercentage: this.layer._options.mainTextureFixedSize ? false : targetTextureCreationOptions.sizeIsPercentage,\r\n };\r\n colorLayerOutput = this._frameGraph.textureManager.createRenderTargetTexture(`${this.name} Color`, textureCreationOptions);\r\n }\r\n\r\n this._layerTextureDimensions = this._frameGraph.textureManager.getTextureAbsoluteDimensions(textureCreationOptions);\r\n\r\n // Creates a depth texture, used to render objects to the layer\r\n // We don't reuse the depth texture of the objectRendererTask, as the size of the layer texture will generally be different (smaller).\r\n const textureDepthCreationOptions: FrameGraphTextureCreationOptions = {\r\n size: textureSize,\r\n options: FrameGraphTextureManager.CloneTextureOptions(textureCreationOptions.options),\r\n sizeIsPercentage: textureCreationOptions.sizeIsPercentage,\r\n };\r\n\r\n textureDepthCreationOptions.options.formats![0] = Constants.TEXTUREFORMAT_DEPTH32_FLOAT;\r\n\r\n const depthLayerOutput = this._frameGraph.textureManager.createRenderTargetTexture(`${this.name} Depth`, textureDepthCreationOptions);\r\n\r\n // Clears the textures\r\n this._clearLayerTextureTask.targetTexture = colorLayerOutput;\r\n this._clearLayerTextureTask.depthTexture = depthLayerOutput;\r\n this._clearLayerTextureTask.color = this.layer.neutralColor;\r\n this._clearLayerTextureTask.clearDepth = true;\r\n\r\n const clearTaskPass = this._clearLayerTextureTask.record(true);\r\n\r\n // Renders the objects to the layer texture\r\n this._objectRendererForLayerTask.targetTexture = this._clearLayerTextureTask.outputTexture;\r\n this._objectRendererForLayerTask.depthTexture = this._clearLayerTextureTask.outputDepthTexture;\r\n this._objectRendererForLayerTask.camera = this.objectRendererTask.camera;\r\n if (this._setObjectList) {\r\n this._objectRendererForLayerTask.objectList = this.objectRendererTask.objectList;\r\n }\r\n this._objectRendererForLayerTask.disableShadows = true;\r\n\r\n const objectRendererForLayerTaskPass = this._objectRendererForLayerTask.record(true);\r\n\r\n // Blurs the layer color texture\r\n let onBeforeBlurPass: FrameGraphPass<FrameGraphContext> | undefined;\r\n let onAfterBlurPass: FrameGraphPass<FrameGraphContext> | undefined;\r\n\r\n if (this._blurType !== FrameGraphBaseLayerBlurType.None) {\r\n let blurTextureType = 0;\r\n if (this._engine.getCaps().textureHalfFloatRender) {\r\n blurTextureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n } else {\r\n blurTextureType = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n }\r\n\r\n textureCreationOptions.options.types![0] = blurTextureType;\r\n\r\n const blurTextureSizeRatio = (this.layer._options as any).blurTextureSizeRatio !== undefined ? (this.layer._options as any).blurTextureSizeRatio || 0.1 : undefined;\r\n if (blurTextureSizeRatio !== undefined) {\r\n textureSize.width = Math.floor(textureSize.width * blurTextureSizeRatio) || 1;\r\n textureSize.height = Math.floor(textureSize.height * blurTextureSizeRatio) || 1;\r\n }\r\n\r\n onBeforeBlurPass = this._onBeforeBlurTask?.record();\r\n\r\n const blurPasses: FrameGraphRenderPass[] = [];\r\n\r\n for (let i = 0; i < this._blurX.length; i++) {\r\n const blurXTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._blurX[i].name, textureCreationOptions);\r\n\r\n this._blurX[i].sourceTexture = i === 0 ? this._objectRendererForLayerTask.outputTexture : this._blurY[i - 1].outputTexture;\r\n this._blurX[i].sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n this._blurX[i].targetTexture = blurXTextureHandle;\r\n blurPasses.push(this._blurX[i].record(true));\r\n\r\n const blurYTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._blurY[i].name, textureCreationOptions);\r\n\r\n this._blurY[i].sourceTexture = this._blurX[i].outputTexture;\r\n this._blurY[i].sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n this._blurY[i].targetTexture = blurYTextureHandle;\r\n blurPasses.push(this._blurY[i].record(true));\r\n\r\n textureSize.width = textureSize.width >> 1;\r\n textureSize.height = textureSize.height >> 1;\r\n }\r\n\r\n onAfterBlurPass = this._onAfterBlurTask?.record();\r\n\r\n this.objectRendererTask.objectRenderer.onBeforeRenderObservable.remove(this._onBeforeObservableObserver2);\r\n this._onBeforeObservableObserver2 = this.objectRendererTask.objectRenderer.onBeforeRenderObservable.add(() => {\r\n const shouldRender = this.layer.shouldRender();\r\n\r\n if (onBeforeBlurPass) {\r\n onBeforeBlurPass.disabled = !shouldRender;\r\n }\r\n for (let i = 0; i < blurPasses.length; i++) {\r\n blurPasses[i].disabled = !shouldRender;\r\n }\r\n if (onAfterBlurPass) {\r\n onAfterBlurPass.disabled = !shouldRender;\r\n }\r\n });\r\n }\r\n\r\n // Enables stencil (if stencil is needed) when rendering objects to the main texture\r\n // We also disable the internal passes if the layer should not render\r\n this.objectRendererTask.objectRenderer.onBeforeRenderObservable.remove(this._onBeforeObservableObserver);\r\n this._onBeforeObservableObserver = this.objectRendererTask.objectRenderer.onBeforeRenderObservable.add(() => {\r\n const shouldRender = this.layer.shouldRender();\r\n\r\n clearTaskPass.disabled = !shouldRender;\r\n objectRendererForLayerTaskPass.disabled = !shouldRender;\r\n\r\n if (shouldRender && this.layer.needStencil()) {\r\n this._engine.setStencilBuffer(true);\r\n this._engine.setStencilFunctionReference(1);\r\n }\r\n });\r\n\r\n this.objectRendererTask.objectRenderer.onAfterRenderObservable.remove(this._onAfterObservableObserver);\r\n this._onAfterObservableObserver = this.objectRendererTask.objectRenderer.onAfterRenderObservable.add(() => {\r\n if (this.layer.shouldRender() && this.layer.needStencil()) {\r\n this._engine.setStencilBuffer(false);\r\n }\r\n });\r\n\r\n // Composes the layer with the target texture\r\n this.layer.bindTexturesForCompose = undefined as any;\r\n\r\n this._clearAfterRenderingGroupObserver();\r\n\r\n const pass = this._frameGraph.addRenderPass(this.name);\r\n\r\n for (let i = 0; i < this._blurY.length; i++) {\r\n pass.addDependencies(this._blurY[i].outputTexture);\r\n }\r\n\r\n pass.setRenderTarget(this.outputTexture);\r\n if (this._setRenderTargetDepth) {\r\n pass.setRenderTargetDepth(this.objectRendererTask.depthTexture);\r\n }\r\n pass.setInitializeFunc((context) => {\r\n this.layer.bindTexturesForCompose = (effect: Effect) => {\r\n for (let i = 0; i < this._blurY.length; i++) {\r\n context.bindTextureHandle(effect, `textureSampler${i > 0 ? i + 1 : \"\"}`, this._blurY[i].outputTexture);\r\n }\r\n additionalComposeBindings?.(context, effect);\r\n };\r\n\r\n if (this.layer._options.renderingGroupId === -1) {\r\n return;\r\n }\r\n\r\n this._onAfterRenderingGroupObserver = this._scene.onAfterRenderingGroupObservable.add((info) => {\r\n if (\r\n !this.layer.shouldRender() ||\r\n info.renderingGroupId !== this.layer._options.renderingGroupId ||\r\n info.renderingManager !== this.objectRendererTask.objectRenderer.renderingManager\r\n ) {\r\n return;\r\n }\r\n if (this._setObjectList) {\r\n this._objectRendererForLayerTask.objectList = this.objectRendererTask.objectList;\r\n }\r\n context.saveDepthStates();\r\n context.setDepthStates(false, false);\r\n context._applyRenderTarget();\r\n this.layer.compose();\r\n context.restoreDepthStates();\r\n });\r\n });\r\n pass.setExecuteFunc((context) => {\r\n if (this._blurY.length > 0) {\r\n context.setTextureSamplingMode(this._blurY[this._blurY.length - 1].targetTexture!, Constants.TEXTURE_BILINEAR_SAMPLINGMODE);\r\n }\r\n\r\n if (this.layer._options.renderingGroupId === -1 && this.layer.shouldRender()) {\r\n if (this._setObjectList) {\r\n this._objectRendererForLayerTask.objectList = this.objectRendererTask.objectList; // in case the object list has changed in objectRendererTask\r\n }\r\n\r\n context.setDepthStates(false, false);\r\n context._applyRenderTarget();\r\n\r\n this.layer.compose();\r\n }\r\n });\r\n\r\n const passDisabled = this._frameGraph.addRenderPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setRenderTarget(this.outputTexture);\r\n if (this._setRenderTargetDepth) {\r\n passDisabled.setRenderTargetDepth(this.objectRendererTask.depthTexture);\r\n }\r\n passDisabled.setExecuteFunc((_context) => {});\r\n }\r\n\r\n private _clearAfterRenderingGroupObserver() {\r\n this._scene.onAfterRenderingGroupObservable.remove(this._onAfterRenderingGroupObserver);\r\n this._onAfterRenderingGroupObserver = null;\r\n }\r\n\r\n public override dispose(): void {\r\n this._clearAfterRenderingGroupObserver();\r\n this._clearLayerTextureTask.dispose();\r\n this._objectRendererForLayerTask.dispose();\r\n this._onBeforeBlurTask?.dispose();\r\n this._onAfterBlurTask?.dispose();\r\n this.layer.dispose();\r\n for (let i = 0; i < this._blurX.length; i++) {\r\n this._blurX[i].dispose();\r\n this._blurY[i].dispose();\r\n }\r\n super.dispose();\r\n }\r\n}\r\n"]}
@@ -13,7 +13,7 @@ export class FrameGraphGlowLayerTask extends FrameGraphBaseLayerTask {
13
13
  */
14
14
  constructor(name, frameGraph, scene, options) {
15
15
  super(name, frameGraph, scene, new ThinGlowLayer(name, scene, options, true), 2);
16
- this.layer._renderPassId = this._objectRendererForLayer.objectRenderer.renderPassId;
16
+ this.layer._renderPassId = this._objectRendererForLayerTask.objectRenderer.renderPassId;
17
17
  }
18
18
  getClassName() {
19
19
  return "FrameGraphGlowLayerTask";
@@ -1 +1 @@
1
- {"version":3,"file":"glowLayerTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Layers/glowLayerTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,yCAAkC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D;;GAEG;AACH,MAAM,OAAO,uBAAwB,SAAQ,uBAAuB;IAMhE;;;;;;OAMG;IACH,YAAY,IAAY,EAAE,UAAsB,EAAE,KAAY,EAAE,OAA+B;QAC3F,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAEjF,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,YAAY,CAAC;IACxF,CAAC;IAEe,YAAY;QACxB,OAAO,yBAAyB,CAAC;IACrC,CAAC;CACJ","sourcesContent":["import type { FrameGraph, Scene, IThinGlowLayerOptions } from \"core/index\";\r\nimport { ThinGlowLayer } from \"core/Layers/thinGlowLayer\";\r\nimport { FrameGraphBaseLayerTask } from \"./baseLayerTask\";\r\n\r\n/**\r\n * Task which applies a glowing effect to a texture.\r\n */\r\nexport class FrameGraphGlowLayerTask extends FrameGraphBaseLayerTask {\r\n /**\r\n * The glow layer object. Use this object to update the glow layer properties (e.g. intensity, blur kernel size).\r\n */\r\n public override readonly layer: ThinGlowLayer;\r\n\r\n /**\r\n * Constructs a new glow layer task.\r\n * @param name Name of the task.\r\n * @param frameGraph The frame graph this task is associated with.\r\n * @param scene The scene to render the glow layer in.\r\n * @param options Options for the glow layer.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, scene: Scene, options?: IThinGlowLayerOptions) {\r\n super(name, frameGraph, scene, new ThinGlowLayer(name, scene, options, true), 2);\r\n\r\n this.layer._renderPassId = this._objectRendererForLayer.objectRenderer.renderPassId;\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphGlowLayerTask\";\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"glowLayerTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Layers/glowLayerTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,yCAAkC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D;;GAEG;AACH,MAAM,OAAO,uBAAwB,SAAQ,uBAAuB;IAMhE;;;;;;OAMG;IACH,YAAY,IAAY,EAAE,UAAsB,EAAE,KAAY,EAAE,OAA+B;QAC3F,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAEjF,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,2BAA2B,CAAC,cAAc,CAAC,YAAY,CAAC;IAC5F,CAAC;IAEe,YAAY;QACxB,OAAO,yBAAyB,CAAC;IACrC,CAAC;CACJ","sourcesContent":["import type { FrameGraph, Scene, IThinGlowLayerOptions } from \"core/index\";\r\nimport { ThinGlowLayer } from \"core/Layers/thinGlowLayer\";\r\nimport { FrameGraphBaseLayerTask } from \"./baseLayerTask\";\r\n\r\n/**\r\n * Task which applies a glowing effect to a texture.\r\n */\r\nexport class FrameGraphGlowLayerTask extends FrameGraphBaseLayerTask {\r\n /**\r\n * The glow layer object. Use this object to update the glow layer properties (e.g. intensity, blur kernel size).\r\n */\r\n public override readonly layer: ThinGlowLayer;\r\n\r\n /**\r\n * Constructs a new glow layer task.\r\n * @param name Name of the task.\r\n * @param frameGraph The frame graph this task is associated with.\r\n * @param scene The scene to render the glow layer in.\r\n * @param options Options for the glow layer.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, scene: Scene, options?: IThinGlowLayerOptions) {\r\n super(name, frameGraph, scene, new ThinGlowLayer(name, scene, options, true), 2);\r\n\r\n this.layer._renderPassId = this._objectRendererForLayerTask.objectRenderer.renderPassId;\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphGlowLayerTask\";\r\n }\r\n}\r\n"]}
@@ -15,7 +15,7 @@ export class FrameGraphHighlightLayerTask extends FrameGraphBaseLayerTask {
15
15
  */
16
16
  constructor(name, frameGraph, scene, options) {
17
17
  const alphaBlendingMode = options?.alphaBlendingMode ?? 2;
18
- super(name, frameGraph, scene, new ThinHighlightLayer(name, scene, options, true), 1, alphaBlendingMode === 2, true, true);
18
+ super(name, frameGraph, scene, new ThinHighlightLayer(name, scene, options, true), 1, alphaBlendingMode === 2 ? "glow" /* FrameGraphBaseLayerBlurType.Glow */ : "standard" /* FrameGraphBaseLayerBlurType.Standard */, true, true);
19
19
  }
20
20
  getClassName() {
21
21
  return "FrameGraphHighlightLayerTask";
@@ -1 +1 @@
1
- {"version":3,"file":"highlightLayerTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Layers/highlightLayerTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,8CAAuC;AACpE,OAAO,EAAE,SAAS,EAAE,sCAA+B;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,+DAAwD;AAEnF;;GAEG;AACH,MAAM,OAAO,4BAA6B,SAAQ,uBAAuB;IAMrE;;;;;;OAMG;IACH,YAAY,IAAY,EAAE,UAAsB,EAAE,KAAY,EAAE,OAAoC;QAChG,MAAM,iBAAiB,GAAG,OAAO,EAAE,iBAAiB,IAAI,SAAS,CAAC,aAAa,CAAC;QAEhF,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,iBAAiB,KAAK,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACrJ,CAAC;IAEe,YAAY;QACxB,OAAO,8BAA8B,CAAC;IAC1C,CAAC;IAEe,MAAM;QAClB,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,CAAC,IAAI,sDAAsD,CAAC,CAAC;QACtH,CAAC;QAED,MAAM,2BAA2B,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,yBAAyB,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;QACpI,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACpH,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,CAAC,IAAI,+DAA+D,CAAC,CAAC;QAC/H,CAAC;QAED,KAAK,CAAC,MAAM,EAAE,CAAC;QAEf,IAAI,CAAC,KAAK,CAAC,+BAA+B,GAAG,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,YAAY,CAAC;IACrG,CAAC;CACJ","sourcesContent":["import type { FrameGraph, Scene, IThinHighlightLayerOptions } from \"core/index\";\r\nimport { ThinHighlightLayer } from \"core/Layers/thinHighlightLayer\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { FrameGraphBaseLayerTask } from \"./baseLayerTask\";\r\nimport { HasStencilAspect } from \"core/Materials/Textures/textureHelper.functions\";\r\n\r\n/**\r\n * Task which applies a highlight effect to a texture.\r\n */\r\nexport class FrameGraphHighlightLayerTask extends FrameGraphBaseLayerTask {\r\n /**\r\n * The highlight layer object. Use this object to update the highlight layer properties.\r\n */\r\n public override readonly layer: ThinHighlightLayer;\r\n\r\n /**\r\n * Constructs a new highlight layer task.\r\n * @param name Name of the task.\r\n * @param frameGraph The frame graph this task is associated with.\r\n * @param scene The scene to render the highlight layer in.\r\n * @param options Options for the highlight layer.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, scene: Scene, options?: IThinHighlightLayerOptions) {\r\n const alphaBlendingMode = options?.alphaBlendingMode ?? Constants.ALPHA_COMBINE;\r\n\r\n super(name, frameGraph, scene, new ThinHighlightLayer(name, scene, options, true), 1, alphaBlendingMode === Constants.ALPHA_COMBINE, true, true);\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphHighlightLayerTask\";\r\n }\r\n\r\n public override record() {\r\n if (!this.objectRendererTask.depthTexture) {\r\n throw new Error(`FrameGraphHighlightLayerTask \"${this.name}\": objectRendererTask must have a depthTexture input`);\r\n }\r\n\r\n const depthTextureCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.objectRendererTask.depthTexture);\r\n if (!depthTextureCreationOptions.options.formats || !HasStencilAspect(depthTextureCreationOptions.options.formats[0])) {\r\n throw new Error(`FrameGraphHighlightLayerTask \"${this.name}\": objectRendererTask depthTexture must have a stencil aspect`);\r\n }\r\n\r\n super.record();\r\n\r\n this.layer._mainObjectRendererRenderPassId = this.objectRendererTask.objectRenderer.renderPassId;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"highlightLayerTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Layers/highlightLayerTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,8CAAuC;AACpE,OAAO,EAAE,SAAS,EAAE,sCAA+B;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,+DAAwD;AAGnF;;GAEG;AACH,MAAM,OAAO,4BAA6B,SAAQ,uBAAuB;IAMrE;;;;;;OAMG;IACH,YAAY,IAAY,EAAE,UAAsB,EAAE,KAAY,EAAE,OAAoC;QAChG,MAAM,iBAAiB,GAAG,OAAO,EAAE,iBAAiB,IAAI,SAAS,CAAC,aAAa,CAAC;QAEhF,KAAK,CACD,IAAI,EACJ,UAAU,EACV,KAAK,EACL,IAAI,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAClD,CAAC,EACD,iBAAiB,KAAK,SAAS,CAAC,aAAa,CAAC,CAAC,+CAAkC,CAAC,sDAAqC,EACvH,IAAI,EACJ,IAAI,CACP,CAAC;IACN,CAAC;IAEe,YAAY;QACxB,OAAO,8BAA8B,CAAC;IAC1C,CAAC;IAEe,MAAM;QAClB,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,CAAC,IAAI,sDAAsD,CAAC,CAAC;QACtH,CAAC;QAED,MAAM,2BAA2B,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,yBAAyB,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;QACpI,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACpH,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,CAAC,IAAI,+DAA+D,CAAC,CAAC;QAC/H,CAAC;QAED,KAAK,CAAC,MAAM,EAAE,CAAC;QAEf,IAAI,CAAC,KAAK,CAAC,+BAA+B,GAAG,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,YAAY,CAAC;IACrG,CAAC;CACJ","sourcesContent":["import type { FrameGraph, Scene, IThinHighlightLayerOptions } from \"core/index\";\r\nimport { ThinHighlightLayer } from \"core/Layers/thinHighlightLayer\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { FrameGraphBaseLayerTask } from \"./baseLayerTask\";\r\nimport { HasStencilAspect } from \"core/Materials/Textures/textureHelper.functions\";\r\nimport { FrameGraphBaseLayerBlurType } from \"./baseLayerTask\";\r\n\r\n/**\r\n * Task which applies a highlight effect to a texture.\r\n */\r\nexport class FrameGraphHighlightLayerTask extends FrameGraphBaseLayerTask {\r\n /**\r\n * The highlight layer object. Use this object to update the highlight layer properties.\r\n */\r\n public override readonly layer: ThinHighlightLayer;\r\n\r\n /**\r\n * Constructs a new highlight layer task.\r\n * @param name Name of the task.\r\n * @param frameGraph The frame graph this task is associated with.\r\n * @param scene The scene to render the highlight layer in.\r\n * @param options Options for the highlight layer.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, scene: Scene, options?: IThinHighlightLayerOptions) {\r\n const alphaBlendingMode = options?.alphaBlendingMode ?? Constants.ALPHA_COMBINE;\r\n\r\n super(\r\n name,\r\n frameGraph,\r\n scene,\r\n new ThinHighlightLayer(name, scene, options, true),\r\n 1,\r\n alphaBlendingMode === Constants.ALPHA_COMBINE ? FrameGraphBaseLayerBlurType.Glow : FrameGraphBaseLayerBlurType.Standard,\r\n true,\r\n true\r\n );\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphHighlightLayerTask\";\r\n }\r\n\r\n public override record() {\r\n if (!this.objectRendererTask.depthTexture) {\r\n throw new Error(`FrameGraphHighlightLayerTask \"${this.name}\": objectRendererTask must have a depthTexture input`);\r\n }\r\n\r\n const depthTextureCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.objectRendererTask.depthTexture);\r\n if (!depthTextureCreationOptions.options.formats || !HasStencilAspect(depthTextureCreationOptions.options.formats[0])) {\r\n throw new Error(`FrameGraphHighlightLayerTask \"${this.name}\": objectRendererTask depthTexture must have a stencil aspect`);\r\n }\r\n\r\n super.record();\r\n\r\n this.layer._mainObjectRendererRenderPassId = this.objectRendererTask.objectRenderer.renderPassId;\r\n }\r\n}\r\n"]}
@@ -0,0 +1,28 @@
1
+ import type { FrameGraph, Scene, IThinSelectionOutlineLayerOptions, FrameGraphTextureHandle } from "../../../index.js";
2
+ import { ThinSelectionOutlineLayer } from "../../../Layers/thinSelectionOutlineLayer.js";
3
+ import { FrameGraphBaseLayerTask } from "./baseLayerTask.js";
4
+ /**
5
+ * Task which applies a selection outline effect to a texture.
6
+ */
7
+ export declare class FrameGraphSelectionOutlineLayerTask extends FrameGraphBaseLayerTask {
8
+ /**
9
+ * The selection outline layer object. Use this object to update the selection outline layer properties (e.g. intensity, blur kernel size).
10
+ */
11
+ readonly layer: ThinSelectionOutlineLayer;
12
+ /**
13
+ * The depth texture to use when rendering the selection outline layer.
14
+ * It must store the scene depth in camera view space Z, normalized or not.
15
+ * If not normalized, the storeCameraSpaceZ option must be passed to the constructor.
16
+ */
17
+ depthTexture: FrameGraphTextureHandle;
18
+ /**
19
+ * Constructs a new selection outline layer task.
20
+ * @param name Name of the task.
21
+ * @param frameGraph The frame graph this task is associated with.
22
+ * @param scene The scene to render the selection outline layer in.
23
+ * @param options Options for the selection outline layer.
24
+ */
25
+ constructor(name: string, frameGraph: FrameGraph, scene: Scene, options?: IThinSelectionOutlineLayerOptions);
26
+ getClassName(): string;
27
+ record(): void;
28
+ }
@@ -0,0 +1,36 @@
1
+ import { ThinSelectionOutlineLayer } from "../../../Layers/thinSelectionOutlineLayer.js";
2
+ import { FrameGraphBaseLayerTask } from "./baseLayerTask.js";
3
+ /**
4
+ * Task which applies a selection outline effect to a texture.
5
+ */
6
+ export class FrameGraphSelectionOutlineLayerTask extends FrameGraphBaseLayerTask {
7
+ /**
8
+ * Constructs a new selection outline layer task.
9
+ * @param name Name of the task.
10
+ * @param frameGraph The frame graph this task is associated with.
11
+ * @param scene The scene to render the selection outline layer in.
12
+ * @param options Options for the selection outline layer.
13
+ */
14
+ constructor(name, frameGraph, scene, options) {
15
+ super(name, frameGraph, scene, new ThinSelectionOutlineLayer(name, scene, options, true), 0, "none" /* FrameGraphBaseLayerBlurType.None */, false, false, false);
16
+ this._objectRendererForLayerTask.objectList = {
17
+ meshes: this.layer._selection || [],
18
+ particleSystems: [],
19
+ };
20
+ }
21
+ getClassName() {
22
+ return "FrameGraphSelectionOutlineLayerTask";
23
+ }
24
+ record() {
25
+ if (this.depthTexture === undefined) {
26
+ throw new Error(`FrameGraphSelectionOutlineLayerTask "${this.name}": depthTexture is required`);
27
+ }
28
+ super.record(false, (context, effect) => {
29
+ context.bindTextureHandle(effect, "depthSampler", this.depthTexture);
30
+ context.bindTextureHandle(effect, "maskSampler", this._objectRendererForLayerTask.outputTexture);
31
+ });
32
+ this.layer.textureWidth = this._layerTextureDimensions.width;
33
+ this.layer.textureHeight = this._layerTextureDimensions.height;
34
+ }
35
+ }
36
+ //# sourceMappingURL=selectionOutlineTask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectionOutlineTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Layers/selectionOutlineTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,qDAA8C;AAClF,OAAO,EAAE,uBAAuB,EAA+B,MAAM,iBAAiB,CAAC;AAEvF;;GAEG;AACH,MAAM,OAAO,mCAAoC,SAAQ,uBAAuB;IAa5E;;;;;;OAMG;IACH,YAAY,IAAY,EAAE,UAAsB,EAAE,KAAY,EAAE,OAA2C;QACvG,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,yBAAyB,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,iDAAoC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAEpJ,IAAI,CAAC,2BAA2B,CAAC,UAAU,GAAG;YAC1C,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE;YACnC,eAAe,EAAE,EAAE;SACtB,CAAC;IACN,CAAC;IAEe,YAAY;QACxB,OAAO,qCAAqC,CAAC;IACjD,CAAC;IAEe,MAAM;QAClB,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,wCAAwC,IAAI,CAAC,IAAI,6BAA6B,CAAC,CAAC;QACpG,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,OAAgC,EAAE,MAAc,EAAE,EAAE;YACrE,OAAO,CAAC,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACrE,OAAO,CAAC,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,CAAC;QACrG,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;QAC7D,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;IACnE,CAAC;CACJ","sourcesContent":["import type { FrameGraph, Scene, IThinSelectionOutlineLayerOptions, FrameGraphTextureHandle, Effect, FrameGraphRenderContext } from \"core/index\";\r\nimport { ThinSelectionOutlineLayer } from \"core/Layers/thinSelectionOutlineLayer\";\r\nimport { FrameGraphBaseLayerTask, FrameGraphBaseLayerBlurType } from \"./baseLayerTask\";\r\n\r\n/**\r\n * Task which applies a selection outline effect to a texture.\r\n */\r\nexport class FrameGraphSelectionOutlineLayerTask extends FrameGraphBaseLayerTask {\r\n /**\r\n * The selection outline layer object. Use this object to update the selection outline layer properties (e.g. intensity, blur kernel size).\r\n */\r\n public override readonly layer: ThinSelectionOutlineLayer;\r\n\r\n /**\r\n * The depth texture to use when rendering the selection outline layer.\r\n * It must store the scene depth in camera view space Z, normalized or not.\r\n * If not normalized, the storeCameraSpaceZ option must be passed to the constructor.\r\n */\r\n public depthTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * Constructs a new selection outline layer task.\r\n * @param name Name of the task.\r\n * @param frameGraph The frame graph this task is associated with.\r\n * @param scene The scene to render the selection outline layer in.\r\n * @param options Options for the selection outline layer.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, scene: Scene, options?: IThinSelectionOutlineLayerOptions) {\r\n super(name, frameGraph, scene, new ThinSelectionOutlineLayer(name, scene, options, true), 0, FrameGraphBaseLayerBlurType.None, false, false, false);\r\n\r\n this._objectRendererForLayerTask.objectList = {\r\n meshes: this.layer._selection || [],\r\n particleSystems: [],\r\n };\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphSelectionOutlineLayerTask\";\r\n }\r\n\r\n public override record() {\r\n if (this.depthTexture === undefined) {\r\n throw new Error(`FrameGraphSelectionOutlineLayerTask \"${this.name}\": depthTexture is required`);\r\n }\r\n\r\n super.record(false, (context: FrameGraphRenderContext, effect: Effect) => {\r\n context.bindTextureHandle(effect, \"depthSampler\", this.depthTexture);\r\n context.bindTextureHandle(effect, \"maskSampler\", this._objectRendererForLayerTask.outputTexture);\r\n });\r\n\r\n this.layer.textureWidth = this._layerTextureDimensions.width;\r\n this.layer.textureHeight = this._layerTextureDimensions.height;\r\n }\r\n}\r\n"]}