@babylonjs/smart-filters 0.4.2-alpha → 0.5.0-alpha
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/dist/blocks/shaderBlock.d.ts +3 -7
- package/dist/blocks/shaderBlock.d.ts.map +1 -1
- package/dist/blocks/shaderBlock.js +43 -13
- package/dist/blocks/shaderBlock.js.map +1 -1
- package/dist/blocks/textureOptions.d.ts +47 -0
- package/dist/blocks/textureOptions.d.ts.map +1 -0
- package/dist/blocks/textureOptions.js +37 -0
- package/dist/blocks/textureOptions.js.map +1 -0
- package/dist/editorUtils/editableInPropertyPage.d.ts +4 -0
- package/dist/editorUtils/editableInPropertyPage.d.ts.map +1 -1
- package/dist/editorUtils/editableInPropertyPage.js +1 -0
- package/dist/editorUtils/editableInPropertyPage.js.map +1 -1
- package/dist/optimization/smartFilterOptimizer.d.ts +1 -1
- package/dist/optimization/smartFilterOptimizer.d.ts.map +1 -1
- package/dist/optimization/smartFilterOptimizer.js +7 -6
- package/dist/optimization/smartFilterOptimizer.js.map +1 -1
- package/dist/runtime/renderTargetGenerator.d.ts +8 -1
- package/dist/runtime/renderTargetGenerator.d.ts.map +1 -1
- package/dist/runtime/renderTargetGenerator.js +37 -18
- package/dist/runtime/renderTargetGenerator.js.map +1 -1
- package/package.json +2 -2
- package/src/blocks/shaderBlock.ts +34 -13
- package/src/blocks/textureOptions.ts +57 -0
- package/src/editorUtils/editableInPropertyPage.ts +5 -0
- package/src/optimization/smartFilterOptimizer.ts +8 -7
- package/src/runtime/renderTargetGenerator.ts +55 -20
|
@@ -5,6 +5,7 @@ import type { ShaderBinding } from "../runtime/shaderRuntime";
|
|
|
5
5
|
import type { ConnectionPoint } from "../connection/connectionPoint";
|
|
6
6
|
import { ConnectionPointType } from "../connection/connectionPointType.js";
|
|
7
7
|
import { BaseBlock } from "./baseBlock.js";
|
|
8
|
+
import { type OutputTextureOptions } from "./textureOptions.js";
|
|
8
9
|
/**
|
|
9
10
|
* This is the base class for all shader blocks.
|
|
10
11
|
*
|
|
@@ -31,15 +32,10 @@ export declare abstract class ShaderBlock extends BaseBlock {
|
|
|
31
32
|
* The output connection point of the block.
|
|
32
33
|
*/
|
|
33
34
|
readonly output: ConnectionPoint<ConnectionPointType.Texture>;
|
|
34
|
-
protected _textureRatio: number;
|
|
35
35
|
/**
|
|
36
|
-
*
|
|
36
|
+
* The options used when creating the texture this block outputs to
|
|
37
37
|
*/
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Sets the texture ratio of the output texture.
|
|
41
|
-
*/
|
|
42
|
-
set textureRatio(value: number);
|
|
38
|
+
outputTextureOptions: OutputTextureOptions;
|
|
43
39
|
/**
|
|
44
40
|
* Disconnects the block from the graph.
|
|
45
41
|
* @param disconnectedConnections - Stores the connections that have been broken in the process. You can reconnect them later if needed.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shaderBlock.d.ts","sourceRoot":"","sources":["../../src/blocks/shaderBlock.ts"],"names":[],"mappings":"AACA,OAAO,2DAA2D,CAAC;AAEnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAI3E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"shaderBlock.d.ts","sourceRoot":"","sources":["../../src/blocks/shaderBlock.ts"],"names":[],"mappings":"AACA,OAAO,2DAA2D,CAAC;AAEnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAI3E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAA8B,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAK5F;;;;;;GAMG;AACH,8BAAsB,WAAY,SAAQ,SAAS;IAC/C;;OAEG;IACH,OAAuB,SAAS,SAAiB;IAEjD;;;;OAIG;aACa,gBAAgB,IAAI,aAAa;IAEjD;;OAEG;IACH,OAAc,UAAU,EAAE,aAAa,CAAC;IAExC;;OAEG;IACH,SAAgB,MAAM,+CAA+D;IAErF;;OAEG;IAyBI,oBAAoB,EAAE,oBAAoB,CAI/C;IAEF;;;OAGG;IACa,mBAAmB,CAAC,uBAAuB,CAAC,EAAE,CAAC,eAAe,EAAE,eAAe,CAAC,EAAE,GAAG,IAAI;IASzG,SAAS,CAAC,iCAAiC,IAAI,eAAe;IAc9D;;;;;OAKG;gBACS,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,UAAQ;IAI/E;;;OAGG;IACI,gBAAgB;IAIvB;;;;OAIG;IACa,qCAAqC,CACjD,kBAAkB,EAAE,kBAAkB,EACtC,WAAW,EAAE,OAAO,GACrB,IAAI;CAgCV"}
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
1
7
|
import "@babylonjs/core/Engines/Extensions/engine.renderTarget.js";
|
|
2
8
|
import { ShaderRuntime } from "../runtime/shaderRuntime.js";
|
|
3
9
|
import { ConnectionPointType } from "../connection/connectionPointType.js";
|
|
@@ -5,6 +11,9 @@ import { createCommand } from "../command/command.js";
|
|
|
5
11
|
import { undecorateSymbol } from "../utils/shaderCodeUtils.js";
|
|
6
12
|
import { getRenderTargetWrapper, registerFinalRenderCommand } from "../utils/renderTargetUtils.js";
|
|
7
13
|
import { BaseBlock } from "./baseBlock.js";
|
|
14
|
+
import { TextureFormat, TextureType } from "./textureOptions.js";
|
|
15
|
+
import { editableInPropertyPage, PropertyTypeForEdition } from "../editorUtils/editableInPropertyPage.js";
|
|
16
|
+
const OutputTexturePropertiesGroupName = "OUTPUT TEXTURE PROPERTIES";
|
|
8
17
|
/**
|
|
9
18
|
* This is the base class for all shader blocks.
|
|
10
19
|
*
|
|
@@ -13,18 +22,6 @@ import { BaseBlock } from "./baseBlock.js";
|
|
|
13
22
|
* The only required function to implement is the bind function.
|
|
14
23
|
*/
|
|
15
24
|
export class ShaderBlock extends BaseBlock {
|
|
16
|
-
/**
|
|
17
|
-
* Gets the texture ratio of the output texture.
|
|
18
|
-
*/
|
|
19
|
-
get textureRatio() {
|
|
20
|
-
return this._textureRatio;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Sets the texture ratio of the output texture.
|
|
24
|
-
*/
|
|
25
|
-
set textureRatio(value) {
|
|
26
|
-
this._textureRatio = value;
|
|
27
|
-
}
|
|
28
25
|
/**
|
|
29
26
|
* Disconnects the block from the graph.
|
|
30
27
|
* @param disconnectedConnections - Stores the connections that have been broken in the process. You can reconnect them later if needed.
|
|
@@ -59,7 +56,14 @@ export class ShaderBlock extends BaseBlock {
|
|
|
59
56
|
* The output connection point of the block.
|
|
60
57
|
*/
|
|
61
58
|
this.output = this._registerOutput("output", ConnectionPointType.Texture);
|
|
62
|
-
|
|
59
|
+
/**
|
|
60
|
+
* The options used when creating the texture this block outputs to
|
|
61
|
+
*/
|
|
62
|
+
this.outputTextureOptions = {
|
|
63
|
+
ratio: 1,
|
|
64
|
+
format: TextureFormat.RGBA,
|
|
65
|
+
type: TextureType.UNSIGNED_BYTE,
|
|
66
|
+
};
|
|
63
67
|
}
|
|
64
68
|
/**
|
|
65
69
|
* Gets the shader program to use to render the block.
|
|
@@ -95,4 +99,30 @@ export class ShaderBlock extends BaseBlock {
|
|
|
95
99
|
* The class name of the block.
|
|
96
100
|
*/
|
|
97
101
|
ShaderBlock.ClassName = "ShaderBlock";
|
|
102
|
+
__decorate([
|
|
103
|
+
editableInPropertyPage("Ratio", PropertyTypeForEdition.Float, OutputTexturePropertiesGroupName, {
|
|
104
|
+
min: 0.1,
|
|
105
|
+
max: 10.0,
|
|
106
|
+
notifiers: { rebuild: true },
|
|
107
|
+
subPropertyName: "ratio",
|
|
108
|
+
}),
|
|
109
|
+
editableInPropertyPage("Format", PropertyTypeForEdition.List, OutputTexturePropertiesGroupName, {
|
|
110
|
+
notifiers: { rebuild: true },
|
|
111
|
+
subPropertyName: "format",
|
|
112
|
+
options: [
|
|
113
|
+
{ label: "R", value: TextureFormat.R },
|
|
114
|
+
{ label: "RG", value: TextureFormat.RG },
|
|
115
|
+
{ label: "RGBA", value: TextureFormat.RGBA },
|
|
116
|
+
],
|
|
117
|
+
}),
|
|
118
|
+
editableInPropertyPage("Type", PropertyTypeForEdition.List, OutputTexturePropertiesGroupName, {
|
|
119
|
+
notifiers: { rebuild: true },
|
|
120
|
+
subPropertyName: "type",
|
|
121
|
+
options: [
|
|
122
|
+
{ label: "UByte", value: TextureType.UNSIGNED_BYTE },
|
|
123
|
+
{ label: "Float", value: TextureType.FLOAT },
|
|
124
|
+
{ label: "Half Float", value: TextureType.HALF_FLOAT },
|
|
125
|
+
],
|
|
126
|
+
})
|
|
127
|
+
], ShaderBlock.prototype, "outputTextureOptions", void 0);
|
|
98
128
|
//# sourceMappingURL=shaderBlock.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shaderBlock.js","sourceRoot":"","sources":["../../src/blocks/shaderBlock.ts"],"names":[],"mappings":"AACA,OAAO,2DAA2D,CAAC;AAMnE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AACnG,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"shaderBlock.js","sourceRoot":"","sources":["../../src/blocks/shaderBlock.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The format of a texture - corresponds to the Babylon.js TextureFormat constants
|
|
3
|
+
*/
|
|
4
|
+
export declare enum TextureFormat {
|
|
5
|
+
/** Babylon Constants.TEXTUREFORMAT_RGBA */
|
|
6
|
+
RGBA = 5,
|
|
7
|
+
/** Babylon Constants.TEXTUREFORMAT_R */
|
|
8
|
+
R = 6,
|
|
9
|
+
/** Babylon Constants.TEXTUREFORMAT_RG */
|
|
10
|
+
RG = 7
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* The type of a texture - corresponds to the Babylon.js TextureType constants
|
|
14
|
+
*/
|
|
15
|
+
export declare enum TextureType {
|
|
16
|
+
/** Babylon Constants.TEXTURETYPE_UNSIGNED_BYTE */
|
|
17
|
+
UNSIGNED_BYTE = 0,
|
|
18
|
+
/** Babylon Constants.TEXTURETYPE_FLOAT */
|
|
19
|
+
FLOAT = 1,
|
|
20
|
+
/** Babylon Constants.TEXTURETYPE_HALF_FLOAT */
|
|
21
|
+
HALF_FLOAT = 2
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Describes the requirements for the output texture of a shader block.
|
|
25
|
+
*/
|
|
26
|
+
export type OutputTextureOptions = {
|
|
27
|
+
/**
|
|
28
|
+
* The texture size ratio (output size of this block / size of the Smart Filter output)
|
|
29
|
+
*/
|
|
30
|
+
ratio: number;
|
|
31
|
+
/**
|
|
32
|
+
* The format of the texture
|
|
33
|
+
*/
|
|
34
|
+
format: TextureFormat;
|
|
35
|
+
/**
|
|
36
|
+
* The type of the texture
|
|
37
|
+
*/
|
|
38
|
+
type: TextureType;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Compares two OutputTextureOptions to see if they match.
|
|
42
|
+
* @param a - The first OutputTextureOptions
|
|
43
|
+
* @param b - The second OutputTextureOptions
|
|
44
|
+
* @returns True if the two options match, false otherwise
|
|
45
|
+
*/
|
|
46
|
+
export declare function textureOptionsMatch(a: OutputTextureOptions | undefined, b: OutputTextureOptions | undefined): boolean;
|
|
47
|
+
//# sourceMappingURL=textureOptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textureOptions.d.ts","sourceRoot":"","sources":["../../src/blocks/textureOptions.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,aAAa;IACrB,2CAA2C;IAC3C,IAAI,IAAI;IACR,wCAAwC;IACxC,CAAC,IAAI;IACL,yCAAyC;IACzC,EAAE,IAAI;CACT;AAED;;GAEG;AACH,oBAAY,WAAW;IACnB,kDAAkD;IAClD,aAAa,IAAI;IACjB,0CAA0C;IAC1C,KAAK,IAAI;IACT,+CAA+C;IAC/C,UAAU,IAAI;CACjB;AAGD;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IAC/B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,MAAM,EAAE,aAAa,CAAC;IAEtB;;OAEG;IACH,IAAI,EAAE,WAAW,CAAC;CACrB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,oBAAoB,GAAG,SAAS,EAAE,CAAC,EAAE,oBAAoB,GAAG,SAAS,GAAG,OAAO,CAKrH"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The format of a texture - corresponds to the Babylon.js TextureFormat constants
|
|
3
|
+
*/
|
|
4
|
+
export var TextureFormat;
|
|
5
|
+
(function (TextureFormat) {
|
|
6
|
+
/** Babylon Constants.TEXTUREFORMAT_RGBA */
|
|
7
|
+
TextureFormat[TextureFormat["RGBA"] = 5] = "RGBA";
|
|
8
|
+
/** Babylon Constants.TEXTUREFORMAT_R */
|
|
9
|
+
TextureFormat[TextureFormat["R"] = 6] = "R";
|
|
10
|
+
/** Babylon Constants.TEXTUREFORMAT_RG */
|
|
11
|
+
TextureFormat[TextureFormat["RG"] = 7] = "RG";
|
|
12
|
+
})(TextureFormat || (TextureFormat = {}));
|
|
13
|
+
/**
|
|
14
|
+
* The type of a texture - corresponds to the Babylon.js TextureType constants
|
|
15
|
+
*/
|
|
16
|
+
export var TextureType;
|
|
17
|
+
(function (TextureType) {
|
|
18
|
+
/** Babylon Constants.TEXTURETYPE_UNSIGNED_BYTE */
|
|
19
|
+
TextureType[TextureType["UNSIGNED_BYTE"] = 0] = "UNSIGNED_BYTE";
|
|
20
|
+
/** Babylon Constants.TEXTURETYPE_FLOAT */
|
|
21
|
+
TextureType[TextureType["FLOAT"] = 1] = "FLOAT";
|
|
22
|
+
/** Babylon Constants.TEXTURETYPE_HALF_FLOAT */
|
|
23
|
+
TextureType[TextureType["HALF_FLOAT"] = 2] = "HALF_FLOAT";
|
|
24
|
+
})(TextureType || (TextureType = {}));
|
|
25
|
+
/**
|
|
26
|
+
* Compares two OutputTextureOptions to see if they match.
|
|
27
|
+
* @param a - The first OutputTextureOptions
|
|
28
|
+
* @param b - The second OutputTextureOptions
|
|
29
|
+
* @returns True if the two options match, false otherwise
|
|
30
|
+
*/
|
|
31
|
+
export function textureOptionsMatch(a, b) {
|
|
32
|
+
if (a === undefined || b === undefined) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
return a.ratio === b.ratio && a.format === b.format && a.type === b.type;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=textureOptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textureOptions.js","sourceRoot":"","sources":["../../src/blocks/textureOptions.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAN,IAAY,aAOX;AAPD,WAAY,aAAa;IACrB,2CAA2C;IAC3C,iDAAQ,CAAA;IACR,wCAAwC;IACxC,2CAAK,CAAA;IACL,yCAAyC;IACzC,6CAAM,CAAA;AACV,CAAC,EAPW,aAAa,KAAb,aAAa,QAOxB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,WAOX;AAPD,WAAY,WAAW;IACnB,kDAAkD;IAClD,+DAAiB,CAAA;IACjB,0CAA0C;IAC1C,+CAAS,CAAA;IACT,+CAA+C;IAC/C,yDAAc,CAAA;AAClB,CAAC,EAPW,WAAW,KAAX,WAAW,QAOtB;AAuBD;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,CAAmC,EAAE,CAAmC;IACxG,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC;AAC7E,CAAC"}
|
|
@@ -48,6 +48,8 @@ export interface IEditablePropertyOption {
|
|
|
48
48
|
options?: IEditablePropertyListOption[] | Observable<IEditablePropertyListOption[]>;
|
|
49
49
|
/** whether the options' values should be treated as strings */
|
|
50
50
|
valuesAreStrings?: boolean;
|
|
51
|
+
/** If supplied, the sub property to read/write */
|
|
52
|
+
subPropertyName?: string;
|
|
51
53
|
}
|
|
52
54
|
/**
|
|
53
55
|
* Interface that describes an editable property
|
|
@@ -63,6 +65,8 @@ export interface IPropertyDescriptionForEdition {
|
|
|
63
65
|
groupName: string;
|
|
64
66
|
/** options for the property */
|
|
65
67
|
options: IEditablePropertyOption;
|
|
68
|
+
/** name of the class that contains the property */
|
|
69
|
+
className: string;
|
|
66
70
|
}
|
|
67
71
|
/**
|
|
68
72
|
* Decorator that flags a property in a node block as being editable
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editableInPropertyPage.d.ts","sourceRoot":"","sources":["../../src/editorUtils/editableInPropertyPage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAElE;;GAEG;AACH,oBAAY,sBAAsB;IAC9B,4BAA4B;IAC5B,OAAO,IAAA;IACP,0BAA0B;IAC1B,KAAK,IAAA;IACL,wBAAwB;IACxB,GAAG,IAAA;IACH,4BAA4B;IAC5B,OAAO,IAAA;IACP,mCAAmC;IACnC,IAAI,IAAA;CACP;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IACxC,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACpC,gBAAgB;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,SAAS,CAAC,EAAE;QACR,mCAAmC;QACnC,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,oCAAoC;QACpC,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,wFAAwF;QACxF,sBAAsB,CAAC,EAAE,OAAO,CAAC;QACjC,4BAA4B;QAC5B,QAAQ,CAAC,EAAE,MAAM,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;QAC5C,wJAAwJ;QACxJ,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC;KAChE,CAAC;IACF,wDAAwD;IACxD,OAAO,CAAC,EAAE,2BAA2B,EAAE,GAAG,UAAU,CAAC,2BAA2B,EAAE,CAAC,CAAC;IACpF,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"editableInPropertyPage.d.ts","sourceRoot":"","sources":["../../src/editorUtils/editableInPropertyPage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAElE;;GAEG;AACH,oBAAY,sBAAsB;IAC9B,4BAA4B;IAC5B,OAAO,IAAA;IACP,0BAA0B;IAC1B,KAAK,IAAA;IACL,wBAAwB;IACxB,GAAG,IAAA;IACH,4BAA4B;IAC5B,OAAO,IAAA;IACP,mCAAmC;IACnC,IAAI,IAAA;CACP;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IACxC,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACpC,gBAAgB;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,SAAS,CAAC,EAAE;QACR,mCAAmC;QACnC,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,oCAAoC;QACpC,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,wFAAwF;QACxF,sBAAsB,CAAC,EAAE,OAAO,CAAC;QACjC,4BAA4B;QAC5B,QAAQ,CAAC,EAAE,MAAM,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;QAC5C,wJAAwJ;QACxJ,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC;KAChE,CAAC;IACF,wDAAwD;IACxD,OAAO,CAAC,EAAE,2BAA2B,EAAE,GAAG,UAAU,CAAC,2BAA2B,EAAE,CAAC,CAAC;IACpF,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kDAAkD;IAClD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC3C,2BAA2B;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,IAAI,EAAE,sBAAsB,CAAC;IAC7B,+GAA+G;IAC/G,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,OAAO,EAAE,uBAAuB,CAAC;IACjC,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAClC,WAAW,EAAE,MAAM,EACnB,YAAY,GAAE,sBAAuD,EACrE,SAAS,GAAE,MAAqB,EAChC,OAAO,CAAC,EAAE,uBAAuB,YAEjB,GAAG,eAAe,MAAM,UAgB3C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editableInPropertyPage.js","sourceRoot":"","sources":["../../src/editorUtils/editableInPropertyPage.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAN,IAAY,sBAWX;AAXD,WAAY,sBAAsB;IAC9B,4BAA4B;IAC5B,yEAAO,CAAA;IACP,0BAA0B;IAC1B,qEAAK,CAAA;IACL,wBAAwB;IACxB,iEAAG,CAAA;IACH,4BAA4B;IAC5B,yEAAO,CAAA;IACP,mCAAmC;IACnC,mEAAI,CAAA;AACR,CAAC,EAXW,sBAAsB,KAAtB,sBAAsB,QAWjC;
|
|
1
|
+
{"version":3,"file":"editableInPropertyPage.js","sourceRoot":"","sources":["../../src/editorUtils/editableInPropertyPage.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAN,IAAY,sBAWX;AAXD,WAAY,sBAAsB;IAC9B,4BAA4B;IAC5B,yEAAO,CAAA;IACP,0BAA0B;IAC1B,qEAAK,CAAA;IACL,wBAAwB;IACxB,iEAAG,CAAA;IACH,4BAA4B;IAC5B,yEAAO,CAAA;IACP,mCAAmC;IACnC,mEAAI,CAAA;AACR,CAAC,EAXW,sBAAsB,KAAtB,sBAAsB,QAWjC;AA2DD;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAClC,WAAmB,EACnB,eAAuC,sBAAsB,CAAC,OAAO,EACrE,YAAoB,YAAY,EAChC,OAAiC;IAEjC,OAAO,CAAC,MAAW,EAAE,WAAmB,EAAE,EAAE;QACxC,IAAI,SAAS,GAAqC,MAAM,CAAC,UAAU,CAAC;QACpE,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,SAAS,GAAG,EAAE,CAAC;YACf,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;QAClC,CAAC;QAED,SAAS,CAAC,IAAI,CAAC;YACX,YAAY,EAAE,WAAW;YACzB,WAAW,EAAE,WAAW;YACxB,IAAI,EAAE,YAAY;YAClB,SAAS,EAAE,SAAS;YACpB,OAAO,EAAE,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE;YACtB,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI;SACrC,CAAC,CAAC;IACP,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -44,7 +44,7 @@ export declare class SmartFilterOptimizer {
|
|
|
44
44
|
private _mainFunctionNameToCode;
|
|
45
45
|
private _dependencyGraph;
|
|
46
46
|
private _vertexShaderCode;
|
|
47
|
-
private
|
|
47
|
+
private _currentOutputTextureOptions;
|
|
48
48
|
private _forceUnoptimized;
|
|
49
49
|
/**
|
|
50
50
|
* Creates a new smart filter optimizer
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smartFilterOptimizer.d.ts","sourceRoot":"","sources":["../../src/optimization/smartFilterOptimizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAIrE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"smartFilterOptimizer.d.ts","sourceRoot":"","sources":["../../src/optimization/smartFilterOptimizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAIrE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAqDhD;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACpB;;OAEG;IACH,iBAAiB,EAAE,eAAe,EAAE,CAAC;IAErC;;OAEG;IACH,qBAAqB,EAAE,eAAe,CAAC;CAC1C,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,4BAA4B;IACzC;;OAEG;IACH,2BAA2B,CAAC,EAAE,MAAM,CAAC;IAErC;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED;;GAEG;AACH,qBAAa,oBAAoB;IAC7B,OAAO,CAAC,kBAAkB,CAAc;IACxC,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,iBAAiB,CAAwC;IACjE,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,sBAAsB,CAAwC;IAEtE,OAAO,CAAC,kBAAkB,CAAkC;IAC5D,OAAO,CAAC,gBAAgB,CAA6B;IACrD,OAAO,CAAC,wBAAwB,CAAqC;IACrE,OAAO,CAAC,uBAAuB,CAAkC;IACjE,OAAO,CAAC,gBAAgB,CAA0D;IAClF,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,4BAA4B,CAAmC;IACvE,OAAO,CAAC,iBAAiB,CAAkB;IAE3C;;;;OAIG;gBACS,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,4BAA4B;IAQ5E;;;OAGG;IACI,QAAQ,IAAI,QAAQ,CAAC,WAAW,CAAC;IAqExC,OAAO,CAAC,yBAAyB;IAwBjC,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,uBAAuB;IAuD/B,OAAO,CAAC,iBAAiB;IAsEzB,OAAO,CAAC,qBAAqB;IAiD7B,OAAO,CAAC,eAAe;IAoBvB,OAAO,CAAC,cAAc;IA+JtB,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,aAAa;IA4GrB;;;;;;;;OAQG;IACH,OAAO,CAAC,wBAAwB;CAWnC"}
|
|
@@ -6,6 +6,7 @@ import { OptimizedShaderBlock } from "./optimizedShaderBlock.js";
|
|
|
6
6
|
import { AutoDisableMainInputColorName, decorateChar, decorateSymbol, getShaderFragmentCode, undecorateSymbol, } from "../utils/shaderCodeUtils.js";
|
|
7
7
|
import { DependencyGraph } from "./dependencyGraph.js";
|
|
8
8
|
import { DisableableShaderBlock, BlockDisableStrategy } from "../blocks/disableableShaderBlock.js";
|
|
9
|
+
import { textureOptionsMatch } from "../blocks/textureOptions.js";
|
|
9
10
|
const showDebugData = false;
|
|
10
11
|
/**
|
|
11
12
|
* Optimizes a smart filter by aggregating blocks whenever possible, to reduce the number of draw calls.
|
|
@@ -109,7 +110,7 @@ export class SmartFilterOptimizer {
|
|
|
109
110
|
this._mainFunctionNameToCode = new Map();
|
|
110
111
|
this._dependencyGraph = new DependencyGraph();
|
|
111
112
|
this._vertexShaderCode = undefined;
|
|
112
|
-
this.
|
|
113
|
+
this._currentOutputTextureOptions = undefined;
|
|
113
114
|
this._forceUnoptimized = false;
|
|
114
115
|
}
|
|
115
116
|
_makeSymbolUnique(symbolName) {
|
|
@@ -256,7 +257,7 @@ export class SmartFilterOptimizer {
|
|
|
256
257
|
if (block.getShaderProgram().vertex !== this._vertexShaderCode) {
|
|
257
258
|
return false;
|
|
258
259
|
}
|
|
259
|
-
if (block.
|
|
260
|
+
if (!textureOptionsMatch(block.outputTextureOptions, this._currentOutputTextureOptions)) {
|
|
260
261
|
return false;
|
|
261
262
|
}
|
|
262
263
|
}
|
|
@@ -268,8 +269,8 @@ export class SmartFilterOptimizer {
|
|
|
268
269
|
var _a;
|
|
269
270
|
const block = outputConnectionPoint.ownerBlock;
|
|
270
271
|
if (block instanceof ShaderBlock) {
|
|
271
|
-
if (this.
|
|
272
|
-
this.
|
|
272
|
+
if (this._currentOutputTextureOptions === undefined) {
|
|
273
|
+
this._currentOutputTextureOptions = block.outputTextureOptions;
|
|
273
274
|
}
|
|
274
275
|
const shaderProgram = block.getShaderProgram();
|
|
275
276
|
if (!shaderProgram) {
|
|
@@ -479,8 +480,8 @@ export class SmartFilterOptimizer {
|
|
|
479
480
|
],
|
|
480
481
|
},
|
|
481
482
|
});
|
|
482
|
-
if (this.
|
|
483
|
-
optimizedBlock.
|
|
483
|
+
if (this._currentOutputTextureOptions !== undefined) {
|
|
484
|
+
optimizedBlock.outputTextureOptions = this._currentOutputTextureOptions;
|
|
484
485
|
}
|
|
485
486
|
optimizedBlock.setShaderBindings(Array.from(blockOwnerToShaderBinding.values()));
|
|
486
487
|
return optimizedBlock;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smartFilterOptimizer.js","sourceRoot":"","sources":["../../src/optimization/smartFilterOptimizer.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EACH,6BAA6B,EAC7B,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,gBAAgB,GACnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAEnG,MAAM,aAAa,GAAG,KAAK,CAAC;AAoE5B;;GAEG;AACH,MAAM,OAAO,oBAAoB;IAiB7B;;;;OAIG;IACH,YAAY,WAAwB,EAAE,OAAsC;QAnBpE,gBAAW,GAAgB,EAAE,CAAC;QAC9B,sBAAiB,GAA8B,IAAI,GAAG,EAAE,CAAC;QACzD,qBAAgB,GAAgB,EAAE,CAAC;QACnC,2BAAsB,GAA8B,IAAI,GAAG,EAAE,CAAC;QAE9D,uBAAkB,GAA+B,EAAE,CAAC;QACpD,qBAAgB,GAA0B,EAAE,CAAC;QAC7C,6BAAwB,GAA2B,IAAI,GAAG,EAAE,CAAC;QAC7D,4BAAuB,GAAwB,IAAI,GAAG,EAAE,CAAC;QACzD,qBAAgB,GAA4B,IAAI,eAAe,EAAU,CAAC;QAG1E,sBAAiB,GAAY,KAAK,CAAC;QAQvC,IAAI,CAAC,kBAAkB,GAAG,WAAW,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG;YACZ,2BAA2B,EAAE,CAAC;YAC9B,GAAG,OAAO;SACb,CAAC;IACN,CAAC;IAED;;;OAGG;IACI,QAAQ;QACX,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,EAAE,CAAC;QAEnC,IAAI,cAAc,GAA0B,IAAI,CAAC;QAEjD,IAAI,CAAC,kBAAkB,CAAC,2BAA2B,CAAC,GAAG,EAAE;YACrD,IACI,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAAW;gBAC1C,CAAC,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,EAC7E,CAAC;gBACC,MAAM,sBAAsB,GAAyC,EAAE,CAAC;gBAExE,IAAI,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC;oBACrC,8EAA8E;oBAC9E,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC;oBAEjE,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAa,CAAC;oBAClD,IAAI,CAAC,yBAAyB,CAC1B,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,EACrD,oBAAoB,EACpB,sBAAsB,CACzB,CAAC;gBACN,CAAC;gBAED,cAAc,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,GAAG,cAAc,CAAC,CAAC;gBAEhF,gHAAgH;gBAChH,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC9E,mFAAmF;oBACnF,6HAA6H;oBAC7H,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC;oBAC9D,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC;oBAEjE,MAAM,IAAI,GAAc;wBACpB,iBAAiB,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC;wBAC1C,qBAAqB,EAAE,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAAW;qBACpE,CAAC;oBAEF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC5B,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;oBAExE,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACjC,MAAM,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAG,CAAC;wBAE7E,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAC;wBAE3E,IAAI,QAAQ,EAAE,CAAC;4BACX,KAAK,MAAM,gBAAgB,IAAI,iBAAiB,EAAE,CAAC;gCAC/C,gBAAgB,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;4BAChD,CAAC;wBACL,CAAC;oBACL,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACJ,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBAChF,CAAC;gBAED,IAAI,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC;oBACrC,+IAA+I;oBAC/I,KAAK,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,sBAAsB,EAAE,CAAC;wBACxD,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;oBACjC,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,cAAc,CAAC;IAC1B,CAAC;IAEO,yBAAyB,CAC7B,KAAgB,EAChB,oBAAoC,EACpC,iBAAuD;QAEvD,IAAI,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO;QACX,CAAC;QAED,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAEhC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,CAAC,OAAO,EAAE,CAAC;gBACnE,SAAS;YACb,CAAC;YAED,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;QAC1G,CAAC;QAED,IAAI,KAAK,YAAY,sBAAsB,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YAC9E,KAAK,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;QACjD,CAAC;IACL,CAAC;IAEO,WAAW;QACf,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,wBAAwB,GAAG,IAAI,GAAG,EAAE,CAAC;QAC1C,IAAI,CAAC,uBAAuB,GAAG,IAAI,GAAG,EAAE,CAAC;QACzC,IAAI,CAAC,gBAAgB,GAAG,IAAI,eAAe,EAAE,CAAC;QAC9C,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACnC,CAAC;IAEO,iBAAiB,CAAC,UAAkB;QACxC,IAAI,UAAU,GAAG,UAAU,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC;YACtC,UAAU,IAAI,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,UAAU,CAAC;IACtB,CAAC;IAEO,uBAAuB,CAAC,KAAkB,EAAE,IAAY;;QAC5D,MAAM,SAAS,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;QAE9D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,kEAAkE;YAClE,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,gBAAgB,GAA4B,EAAE,CAAC;QAErD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC3B,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;YAEzB,IAAI,QAAQ,KAAK,KAAK,CAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;gBAClE,SAAS;YACb,CAAC;YAED,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAEtC,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;YAEnE,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAC/C,CAAC,CAAC,EAAE,EAAE,CACF,CAAC,CAAC,IAAI,KAAK,UAAU;gBACrB,CAAC,CAAC,IAAI,KAAK,QAAQ;gBACnB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;gBACX,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,KAAK,KAAK,CAAC,YAAY,EAAE,CAC1D,CAAC;YAEF,MAAM,UAAU,GAAG,MAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,YAAY,mCAAI,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;YAEtG,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACpB,gBAAgB,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC;gBAEtD,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;gBACzB,KAAK,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,gBAAgB,EAAE,CAAC;oBAClD,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;gBACpD,CAAC;gBAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;oBACvB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,QAAQ;oBACd,YAAY,EAAE,UAAU;oBACxB,WAAW,EAAE,QAAQ;oBACrB,MAAM,EAAE,CAAC,KAAK,CAAC;oBACf,UAAU,EAAE,SAAS;iBACxB,CAAC,CAAC;YACP,CAAC;YAED,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,iBAAiB,CACrB,KAAkB,EAClB,IAAY,EACZ,OAA4B,EAC5B,YAAqB,EACrB,QAAQ,GAAG,KAAK,EAChB,mBAAmB,GAAG,KAAK;QAE3B,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACtB,CAAC;QAED,IAAI,GAAG,GAAG,GAAG,OAAO,iBAAiB,YAAY,SAAS,YAAY,MAAM,CAAC;QAC7E,IAAI,QAAQ,EAAE,CAAC;YACX,GAAG,IAAI,YAAY,CAAC;QACxB,CAAC;aAAM,CAAC;YACJ,GAAG,IAAI,GAAG,CAAC;QACf,CAAC;QAED,MAAM,WAAW,GAAG,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAEhC,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAClC,OAAO,KAAK,KAAK,IAAI,EAAE,CAAC;YACpB,MAAM,cAAc,GAAG,mBAAmB,IAAI,OAAO,KAAK,OAAO,CAAC;YAClE,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAE7C,IAAI,UAAU,GAAqB,IAAI,CAAC;YAExC,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;gBAC1B,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACJ,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAC/C,CAAC,CAAC,EAAE,EAAE,CACF,CAAC,CAAC,IAAI,KAAK,OAAO;oBAClB,CAAC,CAAC,IAAI,KAAK,OAAO;oBAClB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;oBACX,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,KAAK,KAAK,CAAC,YAAY,EAAE,CAC1D,CAAC;gBACF,IAAI,gBAAgB,IAAI,cAAc,EAAE,CAAC;oBACrC,UAAU,GAAG,gBAAgB,CAAC,YAAY,CAAC;oBAC3C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;wBACxB,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACxC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACJ,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;oBAE7D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;wBACvB,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,OAAO;wBACb,YAAY,EAAE,UAAU;wBACxB,WAAW,EAAE,GAAG,OAAO,IAAI,OAAO,IAAI,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG;wBACtF,MAAM,EAAE,CAAC,KAAK,CAAC;wBACf,UAAU,EAAE,SAAS;qBACxB,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;YAED,IAAI,UAAU,EAAE,CAAC;gBACb,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;YAC9E,CAAC;YAED,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC/B,CAAC;IAEO,qBAAqB,CACzB,KAAkB,EAClB,IAAY,EACZ,OAAe,EACf,QAAkB,EAClB,iBAA2D;QAE3D,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,2BAA2B,YAAY,GAAG,OAAO,GAAG,YAAY,uBAAuB,CAAC,CAAC;QAE/G,IAAI,cAAc,GAAG,OAAO,CAAC;QAE7B,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAC/C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,KAAK,iBAAiB,CACpF,CAAC;QACF,IAAI,gBAAgB,EAAE,CAAC;YACnB,gFAAgF;YAChF,cAAc,GAAG,gBAAgB,CAAC,YAAY,CAAC;QACnD,CAAC;aAAM,CAAC;YACJ,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC;YAExE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;gBACvB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,OAAO;gBACb,YAAY,EAAE,cAAc;gBAC5B,WAAW,EAAE,qBAAqB,cAAc,GAAG;gBACnD,MAAM,EAAE,CAAC,KAAK,CAAC;gBACf,UAAU,EAAE,iBAAiB;aAChC,CAAC,CAAC;QACP,CAAC;QAED,IAAI,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC1C,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAClC,CAAC;QAED,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO,KAAK,KAAK,IAAI,EAAE,CAAC;YACpB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YAErB,IAAI;gBACA,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC;oBAC9B,aAAa,cAAc,KAAK,EAAE,GAAG;oBACrC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,CAAC;YAEnD,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,eAAe,CAAC,KAAgB;QACpC,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YAC/B,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC7D,OAAO,KAAK,CAAC;YACjB,CAAC;YAED,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;gBAC5C,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,6DAA6D;IAC7D,2DAA2D;IACnD,cAAc,CAClB,cAAoC,EACpC,qBAAsC,EACtC,QAAkB;;QAElB,MAAM,KAAK,GAAG,qBAAqB,CAAC,UAAU,CAAC;QAE/C,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;gBACnC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,YAAY,CAAC;YAC5C,CAAC;YAED,MAAM,aAAa,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAE/C,IAAI,CAAC,aAAa,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,uCAAuC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;YAC3E,CAAC;YAED,mDAAmD;YACnD,IAAI,IAAI,GAAG,qBAAqB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YAEtD,IAAI,CAAC,iBAAiB,GAAG,MAAA,IAAI,CAAC,iBAAiB,mCAAI,aAAa,CAAC,MAAM,CAAC;YAExE,oFAAoF;YACpF,MAAM,cAAc,GAAG,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAE/D,IAAI,iBAAiB,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAEjE,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACrB,iBAAiB,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;gBACrD,iBAAiB,GAAG,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBAE9E,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;gBAC5D,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;YACxD,CAAC;YAED,iDAAiD;YACjD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;YAEvD,2CAA2C;YAC3C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;YAErD,sEAAsE;YACtE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;YAEnD,uDAAuD;YACvD,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAEjD,8CAA8C;YAC9C,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAE3F,sFAAsF;YACtF,IAAI,WAAW,GAAa,EAAE,CAAC;YAC/B,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAE5G,IAAI,kBAAkB,GAAG,EAAE,CAAC;YAC5B,CAAC,IAAI,EAAE,kBAAkB,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAC/C,KAAK,EACL,IAAI,EACJ,SAAS,EACT,aAAa,CAAC,QAAQ,CAAC,aAAa,EACpC,KAAK,EACL,IAAI,CACP,CAAC;YAEF,WAAW,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,CAAC;YAExC,+BAA+B;YAC/B,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;gBAChC,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBAE9C,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;gBAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;oBACT,yKAAyK;oBACzK,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;oBACtE,SAAS;gBACb,CAAC;gBAED,gCAAgC;gBAChC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;oBACrB,MAAM,0DAA0D,WAAW,qBAAqB,KAAK,CAAC,IAAI,qBAAqB,CAAC;gBACpI,CAAC;gBAED,gGAAgG;gBAChG,IACI,KAAK,YAAY,sBAAsB;oBACvC,KAAK,CAAC,oBAAoB,KAAK,oBAAoB,CAAC,UAAU,EAChE,CAAC;oBACC,IAAI,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBACxD,CAAC;gBAED,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC;gBAEjD,IAAI,mBAAmB,CAAC,WAAW,CAAC,EAAE,CAAC;oBACnC,2FAA2F;oBAC3F,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;gBACvF,CAAC;qBAAM,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,CAAC;oBACtE,oGAAoG;oBACpG,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;oBACtE,IAAI,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;oBACxD,IAAI,CAAC,SAAS,EAAE,CAAC;wBACb,SAAS,GAAG;4BACR,iBAAiB,EAAE,EAAE;4BACrB,qBAAqB,EAAE,KAAK,CAAC,WAAW;yBAC3C,CAAC;wBACF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBACjC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;oBACvD,CAAC;oBACD,8EAA8E;oBAC9E,MAAM,eAAe,GAAG,cAAc,CAAC,cAAc,CAAC,WAAW,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;oBAChG,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBACtD,CAAC;qBAAM,CAAC;oBACJ,IAAI,cAAsB,CAAC;oBAE3B,IAAI,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;wBACjD,0FAA0F;wBAC1F,cAAc,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC;oBACrE,CAAC;yBAAM,CAAC;wBACJ,4GAA4G;wBAC5G,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;wBAClF,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;oBAC3E,CAAC;oBAED,iIAAiI;oBACjI,wIAAwI;oBACxI,oJAAoJ;oBACpJ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;wBACvB,IAAI,EAAE,SAAS;wBACf,IAAI,EAAE,WAAW;wBACjB,YAAY,EAAE,WAAW;wBACzB,WAAW,EAAE,EAAE;wBACf,MAAM,EAAE,CAAC,KAAK,CAAC;wBACf,UAAU,EAAE,SAAS;qBACxB,CAAC,CAAC;oBAEH,qGAAqG;oBACrG,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,2BAA2B,OAAO,uBAAuB,CAAC,CAAC;oBAEjF,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC1B,OAAO,KAAK,KAAK,IAAI,EAAE,CAAC;wBACpB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;wBAEpB,IAAI;4BACA,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC;gCAC9B,GAAG,cAAc,IAAI,EAAE,GAAG;gCAC1B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,CAAC;wBACnD,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC1B,CAAC;gBACL,CAAC;YACL,CAAC;YAED,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;YAE1D,OAAO,iBAAiB,CAAC;QAC7B,CAAC;QAED,MAAM,mCAAmC,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC;IACpE,CAAC;IAEO,oBAAoB;QACxB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACjD,IAAI,CAAC,sBAAsB,GAAG,IAAI,GAAG,EAAE,CAAC;QAExC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAChD,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;YAC1D,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAChD,CAAC;IACL,CAAC;IAEO,uBAAuB;QAC3B,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAEhD,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC/B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACrD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,cAA2B,EAAE,qBAAsC;QACrF,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,IAAI,cAAc,GAAG,IAAI,oBAAoB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QAE3E,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,IAAI,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,qBAAqB,EAAE,QAAQ,CAAC,CAAC;QAExF,IAAI,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,2BAA4B,EAAE,CAAC;YAC/D,6CAA6C;YAC7C,mGAAmG;YACnG,cAAc,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;YAE3C,IAAI,CAAC,WAAW,EAAE,CAAC;YAEnB,cAAc,GAAG,IAAI,oBAAoB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;YAEzE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAC9B,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YAEpB,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAE/B,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,qBAAqB,EAAE,QAAQ,CAAC,CAAC;QACxF,CAAC;QAED,+BAA+B;QAC/B,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAe,EAAE,EAAE;YAC3C,IAAI,IAAI,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,OAAO,CAAE,GAAG,IAAI,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,6CAA6C;QAC7C,MAAM,yBAAyB,GAAG,IAAI,GAAG,EAA8B,CAAC;QAExE,IAAI,YAAY,GAAG,EAAE,CAAC;QACtB,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,aAAa,GAAG,EAAE,CAAC;QAEvB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACpC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;gBACb,KAAK,OAAO;oBACR,UAAU,IAAI,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC;oBACnC,MAAM;gBACV,KAAK,SAAS,CAAC;gBACf,KAAK,SAAS;oBACV,YAAY,IAAI,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC;oBACrC,MAAM;gBACV,KAAK,UAAU;oBACX,aAAa,IAAI,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC;oBACtC,MAAM;YACd,CAAC;YAED,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;gBAC3B,IAAI,aAAa,GAAG,yBAAyB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACzD,IAAI,CAAC,aAAa,EAAE,CAAC;oBACjB,aAAa,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;oBACzC,yBAAyB,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;gBACxD,CAAC;gBAED,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;oBACb,KAAK,SAAS,CAAC;oBACf,KAAK,SAAS;wBACV,aAAa,CAAC,0BAA0B,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;wBACjF,MAAM;gBACd,CAAC;YACL,CAAC;QACL,CAAC;QAED,wCAAwC;QACxC,IAAI,GAAG,aAAa,GAAG,IAAI,CAAC;QAC5B,IAAI,aAAa,EAAE,CAAC;YAChB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YACpC,IAAI,GAAG,IAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAChC,IAAI,GAAG,IAAK,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAEvC,OAAO,CAAC,GAAG,CAAC,+CAA+C,IAAI,CAAC,iBAAiB,uBAAuB,CAAC,CAAC;YAC1G,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACvC,CAAC;QAED,cAAc,CAAC,gBAAgB,CAAC;YAC5B,MAAM,EAAE,IAAI,CAAC,iBAAiB;YAC9B,QAAQ,EAAE;gBACN,KAAK,EAAE,UAAU;gBACjB,OAAO,EAAE,YAAY;gBACrB,gBAAgB,EAAE,YAAY;gBAC9B,SAAS,EAAE;oBACP;wBACI,IAAI,EAAE,YAAY;wBAClB,IAAI;qBACP;iBACJ;aACJ;SACJ,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACnC,cAAc,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;QACrD,CAAC;QAED,cAAc,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAEjF,OAAO,cAAc,CAAC;IAC1B,CAAC;IAED;;;;;;;;OAQG;IACK,wBAAwB,CAAC,IAAY,EAAE,OAAe;QAC1D,IAAI,YAAY,GAAG,IAAI,CAAC;QACxB,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,2BAA2B,OAAO,qBAAqB,EAAE,GAAG,CAAC,CAAC;QACpF,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE;YAC9B,IAAI,YAAY,EAAE,CAAC;gBACf,YAAY,GAAG,KAAK,CAAC;gBACrB,OAAO,KAAK,CAAC;YACjB,CAAC;YACD,OAAO,cAAc,CAAC,6BAA6B,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACP,CAAC;CACJ"}
|
|
1
|
+
{"version":3,"file":"smartFilterOptimizer.js","sourceRoot":"","sources":["../../src/optimization/smartFilterOptimizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ import type { InitializationData, SmartFilter } from "../smartFilter";
|
|
|
5
5
|
export declare class RenderTargetGenerator {
|
|
6
6
|
private _optimize;
|
|
7
7
|
private _renderTargetPool;
|
|
8
|
+
private _textureOptionsHashCache;
|
|
8
9
|
private _numTargetsCreated;
|
|
9
10
|
/**
|
|
10
11
|
* Creates a new render target generator.
|
|
@@ -28,9 +29,15 @@ export declare class RenderTargetGenerator {
|
|
|
28
29
|
* Creates an offscreen texture to hold on the result of the block rendering.
|
|
29
30
|
* @param runtime - The current runtime we create the texture for
|
|
30
31
|
* @param smartFilter - The smart filter the texture is created for
|
|
31
|
-
* @param
|
|
32
|
+
* @param textureOptions - The options to use to create the texture
|
|
32
33
|
* @returns The render target texture
|
|
33
34
|
*/
|
|
34
35
|
private _createTexture;
|
|
36
|
+
/**
|
|
37
|
+
* Gets a textureOptionsHash for a block, using a cache to avoid recomputing it.
|
|
38
|
+
* @param block - The block to get the texture options hash for
|
|
39
|
+
* @returns The texture options hash for the block
|
|
40
|
+
*/
|
|
41
|
+
private _getTextureOptionsHash;
|
|
35
42
|
}
|
|
36
43
|
//# sourceMappingURL=renderTargetGenerator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderTargetGenerator.d.ts","sourceRoot":"","sources":["../../src/runtime/renderTargetGenerator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"renderTargetGenerator.d.ts","sourceRoot":"","sources":["../../src/runtime/renderTargetGenerator.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAsBtE;;GAEG;AACH,qBAAa,qBAAqB;IAC9B,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,iBAAiB,CAAsC;IAC/D,OAAO,CAAC,wBAAwB,CAAkC;IAElE,OAAO,CAAC,kBAAkB,CAAC;IAE3B;;;OAGG;gBACS,QAAQ,UAAO;IAM3B;;OAEG;IACH,IAAW,iBAAiB,WAE3B;IAED;;;;OAIG;IACI,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB;IA+DzF,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,WAAW;IAiCnB,OAAO,CAAC,eAAe;IAsBvB;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IA6CtB;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;CAQjC"}
|
|
@@ -11,6 +11,7 @@ export class RenderTargetGenerator {
|
|
|
11
11
|
* @param optimize - If true, the render target generator will try to reuse render targets as much as possible.
|
|
12
12
|
*/
|
|
13
13
|
constructor(optimize = true) {
|
|
14
|
+
this._textureOptionsHashCache = new Map();
|
|
14
15
|
this._optimize = optimize;
|
|
15
16
|
this._renderTargetPool = new Map();
|
|
16
17
|
this._numTargetsCreated = 0;
|
|
@@ -32,10 +33,11 @@ export class RenderTargetGenerator {
|
|
|
32
33
|
return;
|
|
33
34
|
}
|
|
34
35
|
let refCountedTexture = null;
|
|
36
|
+
const textureOptionsHash = this._getTextureOptionsHash(block);
|
|
35
37
|
// We assign a texture to the output of the block only if this is not the last block in the chain,
|
|
36
38
|
// i.e. not the block connected to the smart output block (in which case the output of the block is to the canvas and not a texture).
|
|
37
39
|
if (!block.output.endpoints.some((cp) => cp.ownerBlock === smartFilter.output.ownerBlock)) {
|
|
38
|
-
refCountedTexture = this._getTexture(initializationData.runtime, block.
|
|
40
|
+
refCountedTexture = this._getTexture(initializationData.runtime, block.outputTextureOptions, textureOptionsHash, smartFilter);
|
|
39
41
|
if (!block.output.runtimeData) {
|
|
40
42
|
const runtimeOutput = createStrongRef(refCountedTexture.texture);
|
|
41
43
|
block.output.runtimeData = runtimeOutput;
|
|
@@ -62,15 +64,16 @@ export class RenderTargetGenerator {
|
|
|
62
64
|
if (connectedBlock instanceof ShaderBlock &&
|
|
63
65
|
connectedBlock.output.runtimeData &&
|
|
64
66
|
connectedBlock.output.runtimeData.value) {
|
|
65
|
-
this._releaseTexture(connectedBlock.output.runtimeData.value, connectedBlock
|
|
67
|
+
this._releaseTexture(connectedBlock.output.runtimeData.value, this._getTextureOptionsHash(connectedBlock));
|
|
66
68
|
}
|
|
67
69
|
}
|
|
68
70
|
}
|
|
69
71
|
});
|
|
70
72
|
this._renderTargetPool.clear();
|
|
73
|
+
this._textureOptionsHashCache.clear();
|
|
71
74
|
}
|
|
72
|
-
_findAvailableTexture(
|
|
73
|
-
const refCountedTextures = this._renderTargetPool.get(
|
|
75
|
+
_findAvailableTexture(textureOptionsHash) {
|
|
76
|
+
const refCountedTextures = this._renderTargetPool.get(textureOptionsHash);
|
|
74
77
|
if (!refCountedTextures) {
|
|
75
78
|
return null;
|
|
76
79
|
}
|
|
@@ -81,23 +84,23 @@ export class RenderTargetGenerator {
|
|
|
81
84
|
}
|
|
82
85
|
return null;
|
|
83
86
|
}
|
|
84
|
-
_getTexture(runtime,
|
|
87
|
+
_getTexture(runtime, textureOptions, textureOptionsHash, smartFilter) {
|
|
85
88
|
if (!this._optimize) {
|
|
86
89
|
this._numTargetsCreated++;
|
|
87
90
|
return {
|
|
88
|
-
texture: this._createTexture(runtime, smartFilter,
|
|
91
|
+
texture: this._createTexture(runtime, smartFilter, textureOptions),
|
|
89
92
|
refCount: 0,
|
|
90
93
|
};
|
|
91
94
|
}
|
|
92
|
-
let refCountedTextures = this._renderTargetPool.get(
|
|
95
|
+
let refCountedTextures = this._renderTargetPool.get(textureOptionsHash);
|
|
93
96
|
if (!refCountedTextures) {
|
|
94
97
|
refCountedTextures = new Set();
|
|
95
|
-
this._renderTargetPool.set(
|
|
98
|
+
this._renderTargetPool.set(textureOptionsHash, refCountedTextures);
|
|
96
99
|
}
|
|
97
|
-
let refCountedTexture = this._findAvailableTexture(
|
|
100
|
+
let refCountedTexture = this._findAvailableTexture(textureOptionsHash);
|
|
98
101
|
if (!refCountedTexture) {
|
|
99
102
|
refCountedTexture = {
|
|
100
|
-
texture: this._createTexture(runtime, smartFilter,
|
|
103
|
+
texture: this._createTexture(runtime, smartFilter, textureOptions),
|
|
101
104
|
refCount: 0,
|
|
102
105
|
};
|
|
103
106
|
refCountedTextures.add(refCountedTexture);
|
|
@@ -105,13 +108,13 @@ export class RenderTargetGenerator {
|
|
|
105
108
|
}
|
|
106
109
|
return refCountedTexture;
|
|
107
110
|
}
|
|
108
|
-
_releaseTexture(texture,
|
|
111
|
+
_releaseTexture(texture, textureOptionsHash) {
|
|
109
112
|
if (!this._optimize) {
|
|
110
113
|
return;
|
|
111
114
|
}
|
|
112
|
-
const refCountedTextures = this._renderTargetPool.get(
|
|
115
|
+
const refCountedTextures = this._renderTargetPool.get(textureOptionsHash);
|
|
113
116
|
if (!refCountedTextures) {
|
|
114
|
-
throw new Error(`
|
|
117
|
+
throw new Error(`_releaseTexture: Trying to release a texture from a non existing pool ${textureOptionsHash}!`);
|
|
115
118
|
}
|
|
116
119
|
for (const refCountedTexture of refCountedTextures) {
|
|
117
120
|
if (refCountedTexture.texture === texture) {
|
|
@@ -119,16 +122,16 @@ export class RenderTargetGenerator {
|
|
|
119
122
|
return;
|
|
120
123
|
}
|
|
121
124
|
}
|
|
122
|
-
throw new Error(`
|
|
125
|
+
throw new Error(`_releaseTexture: Can't find the texture in the pool ${textureOptionsHash}!`);
|
|
123
126
|
}
|
|
124
127
|
/**
|
|
125
128
|
* Creates an offscreen texture to hold on the result of the block rendering.
|
|
126
129
|
* @param runtime - The current runtime we create the texture for
|
|
127
130
|
* @param smartFilter - The smart filter the texture is created for
|
|
128
|
-
* @param
|
|
131
|
+
* @param textureOptions - The options to use to create the texture
|
|
129
132
|
* @returns The render target texture
|
|
130
133
|
*/
|
|
131
|
-
_createTexture(runtime, smartFilter,
|
|
134
|
+
_createTexture(runtime, smartFilter, textureOptions) {
|
|
132
135
|
const engine = runtime.engine;
|
|
133
136
|
// We are only rendering full screen post process without depth or stencil information
|
|
134
137
|
const setup = {
|
|
@@ -136,6 +139,8 @@ export class RenderTargetGenerator {
|
|
|
136
139
|
generateStencilBuffer: false,
|
|
137
140
|
generateMipMaps: false,
|
|
138
141
|
samplingMode: 2, // Babylon Constants.TEXTURE_LINEAR_LINEAR,
|
|
142
|
+
format: textureOptions.format,
|
|
143
|
+
type: textureOptions.type,
|
|
139
144
|
};
|
|
140
145
|
// Get the smartFilter output size - either from the output block's renderTargetTexture or the engine's render size
|
|
141
146
|
let outputWidth;
|
|
@@ -149,8 +154,8 @@ export class RenderTargetGenerator {
|
|
|
149
154
|
outputHeight = engine.getRenderHeight(true);
|
|
150
155
|
}
|
|
151
156
|
const size = {
|
|
152
|
-
width: Math.floor(outputWidth * ratio),
|
|
153
|
-
height: Math.floor(outputHeight * ratio),
|
|
157
|
+
width: Math.floor(outputWidth * textureOptions.ratio),
|
|
158
|
+
height: Math.floor(outputHeight * textureOptions.ratio),
|
|
154
159
|
};
|
|
155
160
|
// Creates frame buffers for effects
|
|
156
161
|
const finalRenderTarget = new ThinRenderTargetTexture(engine, size, setup);
|
|
@@ -158,7 +163,21 @@ export class RenderTargetGenerator {
|
|
|
158
163
|
// Babylon Constants.TEXTURE_CLAMP_ADDRESSMODE; NPOT Friendly
|
|
159
164
|
finalRenderTarget.wrapU = 0;
|
|
160
165
|
finalRenderTarget.wrapV = 0;
|
|
166
|
+
finalRenderTarget.anisotropicFilteringLevel = 1;
|
|
161
167
|
return finalRenderTarget;
|
|
162
168
|
}
|
|
169
|
+
/**
|
|
170
|
+
* Gets a textureOptionsHash for a block, using a cache to avoid recomputing it.
|
|
171
|
+
* @param block - The block to get the texture options hash for
|
|
172
|
+
* @returns The texture options hash for the block
|
|
173
|
+
*/
|
|
174
|
+
_getTextureOptionsHash(block) {
|
|
175
|
+
let textureOptionsHash = this._textureOptionsHashCache.get(block);
|
|
176
|
+
if (textureOptionsHash === undefined) {
|
|
177
|
+
textureOptionsHash = JSON.stringify(block.outputTextureOptions);
|
|
178
|
+
this._textureOptionsHashCache.set(block, textureOptionsHash);
|
|
179
|
+
}
|
|
180
|
+
return textureOptionsHash;
|
|
181
|
+
}
|
|
163
182
|
}
|
|
164
183
|
//# sourceMappingURL=renderTargetGenerator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderTargetGenerator.js","sourceRoot":"","sources":["../../src/runtime/renderTargetGenerator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,+DAA+D,CAAC;
|
|
1
|
+
{"version":3,"file":"renderTargetGenerator.js","sourceRoot":"","sources":["../../src/runtime/renderTargetGenerator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@babylonjs/smart-filters",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0-alpha",
|
|
4
4
|
"description": "Babylon.js Smart Filter core",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Sebastien VANDENBERGHE"
|
|
@@ -50,6 +50,6 @@
|
|
|
50
50
|
"test": "echo \"Error: run test from the root of the monorepo\" && exit 1"
|
|
51
51
|
},
|
|
52
52
|
"peerDependencies": {
|
|
53
|
-
"@babylonjs/core": "^7.
|
|
53
|
+
"@babylonjs/core": "^7.35.2"
|
|
54
54
|
}
|
|
55
55
|
}
|
|
@@ -11,6 +11,10 @@ import { createCommand } from "../command/command.js";
|
|
|
11
11
|
import { undecorateSymbol } from "../utils/shaderCodeUtils.js";
|
|
12
12
|
import { getRenderTargetWrapper, registerFinalRenderCommand } from "../utils/renderTargetUtils.js";
|
|
13
13
|
import { BaseBlock } from "./baseBlock.js";
|
|
14
|
+
import { TextureFormat, TextureType, type OutputTextureOptions } from "./textureOptions.js";
|
|
15
|
+
import { editableInPropertyPage, PropertyTypeForEdition } from "../editorUtils/editableInPropertyPage.js";
|
|
16
|
+
|
|
17
|
+
const OutputTexturePropertiesGroupName = "OUTPUT TEXTURE PROPERTIES";
|
|
14
18
|
|
|
15
19
|
/**
|
|
16
20
|
* This is the base class for all shader blocks.
|
|
@@ -42,21 +46,38 @@ export abstract class ShaderBlock extends BaseBlock {
|
|
|
42
46
|
*/
|
|
43
47
|
public readonly output = this._registerOutput("output", ConnectionPointType.Texture);
|
|
44
48
|
|
|
45
|
-
protected _textureRatio: number = 1;
|
|
46
|
-
|
|
47
49
|
/**
|
|
48
|
-
*
|
|
50
|
+
* The options used when creating the texture this block outputs to
|
|
49
51
|
*/
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
52
|
+
@editableInPropertyPage("Ratio", PropertyTypeForEdition.Float, OutputTexturePropertiesGroupName, {
|
|
53
|
+
min: 0.1,
|
|
54
|
+
max: 10.0,
|
|
55
|
+
notifiers: { rebuild: true },
|
|
56
|
+
subPropertyName: "ratio",
|
|
57
|
+
})
|
|
58
|
+
@editableInPropertyPage("Format", PropertyTypeForEdition.List, OutputTexturePropertiesGroupName, {
|
|
59
|
+
notifiers: { rebuild: true },
|
|
60
|
+
subPropertyName: "format",
|
|
61
|
+
options: [
|
|
62
|
+
{ label: "R", value: TextureFormat.R },
|
|
63
|
+
{ label: "RG", value: TextureFormat.RG },
|
|
64
|
+
{ label: "RGBA", value: TextureFormat.RGBA },
|
|
65
|
+
],
|
|
66
|
+
})
|
|
67
|
+
@editableInPropertyPage("Type", PropertyTypeForEdition.List, OutputTexturePropertiesGroupName, {
|
|
68
|
+
notifiers: { rebuild: true },
|
|
69
|
+
subPropertyName: "type",
|
|
70
|
+
options: [
|
|
71
|
+
{ label: "UByte", value: TextureType.UNSIGNED_BYTE },
|
|
72
|
+
{ label: "Float", value: TextureType.FLOAT },
|
|
73
|
+
{ label: "Half Float", value: TextureType.HALF_FLOAT },
|
|
74
|
+
],
|
|
75
|
+
})
|
|
76
|
+
public outputTextureOptions: OutputTextureOptions = {
|
|
77
|
+
ratio: 1,
|
|
78
|
+
format: TextureFormat.RGBA,
|
|
79
|
+
type: TextureType.UNSIGNED_BYTE,
|
|
80
|
+
};
|
|
60
81
|
|
|
61
82
|
/**
|
|
62
83
|
* Disconnects the block from the graph.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The format of a texture - corresponds to the Babylon.js TextureFormat constants
|
|
3
|
+
*/
|
|
4
|
+
export enum TextureFormat {
|
|
5
|
+
/** Babylon Constants.TEXTUREFORMAT_RGBA */
|
|
6
|
+
RGBA = 5,
|
|
7
|
+
/** Babylon Constants.TEXTUREFORMAT_R */
|
|
8
|
+
R = 6,
|
|
9
|
+
/** Babylon Constants.TEXTUREFORMAT_RG */
|
|
10
|
+
RG = 7,
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* The type of a texture - corresponds to the Babylon.js TextureType constants
|
|
15
|
+
*/
|
|
16
|
+
export enum TextureType {
|
|
17
|
+
/** Babylon Constants.TEXTURETYPE_UNSIGNED_BYTE */
|
|
18
|
+
UNSIGNED_BYTE = 0,
|
|
19
|
+
/** Babylon Constants.TEXTURETYPE_FLOAT */
|
|
20
|
+
FLOAT = 1,
|
|
21
|
+
/** Babylon Constants.TEXTURETYPE_HALF_FLOAT */
|
|
22
|
+
HALF_FLOAT = 2,
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// IMPORTANT: Update textureOptionsMatch() if you add more fields to OutputTextureOptions
|
|
26
|
+
/**
|
|
27
|
+
* Describes the requirements for the output texture of a shader block.
|
|
28
|
+
*/
|
|
29
|
+
export type OutputTextureOptions = {
|
|
30
|
+
/**
|
|
31
|
+
* The texture size ratio (output size of this block / size of the Smart Filter output)
|
|
32
|
+
*/
|
|
33
|
+
ratio: number;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The format of the texture
|
|
37
|
+
*/
|
|
38
|
+
format: TextureFormat;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* The type of the texture
|
|
42
|
+
*/
|
|
43
|
+
type: TextureType;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Compares two OutputTextureOptions to see if they match.
|
|
48
|
+
* @param a - The first OutputTextureOptions
|
|
49
|
+
* @param b - The second OutputTextureOptions
|
|
50
|
+
* @returns True if the two options match, false otherwise
|
|
51
|
+
*/
|
|
52
|
+
export function textureOptionsMatch(a: OutputTextureOptions | undefined, b: OutputTextureOptions | undefined): boolean {
|
|
53
|
+
if (a === undefined || b === undefined) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
return a.ratio === b.ratio && a.format === b.format && a.type === b.type;
|
|
57
|
+
}
|
|
@@ -51,6 +51,8 @@ export interface IEditablePropertyOption {
|
|
|
51
51
|
options?: IEditablePropertyListOption[] | Observable<IEditablePropertyListOption[]>;
|
|
52
52
|
/** whether the options' values should be treated as strings */
|
|
53
53
|
valuesAreStrings?: boolean;
|
|
54
|
+
/** If supplied, the sub property to read/write */
|
|
55
|
+
subPropertyName?: string;
|
|
54
56
|
}
|
|
55
57
|
|
|
56
58
|
/**
|
|
@@ -67,6 +69,8 @@ export interface IPropertyDescriptionForEdition {
|
|
|
67
69
|
groupName: string;
|
|
68
70
|
/** options for the property */
|
|
69
71
|
options: IEditablePropertyOption;
|
|
72
|
+
/** name of the class that contains the property */
|
|
73
|
+
className: string;
|
|
70
74
|
}
|
|
71
75
|
|
|
72
76
|
/**
|
|
@@ -96,6 +100,7 @@ export function editableInPropertyPage(
|
|
|
96
100
|
type: propertyType,
|
|
97
101
|
groupName: groupName,
|
|
98
102
|
options: options ?? {},
|
|
103
|
+
className: target.constructor.name,
|
|
99
104
|
});
|
|
100
105
|
};
|
|
101
106
|
}
|
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
} from "../utils/shaderCodeUtils.js";
|
|
19
19
|
import { DependencyGraph } from "./dependencyGraph.js";
|
|
20
20
|
import { DisableableShaderBlock, BlockDisableStrategy } from "../blocks/disableableShaderBlock.js";
|
|
21
|
+
import { textureOptionsMatch, type OutputTextureOptions } from "../blocks/textureOptions.js";
|
|
21
22
|
|
|
22
23
|
const showDebugData = false;
|
|
23
24
|
|
|
@@ -104,7 +105,7 @@ export class SmartFilterOptimizer {
|
|
|
104
105
|
private _mainFunctionNameToCode: Map<string, string> = new Map();
|
|
105
106
|
private _dependencyGraph: DependencyGraph<string> = new DependencyGraph<string>();
|
|
106
107
|
private _vertexShaderCode: string | undefined;
|
|
107
|
-
private
|
|
108
|
+
private _currentOutputTextureOptions: OutputTextureOptions | undefined;
|
|
108
109
|
private _forceUnoptimized: boolean = false;
|
|
109
110
|
|
|
110
111
|
/**
|
|
@@ -224,7 +225,7 @@ export class SmartFilterOptimizer {
|
|
|
224
225
|
this._mainFunctionNameToCode = new Map();
|
|
225
226
|
this._dependencyGraph = new DependencyGraph();
|
|
226
227
|
this._vertexShaderCode = undefined;
|
|
227
|
-
this.
|
|
228
|
+
this._currentOutputTextureOptions = undefined;
|
|
228
229
|
this._forceUnoptimized = false;
|
|
229
230
|
}
|
|
230
231
|
|
|
@@ -424,7 +425,7 @@ export class SmartFilterOptimizer {
|
|
|
424
425
|
return false;
|
|
425
426
|
}
|
|
426
427
|
|
|
427
|
-
if (block.
|
|
428
|
+
if (!textureOptionsMatch(block.outputTextureOptions, this._currentOutputTextureOptions)) {
|
|
428
429
|
return false;
|
|
429
430
|
}
|
|
430
431
|
}
|
|
@@ -442,8 +443,8 @@ export class SmartFilterOptimizer {
|
|
|
442
443
|
const block = outputConnectionPoint.ownerBlock;
|
|
443
444
|
|
|
444
445
|
if (block instanceof ShaderBlock) {
|
|
445
|
-
if (this.
|
|
446
|
-
this.
|
|
446
|
+
if (this._currentOutputTextureOptions === undefined) {
|
|
447
|
+
this._currentOutputTextureOptions = block.outputTextureOptions;
|
|
447
448
|
}
|
|
448
449
|
|
|
449
450
|
const shaderProgram = block.getShaderProgram();
|
|
@@ -712,8 +713,8 @@ export class SmartFilterOptimizer {
|
|
|
712
713
|
},
|
|
713
714
|
});
|
|
714
715
|
|
|
715
|
-
if (this.
|
|
716
|
-
optimizedBlock.
|
|
716
|
+
if (this._currentOutputTextureOptions !== undefined) {
|
|
717
|
+
optimizedBlock.outputTextureOptions = this._currentOutputTextureOptions;
|
|
717
718
|
}
|
|
718
719
|
|
|
719
720
|
optimizedBlock.setShaderBindings(Array.from(blockOwnerToShaderBinding.values()));
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ThinTexture } from "@babylonjs/core/Materials/Textures/thinTexture";
|
|
2
2
|
import type { Nullable } from "@babylonjs/core/types";
|
|
3
3
|
import { ThinRenderTargetTexture } from "@babylonjs/core/Materials/Textures/thinRenderTargetTexture.js";
|
|
4
|
+
import type { RenderTargetCreationOptions } from "@babylonjs/core/Materials/Textures/textureCreationOptions";
|
|
4
5
|
|
|
5
6
|
import type { BaseBlock } from "../blocks/baseBlock";
|
|
6
7
|
import type { InitializationData, SmartFilter } from "../smartFilter";
|
|
@@ -8,6 +9,7 @@ import type { InternalSmartFilterRuntime } from "./smartFilterRuntime";
|
|
|
8
9
|
import { ShaderBlock } from "../blocks/shaderBlock.js";
|
|
9
10
|
import { createStrongRef } from "./strongRef.js";
|
|
10
11
|
import { ConnectionPointType } from "../connection/connectionPointType.js";
|
|
12
|
+
import type { OutputTextureOptions } from "../blocks/textureOptions";
|
|
11
13
|
|
|
12
14
|
/**
|
|
13
15
|
* @internal
|
|
@@ -29,7 +31,9 @@ interface RefCountedTexture {
|
|
|
29
31
|
*/
|
|
30
32
|
export class RenderTargetGenerator {
|
|
31
33
|
private _optimize: boolean;
|
|
32
|
-
private _renderTargetPool: Map<
|
|
34
|
+
private _renderTargetPool: Map<string, Set<RefCountedTexture>>;
|
|
35
|
+
private _textureOptionsHashCache = new Map<ShaderBlock, string>();
|
|
36
|
+
|
|
33
37
|
private _numTargetsCreated;
|
|
34
38
|
|
|
35
39
|
/**
|
|
@@ -63,11 +67,17 @@ export class RenderTargetGenerator {
|
|
|
63
67
|
}
|
|
64
68
|
|
|
65
69
|
let refCountedTexture: Nullable<RefCountedTexture> = null;
|
|
70
|
+
const textureOptionsHash = this._getTextureOptionsHash(block);
|
|
66
71
|
|
|
67
72
|
// We assign a texture to the output of the block only if this is not the last block in the chain,
|
|
68
73
|
// i.e. not the block connected to the smart output block (in which case the output of the block is to the canvas and not a texture).
|
|
69
74
|
if (!block.output.endpoints.some((cp) => cp.ownerBlock === smartFilter.output.ownerBlock)) {
|
|
70
|
-
refCountedTexture = this._getTexture(
|
|
75
|
+
refCountedTexture = this._getTexture(
|
|
76
|
+
initializationData.runtime,
|
|
77
|
+
block.outputTextureOptions,
|
|
78
|
+
textureOptionsHash,
|
|
79
|
+
smartFilter
|
|
80
|
+
);
|
|
71
81
|
|
|
72
82
|
if (!block.output.runtimeData) {
|
|
73
83
|
const runtimeOutput = createStrongRef(refCountedTexture.texture);
|
|
@@ -98,17 +108,21 @@ export class RenderTargetGenerator {
|
|
|
98
108
|
connectedBlock.output.runtimeData &&
|
|
99
109
|
connectedBlock.output.runtimeData.value
|
|
100
110
|
) {
|
|
101
|
-
this._releaseTexture(
|
|
111
|
+
this._releaseTexture(
|
|
112
|
+
connectedBlock.output.runtimeData.value,
|
|
113
|
+
this._getTextureOptionsHash(connectedBlock)
|
|
114
|
+
);
|
|
102
115
|
}
|
|
103
116
|
}
|
|
104
117
|
}
|
|
105
118
|
}
|
|
106
119
|
);
|
|
107
120
|
this._renderTargetPool.clear();
|
|
121
|
+
this._textureOptionsHashCache.clear();
|
|
108
122
|
}
|
|
109
123
|
|
|
110
|
-
private _findAvailableTexture(
|
|
111
|
-
const refCountedTextures = this._renderTargetPool.get(
|
|
124
|
+
private _findAvailableTexture(textureOptionsHash: string): Nullable<RefCountedTexture> {
|
|
125
|
+
const refCountedTextures = this._renderTargetPool.get(textureOptionsHash);
|
|
112
126
|
if (!refCountedTextures) {
|
|
113
127
|
return null;
|
|
114
128
|
}
|
|
@@ -124,27 +138,28 @@ export class RenderTargetGenerator {
|
|
|
124
138
|
|
|
125
139
|
private _getTexture(
|
|
126
140
|
runtime: InternalSmartFilterRuntime,
|
|
127
|
-
|
|
141
|
+
textureOptions: OutputTextureOptions,
|
|
142
|
+
textureOptionsHash: string,
|
|
128
143
|
smartFilter: SmartFilter
|
|
129
144
|
): RefCountedTexture {
|
|
130
145
|
if (!this._optimize) {
|
|
131
146
|
this._numTargetsCreated++;
|
|
132
147
|
return {
|
|
133
|
-
texture: this._createTexture(runtime, smartFilter,
|
|
148
|
+
texture: this._createTexture(runtime, smartFilter, textureOptions),
|
|
134
149
|
refCount: 0,
|
|
135
150
|
};
|
|
136
151
|
}
|
|
137
152
|
|
|
138
|
-
let refCountedTextures = this._renderTargetPool.get(
|
|
153
|
+
let refCountedTextures = this._renderTargetPool.get(textureOptionsHash);
|
|
139
154
|
if (!refCountedTextures) {
|
|
140
155
|
refCountedTextures = new Set();
|
|
141
|
-
this._renderTargetPool.set(
|
|
156
|
+
this._renderTargetPool.set(textureOptionsHash, refCountedTextures);
|
|
142
157
|
}
|
|
143
158
|
|
|
144
|
-
let refCountedTexture = this._findAvailableTexture(
|
|
159
|
+
let refCountedTexture = this._findAvailableTexture(textureOptionsHash);
|
|
145
160
|
if (!refCountedTexture) {
|
|
146
161
|
refCountedTexture = {
|
|
147
|
-
texture: this._createTexture(runtime, smartFilter,
|
|
162
|
+
texture: this._createTexture(runtime, smartFilter, textureOptions),
|
|
148
163
|
refCount: 0,
|
|
149
164
|
};
|
|
150
165
|
refCountedTextures.add(refCountedTexture);
|
|
@@ -154,14 +169,16 @@ export class RenderTargetGenerator {
|
|
|
154
169
|
return refCountedTexture;
|
|
155
170
|
}
|
|
156
171
|
|
|
157
|
-
private _releaseTexture(texture: ThinTexture,
|
|
172
|
+
private _releaseTexture(texture: ThinTexture, textureOptionsHash: string) {
|
|
158
173
|
if (!this._optimize) {
|
|
159
174
|
return;
|
|
160
175
|
}
|
|
161
176
|
|
|
162
|
-
const refCountedTextures = this._renderTargetPool.get(
|
|
177
|
+
const refCountedTextures = this._renderTargetPool.get(textureOptionsHash);
|
|
163
178
|
if (!refCountedTextures) {
|
|
164
|
-
throw new Error(
|
|
179
|
+
throw new Error(
|
|
180
|
+
`_releaseTexture: Trying to release a texture from a non existing pool ${textureOptionsHash}!`
|
|
181
|
+
);
|
|
165
182
|
}
|
|
166
183
|
|
|
167
184
|
for (const refCountedTexture of refCountedTextures) {
|
|
@@ -171,29 +188,31 @@ export class RenderTargetGenerator {
|
|
|
171
188
|
}
|
|
172
189
|
}
|
|
173
190
|
|
|
174
|
-
throw new Error(`
|
|
191
|
+
throw new Error(`_releaseTexture: Can't find the texture in the pool ${textureOptionsHash}!`);
|
|
175
192
|
}
|
|
176
193
|
|
|
177
194
|
/**
|
|
178
195
|
* Creates an offscreen texture to hold on the result of the block rendering.
|
|
179
196
|
* @param runtime - The current runtime we create the texture for
|
|
180
197
|
* @param smartFilter - The smart filter the texture is created for
|
|
181
|
-
* @param
|
|
198
|
+
* @param textureOptions - The options to use to create the texture
|
|
182
199
|
* @returns The render target texture
|
|
183
200
|
*/
|
|
184
201
|
private _createTexture(
|
|
185
202
|
runtime: InternalSmartFilterRuntime,
|
|
186
203
|
smartFilter: SmartFilter,
|
|
187
|
-
|
|
204
|
+
textureOptions: OutputTextureOptions
|
|
188
205
|
): ThinRenderTargetTexture {
|
|
189
206
|
const engine = runtime.engine;
|
|
190
207
|
|
|
191
208
|
// We are only rendering full screen post process without depth or stencil information
|
|
192
|
-
const setup = {
|
|
209
|
+
const setup: RenderTargetCreationOptions = {
|
|
193
210
|
generateDepthBuffer: false,
|
|
194
211
|
generateStencilBuffer: false,
|
|
195
212
|
generateMipMaps: false,
|
|
196
213
|
samplingMode: 2, // Babylon Constants.TEXTURE_LINEAR_LINEAR,
|
|
214
|
+
format: textureOptions.format,
|
|
215
|
+
type: textureOptions.type,
|
|
197
216
|
};
|
|
198
217
|
|
|
199
218
|
// Get the smartFilter output size - either from the output block's renderTargetTexture or the engine's render size
|
|
@@ -207,8 +226,8 @@ export class RenderTargetGenerator {
|
|
|
207
226
|
outputHeight = engine.getRenderHeight(true);
|
|
208
227
|
}
|
|
209
228
|
const size = {
|
|
210
|
-
width: Math.floor(outputWidth * ratio),
|
|
211
|
-
height: Math.floor(outputHeight * ratio),
|
|
229
|
+
width: Math.floor(outputWidth * textureOptions.ratio),
|
|
230
|
+
height: Math.floor(outputHeight * textureOptions.ratio),
|
|
212
231
|
};
|
|
213
232
|
|
|
214
233
|
// Creates frame buffers for effects
|
|
@@ -219,6 +238,22 @@ export class RenderTargetGenerator {
|
|
|
219
238
|
finalRenderTarget.wrapU = 0;
|
|
220
239
|
finalRenderTarget.wrapV = 0;
|
|
221
240
|
|
|
241
|
+
finalRenderTarget.anisotropicFilteringLevel = 1;
|
|
242
|
+
|
|
222
243
|
return finalRenderTarget;
|
|
223
244
|
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Gets a textureOptionsHash for a block, using a cache to avoid recomputing it.
|
|
248
|
+
* @param block - The block to get the texture options hash for
|
|
249
|
+
* @returns The texture options hash for the block
|
|
250
|
+
*/
|
|
251
|
+
private _getTextureOptionsHash(block: ShaderBlock): string {
|
|
252
|
+
let textureOptionsHash = this._textureOptionsHashCache.get(block);
|
|
253
|
+
if (textureOptionsHash === undefined) {
|
|
254
|
+
textureOptionsHash = JSON.stringify(block.outputTextureOptions);
|
|
255
|
+
this._textureOptionsHashCache.set(block, textureOptionsHash);
|
|
256
|
+
}
|
|
257
|
+
return textureOptionsHash;
|
|
258
|
+
}
|
|
224
259
|
}
|