@lightningjs/renderer 3.0.0-beta7 → 3.0.0-beta8

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 (231) 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 +251 -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.js +5 -4
  11. package/dist/src/core/CoreTextureManager.js.map +1 -1
  12. package/dist/src/core/Stage.d.ts +12 -27
  13. package/dist/src/core/Stage.js +50 -37
  14. package/dist/src/core/Stage.js.map +1 -1
  15. package/dist/src/core/TextureMemoryManager.d.ts +9 -0
  16. package/dist/src/core/TextureMemoryManager.js +78 -48
  17. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  18. package/dist/src/core/animations/CoreAnimation.js +5 -0
  19. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  20. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
  21. package/dist/src/core/animations/CoreAnimationController.js +7 -1
  22. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  23. package/dist/src/core/renderers/CoreRenderer.d.ts +1 -0
  24. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  25. package/dist/src/core/renderers/CoreShaderNode.d.ts +1 -0
  26. package/dist/src/core/renderers/CoreShaderNode.js +9 -0
  27. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  28. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +1 -0
  29. package/dist/src/core/renderers/canvas/CanvasRenderer.js +3 -0
  30. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  31. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +1 -4
  32. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  33. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +0 -3
  34. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  35. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +1 -0
  36. package/dist/src/core/renderers/webgl/WebGlRenderer.js +56 -54
  37. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  38. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
  39. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  40. package/dist/src/core/shaders/canvas/LinearGradient.js +5 -3
  41. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  42. package/dist/src/core/shaders/canvas/RadialGradient.js +13 -11
  43. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  44. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +7 -5
  45. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  46. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +10 -8
  47. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  48. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +7 -5
  49. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  50. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +1 -1
  51. package/dist/src/core/shaders/templates/BorderTemplate.js +1 -1
  52. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  53. package/dist/src/core/shaders/templates/HolePunchTemplate.js +1 -1
  54. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  55. package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -1
  56. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
  57. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
  58. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +1 -1
  59. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
  60. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
  61. package/dist/src/core/shaders/{templates/shaderUtils.d.ts → utils.d.ts} +1 -1
  62. package/dist/src/core/shaders/{templates/shaderUtils.js → utils.js} +2 -2
  63. package/dist/src/core/shaders/utils.js.map +1 -0
  64. package/dist/src/core/shaders/webgl/HolePunch.js +4 -3
  65. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  66. package/dist/src/core/shaders/webgl/LinearGradient.js +5 -4
  67. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  68. package/dist/src/core/shaders/webgl/RadialGradient.js +6 -5
  69. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  70. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +18 -7
  71. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  72. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +30 -17
  73. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  74. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +0 -50
  75. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  76. package/dist/src/core/textures/ImageTexture.d.ts +1 -1
  77. package/dist/src/core/textures/ImageTexture.js +1 -1
  78. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  79. package/dist/src/core/textures/Texture.d.ts +8 -0
  80. package/dist/src/core/textures/Texture.js +13 -0
  81. package/dist/src/core/textures/Texture.js.map +1 -1
  82. package/dist/src/core/utils.d.ts +1 -1
  83. package/dist/src/main-api/Inspector.d.ts +6 -1
  84. package/dist/src/main-api/Inspector.js +42 -4
  85. package/dist/src/main-api/Inspector.js.map +1 -1
  86. package/dist/src/main-api/Renderer.d.ts +62 -43
  87. package/dist/src/main-api/Renderer.js +119 -31
  88. package/dist/src/main-api/Renderer.js.map +1 -1
  89. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  90. package/exports/utils.ts +7 -1
  91. package/package.json +1 -1
  92. package/src/core/CoreNode.ts +301 -313
  93. package/src/core/CoreTextNode.ts +23 -20
  94. package/src/core/CoreTextureManager.ts +5 -4
  95. package/src/core/Stage.ts +68 -65
  96. package/src/core/TextureMemoryManager.ts +104 -63
  97. package/src/core/animations/CoreAnimation.ts +7 -0
  98. package/src/core/animations/CoreAnimationController.ts +8 -1
  99. package/src/core/renderers/CoreRenderer.ts +1 -0
  100. package/src/core/renderers/CoreShaderNode.ts +10 -0
  101. package/src/core/renderers/canvas/CanvasRenderer.ts +4 -0
  102. package/src/core/renderers/canvas/CanvasShaderNode.ts +1 -4
  103. package/src/core/renderers/webgl/WebGlCtxTexture.ts +0 -3
  104. package/src/core/renderers/webgl/WebGlRenderer.ts +64 -65
  105. package/src/core/renderers/webgl/WebGlShaderNode.ts +2 -4
  106. package/src/core/shaders/canvas/LinearGradient.ts +8 -6
  107. package/src/core/shaders/canvas/RadialGradient.ts +22 -36
  108. package/src/core/shaders/canvas/RoundedWithBorder.ts +10 -8
  109. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +14 -12
  110. package/src/core/shaders/canvas/RoundedWithShadow.ts +8 -7
  111. package/src/core/shaders/templates/BorderTemplate.ts +1 -1
  112. package/src/core/shaders/templates/HolePunchTemplate.ts +1 -1
  113. package/src/core/shaders/templates/RoundedTemplate.ts +1 -1
  114. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -1
  115. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +1 -1
  116. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -1
  117. package/src/core/shaders/templates/ShadowTemplate.ts +1 -1
  118. package/src/core/shaders/{templates/shaderUtils.ts → utils.ts} +2 -3
  119. package/src/core/shaders/webgl/HolePunch.ts +4 -7
  120. package/src/core/shaders/webgl/LinearGradient.ts +5 -4
  121. package/src/core/shaders/webgl/RadialGradient.ts +7 -6
  122. package/src/core/shaders/webgl/RoundedWithBorder.ts +18 -7
  123. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +30 -21
  124. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +2 -58
  125. package/src/core/textures/ImageTexture.ts +17 -16
  126. package/src/core/textures/Texture.ts +14 -0
  127. package/src/main-api/Inspector.ts +52 -5
  128. package/src/main-api/Renderer.ts +222 -77
  129. package/dist/src/core/platform.d.ts +0 -10
  130. package/dist/src/core/platform.js +0 -56
  131. package/dist/src/core/platform.js.map +0 -1
  132. package/dist/src/core/renderers/CoreShader.d.ts +0 -9
  133. package/dist/src/core/renderers/CoreShader.js +0 -28
  134. package/dist/src/core/renderers/CoreShader.js.map +0 -1
  135. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +0 -33
  136. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +0 -250
  137. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +0 -1
  138. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +0 -16
  139. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +0 -123
  140. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +0 -1
  141. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +0 -10
  142. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +0 -43
  143. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +0 -1
  144. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +0 -12
  145. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +0 -55
  146. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +0 -1
  147. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +0 -9
  148. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +0 -38
  149. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +0 -1
  150. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +0 -57
  151. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +0 -227
  152. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +0 -1
  153. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +0 -34
  154. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +0 -114
  155. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +0 -1
  156. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +0 -133
  157. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +0 -613
  158. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +0 -1
  159. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +0 -83
  160. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +0 -231
  161. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +0 -1
  162. package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +0 -9
  163. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +0 -87
  164. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +0 -1
  165. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +0 -10
  166. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -119
  167. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +0 -1
  168. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +0 -29
  169. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +0 -413
  170. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +0 -1
  171. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +0 -28
  172. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +0 -131
  173. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +0 -1
  174. package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +0 -47
  175. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -160
  176. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +0 -1
  177. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +0 -31
  178. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +0 -71
  179. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +0 -1
  180. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +0 -30
  181. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +0 -58
  182. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +0 -1
  183. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +0 -31
  184. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +0 -71
  185. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +0 -1
  186. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +0 -31
  187. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +0 -71
  188. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +0 -1
  189. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +0 -31
  190. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +0 -71
  191. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +0 -1
  192. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +0 -9
  193. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +0 -136
  194. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +0 -1
  195. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +0 -36
  196. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +0 -85
  197. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +0 -1
  198. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +0 -45
  199. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +0 -104
  200. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +0 -1
  201. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +0 -22
  202. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +0 -45
  203. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +0 -1
  204. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +0 -58
  205. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +0 -80
  206. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +0 -1
  207. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +0 -35
  208. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +0 -129
  209. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +0 -1
  210. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +0 -39
  211. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +0 -116
  212. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +0 -1
  213. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +0 -61
  214. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +0 -127
  215. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +0 -1
  216. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +0 -40
  217. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +0 -71
  218. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +0 -1
  219. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +0 -115
  220. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +0 -61
  221. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +0 -1
  222. package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
  223. package/dist/src/core/temp.d.ts +0 -1
  224. package/dist/src/core/temp.js +0 -77
  225. package/dist/src/core/temp.js.map +0 -1
  226. package/dist/src/main-api/DynamicShaderController.d.ts +0 -29
  227. package/dist/src/main-api/DynamicShaderController.js +0 -58
  228. package/dist/src/main-api/DynamicShaderController.js.map +0 -1
  229. package/dist/src/main-api/ShaderController.d.ts +0 -31
  230. package/dist/src/main-api/ShaderController.js +0 -37
  231. 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;
@@ -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
@@ -16,7 +16,7 @@
16
16
  */
17
17
 
18
18
  import type { CoreShaderType } from '../../renderers/CoreShaderNode.js';
19
- import { validateArrayLength4 } from './shaderUtils.js';
19
+ import { validateArrayLength4 } from '../utils.js';
20
20
 
21
21
  /**
22
22
  * Properties of the {@link HolePunch} shader
@@ -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 } from './shaderUtils.js';
20
+ import { validateArrayLength4 } from '../utils.js';
21
21
 
22
22
  /**
23
23
  * Properties of the {@link RoundedRectangle} shader
@@ -18,7 +18,7 @@
18
18
  import type { CoreShaderType } from '../../renderers/CoreShaderNode.js';
19
19
  import { getBorderProps, type BorderProps } from './BorderTemplate.js';
20
20
  import { RoundedTemplate, type RoundedProps } from './RoundedTemplate.js';
21
- import type { PrefixedType } from './shaderUtils.js';
21
+ import type { PrefixedType } from '../utils.js';
22
22
  import { getShadowProps, type ShadowProps } from './ShadowTemplate.js';
23
23
 
24
24
  export type RoundedWithBorderAndShadowProps = RoundedProps &
@@ -18,7 +18,7 @@
18
18
  import type { CoreShaderType } from '../../renderers/CoreShaderNode.js';
19
19
  import { getBorderProps, type BorderProps } from './BorderTemplate.js';
20
20
  import { RoundedTemplate, type RoundedProps } from './RoundedTemplate.js';
21
- import type { PrefixedType } from './shaderUtils.js';
21
+ import type { PrefixedType } from '../utils.js';
22
22
 
23
23
  export type RoundedWithBorderProps = RoundedProps &
24
24
  PrefixedType<BorderProps, 'border'>;
@@ -17,7 +17,7 @@
17
17
 
18
18
  import type { CoreShaderType } from '../../renderers/CoreShaderNode.js';
19
19
  import { RoundedTemplate, type RoundedProps } from './RoundedTemplate.js';
20
- import type { PrefixedType } from './shaderUtils.js';
20
+ import type { PrefixedType } from '../utils.js';
21
21
  import { getShadowProps, type ShadowProps } from './ShadowTemplate.js';
22
22
 
23
23
  export type RoundedWithShadowProps = RoundedProps &
@@ -16,7 +16,7 @@
16
16
  */
17
17
 
18
18
  import type { CoreShaderType } from '../../renderers/CoreShaderNode.js';
19
- import type { PrefixedType } from './shaderUtils.js';
19
+ import type { PrefixedType } from '../utils.js';
20
20
 
21
21
  export interface ShadowProps {
22
22
  /**
@@ -14,9 +14,8 @@
14
14
  *
15
15
  * SPDX-License-Identifier: Apache-2.0
16
16
  */
17
-
18
- import { assertTruthy } from '../../../utils.js';
19
- import type { Vec4 } from '../../renderers/webgl/internal/ShaderUtils.js';
17
+ import { assertTruthy } from '../../utils.js';
18
+ import type { Vec4 } from '../renderers/webgl/internal/ShaderUtils.js';
20
19
 
21
20
  export const validateArrayLength4 = (value: number | number[]): Vec4 => {
22
21
  if (!Array.isArray(value)) {
@@ -26,17 +26,14 @@ import type { WebGlShaderType } from '../../renderers/webgl/WebGlShaderNode.js';
26
26
  export const HolePunch: WebGlShaderType<HolePunchProps> = {
27
27
  props: HolePunchTemplate.props,
28
28
  update() {
29
- this.uniform2f('u_pos', this.props!.x, this.props!.y);
29
+ const props = this.props!;
30
+ this.uniform2f('u_pos', props.x, props.y);
30
31
  //precalculate to halfSize once instead of for every pixel
31
- this.uniform2f('u_size', this.props!.width * 0.5, this.props!.height * 0.5);
32
+ this.uniform2f('u_size', props.width * 0.5, props.height * 0.5);
32
33
 
33
34
  this.uniform4fa(
34
35
  'u_radius',
35
- calcFactoredRadiusArray(
36
- this.props!.radius as Vec4,
37
- this.props!.width,
38
- this.props!.height,
39
- ),
36
+ calcFactoredRadiusArray(props.radius as Vec4, props.width, props.height),
40
37
  );
41
38
  },
42
39
  getCacheMarkers(props: HolePunchProps) {