@onerjs/core 8.33.4 → 8.33.6

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 (73) hide show
  1. package/Engines/WebGPU/Extensions/engine.multiRender.js +5 -10
  2. package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
  3. package/Engines/WebGPU/Extensions/engine.renderTarget.js +4 -2
  4. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  5. package/Engines/WebGPU/webgpuHardwareTexture.d.ts +4 -3
  6. package/Engines/WebGPU/webgpuHardwareTexture.js +27 -21
  7. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  8. package/Engines/WebGPU/webgpuTextureManager.d.ts +5 -4
  9. package/Engines/WebGPU/webgpuTextureManager.js +20 -30
  10. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  11. package/Engines/engine.d.ts +1 -0
  12. package/Engines/thinEngine.js +9 -1
  13. package/Engines/thinEngine.js.map +1 -1
  14. package/Engines/thinWebGPUEngine.js +2 -3
  15. package/Engines/thinWebGPUEngine.js.map +1 -1
  16. package/Engines/webgpuEngine.js +28 -13
  17. package/Engines/webgpuEngine.js.map +1 -1
  18. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +2 -2
  19. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
  20. package/FrameGraph/Node/Blocks/Textures/clearBlock.d.ts +1 -1
  21. package/FrameGraph/Node/Blocks/Textures/clearBlock.js +2 -2
  22. package/FrameGraph/Node/Blocks/Textures/clearBlock.js.map +1 -1
  23. package/FrameGraph/Node/Blocks/inputBlock.js +4 -0
  24. package/FrameGraph/Node/Blocks/inputBlock.js.map +1 -1
  25. package/FrameGraph/Node/nodeRenderGraphBlock.d.ts +1 -0
  26. package/FrameGraph/Node/nodeRenderGraphBlock.js +19 -0
  27. package/FrameGraph/Node/nodeRenderGraphBlock.js.map +1 -1
  28. package/FrameGraph/Passes/renderPass.d.ts +16 -0
  29. package/FrameGraph/Passes/renderPass.js +12 -0
  30. package/FrameGraph/Passes/renderPass.js.map +1 -1
  31. package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +3 -3
  32. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +3 -2
  33. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  34. package/FrameGraph/Tasks/Texture/clearTextureTask.d.ts +2 -2
  35. package/FrameGraph/Tasks/Texture/clearTextureTask.js +3 -2
  36. package/FrameGraph/Tasks/Texture/clearTextureTask.js.map +1 -1
  37. package/FrameGraph/frameGraphRenderContext.js +4 -15
  38. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  39. package/FrameGraph/frameGraphTask.d.ts +2 -2
  40. package/FrameGraph/frameGraphTask.js +6 -6
  41. package/FrameGraph/frameGraphTask.js.map +1 -1
  42. package/FrameGraph/frameGraphTaskMultiRenderTarget.d.ts +15 -0
  43. package/FrameGraph/frameGraphTaskMultiRenderTarget.js +25 -0
  44. package/FrameGraph/frameGraphTaskMultiRenderTarget.js.map +1 -0
  45. package/FrameGraph/frameGraphTextureManager.js +13 -2
  46. package/FrameGraph/frameGraphTextureManager.js.map +1 -1
  47. package/FrameGraph/frameGraphTypes.d.ts +9 -1
  48. package/FrameGraph/frameGraphTypes.js.map +1 -1
  49. package/Loading/Plugins/babylonFileLoader.js +13 -0
  50. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  51. package/Materials/Textures/baseTexture.d.ts +4 -0
  52. package/Materials/Textures/baseTexture.js +4 -0
  53. package/Materials/Textures/baseTexture.js.map +1 -1
  54. package/Materials/Textures/textureCreationOptions.d.ts +2 -0
  55. package/Materials/Textures/textureCreationOptions.js +0 -1
  56. package/Materials/Textures/textureCreationOptions.js.map +1 -1
  57. package/Meshes/abstractMesh.js +1 -1
  58. package/Meshes/abstractMesh.js.map +1 -1
  59. package/Meshes/geometry.js +1 -0
  60. package/Meshes/geometry.js.map +1 -1
  61. package/Misc/decorators.serialization.js +1 -1
  62. package/Misc/decorators.serialization.js.map +1 -1
  63. package/Particles/solidParticleSystem.d.ts +2 -1
  64. package/Particles/solidParticleSystem.js.map +1 -1
  65. package/Shaders/ShadersInclude/shadowsFragmentFunctions.js +4 -12
  66. package/Shaders/ShadersInclude/shadowsFragmentFunctions.js.map +1 -1
  67. package/Shaders/picking.vertex.js +2 -2
  68. package/Shaders/picking.vertex.js.map +1 -1
  69. package/ShadersWGSL/ShadersInclude/shadowsFragmentFunctions.js +8 -14
  70. package/ShadersWGSL/ShadersInclude/shadowsFragmentFunctions.js.map +1 -1
  71. package/ShadersWGSL/picking.vertex.js +2 -2
  72. package/ShadersWGSL/picking.vertex.js.map +1 -1
  73. package/package.json +5 -2
@@ -1 +1 @@
1
- {"version":3,"file":"frameGraphTextureManager.js","sourceRoot":"","sources":["../../../../dev/core/src/FrameGraph/frameGraphTextureManager.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\r\n Scene,\r\n AbstractEngine,\r\n TextureSize,\r\n Nullable,\r\n FrameGraphTextureCreationOptions,\r\n FrameGraphTextureHandle,\r\n InternalTextureCreationOptions,\r\n InternalTexture,\r\n FrameGraphTextureOptions,\r\n FrameGraphTextureDescription,\r\n RenderTargetWrapper,\r\n FrameGraphTask,\r\n IFrameGraphPass,\r\n} from \"core/index\";\r\nimport { getDimensionsFromTextureSize, textureSizeIsObject } from \"../Materials/Textures/textureCreationOptions\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { backbufferColorTextureHandle, backbufferDepthStencilTextureHandle } from \"./frameGraphTypes\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { InternalTextureSource } from \"../Materials/Textures/internalTexture\";\r\nimport { FrameGraphRenderTarget } from \"./frameGraphRenderTarget\";\r\nimport { FrameGraphRenderPass } from \"./Passes/renderPass\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { GetTypeForDepthTexture, IsDepthTexture, HasStencilAspect } from \"core/Materials/Textures/textureHelper.functions\";\r\n\r\ntype HistoryTexture = {\r\n textures: Array<Nullable<InternalTexture>>;\r\n handles: Array<FrameGraphTextureHandle>;\r\n index: number; // current index in textures array - in the current frame, textures[index] is the write texture, textures[index^1] is the read texture - index is flipped at the end of each frame\r\n references: Array<{ renderTargetWrapper: RenderTargetWrapper; textureIndex: number }>; // render target wrappers that reference this history texture\r\n};\r\n\r\ntype TextureLifespan = {\r\n firstTask: number;\r\n lastTask: number;\r\n};\r\n\r\ntype TextureEntry = {\r\n texture: Nullable<InternalTexture>;\r\n name: string;\r\n creationOptions: FrameGraphTextureCreationOptions; // in TextureEntry, creationOptions.size is always an object\r\n namespace: FrameGraphTextureNamespace;\r\n textureIndex?: number; // Index of the texture in the types, formats, etc array of FrameGraphTextureOptions (default: 0)\r\n debug?: Texture;\r\n refHandle?: FrameGraphTextureHandle; // Handle of the texture this one is referencing - used for dangling handles\r\n textureDescriptionHash?: string; // a hash of the texture creation options\r\n lifespan?: TextureLifespan;\r\n aliasHandle?: FrameGraphTextureHandle; // Handle of the texture this one is aliasing - can be set after execution of texture allocation optimization\r\n historyTexture?: boolean; // True if the texture is part of a history texture\r\n};\r\n\r\nenum FrameGraphTextureNamespace {\r\n Task,\r\n Graph,\r\n External,\r\n}\r\n\r\n/**\r\n * Manages the textures used by a frame graph\r\n * @experimental\r\n */\r\nexport class FrameGraphTextureManager {\r\n private static _Counter = 2; // 0 and 1 are reserved for backbuffer textures\r\n\r\n /** @internal */\r\n public readonly _textures: Map<FrameGraphTextureHandle, TextureEntry> = new Map();\r\n\r\n /** @internal */\r\n public readonly _historyTextures: Map<FrameGraphTextureHandle, HistoryTexture> = new Map();\r\n\r\n /** @internal */\r\n public _isRecordingTask = false;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if debug logs should be shown when applying texture allocation optimization (default: false)\r\n */\r\n public showDebugLogsForTextureAllcationOptimization = false;\r\n\r\n private _backBufferTextureEntry: Nullable<TextureEntry> = null;\r\n private _backBufferDepthStencilTextureEntry: Nullable<TextureEntry> = null;\r\n private _backBufferTextureOverriden = false;\r\n\r\n /**\r\n * Constructs a new instance of the texture manager\r\n * @param engine The engine to use\r\n * @param _debugTextures If true, debug textures will be created so that they are visible in the inspector\r\n * @param _scene The scene the manager belongs to\r\n */\r\n constructor(\r\n public readonly engine: AbstractEngine,\r\n private readonly _debugTextures = false,\r\n private readonly _scene: Scene\r\n ) {\r\n this._addSystemTextures();\r\n }\r\n\r\n /**\r\n * Checks if a handle is a backbuffer handle (color or depth/stencil)\r\n * @param handle The handle to check\r\n * @returns True if the handle is a backbuffer handle\r\n */\r\n public isBackbuffer(handle: FrameGraphTextureHandle): boolean {\r\n if (this._backBufferTextureOverriden) {\r\n return false;\r\n }\r\n\r\n return this._isBackbuffer(handle);\r\n }\r\n\r\n /** @internal */\r\n public _isBackbuffer(handle: FrameGraphTextureHandle): boolean {\r\n if (handle === backbufferColorTextureHandle || handle === backbufferDepthStencilTextureHandle) {\r\n return true;\r\n }\r\n\r\n const textureEntry = this._textures.get(handle);\r\n if (!textureEntry) {\r\n return false;\r\n }\r\n\r\n return textureEntry.refHandle === backbufferColorTextureHandle || textureEntry.refHandle === backbufferDepthStencilTextureHandle;\r\n }\r\n\r\n /**\r\n * Checks if a handle is a backbuffer color handle\r\n * @param handle The handle to check\r\n * @returns True if the handle is a backbuffer color handle\r\n */\r\n public isBackbufferColor(handle: FrameGraphTextureHandle): boolean {\r\n if (this._backBufferTextureOverriden) {\r\n return false;\r\n }\r\n\r\n if (handle === backbufferColorTextureHandle) {\r\n return true;\r\n }\r\n\r\n const textureEntry = this._textures.get(handle);\r\n if (!textureEntry) {\r\n return false;\r\n }\r\n\r\n return textureEntry.refHandle === backbufferColorTextureHandle;\r\n }\r\n\r\n /**\r\n * Checks if a handle is a backbuffer depth/stencil handle\r\n * @param handle The handle to check\r\n * @returns True if the handle is a backbuffer depth/stencil handle\r\n */\r\n public isBackbufferDepthStencil(handle: FrameGraphTextureHandle): boolean {\r\n if (this._backBufferTextureOverriden) {\r\n return false;\r\n }\r\n\r\n if (handle === backbufferDepthStencilTextureHandle) {\r\n return true;\r\n }\r\n\r\n const textureEntry = this._textures.get(handle);\r\n if (!textureEntry) {\r\n return false;\r\n }\r\n\r\n return textureEntry.refHandle === backbufferDepthStencilTextureHandle;\r\n }\r\n\r\n /**\r\n * Checks if a handle is a history texture (or points to a history texture, for a dangling handle)\r\n * @param handle The handle to check\r\n * @param checkAllTextures If false (default), the function will check if the handle is the main handle of a history texture (the first handle of the history texture).\r\n * If true, the function will also check if the handle is one of the other handles of a history texture.\r\n * @returns True if the handle is a history texture, otherwise false\r\n */\r\n public isHistoryTexture(handle: FrameGraphTextureHandle, checkAllTextures = false): boolean {\r\n const entry = this._textures.get(handle);\r\n if (!entry) {\r\n return false;\r\n }\r\n\r\n handle = entry.refHandle ?? handle;\r\n\r\n if (!checkAllTextures) {\r\n return this._historyTextures.has(handle);\r\n }\r\n\r\n return this._textures.get(handle)?.historyTexture === true;\r\n }\r\n\r\n /**\r\n * Gets the creation options of a texture\r\n * @param handle Handle of the texture\r\n * @param preserveHistoryTextureFlag If true, the isHistoryTexture flag in the returned creation options will be the same as when the texture was created (default: false)\r\n * @returns The creation options of the texture\r\n */\r\n public getTextureCreationOptions(handle: FrameGraphTextureHandle, preserveHistoryTextureFlag = false): FrameGraphTextureCreationOptions {\r\n handle = this._textures.get(handle)?.refHandle ?? handle;\r\n\r\n const entry = this._textures.get(handle)!;\r\n const creationOptions = entry.creationOptions;\r\n\r\n return {\r\n size: textureSizeIsObject(creationOptions.size) ? { ...creationOptions.size } : creationOptions.size,\r\n sizeIsPercentage: creationOptions.sizeIsPercentage,\r\n options: FrameGraphTextureManager.CloneTextureOptions(creationOptions.options, entry.textureIndex),\r\n isHistoryTexture: preserveHistoryTextureFlag ? creationOptions.isHistoryTexture : false,\r\n };\r\n }\r\n\r\n /**\r\n * Gets the description of a texture\r\n * @param handle Handle of the texture\r\n * @returns The description of the texture\r\n */\r\n public getTextureDescription(handle: FrameGraphTextureHandle): FrameGraphTextureDescription {\r\n const creationOptions = this.getTextureCreationOptions(handle);\r\n\r\n const size = !creationOptions.sizeIsPercentage\r\n ? textureSizeIsObject(creationOptions.size)\r\n ? creationOptions.size\r\n : { width: creationOptions.size, height: creationOptions.size }\r\n : this.getAbsoluteDimensions(creationOptions.size);\r\n\r\n return {\r\n size,\r\n options: creationOptions.options,\r\n };\r\n }\r\n\r\n /**\r\n * Gets a texture handle or creates a new texture if the handle is not provided.\r\n * If handle is not provided, newTextureName and creationOptions must be provided.\r\n * @param handle If provided, will simply return the handle\r\n * @param newTextureName Name of the new texture to create\r\n * @param creationOptions Options to use when creating the new texture\r\n * @returns The handle to the texture.\r\n */\r\n public getTextureHandleOrCreateTexture(handle?: FrameGraphTextureHandle, newTextureName?: string, creationOptions?: FrameGraphTextureCreationOptions): FrameGraphTextureHandle {\r\n if (handle === undefined) {\r\n if (newTextureName === undefined || creationOptions === undefined) {\r\n throw new Error(\"getTextureHandleOrCreateTexture: Either handle or newTextureName and creationOptions must be provided.\");\r\n }\r\n return this.createRenderTargetTexture(newTextureName, creationOptions);\r\n }\r\n return handle;\r\n }\r\n\r\n /**\r\n * Gets a texture from a handle.\r\n * Note that if the texture is a history texture, the read texture for the current frame will be returned, except if historyGetWriteTexture is true.\r\n * @param handle The handle of the texture\r\n * @param historyGetWriteTexture If true and the texture is a history texture, the write texture for the current frame will be returned (default: false)\r\n * @returns The texture or null if not found\r\n */\r\n public getTextureFromHandle(handle: FrameGraphTextureHandle, historyGetWriteTexture?: boolean): Nullable<InternalTexture> {\r\n const entry = this._textures.get(handle);\r\n const refHandle = entry?.refHandle;\r\n const finalEntry = refHandle !== undefined ? this._textures.get(refHandle) : entry;\r\n const finalHandle = refHandle !== undefined ? refHandle : handle;\r\n\r\n const historyEntry = this._historyTextures.get(finalHandle);\r\n if (historyEntry) {\r\n return historyEntry.textures[historyGetWriteTexture ? historyEntry.index : historyEntry.index ^ 1];\r\n }\r\n return finalEntry!.texture;\r\n }\r\n\r\n /**\r\n * Imports a texture into the texture manager\r\n * @param name Name of the texture\r\n * @param texture Texture to import\r\n * @param handle Existing handle to use for the texture. If not provided (default), a new handle will be created.\r\n * @returns The handle to the texture\r\n */\r\n public importTexture(name: string, texture: InternalTexture, handle?: FrameGraphTextureHandle): FrameGraphTextureHandle {\r\n if (handle !== undefined) {\r\n this._freeEntry(handle);\r\n }\r\n\r\n const creationOptions: FrameGraphTextureCreationOptions = {\r\n size: { width: texture.width, height: texture.height },\r\n sizeIsPercentage: false,\r\n isHistoryTexture: false,\r\n options: {\r\n createMipMaps: texture.generateMipMaps,\r\n samples: texture.samples,\r\n types: [texture.type],\r\n formats: [texture.format],\r\n useSRGBBuffers: [texture._useSRGBBuffer],\r\n creationFlags: [texture._creationFlags],\r\n labels: texture.label ? [texture.label] : [\"imported\"],\r\n },\r\n };\r\n\r\n return this._createHandleForTexture(name, texture, creationOptions, FrameGraphTextureNamespace.External, handle);\r\n }\r\n\r\n /**\r\n * Creates a new render target texture\r\n * If multiple textures are described in FrameGraphTextureCreationOptions, the handle of the first texture is returned, handle+1 is the handle of the second texture, etc.\r\n * @param name Name of the texture\r\n * @param creationOptions Options to use when creating the texture\r\n * @param handle Existing handle to use for the texture. If not provided (default), a new handle will be created.\r\n * @returns The handle to the texture\r\n */\r\n public createRenderTargetTexture(name: string, creationOptions: FrameGraphTextureCreationOptions, handle?: FrameGraphTextureHandle): FrameGraphTextureHandle {\r\n return this._createHandleForTexture(\r\n name,\r\n null,\r\n {\r\n size: textureSizeIsObject(creationOptions.size) ? { ...creationOptions.size } : creationOptions.size,\r\n sizeIsPercentage: creationOptions.sizeIsPercentage,\r\n isHistoryTexture: creationOptions.isHistoryTexture,\r\n options: FrameGraphTextureManager.CloneTextureOptions(creationOptions.options, undefined, true),\r\n },\r\n this._isRecordingTask ? FrameGraphTextureNamespace.Task : FrameGraphTextureNamespace.Graph,\r\n handle\r\n );\r\n }\r\n\r\n /**\r\n * Creates a (frame graph) render target wrapper\r\n * Note that renderTargets or renderTargetDepth can be undefined, but not both at the same time!\r\n * @param name Name of the render target wrapper\r\n * @param renderTargets Render target handles (textures) to use\r\n * @param renderTargetDepth Render target depth handle (texture) to use\r\n * @param depthReadOnly If true, the depth buffer will be read-only\r\n * @param stencilReadOnly If true, the stencil buffer will be read-only\r\n * @returns The created render target wrapper\r\n */\r\n public createRenderTarget(\r\n name: string,\r\n renderTargets?: FrameGraphTextureHandle | FrameGraphTextureHandle[],\r\n renderTargetDepth?: FrameGraphTextureHandle,\r\n depthReadOnly?: boolean,\r\n stencilReadOnly?: boolean\r\n ): FrameGraphRenderTarget {\r\n const renderTarget = new FrameGraphRenderTarget(name, this, renderTargets, renderTargetDepth);\r\n\r\n const rtw = renderTarget.renderTargetWrapper;\r\n\r\n if (rtw !== undefined) {\r\n rtw.depthReadOnly = !!depthReadOnly;\r\n rtw.stencilReadOnly = !!stencilReadOnly;\r\n\r\n if (renderTargets) {\r\n const handles = Array.isArray(renderTargets) ? renderTargets : [renderTargets];\r\n\r\n for (let i = 0; i < handles.length; i++) {\r\n let handle = handles[i];\r\n handle = this._textures.get(handle)?.refHandle ?? handle;\r\n\r\n const historyEntry = this._historyTextures.get(handle);\r\n if (historyEntry) {\r\n historyEntry.references.push({ renderTargetWrapper: rtw, textureIndex: i });\r\n\r\n rtw.setTexture(historyEntry.textures[historyEntry.index]!, i, false);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return renderTarget;\r\n }\r\n\r\n /**\r\n * Creates a handle which is not associated with any texture.\r\n * Call resolveDanglingHandle to associate the handle with a valid texture handle.\r\n * @returns The dangling handle\r\n */\r\n public createDanglingHandle() {\r\n return FrameGraphTextureManager._Counter++;\r\n }\r\n\r\n /**\r\n * Associates a texture with a dangling handle\r\n * @param danglingHandle The dangling handle\r\n * @param handle The handle to associate with the dangling handle (if not provided, a new texture handle will be created, using the newTextureName and creationOptions parameters)\r\n * @param newTextureName The name of the new texture to create (if handle is not provided)\r\n * @param creationOptions The options to use when creating the new texture (if handle is not provided)\r\n */\r\n public resolveDanglingHandle(\r\n danglingHandle: FrameGraphTextureHandle,\r\n handle?: FrameGraphTextureHandle,\r\n newTextureName?: string,\r\n creationOptions?: FrameGraphTextureCreationOptions\r\n ) {\r\n if (handle === undefined) {\r\n if (newTextureName === undefined || creationOptions === undefined) {\r\n throw new Error(\"resolveDanglingHandle: Either handle or newTextureName and creationOptions must be provided.\");\r\n }\r\n this.createRenderTargetTexture(newTextureName, creationOptions, danglingHandle);\r\n return;\r\n }\r\n\r\n const textureEntry = this._textures.get(handle);\r\n\r\n if (textureEntry === undefined) {\r\n throw new Error(`resolveDanglingHandle: Handle ${handle} does not exist!`);\r\n }\r\n\r\n handle = textureEntry.refHandle ?? handle; // gets the refHandle if handle is a (resolved) dangling handle itself\r\n\r\n this._textures.set(danglingHandle, {\r\n texture: textureEntry.texture,\r\n refHandle: handle,\r\n name: textureEntry.name,\r\n creationOptions: {\r\n size: { ...(textureEntry.creationOptions.size as { width: number; height: number; depth?: number; layers?: number }) },\r\n options: FrameGraphTextureManager.CloneTextureOptions(textureEntry.creationOptions.options),\r\n sizeIsPercentage: textureEntry.creationOptions.sizeIsPercentage,\r\n isHistoryTexture: false,\r\n },\r\n namespace: textureEntry.namespace,\r\n textureIndex: textureEntry.textureIndex,\r\n });\r\n }\r\n\r\n /**\r\n * Gets the absolute dimensions of a texture.\r\n * @param size The size of the texture. Width and height must be expressed as a percentage of the screen size (100=100%)!\r\n * @param screenWidth The width of the screen (default: the width of the rendering canvas)\r\n * @param screenHeight The height of the screen (default: the height of the rendering canvas)\r\n * @returns The absolute dimensions of the texture\r\n */\r\n public getAbsoluteDimensions(size: TextureSize, screenWidth?: number, screenHeight?: number): { width: number; height: number } {\r\n if (this._backBufferTextureOverriden) {\r\n const backbufferColorTextureSize = this._textures.get(backbufferColorTextureHandle)!.creationOptions.size as { width: number; height: number };\r\n\r\n screenWidth ??= backbufferColorTextureSize.width;\r\n screenHeight ??= backbufferColorTextureSize.height;\r\n } else {\r\n screenWidth ??= this.engine.getRenderWidth(true);\r\n screenHeight ??= this.engine.getRenderHeight(true);\r\n }\r\n\r\n const { width, height } = getDimensionsFromTextureSize(size);\r\n\r\n return {\r\n width: Math.floor((width * screenWidth) / 100),\r\n height: Math.floor((height * screenHeight) / 100),\r\n };\r\n }\r\n\r\n /**\r\n * Gets the absolute dimensions of a texture from its handle or creation options.\r\n * @param handleOrCreationOptions The handle or creation options of the texture\r\n * @returns The absolute dimensions of the texture\r\n */\r\n public getTextureAbsoluteDimensions(handleOrCreationOptions: FrameGraphTextureHandle | FrameGraphTextureCreationOptions): { width: number; height: number } {\r\n if (typeof handleOrCreationOptions === \"number\") {\r\n handleOrCreationOptions = this.getTextureCreationOptions(handleOrCreationOptions);\r\n }\r\n\r\n return !handleOrCreationOptions.sizeIsPercentage\r\n ? textureSizeIsObject(handleOrCreationOptions.size)\r\n ? handleOrCreationOptions.size\r\n : { width: handleOrCreationOptions.size, height: handleOrCreationOptions.size }\r\n : this.getAbsoluteDimensions(handleOrCreationOptions.size);\r\n }\r\n\r\n /**\r\n * Calculates the total byte size of all textures used by the frame graph texture manager (including external textures)\r\n * @param optimizedSize True if the calculation should not factor in aliased textures\r\n * @param outputWidth The output width of the frame graph. Will be used to calculate the size of percentage-based textures\r\n * @param outputHeight The output height of the frame graph. Will be used to calculate the size of percentage-based textures\r\n * @returns The total size of all textures\r\n */\r\n public computeTotalTextureSize(optimizedSize: boolean, outputWidth: number, outputHeight: number) {\r\n let totalSize = 0;\r\n\r\n this._textures.forEach((entry, handle) => {\r\n if (\r\n (!this._backBufferTextureOverriden && (handle === backbufferColorTextureHandle || handle === backbufferDepthStencilTextureHandle)) ||\r\n entry.refHandle !== undefined\r\n ) {\r\n return;\r\n }\r\n if (optimizedSize && entry.aliasHandle !== undefined) {\r\n return;\r\n }\r\n\r\n const options = entry.creationOptions;\r\n const textureIndex = entry.textureIndex || 0;\r\n const dimensions = options.sizeIsPercentage ? this.getAbsoluteDimensions(options.size, outputWidth, outputHeight) : getDimensionsFromTextureSize(options.size);\r\n\r\n const blockInfo = FrameGraphTextureManager._GetTextureBlockInformation(\r\n options.options.types?.[textureIndex] ?? Constants.TEXTURETYPE_UNSIGNED_BYTE,\r\n options.options.formats![textureIndex]\r\n );\r\n\r\n const textureByteSize = Math.ceil(dimensions.width / blockInfo.width) * Math.ceil(dimensions.height / blockInfo.height) * blockInfo.length;\r\n\r\n let byteSize = textureByteSize;\r\n\r\n if (options.options.createMipMaps) {\r\n byteSize = Math.floor((byteSize * 4) / 3);\r\n }\r\n\r\n if ((options.options.samples || 1) > 1) {\r\n // We need an additional texture in the case of MSAA\r\n byteSize += textureByteSize;\r\n }\r\n\r\n totalSize += byteSize;\r\n });\r\n\r\n return totalSize;\r\n }\r\n\r\n /**\r\n * True if the back buffer texture has been overriden by a call to setBackBufferTexture\r\n */\r\n public get backBufferTextureOverriden() {\r\n return this._backBufferTextureOverriden;\r\n }\r\n\r\n /**\r\n * Overrides the default back buffer color/depth-stencil textures used by the frame graph.\r\n * Note that if both textureCreationOptions and depthStencilTextureCreationOptions are provided,\r\n * the engine will use them to create the back buffer color and depth/stencil textures respectively.\r\n * In that case, width and height are ignored.\r\n * @param width The width of the back buffer color/depth-stencil texture (if 0, the engine's current back buffer color/depth-stencil texture width will be used)\r\n * @param height The height of the back buffer color/depth-stencil texture (if 0, the engine's current back buffer color/depth-stencil texture height will be used)\r\n * @param textureCreationOptions The color texture creation options (optional)\r\n * @param depthStencilTextureCreationOptions The depth/stencil texture creation options (optional)\r\n */\r\n public setBackBufferTextures(\r\n width: number,\r\n height: number,\r\n textureCreationOptions?: FrameGraphTextureCreationOptions,\r\n depthStencilTextureCreationOptions?: FrameGraphTextureCreationOptions\r\n ) {\r\n if ((width === 0 || height === 0) && (!textureCreationOptions || !depthStencilTextureCreationOptions)) {\r\n if (this._backBufferTextureOverriden) {\r\n let entry = this._textures.get(backbufferColorTextureHandle)!;\r\n\r\n entry.texture?.dispose();\r\n entry.texture = null;\r\n entry.debug?.dispose();\r\n entry.debug = undefined;\r\n\r\n entry = this._textures.get(backbufferDepthStencilTextureHandle)!;\r\n entry.texture?.dispose();\r\n entry.texture = null;\r\n entry.debug?.dispose();\r\n entry.debug = undefined;\r\n }\r\n\r\n this._backBufferTextureEntry = null;\r\n this._backBufferDepthStencilTextureEntry = null;\r\n this._backBufferTextureOverriden = false;\r\n\r\n this._addSystemTextures();\r\n return;\r\n }\r\n\r\n this._backBufferTextureOverriden = true;\r\n\r\n const size = { width, height };\r\n\r\n this._backBufferTextureEntry = {\r\n name: \"backbuffer color\",\r\n texture: null,\r\n creationOptions: textureCreationOptions ?? {\r\n size,\r\n options: {\r\n createMipMaps: false,\r\n samples: this.engine.getCreationOptions().antialias ? 4 : 1,\r\n types: [Constants.TEXTURETYPE_UNSIGNED_BYTE],\r\n formats: [Constants.TEXTUREFORMAT_RGBA],\r\n useSRGBBuffers: [false],\r\n creationFlags: [0],\r\n labels: [\"backbuffer color\"],\r\n },\r\n sizeIsPercentage: false,\r\n },\r\n namespace: FrameGraphTextureNamespace.Graph,\r\n lifespan: {\r\n firstTask: Number.MAX_VALUE,\r\n lastTask: 0,\r\n },\r\n };\r\n this._backBufferTextureEntry.textureDescriptionHash = this._createTextureDescriptionHash(this._backBufferTextureEntry.creationOptions);\r\n\r\n this._backBufferDepthStencilTextureEntry = {\r\n name: \"backbuffer depth/stencil\",\r\n texture: null,\r\n creationOptions: depthStencilTextureCreationOptions ?? {\r\n size,\r\n options: {\r\n createMipMaps: false,\r\n samples: this.engine.getCreationOptions().antialias ? 4 : 1,\r\n types: [Constants.TEXTURETYPE_UNSIGNED_BYTE],\r\n formats: [this.engine.isStencilEnable ? Constants.TEXTUREFORMAT_DEPTH24_STENCIL8 : Constants.TEXTUREFORMAT_DEPTH32_FLOAT],\r\n useSRGBBuffers: [false],\r\n creationFlags: [0],\r\n labels: [\"backbuffer depth/stencil\"],\r\n },\r\n sizeIsPercentage: false,\r\n },\r\n namespace: FrameGraphTextureNamespace.Graph,\r\n lifespan: {\r\n firstTask: Number.MAX_VALUE,\r\n lastTask: 0,\r\n },\r\n };\r\n this._backBufferDepthStencilTextureEntry.textureDescriptionHash = this._createTextureDescriptionHash(this._backBufferDepthStencilTextureEntry.creationOptions);\r\n\r\n this._addSystemTextures();\r\n }\r\n\r\n /**\r\n * Resets the back buffer color/depth-stencil textures to the default (the engine's current back buffer textures)\r\n * It has no effect if setBackBufferTextures has not been called before.\r\n */\r\n public resetBackBufferTextures() {\r\n this.setBackBufferTextures(0, 0);\r\n }\r\n\r\n /**\r\n * Returns true if the texture manager has at least one history texture\r\n */\r\n public get hasHistoryTextures() {\r\n return this._historyTextures.size > 0;\r\n }\r\n\r\n /** @internal */\r\n public _dispose(): void {\r\n this._releaseTextures();\r\n }\r\n\r\n /** @internal */\r\n public _allocateTextures(tasks?: FrameGraphTask[]): void {\r\n if (tasks) {\r\n this._optimizeTextureAllocation(tasks);\r\n }\r\n\r\n this._textures.forEach((entry) => {\r\n if (!entry.texture) {\r\n if (entry.refHandle !== undefined) {\r\n // entry is a dangling handle which has been resolved to point to refHandle\r\n // We simply update the texture to point to the refHandle texture\r\n const refEntry = this._textures.get(entry.refHandle)!;\r\n\r\n entry.texture = refEntry.texture;\r\n entry.texture?.incrementReferences();\r\n\r\n if (refEntry.refHandle === backbufferColorTextureHandle) {\r\n entry.refHandle = backbufferColorTextureHandle;\r\n }\r\n if (refEntry.refHandle === backbufferDepthStencilTextureHandle) {\r\n entry.refHandle = backbufferDepthStencilTextureHandle;\r\n }\r\n } else if (entry.namespace !== FrameGraphTextureNamespace.External) {\r\n if (entry.aliasHandle !== undefined) {\r\n const aliasEntry = this._textures.get(entry.aliasHandle)!;\r\n\r\n entry.texture = aliasEntry.texture!;\r\n entry.texture.incrementReferences();\r\n } else {\r\n const creationOptions = entry.creationOptions;\r\n const size = creationOptions.sizeIsPercentage ? this.getAbsoluteDimensions(creationOptions.size) : creationOptions.size;\r\n const textureIndex = entry.textureIndex || 0;\r\n\r\n const internalTextureCreationOptions: InternalTextureCreationOptions = {\r\n createMipMaps: creationOptions.options.createMipMaps,\r\n samples: creationOptions.options.samples,\r\n type: creationOptions.options.types?.[textureIndex],\r\n format: creationOptions.options.formats?.[textureIndex],\r\n useSRGBBuffer: creationOptions.options.useSRGBBuffers?.[textureIndex],\r\n creationFlags: creationOptions.options.creationFlags?.[textureIndex],\r\n label: creationOptions.options.labels?.[textureIndex] ?? `${entry.name}${textureIndex > 0 ? \"#\" + textureIndex : \"\"}`,\r\n samplingMode: Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n createMSAATexture: creationOptions.options.samples! > 1,\r\n };\r\n\r\n const isDepthTexture = IsDepthTexture(internalTextureCreationOptions.format!);\r\n const hasStencil = HasStencilAspect(internalTextureCreationOptions.format!);\r\n const source =\r\n isDepthTexture && hasStencil\r\n ? InternalTextureSource.DepthStencil\r\n : isDepthTexture || hasStencil\r\n ? InternalTextureSource.Depth\r\n : InternalTextureSource.RenderTarget;\r\n\r\n const internalTexture = this.engine._createInternalTexture(size, internalTextureCreationOptions, false, source);\r\n\r\n if (isDepthTexture) {\r\n internalTexture.type = GetTypeForDepthTexture(internalTexture.format);\r\n }\r\n\r\n entry.texture = internalTexture;\r\n }\r\n }\r\n }\r\n\r\n if (entry.texture && entry.refHandle === undefined) {\r\n entry.debug?.dispose();\r\n entry.debug = this._createDebugTexture(entry.name, entry.texture);\r\n }\r\n });\r\n\r\n this._historyTextures.forEach((entry) => {\r\n for (let i = 0; i < entry.handles.length; i++) {\r\n entry.textures[i] = this._textures.get(entry.handles[i])!.texture;\r\n }\r\n });\r\n }\r\n\r\n /** @internal */\r\n public _releaseTextures(releaseAll = true): void {\r\n this._textures.forEach((entry, handle) => {\r\n if (entry.lifespan) {\r\n entry.lifespan.firstTask = Number.MAX_VALUE;\r\n entry.lifespan.lastTask = 0;\r\n }\r\n\r\n entry.aliasHandle = undefined;\r\n\r\n if (releaseAll || entry.namespace !== FrameGraphTextureNamespace.External) {\r\n entry.debug?.dispose();\r\n entry.debug = undefined;\r\n }\r\n\r\n if (entry.namespace === FrameGraphTextureNamespace.External) {\r\n return;\r\n }\r\n\r\n // We dispose of \"Graph\" and \"Task\" textures:\r\n // - \"Graph\" textures will be recreated by _allocateTextures because the entry still exists in this._textures, but entry.texture is null\r\n // - \"Task\" textures will be re-added to this._textures when the task is recorded (by a call to FrameGraph.build): that's why we delete the entry from this._textures below\r\n entry.texture?.dispose();\r\n entry.texture = null;\r\n\r\n if (releaseAll || entry.namespace === FrameGraphTextureNamespace.Task) {\r\n this._textures.delete(handle);\r\n this._historyTextures.delete(handle);\r\n }\r\n });\r\n\r\n this._historyTextures.forEach((entry) => {\r\n for (let i = 0; i < entry.handles.length; i++) {\r\n entry.textures[i] = null;\r\n }\r\n });\r\n\r\n if (releaseAll) {\r\n this._textures.clear();\r\n this._historyTextures.clear();\r\n this._addSystemTextures();\r\n }\r\n }\r\n\r\n /** @internal */\r\n public _updateHistoryTextures(): void {\r\n this._historyTextures.forEach((entry) => {\r\n entry.index = entry.index ^ 1;\r\n const currentTexture = entry.textures[entry.index];\r\n if (currentTexture) {\r\n for (const { renderTargetWrapper, textureIndex } of entry.references) {\r\n renderTargetWrapper.setTexture(currentTexture, textureIndex, false);\r\n }\r\n }\r\n });\r\n }\r\n\r\n private _addSystemTextures() {\r\n const size = { width: this.engine.getRenderWidth(true), height: this.engine.getRenderHeight(true) };\r\n\r\n this._textures.set(\r\n backbufferColorTextureHandle,\r\n this._backBufferTextureEntry ?? {\r\n name: \"backbuffer color\",\r\n texture: null,\r\n creationOptions: {\r\n size,\r\n options: {\r\n createMipMaps: false,\r\n samples: this.engine.getCreationOptions().antialias ? 4 : 1,\r\n types: [Constants.TEXTURETYPE_UNSIGNED_BYTE], // todo? get from engine\r\n formats: [Constants.TEXTUREFORMAT_RGBA], // todo? get from engine\r\n useSRGBBuffers: [false],\r\n creationFlags: [0],\r\n labels: [\"backbuffer color\"],\r\n },\r\n sizeIsPercentage: false,\r\n },\r\n namespace: FrameGraphTextureNamespace.External,\r\n }\r\n );\r\n\r\n this._textures.set(\r\n backbufferDepthStencilTextureHandle,\r\n this._backBufferDepthStencilTextureEntry ?? {\r\n name: \"backbuffer depth/stencil\",\r\n texture: null,\r\n creationOptions: {\r\n size,\r\n options: {\r\n createMipMaps: false,\r\n samples: this.engine.getCreationOptions().antialias ? 4 : 1,\r\n types: [Constants.TEXTURETYPE_UNSIGNED_BYTE], // todo? get from engine\r\n formats: [Constants.TEXTUREFORMAT_DEPTH24], // todo? get from engine\r\n useSRGBBuffers: [false],\r\n creationFlags: [0],\r\n labels: [\"backbuffer depth/stencil\"],\r\n },\r\n sizeIsPercentage: false,\r\n },\r\n namespace: FrameGraphTextureNamespace.External,\r\n }\r\n );\r\n }\r\n\r\n private _createDebugTexture(name: string, texture: InternalTexture): Texture | undefined {\r\n if (!this._debugTextures) {\r\n return;\r\n }\r\n\r\n const textureDebug = new Texture(null, this._scene);\r\n\r\n textureDebug.name = name;\r\n textureDebug._texture = texture;\r\n textureDebug._texture.incrementReferences();\r\n\r\n return textureDebug;\r\n }\r\n\r\n private _freeEntry(handle: number): void {\r\n const entry = this._textures.get(handle);\r\n\r\n if (entry) {\r\n entry.debug?.dispose();\r\n this._textures.delete(handle);\r\n }\r\n }\r\n\r\n private _createHandleForTexture(\r\n name: string,\r\n texture: Nullable<InternalTexture>,\r\n creationOptions: FrameGraphTextureCreationOptions,\r\n namespace: FrameGraphTextureNamespace,\r\n handle?: FrameGraphTextureHandle,\r\n textureIndex?: number\r\n ): FrameGraphTextureHandle {\r\n handle = handle ?? FrameGraphTextureManager._Counter++;\r\n textureIndex = textureIndex || 0;\r\n\r\n const textureName = creationOptions.isHistoryTexture ? `${name} ping` : name;\r\n\r\n let label = creationOptions.options.labels?.[textureIndex] ?? \"\";\r\n if (label === textureName) {\r\n label = \"\";\r\n }\r\n\r\n const textureEntry: TextureEntry = {\r\n texture,\r\n name: `${textureName}${label ? \" \" + label : \"\"}`,\r\n creationOptions: {\r\n size: textureSizeIsObject(creationOptions.size) ? creationOptions.size : { width: creationOptions.size, height: creationOptions.size },\r\n options: creationOptions.options,\r\n sizeIsPercentage: creationOptions.sizeIsPercentage,\r\n isHistoryTexture: creationOptions.isHistoryTexture,\r\n },\r\n namespace,\r\n textureIndex,\r\n textureDescriptionHash: this._createTextureDescriptionHash(creationOptions),\r\n lifespan: {\r\n firstTask: Number.MAX_VALUE,\r\n lastTask: 0,\r\n },\r\n historyTexture: creationOptions.isHistoryTexture,\r\n };\r\n\r\n this._textures.set(handle, textureEntry);\r\n\r\n if (namespace === FrameGraphTextureNamespace.External) {\r\n return handle;\r\n }\r\n\r\n if (creationOptions.isHistoryTexture) {\r\n const pongCreationOptions: FrameGraphTextureCreationOptions = {\r\n size: { ...(textureEntry.creationOptions.size as { width: number; height: number }) },\r\n options: { ...textureEntry.creationOptions.options },\r\n sizeIsPercentage: textureEntry.creationOptions.sizeIsPercentage,\r\n isHistoryTexture: false,\r\n };\r\n\r\n const pongTexture = this._createHandleForTexture(`${name} pong`, null, pongCreationOptions, namespace);\r\n\r\n this._textures.get(pongTexture)!.historyTexture = true;\r\n this._historyTextures.set(handle, { textures: [null, null], handles: [handle, pongTexture], index: 0, references: [] });\r\n\r\n return handle;\r\n }\r\n\r\n if (creationOptions.options.types && creationOptions.options.types.length > 1 && textureIndex === 0) {\r\n const textureCount = creationOptions.options.types.length;\r\n const creationOptionsForTexture: FrameGraphTextureCreationOptions = {\r\n size: textureSizeIsObject(creationOptions.size) ? creationOptions.size : { width: creationOptions.size, height: creationOptions.size },\r\n options: creationOptions.options,\r\n sizeIsPercentage: creationOptions.sizeIsPercentage,\r\n };\r\n\r\n for (let i = 1; i < textureCount; i++) {\r\n this._createHandleForTexture(textureName, null, creationOptionsForTexture, namespace, handle + i, i);\r\n }\r\n\r\n FrameGraphTextureManager._Counter += textureCount - 1;\r\n }\r\n\r\n return handle;\r\n }\r\n\r\n private _createTextureDescriptionHash(options: FrameGraphTextureCreationOptions): string {\r\n const hash: string[] = [];\r\n\r\n hash.push(textureSizeIsObject(options.size) ? `${options.size.width}_${options.size.height}` : `${options.size}`);\r\n hash.push(options.sizeIsPercentage ? \"%\" : \"A\");\r\n hash.push(options.options.createMipMaps ? \"M\" : \"N\");\r\n hash.push(options.options.samples ? `${options.options.samples}` : \"S1\");\r\n hash.push(options.options.types ? options.options.types.join(\"_\") : `${Constants.TEXTURETYPE_UNSIGNED_BYTE}`);\r\n hash.push(options.options.formats ? options.options.formats.join(\"_\") : `${Constants.TEXTUREFORMAT_RGBA}`);\r\n hash.push(options.options.useSRGBBuffers ? options.options.useSRGBBuffers.join(\"_\") : \"false\");\r\n hash.push(options.options.creationFlags ? options.options.creationFlags.join(\"_\") : \"0\");\r\n\r\n return hash.join(\"_\");\r\n }\r\n\r\n private _optimizeTextureAllocation(tasks: FrameGraphTask[]): void {\r\n this._computeTextureLifespan(tasks);\r\n\r\n if (this.showDebugLogsForTextureAllcationOptimization) {\r\n Logger.Log(`================== Optimization of texture allocation ==================`);\r\n }\r\n\r\n const cache: Map<string, Array<[FrameGraphTextureHandle, Array<TextureLifespan>]>> = new Map();\r\n\r\n const iterator = this._textures.keys();\r\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\r\n const textureHandle = key.value;\r\n const textureEntry = this._textures.get(textureHandle)!;\r\n if (textureEntry.refHandle !== undefined || textureEntry.namespace === FrameGraphTextureNamespace.External || this.isHistoryTexture(textureHandle, true)) {\r\n continue;\r\n }\r\n\r\n const textureHash = textureEntry.textureDescriptionHash!;\r\n const textureLifespan = textureEntry.lifespan!;\r\n\r\n const cacheEntries = cache.get(textureHash);\r\n if (cacheEntries) {\r\n let cacheEntryFound = false;\r\n for (const cacheEntry of cacheEntries) {\r\n const [sourceHandle, lifespanArray] = cacheEntry;\r\n\r\n let overlapped = false;\r\n for (const lifespan of lifespanArray) {\r\n if (lifespan.firstTask <= textureLifespan.lastTask && lifespan.lastTask >= textureLifespan.firstTask) {\r\n overlapped = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!overlapped) {\r\n // No overlap between texture lifespan and all lifespans in the array, this texture can reuse the same entry cache\r\n if (this.showDebugLogsForTextureAllcationOptimization) {\r\n Logger.Log(`Texture ${textureHandle} (${textureEntry.name}) reuses cache entry ${sourceHandle}`);\r\n }\r\n\r\n lifespanArray.push(textureLifespan);\r\n textureEntry.aliasHandle = sourceHandle;\r\n cacheEntryFound = true;\r\n break;\r\n }\r\n }\r\n if (!cacheEntryFound) {\r\n cacheEntries.push([textureHandle, [textureLifespan]]);\r\n }\r\n } else {\r\n cache.set(textureHash, [[textureHandle, [textureLifespan]]]);\r\n }\r\n }\r\n }\r\n\r\n // Loop through all task/pass dependencies and compute the lifespan of each texture (that is, the first task/pass that uses it and the last task/pass that uses it)\r\n private _computeTextureLifespan(tasks: FrameGraphTask[]): void {\r\n if (this.showDebugLogsForTextureAllcationOptimization) {\r\n Logger.Log(`================== Dump of texture dependencies for all tasks/passes ==================`);\r\n }\r\n\r\n for (let t = 0; t < tasks.length; ++t) {\r\n const task = tasks[t];\r\n\r\n if (task.passes.length > 0) {\r\n this._computeTextureLifespanForPasses(task, t, task.passes);\r\n }\r\n\r\n if (task.passesDisabled.length > 0) {\r\n this._computeTextureLifespanForPasses(task, t, task.passesDisabled);\r\n }\r\n\r\n if (task.dependencies) {\r\n if (this.showDebugLogsForTextureAllcationOptimization) {\r\n Logger.Log(`task#${t} (${task.name}), global dependencies`);\r\n }\r\n\r\n this._updateLifespan(t * 100 + 99, task.dependencies);\r\n }\r\n }\r\n\r\n if (this.showDebugLogsForTextureAllcationOptimization) {\r\n Logger.Log(`================== Texture lifespans ==================`);\r\n const iterator = this._textures.keys();\r\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\r\n const textureHandle = key.value;\r\n const textureEntry = this._textures.get(textureHandle)!;\r\n if (textureEntry.refHandle !== undefined || textureEntry.namespace === FrameGraphTextureNamespace.External || this._historyTextures.has(textureHandle)) {\r\n continue;\r\n }\r\n Logger.Log(`${textureHandle} (${textureEntry.name}): ${textureEntry.lifespan!.firstTask} - ${textureEntry.lifespan!.lastTask}`);\r\n }\r\n }\r\n }\r\n\r\n private _computeTextureLifespanForPasses(task: FrameGraphTask, taskIndex: number, passes: IFrameGraphPass[]): void {\r\n for (let p = 0; p < passes.length; ++p) {\r\n const dependencies = new Set<FrameGraphTextureHandle>();\r\n const pass = passes[p];\r\n\r\n if (!FrameGraphRenderPass.IsRenderPass(pass)) {\r\n continue;\r\n }\r\n\r\n pass.collectDependencies(dependencies);\r\n\r\n if (this.showDebugLogsForTextureAllcationOptimization) {\r\n Logger.Log(`task#${taskIndex} (${task.name}), pass#${p} (${pass.name})`);\r\n }\r\n\r\n this._updateLifespan(taskIndex * 100 + p, dependencies);\r\n }\r\n }\r\n\r\n private _updateLifespan(passOrderNum: number, dependencies: Set<FrameGraphTextureHandle>) {\r\n const iterator = dependencies.keys();\r\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\r\n const textureHandle = key.value;\r\n if (this.isBackbuffer(textureHandle)) {\r\n continue;\r\n }\r\n let textureEntry = this._textures.get(textureHandle);\r\n if (!textureEntry) {\r\n throw new Error(\r\n `FrameGraph._computeTextureLifespan: Texture handle \"${textureHandle}\" not found in the texture manager. Make sure you didn't forget to add a task in the frame graph.`\r\n );\r\n }\r\n let handle = textureHandle;\r\n while (textureEntry.refHandle !== undefined) {\r\n handle = textureEntry.refHandle;\r\n textureEntry = this._textures.get(handle);\r\n if (!textureEntry) {\r\n throw new Error(\r\n `FrameGraph._computeTextureLifespan: Texture handle \"${handle}\" not found in the texture manager (source handle=\"${textureHandle}\"). Make sure you didn't forget to add a task in the frame graph.`\r\n );\r\n }\r\n }\r\n if (textureEntry.namespace === FrameGraphTextureNamespace.External || this._historyTextures.has(handle)) {\r\n continue;\r\n }\r\n\r\n if (this.showDebugLogsForTextureAllcationOptimization) {\r\n Logger.Log(` ${handle} (${textureEntry.name})`);\r\n }\r\n\r\n textureEntry.lifespan!.firstTask = Math.min(textureEntry.lifespan!.firstTask, passOrderNum);\r\n textureEntry.lifespan!.lastTask = Math.max(textureEntry.lifespan!.lastTask, passOrderNum);\r\n }\r\n }\r\n\r\n /**\r\n * Clones a texture options\r\n * @param options The options to clone\r\n * @param textureIndex The index of the texture in the types, formats, etc array of FrameGraphTextureOptions. If not provided, all options are cloned.\r\n * @param preserveLabels True if the labels should be preserved (default: false)\r\n * @returns The cloned options\r\n */\r\n public static CloneTextureOptions(options: FrameGraphTextureOptions, textureIndex?: number, preserveLabels?: boolean): FrameGraphTextureOptions {\r\n return textureIndex !== undefined\r\n ? {\r\n createMipMaps: options.createMipMaps,\r\n samples: options.samples,\r\n types: options.types ? [options.types[textureIndex]] : undefined,\r\n formats: options.formats ? [options.formats[textureIndex]] : undefined,\r\n useSRGBBuffers: options.useSRGBBuffers ? [options.useSRGBBuffers[textureIndex]] : undefined,\r\n creationFlags: options.creationFlags ? [options.creationFlags[textureIndex]] : undefined,\r\n labels: options.labels ? [options.labels[textureIndex]] : undefined,\r\n }\r\n : {\r\n createMipMaps: options.createMipMaps,\r\n samples: options.samples,\r\n types: options.types ? [...options.types] : undefined,\r\n formats: options.formats ? [...options.formats] : undefined,\r\n useSRGBBuffers: options.useSRGBBuffers ? [...options.useSRGBBuffers] : undefined,\r\n creationFlags: options.creationFlags ? [...options.creationFlags] : undefined,\r\n labels: options.labels && preserveLabels ? [...options.labels] : undefined,\r\n };\r\n }\r\n\r\n /**\r\n * Gets the texture block information.\r\n * @param type Type of the texture.\r\n * @param format Format of the texture.\r\n * @returns The texture block information. You can calculate the byte size of the texture by doing: Math.ceil(width / blockInfo.width) * Math.ceil(height / blockInfo.height) * blockInfo.length\r\n */\r\n private static _GetTextureBlockInformation(type: number, format: number): { width: number; height: number; length: number } {\r\n switch (format) {\r\n case Constants.TEXTUREFORMAT_DEPTH16:\r\n return { width: 1, height: 1, length: 2 };\r\n case Constants.TEXTUREFORMAT_DEPTH24:\r\n return { width: 1, height: 1, length: 3 };\r\n case Constants.TEXTUREFORMAT_DEPTH24_STENCIL8:\r\n return { width: 1, height: 1, length: 4 };\r\n case Constants.TEXTUREFORMAT_DEPTH32_FLOAT:\r\n return { width: 1, height: 1, length: 4 };\r\n case Constants.TEXTUREFORMAT_DEPTH32FLOAT_STENCIL8:\r\n return { width: 1, height: 1, length: 5 };\r\n case Constants.TEXTUREFORMAT_STENCIL8:\r\n return { width: 1, height: 1, length: 1 };\r\n\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_BPTC_UNORM:\r\n return { width: 4, height: 4, length: 16 };\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT:\r\n return { width: 4, height: 4, length: 16 };\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGB_BPTC_SIGNED_FLOAT:\r\n return { width: 4, height: 4, length: 16 };\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT5:\r\n return { width: 4, height: 4, length: 16 };\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT3:\r\n return { width: 4, height: 4, length: 16 };\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT1:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGB_S3TC_DXT1:\r\n return { width: 4, height: 4, length: 8 };\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_4x4:\r\n return { width: 4, height: 4, length: 16 };\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGB_ETC1_WEBGL:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGB8_ETC2:\r\n return { width: 4, height: 4, length: 8 };\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA8_ETC2_EAC:\r\n return { width: 4, height: 4, length: 16 };\r\n }\r\n\r\n switch (type) {\r\n case Constants.TEXTURETYPE_BYTE:\r\n case Constants.TEXTURETYPE_UNSIGNED_BYTE:\r\n switch (format) {\r\n case Constants.TEXTUREFORMAT_R:\r\n case Constants.TEXTUREFORMAT_R_INTEGER:\r\n case Constants.TEXTUREFORMAT_ALPHA:\r\n case Constants.TEXTUREFORMAT_LUMINANCE:\r\n case Constants.TEXTUREFORMAT_LUMINANCE_ALPHA:\r\n return { width: 1, height: 1, length: 1 };\r\n case Constants.TEXTUREFORMAT_RG:\r\n case Constants.TEXTUREFORMAT_RG_INTEGER:\r\n return { width: 1, height: 1, length: 2 };\r\n case Constants.TEXTUREFORMAT_RGB:\r\n case Constants.TEXTUREFORMAT_RGB_INTEGER:\r\n return { width: 1, height: 1, length: 3 };\r\n case Constants.TEXTUREFORMAT_RGBA_INTEGER:\r\n return { width: 1, height: 1, length: 4 };\r\n default:\r\n return { width: 1, height: 1, length: 4 };\r\n }\r\n case Constants.TEXTURETYPE_SHORT:\r\n case Constants.TEXTURETYPE_UNSIGNED_SHORT:\r\n switch (format) {\r\n case Constants.TEXTUREFORMAT_RED_INTEGER:\r\n return { width: 1, height: 1, length: 2 };\r\n case Constants.TEXTUREFORMAT_RG_INTEGER:\r\n return { width: 1, height: 1, length: 4 };\r\n case Constants.TEXTUREFORMAT_RGB_INTEGER:\r\n return { width: 1, height: 1, length: 6 };\r\n case Constants.TEXTUREFORMAT_RGBA_INTEGER:\r\n return { width: 1, height: 1, length: 8 };\r\n default:\r\n return { width: 1, height: 1, length: 8 };\r\n }\r\n case Constants.TEXTURETYPE_INT:\r\n case Constants.TEXTURETYPE_UNSIGNED_INTEGER: // Refers to UNSIGNED_INT\r\n switch (format) {\r\n case Constants.TEXTUREFORMAT_RED_INTEGER:\r\n return { width: 1, height: 1, length: 4 };\r\n case Constants.TEXTUREFORMAT_RG_INTEGER:\r\n return { width: 1, height: 1, length: 8 };\r\n case Constants.TEXTUREFORMAT_RGB_INTEGER:\r\n return { width: 1, height: 1, length: 12 };\r\n case Constants.TEXTUREFORMAT_RGBA_INTEGER:\r\n return { width: 1, height: 1, length: 16 };\r\n default:\r\n return { width: 1, height: 1, length: 16 };\r\n }\r\n case Constants.TEXTURETYPE_FLOAT:\r\n switch (format) {\r\n case Constants.TEXTUREFORMAT_RED:\r\n return { width: 1, height: 1, length: 4 };\r\n case Constants.TEXTUREFORMAT_RG:\r\n return { width: 1, height: 1, length: 8 };\r\n case Constants.TEXTUREFORMAT_RGB:\r\n return { width: 1, height: 1, length: 12 };\r\n case Constants.TEXTUREFORMAT_RGBA:\r\n return { width: 1, height: 1, length: 16 };\r\n default:\r\n return { width: 1, height: 1, length: 16 };\r\n }\r\n case Constants.TEXTURETYPE_HALF_FLOAT:\r\n switch (format) {\r\n case Constants.TEXTUREFORMAT_RED:\r\n return { width: 1, height: 1, length: 2 };\r\n case Constants.TEXTUREFORMAT_RG:\r\n return { width: 1, height: 1, length: 4 };\r\n case Constants.TEXTUREFORMAT_RGB:\r\n return { width: 1, height: 1, length: 6 };\r\n case Constants.TEXTUREFORMAT_RGBA:\r\n return { width: 1, height: 1, length: 8 };\r\n default:\r\n return { width: 1, height: 1, length: 8 };\r\n }\r\n case Constants.TEXTURETYPE_UNSIGNED_SHORT_5_6_5:\r\n return { width: 1, height: 1, length: 2 };\r\n case Constants.TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV:\r\n switch (format) {\r\n case Constants.TEXTUREFORMAT_RGBA:\r\n case Constants.TEXTUREFORMAT_RGBA_INTEGER:\r\n return { width: 1, height: 1, length: 4 };\r\n default:\r\n return { width: 1, height: 1, length: 4 };\r\n }\r\n case Constants.TEXTURETYPE_UNSIGNED_INT_5_9_9_9_REV:\r\n switch (format) {\r\n case Constants.TEXTUREFORMAT_RGBA:\r\n case Constants.TEXTUREFORMAT_RGBA_INTEGER:\r\n return { width: 1, height: 1, length: 4 };\r\n default:\r\n return { width: 1, height: 1, length: 4 };\r\n }\r\n case Constants.TEXTURETYPE_UNSIGNED_SHORT_4_4_4_4:\r\n return { width: 1, height: 1, length: 2 };\r\n case Constants.TEXTURETYPE_UNSIGNED_SHORT_5_5_5_1:\r\n return { width: 1, height: 1, length: 2 };\r\n case Constants.TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV:\r\n switch (format) {\r\n case Constants.TEXTUREFORMAT_RGBA:\r\n return { width: 1, height: 1, length: 4 };\r\n case Constants.TEXTUREFORMAT_RGBA_INTEGER:\r\n return { width: 1, height: 1, length: 4 };\r\n default:\r\n return { width: 1, height: 1, length: 4 };\r\n }\r\n }\r\n\r\n return { width: 1, height: 1, length: 4 };\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"frameGraphTextureManager.js","sourceRoot":"","sources":["../../../../dev/core/src/FrameGraph/frameGraphTextureManager.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\r\n Scene,\r\n AbstractEngine,\r\n TextureSize,\r\n Nullable,\r\n FrameGraphTextureCreationOptions,\r\n FrameGraphTextureHandle,\r\n InternalTextureCreationOptions,\r\n InternalTexture,\r\n FrameGraphTextureOptions,\r\n FrameGraphTextureDescription,\r\n RenderTargetWrapper,\r\n FrameGraphTask,\r\n IFrameGraphPass,\r\n} from \"core/index\";\r\nimport { getDimensionsFromTextureSize, textureSizeIsObject } from \"../Materials/Textures/textureCreationOptions\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { backbufferColorTextureHandle, backbufferDepthStencilTextureHandle } from \"./frameGraphTypes\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { InternalTextureSource } from \"../Materials/Textures/internalTexture\";\r\nimport { FrameGraphRenderTarget } from \"./frameGraphRenderTarget\";\r\nimport { FrameGraphRenderPass } from \"./Passes/renderPass\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { GetTypeForDepthTexture, IsDepthTexture, HasStencilAspect } from \"core/Materials/Textures/textureHelper.functions\";\r\n\r\ntype HistoryTexture = {\r\n textures: Array<Nullable<InternalTexture>>;\r\n handles: Array<FrameGraphTextureHandle>;\r\n index: number; // current index in textures array - in the current frame, textures[index] is the write texture, textures[index^1] is the read texture - index is flipped at the end of each frame\r\n references: Array<{ renderTargetWrapper: RenderTargetWrapper; textureIndex: number }>; // render target wrappers that reference this history texture\r\n};\r\n\r\ntype TextureLifespan = {\r\n firstTask: number;\r\n lastTask: number;\r\n};\r\n\r\ntype TextureEntry = {\r\n texture: Nullable<InternalTexture>;\r\n name: string;\r\n creationOptions: FrameGraphTextureCreationOptions; // in TextureEntry, creationOptions.size is always an object\r\n namespace: FrameGraphTextureNamespace;\r\n textureIndex?: number; // Index of the texture in the types, formats, etc array of FrameGraphTextureOptions (default: 0)\r\n debug?: Texture;\r\n refHandle?: FrameGraphTextureHandle; // Handle of the texture this one is referencing - used for dangling handles\r\n textureDescriptionHash?: string; // a hash of the texture creation options\r\n lifespan?: TextureLifespan;\r\n aliasHandle?: FrameGraphTextureHandle; // Handle of the texture this one is aliasing - can be set after execution of texture allocation optimization\r\n historyTexture?: boolean; // True if the texture is part of a history texture\r\n};\r\n\r\nenum FrameGraphTextureNamespace {\r\n Task,\r\n Graph,\r\n External,\r\n}\r\n\r\n/**\r\n * Manages the textures used by a frame graph\r\n * @experimental\r\n */\r\nexport class FrameGraphTextureManager {\r\n private static _Counter = 2; // 0 and 1 are reserved for backbuffer textures\r\n\r\n /** @internal */\r\n public readonly _textures: Map<FrameGraphTextureHandle, TextureEntry> = new Map();\r\n\r\n /** @internal */\r\n public readonly _historyTextures: Map<FrameGraphTextureHandle, HistoryTexture> = new Map();\r\n\r\n /** @internal */\r\n public _isRecordingTask = false;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if debug logs should be shown when applying texture allocation optimization (default: false)\r\n */\r\n public showDebugLogsForTextureAllcationOptimization = false;\r\n\r\n private _backBufferTextureEntry: Nullable<TextureEntry> = null;\r\n private _backBufferDepthStencilTextureEntry: Nullable<TextureEntry> = null;\r\n private _backBufferTextureOverriden = false;\r\n\r\n /**\r\n * Constructs a new instance of the texture manager\r\n * @param engine The engine to use\r\n * @param _debugTextures If true, debug textures will be created so that they are visible in the inspector\r\n * @param _scene The scene the manager belongs to\r\n */\r\n constructor(\r\n public readonly engine: AbstractEngine,\r\n private readonly _debugTextures = false,\r\n private readonly _scene: Scene\r\n ) {\r\n this._addSystemTextures();\r\n }\r\n\r\n /**\r\n * Checks if a handle is a backbuffer handle (color or depth/stencil)\r\n * @param handle The handle to check\r\n * @returns True if the handle is a backbuffer handle\r\n */\r\n public isBackbuffer(handle: FrameGraphTextureHandle): boolean {\r\n if (this._backBufferTextureOverriden) {\r\n return false;\r\n }\r\n\r\n return this._isBackbuffer(handle);\r\n }\r\n\r\n /** @internal */\r\n public _isBackbuffer(handle: FrameGraphTextureHandle): boolean {\r\n if (handle === backbufferColorTextureHandle || handle === backbufferDepthStencilTextureHandle) {\r\n return true;\r\n }\r\n\r\n const textureEntry = this._textures.get(handle);\r\n if (!textureEntry) {\r\n return false;\r\n }\r\n\r\n return textureEntry.refHandle === backbufferColorTextureHandle || textureEntry.refHandle === backbufferDepthStencilTextureHandle;\r\n }\r\n\r\n /**\r\n * Checks if a handle is a backbuffer color handle\r\n * @param handle The handle to check\r\n * @returns True if the handle is a backbuffer color handle\r\n */\r\n public isBackbufferColor(handle: FrameGraphTextureHandle): boolean {\r\n if (this._backBufferTextureOverriden) {\r\n return false;\r\n }\r\n\r\n if (handle === backbufferColorTextureHandle) {\r\n return true;\r\n }\r\n\r\n const textureEntry = this._textures.get(handle);\r\n if (!textureEntry) {\r\n return false;\r\n }\r\n\r\n return textureEntry.refHandle === backbufferColorTextureHandle;\r\n }\r\n\r\n /**\r\n * Checks if a handle is a backbuffer depth/stencil handle\r\n * @param handle The handle to check\r\n * @returns True if the handle is a backbuffer depth/stencil handle\r\n */\r\n public isBackbufferDepthStencil(handle: FrameGraphTextureHandle): boolean {\r\n if (this._backBufferTextureOverriden) {\r\n return false;\r\n }\r\n\r\n if (handle === backbufferDepthStencilTextureHandle) {\r\n return true;\r\n }\r\n\r\n const textureEntry = this._textures.get(handle);\r\n if (!textureEntry) {\r\n return false;\r\n }\r\n\r\n return textureEntry.refHandle === backbufferDepthStencilTextureHandle;\r\n }\r\n\r\n /**\r\n * Checks if a handle is a history texture (or points to a history texture, for a dangling handle)\r\n * @param handle The handle to check\r\n * @param checkAllTextures If false (default), the function will check if the handle is the main handle of a history texture (the first handle of the history texture).\r\n * If true, the function will also check if the handle is one of the other handles of a history texture.\r\n * @returns True if the handle is a history texture, otherwise false\r\n */\r\n public isHistoryTexture(handle: FrameGraphTextureHandle, checkAllTextures = false): boolean {\r\n const entry = this._textures.get(handle);\r\n if (!entry) {\r\n return false;\r\n }\r\n\r\n handle = entry.refHandle ?? handle;\r\n\r\n if (!checkAllTextures) {\r\n return this._historyTextures.has(handle);\r\n }\r\n\r\n return this._textures.get(handle)?.historyTexture === true;\r\n }\r\n\r\n /**\r\n * Gets the creation options of a texture\r\n * @param handle Handle of the texture\r\n * @param preserveHistoryTextureFlag If true, the isHistoryTexture flag in the returned creation options will be the same as when the texture was created (default: false)\r\n * @returns The creation options of the texture\r\n */\r\n public getTextureCreationOptions(handle: FrameGraphTextureHandle, preserveHistoryTextureFlag = false): FrameGraphTextureCreationOptions {\r\n handle = this._textures.get(handle)?.refHandle ?? handle;\r\n\r\n const entry = this._textures.get(handle)!;\r\n const creationOptions = entry.creationOptions;\r\n\r\n return {\r\n size: textureSizeIsObject(creationOptions.size) ? { ...creationOptions.size } : creationOptions.size,\r\n sizeIsPercentage: creationOptions.sizeIsPercentage,\r\n options: FrameGraphTextureManager.CloneTextureOptions(creationOptions.options, entry.textureIndex),\r\n isHistoryTexture: preserveHistoryTextureFlag ? creationOptions.isHistoryTexture : false,\r\n };\r\n }\r\n\r\n /**\r\n * Gets the description of a texture\r\n * @param handle Handle of the texture\r\n * @returns The description of the texture\r\n */\r\n public getTextureDescription(handle: FrameGraphTextureHandle): FrameGraphTextureDescription {\r\n const creationOptions = this.getTextureCreationOptions(handle);\r\n\r\n const size = !creationOptions.sizeIsPercentage\r\n ? textureSizeIsObject(creationOptions.size)\r\n ? creationOptions.size\r\n : { width: creationOptions.size, height: creationOptions.size }\r\n : this.getAbsoluteDimensions(creationOptions.size);\r\n\r\n return {\r\n size,\r\n options: creationOptions.options,\r\n };\r\n }\r\n\r\n /**\r\n * Gets a texture handle or creates a new texture if the handle is not provided.\r\n * If handle is not provided, newTextureName and creationOptions must be provided.\r\n * @param handle If provided, will simply return the handle\r\n * @param newTextureName Name of the new texture to create\r\n * @param creationOptions Options to use when creating the new texture\r\n * @returns The handle to the texture.\r\n */\r\n public getTextureHandleOrCreateTexture(handle?: FrameGraphTextureHandle, newTextureName?: string, creationOptions?: FrameGraphTextureCreationOptions): FrameGraphTextureHandle {\r\n if (handle === undefined) {\r\n if (newTextureName === undefined || creationOptions === undefined) {\r\n throw new Error(\"getTextureHandleOrCreateTexture: Either handle or newTextureName and creationOptions must be provided.\");\r\n }\r\n return this.createRenderTargetTexture(newTextureName, creationOptions);\r\n }\r\n return handle;\r\n }\r\n\r\n /**\r\n * Gets a texture from a handle.\r\n * Note that if the texture is a history texture, the read texture for the current frame will be returned, except if historyGetWriteTexture is true.\r\n * @param handle The handle of the texture\r\n * @param historyGetWriteTexture If true and the texture is a history texture, the write texture for the current frame will be returned (default: false)\r\n * @returns The texture or null if not found\r\n */\r\n public getTextureFromHandle(handle: FrameGraphTextureHandle, historyGetWriteTexture?: boolean): Nullable<InternalTexture> {\r\n const entry = this._textures.get(handle);\r\n const refHandle = entry?.refHandle;\r\n const finalEntry = refHandle !== undefined ? this._textures.get(refHandle) : entry;\r\n const finalHandle = refHandle !== undefined ? refHandle : handle;\r\n\r\n const historyEntry = this._historyTextures.get(finalHandle);\r\n if (historyEntry) {\r\n return historyEntry.textures[historyGetWriteTexture ? historyEntry.index : historyEntry.index ^ 1];\r\n }\r\n return finalEntry!.texture;\r\n }\r\n\r\n /**\r\n * Imports a texture into the texture manager\r\n * @param name Name of the texture\r\n * @param texture Texture to import\r\n * @param handle Existing handle to use for the texture. If not provided (default), a new handle will be created.\r\n * @returns The handle to the texture\r\n */\r\n public importTexture(name: string, texture: InternalTexture, handle?: FrameGraphTextureHandle): FrameGraphTextureHandle {\r\n if (handle !== undefined) {\r\n this._freeEntry(handle);\r\n }\r\n\r\n const creationOptions: FrameGraphTextureCreationOptions = {\r\n size: { width: texture.width, height: texture.height },\r\n sizeIsPercentage: false,\r\n isHistoryTexture: false,\r\n options: {\r\n createMipMaps: texture.generateMipMaps,\r\n samples: texture.samples,\r\n types: [texture.type],\r\n formats: [texture.format],\r\n useSRGBBuffers: [texture._useSRGBBuffer],\r\n creationFlags: [texture._creationFlags],\r\n labels: texture.label ? [texture.label] : [\"imported\"],\r\n },\r\n };\r\n\r\n return this._createHandleForTexture(name, texture, creationOptions, FrameGraphTextureNamespace.External, handle);\r\n }\r\n\r\n /**\r\n * Creates a new render target texture\r\n * If multiple textures are described in FrameGraphTextureCreationOptions, the handle of the first texture is returned, handle+1 is the handle of the second texture, etc.\r\n * @param name Name of the texture\r\n * @param creationOptions Options to use when creating the texture\r\n * @param handle Existing handle to use for the texture. If not provided (default), a new handle will be created.\r\n * @returns The handle to the texture\r\n */\r\n public createRenderTargetTexture(name: string, creationOptions: FrameGraphTextureCreationOptions, handle?: FrameGraphTextureHandle): FrameGraphTextureHandle {\r\n return this._createHandleForTexture(\r\n name,\r\n null,\r\n {\r\n size: textureSizeIsObject(creationOptions.size) ? { ...creationOptions.size } : creationOptions.size,\r\n sizeIsPercentage: creationOptions.sizeIsPercentage,\r\n isHistoryTexture: creationOptions.isHistoryTexture,\r\n options: FrameGraphTextureManager.CloneTextureOptions(creationOptions.options, undefined, true),\r\n },\r\n this._isRecordingTask ? FrameGraphTextureNamespace.Task : FrameGraphTextureNamespace.Graph,\r\n handle\r\n );\r\n }\r\n\r\n /**\r\n * Creates a (frame graph) render target wrapper\r\n * Note that renderTargets or renderTargetDepth can be undefined, but not both at the same time!\r\n * @param name Name of the render target wrapper\r\n * @param renderTargets Render target handles (textures) to use\r\n * @param renderTargetDepth Render target depth handle (texture) to use\r\n * @param depthReadOnly If true, the depth buffer will be read-only\r\n * @param stencilReadOnly If true, the stencil buffer will be read-only\r\n * @returns The created render target wrapper\r\n */\r\n public createRenderTarget(\r\n name: string,\r\n renderTargets?: FrameGraphTextureHandle | FrameGraphTextureHandle[],\r\n renderTargetDepth?: FrameGraphTextureHandle,\r\n depthReadOnly?: boolean,\r\n stencilReadOnly?: boolean\r\n ): FrameGraphRenderTarget {\r\n const renderTarget = new FrameGraphRenderTarget(name, this, renderTargets, renderTargetDepth);\r\n\r\n const rtw = renderTarget.renderTargetWrapper;\r\n\r\n if (rtw !== undefined) {\r\n rtw.depthReadOnly = !!depthReadOnly;\r\n rtw.stencilReadOnly = !!stencilReadOnly;\r\n\r\n if (renderTargets) {\r\n const handles = Array.isArray(renderTargets) ? renderTargets : [renderTargets];\r\n\r\n for (let i = 0; i < handles.length; i++) {\r\n let handle = handles[i];\r\n handle = this._textures.get(handle)?.refHandle ?? handle;\r\n\r\n const historyEntry = this._historyTextures.get(handle);\r\n if (historyEntry) {\r\n historyEntry.references.push({ renderTargetWrapper: rtw, textureIndex: i });\r\n\r\n rtw.setTexture(historyEntry.textures[historyEntry.index]!, i, false);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return renderTarget;\r\n }\r\n\r\n /**\r\n * Creates a handle which is not associated with any texture.\r\n * Call resolveDanglingHandle to associate the handle with a valid texture handle.\r\n * @returns The dangling handle\r\n */\r\n public createDanglingHandle() {\r\n return FrameGraphTextureManager._Counter++;\r\n }\r\n\r\n /**\r\n * Associates a texture with a dangling handle\r\n * @param danglingHandle The dangling handle\r\n * @param handle The handle to associate with the dangling handle (if not provided, a new texture handle will be created, using the newTextureName and creationOptions parameters)\r\n * @param newTextureName The name of the new texture to create (if handle is not provided)\r\n * @param creationOptions The options to use when creating the new texture (if handle is not provided)\r\n */\r\n public resolveDanglingHandle(\r\n danglingHandle: FrameGraphTextureHandle,\r\n handle?: FrameGraphTextureHandle,\r\n newTextureName?: string,\r\n creationOptions?: FrameGraphTextureCreationOptions\r\n ) {\r\n if (handle === undefined) {\r\n if (newTextureName === undefined || creationOptions === undefined) {\r\n throw new Error(\"resolveDanglingHandle: Either handle or newTextureName and creationOptions must be provided.\");\r\n }\r\n this.createRenderTargetTexture(newTextureName, creationOptions, danglingHandle);\r\n return;\r\n }\r\n\r\n const textureEntry = this._textures.get(handle);\r\n\r\n if (textureEntry === undefined) {\r\n throw new Error(`resolveDanglingHandle: Handle ${handle} does not exist!`);\r\n }\r\n\r\n handle = textureEntry.refHandle ?? handle; // gets the refHandle if handle is a (resolved) dangling handle itself\r\n\r\n this._textures.set(danglingHandle, {\r\n texture: textureEntry.texture,\r\n refHandle: handle,\r\n name: textureEntry.name,\r\n creationOptions: {\r\n size: { ...(textureEntry.creationOptions.size as { width: number; height: number; depth?: number; layers?: number }) },\r\n options: FrameGraphTextureManager.CloneTextureOptions(textureEntry.creationOptions.options),\r\n sizeIsPercentage: textureEntry.creationOptions.sizeIsPercentage,\r\n isHistoryTexture: false,\r\n },\r\n namespace: textureEntry.namespace,\r\n textureIndex: textureEntry.textureIndex,\r\n });\r\n }\r\n\r\n /**\r\n * Gets the absolute dimensions of a texture.\r\n * @param size The size of the texture. Width and height must be expressed as a percentage of the screen size (100=100%)!\r\n * @param screenWidth The width of the screen (default: the width of the rendering canvas)\r\n * @param screenHeight The height of the screen (default: the height of the rendering canvas)\r\n * @returns The absolute dimensions of the texture\r\n */\r\n public getAbsoluteDimensions(size: TextureSize, screenWidth?: number, screenHeight?: number): { width: number; height: number } {\r\n if (this._backBufferTextureOverriden) {\r\n const backbufferColorTextureSize = this._textures.get(backbufferColorTextureHandle)!.creationOptions.size as { width: number; height: number };\r\n\r\n screenWidth ??= backbufferColorTextureSize.width;\r\n screenHeight ??= backbufferColorTextureSize.height;\r\n } else {\r\n screenWidth ??= this.engine.getRenderWidth(true);\r\n screenHeight ??= this.engine.getRenderHeight(true);\r\n }\r\n\r\n const { width, height } = getDimensionsFromTextureSize(size);\r\n\r\n return {\r\n width: Math.floor((width * screenWidth) / 100),\r\n height: Math.floor((height * screenHeight) / 100),\r\n };\r\n }\r\n\r\n /**\r\n * Gets the absolute dimensions of a texture from its handle or creation options.\r\n * @param handleOrCreationOptions The handle or creation options of the texture\r\n * @returns The absolute dimensions of the texture\r\n */\r\n public getTextureAbsoluteDimensions(handleOrCreationOptions: FrameGraphTextureHandle | FrameGraphTextureCreationOptions): { width: number; height: number } {\r\n if (typeof handleOrCreationOptions === \"number\") {\r\n handleOrCreationOptions = this.getTextureCreationOptions(handleOrCreationOptions);\r\n }\r\n\r\n return !handleOrCreationOptions.sizeIsPercentage\r\n ? textureSizeIsObject(handleOrCreationOptions.size)\r\n ? handleOrCreationOptions.size\r\n : { width: handleOrCreationOptions.size, height: handleOrCreationOptions.size }\r\n : this.getAbsoluteDimensions(handleOrCreationOptions.size);\r\n }\r\n\r\n /**\r\n * Calculates the total byte size of all textures used by the frame graph texture manager (including external textures)\r\n * @param optimizedSize True if the calculation should not factor in aliased textures\r\n * @param outputWidth The output width of the frame graph. Will be used to calculate the size of percentage-based textures\r\n * @param outputHeight The output height of the frame graph. Will be used to calculate the size of percentage-based textures\r\n * @returns The total size of all textures\r\n */\r\n public computeTotalTextureSize(optimizedSize: boolean, outputWidth: number, outputHeight: number) {\r\n let totalSize = 0;\r\n\r\n this._textures.forEach((entry, handle) => {\r\n if (\r\n (!this._backBufferTextureOverriden && (handle === backbufferColorTextureHandle || handle === backbufferDepthStencilTextureHandle)) ||\r\n entry.refHandle !== undefined\r\n ) {\r\n return;\r\n }\r\n if (optimizedSize && entry.aliasHandle !== undefined) {\r\n return;\r\n }\r\n\r\n const options = entry.creationOptions;\r\n const textureIndex = entry.textureIndex || 0;\r\n const dimensions = options.sizeIsPercentage ? this.getAbsoluteDimensions(options.size, outputWidth, outputHeight) : getDimensionsFromTextureSize(options.size);\r\n\r\n const blockInfo = FrameGraphTextureManager._GetTextureBlockInformation(\r\n options.options.types?.[textureIndex] ?? Constants.TEXTURETYPE_UNSIGNED_BYTE,\r\n options.options.formats![textureIndex]\r\n );\r\n\r\n const textureByteSize = Math.ceil(dimensions.width / blockInfo.width) * Math.ceil(dimensions.height / blockInfo.height) * blockInfo.length;\r\n\r\n let byteSize = textureByteSize;\r\n\r\n if (options.options.createMipMaps) {\r\n byteSize = Math.floor((byteSize * 4) / 3);\r\n }\r\n\r\n if ((options.options.samples || 1) > 1) {\r\n // We need an additional texture in the case of MSAA\r\n byteSize += textureByteSize;\r\n }\r\n\r\n totalSize += byteSize;\r\n });\r\n\r\n return totalSize;\r\n }\r\n\r\n /**\r\n * True if the back buffer texture has been overriden by a call to setBackBufferTexture\r\n */\r\n public get backBufferTextureOverriden() {\r\n return this._backBufferTextureOverriden;\r\n }\r\n\r\n /**\r\n * Overrides the default back buffer color/depth-stencil textures used by the frame graph.\r\n * Note that if both textureCreationOptions and depthStencilTextureCreationOptions are provided,\r\n * the engine will use them to create the back buffer color and depth/stencil textures respectively.\r\n * In that case, width and height are ignored.\r\n * @param width The width of the back buffer color/depth-stencil texture (if 0, the engine's current back buffer color/depth-stencil texture width will be used)\r\n * @param height The height of the back buffer color/depth-stencil texture (if 0, the engine's current back buffer color/depth-stencil texture height will be used)\r\n * @param textureCreationOptions The color texture creation options (optional)\r\n * @param depthStencilTextureCreationOptions The depth/stencil texture creation options (optional)\r\n */\r\n public setBackBufferTextures(\r\n width: number,\r\n height: number,\r\n textureCreationOptions?: FrameGraphTextureCreationOptions,\r\n depthStencilTextureCreationOptions?: FrameGraphTextureCreationOptions\r\n ) {\r\n if ((width === 0 || height === 0) && (!textureCreationOptions || !depthStencilTextureCreationOptions)) {\r\n if (this._backBufferTextureOverriden) {\r\n let entry = this._textures.get(backbufferColorTextureHandle)!;\r\n\r\n entry.texture?.dispose();\r\n entry.texture = null;\r\n entry.debug?.dispose();\r\n entry.debug = undefined;\r\n\r\n entry = this._textures.get(backbufferDepthStencilTextureHandle)!;\r\n entry.texture?.dispose();\r\n entry.texture = null;\r\n entry.debug?.dispose();\r\n entry.debug = undefined;\r\n }\r\n\r\n this._backBufferTextureEntry = null;\r\n this._backBufferDepthStencilTextureEntry = null;\r\n this._backBufferTextureOverriden = false;\r\n\r\n this._addSystemTextures();\r\n return;\r\n }\r\n\r\n this._backBufferTextureOverriden = true;\r\n\r\n const size = { width, height };\r\n\r\n this._backBufferTextureEntry = {\r\n name: \"backbuffer color\",\r\n texture: null,\r\n creationOptions: textureCreationOptions ?? {\r\n size,\r\n options: {\r\n createMipMaps: false,\r\n samples: this.engine.getCreationOptions().antialias ? 4 : 1,\r\n types: [Constants.TEXTURETYPE_UNSIGNED_BYTE],\r\n formats: [Constants.TEXTUREFORMAT_RGBA],\r\n useSRGBBuffers: [false],\r\n creationFlags: [0],\r\n labels: [\"backbuffer color\"],\r\n },\r\n sizeIsPercentage: false,\r\n },\r\n namespace: FrameGraphTextureNamespace.Graph,\r\n lifespan: {\r\n firstTask: Number.MAX_VALUE,\r\n lastTask: 0,\r\n },\r\n };\r\n this._backBufferTextureEntry.textureDescriptionHash = this._createTextureDescriptionHash(this._backBufferTextureEntry.creationOptions);\r\n\r\n this._backBufferDepthStencilTextureEntry = {\r\n name: \"backbuffer depth/stencil\",\r\n texture: null,\r\n creationOptions: depthStencilTextureCreationOptions ?? {\r\n size,\r\n options: {\r\n createMipMaps: false,\r\n samples: this.engine.getCreationOptions().antialias ? 4 : 1,\r\n types: [Constants.TEXTURETYPE_UNSIGNED_BYTE],\r\n formats: [this.engine.isStencilEnable ? Constants.TEXTUREFORMAT_DEPTH24_STENCIL8 : Constants.TEXTUREFORMAT_DEPTH32_FLOAT],\r\n useSRGBBuffers: [false],\r\n creationFlags: [0],\r\n labels: [\"backbuffer depth/stencil\"],\r\n },\r\n sizeIsPercentage: false,\r\n },\r\n namespace: FrameGraphTextureNamespace.Graph,\r\n lifespan: {\r\n firstTask: Number.MAX_VALUE,\r\n lastTask: 0,\r\n },\r\n };\r\n this._backBufferDepthStencilTextureEntry.textureDescriptionHash = this._createTextureDescriptionHash(this._backBufferDepthStencilTextureEntry.creationOptions);\r\n\r\n this._addSystemTextures();\r\n }\r\n\r\n /**\r\n * Resets the back buffer color/depth-stencil textures to the default (the engine's current back buffer textures)\r\n * It has no effect if setBackBufferTextures has not been called before.\r\n */\r\n public resetBackBufferTextures() {\r\n this.setBackBufferTextures(0, 0);\r\n }\r\n\r\n /**\r\n * Returns true if the texture manager has at least one history texture\r\n */\r\n public get hasHistoryTextures() {\r\n return this._historyTextures.size > 0;\r\n }\r\n\r\n /** @internal */\r\n public _dispose(): void {\r\n this._releaseTextures();\r\n }\r\n\r\n /** @internal */\r\n public _allocateTextures(tasks?: FrameGraphTask[]): void {\r\n if (tasks) {\r\n this._optimizeTextureAllocation(tasks);\r\n }\r\n\r\n this._textures.forEach((entry) => {\r\n if (!entry.texture) {\r\n if (entry.refHandle !== undefined) {\r\n // entry is a dangling handle which has been resolved to point to refHandle\r\n // We simply update the texture to point to the refHandle texture\r\n const refEntry = this._textures.get(entry.refHandle)!;\r\n\r\n entry.texture = refEntry.texture;\r\n entry.texture?.incrementReferences();\r\n\r\n if (refEntry.refHandle === backbufferColorTextureHandle) {\r\n entry.refHandle = backbufferColorTextureHandle;\r\n }\r\n if (refEntry.refHandle === backbufferDepthStencilTextureHandle) {\r\n entry.refHandle = backbufferDepthStencilTextureHandle;\r\n }\r\n } else if (entry.namespace !== FrameGraphTextureNamespace.External) {\r\n if (entry.aliasHandle !== undefined) {\r\n const aliasEntry = this._textures.get(entry.aliasHandle)!;\r\n\r\n entry.texture = aliasEntry.texture!;\r\n entry.texture.incrementReferences();\r\n } else {\r\n const creationOptions = entry.creationOptions;\r\n const size = getDimensionsFromTextureSize(creationOptions.sizeIsPercentage ? this.getAbsoluteDimensions(creationOptions.size) : creationOptions.size);\r\n const textureIndex = entry.textureIndex || 0;\r\n const targetType = creationOptions.options.targetTypes?.[textureIndex] ?? Constants.TEXTURE_2D;\r\n const is3D = targetType === Constants.TEXTURE_3D;\r\n const isArray = targetType === Constants.TEXTURE_2D_ARRAY || targetType === Constants.TEXTURE_CUBE_MAP_ARRAY;\r\n const layerCount = creationOptions.options.layerCounts?.[textureIndex] ?? 0;\r\n\r\n const internalTextureCreationOptions: InternalTextureCreationOptions = {\r\n createMipMaps: creationOptions.options.createMipMaps,\r\n samples: creationOptions.options.samples,\r\n type: creationOptions.options.types?.[textureIndex],\r\n format: creationOptions.options.formats?.[textureIndex],\r\n useSRGBBuffer: creationOptions.options.useSRGBBuffers?.[textureIndex],\r\n creationFlags: creationOptions.options.creationFlags?.[textureIndex],\r\n label: creationOptions.options.labels?.[textureIndex] ?? `${entry.name}${textureIndex > 0 ? \"#\" + textureIndex : \"\"}`,\r\n samplingMode: Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n createMSAATexture: creationOptions.options.samples! > 1,\r\n isCube: targetType === Constants.TEXTURE_CUBE_MAP || targetType === Constants.TEXTURE_CUBE_MAP_ARRAY,\r\n };\r\n\r\n const isDepthTexture = IsDepthTexture(internalTextureCreationOptions.format!);\r\n const hasStencil = HasStencilAspect(internalTextureCreationOptions.format!);\r\n const source =\r\n isDepthTexture && hasStencil\r\n ? InternalTextureSource.DepthStencil\r\n : isDepthTexture || hasStencil\r\n ? InternalTextureSource.Depth\r\n : InternalTextureSource.RenderTarget;\r\n\r\n const internalTexture = this.engine._createInternalTexture(\r\n { width: size.width, height: size.height, depth: is3D ? layerCount : undefined, layers: isArray ? layerCount : undefined },\r\n internalTextureCreationOptions,\r\n false,\r\n source\r\n );\r\n\r\n if (isDepthTexture) {\r\n internalTexture.type = GetTypeForDepthTexture(internalTexture.format);\r\n }\r\n\r\n entry.texture = internalTexture;\r\n }\r\n }\r\n }\r\n\r\n if (entry.texture && entry.refHandle === undefined) {\r\n entry.debug?.dispose();\r\n entry.debug = this._createDebugTexture(entry.name, entry.texture);\r\n }\r\n });\r\n\r\n this._historyTextures.forEach((entry) => {\r\n for (let i = 0; i < entry.handles.length; i++) {\r\n entry.textures[i] = this._textures.get(entry.handles[i])!.texture;\r\n }\r\n });\r\n }\r\n\r\n /** @internal */\r\n public _releaseTextures(releaseAll = true): void {\r\n this._textures.forEach((entry, handle) => {\r\n if (entry.lifespan) {\r\n entry.lifespan.firstTask = Number.MAX_VALUE;\r\n entry.lifespan.lastTask = 0;\r\n }\r\n\r\n entry.aliasHandle = undefined;\r\n\r\n if (releaseAll || entry.namespace !== FrameGraphTextureNamespace.External) {\r\n entry.debug?.dispose();\r\n entry.debug = undefined;\r\n }\r\n\r\n if (entry.namespace === FrameGraphTextureNamespace.External) {\r\n return;\r\n }\r\n\r\n // We dispose of \"Graph\" and \"Task\" textures:\r\n // - \"Graph\" textures will be recreated by _allocateTextures because the entry still exists in this._textures, but entry.texture is null\r\n // - \"Task\" textures will be re-added to this._textures when the task is recorded (by a call to FrameGraph.build): that's why we delete the entry from this._textures below\r\n entry.texture?.dispose();\r\n entry.texture = null;\r\n\r\n if (releaseAll || entry.namespace === FrameGraphTextureNamespace.Task) {\r\n this._textures.delete(handle);\r\n this._historyTextures.delete(handle);\r\n }\r\n });\r\n\r\n this._historyTextures.forEach((entry) => {\r\n for (let i = 0; i < entry.handles.length; i++) {\r\n entry.textures[i] = null;\r\n }\r\n });\r\n\r\n if (releaseAll) {\r\n this._textures.clear();\r\n this._historyTextures.clear();\r\n this._addSystemTextures();\r\n }\r\n }\r\n\r\n /** @internal */\r\n public _updateHistoryTextures(): void {\r\n this._historyTextures.forEach((entry) => {\r\n entry.index = entry.index ^ 1;\r\n const currentTexture = entry.textures[entry.index];\r\n if (currentTexture) {\r\n for (const { renderTargetWrapper, textureIndex } of entry.references) {\r\n renderTargetWrapper.setTexture(currentTexture, textureIndex, false);\r\n }\r\n }\r\n });\r\n }\r\n\r\n private _addSystemTextures() {\r\n const size = { width: this.engine.getRenderWidth(true), height: this.engine.getRenderHeight(true) };\r\n\r\n this._textures.set(\r\n backbufferColorTextureHandle,\r\n this._backBufferTextureEntry ?? {\r\n name: \"backbuffer color\",\r\n texture: null,\r\n creationOptions: {\r\n size,\r\n options: {\r\n createMipMaps: false,\r\n samples: this.engine.getCreationOptions().antialias ? 4 : 1,\r\n types: [Constants.TEXTURETYPE_UNSIGNED_BYTE], // todo? get from engine\r\n formats: [Constants.TEXTUREFORMAT_RGBA], // todo? get from engine\r\n useSRGBBuffers: [false],\r\n creationFlags: [0],\r\n labels: [\"backbuffer color\"],\r\n },\r\n sizeIsPercentage: false,\r\n },\r\n namespace: FrameGraphTextureNamespace.External,\r\n }\r\n );\r\n\r\n this._textures.set(\r\n backbufferDepthStencilTextureHandle,\r\n this._backBufferDepthStencilTextureEntry ?? {\r\n name: \"backbuffer depth/stencil\",\r\n texture: null,\r\n creationOptions: {\r\n size,\r\n options: {\r\n createMipMaps: false,\r\n samples: this.engine.getCreationOptions().antialias ? 4 : 1,\r\n types: [Constants.TEXTURETYPE_UNSIGNED_BYTE], // todo? get from engine\r\n formats: [Constants.TEXTUREFORMAT_DEPTH24], // todo? get from engine\r\n useSRGBBuffers: [false],\r\n creationFlags: [0],\r\n labels: [\"backbuffer depth/stencil\"],\r\n },\r\n sizeIsPercentage: false,\r\n },\r\n namespace: FrameGraphTextureNamespace.External,\r\n }\r\n );\r\n }\r\n\r\n private _createDebugTexture(name: string, texture: InternalTexture): Texture | undefined {\r\n if (!this._debugTextures) {\r\n return;\r\n }\r\n\r\n const textureDebug = new Texture(null, this._scene);\r\n\r\n textureDebug.name = name;\r\n textureDebug._texture = texture;\r\n textureDebug._texture.incrementReferences();\r\n\r\n return textureDebug;\r\n }\r\n\r\n private _freeEntry(handle: number): void {\r\n const entry = this._textures.get(handle);\r\n\r\n if (entry) {\r\n entry.debug?.dispose();\r\n this._textures.delete(handle);\r\n }\r\n }\r\n\r\n private _createHandleForTexture(\r\n name: string,\r\n texture: Nullable<InternalTexture>,\r\n creationOptions: FrameGraphTextureCreationOptions,\r\n namespace: FrameGraphTextureNamespace,\r\n handle?: FrameGraphTextureHandle,\r\n textureIndex?: number\r\n ): FrameGraphTextureHandle {\r\n handle = handle ?? FrameGraphTextureManager._Counter++;\r\n textureIndex = textureIndex || 0;\r\n\r\n const textureName = creationOptions.isHistoryTexture ? `${name} ping` : name;\r\n\r\n let label = creationOptions.options.labels?.[textureIndex] ?? \"\";\r\n if (label === textureName) {\r\n label = \"\";\r\n }\r\n\r\n const textureEntry: TextureEntry = {\r\n texture,\r\n name: `${textureName}${label ? \" \" + label : \"\"}`,\r\n creationOptions: {\r\n size: textureSizeIsObject(creationOptions.size) ? creationOptions.size : { width: creationOptions.size, height: creationOptions.size },\r\n options: creationOptions.options,\r\n sizeIsPercentage: creationOptions.sizeIsPercentage,\r\n isHistoryTexture: creationOptions.isHistoryTexture,\r\n },\r\n namespace,\r\n textureIndex,\r\n textureDescriptionHash: this._createTextureDescriptionHash(creationOptions),\r\n lifespan: {\r\n firstTask: Number.MAX_VALUE,\r\n lastTask: 0,\r\n },\r\n historyTexture: creationOptions.isHistoryTexture,\r\n };\r\n\r\n this._textures.set(handle, textureEntry);\r\n\r\n if (namespace === FrameGraphTextureNamespace.External) {\r\n return handle;\r\n }\r\n\r\n if (creationOptions.isHistoryTexture) {\r\n const pongCreationOptions: FrameGraphTextureCreationOptions = {\r\n size: { ...(textureEntry.creationOptions.size as { width: number; height: number }) },\r\n options: { ...textureEntry.creationOptions.options },\r\n sizeIsPercentage: textureEntry.creationOptions.sizeIsPercentage,\r\n isHistoryTexture: false,\r\n };\r\n\r\n const pongTexture = this._createHandleForTexture(`${name} pong`, null, pongCreationOptions, namespace);\r\n\r\n this._textures.get(pongTexture)!.historyTexture = true;\r\n this._historyTextures.set(handle, { textures: [null, null], handles: [handle, pongTexture], index: 0, references: [] });\r\n\r\n return handle;\r\n }\r\n\r\n if (creationOptions.options.types && creationOptions.options.types.length > 1 && textureIndex === 0) {\r\n const textureCount = creationOptions.options.types.length;\r\n const creationOptionsForTexture: FrameGraphTextureCreationOptions = {\r\n size: textureSizeIsObject(creationOptions.size) ? creationOptions.size : { width: creationOptions.size, height: creationOptions.size },\r\n options: creationOptions.options,\r\n sizeIsPercentage: creationOptions.sizeIsPercentage,\r\n };\r\n\r\n for (let i = 1; i < textureCount; i++) {\r\n this._createHandleForTexture(textureName, null, creationOptionsForTexture, namespace, handle + i, i);\r\n }\r\n\r\n FrameGraphTextureManager._Counter += textureCount - 1;\r\n }\r\n\r\n return handle;\r\n }\r\n\r\n private _createTextureDescriptionHash(options: FrameGraphTextureCreationOptions): string {\r\n const hash: string[] = [];\r\n\r\n hash.push(textureSizeIsObject(options.size) ? `${options.size.width}_${options.size.height}` : `${options.size}`);\r\n hash.push(options.sizeIsPercentage ? \"%\" : \"A\");\r\n hash.push(options.options.createMipMaps ? \"M\" : \"N\");\r\n hash.push(options.options.samples ? `${options.options.samples}` : \"S1\");\r\n hash.push(options.options.targetTypes ? options.options.targetTypes.join(\"_\") : `${Constants.TEXTURE_2D}`);\r\n hash.push(options.options.types ? options.options.types.join(\"_\") : `${Constants.TEXTURETYPE_UNSIGNED_BYTE}`);\r\n hash.push(options.options.formats ? options.options.formats.join(\"_\") : `${Constants.TEXTUREFORMAT_RGBA}`);\r\n hash.push(options.options.layerCounts ? options.options.layerCounts.join(\"_\") : `0`);\r\n hash.push(options.options.useSRGBBuffers ? options.options.useSRGBBuffers.join(\"_\") : \"false\");\r\n hash.push(options.options.creationFlags ? options.options.creationFlags.join(\"_\") : \"0\");\r\n\r\n return hash.join(\"_\");\r\n }\r\n\r\n private _optimizeTextureAllocation(tasks: FrameGraphTask[]): void {\r\n this._computeTextureLifespan(tasks);\r\n\r\n if (this.showDebugLogsForTextureAllcationOptimization) {\r\n Logger.Log(`================== Optimization of texture allocation ==================`);\r\n }\r\n\r\n const cache: Map<string, Array<[FrameGraphTextureHandle, Array<TextureLifespan>]>> = new Map();\r\n\r\n const iterator = this._textures.keys();\r\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\r\n const textureHandle = key.value;\r\n const textureEntry = this._textures.get(textureHandle)!;\r\n if (textureEntry.refHandle !== undefined || textureEntry.namespace === FrameGraphTextureNamespace.External || this.isHistoryTexture(textureHandle, true)) {\r\n continue;\r\n }\r\n\r\n const textureHash = textureEntry.textureDescriptionHash!;\r\n const textureLifespan = textureEntry.lifespan!;\r\n\r\n const cacheEntries = cache.get(textureHash);\r\n if (cacheEntries) {\r\n let cacheEntryFound = false;\r\n for (const cacheEntry of cacheEntries) {\r\n const [sourceHandle, lifespanArray] = cacheEntry;\r\n\r\n let overlapped = false;\r\n for (const lifespan of lifespanArray) {\r\n if (lifespan.firstTask <= textureLifespan.lastTask && lifespan.lastTask >= textureLifespan.firstTask) {\r\n overlapped = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!overlapped) {\r\n // No overlap between texture lifespan and all lifespans in the array, this texture can reuse the same entry cache\r\n if (this.showDebugLogsForTextureAllcationOptimization) {\r\n Logger.Log(`Texture ${textureHandle} (${textureEntry.name}) reuses cache entry ${sourceHandle}`);\r\n }\r\n\r\n lifespanArray.push(textureLifespan);\r\n textureEntry.aliasHandle = sourceHandle;\r\n cacheEntryFound = true;\r\n break;\r\n }\r\n }\r\n if (!cacheEntryFound) {\r\n cacheEntries.push([textureHandle, [textureLifespan]]);\r\n }\r\n } else {\r\n cache.set(textureHash, [[textureHandle, [textureLifespan]]]);\r\n }\r\n }\r\n }\r\n\r\n // Loop through all task/pass dependencies and compute the lifespan of each texture (that is, the first task/pass that uses it and the last task/pass that uses it)\r\n private _computeTextureLifespan(tasks: FrameGraphTask[]): void {\r\n if (this.showDebugLogsForTextureAllcationOptimization) {\r\n Logger.Log(`================== Dump of texture dependencies for all tasks/passes ==================`);\r\n }\r\n\r\n for (let t = 0; t < tasks.length; ++t) {\r\n const task = tasks[t];\r\n\r\n if (task.passes.length > 0) {\r\n this._computeTextureLifespanForPasses(task, t, task.passes);\r\n }\r\n\r\n if (task.passesDisabled.length > 0) {\r\n this._computeTextureLifespanForPasses(task, t, task.passesDisabled);\r\n }\r\n\r\n if (task.dependencies) {\r\n if (this.showDebugLogsForTextureAllcationOptimization) {\r\n Logger.Log(`task#${t} (${task.name}), global dependencies`);\r\n }\r\n\r\n this._updateLifespan(t * 100 + 99, task.dependencies);\r\n }\r\n }\r\n\r\n if (this.showDebugLogsForTextureAllcationOptimization) {\r\n Logger.Log(`================== Texture lifespans ==================`);\r\n const iterator = this._textures.keys();\r\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\r\n const textureHandle = key.value;\r\n const textureEntry = this._textures.get(textureHandle)!;\r\n if (textureEntry.refHandle !== undefined || textureEntry.namespace === FrameGraphTextureNamespace.External || this._historyTextures.has(textureHandle)) {\r\n continue;\r\n }\r\n Logger.Log(`${textureHandle} (${textureEntry.name}): ${textureEntry.lifespan!.firstTask} - ${textureEntry.lifespan!.lastTask}`);\r\n }\r\n }\r\n }\r\n\r\n private _computeTextureLifespanForPasses(task: FrameGraphTask, taskIndex: number, passes: IFrameGraphPass[]): void {\r\n for (let p = 0; p < passes.length; ++p) {\r\n const dependencies = new Set<FrameGraphTextureHandle>();\r\n const pass = passes[p];\r\n\r\n if (!FrameGraphRenderPass.IsRenderPass(pass)) {\r\n continue;\r\n }\r\n\r\n pass.collectDependencies(dependencies);\r\n\r\n if (this.showDebugLogsForTextureAllcationOptimization) {\r\n Logger.Log(`task#${taskIndex} (${task.name}), pass#${p} (${pass.name})`);\r\n }\r\n\r\n this._updateLifespan(taskIndex * 100 + p, dependencies);\r\n }\r\n }\r\n\r\n private _updateLifespan(passOrderNum: number, dependencies: Set<FrameGraphTextureHandle>) {\r\n const iterator = dependencies.keys();\r\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\r\n const textureHandle = key.value;\r\n if (this.isBackbuffer(textureHandle)) {\r\n continue;\r\n }\r\n let textureEntry = this._textures.get(textureHandle);\r\n if (!textureEntry) {\r\n throw new Error(\r\n `FrameGraph._computeTextureLifespan: Texture handle \"${textureHandle}\" not found in the texture manager. Make sure you didn't forget to add a task in the frame graph.`\r\n );\r\n }\r\n let handle = textureHandle;\r\n while (textureEntry.refHandle !== undefined) {\r\n handle = textureEntry.refHandle;\r\n textureEntry = this._textures.get(handle);\r\n if (!textureEntry) {\r\n throw new Error(\r\n `FrameGraph._computeTextureLifespan: Texture handle \"${handle}\" not found in the texture manager (source handle=\"${textureHandle}\"). Make sure you didn't forget to add a task in the frame graph.`\r\n );\r\n }\r\n }\r\n if (textureEntry.namespace === FrameGraphTextureNamespace.External || this._historyTextures.has(handle)) {\r\n continue;\r\n }\r\n\r\n if (this.showDebugLogsForTextureAllcationOptimization) {\r\n Logger.Log(` ${handle} (${textureEntry.name})`);\r\n }\r\n\r\n textureEntry.lifespan!.firstTask = Math.min(textureEntry.lifespan!.firstTask, passOrderNum);\r\n textureEntry.lifespan!.lastTask = Math.max(textureEntry.lifespan!.lastTask, passOrderNum);\r\n }\r\n }\r\n\r\n /**\r\n * Clones a texture options\r\n * @param options The options to clone\r\n * @param textureIndex The index of the texture in the types, formats, etc array of FrameGraphTextureOptions. If not provided, all options are cloned.\r\n * @param preserveLabels True if the labels should be preserved (default: false)\r\n * @returns The cloned options\r\n */\r\n public static CloneTextureOptions(options: FrameGraphTextureOptions, textureIndex?: number, preserveLabels?: boolean): FrameGraphTextureOptions {\r\n return textureIndex !== undefined\r\n ? {\r\n createMipMaps: options.createMipMaps,\r\n samples: options.samples,\r\n targetTypes: options.targetTypes ? [options.targetTypes[textureIndex]] : undefined,\r\n types: options.types ? [options.types[textureIndex]] : undefined,\r\n formats: options.formats ? [options.formats[textureIndex]] : undefined,\r\n layerCounts: options.layerCounts ? [options.layerCounts[textureIndex]] : undefined,\r\n useSRGBBuffers: options.useSRGBBuffers ? [options.useSRGBBuffers[textureIndex]] : undefined,\r\n creationFlags: options.creationFlags ? [options.creationFlags[textureIndex]] : undefined,\r\n labels: options.labels ? [options.labels[textureIndex]] : undefined,\r\n }\r\n : {\r\n createMipMaps: options.createMipMaps,\r\n samples: options.samples,\r\n targetTypes: options.targetTypes ? [...options.targetTypes] : undefined,\r\n types: options.types ? [...options.types] : undefined,\r\n formats: options.formats ? [...options.formats] : undefined,\r\n layerCounts: options.layerCounts ? [...options.layerCounts] : undefined,\r\n useSRGBBuffers: options.useSRGBBuffers ? [...options.useSRGBBuffers] : undefined,\r\n creationFlags: options.creationFlags ? [...options.creationFlags] : undefined,\r\n labels: options.labels && preserveLabels ? [...options.labels] : undefined,\r\n };\r\n }\r\n\r\n /**\r\n * Gets the texture block information.\r\n * @param type Type of the texture.\r\n * @param format Format of the texture.\r\n * @returns The texture block information. You can calculate the byte size of the texture by doing: Math.ceil(width / blockInfo.width) * Math.ceil(height / blockInfo.height) * blockInfo.length\r\n */\r\n private static _GetTextureBlockInformation(type: number, format: number): { width: number; height: number; length: number } {\r\n switch (format) {\r\n case Constants.TEXTUREFORMAT_DEPTH16:\r\n return { width: 1, height: 1, length: 2 };\r\n case Constants.TEXTUREFORMAT_DEPTH24:\r\n return { width: 1, height: 1, length: 3 };\r\n case Constants.TEXTUREFORMAT_DEPTH24_STENCIL8:\r\n return { width: 1, height: 1, length: 4 };\r\n case Constants.TEXTUREFORMAT_DEPTH32_FLOAT:\r\n return { width: 1, height: 1, length: 4 };\r\n case Constants.TEXTUREFORMAT_DEPTH32FLOAT_STENCIL8:\r\n return { width: 1, height: 1, length: 5 };\r\n case Constants.TEXTUREFORMAT_STENCIL8:\r\n return { width: 1, height: 1, length: 1 };\r\n\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_BPTC_UNORM:\r\n return { width: 4, height: 4, length: 16 };\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT:\r\n return { width: 4, height: 4, length: 16 };\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGB_BPTC_SIGNED_FLOAT:\r\n return { width: 4, height: 4, length: 16 };\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT5:\r\n return { width: 4, height: 4, length: 16 };\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT3:\r\n return { width: 4, height: 4, length: 16 };\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT1:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGB_S3TC_DXT1:\r\n return { width: 4, height: 4, length: 8 };\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_4x4:\r\n return { width: 4, height: 4, length: 16 };\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGB_ETC1_WEBGL:\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGB8_ETC2:\r\n return { width: 4, height: 4, length: 8 };\r\n case Constants.TEXTUREFORMAT_COMPRESSED_RGBA8_ETC2_EAC:\r\n return { width: 4, height: 4, length: 16 };\r\n }\r\n\r\n switch (type) {\r\n case Constants.TEXTURETYPE_BYTE:\r\n case Constants.TEXTURETYPE_UNSIGNED_BYTE:\r\n switch (format) {\r\n case Constants.TEXTUREFORMAT_R:\r\n case Constants.TEXTUREFORMAT_R_INTEGER:\r\n case Constants.TEXTUREFORMAT_ALPHA:\r\n case Constants.TEXTUREFORMAT_LUMINANCE:\r\n case Constants.TEXTUREFORMAT_LUMINANCE_ALPHA:\r\n return { width: 1, height: 1, length: 1 };\r\n case Constants.TEXTUREFORMAT_RG:\r\n case Constants.TEXTUREFORMAT_RG_INTEGER:\r\n return { width: 1, height: 1, length: 2 };\r\n case Constants.TEXTUREFORMAT_RGB:\r\n case Constants.TEXTUREFORMAT_RGB_INTEGER:\r\n return { width: 1, height: 1, length: 3 };\r\n case Constants.TEXTUREFORMAT_RGBA_INTEGER:\r\n return { width: 1, height: 1, length: 4 };\r\n default:\r\n return { width: 1, height: 1, length: 4 };\r\n }\r\n case Constants.TEXTURETYPE_SHORT:\r\n case Constants.TEXTURETYPE_UNSIGNED_SHORT:\r\n switch (format) {\r\n case Constants.TEXTUREFORMAT_RED_INTEGER:\r\n return { width: 1, height: 1, length: 2 };\r\n case Constants.TEXTUREFORMAT_RG_INTEGER:\r\n return { width: 1, height: 1, length: 4 };\r\n case Constants.TEXTUREFORMAT_RGB_INTEGER:\r\n return { width: 1, height: 1, length: 6 };\r\n case Constants.TEXTUREFORMAT_RGBA_INTEGER:\r\n return { width: 1, height: 1, length: 8 };\r\n default:\r\n return { width: 1, height: 1, length: 8 };\r\n }\r\n case Constants.TEXTURETYPE_INT:\r\n case Constants.TEXTURETYPE_UNSIGNED_INTEGER: // Refers to UNSIGNED_INT\r\n switch (format) {\r\n case Constants.TEXTUREFORMAT_RED_INTEGER:\r\n return { width: 1, height: 1, length: 4 };\r\n case Constants.TEXTUREFORMAT_RG_INTEGER:\r\n return { width: 1, height: 1, length: 8 };\r\n case Constants.TEXTUREFORMAT_RGB_INTEGER:\r\n return { width: 1, height: 1, length: 12 };\r\n case Constants.TEXTUREFORMAT_RGBA_INTEGER:\r\n return { width: 1, height: 1, length: 16 };\r\n default:\r\n return { width: 1, height: 1, length: 16 };\r\n }\r\n case Constants.TEXTURETYPE_FLOAT:\r\n switch (format) {\r\n case Constants.TEXTUREFORMAT_RED:\r\n return { width: 1, height: 1, length: 4 };\r\n case Constants.TEXTUREFORMAT_RG:\r\n return { width: 1, height: 1, length: 8 };\r\n case Constants.TEXTUREFORMAT_RGB:\r\n return { width: 1, height: 1, length: 12 };\r\n case Constants.TEXTUREFORMAT_RGBA:\r\n return { width: 1, height: 1, length: 16 };\r\n default:\r\n return { width: 1, height: 1, length: 16 };\r\n }\r\n case Constants.TEXTURETYPE_HALF_FLOAT:\r\n switch (format) {\r\n case Constants.TEXTUREFORMAT_RED:\r\n return { width: 1, height: 1, length: 2 };\r\n case Constants.TEXTUREFORMAT_RG:\r\n return { width: 1, height: 1, length: 4 };\r\n case Constants.TEXTUREFORMAT_RGB:\r\n return { width: 1, height: 1, length: 6 };\r\n case Constants.TEXTUREFORMAT_RGBA:\r\n return { width: 1, height: 1, length: 8 };\r\n default:\r\n return { width: 1, height: 1, length: 8 };\r\n }\r\n case Constants.TEXTURETYPE_UNSIGNED_SHORT_5_6_5:\r\n return { width: 1, height: 1, length: 2 };\r\n case Constants.TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV:\r\n switch (format) {\r\n case Constants.TEXTUREFORMAT_RGBA:\r\n case Constants.TEXTUREFORMAT_RGBA_INTEGER:\r\n return { width: 1, height: 1, length: 4 };\r\n default:\r\n return { width: 1, height: 1, length: 4 };\r\n }\r\n case Constants.TEXTURETYPE_UNSIGNED_INT_5_9_9_9_REV:\r\n switch (format) {\r\n case Constants.TEXTUREFORMAT_RGBA:\r\n case Constants.TEXTUREFORMAT_RGBA_INTEGER:\r\n return { width: 1, height: 1, length: 4 };\r\n default:\r\n return { width: 1, height: 1, length: 4 };\r\n }\r\n case Constants.TEXTURETYPE_UNSIGNED_SHORT_4_4_4_4:\r\n return { width: 1, height: 1, length: 2 };\r\n case Constants.TEXTURETYPE_UNSIGNED_SHORT_5_5_5_1:\r\n return { width: 1, height: 1, length: 2 };\r\n case Constants.TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV:\r\n switch (format) {\r\n case Constants.TEXTUREFORMAT_RGBA:\r\n return { width: 1, height: 1, length: 4 };\r\n case Constants.TEXTUREFORMAT_RGBA_INTEGER:\r\n return { width: 1, height: 1, length: 4 };\r\n default:\r\n return { width: 1, height: 1, length: 4 };\r\n }\r\n }\r\n\r\n return { width: 1, height: 1, length: 4 };\r\n }\r\n}\r\n"]}
@@ -19,7 +19,15 @@ export type FrameGraphTextureOptions = {
19
19
  createMipMaps?: boolean;
20
20
  /** Defines sample count (default: 1) */
21
21
  samples?: number;
22
- /** Defines the types of the textures */
22
+ /**
23
+ * Define the type of the textures (of Constants.TEXTURE_2D, .TEXTURE_2D_ARRAY, .TEXTURE_CUBE_MAP, .TEXTURE_CUBE_MAP_ARRAY, .TEXTURE_3D).
24
+ */
25
+ targetTypes?: number[];
26
+ /**
27
+ * Define the number of layers of the textures (if applicable, given the corresponding targetType) (for Constants.TEXTURE_3D, .TEXTURE_2D_ARRAY, and .TEXTURE_CUBE_MAP_ARRAY)
28
+ */
29
+ layerCounts?: number[];
30
+ /** Defines the type of the texture channels (UNSIGNED_BYTE, FLOAT, etc.) */
23
31
  types?: number[];
24
32
  /** Defines the format of the textures (RED, RG, RGB, RGBA, ALPHA...) */
25
33
  formats?: number[];
@@ -1 +1 @@
1
- {"version":3,"file":"frameGraphTypes.js","sourceRoot":"","sources":["../../../../dev/core/src/FrameGraph/frameGraphTypes.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,gEAAgE;AAChE,MAAM,CAAC,MAAM,4BAA4B,GAA4B,CAAC,CAAC;AAEvE;;GAEG;AACH,gEAAgE;AAChE,MAAM,CAAC,MAAM,mCAAmC,GAA4B,CAAC,CAAC","sourcesContent":["import type { Nullable, TextureSize, FrameGraphContext } from \"core/index\";\r\n\r\n/**\r\n * Represents a texture handle in the frame graph.\r\n */\r\nexport type FrameGraphTextureHandle = number;\r\n\r\n/**\r\n * Represents a texture handle for the backbuffer color texture.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const backbufferColorTextureHandle: FrameGraphTextureHandle = 0;\r\n\r\n/**\r\n * Represents a texture handle for the backbuffer depth/stencil texture.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const backbufferDepthStencilTextureHandle: FrameGraphTextureHandle = 1;\r\n\r\n/**\r\n * Options used to describe a texture to be created in the frame graph.\r\n */\r\nexport type FrameGraphTextureOptions = {\r\n /** Specifies if mipmaps must be created for the textures (default: false) */\r\n createMipMaps?: boolean;\r\n\r\n /** Defines sample count (default: 1) */\r\n samples?: number;\r\n\r\n /** Defines the types of the textures */\r\n types?: number[];\r\n\r\n /** Defines the format of the textures (RED, RG, RGB, RGBA, ALPHA...) */\r\n formats?: number[];\r\n\r\n /** Defines if sRGB format should be used for each of texture */\r\n useSRGBBuffers?: boolean[];\r\n\r\n /** Defines the creation flags of the textures (Constants.TEXTURE_CREATIONFLAG_STORAGE for storage textures, for eg) */\r\n creationFlags?: number[];\r\n\r\n /** Defines the names of the textures (used for debugging purpose) */\r\n labels?: string[];\r\n};\r\n\r\n/**\r\n * Options used to create a texture / list of textures in the frame graph.\r\n */\r\nexport type FrameGraphTextureCreationOptions = {\r\n /** Size of the textures. If sizeIsPercentage is true, these are percentages relative to the screen size (100 = 100%) */\r\n size: TextureSize;\r\n\r\n /** Options used to create the textures */\r\n options: FrameGraphTextureOptions;\r\n\r\n /** If true, indicates that \"size\" is percentages relative to the screen size */\r\n sizeIsPercentage: boolean;\r\n\r\n /** Indicates that the texture is a history texture (default: false) */\r\n isHistoryTexture?: boolean;\r\n};\r\n\r\n/**\r\n * Represents a texture description in the frame graph.\r\n * This is basically the same thing than FrameGraphTextureCreationOptions, but the size is never in percentage and always in pixels.\r\n */\r\nexport type FrameGraphTextureDescription = {\r\n /** Size of the texture */\r\n size: { width: number; height: number };\r\n\r\n /** Options used to create the texture */\r\n options: FrameGraphTextureOptions;\r\n};\r\n\r\n/**\r\n * Defines a pass in the frame graph.\r\n */\r\nexport interface IFrameGraphPass {\r\n /**\r\n * The name of the pass.\r\n */\r\n name: string;\r\n\r\n /**\r\n * Whether the pass is disabled.\r\n */\r\n disabled: boolean;\r\n\r\n /**\r\n * Initializes the pass.\r\n * This function is called once before the first execution of the pass.\r\n * @param func The function to initialize the pass.\r\n */\r\n setInitializeFunc(func: (context: FrameGraphContext) => void): void;\r\n\r\n /**\r\n * Sets the function to execute when the pass is executed\r\n * @param func The function to execute when the pass is executed\r\n */\r\n setExecuteFunc(func: (context: FrameGraphContext) => void): void;\r\n\r\n /** @internal */\r\n _initialize(): void;\r\n\r\n /** @internal */\r\n _execute(): void;\r\n\r\n /** @internal */\r\n _isValid(): Nullable<string>;\r\n\r\n /** @internal */\r\n _dispose(): void;\r\n}\r\n"]}
1
+ {"version":3,"file":"frameGraphTypes.js","sourceRoot":"","sources":["../../../../dev/core/src/FrameGraph/frameGraphTypes.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,gEAAgE;AAChE,MAAM,CAAC,MAAM,4BAA4B,GAA4B,CAAC,CAAC;AAEvE;;GAEG;AACH,gEAAgE;AAChE,MAAM,CAAC,MAAM,mCAAmC,GAA4B,CAAC,CAAC","sourcesContent":["import type { Nullable, TextureSize, FrameGraphContext } from \"core/index\";\r\n\r\n/**\r\n * Represents a texture handle in the frame graph.\r\n */\r\nexport type FrameGraphTextureHandle = number;\r\n\r\n/**\r\n * Represents a texture handle for the backbuffer color texture.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const backbufferColorTextureHandle: FrameGraphTextureHandle = 0;\r\n\r\n/**\r\n * Represents a texture handle for the backbuffer depth/stencil texture.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const backbufferDepthStencilTextureHandle: FrameGraphTextureHandle = 1;\r\n\r\n/**\r\n * Options used to describe a texture to be created in the frame graph.\r\n */\r\nexport type FrameGraphTextureOptions = {\r\n /** Specifies if mipmaps must be created for the textures (default: false) */\r\n createMipMaps?: boolean;\r\n\r\n /** Defines sample count (default: 1) */\r\n samples?: number;\r\n\r\n /**\r\n * Define the type of the textures (of Constants.TEXTURE_2D, .TEXTURE_2D_ARRAY, .TEXTURE_CUBE_MAP, .TEXTURE_CUBE_MAP_ARRAY, .TEXTURE_3D).\r\n */\r\n targetTypes?: number[];\r\n\r\n /**\r\n * Define the number of layers of the textures (if applicable, given the corresponding targetType) (for Constants.TEXTURE_3D, .TEXTURE_2D_ARRAY, and .TEXTURE_CUBE_MAP_ARRAY)\r\n */\r\n layerCounts?: number[];\r\n\r\n /** Defines the type of the texture channels (UNSIGNED_BYTE, FLOAT, etc.) */\r\n types?: number[];\r\n\r\n /** Defines the format of the textures (RED, RG, RGB, RGBA, ALPHA...) */\r\n formats?: number[];\r\n\r\n /** Defines if sRGB format should be used for each of texture */\r\n useSRGBBuffers?: boolean[];\r\n\r\n /** Defines the creation flags of the textures (Constants.TEXTURE_CREATIONFLAG_STORAGE for storage textures, for eg) */\r\n creationFlags?: number[];\r\n\r\n /** Defines the names of the textures (used for debugging purpose) */\r\n labels?: string[];\r\n};\r\n\r\n/**\r\n * Options used to create a texture / list of textures in the frame graph.\r\n */\r\nexport type FrameGraphTextureCreationOptions = {\r\n /** Size of the textures. If sizeIsPercentage is true, these are percentages relative to the screen size (100 = 100%) */\r\n size: TextureSize;\r\n\r\n /** Options used to create the textures */\r\n options: FrameGraphTextureOptions;\r\n\r\n /** If true, indicates that \"size\" is percentages relative to the screen size */\r\n sizeIsPercentage: boolean;\r\n\r\n /** Indicates that the texture is a history texture (default: false) */\r\n isHistoryTexture?: boolean;\r\n};\r\n\r\n/**\r\n * Represents a texture description in the frame graph.\r\n * This is basically the same thing than FrameGraphTextureCreationOptions, but the size is never in percentage and always in pixels.\r\n */\r\nexport type FrameGraphTextureDescription = {\r\n /** Size of the texture */\r\n size: { width: number; height: number };\r\n\r\n /** Options used to create the texture */\r\n options: FrameGraphTextureOptions;\r\n};\r\n\r\n/**\r\n * Defines a pass in the frame graph.\r\n */\r\nexport interface IFrameGraphPass {\r\n /**\r\n * The name of the pass.\r\n */\r\n name: string;\r\n\r\n /**\r\n * Whether the pass is disabled.\r\n */\r\n disabled: boolean;\r\n\r\n /**\r\n * Initializes the pass.\r\n * This function is called once before the first execution of the pass.\r\n * @param func The function to initialize the pass.\r\n */\r\n setInitializeFunc(func: (context: FrameGraphContext) => void): void;\r\n\r\n /**\r\n * Sets the function to execute when the pass is executed\r\n * @param func The function to execute when the pass is executed\r\n */\r\n setExecuteFunc(func: (context: FrameGraphContext) => void): void;\r\n\r\n /** @internal */\r\n _initialize(): void;\r\n\r\n /** @internal */\r\n _execute(): void;\r\n\r\n /** @internal */\r\n _isValid(): Nullable<string>;\r\n\r\n /** @internal */\r\n _dispose(): void;\r\n}\r\n"]}
@@ -28,6 +28,7 @@ import { Tools } from "../../Misc/tools.js";
28
28
  import { PostProcess } from "../../PostProcesses/postProcess.js";
29
29
  import { SpriteManager } from "../../Sprites/spriteManager.js";
30
30
  import { GetIndividualParser, Parse } from "./babylonFileParser.function.js";
31
+ import { Texture } from "../../Materials.js";
31
32
  /** @internal */
32
33
  // eslint-disable-next-line @typescript-eslint/naming-convention, no-var
33
34
  export var _BabylonLoaderRegistered = true;
@@ -268,6 +269,18 @@ const LoadAssetContainer = (scene, data, rootUrl, onError, addToScene = false) =
268
269
  }
269
270
  }
270
271
  }
272
+ if (parsedData.textures !== undefined && parsedData.textures !== null) {
273
+ for (index = 0, cache = parsedData.textures.length; index < cache; index++) {
274
+ const parsedTexture = parsedData.textures[index];
275
+ const texture = Texture.Parse(parsedTexture, scene, rootUrl);
276
+ if (texture) {
277
+ if (container.textures.indexOf(texture) == -1) {
278
+ container.textures.push(texture);
279
+ texture._parentContainer = container;
280
+ }
281
+ }
282
+ }
283
+ }
271
284
  if (parsedData.multiMaterials !== undefined && parsedData.multiMaterials !== null) {
272
285
  for (index = 0, cache = parsedData.multiMaterials.length; index < cache; index++) {
273
286
  const parsedMultiMaterial = parsedData.multiMaterials[index];