@babylonjs/smart-filters 0.7.14-alpha → 0.8.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/blockFoundation/index.d.ts +1 -1
- package/dist/blockFoundation/index.d.ts.map +1 -1
- package/dist/blockFoundation/index.js +1 -1
- package/dist/blockFoundation/index.js.map +1 -1
- package/dist/serialization/importCustomBlockDefinition.d.ts +1 -1
- package/dist/serialization/importCustomBlockDefinition.d.ts.map +1 -1
- package/dist/serialization/importCustomBlockDefinition.js +5 -1
- package/dist/serialization/importCustomBlockDefinition.js.map +1 -1
- package/dist/utils/buildTools/convertGlslIntoBlock.d.ts.map +1 -1
- package/dist/utils/buildTools/convertGlslIntoBlock.js +72 -10
- package/dist/utils/buildTools/convertGlslIntoBlock.js.map +1 -1
- package/dist/utils/buildTools/shaderConverter.d.ts +5 -0
- package/dist/utils/buildTools/shaderConverter.d.ts.map +1 -1
- package/dist/utils/buildTools/shaderConverter.js +38 -5
- package/dist/utils/buildTools/shaderConverter.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
- package/src/blockFoundation/index.ts +1 -1
- package/src/serialization/importCustomBlockDefinition.ts +7 -1
- package/src/utils/buildTools/convertGlslIntoBlock.ts +84 -13
- package/src/utils/buildTools/shaderConverter.ts +56 -6
- package/src/version.ts +1 -1
|
@@ -4,7 +4,7 @@ export { type AnyInputBlock } from "./inputBlock.js";
|
|
|
4
4
|
export { ShaderBlock } from "./shaderBlock.js";
|
|
5
5
|
export { CustomShaderBlock } from "./customShaderBlock.js";
|
|
6
6
|
export { CustomAggregateBlock } from "./customAggregateBlock.js";
|
|
7
|
-
export { DisableableShaderBlock, BlockDisableStrategy
|
|
7
|
+
export { DisableableShaderBlock, BlockDisableStrategy } from "./disableableShaderBlock.js";
|
|
8
8
|
export { AggregateBlock } from "./aggregateBlock.js";
|
|
9
9
|
export { type IDisableableBlock } from "./disableableShaderBlock.js";
|
|
10
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/blockFoundation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/blockFoundation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC"}
|
|
@@ -4,7 +4,7 @@ export {} from "./inputBlock.js";
|
|
|
4
4
|
export { ShaderBlock } from "./shaderBlock.js";
|
|
5
5
|
export { CustomShaderBlock } from "./customShaderBlock.js";
|
|
6
6
|
export { CustomAggregateBlock } from "./customAggregateBlock.js";
|
|
7
|
-
export { DisableableShaderBlock, BlockDisableStrategy
|
|
7
|
+
export { DisableableShaderBlock, BlockDisableStrategy } from "./disableableShaderBlock.js";
|
|
8
8
|
export { AggregateBlock } from "./aggregateBlock.js";
|
|
9
9
|
export {} from "./disableableShaderBlock.js";
|
|
10
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/blockFoundation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAA6B,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAsB,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/blockFoundation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAA6B,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAsB,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAA0B,MAAM,6BAA6B,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { SerializedBlockDefinition } from "./serializedBlockDefinition.js";
|
|
2
2
|
/**
|
|
3
3
|
* Imports a serialized custom block definition. Supports either serialized CustomShaderBlock definitions or
|
|
4
|
-
* CustomAggregateBlock definitions.
|
|
4
|
+
* CustomAggregateBlock definitions. Can throw an exception if the serialized data is invalid.
|
|
5
5
|
*
|
|
6
6
|
* CustomShaderBlock definitions can be supplied either as serialized SerializedBlockDefinition object
|
|
7
7
|
* or a glsl shader with the required annotations (see readme.md for details).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"importCustomBlockDefinition.d.ts","sourceRoot":"","sources":["../../src/serialization/importCustomBlockDefinition.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAIhF;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,cAAc,EAAE,MAAM,GAAG,yBAAyB,
|
|
1
|
+
{"version":3,"file":"importCustomBlockDefinition.d.ts","sourceRoot":"","sources":["../../src/serialization/importCustomBlockDefinition.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAIhF;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,cAAc,EAAE,MAAM,GAAG,yBAAyB,CAyB7F"}
|
|
@@ -2,7 +2,7 @@ import { ConnectionPointType } from "../connection/connectionPointType.js";
|
|
|
2
2
|
import { hasGlslHeader, parseFragmentShader } from "../utils/buildTools/shaderConverter.js";
|
|
3
3
|
/**
|
|
4
4
|
* Imports a serialized custom block definition. Supports either serialized CustomShaderBlock definitions or
|
|
5
|
-
* CustomAggregateBlock definitions.
|
|
5
|
+
* CustomAggregateBlock definitions. Can throw an exception if the serialized data is invalid.
|
|
6
6
|
*
|
|
7
7
|
* CustomShaderBlock definitions can be supplied either as serialized SerializedBlockDefinition object
|
|
8
8
|
* or a glsl shader with the required annotations (see readme.md for details).
|
|
@@ -28,6 +28,10 @@ export function importCustomBlockDefinition(serializedData) {
|
|
|
28
28
|
if (blockDefinition.format === "smartFilter" && blockDefinition.name && !blockDefinition.blockType) {
|
|
29
29
|
blockDefinition.blockType = blockDefinition.name;
|
|
30
30
|
}
|
|
31
|
+
// Validation
|
|
32
|
+
if (!blockDefinition.blockType) {
|
|
33
|
+
throw new Error("Could not find a blockType");
|
|
34
|
+
}
|
|
31
35
|
return blockDefinition;
|
|
32
36
|
}
|
|
33
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"importCustomBlockDefinition.js","sourceRoot":"","sources":["../../src/serialization/importCustomBlockDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAK5F;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,2BAA2B,CAAC,cAAsB;IAC9D,IAAI,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC;QAChC,OAAO,mBAAmB,CAAC,cAAc,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACJ,0CAA0C;QAC1C,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAEnD,0FAA0F;QAC1F,IAAI,eAAe,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACvC,eAAe,CAAC,MAAM,GAAG,aAAa,CAAC;QAC3C,CAAC;QAED,qDAAqD;QACrD,gHAAgH;QAChH,IAAI,eAAe,CAAC,MAAM,KAAK,aAAa,IAAI,eAAe,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;YACjG,eAAe,CAAC,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC;QACrD,CAAC;
|
|
1
|
+
{"version":3,"file":"importCustomBlockDefinition.js","sourceRoot":"","sources":["../../src/serialization/importCustomBlockDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAK5F;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,2BAA2B,CAAC,cAAsB;IAC9D,IAAI,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC;QAChC,OAAO,mBAAmB,CAAC,cAAc,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACJ,0CAA0C;QAC1C,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAEnD,0FAA0F;QAC1F,IAAI,eAAe,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACvC,eAAe,CAAC,MAAM,GAAG,aAAa,CAAC;QAC3C,CAAC;QAED,qDAAqD;QACrD,gHAAgH;QAChH,IAAI,eAAe,CAAC,MAAM,KAAK,aAAa,IAAI,eAAe,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;YACjG,eAAe,CAAC,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC;QACrD,CAAC;QAED,aAAa;QACb,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,eAAe,CAAC;IAC3B,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,SAAS,mBAAmB,CAAC,cAAsB;;IAC/C,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;IAE/D,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACjD,CAAC;IAED,wCAAwC;IACxC,MAAM,qBAAqB,GAAuC,EAAE,CAAC;IACrE,KAAK,MAAM,OAAO,IAAI,kBAAkB,CAAC,QAAQ,EAAE,CAAC;QAChD,qCAAqC;QACrC,MAAM,oBAAoB,GAAqC;YAC3D,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,MAAA,OAAO,CAAC,UAAU,0CAAE,QAA2B;SAC5D,CAAC;QACF,IAAI,oBAAoB,CAAC,IAAI,KAAK,mBAAmB,CAAC,OAAO,IAAI,CAAA,MAAA,OAAO,CAAC,UAAU,0CAAE,OAAO,MAAK,SAAS,EAAE,CAAC;YACzG,oBAAoB,CAAC,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;QACnE,CAAC;QACD,qBAAqB,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACrD,CAAC;IAED,OAAO;QACH,MAAM,EAAE,uBAAuB;QAC/B,aAAa,EAAE,CAAC;QAChB,SAAS,EAAE,kBAAkB,CAAC,SAAS;QACvC,SAAS,EAAE,kBAAkB,CAAC,SAAS;QACvC,aAAa,EAAE;YACX,QAAQ,EAAE,kBAAkB,CAAC,UAAU;SAC1C;QACD,qBAAqB;QACrB,mBAAmB,EAAE,CAAC,CAAC,kBAAkB,CAAC,mBAAmB;KAChE,CAAC;AACN,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertGlslIntoBlock.d.ts","sourceRoot":"","sources":["../../../src/utils/buildTools/convertGlslIntoBlock.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"convertGlslIntoBlock.d.ts","sourceRoot":"","sources":["../../../src/utils/buildTools/convertGlslIntoBlock.ts"],"names":[],"mappings":"AA0IA;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,kBAAkB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAsIzF"}
|
|
@@ -1,17 +1,25 @@
|
|
|
1
1
|
import * as fs from "fs";
|
|
2
2
|
import { extractShaderProgramFromGlsl } from "./convertGlslIntoShaderProgram.js";
|
|
3
3
|
import { ConnectionPointType } from "../../connection/connectionPointType.js";
|
|
4
|
+
import { BlockDisableStrategy } from "../../blockFoundation/disableableShaderBlock.js";
|
|
5
|
+
const EXTRA_IMPORTS = "@EXTRA_IMPORTS@";
|
|
4
6
|
const SHADER_PROGRAM = "@SHADER_PROGRAM@";
|
|
5
7
|
const BLOCK_NAME = "@BLOCK_NAME@";
|
|
6
8
|
const NAMESPACE = "@NAMESPACE@";
|
|
7
9
|
const SHADER_BINDING_PRIVATE_VARIABLES = "@SHADER_BINDING_PRIVATE_VARIABLES@";
|
|
8
10
|
const CAMEL_CASE_UNIFORM = "@CAMEL_CASE_UNIFORM@";
|
|
9
11
|
const CONNECTION_POINT_TYPE = "@CONNECTION_POINT_TYPE@";
|
|
12
|
+
const CONNECTION_POINT_DEFAULT_VALUE = "@CONNECTION_POINT_DEFAULT_VALUE@";
|
|
13
|
+
const SHADER_BINDING_EXTENDS = "@SHADER_BINDING_EXTENDS@";
|
|
10
14
|
const SHADER_BINDING_CTOR_DOCSTRING_PARAMS = "@SHADER_BINDING_CTOR_DOCSTRING_PARAMS@";
|
|
11
15
|
const SHADER_BINDING_CTOR_PARAMS = "@SHADER_CTOR_PARAMS@";
|
|
16
|
+
const SHADER_BINDING_SUPER_PARAMS = "@SHADER_BINDING_SUPER_PARAMS@";
|
|
12
17
|
const SHADER_BINDING_CTOR = "@SHADER_BINDING_CTOR@";
|
|
13
18
|
const SHADER_BINDING_BIND = "@SHADER_BINDING_BIND@";
|
|
19
|
+
const SHADER_BLOCK_EXTENDS = "@SHADER_BLOCK_EXTENDS@";
|
|
14
20
|
const BLOCK_INPUT_PROPERTIES = "@BLOCK_INPUT_PROPERTIES@";
|
|
21
|
+
const BLOCK_DISABLE_OPTIMIZATION = "@BLOCK_DISABLE_OPTIMIZATION@";
|
|
22
|
+
const BLOCK_DISABLE_STRATEGY = "@BLOCK_DISABLE_STRATEGY@";
|
|
15
23
|
const BLOCK_GET_SHADER_BINDING_VARS = "@BLOCK_SHADER_BINDING_BIND_VARS@";
|
|
16
24
|
const BLOCK_GET_SHADER_PARAM_LIST = "@BLOCK_GET_SHADER_PARAM_LIST@";
|
|
17
25
|
const EFFECT_SETTER = "@EFFECT_SETTER@";
|
|
@@ -20,11 +28,21 @@ const ShaderBindingCtorDocstringParams = ` * @param ${CAMEL_CASE_UNIFORM} -
|
|
|
20
28
|
const ShaderBindingCtorParams = ` ${CAMEL_CASE_UNIFORM}: RuntimeData<ConnectionPointType.${CONNECTION_POINT_TYPE}>`;
|
|
21
29
|
const ShaderBindingCtor = ` this._${CAMEL_CASE_UNIFORM} = ${CAMEL_CASE_UNIFORM};`;
|
|
22
30
|
const ShaderBindingBind = ` effect.${EFFECT_SETTER}(this.getRemappedName(uniforms.${CAMEL_CASE_UNIFORM}), this._${CAMEL_CASE_UNIFORM}.value);`;
|
|
23
|
-
const
|
|
31
|
+
const BlockInputProperty = ` /**
|
|
24
32
|
* The ${CAMEL_CASE_UNIFORM} connection point.
|
|
25
33
|
*/
|
|
26
34
|
public readonly ${CAMEL_CASE_UNIFORM} = this._registerInput(uniforms.${CAMEL_CASE_UNIFORM}, ConnectionPointType.${CONNECTION_POINT_TYPE});
|
|
27
35
|
`;
|
|
36
|
+
const BlockInputOptionalProperty = ` /**
|
|
37
|
+
/**
|
|
38
|
+
* The ${CAMEL_CASE_UNIFORM} connection point.
|
|
39
|
+
*/
|
|
40
|
+
public readonly ${CAMEL_CASE_UNIFORM} = this._registerOptionalInput(
|
|
41
|
+
"${CAMEL_CASE_UNIFORM}",
|
|
42
|
+
ConnectionPointType.${CONNECTION_POINT_TYPE},
|
|
43
|
+
createStrongRef(${CONNECTION_POINT_DEFAULT_VALUE})
|
|
44
|
+
);
|
|
45
|
+
`;
|
|
28
46
|
const BlockGetShaderBindingVars = ` const ${CAMEL_CASE_UNIFORM} = this._confirmRuntimeDataSupplied(this.${CAMEL_CASE_UNIFORM});`;
|
|
29
47
|
const FileTemplate = `/* eslint-disable prettier/prettier */
|
|
30
48
|
// ************************************************************
|
|
@@ -39,17 +57,17 @@ const FileTemplate = `/* eslint-disable prettier/prettier */
|
|
|
39
57
|
import type { Effect } from "@babylonjs/core/Materials/effect";
|
|
40
58
|
|
|
41
59
|
import {
|
|
42
|
-
|
|
60
|
+
${SHADER_BINDING_EXTENDS},
|
|
43
61
|
type RuntimeData,
|
|
44
62
|
ConnectionPointType,
|
|
45
63
|
type SmartFilter,
|
|
46
|
-
|
|
64
|
+
${SHADER_BLOCK_EXTENDS},
|
|
47
65
|
type ShaderProgram,
|
|
48
|
-
} from "@babylonjs/smart-filters";${SHADER_PROGRAM}
|
|
66
|
+
${EXTRA_IMPORTS}} from "@babylonjs/smart-filters";${SHADER_PROGRAM}
|
|
49
67
|
/**
|
|
50
68
|
* The shader binding for the ${BLOCK_NAME}, used by the runtime
|
|
51
69
|
*/
|
|
52
|
-
class ${BLOCK_NAME}ShaderBinding extends
|
|
70
|
+
class ${BLOCK_NAME}ShaderBinding extends ${SHADER_BINDING_EXTENDS} {
|
|
53
71
|
${SHADER_BINDING_PRIVATE_VARIABLES}
|
|
54
72
|
|
|
55
73
|
/**
|
|
@@ -59,7 +77,7 @@ ${SHADER_BINDING_CTOR_DOCSTRING_PARAMS}
|
|
|
59
77
|
constructor(
|
|
60
78
|
${SHADER_BINDING_CTOR_PARAMS}
|
|
61
79
|
) {
|
|
62
|
-
super();
|
|
80
|
+
super(${SHADER_BINDING_SUPER_PARAMS});
|
|
63
81
|
${SHADER_BINDING_CTOR}
|
|
64
82
|
}
|
|
65
83
|
|
|
@@ -75,7 +93,7 @@ ${SHADER_BINDING_BIND}
|
|
|
75
93
|
/**
|
|
76
94
|
* The implementation of the ${BLOCK_NAME}
|
|
77
95
|
*/
|
|
78
|
-
export class ${BLOCK_NAME} extends
|
|
96
|
+
export class ${BLOCK_NAME} extends ${SHADER_BLOCK_EXTENDS} {
|
|
79
97
|
/**
|
|
80
98
|
* The class name of the block.
|
|
81
99
|
*/
|
|
@@ -98,14 +116,14 @@ ${BLOCK_INPUT_PROPERTIES}
|
|
|
98
116
|
* @param name - The friendly name of the block
|
|
99
117
|
*/
|
|
100
118
|
constructor(smartFilter: SmartFilter, name: string) {
|
|
101
|
-
super(smartFilter, name);
|
|
119
|
+
super(smartFilter, name, ${BLOCK_DISABLE_OPTIMIZATION}${BLOCK_DISABLE_STRATEGY});
|
|
102
120
|
}
|
|
103
121
|
|
|
104
122
|
/**
|
|
105
123
|
* Get the class instance that binds all the required data to the shader (effect) when rendering.
|
|
106
124
|
* @returns The class instance that binds the data to the effect
|
|
107
125
|
*/
|
|
108
|
-
public getShaderBinding():
|
|
126
|
+
public getShaderBinding(): ${SHADER_BINDING_EXTENDS} {
|
|
109
127
|
${BLOCK_GET_SHADER_BINDING_VARS}
|
|
110
128
|
|
|
111
129
|
return new ${BLOCK_NAME}ShaderBinding(${BLOCK_GET_SHADER_PARAM_LIST});
|
|
@@ -119,6 +137,7 @@ ${BLOCK_GET_SHADER_BINDING_VARS}
|
|
|
119
137
|
* @param importPath - The path to import the ShaderProgram type from
|
|
120
138
|
*/
|
|
121
139
|
export function convertGlslIntoBlock(fragmentShaderPath, importPath) {
|
|
140
|
+
const extraImports = [];
|
|
122
141
|
const { shaderProgramCode, fragmentShaderInfo } = extractShaderProgramFromGlsl(fragmentShaderPath, importPath, false, false);
|
|
123
142
|
// Validation
|
|
124
143
|
if (!fragmentShaderInfo.blockType) {
|
|
@@ -146,26 +165,69 @@ export function convertGlslIntoBlock(fragmentShaderPath, importPath) {
|
|
|
146
165
|
});
|
|
147
166
|
// Generate the block input properties
|
|
148
167
|
const blockInputProperties = fragmentShaderInfo.uniforms.map((uniform) => {
|
|
149
|
-
|
|
168
|
+
var _a;
|
|
169
|
+
if (((_a = uniform.properties) === null || _a === void 0 ? void 0 : _a.default) !== undefined) {
|
|
170
|
+
if (extraImports.indexOf(" createStrongRef") === -1) {
|
|
171
|
+
extraImports.push(" createStrongRef");
|
|
172
|
+
}
|
|
173
|
+
return BlockInputOptionalProperty.replace(new RegExp(CAMEL_CASE_UNIFORM, "g"), uniform.name)
|
|
174
|
+
.replace(CONNECTION_POINT_TYPE, getConnectionPointTypeString(uniform.type))
|
|
175
|
+
.replace(CONNECTION_POINT_DEFAULT_VALUE, uniform.properties.default);
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
return BlockInputProperty.replace(new RegExp(CAMEL_CASE_UNIFORM, "g"), uniform.name).replace(CONNECTION_POINT_TYPE, getConnectionPointTypeString(uniform.type));
|
|
179
|
+
}
|
|
150
180
|
});
|
|
151
181
|
// Generate the block get shader binding vars
|
|
152
182
|
const blockGetShaderBindingVars = fragmentShaderInfo.uniforms.map((uniform) => {
|
|
153
183
|
return BlockGetShaderBindingVars.replace(new RegExp(CAMEL_CASE_UNIFORM, "g"), uniform.name);
|
|
154
184
|
});
|
|
185
|
+
// Handle the disable optimization flag
|
|
186
|
+
const disableOptimization = fragmentShaderInfo.disableOptimization === true ? "true" : "false";
|
|
155
187
|
// Generate the block get shader param list
|
|
156
188
|
const blockGetShaderParamList = fragmentShaderInfo.uniforms.map((uniform) => {
|
|
157
189
|
return uniform.name;
|
|
158
190
|
});
|
|
191
|
+
// Decide if this is a disableable block or not
|
|
192
|
+
let shaderBlockExtends = "ShaderBlock";
|
|
193
|
+
let shaderBindingExtends = "ShaderBinding";
|
|
194
|
+
let blockDisableStrategy = "";
|
|
195
|
+
let shaderBindingSuperParams = "";
|
|
196
|
+
if (fragmentShaderInfo.blockDisableStrategy) {
|
|
197
|
+
shaderBlockExtends = "DisableableShaderBlock";
|
|
198
|
+
shaderBindingExtends = "DisableableShaderBinding";
|
|
199
|
+
blockDisableStrategy = `, BlockDisableStrategy.${BlockDisableStrategy[fragmentShaderInfo.blockDisableStrategy]}`;
|
|
200
|
+
shaderBindingSuperParams = "parentBlock";
|
|
201
|
+
shaderBindingCtorDocstringParams.unshift(" * @param parentBlock - IDisableableBlock");
|
|
202
|
+
shaderBindingCtorParams.unshift(" parentBlock: IDisableableBlock");
|
|
203
|
+
blockGetShaderParamList.unshift("this");
|
|
204
|
+
extraImports.push(" type IDisableableBlock");
|
|
205
|
+
extraImports.push(" BlockDisableStrategy");
|
|
206
|
+
shaderBindingBind.unshift(" super.bind(effect);");
|
|
207
|
+
}
|
|
208
|
+
// Additional validation
|
|
209
|
+
if (fragmentShaderInfo.blockDisableStrategy !== undefined &&
|
|
210
|
+
fragmentShaderInfo.blockDisableStrategy !== BlockDisableStrategy.Manual) {
|
|
211
|
+
if (fragmentShaderInfo.uniforms.findIndex((uniform) => uniform.name === "disabled") !== -1) {
|
|
212
|
+
throw new Error("A block that uses a BlockDisableStrategy other than Manual should not declare its own 'disabled' uniform");
|
|
213
|
+
}
|
|
214
|
+
}
|
|
159
215
|
// Generate final contents
|
|
160
216
|
const finalContents = FileTemplate.replace(SHADER_PROGRAM, shaderProgramCode)
|
|
217
|
+
.replace(EXTRA_IMPORTS, extraImports.join(",\n"))
|
|
161
218
|
.replace(new RegExp(BLOCK_NAME, "g"), fragmentShaderInfo.blockType)
|
|
162
219
|
.replace(NAMESPACE, fragmentShaderInfo.namespace || "Other")
|
|
220
|
+
.replace(new RegExp(SHADER_BINDING_EXTENDS, "g"), shaderBindingExtends)
|
|
163
221
|
.replace(SHADER_BINDING_PRIVATE_VARIABLES, shaderBindingPrivateVariables.join("\n"))
|
|
164
222
|
.replace(SHADER_BINDING_CTOR_DOCSTRING_PARAMS, shaderBindingCtorDocstringParams.join("\n"))
|
|
165
223
|
.replace(SHADER_BINDING_CTOR_PARAMS, shaderBindingCtorParams.join(",\n"))
|
|
166
224
|
.replace(SHADER_BINDING_CTOR, shaderBindingCtor.join("\n"))
|
|
225
|
+
.replace(SHADER_BINDING_SUPER_PARAMS, shaderBindingSuperParams)
|
|
167
226
|
.replace(SHADER_BINDING_BIND, shaderBindingBind.join("\n"))
|
|
227
|
+
.replace(new RegExp(SHADER_BLOCK_EXTENDS, "g"), shaderBlockExtends)
|
|
168
228
|
.replace(BLOCK_INPUT_PROPERTIES, blockInputProperties.join("\n"))
|
|
229
|
+
.replace(BLOCK_DISABLE_OPTIMIZATION, disableOptimization)
|
|
230
|
+
.replace(BLOCK_DISABLE_STRATEGY, blockDisableStrategy)
|
|
169
231
|
.replace(BLOCK_GET_SHADER_BINDING_VARS, blockGetShaderBindingVars.join("\n"))
|
|
170
232
|
.replace(BLOCK_GET_SHADER_PARAM_LIST, blockGetShaderParamList.join(","));
|
|
171
233
|
// Write the block class TS file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertGlslIntoBlock.js","sourceRoot":"","sources":["../../../src/utils/buildTools/convertGlslIntoBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"convertGlslIntoBlock.js","sourceRoot":"","sources":["../../../src/utils/buildTools/convertGlslIntoBlock.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Nullable } from "@babylonjs/core/types";
|
|
2
2
|
import type { ShaderCode } from "./shaderCode.types";
|
|
3
3
|
import { ConnectionPointType } from "../../connection/connectionPointType.js";
|
|
4
|
+
import { BlockDisableStrategy } from "../../blockFoundation/disableableShaderBlock.js";
|
|
4
5
|
/**
|
|
5
6
|
* Describes the supported metadata properties for a uniform
|
|
6
7
|
*/
|
|
@@ -48,6 +49,10 @@ export type FragmentShaderInfo = {
|
|
|
48
49
|
* If true, optimization should be disabled for this shader
|
|
49
50
|
*/
|
|
50
51
|
disableOptimization?: boolean;
|
|
52
|
+
/**
|
|
53
|
+
* If supplied, the strategy to use for making this block disableable
|
|
54
|
+
*/
|
|
55
|
+
blockDisableStrategy?: BlockDisableStrategy;
|
|
51
56
|
/**
|
|
52
57
|
* The shader code
|
|
53
58
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shaderConverter.d.ts","sourceRoot":"","sources":["../../../src/utils/buildTools/shaderConverter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAkB,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"shaderConverter.d.ts","sourceRoot":"","sources":["../../../src/utils/buildTools/shaderConverter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAkB,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AAIvF;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACpC;;OAEG;IACH,OAAO,CAAC,EAAE,GAAG,CAAC;IAEd;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC1B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,IAAI,EAAE,mBAAmB,CAAC;IAE1B;;OAEG;IACH,UAAU,CAAC,EAAE,yBAAyB,CAAC;CAC1C,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC7B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE5B;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;OAEG;IACH,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAE5C;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC;IAEvB;;OAEG;IACH,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC/B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,kBAAkB,CAkI9E;AAiPD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAE7D"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Logger } from "@babylonjs/core/Misc/logger.js";
|
|
2
2
|
import { ConnectionPointType } from "../../connection/connectionPointType.js";
|
|
3
|
+
import { BlockDisableStrategy } from "../../blockFoundation/disableableShaderBlock.js";
|
|
3
4
|
const GetFunctionNamesRegEx = /\S*\w+\s+(\w+)\s*\(/g;
|
|
4
5
|
/**
|
|
5
6
|
* Parses a fragment shader
|
|
@@ -110,7 +111,8 @@ export function parseFragmentShader(fragmentShader) {
|
|
|
110
111
|
namespace,
|
|
111
112
|
shaderCode,
|
|
112
113
|
uniforms,
|
|
113
|
-
disableOptimization: !!(header === null || header === void 0 ? void 0 : header.
|
|
114
|
+
disableOptimization: !!(header === null || header === void 0 ? void 0 : header.disableOptimization),
|
|
115
|
+
blockDisableStrategy: header === null || header === void 0 ? void 0 : header.blockDisableStrategy,
|
|
114
116
|
};
|
|
115
117
|
}
|
|
116
118
|
/**
|
|
@@ -218,17 +220,17 @@ const SmartFilterBlockTypeKey = "smartFilterBlockType";
|
|
|
218
220
|
* @returns - The GlslHeader if found, otherwise null
|
|
219
221
|
*/
|
|
220
222
|
function readHeader(fragmentShader) {
|
|
221
|
-
const singleLineHeaderMatch = new RegExp(
|
|
223
|
+
const singleLineHeaderMatch = new RegExp(/^\n*\s*\/\/\s*(\{.*\})/g).exec(fragmentShader);
|
|
222
224
|
if (singleLineHeaderMatch && singleLineHeaderMatch[1]) {
|
|
223
225
|
return {
|
|
224
|
-
header:
|
|
226
|
+
header: parseHeader(singleLineHeaderMatch[1].trim()),
|
|
225
227
|
fragmentShaderWithoutHeader: fragmentShader.replace(singleLineHeaderMatch[0], ""),
|
|
226
228
|
};
|
|
227
229
|
}
|
|
228
|
-
const multiLineHeaderMatch = new RegExp(
|
|
230
|
+
const multiLineHeaderMatch = new RegExp(/^\n*\s*\/\*\s*(\{.*\})\s*\*\//gs).exec(fragmentShader);
|
|
229
231
|
if (multiLineHeaderMatch && multiLineHeaderMatch[1]) {
|
|
230
232
|
return {
|
|
231
|
-
header:
|
|
233
|
+
header: parseHeader(multiLineHeaderMatch[1].trim()),
|
|
232
234
|
fragmentShaderWithoutHeader: fragmentShader.replace(multiLineHeaderMatch[0], ""),
|
|
233
235
|
};
|
|
234
236
|
}
|
|
@@ -237,6 +239,37 @@ function readHeader(fragmentShader) {
|
|
|
237
239
|
fragmentShaderWithoutHeader: fragmentShader,
|
|
238
240
|
};
|
|
239
241
|
}
|
|
242
|
+
/**
|
|
243
|
+
* Parses the header from a string into a GlslHeader object
|
|
244
|
+
* @param header - The header string to parse
|
|
245
|
+
* @returns - The GlslHeader if the header is valid, otherwise null
|
|
246
|
+
*/
|
|
247
|
+
function parseHeader(header) {
|
|
248
|
+
const parsedObject = JSON.parse(header);
|
|
249
|
+
if (!parsedObject || typeof parsedObject !== "object") {
|
|
250
|
+
return null;
|
|
251
|
+
}
|
|
252
|
+
// Check for required properties
|
|
253
|
+
if (!parsedObject[SmartFilterBlockTypeKey]) {
|
|
254
|
+
throw new Error("Missing required property: " + SmartFilterBlockTypeKey);
|
|
255
|
+
}
|
|
256
|
+
const glslHeader = parsedObject;
|
|
257
|
+
// Fix up the disableStrategy to be a BlockDisableStrategy
|
|
258
|
+
if (glslHeader.blockDisableStrategy) {
|
|
259
|
+
const rawStrategyValue = glslHeader.blockDisableStrategy;
|
|
260
|
+
switch (rawStrategyValue) {
|
|
261
|
+
case "Manual":
|
|
262
|
+
glslHeader.blockDisableStrategy = BlockDisableStrategy.Manual;
|
|
263
|
+
break;
|
|
264
|
+
case "AutoSample":
|
|
265
|
+
glslHeader.blockDisableStrategy = BlockDisableStrategy.AutoSample;
|
|
266
|
+
break;
|
|
267
|
+
default:
|
|
268
|
+
throw new Error(`Invalid disableStrategy: ${rawStrategyValue}`);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return glslHeader;
|
|
272
|
+
}
|
|
240
273
|
/**
|
|
241
274
|
* Determines if a fragment shader has the GLSL header required for parsing
|
|
242
275
|
* @param fragmentShader - The fragment shader to check
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shaderConverter.js","sourceRoot":"","sources":["../../../src/utils/buildTools/shaderConverter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAExD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"shaderConverter.js","sourceRoot":"","sources":["../../../src/utils/buildTools/shaderConverter.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The version of the SmartFilter core. During publish, this file is overwritten by versionUp.ts with the same version that is used for the NPM publish.
|
|
3
3
|
*/
|
|
4
|
-
export declare const SmartFilterCoreVersion = "0.
|
|
4
|
+
export declare const SmartFilterCoreVersion = "0.8.0-alpha";
|
|
5
5
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,sBAAsB,
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,sBAAsB,gBAAgB,CAAC"}
|
package/dist/version.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The version of the SmartFilter core. During publish, this file is overwritten by versionUp.ts with the same version that is used for the NPM publish.
|
|
3
3
|
*/
|
|
4
|
-
export const SmartFilterCoreVersion = "0.
|
|
4
|
+
export const SmartFilterCoreVersion = "0.8.0-alpha";
|
|
5
5
|
//# sourceMappingURL=version.js.map
|
package/dist/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,aAAa,CAAC"}
|
package/package.json
CHANGED
|
@@ -4,6 +4,6 @@ export { type AnyInputBlock } from "./inputBlock.js";
|
|
|
4
4
|
export { ShaderBlock } from "./shaderBlock.js";
|
|
5
5
|
export { CustomShaderBlock } from "./customShaderBlock.js";
|
|
6
6
|
export { CustomAggregateBlock } from "./customAggregateBlock.js";
|
|
7
|
-
export { DisableableShaderBlock, BlockDisableStrategy
|
|
7
|
+
export { DisableableShaderBlock, BlockDisableStrategy } from "./disableableShaderBlock.js";
|
|
8
8
|
export { AggregateBlock } from "./aggregateBlock.js";
|
|
9
9
|
export { type IDisableableBlock } from "./disableableShaderBlock.js";
|
|
@@ -6,7 +6,7 @@ import type { InputAutoBindV1, SerializedInputConnectionPointV1 } from "./v1/sha
|
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Imports a serialized custom block definition. Supports either serialized CustomShaderBlock definitions or
|
|
9
|
-
* CustomAggregateBlock definitions.
|
|
9
|
+
* CustomAggregateBlock definitions. Can throw an exception if the serialized data is invalid.
|
|
10
10
|
*
|
|
11
11
|
* CustomShaderBlock definitions can be supplied either as serialized SerializedBlockDefinition object
|
|
12
12
|
* or a glsl shader with the required annotations (see readme.md for details).
|
|
@@ -33,6 +33,12 @@ export function importCustomBlockDefinition(serializedData: string): SerializedB
|
|
|
33
33
|
if (blockDefinition.format === "smartFilter" && blockDefinition.name && !blockDefinition.blockType) {
|
|
34
34
|
blockDefinition.blockType = blockDefinition.name;
|
|
35
35
|
}
|
|
36
|
+
|
|
37
|
+
// Validation
|
|
38
|
+
if (!blockDefinition.blockType) {
|
|
39
|
+
throw new Error("Could not find a blockType");
|
|
40
|
+
}
|
|
41
|
+
|
|
36
42
|
return blockDefinition;
|
|
37
43
|
}
|
|
38
44
|
}
|
|
@@ -1,18 +1,26 @@
|
|
|
1
1
|
import * as fs from "fs";
|
|
2
2
|
import { extractShaderProgramFromGlsl } from "./convertGlslIntoShaderProgram.js";
|
|
3
3
|
import { ConnectionPointType } from "../../connection/connectionPointType.js";
|
|
4
|
+
import { BlockDisableStrategy } from "../../blockFoundation/disableableShaderBlock.js";
|
|
4
5
|
|
|
6
|
+
const EXTRA_IMPORTS = "@EXTRA_IMPORTS@";
|
|
5
7
|
const SHADER_PROGRAM = "@SHADER_PROGRAM@";
|
|
6
8
|
const BLOCK_NAME = "@BLOCK_NAME@";
|
|
7
9
|
const NAMESPACE = "@NAMESPACE@";
|
|
8
10
|
const SHADER_BINDING_PRIVATE_VARIABLES = "@SHADER_BINDING_PRIVATE_VARIABLES@";
|
|
9
11
|
const CAMEL_CASE_UNIFORM = "@CAMEL_CASE_UNIFORM@";
|
|
10
12
|
const CONNECTION_POINT_TYPE = "@CONNECTION_POINT_TYPE@";
|
|
13
|
+
const CONNECTION_POINT_DEFAULT_VALUE = "@CONNECTION_POINT_DEFAULT_VALUE@";
|
|
14
|
+
const SHADER_BINDING_EXTENDS = "@SHADER_BINDING_EXTENDS@";
|
|
11
15
|
const SHADER_BINDING_CTOR_DOCSTRING_PARAMS = "@SHADER_BINDING_CTOR_DOCSTRING_PARAMS@";
|
|
12
16
|
const SHADER_BINDING_CTOR_PARAMS = "@SHADER_CTOR_PARAMS@";
|
|
17
|
+
const SHADER_BINDING_SUPER_PARAMS = "@SHADER_BINDING_SUPER_PARAMS@";
|
|
13
18
|
const SHADER_BINDING_CTOR = "@SHADER_BINDING_CTOR@";
|
|
14
19
|
const SHADER_BINDING_BIND = "@SHADER_BINDING_BIND@";
|
|
20
|
+
const SHADER_BLOCK_EXTENDS = "@SHADER_BLOCK_EXTENDS@";
|
|
15
21
|
const BLOCK_INPUT_PROPERTIES = "@BLOCK_INPUT_PROPERTIES@";
|
|
22
|
+
const BLOCK_DISABLE_OPTIMIZATION = "@BLOCK_DISABLE_OPTIMIZATION@";
|
|
23
|
+
const BLOCK_DISABLE_STRATEGY = "@BLOCK_DISABLE_STRATEGY@";
|
|
16
24
|
const BLOCK_GET_SHADER_BINDING_VARS = "@BLOCK_SHADER_BINDING_BIND_VARS@";
|
|
17
25
|
const BLOCK_GET_SHADER_PARAM_LIST = "@BLOCK_GET_SHADER_PARAM_LIST@";
|
|
18
26
|
const EFFECT_SETTER = "@EFFECT_SETTER@";
|
|
@@ -23,11 +31,21 @@ const ShaderBindingCtorParams = ` ${CAMEL_CASE_UNIFORM}: RuntimeData<Conn
|
|
|
23
31
|
const ShaderBindingCtor = ` this._${CAMEL_CASE_UNIFORM} = ${CAMEL_CASE_UNIFORM};`;
|
|
24
32
|
const ShaderBindingBind = ` effect.${EFFECT_SETTER}(this.getRemappedName(uniforms.${CAMEL_CASE_UNIFORM}), this._${CAMEL_CASE_UNIFORM}.value);`;
|
|
25
33
|
|
|
26
|
-
const
|
|
34
|
+
const BlockInputProperty = ` /**
|
|
27
35
|
* The ${CAMEL_CASE_UNIFORM} connection point.
|
|
28
36
|
*/
|
|
29
37
|
public readonly ${CAMEL_CASE_UNIFORM} = this._registerInput(uniforms.${CAMEL_CASE_UNIFORM}, ConnectionPointType.${CONNECTION_POINT_TYPE});
|
|
30
38
|
`;
|
|
39
|
+
const BlockInputOptionalProperty = ` /**
|
|
40
|
+
/**
|
|
41
|
+
* The ${CAMEL_CASE_UNIFORM} connection point.
|
|
42
|
+
*/
|
|
43
|
+
public readonly ${CAMEL_CASE_UNIFORM} = this._registerOptionalInput(
|
|
44
|
+
"${CAMEL_CASE_UNIFORM}",
|
|
45
|
+
ConnectionPointType.${CONNECTION_POINT_TYPE},
|
|
46
|
+
createStrongRef(${CONNECTION_POINT_DEFAULT_VALUE})
|
|
47
|
+
);
|
|
48
|
+
`;
|
|
31
49
|
const BlockGetShaderBindingVars = ` const ${CAMEL_CASE_UNIFORM} = this._confirmRuntimeDataSupplied(this.${CAMEL_CASE_UNIFORM});`;
|
|
32
50
|
|
|
33
51
|
const FileTemplate = `/* eslint-disable prettier/prettier */
|
|
@@ -43,17 +61,17 @@ const FileTemplate = `/* eslint-disable prettier/prettier */
|
|
|
43
61
|
import type { Effect } from "@babylonjs/core/Materials/effect";
|
|
44
62
|
|
|
45
63
|
import {
|
|
46
|
-
|
|
64
|
+
${SHADER_BINDING_EXTENDS},
|
|
47
65
|
type RuntimeData,
|
|
48
66
|
ConnectionPointType,
|
|
49
67
|
type SmartFilter,
|
|
50
|
-
|
|
68
|
+
${SHADER_BLOCK_EXTENDS},
|
|
51
69
|
type ShaderProgram,
|
|
52
|
-
} from "@babylonjs/smart-filters";${SHADER_PROGRAM}
|
|
70
|
+
${EXTRA_IMPORTS}} from "@babylonjs/smart-filters";${SHADER_PROGRAM}
|
|
53
71
|
/**
|
|
54
72
|
* The shader binding for the ${BLOCK_NAME}, used by the runtime
|
|
55
73
|
*/
|
|
56
|
-
class ${BLOCK_NAME}ShaderBinding extends
|
|
74
|
+
class ${BLOCK_NAME}ShaderBinding extends ${SHADER_BINDING_EXTENDS} {
|
|
57
75
|
${SHADER_BINDING_PRIVATE_VARIABLES}
|
|
58
76
|
|
|
59
77
|
/**
|
|
@@ -63,7 +81,7 @@ ${SHADER_BINDING_CTOR_DOCSTRING_PARAMS}
|
|
|
63
81
|
constructor(
|
|
64
82
|
${SHADER_BINDING_CTOR_PARAMS}
|
|
65
83
|
) {
|
|
66
|
-
super();
|
|
84
|
+
super(${SHADER_BINDING_SUPER_PARAMS});
|
|
67
85
|
${SHADER_BINDING_CTOR}
|
|
68
86
|
}
|
|
69
87
|
|
|
@@ -79,7 +97,7 @@ ${SHADER_BINDING_BIND}
|
|
|
79
97
|
/**
|
|
80
98
|
* The implementation of the ${BLOCK_NAME}
|
|
81
99
|
*/
|
|
82
|
-
export class ${BLOCK_NAME} extends
|
|
100
|
+
export class ${BLOCK_NAME} extends ${SHADER_BLOCK_EXTENDS} {
|
|
83
101
|
/**
|
|
84
102
|
* The class name of the block.
|
|
85
103
|
*/
|
|
@@ -102,14 +120,14 @@ ${BLOCK_INPUT_PROPERTIES}
|
|
|
102
120
|
* @param name - The friendly name of the block
|
|
103
121
|
*/
|
|
104
122
|
constructor(smartFilter: SmartFilter, name: string) {
|
|
105
|
-
super(smartFilter, name);
|
|
123
|
+
super(smartFilter, name, ${BLOCK_DISABLE_OPTIMIZATION}${BLOCK_DISABLE_STRATEGY});
|
|
106
124
|
}
|
|
107
125
|
|
|
108
126
|
/**
|
|
109
127
|
* Get the class instance that binds all the required data to the shader (effect) when rendering.
|
|
110
128
|
* @returns The class instance that binds the data to the effect
|
|
111
129
|
*/
|
|
112
|
-
public getShaderBinding():
|
|
130
|
+
public getShaderBinding(): ${SHADER_BINDING_EXTENDS} {
|
|
113
131
|
${BLOCK_GET_SHADER_BINDING_VARS}
|
|
114
132
|
|
|
115
133
|
return new ${BLOCK_NAME}ShaderBinding(${BLOCK_GET_SHADER_PARAM_LIST});
|
|
@@ -124,6 +142,8 @@ ${BLOCK_GET_SHADER_BINDING_VARS}
|
|
|
124
142
|
* @param importPath - The path to import the ShaderProgram type from
|
|
125
143
|
*/
|
|
126
144
|
export function convertGlslIntoBlock(fragmentShaderPath: string, importPath: string): void {
|
|
145
|
+
const extraImports: string[] = [];
|
|
146
|
+
|
|
127
147
|
const { shaderProgramCode, fragmentShaderInfo } = extractShaderProgramFromGlsl(
|
|
128
148
|
fragmentShaderPath,
|
|
129
149
|
importPath,
|
|
@@ -172,10 +192,19 @@ export function convertGlslIntoBlock(fragmentShaderPath: string, importPath: str
|
|
|
172
192
|
|
|
173
193
|
// Generate the block input properties
|
|
174
194
|
const blockInputProperties = fragmentShaderInfo.uniforms.map((uniform) => {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
195
|
+
if (uniform.properties?.default !== undefined) {
|
|
196
|
+
if (extraImports.indexOf(" createStrongRef") === -1) {
|
|
197
|
+
extraImports.push(" createStrongRef");
|
|
198
|
+
}
|
|
199
|
+
return BlockInputOptionalProperty.replace(new RegExp(CAMEL_CASE_UNIFORM, "g"), uniform.name)
|
|
200
|
+
.replace(CONNECTION_POINT_TYPE, getConnectionPointTypeString(uniform.type))
|
|
201
|
+
.replace(CONNECTION_POINT_DEFAULT_VALUE, uniform.properties.default);
|
|
202
|
+
} else {
|
|
203
|
+
return BlockInputProperty.replace(new RegExp(CAMEL_CASE_UNIFORM, "g"), uniform.name).replace(
|
|
204
|
+
CONNECTION_POINT_TYPE,
|
|
205
|
+
getConnectionPointTypeString(uniform.type)
|
|
206
|
+
);
|
|
207
|
+
}
|
|
179
208
|
});
|
|
180
209
|
|
|
181
210
|
// Generate the block get shader binding vars
|
|
@@ -183,21 +212,63 @@ export function convertGlslIntoBlock(fragmentShaderPath: string, importPath: str
|
|
|
183
212
|
return BlockGetShaderBindingVars.replace(new RegExp(CAMEL_CASE_UNIFORM, "g"), uniform.name);
|
|
184
213
|
});
|
|
185
214
|
|
|
215
|
+
// Handle the disable optimization flag
|
|
216
|
+
const disableOptimization = fragmentShaderInfo.disableOptimization === true ? "true" : "false";
|
|
217
|
+
|
|
186
218
|
// Generate the block get shader param list
|
|
187
219
|
const blockGetShaderParamList = fragmentShaderInfo.uniforms.map((uniform) => {
|
|
188
220
|
return uniform.name;
|
|
189
221
|
});
|
|
190
222
|
|
|
223
|
+
// Decide if this is a disableable block or not
|
|
224
|
+
let shaderBlockExtends = "ShaderBlock";
|
|
225
|
+
let shaderBindingExtends = "ShaderBinding";
|
|
226
|
+
let blockDisableStrategy = "";
|
|
227
|
+
let shaderBindingSuperParams = "";
|
|
228
|
+
if (fragmentShaderInfo.blockDisableStrategy) {
|
|
229
|
+
shaderBlockExtends = "DisableableShaderBlock";
|
|
230
|
+
shaderBindingExtends = "DisableableShaderBinding";
|
|
231
|
+
blockDisableStrategy = `, BlockDisableStrategy.${BlockDisableStrategy[fragmentShaderInfo.blockDisableStrategy]}`;
|
|
232
|
+
shaderBindingSuperParams = "parentBlock";
|
|
233
|
+
|
|
234
|
+
shaderBindingCtorDocstringParams.unshift(" * @param parentBlock - IDisableableBlock");
|
|
235
|
+
shaderBindingCtorParams.unshift(" parentBlock: IDisableableBlock");
|
|
236
|
+
blockGetShaderParamList.unshift("this");
|
|
237
|
+
|
|
238
|
+
extraImports.push(" type IDisableableBlock");
|
|
239
|
+
extraImports.push(" BlockDisableStrategy");
|
|
240
|
+
|
|
241
|
+
shaderBindingBind.unshift(" super.bind(effect);");
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// Additional validation
|
|
245
|
+
if (
|
|
246
|
+
fragmentShaderInfo.blockDisableStrategy !== undefined &&
|
|
247
|
+
fragmentShaderInfo.blockDisableStrategy !== BlockDisableStrategy.Manual
|
|
248
|
+
) {
|
|
249
|
+
if (fragmentShaderInfo.uniforms.findIndex((uniform) => uniform.name === "disabled") !== -1) {
|
|
250
|
+
throw new Error(
|
|
251
|
+
"A block that uses a BlockDisableStrategy other than Manual should not declare its own 'disabled' uniform"
|
|
252
|
+
);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
191
256
|
// Generate final contents
|
|
192
257
|
const finalContents = FileTemplate.replace(SHADER_PROGRAM, shaderProgramCode)
|
|
258
|
+
.replace(EXTRA_IMPORTS, extraImports.join(",\n"))
|
|
193
259
|
.replace(new RegExp(BLOCK_NAME, "g"), fragmentShaderInfo.blockType)
|
|
194
260
|
.replace(NAMESPACE, fragmentShaderInfo.namespace || "Other")
|
|
261
|
+
.replace(new RegExp(SHADER_BINDING_EXTENDS, "g"), shaderBindingExtends)
|
|
195
262
|
.replace(SHADER_BINDING_PRIVATE_VARIABLES, shaderBindingPrivateVariables.join("\n"))
|
|
196
263
|
.replace(SHADER_BINDING_CTOR_DOCSTRING_PARAMS, shaderBindingCtorDocstringParams.join("\n"))
|
|
197
264
|
.replace(SHADER_BINDING_CTOR_PARAMS, shaderBindingCtorParams.join(",\n"))
|
|
198
265
|
.replace(SHADER_BINDING_CTOR, shaderBindingCtor.join("\n"))
|
|
266
|
+
.replace(SHADER_BINDING_SUPER_PARAMS, shaderBindingSuperParams)
|
|
199
267
|
.replace(SHADER_BINDING_BIND, shaderBindingBind.join("\n"))
|
|
268
|
+
.replace(new RegExp(SHADER_BLOCK_EXTENDS, "g"), shaderBlockExtends)
|
|
200
269
|
.replace(BLOCK_INPUT_PROPERTIES, blockInputProperties.join("\n"))
|
|
270
|
+
.replace(BLOCK_DISABLE_OPTIMIZATION, disableOptimization)
|
|
271
|
+
.replace(BLOCK_DISABLE_STRATEGY, blockDisableStrategy)
|
|
201
272
|
.replace(BLOCK_GET_SHADER_BINDING_VARS, blockGetShaderBindingVars.join("\n"))
|
|
202
273
|
.replace(BLOCK_GET_SHADER_PARAM_LIST, blockGetShaderParamList.join(","));
|
|
203
274
|
|
|
@@ -2,6 +2,7 @@ import type { Nullable } from "@babylonjs/core/types";
|
|
|
2
2
|
import { Logger } from "@babylonjs/core/Misc/logger.js";
|
|
3
3
|
import type { ShaderCode, ShaderFunction } from "./shaderCode.types";
|
|
4
4
|
import { ConnectionPointType } from "../../connection/connectionPointType.js";
|
|
5
|
+
import { BlockDisableStrategy } from "../../blockFoundation/disableableShaderBlock.js";
|
|
5
6
|
|
|
6
7
|
const GetFunctionNamesRegEx = /\S*\w+\s+(\w+)\s*\(/g;
|
|
7
8
|
|
|
@@ -60,6 +61,11 @@ export type FragmentShaderInfo = {
|
|
|
60
61
|
*/
|
|
61
62
|
disableOptimization?: boolean;
|
|
62
63
|
|
|
64
|
+
/**
|
|
65
|
+
* If supplied, the strategy to use for making this block disableable
|
|
66
|
+
*/
|
|
67
|
+
blockDisableStrategy?: BlockDisableStrategy;
|
|
68
|
+
|
|
63
69
|
/**
|
|
64
70
|
* The shader code
|
|
65
71
|
*/
|
|
@@ -203,7 +209,8 @@ export function parseFragmentShader(fragmentShader: string): FragmentShaderInfo
|
|
|
203
209
|
namespace,
|
|
204
210
|
shaderCode,
|
|
205
211
|
uniforms,
|
|
206
|
-
disableOptimization: !!header?.
|
|
212
|
+
disableOptimization: !!header?.disableOptimization,
|
|
213
|
+
blockDisableStrategy: header?.blockDisableStrategy,
|
|
207
214
|
};
|
|
208
215
|
}
|
|
209
216
|
|
|
@@ -362,7 +369,13 @@ type GlslHeader = {
|
|
|
362
369
|
/**
|
|
363
370
|
* If true, optimization should be disabled for this shader
|
|
364
371
|
*/
|
|
365
|
-
|
|
372
|
+
disableOptimization?: boolean;
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* If supplied, this will be an instance of DisableableShaderBlock, with this BlockDisableStrategy
|
|
376
|
+
* In the GLSL file, use the string key of the BlockDisableStrategy (e.g. "AutoSample").
|
|
377
|
+
*/
|
|
378
|
+
blockDisableStrategy?: BlockDisableStrategy;
|
|
366
379
|
};
|
|
367
380
|
|
|
368
381
|
/**
|
|
@@ -381,18 +394,18 @@ function readHeader(fragmentShader: string): {
|
|
|
381
394
|
*/
|
|
382
395
|
fragmentShaderWithoutHeader: string;
|
|
383
396
|
} {
|
|
384
|
-
const singleLineHeaderMatch = new RegExp(
|
|
397
|
+
const singleLineHeaderMatch = new RegExp(/^\n*\s*\/\/\s*(\{.*\})/g).exec(fragmentShader);
|
|
385
398
|
if (singleLineHeaderMatch && singleLineHeaderMatch[1]) {
|
|
386
399
|
return {
|
|
387
|
-
header:
|
|
400
|
+
header: parseHeader(singleLineHeaderMatch[1].trim()),
|
|
388
401
|
fragmentShaderWithoutHeader: fragmentShader.replace(singleLineHeaderMatch[0], ""),
|
|
389
402
|
};
|
|
390
403
|
}
|
|
391
404
|
|
|
392
|
-
const multiLineHeaderMatch = new RegExp(
|
|
405
|
+
const multiLineHeaderMatch = new RegExp(/^\n*\s*\/\*\s*(\{.*\})\s*\*\//gs).exec(fragmentShader);
|
|
393
406
|
if (multiLineHeaderMatch && multiLineHeaderMatch[1]) {
|
|
394
407
|
return {
|
|
395
|
-
header:
|
|
408
|
+
header: parseHeader(multiLineHeaderMatch[1].trim()),
|
|
396
409
|
fragmentShaderWithoutHeader: fragmentShader.replace(multiLineHeaderMatch[0], ""),
|
|
397
410
|
};
|
|
398
411
|
}
|
|
@@ -403,6 +416,43 @@ function readHeader(fragmentShader: string): {
|
|
|
403
416
|
};
|
|
404
417
|
}
|
|
405
418
|
|
|
419
|
+
/**
|
|
420
|
+
* Parses the header from a string into a GlslHeader object
|
|
421
|
+
* @param header - The header string to parse
|
|
422
|
+
* @returns - The GlslHeader if the header is valid, otherwise null
|
|
423
|
+
*/
|
|
424
|
+
function parseHeader(header: string): Nullable<GlslHeader> {
|
|
425
|
+
const parsedObject = JSON.parse(header);
|
|
426
|
+
|
|
427
|
+
if (!parsedObject || typeof parsedObject !== "object") {
|
|
428
|
+
return null;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
// Check for required properties
|
|
432
|
+
if (!parsedObject[SmartFilterBlockTypeKey]) {
|
|
433
|
+
throw new Error("Missing required property: " + SmartFilterBlockTypeKey);
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
const glslHeader = parsedObject as GlslHeader;
|
|
437
|
+
|
|
438
|
+
// Fix up the disableStrategy to be a BlockDisableStrategy
|
|
439
|
+
if (glslHeader.blockDisableStrategy) {
|
|
440
|
+
const rawStrategyValue = glslHeader.blockDisableStrategy;
|
|
441
|
+
switch (rawStrategyValue as unknown as string) {
|
|
442
|
+
case "Manual":
|
|
443
|
+
glslHeader.blockDisableStrategy = BlockDisableStrategy.Manual;
|
|
444
|
+
break;
|
|
445
|
+
case "AutoSample":
|
|
446
|
+
glslHeader.blockDisableStrategy = BlockDisableStrategy.AutoSample;
|
|
447
|
+
break;
|
|
448
|
+
default:
|
|
449
|
+
throw new Error(`Invalid disableStrategy: ${rawStrategyValue}`);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
return glslHeader;
|
|
454
|
+
}
|
|
455
|
+
|
|
406
456
|
/**
|
|
407
457
|
* Determines if a fragment shader has the GLSL header required for parsing
|
|
408
458
|
* @param fragmentShader - The fragment shader to check
|
package/src/version.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The version of the SmartFilter core. During publish, this file is overwritten by versionUp.ts with the same version that is used for the NPM publish.
|
|
3
3
|
*/
|
|
4
|
-
export const SmartFilterCoreVersion = "0.
|
|
4
|
+
export const SmartFilterCoreVersion = "0.8.0-alpha";
|