@lightningjs/renderer 2.12.1 → 3.0.0-beta1

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 (323) hide show
  1. package/dist/exports/canvas-shaders.d.ts +10 -0
  2. package/dist/exports/canvas-shaders.js +27 -0
  3. package/dist/exports/canvas-shaders.js.map +1 -0
  4. package/dist/exports/canvas.d.ts +7 -1
  5. package/dist/exports/canvas.js +7 -1
  6. package/dist/exports/canvas.js.map +1 -1
  7. package/dist/exports/index.d.ts +15 -8
  8. package/dist/exports/index.js +7 -4
  9. package/dist/exports/index.js.map +1 -1
  10. package/dist/exports/webgl-shaders.d.ts +11 -0
  11. package/dist/exports/webgl-shaders.js +28 -0
  12. package/dist/exports/webgl-shaders.js.map +1 -0
  13. package/dist/exports/webgl.d.ts +9 -1
  14. package/dist/exports/webgl.js +9 -1
  15. package/dist/exports/webgl.js.map +1 -1
  16. package/dist/src/core/CoreNode.d.ts +19 -5
  17. package/dist/src/core/CoreNode.js +117 -24
  18. package/dist/src/core/CoreNode.js.map +1 -1
  19. package/dist/src/core/CoreShaderManager.d.ts +29 -71
  20. package/dist/src/core/CoreShaderManager.js +110 -97
  21. package/dist/src/core/CoreShaderManager.js.map +1 -1
  22. package/dist/src/core/CoreTextNode.js +1 -1
  23. package/dist/src/core/CoreTextNode.js.map +1 -1
  24. package/dist/src/core/CoreTextureManager.d.ts +13 -7
  25. package/dist/src/core/CoreTextureManager.js +92 -105
  26. package/dist/src/core/CoreTextureManager.js.map +1 -1
  27. package/dist/src/core/Stage.d.ts +15 -16
  28. package/dist/src/core/Stage.js +45 -32
  29. package/dist/src/core/Stage.js.map +1 -1
  30. package/dist/src/core/TextureMemoryManager.d.ts +16 -6
  31. package/dist/src/core/TextureMemoryManager.js +75 -17
  32. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  33. package/dist/src/core/animations/CoreAnimation.d.ts +0 -1
  34. package/dist/src/core/animations/CoreAnimation.js +6 -52
  35. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  36. package/dist/src/core/lib/ImageWorker.d.ts +1 -1
  37. package/dist/src/core/lib/ImageWorker.js +13 -11
  38. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  39. package/dist/src/core/lib/WebGlContextWrapper.d.ts +67 -54
  40. package/dist/src/core/lib/WebGlContextWrapper.js +126 -157
  41. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  42. package/dist/src/core/lib/textureCompression.js +0 -1
  43. package/dist/src/core/lib/textureCompression.js.map +1 -1
  44. package/dist/src/core/lib/utils.d.ts +4 -0
  45. package/dist/src/core/lib/utils.js +26 -0
  46. package/dist/src/core/lib/utils.js.map +1 -1
  47. package/dist/src/core/lib/validateImageBitmap.d.ts +6 -0
  48. package/dist/src/core/lib/validateImageBitmap.js +68 -0
  49. package/dist/src/core/lib/validateImageBitmap.js.map +1 -0
  50. package/dist/src/core/platform.js +4 -3
  51. package/dist/src/core/platform.js.map +1 -1
  52. package/dist/src/core/renderers/CoreRenderer.d.ts +11 -21
  53. package/dist/src/core/renderers/CoreRenderer.js +0 -6
  54. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  55. package/dist/src/core/renderers/CoreShaderNode.d.ts +59 -0
  56. package/dist/src/core/renderers/CoreShaderNode.js +107 -0
  57. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -0
  58. package/dist/src/core/renderers/CoreShaderProgram.d.ts +4 -0
  59. package/{src/core/renderers/CoreShader.ts → dist/src/core/renderers/CoreShaderProgram.js} +2 -23
  60. package/dist/src/core/renderers/CoreShaderProgram.js.map +1 -0
  61. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +36 -0
  62. package/dist/src/core/renderers/canvas/CanvasRenderer.js +212 -0
  63. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -0
  64. package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +21 -0
  65. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +60 -0
  66. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -0
  67. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +16 -0
  68. package/dist/src/core/renderers/canvas/CanvasTexture.js +123 -0
  69. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -0
  70. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +0 -13
  71. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +192 -113
  72. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
  73. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +2 -0
  74. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +14 -0
  75. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
  76. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +7 -12
  77. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  78. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +12 -0
  79. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +55 -0
  80. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -0
  81. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +9 -0
  82. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +38 -0
  83. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -0
  84. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +57 -0
  85. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +227 -0
  86. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -0
  87. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +36 -0
  88. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +107 -0
  89. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -0
  90. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +134 -0
  91. package/dist/src/core/renderers/webgl/WebGlRenderer.js +546 -0
  92. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -0
  93. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +221 -0
  94. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +334 -0
  95. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -0
  96. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +35 -0
  97. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +195 -0
  98. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -0
  99. package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +32 -5
  100. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +50 -0
  101. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
  102. package/dist/src/core/shaders/canvas/Border.d.ts +9 -0
  103. package/dist/src/core/shaders/canvas/Border.js +57 -0
  104. package/dist/src/core/shaders/canvas/Border.js.map +1 -0
  105. package/dist/src/core/shaders/canvas/HolePunch.d.ts +7 -0
  106. package/dist/src/core/shaders/canvas/HolePunch.js +38 -0
  107. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -0
  108. package/dist/src/core/shaders/canvas/LinearGradient.d.ts +10 -0
  109. package/dist/src/core/shaders/canvas/LinearGradient.js +46 -0
  110. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -0
  111. package/dist/src/core/shaders/canvas/RadialGradient.d.ts +11 -0
  112. package/dist/src/core/shaders/canvas/RadialGradient.js +68 -0
  113. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -0
  114. package/dist/src/core/shaders/canvas/Rounded.d.ts +7 -0
  115. package/dist/src/core/shaders/canvas/Rounded.js +33 -0
  116. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -0
  117. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +7 -0
  118. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +35 -0
  119. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -0
  120. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +8 -0
  121. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +39 -0
  122. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -0
  123. package/dist/src/core/shaders/canvas/RoundedWithShadow.d.ts +7 -0
  124. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +38 -0
  125. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -0
  126. package/dist/src/core/shaders/canvas/Shadow.d.ts +8 -0
  127. package/dist/src/core/shaders/canvas/Shadow.js +31 -0
  128. package/dist/src/core/shaders/canvas/Shadow.js.map +1 -0
  129. package/dist/src/core/shaders/canvas/utils/render.d.ts +5 -0
  130. package/dist/src/core/shaders/canvas/utils/render.js +84 -0
  131. package/dist/src/core/shaders/canvas/utils/render.js.map +1 -0
  132. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +37 -0
  133. package/dist/src/core/shaders/templates/BorderTemplate.js +73 -0
  134. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -0
  135. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +46 -0
  136. package/dist/src/core/shaders/templates/HolePunchTemplate.js +35 -0
  137. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -0
  138. package/dist/src/core/shaders/templates/LinearGradientTemplate.d.ts +23 -0
  139. package/dist/src/core/shaders/templates/LinearGradientTemplate.js +47 -0
  140. package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +1 -0
  141. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +31 -0
  142. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +49 -0
  143. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -0
  144. package/dist/src/core/shaders/templates/RoundedTemplate.d.ts +29 -0
  145. package/dist/src/core/shaders/templates/RoundedTemplate.js +67 -0
  146. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -0
  147. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +7 -0
  148. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +24 -0
  149. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -0
  150. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +6 -0
  151. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +23 -0
  152. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +1 -0
  153. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +6 -0
  154. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +23 -0
  155. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +1 -0
  156. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +34 -0
  157. package/dist/src/core/shaders/templates/ShadowTemplate.js +66 -0
  158. package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -0
  159. package/dist/src/core/shaders/templates/shaderUtils.d.ts +5 -0
  160. package/dist/src/core/shaders/templates/shaderUtils.js +41 -0
  161. package/dist/src/core/shaders/templates/shaderUtils.js.map +1 -0
  162. package/dist/src/core/shaders/webgl/Border.d.ts +3 -0
  163. package/dist/src/core/shaders/webgl/Border.js +87 -0
  164. package/dist/src/core/shaders/webgl/Border.js.map +1 -0
  165. package/dist/src/core/shaders/webgl/Default.d.ts +2 -0
  166. package/dist/src/core/shaders/webgl/Default.js +86 -0
  167. package/dist/src/core/shaders/webgl/Default.js.map +1 -0
  168. package/dist/src/core/shaders/webgl/DefaultBatched.d.ts +2 -0
  169. package/dist/src/core/shaders/webgl/DefaultBatched.js +104 -0
  170. package/dist/src/core/shaders/webgl/DefaultBatched.js.map +1 -0
  171. package/dist/src/core/shaders/webgl/HolePunch.d.ts +3 -0
  172. package/dist/src/core/shaders/webgl/HolePunch.js +64 -0
  173. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -0
  174. package/dist/src/core/shaders/webgl/LinearGradient.d.ts +3 -0
  175. package/dist/src/core/shaders/webgl/LinearGradient.js +75 -0
  176. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -0
  177. package/dist/src/core/shaders/webgl/RadialGradient.d.ts +3 -0
  178. package/dist/src/core/shaders/webgl/RadialGradient.js +73 -0
  179. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -0
  180. package/dist/src/core/shaders/webgl/Rounded.d.ts +7 -0
  181. package/dist/src/core/shaders/webgl/Rounded.js +86 -0
  182. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -0
  183. package/dist/src/core/shaders/webgl/RoundedWithBorder.d.ts +3 -0
  184. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +97 -0
  185. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -0
  186. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.d.ts +3 -0
  187. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +112 -0
  188. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -0
  189. package/dist/src/core/shaders/webgl/RoundedWithShadow.d.ts +3 -0
  190. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +84 -0
  191. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -0
  192. package/dist/src/core/shaders/webgl/SdfShader.d.ts +32 -0
  193. package/dist/src/core/shaders/webgl/SdfShader.js +116 -0
  194. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -0
  195. package/dist/src/core/shaders/webgl/Shadow.d.ts +3 -0
  196. package/dist/src/core/shaders/webgl/Shadow.js +110 -0
  197. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -0
  198. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
  199. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
  200. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  201. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +6 -0
  202. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  203. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +2 -3
  204. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +34 -30
  205. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  206. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +1 -4
  207. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  208. package/dist/src/core/textures/ImageTexture.js +10 -16
  209. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  210. package/dist/src/core/textures/Texture.d.ts +1 -1
  211. package/dist/src/main-api/INode.d.ts +9 -9
  212. package/dist/src/main-api/Inspector.js +16 -2
  213. package/dist/src/main-api/Inspector.js.map +1 -1
  214. package/dist/src/main-api/Renderer.d.ts +35 -92
  215. package/dist/src/main-api/Renderer.js +11 -57
  216. package/dist/src/main-api/Renderer.js.map +1 -1
  217. package/dist/src/utils.d.ts +6 -0
  218. package/dist/src/utils.js +18 -0
  219. package/dist/src/utils.js.map +1 -1
  220. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  221. package/exports/canvas-shaders.ts +28 -0
  222. package/exports/canvas.ts +7 -1
  223. package/exports/index.ts +17 -17
  224. package/exports/webgl-shaders.ts +28 -0
  225. package/exports/webgl.ts +13 -1
  226. package/package.json +3 -1
  227. package/src/core/CoreNode.test.ts +157 -153
  228. package/src/core/CoreNode.ts +173 -38
  229. package/src/core/CoreShaderManager.ts +127 -226
  230. package/src/core/CoreTextNode.ts +1 -8
  231. package/src/core/CoreTextureManager.ts +127 -126
  232. package/src/core/Stage.ts +62 -44
  233. package/src/core/TextureMemoryManager.ts +108 -27
  234. package/src/core/animations/CoreAnimation.ts +8 -64
  235. package/src/core/lib/ImageWorker.ts +20 -12
  236. package/src/core/lib/WebGlContextWrapper.ts +228 -236
  237. package/src/core/lib/textureCompression.ts +3 -3
  238. package/src/core/lib/utils.ts +51 -0
  239. package/src/core/lib/validateImageBitmap.ts +76 -0
  240. package/src/core/platform.ts +6 -3
  241. package/src/core/renderers/CoreRenderer.ts +19 -27
  242. package/src/core/renderers/CoreShaderNode.ts +171 -0
  243. package/src/core/renderers/{canvas/shaders/UnsupportedShader.ts → CoreShaderProgram.ts} +3 -28
  244. package/src/core/renderers/canvas/CanvasRenderer.ts +299 -0
  245. package/src/core/renderers/canvas/CanvasShaderNode.ts +99 -0
  246. package/src/core/renderers/canvas/{CanvasCoreTexture.ts → CanvasTexture.ts} +1 -1
  247. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +2 -13
  248. package/src/core/renderers/canvas/internal/ColorUtils.ts +16 -0
  249. package/src/core/renderers/webgl/{WebGlCoreCtxRenderTexture.ts → WebGlCtxRenderTexture.ts} +2 -2
  250. package/src/core/renderers/webgl/{WebGlCoreCtxSubTexture.ts → WebGlCtxSubTexture.ts} +2 -2
  251. package/src/core/renderers/webgl/{WebGlCoreCtxTexture.ts → WebGlCtxTexture.ts} +12 -14
  252. package/src/core/renderers/webgl/{WebGlCoreRenderOp.ts → WebGlRenderOp.ts} +56 -36
  253. package/src/core/renderers/webgl/{WebGlCoreRenderer.ts → WebGlRenderer.ts} +143 -243
  254. package/src/core/renderers/webgl/WebGlShaderNode.ts +433 -0
  255. package/src/core/renderers/webgl/WebGlShaderProgram.ts +310 -0
  256. package/src/core/renderers/webgl/internal/ShaderUtils.ts +143 -5
  257. package/src/core/shaders/canvas/Border.ts +78 -0
  258. package/src/core/shaders/canvas/HolePunch.ts +62 -0
  259. package/src/core/shaders/canvas/LinearGradient.ts +69 -0
  260. package/src/core/shaders/canvas/RadialGradient.ts +113 -0
  261. package/src/core/shaders/canvas/Rounded.ts +55 -0
  262. package/src/core/shaders/canvas/RoundedWithBorder.ts +68 -0
  263. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +88 -0
  264. package/src/core/shaders/canvas/RoundedWithShadow.ts +69 -0
  265. package/src/core/shaders/canvas/Shadow.ts +52 -0
  266. package/src/core/shaders/canvas/utils/render.ts +151 -0
  267. package/src/core/shaders/templates/BorderTemplate.ts +115 -0
  268. package/src/core/shaders/templates/HolePunchTemplate.ts +82 -0
  269. package/src/core/shaders/templates/LinearGradientTemplate.ts +71 -0
  270. package/src/core/shaders/templates/RadialGradientTemplate.ts +81 -0
  271. package/src/core/shaders/templates/RoundedTemplate.ts +98 -0
  272. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +38 -0
  273. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +35 -0
  274. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +35 -0
  275. package/src/core/shaders/templates/ShadowTemplate.ts +106 -0
  276. package/src/core/shaders/templates/shaderUtils.ts +47 -0
  277. package/src/core/shaders/webgl/Border.ts +96 -0
  278. package/src/core/shaders/webgl/Default.ts +89 -0
  279. package/src/core/shaders/webgl/DefaultBatched.ts +129 -0
  280. package/src/core/shaders/webgl/HolePunch.ts +78 -0
  281. package/src/core/shaders/webgl/LinearGradient.ts +81 -0
  282. package/src/core/shaders/webgl/RadialGradient.ts +84 -0
  283. package/src/core/shaders/webgl/Rounded.ts +117 -0
  284. package/src/core/shaders/webgl/RoundedWithBorder.ts +114 -0
  285. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +133 -0
  286. package/src/core/shaders/webgl/RoundedWithShadow.ts +98 -0
  287. package/src/core/shaders/webgl/SdfShader.ts +137 -0
  288. package/src/core/shaders/webgl/Shadow.ts +115 -0
  289. package/src/core/text-rendering/TextTextureRendererUtils.ts +1 -1
  290. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +2 -2
  291. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +12 -5
  292. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +44 -56
  293. package/src/core/text-rendering/renderers/TextRenderer.ts +2 -9
  294. package/src/core/textures/ImageTexture.ts +11 -17
  295. package/src/core/textures/Texture.ts +1 -1
  296. package/src/main-api/INode.ts +11 -13
  297. package/src/main-api/Inspector.ts +19 -2
  298. package/src/main-api/Renderer.ts +59 -130
  299. package/src/utils.ts +19 -0
  300. package/src/core/renderers/canvas/CanvasCoreRenderer.ts +0 -375
  301. package/src/core/renderers/webgl/WebGlCoreShader.ts +0 -362
  302. package/src/core/renderers/webgl/shaders/DefaultShader.ts +0 -93
  303. package/src/core/renderers/webgl/shaders/DefaultShaderBatched.ts +0 -132
  304. package/src/core/renderers/webgl/shaders/DynamicShader.ts +0 -580
  305. package/src/core/renderers/webgl/shaders/RoundedRectangle.ts +0 -167
  306. package/src/core/renderers/webgl/shaders/SdfShader.ts +0 -204
  307. package/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.ts +0 -101
  308. package/src/core/renderers/webgl/shaders/effects/BorderEffect.ts +0 -87
  309. package/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.ts +0 -101
  310. package/src/core/renderers/webgl/shaders/effects/BorderRightEffect.ts +0 -101
  311. package/src/core/renderers/webgl/shaders/effects/BorderTopEffect.ts +0 -101
  312. package/src/core/renderers/webgl/shaders/effects/EffectUtils.ts +0 -159
  313. package/src/core/renderers/webgl/shaders/effects/FadeOutEffect.ts +0 -127
  314. package/src/core/renderers/webgl/shaders/effects/GlitchEffect.ts +0 -148
  315. package/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.ts +0 -67
  316. package/src/core/renderers/webgl/shaders/effects/HolePunchEffect.ts +0 -157
  317. package/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.ts +0 -171
  318. package/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.ts +0 -168
  319. package/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.ts +0 -187
  320. package/src/core/renderers/webgl/shaders/effects/RadiusEffect.ts +0 -110
  321. package/src/core/renderers/webgl/shaders/effects/ShaderEffect.ts +0 -196
  322. package/src/main-api/DynamicShaderController.ts +0 -104
  323. package/src/main-api/ShaderController.ts +0 -80
@@ -0,0 +1,299 @@
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 { CoreNode } from '../../CoreNode.js';
20
+ import { SubTexture } from '../../textures/SubTexture.js';
21
+ import { TextureType, type Texture } from '../../textures/Texture.js';
22
+ import type { CoreContextTexture } from '../CoreContextTexture.js';
23
+ import {
24
+ CoreRenderer,
25
+ type CoreRendererOptions,
26
+ type QuadOptions,
27
+ } from '../CoreRenderer.js';
28
+ import { CanvasTexture } from './CanvasTexture.js';
29
+ import {
30
+ parseColor,
31
+ parseToAbgrString,
32
+ parseToRgbaString,
33
+ } from './internal/ColorUtils.js';
34
+ import { assertTruthy } from '../../../utils.js';
35
+ import { CanvasShaderNode, type CanvasShaderType } from './CanvasShaderNode.js';
36
+ import type { CoreShaderType } from '../CoreShaderNode.js';
37
+
38
+ export class CanvasRenderer extends CoreRenderer {
39
+ private context: CanvasRenderingContext2D;
40
+ private canvas: HTMLCanvasElement;
41
+ private pixelRatio: number;
42
+ private clearColor: string;
43
+ public renderToTextureActive = false;
44
+ activeRttNode: CoreNode | null = null;
45
+
46
+ private parsedColorCache: Map<number, string> = new Map();
47
+
48
+ constructor(options: CoreRendererOptions) {
49
+ super(options);
50
+
51
+ this.mode = 'canvas';
52
+
53
+ const { canvas } = options;
54
+ this.canvas = canvas as HTMLCanvasElement;
55
+ this.context = canvas.getContext('2d') as CanvasRenderingContext2D;
56
+ this.pixelRatio = this.stage.pixelRatio;
57
+ this.clearColor = this.getParsedColor(this.stage.clearColor);
58
+ }
59
+
60
+ reset(): void {
61
+ this.canvas.width = this.canvas.width; // quick reset canvas
62
+
63
+ const ctx = this.context;
64
+
65
+ if (this.clearColor) {
66
+ ctx.fillStyle = this.clearColor;
67
+ ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);
68
+ }
69
+
70
+ ctx.scale(this.pixelRatio, this.pixelRatio);
71
+ }
72
+
73
+ render(): void {
74
+ // noop
75
+ }
76
+
77
+ addQuad(quad: QuadOptions): void {
78
+ const ctx = this.context;
79
+ const { tx, ty, ta, tb, tc, td, clippingRect } = quad;
80
+ let texture = quad.texture;
81
+ const textureType = texture?.type;
82
+ assertTruthy(textureType, 'Texture type is not defined');
83
+
84
+ // The Canvas2D renderer only supports image and color textures
85
+ if (
86
+ textureType !== TextureType.image &&
87
+ textureType !== TextureType.color &&
88
+ textureType !== TextureType.subTexture &&
89
+ textureType !== TextureType.noise
90
+ ) {
91
+ return;
92
+ }
93
+
94
+ if (texture) {
95
+ if (texture instanceof SubTexture) {
96
+ texture = texture.parentTexture;
97
+ }
98
+
99
+ if (texture.state === 'freed') {
100
+ return;
101
+ }
102
+ if (texture.state !== 'loaded') {
103
+ return;
104
+ }
105
+ }
106
+
107
+ const hasTransform = ta !== 1;
108
+ const hasClipping = clippingRect.width !== 0 && clippingRect.height !== 0;
109
+ const hasShader = quad.shader !== null;
110
+
111
+ let saveAndRestore = hasTransform === true || hasClipping === true;
112
+ if (hasShader === true) {
113
+ saveAndRestore =
114
+ saveAndRestore || (quad.shader as CanvasShaderNode).applySNR;
115
+ }
116
+
117
+ if (saveAndRestore) {
118
+ ctx.save();
119
+ }
120
+
121
+ if (hasClipping === true) {
122
+ const path = new Path2D();
123
+ const { x, y, width, height } = clippingRect;
124
+ path.rect(x, y, width, height);
125
+ ctx.clip(path);
126
+ }
127
+
128
+ if (hasTransform === true) {
129
+ // Quad transform:
130
+ // | ta tb tx |
131
+ // | tc td ty |
132
+ // | 0 0 1 |
133
+ // C2D transform:
134
+ // | a c e |
135
+ // | b d f |
136
+ // | 0 0 1 |
137
+ const scale = this.pixelRatio;
138
+ ctx.setTransform(ta, tc, tb, td, tx * scale, ty * scale);
139
+ ctx.scale(scale, scale);
140
+ ctx.translate(-tx, -ty);
141
+ }
142
+
143
+ if (hasShader === true) {
144
+ let renderContext: (() => void) | null = () => {
145
+ this.renderContext(quad);
146
+ };
147
+ (quad.shader as CanvasShaderNode).render(ctx, quad, renderContext);
148
+ renderContext = null;
149
+ } else {
150
+ this.renderContext(quad);
151
+ }
152
+
153
+ if (saveAndRestore) {
154
+ ctx.restore();
155
+ }
156
+ }
157
+
158
+ renderContext(quad: QuadOptions) {
159
+ const color = quad.colorTl;
160
+ const textureType = quad.texture?.type;
161
+ if (
162
+ (textureType === TextureType.image ||
163
+ textureType === TextureType.subTexture ||
164
+ textureType === TextureType.noise) &&
165
+ quad.texture?.ctxTexture
166
+ ) {
167
+ const tintColor = parseColor(color);
168
+ const image = (quad.texture.ctxTexture as CanvasTexture).getImage(
169
+ tintColor,
170
+ );
171
+ this.context.globalAlpha = tintColor.a ?? quad.alpha;
172
+ if (textureType === TextureType.subTexture) {
173
+ this.context.drawImage(
174
+ image,
175
+ (quad.texture as SubTexture).props.x,
176
+ (quad.texture as SubTexture).props.y,
177
+ (quad.texture as SubTexture).props.width,
178
+ (quad.texture as SubTexture).props.height,
179
+ quad.tx,
180
+ quad.ty,
181
+ quad.width,
182
+ quad.height,
183
+ );
184
+ } else {
185
+ try {
186
+ this.context.drawImage(
187
+ image,
188
+ quad.tx,
189
+ quad.ty,
190
+ quad.width,
191
+ quad.height,
192
+ );
193
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
194
+ } catch (error) {
195
+ // noop
196
+ }
197
+ }
198
+ this.context.globalAlpha = 1;
199
+ return;
200
+ }
201
+ const hasGradient =
202
+ quad.colorTl !== quad.colorTr || quad.colorTl !== quad.colorBr;
203
+ if (textureType === TextureType.color && hasGradient) {
204
+ let endX: number = quad.tx;
205
+ let endY: number = quad.ty;
206
+ let endColor: number;
207
+ if (quad.colorTl === quad.colorTr) {
208
+ // vertical
209
+ endX = quad.tx;
210
+ endY = quad.ty + quad.height;
211
+ endColor = quad.colorBr;
212
+ } else {
213
+ // horizontal
214
+ endX = quad.tx + quad.width;
215
+ endY = quad.ty;
216
+ endColor = quad.colorTr;
217
+ }
218
+ const gradient = this.context.createLinearGradient(
219
+ quad.tx,
220
+ quad.ty,
221
+ endX,
222
+ endY,
223
+ );
224
+ gradient.addColorStop(0, this.getParsedColor(color));
225
+ gradient.addColorStop(1, this.getParsedColor(endColor));
226
+ this.context.fillStyle = gradient;
227
+ this.context.fillRect(quad.tx, quad.ty, quad.width, quad.height);
228
+ } else if (textureType === TextureType.color) {
229
+ this.context.fillStyle = this.getParsedColor(color);
230
+ this.context.fillRect(quad.tx, quad.ty, quad.width, quad.height);
231
+ }
232
+ }
233
+
234
+ createShaderNode(
235
+ shaderKey: string,
236
+ shaderType: Readonly<CanvasShaderType>,
237
+ props?: Record<string, any>,
238
+ ) {
239
+ return new CanvasShaderNode(shaderKey, shaderType, this.stage, props);
240
+ }
241
+
242
+ createShaderProgram(shaderConfig) {
243
+ return null;
244
+ }
245
+
246
+ override supportsShaderType(shaderType: Readonly<CanvasShaderType>): boolean {
247
+ return shaderType.render !== undefined;
248
+ }
249
+
250
+ createCtxTexture(textureSource: Texture): CoreContextTexture {
251
+ return new CanvasTexture(this.stage.txMemManager, textureSource);
252
+ }
253
+
254
+ renderRTTNodes(): void {
255
+ // noop
256
+ }
257
+
258
+ removeRTTNode(node: CoreNode): void {
259
+ // noop
260
+ }
261
+
262
+ renderToTexture(node: CoreNode): void {
263
+ // noop
264
+ }
265
+ getBufferInfo(): null {
266
+ return null;
267
+ }
268
+
269
+ getQuadCount(): null {
270
+ return null;
271
+ }
272
+
273
+ getParsedColor(color: number, isRGBA: boolean = false) {
274
+ let out = this.parsedColorCache.get(color);
275
+ if (out !== undefined) {
276
+ return out;
277
+ }
278
+ if (isRGBA) {
279
+ out = parseToRgbaString(color);
280
+ } else {
281
+ out = parseToAbgrString(color);
282
+ }
283
+ this.parsedColorCache.set(color, out);
284
+ return out;
285
+ }
286
+
287
+ /**
288
+ * Updates the clear color of the canvas renderer.
289
+ *
290
+ * @param color - The color to set as the clear color.
291
+ */
292
+ updateClearColor(color: number) {
293
+ this.clearColor = this.getParsedColor(color);
294
+ }
295
+
296
+ override getDefaultShaderNode() {
297
+ return null;
298
+ }
299
+ }
@@ -0,0 +1,99 @@
1
+ /*
2
+ * Copyright 2023 Comcast Cable Communications Management, LLC
3
+ * Licensed under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License.
5
+ * You may obtain a copy of the License at
6
+ *
7
+ * http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software
10
+ * distributed under the License is distributed on an "AS IS" BASIS,
11
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ * See the License for the specific language governing permissions and
13
+ * limitations under the License.
14
+ *
15
+ * SPDX-License-Identifier: Apache-2.0
16
+ */
17
+
18
+ import type { CoreNode } from '../../CoreNode.js';
19
+ import type { Stage } from '../../Stage.js';
20
+ import type { QuadOptions } from '../CoreRenderer.js';
21
+ import { CoreShaderNode, type CoreShaderType } from '../CoreShaderNode.js';
22
+ import type { CanvasRenderer } from './CanvasRenderer.js';
23
+
24
+ export type CanvasShaderType<
25
+ T extends object = Record<string, unknown>,
26
+ C extends object = Record<string, unknown>,
27
+ > = CoreShaderType<T> & {
28
+ render: (
29
+ this: CanvasShaderNode<T, C>,
30
+ ctx: CanvasRenderingContext2D,
31
+ quad: QuadOptions,
32
+ renderContext: () => void,
33
+ ) => void;
34
+ update?: (this: CanvasShaderNode<T, C>, node: CoreNode) => void;
35
+ /**
36
+ * Set this to true when using ctx functions that scale, clip, rotate, etc..
37
+ */
38
+ saveAndRestore?: boolean;
39
+ };
40
+
41
+ export class CanvasShaderNode<
42
+ Props extends object = Record<string, unknown>,
43
+ Computed extends object = Record<string, unknown>,
44
+ > extends CoreShaderNode<Props> {
45
+ private updater: ((node: CoreNode, props?: Props) => void) | undefined =
46
+ undefined;
47
+ private valueKey: string = '';
48
+ computed: Partial<Computed> = {};
49
+ applySNR: boolean;
50
+ render: CanvasShaderType<Props>['render'];
51
+
52
+ constructor(
53
+ shaderKey: string,
54
+ config: CanvasShaderType<Props>,
55
+ stage: Stage,
56
+ props?: Props,
57
+ ) {
58
+ super(shaderKey, config, stage, props);
59
+ this.applySNR = config.saveAndRestore || false;
60
+ this.render = config.render;
61
+ if (config.update !== undefined) {
62
+ this.updater = config.update!;
63
+ if (this.props === undefined) {
64
+ this.updater!(this.node as CoreNode, this.props);
65
+ return;
66
+ }
67
+
68
+ this.update = () => {
69
+ const prevKey = this.valueKey;
70
+ this.valueKey = '';
71
+ for (const key in this.resolvedProps) {
72
+ this.valueKey += `${key}:${this.resolvedProps[key]!};`;
73
+ }
74
+
75
+ if (prevKey === this.valueKey) {
76
+ return;
77
+ }
78
+
79
+ if (prevKey.length > 0) {
80
+ this.stage.shManager.mutateShaderValueUsage(prevKey, -1);
81
+ }
82
+
83
+ const computed = this.stage.shManager.getShaderValues(
84
+ this.valueKey,
85
+ ) as Record<string, unknown>;
86
+ if (computed !== undefined) {
87
+ this.computed = computed as Computed;
88
+ }
89
+ this.computed = {};
90
+ this.updater!(this.node as CoreNode);
91
+ this.stage.shManager.setShaderValues(this.valueKey, this.computed);
92
+ };
93
+ }
94
+ }
95
+
96
+ toColorString(rgba: number) {
97
+ return (this.stage.renderer as CanvasRenderer).getParsedColor(rgba, true);
98
+ }
99
+ }
@@ -22,7 +22,7 @@ import { assertTruthy } from '../../../utils.js';
22
22
  import { CoreContextTexture } from '../CoreContextTexture.js';
23
23
  import { formatRgba, type IParsedColor } from './internal/ColorUtils.js';
24
24
 
25
- export class CanvasCoreTexture extends CoreContextTexture {
25
+ export class CanvasTexture extends CoreContextTexture {
26
26
  protected image:
27
27
  | ImageBitmap
28
28
  | HTMLCanvasElement
@@ -18,20 +18,10 @@
18
18
  */
19
19
 
20
20
  import type { QuadOptions } from '../../CoreRenderer.js';
21
- import type { BorderEffectProps } from '../../webgl/shaders/effects/BorderEffect.js';
22
- import type { RadiusEffectProps } from '../../webgl/shaders/effects/RadiusEffect.js';
23
- import type { EffectDescUnion } from '../../webgl/shaders/effects/ShaderEffect.js';
24
- import {
25
- ROUNDED_RECTANGLE_SHADER_TYPE,
26
- UnsupportedShader,
27
- } from '../shaders/UnsupportedShader.js';
28
- import { formatRgba, parseColorRgba } from './ColorUtils.js';
29
21
 
30
22
  type Direction = 'Top' | 'Right' | 'Bottom' | 'Left';
31
23
 
32
- /**
33
- * Extract `RoundedRectangle` shader radius to apply as a clipping
34
- */
24
+ /*
35
25
  export function getRadius(quad: QuadOptions): RadiusEffectProps['radius'] {
36
26
  if (quad.shader instanceof UnsupportedShader) {
37
27
  const shType = quad.shader.shType;
@@ -54,8 +44,6 @@ export function getRadius(quad: QuadOptions): RadiusEffectProps['radius'] {
54
44
  return 0;
55
45
  }
56
46
 
57
- /**
58
- * Extract `RoundedRectangle` shader radius to apply as a clipping */
59
47
  export function getBorder(
60
48
  quad: QuadOptions,
61
49
  direction: '' | Direction = '',
@@ -229,3 +217,4 @@ export function strokeLine(
229
217
  ctx.lineTo(ex, ey);
230
218
  ctx.stroke();
231
219
  }
220
+ */
@@ -47,6 +47,22 @@ export function parseColor(abgr: number): IParsedColor {
47
47
  return { isWhite: false, a, r, g, b };
48
48
  }
49
49
 
50
+ export function parseToAbgrString(abgr: number) {
51
+ const a = ((abgr >>> 24) & 0xff) / 255;
52
+ const b = (abgr >>> 16) & 0xff & 0xff;
53
+ const g = (abgr >>> 8) & 0xff & 0xff;
54
+ const r = abgr & 0xff & 0xff;
55
+ return `rgba(${r},${g},${b},${a})`;
56
+ }
57
+
58
+ export function parseToRgbaString(rgba: number) {
59
+ const r = (rgba >>> 24) & 0xff;
60
+ const g = (rgba >>> 16) & 0xff & 0xff;
61
+ const b = (rgba >>> 8) & 0xff & 0xff;
62
+ const a = (rgba & 0xff & 0xff) / 255;
63
+ return `rgba(${r},${g},${b},${a})`;
64
+ }
65
+
50
66
  /**
51
67
  * Extract color components
52
68
  */
@@ -22,9 +22,9 @@ import { assertTruthy } from '../../../utils.js';
22
22
  import type { TextureMemoryManager } from '../../TextureMemoryManager.js';
23
23
  import type { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
24
24
  import type { RenderTexture } from '../../textures/RenderTexture.js';
25
- import { WebGlCoreCtxTexture } from './WebGlCoreCtxTexture.js';
25
+ import { WebGlCtxTexture } from './WebGlCtxTexture.js';
26
26
 
27
- export class WebGlCoreCtxRenderTexture extends WebGlCoreCtxTexture {
27
+ export class WebGlCtxRenderTexture extends WebGlCtxTexture {
28
28
  declare textureSource: RenderTexture;
29
29
 
30
30
  public framebuffer: WebGLFramebuffer | null = null;
@@ -22,9 +22,9 @@ import { assertTruthy } from '../../../utils.js';
22
22
  import type { TextureMemoryManager } from '../../TextureMemoryManager.js';
23
23
  import type { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
24
24
  import type { SubTexture } from '../../textures/SubTexture.js';
25
- import { WebGlCoreCtxTexture } from './WebGlCoreCtxTexture.js';
25
+ import { WebGlCtxTexture } from './WebGlCtxTexture.js';
26
26
 
27
- export class WebGlCoreCtxSubTexture extends WebGlCoreCtxTexture {
27
+ export class WebGlCtxSubTexture extends WebGlCtxTexture {
28
28
  constructor(
29
29
  glw: WebGlContextWrapper,
30
30
  memManager: TextureMemoryManager,
@@ -39,7 +39,7 @@ const TRANSPARENT_TEXTURE_DATA = new Uint8Array([0, 0, 0, 0]);
39
39
  * and trigger the loading/uploading of the texture's data if it hasn't been
40
40
  * loaded yet.
41
41
  */
42
- export class WebGlCoreCtxTexture extends CoreContextTexture {
42
+ export class WebGlCtxTexture extends CoreContextTexture {
43
43
  protected _nativeCtxTexture: WebGLTexture | null = null;
44
44
  private _w = 0;
45
45
  private _h = 0;
@@ -120,6 +120,7 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
120
120
  if (this.state === 'freed') {
121
121
  return;
122
122
  }
123
+
123
124
  this.state = 'failed';
124
125
  this.textureSource.setState('failed', err);
125
126
  this.textureSource.freeTextureData();
@@ -133,17 +134,16 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
133
134
  async onLoadRequest(): Promise<Dimensions> {
134
135
  const { glw } = this;
135
136
  const textureData = this.textureSource.textureData;
136
- assertTruthy(textureData, 'Texture data is null');
137
+ if (textureData === null || this._nativeCtxTexture === null) {
138
+ throw new Error(
139
+ 'Texture data or native texture is null ' + this.textureSource.type,
140
+ );
141
+ }
137
142
 
138
143
  // Set to a 1x1 transparent texture
139
144
  glw.texImage2D(0, glw.RGBA, 1, 1, 0, glw.RGBA, glw.UNSIGNED_BYTE, null);
140
145
  this.setTextureMemUse(TRANSPARENT_TEXTURE_DATA.byteLength);
141
146
 
142
- // If the texture has been freed while loading, return early.
143
- if (!this._nativeCtxTexture) {
144
- assertTruthy(this.state === 'freed');
145
- return { width: 0, height: 0 };
146
- }
147
147
  let width = 0;
148
148
  let height = 0;
149
149
 
@@ -256,14 +256,12 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
256
256
  this.textureSource.setState('freed');
257
257
  this._w = 0;
258
258
  this._h = 0;
259
- if (!this._nativeCtxTexture) {
260
- return;
261
- }
262
- const { glw } = this;
263
259
 
264
- glw.deleteTexture(this._nativeCtxTexture);
265
- this.setTextureMemUse(0);
266
- this._nativeCtxTexture = null;
260
+ if (this._nativeCtxTexture !== null) {
261
+ this.glw.deleteTexture(this._nativeCtxTexture);
262
+ this.setTextureMemUse(0);
263
+ this._nativeCtxTexture = null;
264
+ }
267
265
 
268
266
  // if the texture still has source data, free it
269
267
  this.textureSource.freeTextureData();
@@ -18,46 +18,67 @@
18
18
  */
19
19
 
20
20
  import { CoreRenderOp } from '../CoreRenderOp.js';
21
- import { WebGlCoreShader } from './WebGlCoreShader.js';
22
- import type { WebGlCoreCtxTexture } from './WebGlCoreCtxTexture.js';
23
- import type { WebGlCoreRendererOptions } from './WebGlCoreRenderer.js';
21
+ import type { WebGlCtxTexture } from './WebGlCtxTexture.js';
22
+ import type { WebGlRenderer } from './WebGlRenderer.js';
24
23
  import type { BufferCollection } from './internal/BufferCollection.js';
25
- import type { Dimensions } from '../../../common/CommonTypes.js';
26
- import type { RectWithValid } from '../../lib/utils.js';
27
- import type { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
24
+ import type { WebGlShaderNode } from './WebGlShaderNode.js';
25
+ import type { QuadOptions } from '../CoreRenderer.js';
26
+ import type { CoreTextNode } from '../../CoreTextNode.js';
27
+
28
+ type ReqQuad =
29
+ | 'alpha'
30
+ | 'shader'
31
+ | 'parentHasRenderTexture'
32
+ | 'rtt'
33
+ | 'clippingRect'
34
+ | 'height'
35
+ | 'width';
36
+ type RenderOpQuadOptions = Pick<QuadOptions, ReqQuad> &
37
+ Partial<Omit<QuadOptions, ReqQuad>> & {
38
+ sdfShaderProps?: Record<string, unknown>;
39
+ sdfBuffers?: BufferCollection;
40
+ };
28
41
 
29
42
  /**
30
43
  * Can render multiple quads with multiple textures (up to vertex shader texture limit)
31
44
  *
32
45
  */
33
- export class WebGlCoreRenderOp extends CoreRenderOp {
46
+ export class WebGlRenderOp extends CoreRenderOp {
34
47
  length = 0;
35
48
  numQuads = 0;
36
- textures: WebGlCoreCtxTexture[] = [];
49
+ textures: WebGlCtxTexture[] = [];
50
+
51
+ /**
52
+ * need to improve this when TextRenderers are refactored
53
+ */
54
+ readonly sdfShaderProps: Record<string, unknown> | undefined;
55
+ readonly sdfNode: CoreTextNode | undefined;
37
56
  readonly maxTextures: number;
57
+ readonly buffers: BufferCollection;
58
+ readonly shader: WebGlShaderNode;
38
59
 
39
60
  constructor(
40
- readonly glw: WebGlContextWrapper,
41
- readonly options: WebGlCoreRendererOptions,
42
- readonly buffers: BufferCollection,
43
- readonly shader: WebGlCoreShader,
44
- readonly shaderProps: Record<string, unknown>,
45
- readonly alpha: number,
46
- readonly clippingRect: RectWithValid,
47
- readonly dimensions: Dimensions,
61
+ readonly renderer: WebGlRenderer,
62
+ readonly quad: RenderOpQuadOptions,
48
63
  readonly bufferIdx: number,
49
- readonly zIndex: number,
50
- readonly renderToTexture: boolean | undefined,
51
- readonly parentHasRenderTexture: boolean | undefined,
52
- readonly framebufferDimensions: Dimensions | undefined,
53
64
  ) {
54
65
  super();
55
- this.maxTextures = shader.supportsIndexedTextures
56
- ? (glw.getParameter(glw.MAX_VERTEX_TEXTURE_IMAGE_UNITS) as number)
66
+ this.buffers = quad.sdfBuffers || renderer.quadBufferCollection;
67
+ this.shader = quad.shader as WebGlShaderNode;
68
+
69
+ /**
70
+ * related to line 51
71
+ */
72
+ this.sdfShaderProps = quad.sdfShaderProps;
73
+
74
+ this.maxTextures = this.shader.program.supportsIndexedTextures
75
+ ? (renderer.glw.getParameter(
76
+ renderer.glw.MAX_VERTEX_TEXTURE_IMAGE_UNITS,
77
+ ) as number)
57
78
  : 1;
58
79
  }
59
80
 
60
- addTexture(texture: WebGlCoreCtxTexture): number {
81
+ addTexture(texture: WebGlCtxTexture): number {
61
82
  const { textures, maxTextures } = this;
62
83
  let existingIdx = -1;
63
84
  const texturesLength = textures.length;
@@ -81,31 +102,30 @@ export class WebGlCoreRenderOp extends CoreRenderOp {
81
102
  }
82
103
 
83
104
  draw() {
84
- const { glw, shader, shaderProps, options } = this;
85
- const { shManager } = options;
105
+ const { glw, options, stage } = this.renderer;
86
106
 
87
- shManager.useShader(shader);
88
- shader.bindRenderOp(this, shaderProps);
107
+ stage.shManager.useShader(this.shader.program);
108
+ this.shader.program.bindRenderOp(this);
89
109
 
90
110
  // TODO: Reduce calculations required
91
- const quadIdx = (this.bufferIdx / 24) * 6 * 2;
92
-
111
+ const quadIdx = (this.bufferIdx / 32) * 6 * 2;
93
112
  // Clipping
94
- if (this.clippingRect.valid) {
95
- const { x, y, width, height } = this.clippingRect;
96
- const pixelRatio = this.parentHasRenderTexture ? 1 : options.pixelRatio;
113
+ if (this.quad.clippingRect.valid) {
114
+ const { x, y, width, height } = this.quad.clippingRect;
115
+ const pixelRatio = this.quad.parentHasRenderTexture
116
+ ? 1
117
+ : stage.pixelRatio;
97
118
  const canvasHeight = options.canvas.height;
98
119
 
99
120
  const clipX = Math.round(x * pixelRatio);
100
121
  const clipWidth = Math.round(width * pixelRatio);
101
122
  const clipHeight = Math.round(height * pixelRatio);
102
123
  let clipY = Math.round(canvasHeight - clipHeight - y * pixelRatio);
103
-
104
124
  // if parent has render texture, we need to adjust the scissor rect
105
125
  // to be relative to the parent's framebuffer
106
- if (this.parentHasRenderTexture) {
107
- clipY = this.framebufferDimensions
108
- ? this.framebufferDimensions.height - this.dimensions.height
126
+ if (this.quad.parentHasRenderTexture) {
127
+ clipY = this.quad.framebufferDimensions
128
+ ? this.quad.framebufferDimensions.height - this.quad.height
109
129
  : 0;
110
130
  }
111
131