@lightningjs/renderer 3.0.0-beta7 → 3.0.0-beta9

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 (240) hide show
  1. package/dist/exports/utils.d.ts +2 -1
  2. package/dist/exports/utils.js +2 -1
  3. package/dist/exports/utils.js.map +1 -1
  4. package/dist/src/core/CoreNode.d.ts +24 -49
  5. package/dist/src/core/CoreNode.js +257 -255
  6. package/dist/src/core/CoreNode.js.map +1 -1
  7. package/dist/src/core/CoreTextNode.d.ts +1 -1
  8. package/dist/src/core/CoreTextNode.js +14 -15
  9. package/dist/src/core/CoreTextNode.js.map +1 -1
  10. package/dist/src/core/CoreTextureManager.d.ts +4 -9
  11. package/dist/src/core/CoreTextureManager.js +41 -78
  12. package/dist/src/core/CoreTextureManager.js.map +1 -1
  13. package/dist/src/core/Stage.d.ts +12 -27
  14. package/dist/src/core/Stage.js +50 -37
  15. package/dist/src/core/Stage.js.map +1 -1
  16. package/dist/src/core/TextureMemoryManager.d.ts +10 -1
  17. package/dist/src/core/TextureMemoryManager.js +103 -50
  18. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  19. package/dist/src/core/animations/CoreAnimation.js +5 -0
  20. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  21. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
  22. package/dist/src/core/animations/CoreAnimationController.js +11 -4
  23. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  24. package/dist/src/core/lib/WebGlContextWrapper.d.ts +19 -2
  25. package/dist/src/core/lib/WebGlContextWrapper.js +56 -25
  26. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  27. package/dist/src/core/renderers/CoreRenderer.d.ts +1 -0
  28. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  29. package/dist/src/core/renderers/CoreShaderNode.d.ts +1 -0
  30. package/dist/src/core/renderers/CoreShaderNode.js +9 -0
  31. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  32. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +1 -0
  33. package/dist/src/core/renderers/canvas/CanvasRenderer.js +3 -0
  34. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  35. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +1 -4
  36. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  37. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +0 -3
  38. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  39. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +1 -0
  40. package/dist/src/core/renderers/webgl/WebGlRenderer.js +56 -54
  41. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  42. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
  43. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  44. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +4 -2
  45. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +31 -13
  46. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  47. package/dist/src/core/shaders/canvas/LinearGradient.js +5 -3
  48. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  49. package/dist/src/core/shaders/canvas/RadialGradient.js +13 -11
  50. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  51. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +7 -5
  52. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  53. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +10 -8
  54. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  55. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +7 -5
  56. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  57. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +1 -1
  58. package/dist/src/core/shaders/templates/BorderTemplate.js +1 -1
  59. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  60. package/dist/src/core/shaders/templates/HolePunchTemplate.js +1 -1
  61. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  62. package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -1
  63. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
  64. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
  65. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +1 -1
  66. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
  67. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
  68. package/dist/src/core/shaders/{templates/shaderUtils.d.ts → utils.d.ts} +1 -1
  69. package/dist/src/core/shaders/{templates/shaderUtils.js → utils.js} +2 -2
  70. package/dist/src/core/shaders/utils.js.map +1 -0
  71. package/dist/src/core/shaders/webgl/HolePunch.js +4 -3
  72. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  73. package/dist/src/core/shaders/webgl/LinearGradient.js +5 -4
  74. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  75. package/dist/src/core/shaders/webgl/RadialGradient.js +6 -5
  76. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  77. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +18 -7
  78. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  79. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +30 -17
  80. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  81. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +0 -50
  82. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  83. package/dist/src/core/textures/ImageTexture.d.ts +1 -1
  84. package/dist/src/core/textures/ImageTexture.js +1 -1
  85. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  86. package/dist/src/core/textures/Texture.d.ts +12 -0
  87. package/dist/src/core/textures/Texture.js +19 -0
  88. package/dist/src/core/textures/Texture.js.map +1 -1
  89. package/dist/src/core/utils.d.ts +1 -1
  90. package/dist/src/main-api/Inspector.d.ts +6 -1
  91. package/dist/src/main-api/Inspector.js +42 -4
  92. package/dist/src/main-api/Inspector.js.map +1 -1
  93. package/dist/src/main-api/Renderer.d.ts +62 -43
  94. package/dist/src/main-api/Renderer.js +119 -31
  95. package/dist/src/main-api/Renderer.js.map +1 -1
  96. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  97. package/exports/utils.ts +7 -1
  98. package/package.json +1 -1
  99. package/src/core/CoreNode.ts +307 -313
  100. package/src/core/CoreTextNode.ts +23 -20
  101. package/src/core/CoreTextureManager.ts +40 -99
  102. package/src/core/Stage.ts +68 -65
  103. package/src/core/TextureMemoryManager.ts +135 -67
  104. package/src/core/animations/CoreAnimation.ts +7 -0
  105. package/src/core/animations/CoreAnimationController.ts +13 -4
  106. package/src/core/lib/WebGlContextWrapper.ts +69 -75
  107. package/src/core/renderers/CoreRenderer.ts +1 -0
  108. package/src/core/renderers/CoreShaderNode.ts +10 -0
  109. package/src/core/renderers/canvas/CanvasRenderer.ts +4 -0
  110. package/src/core/renderers/canvas/CanvasShaderNode.ts +1 -4
  111. package/src/core/renderers/webgl/WebGlCtxTexture.ts +0 -3
  112. package/src/core/renderers/webgl/WebGlRenderer.ts +64 -65
  113. package/src/core/renderers/webgl/WebGlShaderNode.ts +2 -4
  114. package/src/core/renderers/webgl/WebGlShaderProgram.ts +37 -14
  115. package/src/core/shaders/canvas/LinearGradient.ts +8 -6
  116. package/src/core/shaders/canvas/RadialGradient.ts +22 -36
  117. package/src/core/shaders/canvas/RoundedWithBorder.ts +10 -8
  118. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +14 -12
  119. package/src/core/shaders/canvas/RoundedWithShadow.ts +8 -7
  120. package/src/core/shaders/templates/BorderTemplate.ts +1 -1
  121. package/src/core/shaders/templates/HolePunchTemplate.ts +1 -1
  122. package/src/core/shaders/templates/RoundedTemplate.ts +1 -1
  123. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -1
  124. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +1 -1
  125. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -1
  126. package/src/core/shaders/templates/ShadowTemplate.ts +1 -1
  127. package/src/core/shaders/{templates/shaderUtils.ts → utils.ts} +2 -3
  128. package/src/core/shaders/webgl/HolePunch.ts +4 -7
  129. package/src/core/shaders/webgl/LinearGradient.ts +5 -4
  130. package/src/core/shaders/webgl/RadialGradient.ts +7 -6
  131. package/src/core/shaders/webgl/RoundedWithBorder.ts +18 -7
  132. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +30 -21
  133. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +2 -58
  134. package/src/core/textures/ImageTexture.ts +17 -16
  135. package/src/core/textures/Texture.ts +23 -0
  136. package/src/main-api/Inspector.ts +52 -5
  137. package/src/main-api/Renderer.ts +222 -77
  138. package/dist/src/core/platform.d.ts +0 -10
  139. package/dist/src/core/platform.js +0 -56
  140. package/dist/src/core/platform.js.map +0 -1
  141. package/dist/src/core/renderers/CoreShader.d.ts +0 -9
  142. package/dist/src/core/renderers/CoreShader.js +0 -28
  143. package/dist/src/core/renderers/CoreShader.js.map +0 -1
  144. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +0 -33
  145. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +0 -250
  146. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +0 -1
  147. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +0 -16
  148. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +0 -123
  149. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +0 -1
  150. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +0 -10
  151. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +0 -43
  152. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +0 -1
  153. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +0 -12
  154. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +0 -55
  155. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +0 -1
  156. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +0 -9
  157. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +0 -38
  158. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +0 -1
  159. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +0 -57
  160. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +0 -227
  161. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +0 -1
  162. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +0 -34
  163. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +0 -114
  164. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +0 -1
  165. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +0 -133
  166. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +0 -613
  167. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +0 -1
  168. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +0 -83
  169. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +0 -231
  170. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +0 -1
  171. package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +0 -9
  172. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +0 -87
  173. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +0 -1
  174. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +0 -10
  175. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -119
  176. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +0 -1
  177. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +0 -29
  178. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +0 -413
  179. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +0 -1
  180. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +0 -28
  181. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +0 -131
  182. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +0 -1
  183. package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +0 -47
  184. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -160
  185. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +0 -1
  186. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +0 -31
  187. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +0 -71
  188. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +0 -1
  189. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +0 -30
  190. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +0 -58
  191. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +0 -1
  192. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +0 -31
  193. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +0 -71
  194. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +0 -1
  195. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +0 -31
  196. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +0 -71
  197. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +0 -1
  198. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +0 -31
  199. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +0 -71
  200. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +0 -1
  201. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +0 -9
  202. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +0 -136
  203. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +0 -1
  204. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +0 -36
  205. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +0 -85
  206. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +0 -1
  207. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +0 -45
  208. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +0 -104
  209. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +0 -1
  210. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +0 -22
  211. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +0 -45
  212. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +0 -1
  213. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +0 -58
  214. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +0 -80
  215. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +0 -1
  216. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +0 -35
  217. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +0 -129
  218. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +0 -1
  219. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +0 -39
  220. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +0 -116
  221. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +0 -1
  222. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +0 -61
  223. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +0 -127
  224. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +0 -1
  225. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +0 -40
  226. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +0 -71
  227. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +0 -1
  228. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +0 -115
  229. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +0 -61
  230. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +0 -1
  231. package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
  232. package/dist/src/core/temp.d.ts +0 -1
  233. package/dist/src/core/temp.js +0 -77
  234. package/dist/src/core/temp.js.map +0 -1
  235. package/dist/src/main-api/DynamicShaderController.d.ts +0 -29
  236. package/dist/src/main-api/DynamicShaderController.js +0 -58
  237. package/dist/src/main-api/DynamicShaderController.js.map +0 -1
  238. package/dist/src/main-api/ShaderController.d.ts +0 -31
  239. package/dist/src/main-api/ShaderController.js +0 -37
  240. package/dist/src/main-api/ShaderController.js.map +0 -1
@@ -150,6 +150,16 @@ export class CoreShaderNode<Props extends object = Record<string, unknown>> {
150
150
  this.node = node;
151
151
  }
152
152
 
153
+ createValueKey() {
154
+ let valueKey = '';
155
+ for (const key in this.resolvedProps) {
156
+ valueKey += `${key}:${this.resolvedProps[key]!};`;
157
+ }
158
+ valueKey += `node-width:${this.node!.width}`;
159
+ valueKey += `node-height:${this.node!.height}`;
160
+ return valueKey;
161
+ }
162
+
153
163
  get props(): Props | undefined {
154
164
  return this.definedProps;
155
165
  }
@@ -292,6 +292,10 @@ export class CanvasRenderer extends CoreRenderer {
292
292
  this.clearColor = this.getParsedColor(color);
293
293
  }
294
294
 
295
+ override updateViewport(): void {
296
+ // noop
297
+ }
298
+
295
299
  getDefaultShaderNode() {
296
300
  return null;
297
301
  }
@@ -67,10 +67,7 @@ export class CanvasShaderNode<
67
67
 
68
68
  this.update = () => {
69
69
  const prevKey = this.valueKey;
70
- this.valueKey = '';
71
- for (const key in this.resolvedProps) {
72
- this.valueKey += `${key}:${this.resolvedProps[key]!};`;
73
- }
70
+ this.valueKey = this.createValueKey();
74
71
 
75
72
  if (prevKey === this.valueKey) {
76
73
  return;
@@ -18,11 +18,9 @@
18
18
  */
19
19
 
20
20
  import type { Dimensions } from '../../../common/CommonTypes.js';
21
- import { assertTruthy } from '../../../utils.js';
22
21
  import type { TextureMemoryManager } from '../../TextureMemoryManager.js';
23
22
  import type { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
24
23
  import type { Texture } from '../../textures/Texture.js';
25
- import { isPowerOfTwo } from '../../utils.js';
26
24
  import { CoreContextTexture } from '../CoreContextTexture.js';
27
25
  import { isHTMLImageElement } from './internal/RendererUtils.js';
28
26
 
@@ -57,7 +55,6 @@ export class WebGlCtxTexture extends CoreContextTexture {
57
55
  this.load();
58
56
  return null;
59
57
  }
60
- assertTruthy(this._nativeCtxTexture);
61
58
  return this._nativeCtxTexture;
62
59
  }
63
60
 
@@ -17,7 +17,7 @@
17
17
  * limitations under the License.
18
18
  */
19
19
 
20
- import { assertTruthy, createWebGLContext } from '../../../utils.js';
20
+ import { createWebGLContext } from '../../../utils.js';
21
21
  import {
22
22
  CoreRenderer,
23
23
  type BufferInfo,
@@ -53,9 +53,6 @@ import { Default } from '../../shaders/webgl/Default.js';
53
53
  import type { WebGlShaderType } from './WebGlShaderNode.js';
54
54
  import { WebGlShaderNode } from './WebGlShaderNode.js';
55
55
 
56
- const WORDS_PER_QUAD = 32;
57
- // const BYTES_PER_QUAD = WORDS_PER_QUAD * 4;
58
-
59
56
  export type WebGlRendererOptions = CoreRendererOptions;
60
57
 
61
58
  interface CoreWebGlSystem {
@@ -136,11 +133,10 @@ export class WebGlRenderer extends CoreRenderer {
136
133
  extensions: getWebGlExtensions(this.glw),
137
134
  };
138
135
  const quadBuffer = glw.createBuffer();
139
- assertTruthy(quadBuffer);
140
136
  const stride = 8 * Float32Array.BYTES_PER_ELEMENT;
141
137
  this.quadBufferCollection = new BufferCollection([
142
138
  {
143
- buffer: quadBuffer,
139
+ buffer: quadBuffer!,
144
140
  attributes: {
145
141
  a_position: {
146
142
  name: 'a_position',
@@ -257,71 +253,74 @@ export class WebGlRenderer extends CoreRenderer {
257
253
  * The function updates the length and number of quads in the current render operation, and updates the current buffer index.
258
254
  */
259
255
  addQuad(params: QuadOptions) {
260
- const { fQuadBuffer, uiQuadBuffer } = this;
261
- let texture = params.texture;
262
-
263
- assertTruthy(texture !== null, 'Texture is required');
264
-
265
- let { curBufferIdx: bufferIdx } = this;
266
-
267
- if (this.reuseRenderOp(params) === false) {
268
- this.newRenderOp(params, bufferIdx);
256
+ const f = this.fQuadBuffer;
257
+ const u = this.uiQuadBuffer;
258
+ let i = this.curBufferIdx;
259
+
260
+ let ro = this.curRenderOp!;
261
+ const reuse = this.reuseRenderOp(params) === false;
262
+ if (reuse) {
263
+ this.newRenderOp(params, i);
264
+ ro = this.curRenderOp!;
269
265
  }
270
266
 
271
- if (texture.type === TextureType.subTexture) {
272
- texture = (texture as SubTexture).parentTexture;
267
+ let tx = params.texture!;
268
+ if (tx.type === TextureType.subTexture) {
269
+ tx = (tx as SubTexture).parentTexture;
273
270
  }
274
271
 
275
- assertTruthy(texture.ctxTexture instanceof WebGlCtxTexture);
276
- const textureIdx = this.addTexture(texture.ctxTexture, bufferIdx);
272
+ const tidx = this.addTexture(tx.ctxTexture as WebGlCtxTexture, i);
277
273
 
278
- assertTruthy(this.curRenderOp !== null);
279
- assertTruthy(params.renderCoords);
280
- assertTruthy(params.textureCoords);
274
+ const rc = params.renderCoords!;
275
+ const tc = params.textureCoords!;
276
+
277
+ const cTl = params.colorTl;
278
+ const cTr = params.colorTr;
279
+ const cBl = params.colorBl;
280
+ const cBr = params.colorBr;
281
281
 
282
282
  // Upper-Left
283
- fQuadBuffer[bufferIdx++] = params.renderCoords.x1; // vertexX
284
- fQuadBuffer[bufferIdx++] = params.renderCoords.y1; // vertexY
285
- fQuadBuffer[bufferIdx++] = params.textureCoords.x1; // texCoordX
286
- fQuadBuffer[bufferIdx++] = params.textureCoords.y1; // texCoordY
287
- uiQuadBuffer[bufferIdx++] = params.colorTl; // color
288
- fQuadBuffer[bufferIdx++] = textureIdx; // texIndex
289
- fQuadBuffer[bufferIdx++] = 0; //node X coord
290
- fQuadBuffer[bufferIdx++] = 0; //node y coord
283
+ f[i] = rc.x1;
284
+ f[i + 1] = rc.y1;
285
+ f[i + 2] = tc.x1;
286
+ f[i + 3] = tc.y1;
287
+ u[i + 4] = cTl;
288
+ f[i + 5] = tidx;
289
+ f[i + 6] = 0;
290
+ f[i + 7] = 0;
291
291
 
292
292
  // Upper-Right
293
- fQuadBuffer[bufferIdx++] = params.renderCoords.x2;
294
- fQuadBuffer[bufferIdx++] = params.renderCoords.y2;
295
- fQuadBuffer[bufferIdx++] = params.textureCoords.x2;
296
- fQuadBuffer[bufferIdx++] = params.textureCoords.y1;
297
- uiQuadBuffer[bufferIdx++] = params.colorTr;
298
- fQuadBuffer[bufferIdx++] = textureIdx;
299
- fQuadBuffer[bufferIdx++] = 1; //node X coord
300
- fQuadBuffer[bufferIdx++] = 0; //node y coord
293
+ f[i + 8] = rc.x2;
294
+ f[i + 9] = rc.y2;
295
+ f[i + 10] = tc.x2;
296
+ f[i + 11] = tc.y1;
297
+ u[i + 12] = cTr;
298
+ f[i + 13] = tidx;
299
+ f[i + 14] = 1;
300
+ f[i + 15] = 0;
301
301
 
302
302
  // Lower-Left
303
- fQuadBuffer[bufferIdx++] = params.renderCoords.x4;
304
- fQuadBuffer[bufferIdx++] = params.renderCoords.y4;
305
- fQuadBuffer[bufferIdx++] = params.textureCoords.x1;
306
- fQuadBuffer[bufferIdx++] = params.textureCoords.y2;
307
- uiQuadBuffer[bufferIdx++] = params.colorBl;
308
- fQuadBuffer[bufferIdx++] = textureIdx;
309
- fQuadBuffer[bufferIdx++] = 0; //node X coord
310
- fQuadBuffer[bufferIdx++] = 1; //node y coord
303
+ f[i + 16] = rc.x4;
304
+ f[i + 17] = rc.y4;
305
+ f[i + 18] = tc.x1;
306
+ f[i + 19] = tc.y2;
307
+ u[i + 20] = cBl;
308
+ f[i + 21] = tidx;
309
+ f[i + 22] = 0;
310
+ f[i + 23] = 1;
311
311
 
312
312
  // Lower-Right
313
- fQuadBuffer[bufferIdx++] = params.renderCoords.x3;
314
- fQuadBuffer[bufferIdx++] = params.renderCoords.y3;
315
- fQuadBuffer[bufferIdx++] = params.textureCoords.x2;
316
- fQuadBuffer[bufferIdx++] = params.textureCoords.y2;
317
- uiQuadBuffer[bufferIdx++] = params.colorBr;
318
- fQuadBuffer[bufferIdx++] = textureIdx;
319
- fQuadBuffer[bufferIdx++] = 1; //node X coord
320
- fQuadBuffer[bufferIdx++] = 1; //node y coord
321
-
322
- // Update the length of the current render op
323
- this.curRenderOp.numQuads++;
324
- this.curBufferIdx = bufferIdx;
313
+ f[i + 24] = rc.x3;
314
+ f[i + 25] = rc.y3;
315
+ f[i + 26] = tc.x2;
316
+ f[i + 27] = tc.y2;
317
+ u[i + 28] = cBr;
318
+ f[i + 29] = tidx;
319
+ f[i + 30] = 1;
320
+ f[i + 31] = 1;
321
+
322
+ ro.numQuads++;
323
+ this.curBufferIdx = i + 32;
325
324
  }
326
325
 
327
326
  /**
@@ -354,14 +353,13 @@ export class WebGlRenderer extends CoreRenderer {
354
353
  bufferIdx: number,
355
354
  recursive?: boolean,
356
355
  ): number {
357
- assertTruthy(this.curRenderOp);
358
- const textureIdx = this.curRenderOp.addTexture(texture);
356
+ const textureIdx = this.curRenderOp!.addTexture(texture);
359
357
  // TODO: Refactor to be more DRY
360
358
  if (textureIdx === 0xffffffff) {
361
359
  if (recursive) {
362
360
  throw new Error('Unable to add texture to render op');
363
361
  }
364
- this.newRenderOp(this.curRenderOp, bufferIdx);
362
+ this.newRenderOp(this.curRenderOp!, bufferIdx);
365
363
  return this.addTexture(texture, bufferIdx, true);
366
364
  }
367
365
  return textureIdx;
@@ -570,10 +568,7 @@ export class WebGlRenderer extends CoreRenderer {
570
568
  // Set the active RTT node to the current node
571
569
  // So we can prevent rendering children of nested RTT nodes
572
570
  this.activeRttNode = node;
573
-
574
- assertTruthy(node.texture !== null, 'RTT node missing texture');
575
- const ctxTexture = node.texture.ctxTexture;
576
- assertTruthy(ctxTexture instanceof WebGlCtxRenderTexture);
571
+ const ctxTexture = node.texture.ctxTexture as WebGlCtxRenderTexture;
577
572
  this.renderToTextureActive = true;
578
573
 
579
574
  // Bind the the texture's framebuffer
@@ -615,6 +610,10 @@ export class WebGlRenderer extends CoreRenderer {
615
610
  this.renderToTextureActive = false;
616
611
  }
617
612
 
613
+ updateViewport(): void {
614
+ this.glw.viewport(0, 0, this.glw.canvas.width, this.glw.canvas.height);
615
+ }
616
+
618
617
  removeRTTNode(node: CoreNode) {
619
618
  const index = this.rttNodes.indexOf(node);
620
619
  if (index === -1) {
@@ -90,11 +90,9 @@ export class WebGlShaderNode<
90
90
  this.updater!(this.node as CoreNode, this.props);
91
91
  return;
92
92
  }
93
+
93
94
  const prevKey = this.valueKey;
94
- this.valueKey = '';
95
- for (const key in this.resolvedProps) {
96
- this.valueKey += `${key}:${this.resolvedProps[key]!};`;
97
- }
95
+ this.valueKey = this.createValueKey();
98
96
 
99
97
  if (prevKey === this.valueKey) {
100
98
  return;
@@ -35,8 +35,7 @@ import {
35
35
  } from './internal/ShaderUtils.js';
36
36
 
37
37
  export class WebGlShaderProgram implements CoreShaderProgram {
38
- protected boundBufferCollection: BufferCollection | null = null;
39
- protected program: WebGLProgram;
38
+ protected program: WebGLProgram | null;
40
39
  /**
41
40
  * Vertex Array Object
42
41
  *
@@ -47,9 +46,11 @@ export class WebGlShaderProgram implements CoreShaderProgram {
47
46
  protected renderer: WebGlRenderer;
48
47
  protected glw: WebGlContextWrapper;
49
48
  protected attributeLocations: Record<string, number>;
49
+ protected uniformLocations: Record<string, WebGLUniformLocation> | null;
50
50
  protected lifecycle: Pick<WebGlShaderType, 'update' | 'canBatch'>;
51
51
  protected useSystemAlpha = false;
52
52
  protected useSystemDimensions = false;
53
+ public isDestroyed = false;
53
54
  supportsIndexedTextures = false;
54
55
 
55
56
  constructor(
@@ -117,10 +118,10 @@ export class WebGlShaderProgram implements CoreShaderProgram {
117
118
  this.program = program;
118
119
  this.attributeLocations = glw.getAttributeLocations(program);
119
120
 
120
- this.useSystemAlpha =
121
- this.glw.getUniformLocation(program, 'u_alpha') !== null;
122
- this.useSystemDimensions =
123
- this.glw.getUniformLocation(program, 'u_dimensions') !== null;
121
+ const uniLocs = (this.uniformLocations = glw.getUniformLocations(program));
122
+
123
+ this.useSystemAlpha = uniLocs['u_alpha'] !== undefined;
124
+ this.useSystemDimensions = uniLocs['u_dimensions'] !== undefined;
124
125
 
125
126
  this.lifecycle = {
126
127
  update: config.update,
@@ -133,7 +134,7 @@ export class WebGlShaderProgram implements CoreShaderProgram {
133
134
  }
134
135
 
135
136
  disableAttributes() {
136
- const { glw } = this;
137
+ const glw = this.glw;
137
138
  const attribs = Object.keys(this.attributeLocations);
138
139
  const attribLen = attribs.length;
139
140
  for (let i = 0; i < attribLen; i++) {
@@ -221,13 +222,13 @@ export class WebGlShaderProgram implements CoreShaderProgram {
221
222
  );
222
223
  }
223
224
 
224
- // if (this.useSystemAlpha) {
225
- this.glw.uniform1f('u_alpha', renderOp.alpha);
226
- // }
225
+ if (this.useSystemAlpha === true) {
226
+ this.glw.uniform1f('u_alpha', renderOp.alpha);
227
+ }
227
228
 
228
- // if (this.useSystemDimensions) {
229
- this.glw.uniform2f('u_dimensions', renderOp.width, renderOp.height);
230
- // }
229
+ if (this.useSystemDimensions === true) {
230
+ this.glw.uniform2f('u_dimensions', renderOp.width, renderOp.height);
231
+ }
231
232
 
232
233
  /**temporary fix to make sdf texts work */
233
234
  if (renderOp.sdfShaderProps !== undefined) {
@@ -306,7 +307,10 @@ export class WebGlShaderProgram implements CoreShaderProgram {
306
307
  }
307
308
 
308
309
  attach(): void {
309
- this.glw.useProgram(this.program);
310
+ if (this.isDestroyed === true) {
311
+ return;
312
+ }
313
+ this.glw.useProgram(this.program, this.uniformLocations!);
310
314
  if (this.glw.isWebGl2() && this.vao) {
311
315
  this.glw.bindVertexArray(this.vao);
312
316
  }
@@ -315,4 +319,23 @@ export class WebGlShaderProgram implements CoreShaderProgram {
315
319
  detach(): void {
316
320
  this.disableAttributes();
317
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
+ }
318
341
  }
@@ -53,15 +53,17 @@ export const LinearGradient: CanvasShaderType<
53
53
  },
54
54
  render(ctx, quad, renderContext) {
55
55
  renderContext();
56
+ const computed = this.computed as ComputedLinearGradientValues;
56
57
  const gradient = ctx.createLinearGradient(
57
- quad.tx + this.computed.x0!,
58
- quad.ty + this.computed.y0!,
59
- quad.tx + this.computed.x1!,
60
- quad.ty + this.computed.y1!,
58
+ quad.tx + computed.x0,
59
+ quad.ty + computed.y0,
60
+ quad.tx + computed.x1,
61
+ quad.ty + computed.y1,
61
62
  );
62
- const colors = this.computed.colors!;
63
+ const colors = computed.colors;
64
+ const stops = this.props!.stops;
63
65
  for (let i = 0; i < colors.length; i++) {
64
- gradient.addColorStop(this.props!['stops'][i]!, colors[i]!);
66
+ gradient.addColorStop(stops[i]!, colors[i]!);
65
67
  }
66
68
  ctx.fillStyle = gradient;
67
69
  ctx.fillRect(quad.tx, quad.ty, quad.width, quad.height);
@@ -38,9 +38,9 @@ export const RadialGradient: CanvasShaderType<
38
38
  update(node) {
39
39
  let scaleX = 1;
40
40
  let scaleY = 1;
41
-
42
- const pWidth = this.props!.width;
43
- const pHeight = this.props!.height;
41
+ const props = this.props as RadialGradientProps;
42
+ const pWidth = props.width;
43
+ const pHeight = props.height;
44
44
  if (pWidth > pHeight) {
45
45
  scaleX = pWidth / pHeight;
46
46
  } else if (pHeight > pWidth) {
@@ -48,34 +48,27 @@ export const RadialGradient: CanvasShaderType<
48
48
  }
49
49
 
50
50
  this.computed = {
51
- pivotX: this.props!.pivot[0] * node.width,
52
- pivotY: this.props!.pivot[1] * node.height,
51
+ pivotX: props.pivot[0] * node.width,
52
+ pivotY: props.pivot[1] * node.height,
53
53
  scaleX,
54
54
  scaleY,
55
55
  size: Math.min(pWidth, pHeight) * 0.5,
56
- colors: this.props!.colors.map((value) => this.toColorString(value)),
56
+ colors: props.colors.map((value) => this.toColorString(value)),
57
57
  };
58
58
  },
59
59
  render(ctx, quad, renderContext) {
60
60
  renderContext();
61
-
62
- const { scaleX, scaleY, pivotX, pivotY } = this.computed!;
63
- const colors = this.computed.colors!;
64
- let x = quad.tx + pivotX!;
65
- let y = quad.ty + pivotY!;
61
+ const { scaleX, scaleY, pivotX, pivotY, colors, size } = this
62
+ .computed as ComputedRadialGradientValues;
63
+ let x = quad.tx + pivotX;
64
+ let y = quad.ty + pivotY;
65
+ const stops = this.props!.stops;
66
66
 
67
67
  if (scaleX === scaleY) {
68
- const gradient = ctx.createRadialGradient(
69
- x,
70
- y,
71
- 0,
72
- x,
73
- y,
74
- this.computed.size!,
75
- );
68
+ const gradient = ctx.createRadialGradient(x, y, 0, x, y, size);
76
69
 
77
70
  for (let i = 0; i < colors.length; i++) {
78
- gradient.addColorStop(this.props!['stops'][i]!, colors[i]!);
71
+ gradient.addColorStop(stops[i]!, colors[i]!);
79
72
  }
80
73
 
81
74
  ctx.fillStyle = gradient;
@@ -84,28 +77,21 @@ export const RadialGradient: CanvasShaderType<
84
77
  }
85
78
 
86
79
  ctx.save();
87
- ctx.scale(scaleX!, scaleY!);
88
- x = x / scaleX!;
89
- y = y / scaleY!;
90
- const gradient = ctx.createRadialGradient(
91
- x,
92
- y,
93
- 0,
94
- x,
95
- y,
96
- this.computed.size!,
97
- );
80
+ ctx.scale(scaleX, scaleY);
81
+ x = x / scaleX;
82
+ y = y / scaleY;
83
+ const gradient = ctx.createRadialGradient(x, y, 0, x, y, size);
98
84
 
99
85
  for (let i = 0; i < colors.length; i++) {
100
- gradient.addColorStop(this.props!['stops'][i]!, colors[i]!);
86
+ gradient.addColorStop(stops[i]!, colors[i]!);
101
87
  }
102
88
 
103
89
  ctx.fillStyle = gradient;
104
90
  ctx.fillRect(
105
- quad.tx / scaleX!,
106
- quad.ty / scaleY!,
107
- quad.width / scaleX!,
108
- quad.height / scaleY!,
91
+ quad.tx / scaleX,
92
+ quad.ty / scaleY,
93
+ quad.width / scaleX,
94
+ quad.height / scaleY,
109
95
  );
110
96
 
111
97
  ctx.restore();
@@ -35,18 +35,19 @@ export const RoundedWithBorder: CanvasShaderType<
35
35
  props: RoundedWithBorderTemplate.props,
36
36
  saveAndRestore: true,
37
37
  update(node) {
38
+ const props = this.props!;
38
39
  const radius = calcFactoredRadiusArray(
39
- this.props!.radius as Vec4,
40
+ props.radius as Vec4,
40
41
  node.width,
41
42
  node.height,
42
43
  );
43
44
  this.computed.radius = radius;
44
- this.computed.borderColor = this.toColorString(this.props!['border-color']);
45
+ this.computed.borderColor = this.toColorString(props['border-color']);
45
46
  this.computed.borderAsym = !valuesAreEqual(
46
- this.props!['border-width'] as number[],
47
+ props['border-width'] as number[],
47
48
  );
48
49
  //following vec4 convention 0, 1, 2, 3 => x, y, z, w;
49
- const [x, y, z, w] = this.props!['border-width'] as Vec4;
50
+ const [x, y, z, w] = props['border-width'] as Vec4;
50
51
  this.computed.borderRadius = [
51
52
  Math.max(0.0, radius[0] - Math.max(x, w) * 0.5),
52
53
  Math.max(0.0, radius[1] - Math.max(x, y) * 0.5),
@@ -55,17 +56,18 @@ export const RoundedWithBorder: CanvasShaderType<
55
56
  ];
56
57
  },
57
58
  render(ctx, quad, renderContext) {
59
+ const computed = this.computed as ComputedValues;
58
60
  roundedRectWithBorder(
59
61
  ctx,
60
62
  quad.tx,
61
63
  quad.ty,
62
64
  quad.width,
63
65
  quad.height,
64
- this.computed.radius!,
66
+ computed.radius,
65
67
  this.props!['border-width'] as Vec4,
66
- this.computed.borderRadius!,
67
- this.computed.borderColor!,
68
- this.computed.borderAsym!,
68
+ computed.borderRadius,
69
+ computed.borderColor,
70
+ computed.borderAsym,
69
71
  renderContext,
70
72
  );
71
73
  },
@@ -38,37 +38,39 @@ export const RoundedWithBorderAndShadow: CanvasShaderType<
38
38
  props: RoundedWithBorderAndShadowTemplate.props,
39
39
  saveAndRestore: true,
40
40
  update(node) {
41
+ const props = this.props!;
41
42
  const radius = calcFactoredRadiusArray(
42
- this.props!.radius as Vec4,
43
+ props.radius as Vec4,
43
44
  node.width,
44
45
  node.height,
45
46
  );
46
47
  this.computed.radius = radius;
47
- this.computed.borderColor = this.toColorString(this.props!['border-color']);
48
+ this.computed.borderColor = this.toColorString(props['border-color']);
48
49
  this.computed.borderAsym = !valuesAreEqual(
49
- this.props!['border-width'] as number[],
50
+ props['border-width'] as number[],
50
51
  );
51
- const borderWidth = this.props!['border-width'] as Vec4;
52
+ const borderWidth = props['border-width'] as Vec4;
52
53
  this.computed.borderRadius = radius.map((value, index) =>
53
54
  Math.max(0, value - borderWidth[index]! * 0.5),
54
55
  ) as Vec4;
55
56
 
56
- this.computed.shadowColor = this.toColorString(this.props!['shadow-color']);
57
+ this.computed.shadowColor = this.toColorString(props['shadow-color']);
57
58
  this.computed.shadowRadius = radius.map(
58
- (value) => value + this.props!['shadow-blur'],
59
+ (value) => value + props['shadow-blur'],
59
60
  ) as Vec4;
60
61
  },
61
62
  render(ctx, quad, renderContext) {
62
63
  const { tx, ty, width, height } = quad;
64
+ const computed = this.computed as ComputedValues;
63
65
  render.shadow(
64
66
  ctx,
65
67
  tx,
66
68
  ty,
67
69
  height,
68
70
  width,
69
- this.computed.shadowColor!,
71
+ computed.shadowColor,
70
72
  this.props!['shadow-projection'],
71
- this.computed.shadowRadius!,
73
+ computed.shadowRadius,
72
74
  this.stage.pixelRatio,
73
75
  );
74
76
  render.roundedRectWithBorder(
@@ -77,11 +79,11 @@ export const RoundedWithBorderAndShadow: CanvasShaderType<
77
79
  quad.ty,
78
80
  quad.width,
79
81
  quad.height,
80
- this.computed.radius!,
82
+ computed.radius,
81
83
  this.props!['border-width'] as Vec4,
82
- this.computed.borderRadius!,
83
- this.computed.borderColor!,
84
- this.computed.borderAsym!,
84
+ computed.borderRadius,
85
+ computed.borderColor,
86
+ computed.borderAsym,
85
87
  renderContext,
86
88
  );
87
89
  },
@@ -35,34 +35,35 @@ export const RoundedWithShadow: CanvasShaderType<
35
35
  props: RoundedWithShadowTemplate.props,
36
36
  saveAndRestore: true,
37
37
  update(node) {
38
+ const props = this.props!;
38
39
  const radius = calcFactoredRadiusArray(
39
- this.props!.radius as Vec4,
40
+ props.radius as Vec4,
40
41
  node.width,
41
42
  node.height,
42
43
  );
43
44
  this.computed.radius = radius;
44
- this.computed.shadowColor = this.toColorString(this.props!['shadow-color']);
45
+ this.computed.shadowColor = this.toColorString(props['shadow-color']);
45
46
  this.computed.shadowRadius = radius.map(
46
- (value) => value + this.props!['shadow-blur'],
47
+ (value) => value + props['shadow-blur'],
47
48
  ) as Vec4;
48
49
  },
49
50
  render(ctx, quad, renderContext) {
50
51
  const { tx, ty, width, height } = quad;
51
-
52
+ const computed = this.computed as ComputedValues;
52
53
  render.shadow(
53
54
  ctx,
54
55
  tx,
55
56
  ty,
56
57
  width,
57
58
  height,
58
- this.computed.shadowColor!,
59
+ computed.shadowColor,
59
60
  this.props!['shadow-projection'],
60
- this.computed.shadowRadius!,
61
+ computed.shadowRadius,
61
62
  this.stage.pixelRatio,
62
63
  );
63
64
 
64
65
  const path = new Path2D();
65
- render.roundRect(path, tx, ty, width, height, this.computed.radius!);
66
+ render.roundRect(path, tx, ty, width, height, computed.radius);
66
67
  ctx.clip(path);
67
68
  renderContext();
68
69
  },
@@ -17,7 +17,7 @@
17
17
 
18
18
  import type { CoreShaderType } from '../../renderers/CoreShaderNode.js';
19
19
  import type { Vec4 } from '../../renderers/webgl/internal/ShaderUtils.js';
20
- import { validateArrayLength4, type PrefixedType } from './shaderUtils.js';
20
+ import { validateArrayLength4, type PrefixedType } from '../utils.js';
21
21
 
22
22
  /**
23
23
  * Properties of the {@link Border} shader