@babylonjs/core 7.33.0 → 7.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Cameras/arcRotateCamera.d.ts +14 -0
- package/Cameras/arcRotateCamera.js +39 -19
- package/Cameras/arcRotateCamera.js.map +1 -1
- package/Decorators/nodeDecorator.d.ts +2 -0
- package/Decorators/nodeDecorator.js +1 -0
- package/Decorators/nodeDecorator.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.d.ts +63 -0
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +150 -0
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/Rendering/objectRendererBlock.d.ts +3 -47
- package/FrameGraph/Node/Blocks/Rendering/objectRendererBlock.js +2 -129
- package/FrameGraph/Node/Blocks/Rendering/objectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.d.ts +40 -0
- package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.js +98 -0
- package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/Textures/clearBlock.js +3 -3
- package/FrameGraph/Node/Blocks/Textures/clearBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/index.d.ts +3 -2
- package/FrameGraph/Node/Blocks/index.js +3 -2
- package/FrameGraph/Node/Blocks/index.js.map +1 -1
- package/FrameGraph/Passes/renderPass.js +1 -1
- package/FrameGraph/Passes/renderPass.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.d.ts +21 -0
- package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js +110 -0
- package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js.map +1 -0
- package/FrameGraph/frameGraph.d.ts +6 -0
- package/FrameGraph/frameGraph.js +15 -1
- package/FrameGraph/frameGraph.js.map +1 -1
- package/FrameGraph/frameGraphRenderContext.d.ts +3 -2
- package/FrameGraph/frameGraphRenderContext.js +9 -4
- package/FrameGraph/frameGraphRenderContext.js.map +1 -1
- package/FrameGraph/frameGraphTask.js +5 -1
- package/FrameGraph/frameGraphTask.js.map +1 -1
- package/FrameGraph/frameGraphTextureManager.d.ts +8 -0
- package/FrameGraph/frameGraphTextureManager.js +51 -7
- package/FrameGraph/frameGraphTextureManager.js.map +1 -1
- package/FrameGraph/frameGraphTypes.d.ts +2 -0
- package/FrameGraph/frameGraphTypes.js.map +1 -1
- package/FrameGraph/index.d.ts +3 -2
- package/FrameGraph/index.js +3 -2
- package/FrameGraph/index.js.map +1 -1
- package/Layers/layer.d.ts +4 -0
- package/Layers/layer.js +13 -2
- package/Layers/layer.js.map +1 -1
- package/Loading/sceneLoader.d.ts +11 -8
- package/Loading/sceneLoader.js +64 -35
- package/Loading/sceneLoader.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.d.ts +2 -0
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +12 -0
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
- package/Materials/Node/Blocks/GaussianSplatting/gaussianBlock.js +6 -1
- package/Materials/Node/Blocks/GaussianSplatting/gaussianBlock.js.map +1 -1
- package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.js +9 -2
- package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.js.map +1 -1
- package/Materials/Node/Blocks/GaussianSplatting/index.d.ts +2 -0
- package/Materials/Node/Blocks/GaussianSplatting/index.js +3 -0
- package/Materials/Node/Blocks/GaussianSplatting/index.js.map +1 -1
- package/Materials/Node/Blocks/GaussianSplatting/splatReaderBlock.js +10 -3
- package/Materials/Node/Blocks/GaussianSplatting/splatReaderBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.d.ts +1 -1
- package/Materials/Node/nodeMaterial.js +1 -1
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +2 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +7 -2
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Meshes/abstractMesh.hotSpot.js +2 -0
- package/Meshes/abstractMesh.hotSpot.js.map +1 -1
- package/Meshes/csg2.js +0 -3
- package/Meshes/csg2.js.map +1 -1
- package/Misc/webRequest.fetch.d.ts +16 -0
- package/Misc/webRequest.fetch.js +33 -0
- package/Misc/webRequest.fetch.js.map +1 -0
- package/PostProcesses/RenderPipeline/Pipelines/index.d.ts +2 -0
- package/PostProcesses/RenderPipeline/Pipelines/index.js +2 -0
- package/PostProcesses/RenderPipeline/Pipelines/index.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.d.ts +6 -8
- package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.js +32 -49
- package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.js.map +1 -1
- package/PostProcesses/thinTAAPostProcess.d.ts +72 -0
- package/PostProcesses/thinTAAPostProcess.js +149 -0
- package/PostProcesses/thinTAAPostProcess.js.map +1 -0
- package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsAccumulationPass.d.ts +3 -3
- package/Rendering/IBLShadows/iblShadowsAccumulationPass.js +7 -7
- package/Rendering/IBLShadows/iblShadowsAccumulationPass.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.d.ts +70 -69
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +102 -112
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js +8 -6
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Shaders/geometry.vertex.js +1 -1
- package/Shaders/geometry.vertex.js.map +1 -1
- package/Shaders/layer.fragment.js +3 -1
- package/Shaders/layer.fragment.js.map +1 -1
- package/Shaders/volumetricLightScattering.fragment.js +1 -1
- package/Shaders/volumetricLightScattering.fragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/gaussianSplatting.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/gaussianSplatting.js +47 -0
- package/ShadersWGSL/ShadersInclude/gaussianSplatting.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/gaussianSplattingFragmentDeclaration.d.ts +7 -0
- package/ShadersWGSL/ShadersInclude/gaussianSplattingFragmentDeclaration.js +20 -0
- package/ShadersWGSL/ShadersInclude/gaussianSplattingFragmentDeclaration.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/gaussianSplattingUboDeclaration.d.ts +7 -0
- package/ShadersWGSL/ShadersInclude/gaussianSplattingUboDeclaration.js +13 -0
- package/ShadersWGSL/ShadersInclude/gaussianSplattingUboDeclaration.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/gaussianSplattingVertexDeclaration.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/gaussianSplattingVertexDeclaration.js +10 -0
- package/ShadersWGSL/ShadersInclude/gaussianSplattingVertexDeclaration.js.map +1 -0
- package/ShadersWGSL/gaussianSplatting.fragment.d.ts +10 -0
- package/ShadersWGSL/gaussianSplatting.fragment.js +23 -0
- package/ShadersWGSL/gaussianSplatting.fragment.js.map +1 -0
- package/ShadersWGSL/gaussianSplatting.vertex.d.ts +14 -0
- package/ShadersWGSL/gaussianSplatting.vertex.js +31 -0
- package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -0
- package/ShadersWGSL/geometry.vertex.js +1 -1
- package/ShadersWGSL/geometry.vertex.js.map +1 -1
- package/ShadersWGSL/layer.fragment.js +4 -2
- package/ShadersWGSL/layer.fragment.js.map +1 -1
- package/ShadersWGSL/taa.fragment.d.ts +5 -0
- package/ShadersWGSL/taa.fragment.js +11 -0
- package/ShadersWGSL/taa.fragment.js.map +1 -0
- package/package.json +1 -1
|
@@ -82,6 +82,7 @@ export class FrameGraphTask {
|
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
84
|
let disabledOutputTexture = null;
|
|
85
|
+
let disabledOutputTextureHandle = -1;
|
|
85
86
|
let disabledOutputDepthTexture = null;
|
|
86
87
|
let disabledOutputObjectList;
|
|
87
88
|
for (const pass of this._passesDisabled) {
|
|
@@ -91,6 +92,7 @@ export class FrameGraphTask {
|
|
|
91
92
|
}
|
|
92
93
|
if (FrameGraphRenderPass.IsRenderPass(pass)) {
|
|
93
94
|
disabledOutputTexture = this._frameGraph.getTexture(pass.renderTarget);
|
|
95
|
+
disabledOutputTextureHandle = pass.renderTarget;
|
|
94
96
|
disabledOutputDepthTexture = pass.renderTargetDepth !== undefined ? this._frameGraph.getTexture(pass.renderTargetDepth) : null;
|
|
95
97
|
}
|
|
96
98
|
else if (FrameGraphCullPass.IsCullPass(pass)) {
|
|
@@ -99,7 +101,9 @@ export class FrameGraphTask {
|
|
|
99
101
|
}
|
|
100
102
|
if (this._passesDisabled.length > 0) {
|
|
101
103
|
if (outputTexture !== disabledOutputTexture) {
|
|
102
|
-
|
|
104
|
+
if (!this._frameGraph.isHistoryTexture(disabledOutputTextureHandle)) {
|
|
105
|
+
throw new Error(`The output texture of the task "${this.name}" is different when it is enabled or disabled.`);
|
|
106
|
+
}
|
|
103
107
|
}
|
|
104
108
|
if (outputDepthTexture !== disabledOutputDepthTexture) {
|
|
105
109
|
throw new Error(`The output depth texture of the task "${this.name}" is different when it is enabled or disabled.`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frameGraphTask.js","sourceRoot":"","sources":["../../../../dev/core/src/FrameGraph/frameGraphTask.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D;;;GAGG;AACH,MAAM,OAAgB,cAAc;IAUhC;;OAEG;IACH,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,IAAW,IAAI,CAAC,KAAa;QACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAID;;OAEG;IACH,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,IAAW,QAAQ,CAAC,KAAc;QAC9B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IAC3B,CAAC;IAOD;;;OAGG;IACI,OAAO;QACV,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,OAAO;QACV,IAAI,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACH,YAAY,IAAY,EAAE,UAAsB;QAxDxC,YAAO,GAAsB,EAAE,CAAC;QAChC,oBAAe,GAAsB,EAAE,CAAC;QAiBtC,cAAS,GAAG,KAAK,CAAC;QAuCxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC;IAED,gBAAgB;IACT,MAAM;QACT,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,gBAAgB;IACT,QAAQ,CAAC,IAAqB,EAAE,QAAiB;QACpD,IAAI,QAAQ,EAAE;YACV,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACnC;aAAM;YACH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC3B;IACL,CAAC;IAED,gBAAgB;IACT,UAAU;QACb,IAAI,aAAa,GAAkC,IAAI,CAAC;QACxD,IAAI,kBAAkB,GAAkC,IAAI,CAAC;QAC7D,IAAI,gBAAkD,CAAC;QAEvD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAQ,EAAE;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/B,IAAI,MAAM,EAAE;gBACR,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,mBAAmB,MAAM,EAAE,CAAC,CAAC;aAClE;YACD,IAAI,oBAAoB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;gBACzC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC/D,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;aAC1H;iBAAM,IAAI,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;gBAC5C,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC;aACtC;SACJ;QAED,IAAI,qBAAqB,GAAkC,IAAI,CAAC;QAChE,IAAI,0BAA0B,GAAkC,IAAI,CAAC;QACrE,IAAI,wBAA0D,CAAC;QAE/D,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,eAAgB,EAAE;YACtC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/B,IAAI,MAAM,EAAE;gBACR,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,mBAAmB,MAAM,EAAE,CAAC,CAAC;aAClE;YACD,IAAI,oBAAoB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;gBACzC,qBAAqB,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACvE,0BAA0B,GAAG,IAAI,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;aAClI;iBAAM,IAAI,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;gBAC5C,wBAAwB,GAAG,IAAI,CAAC,UAAU,CAAC;aAC9C;SACJ;QAED,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;YACjC,IAAI,aAAa,KAAK,qBAAqB,EAAE;gBACzC,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,CAAC,IAAI,gDAAgD,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"frameGraphTask.js","sourceRoot":"","sources":["../../../../dev/core/src/FrameGraph/frameGraphTask.ts"],"names":[],"mappings":"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","sourcesContent":["// eslint-disable-next-line import/no-internal-modules\r\nimport type { RenderTargetWrapper, FrameGraph, FrameGraphObjectList, IFrameGraphPass, Nullable, FrameGraphTextureHandle } from \"core/index\";\r\nimport { FrameGraphCullPass } from \"./Passes/cullPass\";\r\nimport { FrameGraphRenderPass } from \"./Passes/renderPass\";\r\n\r\n/**\r\n * Represents a task in a frame graph.\r\n * @experimental\r\n */\r\nexport abstract class FrameGraphTask {\r\n protected _frameGraph: FrameGraph;\r\n\r\n private _passes: IFrameGraphPass[] = [];\r\n private _passesDisabled: IFrameGraphPass[] = [];\r\n\r\n // Note: must be a getter/setter even if there's no specific processing, otherwise inherited classes can't make it a getter/setter!\r\n // Same thing for the disabled property\r\n protected _name: string;\r\n\r\n /**\r\n * The name of the task.\r\n */\r\n public get name() {\r\n return this._name;\r\n }\r\n\r\n public set name(value: string) {\r\n this._name = value;\r\n }\r\n\r\n protected _disabled = false;\r\n\r\n /**\r\n * Whether the task is disabled.\r\n */\r\n public get disabled() {\r\n return this._disabled;\r\n }\r\n\r\n public set disabled(value: boolean) {\r\n this._disabled = value;\r\n }\r\n\r\n /**\r\n * Records the task in the frame graph. Use this function to add content (render passes, ...) to the task.\r\n */\r\n public abstract record(): void;\r\n\r\n /**\r\n * Checks if the task is ready to be executed.\r\n * @returns True if the task is ready to be executed, else false.\r\n */\r\n public isReady(): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Disposes of the task.\r\n */\r\n public dispose() {\r\n this._reset();\r\n }\r\n\r\n /**\r\n * Constructs a new frame graph task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph this task is associated with.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph) {\r\n this.name = name;\r\n this._frameGraph = frameGraph;\r\n this._reset();\r\n }\r\n\r\n /** @internal */\r\n public _reset() {\r\n this._passes.length = 0;\r\n this._passesDisabled.length = 0;\r\n }\r\n\r\n /** @internal */\r\n public _addPass(pass: IFrameGraphPass, disabled: boolean) {\r\n if (disabled) {\r\n this._passesDisabled.push(pass);\r\n } else {\r\n this._passes.push(pass);\r\n }\r\n }\r\n\r\n /** @internal */\r\n public _checkTask() {\r\n let outputTexture: Nullable<RenderTargetWrapper> = null;\r\n let outputDepthTexture: Nullable<RenderTargetWrapper> = null;\r\n let outputObjectList: FrameGraphObjectList | undefined;\r\n\r\n for (const pass of this._passes!) {\r\n const errMsg = pass._isValid();\r\n if (errMsg) {\r\n throw new Error(`Pass \"${pass.name}\" is not valid. ${errMsg}`);\r\n }\r\n if (FrameGraphRenderPass.IsRenderPass(pass)) {\r\n outputTexture = this._frameGraph.getTexture(pass.renderTarget);\r\n outputDepthTexture = pass.renderTargetDepth !== undefined ? this._frameGraph.getTexture(pass.renderTargetDepth) : null;\r\n } else if (FrameGraphCullPass.IsCullPass(pass)) {\r\n outputObjectList = pass.objectList;\r\n }\r\n }\r\n\r\n let disabledOutputTexture: Nullable<RenderTargetWrapper> = null;\r\n let disabledOutputTextureHandle: FrameGraphTextureHandle = -1;\r\n let disabledOutputDepthTexture: Nullable<RenderTargetWrapper> = null;\r\n let disabledOutputObjectList: FrameGraphObjectList | undefined;\r\n\r\n for (const pass of this._passesDisabled!) {\r\n const errMsg = pass._isValid();\r\n if (errMsg) {\r\n throw new Error(`Pass \"${pass.name}\" is not valid. ${errMsg}`);\r\n }\r\n if (FrameGraphRenderPass.IsRenderPass(pass)) {\r\n disabledOutputTexture = this._frameGraph.getTexture(pass.renderTarget);\r\n disabledOutputTextureHandle = pass.renderTarget;\r\n disabledOutputDepthTexture = pass.renderTargetDepth !== undefined ? this._frameGraph.getTexture(pass.renderTargetDepth) : null;\r\n } else if (FrameGraphCullPass.IsCullPass(pass)) {\r\n disabledOutputObjectList = pass.objectList;\r\n }\r\n }\r\n\r\n if (this._passesDisabled.length > 0) {\r\n if (outputTexture !== disabledOutputTexture) {\r\n if (!this._frameGraph.isHistoryTexture(disabledOutputTextureHandle)) {\r\n throw new Error(`The output texture of the task \"${this.name}\" is different when it is enabled or disabled.`);\r\n }\r\n }\r\n if (outputDepthTexture !== disabledOutputDepthTexture) {\r\n throw new Error(`The output depth texture of the task \"${this.name}\" is different when it is enabled or disabled.`);\r\n }\r\n if (outputObjectList !== disabledOutputObjectList) {\r\n throw new Error(`The output object list of the task \"${this.name}\" is different when it is enabled or disabled.`);\r\n }\r\n }\r\n }\r\n\r\n /** @internal */\r\n public _getPasses(): IFrameGraphPass[] {\r\n return this.disabled && this._passesDisabled.length > 0 ? this._passesDisabled : this._passes;\r\n }\r\n}\r\n"]}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import type { Scene, AbstractEngine, RenderTargetWrapper, TextureSize, Nullable, FrameGraphTextureCreationOptions, FrameGraphTextureHandle } from "../index.js";
|
|
2
2
|
import { Texture } from "../Materials/Textures/texture";
|
|
3
|
+
type HistoryTexture = {
|
|
4
|
+
textures: Array<Nullable<RenderTargetWrapper>>;
|
|
5
|
+
handles: Array<FrameGraphTextureHandle>;
|
|
6
|
+
index: number;
|
|
7
|
+
refHandles: Array<FrameGraphTextureHandle>;
|
|
8
|
+
};
|
|
3
9
|
type TextureEntry = {
|
|
4
10
|
texture: Nullable<RenderTargetWrapper>;
|
|
5
11
|
name: string;
|
|
@@ -25,6 +31,7 @@ export declare class FrameGraphTextureManager {
|
|
|
25
31
|
private _scene?;
|
|
26
32
|
private static _Counter;
|
|
27
33
|
_textures: Map<FrameGraphTextureHandle, TextureEntry>;
|
|
34
|
+
_historyTextures: Map<FrameGraphTextureHandle, HistoryTexture>;
|
|
28
35
|
constructor(_engine: AbstractEngine, _debugTextures?: boolean, _scene?: Scene | undefined);
|
|
29
36
|
isBackbuffer(handle: FrameGraphTextureHandle): boolean;
|
|
30
37
|
isBackbufferColor(handle: FrameGraphTextureHandle): boolean;
|
|
@@ -37,6 +44,7 @@ export declare class FrameGraphTextureManager {
|
|
|
37
44
|
width: number;
|
|
38
45
|
height: number;
|
|
39
46
|
};
|
|
47
|
+
updateHistoryTextures(): void;
|
|
40
48
|
dispose(): void;
|
|
41
49
|
allocateTextures(): void;
|
|
42
50
|
createDanglingHandle(): number;
|
|
@@ -18,6 +18,7 @@ export class FrameGraphTextureManager {
|
|
|
18
18
|
this._debugTextures = _debugTextures;
|
|
19
19
|
this._scene = _scene;
|
|
20
20
|
this._textures = new Map();
|
|
21
|
+
this._historyTextures = new Map();
|
|
21
22
|
this._addSystemTextures();
|
|
22
23
|
}
|
|
23
24
|
isBackbuffer(handle) {
|
|
@@ -54,12 +55,16 @@ export class FrameGraphTextureManager {
|
|
|
54
55
|
return this._textures.get(handle).creationOptions;
|
|
55
56
|
}
|
|
56
57
|
getTextureFromHandle(handle) {
|
|
58
|
+
const historyEntry = this._historyTextures.get(handle);
|
|
59
|
+
if (historyEntry) {
|
|
60
|
+
return historyEntry.textures[historyEntry.index ^ 1]; // get the read texture
|
|
61
|
+
}
|
|
57
62
|
return this._textures.get(handle).texture;
|
|
58
63
|
}
|
|
59
64
|
importTexture(name, texture, handle) {
|
|
60
65
|
const internalTexture = texture.texture;
|
|
61
66
|
if (!internalTexture) {
|
|
62
|
-
throw new Error("Texture must have an internal texture to be imported");
|
|
67
|
+
throw new Error("importTexture: Texture must have an internal texture to be imported");
|
|
63
68
|
}
|
|
64
69
|
if (handle !== undefined) {
|
|
65
70
|
this._freeEntry(handle);
|
|
@@ -101,6 +106,15 @@ export class FrameGraphTextureManager {
|
|
|
101
106
|
height: Math.floor((height * screenHeight) / 100),
|
|
102
107
|
};
|
|
103
108
|
}
|
|
109
|
+
updateHistoryTextures() {
|
|
110
|
+
this._historyTextures.forEach((entry) => {
|
|
111
|
+
entry.index = entry.index ^ 1;
|
|
112
|
+
for (const refHandle of entry.refHandles) {
|
|
113
|
+
const textureEntry = this._textures.get(refHandle);
|
|
114
|
+
textureEntry.texture = entry.textures[entry.index];
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}
|
|
104
118
|
dispose() {
|
|
105
119
|
this.releaseTextures();
|
|
106
120
|
}
|
|
@@ -151,15 +165,20 @@ export class FrameGraphTextureManager {
|
|
|
151
165
|
entry.debug = this._createDebugTexture(entry.name, entry.texture);
|
|
152
166
|
}
|
|
153
167
|
});
|
|
168
|
+
this._historyTextures.forEach((entry) => {
|
|
169
|
+
for (let i = 0; i < entry.handles.length; i++) {
|
|
170
|
+
entry.textures[i] = this._textures.get(entry.handles[i]).texture;
|
|
171
|
+
}
|
|
172
|
+
});
|
|
154
173
|
}
|
|
155
174
|
createDanglingHandle() {
|
|
156
175
|
return FrameGraphTextureManager._Counter++;
|
|
157
176
|
}
|
|
158
177
|
resolveDanglingHandle(danglingHandle, handle) {
|
|
159
|
-
|
|
178
|
+
const textureEntry = this._textures.get(handle);
|
|
179
|
+
if (textureEntry === undefined) {
|
|
160
180
|
throw new Error(`resolveDanglingHandle: Handle ${handle} does not exist!`);
|
|
161
181
|
}
|
|
162
|
-
const textureEntry = this._textures.get(handle);
|
|
163
182
|
this._textures.set(danglingHandle, {
|
|
164
183
|
texture: textureEntry.texture,
|
|
165
184
|
refHandle: handle,
|
|
@@ -168,11 +187,16 @@ export class FrameGraphTextureManager {
|
|
|
168
187
|
size: { ...textureEntry.creationOptions.size },
|
|
169
188
|
options: { ...textureEntry.creationOptions.options, label: textureEntry.name },
|
|
170
189
|
sizeIsPercentage: textureEntry.creationOptions.sizeIsPercentage,
|
|
190
|
+
isHistoryTexture: false,
|
|
171
191
|
},
|
|
172
192
|
namespace: textureEntry.namespace,
|
|
173
193
|
parentHandle: textureEntry.parentHandle,
|
|
174
194
|
parentTextureIndex: textureEntry.parentTextureIndex,
|
|
175
195
|
});
|
|
196
|
+
const historyEntry = this._historyTextures.get(handle);
|
|
197
|
+
if (historyEntry) {
|
|
198
|
+
historyEntry.refHandles.push(danglingHandle);
|
|
199
|
+
}
|
|
176
200
|
}
|
|
177
201
|
releaseTextures(releaseAll = true) {
|
|
178
202
|
this._textures.forEach((entry, handle) => {
|
|
@@ -189,8 +213,14 @@ export class FrameGraphTextureManager {
|
|
|
189
213
|
this._textures.delete(handle);
|
|
190
214
|
}
|
|
191
215
|
});
|
|
216
|
+
this._historyTextures.forEach((entry) => {
|
|
217
|
+
for (let i = 0; i < entry.handles.length; i++) {
|
|
218
|
+
entry.textures[i] = null;
|
|
219
|
+
}
|
|
220
|
+
});
|
|
192
221
|
if (releaseAll) {
|
|
193
222
|
this._textures.clear();
|
|
223
|
+
this._historyTextures.clear();
|
|
194
224
|
this._addSystemTextures();
|
|
195
225
|
}
|
|
196
226
|
}
|
|
@@ -236,21 +266,35 @@ export class FrameGraphTextureManager {
|
|
|
236
266
|
}
|
|
237
267
|
_createHandleForTexture(name, texture, creationOptions, namespace, multiTargetMode = false, handle, parentHandle, parentTextureIndex) {
|
|
238
268
|
handle = handle ?? FrameGraphTextureManager._Counter++;
|
|
239
|
-
|
|
269
|
+
const textureName = creationOptions.isHistoryTexture ? `${name} - ping` : name;
|
|
270
|
+
const textureEntry = {
|
|
240
271
|
texture,
|
|
241
|
-
name,
|
|
272
|
+
name: textureName,
|
|
242
273
|
creationOptions: {
|
|
243
274
|
size: getDimensionsFromTextureSize(creationOptions.size),
|
|
244
|
-
options: { ...creationOptions.options, label:
|
|
275
|
+
options: { ...creationOptions.options, label: textureName },
|
|
245
276
|
sizeIsPercentage: creationOptions.sizeIsPercentage,
|
|
277
|
+
isHistoryTexture: creationOptions.isHistoryTexture,
|
|
246
278
|
},
|
|
247
279
|
namespace,
|
|
248
280
|
parentHandle,
|
|
249
281
|
parentTextureIndex,
|
|
250
|
-
}
|
|
282
|
+
};
|
|
283
|
+
this._textures.set(handle, textureEntry);
|
|
251
284
|
if (namespace === FrameGraphTextureNamespace.External) {
|
|
252
285
|
return handle;
|
|
253
286
|
}
|
|
287
|
+
if (creationOptions.isHistoryTexture) {
|
|
288
|
+
const pongCreationOptions = {
|
|
289
|
+
size: { ...textureEntry.creationOptions.size },
|
|
290
|
+
options: { ...textureEntry.creationOptions.options },
|
|
291
|
+
sizeIsPercentage: textureEntry.creationOptions.sizeIsPercentage,
|
|
292
|
+
isHistoryTexture: false,
|
|
293
|
+
};
|
|
294
|
+
const pongTexture = this._createHandleForTexture(`${name} - pong`, null, pongCreationOptions, namespace, false);
|
|
295
|
+
this._historyTextures.set(handle, { textures: [null, null], handles: [handle, pongTexture], index: 0, refHandles: [] });
|
|
296
|
+
return handle;
|
|
297
|
+
}
|
|
254
298
|
if (multiTargetMode) {
|
|
255
299
|
const textureCount = creationOptions.options.textureCount ?? 1;
|
|
256
300
|
for (let i = 0; i < textureCount; i++) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frameGraphTextureManager.js","sourceRoot":"","sources":["../../../../dev/core/src/FrameGraph/frameGraphTextureManager.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-internal-modules */\r\nimport type {\r\n Scene,\r\n AbstractEngine,\r\n RenderTargetWrapper,\r\n RenderTargetCreationOptions,\r\n TextureSize,\r\n Nullable,\r\n FrameGraphTextureCreationOptions,\r\n FrameGraphTextureHandle,\r\n} from \"core/index\";\r\nimport { getDimensionsFromTextureSize } from \"../Materials/Textures/textureCreationOptions\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { backbufferColorTextureHandle, backbufferDepthStencilTextureHandle } from \"./frameGraphTypes\";\r\nimport { Constants } from \"../Engines/constants\";\r\n\r\ntype TextureEntry = {\r\n texture: Nullable<RenderTargetWrapper>;\r\n name: string;\r\n creationOptions: FrameGraphTextureCreationOptions;\r\n namespace: FrameGraphTextureNamespace;\r\n debug?: Texture;\r\n parentHandle?: FrameGraphTextureHandle;\r\n parentTextureIndex?: number;\r\n refHandle?: FrameGraphTextureHandle;\r\n};\r\n\r\nenum FrameGraphTextureNamespace {\r\n Task,\r\n Graph,\r\n External,\r\n}\r\n\r\n/**\r\n * @experimental\r\n * @internal\r\n */\r\nexport class FrameGraphTextureManager {\r\n private static _Counter = 2; // 0 and 1 are reserved for backbuffer textures\r\n\r\n public _textures: Map<FrameGraphTextureHandle, TextureEntry> = new Map();\r\n\r\n constructor(\r\n private _engine: AbstractEngine,\r\n private _debugTextures = false,\r\n private _scene?: Scene\r\n ) {\r\n this._addSystemTextures();\r\n }\r\n\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 public isBackbufferColor(handle: FrameGraphTextureHandle): boolean {\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 public isBackbufferDepthStencil(handle: FrameGraphTextureHandle): boolean {\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 public getTextureCreationOptions(handle: FrameGraphTextureHandle): FrameGraphTextureCreationOptions {\r\n return this._textures.get(handle)!.creationOptions;\r\n }\r\n\r\n public getTextureFromHandle(handle: FrameGraphTextureHandle): Nullable<RenderTargetWrapper> {\r\n return this._textures.get(handle)!.texture;\r\n }\r\n\r\n public importTexture(name: string, texture: RenderTargetWrapper, handle?: FrameGraphTextureHandle): FrameGraphTextureHandle {\r\n const internalTexture = texture.texture;\r\n\r\n if (!internalTexture) {\r\n throw new Error(\"Texture must have an internal texture to be imported\");\r\n }\r\n\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 options: {\r\n generateMipMaps: internalTexture.generateMipMaps,\r\n generateDepthBuffer: texture._generateDepthBuffer,\r\n generateStencilBuffer: texture._generateStencilBuffer,\r\n samples: internalTexture.samples,\r\n label: internalTexture.label,\r\n types: [internalTexture.type],\r\n samplingModes: [internalTexture.samplingMode],\r\n formats: [internalTexture.format],\r\n targetTypes: [\r\n internalTexture.isCube\r\n ? Constants.TEXTURE_CUBE_MAP\r\n : internalTexture.is3D\r\n ? Constants.TEXTURE_3D\r\n : internalTexture.is2DArray\r\n ? Constants.TEXTURE_2D_ARRAY\r\n : Constants.TEXTURE_2D,\r\n ],\r\n useSRGBBuffers: [internalTexture._useSRGBBuffer],\r\n labels: internalTexture.label ? [internalTexture.label] : undefined,\r\n },\r\n sizeIsPercentage: false,\r\n };\r\n\r\n return this._createHandleForTexture(name, texture, creationOptions, FrameGraphTextureNamespace.External, false, handle);\r\n }\r\n\r\n public createRenderTargetTexture(\r\n name: string,\r\n taskNamespace: boolean,\r\n creationOptions: FrameGraphTextureCreationOptions,\r\n multiTargetMode = false,\r\n handle?: FrameGraphTextureHandle\r\n ): FrameGraphTextureHandle {\r\n return this._createHandleForTexture(\r\n name,\r\n null,\r\n creationOptions,\r\n taskNamespace ? FrameGraphTextureNamespace.Task : FrameGraphTextureNamespace.Graph,\r\n multiTargetMode,\r\n handle\r\n );\r\n }\r\n\r\n public getAbsoluteDimensions(\r\n size: TextureSize,\r\n screenWidth = this._engine.getRenderWidth(true),\r\n screenHeight = this._engine.getRenderHeight(true)\r\n ): { width: number; height: number } {\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 public dispose(): void {\r\n this.releaseTextures();\r\n }\r\n\r\n public allocateTextures() {\r\n this._textures.forEach((entry) => {\r\n if (!entry.texture) {\r\n if (entry.refHandle !== undefined) {\r\n const refEntry = this._textures.get(entry.refHandle)!;\r\n\r\n entry.texture = refEntry.texture;\r\n entry.texture?.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.parentHandle !== undefined) {\r\n const creationOptions = entry.creationOptions;\r\n const size = creationOptions.sizeIsPercentage ? this.getAbsoluteDimensions(creationOptions.size) : creationOptions.size;\r\n\r\n const parentEntry = this._textures.get(entry.parentHandle)!;\r\n const parentInternalTexture = parentEntry.texture!.textures![entry.parentTextureIndex!];\r\n\r\n const creationOptionsForTexture: RenderTargetCreationOptions = {\r\n createMipMaps: creationOptions.options.createMipMaps,\r\n generateMipMaps: creationOptions.options.generateMipMaps,\r\n generateDepthBuffer: creationOptions.options.generateDepthBuffer,\r\n generateStencilBuffer: creationOptions.options.generateStencilBuffer,\r\n samples: creationOptions.options.samples,\r\n type: creationOptions.options.types![0],\r\n format: creationOptions.options.formats![0],\r\n useSRGBBuffer: creationOptions.options.useSRGBBuffers![0],\r\n colorAttachment: parentInternalTexture,\r\n label: creationOptions.options.label,\r\n };\r\n\r\n entry.texture = this._engine.createRenderTargetTexture(size, creationOptionsForTexture);\r\n parentInternalTexture.incrementReferences();\r\n } else {\r\n const creationOptions = entry.creationOptions;\r\n const size = creationOptions.sizeIsPercentage ? this.getAbsoluteDimensions(creationOptions.size) : creationOptions.size;\r\n\r\n entry.texture = this._engine.createMultipleRenderTarget(size, creationOptions.options, false);\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\r\n public createDanglingHandle() {\r\n return FrameGraphTextureManager._Counter++;\r\n }\r\n\r\n public resolveDanglingHandle(danglingHandle: FrameGraphTextureHandle, handle: FrameGraphTextureHandle) {\r\n if (!this._textures.has(handle)) {\r\n throw new Error(`resolveDanglingHandle: Handle ${handle} does not exist!`);\r\n }\r\n\r\n const textureEntry = this._textures.get(handle)!;\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: { ...textureEntry.creationOptions.options, label: textureEntry.name },\r\n sizeIsPercentage: textureEntry.creationOptions.sizeIsPercentage,\r\n },\r\n namespace: textureEntry.namespace,\r\n parentHandle: textureEntry.parentHandle,\r\n parentTextureIndex: textureEntry.parentTextureIndex,\r\n });\r\n }\r\n\r\n public releaseTextures(releaseAll = true): void {\r\n this._textures.forEach((entry, handle) => {\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 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 }\r\n });\r\n\r\n if (releaseAll) {\r\n this._textures.clear();\r\n this._addSystemTextures();\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(backbufferColorTextureHandle, {\r\n name: \"backbuffer color\",\r\n texture: null,\r\n creationOptions: {\r\n size,\r\n options: {},\r\n sizeIsPercentage: false,\r\n },\r\n namespace: FrameGraphTextureNamespace.External,\r\n });\r\n\r\n this._textures.set(backbufferDepthStencilTextureHandle, {\r\n name: \"backbuffer depth/stencil\",\r\n texture: null,\r\n creationOptions: {\r\n size,\r\n options: {},\r\n sizeIsPercentage: false,\r\n },\r\n namespace: FrameGraphTextureNamespace.External,\r\n });\r\n }\r\n\r\n private _createDebugTexture(name: string, texture: RenderTargetWrapper): Texture | undefined {\r\n if (!this._debugTextures || !this._scene) {\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.texture || texture._depthStencilTexture!;\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<RenderTargetWrapper>,\r\n creationOptions: FrameGraphTextureCreationOptions,\r\n namespace: FrameGraphTextureNamespace,\r\n multiTargetMode = false,\r\n handle?: FrameGraphTextureHandle,\r\n parentHandle?: FrameGraphTextureHandle,\r\n parentTextureIndex?: number\r\n ): FrameGraphTextureHandle {\r\n handle = handle ?? FrameGraphTextureManager._Counter++;\r\n\r\n this._textures.set(handle, {\r\n texture,\r\n name,\r\n creationOptions: {\r\n size: getDimensionsFromTextureSize(creationOptions.size),\r\n options: { ...creationOptions.options, label: name },\r\n sizeIsPercentage: creationOptions.sizeIsPercentage,\r\n },\r\n namespace,\r\n parentHandle,\r\n parentTextureIndex,\r\n });\r\n\r\n if (namespace === FrameGraphTextureNamespace.External) {\r\n return handle;\r\n }\r\n\r\n if (multiTargetMode) {\r\n const textureCount = creationOptions.options.textureCount ?? 1;\r\n for (let i = 0; i < textureCount; i++) {\r\n const label = creationOptions.options.labels?.[i] ?? `${i}`;\r\n const textureName = `${name} - ${label}`;\r\n const creationOptionsForTexture: FrameGraphTextureCreationOptions = {\r\n size: getDimensionsFromTextureSize(creationOptions.size),\r\n options: {\r\n ...creationOptions.options,\r\n formats: [creationOptions.options.formats![i]],\r\n types: [creationOptions.options.types![i]],\r\n textureCount: 1,\r\n },\r\n sizeIsPercentage: creationOptions.sizeIsPercentage,\r\n };\r\n this._createHandleForTexture(textureName, null, creationOptionsForTexture, namespace, false, handle + i + 1, handle, i);\r\n }\r\n\r\n FrameGraphTextureManager._Counter += textureCount;\r\n }\r\n\r\n return handle;\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":["/* eslint-disable import/no-internal-modules */\r\nimport type {\r\n Scene,\r\n AbstractEngine,\r\n RenderTargetWrapper,\r\n RenderTargetCreationOptions,\r\n TextureSize,\r\n Nullable,\r\n FrameGraphTextureCreationOptions,\r\n FrameGraphTextureHandle,\r\n} from \"core/index\";\r\nimport { getDimensionsFromTextureSize } from \"../Materials/Textures/textureCreationOptions\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { backbufferColorTextureHandle, backbufferDepthStencilTextureHandle } from \"./frameGraphTypes\";\r\nimport { Constants } from \"../Engines/constants\";\r\n\r\ntype HistoryTexture = {\r\n textures: Array<Nullable<RenderTargetWrapper>>;\r\n handles: Array<FrameGraphTextureHandle>;\r\n index: number;\r\n refHandles: Array<FrameGraphTextureHandle>; // (dangling) handles that reference this history texture\r\n};\r\n\r\ntype TextureEntry = {\r\n texture: Nullable<RenderTargetWrapper>;\r\n name: string;\r\n creationOptions: FrameGraphTextureCreationOptions;\r\n namespace: FrameGraphTextureNamespace;\r\n debug?: Texture;\r\n parentHandle?: FrameGraphTextureHandle; // Parent handle if the texture comes from a multi-target texture\r\n parentTextureIndex?: number; // Index of the texture in the parent if the texture comes from a multi-target texture\r\n refHandle?: FrameGraphTextureHandle; // Handle of the texture this one is referencing - used for dangling handles\r\n};\r\n\r\nenum FrameGraphTextureNamespace {\r\n Task,\r\n Graph,\r\n External,\r\n}\r\n\r\n/**\r\n * @experimental\r\n * @internal\r\n */\r\nexport class FrameGraphTextureManager {\r\n private static _Counter = 2; // 0 and 1 are reserved for backbuffer textures\r\n\r\n public _textures: Map<FrameGraphTextureHandle, TextureEntry> = new Map();\r\n public _historyTextures: Map<FrameGraphTextureHandle, HistoryTexture> = new Map();\r\n\r\n constructor(\r\n private _engine: AbstractEngine,\r\n private _debugTextures = false,\r\n private _scene?: Scene\r\n ) {\r\n this._addSystemTextures();\r\n }\r\n\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 public isBackbufferColor(handle: FrameGraphTextureHandle): boolean {\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 public isBackbufferDepthStencil(handle: FrameGraphTextureHandle): boolean {\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 public getTextureCreationOptions(handle: FrameGraphTextureHandle): FrameGraphTextureCreationOptions {\r\n return this._textures.get(handle)!.creationOptions;\r\n }\r\n\r\n public getTextureFromHandle(handle: FrameGraphTextureHandle): Nullable<RenderTargetWrapper> {\r\n const historyEntry = this._historyTextures.get(handle);\r\n if (historyEntry) {\r\n return historyEntry.textures[historyEntry.index ^ 1]; // get the read texture\r\n }\r\n return this._textures.get(handle)!.texture;\r\n }\r\n\r\n public importTexture(name: string, texture: RenderTargetWrapper, handle?: FrameGraphTextureHandle): FrameGraphTextureHandle {\r\n const internalTexture = texture.texture;\r\n\r\n if (!internalTexture) {\r\n throw new Error(\"importTexture: Texture must have an internal texture to be imported\");\r\n }\r\n\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 options: {\r\n generateMipMaps: internalTexture.generateMipMaps,\r\n generateDepthBuffer: texture._generateDepthBuffer,\r\n generateStencilBuffer: texture._generateStencilBuffer,\r\n samples: internalTexture.samples,\r\n label: internalTexture.label,\r\n types: [internalTexture.type],\r\n samplingModes: [internalTexture.samplingMode],\r\n formats: [internalTexture.format],\r\n targetTypes: [\r\n internalTexture.isCube\r\n ? Constants.TEXTURE_CUBE_MAP\r\n : internalTexture.is3D\r\n ? Constants.TEXTURE_3D\r\n : internalTexture.is2DArray\r\n ? Constants.TEXTURE_2D_ARRAY\r\n : Constants.TEXTURE_2D,\r\n ],\r\n useSRGBBuffers: [internalTexture._useSRGBBuffer],\r\n labels: internalTexture.label ? [internalTexture.label] : undefined,\r\n },\r\n sizeIsPercentage: false,\r\n };\r\n\r\n return this._createHandleForTexture(name, texture, creationOptions, FrameGraphTextureNamespace.External, false, handle);\r\n }\r\n\r\n public createRenderTargetTexture(\r\n name: string,\r\n taskNamespace: boolean,\r\n creationOptions: FrameGraphTextureCreationOptions,\r\n multiTargetMode = false,\r\n handle?: FrameGraphTextureHandle\r\n ): FrameGraphTextureHandle {\r\n return this._createHandleForTexture(\r\n name,\r\n null,\r\n creationOptions,\r\n taskNamespace ? FrameGraphTextureNamespace.Task : FrameGraphTextureNamespace.Graph,\r\n multiTargetMode,\r\n handle\r\n );\r\n }\r\n\r\n public getAbsoluteDimensions(\r\n size: TextureSize,\r\n screenWidth = this._engine.getRenderWidth(true),\r\n screenHeight = this._engine.getRenderHeight(true)\r\n ): { width: number; height: number } {\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 public updateHistoryTextures(): void {\r\n this._historyTextures.forEach((entry) => {\r\n entry.index = entry.index ^ 1;\r\n for (const refHandle of entry.refHandles) {\r\n const textureEntry = this._textures.get(refHandle)!;\r\n textureEntry.texture = entry.textures[entry.index];\r\n }\r\n });\r\n }\r\n\r\n public dispose(): void {\r\n this.releaseTextures();\r\n }\r\n\r\n public allocateTextures() {\r\n this._textures.forEach((entry) => {\r\n if (!entry.texture) {\r\n if (entry.refHandle !== undefined) {\r\n const refEntry = this._textures.get(entry.refHandle)!;\r\n\r\n entry.texture = refEntry.texture;\r\n entry.texture?.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.parentHandle !== undefined) {\r\n const creationOptions = entry.creationOptions;\r\n const size = creationOptions.sizeIsPercentage ? this.getAbsoluteDimensions(creationOptions.size) : creationOptions.size;\r\n\r\n const parentEntry = this._textures.get(entry.parentHandle)!;\r\n const parentInternalTexture = parentEntry.texture!.textures![entry.parentTextureIndex!];\r\n\r\n const creationOptionsForTexture: RenderTargetCreationOptions = {\r\n createMipMaps: creationOptions.options.createMipMaps,\r\n generateMipMaps: creationOptions.options.generateMipMaps,\r\n generateDepthBuffer: creationOptions.options.generateDepthBuffer,\r\n generateStencilBuffer: creationOptions.options.generateStencilBuffer,\r\n samples: creationOptions.options.samples,\r\n type: creationOptions.options.types![0],\r\n format: creationOptions.options.formats![0],\r\n useSRGBBuffer: creationOptions.options.useSRGBBuffers![0],\r\n colorAttachment: parentInternalTexture,\r\n label: creationOptions.options.label,\r\n };\r\n\r\n entry.texture = this._engine.createRenderTargetTexture(size, creationOptionsForTexture);\r\n parentInternalTexture.incrementReferences();\r\n } else {\r\n const creationOptions = entry.creationOptions;\r\n const size = creationOptions.sizeIsPercentage ? this.getAbsoluteDimensions(creationOptions.size) : creationOptions.size;\r\n\r\n entry.texture = this._engine.createMultipleRenderTarget(size, creationOptions.options, false);\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 public createDanglingHandle() {\r\n return FrameGraphTextureManager._Counter++;\r\n }\r\n\r\n public resolveDanglingHandle(danglingHandle: FrameGraphTextureHandle, handle: FrameGraphTextureHandle) {\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 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: { ...textureEntry.creationOptions.options, label: textureEntry.name },\r\n sizeIsPercentage: textureEntry.creationOptions.sizeIsPercentage,\r\n isHistoryTexture: false,\r\n },\r\n namespace: textureEntry.namespace,\r\n parentHandle: textureEntry.parentHandle,\r\n parentTextureIndex: textureEntry.parentTextureIndex,\r\n });\r\n\r\n const historyEntry = this._historyTextures.get(handle);\r\n if (historyEntry) {\r\n historyEntry.refHandles.push(danglingHandle);\r\n }\r\n }\r\n\r\n public releaseTextures(releaseAll = true): void {\r\n this._textures.forEach((entry, handle) => {\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 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 }\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 private _addSystemTextures() {\r\n const size = { width: this._engine.getRenderWidth(true), height: this._engine.getRenderHeight(true) };\r\n\r\n this._textures.set(backbufferColorTextureHandle, {\r\n name: \"backbuffer color\",\r\n texture: null,\r\n creationOptions: {\r\n size,\r\n options: {},\r\n sizeIsPercentage: false,\r\n },\r\n namespace: FrameGraphTextureNamespace.External,\r\n });\r\n\r\n this._textures.set(backbufferDepthStencilTextureHandle, {\r\n name: \"backbuffer depth/stencil\",\r\n texture: null,\r\n creationOptions: {\r\n size,\r\n options: {},\r\n sizeIsPercentage: false,\r\n },\r\n namespace: FrameGraphTextureNamespace.External,\r\n });\r\n }\r\n\r\n private _createDebugTexture(name: string, texture: RenderTargetWrapper): Texture | undefined {\r\n if (!this._debugTextures || !this._scene) {\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.texture || texture._depthStencilTexture!;\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<RenderTargetWrapper>,\r\n creationOptions: FrameGraphTextureCreationOptions,\r\n namespace: FrameGraphTextureNamespace,\r\n multiTargetMode = false,\r\n handle?: FrameGraphTextureHandle,\r\n parentHandle?: FrameGraphTextureHandle,\r\n parentTextureIndex?: number\r\n ): FrameGraphTextureHandle {\r\n handle = handle ?? FrameGraphTextureManager._Counter++;\r\n\r\n const textureName = creationOptions.isHistoryTexture ? `${name} - ping` : name;\r\n\r\n const textureEntry: TextureEntry = {\r\n texture,\r\n name: textureName,\r\n creationOptions: {\r\n size: getDimensionsFromTextureSize(creationOptions.size),\r\n options: { ...creationOptions.options, label: textureName },\r\n sizeIsPercentage: creationOptions.sizeIsPercentage,\r\n isHistoryTexture: creationOptions.isHistoryTexture,\r\n },\r\n namespace,\r\n parentHandle,\r\n parentTextureIndex,\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, false);\r\n\r\n this._historyTextures.set(handle, { textures: [null, null], handles: [handle, pongTexture], index: 0, refHandles: [] });\r\n\r\n return handle;\r\n }\r\n\r\n if (multiTargetMode) {\r\n const textureCount = creationOptions.options.textureCount ?? 1;\r\n for (let i = 0; i < textureCount; i++) {\r\n const label = creationOptions.options.labels?.[i] ?? `${i}`;\r\n const textureName = `${name} - ${label}`;\r\n const creationOptionsForTexture: FrameGraphTextureCreationOptions = {\r\n size: getDimensionsFromTextureSize(creationOptions.size),\r\n options: {\r\n ...creationOptions.options,\r\n formats: [creationOptions.options.formats![i]],\r\n types: [creationOptions.options.types![i]],\r\n textureCount: 1,\r\n },\r\n sizeIsPercentage: creationOptions.sizeIsPercentage,\r\n };\r\n this._createHandleForTexture(textureName, null, creationOptionsForTexture, namespace, false, handle + i + 1, handle, i);\r\n }\r\n\r\n FrameGraphTextureManager._Counter += textureCount;\r\n }\r\n\r\n return handle;\r\n }\r\n}\r\n"]}
|
|
@@ -21,6 +21,8 @@ export type FrameGraphTextureCreationOptions = {
|
|
|
21
21
|
options: IMultiRenderTargetOptions;
|
|
22
22
|
/** If true, indicates that "size" is percentages relative to the screen size */
|
|
23
23
|
sizeIsPercentage: boolean;
|
|
24
|
+
/** Indicates that the texture is a history texture */
|
|
25
|
+
isHistoryTexture?: boolean;
|
|
24
26
|
};
|
|
25
27
|
/**
|
|
26
28
|
* Represents a texture description in the frame graph.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frameGraphTypes.js","sourceRoot":"","sources":["../../../../dev/core/src/FrameGraph/frameGraphTypes.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAA4B,CAAC,CAAC;AAEvE;;GAEG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAA4B,CAAC,CAAC","sourcesContent":["// eslint-disable-next-line import/no-internal-modules\r\nimport type { Nullable, TextureSize, FrameGraphContext, IMultiRenderTargetOptions } 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\nexport const backbufferColorTextureHandle: FrameGraphTextureHandle = 0;\r\n\r\n/**\r\n * Represents a texture handle for the backbuffer depth/stencil texture.\r\n */\r\nexport const backbufferDepthStencilTextureHandle: FrameGraphTextureHandle = 1;\r\n\r\n/**\r\n * Options used to create a texture in the frame graph.\r\n */\r\nexport type FrameGraphTextureCreationOptions = {\r\n /** Size of the texture. If sizeIsPercentage is true, these are percentages relative to the screen size */\r\n size: TextureSize;\r\n\r\n /** Options used to create the (multi) render target texture */\r\n options: IMultiRenderTargetOptions;\r\n\r\n /** If true, indicates that \"size\" is percentages relative to the screen size */\r\n sizeIsPercentage: 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 /**\r\n * Size of the texture.\r\n */\r\n size: { width: number; height: number };\r\n\r\n /**\r\n * Options used when the (multi) render target texture had been created.\r\n */\r\n options: IMultiRenderTargetOptions;\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 * 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 _execute(): void;\r\n\r\n /** @internal */\r\n _isValid(): Nullable<string>;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"frameGraphTypes.js","sourceRoot":"","sources":["../../../../dev/core/src/FrameGraph/frameGraphTypes.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAA4B,CAAC,CAAC;AAEvE;;GAEG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAA4B,CAAC,CAAC","sourcesContent":["// eslint-disable-next-line import/no-internal-modules\r\nimport type { Nullable, TextureSize, FrameGraphContext, IMultiRenderTargetOptions } 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\nexport const backbufferColorTextureHandle: FrameGraphTextureHandle = 0;\r\n\r\n/**\r\n * Represents a texture handle for the backbuffer depth/stencil texture.\r\n */\r\nexport const backbufferDepthStencilTextureHandle: FrameGraphTextureHandle = 1;\r\n\r\n/**\r\n * Options used to create a texture in the frame graph.\r\n */\r\nexport type FrameGraphTextureCreationOptions = {\r\n /** Size of the texture. If sizeIsPercentage is true, these are percentages relative to the screen size */\r\n size: TextureSize;\r\n\r\n /** Options used to create the (multi) render target texture */\r\n options: IMultiRenderTargetOptions;\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 */\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 /**\r\n * Size of the texture.\r\n */\r\n size: { width: number; height: number };\r\n\r\n /**\r\n * Options used when the (multi) render target texture had been created.\r\n */\r\n options: IMultiRenderTargetOptions;\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 * 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 _execute(): void;\r\n\r\n /** @internal */\r\n _isValid(): Nullable<string>;\r\n}\r\n"]}
|
package/FrameGraph/index.d.ts
CHANGED
|
@@ -16,9 +16,10 @@ export * from "./Tasks/PostProcesses/postProcessTask";
|
|
|
16
16
|
export * from "./Tasks/Texture/clearTextureTask";
|
|
17
17
|
export * from "./Tasks/Texture/copyToBackbufferColorTask";
|
|
18
18
|
export * from "./Tasks/Texture/copyToTextureTask";
|
|
19
|
-
export * from "./Tasks/Rendering/objectRendererTask";
|
|
20
|
-
export * from "./Tasks/Rendering/geometryRendererTask";
|
|
21
19
|
export * from "./Tasks/Rendering/cullObjectsTask";
|
|
20
|
+
export * from "./Tasks/Rendering/geometryRendererTask";
|
|
21
|
+
export * from "./Tasks/Rendering/objectRendererTask";
|
|
22
|
+
export * from "./Tasks/Rendering/taaObjectRendererTask";
|
|
22
23
|
export * from "./frameGraph";
|
|
23
24
|
export * from "./frameGraphContext";
|
|
24
25
|
export * from "./frameGraphObjectList";
|
package/FrameGraph/index.js
CHANGED
|
@@ -17,9 +17,10 @@ export * from "./Tasks/PostProcesses/postProcessTask.js";
|
|
|
17
17
|
export * from "./Tasks/Texture/clearTextureTask.js";
|
|
18
18
|
export * from "./Tasks/Texture/copyToBackbufferColorTask.js";
|
|
19
19
|
export * from "./Tasks/Texture/copyToTextureTask.js";
|
|
20
|
-
export * from "./Tasks/Rendering/objectRendererTask.js";
|
|
21
|
-
export * from "./Tasks/Rendering/geometryRendererTask.js";
|
|
22
20
|
export * from "./Tasks/Rendering/cullObjectsTask.js";
|
|
21
|
+
export * from "./Tasks/Rendering/geometryRendererTask.js";
|
|
22
|
+
export * from "./Tasks/Rendering/objectRendererTask.js";
|
|
23
|
+
export * from "./Tasks/Rendering/taaObjectRendererTask.js";
|
|
23
24
|
export * from "./frameGraph.js";
|
|
24
25
|
export * from "./frameGraphContext.js";
|
|
25
26
|
export * from "./frameGraphObjectList.js";
|
package/FrameGraph/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../dev/core/src/FrameGraph/index.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4CAA4C,CAAC;AAC3D,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC;AAClD,cAAc,qBAAqB,CAAC;AAEpC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AAEpC,cAAc,yCAAyC,CAAC;AACxD,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6CAA6C,CAAC;AAC5D,cAAc,wCAAwC,CAAC;AACvD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,uCAAuC,CAAC;AAEtD,cAAc,kCAAkC,CAAC;AACjD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,mCAAmC,CAAC;AAElD,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../dev/core/src/FrameGraph/index.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4CAA4C,CAAC;AAC3D,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC;AAClD,cAAc,qBAAqB,CAAC;AAEpC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AAEpC,cAAc,yCAAyC,CAAC;AACxD,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6CAA6C,CAAC;AAC5D,cAAc,wCAAwC,CAAC;AACvD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,uCAAuC,CAAC;AAEtD,cAAc,kCAAkC,CAAC;AACjD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,mCAAmC,CAAC;AAElD,cAAc,mCAAmC,CAAC;AAClD,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AACrD,cAAc,yCAAyC,CAAC;AAExD,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC","sourcesContent":["/* eslint-disable import/no-internal-modules */\r\nexport * from \"./Node/nodeRenderGraph\";\r\nexport * from \"./Node/nodeRenderGraphBlock\";\r\nexport * from \"./Node/nodeRenderGraphBlockConnectionPoint\";\r\nexport * from \"./Node/nodeRenderGraphBuildState\";\r\nexport * from \"./Node/Types/nodeRenderGraphTypes\";\r\nexport * from \"./Node/Blocks/index\";\r\n\r\nexport * from \"./Passes/pass\";\r\nexport * from \"./Passes/renderPass\";\r\n\r\nexport * from \"./Tasks/PostProcesses/blackAndWhiteTask\";\r\nexport * from \"./Tasks/PostProcesses/bloomTask\";\r\nexport * from \"./Tasks/PostProcesses/blurTask\";\r\nexport * from \"./Tasks/PostProcesses/circleOfConfusionTask\";\r\nexport * from \"./Tasks/PostProcesses/depthOfFieldTask\";\r\nexport * from \"./Tasks/PostProcesses/extractHighlightsTask\";\r\nexport * from \"./Tasks/PostProcesses/postProcessTask\";\r\n\r\nexport * from \"./Tasks/Texture/clearTextureTask\";\r\nexport * from \"./Tasks/Texture/copyToBackbufferColorTask\";\r\nexport * from \"./Tasks/Texture/copyToTextureTask\";\r\n\r\nexport * from \"./Tasks/Rendering/cullObjectsTask\";\r\nexport * from \"./Tasks/Rendering/geometryRendererTask\";\r\nexport * from \"./Tasks/Rendering/objectRendererTask\";\r\nexport * from \"./Tasks/Rendering/taaObjectRendererTask\";\r\n\r\nexport * from \"./frameGraph\";\r\nexport * from \"./frameGraphContext\";\r\nexport * from \"./frameGraphObjectList\";\r\nexport * from \"./frameGraphRenderContext\";\r\nexport * from \"./frameGraphTask\";\r\nexport * from \"./frameGraphTextureManager\";\r\nexport * from \"./frameGraphTypes\";\r\n"]}
|
package/Layers/layer.d.ts
CHANGED
|
@@ -71,6 +71,10 @@ export declare class Layer {
|
|
|
71
71
|
* renders in the main frame buffer of the canvas.
|
|
72
72
|
*/
|
|
73
73
|
renderOnlyInRenderTargetTextures: boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Define if the colors of the layer should be generated in linear space (default: false)
|
|
76
|
+
*/
|
|
77
|
+
convertToLinearSpace: boolean;
|
|
74
78
|
/**
|
|
75
79
|
* Define if the layer is enabled (ie. should be displayed). Default: true
|
|
76
80
|
*/
|
package/Layers/layer.js
CHANGED
|
@@ -105,6 +105,10 @@ export class Layer {
|
|
|
105
105
|
* renders in the main frame buffer of the canvas.
|
|
106
106
|
*/
|
|
107
107
|
this.renderOnlyInRenderTargetTextures = false;
|
|
108
|
+
/**
|
|
109
|
+
* Define if the colors of the layer should be generated in linear space (default: false)
|
|
110
|
+
*/
|
|
111
|
+
this.convertToLinearSpace = false;
|
|
108
112
|
/**
|
|
109
113
|
* Define if the layer is enabled (ie. should be displayed). Default: true
|
|
110
114
|
*/
|
|
@@ -180,8 +184,15 @@ export class Layer {
|
|
|
180
184
|
if (this.alphaTest) {
|
|
181
185
|
defines = "#define ALPHATEST";
|
|
182
186
|
}
|
|
183
|
-
if (this.texture
|
|
184
|
-
|
|
187
|
+
if (this.texture) {
|
|
188
|
+
if (this.texture.gammaSpace) {
|
|
189
|
+
if (this.convertToLinearSpace) {
|
|
190
|
+
defines += "\n#define CONVERT_TO_LINEAR";
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
else if (!this.convertToLinearSpace) {
|
|
194
|
+
defines += "\n#define CONVERT_TO_GAMMA";
|
|
195
|
+
}
|
|
185
196
|
}
|
|
186
197
|
if (this._previousDefines !== defines) {
|
|
187
198
|
this._previousDefines = defines;
|
package/Layers/layer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layer.js","sourceRoot":"","sources":["../../../../dev/core/src/Layers/layer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { Scene } from \"../scene\";\r\nimport { Vector2 } from \"../Maths/math.vector\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { Material } from \"../Materials/material\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport type { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport { SceneComponentConstants } from \"../sceneComponent\";\r\nimport { LayerSceneComponent } from \"./layerSceneComponent\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport type { DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { DrawWrapper } from \"../Materials/drawWrapper\";\r\n\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * This represents a full screen 2d layer.\r\n * This can be useful to display a picture in the background of your scene for instance.\r\n * @see https://www.babylonjs-playground.com/#08A2BS#1\r\n */\r\nexport class Layer {\r\n /**\r\n * Force all the layers to compile to glsl even on WebGPU engines.\r\n * False by default. This is mostly meant for backward compatibility.\r\n */\r\n public static ForceGLSL = false;\r\n /**\r\n * Define the texture the layer should display.\r\n */\r\n public texture: Nullable<BaseTexture>;\r\n\r\n /**\r\n * Is the layer in background or foreground.\r\n */\r\n public isBackground: boolean;\r\n\r\n private _applyPostProcess: boolean = true;\r\n /**\r\n * Determines if the layer is drawn before (true) or after (false) post-processing.\r\n * If the layer is background, it is always before.\r\n */\r\n public set applyPostProcess(value: boolean) {\r\n this._applyPostProcess = value;\r\n }\r\n public get applyPostProcess(): boolean {\r\n return this.isBackground || this._applyPostProcess;\r\n }\r\n\r\n /**\r\n * Define the color of the layer (instead of texture).\r\n */\r\n public color: Color4;\r\n\r\n /**\r\n * Define the scale of the layer in order to zoom in out of the texture.\r\n */\r\n public scale = new Vector2(1, 1);\r\n\r\n /**\r\n * Define an offset for the layer in order to shift the texture.\r\n */\r\n public offset = new Vector2(0, 0);\r\n\r\n /**\r\n * Define the alpha blending mode used in the layer in case the texture or color has an alpha.\r\n */\r\n public alphaBlendingMode = Constants.ALPHA_COMBINE;\r\n\r\n /**\r\n * Define if the layer should alpha test or alpha blend with the rest of the scene.\r\n * Alpha test will not mix with the background color in case of transparency.\r\n * It will either use the texture color or the background depending on the alpha value of the current pixel.\r\n */\r\n public alphaTest: boolean;\r\n\r\n /**\r\n * Define a mask to restrict the layer to only some of the scene cameras.\r\n */\r\n public layerMask: number = 0x0fffffff;\r\n\r\n /**\r\n * Define the list of render target the layer is visible into.\r\n */\r\n public renderTargetTextures: RenderTargetTexture[] = [];\r\n\r\n /**\r\n * Define if the layer is only used in renderTarget or if it also\r\n * renders in the main frame buffer of the canvas.\r\n */\r\n public renderOnlyInRenderTargetTextures = false;\r\n\r\n /**\r\n * Define if the layer is enabled (ie. should be displayed). Default: true\r\n */\r\n public isEnabled = true;\r\n\r\n private _scene: Scene;\r\n private _vertexBuffers: { [key: string]: Nullable<VertexBuffer> } = {};\r\n private _indexBuffer: Nullable<DataBuffer>;\r\n private _drawWrapper: DrawWrapper;\r\n private _previousDefines: string;\r\n\r\n /**\r\n * An event triggered when the layer is disposed.\r\n */\r\n public onDisposeObservable = new Observable<Layer>();\r\n\r\n private _onDisposeObserver: Nullable<Observer<Layer>>;\r\n /**\r\n * Back compatibility with callback before the onDisposeObservable existed.\r\n * The set callback will be triggered when the layer has been disposed.\r\n */\r\n public set onDispose(callback: () => void) {\r\n if (this._onDisposeObserver) {\r\n this.onDisposeObservable.remove(this._onDisposeObserver);\r\n }\r\n this._onDisposeObserver = this.onDisposeObservable.add(callback);\r\n }\r\n\r\n /**\r\n * An event triggered before rendering the scene\r\n */\r\n public onBeforeRenderObservable = new Observable<Layer>();\r\n\r\n private _onBeforeRenderObserver: Nullable<Observer<Layer>>;\r\n /**\r\n * Back compatibility with callback before the onBeforeRenderObservable existed.\r\n * The set callback will be triggered just before rendering the layer.\r\n */\r\n public set onBeforeRender(callback: () => void) {\r\n if (this._onBeforeRenderObserver) {\r\n this.onBeforeRenderObservable.remove(this._onBeforeRenderObserver);\r\n }\r\n this._onBeforeRenderObserver = this.onBeforeRenderObservable.add(callback);\r\n }\r\n\r\n /**\r\n * An event triggered after rendering the scene\r\n */\r\n public onAfterRenderObservable = new Observable<Layer>();\r\n\r\n private _onAfterRenderObserver: Nullable<Observer<Layer>>;\r\n /**\r\n * Back compatibility with callback before the onAfterRenderObservable existed.\r\n * The set callback will be triggered just after rendering the layer.\r\n */\r\n public set onAfterRender(callback: () => void) {\r\n if (this._onAfterRenderObserver) {\r\n this.onAfterRenderObservable.remove(this._onAfterRenderObserver);\r\n }\r\n this._onAfterRenderObserver = this.onAfterRenderObservable.add(callback);\r\n }\r\n\r\n /** Shader language used by the material */\r\n private _shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n /**\r\n * Gets the shader language used in this material.\r\n */\r\n public get shaderLanguage(): ShaderLanguage {\r\n return this._shaderLanguage;\r\n }\r\n\r\n /**\r\n * Instantiates a new layer.\r\n * This represents a full screen 2d layer.\r\n * This can be useful to display a picture in the background of your scene for instance.\r\n * @see https://www.babylonjs-playground.com/#08A2BS#1\r\n * @param name Define the name of the layer in the scene\r\n * @param imgUrl Define the url of the texture to display in the layer\r\n * @param scene Define the scene the layer belongs to\r\n * @param isBackground Defines whether the layer is displayed in front or behind the scene\r\n * @param color Defines a color for the layer\r\n * @param forceGLSL Use the GLSL code generation for the shader (even on WebGPU). Default is false\r\n */\r\n constructor(\r\n /**\r\n * Define the name of the layer.\r\n */\r\n public name: string,\r\n imgUrl: Nullable<string>,\r\n scene: Nullable<Scene>,\r\n isBackground?: boolean,\r\n color?: Color4,\r\n forceGLSL = false\r\n ) {\r\n this.texture = imgUrl ? new Texture(imgUrl, scene, true) : null;\r\n this.isBackground = isBackground === undefined ? true : isBackground;\r\n this.color = color === undefined ? new Color4(1, 1, 1, 1) : color;\r\n\r\n this._scene = <Scene>(scene || EngineStore.LastCreatedScene);\r\n const engine = this._scene.getEngine();\r\n if (engine.isWebGPU && !forceGLSL && !Layer.ForceGLSL) {\r\n this._shaderLanguage = ShaderLanguage.WGSL;\r\n }\r\n\r\n let layerComponent = this._scene._getComponent(SceneComponentConstants.NAME_LAYER) as LayerSceneComponent;\r\n if (!layerComponent) {\r\n layerComponent = new LayerSceneComponent(this._scene);\r\n this._scene._addComponent(layerComponent);\r\n }\r\n this._scene.layers.push(this);\r\n\r\n this._drawWrapper = new DrawWrapper(engine);\r\n\r\n // VBO\r\n const vertices = [];\r\n vertices.push(1, 1);\r\n vertices.push(-1, 1);\r\n vertices.push(-1, -1);\r\n vertices.push(1, -1);\r\n\r\n const vertexBuffer = new VertexBuffer(engine, vertices, VertexBuffer.PositionKind, false, false, 2);\r\n this._vertexBuffers[VertexBuffer.PositionKind] = vertexBuffer;\r\n\r\n this._createIndexBuffer();\r\n }\r\n\r\n private _shadersLoaded = false;\r\n\r\n private _createIndexBuffer(): void {\r\n const engine = this._scene.getEngine();\r\n\r\n // Indices\r\n const indices = [];\r\n indices.push(0);\r\n indices.push(1);\r\n indices.push(2);\r\n\r\n indices.push(0);\r\n indices.push(2);\r\n indices.push(3);\r\n\r\n this._indexBuffer = engine.createIndexBuffer(indices);\r\n }\r\n\r\n /** @internal */\r\n public _rebuild(): void {\r\n const vb = this._vertexBuffers[VertexBuffer.PositionKind];\r\n\r\n if (vb) {\r\n vb._rebuild();\r\n }\r\n\r\n this._createIndexBuffer();\r\n }\r\n\r\n /**\r\n * Checks if the layer is ready to be rendered\r\n * @returns true if the layer is ready. False otherwise.\r\n */\r\n public isReady() {\r\n const engine = this._scene.getEngine();\r\n\r\n let defines = \"\";\r\n\r\n if (this.alphaTest) {\r\n defines = \"#define ALPHATEST\";\r\n }\r\n\r\n if (this.texture && !this.texture.gammaSpace) {\r\n defines += \"\\n#define LINEAR\";\r\n }\r\n\r\n if (this._previousDefines !== defines) {\r\n this._previousDefines = defines;\r\n this._drawWrapper.effect = engine.createEffect(\r\n \"layer\",\r\n [VertexBuffer.PositionKind],\r\n [\"textureMatrix\", \"color\", \"scale\", \"offset\"],\r\n [\"textureSampler\"],\r\n defines,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n this._shaderLanguage,\r\n this._shadersLoaded\r\n ? undefined\r\n : async () => {\r\n if (this._shaderLanguage === ShaderLanguage.WGSL) {\r\n await Promise.all([import(\"../ShadersWGSL/layer.vertex\"), import(\"../ShadersWGSL/layer.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"../Shaders/layer.vertex\"), import(\"../Shaders/layer.fragment\")]);\r\n }\r\n this._shadersLoaded = true;\r\n }\r\n );\r\n }\r\n\r\n const currentEffect = this._drawWrapper.effect;\r\n\r\n return !!currentEffect?.isReady() && (!this.texture || this.texture.isReady());\r\n }\r\n\r\n /**\r\n * Renders the layer in the scene.\r\n */\r\n public render(): void {\r\n if (!this.isEnabled) {\r\n return;\r\n }\r\n\r\n const engine = this._scene.getEngine();\r\n\r\n // Check\r\n if (!this.isReady()) {\r\n return;\r\n }\r\n\r\n const currentEffect = this._drawWrapper.effect!;\r\n\r\n this.onBeforeRenderObservable.notifyObservers(this);\r\n\r\n // Render\r\n engine.enableEffect(this._drawWrapper);\r\n engine.setState(false);\r\n\r\n // Texture\r\n if (this.texture) {\r\n currentEffect.setTexture(\"textureSampler\", this.texture);\r\n currentEffect.setMatrix(\"textureMatrix\", this.texture.getTextureMatrix());\r\n }\r\n\r\n // Color\r\n currentEffect.setFloat4(\"color\", this.color.r, this.color.g, this.color.b, this.color.a);\r\n\r\n // Scale / offset\r\n currentEffect.setVector2(\"offset\", this.offset);\r\n currentEffect.setVector2(\"scale\", this.scale);\r\n\r\n // VBOs\r\n engine.bindBuffers(this._vertexBuffers, this._indexBuffer, currentEffect);\r\n\r\n // Draw order\r\n if (!this.alphaTest) {\r\n engine.setAlphaMode(this.alphaBlendingMode);\r\n engine.drawElementsType(Material.TriangleFillMode, 0, 6);\r\n engine.setAlphaMode(Constants.ALPHA_DISABLE);\r\n } else {\r\n engine.drawElementsType(Material.TriangleFillMode, 0, 6);\r\n }\r\n\r\n this.onAfterRenderObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Disposes and releases the associated resources.\r\n */\r\n public dispose(): void {\r\n const vertexBuffer = this._vertexBuffers[VertexBuffer.PositionKind];\r\n if (vertexBuffer) {\r\n vertexBuffer.dispose();\r\n this._vertexBuffers[VertexBuffer.PositionKind] = null;\r\n }\r\n\r\n if (this._indexBuffer) {\r\n this._scene.getEngine()._releaseBuffer(this._indexBuffer);\r\n this._indexBuffer = null;\r\n }\r\n\r\n if (this.texture) {\r\n this.texture.dispose();\r\n this.texture = null;\r\n }\r\n\r\n // Clean RTT list\r\n this.renderTargetTextures = [];\r\n\r\n // Remove from scene\r\n const index = this._scene.layers.indexOf(this);\r\n this._scene.layers.splice(index, 1);\r\n\r\n // Callback\r\n this.onDisposeObservable.notifyObservers(this);\r\n\r\n this.onDisposeObservable.clear();\r\n this.onAfterRenderObservable.clear();\r\n this.onBeforeRenderObservable.clear();\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"layer.js","sourceRoot":"","sources":["../../../../dev/core/src/Layers/layer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { Scene } from \"../scene\";\r\nimport { Vector2 } from \"../Maths/math.vector\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { Material } from \"../Materials/material\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport type { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport { SceneComponentConstants } from \"../sceneComponent\";\r\nimport { LayerSceneComponent } from \"./layerSceneComponent\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport type { DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { DrawWrapper } from \"../Materials/drawWrapper\";\r\n\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * This represents a full screen 2d layer.\r\n * This can be useful to display a picture in the background of your scene for instance.\r\n * @see https://www.babylonjs-playground.com/#08A2BS#1\r\n */\r\nexport class Layer {\r\n /**\r\n * Force all the layers to compile to glsl even on WebGPU engines.\r\n * False by default. This is mostly meant for backward compatibility.\r\n */\r\n public static ForceGLSL = false;\r\n /**\r\n * Define the texture the layer should display.\r\n */\r\n public texture: Nullable<BaseTexture>;\r\n\r\n /**\r\n * Is the layer in background or foreground.\r\n */\r\n public isBackground: boolean;\r\n\r\n private _applyPostProcess: boolean = true;\r\n /**\r\n * Determines if the layer is drawn before (true) or after (false) post-processing.\r\n * If the layer is background, it is always before.\r\n */\r\n public set applyPostProcess(value: boolean) {\r\n this._applyPostProcess = value;\r\n }\r\n public get applyPostProcess(): boolean {\r\n return this.isBackground || this._applyPostProcess;\r\n }\r\n\r\n /**\r\n * Define the color of the layer (instead of texture).\r\n */\r\n public color: Color4;\r\n\r\n /**\r\n * Define the scale of the layer in order to zoom in out of the texture.\r\n */\r\n public scale = new Vector2(1, 1);\r\n\r\n /**\r\n * Define an offset for the layer in order to shift the texture.\r\n */\r\n public offset = new Vector2(0, 0);\r\n\r\n /**\r\n * Define the alpha blending mode used in the layer in case the texture or color has an alpha.\r\n */\r\n public alphaBlendingMode = Constants.ALPHA_COMBINE;\r\n\r\n /**\r\n * Define if the layer should alpha test or alpha blend with the rest of the scene.\r\n * Alpha test will not mix with the background color in case of transparency.\r\n * It will either use the texture color or the background depending on the alpha value of the current pixel.\r\n */\r\n public alphaTest: boolean;\r\n\r\n /**\r\n * Define a mask to restrict the layer to only some of the scene cameras.\r\n */\r\n public layerMask: number = 0x0fffffff;\r\n\r\n /**\r\n * Define the list of render target the layer is visible into.\r\n */\r\n public renderTargetTextures: RenderTargetTexture[] = [];\r\n\r\n /**\r\n * Define if the layer is only used in renderTarget or if it also\r\n * renders in the main frame buffer of the canvas.\r\n */\r\n public renderOnlyInRenderTargetTextures = false;\r\n\r\n /**\r\n * Define if the colors of the layer should be generated in linear space (default: false)\r\n */\r\n public convertToLinearSpace = false;\r\n\r\n /**\r\n * Define if the layer is enabled (ie. should be displayed). Default: true\r\n */\r\n public isEnabled = true;\r\n\r\n private _scene: Scene;\r\n private _vertexBuffers: { [key: string]: Nullable<VertexBuffer> } = {};\r\n private _indexBuffer: Nullable<DataBuffer>;\r\n private _drawWrapper: DrawWrapper;\r\n private _previousDefines: string;\r\n\r\n /**\r\n * An event triggered when the layer is disposed.\r\n */\r\n public onDisposeObservable = new Observable<Layer>();\r\n\r\n private _onDisposeObserver: Nullable<Observer<Layer>>;\r\n /**\r\n * Back compatibility with callback before the onDisposeObservable existed.\r\n * The set callback will be triggered when the layer has been disposed.\r\n */\r\n public set onDispose(callback: () => void) {\r\n if (this._onDisposeObserver) {\r\n this.onDisposeObservable.remove(this._onDisposeObserver);\r\n }\r\n this._onDisposeObserver = this.onDisposeObservable.add(callback);\r\n }\r\n\r\n /**\r\n * An event triggered before rendering the scene\r\n */\r\n public onBeforeRenderObservable = new Observable<Layer>();\r\n\r\n private _onBeforeRenderObserver: Nullable<Observer<Layer>>;\r\n /**\r\n * Back compatibility with callback before the onBeforeRenderObservable existed.\r\n * The set callback will be triggered just before rendering the layer.\r\n */\r\n public set onBeforeRender(callback: () => void) {\r\n if (this._onBeforeRenderObserver) {\r\n this.onBeforeRenderObservable.remove(this._onBeforeRenderObserver);\r\n }\r\n this._onBeforeRenderObserver = this.onBeforeRenderObservable.add(callback);\r\n }\r\n\r\n /**\r\n * An event triggered after rendering the scene\r\n */\r\n public onAfterRenderObservable = new Observable<Layer>();\r\n\r\n private _onAfterRenderObserver: Nullable<Observer<Layer>>;\r\n /**\r\n * Back compatibility with callback before the onAfterRenderObservable existed.\r\n * The set callback will be triggered just after rendering the layer.\r\n */\r\n public set onAfterRender(callback: () => void) {\r\n if (this._onAfterRenderObserver) {\r\n this.onAfterRenderObservable.remove(this._onAfterRenderObserver);\r\n }\r\n this._onAfterRenderObserver = this.onAfterRenderObservable.add(callback);\r\n }\r\n\r\n /** Shader language used by the material */\r\n private _shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n /**\r\n * Gets the shader language used in this material.\r\n */\r\n public get shaderLanguage(): ShaderLanguage {\r\n return this._shaderLanguage;\r\n }\r\n\r\n /**\r\n * Instantiates a new layer.\r\n * This represents a full screen 2d layer.\r\n * This can be useful to display a picture in the background of your scene for instance.\r\n * @see https://www.babylonjs-playground.com/#08A2BS#1\r\n * @param name Define the name of the layer in the scene\r\n * @param imgUrl Define the url of the texture to display in the layer\r\n * @param scene Define the scene the layer belongs to\r\n * @param isBackground Defines whether the layer is displayed in front or behind the scene\r\n * @param color Defines a color for the layer\r\n * @param forceGLSL Use the GLSL code generation for the shader (even on WebGPU). Default is false\r\n */\r\n constructor(\r\n /**\r\n * Define the name of the layer.\r\n */\r\n public name: string,\r\n imgUrl: Nullable<string>,\r\n scene: Nullable<Scene>,\r\n isBackground?: boolean,\r\n color?: Color4,\r\n forceGLSL = false\r\n ) {\r\n this.texture = imgUrl ? new Texture(imgUrl, scene, true) : null;\r\n this.isBackground = isBackground === undefined ? true : isBackground;\r\n this.color = color === undefined ? new Color4(1, 1, 1, 1) : color;\r\n\r\n this._scene = <Scene>(scene || EngineStore.LastCreatedScene);\r\n const engine = this._scene.getEngine();\r\n if (engine.isWebGPU && !forceGLSL && !Layer.ForceGLSL) {\r\n this._shaderLanguage = ShaderLanguage.WGSL;\r\n }\r\n\r\n let layerComponent = this._scene._getComponent(SceneComponentConstants.NAME_LAYER) as LayerSceneComponent;\r\n if (!layerComponent) {\r\n layerComponent = new LayerSceneComponent(this._scene);\r\n this._scene._addComponent(layerComponent);\r\n }\r\n this._scene.layers.push(this);\r\n\r\n this._drawWrapper = new DrawWrapper(engine);\r\n\r\n // VBO\r\n const vertices = [];\r\n vertices.push(1, 1);\r\n vertices.push(-1, 1);\r\n vertices.push(-1, -1);\r\n vertices.push(1, -1);\r\n\r\n const vertexBuffer = new VertexBuffer(engine, vertices, VertexBuffer.PositionKind, false, false, 2);\r\n this._vertexBuffers[VertexBuffer.PositionKind] = vertexBuffer;\r\n\r\n this._createIndexBuffer();\r\n }\r\n\r\n private _shadersLoaded = false;\r\n\r\n private _createIndexBuffer(): void {\r\n const engine = this._scene.getEngine();\r\n\r\n // Indices\r\n const indices = [];\r\n indices.push(0);\r\n indices.push(1);\r\n indices.push(2);\r\n\r\n indices.push(0);\r\n indices.push(2);\r\n indices.push(3);\r\n\r\n this._indexBuffer = engine.createIndexBuffer(indices);\r\n }\r\n\r\n /** @internal */\r\n public _rebuild(): void {\r\n const vb = this._vertexBuffers[VertexBuffer.PositionKind];\r\n\r\n if (vb) {\r\n vb._rebuild();\r\n }\r\n\r\n this._createIndexBuffer();\r\n }\r\n\r\n /**\r\n * Checks if the layer is ready to be rendered\r\n * @returns true if the layer is ready. False otherwise.\r\n */\r\n public isReady() {\r\n const engine = this._scene.getEngine();\r\n\r\n let defines = \"\";\r\n\r\n if (this.alphaTest) {\r\n defines = \"#define ALPHATEST\";\r\n }\r\n\r\n if (this.texture) {\r\n if (this.texture.gammaSpace) {\r\n if (this.convertToLinearSpace) {\r\n defines += \"\\n#define CONVERT_TO_LINEAR\";\r\n }\r\n } else if (!this.convertToLinearSpace) {\r\n defines += \"\\n#define CONVERT_TO_GAMMA\";\r\n }\r\n }\r\n\r\n if (this._previousDefines !== defines) {\r\n this._previousDefines = defines;\r\n this._drawWrapper.effect = engine.createEffect(\r\n \"layer\",\r\n [VertexBuffer.PositionKind],\r\n [\"textureMatrix\", \"color\", \"scale\", \"offset\"],\r\n [\"textureSampler\"],\r\n defines,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n this._shaderLanguage,\r\n this._shadersLoaded\r\n ? undefined\r\n : async () => {\r\n if (this._shaderLanguage === ShaderLanguage.WGSL) {\r\n await Promise.all([import(\"../ShadersWGSL/layer.vertex\"), import(\"../ShadersWGSL/layer.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"../Shaders/layer.vertex\"), import(\"../Shaders/layer.fragment\")]);\r\n }\r\n this._shadersLoaded = true;\r\n }\r\n );\r\n }\r\n\r\n const currentEffect = this._drawWrapper.effect;\r\n\r\n return !!currentEffect?.isReady() && (!this.texture || this.texture.isReady());\r\n }\r\n\r\n /**\r\n * Renders the layer in the scene.\r\n */\r\n public render(): void {\r\n if (!this.isEnabled) {\r\n return;\r\n }\r\n\r\n const engine = this._scene.getEngine();\r\n\r\n // Check\r\n if (!this.isReady()) {\r\n return;\r\n }\r\n\r\n const currentEffect = this._drawWrapper.effect!;\r\n\r\n this.onBeforeRenderObservable.notifyObservers(this);\r\n\r\n // Render\r\n engine.enableEffect(this._drawWrapper);\r\n engine.setState(false);\r\n\r\n // Texture\r\n if (this.texture) {\r\n currentEffect.setTexture(\"textureSampler\", this.texture);\r\n currentEffect.setMatrix(\"textureMatrix\", this.texture.getTextureMatrix());\r\n }\r\n\r\n // Color\r\n currentEffect.setFloat4(\"color\", this.color.r, this.color.g, this.color.b, this.color.a);\r\n\r\n // Scale / offset\r\n currentEffect.setVector2(\"offset\", this.offset);\r\n currentEffect.setVector2(\"scale\", this.scale);\r\n\r\n // VBOs\r\n engine.bindBuffers(this._vertexBuffers, this._indexBuffer, currentEffect);\r\n\r\n // Draw order\r\n if (!this.alphaTest) {\r\n engine.setAlphaMode(this.alphaBlendingMode);\r\n engine.drawElementsType(Material.TriangleFillMode, 0, 6);\r\n engine.setAlphaMode(Constants.ALPHA_DISABLE);\r\n } else {\r\n engine.drawElementsType(Material.TriangleFillMode, 0, 6);\r\n }\r\n\r\n this.onAfterRenderObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Disposes and releases the associated resources.\r\n */\r\n public dispose(): void {\r\n const vertexBuffer = this._vertexBuffers[VertexBuffer.PositionKind];\r\n if (vertexBuffer) {\r\n vertexBuffer.dispose();\r\n this._vertexBuffers[VertexBuffer.PositionKind] = null;\r\n }\r\n\r\n if (this._indexBuffer) {\r\n this._scene.getEngine()._releaseBuffer(this._indexBuffer);\r\n this._indexBuffer = null;\r\n }\r\n\r\n if (this.texture) {\r\n this.texture.dispose();\r\n this.texture = null;\r\n }\r\n\r\n // Clean RTT list\r\n this.renderTargetTextures = [];\r\n\r\n // Remove from scene\r\n const index = this._scene.layers.indexOf(this);\r\n this._scene.layers.splice(index, 1);\r\n\r\n // Callback\r\n this.onDisposeObservable.notifyObservers(this);\r\n\r\n this.onDisposeObservable.clear();\r\n this.onAfterRenderObservable.clear();\r\n this.onBeforeRenderObservable.clear();\r\n }\r\n}\r\n"]}
|