@babylonjs/smart-filters 0.7.8-alpha → 0.7.10-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (370) hide show
  1. package/dist/{blocks → blockFoundation}/aggregateBlock.d.ts +1 -1
  2. package/dist/blockFoundation/aggregateBlock.d.ts.map +1 -0
  3. package/dist/{blocks → blockFoundation}/aggregateBlock.js +1 -1
  4. package/dist/blockFoundation/aggregateBlock.js.map +1 -0
  5. package/dist/{blocks → blockFoundation}/baseBlock.d.ts +2 -2
  6. package/dist/blockFoundation/baseBlock.d.ts.map +1 -0
  7. package/dist/blockFoundation/baseBlock.js.map +1 -0
  8. package/dist/blockFoundation/customAggregateBlock.d.ts.map +1 -0
  9. package/dist/blockFoundation/customAggregateBlock.js.map +1 -0
  10. package/dist/{blocks → blockFoundation}/customShaderBlock.d.ts +2 -2
  11. package/dist/blockFoundation/customShaderBlock.d.ts.map +1 -0
  12. package/dist/blockFoundation/customShaderBlock.js.map +1 -0
  13. package/dist/blockFoundation/disableableShaderBlock.d.ts.map +1 -0
  14. package/dist/blockFoundation/disableableShaderBlock.js.map +1 -0
  15. package/dist/blockFoundation/index.d.ts +10 -0
  16. package/dist/blockFoundation/index.d.ts.map +1 -0
  17. package/dist/blockFoundation/index.js +10 -0
  18. package/dist/blockFoundation/index.js.map +1 -0
  19. package/dist/{blocks → blockFoundation}/inputBlock.d.ts +1 -1
  20. package/dist/blockFoundation/inputBlock.d.ts.map +1 -0
  21. package/dist/blockFoundation/inputBlock.deserializer.d.ts.map +1 -0
  22. package/dist/blockFoundation/inputBlock.deserializer.js.map +1 -0
  23. package/dist/{blocks → blockFoundation}/inputBlock.js +1 -1
  24. package/dist/blockFoundation/inputBlock.js.map +1 -0
  25. package/dist/blockFoundation/inputBlock.serialization.types.d.ts.map +1 -0
  26. package/dist/blockFoundation/inputBlock.serialization.types.js.map +1 -0
  27. package/dist/blockFoundation/inputBlock.serializer.d.ts.map +1 -0
  28. package/dist/blockFoundation/inputBlock.serializer.js.map +1 -0
  29. package/dist/blockFoundation/outputBlock.d.ts.map +1 -0
  30. package/dist/blockFoundation/outputBlock.js.map +1 -0
  31. package/dist/blockFoundation/outputBlock.shader.d.ts.map +1 -0
  32. package/dist/blockFoundation/outputBlock.shader.js.map +1 -0
  33. package/dist/blockFoundation/shaderBlock.d.ts.map +1 -0
  34. package/dist/blockFoundation/shaderBlock.js.map +1 -0
  35. package/dist/blockFoundation/textureOptions.d.ts.map +1 -0
  36. package/dist/blockFoundation/textureOptions.js.map +1 -0
  37. package/dist/blockRegistration/IBlockRegistration.d.ts +36 -0
  38. package/dist/blockRegistration/IBlockRegistration.d.ts.map +1 -0
  39. package/dist/blockRegistration/IBlockRegistration.js +2 -0
  40. package/dist/blockRegistration/IBlockRegistration.js.map +1 -0
  41. package/dist/blockRegistration/blockSerializers.d.ts +13 -0
  42. package/dist/blockRegistration/blockSerializers.d.ts.map +1 -0
  43. package/dist/blockRegistration/blockSerializers.js +35 -0
  44. package/dist/blockRegistration/blockSerializers.js.map +1 -0
  45. package/dist/blockRegistration/builtInBlockRegistrations.d.ts +13 -0
  46. package/dist/blockRegistration/builtInBlockRegistrations.d.ts.map +1 -0
  47. package/dist/blockRegistration/builtInBlockRegistrations.js +266 -0
  48. package/dist/blockRegistration/builtInBlockRegistrations.js.map +1 -0
  49. package/dist/blockRegistration/index.d.ts +3 -0
  50. package/dist/blockRegistration/index.d.ts.map +1 -0
  51. package/dist/blockRegistration/index.js +3 -0
  52. package/dist/blockRegistration/index.js.map +1 -0
  53. package/dist/blocks/babylon/demo/effects/blackAndWhiteBlock.d.ts +56 -0
  54. package/dist/blocks/babylon/demo/effects/blackAndWhiteBlock.d.ts.map +1 -0
  55. package/dist/blocks/babylon/demo/effects/blackAndWhiteBlock.js +66 -0
  56. package/dist/blocks/babylon/demo/effects/blackAndWhiteBlock.js.map +1 -0
  57. package/dist/blocks/babylon/demo/effects/blackAndWhiteBlock.shader.d.ts +13 -0
  58. package/dist/blocks/babylon/demo/effects/blackAndWhiteBlock.shader.d.ts.map +1 -0
  59. package/dist/blocks/babylon/demo/effects/blackAndWhiteBlock.shader.js +36 -0
  60. package/dist/blocks/babylon/demo/effects/blackAndWhiteBlock.shader.js.map +1 -0
  61. package/dist/blocks/babylon/demo/effects/blurBlock.d.ts +56 -0
  62. package/dist/blocks/babylon/demo/effects/blurBlock.d.ts.map +1 -0
  63. package/dist/blocks/babylon/demo/effects/blurBlock.deserializer.d.ts +29 -0
  64. package/dist/blocks/babylon/demo/effects/blurBlock.deserializer.d.ts.map +1 -0
  65. package/dist/blocks/babylon/demo/effects/blurBlock.deserializer.js +16 -0
  66. package/dist/blocks/babylon/demo/effects/blurBlock.deserializer.js.map +1 -0
  67. package/dist/blocks/babylon/demo/effects/blurBlock.js +100 -0
  68. package/dist/blocks/babylon/demo/effects/blurBlock.js.map +1 -0
  69. package/dist/blocks/babylon/demo/effects/blurBlock.serializer.d.ts +8 -0
  70. package/dist/blocks/babylon/demo/effects/blurBlock.serializer.d.ts.map +1 -0
  71. package/dist/blocks/babylon/demo/effects/blurBlock.serializer.js +28 -0
  72. package/dist/blocks/babylon/demo/effects/blurBlock.serializer.js.map +1 -0
  73. package/dist/blocks/babylon/demo/effects/compositionBlock.d.ts +118 -0
  74. package/dist/blocks/babylon/demo/effects/compositionBlock.d.ts.map +1 -0
  75. package/dist/blocks/babylon/demo/effects/compositionBlock.deserializer.d.ts +25 -0
  76. package/dist/blocks/babylon/demo/effects/compositionBlock.deserializer.d.ts.map +1 -0
  77. package/dist/blocks/babylon/demo/effects/compositionBlock.deserializer.js +15 -0
  78. package/dist/blocks/babylon/demo/effects/compositionBlock.deserializer.js.map +1 -0
  79. package/dist/blocks/babylon/demo/effects/compositionBlock.js +219 -0
  80. package/dist/blocks/babylon/demo/effects/compositionBlock.js.map +1 -0
  81. package/dist/blocks/babylon/demo/effects/compositionBlock.serializer.d.ts +6 -0
  82. package/dist/blocks/babylon/demo/effects/compositionBlock.serializer.d.ts.map +1 -0
  83. package/dist/blocks/babylon/demo/effects/compositionBlock.serializer.js +25 -0
  84. package/dist/blocks/babylon/demo/effects/compositionBlock.serializer.js.map +1 -0
  85. package/dist/blocks/babylon/demo/effects/contrastBlock.d.ts +63 -0
  86. package/dist/blocks/babylon/demo/effects/contrastBlock.d.ts.map +1 -0
  87. package/dist/blocks/babylon/demo/effects/contrastBlock.js +122 -0
  88. package/dist/blocks/babylon/demo/effects/contrastBlock.js.map +1 -0
  89. package/dist/blocks/babylon/demo/effects/desaturateBlock.d.ts +63 -0
  90. package/dist/blocks/babylon/demo/effects/desaturateBlock.d.ts.map +1 -0
  91. package/dist/blocks/babylon/demo/effects/desaturateBlock.js +107 -0
  92. package/dist/blocks/babylon/demo/effects/desaturateBlock.js.map +1 -0
  93. package/dist/blocks/babylon/demo/effects/directionalBlurBlock.d.ts +79 -0
  94. package/dist/blocks/babylon/demo/effects/directionalBlurBlock.d.ts.map +1 -0
  95. package/dist/blocks/babylon/demo/effects/directionalBlurBlock.deserializer.d.ts +33 -0
  96. package/dist/blocks/babylon/demo/effects/directionalBlurBlock.deserializer.d.ts.map +1 -0
  97. package/dist/blocks/babylon/demo/effects/directionalBlurBlock.deserializer.js +17 -0
  98. package/dist/blocks/babylon/demo/effects/directionalBlurBlock.deserializer.js.map +1 -0
  99. package/dist/blocks/babylon/demo/effects/directionalBlurBlock.js +171 -0
  100. package/dist/blocks/babylon/demo/effects/directionalBlurBlock.js.map +1 -0
  101. package/dist/blocks/babylon/demo/effects/directionalBlurBlock.serializer.d.ts +6 -0
  102. package/dist/blocks/babylon/demo/effects/directionalBlurBlock.serializer.d.ts.map +1 -0
  103. package/dist/blocks/babylon/demo/effects/directionalBlurBlock.serializer.js +27 -0
  104. package/dist/blocks/babylon/demo/effects/directionalBlurBlock.serializer.js.map +1 -0
  105. package/dist/blocks/babylon/demo/effects/exposureBlock.d.ts +63 -0
  106. package/dist/blocks/babylon/demo/effects/exposureBlock.d.ts.map +1 -0
  107. package/dist/blocks/babylon/demo/effects/exposureBlock.js +95 -0
  108. package/dist/blocks/babylon/demo/effects/exposureBlock.js.map +1 -0
  109. package/dist/blocks/babylon/demo/effects/greenScreenBlock.d.ts +75 -0
  110. package/dist/blocks/babylon/demo/effects/greenScreenBlock.d.ts.map +1 -0
  111. package/dist/blocks/babylon/demo/effects/greenScreenBlock.js +121 -0
  112. package/dist/blocks/babylon/demo/effects/greenScreenBlock.js.map +1 -0
  113. package/dist/blocks/babylon/demo/effects/index.d.ts +15 -0
  114. package/dist/blocks/babylon/demo/effects/index.d.ts.map +1 -0
  115. package/dist/blocks/babylon/demo/effects/index.js +15 -0
  116. package/dist/blocks/babylon/demo/effects/index.js.map +1 -0
  117. package/dist/blocks/babylon/demo/effects/kaleidoscopeBlock.d.ts +63 -0
  118. package/dist/blocks/babylon/demo/effects/kaleidoscopeBlock.d.ts.map +1 -0
  119. package/dist/blocks/babylon/demo/effects/kaleidoscopeBlock.js +159 -0
  120. package/dist/blocks/babylon/demo/effects/kaleidoscopeBlock.js.map +1 -0
  121. package/dist/blocks/babylon/demo/effects/maskBlock.d.ts +62 -0
  122. package/dist/blocks/babylon/demo/effects/maskBlock.d.ts.map +1 -0
  123. package/dist/blocks/babylon/demo/effects/maskBlock.js +75 -0
  124. package/dist/blocks/babylon/demo/effects/maskBlock.js.map +1 -0
  125. package/dist/blocks/babylon/demo/effects/maskBlock.shader.d.ts +14 -0
  126. package/dist/blocks/babylon/demo/effects/maskBlock.shader.d.ts.map +1 -0
  127. package/dist/blocks/babylon/demo/effects/maskBlock.shader.js +37 -0
  128. package/dist/blocks/babylon/demo/effects/maskBlock.shader.js.map +1 -0
  129. package/dist/blocks/babylon/demo/effects/pixelateBlock.d.ts +62 -0
  130. package/dist/blocks/babylon/demo/effects/pixelateBlock.d.ts.map +1 -0
  131. package/dist/blocks/babylon/demo/effects/pixelateBlock.js +77 -0
  132. package/dist/blocks/babylon/demo/effects/pixelateBlock.js.map +1 -0
  133. package/dist/blocks/babylon/demo/effects/pixelateBlock.shader.d.ts +15 -0
  134. package/dist/blocks/babylon/demo/effects/pixelateBlock.shader.d.ts.map +1 -0
  135. package/dist/blocks/babylon/demo/effects/pixelateBlock.shader.js +44 -0
  136. package/dist/blocks/babylon/demo/effects/pixelateBlock.shader.js.map +1 -0
  137. package/dist/blocks/babylon/demo/effects/posterizeBlock.d.ts +63 -0
  138. package/dist/blocks/babylon/demo/effects/posterizeBlock.d.ts.map +1 -0
  139. package/dist/blocks/babylon/demo/effects/posterizeBlock.js +108 -0
  140. package/dist/blocks/babylon/demo/effects/posterizeBlock.js.map +1 -0
  141. package/dist/blocks/babylon/demo/effects/spritesheetBlock.d.ts +81 -0
  142. package/dist/blocks/babylon/demo/effects/spritesheetBlock.d.ts.map +1 -0
  143. package/dist/blocks/babylon/demo/effects/spritesheetBlock.js +103 -0
  144. package/dist/blocks/babylon/demo/effects/spritesheetBlock.js.map +1 -0
  145. package/dist/blocks/babylon/demo/effects/spritesheetBlock.shader.d.ts +18 -0
  146. package/dist/blocks/babylon/demo/effects/spritesheetBlock.shader.d.ts.map +1 -0
  147. package/dist/blocks/babylon/demo/effects/spritesheetBlock.shader.js +57 -0
  148. package/dist/blocks/babylon/demo/effects/spritesheetBlock.shader.js.map +1 -0
  149. package/dist/blocks/babylon/demo/effects/tintBlock.d.ts +7 -0
  150. package/dist/blocks/babylon/demo/effects/tintBlock.d.ts.map +1 -0
  151. package/dist/blocks/babylon/demo/effects/tintBlock.js +51 -0
  152. package/dist/blocks/babylon/demo/effects/tintBlock.js.map +1 -0
  153. package/dist/blocks/babylon/demo/transitions/index.d.ts +2 -0
  154. package/dist/blocks/babylon/demo/transitions/index.d.ts.map +1 -0
  155. package/dist/blocks/babylon/demo/transitions/index.js +2 -0
  156. package/dist/blocks/babylon/demo/transitions/index.js.map +1 -0
  157. package/dist/blocks/babylon/demo/transitions/wipeBlock.d.ts +69 -0
  158. package/dist/blocks/babylon/demo/transitions/wipeBlock.d.ts.map +1 -0
  159. package/dist/blocks/babylon/demo/transitions/wipeBlock.js +110 -0
  160. package/dist/blocks/babylon/demo/transitions/wipeBlock.js.map +1 -0
  161. package/dist/blocks/babylon/demo/utilities/index.d.ts +2 -0
  162. package/dist/blocks/babylon/demo/utilities/index.d.ts.map +1 -0
  163. package/dist/blocks/babylon/demo/utilities/index.js +2 -0
  164. package/dist/blocks/babylon/demo/utilities/index.js.map +1 -0
  165. package/dist/blocks/babylon/demo/utilities/premultiplyAlphaBlock.d.ts +58 -0
  166. package/dist/blocks/babylon/demo/utilities/premultiplyAlphaBlock.d.ts.map +1 -0
  167. package/dist/blocks/babylon/demo/utilities/premultiplyAlphaBlock.js +87 -0
  168. package/dist/blocks/babylon/demo/utilities/premultiplyAlphaBlock.js.map +1 -0
  169. package/dist/blocks/blockNamespaces.d.ts +5 -0
  170. package/dist/blocks/blockNamespaces.d.ts.map +1 -0
  171. package/dist/blocks/blockNamespaces.js +5 -0
  172. package/dist/blocks/blockNamespaces.js.map +1 -0
  173. package/dist/blocks/blockTypes.d.ts +22 -0
  174. package/dist/blocks/blockTypes.d.ts.map +1 -0
  175. package/dist/blocks/blockTypes.js +22 -0
  176. package/dist/blocks/blockTypes.js.map +1 -0
  177. package/dist/blocks/index.d.ts +6 -0
  178. package/dist/blocks/index.d.ts.map +1 -0
  179. package/dist/blocks/index.js +6 -0
  180. package/dist/blocks/index.js.map +1 -0
  181. package/dist/command/index.d.ts +4 -0
  182. package/dist/command/index.d.ts.map +1 -0
  183. package/dist/command/index.js +4 -0
  184. package/dist/command/index.js.map +1 -0
  185. package/dist/connection/connectionPoint.d.ts +1 -1
  186. package/dist/connection/connectionPoint.d.ts.map +1 -1
  187. package/dist/connection/connectionPointWithDefault.d.ts +1 -1
  188. package/dist/connection/connectionPointWithDefault.d.ts.map +1 -1
  189. package/dist/connection/index.d.ts +7 -0
  190. package/dist/connection/index.d.ts.map +1 -0
  191. package/dist/connection/index.js +7 -0
  192. package/dist/connection/index.js.map +1 -0
  193. package/dist/editorUtils/index.d.ts +2 -0
  194. package/dist/editorUtils/index.d.ts.map +1 -0
  195. package/dist/editorUtils/index.js +2 -0
  196. package/dist/editorUtils/index.js.map +1 -0
  197. package/dist/index.d.ts +10 -30
  198. package/dist/index.d.ts.map +1 -1
  199. package/dist/index.js +10 -30
  200. package/dist/index.js.map +1 -1
  201. package/dist/optimization/index.d.ts +2 -0
  202. package/dist/optimization/index.d.ts.map +1 -0
  203. package/dist/optimization/index.js +2 -0
  204. package/dist/optimization/index.js.map +1 -0
  205. package/dist/optimization/optimizedShaderBlock.d.ts +1 -1
  206. package/dist/optimization/optimizedShaderBlock.d.ts.map +1 -1
  207. package/dist/optimization/optimizedShaderBlock.js +1 -1
  208. package/dist/optimization/optimizedShaderBlock.js.map +1 -1
  209. package/dist/optimization/smartFilterOptimizer.js +4 -4
  210. package/dist/optimization/smartFilterOptimizer.js.map +1 -1
  211. package/dist/runtime/index.d.ts +7 -0
  212. package/dist/runtime/index.d.ts.map +1 -0
  213. package/dist/runtime/index.js +7 -0
  214. package/dist/runtime/index.js.map +1 -0
  215. package/dist/runtime/renderTargetGenerator.js +1 -1
  216. package/dist/runtime/renderTargetGenerator.js.map +1 -1
  217. package/dist/runtime/shaderRuntime.d.ts +2 -2
  218. package/dist/runtime/shaderRuntime.d.ts.map +1 -1
  219. package/dist/serialization/index.d.ts +1 -0
  220. package/dist/serialization/index.d.ts.map +1 -1
  221. package/dist/serialization/index.js +1 -0
  222. package/dist/serialization/index.js.map +1 -1
  223. package/dist/serialization/smartFilterDeserializer.d.ts +1 -1
  224. package/dist/serialization/smartFilterDeserializer.d.ts.map +1 -1
  225. package/dist/serialization/smartFilterDeserializer.js +3 -3
  226. package/dist/serialization/smartFilterDeserializer.js.map +1 -1
  227. package/dist/serialization/smartFilterSerializer.js +4 -4
  228. package/dist/serialization/smartFilterSerializer.js.map +1 -1
  229. package/dist/serialization/v1/smartFilterSerialization.types.d.ts +1 -1
  230. package/dist/serialization/v1/smartFilterSerialization.types.d.ts.map +1 -1
  231. package/dist/smartFilter.d.ts +2 -2
  232. package/dist/smartFilter.d.ts.map +1 -1
  233. package/dist/smartFilter.js +3 -3
  234. package/dist/smartFilter.js.map +1 -1
  235. package/dist/utils/index.d.ts +3 -0
  236. package/dist/utils/index.d.ts.map +1 -0
  237. package/dist/utils/index.js +3 -0
  238. package/dist/utils/index.js.map +1 -0
  239. package/dist/utils/renderTargetUtils.d.ts +2 -2
  240. package/dist/utils/renderTargetUtils.d.ts.map +1 -1
  241. package/dist/utils/textureUtils.d.ts +1 -1
  242. package/dist/utils/textureUtils.d.ts.map +1 -1
  243. package/dist/version.d.ts +1 -1
  244. package/dist/version.d.ts.map +1 -1
  245. package/dist/version.js +1 -1
  246. package/dist/version.js.map +1 -1
  247. package/package.json +3 -6
  248. package/src/{blocks → blockFoundation}/aggregateBlock.ts +1 -1
  249. package/src/{blocks → blockFoundation}/baseBlock.ts +2 -2
  250. package/src/{blocks → blockFoundation}/customShaderBlock.ts +3 -3
  251. package/src/blockFoundation/index.ts +9 -0
  252. package/src/{blocks → blockFoundation}/inputBlock.serializer.ts +1 -1
  253. package/src/{blocks → blockFoundation}/inputBlock.ts +1 -1
  254. package/src/blockRegistration/IBlockRegistration.ts +45 -0
  255. package/src/blockRegistration/blockSerializers.ts +52 -0
  256. package/src/blockRegistration/builtInBlockRegistrations.ts +390 -0
  257. package/src/blockRegistration/index.ts +2 -0
  258. package/src/blocks/babylon/demo/effects/blackAndWhiteBlock.fragment.glsl +10 -0
  259. package/src/blocks/babylon/demo/effects/blackAndWhiteBlock.shader.ts +38 -0
  260. package/src/blocks/babylon/demo/effects/blackAndWhiteBlock.ts +80 -0
  261. package/src/blocks/babylon/demo/effects/blurBlock.deserializer.ts +38 -0
  262. package/src/blocks/babylon/demo/effects/blurBlock.serializer.ts +32 -0
  263. package/src/blocks/babylon/demo/effects/blurBlock.ts +119 -0
  264. package/src/blocks/babylon/demo/effects/compositionBlock.deserializer.ts +32 -0
  265. package/src/blocks/babylon/demo/effects/compositionBlock.serializer.ts +29 -0
  266. package/src/blocks/babylon/demo/effects/compositionBlock.ts +293 -0
  267. package/src/blocks/babylon/demo/effects/contrastBlock.ts +152 -0
  268. package/src/blocks/babylon/demo/effects/desaturateBlock.ts +137 -0
  269. package/src/blocks/babylon/demo/effects/directionalBlurBlock.deserializer.ts +47 -0
  270. package/src/blocks/babylon/demo/effects/directionalBlurBlock.serializer.ts +31 -0
  271. package/src/blocks/babylon/demo/effects/directionalBlurBlock.ts +193 -0
  272. package/src/blocks/babylon/demo/effects/exposureBlock.ts +120 -0
  273. package/src/blocks/babylon/demo/effects/greenScreenBlock.ts +152 -0
  274. package/src/blocks/babylon/demo/effects/index.ts +14 -0
  275. package/src/blocks/babylon/demo/effects/kaleidoscopeBlock.ts +186 -0
  276. package/src/blocks/babylon/demo/effects/maskBlock.fragment.glsl +10 -0
  277. package/src/blocks/babylon/demo/effects/maskBlock.shader.ts +39 -0
  278. package/src/blocks/babylon/demo/effects/maskBlock.ts +94 -0
  279. package/src/blocks/babylon/demo/effects/pixelateBlock.fragment.glsl +18 -0
  280. package/src/blocks/babylon/demo/effects/pixelateBlock.shader.ts +46 -0
  281. package/src/blocks/babylon/demo/effects/pixelateBlock.ts +101 -0
  282. package/src/blocks/babylon/demo/effects/posterizeBlock.ts +139 -0
  283. package/src/blocks/babylon/demo/effects/spritesheetBlock.fragment.glsl +26 -0
  284. package/src/blocks/babylon/demo/effects/spritesheetBlock.shader.ts +59 -0
  285. package/src/blocks/babylon/demo/effects/spritesheetBlock.ts +135 -0
  286. package/src/blocks/babylon/demo/effects/tintBlock.ts +52 -0
  287. package/src/blocks/babylon/demo/transitions/index.ts +1 -0
  288. package/src/blocks/babylon/demo/transitions/wipeBlock.ts +138 -0
  289. package/src/blocks/babylon/demo/utilities/index.ts +1 -0
  290. package/src/blocks/babylon/demo/utilities/premultiplyAlphaBlock.ts +106 -0
  291. package/src/blocks/blockNamespaces.ts +4 -0
  292. package/src/blocks/blockTypes.ts +21 -0
  293. package/src/blocks/index.ts +5 -0
  294. package/src/command/index.ts +3 -0
  295. package/src/connection/connectionPoint.ts +1 -1
  296. package/src/connection/connectionPointWithDefault.ts +1 -1
  297. package/src/connection/index.ts +9 -0
  298. package/src/editorUtils/index.ts +1 -0
  299. package/src/index.ts +11 -39
  300. package/src/optimization/index.ts +1 -0
  301. package/src/optimization/optimizedShaderBlock.ts +1 -1
  302. package/src/optimization/smartFilterOptimizer.ts +6 -6
  303. package/src/runtime/index.ts +6 -0
  304. package/src/runtime/renderTargetGenerator.ts +3 -3
  305. package/src/runtime/shaderRuntime.ts +2 -2
  306. package/src/serialization/index.ts +1 -0
  307. package/src/serialization/smartFilterDeserializer.ts +4 -4
  308. package/src/serialization/smartFilterSerializer.ts +5 -5
  309. package/src/serialization/v1/defaultBlockSerializer.ts +1 -1
  310. package/src/serialization/v1/smartFilterSerialization.types.ts +1 -1
  311. package/src/smartFilter.ts +4 -4
  312. package/src/utils/index.ts +2 -0
  313. package/src/utils/renderTargetUtils.ts +2 -2
  314. package/src/utils/textureUtils.ts +1 -1
  315. package/src/version.ts +1 -1
  316. package/dist/blocks/aggregateBlock.d.ts.map +0 -1
  317. package/dist/blocks/aggregateBlock.js.map +0 -1
  318. package/dist/blocks/baseBlock.d.ts.map +0 -1
  319. package/dist/blocks/baseBlock.js.map +0 -1
  320. package/dist/blocks/customAggregateBlock.d.ts.map +0 -1
  321. package/dist/blocks/customAggregateBlock.js.map +0 -1
  322. package/dist/blocks/customShaderBlock.d.ts.map +0 -1
  323. package/dist/blocks/customShaderBlock.js.map +0 -1
  324. package/dist/blocks/disableableShaderBlock.d.ts.map +0 -1
  325. package/dist/blocks/disableableShaderBlock.js.map +0 -1
  326. package/dist/blocks/inputBlock.d.ts.map +0 -1
  327. package/dist/blocks/inputBlock.deserializer.d.ts.map +0 -1
  328. package/dist/blocks/inputBlock.deserializer.js.map +0 -1
  329. package/dist/blocks/inputBlock.js.map +0 -1
  330. package/dist/blocks/inputBlock.serialization.types.d.ts.map +0 -1
  331. package/dist/blocks/inputBlock.serialization.types.js.map +0 -1
  332. package/dist/blocks/inputBlock.serializer.d.ts.map +0 -1
  333. package/dist/blocks/inputBlock.serializer.js.map +0 -1
  334. package/dist/blocks/outputBlock.d.ts.map +0 -1
  335. package/dist/blocks/outputBlock.js.map +0 -1
  336. package/dist/blocks/outputBlock.shader.d.ts.map +0 -1
  337. package/dist/blocks/outputBlock.shader.js.map +0 -1
  338. package/dist/blocks/shaderBlock.d.ts.map +0 -1
  339. package/dist/blocks/shaderBlock.js.map +0 -1
  340. package/dist/blocks/textureOptions.d.ts.map +0 -1
  341. package/dist/blocks/textureOptions.js.map +0 -1
  342. /package/dist/{blocks → blockFoundation}/baseBlock.js +0 -0
  343. /package/dist/{blocks → blockFoundation}/customAggregateBlock.d.ts +0 -0
  344. /package/dist/{blocks → blockFoundation}/customAggregateBlock.js +0 -0
  345. /package/dist/{blocks → blockFoundation}/customShaderBlock.js +0 -0
  346. /package/dist/{blocks → blockFoundation}/disableableShaderBlock.d.ts +0 -0
  347. /package/dist/{blocks → blockFoundation}/disableableShaderBlock.js +0 -0
  348. /package/dist/{blocks → blockFoundation}/inputBlock.deserializer.d.ts +0 -0
  349. /package/dist/{blocks → blockFoundation}/inputBlock.deserializer.js +0 -0
  350. /package/dist/{blocks → blockFoundation}/inputBlock.serialization.types.d.ts +0 -0
  351. /package/dist/{blocks → blockFoundation}/inputBlock.serialization.types.js +0 -0
  352. /package/dist/{blocks → blockFoundation}/inputBlock.serializer.d.ts +0 -0
  353. /package/dist/{blocks → blockFoundation}/inputBlock.serializer.js +0 -0
  354. /package/dist/{blocks → blockFoundation}/outputBlock.d.ts +0 -0
  355. /package/dist/{blocks → blockFoundation}/outputBlock.js +0 -0
  356. /package/dist/{blocks → blockFoundation}/outputBlock.shader.d.ts +0 -0
  357. /package/dist/{blocks → blockFoundation}/outputBlock.shader.js +0 -0
  358. /package/dist/{blocks → blockFoundation}/shaderBlock.d.ts +0 -0
  359. /package/dist/{blocks → blockFoundation}/shaderBlock.js +0 -0
  360. /package/dist/{blocks → blockFoundation}/textureOptions.d.ts +0 -0
  361. /package/dist/{blocks → blockFoundation}/textureOptions.js +0 -0
  362. /package/src/{blocks → blockFoundation}/customAggregateBlock.ts +0 -0
  363. /package/src/{blocks → blockFoundation}/disableableShaderBlock.ts +0 -0
  364. /package/src/{blocks → blockFoundation}/inputBlock.deserializer.ts +0 -0
  365. /package/src/{blocks → blockFoundation}/inputBlock.serialization.types.ts +0 -0
  366. /package/src/{blocks → blockFoundation}/outputBlock.fragment.glsl +0 -0
  367. /package/src/{blocks → blockFoundation}/outputBlock.shader.ts +0 -0
  368. /package/src/{blocks → blockFoundation}/outputBlock.ts +0 -0
  369. /package/src/{blocks → blockFoundation}/shaderBlock.ts +0 -0
  370. /package/src/{blocks → blockFoundation}/textureOptions.ts +0 -0
@@ -0,0 +1,186 @@
1
+ import type { Effect } from "@babylonjs/core/Materials/effect";
2
+
3
+ import { type RuntimeData } from "../../../../connection/connectionPoint.js";
4
+ import { ConnectionPointType } from "../../../../connection/connectionPointType.js";
5
+ import { type IDisableableBlock, DisableableShaderBlock } from "../../../../blockFoundation/disableableShaderBlock.js";
6
+ import { DisableStrategy } from "../../../../blockFoundation/index.js";
7
+ import { DisableableShaderBinding } from "../../../../runtime/shaderRuntime.js";
8
+ import type { ShaderProgram } from "../../../../utils/shaderCodeUtils.js";
9
+ import type { SmartFilter } from "../../../../smartFilter.js";
10
+
11
+ import { kaleidoscopeBlockType } from "../../../blockTypes.js";
12
+ import { babylonDemoEffectsNamespace } from "../../../blockNamespaces.js";
13
+
14
+ const shaderProgram: ShaderProgram = {
15
+ vertex: `
16
+ // Attributes
17
+ attribute vec2 position;
18
+
19
+ // Output
20
+ varying vec2 vUV;
21
+
22
+ void main(void) {
23
+ vUV = position;
24
+ gl_Position = vec4(position, 0.0, 1.0);
25
+ }
26
+ `,
27
+
28
+ fragment: {
29
+ uniform: `
30
+ uniform sampler2D _input_;
31
+ uniform float _time_;
32
+ uniform bool _disabled_;
33
+ `,
34
+
35
+ const: `
36
+ const float _width_ = 200.;
37
+ const float _height_ = 300.;
38
+ const vec2 _imageRatio_ = vec2(700. / _width_, 1024. / _height_);
39
+ const vec2 _imageRelativeSize_ = 1. / _imageRatio_;
40
+ const float _halfDiag_ = sqrt(_imageRelativeSize_.x * _imageRelativeSize_.x + _imageRelativeSize_.y * _imageRelativeSize_.y) * 0.5;
41
+
42
+ const float _radius_ = 0.9;
43
+ const float _radius2_ = 0.4;
44
+
45
+ const float _segments_ = 6.;
46
+ const float _segmentArc_ = (2. * 3.1415926535897932384626433832795 / _segments_);
47
+ `,
48
+
49
+ mainFunctionName: "_kaleidoscope_",
50
+
51
+ mainInputTexture: "_input_",
52
+
53
+ functions: [
54
+ {
55
+ name: "_kaleidoscope_",
56
+ code: `
57
+ vec4 _kaleidoscope_(vec2 vUV) {
58
+ if (_disabled_) return texture2D(_input_, vUV);
59
+
60
+ float distanceToCircle = abs(length(vUV) - _radius_);
61
+ vec4 result = vec4(0., 0., 0., 0.);
62
+
63
+ if (distanceToCircle < _halfDiag_ * 10000.) {
64
+ float pointTheta = atan(vUV.y, vUV.x);
65
+ pointTheta += _time_;
66
+ for (float i = -1.; i < 2.; i += 1.) {
67
+ float chunk = floor(pointTheta / _segmentArc_) + i;
68
+ float chunkStart = -_time_ + chunk * _segmentArc_ + _segmentArc_ * 0.5;
69
+ vec2 chunkStartCenter = vec2(cos(chunkStart), sin(chunkStart)) * _radius_;
70
+ vec2 chunkStartPoint = vUV - chunkStartCenter;
71
+ chunkStartPoint *= _imageRatio_;
72
+ chunkStartPoint *= vec2(0.5, 0.5);
73
+ chunkStartPoint += vec2(0.5, 0.5);
74
+
75
+ if (chunkStartPoint.x > 0. && chunkStartPoint.x < 1. && chunkStartPoint.y > 0. && chunkStartPoint.y < 1.) {
76
+ result = texture2D(_input_, chunkStartPoint);
77
+ }
78
+ }
79
+
80
+ for (float i = -1.; i < 2.; i += 1.) {
81
+ float chunk = floor(pointTheta / _segmentArc_) + i;
82
+ float chunkStart = -_time_ + chunk * _segmentArc_ + _segmentArc_ * 0.5;
83
+ vec2 chunkStartCenter = vec2(cos(chunkStart), sin(chunkStart)) * _radius2_;
84
+ vec2 chunkStartPoint = vUV - chunkStartCenter;
85
+ chunkStartPoint *= _imageRatio_;
86
+ chunkStartPoint *= vec2(0.5, 0.5);
87
+ chunkStartPoint += vec2(0.5, 0.5);
88
+
89
+ if (chunkStartPoint.x > 0. && chunkStartPoint.x < 1. && chunkStartPoint.y > 0. && chunkStartPoint.y < 1.) {
90
+ vec4 top = texture2D(_input_, chunkStartPoint);
91
+ result = mix(result, top, (result.a <= 0.) ? 1. : top.a);
92
+ }
93
+ }
94
+ }
95
+
96
+ return result;
97
+ }
98
+ `,
99
+ },
100
+ ],
101
+ },
102
+ };
103
+
104
+ /**
105
+ * The shader bindings for the Kaleidoscope block.
106
+ */
107
+ export class KaleidoscopeShaderBinding extends DisableableShaderBinding {
108
+ private readonly _inputTexture: RuntimeData<ConnectionPointType.Texture>;
109
+ private readonly _time: RuntimeData<ConnectionPointType.Float>;
110
+
111
+ /**
112
+ * Creates a new shader binding instance for the Kaleidoscope block.
113
+ * @param parentBlock - The parent block
114
+ * @param inputTexture - the input texture
115
+ * @param time - the time
116
+ */
117
+ constructor(
118
+ parentBlock: IDisableableBlock,
119
+ inputTexture: RuntimeData<ConnectionPointType.Texture>,
120
+ time: RuntimeData<ConnectionPointType.Float>
121
+ ) {
122
+ super(parentBlock);
123
+ this._inputTexture = inputTexture;
124
+ this._time = time;
125
+ }
126
+
127
+ /**
128
+ * Binds all the required data to the shader when rendering.
129
+ * @param effect - defines the effect to bind the data to
130
+ */
131
+ public override bind(effect: Effect): void {
132
+ super.bind(effect);
133
+ effect.setTexture(this.getRemappedName("input"), this._inputTexture.value);
134
+ effect.setFloat(this.getRemappedName("time"), this._time.value);
135
+ }
136
+ }
137
+
138
+ /**
139
+ * A block performing a Kaleidoscope looking like effect.
140
+ */
141
+ export class KaleidoscopeBlock extends DisableableShaderBlock {
142
+ /**
143
+ * The class name of the block.
144
+ */
145
+ public static override ClassName = kaleidoscopeBlockType;
146
+
147
+ /**
148
+ * The namespace of the block.
149
+ */
150
+ public static override Namespace = babylonDemoEffectsNamespace;
151
+
152
+ /**
153
+ * The input texture connection point.
154
+ */
155
+ public readonly input = this._registerInput("input", ConnectionPointType.Texture);
156
+
157
+ /**
158
+ * The time connection point.
159
+ */
160
+ public readonly time = this._registerInput("time", ConnectionPointType.Float);
161
+
162
+ /**
163
+ * The shader program (vertex and fragment code) to use to render the block
164
+ */
165
+ public static override ShaderCode = shaderProgram;
166
+
167
+ /**
168
+ * Instantiates a new Block.
169
+ * @param smartFilter - The smart filter this block belongs to
170
+ * @param name - The friendly name of the block
171
+ */
172
+ constructor(smartFilter: SmartFilter, name: string) {
173
+ super(smartFilter, name, false, DisableStrategy.Manual);
174
+ }
175
+
176
+ /**
177
+ * Get the class instance that binds all the required data to the shader (effect) when rendering.
178
+ * @returns The class instance that binds the data to the effect
179
+ */
180
+ public getShaderBinding(): DisableableShaderBinding {
181
+ const input = this._confirmRuntimeDataSupplied(this.input);
182
+ const time = this._confirmRuntimeDataSupplied(this.time);
183
+
184
+ return new KaleidoscopeShaderBinding(this, input, time);
185
+ }
186
+ }
@@ -0,0 +1,10 @@
1
+ uniform sampler2D input; // main
2
+ uniform sampler2D mask;
3
+
4
+ vec4 maskBlock(vec2 vUV) { // main
5
+ vec4 color = texture2D(input, vUV);
6
+ vec3 maskColor = texture2D(mask, vUV).rgb;
7
+ float luminance = dot(maskColor, vec3(0.3, 0.59, 0.11));
8
+
9
+ return vec4(color.rgb * luminance, luminance * color.a);
10
+ }
@@ -0,0 +1,39 @@
1
+ import type { ShaderProgram } from "../../../../utils/shaderCodeUtils";
2
+
3
+ /**
4
+ * The shader program for the block.
5
+ */
6
+ export const shaderProgram: ShaderProgram = {
7
+ vertex: undefined,
8
+ fragment: {
9
+ uniform: `
10
+ uniform sampler2D _input_; // main
11
+ uniform sampler2D _mask_;`,
12
+ mainInputTexture: "_input_",
13
+ mainFunctionName: "_maskBlock_",
14
+ functions: [
15
+ {
16
+ name: "_maskBlock_",
17
+ code: `
18
+ vec4 _maskBlock_(vec2 vUV) {
19
+ vec4 color = texture2D(_input_, vUV);
20
+ vec3 maskColor = texture2D(_mask_, vUV).rgb;
21
+ float luminance = dot(maskColor, vec3(0.3, 0.59, 0.11));
22
+
23
+ return vec4(color.rgb * luminance, luminance * color.a);
24
+ }
25
+
26
+ `,
27
+ },
28
+ ],
29
+ },
30
+ };
31
+
32
+ /**
33
+ * The uniform names for this shader, to be used in the shader binding so
34
+ * that the names are always in sync.
35
+ */
36
+ export const uniforms = {
37
+ input: "input",
38
+ mask: "mask",
39
+ };
@@ -0,0 +1,94 @@
1
+ import type { Effect } from "@babylonjs/core/Materials/effect";
2
+
3
+ import { maskBlockType } from "../../../blockTypes.js";
4
+ import { type RuntimeData } from "../../../../connection/connectionPoint.js";
5
+ import { ConnectionPointType } from "../../../../connection/connectionPointType.js";
6
+ import { type IDisableableBlock, DisableableShaderBlock } from "../../../../blockFoundation/disableableShaderBlock.js";
7
+ import { DisableableShaderBinding } from "../../../../runtime/shaderRuntime.js";
8
+ import type { SmartFilter } from "../../../../smartFilter.js";
9
+
10
+ import { babylonDemoEffectsNamespace } from "../../../blockNamespaces.js";
11
+ import { uniforms, shaderProgram } from "./maskBlock.shader.js";
12
+
13
+ /**
14
+ * The shader bindings for the Mask block.
15
+ */
16
+ export class MaskShaderBinding extends DisableableShaderBinding {
17
+ private readonly _inputTexture: RuntimeData<ConnectionPointType.Texture>;
18
+ private readonly _maskTexture: RuntimeData<ConnectionPointType.Texture>;
19
+
20
+ /**
21
+ * Creates a new shader binding instance for the Mask block.
22
+ * @param parentBlock - The parent block
23
+ * @param inputTexture - the input texture
24
+ * @param maskTexture - the mask texture
25
+ */
26
+ constructor(
27
+ parentBlock: IDisableableBlock,
28
+ inputTexture: RuntimeData<ConnectionPointType.Texture>,
29
+ maskTexture: RuntimeData<ConnectionPointType.Texture>
30
+ ) {
31
+ super(parentBlock);
32
+ this._inputTexture = inputTexture;
33
+ this._maskTexture = maskTexture;
34
+ }
35
+
36
+ /**
37
+ * Binds all the required data to the shader when rendering.
38
+ * @param effect - defines the effect to bind the data to
39
+ */
40
+ public override bind(effect: Effect): void {
41
+ super.bind(effect);
42
+ effect.setTexture(this.getRemappedName(uniforms.input), this._inputTexture.value);
43
+ effect.setTexture(this.getRemappedName(uniforms.mask), this._maskTexture.value);
44
+ }
45
+ }
46
+
47
+ /**
48
+ * A simple block to apply a mask from one texture to the color of another texture
49
+ */
50
+ export class MaskBlock extends DisableableShaderBlock {
51
+ /**
52
+ * The class name of the block.
53
+ */
54
+ public static override ClassName = maskBlockType;
55
+
56
+ /**
57
+ * The namespace of the block.
58
+ */
59
+ public static override Namespace = babylonDemoEffectsNamespace;
60
+
61
+ /**
62
+ * The input texture connection point.
63
+ */
64
+ public readonly input = this._registerInput("input", ConnectionPointType.Texture);
65
+
66
+ /**
67
+ * The mask texture connection point.
68
+ */
69
+ public readonly mask = this._registerInput("mask", ConnectionPointType.Texture);
70
+ /**
71
+ * The shader program (vertex and fragment code) to use to render the block
72
+ */
73
+ public static override ShaderCode = shaderProgram;
74
+
75
+ /**
76
+ * Instantiates a new Block.
77
+ * @param smartFilter - The smart filter this block belongs to
78
+ * @param name - The friendly name of the block
79
+ */
80
+ constructor(smartFilter: SmartFilter, name: string) {
81
+ super(smartFilter, name);
82
+ }
83
+
84
+ /**
85
+ * Get the class instance that binds all the required data to the shader (effect) when rendering.
86
+ * @returns The class instance that binds the data to the effect
87
+ */
88
+ public getShaderBinding(): DisableableShaderBinding {
89
+ const input = this._confirmRuntimeDataSupplied(this.input);
90
+ const mask = this._confirmRuntimeDataSupplied(this.mask);
91
+
92
+ return new MaskShaderBinding(this, input, mask);
93
+ }
94
+ }
@@ -0,0 +1,18 @@
1
+ uniform sampler2D input; // main
2
+ uniform float intensity;
3
+ uniform bool disabled;
4
+
5
+ const float videoPixelatePower = 6.0;
6
+ const float videoPixelateMin = 10.0;
7
+ const float videoPixelateMax = 1920.0;
8
+
9
+ const float aspect = 1.72;
10
+
11
+ vec4 pixelate(vec2 vUV) { // main
12
+ if (!disabled) {
13
+ float pixelateStrength = mix(videoPixelateMin, videoPixelateMax, pow(1. - intensity, videoPixelatePower));
14
+ vec2 pixelate = vec2(pixelateStrength * aspect, pixelateStrength);
15
+ vUV = floor(pixelate * vUV) / pixelate;
16
+ }
17
+ return texture2D(input, vUV);
18
+ }
@@ -0,0 +1,46 @@
1
+ import type { ShaderProgram } from "../../../../utils/shaderCodeUtils";
2
+
3
+ /**
4
+ * The shader program for the block.
5
+ */
6
+ export const shaderProgram: ShaderProgram = {
7
+ vertex: undefined,
8
+ fragment: {
9
+ uniform: `
10
+ uniform sampler2D _input_; // main
11
+ uniform float _intensity_;
12
+ uniform bool _disabled_;`,
13
+ const: ` const float _videoPixelatePower_ = 6.0;
14
+ const float _videoPixelateMin_ = 10.0;
15
+ const float _videoPixelateMax_ = 1920.0;
16
+ const float _aspect_ = 1.72;`,
17
+ mainInputTexture: "_input_",
18
+ mainFunctionName: "_pixelate_",
19
+ functions: [
20
+ {
21
+ name: "_pixelate_",
22
+ code: `
23
+ vec4 _pixelate_(vec2 vUV) {
24
+ if (!_disabled_) {
25
+ float pixelateStrength = mix(_videoPixelateMin_, _videoPixelateMax_, pow(1. - _intensity_, _videoPixelatePower_));
26
+ vec2 _pixelate_ = vec2(pixelateStrength * _aspect_, pixelateStrength);
27
+ vUV = floor(_pixelate_ * vUV) / _pixelate_;
28
+ }
29
+ return texture2D(_input_, vUV);
30
+ }
31
+
32
+ `,
33
+ },
34
+ ],
35
+ },
36
+ };
37
+
38
+ /**
39
+ * The uniform names for this shader, to be used in the shader binding so
40
+ * that the names are always in sync.
41
+ */
42
+ export const uniforms = {
43
+ input: "input",
44
+ intensity: "intensity",
45
+ disabled: "disabled",
46
+ };
@@ -0,0 +1,101 @@
1
+ import type { Effect } from "@babylonjs/core/Materials/effect";
2
+
3
+ import { pixelateBlockType } from "../../../blockTypes.js";
4
+ import { type RuntimeData } from "../../../../connection/connectionPoint.js";
5
+ import { ConnectionPointType } from "../../../../connection/connectionPointType.js";
6
+ import { type IDisableableBlock, DisableableShaderBlock } from "../../../../blockFoundation/disableableShaderBlock.js";
7
+ import { DisableStrategy } from "../../../../blockFoundation/index.js";
8
+ import { DisableableShaderBinding } from "../../../../runtime/shaderRuntime.js";
9
+ import { createStrongRef } from "../../../../runtime/strongRef.js";
10
+ import type { SmartFilter } from "../../../../smartFilter.js";
11
+
12
+ import { babylonDemoEffectsNamespace } from "../../../blockNamespaces.js";
13
+ import { shaderProgram, uniforms } from "./pixelateBlock.shader.js";
14
+
15
+ /**
16
+ * The shader bindings for the Pixelate block.
17
+ */
18
+ export class PixelateShaderBinding extends DisableableShaderBinding {
19
+ private readonly _inputTexture: RuntimeData<ConnectionPointType.Texture>;
20
+ private readonly _intensity: RuntimeData<ConnectionPointType.Float>;
21
+
22
+ /**
23
+ * Creates a new shader binding instance for the Kaleidoscope block.
24
+ * @param parentBlock - The parent block
25
+ * @param inputTexture - The input texture
26
+ * @param intensity - The intensity of the effect
27
+ */
28
+ constructor(
29
+ parentBlock: IDisableableBlock,
30
+ inputTexture: RuntimeData<ConnectionPointType.Texture>,
31
+ intensity: RuntimeData<ConnectionPointType.Float>
32
+ ) {
33
+ super(parentBlock);
34
+ this._inputTexture = inputTexture;
35
+ this._intensity = intensity;
36
+ }
37
+
38
+ /**
39
+ * Binds all the required data to the shader when rendering.
40
+ * @param effect - defines the effect to bind the data to
41
+ */
42
+ public override bind(effect: Effect): void {
43
+ super.bind(effect);
44
+ effect.setTexture(this.getRemappedName(uniforms.input), this._inputTexture.value);
45
+ effect.setFloat(this.getRemappedName(uniforms.intensity), this._intensity.value);
46
+ }
47
+ }
48
+
49
+ /**
50
+ * A simple block pixelating the input texture.
51
+ */
52
+ export class PixelateBlock extends DisableableShaderBlock {
53
+ /**
54
+ * The class name of the block.
55
+ */
56
+ public static override ClassName = pixelateBlockType;
57
+
58
+ /**
59
+ * The namespace of the block.
60
+ */
61
+ public static override Namespace = babylonDemoEffectsNamespace;
62
+
63
+ /**
64
+ * The input texture connection point.
65
+ */
66
+ public readonly input = this._registerInput("input", ConnectionPointType.Texture);
67
+
68
+ /**
69
+ * The intensity connection point.
70
+ */
71
+ public readonly intensity = this._registerOptionalInput(
72
+ "intensity",
73
+ ConnectionPointType.Float,
74
+ createStrongRef(0.3)
75
+ );
76
+
77
+ /**
78
+ * The shader program (vertex and fragment code) to use to render the block
79
+ */
80
+ public static override ShaderCode = shaderProgram;
81
+
82
+ /**
83
+ * Instantiates a new Block.
84
+ * @param smartFilter - The smart filter this block belongs to
85
+ * @param name - The friendly name of the block
86
+ */
87
+ constructor(smartFilter: SmartFilter, name: string) {
88
+ super(smartFilter, name, false, DisableStrategy.Manual);
89
+ }
90
+
91
+ /**
92
+ * Get the class instance that binds all the required data to the shader (effect) when rendering.
93
+ * @returns The class instance that binds the data to the effect
94
+ */
95
+ public getShaderBinding(): DisableableShaderBinding {
96
+ const input = this._confirmRuntimeDataSupplied(this.input);
97
+ const intensity = this.intensity.runtimeData;
98
+
99
+ return new PixelateShaderBinding(this, input, intensity);
100
+ }
101
+ }
@@ -0,0 +1,139 @@
1
+ import type { Effect } from "@babylonjs/core/Materials/effect";
2
+
3
+ import { type IDisableableBlock, DisableableShaderBlock } from "../../../../blockFoundation/disableableShaderBlock.js";
4
+ import type { RuntimeData } from "../../../../connection/connectionPoint.js";
5
+ import { ConnectionPointType } from "../../../../connection/connectionPointType.js";
6
+ import { DisableableShaderBinding } from "../../../../runtime/shaderRuntime.js";
7
+ import { createStrongRef } from "../../../../runtime/strongRef.js";
8
+ import type { SmartFilter } from "../../../../smartFilter.js";
9
+ import type { ShaderProgram } from "../../../../utils/shaderCodeUtils.js";
10
+
11
+ import { posterizeBlockType } from "../../../blockTypes.js";
12
+ import { babylonDemoEffectsNamespace } from "../../../blockNamespaces.js";
13
+
14
+ const shaderProgram: ShaderProgram = {
15
+ fragment: {
16
+ uniform: `
17
+ uniform sampler2D _input_;
18
+ uniform float _intensity_;
19
+ `,
20
+
21
+ const: `
22
+ const float _posterizePower_ = 6.0;
23
+ const float _minLevel_ = 2.0;
24
+ const float _maxLevel_ = 256.0;
25
+
26
+ const float _aspect_ = 1.72;
27
+ `,
28
+
29
+ mainFunctionName: "_posterize_",
30
+
31
+ mainInputTexture: "_input_",
32
+
33
+ functions: [
34
+ {
35
+ name: "_posterize_",
36
+ code: `
37
+ vec4 _posterize_(vec2 vUV)
38
+ {
39
+ vec4 color = texture2D(_input_, vUV);
40
+
41
+ float posterizeStrength = mix(_minLevel_, _maxLevel_, pow(1. - _intensity_, _posterizePower_));
42
+ vec3 posterize = vec3(posterizeStrength);
43
+ color.rgb = floor(color.rgb / (1.0 / posterize)) * (1.0 / posterize);
44
+
45
+ return color;
46
+ }
47
+ `,
48
+ },
49
+ ],
50
+ },
51
+ };
52
+
53
+ /**
54
+ * The shader bindings for the Posterize block.
55
+ */
56
+ export class PosterizeShaderBinding extends DisableableShaderBinding {
57
+ private readonly _inputTexture: RuntimeData<ConnectionPointType.Texture>;
58
+ private readonly _intensity: RuntimeData<ConnectionPointType.Float>;
59
+
60
+ /**
61
+ * Creates a new shader binding instance for the Posterize block.
62
+ * @param parentBlock - The parent block
63
+ * @param inputTexture - The input texture
64
+ * @param intensity - The intensity of the effect
65
+ */
66
+ constructor(
67
+ parentBlock: IDisableableBlock,
68
+ inputTexture: RuntimeData<ConnectionPointType.Texture>,
69
+ intensity: RuntimeData<ConnectionPointType.Float>
70
+ ) {
71
+ super(parentBlock);
72
+ this._inputTexture = inputTexture;
73
+ this._intensity = intensity;
74
+ }
75
+
76
+ /**
77
+ * Binds all the required data to the shader when rendering.
78
+ * @param effect - defines the effect to bind the data to
79
+ */
80
+ public override bind(effect: Effect): void {
81
+ super.bind(effect);
82
+ effect.setTexture(this.getRemappedName("input"), this._inputTexture.value);
83
+ effect.setFloat(this.getRemappedName("intensity"), this._intensity.value);
84
+ }
85
+ }
86
+
87
+ /**
88
+ * A simple block posterizing the input texture.
89
+ */
90
+ export class PosterizeBlock extends DisableableShaderBlock {
91
+ /**
92
+ * The class name of the block.
93
+ */
94
+ public static override ClassName = posterizeBlockType;
95
+
96
+ /**
97
+ * The namespace of the block.
98
+ */
99
+ public static override Namespace = babylonDemoEffectsNamespace;
100
+
101
+ /**
102
+ * The input texture connection point.
103
+ */
104
+ public readonly input = this._registerInput("input", ConnectionPointType.Texture);
105
+
106
+ /**
107
+ * The intensity connection point.
108
+ */
109
+ public readonly intensity = this._registerOptionalInput(
110
+ "intensity",
111
+ ConnectionPointType.Float,
112
+ createStrongRef(0.3)
113
+ );
114
+
115
+ /**
116
+ * The shader program (vertex and fragment code) to use to render the block
117
+ */
118
+ public static override ShaderCode = shaderProgram;
119
+
120
+ /**
121
+ * Instantiates a new Block.
122
+ * @param smartFilter - The smart filter this block belongs to
123
+ * @param name - The friendly name of the block
124
+ */
125
+ constructor(smartFilter: SmartFilter, name: string) {
126
+ super(smartFilter, name);
127
+ }
128
+
129
+ /**
130
+ * Get the class instance that binds all the required data to the shader (effect) when rendering.
131
+ * @returns The class instance that binds the data to the effect
132
+ */
133
+ public getShaderBinding(): DisableableShaderBinding {
134
+ const input = this._confirmRuntimeDataSupplied(this.input);
135
+ const intensity = this.intensity.runtimeData;
136
+
137
+ return new PosterizeShaderBinding(this, input, intensity);
138
+ }
139
+ }
@@ -0,0 +1,26 @@
1
+ uniform sampler2D input; // main
2
+ uniform float time;
3
+ uniform float rows;
4
+ uniform float cols;
5
+ uniform float frames;
6
+ uniform bool disabled;
7
+
8
+ vec4 mainImage(vec2 vUV) { // main
9
+ if (!disabled) {
10
+ float invRows = 1.0 / rows;
11
+ float invCols = 1.0 / cols;
12
+
13
+ // Get offset of frame
14
+ float frame = mod(floor(time), frames);
15
+ float row = (rows - 1.0) - floor(frame * invCols); // Reverse row direction b/c UVs start from bottom
16
+ float col = mod(frame, cols);
17
+
18
+ // Add offset, then scale UV down to frame size
19
+ vUV = vec2(
20
+ (vUV.x + col) * invCols,
21
+ (vUV.y + row) * invRows
22
+ );
23
+ }
24
+
25
+ return texture2D(input, vUV);
26
+ }