@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,42 +1,44 @@
1
- /* eslint-disable no-console */
2
- /**
3
- * Watches all .glsl files under <shaderPath> and rebuilds them when changed.
4
- * @param shaderPath - The path to the shaders to watch
5
- * @param importPath - The path to import the converted shaders
6
- * @example node watchShaders.js <shaderPath> <importPath>
7
- */
8
-
9
- import { watch } from "chokidar";
10
- import { extname } from "path";
11
- import { convertShader } from "./convertShaders.js";
12
-
13
- const externalArguments = process.argv.slice(2);
14
- if (externalArguments.length >= 2 && externalArguments[0] && externalArguments[1]) {
15
- const shaderPath = externalArguments[0];
16
- const importPath = externalArguments[1];
17
-
18
- watch(shaderPath).on("all", (event, file) => {
19
- // Only process file changes and added files
20
- if (event !== "change" && event !== "add") {
21
- return;
22
- }
23
-
24
- // Only process .glsl files
25
- if (extname(file) !== ".glsl") {
26
- return;
27
- }
28
-
29
- console.log(`Change detected. Starting conversion...`);
30
-
31
- // Wrap in try-catch to prevent the watcher from crashing
32
- // if the new shader changes are invalid
33
- try {
34
- convertShader(file, importPath);
35
- console.log(`Successfully updated shader ${file}`);
36
- } catch (error) {
37
- console.error(`Failed to convert shader ${file}: ${error}`);
38
- }
39
-
40
- console.log(`Watching for changes in ${shaderPath}...`);
41
- });
42
- }
1
+ /* eslint-disable no-console */
2
+ /**
3
+ * Watches all .glsl files under <shaderPath> and rebuilds them when changed.
4
+ * @param shaderPath - The path to the shaders to watch
5
+ * @param smartFiltersCorePath - The path to import the Smart Filters core from
6
+ * @param babylonCorePath - The path to import the Babylon core from (optional)
7
+ * @example node watchShaders.js <shaderPath> @babylonjs/smart-filters
8
+ */
9
+
10
+ import { watch } from "chokidar";
11
+ import { extname } from "path";
12
+ import { ConvertShader } from "./convertShaders.js";
13
+
14
+ const ExternalArguments = process.argv.slice(2);
15
+ if (ExternalArguments.length >= 2 && ExternalArguments[0] && ExternalArguments[1]) {
16
+ const shaderPath = ExternalArguments[0];
17
+ const smartFiltersCorePath = ExternalArguments[1];
18
+ const babylonCorePath = ExternalArguments[2];
19
+
20
+ watch(shaderPath).on("all", (event, file) => {
21
+ // Only process file changes and added files
22
+ if (event !== "change" && event !== "add") {
23
+ return;
24
+ }
25
+
26
+ // Only process .glsl files
27
+ if (extname(file) !== ".glsl") {
28
+ return;
29
+ }
30
+
31
+ console.log(`Change detected. Starting conversion...`);
32
+
33
+ // Wrap in try-catch to prevent the watcher from crashing
34
+ // if the new shader changes are invalid
35
+ try {
36
+ ConvertShader(file, smartFiltersCorePath, babylonCorePath);
37
+ console.log(`Successfully updated shader ${file}`);
38
+ } catch (error) {
39
+ console.error(`Failed to convert shader ${file}: ${error}`);
40
+ }
41
+
42
+ console.log(`Watching for changes in ${shaderPath}...`);
43
+ });
44
+ }
@@ -1,2 +1,4 @@
1
- export * from "./textureLoaders.js";
2
- export { type ShaderProgram } from "./shaderCodeUtils.js";
1
+ export * from "./textureLoaders.js";
2
+ // Back compat for when camelCase was used
3
+ export { CreateImageTexture as createImageTexture } from "./textureLoaders.js";
4
+ export { type ShaderProgram } from "./shaderCodeUtils.js";
@@ -1,35 +1,30 @@
1
- import { createCommand } from "../command/command.js";
2
- import type { BaseBlock } from "../blockFoundation/baseBlock.js";
3
- import type { ShaderRuntime } from "../runtime/shaderRuntime";
4
- import type { InternalSmartFilterRuntime } from "../runtime/smartFilterRuntime";
5
- import type { OutputBlock } from "../blockFoundation/outputBlock.js";
6
-
7
- /**
8
- * Registers the final command of the command queue - the one that draws to either the canvas or
9
- * renderTargetTexture.
10
- * @param outputBlock - The output block.
11
- * @param runtime - The smart filter runtime to use.
12
- * @param commandOwner - The owner of the command.
13
- * @param shaderBlockRuntime - The shader block runtime to use.
14
- */
15
- export function registerFinalRenderCommand(
16
- outputBlock: OutputBlock,
17
- runtime: InternalSmartFilterRuntime,
18
- commandOwner: BaseBlock,
19
- shaderBlockRuntime: ShaderRuntime
20
- ): void {
21
- const commandOwnerBlockType = commandOwner.blockType;
22
- if (outputBlock.renderTargetWrapper) {
23
- runtime.registerCommand(
24
- createCommand(`${commandOwnerBlockType}.renderToFinalTexture`, commandOwner, () => {
25
- shaderBlockRuntime.renderToTargetWrapper(outputBlock);
26
- })
27
- );
28
- } else {
29
- runtime.registerCommand(
30
- createCommand(`${commandOwnerBlockType}.renderToCanvas`, commandOwner, () => {
31
- shaderBlockRuntime.renderToCanvas();
32
- })
33
- );
34
- }
35
- }
1
+ import { CreateCommand } from "../command/command.js";
2
+ import type { BaseBlock } from "../blockFoundation/baseBlock.js";
3
+ import type { ShaderRuntime } from "../runtime/shaderRuntime.js";
4
+ import type { InternalSmartFilterRuntime } from "../runtime/smartFilterRuntime.js";
5
+ import type { OutputBlock } from "../blockFoundation/outputBlock.js";
6
+
7
+ /**
8
+ * Registers the final command of the command queue - the one that draws to either the canvas or
9
+ * renderTargetTexture.
10
+ * @param outputBlock - The output block.
11
+ * @param runtime - The smart filter runtime to use.
12
+ * @param commandOwner - The owner of the command.
13
+ * @param shaderBlockRuntime - The shader block runtime to use.
14
+ */
15
+ export function RegisterFinalRenderCommand(outputBlock: OutputBlock, runtime: InternalSmartFilterRuntime, commandOwner: BaseBlock, shaderBlockRuntime: ShaderRuntime): void {
16
+ const commandOwnerBlockType = commandOwner.blockType;
17
+ if (outputBlock.renderTargetWrapper) {
18
+ runtime.registerCommand(
19
+ CreateCommand(`${commandOwnerBlockType}.renderToFinalTexture`, commandOwner, () => {
20
+ shaderBlockRuntime.renderToTargetWrapper(outputBlock);
21
+ })
22
+ );
23
+ } else {
24
+ runtime.registerCommand(
25
+ CreateCommand(`${commandOwnerBlockType}.renderToCanvas`, commandOwner, () => {
26
+ shaderBlockRuntime.renderToCanvas();
27
+ })
28
+ );
29
+ }
30
+ }
@@ -1,207 +1,192 @@
1
- import type { Effect } from "@babylonjs/core/Materials/effect";
2
- import type { ShaderCode } from "./buildTools/shaderCode.types";
3
-
4
- /**
5
- * The shader code decorator.
6
- * Used to decorate the names of uniform, function and const variables for easier parsing.
7
- */
8
- export const decorateChar = "_";
9
-
10
- /**
11
- * Describes a shader program.
12
- */
13
- export type ShaderProgram = {
14
- /**
15
- * The vertex shader code.
16
- */
17
- vertex?: string | undefined;
18
-
19
- /**
20
- * The fragment shader code.
21
- */
22
- fragment: ShaderCode;
23
- };
24
-
25
- /**
26
- * The list of options required to create a shader block.
27
- * It mainly contains the shader code to execute and its associated parameters.
28
- */
29
- export type ShaderCreationOptions = {
30
- /**
31
- * A friendly name for the shader visible in Spector or in logs.
32
- */
33
- name: string;
34
- /**
35
- * Fragment shader source code.
36
- */
37
- fragmentShader: string;
38
- /**
39
- * Vertex shader source code.
40
- */
41
- vertexShader?: string;
42
- /**
43
- * Attributes to use in the shader
44
- */
45
- attributeNames?: Array<string>;
46
- /**
47
- * Uniforms to use in the shader
48
- */
49
- uniformNames?: Array<string>;
50
- /**
51
- * Texture sampler names to use in the shader
52
- */
53
- samplerNames?: Array<string>;
54
- /**
55
- * Defines to use in the shader
56
- */
57
- defines?: Array<string>;
58
- /**
59
- * Callback when the effect is compiled
60
- */
61
- onCompiled?: (effect: Effect) => void;
62
- };
63
-
64
- export const AutoDisableMainInputColorName = "autoMainInputColor";
65
- export const DisableUniform = "disabled";
66
-
67
- /**
68
- * Injects the disable uniform and adds a check for it at the beginning of the main function
69
- * @param shaderProgram - The shader program to inject the disable feature into
70
- */
71
- export function injectAutoSampleDisableCode(shaderProgram: ShaderProgram) {
72
- const shaderFragment = shaderProgram.fragment;
73
-
74
- // Inject the disable uniform
75
- shaderFragment.uniform += `\nuniform bool ${decorateSymbol(DisableUniform)};`;
76
-
77
- // Find the main function
78
- const mainFunction = shaderFragment.functions.find((f) => f.name === shaderFragment.mainFunctionName);
79
- if (!mainFunction) {
80
- throw new Error(
81
- `Main function not found when trying to inject auto disable into ${shaderFragment.mainFunctionName}`
82
- );
83
- }
84
-
85
- // Ensure the shader has a main input texture
86
- if (!shaderFragment.mainInputTexture) {
87
- throw new Error(
88
- `Main input texture not found when trying to inject auto disable into ${shaderFragment.mainFunctionName}`
89
- );
90
- }
91
-
92
- // Inject the code
93
- const autoDisableVariableName = decorateSymbol(AutoDisableMainInputColorName);
94
- mainFunction.code = mainFunction.code.replace(
95
- "{",
96
- `{\n vec4 ${autoDisableVariableName} = texture2D(${shaderFragment.mainInputTexture}, vUV);\n
97
- if (${decorateSymbol(DisableUniform)}) return ${autoDisableVariableName};\n`
98
- );
99
- }
100
-
101
- /**
102
- * Gets the shader fragment code.
103
- * @param shaderProgram - The shader program to extract the code from.
104
- * @param mainCodeOnly - If true, only the main function code will be returned.
105
- * @returns The shader fragment code.
106
- */
107
- export function getShaderFragmentCode(shaderProgram: ShaderProgram, mainCodeOnly = false): string {
108
- const shaderFragment = shaderProgram.fragment;
109
-
110
- const declarations =
111
- (shaderFragment.const ?? "") +
112
- "\n" +
113
- shaderFragment.uniform +
114
- "\n" +
115
- (shaderFragment.uniformSingle ?? "") +
116
- "\n";
117
-
118
- let mainFunctionCode = "";
119
- let otherFunctionsCode = "";
120
- for (let i = 0; i < shaderFragment.functions.length; ++i) {
121
- const func = shaderFragment.functions[i]!;
122
- if (func.name === shaderFragment.mainFunctionName) {
123
- mainFunctionCode += func.code + "\n";
124
- if (mainCodeOnly) {
125
- break;
126
- }
127
- } else {
128
- otherFunctionsCode += func.code + "\n";
129
- }
130
- }
131
-
132
- return mainCodeOnly ? mainFunctionCode : declarations + otherFunctionsCode + mainFunctionCode;
133
- }
134
-
135
- /**
136
- * Gets the shader creation options from a shader program.
137
- * @param shaderProgram - The shader program to build the create options from.
138
- * @returns The shader creation options.
139
- */
140
- export function getShaderCreateOptions(shaderProgram: ShaderProgram): ShaderCreationOptions {
141
- const shaderFragment = shaderProgram.fragment;
142
-
143
- let code = getShaderFragmentCode(shaderProgram);
144
-
145
- const uniforms = shaderFragment.uniform + "\n" + (shaderFragment.uniformSingle ?? "");
146
- const uniformNames = [];
147
- const samplerNames = [];
148
-
149
- const rx = new RegExp(`uniform\\s+(\\S+)\\s+(\\w+)\\s*;`, "g");
150
-
151
- let match = rx.exec(uniforms);
152
- while (match !== null) {
153
- const varType = match[1]!;
154
- const varName = match[2]!;
155
-
156
- if (varType === "sampler2D" || varType === "sampler3D") {
157
- samplerNames.push(varName);
158
- } else {
159
- uniformNames.push(varName);
160
- }
161
-
162
- match = rx.exec(uniforms);
163
- }
164
-
165
- code =
166
- "varying vec2 vUV;\n" +
167
- code +
168
- "\nvoid main(void) {\ngl_FragColor = " +
169
- shaderFragment.mainFunctionName +
170
- "(vUV);\n}";
171
-
172
- const options: ShaderCreationOptions = {
173
- name: shaderFragment.mainFunctionName,
174
- fragmentShader: code,
175
- uniformNames: uniformNames,
176
- samplerNames: samplerNames,
177
- defines: shaderFragment.defines,
178
- };
179
-
180
- if (shaderProgram.vertex) {
181
- options.vertexShader = shaderProgram.vertex;
182
- }
183
-
184
- return options;
185
- }
186
-
187
- /**
188
- * Decorates a symbol (uniform, function or const) name.
189
- * @param symbol - The symbol to decorate.
190
- * @returns The decorated symbol.
191
- */
192
- export function decorateSymbol(symbol: string): string {
193
- return decorateChar + symbol + decorateChar;
194
- }
195
-
196
- /**
197
- * Undecorates a symbol (uniform, function or const) name.
198
- * @param symbol - The symbol to undecorate.
199
- * @returns The undecorated symbol. Throws an error if the symbol is not decorated.
200
- */
201
- export function undecorateSymbol(symbol: string): string {
202
- if (symbol.charAt(0) !== decorateChar || symbol.charAt(symbol.length - 1) !== decorateChar) {
203
- throw new Error(`undecorateSymbol: Invalid symbol name "${symbol}"`);
204
- }
205
-
206
- return symbol.substring(1, symbol.length - 1);
207
- }
1
+ import type { Effect } from "core/Materials/effect.js";
2
+ import type { ShaderCode } from "./buildTools/shaderCode.types.js";
3
+
4
+ /**
5
+ * The shader code decorator.
6
+ * Used to decorate the names of uniform, function and const variables for easier parsing.
7
+ */
8
+ export const DecorateChar = "_";
9
+
10
+ /**
11
+ * Describes a shader program.
12
+ */
13
+ export type ShaderProgram = {
14
+ /**
15
+ * The vertex shader code.
16
+ */
17
+ vertex?: string | undefined;
18
+
19
+ /**
20
+ * The fragment shader code.
21
+ */
22
+ fragment: ShaderCode;
23
+ };
24
+
25
+ /**
26
+ * The list of options required to create a shader block.
27
+ * It mainly contains the shader code to execute and its associated parameters.
28
+ */
29
+ export type ShaderCreationOptions = {
30
+ /**
31
+ * A friendly name for the shader visible in Spector or in logs.
32
+ */
33
+ name: string;
34
+ /**
35
+ * Fragment shader source code.
36
+ */
37
+ fragmentShader: string;
38
+ /**
39
+ * Vertex shader source code.
40
+ */
41
+ vertexShader?: string;
42
+ /**
43
+ * Attributes to use in the shader
44
+ */
45
+ attributeNames?: Array<string>;
46
+ /**
47
+ * Uniforms to use in the shader
48
+ */
49
+ uniformNames?: Array<string>;
50
+ /**
51
+ * Texture sampler names to use in the shader
52
+ */
53
+ samplerNames?: Array<string>;
54
+ /**
55
+ * Defines to use in the shader
56
+ */
57
+ defines?: Array<string>;
58
+ /**
59
+ * Callback when the effect is compiled
60
+ */
61
+ onCompiled?: (effect: Effect) => void;
62
+ };
63
+
64
+ export const AutoDisableMainInputColorName = "autoMainInputColor";
65
+ export const DisableUniform = "disabled";
66
+
67
+ /**
68
+ * Injects the disable uniform and adds a check for it at the beginning of the main function
69
+ * @param shaderProgram - The shader program to inject the disable feature into
70
+ */
71
+ export function InjectAutoSampleDisableCode(shaderProgram: ShaderProgram) {
72
+ const shaderFragment = shaderProgram.fragment;
73
+
74
+ // Inject the disable uniform
75
+ shaderFragment.uniform += `\nuniform bool ${DecorateSymbol(DisableUniform)};`;
76
+
77
+ // Find the main function
78
+ const mainFunction = shaderFragment.functions.find((f) => f.name === shaderFragment.mainFunctionName);
79
+ if (!mainFunction) {
80
+ throw new Error(`Main function not found when trying to inject auto disable into ${shaderFragment.mainFunctionName}`);
81
+ }
82
+
83
+ // Ensure the shader has a main input texture
84
+ if (!shaderFragment.mainInputTexture) {
85
+ throw new Error(`Main input texture not found when trying to inject auto disable into ${shaderFragment.mainFunctionName}`);
86
+ }
87
+
88
+ // Inject the code
89
+ const autoDisableVariableName = DecorateSymbol(AutoDisableMainInputColorName);
90
+ mainFunction.code = mainFunction.code.replace(
91
+ "{",
92
+ `{\n vec4 ${autoDisableVariableName} = texture2D(${shaderFragment.mainInputTexture}, vUV);\n
93
+ if (${DecorateSymbol(DisableUniform)}) return ${autoDisableVariableName};\n`
94
+ );
95
+ }
96
+
97
+ /**
98
+ * Gets the shader fragment code.
99
+ * @param shaderProgram - The shader program to extract the code from.
100
+ * @param mainCodeOnly - If true, only the main function code will be returned.
101
+ * @returns The shader fragment code.
102
+ */
103
+ export function GetShaderFragmentCode(shaderProgram: ShaderProgram, mainCodeOnly = false): string {
104
+ const shaderFragment = shaderProgram.fragment;
105
+
106
+ const declarations = (shaderFragment.const ?? "") + "\n" + shaderFragment.uniform + "\n" + (shaderFragment.uniformSingle ?? "") + "\n";
107
+
108
+ let mainFunctionCode = "";
109
+ let otherFunctionsCode = "";
110
+ for (let i = 0; i < shaderFragment.functions.length; ++i) {
111
+ const func = shaderFragment.functions[i]!;
112
+ if (func.name === shaderFragment.mainFunctionName) {
113
+ mainFunctionCode += func.code + "\n";
114
+ if (mainCodeOnly) {
115
+ break;
116
+ }
117
+ } else {
118
+ otherFunctionsCode += func.code + "\n";
119
+ }
120
+ }
121
+
122
+ return mainCodeOnly ? mainFunctionCode : declarations + otherFunctionsCode + mainFunctionCode;
123
+ }
124
+
125
+ /**
126
+ * Gets the shader creation options from a shader program.
127
+ * @param shaderProgram - The shader program to build the create options from.
128
+ * @returns The shader creation options.
129
+ */
130
+ export function GetShaderCreateOptions(shaderProgram: ShaderProgram): ShaderCreationOptions {
131
+ const shaderFragment = shaderProgram.fragment;
132
+
133
+ let code = GetShaderFragmentCode(shaderProgram);
134
+
135
+ const uniforms = shaderFragment.uniform + "\n" + (shaderFragment.uniformSingle ?? "");
136
+ const uniformNames = [];
137
+ const samplerNames = [];
138
+
139
+ const rx = new RegExp(`uniform\\s+(\\S+)\\s+(\\w+)\\s*;`, "g");
140
+
141
+ let match = rx.exec(uniforms);
142
+ while (match !== null) {
143
+ const varType = match[1]!;
144
+ const varName = match[2]!;
145
+
146
+ if (varType === "sampler2D" || varType === "sampler3D") {
147
+ samplerNames.push(varName);
148
+ } else {
149
+ uniformNames.push(varName);
150
+ }
151
+
152
+ match = rx.exec(uniforms);
153
+ }
154
+
155
+ code = "varying vec2 vUV;\n" + code + "\nvoid main(void) {\ngl_FragColor = " + shaderFragment.mainFunctionName + "(vUV);\n}";
156
+
157
+ const options: ShaderCreationOptions = {
158
+ name: shaderFragment.mainFunctionName,
159
+ fragmentShader: code,
160
+ uniformNames: uniformNames,
161
+ samplerNames: samplerNames,
162
+ defines: shaderFragment.defines,
163
+ };
164
+
165
+ if (shaderProgram.vertex) {
166
+ options.vertexShader = shaderProgram.vertex;
167
+ }
168
+
169
+ return options;
170
+ }
171
+
172
+ /**
173
+ * Decorates a symbol (uniform, function or const) name.
174
+ * @param symbol - The symbol to decorate.
175
+ * @returns The decorated symbol.
176
+ */
177
+ export function DecorateSymbol(symbol: string): string {
178
+ return DecorateChar + symbol + DecorateChar;
179
+ }
180
+
181
+ /**
182
+ * Undecorates a symbol (uniform, function or const) name.
183
+ * @param symbol - The symbol to undecorate.
184
+ * @returns The undecorated symbol. Throws an error if the symbol is not decorated.
185
+ */
186
+ export function UndecorateSymbol(symbol: string): string {
187
+ if (symbol.charAt(0) !== DecorateChar || symbol.charAt(symbol.length - 1) !== DecorateChar) {
188
+ throw new Error(`undecorateSymbol: Invalid symbol name "${symbol}"`);
189
+ }
190
+
191
+ return symbol.substring(1, symbol.length - 1);
192
+ }
@@ -1,43 +1,31 @@
1
- import { ThinTexture } from "@babylonjs/core/Materials/Textures/thinTexture.js";
2
- import { type ThinEngine } from "@babylonjs/core/Engines/thinEngine.js";
3
- import type { Nullable } from "@babylonjs/core/types";
4
-
5
- /**
6
- * Helper that takes in a URL to an image and returns a ThinTexture
7
- * @param engine - defines the engine to use to create the texture
8
- * @param url - defines a value which contains one of the following:
9
- * * A conventional http URL, e.g. 'http://...' or 'file://...'
10
- * * A base64 string of in-line texture data, e.g. 'data:image/jpg;base64,/...'
11
- * @param flipY - Indicates if the Y axis should be flipped
12
- * @param samplingMode - The sampling mode to use
13
- * @param forcedExtension - defines the extension to use to pick the right loader
14
- * @returns A ThinTexture of the image
15
- */
16
- export function createImageTexture(
17
- engine: ThinEngine,
18
- url: string,
19
- flipY: Nullable<boolean> = null,
20
- samplingMode: number | undefined = undefined,
21
- forcedExtension: string | null = null
22
- ): ThinTexture {
23
- const internalTexture = engine.createTexture(
24
- url,
25
- true,
26
- flipY ?? true,
27
- null,
28
- samplingMode,
29
- null,
30
- null,
31
- null,
32
- null,
33
- null,
34
- forcedExtension
35
- );
36
- return new ThinTexture(internalTexture);
37
- }
38
-
39
- /*
40
- Future util ideas:
41
- HtmlElementTexture
42
- WebCamTexture
43
- */
1
+ import { ThinTexture } from "core/Materials/Textures/thinTexture.js";
2
+ import { type ThinEngine } from "core/Engines/thinEngine.js";
3
+ import type { Nullable } from "core/types.js";
4
+
5
+ /**
6
+ * Helper that takes in a URL to an image and returns a ThinTexture
7
+ * @param engine - defines the engine to use to create the texture
8
+ * @param url - defines a value which contains one of the following:
9
+ * * A conventional http URL, e.g. 'http://...' or 'file://...'
10
+ * * A base64 string of in-line texture data, e.g. 'data:image/jpg;base64,/...'
11
+ * @param flipY - Indicates if the Y axis should be flipped
12
+ * @param samplingMode - The sampling mode to use
13
+ * @param forcedExtension - defines the extension to use to pick the right loader
14
+ * @returns A ThinTexture of the image
15
+ */
16
+ export function CreateImageTexture(
17
+ engine: ThinEngine,
18
+ url: string,
19
+ flipY: Nullable<boolean> = null,
20
+ samplingMode: number | undefined = undefined,
21
+ forcedExtension: string | null = null
22
+ ): ThinTexture {
23
+ const internalTexture = engine.createTexture(url, true, flipY ?? true, null, samplingMode, null, null, null, null, null, forcedExtension);
24
+ return new ThinTexture(internalTexture);
25
+ }
26
+
27
+ /*
28
+ Future util ideas:
29
+ HtmlElementTexture
30
+ WebCamTexture
31
+ */