@onerjs/smart-filters 8.25.2 → 8.25.4

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 (251) hide show
  1. package/dist/IDisposable.d.ts +10 -0
  2. package/dist/IDisposable.d.ts.map +1 -0
  3. package/dist/IDisposable.js +2 -0
  4. package/dist/IDisposable.js.map +1 -0
  5. package/dist/blockFoundation/aggregateBlock.d.ts +56 -0
  6. package/dist/blockFoundation/aggregateBlock.d.ts.map +1 -0
  7. package/dist/blockFoundation/aggregateBlock.js +130 -0
  8. package/dist/blockFoundation/aggregateBlock.js.map +1 -0
  9. package/dist/blockFoundation/baseBlock.d.ts +176 -0
  10. package/dist/blockFoundation/baseBlock.d.ts.map +1 -0
  11. package/dist/blockFoundation/baseBlock.js +276 -0
  12. package/dist/blockFoundation/baseBlock.js.map +1 -0
  13. package/dist/blockFoundation/customAggregateBlock.d.ts +38 -0
  14. package/dist/blockFoundation/customAggregateBlock.d.ts.map +1 -0
  15. package/dist/blockFoundation/customAggregateBlock.js +63 -0
  16. package/dist/blockFoundation/customAggregateBlock.js.map +1 -0
  17. package/dist/blockFoundation/customShaderBlock.d.ts +73 -0
  18. package/dist/blockFoundation/customShaderBlock.d.ts.map +1 -0
  19. package/dist/blockFoundation/customShaderBlock.js +232 -0
  20. package/dist/blockFoundation/customShaderBlock.js.map +1 -0
  21. package/dist/blockFoundation/disableableShaderBlock.d.ts +56 -0
  22. package/dist/blockFoundation/disableableShaderBlock.d.ts.map +1 -0
  23. package/dist/blockFoundation/disableableShaderBlock.js +68 -0
  24. package/dist/blockFoundation/disableableShaderBlock.js.map +1 -0
  25. package/dist/blockFoundation/index.d.ts +10 -0
  26. package/dist/blockFoundation/index.d.ts.map +1 -0
  27. package/dist/blockFoundation/index.js +8 -0
  28. package/dist/blockFoundation/index.js.map +1 -0
  29. package/dist/blockFoundation/inputBlock.d.ts +127 -0
  30. package/dist/blockFoundation/inputBlock.d.ts.map +1 -0
  31. package/dist/blockFoundation/inputBlock.deserializer.d.ts +12 -0
  32. package/dist/blockFoundation/inputBlock.deserializer.d.ts.map +1 -0
  33. package/dist/blockFoundation/inputBlock.deserializer.js +65 -0
  34. package/dist/blockFoundation/inputBlock.deserializer.js.map +1 -0
  35. package/dist/blockFoundation/inputBlock.js +89 -0
  36. package/dist/blockFoundation/inputBlock.js.map +1 -0
  37. package/dist/blockFoundation/inputBlock.serialization.types.d.ts +105 -0
  38. package/dist/blockFoundation/inputBlock.serialization.types.d.ts.map +1 -0
  39. package/dist/blockFoundation/inputBlock.serialization.types.js +2 -0
  40. package/dist/blockFoundation/inputBlock.serialization.types.js.map +1 -0
  41. package/dist/blockFoundation/inputBlock.serializer.d.ts +6 -0
  42. package/dist/blockFoundation/inputBlock.serializer.d.ts.map +1 -0
  43. package/dist/blockFoundation/inputBlock.serializer.js +130 -0
  44. package/dist/blockFoundation/inputBlock.serializer.js.map +1 -0
  45. package/dist/blockFoundation/outputBlock.d.ts +47 -0
  46. package/dist/blockFoundation/outputBlock.d.ts.map +1 -0
  47. package/dist/blockFoundation/outputBlock.js +123 -0
  48. package/dist/blockFoundation/outputBlock.js.map +1 -0
  49. package/dist/blockFoundation/shaderBlock.d.ts +64 -0
  50. package/dist/blockFoundation/shaderBlock.d.ts.map +1 -0
  51. package/dist/blockFoundation/shaderBlock.js +125 -0
  52. package/dist/blockFoundation/shaderBlock.js.map +1 -0
  53. package/dist/blockFoundation/textureOptions.d.ts +47 -0
  54. package/dist/blockFoundation/textureOptions.d.ts.map +1 -0
  55. package/dist/blockFoundation/textureOptions.js +37 -0
  56. package/dist/blockFoundation/textureOptions.js.map +1 -0
  57. package/dist/command/command.d.ts +48 -0
  58. package/dist/command/command.d.ts.map +1 -0
  59. package/dist/command/command.js +15 -0
  60. package/dist/command/command.js.map +1 -0
  61. package/dist/command/commandBuffer.d.ts +40 -0
  62. package/dist/command/commandBuffer.d.ts.map +1 -0
  63. package/dist/command/commandBuffer.js +58 -0
  64. package/dist/command/commandBuffer.js.map +1 -0
  65. package/dist/command/commandBufferDebugger.d.ts +7 -0
  66. package/dist/command/commandBufferDebugger.d.ts.map +1 -0
  67. package/dist/command/commandBufferDebugger.js +13 -0
  68. package/dist/command/commandBufferDebugger.js.map +1 -0
  69. package/dist/command/index.d.ts +6 -0
  70. package/dist/command/index.d.ts.map +1 -0
  71. package/dist/command/index.js +8 -0
  72. package/dist/command/index.js.map +1 -0
  73. package/dist/connection/connectionPoint.d.ts +110 -0
  74. package/dist/connection/connectionPoint.d.ts.map +1 -0
  75. package/dist/connection/connectionPoint.js +154 -0
  76. package/dist/connection/connectionPoint.js.map +1 -0
  77. package/dist/connection/connectionPointCompatibilityState.d.ts +20 -0
  78. package/dist/connection/connectionPointCompatibilityState.d.ts.map +1 -0
  79. package/dist/connection/connectionPointCompatibilityState.js +32 -0
  80. package/dist/connection/connectionPointCompatibilityState.js.map +1 -0
  81. package/dist/connection/connectionPointDirection.d.ts +10 -0
  82. package/dist/connection/connectionPointDirection.d.ts.map +1 -0
  83. package/dist/connection/connectionPointDirection.js +11 -0
  84. package/dist/connection/connectionPointDirection.js.map +1 -0
  85. package/dist/connection/connectionPointType.d.ts +29 -0
  86. package/dist/connection/connectionPointType.d.ts.map +1 -0
  87. package/dist/connection/connectionPointType.js +19 -0
  88. package/dist/connection/connectionPointType.js.map +1 -0
  89. package/dist/connection/connectionPointWithDefault.d.ts +23 -0
  90. package/dist/connection/connectionPointWithDefault.d.ts.map +1 -0
  91. package/dist/connection/connectionPointWithDefault.js +19 -0
  92. package/dist/connection/connectionPointWithDefault.js.map +1 -0
  93. package/dist/connection/index.d.ts +8 -0
  94. package/dist/connection/index.d.ts.map +1 -0
  95. package/dist/connection/index.js +7 -0
  96. package/dist/connection/index.js.map +1 -0
  97. package/dist/editorUtils/editableInPropertyPage.d.ts +80 -0
  98. package/dist/editorUtils/editableInPropertyPage.d.ts.map +1 -0
  99. package/dist/editorUtils/editableInPropertyPage.js +42 -0
  100. package/dist/editorUtils/editableInPropertyPage.js.map +1 -0
  101. package/dist/editorUtils/index.d.ts +3 -0
  102. package/dist/editorUtils/index.d.ts.map +1 -0
  103. package/dist/editorUtils/index.js +4 -0
  104. package/dist/editorUtils/index.js.map +1 -0
  105. package/dist/index.d.ts +13 -0
  106. package/dist/index.d.ts.map +1 -0
  107. package/dist/index.js +14 -0
  108. package/dist/index.js.map +1 -0
  109. package/dist/optimization/dependencyGraph.d.ts +31 -0
  110. package/dist/optimization/dependencyGraph.d.ts.map +1 -0
  111. package/dist/optimization/dependencyGraph.js +78 -0
  112. package/dist/optimization/dependencyGraph.js.map +1 -0
  113. package/dist/optimization/index.d.ts +2 -0
  114. package/dist/optimization/index.d.ts.map +1 -0
  115. package/dist/optimization/index.js +2 -0
  116. package/dist/optimization/index.js.map +1 -0
  117. package/dist/optimization/optimizedShaderBlock.d.ts +75 -0
  118. package/dist/optimization/optimizedShaderBlock.d.ts.map +1 -0
  119. package/dist/optimization/optimizedShaderBlock.js +105 -0
  120. package/dist/optimization/optimizedShaderBlock.js.map +1 -0
  121. package/dist/optimization/smartFilterOptimizer.d.ts +126 -0
  122. package/dist/optimization/smartFilterOptimizer.d.ts.map +1 -0
  123. package/dist/optimization/smartFilterOptimizer.js +666 -0
  124. package/dist/optimization/smartFilterOptimizer.js.map +1 -0
  125. package/dist/runtime/index.d.ts +8 -0
  126. package/dist/runtime/index.d.ts.map +1 -0
  127. package/dist/runtime/index.js +7 -0
  128. package/dist/runtime/index.js.map +1 -0
  129. package/dist/runtime/renderTargetGenerator.d.ts +43 -0
  130. package/dist/runtime/renderTargetGenerator.d.ts.map +1 -0
  131. package/dist/runtime/renderTargetGenerator.js +169 -0
  132. package/dist/runtime/renderTargetGenerator.js.map +1 -0
  133. package/dist/runtime/shaderRuntime.d.ts +103 -0
  134. package/dist/runtime/shaderRuntime.d.ts.map +1 -0
  135. package/dist/runtime/shaderRuntime.js +132 -0
  136. package/dist/runtime/shaderRuntime.js.map +1 -0
  137. package/dist/runtime/smartFilterRuntime.d.ts +69 -0
  138. package/dist/runtime/smartFilterRuntime.d.ts.map +1 -0
  139. package/dist/runtime/smartFilterRuntime.js +63 -0
  140. package/dist/runtime/smartFilterRuntime.js.map +1 -0
  141. package/dist/runtime/strongRef.d.ts +16 -0
  142. package/dist/runtime/strongRef.d.ts.map +1 -0
  143. package/dist/runtime/strongRef.js +9 -0
  144. package/dist/runtime/strongRef.js.map +1 -0
  145. package/dist/serialization/importCustomBlockDefinition.d.ts +15 -0
  146. package/dist/serialization/importCustomBlockDefinition.d.ts.map +1 -0
  147. package/dist/serialization/importCustomBlockDefinition.js +76 -0
  148. package/dist/serialization/importCustomBlockDefinition.js.map +1 -0
  149. package/dist/serialization/index.d.ts +9 -0
  150. package/dist/serialization/index.d.ts.map +1 -0
  151. package/dist/serialization/index.js +11 -0
  152. package/dist/serialization/index.js.map +1 -0
  153. package/dist/serialization/serializedBlockDefinition.d.ts +12 -0
  154. package/dist/serialization/serializedBlockDefinition.d.ts.map +1 -0
  155. package/dist/serialization/serializedBlockDefinition.js +2 -0
  156. package/dist/serialization/serializedBlockDefinition.js.map +1 -0
  157. package/dist/serialization/serializedShaderBlockDefinition.d.ts +7 -0
  158. package/dist/serialization/serializedShaderBlockDefinition.d.ts.map +1 -0
  159. package/dist/serialization/serializedShaderBlockDefinition.js +2 -0
  160. package/dist/serialization/serializedShaderBlockDefinition.js.map +1 -0
  161. package/dist/serialization/serializedSmartFilter.d.ts +6 -0
  162. package/dist/serialization/serializedSmartFilter.d.ts.map +1 -0
  163. package/dist/serialization/serializedSmartFilter.js +2 -0
  164. package/dist/serialization/serializedSmartFilter.js.map +1 -0
  165. package/dist/serialization/smartFilterDeserializer.d.ts +34 -0
  166. package/dist/serialization/smartFilterDeserializer.d.ts.map +1 -0
  167. package/dist/serialization/smartFilterDeserializer.js +141 -0
  168. package/dist/serialization/smartFilterDeserializer.js.map +1 -0
  169. package/dist/serialization/smartFilterSerializer.d.ts +23 -0
  170. package/dist/serialization/smartFilterSerializer.d.ts.map +1 -0
  171. package/dist/serialization/smartFilterSerializer.js +95 -0
  172. package/dist/serialization/smartFilterSerializer.js.map +1 -0
  173. package/dist/serialization/v1/defaultBlockSerializer.d.ts +9 -0
  174. package/dist/serialization/v1/defaultBlockSerializer.d.ts.map +1 -0
  175. package/dist/serialization/v1/defaultBlockSerializer.js +19 -0
  176. package/dist/serialization/v1/defaultBlockSerializer.js.map +1 -0
  177. package/dist/serialization/v1/index.d.ts +4 -0
  178. package/dist/serialization/v1/index.d.ts.map +1 -0
  179. package/dist/serialization/v1/index.js +5 -0
  180. package/dist/serialization/v1/index.js.map +1 -0
  181. package/dist/serialization/v1/shaderBlockSerialization.types.d.ts +73 -0
  182. package/dist/serialization/v1/shaderBlockSerialization.types.d.ts.map +1 -0
  183. package/dist/serialization/v1/shaderBlockSerialization.types.js +7 -0
  184. package/dist/serialization/v1/shaderBlockSerialization.types.js.map +1 -0
  185. package/dist/serialization/v1/smartFilterSerialization.types.d.ts +98 -0
  186. package/dist/serialization/v1/smartFilterSerialization.types.d.ts.map +1 -0
  187. package/dist/serialization/v1/smartFilterSerialization.types.js +2 -0
  188. package/dist/serialization/v1/smartFilterSerialization.types.js.map +1 -0
  189. package/dist/smartFilter.d.ts +118 -0
  190. package/dist/smartFilter.d.ts.map +1 -0
  191. package/dist/smartFilter.js +169 -0
  192. package/dist/smartFilter.js.map +1 -0
  193. package/dist/utils/buildTools/buildShaders.d.ts +9 -0
  194. package/dist/utils/buildTools/buildShaders.d.ts.map +1 -0
  195. package/dist/utils/buildTools/buildShaders.js +13 -0
  196. package/dist/utils/buildTools/buildShaders.js.map +1 -0
  197. package/dist/utils/buildTools/convertGlslIntoBlock.d.ts +9 -0
  198. package/dist/utils/buildTools/convertGlslIntoBlock.d.ts.map +1 -0
  199. package/dist/utils/buildTools/convertGlslIntoBlock.js +346 -0
  200. package/dist/utils/buildTools/convertGlslIntoBlock.js.map +1 -0
  201. package/dist/utils/buildTools/convertGlslIntoShaderProgram.d.ts +26 -0
  202. package/dist/utils/buildTools/convertGlslIntoShaderProgram.d.ts.map +1 -0
  203. package/dist/utils/buildTools/convertGlslIntoShaderProgram.js +141 -0
  204. package/dist/utils/buildTools/convertGlslIntoShaderProgram.js.map +1 -0
  205. package/dist/utils/buildTools/convertShaders.d.ts +16 -0
  206. package/dist/utils/buildTools/convertShaders.d.ts.map +1 -0
  207. package/dist/utils/buildTools/convertShaders.js +62 -0
  208. package/dist/utils/buildTools/convertShaders.js.map +1 -0
  209. package/dist/utils/buildTools/shaderCode.types.d.ts +51 -0
  210. package/dist/utils/buildTools/shaderCode.types.d.ts.map +1 -0
  211. package/dist/utils/buildTools/shaderCode.types.js +2 -0
  212. package/dist/utils/buildTools/shaderCode.types.js.map +1 -0
  213. package/dist/utils/buildTools/shaderConverter.d.ts +77 -0
  214. package/dist/utils/buildTools/shaderConverter.d.ts.map +1 -0
  215. package/dist/utils/buildTools/shaderConverter.js +297 -0
  216. package/dist/utils/buildTools/shaderConverter.js.map +1 -0
  217. package/dist/utils/buildTools/watchShaders.d.ts +9 -0
  218. package/dist/utils/buildTools/watchShaders.d.ts.map +1 -0
  219. package/dist/utils/buildTools/watchShaders.js +39 -0
  220. package/dist/utils/buildTools/watchShaders.js.map +1 -0
  221. package/dist/utils/index.d.ts +4 -0
  222. package/dist/utils/index.d.ts.map +1 -0
  223. package/dist/utils/index.js +4 -0
  224. package/dist/utils/index.js.map +1 -0
  225. package/dist/utils/renderTargetUtils.d.ts +14 -0
  226. package/dist/utils/renderTargetUtils.d.ts.map +1 -0
  227. package/dist/utils/renderTargetUtils.js +23 -0
  228. package/dist/utils/renderTargetUtils.js.map +1 -0
  229. package/dist/utils/shaderCodeUtils.d.ts +91 -0
  230. package/dist/utils/shaderCodeUtils.d.ts.map +1 -0
  231. package/dist/utils/shaderCodeUtils.js +111 -0
  232. package/dist/utils/shaderCodeUtils.js.map +1 -0
  233. package/dist/utils/textureLoaders.d.ts +16 -0
  234. package/dist/utils/textureLoaders.d.ts.map +1 -0
  235. package/dist/utils/textureLoaders.js +22 -0
  236. package/dist/utils/textureLoaders.js.map +1 -0
  237. package/dist/utils/textureUtils.d.ts +13 -0
  238. package/dist/utils/textureUtils.d.ts.map +1 -0
  239. package/dist/utils/textureUtils.js +25 -0
  240. package/dist/utils/textureUtils.js.map +1 -0
  241. package/dist/utils/uniqueIdGenerator.d.ts +19 -0
  242. package/dist/utils/uniqueIdGenerator.d.ts.map +1 -0
  243. package/dist/utils/uniqueIdGenerator.js +27 -0
  244. package/dist/utils/uniqueIdGenerator.js.map +1 -0
  245. package/dist/version.d.ts +5 -0
  246. package/dist/version.d.ts.map +1 -0
  247. package/dist/version.js +5 -0
  248. package/dist/version.js.map +1 -0
  249. package/package.json +1 -1
  250. package/src/optimization/smartFilterOptimizer.ts +305 -158
  251. package/src/version.ts +1 -1
@@ -0,0 +1,346 @@
1
+ import * as fs from "fs";
2
+ import { ExtractShaderProgramFromGlsl } from "./convertGlslIntoShaderProgram.js";
3
+ import { ConnectionPointType } from "../../connection/connectionPointType.js";
4
+ import { BlockDisableStrategy } from "../../blockFoundation/disableableShaderBlock.js";
5
+ // eslint-disable-next-line @typescript-eslint/naming-convention
6
+ const EXTRA_IMPORTS = "@EXTRA_IMPORTS@";
7
+ // eslint-disable-next-line @typescript-eslint/naming-convention
8
+ const BABYLON_CORE_PATH = "@BABYLON_CORE_PATH@";
9
+ // eslint-disable-next-line @typescript-eslint/naming-convention
10
+ const SMART_FILTER_CORE_IMPORT = "@SMART_FILTER_CORE_IMPORT@";
11
+ const SHADER_PROGRAM = "@SHADER_PROGRAM@";
12
+ const BLOCK_NAME = "@BLOCK_NAME@";
13
+ const NAMESPACE = "@NAMESPACE@";
14
+ // eslint-disable-next-line @typescript-eslint/naming-convention
15
+ const SHADER_BINDING_PRIVATE_VARIABLES = "@SHADER_BINDING_PRIVATE_VARIABLES@";
16
+ const CAMEL_CASE_UNIFORM = "@CAMEL_CASE_UNIFORM@";
17
+ const CONNECTION_POINT_TYPE = "@CONNECTION_POINT_TYPE@";
18
+ const CONNECTION_POINT_DEFAULT_VALUE = "@CONNECTION_POINT_DEFAULT_VALUE@";
19
+ const SHADER_BINDING_EXTENDS = "@SHADER_BINDING_EXTENDS@";
20
+ const SHADER_BINDING_CTOR_DOCSTRING_PARAMS = "@SHADER_BINDING_CTOR_DOCSTRING_PARAMS@";
21
+ const SHADER_BINDING_CTOR_PARAMS = "@SHADER_CTOR_PARAMS@";
22
+ const SHADER_BINDING_SUPER_PARAMS = "@SHADER_BINDING_SUPER_PARAMS@";
23
+ const SHADER_BINDING_CTOR = "@SHADER_BINDING_CTOR@";
24
+ const SHADER_BINDING_BIND = "@SHADER_BINDING_BIND@";
25
+ const SHADER_BLOCK_EXTENDS = "@SHADER_BLOCK_EXTENDS@";
26
+ // eslint-disable-next-line @typescript-eslint/naming-convention
27
+ const BLOCK_INPUT_PROPERTIES = "@BLOCK_INPUT_PROPERTIES@";
28
+ // eslint-disable-next-line @typescript-eslint/naming-convention
29
+ const BLOCK_DISABLE_OPTIMIZATION = "@BLOCK_DISABLE_OPTIMIZATION@";
30
+ const BLOCK_DISABLE_STRATEGY = "@BLOCK_DISABLE_STRATEGY@";
31
+ const BLOCK_GET_SHADER_BINDING_VARS = "@BLOCK_SHADER_BINDING_BIND_VARS@";
32
+ const BLOCK_GET_SHADER_PARAM_LIST = "@BLOCK_GET_SHADER_PARAM_LIST@";
33
+ const EFFECT_SETTER = "@EFFECT_SETTER@";
34
+ const EFFECT_VALUE = "@EFFECT_VALUE@";
35
+ const EXTRA_BIND_DOCSTRING = "@EXTRA_BIND_DOCSTRING@";
36
+ const EXTRA_BIND_PARAMS = "@EXTRA_BIND_PARAMS@";
37
+ const ShaderBindingPrivateVariablesTemplate = ` private readonly _${CAMEL_CASE_UNIFORM}: RuntimeData<ConnectionPointType.${CONNECTION_POINT_TYPE}>;`;
38
+ const ShaderBindingCtorDocstringParams = ` * @param ${CAMEL_CASE_UNIFORM} - The ${CAMEL_CASE_UNIFORM} runtime value`;
39
+ const ShaderBindingCtorParams = ` ${CAMEL_CASE_UNIFORM}: RuntimeData<ConnectionPointType.${CONNECTION_POINT_TYPE}>`;
40
+ const ShaderBindingCtor = ` this._${CAMEL_CASE_UNIFORM} = ${CAMEL_CASE_UNIFORM};`;
41
+ const ShaderBindingBind = ` effect.${EFFECT_SETTER}(this.getRemappedName(Uniforms.${CAMEL_CASE_UNIFORM}), ${EFFECT_VALUE});`;
42
+ const ShaderBindingBindRegularValue = `this._${CAMEL_CASE_UNIFORM}.value`;
43
+ const BlockInputProperty = ` /**
44
+ * The ${CAMEL_CASE_UNIFORM} connection point.
45
+ */
46
+ public readonly ${CAMEL_CASE_UNIFORM} = this._registerInput(Uniforms.${CAMEL_CASE_UNIFORM}, ConnectionPointType.${CONNECTION_POINT_TYPE});
47
+ `;
48
+ const BlockInputOptionalProperty = ` /**
49
+ /**
50
+ * The ${CAMEL_CASE_UNIFORM} connection point.
51
+ */
52
+ public readonly ${CAMEL_CASE_UNIFORM} = this._registerOptionalInput(
53
+ "${CAMEL_CASE_UNIFORM}",
54
+ ConnectionPointType.${CONNECTION_POINT_TYPE},
55
+ createStrongRef(${CONNECTION_POINT_DEFAULT_VALUE})
56
+ );
57
+ `;
58
+ const BlockGetShaderBindingVars = ` const ${CAMEL_CASE_UNIFORM} = this._confirmRuntimeDataSupplied(this.${CAMEL_CASE_UNIFORM});`;
59
+ const FileTemplate = `/* eslint-disable prettier/prettier */
60
+ // ************************************************************
61
+ // Note: this file is auto-generated, do not modify it directly
62
+ // ************************************************************
63
+
64
+ // It was generated by convertGlslIntoBlock() from
65
+ // an annotated .glsl file. Modify the .glsl file to make changes
66
+ // to the block. This file will get overwritten when the build
67
+ // is run or during a watch when the .glsl file is updated.
68
+
69
+ import type { Effect } from "${BABYLON_CORE_PATH}/Materials/effect.js";
70
+
71
+ import {
72
+ ${SHADER_BINDING_EXTENDS},
73
+ type RuntimeData,
74
+ ConnectionPointType,
75
+ type SmartFilter,
76
+ ${SHADER_BLOCK_EXTENDS},
77
+ type ShaderProgram,
78
+ ${EXTRA_IMPORTS}} from "${SMART_FILTER_CORE_IMPORT}";${SHADER_PROGRAM}
79
+ /**
80
+ * The shader binding for the ${BLOCK_NAME}, used by the runtime
81
+ */
82
+ class ${BLOCK_NAME}ShaderBinding extends ${SHADER_BINDING_EXTENDS} {
83
+ ${SHADER_BINDING_PRIVATE_VARIABLES}
84
+
85
+ /**
86
+ * Creates a new shader binding instance for the block.
87
+ ${SHADER_BINDING_CTOR_DOCSTRING_PARAMS}
88
+ */
89
+ constructor(
90
+ ${SHADER_BINDING_CTOR_PARAMS}
91
+ ) {
92
+ super(${SHADER_BINDING_SUPER_PARAMS});
93
+ ${SHADER_BINDING_CTOR}
94
+ }
95
+
96
+ /**
97
+ * Binds all the required data to the shader when rendering.
98
+ * @param effect - defines the effect to bind the data to${EXTRA_BIND_DOCSTRING}
99
+ */
100
+ public override bind(effect: Effect${EXTRA_BIND_PARAMS}): void {
101
+ ${SHADER_BINDING_BIND}
102
+ }
103
+ }
104
+
105
+ /**
106
+ * The implementation of the ${BLOCK_NAME}
107
+ */
108
+ export class ${BLOCK_NAME} extends ${SHADER_BLOCK_EXTENDS} {
109
+ /**
110
+ * The class name of the block.
111
+ */
112
+ public static override ClassName = "${BLOCK_NAME}";
113
+
114
+ /**
115
+ * The namespace of the block.
116
+ */
117
+ public static override Namespace = "${NAMESPACE}";
118
+
119
+ ${BLOCK_INPUT_PROPERTIES}
120
+ /**
121
+ * The shader program (vertex and fragment code) to use to render the block
122
+ */
123
+ public static override ShaderCode = BlockShaderProgram;
124
+
125
+ /**
126
+ * Instantiates a new ${BLOCK_NAME}.
127
+ * @param smartFilter - The smart filter this block belongs to
128
+ * @param name - The friendly name of the block
129
+ */
130
+ constructor(smartFilter: SmartFilter, name: string) {
131
+ super(smartFilter, name, ${BLOCK_DISABLE_OPTIMIZATION}${BLOCK_DISABLE_STRATEGY});
132
+ }
133
+
134
+ /**
135
+ * Get the class instance that binds all the required data to the shader (effect) when rendering.
136
+ * @returns The class instance that binds the data to the effect
137
+ */
138
+ public getShaderBinding(): ${SHADER_BINDING_EXTENDS} {
139
+ ${BLOCK_GET_SHADER_BINDING_VARS}
140
+
141
+ return new ${BLOCK_NAME}ShaderBinding(${BLOCK_GET_SHADER_PARAM_LIST});
142
+ }
143
+ }
144
+
145
+ `;
146
+ /**
147
+ * Converts a single shader to a .ts file which exports a Smart Filter block
148
+ * @param fragmentShaderPath - The path to the fragment file for the shader
149
+ * @param smartFiltersCorePath - The path to import the Smart Filters core from
150
+ * @param babylonCorePath - The path to import the Babylon core from (optional)
151
+
152
+ */
153
+ export function ConvertGlslIntoBlock(fragmentShaderPath, smartFiltersCorePath, babylonCorePath) {
154
+ const extraImports = [];
155
+ const { shaderProgramCode, fragmentShaderInfo } = ExtractShaderProgramFromGlsl(fragmentShaderPath, smartFiltersCorePath, false, false);
156
+ // Validation
157
+ if (!fragmentShaderInfo.blockType) {
158
+ throw new Error("The glsl file must contain a header comment with a smartFilterBlockType value");
159
+ }
160
+ // Generate shader binding private variables
161
+ const shaderBindingPrivateVariables = fragmentShaderInfo.uniforms
162
+ .map((uniform) => {
163
+ return uniform.properties?.autoBind
164
+ ? null
165
+ : ShaderBindingPrivateVariablesTemplate.replace(CAMEL_CASE_UNIFORM, uniform.name).replace(CONNECTION_POINT_TYPE, GetConnectionPointTypeString(uniform.type));
166
+ })
167
+ .filter((line) => line !== null);
168
+ // Generate the shader binding constructor docstring params
169
+ const shaderBindingCtorDocstringParams = fragmentShaderInfo.uniforms
170
+ .map((uniform) => {
171
+ return uniform.properties?.autoBind ? null : ShaderBindingCtorDocstringParams.replace(new RegExp(CAMEL_CASE_UNIFORM, "g"), uniform.name);
172
+ })
173
+ .filter((param) => param !== null);
174
+ // Generate the shader binding constructor params
175
+ const shaderBindingCtorParams = fragmentShaderInfo.uniforms
176
+ .map((uniform) => {
177
+ return uniform.properties?.autoBind
178
+ ? null
179
+ : ShaderBindingCtorParams.replace(CAMEL_CASE_UNIFORM, uniform.name).replace(CONNECTION_POINT_TYPE, GetConnectionPointTypeString(uniform.type));
180
+ })
181
+ .filter((param) => param !== null);
182
+ // Generate the shader binding constructor
183
+ const shaderBindingCtor = fragmentShaderInfo.uniforms
184
+ .map((uniform) => {
185
+ return uniform.properties?.autoBind ? null : ShaderBindingCtor.replace(new RegExp(CAMEL_CASE_UNIFORM, "g"), uniform.name);
186
+ })
187
+ .filter((line) => line !== null);
188
+ // Generate the shader binding bind
189
+ let needWidthHeightParams = false;
190
+ const shaderBindingBind = fragmentShaderInfo.uniforms.map((uniform) => {
191
+ let effectValue;
192
+ let effectSetter = GetEffectSetter(uniform.type);
193
+ switch (uniform.properties?.autoBind) {
194
+ case "outputResolution":
195
+ {
196
+ effectValue = "width, height";
197
+ effectSetter = "setFloat2";
198
+ needWidthHeightParams = true;
199
+ }
200
+ break;
201
+ case "outputAspectRatio":
202
+ {
203
+ effectValue = "width / height, height / width";
204
+ effectSetter = "setFloat2";
205
+ needWidthHeightParams = true;
206
+ }
207
+ break;
208
+ default:
209
+ effectValue = ShaderBindingBindRegularValue;
210
+ }
211
+ return ShaderBindingBind.replace(EFFECT_VALUE, effectValue).replace(new RegExp(CAMEL_CASE_UNIFORM, "g"), uniform.name).replace(EFFECT_SETTER, effectSetter);
212
+ });
213
+ // Add extra params to the bind method if needed
214
+ let extraBindParams = "";
215
+ let extraBindDocstring = "";
216
+ if (needWidthHeightParams) {
217
+ extraBindDocstring = `
218
+ * @param width - defines the width of the output
219
+ * @param height - defines the height of the output`;
220
+ extraBindParams = `, width: number, height: number`;
221
+ }
222
+ // Generate the block input properties
223
+ const blockInputProperties = fragmentShaderInfo.uniforms
224
+ .map((uniform) => {
225
+ if (uniform.properties?.autoBind) {
226
+ return null;
227
+ }
228
+ else if (uniform.properties?.default !== undefined) {
229
+ if (extraImports.indexOf(" createStrongRef") === -1) {
230
+ extraImports.push(" createStrongRef");
231
+ }
232
+ return BlockInputOptionalProperty.replace(new RegExp(CAMEL_CASE_UNIFORM, "g"), uniform.name)
233
+ .replace(CONNECTION_POINT_TYPE, GetConnectionPointTypeString(uniform.type))
234
+ .replace(CONNECTION_POINT_DEFAULT_VALUE, uniform.properties.default);
235
+ }
236
+ else {
237
+ return BlockInputProperty.replace(new RegExp(CAMEL_CASE_UNIFORM, "g"), uniform.name).replace(CONNECTION_POINT_TYPE, GetConnectionPointTypeString(uniform.type));
238
+ }
239
+ })
240
+ .filter((property) => property !== null);
241
+ // Generate the block get shader binding vars
242
+ const blockGetShaderBindingVars = fragmentShaderInfo.uniforms
243
+ .map((uniform) => {
244
+ return uniform.properties?.autoBind ? null : BlockGetShaderBindingVars.replace(new RegExp(CAMEL_CASE_UNIFORM, "g"), uniform.name);
245
+ })
246
+ .filter((line) => line !== null);
247
+ // Handle the disable optimization flag
248
+ const disableOptimization = fragmentShaderInfo.disableOptimization === true ? "true" : "false";
249
+ // Generate the block get shader param list
250
+ const blockGetShaderParamList = fragmentShaderInfo.uniforms
251
+ .map((uniform) => {
252
+ return uniform.properties?.autoBind ? null : uniform.name;
253
+ })
254
+ .filter((param) => param !== null);
255
+ // Decide if this is a disableable block or not
256
+ let shaderBlockExtends = "ShaderBlock";
257
+ let shaderBindingExtends = "ShaderBinding";
258
+ let blockDisableStrategy = "";
259
+ let shaderBindingSuperParams = "";
260
+ if (fragmentShaderInfo.blockDisableStrategy) {
261
+ shaderBlockExtends = "DisableableShaderBlock";
262
+ shaderBindingExtends = "DisableableShaderBinding";
263
+ blockDisableStrategy = `, BlockDisableStrategy.${BlockDisableStrategy[fragmentShaderInfo.blockDisableStrategy]}`;
264
+ shaderBindingSuperParams = "parentBlock";
265
+ shaderBindingCtorDocstringParams.unshift(" * @param parentBlock - IDisableableBlock");
266
+ shaderBindingCtorParams.unshift(" parentBlock: IDisableableBlock");
267
+ blockGetShaderParamList.unshift("this");
268
+ extraImports.push(" type IDisableableBlock");
269
+ extraImports.push(" BlockDisableStrategy");
270
+ shaderBindingBind.unshift(" super.bind(effect);");
271
+ }
272
+ // Additional validation
273
+ if (fragmentShaderInfo.blockDisableStrategy !== undefined && fragmentShaderInfo.blockDisableStrategy !== BlockDisableStrategy.Manual) {
274
+ if (fragmentShaderInfo.uniforms.findIndex((uniform) => uniform.name === "disabled") !== -1) {
275
+ throw new Error("A block that uses a BlockDisableStrategy other than Manual should not declare its own 'disabled' uniform");
276
+ }
277
+ }
278
+ // Generate final contents
279
+ const finalContents = FileTemplate.replace(SHADER_PROGRAM, shaderProgramCode)
280
+ .replace(EXTRA_IMPORTS, extraImports.join(",\n"))
281
+ .replace(BABYLON_CORE_PATH, babylonCorePath || "@babylonjs/core")
282
+ .replace(SMART_FILTER_CORE_IMPORT, smartFiltersCorePath)
283
+ .replace(new RegExp(BLOCK_NAME, "g"), fragmentShaderInfo.blockType)
284
+ .replace(NAMESPACE, fragmentShaderInfo.namespace || "Other")
285
+ .replace(new RegExp(SHADER_BINDING_EXTENDS, "g"), shaderBindingExtends)
286
+ .replace(SHADER_BINDING_PRIVATE_VARIABLES, shaderBindingPrivateVariables.join("\n"))
287
+ .replace(SHADER_BINDING_CTOR_DOCSTRING_PARAMS, shaderBindingCtorDocstringParams.join("\n"))
288
+ .replace(SHADER_BINDING_CTOR_PARAMS, shaderBindingCtorParams.join(",\n"))
289
+ .replace(SHADER_BINDING_CTOR, shaderBindingCtor.join("\n"))
290
+ .replace(SHADER_BINDING_SUPER_PARAMS, shaderBindingSuperParams)
291
+ .replace(SHADER_BINDING_BIND, shaderBindingBind.join("\n"))
292
+ .replace(EXTRA_BIND_DOCSTRING, extraBindDocstring)
293
+ .replace(EXTRA_BIND_PARAMS, extraBindParams)
294
+ .replace(new RegExp(SHADER_BLOCK_EXTENDS, "g"), shaderBlockExtends)
295
+ .replace(BLOCK_INPUT_PROPERTIES, blockInputProperties.join("\n"))
296
+ .replace(BLOCK_DISABLE_OPTIMIZATION, disableOptimization)
297
+ .replace(BLOCK_DISABLE_STRATEGY, blockDisableStrategy)
298
+ .replace(BLOCK_GET_SHADER_BINDING_VARS, blockGetShaderBindingVars.join("\n"))
299
+ .replace(BLOCK_GET_SHADER_PARAM_LIST, blockGetShaderParamList.join(","));
300
+ // Write the block class TS file
301
+ const outputFullPathAndFileName = fragmentShaderPath.replace(".glsl", ".ts");
302
+ fs.writeFileSync(outputFullPathAndFileName, finalContents);
303
+ }
304
+ /**
305
+ * Get the string representation of a connection point type
306
+ * @param type - The connection point type
307
+ * @returns - The string representation of the connection point type
308
+ */
309
+ function GetConnectionPointTypeString(type) {
310
+ switch (type) {
311
+ case ConnectionPointType.Float:
312
+ return "Float";
313
+ case ConnectionPointType.Texture:
314
+ return "Texture";
315
+ case ConnectionPointType.Color3:
316
+ return "Color3";
317
+ case ConnectionPointType.Color4:
318
+ return "Color4";
319
+ case ConnectionPointType.Vector2:
320
+ return "Vector2";
321
+ case ConnectionPointType.Boolean:
322
+ return "Boolean";
323
+ }
324
+ }
325
+ /**
326
+ * Get the effect setter for a connection point type
327
+ * @param type - The connection point type
328
+ * @returns - The effect setter for the connection point type
329
+ */
330
+ function GetEffectSetter(type) {
331
+ switch (type) {
332
+ case ConnectionPointType.Float:
333
+ return "setFloat";
334
+ case ConnectionPointType.Texture:
335
+ return "setTexture";
336
+ case ConnectionPointType.Color3:
337
+ return "setColor3";
338
+ case ConnectionPointType.Color4:
339
+ return "setDirectColor4";
340
+ case ConnectionPointType.Vector2:
341
+ return "setVector2";
342
+ case ConnectionPointType.Boolean:
343
+ return "setBool";
344
+ }
345
+ }
346
+ //# sourceMappingURL=convertGlslIntoBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convertGlslIntoBlock.js","sourceRoot":"","sources":["../../../src/utils/buildTools/convertGlslIntoBlock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { type FragmentShaderInfo } from "./shaderConverter.js";
2
+ /**
3
+ * Converts a single shader to a .ts file which exports a ShaderProgram which can be imported by a hardcoded block
4
+ * @param fragmentShaderPath - The path to the fragment file for the shader
5
+ * @param importPath - The path to import the Smart Filters core from
6
+ */
7
+ export declare function ConvertGlslIntoShaderProgram(fragmentShaderPath: string, importPath: string): void;
8
+ /**
9
+ * Extracts the shader program from a glsl file(s) and returns it as a string which can be written to a .ts file
10
+ * @param fragmentShaderPath - The path to the fragment file for the shader
11
+ * @param smartFiltersCorePath - The path to import the Smart Filters core from
12
+ * @param exportObjects - Whether to export the shaderProgram and uniforms objects
13
+ * @param includeImports - Whether to include the imports in the output
14
+ * @returns The string to write to the .ts file
15
+ */
16
+ export declare function ExtractShaderProgramFromGlsl(fragmentShaderPath: string, smartFiltersCorePath: string, exportObjects: boolean, includeImports: boolean): {
17
+ /**
18
+ * The shader program code
19
+ */
20
+ shaderProgramCode: string;
21
+ /**
22
+ * The FragmentShaderInfo
23
+ */
24
+ fragmentShaderInfo: FragmentShaderInfo;
25
+ };
26
+ //# sourceMappingURL=convertGlslIntoShaderProgram.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convertGlslIntoShaderProgram.d.ts","sourceRoot":"","sources":["../../../src/utils/buildTools/convertGlslIntoShaderProgram.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAiEpF;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,kBAAkB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAIjG;AAED;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CACxC,kBAAkB,EAAE,MAAM,EAC1B,oBAAoB,EAAE,MAAM,EAC5B,aAAa,EAAE,OAAO,EACtB,cAAc,EAAE,OAAO,GACxB;IACC;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,kBAAkB,EAAE,kBAAkB,CAAC;CAC1C,CA0DA"}
@@ -0,0 +1,141 @@
1
+ import * as fs from "fs";
2
+ import { Logger } from "@onerjs/core/Misc/logger.js";
3
+ import { ParseFragmentShader } from "./shaderConverter.js";
4
+ // eslint-disable-next-line @typescript-eslint/naming-convention
5
+ const TYPE_IMPORT_PATH = "@TYPE_IMPORT_PATH@";
6
+ // eslint-disable-next-line @typescript-eslint/naming-convention
7
+ const VERTEX_SHADER = "@VERTEX_SHADER@";
8
+ const UNIFORMS = "@UNIFORMS@";
9
+ const CONSTS_VALUE = "@CONSTS@";
10
+ // eslint-disable-next-line @typescript-eslint/naming-convention
11
+ const CONSTS_PROPERTY = "@CONSTS_PROPERTY@";
12
+ const MAIN_INPUT_NAME = "@MAIN_INPUT_NAME@";
13
+ const MAIN_FUNCTION_NAME = "@MAIN_FUNCTION_NAME@";
14
+ const FUNCTIONS = "@FUNCTIONS@";
15
+ const FUNCTION_NAME = "@FUNCTION_NAME@";
16
+ const FUNCTION_PARAMS = "@FUNCTION_PARAMS@";
17
+ const FUNCTION_CODE = "@FUNCTION_CODE@";
18
+ const UNIFORM_NAMES = "@UNIFORM_NAMES@";
19
+ const EXPORT = "@EXPORT_SHADER_PROGRAM@";
20
+ const IMPORTS = "@IMPORT@";
21
+ const ConstsTemplate = `
22
+ const: \`${CONSTS_VALUE}\`,`;
23
+ const FunctionTemplate = `
24
+ {
25
+ name: "${FUNCTION_NAME}",
26
+ code: \`
27
+ ${FUNCTION_CODE}
28
+ \`,
29
+ params: "${FUNCTION_PARAMS}",
30
+ },`;
31
+ const CodeLinePrefix = " ";
32
+ const UniformLinePrefix = " ";
33
+ const ConstLinePrefix = " ";
34
+ const ImportTemplate = `import type { ShaderProgram } from "${TYPE_IMPORT_PATH}";`;
35
+ const ShaderTemplate = `${IMPORTS}
36
+
37
+ /**
38
+ * The shader program for the block.
39
+ */
40
+ const BlockShaderProgram: ShaderProgram = {
41
+ vertex: ${VERTEX_SHADER},
42
+ fragment: {
43
+ uniform: \`${UNIFORMS}\`,${CONSTS_PROPERTY}
44
+ mainInputTexture: "${MAIN_INPUT_NAME}",
45
+ mainFunctionName: "${MAIN_FUNCTION_NAME}",
46
+ functions: [${FUNCTIONS}
47
+ ],
48
+ },
49
+ };
50
+
51
+ /**
52
+ * The uniform names for this shader, to be used in the shader binding so
53
+ * that the names are always in sync.
54
+ */
55
+ const Uniforms = {
56
+ ${UNIFORM_NAMES}
57
+ };
58
+
59
+ ${EXPORT}`;
60
+ const UniformNameLinePrefix = " ";
61
+ /**
62
+ * Converts a single shader to a .ts file which exports a ShaderProgram which can be imported by a hardcoded block
63
+ * @param fragmentShaderPath - The path to the fragment file for the shader
64
+ * @param importPath - The path to import the Smart Filters core from
65
+ */
66
+ export function ConvertGlslIntoShaderProgram(fragmentShaderPath, importPath) {
67
+ const { shaderProgramCode } = ExtractShaderProgramFromGlsl(fragmentShaderPath, importPath, true, true);
68
+ const shaderFile = fragmentShaderPath.replace(".glsl", ".ts");
69
+ fs.writeFileSync(shaderFile, shaderProgramCode);
70
+ }
71
+ /**
72
+ * Extracts the shader program from a glsl file(s) and returns it as a string which can be written to a .ts file
73
+ * @param fragmentShaderPath - The path to the fragment file for the shader
74
+ * @param smartFiltersCorePath - The path to import the Smart Filters core from
75
+ * @param exportObjects - Whether to export the shaderProgram and uniforms objects
76
+ * @param includeImports - Whether to include the imports in the output
77
+ * @returns The string to write to the .ts file
78
+ */
79
+ export function ExtractShaderProgramFromGlsl(fragmentShaderPath, smartFiltersCorePath, exportObjects, includeImports) {
80
+ // See if there is a corresponding vertex shader
81
+ let vertexShader = undefined;
82
+ let extensionToFind;
83
+ if (fragmentShaderPath.endsWith(".block.glsl")) {
84
+ extensionToFind = ".block.glsl";
85
+ }
86
+ else if (fragmentShaderPath.endsWith(".fragment.glsl")) {
87
+ extensionToFind = ".fragment.glsl";
88
+ }
89
+ else {
90
+ throw new Error("The shader file must end with .fragment.glsl or .block.glsl");
91
+ }
92
+ const vertexShaderPath = fragmentShaderPath.replace(extensionToFind, ".vertex.glsl");
93
+ if (fs.existsSync(vertexShaderPath)) {
94
+ vertexShader = fs.readFileSync(vertexShaderPath, "utf8");
95
+ }
96
+ if (vertexShader) {
97
+ Logger.Log("Found vertex shader");
98
+ }
99
+ // Read the fragment shader
100
+ const fragmentShader = fs.readFileSync(fragmentShaderPath, "utf8");
101
+ const fragmentShaderInfo = ParseFragmentShader(fragmentShader);
102
+ // Generate the shader program code
103
+ const functionsSection = [];
104
+ for (const shaderFunction of fragmentShaderInfo.shaderCode.functions) {
105
+ functionsSection.push(FunctionTemplate.replace(FUNCTION_NAME, shaderFunction.name)
106
+ .replace(FUNCTION_PARAMS, shaderFunction.params || "")
107
+ .replace(FUNCTION_CODE, AddLinePrefixes(shaderFunction.code, CodeLinePrefix)));
108
+ }
109
+ const imports = includeImports ? ImportTemplate.replace(TYPE_IMPORT_PATH, smartFiltersCorePath) : "";
110
+ const finalContents = ShaderTemplate.replace(VERTEX_SHADER, vertexShader ? `\`${vertexShader}\`` : "undefined")
111
+ .replace(IMPORTS, imports)
112
+ .replace(UNIFORMS, "\n" + AddLinePrefixes(fragmentShaderInfo.shaderCode.uniform || "", UniformLinePrefix))
113
+ .replace(MAIN_FUNCTION_NAME, fragmentShaderInfo.shaderCode.mainFunctionName)
114
+ .replace(MAIN_INPUT_NAME, fragmentShaderInfo.shaderCode.mainInputTexture || "")
115
+ .replace(CONSTS_PROPERTY, fragmentShaderInfo.shaderCode.const ? ConstsTemplate.replace(CONSTS_VALUE, AddLinePrefixes(fragmentShaderInfo.shaderCode.const, ConstLinePrefix)) : "")
116
+ .replace(FUNCTIONS, functionsSection.join(""))
117
+ .replace(UNIFORM_NAMES, AddLinePrefixes(fragmentShaderInfo.uniforms.map((u) => `${u.name}: "${u.name}",`).join("\n"), UniformNameLinePrefix))
118
+ .replace(new RegExp(EXPORT, "g"), exportObjects
119
+ ? `export { BlockShaderProgram, Uniforms };
120
+ // Back compat for when camelCase was used
121
+ export { BlockShaderProgram as shaderProgram, Uniforms as uniforms };
122
+ `
123
+ : "");
124
+ return {
125
+ shaderProgramCode: finalContents,
126
+ fragmentShaderInfo,
127
+ };
128
+ }
129
+ /**
130
+ * Prefixes each line in the input
131
+ * @param input - The input string
132
+ * @param prefix - The prefix to add to each line
133
+ * @returns The input with each line prefixed
134
+ */
135
+ function AddLinePrefixes(input, prefix) {
136
+ return input
137
+ .split("\n")
138
+ .map((line) => prefix + line)
139
+ .join("\n");
140
+ }
141
+ //# sourceMappingURL=convertGlslIntoShaderProgram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convertGlslIntoShaderProgram.js","sourceRoot":"","sources":["../../../src/utils/buildTools/convertGlslIntoShaderProgram.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Converts all GLSL files in a path into blocks for use in the build system.
3
+ * @param shaderPath - The path to the .glsl files to convert, or a single .glsl file.
4
+ * @param smartFiltersCorePath - The path to import the Smart Filters core from.
5
+ * @param babylonCorePath - The path to import the Babylon core from (optional).
6
+
7
+ */
8
+ export declare function ConvertShaders(shaderPath: string, smartFiltersCorePath: string, babylonCorePath?: string): void;
9
+ /**
10
+ * Converts a single GLSL file into a block class or a ShaderProgram for use in the build system.
11
+ * @param fullPathAndFileName - The full path and file name of the .glsl file to convert.
12
+ * @param smartFiltersCorePath - The path to import the Smart Filters core from.
13
+ * @param babylonCorePath - The path to import the Babylon core from (optional).
14
+ */
15
+ export declare function ConvertShader(fullPathAndFileName: string, smartFiltersCorePath: string, babylonCorePath?: string): void;
16
+ //# sourceMappingURL=convertShaders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convertShaders.d.ts","sourceRoot":"","sources":["../../../src/utils/buildTools/convertShaders.ts"],"names":[],"mappings":"AAMA;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,QAiCxG;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,mBAAmB,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAUvH"}
@@ -0,0 +1,62 @@
1
+ import * as fs from "fs";
2
+ import * as path from "path";
3
+ import { Logger } from "@onerjs/core/Misc/logger.js";
4
+ import { ConvertGlslIntoShaderProgram } from "./convertGlslIntoShaderProgram.js";
5
+ import { ConvertGlslIntoBlock } from "./convertGlslIntoBlock.js";
6
+ /**
7
+ * Converts all GLSL files in a path into blocks for use in the build system.
8
+ * @param shaderPath - The path to the .glsl files to convert, or a single .glsl file.
9
+ * @param smartFiltersCorePath - The path to import the Smart Filters core from.
10
+ * @param babylonCorePath - The path to import the Babylon core from (optional).
11
+
12
+ */
13
+ export function ConvertShaders(shaderPath, smartFiltersCorePath, babylonCorePath) {
14
+ const stats = fs.statSync(shaderPath);
15
+ let shaderFiles;
16
+ if (stats.isFile()) {
17
+ // If it's a file, create a Dirent-like object for consistency
18
+ const fileName = path.basename(shaderPath);
19
+ const dirPath = path.dirname(shaderPath);
20
+ shaderFiles = [
21
+ {
22
+ name: fileName,
23
+ path: dirPath,
24
+ isFile: () => true,
25
+ isDirectory: () => false,
26
+ },
27
+ ];
28
+ }
29
+ else if (stats.isDirectory()) {
30
+ // Get all files in the directory
31
+ const allFiles = fs.readdirSync(shaderPath, { withFileTypes: true, recursive: true });
32
+ // Find all shaders (files with .fragment.glsl or .block.glsl extensions)
33
+ shaderFiles = allFiles.filter((file) => file.isFile() && (file.name.endsWith(".fragment.glsl") || file.name.endsWith(".block.glsl")));
34
+ }
35
+ else {
36
+ Logger.Log(`Error: ${shaderPath} is neither a file nor a directory.`);
37
+ return;
38
+ }
39
+ // Convert all shaders
40
+ for (const shaderFile of shaderFiles) {
41
+ const fullPathAndFileName = path.join(shaderFile.path, shaderFile.name);
42
+ ConvertShader(fullPathAndFileName, smartFiltersCorePath, babylonCorePath);
43
+ }
44
+ }
45
+ /**
46
+ * Converts a single GLSL file into a block class or a ShaderProgram for use in the build system.
47
+ * @param fullPathAndFileName - The full path and file name of the .glsl file to convert.
48
+ * @param smartFiltersCorePath - The path to import the Smart Filters core from.
49
+ * @param babylonCorePath - The path to import the Babylon core from (optional).
50
+ */
51
+ export function ConvertShader(fullPathAndFileName, smartFiltersCorePath, babylonCorePath) {
52
+ Logger.Log(`\nProcessing shader: ${fullPathAndFileName}`);
53
+ if (fullPathAndFileName.endsWith(".fragment.glsl")) {
54
+ Logger.Log("Generating a .ts file that exports a ShaderProgram.");
55
+ ConvertGlslIntoShaderProgram(fullPathAndFileName, smartFiltersCorePath);
56
+ }
57
+ else if (fullPathAndFileName.endsWith(".block.glsl")) {
58
+ Logger.Log("Generating a .ts file that exports the block as a class.");
59
+ ConvertGlslIntoBlock(fullPathAndFileName, smartFiltersCorePath, babylonCorePath);
60
+ }
61
+ }
62
+ //# sourceMappingURL=convertShaders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convertShaders.js","sourceRoot":"","sources":["../../../src/utils/buildTools/convertShaders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,oCAA4B;AAC7C,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,UAAkB,EAAE,oBAA4B,EAAE,eAAwB;IACrG,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAEtC,IAAI,WAAwB,CAAC;IAE7B,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;QACjB,8DAA8D;QAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACzC,WAAW,GAAG;YACV;gBACI,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI;gBAClB,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK;aACd;SACjB,CAAC;IACN,CAAC;SAAM,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QAC7B,iCAAiC;QACjC,MAAM,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEtF,yEAAyE;QACzE,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAC1I,CAAC;SAAM,CAAC;QACJ,MAAM,CAAC,GAAG,CAAC,UAAU,UAAU,qCAAqC,CAAC,CAAC;QACtE,OAAO;IACX,CAAC;IAED,sBAAsB;IACtB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACnC,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QACxE,aAAa,CAAC,mBAAmB,EAAE,oBAAoB,EAAE,eAAe,CAAC,CAAC;IAC9E,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,mBAA2B,EAAE,oBAA4B,EAAE,eAAwB;IAC7G,MAAM,CAAC,GAAG,CAAC,wBAAwB,mBAAmB,EAAE,CAAC,CAAC;IAE1D,IAAI,mBAAmB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACjD,MAAM,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;QAClE,4BAA4B,CAAC,mBAAmB,EAAE,oBAAoB,CAAC,CAAC;IAC5E,CAAC;SAAM,IAAI,mBAAmB,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACrD,MAAM,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;QACvE,oBAAoB,CAAC,mBAAmB,EAAE,oBAAoB,EAAE,eAAe,CAAC,CAAC;IACrF,CAAC;AACL,CAAC"}