@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
@@ -17,14 +17,14 @@
17
17
  * limitations under the License.
18
18
  */
19
19
 
20
- import { assertTruthy, createWebGLContext, hasOwn } from '../../../utils.js';
20
+ import { assertTruthy, createWebGLContext } from '../../../utils.js';
21
21
  import {
22
22
  CoreRenderer,
23
23
  type BufferInfo,
24
24
  type CoreRendererOptions,
25
25
  type QuadOptions,
26
26
  } from '../CoreRenderer.js';
27
- import { WebGlCoreRenderOp } from './WebGlCoreRenderOp.js';
27
+ import { WebGlRenderOp } from './WebGlRenderOp.js';
28
28
  import type { CoreContextTexture } from '../CoreContextTexture.js';
29
29
  import {
30
30
  createIndexBuffer,
@@ -34,36 +34,33 @@ import {
34
34
  getWebGlExtensions,
35
35
  type WebGlColor,
36
36
  } from './internal/RendererUtils.js';
37
- import { WebGlCoreCtxTexture } from './WebGlCoreCtxTexture.js';
37
+ import { WebGlCtxTexture } from './WebGlCtxTexture.js';
38
38
  import { Texture, TextureType } from '../../textures/Texture.js';
39
39
  import { SubTexture } from '../../textures/SubTexture.js';
40
- import { WebGlCoreCtxSubTexture } from './WebGlCoreCtxSubTexture.js';
41
- import { CoreShaderManager } from '../../CoreShaderManager.js';
40
+ import { WebGlCtxSubTexture } from './WebGlCtxSubTexture.js';
42
41
  import { BufferCollection } from './internal/BufferCollection.js';
43
- import {
44
- compareRect,
45
- getNormalizedRgbaComponents,
46
- type RectWithValid,
47
- } from '../../lib/utils.js';
48
- import type { Dimensions } from '../../../common/CommonTypes.js';
49
- import { WebGlCoreShader } from './WebGlCoreShader.js';
42
+ import { compareRect, getNormalizedRgbaComponents } from '../../lib/utils.js';
43
+ import { WebGlShaderProgram } from './WebGlShaderProgram.js';
50
44
  import { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
51
45
  import { RenderTexture } from '../../textures/RenderTexture.js';
52
46
  import { CoreNodeRenderState, type CoreNode } from '../../CoreNode.js';
53
- import { WebGlCoreCtxRenderTexture } from './WebGlCoreCtxRenderTexture.js';
54
- import type { BaseShaderController } from '../../../main-api/ShaderController.js';
47
+ import { WebGlCtxRenderTexture } from './WebGlCtxRenderTexture.js';
48
+ import { Default } from '../../shaders/webgl/Default.js';
49
+ import type { WebGlShaderType } from './WebGlShaderNode.js';
50
+ import { WebGlShaderNode } from './WebGlShaderNode.js';
51
+ import type { CoreShaderType } from '../CoreShaderNode.js';
55
52
 
56
53
  const WORDS_PER_QUAD = 24;
57
54
  // const BYTES_PER_QUAD = WORDS_PER_QUAD * 4;
58
55
 
59
- export type WebGlCoreRendererOptions = CoreRendererOptions;
56
+ export type WebGlRendererOptions = CoreRendererOptions;
60
57
 
61
58
  interface CoreWebGlSystem {
62
59
  parameters: CoreWebGlParameters;
63
60
  extensions: CoreWebGlExtensions;
64
61
  }
65
62
 
66
- export class WebGlCoreRenderer extends CoreRenderer {
63
+ export class WebGlRenderer extends CoreRenderer {
67
64
  //// WebGL Native Context and Data
68
65
  glw: WebGlContextWrapper;
69
66
  system: CoreWebGlSystem;
@@ -72,17 +69,16 @@ export class WebGlCoreRenderer extends CoreRenderer {
72
69
  quadBuffer: ArrayBuffer;
73
70
  fQuadBuffer: Float32Array;
74
71
  uiQuadBuffer: Uint32Array;
75
- renderOps: WebGlCoreRenderOp[] = [];
72
+ renderOps: WebGlRenderOp[] = [];
76
73
 
77
74
  //// Render Op / Buffer Filling State
78
75
  curBufferIdx = 0;
79
- curRenderOp: WebGlCoreRenderOp | null = null;
76
+ curRenderOp: WebGlRenderOp | null = null;
80
77
  override rttNodes: CoreNode[] = [];
81
78
  activeRttNode: CoreNode | null = null;
82
79
 
83
80
  //// Default Shader
84
- defShaderCtrl: BaseShaderController;
85
- defaultShader: WebGlCoreShader;
81
+ defaultShaderNode: WebGlShaderNode | null = null;
86
82
  quadBufferCollection: BufferCollection;
87
83
 
88
84
  clearColor: WebGlColor = {
@@ -101,7 +97,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
101
97
  */
102
98
  public renderToTextureActive = false;
103
99
 
104
- constructor(options: WebGlCoreRendererOptions) {
100
+ constructor(options: WebGlRendererOptions) {
105
101
  super(options);
106
102
 
107
103
  this.quadBuffer = new ArrayBuffer(this.stage.options.quadBufferSize);
@@ -110,33 +106,28 @@ export class WebGlCoreRenderer extends CoreRenderer {
110
106
 
111
107
  this.mode = 'webgl';
112
108
 
113
- const { canvas, clearColor, bufferMemory } = options;
114
-
115
109
  const gl = createWebGLContext(
116
- canvas,
110
+ options.canvas,
117
111
  options.forceWebGL2,
118
112
  options.contextSpy,
119
113
  );
120
114
  const glw = (this.glw = new WebGlContextWrapper(gl));
121
- glw.viewport(0, 0, canvas.width, canvas.height);
115
+ glw.viewport(0, 0, options.canvas.width, options.canvas.height);
122
116
 
123
- this.updateClearColor(clearColor);
117
+ this.updateClearColor(this.stage.clearColor);
124
118
 
125
119
  glw.setBlend(true);
126
120
  glw.blendFunc(glw.ONE, glw.ONE_MINUS_SRC_ALPHA);
127
121
 
128
- createIndexBuffer(glw, bufferMemory);
122
+ createIndexBuffer(glw, this.stage.bufferMemory);
129
123
 
130
124
  this.system = {
131
125
  parameters: getWebGlParameters(this.glw),
132
126
  extensions: getWebGlExtensions(this.glw),
133
127
  };
134
- this.shManager.renderer = this;
135
- this.defShaderCtrl = this.shManager.loadShader('DefaultShader');
136
- this.defaultShader = this.defShaderCtrl.shader as WebGlCoreShader;
137
128
  const quadBuffer = glw.createBuffer();
138
129
  assertTruthy(quadBuffer);
139
- const stride = 6 * Float32Array.BYTES_PER_ELEMENT;
130
+ const stride = 8 * Float32Array.BYTES_PER_ELEMENT;
140
131
  this.quadBufferCollection = new BufferCollection([
141
132
  {
142
133
  buffer: quadBuffer,
@@ -149,8 +140,8 @@ export class WebGlCoreRenderer extends CoreRenderer {
149
140
  stride, // 0 = move forward size * sizeof(type) each iteration to get the next position
150
141
  offset: 0, // start at the beginning of the buffer
151
142
  },
152
- a_textureCoordinate: {
153
- name: 'a_textureCoordinate',
143
+ a_textureCoords: {
144
+ name: 'a_textureCoords',
154
145
  size: 2,
155
146
  type: glw.FLOAT,
156
147
  normalized: false,
@@ -173,6 +164,14 @@ export class WebGlCoreRenderer extends CoreRenderer {
173
164
  stride,
174
165
  offset: 5 * Float32Array.BYTES_PER_ELEMENT,
175
166
  },
167
+ a_nodeCoords: {
168
+ name: 'a_nodeCoords',
169
+ size: 2,
170
+ type: glw.FLOAT,
171
+ normalized: false,
172
+ stride,
173
+ offset: 6 * Float32Array.BYTES_PER_ELEMENT,
174
+ },
176
175
  },
177
176
  },
178
177
  ]);
@@ -187,25 +186,52 @@ export class WebGlCoreRenderer extends CoreRenderer {
187
186
  glw.clear();
188
187
  }
189
188
 
190
- override getShaderManager(): CoreShaderManager {
191
- return this.shManager;
189
+ createShaderProgram(
190
+ shaderType: WebGlShaderType,
191
+ props: Record<string, unknown>,
192
+ ): WebGlShaderProgram {
193
+ return new WebGlShaderProgram(this, shaderType, props);
192
194
  }
193
195
 
194
- override createCtxTexture(textureSource: Texture): CoreContextTexture {
196
+ createShaderNode(
197
+ shaderKey: string,
198
+ shaderType: WebGlShaderType,
199
+ props?: Record<string, unknown>,
200
+ program?: WebGlShaderProgram,
201
+ ) {
202
+ return new WebGlShaderNode(
203
+ shaderKey,
204
+ shaderType,
205
+ program!,
206
+ this.stage,
207
+ props,
208
+ );
209
+ }
210
+
211
+ override supportsShaderType(shaderType: Readonly<WebGlShaderType>): boolean {
212
+ //if shadertype doesnt have a fragment source we cant use it
213
+ return shaderType.fragment !== undefined;
214
+ }
215
+
216
+ createCtxTexture(textureSource: Texture): CoreContextTexture {
195
217
  if (textureSource instanceof SubTexture) {
196
- return new WebGlCoreCtxSubTexture(
218
+ return new WebGlCtxSubTexture(
197
219
  this.glw,
198
- this.txMemManager,
220
+ this.stage.txMemManager,
199
221
  textureSource,
200
222
  );
201
223
  } else if (textureSource instanceof RenderTexture) {
202
- return new WebGlCoreCtxRenderTexture(
224
+ return new WebGlCtxRenderTexture(
203
225
  this.glw,
204
- this.txMemManager,
226
+ this.stage.txMemManager,
205
227
  textureSource,
206
228
  );
207
229
  }
208
- return new WebGlCoreCtxTexture(this.glw, this.txMemManager, textureSource);
230
+ return new WebGlCtxTexture(
231
+ this.glw,
232
+ this.stage.txMemManager,
233
+ textureSource,
234
+ );
209
235
  }
210
236
 
211
237
  /**
@@ -226,46 +252,10 @@ export class WebGlCoreRenderer extends CoreRenderer {
226
252
 
227
253
  assertTruthy(texture !== null, 'Texture is required');
228
254
 
229
- /**
230
- * If the shader props contain any automatic properties, update it with the
231
- * current dimensions and or alpha that will be used to render the quad.
232
- */
233
- if (params.shaderProps !== null) {
234
- if (hasOwn(params.shaderProps, '$dimensions') == true) {
235
- const dimensions = params.shaderProps.$dimensions as Dimensions;
236
- dimensions.width = params.width;
237
- dimensions.height = params.height;
238
- }
239
-
240
- if (hasOwn(params.shaderProps, '$alpha') === true) {
241
- params.shaderProps.$alpha = params.alpha;
242
- }
243
- }
244
-
245
255
  let { curBufferIdx: bufferIdx, curRenderOp } = this;
246
- const targetDims = { width: -1, height: -1 };
247
- targetDims.width = params.width;
248
- targetDims.height = params.height;
249
-
250
- const targetShader =
251
- (params.shader as WebGlCoreShader) || this.defaultShader;
252
- assertTruthy(
253
- targetShader.getUniformLocation !== undefined,
254
- 'Invalid WebGL shader',
255
- );
256
256
 
257
257
  if (this.reuseRenderOp(params) === false) {
258
- this.newRenderOp(
259
- targetShader,
260
- params.shaderProps as Record<string, unknown>,
261
- params.alpha,
262
- targetDims,
263
- params.clippingRect,
264
- bufferIdx,
265
- params.rtt,
266
- params.parentHasRenderTexture,
267
- params.framebufferDimensions,
268
- );
258
+ this.newRenderOp(params, bufferIdx);
269
259
  curRenderOp = this.curRenderOp;
270
260
  assertTruthy(curRenderOp);
271
261
  }
@@ -336,115 +326,53 @@ export class WebGlCoreRenderer extends CoreRenderer {
336
326
  [texCoordY1, texCoordY2] = [texCoordY2, texCoordY1];
337
327
  }
338
328
 
339
- const ctxTexture = texture.ctxTexture as WebGlCoreCtxTexture;
340
- assertTruthy(ctxTexture instanceof WebGlCoreCtxTexture);
329
+ const ctxTexture = texture.ctxTexture as WebGlCtxTexture;
330
+ assertTruthy(ctxTexture instanceof WebGlCtxTexture);
341
331
  const textureIdx = this.addTexture(ctxTexture, bufferIdx);
342
332
 
343
333
  assertTruthy(this.curRenderOp !== null);
344
- if (params.renderCoords) {
345
- // Upper-Left
346
- fQuadBuffer[bufferIdx++] = params.renderCoords.x1; // vertexX
347
- fQuadBuffer[bufferIdx++] = params.renderCoords.y1; // vertexY
348
- fQuadBuffer[bufferIdx++] = texCoordX1; // texCoordX
349
- fQuadBuffer[bufferIdx++] = texCoordY1; // texCoordY
350
- uiQuadBuffer[bufferIdx++] = params.colorTl; // color
351
- fQuadBuffer[bufferIdx++] = textureIdx; // texIndex
352
-
353
- // Upper-Right
354
- fQuadBuffer[bufferIdx++] = params.renderCoords.x2;
355
- fQuadBuffer[bufferIdx++] = params.renderCoords.y2;
356
- fQuadBuffer[bufferIdx++] = texCoordX2;
357
- fQuadBuffer[bufferIdx++] = texCoordY1;
358
- uiQuadBuffer[bufferIdx++] = params.colorTr;
359
- fQuadBuffer[bufferIdx++] = textureIdx;
360
-
361
- // Lower-Left
362
- fQuadBuffer[bufferIdx++] = params.renderCoords.x4;
363
- fQuadBuffer[bufferIdx++] = params.renderCoords.y4;
364
- fQuadBuffer[bufferIdx++] = texCoordX1;
365
- fQuadBuffer[bufferIdx++] = texCoordY2;
366
- uiQuadBuffer[bufferIdx++] = params.colorBl;
367
- fQuadBuffer[bufferIdx++] = textureIdx;
368
-
369
- // Lower-Right
370
- fQuadBuffer[bufferIdx++] = params.renderCoords.x3;
371
- fQuadBuffer[bufferIdx++] = params.renderCoords.y3;
372
- fQuadBuffer[bufferIdx++] = texCoordX2;
373
- fQuadBuffer[bufferIdx++] = texCoordY2;
374
- uiQuadBuffer[bufferIdx++] = params.colorBr;
375
- fQuadBuffer[bufferIdx++] = textureIdx;
376
- } else if (params.tb !== 0 || params.tc !== 0) {
377
- // Upper-Left
378
- fQuadBuffer[bufferIdx++] = params.tx; // vertexX
379
- fQuadBuffer[bufferIdx++] = params.ty; // vertexY
380
- fQuadBuffer[bufferIdx++] = texCoordX1; // texCoordX
381
- fQuadBuffer[bufferIdx++] = texCoordY1; // texCoordY
382
- uiQuadBuffer[bufferIdx++] = params.colorTl; // color
383
- fQuadBuffer[bufferIdx++] = textureIdx; // texIndex
384
-
385
- // Upper-Right
386
- fQuadBuffer[bufferIdx++] = params.tx + params.width * params.ta;
387
- fQuadBuffer[bufferIdx++] = params.ty + params.width * params.tc;
388
- fQuadBuffer[bufferIdx++] = texCoordX2;
389
- fQuadBuffer[bufferIdx++] = texCoordY1;
390
- uiQuadBuffer[bufferIdx++] = params.colorTr;
391
- fQuadBuffer[bufferIdx++] = textureIdx;
392
-
393
- // Lower-Left
394
- fQuadBuffer[bufferIdx++] = params.tx + params.height * params.tb;
395
- fQuadBuffer[bufferIdx++] = params.ty + params.height * params.td;
396
- fQuadBuffer[bufferIdx++] = texCoordX1;
397
- fQuadBuffer[bufferIdx++] = texCoordY2;
398
- uiQuadBuffer[bufferIdx++] = params.colorBl;
399
- fQuadBuffer[bufferIdx++] = textureIdx;
400
-
401
- // Lower-Right
402
- fQuadBuffer[bufferIdx++] =
403
- params.tx + params.width * params.ta + params.height * params.tb;
404
- fQuadBuffer[bufferIdx++] =
405
- params.ty + params.width * params.tc + params.height * params.td;
406
- fQuadBuffer[bufferIdx++] = texCoordX2;
407
- fQuadBuffer[bufferIdx++] = texCoordY2;
408
- uiQuadBuffer[bufferIdx++] = params.colorBr;
409
- fQuadBuffer[bufferIdx++] = textureIdx;
410
- } else {
411
- // Calculate the right corner of the quad
412
- // multiplied by the scale
413
- const rightCornerX = params.tx + params.width * params.ta;
414
- const rightCornerY = params.ty + params.height * params.td;
415
-
416
- // Upper-Left
417
- fQuadBuffer[bufferIdx++] = params.tx; // vertexX
418
- fQuadBuffer[bufferIdx++] = params.ty; // vertexY
419
- fQuadBuffer[bufferIdx++] = texCoordX1; // texCoordX
420
- fQuadBuffer[bufferIdx++] = texCoordY1; // texCoordY
421
- uiQuadBuffer[bufferIdx++] = params.colorTl; // color
422
- fQuadBuffer[bufferIdx++] = textureIdx; // texIndex
423
-
424
- // Upper-Right
425
- fQuadBuffer[bufferIdx++] = rightCornerX;
426
- fQuadBuffer[bufferIdx++] = params.ty;
427
- fQuadBuffer[bufferIdx++] = texCoordX2;
428
- fQuadBuffer[bufferIdx++] = texCoordY1;
429
- uiQuadBuffer[bufferIdx++] = params.colorTr;
430
- fQuadBuffer[bufferIdx++] = textureIdx;
431
-
432
- // Lower-Left
433
- fQuadBuffer[bufferIdx++] = params.tx;
434
- fQuadBuffer[bufferIdx++] = rightCornerY;
435
- fQuadBuffer[bufferIdx++] = texCoordX1;
436
- fQuadBuffer[bufferIdx++] = texCoordY2;
437
- uiQuadBuffer[bufferIdx++] = params.colorBl;
438
- fQuadBuffer[bufferIdx++] = textureIdx;
439
-
440
- // Lower-Right
441
- fQuadBuffer[bufferIdx++] = rightCornerX;
442
- fQuadBuffer[bufferIdx++] = rightCornerY;
443
- fQuadBuffer[bufferIdx++] = texCoordX2;
444
- fQuadBuffer[bufferIdx++] = texCoordY2;
445
- uiQuadBuffer[bufferIdx++] = params.colorBr;
446
- fQuadBuffer[bufferIdx++] = textureIdx;
447
- }
334
+ assertTruthy(params.renderCoords);
335
+
336
+ // Upper-Left
337
+ fQuadBuffer[bufferIdx++] = params.renderCoords.x1; // vertexX
338
+ fQuadBuffer[bufferIdx++] = params.renderCoords.y1; // vertexY
339
+ fQuadBuffer[bufferIdx++] = texCoordX1; // texCoordX
340
+ fQuadBuffer[bufferIdx++] = texCoordY1; // texCoordY
341
+ uiQuadBuffer[bufferIdx++] = params.colorTl; // color
342
+ fQuadBuffer[bufferIdx++] = textureIdx; // texIndex
343
+ fQuadBuffer[bufferIdx++] = 0; //node X coord
344
+ fQuadBuffer[bufferIdx++] = 0; //node y coord
345
+
346
+ // Upper-Right
347
+ fQuadBuffer[bufferIdx++] = params.renderCoords.x2;
348
+ fQuadBuffer[bufferIdx++] = params.renderCoords.y2;
349
+ fQuadBuffer[bufferIdx++] = texCoordX2;
350
+ fQuadBuffer[bufferIdx++] = texCoordY1;
351
+ uiQuadBuffer[bufferIdx++] = params.colorTr;
352
+ fQuadBuffer[bufferIdx++] = textureIdx;
353
+ fQuadBuffer[bufferIdx++] = 1; //node X coord
354
+ fQuadBuffer[bufferIdx++] = 0; //node y coord
355
+
356
+ // Lower-Left
357
+ fQuadBuffer[bufferIdx++] = params.renderCoords.x4;
358
+ fQuadBuffer[bufferIdx++] = params.renderCoords.y4;
359
+ fQuadBuffer[bufferIdx++] = texCoordX1;
360
+ fQuadBuffer[bufferIdx++] = texCoordY2;
361
+ uiQuadBuffer[bufferIdx++] = params.colorBl;
362
+ fQuadBuffer[bufferIdx++] = textureIdx;
363
+ fQuadBuffer[bufferIdx++] = 0; //node X coord
364
+ fQuadBuffer[bufferIdx++] = 1; //node y coord
365
+
366
+ // Lower-Right
367
+ fQuadBuffer[bufferIdx++] = params.renderCoords.x3;
368
+ fQuadBuffer[bufferIdx++] = params.renderCoords.y3;
369
+ fQuadBuffer[bufferIdx++] = texCoordX2;
370
+ fQuadBuffer[bufferIdx++] = texCoordY2;
371
+ uiQuadBuffer[bufferIdx++] = params.colorBr;
372
+ fQuadBuffer[bufferIdx++] = textureIdx;
373
+ fQuadBuffer[bufferIdx++] = 1; //node X coord
374
+ fQuadBuffer[bufferIdx++] = 1; //node y coord
375
+
448
376
  // Update the length of the current render op
449
377
  this.curRenderOp.length += WORDS_PER_QUAD;
450
378
  this.curRenderOp.numQuads++;
@@ -458,32 +386,8 @@ export class WebGlCoreRenderer extends CoreRenderer {
458
386
  * @param shader
459
387
  * @param bufferIdx
460
388
  */
461
- private newRenderOp(
462
- shader: WebGlCoreShader,
463
- shaderProps: Record<string, unknown>,
464
- alpha: number,
465
- dimensions: Dimensions,
466
- clippingRect: RectWithValid,
467
- bufferIdx: number,
468
- renderToTexture?: boolean,
469
- parentHasRenderTexture?: boolean,
470
- framebufferDimensions?: Dimensions,
471
- ) {
472
- const curRenderOp = new WebGlCoreRenderOp(
473
- this.glw,
474
- this.options,
475
- this.quadBufferCollection,
476
- shader,
477
- shaderProps,
478
- alpha,
479
- clippingRect,
480
- dimensions,
481
- bufferIdx,
482
- 0, // Z-Index is only used for explictly added Render Ops
483
- renderToTexture,
484
- parentHasRenderTexture,
485
- framebufferDimensions,
486
- );
389
+ private newRenderOp(quad: QuadOptions, bufferIdx: number) {
390
+ const curRenderOp = new WebGlRenderOp(this, quad, bufferIdx);
487
391
  this.curRenderOp = curRenderOp;
488
392
  this.renderOps.push(curRenderOp);
489
393
  }
@@ -501,27 +405,18 @@ export class WebGlCoreRenderer extends CoreRenderer {
501
405
  * @returns Assigned Texture Index of the texture in the render op
502
406
  */
503
407
  private addTexture(
504
- texture: WebGlCoreCtxTexture,
408
+ texture: WebGlCtxTexture,
505
409
  bufferIdx: number,
506
410
  recursive?: boolean,
507
411
  ): number {
508
- const { curRenderOp } = this;
509
- assertTruthy(curRenderOp);
510
- const textureIdx = curRenderOp.addTexture(texture);
412
+ assertTruthy(this.curRenderOp);
413
+ const textureIdx = this.curRenderOp.addTexture(texture);
511
414
  // TODO: Refactor to be more DRY
512
415
  if (textureIdx === 0xffffffff) {
513
416
  if (recursive) {
514
417
  throw new Error('Unable to add texture to render op');
515
418
  }
516
-
517
- this.newRenderOp(
518
- curRenderOp.shader,
519
- curRenderOp.shaderProps,
520
- curRenderOp.alpha,
521
- curRenderOp.dimensions,
522
- curRenderOp.clippingRect,
523
- bufferIdx,
524
- );
419
+ this.newRenderOp(this.curRenderOp.quad as QuadOptions, bufferIdx);
525
420
  return this.addTexture(texture, bufferIdx, true);
526
421
  }
527
422
  return textureIdx;
@@ -533,18 +428,20 @@ export class WebGlCoreRenderer extends CoreRenderer {
533
428
  * @returns
534
429
  */
535
430
  reuseRenderOp(params: QuadOptions): boolean {
536
- const { shader, shaderProps, parentHasRenderTexture, rtt, clippingRect } =
537
- params;
538
-
539
- const targetShader = shader || this.defaultShader;
431
+ const { shader, parentHasRenderTexture, rtt, clippingRect } = params;
540
432
 
541
433
  // Switching shader program will require a new render operation
542
- if (this.curRenderOp?.shader !== targetShader) {
434
+ if (
435
+ this.curRenderOp?.shader.shaderKey !==
436
+ (shader as WebGlShaderNode).shaderKey
437
+ ) {
543
438
  return false;
544
439
  }
545
440
 
546
441
  // Switching clipping rect will require a new render operation
547
- if (compareRect(this.curRenderOp.clippingRect, clippingRect) === false) {
442
+ if (
443
+ compareRect(this.curRenderOp.quad.clippingRect, clippingRect) === false
444
+ ) {
548
445
  return false;
549
446
  }
550
447
 
@@ -557,12 +454,10 @@ export class WebGlCoreRenderer extends CoreRenderer {
557
454
 
558
455
  // Check if the shader can batch the shader properties
559
456
  if (
560
- this.curRenderOp.shader !== this.defaultShader &&
561
- (shaderProps === null ||
562
- this.curRenderOp.shader.canBatchShaderProps(
563
- this.curRenderOp.shaderProps,
564
- shaderProps,
565
- ) === false)
457
+ !this.curRenderOp.shader.program.reuseRenderOp(
458
+ params,
459
+ this.curRenderOp.quad as QuadOptions,
460
+ )
566
461
  ) {
567
462
  return false;
568
463
  }
@@ -574,7 +469,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
574
469
  /**
575
470
  * add RenderOp to the render pipeline
576
471
  */
577
- addRenderOp(renderable: WebGlCoreRenderOp) {
472
+ addRenderOp(renderable: WebGlRenderOp) {
578
473
  this.renderOps.push(renderable);
579
474
  this.curRenderOp = null;
580
475
  }
@@ -601,7 +496,7 @@ export class WebGlCoreRenderer extends CoreRenderer {
601
496
  this.quadBufferUsage = this.curBufferIdx * arr.BYTES_PER_ELEMENT;
602
497
 
603
498
  // Calculate the size of each quad in bytes (4 vertices per quad) times the size of each vertex in bytes
604
- const QUAD_SIZE_IN_BYTES = 4 * (6 * arr.BYTES_PER_ELEMENT); // 6 attributes per vertex
499
+ const QUAD_SIZE_IN_BYTES = 4 * (8 * arr.BYTES_PER_ELEMENT); // 8 attributes per vertex
605
500
  this.numQuadsRendered = this.quadBufferUsage / QUAD_SIZE_IN_BYTES;
606
501
  }
607
502
 
@@ -696,8 +591,6 @@ export class WebGlCoreRenderer extends CoreRenderer {
696
591
 
697
592
  renderRTTNodes() {
698
593
  const { glw } = this;
699
- const { txManager } = this.stage;
700
-
701
594
  // Render all associated RTT nodes to their textures
702
595
  for (let i = 0; i < this.rttNodes.length; i++) {
703
596
  const node = this.rttNodes[i];
@@ -725,9 +618,9 @@ export class WebGlCoreRenderer extends CoreRenderer {
725
618
  // So we can prevent rendering children of nested RTT nodes
726
619
  this.activeRttNode = node;
727
620
 
728
- assertTruthy(node.texture, 'RTT node missing texture');
621
+ assertTruthy(node.texture !== null, 'RTT node missing texture');
729
622
  const ctxTexture = node.texture.ctxTexture;
730
- assertTruthy(ctxTexture instanceof WebGlCoreCtxRenderTexture);
623
+ assertTruthy(ctxTexture instanceof WebGlCtxRenderTexture);
731
624
  this.renderToTextureActive = true;
732
625
 
733
626
  // Bind the the texture's framebuffer
@@ -785,8 +678,15 @@ export class WebGlCoreRenderer extends CoreRenderer {
785
678
  return bufferInfo;
786
679
  }
787
680
 
788
- override getDefShaderCtr(): BaseShaderController {
789
- return this.defShaderCtrl;
681
+ getDefaultShaderNode(): WebGlShaderNode {
682
+ if (this.defaultShaderNode !== null) {
683
+ return this.defaultShaderNode as WebGlShaderNode;
684
+ }
685
+ this.stage.shManager.registerShaderType('Default', Default);
686
+ this.defaultShaderNode = this.stage.shManager.createShader(
687
+ 'Default',
688
+ ) as WebGlShaderNode;
689
+ return this.defaultShaderNode;
790
690
  }
791
691
 
792
692
  /**