@babylonjs/smart-filters 1.0.12 → 8.18.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 (259) hide show
  1. package/dist/blockFoundation/aggregateBlock.d.ts +3 -3
  2. package/dist/blockFoundation/aggregateBlock.d.ts.map +1 -1
  3. package/dist/blockFoundation/aggregateBlock.js +1 -2
  4. package/dist/blockFoundation/aggregateBlock.js.map +1 -1
  5. package/dist/blockFoundation/baseBlock.d.ts +2 -2
  6. package/dist/blockFoundation/baseBlock.d.ts.map +1 -1
  7. package/dist/blockFoundation/baseBlock.js +5 -6
  8. package/dist/blockFoundation/baseBlock.js.map +1 -1
  9. package/dist/blockFoundation/customAggregateBlock.d.ts.map +1 -1
  10. package/dist/blockFoundation/customAggregateBlock.js +2 -2
  11. package/dist/blockFoundation/customAggregateBlock.js.map +1 -1
  12. package/dist/blockFoundation/customShaderBlock.d.ts.map +1 -1
  13. package/dist/blockFoundation/customShaderBlock.js +4 -6
  14. package/dist/blockFoundation/customShaderBlock.js.map +1 -1
  15. package/dist/blockFoundation/disableableShaderBlock.d.ts.map +1 -1
  16. package/dist/blockFoundation/disableableShaderBlock.js +4 -4
  17. package/dist/blockFoundation/disableableShaderBlock.js.map +1 -1
  18. package/dist/blockFoundation/index.js +0 -2
  19. package/dist/blockFoundation/index.js.map +1 -1
  20. package/dist/blockFoundation/inputBlock.d.ts +8 -8
  21. package/dist/blockFoundation/inputBlock.d.ts.map +1 -1
  22. package/dist/blockFoundation/inputBlock.deserializer.d.ts +1 -1
  23. package/dist/blockFoundation/inputBlock.deserializer.d.ts.map +1 -1
  24. package/dist/blockFoundation/inputBlock.deserializer.js +1 -1
  25. package/dist/blockFoundation/inputBlock.deserializer.js.map +1 -1
  26. package/dist/blockFoundation/inputBlock.js +7 -7
  27. package/dist/blockFoundation/inputBlock.js.map +1 -1
  28. package/dist/blockFoundation/inputBlock.serialization.types.d.ts.map +1 -1
  29. package/dist/blockFoundation/inputBlock.serializer.d.ts +1 -1
  30. package/dist/blockFoundation/inputBlock.serializer.js +26 -28
  31. package/dist/blockFoundation/inputBlock.serializer.js.map +1 -1
  32. package/dist/blockFoundation/outputBlock.d.ts +4 -9
  33. package/dist/blockFoundation/outputBlock.d.ts.map +1 -1
  34. package/dist/blockFoundation/outputBlock.js +13 -14
  35. package/dist/blockFoundation/outputBlock.js.map +1 -1
  36. package/dist/blockFoundation/shaderBlock.d.ts +4 -4
  37. package/dist/blockFoundation/shaderBlock.d.ts.map +1 -1
  38. package/dist/blockFoundation/shaderBlock.js +13 -19
  39. package/dist/blockFoundation/shaderBlock.js.map +1 -1
  40. package/dist/blockFoundation/textureOptions.d.ts +1 -1
  41. package/dist/blockFoundation/textureOptions.js +1 -1
  42. package/dist/command/command.d.ts +1 -1
  43. package/dist/command/command.js +1 -1
  44. package/dist/command/commandBuffer.d.ts +1 -1
  45. package/dist/command/commandBuffer.d.ts.map +1 -1
  46. package/dist/command/commandBuffer.js +2 -2
  47. package/dist/command/commandBufferDebugger.d.ts +2 -2
  48. package/dist/command/commandBufferDebugger.d.ts.map +1 -1
  49. package/dist/command/commandBufferDebugger.js +1 -1
  50. package/dist/command/commandBufferDebugger.js.map +1 -1
  51. package/dist/command/index.d.ts +3 -1
  52. package/dist/command/index.d.ts.map +1 -1
  53. package/dist/command/index.js +5 -1
  54. package/dist/command/index.js.map +1 -1
  55. package/dist/connection/connectionPoint.d.ts +3 -3
  56. package/dist/connection/connectionPoint.d.ts.map +1 -1
  57. package/dist/connection/connectionPoint.js +2 -2
  58. package/dist/connection/connectionPoint.js.map +1 -1
  59. package/dist/connection/connectionPointCompatibilityState.d.ts +1 -1
  60. package/dist/connection/connectionPointCompatibilityState.js +1 -1
  61. package/dist/connection/connectionPointType.d.ts +3 -3
  62. package/dist/connection/connectionPointType.d.ts.map +1 -1
  63. package/dist/connection/connectionPointWithDefault.d.ts +3 -3
  64. package/dist/connection/connectionPointWithDefault.d.ts.map +1 -1
  65. package/dist/connection/connectionPointWithDefault.js.map +1 -1
  66. package/dist/connection/index.d.ts +2 -1
  67. package/dist/connection/index.d.ts.map +1 -1
  68. package/dist/connection/index.js +3 -3
  69. package/dist/connection/index.js.map +1 -1
  70. package/dist/editorUtils/editableInPropertyPage.d.ts +2 -2
  71. package/dist/editorUtils/editableInPropertyPage.d.ts.map +1 -1
  72. package/dist/editorUtils/editableInPropertyPage.js +2 -2
  73. package/dist/editorUtils/editableInPropertyPage.js.map +1 -1
  74. package/dist/editorUtils/index.d.ts +1 -0
  75. package/dist/editorUtils/index.d.ts.map +1 -1
  76. package/dist/editorUtils/index.js +2 -0
  77. package/dist/editorUtils/index.js.map +1 -1
  78. package/dist/index.d.ts.map +1 -1
  79. package/dist/index.js +1 -1
  80. package/dist/index.js.map +1 -1
  81. package/dist/optimization/dependencyGraph.js.map +1 -1
  82. package/dist/optimization/optimizedShaderBlock.d.ts +4 -4
  83. package/dist/optimization/optimizedShaderBlock.d.ts.map +1 -1
  84. package/dist/optimization/optimizedShaderBlock.js.map +1 -1
  85. package/dist/optimization/smartFilterOptimizer.d.ts +2 -2
  86. package/dist/optimization/smartFilterOptimizer.d.ts.map +1 -1
  87. package/dist/optimization/smartFilterOptimizer.js +34 -57
  88. package/dist/optimization/smartFilterOptimizer.js.map +1 -1
  89. package/dist/runtime/index.d.ts +2 -1
  90. package/dist/runtime/index.d.ts.map +1 -1
  91. package/dist/runtime/index.js +3 -3
  92. package/dist/runtime/index.js.map +1 -1
  93. package/dist/runtime/renderTargetGenerator.d.ts +1 -1
  94. package/dist/runtime/renderTargetGenerator.d.ts.map +1 -1
  95. package/dist/runtime/renderTargetGenerator.js +5 -7
  96. package/dist/runtime/renderTargetGenerator.js.map +1 -1
  97. package/dist/runtime/shaderRuntime.d.ts +7 -7
  98. package/dist/runtime/shaderRuntime.d.ts.map +1 -1
  99. package/dist/runtime/shaderRuntime.js +7 -8
  100. package/dist/runtime/shaderRuntime.js.map +1 -1
  101. package/dist/runtime/smartFilterRuntime.d.ts +3 -3
  102. package/dist/runtime/smartFilterRuntime.d.ts.map +1 -1
  103. package/dist/runtime/smartFilterRuntime.js.map +1 -1
  104. package/dist/runtime/strongRef.d.ts +1 -1
  105. package/dist/runtime/strongRef.js +1 -1
  106. package/dist/serialization/importCustomBlockDefinition.d.ts +1 -1
  107. package/dist/serialization/importCustomBlockDefinition.js +8 -9
  108. package/dist/serialization/importCustomBlockDefinition.js.map +1 -1
  109. package/dist/serialization/index.d.ts +1 -0
  110. package/dist/serialization/index.d.ts.map +1 -1
  111. package/dist/serialization/index.js +3 -0
  112. package/dist/serialization/index.js.map +1 -1
  113. package/dist/serialization/serializedBlockDefinition.d.ts +2 -2
  114. package/dist/serialization/serializedBlockDefinition.d.ts.map +1 -1
  115. package/dist/serialization/serializedShaderBlockDefinition.d.ts +1 -1
  116. package/dist/serialization/serializedShaderBlockDefinition.d.ts.map +1 -1
  117. package/dist/serialization/serializedSmartFilter.d.ts +1 -1
  118. package/dist/serialization/serializedSmartFilter.d.ts.map +1 -1
  119. package/dist/serialization/smartFilterDeserializer.d.ts +6 -6
  120. package/dist/serialization/smartFilterDeserializer.d.ts.map +1 -1
  121. package/dist/serialization/smartFilterDeserializer.js +14 -12
  122. package/dist/serialization/smartFilterDeserializer.js.map +1 -1
  123. package/dist/serialization/smartFilterSerializer.d.ts +2 -2
  124. package/dist/serialization/smartFilterSerializer.d.ts.map +1 -1
  125. package/dist/serialization/smartFilterSerializer.js +10 -13
  126. package/dist/serialization/smartFilterSerializer.js.map +1 -1
  127. package/dist/serialization/v1/defaultBlockSerializer.d.ts +2 -2
  128. package/dist/serialization/v1/defaultBlockSerializer.d.ts.map +1 -1
  129. package/dist/serialization/v1/defaultBlockSerializer.js +3 -1
  130. package/dist/serialization/v1/defaultBlockSerializer.js.map +1 -1
  131. package/dist/serialization/v1/index.d.ts +1 -0
  132. package/dist/serialization/v1/index.d.ts.map +1 -1
  133. package/dist/serialization/v1/index.js +2 -0
  134. package/dist/serialization/v1/index.js.map +1 -1
  135. package/dist/serialization/v1/shaderBlockSerialization.types.d.ts +3 -3
  136. package/dist/serialization/v1/shaderBlockSerialization.types.d.ts.map +1 -1
  137. package/dist/serialization/v1/smartFilterSerialization.types.d.ts +5 -2
  138. package/dist/serialization/v1/smartFilterSerialization.types.d.ts.map +1 -1
  139. package/dist/smartFilter.d.ts +8 -8
  140. package/dist/smartFilter.d.ts.map +1 -1
  141. package/dist/smartFilter.js +6 -7
  142. package/dist/smartFilter.js.map +1 -1
  143. package/dist/utils/buildTools/buildShaders.d.ts +3 -2
  144. package/dist/utils/buildTools/buildShaders.d.ts.map +1 -1
  145. package/dist/utils/buildTools/buildShaders.js +7 -6
  146. package/dist/utils/buildTools/buildShaders.js.map +1 -1
  147. package/dist/utils/buildTools/convertGlslIntoBlock.d.ts +4 -2
  148. package/dist/utils/buildTools/convertGlslIntoBlock.d.ts.map +1 -1
  149. package/dist/utils/buildTools/convertGlslIntoBlock.js +136 -141
  150. package/dist/utils/buildTools/convertGlslIntoBlock.js.map +1 -1
  151. package/dist/utils/buildTools/convertGlslIntoShaderProgram.d.ts +4 -4
  152. package/dist/utils/buildTools/convertGlslIntoShaderProgram.d.ts.map +1 -1
  153. package/dist/utils/buildTools/convertGlslIntoShaderProgram.js +55 -48
  154. package/dist/utils/buildTools/convertGlslIntoShaderProgram.js.map +1 -1
  155. package/dist/utils/buildTools/convertShaders.d.ts +8 -5
  156. package/dist/utils/buildTools/convertShaders.d.ts.map +1 -1
  157. package/dist/utils/buildTools/convertShaders.js +38 -14
  158. package/dist/utils/buildTools/convertShaders.js.map +1 -1
  159. package/dist/utils/buildTools/shaderConverter.d.ts +4 -4
  160. package/dist/utils/buildTools/shaderConverter.d.ts.map +1 -1
  161. package/dist/utils/buildTools/shaderConverter.js +17 -21
  162. package/dist/utils/buildTools/shaderConverter.js.map +1 -1
  163. package/dist/utils/buildTools/watchShaders.d.ts +3 -2
  164. package/dist/utils/buildTools/watchShaders.d.ts.map +1 -1
  165. package/dist/utils/buildTools/watchShaders.js +10 -8
  166. package/dist/utils/buildTools/watchShaders.js.map +1 -1
  167. package/dist/utils/index.d.ts +1 -0
  168. package/dist/utils/index.d.ts.map +1 -1
  169. package/dist/utils/index.js +2 -1
  170. package/dist/utils/index.js.map +1 -1
  171. package/dist/utils/renderTargetUtils.d.ts +3 -3
  172. package/dist/utils/renderTargetUtils.d.ts.map +1 -1
  173. package/dist/utils/renderTargetUtils.js +4 -4
  174. package/dist/utils/renderTargetUtils.js.map +1 -1
  175. package/dist/utils/shaderCodeUtils.d.ts +8 -8
  176. package/dist/utils/shaderCodeUtils.d.ts.map +1 -1
  177. package/dist/utils/shaderCodeUtils.js +16 -28
  178. package/dist/utils/shaderCodeUtils.js.map +1 -1
  179. package/dist/utils/textureLoaders.d.ts +2 -2
  180. package/dist/utils/textureLoaders.d.ts.map +1 -1
  181. package/dist/utils/textureLoaders.js +2 -3
  182. package/dist/utils/textureLoaders.js.map +1 -1
  183. package/dist/utils/textureUtils.d.ts +5 -5
  184. package/dist/utils/textureUtils.d.ts.map +1 -1
  185. package/dist/utils/textureUtils.js +1 -1
  186. package/dist/utils/textureUtils.js.map +1 -1
  187. package/dist/version.d.ts +2 -2
  188. package/dist/version.js +2 -2
  189. package/license.md +21 -21
  190. package/package.json +14 -9
  191. package/src/blockFoundation/aggregateBlock.ts +148 -151
  192. package/src/blockFoundation/baseBlock.ts +339 -364
  193. package/src/blockFoundation/customAggregateBlock.ts +88 -104
  194. package/src/blockFoundation/customShaderBlock.ts +312 -326
  195. package/src/blockFoundation/disableableShaderBlock.ts +91 -100
  196. package/src/blockFoundation/index.ts +9 -9
  197. package/src/blockFoundation/inputBlock.deserializer.ts +72 -97
  198. package/src/blockFoundation/inputBlock.serialization.types.ts +126 -132
  199. package/src/blockFoundation/inputBlock.serializer.ts +150 -150
  200. package/src/blockFoundation/inputBlock.ts +181 -192
  201. package/src/blockFoundation/outputBlock.ts +144 -151
  202. package/src/blockFoundation/shaderBlock.ts +156 -163
  203. package/src/blockFoundation/textureOptions.ts +57 -57
  204. package/src/command/command.ts +59 -59
  205. package/src/command/commandBuffer.ts +71 -71
  206. package/src/command/commandBufferDebugger.ts +14 -14
  207. package/src/command/index.ts +7 -3
  208. package/src/connection/connectionPoint.ts +205 -214
  209. package/src/connection/connectionPointCompatibilityState.ts +31 -31
  210. package/src/connection/connectionPointType.ts +45 -45
  211. package/src/connection/connectionPointWithDefault.ts +27 -35
  212. package/src/connection/index.ts +8 -9
  213. package/src/editorUtils/editableInPropertyPage.ts +106 -106
  214. package/src/editorUtils/index.ts +3 -1
  215. package/src/index.ts +16 -15
  216. package/src/optimization/dependencyGraph.ts +96 -96
  217. package/src/optimization/index.ts +1 -1
  218. package/src/optimization/optimizedShaderBlock.ts +131 -134
  219. package/src/optimization/smartFilterOptimizer.ts +757 -825
  220. package/src/runtime/index.ts +8 -6
  221. package/src/runtime/renderTargetGenerator.ts +222 -248
  222. package/src/runtime/shaderRuntime.ts +174 -173
  223. package/src/runtime/smartFilterRuntime.ts +112 -112
  224. package/src/runtime/strongRef.ts +18 -18
  225. package/src/serialization/importCustomBlockDefinition.ts +86 -86
  226. package/src/serialization/index.ts +10 -7
  227. package/src/serialization/serializedBlockDefinition.ts +12 -12
  228. package/src/serialization/serializedShaderBlockDefinition.ts +7 -7
  229. package/src/serialization/serializedSmartFilter.ts +6 -6
  230. package/src/serialization/smartFilterDeserializer.ts +190 -214
  231. package/src/serialization/smartFilterSerializer.ts +110 -121
  232. package/src/serialization/v1/defaultBlockSerializer.ts +21 -19
  233. package/src/serialization/v1/index.ts +4 -2
  234. package/src/serialization/v1/shaderBlockSerialization.types.ts +85 -85
  235. package/src/serialization/v1/smartFilterSerialization.types.ts +129 -129
  236. package/src/smartFilter.ts +255 -260
  237. package/src/utils/buildTools/buildShaders.ts +14 -13
  238. package/src/utils/buildTools/convertGlslIntoBlock.ts +370 -385
  239. package/src/utils/buildTools/convertGlslIntoShaderProgram.ts +173 -172
  240. package/src/utils/buildTools/convertShaders.ts +65 -43
  241. package/src/utils/buildTools/recordVersionNumber.js +17 -0
  242. package/src/utils/buildTools/shaderConverter.ts +466 -478
  243. package/src/utils/buildTools/watchShaders.ts +44 -42
  244. package/src/utils/index.ts +4 -2
  245. package/src/utils/renderTargetUtils.ts +30 -35
  246. package/src/utils/shaderCodeUtils.ts +192 -207
  247. package/src/utils/textureLoaders.ts +31 -43
  248. package/src/utils/textureUtils.ts +28 -32
  249. package/src/version.ts +2 -2
  250. package/dist/utils/buildTools/determineVersion.d.ts +0 -36
  251. package/dist/utils/buildTools/determineVersion.d.ts.map +0 -1
  252. package/dist/utils/buildTools/determineVersion.js +0 -109
  253. package/dist/utils/buildTools/determineVersion.js.map +0 -1
  254. package/dist/utils/buildTools/versionUp.d.ts +0 -2
  255. package/dist/utils/buildTools/versionUp.d.ts.map +0 -1
  256. package/dist/utils/buildTools/versionUp.js +0 -53
  257. package/dist/utils/buildTools/versionUp.js.map +0 -1
  258. package/src/utils/buildTools/determineVersion.ts +0 -128
  259. package/src/utils/buildTools/versionUp.ts +0 -61
@@ -1,121 +1,110 @@
1
- import type { SmartFilter } from "../smartFilter";
2
- import type { BaseBlock } from "../blockFoundation/baseBlock";
3
- import { inputBlockSerializer } from "../blockFoundation/inputBlock.serializer.js";
4
- import type { ConnectionPoint } from "../connection/connectionPoint";
5
- import { defaultBlockSerializer } from "./v1/defaultBlockSerializer.js";
6
- import { OutputBlock } from "../blockFoundation/outputBlock.js";
7
- import type {
8
- IBlockSerializerV1,
9
- ISerializedBlockV1,
10
- ISerializedConnectionV1,
11
- SerializeBlockV1,
12
- SerializedSmartFilterV1,
13
- } from "./v1/smartFilterSerialization.types";
14
- import { CustomShaderBlock } from "../blockFoundation/customShaderBlock.js";
15
- import { CustomAggregateBlock } from "../blockFoundation/customAggregateBlock.js";
16
-
17
- /**
18
- * Determines if two serialized connection points are equivalent to each other
19
- * @param a - The first connection point to compare
20
- * @param b - The second connection point to compare
21
- * @returns True if the connection points are equivalent, false otherwise
22
- */
23
- function serializedConnectionPointsEqual(a: ISerializedConnectionV1, b: ISerializedConnectionV1): boolean {
24
- return (
25
- a.inputBlock === b.inputBlock &&
26
- a.inputConnectionPoint === b.inputConnectionPoint &&
27
- a.outputBlock === b.outputBlock &&
28
- a.outputConnectionPoint === b.outputConnectionPoint
29
- );
30
- }
31
-
32
- /**
33
- * Serializes SmartFilters using the latest SmartFilter serialization version.
34
- * The caller passes in information necessary to serialize the blocks in the SmartFilter.
35
- * This allows the caller to provide custom serializers for blocks beyond the core blocks.
36
- */
37
- export class SmartFilterSerializer {
38
- private readonly _blockSerializers: Map<string, SerializeBlockV1> = new Map();
39
-
40
- /**
41
- * Creates a new SmartFilterSerializer
42
- * @param blocksUsingDefaultSerialization - A list of the blockType of blocks which can use default serialization (they only have ConnectionPoint properties and no constructor parameters)
43
- * @param additionalBlockSerializers - An array of block serializers to use, beyond those for the core blocks
44
- */
45
- public constructor(blocksUsingDefaultSerialization: string[], additionalBlockSerializers: IBlockSerializerV1[]) {
46
- this._blockSerializers.set(inputBlockSerializer.blockType, inputBlockSerializer.serialize);
47
- this._blockSerializers.set(OutputBlock.ClassName, defaultBlockSerializer);
48
- blocksUsingDefaultSerialization.forEach((block) => {
49
- this._blockSerializers.set(block, defaultBlockSerializer);
50
- });
51
- additionalBlockSerializers.forEach((serializer) =>
52
- this._blockSerializers.set(serializer.blockType, serializer.serialize)
53
- );
54
- }
55
-
56
- /**
57
- * Serializes a SmartFilter to a JSON object of the latest version
58
- * @param smartFilter - The SmartFilter to serialize
59
- * @returns The serialized SmartFilter
60
- */
61
- public serialize(smartFilter: SmartFilter): SerializedSmartFilterV1 {
62
- const connections: ISerializedConnectionV1[] = [];
63
-
64
- const blocks = smartFilter.attachedBlocks.map((block: BaseBlock) => {
65
- // Serialize the block itself
66
- const blockClassName = block.getClassName();
67
- const serializeFn =
68
- blockClassName === CustomShaderBlock.ClassName || blockClassName === CustomAggregateBlock.ClassName
69
- ? defaultBlockSerializer
70
- : this._blockSerializers.get(block.blockType);
71
- if (!serializeFn) {
72
- throw new Error(`No serializer was provided for a block of type ${block.blockType}`);
73
- }
74
- const serializedBlock: ISerializedBlockV1 = serializeFn(block);
75
-
76
- // Serialize the connections to the inputs
77
- block.inputs.forEach((input: ConnectionPoint) => {
78
- const connectedTo = input.connectedTo;
79
- if (connectedTo) {
80
- const newConnection: ISerializedConnectionV1 = {
81
- inputBlock: block.uniqueId,
82
- inputConnectionPoint: input.name,
83
- outputBlock: connectedTo.ownerBlock.uniqueId,
84
- outputConnectionPoint: connectedTo.name,
85
- };
86
- if (!connections.find((other) => serializedConnectionPointsEqual(newConnection, other))) {
87
- connections.push(newConnection);
88
- }
89
- }
90
- });
91
-
92
- // Serialize the connections to the outputs
93
- block.outputs.forEach((output: ConnectionPoint) => {
94
- output.endpoints.forEach((input: ConnectionPoint) => {
95
- const newConnection: ISerializedConnectionV1 = {
96
- inputBlock: input.ownerBlock.uniqueId,
97
- inputConnectionPoint: input.name,
98
- outputBlock: block.uniqueId,
99
- outputConnectionPoint: output.name,
100
- };
101
- if (!connections.find((other) => serializedConnectionPointsEqual(newConnection, other))) {
102
- connections.push(newConnection);
103
- }
104
- });
105
- });
106
-
107
- return serializedBlock;
108
- });
109
-
110
- return {
111
- format: "smartFilter",
112
- formatVersion: 1,
113
- name: smartFilter.name,
114
- namespace: smartFilter.namespace,
115
- comments: smartFilter.comments,
116
- editorData: smartFilter.editorData,
117
- blocks,
118
- connections,
119
- };
120
- }
121
- }
1
+ import type { SmartFilter } from "../smartFilter.js";
2
+ import type { BaseBlock } from "../blockFoundation/baseBlock.js";
3
+ import { InputBlockSerializer } from "../blockFoundation/inputBlock.serializer.js";
4
+ import type { ConnectionPoint } from "../connection/connectionPoint.js";
5
+ import { DefaultBlockSerializer } from "./v1/defaultBlockSerializer.js";
6
+ import { OutputBlock } from "../blockFoundation/outputBlock.js";
7
+ import type { IBlockSerializerV1, ISerializedBlockV1, ISerializedConnectionV1, SerializeBlockV1, SerializedSmartFilterV1 } from "./v1/smartFilterSerialization.types.js";
8
+ import { CustomShaderBlock } from "../blockFoundation/customShaderBlock.js";
9
+ import { CustomAggregateBlock } from "../blockFoundation/customAggregateBlock.js";
10
+
11
+ /**
12
+ * Determines if two serialized connection points are equivalent to each other
13
+ * @param a - The first connection point to compare
14
+ * @param b - The second connection point to compare
15
+ * @returns True if the connection points are equivalent, false otherwise
16
+ */
17
+ function SerializedConnectionPointsEqual(a: ISerializedConnectionV1, b: ISerializedConnectionV1): boolean {
18
+ return (
19
+ a.inputBlock === b.inputBlock && a.inputConnectionPoint === b.inputConnectionPoint && a.outputBlock === b.outputBlock && a.outputConnectionPoint === b.outputConnectionPoint
20
+ );
21
+ }
22
+
23
+ /**
24
+ * Serializes SmartFilters using the latest SmartFilter serialization version.
25
+ * The caller passes in information necessary to serialize the blocks in the SmartFilter.
26
+ * This allows the caller to provide custom serializers for blocks beyond the core blocks.
27
+ */
28
+ export class SmartFilterSerializer {
29
+ private readonly _blockSerializers: Map<string, SerializeBlockV1> = new Map();
30
+
31
+ /**
32
+ * Creates a new SmartFilterSerializer
33
+ * @param blocksUsingDefaultSerialization - A list of the blockType of blocks which can use default serialization (they only have ConnectionPoint properties and no constructor parameters)
34
+ * @param additionalBlockSerializers - An array of block serializers to use, beyond those for the core blocks
35
+ */
36
+ public constructor(blocksUsingDefaultSerialization: string[], additionalBlockSerializers: IBlockSerializerV1[]) {
37
+ this._blockSerializers.set(InputBlockSerializer.blockType, InputBlockSerializer.serialize);
38
+ this._blockSerializers.set(OutputBlock.ClassName, DefaultBlockSerializer);
39
+ blocksUsingDefaultSerialization.forEach((block) => {
40
+ this._blockSerializers.set(block, DefaultBlockSerializer);
41
+ });
42
+ additionalBlockSerializers.forEach((serializer) => this._blockSerializers.set(serializer.blockType, serializer.serialize));
43
+ }
44
+
45
+ /**
46
+ * Serializes a SmartFilter to a JSON object of the latest version
47
+ * @param smartFilter - The SmartFilter to serialize
48
+ * @returns The serialized SmartFilter
49
+ */
50
+ public serialize(smartFilter: SmartFilter): SerializedSmartFilterV1 {
51
+ const connections: ISerializedConnectionV1[] = [];
52
+
53
+ const blocks = smartFilter.attachedBlocks.map((block: BaseBlock) => {
54
+ // Serialize the block itself
55
+ const blockClassName = block.getClassName();
56
+ const serializeFn =
57
+ blockClassName === CustomShaderBlock.ClassName || blockClassName === CustomAggregateBlock.ClassName
58
+ ? DefaultBlockSerializer
59
+ : this._blockSerializers.get(block.blockType);
60
+ if (!serializeFn) {
61
+ throw new Error(`No serializer was provided for a block of type ${block.blockType}`);
62
+ }
63
+ const serializedBlock: ISerializedBlockV1 = serializeFn(block);
64
+
65
+ // Serialize the connections to the inputs
66
+ block.inputs.forEach((input: ConnectionPoint) => {
67
+ const connectedTo = input.connectedTo;
68
+ if (connectedTo) {
69
+ const newConnection: ISerializedConnectionV1 = {
70
+ inputBlock: block.uniqueId,
71
+ inputConnectionPoint: input.name,
72
+ outputBlock: connectedTo.ownerBlock.uniqueId,
73
+ outputConnectionPoint: connectedTo.name,
74
+ };
75
+ if (!connections.find((other) => SerializedConnectionPointsEqual(newConnection, other))) {
76
+ connections.push(newConnection);
77
+ }
78
+ }
79
+ });
80
+
81
+ // Serialize the connections to the outputs
82
+ block.outputs.forEach((output: ConnectionPoint) => {
83
+ output.endpoints.forEach((input: ConnectionPoint) => {
84
+ const newConnection: ISerializedConnectionV1 = {
85
+ inputBlock: input.ownerBlock.uniqueId,
86
+ inputConnectionPoint: input.name,
87
+ outputBlock: block.uniqueId,
88
+ outputConnectionPoint: output.name,
89
+ };
90
+ if (!connections.find((other) => SerializedConnectionPointsEqual(newConnection, other))) {
91
+ connections.push(newConnection);
92
+ }
93
+ });
94
+ });
95
+
96
+ return serializedBlock;
97
+ });
98
+
99
+ return {
100
+ format: "smartFilter",
101
+ formatVersion: 1,
102
+ name: smartFilter.name,
103
+ namespace: smartFilter.namespace,
104
+ comments: smartFilter.comments,
105
+ editorData: smartFilter.editorData,
106
+ blocks,
107
+ connections,
108
+ };
109
+ }
110
+ }
@@ -1,19 +1,21 @@
1
- import type { BaseBlock } from "../../blockFoundation/baseBlock";
2
- import type { ISerializedBlockV1, SerializeBlockV1 } from "./smartFilterSerialization.types";
3
-
4
- /**
5
- * The default V1 block serializer which can be used for any block that relies only on ConnectionPoints
6
- * and does not have any constructor parameters or class properties that need to be serialized.
7
- * @param block - The block to serialize
8
- * @returns The serialized block
9
- */
10
- export const defaultBlockSerializer: SerializeBlockV1 = (block: BaseBlock): ISerializedBlockV1 => {
11
- return {
12
- name: block.name,
13
- uniqueId: block.uniqueId,
14
- blockType: block.blockType,
15
- namespace: block.namespace,
16
- comments: block.comments,
17
- data: undefined,
18
- };
19
- };
1
+ import { ShaderBlock } from "../../blockFoundation/shaderBlock.js";
2
+ import type { BaseBlock } from "../../blockFoundation/baseBlock.js";
3
+ import type { ISerializedBlockV1, SerializeBlockV1 } from "./smartFilterSerialization.types.js";
4
+
5
+ /**
6
+ * The default V1 block serializer which can be used for any block that relies only on ConnectionPoints
7
+ * and does not have any constructor parameters or class properties that need to be serialized.
8
+ * @param block - The block to serialize
9
+ * @returns The serialized block
10
+ */
11
+ export const DefaultBlockSerializer: SerializeBlockV1 = (block: BaseBlock): ISerializedBlockV1 => {
12
+ return {
13
+ name: block.name,
14
+ uniqueId: block.uniqueId,
15
+ blockType: block.blockType,
16
+ namespace: block.namespace,
17
+ comments: block.comments,
18
+ data: undefined,
19
+ outputTextureOptions: block instanceof ShaderBlock ? block.outputTextureOptions : undefined,
20
+ };
21
+ };
@@ -1,2 +1,4 @@
1
- export * from "./defaultBlockSerializer.js";
2
- export * from "./smartFilterSerialization.types.js";
1
+ export * from "./defaultBlockSerializer.js";
2
+ // Back compat for when camelCase was used
3
+ export { DefaultBlockSerializer as defaultBlockSerializer } from "./defaultBlockSerializer.js";
4
+ export * from "./smartFilterSerialization.types.js";
@@ -1,85 +1,85 @@
1
- /**
2
- * ----------------------------------------------------------------------------
3
- * Data Types Used For Block Serialization
4
- * ----------------------------------------------------------------------------
5
- */
6
-
7
- import type { Nullable } from "@babylonjs/core/types";
8
- import type { AllConnectionPointTypes, ConnectionPointValue } from "../../connection/connectionPointType";
9
- import type { ShaderProgram } from "../../utils/shaderCodeUtils";
10
-
11
- /**
12
- * The V1 definition of a serialized shader block. This block definition is loaded by a CustomShaderBlock and defines how a
13
- * blockType works. This should not be confused with an ISerializedBockV1, which is a serialized instance of a block in a
14
- * serialized SmartFilter graph. It is referenced by blockType in a serialized SmartFilter.
15
- */
16
- export type SerializedShaderBlockDefinitionV1 = {
17
- /**
18
- * Which type of serialized data this is.
19
- */
20
- format: "shaderBlockDefinition";
21
-
22
- /**
23
- * The version of the block definition format (format of the serialized data, not the version of the block definition itself).
24
- */
25
- formatVersion: 1;
26
-
27
- /**
28
- * The type used to refer to the block in serialized SmartFilters and in the editor UI.
29
- * The application doing the deserialization will use this to instantiate the correct block definition.
30
- * Block types are expected to be unique and their behavior should be semantically equivalent across implementations
31
- * (their results must be similar enough that the differences are not perceivable).
32
- */
33
- blockType: string;
34
-
35
- /**
36
- * The namespace of the block, which is used to reduce name collisions between blocks and also to group blocks in the editor UI.
37
- * By convention, sub namespaces are separated by a period (e.g. "Babylon.Demo.Effects").
38
- */
39
- namespace: Nullable<string>;
40
-
41
- /**
42
- * The shader program for the block.
43
- */
44
- shaderProgram: ShaderProgram;
45
-
46
- /**
47
- * The input connection points of the block.
48
- */
49
- inputConnectionPoints: SerializedInputConnectionPointV1[];
50
-
51
- /**
52
- * If true, the optimizer will not attempt to optimize this block.
53
- */
54
- disableOptimization: boolean;
55
- };
56
-
57
- /**
58
- * Possible V1 auto bind values for input connection points.
59
- */
60
- export type InputAutoBindV1 = "outputResolution" | "outputAspectRatio";
61
-
62
- /**
63
- * A V1 input connection point of a serialized block definition.
64
- */
65
- export type SerializedInputConnectionPointV1<U extends AllConnectionPointTypes = AllConnectionPointTypes> = {
66
- /**
67
- * The name of the connection point.
68
- */
69
- name: string;
70
-
71
- /**
72
- * The type of the connection point.
73
- */
74
- type: U;
75
-
76
- /**
77
- * The optional default value of the connection point.
78
- */
79
- defaultValue?: ConnectionPointValue<U>;
80
-
81
- /**
82
- * If supplied, the input will be automatically bound to this value, instead of creating an input connection point.
83
- */
84
- autoBind?: InputAutoBindV1;
85
- };
1
+ /**
2
+ * ----------------------------------------------------------------------------
3
+ * Data Types Used For Block Serialization
4
+ * ----------------------------------------------------------------------------
5
+ */
6
+
7
+ import type { Nullable } from "core/types.js";
8
+ import type { AllConnectionPointTypes, ConnectionPointValue } from "../../connection/connectionPointType.js";
9
+ import type { ShaderProgram } from "../../utils/shaderCodeUtils.js";
10
+
11
+ /**
12
+ * The V1 definition of a serialized shader block. This block definition is loaded by a CustomShaderBlock and defines how a
13
+ * blockType works. This should not be confused with an ISerializedBockV1, which is a serialized instance of a block in a
14
+ * serialized SmartFilter graph. It is referenced by blockType in a serialized SmartFilter.
15
+ */
16
+ export type SerializedShaderBlockDefinitionV1 = {
17
+ /**
18
+ * Which type of serialized data this is.
19
+ */
20
+ format: "shaderBlockDefinition";
21
+
22
+ /**
23
+ * The version of the block definition format (format of the serialized data, not the version of the block definition itself).
24
+ */
25
+ formatVersion: 1;
26
+
27
+ /**
28
+ * The type used to refer to the block in serialized SmartFilters and in the editor UI.
29
+ * The application doing the deserialization will use this to instantiate the correct block definition.
30
+ * Block types are expected to be unique and their behavior should be semantically equivalent across implementations
31
+ * (their results must be similar enough that the differences are not perceivable).
32
+ */
33
+ blockType: string;
34
+
35
+ /**
36
+ * The namespace of the block, which is used to reduce name collisions between blocks and also to group blocks in the editor UI.
37
+ * By convention, sub namespaces are separated by a period (e.g. "Babylon.Demo.Effects").
38
+ */
39
+ namespace: Nullable<string>;
40
+
41
+ /**
42
+ * The shader program for the block.
43
+ */
44
+ shaderProgram: ShaderProgram;
45
+
46
+ /**
47
+ * The input connection points of the block.
48
+ */
49
+ inputConnectionPoints: SerializedInputConnectionPointV1[];
50
+
51
+ /**
52
+ * If true, the optimizer will not attempt to optimize this block.
53
+ */
54
+ disableOptimization: boolean;
55
+ };
56
+
57
+ /**
58
+ * Possible V1 auto bind values for input connection points.
59
+ */
60
+ export type InputAutoBindV1 = "outputResolution" | "outputAspectRatio";
61
+
62
+ /**
63
+ * A V1 input connection point of a serialized block definition.
64
+ */
65
+ export type SerializedInputConnectionPointV1<U extends AllConnectionPointTypes = AllConnectionPointTypes> = {
66
+ /**
67
+ * The name of the connection point.
68
+ */
69
+ name: string;
70
+
71
+ /**
72
+ * The type of the connection point.
73
+ */
74
+ type: U;
75
+
76
+ /**
77
+ * The optional default value of the connection point.
78
+ */
79
+ defaultValue?: ConnectionPointValue<U>;
80
+
81
+ /**
82
+ * If supplied, the input will be automatically bound to this value, instead of creating an input connection point.
83
+ */
84
+ autoBind?: InputAutoBindV1;
85
+ };