@babylonjs/core 7.35.1 → 7.36.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/Engines/Extensions/engine.multiRender.d.ts +11 -0
- package/Engines/Extensions/engine.multiRender.js +71 -32
- package/Engines/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.js +3 -2
- package/Engines/Extensions/engine.prefilteredCubeTexture.js.map +1 -1
- package/Engines/Extensions/engine.renderTarget.js +1 -13
- package/Engines/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/WebGL/webGLRenderTargetWrapper.d.ts +2 -0
- package/Engines/WebGL/webGLRenderTargetWrapper.js +37 -7
- package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.d.ts +11 -0
- package/Engines/WebGPU/Extensions/engine.multiRender.js +30 -11
- package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.js +2 -5
- package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +3 -2
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.d.ts +3 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js +5 -4
- package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureManager.js +2 -2
- package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
- package/Engines/abstractEngine.d.ts +11 -0
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/renderTargetWrapper.d.ts +33 -1
- package/Engines/renderTargetWrapper.js +64 -4
- package/Engines/renderTargetWrapper.js.map +1 -1
- package/Engines/thinEngine.d.ts +13 -1
- package/Engines/thinEngine.js +115 -24
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/thinWebGPUEngine.d.ts +2 -0
- package/Engines/thinWebGPUEngine.js +7 -0
- package/Engines/thinWebGPUEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +12 -3
- package/Engines/webgpuEngine.js +39 -9
- package/Engines/webgpuEngine.js.map +1 -1
- package/FrameGraph/Node/Blocks/Textures/clearBlock.d.ts +8 -0
- package/FrameGraph/Node/Blocks/Textures/clearBlock.js +22 -1
- package/FrameGraph/Node/Blocks/Textures/clearBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/inputBlock.d.ts +4 -9
- package/FrameGraph/Node/Blocks/inputBlock.js +15 -25
- package/FrameGraph/Node/Blocks/inputBlock.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraphBlockConnectionPoint.js +10 -2
- package/FrameGraph/Node/nodeRenderGraphBlockConnectionPoint.js.map +1 -1
- package/FrameGraph/Passes/renderPass.d.ts +10 -10
- package/FrameGraph/Passes/renderPass.js +10 -10
- package/FrameGraph/Passes/renderPass.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/bloomTask.d.ts +10 -5
- package/FrameGraph/Tasks/PostProcesses/bloomTask.js +29 -14
- package/FrameGraph/Tasks/PostProcesses/bloomTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js +4 -0
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.d.ts +11 -6
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js +30 -13
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/postProcessTask.js +4 -6
- package/FrameGraph/Tasks/PostProcesses/postProcessTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/cullObjectsTask.d.ts +1 -1
- package/FrameGraph/Tasks/Rendering/cullObjectsTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +3 -3
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +33 -32
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +4 -2
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js +8 -12
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js +13 -18
- package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Texture/clearTextureTask.d.ts +15 -2
- package/FrameGraph/Tasks/Texture/clearTextureTask.js +17 -4
- package/FrameGraph/Tasks/Texture/clearTextureTask.js.map +1 -1
- package/FrameGraph/Tasks/Texture/copyToTextureTask.js +2 -2
- package/FrameGraph/Tasks/Texture/copyToTextureTask.js.map +1 -1
- package/FrameGraph/Tasks/Texture/generateMipMapsTask.js +3 -3
- package/FrameGraph/Tasks/Texture/generateMipMapsTask.js.map +1 -1
- package/FrameGraph/frameGraph.d.ts +11 -74
- package/FrameGraph/frameGraph.js +12 -126
- package/FrameGraph/frameGraph.js.map +1 -1
- package/FrameGraph/frameGraphRenderContext.d.ts +17 -8
- package/FrameGraph/frameGraphRenderContext.js +55 -43
- package/FrameGraph/frameGraphRenderContext.js.map +1 -1
- package/FrameGraph/frameGraphRenderTarget.d.ts +16 -0
- package/FrameGraph/frameGraphRenderTarget.js +67 -0
- package/FrameGraph/frameGraphRenderTarget.js.map +1 -0
- package/FrameGraph/frameGraphTask.d.ts +4 -3
- package/FrameGraph/frameGraphTask.js +41 -8
- package/FrameGraph/frameGraphTask.js.map +1 -1
- package/FrameGraph/frameGraphTextureManager.d.ts +130 -22
- package/FrameGraph/frameGraphTextureManager.js +312 -130
- package/FrameGraph/frameGraphTextureManager.js.map +1 -1
- package/FrameGraph/frameGraphTypes.d.ts +28 -13
- package/FrameGraph/frameGraphTypes.js.map +1 -1
- package/FrameGraph/index.d.ts +1 -0
- package/FrameGraph/index.js +1 -0
- package/FrameGraph/index.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +3 -2
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
- package/Materials/Node/Blocks/conditionalBlock.d.ts +2 -0
- package/Materials/Node/Blocks/conditionalBlock.js +13 -0
- package/Materials/Node/Blocks/conditionalBlock.js.map +1 -1
- package/Materials/Node/nodeMaterialBlock.js +4 -1
- package/Materials/Node/nodeMaterialBlock.js.map +1 -1
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js +12 -4
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
- package/Materials/Textures/equiRectangularCubeTexture.js +14 -4
- package/Materials/Textures/equiRectangularCubeTexture.js.map +1 -1
- package/Materials/Textures/internalTexture.d.ts +20 -0
- package/Materials/Textures/internalTexture.js +48 -0
- package/Materials/Textures/internalTexture.js.map +1 -1
- package/Materials/Textures/multiRenderTarget.d.ts +5 -0
- package/Materials/Textures/multiRenderTarget.js.map +1 -1
- package/Materials/Textures/textureCreationOptions.d.ts +6 -6
- package/Materials/Textures/textureCreationOptions.js.map +1 -1
- package/Materials/drawWrapper.js +4 -0
- package/Materials/drawWrapper.js.map +1 -1
- package/Materials/effect.js +2 -2
- package/Materials/effect.js.map +1 -1
- package/Materials/material.d.ts +2 -2
- package/Materials/material.js +5 -5
- package/Materials/material.js.map +1 -1
- package/Maths/math.color.d.ts +16 -0
- package/Maths/math.color.js +16 -0
- package/Maths/math.color.js.map +1 -1
- package/Maths/math.vector.d.ts +32 -0
- package/Maths/math.vector.js +32 -0
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/Compression/dracoCompression.d.ts +3 -1
- package/Meshes/Compression/dracoCompression.js +5 -2
- package/Meshes/Compression/dracoCompression.js.map +1 -1
- package/Meshes/Node/Blocks/Matrices/rotationXBlock.d.ts +0 -1
- package/Meshes/Node/Blocks/Matrices/rotationXBlock.js +1 -9
- package/Meshes/Node/Blocks/Matrices/rotationXBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Matrices/rotationYBlock.d.ts +0 -1
- package/Meshes/Node/Blocks/Matrices/rotationYBlock.js +1 -9
- package/Meshes/Node/Blocks/Matrices/rotationYBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Matrices/rotationZBlock.d.ts +0 -1
- package/Meshes/Node/Blocks/Matrices/rotationZBlock.js +1 -9
- package/Meshes/Node/Blocks/Matrices/rotationZBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Set/latticeBlock.js +3 -1
- package/Meshes/Node/Blocks/Set/latticeBlock.js.map +1 -1
- package/Meshes/Node/Blocks/conditionBlock.d.ts +2 -0
- package/Meshes/Node/Blocks/conditionBlock.js +15 -0
- package/Meshes/Node/Blocks/conditionBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryClampBlock.d.ts +4 -4
- package/Meshes/Node/Blocks/geometryClampBlock.js +16 -25
- package/Meshes/Node/Blocks/geometryClampBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryLerpBlock.js +2 -2
- package/Meshes/Node/Blocks/geometryLerpBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryNLerpBlock.js +2 -2
- package/Meshes/Node/Blocks/geometryNLerpBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryReplaceColorBlock.js +2 -2
- package/Meshes/Node/Blocks/geometryReplaceColorBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryRotate2dBlock.js +2 -2
- package/Meshes/Node/Blocks/geometryRotate2dBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometrySmoothStepBlock.js +3 -3
- package/Meshes/Node/Blocks/geometrySmoothStepBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryStepBlock.js +2 -2
- package/Meshes/Node/Blocks/geometryStepBlock.js.map +1 -1
- package/Meshes/Node/nodeGeometry.js +1 -1
- package/Meshes/Node/nodeGeometry.js.map +1 -1
- package/Meshes/Node/nodeGeometryBlock.d.ts +3 -1
- package/Meshes/Node/nodeGeometryBlock.js +2 -1
- package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
- package/Meshes/Node/nodeGeometryBlockConnectionPoint.js +10 -2
- package/Meshes/Node/nodeGeometryBlockConnectionPoint.js.map +1 -1
- package/Meshes/abstractMesh.js +1 -1
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/lattice.material.d.ts +1 -1
- package/Meshes/lattice.material.js +3 -3
- package/Meshes/lattice.material.js.map +1 -1
- package/Misc/observable.d.ts +3 -1
- package/Misc/observable.js +7 -2
- package/Misc/observable.js.map +1 -1
- package/ShadersWGSL/glowMapGeneration.fragment.js +4 -3
- package/ShadersWGSL/glowMapGeneration.fragment.js.map +1 -1
- package/ShadersWGSL/pbr.fragment.js +4 -3
- package/ShadersWGSL/pbr.fragment.js.map +1 -1
- package/package.json +1 -1
- package/scene.js +6 -6
- package/scene.js.map +1 -1
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { getDimensionsFromTextureSize } from "../Materials/Textures/textureCreationOptions.js";
|
|
1
|
+
import { getDimensionsFromTextureSize, textureSizeIsObject } from "../Materials/Textures/textureCreationOptions.js";
|
|
2
2
|
import { Texture } from "../Materials/Textures/texture.js";
|
|
3
3
|
import { backbufferColorTextureHandle, backbufferDepthStencilTextureHandle } from "./frameGraphTypes.js";
|
|
4
4
|
|
|
5
|
+
import { GetTypeForDepthTexture, IsDepthTexture, HasStencilAspect } from "../Materials/Textures/internalTexture.js";
|
|
6
|
+
import { FrameGraphRenderTarget } from "./frameGraphRenderTarget.js";
|
|
5
7
|
var FrameGraphTextureNamespace;
|
|
6
8
|
(function (FrameGraphTextureNamespace) {
|
|
7
9
|
FrameGraphTextureNamespace[FrameGraphTextureNamespace["Task"] = 0] = "Task";
|
|
@@ -9,18 +11,33 @@ var FrameGraphTextureNamespace;
|
|
|
9
11
|
FrameGraphTextureNamespace[FrameGraphTextureNamespace["External"] = 2] = "External";
|
|
10
12
|
})(FrameGraphTextureNamespace || (FrameGraphTextureNamespace = {}));
|
|
11
13
|
/**
|
|
14
|
+
* Manages the textures used by a frame graph
|
|
12
15
|
* @experimental
|
|
13
|
-
* @internal
|
|
14
16
|
*/
|
|
15
17
|
export class FrameGraphTextureManager {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Constructs a new instance of the texture manager
|
|
20
|
+
* @param engine The engine to use
|
|
21
|
+
* @param _debugTextures If true, debug textures will be created so that they are visible in the inspector
|
|
22
|
+
* @param _scene The scene the manager belongs to
|
|
23
|
+
*/
|
|
24
|
+
constructor(engine, _debugTextures = false, _scene) {
|
|
25
|
+
this.engine = engine;
|
|
18
26
|
this._debugTextures = _debugTextures;
|
|
19
27
|
this._scene = _scene;
|
|
28
|
+
/** @internal */
|
|
20
29
|
this._textures = new Map();
|
|
30
|
+
/** @internal */
|
|
21
31
|
this._historyTextures = new Map();
|
|
32
|
+
/** @internal */
|
|
33
|
+
this._isRecordingTask = false;
|
|
22
34
|
this._addSystemTextures();
|
|
23
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Checks if a handle is a backbuffer handle (color or depth/stencil)
|
|
38
|
+
* @param handle The handle to check
|
|
39
|
+
* @returns True if the handle is a backbuffer handle
|
|
40
|
+
*/
|
|
24
41
|
isBackbuffer(handle) {
|
|
25
42
|
if (handle === backbufferColorTextureHandle || handle === backbufferDepthStencilTextureHandle) {
|
|
26
43
|
return true;
|
|
@@ -31,6 +48,11 @@ export class FrameGraphTextureManager {
|
|
|
31
48
|
}
|
|
32
49
|
return textureEntry.refHandle === backbufferColorTextureHandle || textureEntry.refHandle === backbufferDepthStencilTextureHandle;
|
|
33
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Checks if a handle is a backbuffer color handle
|
|
53
|
+
* @param handle The handle to check
|
|
54
|
+
* @returns True if the handle is a backbuffer color handle
|
|
55
|
+
*/
|
|
34
56
|
isBackbufferColor(handle) {
|
|
35
57
|
if (handle === backbufferColorTextureHandle) {
|
|
36
58
|
return true;
|
|
@@ -41,6 +63,11 @@ export class FrameGraphTextureManager {
|
|
|
41
63
|
}
|
|
42
64
|
return textureEntry.refHandle === backbufferColorTextureHandle;
|
|
43
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Checks if a handle is a backbuffer depth/stencil handle
|
|
68
|
+
* @param handle The handle to check
|
|
69
|
+
* @returns True if the handle is a backbuffer depth/stencil handle
|
|
70
|
+
*/
|
|
44
71
|
isBackbufferDepthStencil(handle) {
|
|
45
72
|
if (handle === backbufferDepthStencilTextureHandle) {
|
|
46
73
|
return true;
|
|
@@ -51,80 +78,217 @@ export class FrameGraphTextureManager {
|
|
|
51
78
|
}
|
|
52
79
|
return textureEntry.refHandle === backbufferDepthStencilTextureHandle;
|
|
53
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Checks if a handle is a history texture (or points to a history texture, for a dangling handle)
|
|
83
|
+
* @param handle The handle to check
|
|
84
|
+
* @returns True if the handle is a history texture, otherwise false
|
|
85
|
+
*/
|
|
86
|
+
isHistoryTexture(handle) {
|
|
87
|
+
const entry = this._textures.get(handle);
|
|
88
|
+
if (!entry) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
handle = entry.refHandle ?? handle;
|
|
92
|
+
return this._historyTextures.has(handle);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Gets the creation options of a texture
|
|
96
|
+
* @param handle Handle of the texture
|
|
97
|
+
* @returns The creation options of the texture
|
|
98
|
+
*/
|
|
54
99
|
getTextureCreationOptions(handle) {
|
|
55
|
-
|
|
100
|
+
const entry = this._textures.get(handle);
|
|
101
|
+
const creationOptions = entry.creationOptions;
|
|
102
|
+
return {
|
|
103
|
+
size: textureSizeIsObject(creationOptions.size) ? { ...creationOptions.size } : creationOptions.size,
|
|
104
|
+
sizeIsPercentage: creationOptions.sizeIsPercentage,
|
|
105
|
+
options: this._cloneTextureOptions(creationOptions.options, entry.textureIndex),
|
|
106
|
+
isHistoryTexture: creationOptions.isHistoryTexture,
|
|
107
|
+
};
|
|
56
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* Gets the description of a texture
|
|
111
|
+
* @param handle Handle of the texture
|
|
112
|
+
* @returns The description of the texture
|
|
113
|
+
*/
|
|
114
|
+
getTextureDescription(handle) {
|
|
115
|
+
const creationOptions = this.getTextureCreationOptions(handle);
|
|
116
|
+
const size = !creationOptions.sizeIsPercentage
|
|
117
|
+
? textureSizeIsObject(creationOptions.size)
|
|
118
|
+
? creationOptions.size
|
|
119
|
+
: { width: creationOptions.size, height: creationOptions.size }
|
|
120
|
+
: this.getAbsoluteDimensions(creationOptions.size);
|
|
121
|
+
return {
|
|
122
|
+
size,
|
|
123
|
+
options: creationOptions.options,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Gets a texture handle or creates a new texture if the handle is not provided.
|
|
128
|
+
* If handle is not provided, newTextureName and creationOptions must be provided.
|
|
129
|
+
* @param handle If provided, will simply return the handle
|
|
130
|
+
* @param newTextureName Name of the new texture to create
|
|
131
|
+
* @param creationOptions Options to use when creating the new texture
|
|
132
|
+
* @returns The handle to the texture.
|
|
133
|
+
*/
|
|
134
|
+
getTextureHandleOrCreateTexture(handle, newTextureName, creationOptions) {
|
|
135
|
+
if (handle === undefined) {
|
|
136
|
+
if (newTextureName === undefined || creationOptions === undefined) {
|
|
137
|
+
throw new Error("getTextureHandleOrCreateTexture: Either handle or newTextureName and creationOptions must be provided.");
|
|
138
|
+
}
|
|
139
|
+
return this.createRenderTargetTexture(newTextureName, creationOptions);
|
|
140
|
+
}
|
|
141
|
+
return handle;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Gets a texture from a handle.
|
|
145
|
+
* Note that if the texture is a history texture, the read texture for the current frame will be returned.
|
|
146
|
+
* @param handle The handle of the texture
|
|
147
|
+
* @returns The texture or null if not found
|
|
148
|
+
*/
|
|
57
149
|
getTextureFromHandle(handle) {
|
|
58
150
|
const historyEntry = this._historyTextures.get(handle);
|
|
59
151
|
if (historyEntry) {
|
|
60
|
-
return historyEntry.textures[historyEntry.index ^ 1]; //
|
|
152
|
+
return historyEntry.textures[historyEntry.index ^ 1]; // gets the read texture
|
|
61
153
|
}
|
|
62
154
|
return this._textures.get(handle).texture;
|
|
63
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* Imports a texture into the texture manager
|
|
158
|
+
* @param name Name of the texture
|
|
159
|
+
* @param texture Texture to import
|
|
160
|
+
* @param handle Existing handle to use for the texture. If not provided (default), a new handle will be created.
|
|
161
|
+
* @returns The handle to the texture
|
|
162
|
+
*/
|
|
64
163
|
importTexture(name, texture, handle) {
|
|
65
|
-
const internalTexture = texture.texture;
|
|
66
|
-
if (!internalTexture) {
|
|
67
|
-
throw new Error("importTexture: Texture must have an internal texture to be imported");
|
|
68
|
-
}
|
|
69
164
|
if (handle !== undefined) {
|
|
70
165
|
this._freeEntry(handle);
|
|
71
166
|
}
|
|
72
167
|
const creationOptions = {
|
|
73
168
|
size: { width: texture.width, height: texture.height },
|
|
169
|
+
sizeIsPercentage: false,
|
|
170
|
+
isHistoryTexture: false,
|
|
74
171
|
options: {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
formats: [internalTexture.format],
|
|
83
|
-
targetTypes: [
|
|
84
|
-
internalTexture.isCube
|
|
85
|
-
? 34067
|
|
86
|
-
: internalTexture.is3D
|
|
87
|
-
? 32879
|
|
88
|
-
: internalTexture.is2DArray
|
|
89
|
-
? 35866
|
|
90
|
-
: 3553,
|
|
91
|
-
],
|
|
92
|
-
useSRGBBuffers: [internalTexture._useSRGBBuffer],
|
|
93
|
-
labels: internalTexture.label ? [internalTexture.label] : undefined,
|
|
172
|
+
createMipMaps: texture.generateMipMaps,
|
|
173
|
+
samples: texture.samples,
|
|
174
|
+
types: [texture.type],
|
|
175
|
+
formats: [texture.format],
|
|
176
|
+
useSRGBBuffers: [texture._useSRGBBuffer],
|
|
177
|
+
creationFlags: [texture._creationFlags],
|
|
178
|
+
labels: texture.label ? [texture.label] : ["imported"],
|
|
94
179
|
},
|
|
95
|
-
sizeIsPercentage: false,
|
|
96
180
|
};
|
|
97
|
-
return this._createHandleForTexture(name, texture, creationOptions, FrameGraphTextureNamespace.External,
|
|
181
|
+
return this._createHandleForTexture(name, texture, creationOptions, FrameGraphTextureNamespace.External, handle);
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Creates a new render target texture
|
|
185
|
+
* 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.
|
|
186
|
+
* @param name Name of the texture
|
|
187
|
+
* @param creationOptions Options to use when creating the texture
|
|
188
|
+
* @param handle Existing handle to use for the texture. If not provided (default), a new handle will be created.
|
|
189
|
+
* @returns The handle to the texture
|
|
190
|
+
*/
|
|
191
|
+
createRenderTargetTexture(name, creationOptions, handle) {
|
|
192
|
+
return this._createHandleForTexture(name, null, {
|
|
193
|
+
size: textureSizeIsObject(creationOptions.size) ? { ...creationOptions.size } : creationOptions.size,
|
|
194
|
+
sizeIsPercentage: creationOptions.sizeIsPercentage,
|
|
195
|
+
isHistoryTexture: creationOptions.isHistoryTexture,
|
|
196
|
+
options: this._cloneTextureOptions(creationOptions.options),
|
|
197
|
+
}, this._isRecordingTask ? FrameGraphTextureNamespace.Task : FrameGraphTextureNamespace.Graph, handle);
|
|
98
198
|
}
|
|
99
|
-
|
|
100
|
-
|
|
199
|
+
/**
|
|
200
|
+
* Creates a (frame graph) render target wrapper
|
|
201
|
+
* Note that renderTargets or renderTargetDepth can be undefined, but not both at the same time!
|
|
202
|
+
* @param name Name of the render target wrapper
|
|
203
|
+
* @param renderTargets Render target handles (textures) to use
|
|
204
|
+
* @param renderTargetDepth Render target depth handle (texture) to use
|
|
205
|
+
* @returns The created render target wrapper
|
|
206
|
+
*/
|
|
207
|
+
createRenderTarget(name, renderTargets, renderTargetDepth) {
|
|
208
|
+
const renderTarget = new FrameGraphRenderTarget(name, this, renderTargets, renderTargetDepth);
|
|
209
|
+
const rtw = renderTarget.renderTargetWrapper;
|
|
210
|
+
if (rtw !== undefined && renderTargets) {
|
|
211
|
+
const handles = Array.isArray(renderTargets) ? renderTargets : [renderTargets];
|
|
212
|
+
for (let i = 0; i < handles.length; i++) {
|
|
213
|
+
let handle = handles[i];
|
|
214
|
+
handle = this._textures.get(handle)?.refHandle ?? handle;
|
|
215
|
+
const historyEntry = this._historyTextures.get(handle);
|
|
216
|
+
if (historyEntry) {
|
|
217
|
+
historyEntry.references.push({ renderTargetWrapper: rtw, textureIndex: i });
|
|
218
|
+
rtw.setTexture(historyEntry.textures[historyEntry.index], i, false);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return renderTarget;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Creates a handle which is not associated with any texture.
|
|
226
|
+
* Call resolveDanglingHandle to associate the handle with a valid texture handle.
|
|
227
|
+
* @returns The dangling handle
|
|
228
|
+
*/
|
|
229
|
+
createDanglingHandle() {
|
|
230
|
+
return FrameGraphTextureManager._Counter++;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Associates a texture with a dangling handle
|
|
234
|
+
* @param danglingHandle The dangling handle
|
|
235
|
+
* @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)
|
|
236
|
+
* @param newTextureName The name of the new texture to create (if handle is not provided)
|
|
237
|
+
* @param creationOptions The options to use when creating the new texture (if handle is not provided)
|
|
238
|
+
*/
|
|
239
|
+
resolveDanglingHandle(danglingHandle, handle, newTextureName, creationOptions) {
|
|
240
|
+
if (handle === undefined) {
|
|
241
|
+
if (newTextureName === undefined || creationOptions === undefined) {
|
|
242
|
+
throw new Error("resolveDanglingHandle: Either handle or newTextureName and creationOptions must be provided.");
|
|
243
|
+
}
|
|
244
|
+
this.createRenderTargetTexture(newTextureName, creationOptions, danglingHandle);
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
const textureEntry = this._textures.get(handle);
|
|
248
|
+
if (textureEntry === undefined) {
|
|
249
|
+
throw new Error(`resolveDanglingHandle: Handle ${handle} does not exist!`);
|
|
250
|
+
}
|
|
251
|
+
this._textures.set(danglingHandle, {
|
|
252
|
+
texture: textureEntry.texture,
|
|
253
|
+
refHandle: handle,
|
|
254
|
+
name: textureEntry.name,
|
|
255
|
+
creationOptions: {
|
|
256
|
+
size: { ...textureEntry.creationOptions.size },
|
|
257
|
+
options: this._cloneTextureOptions(textureEntry.creationOptions.options),
|
|
258
|
+
sizeIsPercentage: textureEntry.creationOptions.sizeIsPercentage,
|
|
259
|
+
isHistoryTexture: false,
|
|
260
|
+
},
|
|
261
|
+
namespace: textureEntry.namespace,
|
|
262
|
+
textureIndex: textureEntry.textureIndex,
|
|
263
|
+
});
|
|
101
264
|
}
|
|
102
|
-
|
|
265
|
+
/**
|
|
266
|
+
* Gets the absolute dimensions of a texture.
|
|
267
|
+
* @param size The size of the texture. Width and height must be expressed as a percentage of the screen size (100=100%)!
|
|
268
|
+
* @param screenWidth The width of the screen (default: the width of the rendering canvas)
|
|
269
|
+
* @param screenHeight The height of the screen (default: the height of the rendering canvas)
|
|
270
|
+
* @returns The absolute dimensions of the texture
|
|
271
|
+
*/
|
|
272
|
+
getAbsoluteDimensions(size, screenWidth = this.engine.getRenderWidth(true), screenHeight = this.engine.getRenderHeight(true)) {
|
|
103
273
|
const { width, height } = getDimensionsFromTextureSize(size);
|
|
104
274
|
return {
|
|
105
275
|
width: Math.floor((width * screenWidth) / 100),
|
|
106
276
|
height: Math.floor((height * screenHeight) / 100),
|
|
107
277
|
};
|
|
108
278
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
for (const refHandle of entry.refHandles) {
|
|
113
|
-
const textureEntry = this._textures.get(refHandle);
|
|
114
|
-
textureEntry.texture = entry.textures[entry.index];
|
|
115
|
-
}
|
|
116
|
-
});
|
|
279
|
+
/** @internal */
|
|
280
|
+
_dispose() {
|
|
281
|
+
this._releaseTextures();
|
|
117
282
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
}
|
|
121
|
-
allocateTextures() {
|
|
283
|
+
/** @internal */
|
|
284
|
+
_allocateTextures() {
|
|
122
285
|
this._textures.forEach((entry) => {
|
|
123
286
|
if (!entry.texture) {
|
|
124
287
|
if (entry.refHandle !== undefined) {
|
|
288
|
+
// entry is a dangling handle which has been resolved to point to refHandle
|
|
289
|
+
// We simply update the texture to point to the refHandle texture
|
|
125
290
|
const refEntry = this._textures.get(entry.refHandle);
|
|
126
291
|
entry.texture = refEntry.texture;
|
|
127
|
-
entry.texture?.texture?.incrementReferences();
|
|
128
292
|
if (refEntry.refHandle === backbufferColorTextureHandle) {
|
|
129
293
|
entry.refHandle = backbufferColorTextureHandle;
|
|
130
294
|
}
|
|
@@ -133,31 +297,32 @@ export class FrameGraphTextureManager {
|
|
|
133
297
|
}
|
|
134
298
|
}
|
|
135
299
|
else if (entry.namespace !== FrameGraphTextureNamespace.External) {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
300
|
+
const creationOptions = entry.creationOptions;
|
|
301
|
+
const size = creationOptions.sizeIsPercentage ? this.getAbsoluteDimensions(creationOptions.size) : creationOptions.size;
|
|
302
|
+
const textureIndex = entry.textureIndex || 0;
|
|
303
|
+
const internalTextureCreationOptions = {
|
|
304
|
+
createMipMaps: creationOptions.options.createMipMaps,
|
|
305
|
+
samples: creationOptions.options.samples,
|
|
306
|
+
type: creationOptions.options.types?.[textureIndex],
|
|
307
|
+
format: creationOptions.options.formats?.[textureIndex],
|
|
308
|
+
useSRGBBuffer: creationOptions.options.useSRGBBuffers?.[textureIndex],
|
|
309
|
+
creationFlags: creationOptions.options.creationFlags?.[textureIndex],
|
|
310
|
+
label: creationOptions.options.labels?.[textureIndex] ?? `${entry.name}${textureIndex > 0 ? "#" + textureIndex : ""}`,
|
|
311
|
+
samplingMode: 1,
|
|
312
|
+
createMSAATexture: creationOptions.options.samples > 1,
|
|
313
|
+
};
|
|
314
|
+
const isDepthTexture = IsDepthTexture(internalTextureCreationOptions.format);
|
|
315
|
+
const hasStencil = HasStencilAspect(internalTextureCreationOptions.format);
|
|
316
|
+
const source = isDepthTexture && hasStencil
|
|
317
|
+
? 12 /* InternalTextureSource.DepthStencil */
|
|
318
|
+
: isDepthTexture || hasStencil
|
|
319
|
+
? 14 /* InternalTextureSource.Depth */
|
|
320
|
+
: 5 /* InternalTextureSource.RenderTarget */;
|
|
321
|
+
const internalTexture = this.engine._createInternalTexture(size, internalTextureCreationOptions, false, source);
|
|
322
|
+
if (isDepthTexture) {
|
|
323
|
+
internalTexture.type = GetTypeForDepthTexture(internalTexture.format);
|
|
160
324
|
}
|
|
325
|
+
entry.texture = internalTexture;
|
|
161
326
|
}
|
|
162
327
|
}
|
|
163
328
|
if (entry.texture && entry.refHandle === undefined) {
|
|
@@ -171,34 +336,8 @@ export class FrameGraphTextureManager {
|
|
|
171
336
|
}
|
|
172
337
|
});
|
|
173
338
|
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
}
|
|
177
|
-
resolveDanglingHandle(danglingHandle, handle) {
|
|
178
|
-
const textureEntry = this._textures.get(handle);
|
|
179
|
-
if (textureEntry === undefined) {
|
|
180
|
-
throw new Error(`resolveDanglingHandle: Handle ${handle} does not exist!`);
|
|
181
|
-
}
|
|
182
|
-
this._textures.set(danglingHandle, {
|
|
183
|
-
texture: textureEntry.texture,
|
|
184
|
-
refHandle: handle,
|
|
185
|
-
name: textureEntry.name,
|
|
186
|
-
creationOptions: {
|
|
187
|
-
size: { ...textureEntry.creationOptions.size },
|
|
188
|
-
options: { ...textureEntry.creationOptions.options, label: textureEntry.name },
|
|
189
|
-
sizeIsPercentage: textureEntry.creationOptions.sizeIsPercentage,
|
|
190
|
-
isHistoryTexture: false,
|
|
191
|
-
},
|
|
192
|
-
namespace: textureEntry.namespace,
|
|
193
|
-
parentHandle: textureEntry.parentHandle,
|
|
194
|
-
parentTextureIndex: textureEntry.parentTextureIndex,
|
|
195
|
-
});
|
|
196
|
-
const historyEntry = this._historyTextures.get(handle);
|
|
197
|
-
if (historyEntry) {
|
|
198
|
-
historyEntry.refHandles.push(danglingHandle);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
releaseTextures(releaseAll = true) {
|
|
339
|
+
/** @internal */
|
|
340
|
+
_releaseTextures(releaseAll = true) {
|
|
202
341
|
this._textures.forEach((entry, handle) => {
|
|
203
342
|
if (releaseAll || entry.namespace !== FrameGraphTextureNamespace.External) {
|
|
204
343
|
entry.debug?.dispose();
|
|
@@ -224,14 +363,34 @@ export class FrameGraphTextureManager {
|
|
|
224
363
|
this._addSystemTextures();
|
|
225
364
|
}
|
|
226
365
|
}
|
|
366
|
+
/** @internal */
|
|
367
|
+
_updateHistoryTextures() {
|
|
368
|
+
this._historyTextures.forEach((entry) => {
|
|
369
|
+
entry.index = entry.index ^ 1;
|
|
370
|
+
const currentTexture = entry.textures[entry.index];
|
|
371
|
+
if (currentTexture) {
|
|
372
|
+
for (const { renderTargetWrapper, textureIndex } of entry.references) {
|
|
373
|
+
renderTargetWrapper.setTexture(currentTexture, textureIndex, false);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
});
|
|
377
|
+
}
|
|
227
378
|
_addSystemTextures() {
|
|
228
|
-
const size = { width: this.
|
|
379
|
+
const size = { width: this.engine.getRenderWidth(true), height: this.engine.getRenderHeight(true) };
|
|
229
380
|
this._textures.set(backbufferColorTextureHandle, {
|
|
230
381
|
name: "backbuffer color",
|
|
231
382
|
texture: null,
|
|
232
383
|
creationOptions: {
|
|
233
384
|
size,
|
|
234
|
-
options: {
|
|
385
|
+
options: {
|
|
386
|
+
createMipMaps: false,
|
|
387
|
+
samples: this.engine.getCreationOptions().antialias ? 4 : 1,
|
|
388
|
+
types: [0], // todo? get from engine
|
|
389
|
+
formats: [5], // todo? get from engine
|
|
390
|
+
useSRGBBuffers: [false],
|
|
391
|
+
creationFlags: [0],
|
|
392
|
+
labels: ["backbuffer color"],
|
|
393
|
+
},
|
|
235
394
|
sizeIsPercentage: false,
|
|
236
395
|
},
|
|
237
396
|
namespace: FrameGraphTextureNamespace.External,
|
|
@@ -241,19 +400,27 @@ export class FrameGraphTextureManager {
|
|
|
241
400
|
texture: null,
|
|
242
401
|
creationOptions: {
|
|
243
402
|
size,
|
|
244
|
-
options: {
|
|
403
|
+
options: {
|
|
404
|
+
createMipMaps: false,
|
|
405
|
+
samples: this.engine.getCreationOptions().antialias ? 4 : 1,
|
|
406
|
+
types: [0], // todo? get from engine
|
|
407
|
+
formats: [16], // todo? get from engine
|
|
408
|
+
useSRGBBuffers: [false],
|
|
409
|
+
creationFlags: [0],
|
|
410
|
+
labels: ["backbuffer depth/stencil"],
|
|
411
|
+
},
|
|
245
412
|
sizeIsPercentage: false,
|
|
246
413
|
},
|
|
247
414
|
namespace: FrameGraphTextureNamespace.External,
|
|
248
415
|
});
|
|
249
416
|
}
|
|
250
417
|
_createDebugTexture(name, texture) {
|
|
251
|
-
if (!this._debugTextures
|
|
418
|
+
if (!this._debugTextures) {
|
|
252
419
|
return;
|
|
253
420
|
}
|
|
254
421
|
const textureDebug = new Texture(null, this._scene);
|
|
255
422
|
textureDebug.name = name;
|
|
256
|
-
textureDebug._texture = texture
|
|
423
|
+
textureDebug._texture = texture;
|
|
257
424
|
textureDebug._texture.incrementReferences();
|
|
258
425
|
return textureDebug;
|
|
259
426
|
}
|
|
@@ -264,21 +431,22 @@ export class FrameGraphTextureManager {
|
|
|
264
431
|
this._textures.delete(handle);
|
|
265
432
|
}
|
|
266
433
|
}
|
|
267
|
-
_createHandleForTexture(name, texture, creationOptions, namespace,
|
|
434
|
+
_createHandleForTexture(name, texture, creationOptions, namespace, handle, textureIndex) {
|
|
268
435
|
handle = handle ?? FrameGraphTextureManager._Counter++;
|
|
269
|
-
|
|
436
|
+
textureIndex = textureIndex || 0;
|
|
437
|
+
const textureName = creationOptions.isHistoryTexture ? `${name} ping` : name;
|
|
438
|
+
const label = creationOptions.options.labels?.[textureIndex] ?? "";
|
|
270
439
|
const textureEntry = {
|
|
271
440
|
texture,
|
|
272
|
-
name: textureName
|
|
441
|
+
name: `${textureName}${label ? " " + label : ""}`,
|
|
273
442
|
creationOptions: {
|
|
274
|
-
size:
|
|
275
|
-
options:
|
|
443
|
+
size: textureSizeIsObject(creationOptions.size) ? creationOptions.size : { width: creationOptions.size, height: creationOptions.size },
|
|
444
|
+
options: creationOptions.options,
|
|
276
445
|
sizeIsPercentage: creationOptions.sizeIsPercentage,
|
|
277
446
|
isHistoryTexture: creationOptions.isHistoryTexture,
|
|
278
447
|
},
|
|
279
448
|
namespace,
|
|
280
|
-
|
|
281
|
-
parentTextureIndex,
|
|
449
|
+
textureIndex,
|
|
282
450
|
};
|
|
283
451
|
this._textures.set(handle, textureEntry);
|
|
284
452
|
if (namespace === FrameGraphTextureNamespace.External) {
|
|
@@ -291,31 +459,45 @@ export class FrameGraphTextureManager {
|
|
|
291
459
|
sizeIsPercentage: textureEntry.creationOptions.sizeIsPercentage,
|
|
292
460
|
isHistoryTexture: false,
|
|
293
461
|
};
|
|
294
|
-
const pongTexture = this._createHandleForTexture(`${name}
|
|
295
|
-
this._historyTextures.set(handle, { textures: [null, null], handles: [handle, pongTexture], index: 0,
|
|
462
|
+
const pongTexture = this._createHandleForTexture(`${name} pong`, null, pongCreationOptions, namespace);
|
|
463
|
+
this._historyTextures.set(handle, { textures: [null, null], handles: [handle, pongTexture], index: 0, references: [] });
|
|
296
464
|
return handle;
|
|
297
465
|
}
|
|
298
|
-
if (
|
|
299
|
-
const textureCount = creationOptions.options.
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
formats: [creationOptions.options.formats[i]],
|
|
308
|
-
types: [creationOptions.options.types[i]],
|
|
309
|
-
textureCount: 1,
|
|
310
|
-
},
|
|
311
|
-
sizeIsPercentage: creationOptions.sizeIsPercentage,
|
|
312
|
-
};
|
|
313
|
-
this._createHandleForTexture(textureName, null, creationOptionsForTexture, namespace, false, handle + i + 1, handle, i);
|
|
466
|
+
if (creationOptions.options.types && creationOptions.options.types.length > 1 && textureIndex === 0) {
|
|
467
|
+
const textureCount = creationOptions.options.types.length;
|
|
468
|
+
const creationOptionsForTexture = {
|
|
469
|
+
size: textureSizeIsObject(creationOptions.size) ? creationOptions.size : { width: creationOptions.size, height: creationOptions.size },
|
|
470
|
+
options: creationOptions.options,
|
|
471
|
+
sizeIsPercentage: creationOptions.sizeIsPercentage,
|
|
472
|
+
};
|
|
473
|
+
for (let i = 1; i < textureCount; i++) {
|
|
474
|
+
this._createHandleForTexture(textureName, null, creationOptionsForTexture, namespace, handle + i, i);
|
|
314
475
|
}
|
|
315
|
-
FrameGraphTextureManager._Counter += textureCount;
|
|
476
|
+
FrameGraphTextureManager._Counter += textureCount - 1;
|
|
316
477
|
}
|
|
317
478
|
return handle;
|
|
318
479
|
}
|
|
480
|
+
_cloneTextureOptions(options, textureIndex) {
|
|
481
|
+
return textureIndex !== undefined
|
|
482
|
+
? {
|
|
483
|
+
createMipMaps: options.createMipMaps,
|
|
484
|
+
samples: options.samples,
|
|
485
|
+
types: options.types ? [options.types[textureIndex]] : undefined,
|
|
486
|
+
formats: options.formats ? [options.formats[textureIndex]] : undefined,
|
|
487
|
+
useSRGBBuffers: options.useSRGBBuffers ? [options.useSRGBBuffers[textureIndex]] : undefined,
|
|
488
|
+
creationFlags: options.creationFlags ? [options.creationFlags[textureIndex]] : undefined,
|
|
489
|
+
labels: options.labels ? [options.labels[textureIndex]] : undefined,
|
|
490
|
+
}
|
|
491
|
+
: {
|
|
492
|
+
createMipMaps: options.createMipMaps,
|
|
493
|
+
samples: options.samples,
|
|
494
|
+
types: options.types ? [...options.types] : undefined,
|
|
495
|
+
formats: options.formats ? [...options.formats] : undefined,
|
|
496
|
+
useSRGBBuffers: options.useSRGBBuffers ? [...options.useSRGBBuffers] : undefined,
|
|
497
|
+
creationFlags: options.creationFlags ? [...options.creationFlags] : undefined,
|
|
498
|
+
labels: options.labels ? [...options.labels] : undefined,
|
|
499
|
+
};
|
|
500
|
+
}
|
|
319
501
|
}
|
|
320
502
|
FrameGraphTextureManager._Counter = 2; // 0 and 1 are reserved for backbuffer textures
|
|
321
503
|
//# sourceMappingURL=frameGraphTextureManager.js.map
|