@babylonjs/core 8.12.1 → 8.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/BakedVertexAnimation/vertexAnimationBaker.d.ts +10 -2
  2. package/BakedVertexAnimation/vertexAnimationBaker.js +51 -2
  3. package/BakedVertexAnimation/vertexAnimationBaker.js.map +1 -1
  4. package/Cameras/camera.d.ts +6 -0
  5. package/Cameras/camera.js +8 -0
  6. package/Cameras/camera.js.map +1 -1
  7. package/Engines/abstractEngine.js +2 -2
  8. package/Engines/abstractEngine.js.map +1 -1
  9. package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.d.ts +1 -1
  10. package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.js +27 -18
  11. package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.js.map +1 -1
  12. package/FlowGraph/Blocks/Data/Math/flowGraphVectorMathBlocks.d.ts +55 -3
  13. package/FlowGraph/Blocks/Data/Math/flowGraphVectorMathBlocks.js +83 -2
  14. package/FlowGraph/Blocks/Data/Math/flowGraphVectorMathBlocks.js.map +1 -1
  15. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.js.map +1 -1
  16. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.js.map +1 -1
  17. package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.js.map +1 -1
  18. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.js.map +1 -1
  19. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSetDelayBlock.js.map +1 -1
  20. package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.d.ts +1 -0
  21. package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.js +23 -2
  22. package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.js.map +1 -1
  23. package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.js +5 -5
  24. package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.js.map +1 -1
  25. package/FlowGraph/Blocks/flowGraphBlockFactory.js +10 -0
  26. package/FlowGraph/Blocks/flowGraphBlockFactory.js.map +1 -1
  27. package/FlowGraph/Blocks/flowGraphBlockNames.d.ts +5 -0
  28. package/FlowGraph/Blocks/flowGraphBlockNames.js +5 -0
  29. package/FlowGraph/Blocks/flowGraphBlockNames.js.map +1 -1
  30. package/FlowGraph/flowGraphRichTypes.js +10 -8
  31. package/FlowGraph/flowGraphRichTypes.js.map +1 -1
  32. package/FlowGraph/utils.d.ts +3 -3
  33. package/FlowGraph/utils.js +5 -4
  34. package/FlowGraph/utils.js.map +1 -1
  35. package/Instrumentation/engineInstrumentation.d.ts +2 -2
  36. package/Instrumentation/engineInstrumentation.js +5 -0
  37. package/Instrumentation/engineInstrumentation.js.map +1 -1
  38. package/Instrumentation/sceneInstrumentation.d.ts +1 -0
  39. package/Instrumentation/sceneInstrumentation.js +5 -0
  40. package/Instrumentation/sceneInstrumentation.js.map +1 -1
  41. package/Materials/Node/Blocks/Dual/smartFilterTextureBlock.d.ts +2 -5
  42. package/Materials/Node/Blocks/Dual/smartFilterTextureBlock.js +8 -71
  43. package/Materials/Node/Blocks/Dual/smartFilterTextureBlock.js.map +1 -1
  44. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.d.ts +2 -0
  45. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +7 -8
  46. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  47. package/Materials/Node/Blocks/Fragment/index.d.ts +1 -0
  48. package/Materials/Node/Blocks/Fragment/index.js +1 -0
  49. package/Materials/Node/Blocks/Fragment/index.js.map +1 -1
  50. package/Materials/Node/Blocks/Fragment/smartFilterFragmentOutputBlock.d.ts +29 -0
  51. package/Materials/Node/Blocks/Fragment/smartFilterFragmentOutputBlock.js +100 -0
  52. package/Materials/Node/Blocks/Fragment/smartFilterFragmentOutputBlock.js.map +1 -0
  53. package/Materials/Node/nodeMaterial.js +1 -1
  54. package/Materials/Node/nodeMaterial.js.map +1 -1
  55. package/Materials/Node/nodeMaterialBuildState.d.ts +0 -2
  56. package/Materials/Node/nodeMaterialBuildState.js +0 -2
  57. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  58. package/Materials/Node/nodeMaterialDefault.js +2 -1
  59. package/Materials/Node/nodeMaterialDefault.js.map +1 -1
  60. package/Maths/math.vector.d.ts +14 -0
  61. package/Maths/math.vector.functions.d.ts +25 -1
  62. package/Maths/math.vector.functions.js +35 -0
  63. package/Maths/math.vector.functions.js.map +1 -1
  64. package/Maths/math.vector.js +28 -0
  65. package/Maths/math.vector.js.map +1 -1
  66. package/Meshes/csg2.js +1 -1
  67. package/Meshes/csg2.js.map +1 -1
  68. package/Meshes/linesMesh.d.ts +2 -1
  69. package/Meshes/linesMesh.js +5 -0
  70. package/Meshes/linesMesh.js.map +1 -1
  71. package/Misc/environmentTextureTools.d.ts +4 -1
  72. package/Misc/environmentTextureTools.js +9 -2
  73. package/Misc/environmentTextureTools.js.map +1 -1
  74. package/Morph/morphTargetManager.d.ts +5 -0
  75. package/Morph/morphTargetManager.js +8 -0
  76. package/Morph/morphTargetManager.js.map +1 -1
  77. package/package.json +1 -1
@@ -1,4 +1,5 @@
1
1
  export * from "./fragmentOutputBlock.js";
2
+ export * from "./smartFilterFragmentOutputBlock.js";
2
3
  export * from "./imageProcessingBlock.js";
3
4
  export * from "./perturbNormalBlock.js";
4
5
  export * from "./discardBlock.js";
@@ -1,4 +1,5 @@
1
1
  export * from "./fragmentOutputBlock.js";
2
+ export * from "./smartFilterFragmentOutputBlock.js";
2
3
  export * from "./imageProcessingBlock.js";
3
4
  export * from "./perturbNormalBlock.js";
4
5
  export * from "./discardBlock.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AAErC,uBAAuB;AAEvB,uBAAuB;AACvB,cAAc,wDAAwD,CAAC;AACvE,cAAc,mEAAmE,CAAC;AAClF,cAAc,iEAAiE,CAAC;AAChF,cAAc,oDAAoD,CAAC;AACnE,cAAc,+DAA+D,CAAC;AAC9E,cAAc,6DAA6D,CAAC;AAE5E,qBAAqB;AACrB,cAAc,qDAAqD,CAAC;AACpE,cAAc,kEAAkE,CAAC;AACjF,cAAc,8DAA8D,CAAC;AAC7E,cAAc,iDAAiD,CAAC;AAChE,cAAc,8DAA8D,CAAC;AAC7E,cAAc,0DAA0D,CAAC;AAEzE,iBAAiB;AACjB,cAAc,8DAA8D,CAAC;AAC7E,cAAc,yDAAyD,CAAC;AACxE,cAAc,0DAA0D,CAAC;AACzE,cAAc,0DAA0D,CAAC;AACzE,cAAc,qDAAqD,CAAC;AACpE,cAAc,sDAAsD,CAAC","sourcesContent":["export * from \"./fragmentOutputBlock\";\r\nexport * from \"./imageProcessingBlock\";\r\nexport * from \"./perturbNormalBlock\";\r\nexport * from \"./discardBlock\";\r\nexport * from \"./frontFacingBlock\";\r\nexport * from \"./derivativeBlock\";\r\nexport * from \"./fragCoordBlock\";\r\nexport * from \"./screenSizeBlock\";\r\nexport * from \"./screenSpaceBlock\";\r\nexport * from \"./twirlBlock\";\r\nexport * from \"./TBNBlock\";\r\nexport * from \"./heightToNormalBlock\";\r\nexport * from \"./fragDepthBlock\";\r\nexport * from \"./shadowMapBlock\";\r\nexport * from \"./prePassOutputBlock\";\r\n\r\n// async-loaded shaders\r\n\r\n// imageProcessingBlock\r\nexport * from \"../../../../ShadersWGSL/ShadersInclude/helperFunctions\";\r\nexport * from \"../../../../ShadersWGSL/ShadersInclude/imageProcessingDeclaration\";\r\nexport * from \"../../../../ShadersWGSL/ShadersInclude/imageProcessingFunctions\";\r\nexport * from \"../../../../Shaders/ShadersInclude/helperFunctions\";\r\nexport * from \"../../../../Shaders/ShadersInclude/imageProcessingDeclaration\";\r\nexport * from \"../../../../Shaders/ShadersInclude/imageProcessingFunctions\";\r\n\r\n// perturbNormalBlock\r\nexport * from \"../../../../ShadersWGSL/ShadersInclude/bumpFragment\";\r\nexport * from \"../../../../ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions\";\r\nexport * from \"../../../../ShadersWGSL/ShadersInclude/bumpFragmentFunctions\";\r\nexport * from \"../../../../Shaders/ShadersInclude/bumpFragment\";\r\nexport * from \"../../../../Shaders/ShadersInclude/bumpFragmentMainFunctions\";\r\nexport * from \"../../../../Shaders/ShadersInclude/bumpFragmentFunctions\";\r\n\r\n// shadowMapBlock\r\nexport * from \"../../../../ShadersWGSL/ShadersInclude/shadowMapVertexMetric\";\r\nexport * from \"../../../../ShadersWGSL/ShadersInclude/packingFunctions\";\r\nexport * from \"../../../../ShadersWGSL/ShadersInclude/shadowMapFragment\";\r\nexport * from \"../../../../Shaders/ShadersInclude/shadowMapVertexMetric\";\r\nexport * from \"../../../../Shaders/ShadersInclude/packingFunctions\";\r\nexport * from \"../../../../Shaders/ShadersInclude/shadowMapFragment\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC;AACjD,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AAErC,uBAAuB;AAEvB,uBAAuB;AACvB,cAAc,wDAAwD,CAAC;AACvE,cAAc,mEAAmE,CAAC;AAClF,cAAc,iEAAiE,CAAC;AAChF,cAAc,oDAAoD,CAAC;AACnE,cAAc,+DAA+D,CAAC;AAC9E,cAAc,6DAA6D,CAAC;AAE5E,qBAAqB;AACrB,cAAc,qDAAqD,CAAC;AACpE,cAAc,kEAAkE,CAAC;AACjF,cAAc,8DAA8D,CAAC;AAC7E,cAAc,iDAAiD,CAAC;AAChE,cAAc,8DAA8D,CAAC;AAC7E,cAAc,0DAA0D,CAAC;AAEzE,iBAAiB;AACjB,cAAc,8DAA8D,CAAC;AAC7E,cAAc,yDAAyD,CAAC;AACxE,cAAc,0DAA0D,CAAC;AACzE,cAAc,0DAA0D,CAAC;AACzE,cAAc,qDAAqD,CAAC;AACpE,cAAc,sDAAsD,CAAC","sourcesContent":["export * from \"./fragmentOutputBlock\";\r\nexport * from \"./smartFilterFragmentOutputBlock\";\r\nexport * from \"./imageProcessingBlock\";\r\nexport * from \"./perturbNormalBlock\";\r\nexport * from \"./discardBlock\";\r\nexport * from \"./frontFacingBlock\";\r\nexport * from \"./derivativeBlock\";\r\nexport * from \"./fragCoordBlock\";\r\nexport * from \"./screenSizeBlock\";\r\nexport * from \"./screenSpaceBlock\";\r\nexport * from \"./twirlBlock\";\r\nexport * from \"./TBNBlock\";\r\nexport * from \"./heightToNormalBlock\";\r\nexport * from \"./fragDepthBlock\";\r\nexport * from \"./shadowMapBlock\";\r\nexport * from \"./prePassOutputBlock\";\r\n\r\n// async-loaded shaders\r\n\r\n// imageProcessingBlock\r\nexport * from \"../../../../ShadersWGSL/ShadersInclude/helperFunctions\";\r\nexport * from \"../../../../ShadersWGSL/ShadersInclude/imageProcessingDeclaration\";\r\nexport * from \"../../../../ShadersWGSL/ShadersInclude/imageProcessingFunctions\";\r\nexport * from \"../../../../Shaders/ShadersInclude/helperFunctions\";\r\nexport * from \"../../../../Shaders/ShadersInclude/imageProcessingDeclaration\";\r\nexport * from \"../../../../Shaders/ShadersInclude/imageProcessingFunctions\";\r\n\r\n// perturbNormalBlock\r\nexport * from \"../../../../ShadersWGSL/ShadersInclude/bumpFragment\";\r\nexport * from \"../../../../ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions\";\r\nexport * from \"../../../../ShadersWGSL/ShadersInclude/bumpFragmentFunctions\";\r\nexport * from \"../../../../Shaders/ShadersInclude/bumpFragment\";\r\nexport * from \"../../../../Shaders/ShadersInclude/bumpFragmentMainFunctions\";\r\nexport * from \"../../../../Shaders/ShadersInclude/bumpFragmentFunctions\";\r\n\r\n// shadowMapBlock\r\nexport * from \"../../../../ShadersWGSL/ShadersInclude/shadowMapVertexMetric\";\r\nexport * from \"../../../../ShadersWGSL/ShadersInclude/packingFunctions\";\r\nexport * from \"../../../../ShadersWGSL/ShadersInclude/shadowMapFragment\";\r\nexport * from \"../../../../Shaders/ShadersInclude/shadowMapVertexMetric\";\r\nexport * from \"../../../../Shaders/ShadersInclude/packingFunctions\";\r\nexport * from \"../../../../Shaders/ShadersInclude/shadowMapFragment\";\r\n"]}
@@ -0,0 +1,29 @@
1
+ import { FragmentOutputBlock } from "./fragmentOutputBlock.js";
2
+ import type { NodeMaterialBuildState } from "../../nodeMaterialBuildState.js";
3
+ /** @internal */
4
+ export declare const SfeModeDefine = "USE_SFE_FRAMEWORK";
5
+ /**
6
+ * Block used to output the final color with Smart Filters structural support.
7
+ */
8
+ export declare class SmartFilterFragmentOutputBlock extends FragmentOutputBlock {
9
+ /**
10
+ * Create a new SmartFilterFragmentOutputBlock
11
+ * @param name defines the block name
12
+ */
13
+ constructor(name: string);
14
+ /**
15
+ * Gets the current class name
16
+ * @returns the class name
17
+ */
18
+ getClassName(): string;
19
+ /**
20
+ * Initialize the block and prepare the context for build
21
+ * @param state defines the state that will be used for the build
22
+ */
23
+ initialize(state: NodeMaterialBuildState): void;
24
+ private _generateInputBlockAnnotation;
25
+ private _generateScreenSizeBlockAnnotation;
26
+ private _getMainUvName;
27
+ protected _getOutputString(): string;
28
+ protected _buildBlock(state: NodeMaterialBuildState): this;
29
+ }
@@ -0,0 +1,100 @@
1
+ import { FragmentOutputBlock } from "./fragmentOutputBlock.js";
2
+ import { NodeMaterialModes } from "../../Enums/nodeMaterialModes.js";
3
+ import { RegisterClass } from "../../../../Misc/typeStore.js";
4
+ import { InputBlock } from "../Input/inputBlock.js";
5
+ import { ScreenSizeBlock } from "../Fragment/screenSizeBlock.js";
6
+ /** @internal */
7
+ export const SfeModeDefine = "USE_SFE_FRAMEWORK";
8
+ /**
9
+ * Block used to output the final color with Smart Filters structural support.
10
+ */
11
+ export class SmartFilterFragmentOutputBlock extends FragmentOutputBlock {
12
+ /**
13
+ * Create a new SmartFilterFragmentOutputBlock
14
+ * @param name defines the block name
15
+ */
16
+ constructor(name) {
17
+ super(name);
18
+ }
19
+ /**
20
+ * Gets the current class name
21
+ * @returns the class name
22
+ */
23
+ getClassName() {
24
+ return "SmartFilterFragmentOutputBlock";
25
+ }
26
+ /**
27
+ * Initialize the block and prepare the context for build
28
+ * @param state defines the state that will be used for the build
29
+ */
30
+ initialize(state) {
31
+ super.initialize(state);
32
+ if (state.sharedData.nodeMaterial.mode !== NodeMaterialModes.SFE) {
33
+ state.sharedData.raiseBuildError("SmartFilterFragmentOutputBlock should not be used outside of SFE mode.");
34
+ }
35
+ if (state.sharedData.nodeMaterial.shaderLanguage !== 0 /* ShaderLanguage.GLSL */) {
36
+ state.sharedData.raiseBuildError("WebGPU is not supported in SmartFilters mode.");
37
+ }
38
+ // Annotate uniforms of InputBlocks and bindable blocks with their current values
39
+ if (!state.sharedData.formatConfig.getUniformAnnotation) {
40
+ state.sharedData.formatConfig.getUniformAnnotation = (name) => {
41
+ for (const block of state.sharedData.nodeMaterial.attachedBlocks) {
42
+ if (block instanceof InputBlock && block.isUniform && block.associatedVariableName === name) {
43
+ return this._generateInputBlockAnnotation(block);
44
+ }
45
+ if (block instanceof ScreenSizeBlock && block.associatedVariableName === name) {
46
+ return this._generateScreenSizeBlockAnnotation();
47
+ }
48
+ }
49
+ return "";
50
+ };
51
+ }
52
+ // Do our best to clean up variable names, as they will be used as display names.
53
+ state.sharedData.formatConfig.formatVariablename = (n) => {
54
+ let name = n;
55
+ const hasUnderscoredPrefix = name.length > 1 && name[1] === "_";
56
+ if (hasUnderscoredPrefix) {
57
+ name = name.substring(2);
58
+ }
59
+ return name.replace(/[^a-zA-Z]+/g, "");
60
+ };
61
+ }
62
+ _generateInputBlockAnnotation(inputBlock) {
63
+ const value = inputBlock.valueCallback ? inputBlock.valueCallback() : inputBlock.value;
64
+ return `// { "default": ${JSON.stringify(value)} }\n`;
65
+ }
66
+ _generateScreenSizeBlockAnnotation() {
67
+ return `// { "autoBind": "outputResolution" }\n`;
68
+ }
69
+ _getMainUvName(state) {
70
+ // Get the ScreenUVBlock's name, which is required for SFE and should be vUV.
71
+ // NOTE: In the future, when we move to vertex shaders, update this to check for the nearest vec2 varying output.
72
+ const screenUv = state.sharedData.nodeMaterial.getInputBlockByPredicate((b) => b.isAttribute && b.name === "postprocess_uv");
73
+ if (!screenUv || !screenUv.isAnAncestorOf(this)) {
74
+ return "";
75
+ }
76
+ return screenUv.associatedVariableName;
77
+ }
78
+ _getOutputString() {
79
+ return "outColor";
80
+ }
81
+ _buildBlock(state) {
82
+ super._buildBlock(state);
83
+ const outputString = this._getOutputString();
84
+ state._injectAtTop = `// { "smartFilterBlockType": "${state.sharedData.nodeMaterial.name}", "namespace": "Babylon.NME.Exports" }`;
85
+ state._customEntryHeader += `#ifdef ${SfeModeDefine}\n`;
86
+ state._customEntryHeader += `vec4 nmeMain(vec2 ${this._getMainUvName(state)}) { // main\n`;
87
+ state._customEntryHeader += `#else\n`;
88
+ state._customEntryHeader += `void main(void) {\n`;
89
+ state._customEntryHeader += `#endif\n`;
90
+ state._customEntryHeader += `vec4 ${outputString} = vec4(0.0);\n`;
91
+ state.compilationString += `\n#ifndef ${SfeModeDefine}\n`;
92
+ state.compilationString += `gl_FragColor = ${outputString};\n`;
93
+ state.compilationString += `#else\n`;
94
+ state.compilationString += `return ${outputString};\n`;
95
+ state.compilationString += `#endif\n`;
96
+ return this;
97
+ }
98
+ }
99
+ RegisterClass("BABYLON.SmartFilterFragmentOutputBlock", SmartFilterFragmentOutputBlock);
100
+ //# sourceMappingURL=smartFilterFragmentOutputBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smartFilterFragmentOutputBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/smartFilterFragmentOutputBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { FragmentOutputBlock } from \"./fragmentOutputBlock\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialModes } from \"../../Enums/nodeMaterialModes\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport { ScreenSizeBlock } from \"../Fragment/screenSizeBlock\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/** @internal */\r\nexport const SfeModeDefine = \"USE_SFE_FRAMEWORK\";\r\n\r\n/**\r\n * Block used to output the final color with Smart Filters structural support.\r\n */\r\nexport class SmartFilterFragmentOutputBlock extends FragmentOutputBlock {\r\n /**\r\n * Create a new SmartFilterFragmentOutputBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"SmartFilterFragmentOutputBlock\";\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public override initialize(state: NodeMaterialBuildState) {\r\n super.initialize(state);\r\n\r\n if (state.sharedData.nodeMaterial.mode !== NodeMaterialModes.SFE) {\r\n state.sharedData.raiseBuildError(\"SmartFilterFragmentOutputBlock should not be used outside of SFE mode.\");\r\n }\r\n\r\n if (state.sharedData.nodeMaterial.shaderLanguage !== ShaderLanguage.GLSL) {\r\n state.sharedData.raiseBuildError(\"WebGPU is not supported in SmartFilters mode.\");\r\n }\r\n\r\n // Annotate uniforms of InputBlocks and bindable blocks with their current values\r\n if (!state.sharedData.formatConfig.getUniformAnnotation) {\r\n state.sharedData.formatConfig.getUniformAnnotation = (name: string) => {\r\n for (const block of state.sharedData.nodeMaterial.attachedBlocks) {\r\n if (block instanceof InputBlock && block.isUniform && block.associatedVariableName === name) {\r\n return this._generateInputBlockAnnotation(block);\r\n }\r\n if (block instanceof ScreenSizeBlock && block.associatedVariableName === name) {\r\n return this._generateScreenSizeBlockAnnotation();\r\n }\r\n }\r\n return \"\";\r\n };\r\n }\r\n\r\n // Do our best to clean up variable names, as they will be used as display names.\r\n state.sharedData.formatConfig.formatVariablename = (n: string) => {\r\n let name = n;\r\n\r\n const hasUnderscoredPrefix = name.length > 1 && name[1] === \"_\";\r\n if (hasUnderscoredPrefix) {\r\n name = name.substring(2);\r\n }\r\n\r\n return name.replace(/[^a-zA-Z]+/g, \"\");\r\n };\r\n }\r\n\r\n private _generateInputBlockAnnotation(inputBlock: InputBlock): string {\r\n const value = inputBlock.valueCallback ? inputBlock.valueCallback() : inputBlock.value;\r\n return `// { \"default\": ${JSON.stringify(value)} }\\n`;\r\n }\r\n\r\n private _generateScreenSizeBlockAnnotation(): string {\r\n return `// { \"autoBind\": \"outputResolution\" }\\n`;\r\n }\r\n\r\n private _getMainUvName(state: NodeMaterialBuildState): string {\r\n // Get the ScreenUVBlock's name, which is required for SFE and should be vUV.\r\n // NOTE: In the future, when we move to vertex shaders, update this to check for the nearest vec2 varying output.\r\n const screenUv = state.sharedData.nodeMaterial.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"postprocess_uv\");\r\n if (!screenUv || !screenUv.isAnAncestorOf(this)) {\r\n return \"\";\r\n }\r\n return screenUv.associatedVariableName;\r\n }\r\n\r\n protected override _getOutputString(): string {\r\n return \"outColor\";\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const outputString = this._getOutputString();\r\n\r\n state._injectAtTop = `// { \"smartFilterBlockType\": \"${state.sharedData.nodeMaterial.name}\", \"namespace\": \"Babylon.NME.Exports\" }`;\r\n\r\n state._customEntryHeader += `#ifdef ${SfeModeDefine}\\n`;\r\n state._customEntryHeader += `vec4 nmeMain(vec2 ${this._getMainUvName(state)}) { // main\\n`;\r\n state._customEntryHeader += `#else\\n`;\r\n state._customEntryHeader += `void main(void) {\\n`;\r\n state._customEntryHeader += `#endif\\n`;\r\n state._customEntryHeader += `vec4 ${outputString} = vec4(0.0);\\n`;\r\n\r\n state.compilationString += `\\n#ifndef ${SfeModeDefine}\\n`;\r\n state.compilationString += `gl_FragColor = ${outputString};\\n`;\r\n state.compilationString += `#else\\n`;\r\n state.compilationString += `return ${outputString};\\n`;\r\n state.compilationString += `#endif\\n`;\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.SmartFilterFragmentOutputBlock\", SmartFilterFragmentOutputBlock);\r\n"]}
@@ -10,7 +10,7 @@ import { NodeMaterialBuildStateSharedData } from "./nodeMaterialBuildStateShared
10
10
  import { MaterialDefines } from "../../Materials/materialDefines.js";
11
11
  import { VertexBuffer } from "../../Buffers/buffer.js";
12
12
  import { Tools } from "../../Misc/tools.js";
13
- import { SfeModeDefine } from "./Blocks/Dual/smartFilterTextureBlock.js";
13
+ import { SfeModeDefine } from "./Blocks/Fragment/smartFilterFragmentOutputBlock.js";
14
14
  import { TransformBlock } from "./Blocks/transformBlock.js";
15
15
  import { VertexOutputBlock } from "./Blocks/Vertex/vertexOutputBlock.js";
16
16
  import { FragmentOutputBlock } from "./Blocks/Fragment/fragmentOutputBlock.js";