@lightningjs/renderer 3.0.0-beta9 → 3.0.1

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 (541) hide show
  1. package/LICENSE +202 -202
  2. package/NOTICE +3 -3
  3. package/README.md +230 -147
  4. package/dist/exports/canvas.d.ts +1 -1
  5. package/dist/exports/canvas.js +1 -1
  6. package/dist/exports/canvas.js.map +1 -1
  7. package/dist/exports/index.d.ts +5 -6
  8. package/dist/exports/index.js +3 -5
  9. package/dist/exports/index.js.map +1 -1
  10. package/dist/exports/platform.d.ts +7 -0
  11. package/dist/exports/platform.js +27 -0
  12. package/dist/exports/platform.js.map +1 -0
  13. package/dist/exports/webgl.d.ts +2 -1
  14. package/dist/exports/webgl.js +2 -1
  15. package/dist/exports/webgl.js.map +1 -1
  16. package/dist/src/common/CommonTypes.d.ts +15 -3
  17. package/dist/src/core/Autosizer.d.ts +35 -0
  18. package/dist/src/core/Autosizer.js +196 -0
  19. package/dist/src/core/Autosizer.js.map +1 -0
  20. package/dist/src/core/CoreNode.d.ts +107 -59
  21. package/dist/src/core/CoreNode.js +524 -282
  22. package/dist/src/core/CoreNode.js.map +1 -1
  23. package/dist/src/core/CoreTextNode.d.ts +73 -88
  24. package/dist/src/core/CoreTextNode.js +383 -236
  25. package/dist/src/core/CoreTextNode.js.map +1 -1
  26. package/dist/src/core/CoreTextureManager.d.ts +19 -17
  27. package/dist/src/core/CoreTextureManager.js +52 -120
  28. package/dist/src/core/CoreTextureManager.js.map +1 -1
  29. package/dist/src/core/Stage.d.ts +63 -9
  30. package/dist/src/core/Stage.js +233 -133
  31. package/dist/src/core/Stage.js.map +1 -1
  32. package/dist/src/core/TextureError.d.ts +11 -0
  33. package/dist/src/core/TextureError.js +37 -0
  34. package/dist/src/core/TextureError.js.map +1 -0
  35. package/dist/src/core/TextureMemoryManager.d.ts +2 -4
  36. package/dist/src/core/TextureMemoryManager.js +80 -113
  37. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  38. package/dist/src/core/animations/CoreAnimation.d.ts +3 -3
  39. package/dist/src/core/animations/CoreAnimation.js +3 -3
  40. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  41. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -1
  42. package/dist/src/core/animations/CoreAnimationController.js +4 -2
  43. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  44. package/dist/src/core/lib/ImageWorker.js +1 -1
  45. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  46. package/dist/src/core/lib/WebGlContextWrapper.d.ts +69 -97
  47. package/dist/src/core/lib/WebGlContextWrapper.js +192 -152
  48. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  49. package/dist/src/core/lib/collectionUtils.d.ts +4 -0
  50. package/dist/src/core/lib/collectionUtils.js +72 -0
  51. package/dist/src/core/lib/collectionUtils.js.map +1 -0
  52. package/dist/src/core/lib/colorCache.d.ts +1 -0
  53. package/dist/src/core/lib/colorCache.js +19 -0
  54. package/dist/src/core/lib/colorCache.js.map +1 -0
  55. package/dist/src/core/lib/colorParser.d.ts +21 -0
  56. package/dist/src/core/lib/colorParser.js +72 -0
  57. package/dist/src/core/lib/colorParser.js.map +1 -0
  58. package/dist/src/core/lib/textureCompression.d.ts +14 -2
  59. package/dist/src/core/lib/textureCompression.js +311 -67
  60. package/dist/src/core/lib/textureCompression.js.map +1 -1
  61. package/dist/src/core/lib/utils.d.ts +6 -6
  62. package/dist/src/core/lib/utils.js +21 -65
  63. package/dist/src/core/lib/utils.js.map +1 -1
  64. package/dist/src/core/lib/validateImageBitmap.d.ts +1 -2
  65. package/dist/src/core/lib/validateImageBitmap.js +4 -4
  66. package/dist/src/core/lib/validateImageBitmap.js.map +1 -1
  67. package/dist/src/core/platform.d.ts +10 -0
  68. package/dist/src/core/platform.js +84 -0
  69. package/dist/src/core/platform.js.map +1 -0
  70. package/dist/src/core/platforms/GlContextWrapper.d.ts +136 -0
  71. package/{src/core/text-rendering/TextRenderingUtils.ts → dist/src/core/platforms/GlContextWrapper.js} +32 -36
  72. package/dist/src/core/platforms/GlContextWrapper.js.map +1 -0
  73. package/dist/src/core/platforms/Platform.d.ts +78 -12
  74. package/dist/src/core/platforms/Platform.js +18 -0
  75. package/dist/src/core/platforms/Platform.js.map +1 -1
  76. package/dist/src/core/platforms/web/WebGlContextWrapper.d.ts +776 -0
  77. package/dist/src/core/platforms/web/WebGlContextWrapper.js +1208 -0
  78. package/dist/src/core/platforms/web/WebGlContextWrapper.js.map +1 -0
  79. package/dist/src/core/platforms/web/WebPlatform.d.ts +17 -2
  80. package/dist/src/core/platforms/web/WebPlatform.js +158 -13
  81. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -1
  82. package/dist/src/core/platforms/web/WebPlatformChrome50.d.ts +19 -0
  83. package/dist/src/core/platforms/web/WebPlatformChrome50.js +54 -0
  84. package/dist/src/core/platforms/web/WebPlatformChrome50.js.map +1 -0
  85. package/dist/src/core/platforms/web/WebPlatformLegacy.d.ts +20 -0
  86. package/dist/src/core/platforms/web/WebPlatformLegacy.js +105 -0
  87. package/dist/src/core/platforms/web/WebPlatformLegacy.js.map +1 -0
  88. package/dist/src/core/platforms/web/WebPlatformNext.d.ts +21 -0
  89. package/dist/src/core/platforms/web/WebPlatformNext.js +52 -0
  90. package/dist/src/core/platforms/web/WebPlatformNext.js.map +1 -0
  91. package/dist/src/core/platforms/web/lib/ImageWorker.d.ts +21 -0
  92. package/dist/src/core/platforms/web/lib/ImageWorker.js +136 -0
  93. package/dist/src/core/platforms/web/lib/ImageWorker.js.map +1 -0
  94. package/dist/src/core/platforms/web/lib/ImageWorkerDefault.d.ts +6 -0
  95. package/dist/src/core/platforms/web/lib/ImageWorkerDefault.js +92 -0
  96. package/dist/src/core/platforms/web/lib/ImageWorkerDefault.js.map +1 -0
  97. package/dist/src/core/platforms/web/lib/ImageWorkerLegacy.d.ts +1 -0
  98. package/dist/src/core/platforms/web/lib/ImageWorkerLegacy.js +63 -0
  99. package/dist/src/core/platforms/web/lib/ImageWorkerLegacy.js.map +1 -0
  100. package/dist/src/core/platforms/web/lib/ImageWorkerNoOptions.d.ts +7 -0
  101. package/dist/src/core/platforms/web/lib/ImageWorkerNoOptions.js +75 -0
  102. package/dist/src/core/platforms/web/lib/ImageWorkerNoOptions.js.map +1 -0
  103. package/dist/src/core/platforms/web/lib/createImageBitmap.d.ts +1 -0
  104. package/dist/src/core/platforms/web/lib/createImageBitmap.js +27 -0
  105. package/dist/src/core/platforms/web/lib/createImageBitmap.js.map +1 -0
  106. package/dist/src/core/platforms/web/lib/textureCompression.d.ts +26 -0
  107. package/dist/src/core/platforms/web/lib/textureCompression.js +301 -0
  108. package/dist/src/core/platforms/web/lib/textureCompression.js.map +1 -0
  109. package/dist/src/core/platforms/web/lib/textureSvg.d.ts +7 -0
  110. package/dist/src/core/platforms/web/lib/textureSvg.js +51 -0
  111. package/dist/src/core/platforms/web/lib/textureSvg.js.map +1 -0
  112. package/dist/src/core/platforms/web/lib/utils.d.ts +5 -0
  113. package/dist/src/core/platforms/web/lib/utils.js +86 -0
  114. package/dist/src/core/platforms/web/lib/utils.js.map +1 -0
  115. package/dist/src/core/renderers/CoreContextTexture.d.ts +2 -1
  116. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  117. package/dist/src/core/renderers/CoreRenderer.d.ts +4 -40
  118. package/dist/src/core/renderers/CoreRenderer.js +3 -4
  119. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  120. package/dist/src/core/renderers/CoreShader.d.ts +9 -0
  121. package/{src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts → dist/src/core/renderers/CoreShader.js} +28 -32
  122. package/dist/src/core/renderers/CoreShader.js.map +1 -0
  123. package/dist/src/core/renderers/CoreShaderNode.d.ts +10 -0
  124. package/dist/src/core/renderers/CoreShaderNode.js +19 -2
  125. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  126. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +33 -0
  127. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +250 -0
  128. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -0
  129. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +17 -0
  130. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +125 -0
  131. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -0
  132. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +5 -6
  133. package/dist/src/core/renderers/canvas/CanvasRenderer.js +67 -91
  134. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  135. package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +1 -2
  136. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +5 -4
  137. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  138. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +3 -2
  139. package/dist/src/core/renderers/canvas/CanvasTexture.js +17 -13
  140. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  141. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +13 -0
  142. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +113 -192
  143. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
  144. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -2
  145. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -14
  146. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
  147. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +10 -0
  148. package/{src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts → dist/src/core/renderers/canvas/shaders/UnsupportedShader.js} +43 -40
  149. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +1 -0
  150. package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +33 -0
  151. package/dist/src/core/renderers/webgl/SdfRenderOp.js +98 -0
  152. package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
  153. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +12 -0
  154. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +58 -0
  155. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -0
  156. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +9 -0
  157. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +38 -0
  158. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +1 -0
  159. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +69 -0
  160. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +272 -0
  161. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -0
  162. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +34 -0
  163. package/dist/src/core/renderers/webgl/{WebGlRenderOp.js → WebGlCoreRenderOp.js} +43 -47
  164. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +1 -0
  165. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +133 -0
  166. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +649 -0
  167. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -0
  168. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +78 -0
  169. package/dist/src/core/renderers/webgl/WebGlCoreShader.destroy.d.ts +1 -0
  170. package/dist/src/core/renderers/webgl/WebGlCoreShader.destroy.js +2 -0
  171. package/dist/src/core/renderers/webgl/WebGlCoreShader.destroy.js.map +1 -0
  172. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +202 -0
  173. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -0
  174. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +4 -2
  175. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -6
  176. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  177. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +15 -2
  178. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -5
  179. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
  180. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +19 -9
  181. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +101 -49
  182. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  183. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +11 -23
  184. package/dist/src/core/renderers/webgl/WebGlRenderer.js +124 -133
  185. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  186. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +4 -6
  187. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +3 -3
  188. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  189. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +7 -7
  190. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +60 -38
  191. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  192. package/dist/src/core/renderers/webgl/internal/RendererUtils.d.ts +4 -4
  193. package/dist/src/core/renderers/webgl/internal/RendererUtils.js +1 -2
  194. package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
  195. package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +3 -3
  196. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +38 -37
  197. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
  198. package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +9 -0
  199. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +84 -0
  200. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -0
  201. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +10 -0
  202. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +108 -0
  203. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -0
  204. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +29 -0
  205. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +408 -0
  206. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -0
  207. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +28 -0
  208. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +126 -0
  209. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -0
  210. package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +47 -0
  211. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +148 -0
  212. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -0
  213. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +31 -0
  214. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +71 -0
  215. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +1 -0
  216. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +30 -0
  217. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +58 -0
  218. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +1 -0
  219. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +31 -0
  220. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +71 -0
  221. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +1 -0
  222. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +31 -0
  223. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +71 -0
  224. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +1 -0
  225. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +31 -0
  226. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +71 -0
  227. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +1 -0
  228. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +9 -0
  229. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +136 -0
  230. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +1 -0
  231. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +36 -0
  232. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +85 -0
  233. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +1 -0
  234. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +45 -0
  235. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +104 -0
  236. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +1 -0
  237. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +22 -0
  238. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +45 -0
  239. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +1 -0
  240. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +58 -0
  241. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +80 -0
  242. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +1 -0
  243. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +34 -0
  244. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +113 -0
  245. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -0
  246. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +40 -0
  247. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +126 -0
  248. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -0
  249. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +61 -0
  250. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +127 -0
  251. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +1 -0
  252. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +40 -0
  253. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +71 -0
  254. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +1 -0
  255. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +115 -0
  256. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +61 -0
  257. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +1 -0
  258. package/dist/src/core/shaders/canvas/Border.d.ts +8 -2
  259. package/dist/src/core/shaders/canvas/Border.js +64 -25
  260. package/dist/src/core/shaders/canvas/Border.js.map +1 -1
  261. package/dist/src/core/shaders/canvas/HolePunch.js +4 -3
  262. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
  263. package/dist/src/core/shaders/canvas/LinearGradient.js +7 -5
  264. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  265. package/dist/src/core/shaders/canvas/RadialGradient.js +12 -10
  266. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  267. package/dist/src/core/shaders/canvas/Rounded.js +3 -3
  268. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
  269. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +6 -3
  270. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +41 -11
  271. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  272. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +2 -3
  273. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +46 -9
  274. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  275. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +6 -5
  276. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  277. package/dist/src/core/shaders/canvas/Shadow.js +4 -2
  278. package/dist/src/core/shaders/canvas/Shadow.js.map +1 -1
  279. package/dist/src/core/shaders/canvas/utils/render.d.ts +1 -1
  280. package/dist/src/core/shaders/canvas/utils/render.js +31 -18
  281. package/dist/src/core/shaders/canvas/utils/render.js.map +1 -1
  282. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +11 -1
  283. package/dist/src/core/shaders/templates/BorderTemplate.js +30 -10
  284. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  285. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
  286. package/dist/src/core/shaders/templates/HolePunchTemplate.js +2 -2
  287. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  288. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
  289. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -2
  290. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
  291. package/dist/src/core/shaders/webgl/Border.js +138 -84
  292. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  293. package/dist/src/core/shaders/webgl/Default.js +46 -47
  294. package/dist/src/core/shaders/webgl/Default.js.map +1 -1
  295. package/dist/src/core/shaders/webgl/DefaultBatched.js +61 -61
  296. package/dist/src/core/shaders/webgl/HolePunch.js +34 -34
  297. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  298. package/dist/src/core/shaders/webgl/LinearGradient.js +60 -36
  299. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  300. package/dist/src/core/shaders/webgl/RadialGradient.js +60 -37
  301. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  302. package/dist/src/core/shaders/webgl/Rounded.js +74 -72
  303. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
  304. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +172 -113
  305. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  306. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +191 -132
  307. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  308. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +57 -55
  309. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
  310. package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
  311. package/dist/src/core/shaders/webgl/SdfShader.js +56 -66
  312. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  313. package/dist/src/core/shaders/webgl/Shadow.js +89 -83
  314. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -1
  315. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  316. package/dist/src/core/text-rendering/CanvasFontHandler.js +224 -0
  317. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  318. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  319. package/dist/src/core/text-rendering/CanvasTextRenderer.js +157 -0
  320. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  321. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +182 -0
  322. package/dist/src/core/text-rendering/SdfFontHandler.js +379 -0
  323. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  324. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
  325. package/dist/src/core/text-rendering/SdfTextRenderer.js +301 -0
  326. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  327. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
  328. package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
  329. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  330. package/dist/src/core/text-rendering/TextRenderer.d.ts +383 -0
  331. package/{src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts → dist/src/core/text-rendering/TextRenderer.js} +20 -38
  332. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  333. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
  334. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  335. package/dist/src/core/text-rendering/Utils.js +84 -0
  336. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  337. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
  338. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  339. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +0 -5
  340. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
  341. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +1 -7
  342. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +2 -50
  343. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  344. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -2
  345. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +87 -46
  346. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  347. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +1 -1
  348. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +8 -66
  349. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
  350. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +4 -14
  351. package/dist/src/core/text-rendering/renderers/TextRenderer.js +0 -3
  352. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  353. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  354. package/dist/src/core/textures/ColorTexture.js +3 -4
  355. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  356. package/dist/src/core/textures/ImageTexture.d.ts +33 -14
  357. package/dist/src/core/textures/ImageTexture.js +46 -125
  358. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  359. package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
  360. package/dist/src/core/textures/NoiseTexture.js +8 -8
  361. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  362. package/dist/src/core/textures/RenderTexture.d.ts +7 -7
  363. package/dist/src/core/textures/RenderTexture.js +12 -12
  364. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  365. package/dist/src/core/textures/SubTexture.d.ts +6 -8
  366. package/dist/src/core/textures/SubTexture.js +22 -40
  367. package/dist/src/core/textures/SubTexture.js.map +1 -1
  368. package/dist/src/core/textures/Texture.d.ts +74 -15
  369. package/dist/src/core/textures/Texture.js +131 -19
  370. package/dist/src/core/textures/Texture.js.map +1 -1
  371. package/dist/src/core/utils.d.ts +2 -1
  372. package/dist/src/core/utils.js +1 -1
  373. package/dist/src/core/utils.js.map +1 -1
  374. package/dist/src/main-api/DynamicShaderController.d.ts +29 -0
  375. package/dist/src/main-api/DynamicShaderController.js +58 -0
  376. package/dist/src/main-api/DynamicShaderController.js.map +1 -0
  377. package/dist/src/main-api/Inspector.d.ts +129 -1
  378. package/dist/src/main-api/Inspector.js +462 -23
  379. package/dist/src/main-api/Inspector.js.map +1 -1
  380. package/dist/src/main-api/Renderer.d.ts +223 -41
  381. package/dist/src/main-api/Renderer.js +107 -62
  382. package/dist/src/main-api/Renderer.js.map +1 -1
  383. package/dist/src/main-api/ShaderController.d.ts +31 -0
  384. package/dist/src/main-api/ShaderController.js +37 -0
  385. package/dist/src/main-api/ShaderController.js.map +1 -0
  386. package/dist/src/utils.d.ts +0 -2
  387. package/dist/src/utils.js +0 -36
  388. package/dist/src/utils.js.map +1 -1
  389. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  390. package/exports/canvas-shaders.ts +28 -28
  391. package/exports/canvas.ts +45 -45
  392. package/exports/index.ts +90 -90
  393. package/exports/inspector.ts +24 -24
  394. package/exports/platform.ts +31 -0
  395. package/exports/utils.ts +50 -50
  396. package/exports/webgl-shaders.ts +28 -28
  397. package/exports/webgl.ts +52 -50
  398. package/package.json +16 -15
  399. package/src/common/CommonTypes.ts +163 -146
  400. package/src/common/EventEmitter.ts +77 -77
  401. package/src/common/IAnimationController.ts +92 -92
  402. package/src/common/IEventEmitter.ts +28 -28
  403. package/src/core/Autosizer.ts +224 -0
  404. package/src/core/CoreNode.test.ts +365 -202
  405. package/src/core/CoreNode.ts +2785 -2489
  406. package/src/core/CoreShaderManager.ts +188 -188
  407. package/src/core/CoreTextNode.test.ts +311 -0
  408. package/src/core/CoreTextNode.ts +607 -451
  409. package/src/core/CoreTextureManager.ts +484 -548
  410. package/src/core/Stage.ts +927 -800
  411. package/src/core/TextureError.ts +46 -0
  412. package/src/core/TextureMemoryManager.ts +418 -462
  413. package/src/core/animations/AnimationManager.ts +38 -38
  414. package/src/core/animations/CoreAnimation.ts +290 -291
  415. package/src/core/animations/CoreAnimationController.ts +169 -166
  416. package/src/core/lib/ContextSpy.ts +41 -41
  417. package/src/core/lib/Matrix3d.ts +244 -244
  418. package/src/core/lib/RenderCoords.ts +71 -71
  419. package/src/core/lib/collectionUtils.ts +83 -0
  420. package/src/core/lib/colorCache.ts +20 -0
  421. package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +85 -85
  422. package/src/core/lib/utils.ts +337 -390
  423. package/src/core/platforms/GlContextWrapper.ts +291 -0
  424. package/src/core/platforms/Platform.ts +176 -77
  425. package/src/core/{lib → platforms/web}/WebGlContextWrapper.ts +1547 -1368
  426. package/src/core/platforms/web/WebPlatform.ts +306 -84
  427. package/src/core/platforms/web/WebPlatformChrome50.ts +63 -0
  428. package/src/core/platforms/web/WebPlatformLegacy.ts +150 -0
  429. package/src/core/platforms/web/WebPlatformNext.ts +57 -0
  430. package/src/core/platforms/web/lib/ImageWorker.ts +192 -0
  431. package/src/core/platforms/web/lib/ImageWorkerDefault.ts +117 -0
  432. package/src/core/platforms/web/lib/ImageWorkerLegacy.ts +87 -0
  433. package/src/core/platforms/web/lib/ImageWorkerNoOptions.ts +99 -0
  434. package/src/core/platforms/web/lib/createImageBitmap.ts +40 -0
  435. package/src/core/platforms/web/lib/textureCompression.ts +391 -0
  436. package/src/core/{lib → platforms/web/lib}/textureSvg.ts +66 -78
  437. package/src/core/platforms/web/lib/utils.ts +105 -0
  438. package/src/core/renderers/CoreContextTexture.ts +44 -43
  439. package/src/core/renderers/CoreRenderOp.ts +22 -22
  440. package/src/core/renderers/CoreRenderer.ts +71 -110
  441. package/src/core/renderers/CoreShaderNode.ts +202 -175
  442. package/src/core/renderers/CoreShaderProgram.ts +23 -23
  443. package/src/core/renderers/canvas/CanvasRenderer.ts +258 -302
  444. package/src/core/renderers/canvas/CanvasShaderNode.ts +95 -96
  445. package/src/core/renderers/canvas/CanvasTexture.ts +160 -156
  446. package/src/core/renderers/webgl/SdfRenderOp.ts +106 -0
  447. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +89 -86
  448. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +95 -50
  449. package/src/core/renderers/webgl/WebGlCtxTexture.test.ts +113 -0
  450. package/src/core/renderers/webgl/WebGlCtxTexture.ts +350 -298
  451. package/src/core/renderers/webgl/WebGlRenderer.ts +727 -747
  452. package/src/core/renderers/webgl/WebGlShaderNode.ts +430 -435
  453. package/src/core/renderers/webgl/WebGlShaderProgram.ts +364 -341
  454. package/src/core/renderers/webgl/internal/BufferCollection.ts +54 -54
  455. package/src/core/renderers/webgl/internal/RendererUtils.ts +150 -155
  456. package/src/core/renderers/webgl/internal/ShaderUtils.ts +283 -281
  457. package/src/core/renderers/webgl/internal/WebGlUtils.ts +35 -35
  458. package/src/core/shaders/canvas/Border.ts +132 -78
  459. package/src/core/shaders/canvas/HolePunch.ts +56 -62
  460. package/src/core/shaders/canvas/LinearGradient.ts +73 -71
  461. package/src/core/shaders/canvas/RadialGradient.ts +96 -99
  462. package/src/core/shaders/canvas/Rounded.ts +55 -55
  463. package/src/core/shaders/canvas/RoundedWithBorder.ts +122 -74
  464. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +136 -90
  465. package/src/core/shaders/canvas/RoundedWithShadow.ts +71 -70
  466. package/src/core/shaders/canvas/Shadow.ts +54 -52
  467. package/src/core/shaders/canvas/utils/render.ts +160 -151
  468. package/src/core/shaders/templates/BorderTemplate.ts +145 -115
  469. package/src/core/shaders/templates/HolePunchTemplate.ts +82 -82
  470. package/src/core/shaders/templates/LinearGradientTemplate.ts +71 -71
  471. package/src/core/shaders/templates/RadialGradientTemplate.ts +83 -81
  472. package/src/core/shaders/templates/RoundedTemplate.ts +98 -98
  473. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +38 -38
  474. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +35 -35
  475. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +35 -35
  476. package/src/core/shaders/templates/ShadowTemplate.ts +106 -106
  477. package/src/core/shaders/utils.ts +46 -46
  478. package/src/core/shaders/webgl/Border.ts +169 -116
  479. package/src/core/shaders/webgl/Default.ts +88 -89
  480. package/src/core/shaders/webgl/DefaultBatched.ts +129 -129
  481. package/src/core/shaders/webgl/HolePunch.ts +75 -75
  482. package/src/core/shaders/webgl/LinearGradient.ts +106 -82
  483. package/src/core/shaders/webgl/RadialGradient.ts +108 -85
  484. package/src/core/shaders/webgl/Rounded.ts +115 -117
  485. package/src/core/shaders/webgl/RoundedWithBorder.ts +210 -155
  486. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +234 -175
  487. package/src/core/shaders/webgl/RoundedWithShadow.ts +96 -98
  488. package/src/core/shaders/webgl/SdfShader.ts +122 -134
  489. package/src/core/shaders/webgl/Shadow.ts +121 -115
  490. package/src/core/text-rendering/CanvasFontHandler.ts +304 -0
  491. package/src/core/text-rendering/CanvasTextRenderer.ts +255 -0
  492. package/src/core/text-rendering/SdfFontHandler.ts +581 -0
  493. package/src/core/text-rendering/SdfTextRenderer.ts +403 -0
  494. package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
  495. package/src/core/text-rendering/TextRenderer.ts +444 -0
  496. package/src/core/text-rendering/Utils.ts +99 -0
  497. package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +453 -0
  498. package/src/core/textures/ColorTexture.ts +104 -102
  499. package/src/core/textures/ImageTexture.ts +292 -418
  500. package/src/core/textures/NoiseTexture.ts +106 -104
  501. package/src/core/textures/RenderTexture.ts +87 -85
  502. package/src/core/textures/SubTexture.ts +184 -205
  503. package/src/core/textures/Texture.ts +524 -381
  504. package/src/core/utils.ts +229 -227
  505. package/src/env.d.ts +7 -7
  506. package/src/main-api/INode.ts +100 -100
  507. package/src/main-api/Inspector.ts +1278 -569
  508. package/src/main-api/Renderer.ts +1030 -818
  509. package/src/main-api/utils.ts +45 -45
  510. package/src/utils.ts +220 -267
  511. package/COPYING +0 -1
  512. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +0 -44
  513. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +0 -1
  514. package/src/core/lib/ImageWorker.ts +0 -286
  515. package/src/core/lib/textureCompression.ts +0 -152
  516. package/src/core/lib/validateImageBitmap.ts +0 -87
  517. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
  518. package/src/core/renderers/webgl/WebGlRenderOp.ts +0 -161
  519. package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
  520. package/src/core/text-rendering/TrFontManager.ts +0 -183
  521. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
  522. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
  523. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
  524. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
  525. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
  526. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
  527. package/src/core/text-rendering/font-face-types/utils.ts +0 -39
  528. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -514
  529. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -863
  530. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -793
  531. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
  532. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
  533. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
  534. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
  535. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
  536. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -497
  537. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
  538. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
  539. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
  540. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
  541. package/src/core/text-rendering/renderers/TextRenderer.ts +0 -567
@@ -1,341 +1,364 @@
1
- /*
2
- * If not stated otherwise in this file or this component's LICENSE file the
3
- * following copyright and licenses apply:
4
- *
5
- * Copyright 2023 Comcast Cable Communications Management, LLC.
6
- *
7
- * Licensed under the Apache License, Version 2.0 (the License);
8
- * you may not use this file except in compliance with the License.
9
- * You may obtain a copy of the License at
10
- *
11
- * http://www.apache.org/licenses/LICENSE-2.0
12
- *
13
- * Unless required by applicable law or agreed to in writing, software
14
- * distributed under the License is distributed on an "AS IS" BASIS,
15
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- * See the License for the specific language governing permissions and
17
- * limitations under the License.
18
- */
19
- import type { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
20
- import { Default } from '../../shaders/webgl/Default.js';
21
- import type { QuadOptions } from '../CoreRenderer.js';
22
- import type { CoreShaderProgram } from '../CoreShaderProgram.js';
23
- import type { WebGlCtxTexture } from './WebGlCtxTexture.js';
24
- import type { WebGlRenderOp } from './WebGlRenderOp.js';
25
- import type { WebGlRenderer } from './WebGlRenderer.js';
26
- import type { WebGlShaderType } from './WebGlShaderNode.js';
27
- import type { BufferCollection } from './internal/BufferCollection.js';
28
- import {
29
- createProgram,
30
- createShader,
31
- type UniformSet1Param,
32
- type UniformSet2Params,
33
- type UniformSet3Params,
34
- type UniformSet4Params,
35
- } from './internal/ShaderUtils.js';
36
-
37
- export class WebGlShaderProgram implements CoreShaderProgram {
38
- protected program: WebGLProgram | null;
39
- /**
40
- * Vertex Array Object
41
- *
42
- * @remarks
43
- * Used by WebGL2 Only
44
- */
45
- protected vao: WebGLVertexArrayObject | undefined;
46
- protected renderer: WebGlRenderer;
47
- protected glw: WebGlContextWrapper;
48
- protected attributeLocations: Record<string, number>;
49
- protected uniformLocations: Record<string, WebGLUniformLocation> | null;
50
- protected lifecycle: Pick<WebGlShaderType, 'update' | 'canBatch'>;
51
- protected useSystemAlpha = false;
52
- protected useSystemDimensions = false;
53
- public isDestroyed = false;
54
- supportsIndexedTextures = false;
55
-
56
- constructor(
57
- renderer: WebGlRenderer,
58
- config: WebGlShaderType,
59
- resolvedProps: Record<string, any>,
60
- ) {
61
- this.renderer = renderer;
62
- const glw = (this.glw = renderer.glw);
63
-
64
- // Check that extensions are supported
65
- const webGl2 = glw.isWebGl2();
66
- let requiredExtensions: string[] = [];
67
-
68
- this.supportsIndexedTextures =
69
- config.supportsIndexedTextures || this.supportsIndexedTextures;
70
- requiredExtensions =
71
- (webGl2 && config.webgl2Extensions) ||
72
- (!webGl2 && config.webgl1Extensions) ||
73
- [];
74
-
75
- const glVersion = webGl2 ? '2.0' : '1.0';
76
- requiredExtensions.forEach((extensionName) => {
77
- if (!glw.getExtension(extensionName)) {
78
- throw new Error(
79
- `Shader "${this.constructor.name}" requires extension "${extensionName}" for WebGL ${glVersion} but wasn't found`,
80
- );
81
- }
82
- });
83
-
84
- let vertexSource =
85
- config.vertex instanceof Function
86
- ? config.vertex(renderer, resolvedProps)
87
- : config.vertex;
88
-
89
- if (vertexSource === undefined) {
90
- vertexSource = Default.vertex as string;
91
- }
92
-
93
- const fragmentSource =
94
- config.fragment instanceof Function
95
- ? config.fragment(renderer, resolvedProps)
96
- : config.fragment;
97
-
98
- const vertexShader = createShader(glw, glw.VERTEX_SHADER, vertexSource);
99
- if (!vertexShader) {
100
- throw new Error('Vertex shader creation failed');
101
- }
102
-
103
- const fragmentShader = createShader(
104
- glw,
105
- glw.FRAGMENT_SHADER,
106
- fragmentSource,
107
- );
108
-
109
- if (!fragmentShader) {
110
- throw new Error('fragment shader creation failed');
111
- }
112
-
113
- const program = createProgram(glw, vertexShader, fragmentShader);
114
- if (!program) {
115
- throw new Error();
116
- }
117
-
118
- this.program = program;
119
- this.attributeLocations = glw.getAttributeLocations(program);
120
-
121
- const uniLocs = (this.uniformLocations = glw.getUniformLocations(program));
122
-
123
- this.useSystemAlpha = uniLocs['u_alpha'] !== undefined;
124
- this.useSystemDimensions = uniLocs['u_dimensions'] !== undefined;
125
-
126
- this.lifecycle = {
127
- update: config.update,
128
- canBatch: config.canBatch,
129
- };
130
- }
131
-
132
- disableAttribute(location: number) {
133
- this.glw.disableVertexAttribArray(location);
134
- }
135
-
136
- disableAttributes() {
137
- const glw = this.glw;
138
- const attribs = Object.keys(this.attributeLocations);
139
- const attribLen = attribs.length;
140
- for (let i = 0; i < attribLen; i++) {
141
- glw.disableVertexAttribArray(i);
142
- }
143
- }
144
-
145
- reuseRenderOp(
146
- incomingQuad: QuadOptions,
147
- currentRenderOp: WebGlRenderOp,
148
- ): boolean {
149
- if (this.lifecycle.canBatch !== undefined) {
150
- return this.lifecycle.canBatch(incomingQuad, currentRenderOp);
151
- }
152
-
153
- if (this.useSystemAlpha === true) {
154
- if (incomingQuad.alpha !== currentRenderOp.alpha) {
155
- return false;
156
- }
157
- }
158
-
159
- if (this.useSystemDimensions === true) {
160
- if (
161
- incomingQuad.width !== currentRenderOp.width ||
162
- incomingQuad.height !== currentRenderOp.height
163
- ) {
164
- return false;
165
- }
166
- }
167
- let shaderPropsA: Record<string, unknown> | undefined = undefined;
168
- let shaderPropsB: Record<string, unknown> | undefined = undefined;
169
-
170
- if (incomingQuad.shader !== null) {
171
- shaderPropsA = incomingQuad.shader.resolvedProps;
172
- }
173
- if (currentRenderOp.shader !== null) {
174
- shaderPropsB = currentRenderOp.shader.resolvedProps;
175
- }
176
-
177
- if (
178
- (shaderPropsA === undefined && shaderPropsB !== undefined) ||
179
- (shaderPropsA !== undefined && shaderPropsB === undefined)
180
- ) {
181
- return false;
182
- }
183
-
184
- if (shaderPropsA !== undefined && shaderPropsB !== undefined) {
185
- for (const key in shaderPropsA) {
186
- if (shaderPropsA[key] !== shaderPropsB[key]) {
187
- return false;
188
- }
189
- }
190
- }
191
-
192
- return true;
193
- }
194
-
195
- bindRenderOp(renderOp: WebGlRenderOp) {
196
- this.bindBufferCollection(renderOp.buffers);
197
- this.bindTextures(renderOp.textures);
198
-
199
- const { parentHasRenderTexture } = renderOp;
200
-
201
- // Skip if the parent and current operation both have render textures
202
- if (renderOp.rtt === true && parentHasRenderTexture === true) {
203
- return;
204
- }
205
-
206
- // Bind render texture framebuffer dimensions as resolution
207
- // if the parent has a render texture
208
- if (parentHasRenderTexture === true) {
209
- const { width, height } = renderOp.framebufferDimensions!;
210
- // Force pixel ratio to 1.0 for render textures since they are always 1:1
211
- // the final render texture will be rendered to the screen with the correct pixel ratio
212
- this.glw.uniform1f('u_pixelRatio', 1.0);
213
-
214
- // Set resolution to the framebuffer dimensions
215
- this.glw.uniform2f('u_resolution', width, height);
216
- } else {
217
- this.glw.uniform1f('u_pixelRatio', renderOp.renderer.stage.pixelRatio);
218
- this.glw.uniform2f(
219
- 'u_resolution',
220
- this.glw.canvas.width,
221
- this.glw.canvas.height,
222
- );
223
- }
224
-
225
- if (this.useSystemAlpha === true) {
226
- this.glw.uniform1f('u_alpha', renderOp.alpha);
227
- }
228
-
229
- if (this.useSystemDimensions === true) {
230
- this.glw.uniform2f('u_dimensions', renderOp.width, renderOp.height);
231
- }
232
-
233
- /**temporary fix to make sdf texts work */
234
- if (renderOp.sdfShaderProps !== undefined) {
235
- (renderOp.shader.shaderType as WebGlShaderType).onSdfBind?.call(
236
- this.glw,
237
- renderOp.sdfShaderProps,
238
- );
239
- return;
240
- }
241
-
242
- if (renderOp.shader.props !== undefined) {
243
- /**
244
- * loop over all precalculated uniform types
245
- */
246
- for (const key in renderOp.shader.uniforms.single) {
247
- const { method, value } = renderOp.shader.uniforms.single[key]!;
248
- this.glw[method as keyof UniformSet1Param](key, value as never);
249
- }
250
-
251
- for (const key in renderOp.shader.uniforms.vec2) {
252
- const { method, value } = renderOp.shader.uniforms.vec2[key]!;
253
- this.glw[method as keyof UniformSet2Params](key, value[0], value[1]);
254
- }
255
-
256
- for (const key in renderOp.shader.uniforms.vec3) {
257
- const { method, value } = renderOp.shader.uniforms.vec3[key]!;
258
- this.glw[method as keyof UniformSet3Params](
259
- key,
260
- value[0],
261
- value[1],
262
- value[2],
263
- );
264
- }
265
-
266
- for (const key in renderOp.shader.uniforms.vec4) {
267
- const { method, value } = renderOp.shader.uniforms.vec4[key]!;
268
- this.glw[method as keyof UniformSet4Params](
269
- key,
270
- value[0],
271
- value[1],
272
- value[2],
273
- value[3],
274
- );
275
- }
276
- }
277
- }
278
-
279
- bindBufferCollection(buffer: BufferCollection) {
280
- const { glw } = this;
281
- const attribs = Object.keys(this.attributeLocations);
282
- const attribLen = attribs.length;
283
-
284
- for (let i = 0; i < attribLen; i++) {
285
- const name = attribs[i]!;
286
- const resolvedBuffer = buffer.getBuffer(name);
287
- const resolvedInfo = buffer.getAttributeInfo(name);
288
- if (resolvedBuffer === undefined || resolvedInfo === undefined) {
289
- continue;
290
- }
291
- glw.enableVertexAttribArray(i);
292
- glw.vertexAttribPointer(
293
- resolvedBuffer,
294
- i,
295
- resolvedInfo.size,
296
- resolvedInfo.type,
297
- resolvedInfo.normalized,
298
- resolvedInfo.stride,
299
- resolvedInfo.offset,
300
- );
301
- }
302
- }
303
-
304
- bindTextures(textures: WebGlCtxTexture[]) {
305
- this.glw.activeTexture(0);
306
- this.glw.bindTexture(textures[0]!.ctxTexture);
307
- }
308
-
309
- attach(): void {
310
- if (this.isDestroyed === true) {
311
- return;
312
- }
313
- this.glw.useProgram(this.program, this.uniformLocations!);
314
- if (this.glw.isWebGl2() && this.vao) {
315
- this.glw.bindVertexArray(this.vao);
316
- }
317
- }
318
-
319
- detach(): void {
320
- this.disableAttributes();
321
- }
322
-
323
- destroy() {
324
- if (this.isDestroyed === true) {
325
- return;
326
- }
327
- const glw = this.glw;
328
-
329
- this.detach();
330
-
331
- glw.deleteProgram(this.program!);
332
- this.program = null;
333
- this.uniformLocations = null;
334
-
335
- const attribs = Object.keys(this.attributeLocations);
336
- const attribLen = attribs.length;
337
- for (let i = 0; i < attribLen; i++) {
338
- this.glw.deleteBuffer(attribs[i]!);
339
- }
340
- }
341
- }
1
+ /*
2
+ * If not stated otherwise in this file or this component's LICENSE file the
3
+ * following copyright and licenses apply:
4
+ *
5
+ * Copyright 2023 Comcast Cable Communications Management, LLC.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the License);
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ */
19
+ import type { GlContextWrapper } from '../../platforms/GlContextWrapper.js';
20
+ import { Default } from '../../shaders/webgl/Default.js';
21
+ import type { CoreShaderProgram } from '../CoreShaderProgram.js';
22
+ import type { WebGlCtxTexture } from './WebGlCtxTexture.js';
23
+ import type { WebGlRenderer, WebGlRenderOp } from './WebGlRenderer.js';
24
+ import type { WebGlShaderType } from './WebGlShaderNode.js';
25
+ import { WebGlShaderNode } from './WebGlShaderNode.js';
26
+ import type { BufferCollection } from './internal/BufferCollection.js';
27
+ import {
28
+ createProgram,
29
+ createShader,
30
+ type UniformSet1Param,
31
+ type UniformSet2Params,
32
+ type UniformSet3Params,
33
+ type UniformSet4Params,
34
+ } from './internal/ShaderUtils.js';
35
+ import { CoreNode } from '../../CoreNode.js';
36
+
37
+ export class WebGlShaderProgram implements CoreShaderProgram {
38
+ protected program: WebGLProgram | null;
39
+ /**
40
+ * Vertex Array Object
41
+ *
42
+ * @remarks
43
+ * Used by WebGL2 Only
44
+ */
45
+ protected vao: WebGLVertexArrayObject | undefined;
46
+ protected renderer: WebGlRenderer;
47
+ protected glw: GlContextWrapper;
48
+ protected attributeLocations: string[];
49
+ protected uniformLocations: Record<string, WebGLUniformLocation> | null;
50
+ protected lifecycle: Pick<WebGlShaderType, 'update' | 'canBatch'>;
51
+ protected useSystemAlpha = false;
52
+ protected useSystemDimensions = false;
53
+ protected useTimeValue = false;
54
+ public isDestroyed = false;
55
+ supportsIndexedTextures = false;
56
+
57
+ constructor(
58
+ renderer: WebGlRenderer,
59
+ config: WebGlShaderType,
60
+ resolvedProps: Record<string, any>,
61
+ ) {
62
+ this.renderer = renderer;
63
+ const glw = (this.glw = renderer.glw);
64
+
65
+ // Check that extensions are supported
66
+ const webGl2 = glw.isWebGl2();
67
+ let requiredExtensions: string[] = [];
68
+
69
+ this.supportsIndexedTextures =
70
+ config.supportsIndexedTextures || this.supportsIndexedTextures;
71
+ requiredExtensions =
72
+ (webGl2 && config.webgl2Extensions) ||
73
+ (!webGl2 && config.webgl1Extensions) ||
74
+ [];
75
+
76
+ const glVersion = webGl2 ? '2.0' : '1.0';
77
+ requiredExtensions.forEach((extensionName) => {
78
+ if (!glw.getExtension(extensionName)) {
79
+ throw new Error(
80
+ `Shader "${this.constructor.name}" requires extension "${extensionName}" for WebGL ${glVersion} but wasn't found`,
81
+ );
82
+ }
83
+ });
84
+
85
+ let vertexSource =
86
+ config.vertex instanceof Function
87
+ ? config.vertex(renderer, resolvedProps)
88
+ : config.vertex;
89
+
90
+ if (vertexSource === undefined) {
91
+ vertexSource = Default.vertex as string;
92
+ }
93
+
94
+ const fragmentSource =
95
+ config.fragment instanceof Function
96
+ ? config.fragment(renderer, resolvedProps)
97
+ : config.fragment;
98
+
99
+ const vertexShader = createShader(glw, glw.VERTEX_SHADER, vertexSource);
100
+ if (!vertexShader) {
101
+ throw new Error('Vertex shader creation failed');
102
+ }
103
+
104
+ const fragmentShader = createShader(
105
+ glw,
106
+ glw.FRAGMENT_SHADER,
107
+ fragmentSource,
108
+ );
109
+
110
+ if (!fragmentShader) {
111
+ throw new Error('fragment shader creation failed');
112
+ }
113
+
114
+ const program = createProgram(glw, vertexShader, fragmentShader);
115
+ this.program = program;
116
+ this.attributeLocations = glw.getAttributeLocations(program);
117
+
118
+ const uniLocs = (this.uniformLocations = glw.getUniformLocations(program));
119
+
120
+ this.useSystemAlpha = uniLocs['u_alpha'] !== undefined;
121
+ this.useSystemDimensions = uniLocs['u_dimensions'] !== undefined;
122
+
123
+ this.useTimeValue =
124
+ this.glw.getUniformLocation(program, 'u_dimensions') !== null &&
125
+ config.time !== undefined;
126
+
127
+ this.lifecycle = {
128
+ update: config.update,
129
+ canBatch: config.canBatch,
130
+ };
131
+ }
132
+
133
+ disableAttribute(location: number) {
134
+ this.glw.disableVertexAttribArray(location);
135
+ }
136
+
137
+ disableAttributes() {
138
+ const glw = this.glw;
139
+ const attribLen = this.attributeLocations.length;
140
+ for (let i = 0; i < attribLen; i++) {
141
+ glw.disableVertexAttribArray(i);
142
+ }
143
+ }
144
+
145
+ reuseRenderOp(node: CoreNode, currentRenderOp: WebGlRenderOp): boolean {
146
+ if (this.lifecycle.canBatch !== undefined) {
147
+ return this.lifecycle.canBatch(node, currentRenderOp);
148
+ }
149
+
150
+ const { time, worldAlpha, w, h } = node;
151
+
152
+ if (this.useTimeValue === true) {
153
+ if (time !== currentRenderOp.time) {
154
+ return false;
155
+ }
156
+ }
157
+
158
+ if (this.useSystemAlpha === true) {
159
+ if (worldAlpha !== currentRenderOp.worldAlpha) {
160
+ return false;
161
+ }
162
+ }
163
+
164
+ if (this.useSystemDimensions === true) {
165
+ if (w !== currentRenderOp.w || h !== currentRenderOp.h) {
166
+ return false;
167
+ }
168
+ }
169
+
170
+ let shaderPropsA: Record<string, unknown> | undefined = undefined;
171
+ let shaderPropsB: Record<string, unknown> | undefined = undefined;
172
+
173
+ const shader = node.props.shader;
174
+
175
+ if (shader !== null) {
176
+ shaderPropsA = (shader as WebGlShaderNode).resolvedProps;
177
+ }
178
+
179
+ const opShader = currentRenderOp.shader;
180
+ if (opShader !== null) {
181
+ shaderPropsB = (opShader as WebGlShaderNode).resolvedProps;
182
+ }
183
+
184
+ if (
185
+ (shaderPropsA === undefined && shaderPropsB !== undefined) ||
186
+ (shaderPropsA !== undefined && shaderPropsB === undefined)
187
+ ) {
188
+ return false;
189
+ }
190
+
191
+ if (shaderPropsA !== undefined && shaderPropsB !== undefined) {
192
+ for (const key in shaderPropsA) {
193
+ if (shaderPropsA[key] !== shaderPropsB[key]) {
194
+ return false;
195
+ }
196
+ }
197
+ }
198
+
199
+ return true;
200
+ }
201
+
202
+ bindRenderOp(renderOp: WebGlRenderOp) {
203
+ const isCoreNode = renderOp.isCoreNode;
204
+
205
+ this.bindTextures(renderOp.renderOpTextures);
206
+ this.bindBufferCollection(renderOp.quadBufferCollection);
207
+
208
+ const parentHasRenderTexture = renderOp.parentHasRenderTexture;
209
+ const framebufferDimensions = isCoreNode
210
+ ? renderOp.parentFramebufferDimensions
211
+ : renderOp.framebufferDimensions;
212
+
213
+ // Skip if the parent and current operation both have render textures
214
+ if (renderOp.rtt === true && parentHasRenderTexture === true) {
215
+ return;
216
+ }
217
+
218
+ // Bind render texture framebuffer dimensions as resolution
219
+ // if the parent has a render texture
220
+ if (parentHasRenderTexture === true && framebufferDimensions) {
221
+ const { w, h } = framebufferDimensions;
222
+ // Force pixel ratio to 1.0 for render textures since they are always 1:1
223
+ // the final render texture will be rendered to the screen with the correct pixel ratio
224
+ this.glw.uniform1f('u_pixelRatio', 1.0);
225
+
226
+ // Set resolution to the framebuffer dimensions
227
+ this.glw.uniform2f('u_resolution', w, h);
228
+ } else {
229
+ this.glw.uniform1f('u_pixelRatio', renderOp.stage.pixelRatio);
230
+
231
+ this.glw.uniform2f(
232
+ 'u_resolution',
233
+ this.glw.canvas.width,
234
+ this.glw.canvas.height,
235
+ );
236
+ }
237
+
238
+ if (this.useTimeValue === true) {
239
+ this.glw.uniform1f('u_time', renderOp.time);
240
+ }
241
+
242
+ if (this.useSystemAlpha === true) {
243
+ this.glw.uniform1f('u_alpha', renderOp.worldAlpha);
244
+ }
245
+
246
+ if (this.useSystemDimensions === true) {
247
+ this.glw.uniform2f('u_dimensions', renderOp.w, renderOp.h);
248
+ }
249
+
250
+ /**temporary fix to make sdf texts work */
251
+ if (isCoreNode === false && renderOp.sdfShaderProps !== undefined) {
252
+ const opShader = renderOp.shader; // SdfRenderOp has .shader
253
+ (opShader.shaderType as WebGlShaderType).onSdfBind?.call(
254
+ this.glw,
255
+ renderOp.sdfShaderProps,
256
+ );
257
+ return;
258
+ }
259
+
260
+ const shader = renderOp.shader as WebGlShaderNode;
261
+ if (shader.props !== undefined) {
262
+ /**
263
+ * loop over all precalculated uniform types
264
+ */
265
+ const uniforms = shader.uniforms;
266
+
267
+ for (const key in uniforms.single) {
268
+ const { method, value } = uniforms.single[key]!;
269
+ this.glw[method as keyof UniformSet1Param](key, value as never);
270
+ }
271
+
272
+ for (const key in uniforms.vec2) {
273
+ const { method, value } = uniforms.vec2[key]!;
274
+ this.glw[method as keyof UniformSet2Params](key, value[0], value[1]);
275
+ }
276
+
277
+ for (const key in uniforms.vec3) {
278
+ const { method, value } = uniforms.vec3[key]!;
279
+ this.glw[method as keyof UniformSet3Params](
280
+ key,
281
+ value[0],
282
+ value[1],
283
+ value[2],
284
+ );
285
+ }
286
+
287
+ for (const key in uniforms.vec4) {
288
+ const { method, value } = uniforms.vec4[key]!;
289
+ this.glw[method as keyof UniformSet4Params](
290
+ key,
291
+ value[0],
292
+ value[1],
293
+ value[2],
294
+ value[3],
295
+ );
296
+ }
297
+ }
298
+ }
299
+
300
+ bindBufferCollection(buffer: BufferCollection) {
301
+ const { glw } = this;
302
+ const attribs = this.attributeLocations;
303
+ const attribLen = attribs.length;
304
+
305
+ for (let i = 0; i < attribLen; i++) {
306
+ const name = attribs[i]!;
307
+ const resolvedBuffer = buffer.getBuffer(name);
308
+ const resolvedInfo = buffer.getAttributeInfo(name);
309
+ if (resolvedBuffer === undefined || resolvedInfo === undefined) {
310
+ continue;
311
+ }
312
+ glw.enableVertexAttribArray(i);
313
+ glw.vertexAttribPointer(
314
+ resolvedBuffer,
315
+ i,
316
+ resolvedInfo.size,
317
+ resolvedInfo.type,
318
+ resolvedInfo.normalized,
319
+ resolvedInfo.stride,
320
+ resolvedInfo.offset,
321
+ );
322
+ }
323
+ }
324
+
325
+ bindTextures(textures: WebGlCtxTexture[]) {
326
+ const t = textures[0];
327
+ if (t === undefined) return;
328
+ this.glw.activeTexture(0);
329
+ this.glw.bindTexture(t.ctxTexture);
330
+ }
331
+
332
+ attach(): void {
333
+ if (this.isDestroyed === true) {
334
+ return;
335
+ }
336
+ this.glw.useProgram(this.program, this.uniformLocations!);
337
+ if (this.glw.isWebGl2() && this.vao) {
338
+ this.glw.bindVertexArray(this.vao);
339
+ }
340
+ }
341
+
342
+ detach(): void {
343
+ this.disableAttributes();
344
+ }
345
+
346
+ destroy() {
347
+ if (this.isDestroyed === true) {
348
+ return;
349
+ }
350
+ const glw = this.glw;
351
+
352
+ this.detach();
353
+
354
+ glw.deleteProgram(this.program!);
355
+ this.program = null;
356
+ this.uniformLocations = null;
357
+
358
+ const attribs = this.attributeLocations;
359
+ const attribLen = this.attributeLocations.length;
360
+ for (let i = 0; i < attribLen; i++) {
361
+ this.glw.deleteBuffer(attribs[i]!);
362
+ }
363
+ }
364
+ }