@babylonjs/core 8.40.0 → 8.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (213) hide show
  1. package/Compute/computeEffect.js +5 -1
  2. package/Compute/computeEffect.js.map +1 -1
  3. package/Compute/computeShader.d.ts +4 -0
  4. package/Compute/computeShader.js +9 -3
  5. package/Compute/computeShader.js.map +1 -1
  6. package/Engines/Extensions/engine.computeShader.d.ts +2 -3
  7. package/Engines/Extensions/engine.computeShader.js.map +1 -1
  8. package/Engines/ICanvas.d.ts +3 -3
  9. package/Engines/ICanvas.js.map +1 -1
  10. package/Engines/abstractEngine.js +2 -2
  11. package/Engines/abstractEngine.js.map +1 -1
  12. package/Engines/webgpuEngine.js +2 -2
  13. package/Engines/webgpuEngine.js.map +1 -1
  14. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.d.ts +3 -0
  15. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +29 -14
  16. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
  17. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.d.ts +12 -41
  18. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js +106 -184
  19. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js.map +1 -1
  20. package/FrameGraph/Passes/renderPass.js +5 -3
  21. package/FrameGraph/Passes/renderPass.js.map +1 -1
  22. package/FrameGraph/Tasks/Layers/baseLayerTask.d.ts +2 -0
  23. package/FrameGraph/Tasks/Layers/baseLayerTask.js +6 -0
  24. package/FrameGraph/Tasks/Layers/baseLayerTask.js.map +1 -1
  25. package/FrameGraph/Tasks/Layers/glowLayerTask.d.ts +1 -0
  26. package/FrameGraph/Tasks/Layers/glowLayerTask.js +3 -0
  27. package/FrameGraph/Tasks/Layers/glowLayerTask.js.map +1 -1
  28. package/FrameGraph/Tasks/Layers/highlightLayerTask.d.ts +1 -0
  29. package/FrameGraph/Tasks/Layers/highlightLayerTask.js +3 -0
  30. package/FrameGraph/Tasks/Layers/highlightLayerTask.js.map +1 -1
  31. package/FrameGraph/Tasks/Misc/computeShaderTask.d.ts +1 -0
  32. package/FrameGraph/Tasks/Misc/computeShaderTask.js +3 -0
  33. package/FrameGraph/Tasks/Misc/computeShaderTask.js.map +1 -1
  34. package/FrameGraph/Tasks/Misc/cullObjectsTask.d.ts +1 -0
  35. package/FrameGraph/Tasks/Misc/cullObjectsTask.js +3 -0
  36. package/FrameGraph/Tasks/Misc/cullObjectsTask.js.map +1 -1
  37. package/FrameGraph/Tasks/Misc/executeTask.d.ts +1 -0
  38. package/FrameGraph/Tasks/Misc/executeTask.js +3 -0
  39. package/FrameGraph/Tasks/Misc/executeTask.js.map +1 -1
  40. package/FrameGraph/Tasks/Misc/lightingVolumeTask.d.ts +1 -0
  41. package/FrameGraph/Tasks/Misc/lightingVolumeTask.js +8 -1
  42. package/FrameGraph/Tasks/Misc/lightingVolumeTask.js.map +1 -1
  43. package/FrameGraph/Tasks/PostProcesses/anaglyphTask.d.ts +1 -0
  44. package/FrameGraph/Tasks/PostProcesses/anaglyphTask.js +3 -0
  45. package/FrameGraph/Tasks/PostProcesses/anaglyphTask.js.map +1 -1
  46. package/FrameGraph/Tasks/PostProcesses/blackAndWhiteTask.d.ts +1 -0
  47. package/FrameGraph/Tasks/PostProcesses/blackAndWhiteTask.js +3 -0
  48. package/FrameGraph/Tasks/PostProcesses/blackAndWhiteTask.js.map +1 -1
  49. package/FrameGraph/Tasks/PostProcesses/bloomMergeTask.d.ts +1 -0
  50. package/FrameGraph/Tasks/PostProcesses/bloomMergeTask.js +3 -0
  51. package/FrameGraph/Tasks/PostProcesses/bloomMergeTask.js.map +1 -1
  52. package/FrameGraph/Tasks/PostProcesses/bloomTask.d.ts +1 -0
  53. package/FrameGraph/Tasks/PostProcesses/bloomTask.js +3 -0
  54. package/FrameGraph/Tasks/PostProcesses/bloomTask.js.map +1 -1
  55. package/FrameGraph/Tasks/PostProcesses/blurTask.d.ts +1 -0
  56. package/FrameGraph/Tasks/PostProcesses/blurTask.js +3 -0
  57. package/FrameGraph/Tasks/PostProcesses/blurTask.js.map +1 -1
  58. package/FrameGraph/Tasks/PostProcesses/chromaticAberrationTask.d.ts +1 -0
  59. package/FrameGraph/Tasks/PostProcesses/chromaticAberrationTask.js +3 -0
  60. package/FrameGraph/Tasks/PostProcesses/chromaticAberrationTask.js.map +1 -1
  61. package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.d.ts +1 -0
  62. package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.js +3 -0
  63. package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.js.map +1 -1
  64. package/FrameGraph/Tasks/PostProcesses/colorCorrectionTask.d.ts +1 -0
  65. package/FrameGraph/Tasks/PostProcesses/colorCorrectionTask.js +3 -0
  66. package/FrameGraph/Tasks/PostProcesses/colorCorrectionTask.js.map +1 -1
  67. package/FrameGraph/Tasks/PostProcesses/convolutionTask.d.ts +1 -0
  68. package/FrameGraph/Tasks/PostProcesses/convolutionTask.js +3 -0
  69. package/FrameGraph/Tasks/PostProcesses/convolutionTask.js.map +1 -1
  70. package/FrameGraph/Tasks/PostProcesses/customPostProcessTask.d.ts +1 -0
  71. package/FrameGraph/Tasks/PostProcesses/customPostProcessTask.js +3 -0
  72. package/FrameGraph/Tasks/PostProcesses/customPostProcessTask.js.map +1 -1
  73. package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.d.ts +1 -0
  74. package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js +3 -0
  75. package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js.map +1 -1
  76. package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.d.ts +1 -0
  77. package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js +3 -0
  78. package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js.map +1 -1
  79. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.d.ts +1 -0
  80. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js +3 -0
  81. package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js.map +1 -1
  82. package/FrameGraph/Tasks/PostProcesses/extractHighlightsTask.d.ts +1 -0
  83. package/FrameGraph/Tasks/PostProcesses/extractHighlightsTask.js +3 -0
  84. package/FrameGraph/Tasks/PostProcesses/extractHighlightsTask.js.map +1 -1
  85. package/FrameGraph/Tasks/PostProcesses/filterTask.d.ts +1 -0
  86. package/FrameGraph/Tasks/PostProcesses/filterTask.js +3 -0
  87. package/FrameGraph/Tasks/PostProcesses/filterTask.js.map +1 -1
  88. package/FrameGraph/Tasks/PostProcesses/fxaaTask.d.ts +1 -0
  89. package/FrameGraph/Tasks/PostProcesses/fxaaTask.js +3 -0
  90. package/FrameGraph/Tasks/PostProcesses/fxaaTask.js.map +1 -1
  91. package/FrameGraph/Tasks/PostProcesses/grainTask.d.ts +1 -0
  92. package/FrameGraph/Tasks/PostProcesses/grainTask.js +3 -0
  93. package/FrameGraph/Tasks/PostProcesses/grainTask.js.map +1 -1
  94. package/FrameGraph/Tasks/PostProcesses/imageProcessingTask.d.ts +1 -0
  95. package/FrameGraph/Tasks/PostProcesses/imageProcessingTask.js +3 -0
  96. package/FrameGraph/Tasks/PostProcesses/imageProcessingTask.js.map +1 -1
  97. package/FrameGraph/Tasks/PostProcesses/motionBlurTask.d.ts +1 -0
  98. package/FrameGraph/Tasks/PostProcesses/motionBlurTask.js +3 -0
  99. package/FrameGraph/Tasks/PostProcesses/motionBlurTask.js.map +1 -1
  100. package/FrameGraph/Tasks/PostProcesses/passTask.d.ts +2 -0
  101. package/FrameGraph/Tasks/PostProcesses/passTask.js +6 -0
  102. package/FrameGraph/Tasks/PostProcesses/passTask.js.map +1 -1
  103. package/FrameGraph/Tasks/PostProcesses/postProcessTask.d.ts +1 -0
  104. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js +3 -0
  105. package/FrameGraph/Tasks/PostProcesses/postProcessTask.js.map +1 -1
  106. package/FrameGraph/Tasks/PostProcesses/screenSpaceCurvatureTask.d.ts +1 -0
  107. package/FrameGraph/Tasks/PostProcesses/screenSpaceCurvatureTask.js +3 -0
  108. package/FrameGraph/Tasks/PostProcesses/screenSpaceCurvatureTask.js.map +1 -1
  109. package/FrameGraph/Tasks/PostProcesses/sharpenTask.d.ts +1 -0
  110. package/FrameGraph/Tasks/PostProcesses/sharpenTask.js +3 -0
  111. package/FrameGraph/Tasks/PostProcesses/sharpenTask.js.map +1 -1
  112. package/FrameGraph/Tasks/PostProcesses/ssao2BlurTask.d.ts +1 -0
  113. package/FrameGraph/Tasks/PostProcesses/ssao2BlurTask.js +3 -0
  114. package/FrameGraph/Tasks/PostProcesses/ssao2BlurTask.js.map +1 -1
  115. package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.d.ts +1 -0
  116. package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js +3 -0
  117. package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js.map +1 -1
  118. package/FrameGraph/Tasks/PostProcesses/ssao2Task.d.ts +1 -0
  119. package/FrameGraph/Tasks/PostProcesses/ssao2Task.js +3 -0
  120. package/FrameGraph/Tasks/PostProcesses/ssao2Task.js.map +1 -1
  121. package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.d.ts +1 -0
  122. package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.js +3 -0
  123. package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.js.map +1 -1
  124. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.d.ts +1 -0
  125. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js +3 -0
  126. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js.map +1 -1
  127. package/FrameGraph/Tasks/PostProcesses/ssrTask.d.ts +1 -0
  128. package/FrameGraph/Tasks/PostProcesses/ssrTask.js +3 -0
  129. package/FrameGraph/Tasks/PostProcesses/ssrTask.js.map +1 -1
  130. package/FrameGraph/Tasks/PostProcesses/taaTask.d.ts +1 -0
  131. package/FrameGraph/Tasks/PostProcesses/taaTask.js +3 -0
  132. package/FrameGraph/Tasks/PostProcesses/taaTask.js.map +1 -1
  133. package/FrameGraph/Tasks/PostProcesses/tonemapTask.d.ts +1 -0
  134. package/FrameGraph/Tasks/PostProcesses/tonemapTask.js +3 -0
  135. package/FrameGraph/Tasks/PostProcesses/tonemapTask.js.map +1 -1
  136. package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.d.ts +1 -0
  137. package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.js +3 -0
  138. package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.js.map +1 -1
  139. package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.d.ts +3 -1
  140. package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js +12 -6
  141. package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js.map +1 -1
  142. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.d.ts +1 -0
  143. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js +3 -0
  144. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js.map +1 -1
  145. package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +18 -58
  146. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +114 -121
  147. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
  148. package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +12 -0
  149. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +65 -26
  150. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  151. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.d.ts +1 -0
  152. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js +3 -0
  153. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js.map +1 -1
  154. package/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.d.ts +1 -0
  155. package/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.js +3 -0
  156. package/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.js.map +1 -1
  157. package/FrameGraph/Tasks/Texture/clearTextureTask.d.ts +1 -0
  158. package/FrameGraph/Tasks/Texture/clearTextureTask.js +21 -8
  159. package/FrameGraph/Tasks/Texture/clearTextureTask.js.map +1 -1
  160. package/FrameGraph/Tasks/Texture/copyToBackbufferColorTask.d.ts +1 -0
  161. package/FrameGraph/Tasks/Texture/copyToBackbufferColorTask.js +3 -0
  162. package/FrameGraph/Tasks/Texture/copyToBackbufferColorTask.js.map +1 -1
  163. package/FrameGraph/Tasks/Texture/copyToTextureTask.d.ts +1 -0
  164. package/FrameGraph/Tasks/Texture/copyToTextureTask.js +21 -4
  165. package/FrameGraph/Tasks/Texture/copyToTextureTask.js.map +1 -1
  166. package/FrameGraph/Tasks/Texture/generateMipMapsTask.d.ts +1 -0
  167. package/FrameGraph/Tasks/Texture/generateMipMapsTask.js +3 -0
  168. package/FrameGraph/Tasks/Texture/generateMipMapsTask.js.map +1 -1
  169. package/FrameGraph/frameGraphContext.js +2 -2
  170. package/FrameGraph/frameGraphContext.js.map +1 -1
  171. package/FrameGraph/frameGraphRenderContext.d.ts +1 -0
  172. package/FrameGraph/frameGraphRenderContext.js +17 -8
  173. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  174. package/FrameGraph/frameGraphTask.d.ts +5 -0
  175. package/FrameGraph/frameGraphTask.js +9 -0
  176. package/FrameGraph/frameGraphTask.js.map +1 -1
  177. package/FrameGraph/frameGraphUtils.d.ts +2 -2
  178. package/FrameGraph/frameGraphUtils.js +6 -6
  179. package/FrameGraph/frameGraphUtils.js.map +1 -1
  180. package/Lights/lightingVolume.d.ts +10 -1
  181. package/Lights/lightingVolume.js +201 -102
  182. package/Lights/lightingVolume.js.map +1 -1
  183. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  184. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +2 -0
  185. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
  186. package/Materials/materialHelper.geometryrendering.d.ts +5 -1
  187. package/Materials/materialHelper.geometryrendering.js +11 -2
  188. package/Materials/materialHelper.geometryrendering.js.map +1 -1
  189. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +1 -1
  190. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  191. package/Meshes/geometry.d.ts +2 -1
  192. package/Meshes/geometry.js +6 -2
  193. package/Meshes/geometry.js.map +1 -1
  194. package/Meshes/mesh.d.ts +2 -1
  195. package/Meshes/mesh.js +4 -3
  196. package/Meshes/mesh.js.map +1 -1
  197. package/Rendering/objectRenderer.d.ts +6 -2
  198. package/Rendering/objectRenderer.js +69 -63
  199. package/Rendering/objectRenderer.js.map +1 -1
  200. package/Shaders/gaussianSplatting.vertex.js +2 -2
  201. package/Shaders/gaussianSplatting.vertex.js.map +1 -1
  202. package/Shaders/volumetricLightingRenderVolume.fragment.js +2 -2
  203. package/Shaders/volumetricLightingRenderVolume.fragment.js.map +1 -1
  204. package/ShadersWGSL/gaussianSplatting.vertex.js +3 -3
  205. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  206. package/ShadersWGSL/lightingVolume.compute.js +10 -4
  207. package/ShadersWGSL/lightingVolume.compute.js.map +1 -1
  208. package/ShadersWGSL/volumetricLightingRenderVolume.fragment.js +2 -2
  209. package/ShadersWGSL/volumetricLightingRenderVolume.fragment.js.map +1 -1
  210. package/States/alphaCullingState.d.ts +1 -0
  211. package/States/alphaCullingState.js +3 -0
  212. package/States/alphaCullingState.js.map +1 -1
  213. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"computeShaderTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Misc/computeShaderTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\r\n BaseTexture,\r\n DataBuffer,\r\n ExternalTexture,\r\n FrameGraph,\r\n FrameGraphContext,\r\n FrameGraphPass,\r\n IComputeShaderOptions,\r\n IComputeShaderPath,\r\n InternalTexture,\r\n StorageBuffer,\r\n TextureSampler,\r\n VideoTexture,\r\n} from \"core/index\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { ComputeShader } from \"core/Compute/computeShader\";\r\nimport { Vector3 } from \"core/Maths/math.vector\";\r\nimport { UniformBuffer } from \"core/Materials/uniformBuffer\";\r\nimport { Logger } from \"core/Misc/logger\";\r\n\r\n/**\r\n * Task used to execute a compute shader (WebGPU only)\r\n */\r\nexport class FrameGraphComputeShaderTask extends FrameGraphTask {\r\n private readonly _notSupported: boolean;\r\n private readonly _cs: ComputeShader;\r\n private readonly _ubo: { [name: string]: { ubo: UniformBuffer; autoUpdate: boolean } };\r\n\r\n /**\r\n * Defines the dispatch size for the compute shader\r\n */\r\n public dispatchSize = new Vector3(1, 1, 1);\r\n\r\n /**\r\n * Defines an indirect dispatch buffer and offset.\r\n * If set, this will be used instead of the dispatchSize property and an indirect dispatch will be performed.\r\n * \"offset\" is the offset in the buffer where the workgroup counts are stored (default: 0)\r\n */\r\n public indirectDispatch?: { buffer: StorageBuffer | DataBuffer; offset?: number };\r\n\r\n /**\r\n * An optional execute function that will be called at the beginning of the task execution\r\n */\r\n public execute?: (context: FrameGraphContext) => void;\r\n\r\n /**\r\n * Gets the compute shader used by the task\r\n */\r\n public get computeShader(): ComputeShader {\r\n return this._cs;\r\n }\r\n\r\n /**\r\n * Gets a uniform buffer created by a call to createUniformBuffer()\r\n * @param name Name of the uniform buffer\r\n * @returns The uniform buffer\r\n */\r\n public getUniformBuffer(name: string): UniformBuffer {\r\n return this._ubo[name]?.ubo;\r\n }\r\n\r\n /**\r\n * Creates a new compute shader task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph the task belongs to.\r\n * @param shaderPath Defines the route to the shader code in one of three ways:\r\n * * object: \\{ compute: \"custom\" \\}, used with ShaderStore.ShadersStoreWGSL[\"customComputeShader\"]\r\n * * object: \\{ computeElement: \"HTMLElementId\" \\}, used with shader code in script tags\r\n * * object: \\{ computeSource: \"compute shader code string\" \\}, where the string contains the shader code\r\n * * string: try first to find the code in ShaderStore.ShadersStoreWGSL[shaderPath + \"ComputeShader\"]. If not, assumes it is a file with name shaderPath.compute.fx in index.html folder.\r\n * @param options Define the options used to create the shader\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, shaderPath: IComputeShaderPath | string, options: Partial<IComputeShaderOptions> = {}) {\r\n super(name, frameGraph);\r\n\r\n if (!frameGraph.engine.getCaps().supportComputeShaders) {\r\n this._notSupported = true;\r\n Logger.Error(\"This engine does not support compute shaders!\");\r\n return;\r\n }\r\n\r\n this._notSupported = false;\r\n this._cs = new ComputeShader(name + \"_cs\", frameGraph.engine, shaderPath, options);\r\n this._ubo = {};\r\n }\r\n\r\n public override isReady(): boolean {\r\n return this._notSupported ? true : this._cs.isReady();\r\n }\r\n\r\n /**\r\n * Creates a uniform buffer and binds it to the shader\r\n * @param name Name of the uniform buffer\r\n * @param description Description of the uniform buffer: names and sizes (in floats) of the uniforms\r\n * @param autoUpdate If the UBO must be updated automatically before each dispatch (default: true)\r\n * @returns The created uniform buffer\r\n */\r\n public createUniformBuffer(name: string, description: { [name: string]: number }, autoUpdate = true): UniformBuffer {\r\n const uBuffer = new UniformBuffer(this._frameGraph.engine);\r\n\r\n this._ubo[name] = { ubo: uBuffer, autoUpdate };\r\n\r\n for (const key in description) {\r\n uBuffer.addUniform(key, description[key]);\r\n }\r\n\r\n this._cs.setUniformBuffer(name, uBuffer);\r\n\r\n return uBuffer;\r\n }\r\n\r\n /**\r\n * Binds a texture to the shader\r\n * @param name Binding name of the texture\r\n * @param texture Texture to bind\r\n * @param bindSampler Bind the sampler corresponding to the texture (default: true). The sampler will be bound just before the binding index of the texture\r\n */\r\n public setTexture(name: string, texture: BaseTexture, bindSampler = true): void {\r\n this._cs.setTexture(name, texture, bindSampler);\r\n }\r\n\r\n /**\r\n * Binds an internal texture to the shader\r\n * @param name Binding name of the texture\r\n * @param texture Texture to bind\r\n */\r\n public setInternalTexture(name: string, texture: InternalTexture): void {\r\n this._cs.setInternalTexture(name, texture);\r\n }\r\n\r\n /**\r\n * Binds a storage texture to the shader\r\n * @param name Binding name of the texture\r\n * @param texture Texture to bind\r\n */\r\n public setStorageTexture(name: string, texture: BaseTexture): void {\r\n this._cs.setStorageTexture(name, texture);\r\n }\r\n\r\n /**\r\n * Binds an external texture to the shader\r\n * @param name Binding name of the texture\r\n * @param texture Texture to bind\r\n */\r\n public setExternalTexture(name: string, texture: ExternalTexture): void {\r\n this._cs.setExternalTexture(name, texture);\r\n }\r\n\r\n /**\r\n * Binds a video texture to the shader (by binding the external texture attached to this video)\r\n * @param name Binding name of the texture\r\n * @param texture Texture to bind\r\n * @returns true if the video texture was successfully bound, else false. false will be returned if the current engine does not support external textures\r\n */\r\n public setVideoTexture(name: string, texture: VideoTexture) {\r\n return this._cs.setVideoTexture(name, texture);\r\n }\r\n\r\n /**\r\n * Binds a uniform buffer to the shader\r\n * @param name Binding name of the buffer\r\n * @param buffer Buffer to bind\r\n */\r\n public setUniformBuffer(name: string, buffer: UniformBuffer | DataBuffer): void {\r\n this._cs.setUniformBuffer(name, buffer);\r\n }\r\n\r\n /**\r\n * Binds a storage buffer to the shader\r\n * @param name Binding name of the buffer\r\n * @param buffer Buffer to bind\r\n */\r\n public setStorageBuffer(name: string, buffer: StorageBuffer | DataBuffer): void {\r\n this._cs.setStorageBuffer(name, buffer);\r\n }\r\n\r\n /**\r\n * Binds a texture sampler to the shader\r\n * @param name Binding name of the sampler\r\n * @param sampler Sampler to bind\r\n */\r\n public setTextureSampler(name: string, sampler: TextureSampler): void {\r\n this._cs.setTextureSampler(name, sampler);\r\n }\r\n\r\n public record(skipCreationOfDisabledPasses?: boolean): FrameGraphPass<FrameGraphContext> {\r\n const pass = this._frameGraph.addPass(this.name);\r\n\r\n if (this._notSupported) {\r\n pass.setExecuteFunc(() => {});\r\n } else {\r\n pass.setExecuteFunc((context) => {\r\n this.execute?.(context);\r\n\r\n for (const key in this._ubo) {\r\n const uboEntry = this._ubo[key];\r\n if (uboEntry.autoUpdate) {\r\n uboEntry.ubo.update();\r\n }\r\n }\r\n\r\n if (this.indirectDispatch) {\r\n context.pushDebugGroup(`Indirect dispatch compute shader (${this.name})`);\r\n this._cs.dispatchIndirect(this.indirectDispatch.buffer, this.indirectDispatch.offset);\r\n context.popDebugGroup();\r\n } else {\r\n context.pushDebugGroup(`Dispatch compute shader (${this.name})`);\r\n this._cs.dispatch(this.dispatchSize.x, this.dispatchSize.y, this.dispatchSize.z);\r\n context.popDebugGroup();\r\n }\r\n });\r\n }\r\n\r\n if (!skipCreationOfDisabledPasses) {\r\n const passDisabled = this._frameGraph.addPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setExecuteFunc(() => {});\r\n }\r\n\r\n return pass;\r\n }\r\n\r\n public override dispose(): void {\r\n for (const key in this._ubo) {\r\n this._ubo[key].ubo.dispose();\r\n }\r\n super.dispose();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"computeShaderTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Misc/computeShaderTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\r\n BaseTexture,\r\n DataBuffer,\r\n ExternalTexture,\r\n FrameGraph,\r\n FrameGraphContext,\r\n FrameGraphPass,\r\n IComputeShaderOptions,\r\n IComputeShaderPath,\r\n InternalTexture,\r\n StorageBuffer,\r\n TextureSampler,\r\n VideoTexture,\r\n} from \"core/index\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { ComputeShader } from \"core/Compute/computeShader\";\r\nimport { Vector3 } from \"core/Maths/math.vector\";\r\nimport { UniformBuffer } from \"core/Materials/uniformBuffer\";\r\nimport { Logger } from \"core/Misc/logger\";\r\n\r\n/**\r\n * Task used to execute a compute shader (WebGPU only)\r\n */\r\nexport class FrameGraphComputeShaderTask extends FrameGraphTask {\r\n private readonly _notSupported: boolean;\r\n private readonly _cs: ComputeShader;\r\n private readonly _ubo: { [name: string]: { ubo: UniformBuffer; autoUpdate: boolean } };\r\n\r\n /**\r\n * Defines the dispatch size for the compute shader\r\n */\r\n public dispatchSize = new Vector3(1, 1, 1);\r\n\r\n /**\r\n * Defines an indirect dispatch buffer and offset.\r\n * If set, this will be used instead of the dispatchSize property and an indirect dispatch will be performed.\r\n * \"offset\" is the offset in the buffer where the workgroup counts are stored (default: 0)\r\n */\r\n public indirectDispatch?: { buffer: StorageBuffer | DataBuffer; offset?: number };\r\n\r\n /**\r\n * An optional execute function that will be called at the beginning of the task execution\r\n */\r\n public execute?: (context: FrameGraphContext) => void;\r\n\r\n /**\r\n * Gets the compute shader used by the task\r\n */\r\n public get computeShader(): ComputeShader {\r\n return this._cs;\r\n }\r\n\r\n /**\r\n * Gets a uniform buffer created by a call to createUniformBuffer()\r\n * @param name Name of the uniform buffer\r\n * @returns The uniform buffer\r\n */\r\n public getUniformBuffer(name: string): UniformBuffer {\r\n return this._ubo[name]?.ubo;\r\n }\r\n\r\n /**\r\n * Creates a new compute shader task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph the task belongs to.\r\n * @param shaderPath Defines the route to the shader code in one of three ways:\r\n * * object: \\{ compute: \"custom\" \\}, used with ShaderStore.ShadersStoreWGSL[\"customComputeShader\"]\r\n * * object: \\{ computeElement: \"HTMLElementId\" \\}, used with shader code in script tags\r\n * * object: \\{ computeSource: \"compute shader code string\" \\}, where the string contains the shader code\r\n * * string: try first to find the code in ShaderStore.ShadersStoreWGSL[shaderPath + \"ComputeShader\"]. If not, assumes it is a file with name shaderPath.compute.fx in index.html folder.\r\n * @param options Define the options used to create the shader\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, shaderPath: IComputeShaderPath | string, options: Partial<IComputeShaderOptions> = {}) {\r\n super(name, frameGraph);\r\n\r\n if (!frameGraph.engine.getCaps().supportComputeShaders) {\r\n this._notSupported = true;\r\n Logger.Error(\"This engine does not support compute shaders!\");\r\n return;\r\n }\r\n\r\n this._notSupported = false;\r\n this._cs = new ComputeShader(name + \"_cs\", frameGraph.engine, shaderPath, options);\r\n this._ubo = {};\r\n }\r\n\r\n public override isReady(): boolean {\r\n return this._notSupported ? true : this._cs.isReady();\r\n }\r\n\r\n /**\r\n * Creates a uniform buffer and binds it to the shader\r\n * @param name Name of the uniform buffer\r\n * @param description Description of the uniform buffer: names and sizes (in floats) of the uniforms\r\n * @param autoUpdate If the UBO must be updated automatically before each dispatch (default: true)\r\n * @returns The created uniform buffer\r\n */\r\n public createUniformBuffer(name: string, description: { [name: string]: number }, autoUpdate = true): UniformBuffer {\r\n const uBuffer = new UniformBuffer(this._frameGraph.engine);\r\n\r\n this._ubo[name] = { ubo: uBuffer, autoUpdate };\r\n\r\n for (const key in description) {\r\n uBuffer.addUniform(key, description[key]);\r\n }\r\n\r\n this._cs.setUniformBuffer(name, uBuffer);\r\n\r\n return uBuffer;\r\n }\r\n\r\n /**\r\n * Binds a texture to the shader\r\n * @param name Binding name of the texture\r\n * @param texture Texture to bind\r\n * @param bindSampler Bind the sampler corresponding to the texture (default: true). The sampler will be bound just before the binding index of the texture\r\n */\r\n public setTexture(name: string, texture: BaseTexture, bindSampler = true): void {\r\n this._cs.setTexture(name, texture, bindSampler);\r\n }\r\n\r\n /**\r\n * Binds an internal texture to the shader\r\n * @param name Binding name of the texture\r\n * @param texture Texture to bind\r\n */\r\n public setInternalTexture(name: string, texture: InternalTexture): void {\r\n this._cs.setInternalTexture(name, texture);\r\n }\r\n\r\n /**\r\n * Binds a storage texture to the shader\r\n * @param name Binding name of the texture\r\n * @param texture Texture to bind\r\n */\r\n public setStorageTexture(name: string, texture: BaseTexture): void {\r\n this._cs.setStorageTexture(name, texture);\r\n }\r\n\r\n /**\r\n * Binds an external texture to the shader\r\n * @param name Binding name of the texture\r\n * @param texture Texture to bind\r\n */\r\n public setExternalTexture(name: string, texture: ExternalTexture): void {\r\n this._cs.setExternalTexture(name, texture);\r\n }\r\n\r\n /**\r\n * Binds a video texture to the shader (by binding the external texture attached to this video)\r\n * @param name Binding name of the texture\r\n * @param texture Texture to bind\r\n * @returns true if the video texture was successfully bound, else false. false will be returned if the current engine does not support external textures\r\n */\r\n public setVideoTexture(name: string, texture: VideoTexture) {\r\n return this._cs.setVideoTexture(name, texture);\r\n }\r\n\r\n /**\r\n * Binds a uniform buffer to the shader\r\n * @param name Binding name of the buffer\r\n * @param buffer Buffer to bind\r\n */\r\n public setUniformBuffer(name: string, buffer: UniformBuffer | DataBuffer): void {\r\n this._cs.setUniformBuffer(name, buffer);\r\n }\r\n\r\n /**\r\n * Binds a storage buffer to the shader\r\n * @param name Binding name of the buffer\r\n * @param buffer Buffer to bind\r\n */\r\n public setStorageBuffer(name: string, buffer: StorageBuffer | DataBuffer): void {\r\n this._cs.setStorageBuffer(name, buffer);\r\n }\r\n\r\n /**\r\n * Binds a texture sampler to the shader\r\n * @param name Binding name of the sampler\r\n * @param sampler Sampler to bind\r\n */\r\n public setTextureSampler(name: string, sampler: TextureSampler): void {\r\n this._cs.setTextureSampler(name, sampler);\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphComputeShaderTask\";\r\n }\r\n\r\n public record(skipCreationOfDisabledPasses?: boolean): FrameGraphPass<FrameGraphContext> {\r\n const pass = this._frameGraph.addPass(this.name);\r\n\r\n if (this._notSupported) {\r\n pass.setExecuteFunc(() => {});\r\n } else {\r\n pass.setExecuteFunc((context) => {\r\n this.execute?.(context);\r\n\r\n for (const key in this._ubo) {\r\n const uboEntry = this._ubo[key];\r\n if (uboEntry.autoUpdate) {\r\n uboEntry.ubo.update();\r\n }\r\n }\r\n\r\n if (this.indirectDispatch) {\r\n context.pushDebugGroup(`Indirect dispatch compute shader (${this.name})`);\r\n this._cs.dispatchIndirect(this.indirectDispatch.buffer, this.indirectDispatch.offset);\r\n context.popDebugGroup();\r\n } else {\r\n context.pushDebugGroup(`Dispatch compute shader (${this.name})`);\r\n this._cs.dispatch(this.dispatchSize.x, this.dispatchSize.y, this.dispatchSize.z);\r\n context.popDebugGroup();\r\n }\r\n });\r\n }\r\n\r\n if (!skipCreationOfDisabledPasses) {\r\n const passDisabled = this._frameGraph.addPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setExecuteFunc(() => {});\r\n }\r\n\r\n return pass;\r\n }\r\n\r\n public override dispose(): void {\r\n for (const key in this._ubo) {\r\n this._ubo[key].ubo.dispose();\r\n }\r\n super.dispose();\r\n }\r\n}\r\n"]}
@@ -24,5 +24,6 @@ export declare class FrameGraphCullObjectsTask extends FrameGraphTask {
24
24
  * @param scene The scene to cull objects from.
25
25
  */
26
26
  constructor(name: string, frameGraph: FrameGraph, scene: Scene);
27
+ getClassName(): string;
27
28
  record(): void;
28
29
  }
@@ -17,6 +17,9 @@ export class FrameGraphCullObjectsTask extends FrameGraphTask {
17
17
  particleSystems: null,
18
18
  };
19
19
  }
20
+ getClassName() {
21
+ return "FrameGraphCullObjectsTask";
22
+ }
20
23
  record() {
21
24
  if (this.objectList === undefined || this.camera === undefined) {
22
25
  throw new Error(`FrameGraphCullObjectsTask ${this.name}: objectList and camera are required`);
@@ -1 +1 @@
1
- {"version":3,"file":"cullObjectsTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Misc/cullObjectsTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;GAEG;AACH,MAAM,OAAO,yBAA0B,SAAQ,cAAc;IAkBzD;;;;;OAKG;IACH,YAAY,IAAY,EAAE,UAAsB,EAAE,KAAY;QAC1D,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,gBAAgB,GAAG;YACpB,MAAM,EAAE,IAAI;YACZ,eAAe,EAAE,IAAI;SACxB,CAAC;IACN,CAAC;IAEM,MAAM;QACT,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,CAAC,IAAI,sCAAsC,CAAC,CAAC;QAClG,CAAC;QAED,wBAAwB;QACxB,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QACtD,IAAI,CAAC,gBAAgB,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;QAExE,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE3D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC1C,IAAI,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC7B,iCAAiC;YACjC,IAAI,CAAC,gBAAgB,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;YAExE,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;gBAClC,oGAAoG;gBACpG,OAAO;YACX,CAAC;YAED,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,EAAE,CAAC;YAElC,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAEnC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;YAEjD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;oBAC3F,SAAS;gBACb,CAAC;gBAED,IACI,IAAI,CAAC,SAAS;oBACd,IAAI,CAAC,UAAU,GAAG,CAAC;oBACnB,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;oBAC9C,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,IAAI,IAAI,CAAC,wBAAwB,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,EACvG,CAAC;oBACC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5C,CAAC;YACL,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,GAAG,WAAW,EAAE,IAAI,CAAC,CAAC;QAEvF,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAClD,YAAY,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,EAAE;YACrC,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YACtD,IAAI,CAAC,gBAAgB,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;QAC5E,CAAC,CAAC,CAAC;IACP,CAAC;CACJ","sourcesContent":["import type { Scene, Camera, FrameGraph, FrameGraphObjectList } from \"core/index\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\n\r\n/**\r\n * Task used to cull objects that are not visible.\r\n */\r\nexport class FrameGraphCullObjectsTask extends FrameGraphTask {\r\n /**\r\n * The object list to cull.\r\n */\r\n public objectList: FrameGraphObjectList;\r\n\r\n /**\r\n * The camera to use for culling.\r\n */\r\n public camera: Camera;\r\n\r\n /**\r\n * The output object list containing the culled objects.\r\n */\r\n public readonly outputObjectList: FrameGraphObjectList;\r\n\r\n private readonly _scene: Scene;\r\n\r\n /**\r\n * Creates a new cull objects task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph the task belongs to.\r\n * @param scene The scene to cull objects from.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, scene: Scene) {\r\n super(name, frameGraph);\r\n this._scene = scene;\r\n this.outputObjectList = {\r\n meshes: null,\r\n particleSystems: null,\r\n };\r\n }\r\n\r\n public record() {\r\n if (this.objectList === undefined || this.camera === undefined) {\r\n throw new Error(`FrameGraphCullObjectsTask ${this.name}: objectList and camera are required`);\r\n }\r\n\r\n // Initial output values\r\n this.outputObjectList.meshes = this.objectList.meshes;\r\n this.outputObjectList.particleSystems = this.objectList.particleSystems;\r\n\r\n const pass = this._frameGraph.addObjectListPass(this.name);\r\n\r\n pass.setObjectList(this.outputObjectList);\r\n pass.setExecuteFunc((_context) => {\r\n // No culling on particle systems\r\n this.outputObjectList.particleSystems = this.objectList.particleSystems;\r\n\r\n if (this._scene._activeMeshesFrozen) {\r\n // If active meshes are frozen, we don't need culling: we keep the last list created before freezing\r\n return;\r\n }\r\n\r\n this.outputObjectList.meshes = [];\r\n\r\n this.camera._updateFrustumPlanes();\r\n\r\n const frustumPlanes = this.camera._frustumPlanes;\r\n\r\n const meshes = this.objectList.meshes || this._scene.meshes;\r\n for (let i = 0; i < meshes.length; i++) {\r\n const mesh = meshes[i];\r\n if (mesh.isBlocked || !mesh.isReady() || !mesh.isEnabled() || mesh.scaling.hasAZeroComponent) {\r\n continue;\r\n }\r\n\r\n if (\r\n mesh.isVisible &&\r\n mesh.visibility > 0 &&\r\n (mesh.layerMask & this.camera.layerMask) !== 0 &&\r\n (this._scene.skipFrustumClipping || mesh.alwaysSelectAsActiveMesh || mesh.isInFrustum(frustumPlanes))\r\n ) {\r\n this.outputObjectList.meshes.push(mesh);\r\n }\r\n }\r\n });\r\n\r\n const passDisabled = this._frameGraph.addObjectListPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setObjectList(this.outputObjectList);\r\n passDisabled.setExecuteFunc((_context) => {\r\n this.outputObjectList.meshes = this.objectList.meshes;\r\n this.outputObjectList.particleSystems = this.objectList.particleSystems;\r\n });\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"cullObjectsTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Misc/cullObjectsTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scene, Camera, FrameGraph, FrameGraphObjectList } from \"core/index\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\n\r\n/**\r\n * Task used to cull objects that are not visible.\r\n */\r\nexport class FrameGraphCullObjectsTask extends FrameGraphTask {\r\n /**\r\n * The object list to cull.\r\n */\r\n public objectList: FrameGraphObjectList;\r\n\r\n /**\r\n * The camera to use for culling.\r\n */\r\n public camera: Camera;\r\n\r\n /**\r\n * The output object list containing the culled objects.\r\n */\r\n public readonly outputObjectList: FrameGraphObjectList;\r\n\r\n private readonly _scene: Scene;\r\n\r\n /**\r\n * Creates a new cull objects task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph the task belongs to.\r\n * @param scene The scene to cull objects from.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, scene: Scene) {\r\n super(name, frameGraph);\r\n this._scene = scene;\r\n this.outputObjectList = {\r\n meshes: null,\r\n particleSystems: null,\r\n };\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphCullObjectsTask\";\r\n }\r\n\r\n public record() {\r\n if (this.objectList === undefined || this.camera === undefined) {\r\n throw new Error(`FrameGraphCullObjectsTask ${this.name}: objectList and camera are required`);\r\n }\r\n\r\n // Initial output values\r\n this.outputObjectList.meshes = this.objectList.meshes;\r\n this.outputObjectList.particleSystems = this.objectList.particleSystems;\r\n\r\n const pass = this._frameGraph.addObjectListPass(this.name);\r\n\r\n pass.setObjectList(this.outputObjectList);\r\n pass.setExecuteFunc((_context) => {\r\n // No culling on particle systems\r\n this.outputObjectList.particleSystems = this.objectList.particleSystems;\r\n\r\n if (this._scene._activeMeshesFrozen) {\r\n // If active meshes are frozen, we don't need culling: we keep the last list created before freezing\r\n return;\r\n }\r\n\r\n this.outputObjectList.meshes = [];\r\n\r\n this.camera._updateFrustumPlanes();\r\n\r\n const frustumPlanes = this.camera._frustumPlanes;\r\n\r\n const meshes = this.objectList.meshes || this._scene.meshes;\r\n for (let i = 0; i < meshes.length; i++) {\r\n const mesh = meshes[i];\r\n if (mesh.isBlocked || !mesh.isReady() || !mesh.isEnabled() || mesh.scaling.hasAZeroComponent) {\r\n continue;\r\n }\r\n\r\n if (\r\n mesh.isVisible &&\r\n mesh.visibility > 0 &&\r\n (mesh.layerMask & this.camera.layerMask) !== 0 &&\r\n (this._scene.skipFrustumClipping || mesh.alwaysSelectAsActiveMesh || mesh.isInFrustum(frustumPlanes))\r\n ) {\r\n this.outputObjectList.meshes.push(mesh);\r\n }\r\n }\r\n });\r\n\r\n const passDisabled = this._frameGraph.addObjectListPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setObjectList(this.outputObjectList);\r\n passDisabled.setExecuteFunc((_context) => {\r\n this.outputObjectList.meshes = this.objectList.meshes;\r\n this.outputObjectList.particleSystems = this.objectList.particleSystems;\r\n });\r\n }\r\n}\r\n"]}
@@ -23,5 +23,6 @@ export declare class FrameGraphExecuteTask extends FrameGraphTask {
23
23
  * @param frameGraph The frame graph the task belongs to.
24
24
  */
25
25
  constructor(name: string, frameGraph: FrameGraph);
26
+ getClassName(): string;
26
27
  record(): FrameGraphPass<FrameGraphContext>;
27
28
  }
@@ -14,6 +14,9 @@ export class FrameGraphExecuteTask extends FrameGraphTask {
14
14
  constructor(name, frameGraph) {
15
15
  super(name, frameGraph);
16
16
  }
17
+ getClassName() {
18
+ return "FrameGraphExecuteTask";
19
+ }
17
20
  record() {
18
21
  if (!this.func) {
19
22
  throw new Error("FrameGraphExecuteTask: Execute task must have a function.");
@@ -1 +1 @@
1
- {"version":3,"file":"executeTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Misc/executeTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,cAAc;IAgBrC,OAAO;QACnB,OAAO,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;IACvD,CAAC;IAED;;;;OAIG;IACH,YAAY,IAAY,EAAE,UAAsB;QAC5C,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC5B,CAAC;IAEM,MAAM;QACT,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QACjF,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEjD,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,WAAW,EAAE,IAAI,CAAC,CAAC;QAE7E,YAAY,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE;YACpC,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ","sourcesContent":["import type { FrameGraph, FrameGraphContext, FrameGraphPass } from \"core/index\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\n\r\n/**\r\n * Task used to execute a custom function.\r\n */\r\nexport class FrameGraphExecuteTask extends FrameGraphTask {\r\n /**\r\n * The function to execute.\r\n */\r\n public func: (context: FrameGraphContext) => void;\r\n\r\n /**\r\n * The function to execute when the task is disabled (optional).\r\n */\r\n public funcDisabled?: (context: FrameGraphContext) => void;\r\n\r\n /**\r\n * Custom readiness check (optional).\r\n */\r\n public customIsReady?: () => boolean;\r\n\r\n public override isReady(): boolean {\r\n return !this.customIsReady || this.customIsReady();\r\n }\r\n\r\n /**\r\n * Creates a new execute task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph the task belongs to.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph) {\r\n super(name, frameGraph);\r\n }\r\n\r\n public record(): FrameGraphPass<FrameGraphContext> {\r\n if (!this.func) {\r\n throw new Error(\"FrameGraphExecuteTask: Execute task must have a function.\");\r\n }\r\n\r\n const pass = this._frameGraph.addPass(this.name);\r\n\r\n pass.setExecuteFunc((context) => {\r\n this.func(context);\r\n });\r\n\r\n const passDisabled = this._frameGraph.addPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setExecuteFunc((context) => {\r\n this.funcDisabled?.(context);\r\n });\r\n\r\n return pass;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"executeTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Misc/executeTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,cAAc;IAgBrC,OAAO;QACnB,OAAO,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;IACvD,CAAC;IAED;;;;OAIG;IACH,YAAY,IAAY,EAAE,UAAsB;QAC5C,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC5B,CAAC;IAEe,YAAY;QACxB,OAAO,uBAAuB,CAAC;IACnC,CAAC;IAEM,MAAM;QACT,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QACjF,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEjD,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,WAAW,EAAE,IAAI,CAAC,CAAC;QAE7E,YAAY,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE;YACpC,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ","sourcesContent":["import type { FrameGraph, FrameGraphContext, FrameGraphPass } from \"core/index\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\n\r\n/**\r\n * Task used to execute a custom function.\r\n */\r\nexport class FrameGraphExecuteTask extends FrameGraphTask {\r\n /**\r\n * The function to execute.\r\n */\r\n public func: (context: FrameGraphContext) => void;\r\n\r\n /**\r\n * The function to execute when the task is disabled (optional).\r\n */\r\n public funcDisabled?: (context: FrameGraphContext) => void;\r\n\r\n /**\r\n * Custom readiness check (optional).\r\n */\r\n public customIsReady?: () => boolean;\r\n\r\n public override isReady(): boolean {\r\n return !this.customIsReady || this.customIsReady();\r\n }\r\n\r\n /**\r\n * Creates a new execute task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph the task belongs to.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph) {\r\n super(name, frameGraph);\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphExecuteTask\";\r\n }\r\n\r\n public record(): FrameGraphPass<FrameGraphContext> {\r\n if (!this.func) {\r\n throw new Error(\"FrameGraphExecuteTask: Execute task must have a function.\");\r\n }\r\n\r\n const pass = this._frameGraph.addPass(this.name);\r\n\r\n pass.setExecuteFunc((context) => {\r\n this.func(context);\r\n });\r\n\r\n const passDisabled = this._frameGraph.addPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setExecuteFunc((context) => {\r\n this.funcDisabled?.(context);\r\n });\r\n\r\n return pass;\r\n }\r\n}\r\n"]}
@@ -26,6 +26,7 @@ export declare class FrameGraphLightingVolumeTask extends FrameGraphTask {
26
26
  */
27
27
  constructor(name: string, frameGraph: FrameGraph);
28
28
  isReady(): boolean;
29
+ getClassName(): string;
29
30
  record(): void;
30
31
  dispose(): void;
31
32
  }
@@ -28,7 +28,14 @@ export class FrameGraphLightingVolumeTask extends FrameGraphTask {
28
28
  };
29
29
  }
30
30
  isReady() {
31
- return this.lightingVolume.isReady();
31
+ const isReady = this.lightingVolume.isReady();
32
+ if (isReady) {
33
+ this.lightingVolume._setComputeShaderFastMode(true);
34
+ }
35
+ return isReady;
36
+ }
37
+ getClassName() {
38
+ return "FrameGraphLightingVolumeTask";
32
39
  }
33
40
  record() {
34
41
  if (this.shadowGenerator === undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"lightingVolumeTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Misc/lightingVolumeTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,0CAAmC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,4CAAqC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;GAEG;AACH,MAAM,OAAO,4BAA6B,SAAQ,cAAc;IAgB5D,IAAoB,IAAI;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,IAAoB,IAAI,CAAC,IAAY;QACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC;QACpC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,YAAY,IAAY,EAAE,UAAsB;QAC5C,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAExB,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QAEjE,IAAI,CAAC,wBAAwB,GAAG;YAC5B,MAAM,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YAClC,eAAe,EAAE,EAAE;SACtB,CAAC;IACN,CAAC;IAEe,OAAO;QACnB,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;IACzC,CAAC;IAEM,MAAM;QACT,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,IAAI,+BAA+B,CAAC,CAAC;QAC9F,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;QAEzC,IAAI,CAAC,CAAC,KAAK,YAAY,gBAAgB,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,IAAI,qCAAqC,CAAC,CAAC;QACpG,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC;QAE3E,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE3D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAClD,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE;YACrB,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,GAAG,WAAW,EAAE,IAAI,CAAC,CAAC;QAEvF,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAC1D,YAAY,CAAC,cAAc,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAEe,OAAO;QACnB,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;IAClC,CAAC;CACJ","sourcesContent":["import type { FrameGraph, FrameGraphObjectList, FrameGraphShadowGeneratorTask } from \"core/index\";\r\nimport { LightingVolume } from \"core/Lights/lightingVolume\";\r\nimport { DirectionalLight } from \"core/Lights/directionalLight\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\n\r\n/**\r\n * Task used to create a lighting volume from a directional light's shadow generator.\r\n */\r\nexport class FrameGraphLightingVolumeTask extends FrameGraphTask {\r\n /**\r\n * The shadow generator used to create the lighting volume.\r\n */\r\n public shadowGenerator: FrameGraphShadowGeneratorTask;\r\n\r\n /**\r\n * The output object list containing the lighting volume mesh.\r\n */\r\n public readonly outputMeshLightingVolume: FrameGraphObjectList;\r\n\r\n /**\r\n * The lighting volume created by this task.\r\n */\r\n public readonly lightingVolume: LightingVolume;\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.lightingVolume) {\r\n this.lightingVolume.name = name;\r\n }\r\n }\r\n\r\n /**\r\n * Creates a new FrameGraphLightingVolumeTask.\r\n * @param name Name of the task.\r\n * @param frameGraph The frame graph instance.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph) {\r\n super(name, frameGraph);\r\n\r\n this.lightingVolume = new LightingVolume(name, frameGraph.scene);\r\n\r\n this.outputMeshLightingVolume = {\r\n meshes: [this.lightingVolume.mesh],\r\n particleSystems: [],\r\n };\r\n }\r\n\r\n public override isReady() {\r\n return this.lightingVolume.isReady();\r\n }\r\n\r\n public record() {\r\n if (this.shadowGenerator === undefined) {\r\n throw new Error(`FrameGraphLightingVolumeTask ${this.name}: shadowGenerator is required`);\r\n }\r\n\r\n const light = this.shadowGenerator.light;\r\n\r\n if (!(light instanceof DirectionalLight)) {\r\n throw new Error(`FrameGraphLightingVolumeTask ${this.name}: light must be a directional light`);\r\n }\r\n\r\n this.lightingVolume.shadowGenerator = this.shadowGenerator.shadowGenerator;\r\n\r\n const pass = this._frameGraph.addObjectListPass(this.name);\r\n\r\n pass.setObjectList(this.outputMeshLightingVolume);\r\n pass.setExecuteFunc(() => {\r\n this.lightingVolume.update();\r\n });\r\n\r\n const passDisabled = this._frameGraph.addObjectListPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setObjectList(this.outputMeshLightingVolume);\r\n passDisabled.setExecuteFunc(() => {});\r\n }\r\n\r\n public override dispose() {\r\n super.dispose();\r\n this.lightingVolume.dispose();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"lightingVolumeTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Misc/lightingVolumeTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,0CAAmC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,4CAAqC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;GAEG;AACH,MAAM,OAAO,4BAA6B,SAAQ,cAAc;IAgB5D,IAAoB,IAAI;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,IAAoB,IAAI,CAAC,IAAY;QACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC;QACpC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,YAAY,IAAY,EAAE,UAAsB;QAC5C,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAExB,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QAEjE,IAAI,CAAC,wBAAwB,GAAG;YAC5B,MAAM,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YAClC,eAAe,EAAE,EAAE;SACtB,CAAC;IACN,CAAC;IAEe,OAAO;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;QAC9C,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,cAAc,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAEe,YAAY;QACxB,OAAO,8BAA8B,CAAC;IAC1C,CAAC;IAEM,MAAM;QACT,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,IAAI,+BAA+B,CAAC,CAAC;QAC9F,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;QAEzC,IAAI,CAAC,CAAC,KAAK,YAAY,gBAAgB,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,IAAI,qCAAqC,CAAC,CAAC;QACpG,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC;QAE3E,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE3D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAClD,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE;YACrB,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,GAAG,WAAW,EAAE,IAAI,CAAC,CAAC;QAEvF,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAC1D,YAAY,CAAC,cAAc,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAEe,OAAO;QACnB,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;IAClC,CAAC;CACJ","sourcesContent":["import type { FrameGraph, FrameGraphObjectList, FrameGraphShadowGeneratorTask } from \"core/index\";\r\nimport { LightingVolume } from \"core/Lights/lightingVolume\";\r\nimport { DirectionalLight } from \"core/Lights/directionalLight\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\n\r\n/**\r\n * Task used to create a lighting volume from a directional light's shadow generator.\r\n */\r\nexport class FrameGraphLightingVolumeTask extends FrameGraphTask {\r\n /**\r\n * The shadow generator used to create the lighting volume.\r\n */\r\n public shadowGenerator: FrameGraphShadowGeneratorTask;\r\n\r\n /**\r\n * The output object list containing the lighting volume mesh.\r\n */\r\n public readonly outputMeshLightingVolume: FrameGraphObjectList;\r\n\r\n /**\r\n * The lighting volume created by this task.\r\n */\r\n public readonly lightingVolume: LightingVolume;\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.lightingVolume) {\r\n this.lightingVolume.name = name;\r\n }\r\n }\r\n\r\n /**\r\n * Creates a new FrameGraphLightingVolumeTask.\r\n * @param name Name of the task.\r\n * @param frameGraph The frame graph instance.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph) {\r\n super(name, frameGraph);\r\n\r\n this.lightingVolume = new LightingVolume(name, frameGraph.scene);\r\n\r\n this.outputMeshLightingVolume = {\r\n meshes: [this.lightingVolume.mesh],\r\n particleSystems: [],\r\n };\r\n }\r\n\r\n public override isReady() {\r\n const isReady = this.lightingVolume.isReady();\r\n if (isReady) {\r\n this.lightingVolume._setComputeShaderFastMode(true);\r\n }\r\n return isReady;\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphLightingVolumeTask\";\r\n }\r\n\r\n public record() {\r\n if (this.shadowGenerator === undefined) {\r\n throw new Error(`FrameGraphLightingVolumeTask ${this.name}: shadowGenerator is required`);\r\n }\r\n\r\n const light = this.shadowGenerator.light;\r\n\r\n if (!(light instanceof DirectionalLight)) {\r\n throw new Error(`FrameGraphLightingVolumeTask ${this.name}: light must be a directional light`);\r\n }\r\n\r\n this.lightingVolume.shadowGenerator = this.shadowGenerator.shadowGenerator;\r\n\r\n const pass = this._frameGraph.addObjectListPass(this.name);\r\n\r\n pass.setObjectList(this.outputMeshLightingVolume);\r\n pass.setExecuteFunc(() => {\r\n this.lightingVolume.update();\r\n });\r\n\r\n const passDisabled = this._frameGraph.addObjectListPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.setObjectList(this.outputMeshLightingVolume);\r\n passDisabled.setExecuteFunc(() => {});\r\n }\r\n\r\n public override dispose() {\r\n super.dispose();\r\n this.lightingVolume.dispose();\r\n }\r\n}\r\n"]}
@@ -17,5 +17,6 @@ export declare class FrameGraphAnaglyphTask extends FrameGraphPostProcessTask {
17
17
  * @param thinPostProcess The thin post process to use for the anaglyph effect. If not provided, a new one will be created.
18
18
  */
19
19
  constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinAnaglyphPostProcess);
20
+ getClassName(): string;
20
21
  record(skipCreationOfDisabledPasses?: boolean): FrameGraphRenderPass;
21
22
  }
@@ -13,6 +13,9 @@ export class FrameGraphAnaglyphTask extends FrameGraphPostProcessTask {
13
13
  constructor(name, frameGraph, thinPostProcess) {
14
14
  super(name, frameGraph, thinPostProcess || new ThinAnaglyphPostProcess(name, frameGraph.engine));
15
15
  }
16
+ getClassName() {
17
+ return "FrameGraphAnaglyphTask";
18
+ }
16
19
  record(skipCreationOfDisabledPasses = false) {
17
20
  if (this.sourceTexture === undefined || this.leftTexture === undefined) {
18
21
  throw new Error(`FrameGraphAnaglyphTask "${this.name}": sourceTexture and leftTexture are required`);
@@ -1 +1 @@
1
- {"version":3,"file":"anaglyphTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/anaglyphTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,0DAAmD;AACrF,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAE9D;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,yBAAyB;IAQjE;;;;;OAKG;IACH,YAAY,IAAY,EAAE,UAAsB,EAAE,eAAyC;QACvF,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI,uBAAuB,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IACrG,CAAC;IAEe,MAAM,CAAC,4BAA4B,GAAG,KAAK;QACvD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACrE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,IAAI,+CAA+C,CAAC,CAAC;QACzG,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,4BAA4B,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;YAC3E,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAO,EAAE,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACrG,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEvC,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ","sourcesContent":["import type { FrameGraph, FrameGraphRenderPass, FrameGraphTextureHandle } from \"core/index\";\r\nimport { ThinAnaglyphPostProcess } from \"core/PostProcesses/thinAnaglyphPostProcess\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\n\r\n/**\r\n * Task which applies an anaglyph post process.\r\n */\r\nexport class FrameGraphAnaglyphTask extends FrameGraphPostProcessTask {\r\n /**\r\n * The texture to use as the left texture.\r\n */\r\n public leftTexture: FrameGraphTextureHandle;\r\n\r\n public override readonly postProcess: ThinAnaglyphPostProcess;\r\n\r\n /**\r\n * Constructs a new anaglyph 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 anaglyph effect. If not provided, a new one will be created.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinAnaglyphPostProcess) {\r\n super(name, frameGraph, thinPostProcess || new ThinAnaglyphPostProcess(name, frameGraph.engine));\r\n }\r\n\r\n public override record(skipCreationOfDisabledPasses = false): FrameGraphRenderPass {\r\n if (this.sourceTexture === undefined || this.leftTexture === undefined) {\r\n throw new Error(`FrameGraphAnaglyphTask \"${this.name}\": sourceTexture and leftTexture are required`);\r\n }\r\n\r\n const pass = super.record(skipCreationOfDisabledPasses, undefined, (context) => {\r\n context.bindTextureHandle(this._postProcessDrawWrapper.effect!, \"leftSampler\", this.leftTexture);\r\n });\r\n\r\n pass.addDependencies(this.leftTexture);\r\n\r\n return pass;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"anaglyphTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/anaglyphTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,0DAAmD;AACrF,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAE9D;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,yBAAyB;IAQjE;;;;;OAKG;IACH,YAAY,IAAY,EAAE,UAAsB,EAAE,eAAyC;QACvF,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI,uBAAuB,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IACrG,CAAC;IAEe,YAAY;QACxB,OAAO,wBAAwB,CAAC;IACpC,CAAC;IAEe,MAAM,CAAC,4BAA4B,GAAG,KAAK;QACvD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACrE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,IAAI,+CAA+C,CAAC,CAAC;QACzG,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,4BAA4B,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;YAC3E,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAO,EAAE,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACrG,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEvC,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ","sourcesContent":["import type { FrameGraph, FrameGraphRenderPass, FrameGraphTextureHandle } from \"core/index\";\r\nimport { ThinAnaglyphPostProcess } from \"core/PostProcesses/thinAnaglyphPostProcess\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\n\r\n/**\r\n * Task which applies an anaglyph post process.\r\n */\r\nexport class FrameGraphAnaglyphTask extends FrameGraphPostProcessTask {\r\n /**\r\n * The texture to use as the left texture.\r\n */\r\n public leftTexture: FrameGraphTextureHandle;\r\n\r\n public override readonly postProcess: ThinAnaglyphPostProcess;\r\n\r\n /**\r\n * Constructs a new anaglyph 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 anaglyph effect. If not provided, a new one will be created.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinAnaglyphPostProcess) {\r\n super(name, frameGraph, thinPostProcess || new ThinAnaglyphPostProcess(name, frameGraph.engine));\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphAnaglyphTask\";\r\n }\r\n\r\n public override record(skipCreationOfDisabledPasses = false): FrameGraphRenderPass {\r\n if (this.sourceTexture === undefined || this.leftTexture === undefined) {\r\n throw new Error(`FrameGraphAnaglyphTask \"${this.name}\": sourceTexture and leftTexture are required`);\r\n }\r\n\r\n const pass = super.record(skipCreationOfDisabledPasses, undefined, (context) => {\r\n context.bindTextureHandle(this._postProcessDrawWrapper.effect!, \"leftSampler\", this.leftTexture);\r\n });\r\n\r\n pass.addDependencies(this.leftTexture);\r\n\r\n return pass;\r\n }\r\n}\r\n"]}
@@ -13,4 +13,5 @@ export declare class FrameGraphBlackAndWhiteTask extends FrameGraphPostProcessTa
13
13
  * @param thinPostProcess The thin post process to use for the black and white effect. If not provided, a new one will be created.
14
14
  */
15
15
  constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinBlackAndWhitePostProcess);
16
+ getClassName(): string;
16
17
  }
@@ -13,5 +13,8 @@ export class FrameGraphBlackAndWhiteTask extends FrameGraphPostProcessTask {
13
13
  constructor(name, frameGraph, thinPostProcess) {
14
14
  super(name, frameGraph, thinPostProcess || new ThinBlackAndWhitePostProcess(name, frameGraph.engine));
15
15
  }
16
+ getClassName() {
17
+ return "FrameGraphBlackAndWhiteTask";
18
+ }
16
19
  }
17
20
  //# sourceMappingURL=blackAndWhiteTask.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"blackAndWhiteTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/blackAndWhiteTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,+DAAwD;AAC/F,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAE9D;;GAEG;AACH,MAAM,OAAO,2BAA4B,SAAQ,yBAAyB;IAGtE;;;;;OAKG;IACH,YAAY,IAAY,EAAE,UAAsB,EAAE,eAA8C;QAC5F,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI,4BAA4B,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1G,CAAC;CACJ","sourcesContent":["import type { FrameGraph } from \"core/FrameGraph/frameGraph\";\r\nimport { ThinBlackAndWhitePostProcess } from \"core/PostProcesses/thinBlackAndWhitePostProcess\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\n\r\n/**\r\n * Task which applies a black and white post process.\r\n */\r\nexport class FrameGraphBlackAndWhiteTask extends FrameGraphPostProcessTask {\r\n public override readonly postProcess: ThinBlackAndWhitePostProcess;\r\n\r\n /**\r\n * Constructs a new black and white 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 black and white effect. If not provided, a new one will be created.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinBlackAndWhitePostProcess) {\r\n super(name, frameGraph, thinPostProcess || new ThinBlackAndWhitePostProcess(name, frameGraph.engine));\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"blackAndWhiteTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/blackAndWhiteTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,+DAAwD;AAC/F,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAE9D;;GAEG;AACH,MAAM,OAAO,2BAA4B,SAAQ,yBAAyB;IAGtE;;;;;OAKG;IACH,YAAY,IAAY,EAAE,UAAsB,EAAE,eAA8C;QAC5F,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI,4BAA4B,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1G,CAAC;IAEe,YAAY;QACxB,OAAO,6BAA6B,CAAC;IACzC,CAAC;CACJ","sourcesContent":["import type { FrameGraph } from \"core/FrameGraph/frameGraph\";\r\nimport { ThinBlackAndWhitePostProcess } from \"core/PostProcesses/thinBlackAndWhitePostProcess\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\n\r\n/**\r\n * Task which applies a black and white post process.\r\n */\r\nexport class FrameGraphBlackAndWhiteTask extends FrameGraphPostProcessTask {\r\n public override readonly postProcess: ThinBlackAndWhitePostProcess;\r\n\r\n /**\r\n * Constructs a new black and white 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 black and white effect. If not provided, a new one will be created.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinBlackAndWhitePostProcess) {\r\n super(name, frameGraph, thinPostProcess || new ThinBlackAndWhitePostProcess(name, frameGraph.engine));\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphBlackAndWhiteTask\";\r\n }\r\n}\r\n"]}
@@ -8,5 +8,6 @@ export declare class FrameGraphBloomMergeTask extends FrameGraphPostProcessTask
8
8
  blurTexture: FrameGraphTextureHandle;
9
9
  readonly postProcess: ThinBloomMergePostProcess;
10
10
  constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinBloomMergePostProcess);
11
+ getClassName(): string;
11
12
  record(skipCreationOfDisabledPasses?: boolean): FrameGraphRenderPass;
12
13
  }
@@ -7,6 +7,9 @@ export class FrameGraphBloomMergeTask extends FrameGraphPostProcessTask {
7
7
  constructor(name, frameGraph, thinPostProcess) {
8
8
  super(name, frameGraph, thinPostProcess || new ThinBloomMergePostProcess(name, frameGraph.engine));
9
9
  }
10
+ getClassName() {
11
+ return "FrameGraphBloomMergeTask";
12
+ }
10
13
  record(skipCreationOfDisabledPasses = false) {
11
14
  if (this.sourceTexture === undefined || this.blurTexture === undefined) {
12
15
  throw new Error(`FrameGraphBloomMergeTask "${this.name}": sourceTexture and blurTexture are required`);
@@ -1 +1 @@
1
- {"version":3,"file":"bloomMergeTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/bloomMergeTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,4DAAqD;AACzF,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAE9D;;GAEG;AACH,MAAM,OAAO,wBAAyB,SAAQ,yBAAyB;IAKnE,YAAY,IAAY,EAAE,UAAsB,EAAE,eAA2C;QACzF,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI,yBAAyB,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IACvG,CAAC;IAEe,MAAM,CAAC,4BAA4B,GAAG,KAAK;QACvD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACrE,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,CAAC,IAAI,+CAA+C,CAAC,CAAC;QAC3G,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,4BAA4B,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;YAC3E,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAO,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACnG,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEvC,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ","sourcesContent":["import type { FrameGraph, FrameGraphTextureHandle, FrameGraphRenderPass } from \"core/index\";\r\nimport { ThinBloomMergePostProcess } from \"core/PostProcesses/thinBloomMergePostProcess\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class FrameGraphBloomMergeTask extends FrameGraphPostProcessTask {\r\n public blurTexture: FrameGraphTextureHandle;\r\n\r\n public override readonly postProcess: ThinBloomMergePostProcess;\r\n\r\n constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinBloomMergePostProcess) {\r\n super(name, frameGraph, thinPostProcess || new ThinBloomMergePostProcess(name, frameGraph.engine));\r\n }\r\n\r\n public override record(skipCreationOfDisabledPasses = false): FrameGraphRenderPass {\r\n if (this.sourceTexture === undefined || this.blurTexture === undefined) {\r\n throw new Error(`FrameGraphBloomMergeTask \"${this.name}\": sourceTexture and blurTexture are required`);\r\n }\r\n\r\n const pass = super.record(skipCreationOfDisabledPasses, undefined, (context) => {\r\n context.bindTextureHandle(this._postProcessDrawWrapper.effect!, \"bloomBlur\", this.blurTexture);\r\n });\r\n\r\n pass.addDependencies(this.blurTexture);\r\n\r\n return pass;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"bloomMergeTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/bloomMergeTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,4DAAqD;AACzF,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAE9D;;GAEG;AACH,MAAM,OAAO,wBAAyB,SAAQ,yBAAyB;IAKnE,YAAY,IAAY,EAAE,UAAsB,EAAE,eAA2C;QACzF,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI,yBAAyB,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IACvG,CAAC;IAEe,YAAY;QACxB,OAAO,0BAA0B,CAAC;IACtC,CAAC;IAEe,MAAM,CAAC,4BAA4B,GAAG,KAAK;QACvD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACrE,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,CAAC,IAAI,+CAA+C,CAAC,CAAC;QAC3G,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,4BAA4B,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;YAC3E,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAO,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACnG,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEvC,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ","sourcesContent":["import type { FrameGraph, FrameGraphTextureHandle, FrameGraphRenderPass } from \"core/index\";\r\nimport { ThinBloomMergePostProcess } from \"core/PostProcesses/thinBloomMergePostProcess\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class FrameGraphBloomMergeTask extends FrameGraphPostProcessTask {\r\n public blurTexture: FrameGraphTextureHandle;\r\n\r\n public override readonly postProcess: ThinBloomMergePostProcess;\r\n\r\n constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinBloomMergePostProcess) {\r\n super(name, frameGraph, thinPostProcess || new ThinBloomMergePostProcess(name, frameGraph.engine));\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphBloomMergeTask\";\r\n }\r\n\r\n public override record(skipCreationOfDisabledPasses = false): FrameGraphRenderPass {\r\n if (this.sourceTexture === undefined || this.blurTexture === undefined) {\r\n throw new Error(`FrameGraphBloomMergeTask \"${this.name}\": sourceTexture and blurTexture are required`);\r\n }\r\n\r\n const pass = super.record(skipCreationOfDisabledPasses, undefined, (context) => {\r\n context.bindTextureHandle(this._postProcessDrawWrapper.effect!, \"bloomBlur\", this.blurTexture);\r\n });\r\n\r\n pass.addDependencies(this.blurTexture);\r\n\r\n return pass;\r\n }\r\n}\r\n"]}
@@ -53,6 +53,7 @@ export declare class FrameGraphBloomTask extends FrameGraphTask {
53
53
  */
54
54
  constructor(name: string, frameGraph: FrameGraph, weight?: number, kernel?: number, threshold?: number, hdr?: boolean, bloomScale?: number);
55
55
  isReady(): boolean;
56
+ getClassName(): string;
56
57
  record(): void;
57
58
  dispose(): void;
58
59
  }
@@ -69,6 +69,9 @@ export class FrameGraphBloomTask extends FrameGraphTask {
69
69
  isReady() {
70
70
  return this.bloom.isReady();
71
71
  }
72
+ getClassName() {
73
+ return "FrameGraphBloomTask";
74
+ }
72
75
  record() {
73
76
  if (this.sourceTexture === undefined) {
74
77
  throw new Error("FrameGraphBloomTask: sourceTexture is required");
@@ -1 +1 @@
1
- {"version":3,"file":"bloomTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/bloomTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FrameGraph, FrameGraphTextureCreationOptions, FrameGraphTextureHandle } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { FrameGraphBloomMergeTask } from \"./bloomMergeTask\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { ThinBloomEffect } from \"core/PostProcesses/thinBloomEffect\";\r\nimport { FrameGraphExtractHighlightsTask } from \"./extractHighlightsTask\";\r\nimport { FrameGraphBlurTask } from \"./blurTask\";\r\n\r\n/**\r\n * Task which applies a bloom render effect.\r\n */\r\nexport class FrameGraphBloomTask extends FrameGraphTask {\r\n /**\r\n * The source texture to apply the bloom effect on.\r\n */\r\n public sourceTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The sampling mode to use for the source texture.\r\n */\r\n public sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n\r\n /**\r\n * The target texture to render the bloom effect to.\r\n * If not supplied, a texture with the same configuration as the source texture will be created.\r\n */\r\n public targetTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The output texture of the bloom effect.\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The bloom effect to apply.\r\n */\r\n public readonly bloom: ThinBloomEffect;\r\n\r\n /**\r\n * Whether the bloom effect is HDR.\r\n * When true, the bloom effect will use a higher precision texture format (half float or float). Else, it will use unsigned byte.\r\n */\r\n public readonly hdr: boolean;\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._downscale) {\r\n this._downscale.name = `${name} Downscale`;\r\n }\r\n\r\n if (this._blurX) {\r\n this._blurX.name = `${name} Blur X`;\r\n }\r\n\r\n if (this._blurY) {\r\n this._blurY.name = `${name} Blur Y`;\r\n }\r\n\r\n if (this._merge) {\r\n this._merge.name = `${name} Merge`;\r\n }\r\n }\r\n\r\n private readonly _downscale: FrameGraphExtractHighlightsTask;\r\n private readonly _blurX: FrameGraphBlurTask;\r\n private readonly _blurY: FrameGraphBlurTask;\r\n private readonly _merge: FrameGraphBloomMergeTask;\r\n private readonly _defaultPipelineTextureType: number;\r\n\r\n /**\r\n * Constructs a new bloom task.\r\n * @param name Name of the task.\r\n * @param frameGraph The frame graph this task is associated with.\r\n * @param weight Weight of the bloom effect.\r\n * @param kernel Kernel size of the bloom effect.\r\n * @param threshold Threshold of the bloom effect.\r\n * @param hdr Whether the bloom effect is HDR.\r\n * @param bloomScale The scale of the bloom effect. This value is multiplied by the source texture size to determine the bloom texture size.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, weight = 0.25, kernel = 64, threshold = 0.2, hdr = false, bloomScale = 0.5) {\r\n super(name, frameGraph);\r\n\r\n this.hdr = hdr;\r\n\r\n this._defaultPipelineTextureType = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n if (hdr) {\r\n const caps = frameGraph.engine.getCaps();\r\n if (caps.textureHalfFloatRender) {\r\n this._defaultPipelineTextureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n } else if (caps.textureFloatRender) {\r\n this._defaultPipelineTextureType = Constants.TEXTURETYPE_FLOAT;\r\n }\r\n }\r\n\r\n this.bloom = new ThinBloomEffect(name, frameGraph.engine, bloomScale);\r\n this.bloom.threshold = threshold;\r\n this.bloom.kernel = kernel;\r\n this.bloom.weight = weight;\r\n\r\n this._downscale = new FrameGraphExtractHighlightsTask(`${name} Downscale`, this._frameGraph, this.bloom._downscale);\r\n this._blurX = new FrameGraphBlurTask(`${name} Blur X`, this._frameGraph, this.bloom._blurX);\r\n this._blurY = new FrameGraphBlurTask(`${name} Blur Y`, this._frameGraph, this.bloom._blurY);\r\n this._merge = new FrameGraphBloomMergeTask(`${name} Merge`, this._frameGraph, this.bloom._merge);\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n public override isReady() {\r\n return this.bloom.isReady();\r\n }\r\n\r\n public record(): void {\r\n if (this.sourceTexture === undefined) {\r\n throw new Error(\"FrameGraphBloomTask: sourceTexture is required\");\r\n }\r\n\r\n const sourceTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.sourceTexture);\r\n\r\n const textureCreationOptions: FrameGraphTextureCreationOptions = {\r\n size: {\r\n width: Math.floor(sourceTextureDescription.size.width * this.bloom.scale) || 1,\r\n height: Math.floor(sourceTextureDescription.size.height * this.bloom.scale) || 1,\r\n },\r\n options: {\r\n createMipMaps: false,\r\n types: [this._defaultPipelineTextureType],\r\n formats: [Constants.TEXTUREFORMAT_RGBA],\r\n samples: 1,\r\n useSRGBBuffers: [false],\r\n labels: [\"\"],\r\n },\r\n sizeIsPercentage: false,\r\n };\r\n\r\n const downscaleTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._downscale.name, textureCreationOptions);\r\n\r\n this._downscale.sourceTexture = this.sourceTexture;\r\n this._downscale.sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n this._downscale.targetTexture = downscaleTextureHandle;\r\n this._downscale.record(true);\r\n\r\n const blurXTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._blurX.name, textureCreationOptions);\r\n\r\n this._blurX.sourceTexture = downscaleTextureHandle;\r\n this._blurX.sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n this._blurX.targetTexture = blurXTextureHandle;\r\n this._blurX.record(true);\r\n\r\n const blurYTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._blurY.name, textureCreationOptions);\r\n\r\n this._blurY.sourceTexture = blurXTextureHandle;\r\n this._blurY.sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n this._blurY.targetTexture = blurYTextureHandle;\r\n this._blurY.record(true);\r\n\r\n const sourceTextureCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.sourceTexture);\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.targetTexture, this._merge.name, sourceTextureCreationOptions);\r\n\r\n this._merge.sourceTexture = this.sourceTexture;\r\n this._merge.sourceSamplingMode = this.sourceSamplingMode;\r\n this._merge.blurTexture = blurYTextureHandle;\r\n this._merge.targetTexture = this.outputTexture;\r\n this._merge.record(true);\r\n\r\n const passDisabled = this._frameGraph.addRenderPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.addDependencies(this.sourceTexture);\r\n\r\n passDisabled.setRenderTarget(this.outputTexture);\r\n passDisabled.setExecuteFunc((context) => {\r\n context.copyTexture(this.sourceTexture);\r\n });\r\n }\r\n\r\n public override dispose(): void {\r\n this._downscale.dispose();\r\n this._blurX.dispose();\r\n this._blurY.dispose();\r\n this._merge.dispose();\r\n super.dispose();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"bloomTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/bloomTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FrameGraph, FrameGraphTextureCreationOptions, FrameGraphTextureHandle } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { FrameGraphBloomMergeTask } from \"./bloomMergeTask\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { ThinBloomEffect } from \"core/PostProcesses/thinBloomEffect\";\r\nimport { FrameGraphExtractHighlightsTask } from \"./extractHighlightsTask\";\r\nimport { FrameGraphBlurTask } from \"./blurTask\";\r\n\r\n/**\r\n * Task which applies a bloom render effect.\r\n */\r\nexport class FrameGraphBloomTask extends FrameGraphTask {\r\n /**\r\n * The source texture to apply the bloom effect on.\r\n */\r\n public sourceTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The sampling mode to use for the source texture.\r\n */\r\n public sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n\r\n /**\r\n * The target texture to render the bloom effect to.\r\n * If not supplied, a texture with the same configuration as the source texture will be created.\r\n */\r\n public targetTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The output texture of the bloom effect.\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The bloom effect to apply.\r\n */\r\n public readonly bloom: ThinBloomEffect;\r\n\r\n /**\r\n * Whether the bloom effect is HDR.\r\n * When true, the bloom effect will use a higher precision texture format (half float or float). Else, it will use unsigned byte.\r\n */\r\n public readonly hdr: boolean;\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._downscale) {\r\n this._downscale.name = `${name} Downscale`;\r\n }\r\n\r\n if (this._blurX) {\r\n this._blurX.name = `${name} Blur X`;\r\n }\r\n\r\n if (this._blurY) {\r\n this._blurY.name = `${name} Blur Y`;\r\n }\r\n\r\n if (this._merge) {\r\n this._merge.name = `${name} Merge`;\r\n }\r\n }\r\n\r\n private readonly _downscale: FrameGraphExtractHighlightsTask;\r\n private readonly _blurX: FrameGraphBlurTask;\r\n private readonly _blurY: FrameGraphBlurTask;\r\n private readonly _merge: FrameGraphBloomMergeTask;\r\n private readonly _defaultPipelineTextureType: number;\r\n\r\n /**\r\n * Constructs a new bloom task.\r\n * @param name Name of the task.\r\n * @param frameGraph The frame graph this task is associated with.\r\n * @param weight Weight of the bloom effect.\r\n * @param kernel Kernel size of the bloom effect.\r\n * @param threshold Threshold of the bloom effect.\r\n * @param hdr Whether the bloom effect is HDR.\r\n * @param bloomScale The scale of the bloom effect. This value is multiplied by the source texture size to determine the bloom texture size.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, weight = 0.25, kernel = 64, threshold = 0.2, hdr = false, bloomScale = 0.5) {\r\n super(name, frameGraph);\r\n\r\n this.hdr = hdr;\r\n\r\n this._defaultPipelineTextureType = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n if (hdr) {\r\n const caps = frameGraph.engine.getCaps();\r\n if (caps.textureHalfFloatRender) {\r\n this._defaultPipelineTextureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n } else if (caps.textureFloatRender) {\r\n this._defaultPipelineTextureType = Constants.TEXTURETYPE_FLOAT;\r\n }\r\n }\r\n\r\n this.bloom = new ThinBloomEffect(name, frameGraph.engine, bloomScale);\r\n this.bloom.threshold = threshold;\r\n this.bloom.kernel = kernel;\r\n this.bloom.weight = weight;\r\n\r\n this._downscale = new FrameGraphExtractHighlightsTask(`${name} Downscale`, this._frameGraph, this.bloom._downscale);\r\n this._blurX = new FrameGraphBlurTask(`${name} Blur X`, this._frameGraph, this.bloom._blurX);\r\n this._blurY = new FrameGraphBlurTask(`${name} Blur Y`, this._frameGraph, this.bloom._blurY);\r\n this._merge = new FrameGraphBloomMergeTask(`${name} Merge`, this._frameGraph, this.bloom._merge);\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n public override isReady() {\r\n return this.bloom.isReady();\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphBloomTask\";\r\n }\r\n\r\n public record(): void {\r\n if (this.sourceTexture === undefined) {\r\n throw new Error(\"FrameGraphBloomTask: sourceTexture is required\");\r\n }\r\n\r\n const sourceTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.sourceTexture);\r\n\r\n const textureCreationOptions: FrameGraphTextureCreationOptions = {\r\n size: {\r\n width: Math.floor(sourceTextureDescription.size.width * this.bloom.scale) || 1,\r\n height: Math.floor(sourceTextureDescription.size.height * this.bloom.scale) || 1,\r\n },\r\n options: {\r\n createMipMaps: false,\r\n types: [this._defaultPipelineTextureType],\r\n formats: [Constants.TEXTUREFORMAT_RGBA],\r\n samples: 1,\r\n useSRGBBuffers: [false],\r\n labels: [\"\"],\r\n },\r\n sizeIsPercentage: false,\r\n };\r\n\r\n const downscaleTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._downscale.name, textureCreationOptions);\r\n\r\n this._downscale.sourceTexture = this.sourceTexture;\r\n this._downscale.sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n this._downscale.targetTexture = downscaleTextureHandle;\r\n this._downscale.record(true);\r\n\r\n const blurXTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._blurX.name, textureCreationOptions);\r\n\r\n this._blurX.sourceTexture = downscaleTextureHandle;\r\n this._blurX.sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n this._blurX.targetTexture = blurXTextureHandle;\r\n this._blurX.record(true);\r\n\r\n const blurYTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._blurY.name, textureCreationOptions);\r\n\r\n this._blurY.sourceTexture = blurXTextureHandle;\r\n this._blurY.sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n this._blurY.targetTexture = blurYTextureHandle;\r\n this._blurY.record(true);\r\n\r\n const sourceTextureCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.sourceTexture);\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.targetTexture, this._merge.name, sourceTextureCreationOptions);\r\n\r\n this._merge.sourceTexture = this.sourceTexture;\r\n this._merge.sourceSamplingMode = this.sourceSamplingMode;\r\n this._merge.blurTexture = blurYTextureHandle;\r\n this._merge.targetTexture = this.outputTexture;\r\n this._merge.record(true);\r\n\r\n const passDisabled = this._frameGraph.addRenderPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.addDependencies(this.sourceTexture);\r\n\r\n passDisabled.setRenderTarget(this.outputTexture);\r\n passDisabled.setExecuteFunc((context) => {\r\n context.copyTexture(this.sourceTexture);\r\n });\r\n }\r\n\r\n public override dispose(): void {\r\n this._downscale.dispose();\r\n this._blurX.dispose();\r\n this._blurY.dispose();\r\n this._merge.dispose();\r\n super.dispose();\r\n }\r\n}\r\n"]}
@@ -13,5 +13,6 @@ export declare class FrameGraphBlurTask extends FrameGraphPostProcessTask {
13
13
  * @param thinPostProcess The thin post process to use for the blur effect.
14
14
  */
15
15
  constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinBlurPostProcess);
16
+ getClassName(): string;
16
17
  record(skipCreationOfDisabledPasses?: boolean, additionalExecute?: (context: FrameGraphRenderContext) => void, additionalBindings?: (context: FrameGraphRenderContext) => void): FrameGraphRenderPass;
17
18
  }
@@ -14,6 +14,9 @@ export class FrameGraphBlurTask extends FrameGraphPostProcessTask {
14
14
  constructor(name, frameGraph, thinPostProcess) {
15
15
  super(name, frameGraph, thinPostProcess || new ThinBlurPostProcess(name, frameGraph.engine, new Vector2(1, 0), 10));
16
16
  }
17
+ getClassName() {
18
+ return "FrameGraphBlurTask";
19
+ }
17
20
  record(skipCreationOfDisabledPasses = false, additionalExecute, additionalBindings) {
18
21
  const pass = super.record(skipCreationOfDisabledPasses, additionalExecute, additionalBindings);
19
22
  this.postProcess.textureWidth = this._outputWidth; // should be _sourceWidth, but to avoid a breaking change, we use _outputWidth (BlurPostProcess uses _outputTexture to get width/height)
@@ -1 +1 @@
1
- {"version":3,"file":"blurTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/blurTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,sDAA+C;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,sCAA+B;AAEjD;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,yBAAyB;IAG7D;;;;;OAKG;IACH,YAAY,IAAY,EAAE,UAAsB,EAAE,eAAqC;QACnF,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI,mBAAmB,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACxH,CAAC;IAEe,MAAM,CAClB,4BAA4B,GAAG,KAAK,EACpC,iBAA8D,EAC9D,kBAA+D;QAE/D,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,4BAA4B,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;QAE/F,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,wIAAwI;QAC3L,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,2BAA2B;QAEhF,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ","sourcesContent":["import type { FrameGraph, FrameGraphRenderContext, FrameGraphRenderPass } from \"core/index\";\r\nimport { ThinBlurPostProcess } from \"core/PostProcesses/thinBlurPostProcess\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\nimport { Vector2 } from \"core/Maths/math.vector\";\r\n\r\n/**\r\n * Task which applies a blur post process.\r\n */\r\nexport class FrameGraphBlurTask extends FrameGraphPostProcessTask {\r\n public override readonly postProcess: ThinBlurPostProcess;\r\n\r\n /**\r\n * Constructs a new blur task.\r\n * @param name Name of the task.\r\n * @param frameGraph Frame graph this task is associated with.\r\n * @param thinPostProcess The thin post process to use for the blur effect.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinBlurPostProcess) {\r\n super(name, frameGraph, thinPostProcess || new ThinBlurPostProcess(name, frameGraph.engine, new Vector2(1, 0), 10));\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; // should be _sourceWidth, but to avoid a breaking change, we use _outputWidth (BlurPostProcess uses _outputTexture to get width/height)\r\n this.postProcess.textureHeight = this._outputHeight; // same as above for height\r\n\r\n return pass;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"blurTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/blurTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,sDAA+C;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,sCAA+B;AAEjD;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,yBAAyB;IAG7D;;;;;OAKG;IACH,YAAY,IAAY,EAAE,UAAsB,EAAE,eAAqC;QACnF,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI,mBAAmB,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACxH,CAAC;IAEe,YAAY;QACxB,OAAO,oBAAoB,CAAC;IAChC,CAAC;IAEe,MAAM,CAClB,4BAA4B,GAAG,KAAK,EACpC,iBAA8D,EAC9D,kBAA+D;QAE/D,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,4BAA4B,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;QAE/F,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,wIAAwI;QAC3L,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,2BAA2B;QAEhF,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ","sourcesContent":["import type { FrameGraph, FrameGraphRenderContext, FrameGraphRenderPass } from \"core/index\";\r\nimport { ThinBlurPostProcess } from \"core/PostProcesses/thinBlurPostProcess\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\nimport { Vector2 } from \"core/Maths/math.vector\";\r\n\r\n/**\r\n * Task which applies a blur post process.\r\n */\r\nexport class FrameGraphBlurTask extends FrameGraphPostProcessTask {\r\n public override readonly postProcess: ThinBlurPostProcess;\r\n\r\n /**\r\n * Constructs a new blur task.\r\n * @param name Name of the task.\r\n * @param frameGraph Frame graph this task is associated with.\r\n * @param thinPostProcess The thin post process to use for the blur effect.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinBlurPostProcess) {\r\n super(name, frameGraph, thinPostProcess || new ThinBlurPostProcess(name, frameGraph.engine, new Vector2(1, 0), 10));\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphBlurTask\";\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; // should be _sourceWidth, but to avoid a breaking change, we use _outputWidth (BlurPostProcess uses _outputTexture to get width/height)\r\n this.postProcess.textureHeight = this._outputHeight; // same as above for height\r\n\r\n return pass;\r\n }\r\n}\r\n"]}
@@ -13,5 +13,6 @@ export declare class FrameGraphChromaticAberrationTask extends FrameGraphPostPro
13
13
  * @param thinPostProcess The thin post process to use for the chromatic aberration effect. If not provided, a new one will be created.
14
14
  */
15
15
  constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinChromaticAberrationPostProcess);
16
+ getClassName(): string;
16
17
  record(skipCreationOfDisabledPasses?: boolean, additionalExecute?: (context: FrameGraphRenderContext) => void, additionalBindings?: (context: FrameGraphRenderContext) => void): FrameGraphRenderPass;
17
18
  }
@@ -13,6 +13,9 @@ export class FrameGraphChromaticAberrationTask extends FrameGraphPostProcessTask
13
13
  constructor(name, frameGraph, thinPostProcess) {
14
14
  super(name, frameGraph, thinPostProcess || new ThinChromaticAberrationPostProcess(name, frameGraph.engine));
15
15
  }
16
+ getClassName() {
17
+ return "FrameGraphChromaticAberrationTask";
18
+ }
16
19
  record(skipCreationOfDisabledPasses = false, additionalExecute, additionalBindings) {
17
20
  const pass = super.record(skipCreationOfDisabledPasses, additionalExecute, additionalBindings);
18
21
  this.postProcess.screenWidth = this._sourceWidth;
@@ -1 +1 @@
1
- {"version":3,"file":"chromaticAberrationTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/chromaticAberrationTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kCAAkC,EAAE,qEAA8D;AAC3G,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAE9D;;GAEG;AACH,MAAM,OAAO,iCAAkC,SAAQ,yBAAyB;IAG5E;;;;;OAKG;IACH,YAAY,IAAY,EAAE,UAAsB,EAAE,eAAoD;QAClG,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI,kCAAkC,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAChH,CAAC;IAEe,MAAM,CAClB,4BAA4B,GAAG,KAAK,EACpC,iBAA8D,EAC9D,kBAA+D;QAE/D,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,4BAA4B,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;QAE/F,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;QACjD,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;QAEnD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ","sourcesContent":["import type { FrameGraph, FrameGraphRenderContext, FrameGraphRenderPass } from \"core/index\";\r\nimport { ThinChromaticAberrationPostProcess } from \"core/PostProcesses/thinChromaticAberrationPostProcess\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\n\r\n/**\r\n * Task which applies a chromatic aberration post process.\r\n */\r\nexport class FrameGraphChromaticAberrationTask extends FrameGraphPostProcessTask {\r\n public override readonly postProcess: ThinChromaticAberrationPostProcess;\r\n\r\n /**\r\n * Constructs a new chromatic aberration 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 chromatic aberration effect. If not provided, a new one will be created.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinChromaticAberrationPostProcess) {\r\n super(name, frameGraph, thinPostProcess || new ThinChromaticAberrationPostProcess(name, frameGraph.engine));\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.screenWidth = this._sourceWidth;\r\n this.postProcess.screenHeight = this._sourceHeight;\r\n\r\n return pass;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"chromaticAberrationTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/chromaticAberrationTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kCAAkC,EAAE,qEAA8D;AAC3G,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAE9D;;GAEG;AACH,MAAM,OAAO,iCAAkC,SAAQ,yBAAyB;IAG5E;;;;;OAKG;IACH,YAAY,IAAY,EAAE,UAAsB,EAAE,eAAoD;QAClG,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI,kCAAkC,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAChH,CAAC;IAEe,YAAY;QACxB,OAAO,mCAAmC,CAAC;IAC/C,CAAC;IAEe,MAAM,CAClB,4BAA4B,GAAG,KAAK,EACpC,iBAA8D,EAC9D,kBAA+D;QAE/D,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,4BAA4B,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;QAE/F,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;QACjD,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;QAEnD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ","sourcesContent":["import type { FrameGraph, FrameGraphRenderContext, FrameGraphRenderPass } from \"core/index\";\r\nimport { ThinChromaticAberrationPostProcess } from \"core/PostProcesses/thinChromaticAberrationPostProcess\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\n\r\n/**\r\n * Task which applies a chromatic aberration post process.\r\n */\r\nexport class FrameGraphChromaticAberrationTask extends FrameGraphPostProcessTask {\r\n public override readonly postProcess: ThinChromaticAberrationPostProcess;\r\n\r\n /**\r\n * Constructs a new chromatic aberration 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 chromatic aberration effect. If not provided, a new one will be created.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinChromaticAberrationPostProcess) {\r\n super(name, frameGraph, thinPostProcess || new ThinChromaticAberrationPostProcess(name, frameGraph.engine));\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphChromaticAberrationTask\";\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.screenWidth = this._sourceWidth;\r\n this.postProcess.screenHeight = this._sourceHeight;\r\n\r\n return pass;\r\n }\r\n}\r\n"]}
@@ -26,5 +26,6 @@ export declare class FrameGraphCircleOfConfusionTask extends FrameGraphPostProce
26
26
  * @param thinPostProcess The thin post process to use for the task. If not provided, a new one will be created.
27
27
  */
28
28
  constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinCircleOfConfusionPostProcess);
29
+ getClassName(): string;
29
30
  record(skipCreationOfDisabledPasses?: boolean): FrameGraphRenderPass;
30
31
  }
@@ -18,6 +18,9 @@ export class FrameGraphCircleOfConfusionTask extends FrameGraphPostProcessTask {
18
18
  */
19
19
  this.depthSamplingMode = 2;
20
20
  }
21
+ getClassName() {
22
+ return "FrameGraphCircleOfConfusionTask";
23
+ }
21
24
  record(skipCreationOfDisabledPasses = false) {
22
25
  if (this.sourceTexture === undefined || this.depthTexture === undefined || this.camera === undefined) {
23
26
  throw new Error(`FrameGraphCircleOfConfusionTask "${this.name}": sourceTexture, depthTexture and camera are required`);
@@ -1 +1 @@
1
- {"version":3,"file":"circleOfConfusionTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,sCAA+B;AACnD,OAAO,EAAE,gCAAgC,EAAE,mEAA4D;AAEvG;;GAEG;AACH,MAAM,OAAO,+BAAgC,SAAQ,yBAAyB;IAmB1E;;;;;OAKG;IACH,YAAY,IAAY,EAAE,UAAsB,EAAE,eAAkD;QAChG,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI,gCAAgC,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAnB9G;;WAEG;QACI,sBAAiB,GAAG,SAAS,CAAC,6BAA6B,CAAC;IAiBnE,CAAC;IAEe,MAAM,CAAC,4BAA4B,GAAG,KAAK;QACvD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACnG,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,CAAC,IAAI,wDAAwD,CAAC,CAAC;QAC3H,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CACrB,4BAA4B,EAC5B,CAAC,OAAO,EAAE,EAAE;YACR,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YACtC,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9E,CAAC,EACD,CAAC,OAAO,EAAE,EAAE;YACR,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAO,EAAE,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACvG,CAAC,CACJ,CAAC;QAEF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAExC,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ","sourcesContent":["import type { FrameGraph, FrameGraphTextureHandle, FrameGraphRenderPass, Camera } from \"core/index\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { ThinCircleOfConfusionPostProcess } from \"core/PostProcesses/thinCircleOfConfusionPostProcess\";\r\n\r\n/**\r\n * Task which applies a circle of confusion post process.\r\n */\r\nexport class FrameGraphCircleOfConfusionTask extends FrameGraphPostProcessTask {\r\n /**\r\n * The depth texture to use for the circle of confusion effect.\r\n * It must store camera space depth (Z coordinate)\r\n */\r\n public depthTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The sampling mode to use for the depth texture.\r\n */\r\n public depthSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n\r\n /**\r\n * The camera to use for the circle of confusion effect.\r\n */\r\n public camera: Camera;\r\n\r\n public override readonly postProcess: ThinCircleOfConfusionPostProcess;\r\n\r\n /**\r\n * Constructs a new circle of confusion task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph this task belongs to.\r\n * @param thinPostProcess The thin post process to use for the task. If not provided, a new one will be created.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinCircleOfConfusionPostProcess) {\r\n super(name, frameGraph, thinPostProcess || new ThinCircleOfConfusionPostProcess(name, frameGraph.engine));\r\n }\r\n\r\n public override record(skipCreationOfDisabledPasses = false): FrameGraphRenderPass {\r\n if (this.sourceTexture === undefined || this.depthTexture === undefined || this.camera === undefined) {\r\n throw new Error(`FrameGraphCircleOfConfusionTask \"${this.name}\": sourceTexture, depthTexture and camera are required`);\r\n }\r\n\r\n const pass = super.record(\r\n skipCreationOfDisabledPasses,\r\n (context) => {\r\n this.postProcess.camera = this.camera;\r\n context.setTextureSamplingMode(this.depthTexture, this.depthSamplingMode);\r\n },\r\n (context) => {\r\n context.bindTextureHandle(this._postProcessDrawWrapper.effect!, \"depthSampler\", this.depthTexture);\r\n }\r\n );\r\n\r\n pass.addDependencies(this.depthTexture);\r\n\r\n return pass;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"circleOfConfusionTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,sCAA+B;AACnD,OAAO,EAAE,gCAAgC,EAAE,mEAA4D;AAEvG;;GAEG;AACH,MAAM,OAAO,+BAAgC,SAAQ,yBAAyB;IAmB1E;;;;;OAKG;IACH,YAAY,IAAY,EAAE,UAAsB,EAAE,eAAkD;QAChG,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI,gCAAgC,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAnB9G;;WAEG;QACI,sBAAiB,GAAG,SAAS,CAAC,6BAA6B,CAAC;IAiBnE,CAAC;IAEe,YAAY;QACxB,OAAO,iCAAiC,CAAC;IAC7C,CAAC;IAEe,MAAM,CAAC,4BAA4B,GAAG,KAAK;QACvD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACnG,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,CAAC,IAAI,wDAAwD,CAAC,CAAC;QAC3H,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CACrB,4BAA4B,EAC5B,CAAC,OAAO,EAAE,EAAE;YACR,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YACtC,OAAO,CAAC,sBAAsB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9E,CAAC,EACD,CAAC,OAAO,EAAE,EAAE;YACR,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAO,EAAE,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACvG,CAAC,CACJ,CAAC;QAEF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAExC,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ","sourcesContent":["import type { FrameGraph, FrameGraphTextureHandle, FrameGraphRenderPass, Camera } from \"core/index\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { ThinCircleOfConfusionPostProcess } from \"core/PostProcesses/thinCircleOfConfusionPostProcess\";\r\n\r\n/**\r\n * Task which applies a circle of confusion post process.\r\n */\r\nexport class FrameGraphCircleOfConfusionTask extends FrameGraphPostProcessTask {\r\n /**\r\n * The depth texture to use for the circle of confusion effect.\r\n * It must store camera space depth (Z coordinate)\r\n */\r\n public depthTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The sampling mode to use for the depth texture.\r\n */\r\n public depthSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n\r\n /**\r\n * The camera to use for the circle of confusion effect.\r\n */\r\n public camera: Camera;\r\n\r\n public override readonly postProcess: ThinCircleOfConfusionPostProcess;\r\n\r\n /**\r\n * Constructs a new circle of confusion task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph this task belongs to.\r\n * @param thinPostProcess The thin post process to use for the task. If not provided, a new one will be created.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinCircleOfConfusionPostProcess) {\r\n super(name, frameGraph, thinPostProcess || new ThinCircleOfConfusionPostProcess(name, frameGraph.engine));\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphCircleOfConfusionTask\";\r\n }\r\n\r\n public override record(skipCreationOfDisabledPasses = false): FrameGraphRenderPass {\r\n if (this.sourceTexture === undefined || this.depthTexture === undefined || this.camera === undefined) {\r\n throw new Error(`FrameGraphCircleOfConfusionTask \"${this.name}\": sourceTexture, depthTexture and camera are required`);\r\n }\r\n\r\n const pass = super.record(\r\n skipCreationOfDisabledPasses,\r\n (context) => {\r\n this.postProcess.camera = this.camera;\r\n context.setTextureSamplingMode(this.depthTexture, this.depthSamplingMode);\r\n },\r\n (context) => {\r\n context.bindTextureHandle(this._postProcessDrawWrapper.effect!, \"depthSampler\", this.depthTexture);\r\n }\r\n );\r\n\r\n pass.addDependencies(this.depthTexture);\r\n\r\n return pass;\r\n }\r\n}\r\n"]}
@@ -14,4 +14,5 @@ export declare class FrameGraphColorCorrectionTask extends FrameGraphPostProcess
14
14
  * @param thinPostProcess The thin post process to use for the color correction effect. If not provided, a new one will be created.
15
15
  */
16
16
  constructor(name: string, frameGraph: FrameGraph, colorTableUrl: string, thinPostProcess?: ThinColorCorrectionPostProcess);
17
+ getClassName(): string;
17
18
  }
@@ -14,5 +14,8 @@ export class FrameGraphColorCorrectionTask extends FrameGraphPostProcessTask {
14
14
  constructor(name, frameGraph, colorTableUrl, thinPostProcess) {
15
15
  super(name, frameGraph, thinPostProcess || new ThinColorCorrectionPostProcess(name, frameGraph.scene, colorTableUrl));
16
16
  }
17
+ getClassName() {
18
+ return "FrameGraphColorCorrectionTask";
19
+ }
17
20
  }
18
21
  //# sourceMappingURL=colorCorrectionTask.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"colorCorrectionTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/colorCorrectionTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,8BAA8B,EAAE,iEAA0D;AACnG,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAE9D;;GAEG;AACH,MAAM,OAAO,6BAA8B,SAAQ,yBAAyB;IAGxE;;;;;;OAMG;IACH,YAAY,IAAY,EAAE,UAAsB,EAAE,aAAqB,EAAE,eAAgD;QACrH,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI,8BAA8B,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;IAC1H,CAAC;CACJ","sourcesContent":["import type { FrameGraph } from \"core/FrameGraph/frameGraph\";\r\nimport { ThinColorCorrectionPostProcess } from \"core/PostProcesses/thinColorCorrectionPostProcess\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\n\r\n/**\r\n * Task which applies a color correction post process.\r\n */\r\nexport class FrameGraphColorCorrectionTask extends FrameGraphPostProcessTask {\r\n public override readonly postProcess: ThinColorCorrectionPostProcess;\r\n\r\n /**\r\n * Constructs a new color correction 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 colorTableUrl The URL of the color table to use for the color correction effect.\r\n * @param thinPostProcess The thin post process to use for the color correction effect. If not provided, a new one will be created.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, colorTableUrl: string, thinPostProcess?: ThinColorCorrectionPostProcess) {\r\n super(name, frameGraph, thinPostProcess || new ThinColorCorrectionPostProcess(name, frameGraph.scene, colorTableUrl));\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"colorCorrectionTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/colorCorrectionTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,8BAA8B,EAAE,iEAA0D;AACnG,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAE9D;;GAEG;AACH,MAAM,OAAO,6BAA8B,SAAQ,yBAAyB;IAGxE;;;;;;OAMG;IACH,YAAY,IAAY,EAAE,UAAsB,EAAE,aAAqB,EAAE,eAAgD;QACrH,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI,8BAA8B,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;IAC1H,CAAC;IAEe,YAAY;QACxB,OAAO,+BAA+B,CAAC;IAC3C,CAAC;CACJ","sourcesContent":["import type { FrameGraph } from \"core/FrameGraph/frameGraph\";\r\nimport { ThinColorCorrectionPostProcess } from \"core/PostProcesses/thinColorCorrectionPostProcess\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\n\r\n/**\r\n * Task which applies a color correction post process.\r\n */\r\nexport class FrameGraphColorCorrectionTask extends FrameGraphPostProcessTask {\r\n public override readonly postProcess: ThinColorCorrectionPostProcess;\r\n\r\n /**\r\n * Constructs a new color correction 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 colorTableUrl The URL of the color table to use for the color correction effect.\r\n * @param thinPostProcess The thin post process to use for the color correction effect. If not provided, a new one will be created.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, colorTableUrl: string, thinPostProcess?: ThinColorCorrectionPostProcess) {\r\n super(name, frameGraph, thinPostProcess || new ThinColorCorrectionPostProcess(name, frameGraph.scene, colorTableUrl));\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphColorCorrectionTask\";\r\n }\r\n}\r\n"]}
@@ -13,5 +13,6 @@ export declare class FrameGraphConvolutionTask extends FrameGraphPostProcessTask
13
13
  * @param thinPostProcess The thin post process to use for the task. If not provided, a new one will be created.
14
14
  */
15
15
  constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinConvolutionPostProcess);
16
+ getClassName(): string;
16
17
  record(skipCreationOfDisabledPasses?: boolean, additionalExecute?: (context: FrameGraphRenderContext) => void, additionalBindings?: (context: FrameGraphRenderContext) => void): FrameGraphRenderPass;
17
18
  }
@@ -13,6 +13,9 @@ export class FrameGraphConvolutionTask extends FrameGraphPostProcessTask {
13
13
  constructor(name, frameGraph, thinPostProcess) {
14
14
  super(name, frameGraph, thinPostProcess || new ThinConvolutionPostProcess(name, frameGraph.engine, ThinConvolutionPostProcess.EmbossKernel));
15
15
  }
16
+ getClassName() {
17
+ return "FrameGraphConvolutionTask";
18
+ }
16
19
  record(skipCreationOfDisabledPasses = false, additionalExecute, additionalBindings) {
17
20
  const pass = super.record(skipCreationOfDisabledPasses, additionalExecute, additionalBindings);
18
21
  this.postProcess.textureWidth = this._sourceWidth;
@@ -1 +1 @@
1
- {"version":3,"file":"convolutionTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/convolutionTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,6DAAsD;AAE3F;;GAEG;AACH,MAAM,OAAO,yBAA0B,SAAQ,yBAAyB;IAGpE;;;;;OAKG;IACH,YAAY,IAAY,EAAE,UAAsB,EAAE,eAA4C;QAC1F,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI,0BAA0B,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,0BAA0B,CAAC,YAAY,CAAC,CAAC,CAAC;IACjJ,CAAC;IAEe,MAAM,CAClB,4BAA4B,GAAG,KAAK,EACpC,iBAA8D,EAC9D,kBAA+D;QAE/D,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,4BAA4B,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;QAE/F,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QAClD,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QAEpD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ","sourcesContent":["import type { FrameGraph, FrameGraphRenderContext, FrameGraphRenderPass } from \"core/index\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\nimport { ThinConvolutionPostProcess } from \"core/PostProcesses/thinConvolutionPostProcess\";\r\n\r\n/**\r\n * Task which applies a convolution post process.\r\n */\r\nexport class FrameGraphConvolutionTask extends FrameGraphPostProcessTask {\r\n public override readonly postProcess: ThinConvolutionPostProcess;\r\n\r\n /**\r\n * Constructs a new convolution task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph this task belongs to.\r\n * @param thinPostProcess The thin post process to use for the task. If not provided, a new one will be created.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinConvolutionPostProcess) {\r\n super(name, frameGraph, thinPostProcess || new ThinConvolutionPostProcess(name, frameGraph.engine, ThinConvolutionPostProcess.EmbossKernel));\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._sourceWidth;\r\n this.postProcess.textureHeight = this._sourceHeight;\r\n\r\n return pass;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"convolutionTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/convolutionTask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,6DAAsD;AAE3F;;GAEG;AACH,MAAM,OAAO,yBAA0B,SAAQ,yBAAyB;IAGpE;;;;;OAKG;IACH,YAAY,IAAY,EAAE,UAAsB,EAAE,eAA4C;QAC1F,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,IAAI,IAAI,0BAA0B,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,0BAA0B,CAAC,YAAY,CAAC,CAAC,CAAC;IACjJ,CAAC;IAEe,YAAY;QACxB,OAAO,2BAA2B,CAAC;IACvC,CAAC;IAEe,MAAM,CAClB,4BAA4B,GAAG,KAAK,EACpC,iBAA8D,EAC9D,kBAA+D;QAE/D,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,4BAA4B,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;QAE/F,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QAClD,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QAEpD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ","sourcesContent":["import type { FrameGraph, FrameGraphRenderContext, FrameGraphRenderPass } from \"core/index\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\nimport { ThinConvolutionPostProcess } from \"core/PostProcesses/thinConvolutionPostProcess\";\r\n\r\n/**\r\n * Task which applies a convolution post process.\r\n */\r\nexport class FrameGraphConvolutionTask extends FrameGraphPostProcessTask {\r\n public override readonly postProcess: ThinConvolutionPostProcess;\r\n\r\n /**\r\n * Constructs a new convolution task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph this task belongs to.\r\n * @param thinPostProcess The thin post process to use for the task. If not provided, a new one will be created.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, thinPostProcess?: ThinConvolutionPostProcess) {\r\n super(name, frameGraph, thinPostProcess || new ThinConvolutionPostProcess(name, frameGraph.engine, ThinConvolutionPostProcess.EmbossKernel));\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphConvolutionTask\";\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._sourceWidth;\r\n this.postProcess.textureHeight = this._sourceHeight;\r\n\r\n return pass;\r\n }\r\n}\r\n"]}
@@ -18,4 +18,5 @@ export declare class FrameGraphCustomPostProcessTask extends FrameGraphPostProce
18
18
  * @param options Options to configure the post process
19
19
  */
20
20
  constructor(name: string, frameGraph: FrameGraph, options: EffectWrapperCreationOptions);
21
+ getClassName(): string;
21
22
  }
@@ -14,5 +14,8 @@ export class FrameGraphCustomPostProcessTask extends FrameGraphPostProcessTask {
14
14
  super(name, frameGraph, new ThinCustomPostProcess(name, frameGraph.engine, options));
15
15
  this.onApplyObservable = this.postProcess.onBindObservable;
16
16
  }
17
+ getClassName() {
18
+ return "FrameGraphCustomPostProcessTask";
19
+ }
17
20
  }
18
21
  //# sourceMappingURL=customPostProcessTask.js.map