@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
@@ -27,11 +27,12 @@ import type { WebGlShaderType } from '../../renderers/webgl/WebGlShaderNode.js';
27
27
  export const LinearGradient: WebGlShaderType<LinearGradientProps> = {
28
28
  props: LinearGradientTemplate.props,
29
29
  update() {
30
- this.uniform1f('u_angle', this.props!.angle - (Math.PI / 180) * 90);
31
- this.uniform1fv('u_stops', new Float32Array(this.props!.stops));
30
+ const props = this.props!;
31
+ this.uniform1f('u_angle', props.angle - (Math.PI / 180) * 90);
32
+ this.uniform1fv('u_stops', new Float32Array(props.stops));
32
33
  const colors: number[] = [];
33
- for (let i = 0; i < this.props!.colors.length; i++) {
34
- const norm = getNormalizedRgbaComponents(this.props!.colors[i]!);
34
+ for (let i = 0; i < props.colors.length; i++) {
35
+ const norm = getNormalizedRgbaComponents(props.colors[i]!);
35
36
  colors.push(norm[0], norm[1], norm[2], norm[3]);
36
37
  }
37
38
  this.uniform4fv('u_colors', new Float32Array(colors));
@@ -28,16 +28,17 @@ import type { WebGlShaderType } from '../../renderers/webgl/WebGlShaderNode.js';
28
28
  export const RadialGradient: WebGlShaderType<RadialGradientProps> = {
29
29
  props: RadialGradientTemplate.props,
30
30
  update(node: CoreNode) {
31
+ const props = this.props!;
31
32
  this.uniform2f(
32
33
  'u_projection',
33
- this.props!.pivot[0] * node.width,
34
- this.props!.pivot[1] * node.height,
34
+ props.pivot[0] * node.width,
35
+ props.pivot[1] * node.height,
35
36
  );
36
- this.uniform2f('u_size', this.props!.width * 0.5, this.props!.height * 0.5);
37
- this.uniform1fv('u_stops', new Float32Array(this.props!.stops));
37
+ this.uniform2f('u_size', props.width * 0.5, props.height * 0.5);
38
+ this.uniform1fv('u_stops', new Float32Array(props.stops));
38
39
  const colors: number[] = [];
39
- for (let i = 0; i < this.props!.colors.length; i++) {
40
- const norm = getNormalizedRgbaComponents(this.props!.colors[i]!);
40
+ for (let i = 0; i < props.colors.length; i++) {
41
+ const norm = getNormalizedRgbaComponents(props.colors[i]!);
41
42
  colors.push(norm[0], norm[1], norm[2], norm[3]);
42
43
  }
43
44
  this.uniform4fv('u_colors', new Float32Array(colors));
@@ -65,6 +65,7 @@ export const RoundedWithBorder: WebGlShaderType<RoundedWithBorderProps> = {
65
65
  varying vec4 v_innerRadius;
66
66
  varying vec2 v_innerSize;
67
67
  varying vec2 v_halfDimensions;
68
+ varying float v_borderZero;
68
69
 
69
70
  void main() {
70
71
  vec2 normalized = a_position * u_pixelRatio;
@@ -76,14 +77,18 @@ export const RoundedWithBorder: WebGlShaderType<RoundedWithBorderProps> = {
76
77
 
77
78
  v_halfDimensions = u_dimensions * 0.5;
78
79
 
79
- v_innerRadius = vec4(
80
- max(0.0, u_radius.x - max(u_borderWidth.x, u_borderWidth.w) - 0.5),
81
- max(0.0, u_radius.y - max(u_borderWidth.x, u_borderWidth.y) - 0.5),
82
- max(0.0, u_radius.z - max(u_borderWidth.z, u_borderWidth.y) - 0.5),
83
- max(0.0, u_radius.w - max(u_borderWidth.z, u_borderWidth.w) - 0.5)
84
- );
80
+ v_borderZero = u_borderWidth == vec4(0.0) ? 1.0 : 0.0;
85
81
 
86
- v_innerSize = (vec2(u_dimensions.x - (u_borderWidth[3] + u_borderWidth[1]) + 1.0, u_dimensions.y - (u_borderWidth[0] + u_borderWidth[2])) - 2.0) * 0.5;
82
+ if(v_borderZero == 0.0) {
83
+ v_innerRadius = vec4(
84
+ max(0.0, u_radius.x - max(u_borderWidth.x, u_borderWidth.w) - 0.5),
85
+ max(0.0, u_radius.y - max(u_borderWidth.x, u_borderWidth.y) - 0.5),
86
+ max(0.0, u_radius.z - max(u_borderWidth.z, u_borderWidth.y) - 0.5),
87
+ max(0.0, u_radius.w - max(u_borderWidth.z, u_borderWidth.w) - 0.5)
88
+ );
89
+
90
+ v_innerSize = (vec2(u_dimensions.x - (u_borderWidth[3] + u_borderWidth[1]) + 1.0, u_dimensions.y - (u_borderWidth[0] + u_borderWidth[2])) - 2.0) * 0.5;
91
+ }
87
92
 
88
93
  gl_Position = vec4(normalized.x * screenSpace.x - 1.0, normalized.y * -abs(screenSpace.y) + 1.0, 0.0, 1.0);
89
94
  gl_Position.y = -sign(screenSpace.y) * gl_Position.y;
@@ -114,6 +119,7 @@ export const RoundedWithBorder: WebGlShaderType<RoundedWithBorderProps> = {
114
119
  varying vec2 v_halfDimensions;
115
120
  varying vec4 v_innerRadius;
116
121
  varying vec2 v_innerSize;
122
+ varying float v_borderZero;
117
123
 
118
124
  float roundedBox(vec2 p, vec2 s, vec4 r) {
119
125
  r.xy = (p.x > 0.0) ? r.yz : r.xw;
@@ -130,6 +136,11 @@ export const RoundedWithBorder: WebGlShaderType<RoundedWithBorderProps> = {
130
136
 
131
137
  float outerAlpha = 1.0 - smoothstep(0.0, 1.0, outerDist);
132
138
 
139
+ if(v_borderZero == 1.0) {
140
+ gl_FragColor = mix(vec4(0.0), color, outerAlpha) * u_alpha;
141
+ return;
142
+ }
143
+
133
144
  boxUv.x += u_borderWidth.y > u_borderWidth.w ? (u_borderWidth.y - u_borderWidth.w) * 0.5 : -(u_borderWidth.w - u_borderWidth.y) * 0.5;
134
145
  boxUv.y += u_borderWidth.z > u_borderWidth.x ? ((u_borderWidth.z - u_borderWidth.x) * 0.5 + 0.5) : -(u_borderWidth.x - u_borderWidth.z) * 0.5;
135
146
 
@@ -28,19 +28,16 @@ export const RoundedWithBorderAndShadow: WebGlShaderType<RoundedWithBorderAndSha
28
28
  {
29
29
  props: RoundedWithBorderAndShadowTemplate.props,
30
30
  update(node: CoreNode) {
31
- this.uniformRGBA('u_borderColor', this.props!['border-color']);
32
- this.uniform4fa('u_borderWidth', this.props!['border-width'] as Vec4);
31
+ const props = this.props!;
32
+ this.uniformRGBA('u_borderColor', props['border-color']);
33
+ this.uniform4fa('u_borderWidth', props['border-width'] as Vec4);
33
34
 
34
- this.uniformRGBA('u_shadowColor', this.props!['shadow-color']);
35
- this.uniform4fa('u_shadow', this.props!['shadow-projection']);
35
+ this.uniformRGBA('u_shadowColor', props['shadow-color']);
36
+ this.uniform4fa('u_shadow', props['shadow-projection']);
36
37
 
37
38
  this.uniform4fa(
38
39
  'u_radius',
39
- calcFactoredRadiusArray(
40
- this.props!.radius as Vec4,
41
- node.width,
42
- node.height,
43
- ),
40
+ calcFactoredRadiusArray(props.radius as Vec4, node.width, node.height),
44
41
  );
45
42
  },
46
43
  vertex: `
@@ -71,6 +68,7 @@ export const RoundedWithBorderAndShadow: WebGlShaderType<RoundedWithBorderAndSha
71
68
  varying vec4 v_innerRadius;
72
69
  varying vec2 v_innerSize;
73
70
  varying vec2 v_halfDimensions;
71
+ varying float v_borderZero;
74
72
 
75
73
  void main() {
76
74
  vec2 screenSpace = vec2(2.0 / u_resolution.x, -2.0 / u_resolution.y);
@@ -84,18 +82,23 @@ export const RoundedWithBorderAndShadow: WebGlShaderType<RoundedWithBorderAndSha
84
82
 
85
83
  v_halfDimensions = u_dimensions * 0.5;
86
84
 
87
- v_innerRadius = vec4(
88
- max(0.0, u_radius.x - max(u_borderWidth.x, u_borderWidth.w) - 0.5),
89
- max(0.0, u_radius.y - max(u_borderWidth.x, u_borderWidth.y) - 0.5),
90
- max(0.0, u_radius.z - max(u_borderWidth.z, u_borderWidth.y) - 0.5),
91
- max(0.0, u_radius.w - max(u_borderWidth.z, u_borderWidth.w) - 0.5)
92
- );
93
-
94
- v_innerSize = (vec2(u_dimensions.x - (u_borderWidth[3] + u_borderWidth[1]) - 1.0, u_dimensions.y - (u_borderWidth[0] + u_borderWidth[2])) - 2.0) * 0.5;
95
-
96
85
  v_color = a_color;
97
86
  v_nodeCoords = a_nodeCoords + (screenSpace + shadowEdge) / (u_dimensions);
98
87
  v_textureCoords = a_textureCoords + (screenSpace + shadowEdge) / (u_dimensions);
88
+
89
+ v_borderZero = u_borderWidth == vec4(0.0) ? 1.0 : 0.0;
90
+
91
+
92
+ if(v_borderZero == 0.0) {
93
+ v_innerRadius = vec4(
94
+ max(0.0, u_radius.x - max(u_borderWidth.x, u_borderWidth.w) - 0.5),
95
+ max(0.0, u_radius.y - max(u_borderWidth.x, u_borderWidth.y) - 0.5),
96
+ max(0.0, u_radius.z - max(u_borderWidth.z, u_borderWidth.y) - 0.5),
97
+ max(0.0, u_radius.w - max(u_borderWidth.z, u_borderWidth.w) - 0.5)
98
+ );
99
+
100
+ v_innerSize = (vec2(u_dimensions.x - (u_borderWidth[3] + u_borderWidth[1]) - 1.0, u_dimensions.y - (u_borderWidth[0] + u_borderWidth[2])) - 2.0) * 0.5;
101
+ }
99
102
  }
100
103
  `,
101
104
  fragment: `
@@ -125,6 +128,7 @@ export const RoundedWithBorderAndShadow: WebGlShaderType<RoundedWithBorderAndSha
125
128
  varying vec2 v_halfDimensions;
126
129
  varying vec4 v_innerRadius;
127
130
  varying vec2 v_innerSize;
131
+ varying float v_borderZero;
128
132
 
129
133
  float roundedBox(vec2 p, vec2 s, vec4 r) {
130
134
  r.xy = (p.x > 0.0) ? r.yz : r.xw;
@@ -149,15 +153,20 @@ export const RoundedWithBorderAndShadow: WebGlShaderType<RoundedWithBorderAndSha
149
153
 
150
154
  float outerAlpha = 1.0 - smoothstep(0.0, 1.0, outerDist);
151
155
 
156
+ float shadowAlpha = shadowBox(boxUv - u_shadow.xy, v_halfDimensions + u_shadow.w, u_radius + u_shadow.z);
157
+ vec4 shadow = mix(vec4(0.0), u_shadowColor, shadowAlpha);
158
+
159
+ if(v_borderZero == 1.0) {
160
+ gl_FragColor = mix(shadow, color, outerAlpha) * u_alpha;
161
+ return;
162
+ }
163
+
152
164
  boxUv.x += u_borderWidth.y > u_borderWidth.w ? (u_borderWidth.y - u_borderWidth.w) * 0.5 : -(u_borderWidth.w - u_borderWidth.y) * 0.5;
153
165
  boxUv.y += u_borderWidth.z > u_borderWidth.x ? ((u_borderWidth.z - u_borderWidth.x) * 0.5 + 0.5) : -(u_borderWidth.x - u_borderWidth.z) * 0.5;
154
166
 
155
167
  float innerDist = roundedBox(boxUv, v_innerSize, v_innerRadius);
156
168
  float innerAlpha = 1.0 - smoothstep(0.0, 1.0, innerDist);
157
169
 
158
- float shadowAlpha = shadowBox(boxUv - u_shadow.xy, v_halfDimensions + u_shadow.w, u_radius + u_shadow.z);
159
-
160
- vec4 shadow = mix(vec4(0.0), u_shadowColor, shadowAlpha);
161
170
  vec4 resColor = mix(u_borderColor, color, innerAlpha);
162
171
  resColor = mix(shadow, resColor, outerAlpha);
163
172
  gl_FragColor = resColor * u_alpha;
@@ -659,7 +659,6 @@ export class SdfTextRenderer extends TextRenderer<SdfTextRendererState> {
659
659
  },
660
660
  ]);
661
661
  state.bufferUploaded = false;
662
- assertTruthy(state.webGlBuffers);
663
662
  webGlBuffers = state.webGlBuffers;
664
663
  }
665
664
 
@@ -671,9 +670,7 @@ export class SdfTextRenderer extends TextRenderer<SdfTextRendererState> {
671
670
  state.bufferUploaded = true;
672
671
  }
673
672
 
674
- assertTruthy(trFontFace);
675
673
  if (scrollable && contain === 'both') {
676
- assertTruthy(elementBounds.valid);
677
674
  const elementRect = convertBoundToRect(elementBounds, tmpRect);
678
675
 
679
676
  if (node.clippingRect.valid) {
@@ -695,7 +692,7 @@ export class SdfTextRenderer extends TextRenderer<SdfTextRendererState> {
695
692
  sdfShaderProps: {
696
693
  transform: node.globalTransform!.getFloatArr(),
697
694
  color: mergeColorAlpha(color, node.worldAlpha),
698
- size: fontSize / (trFontFace.data?.info.size || 0),
695
+ size: fontSize / (trFontFace!.data?.info.size || 0),
699
696
  scrollY,
700
697
  distanceRange,
701
698
  debug: debug.sdfShaderDebug,
@@ -717,65 +714,12 @@ export class SdfTextRenderer extends TextRenderer<SdfTextRendererState> {
717
714
  );
718
715
 
719
716
  const texture = state.trFontFace?.texture;
720
- assertTruthy(texture);
721
- const ctxTexture = texture.ctxTexture;
717
+ const ctxTexture = texture!.ctxTexture;
722
718
 
723
719
  renderOp.addTexture(ctxTexture as WebGlCtxTexture);
724
720
  renderOp.numQuads = state.bufferNumQuads;
725
721
 
726
722
  renderer.addRenderOp(renderOp);
727
-
728
- // if (!debug.disableScissor) {
729
- // renderer.enableScissor(
730
- // visibleRect.x,
731
- // visibleRect.y,
732
- // visibleRect.w,
733
- // visibleRect.h,
734
- // );
735
- // }
736
-
737
- // Draw the arrays
738
- // gl.drawArrays(
739
- // gl.TRIANGLES, // Primitive type
740
- // 0,
741
- // bufferNumVertices, // Number of verticies
742
- // );
743
-
744
- // renderer.disableScissor();
745
-
746
- // if (debug.showElementRect) {
747
- // this.renderer.drawBorder(
748
- // Colors.Blue,
749
- // elementRect.x,
750
- // elementRect.y,
751
- // elementRect.w,
752
- // elementRect.h,
753
- // );
754
- // }
755
-
756
- // if (debug.showVisibleRect) {
757
- // this.renderer.drawBorder(
758
- // Colors.Green,
759
- // visibleRect.x,
760
- // visibleRect.y,
761
- // visibleRect.w,
762
- // visibleRect.h,
763
- // );
764
- // }
765
-
766
- // if (debug.showRenderWindow && renderWindow) {
767
- // this.renderer.drawBorder(
768
- // Colors.Red,
769
- // x + renderWindow.x1,
770
- // y + renderWindow.y1 - scrollY,
771
- // x + renderWindow.x2 - (x + renderWindow.x1),
772
- // y + renderWindow.y2 - scrollY - (y + renderWindow.y1 - scrollY),
773
- // );
774
- // }
775
- // if (debug.printLayoutTime) {
776
- // debugData.drawSum += performance.now() - drawStartTime;
777
- // debugData.drawCount++;
778
- // }
779
723
  }
780
724
 
781
725
  override setIsRenderable(
@@ -149,24 +149,25 @@ export class ImageTexture extends Texture {
149
149
  img.crossOrigin = 'anonymous';
150
150
  }
151
151
 
152
- return new Promise<{ data: HTMLImageElement; premultiplyAlpha: boolean }>(
153
- (resolve) => {
154
- img.onload = () => {
155
- resolve({ data: img, premultiplyAlpha: hasAlpha });
156
- };
152
+ return new Promise<{
153
+ data: HTMLImageElement | null;
154
+ premultiplyAlpha: boolean;
155
+ }>((resolve) => {
156
+ img.onload = () => {
157
+ resolve({ data: img, premultiplyAlpha: hasAlpha });
158
+ };
157
159
 
158
- img.onerror = () => {
159
- console.warn('Image loading failed, returning fallback object.');
160
- resolve({ data: img, premultiplyAlpha: hasAlpha });
161
- };
160
+ img.onerror = () => {
161
+ console.warn('Image loading failed, returning fallback object.');
162
+ resolve({ data: null, premultiplyAlpha: hasAlpha });
163
+ };
162
164
 
163
- if (src instanceof Blob) {
164
- img.src = URL.createObjectURL(src);
165
- } else {
166
- img.src = src;
167
- }
168
- },
169
- );
165
+ if (src instanceof Blob) {
166
+ img.src = URL.createObjectURL(src);
167
+ } else {
168
+ img.src = src;
169
+ }
170
+ });
170
171
  }
171
172
 
172
173
  async createImageBitmap(
@@ -250,6 +250,20 @@ export abstract class Texture extends EventEmitter {
250
250
  this.ctxTexture?.free();
251
251
  }
252
252
 
253
+ /**
254
+ * Destroy the texture.
255
+ *
256
+ * @remarks
257
+ * This method is called when the texture is no longer needed and should be
258
+ * cleaned up.
259
+ */
260
+ destroy(): void {
261
+ this.removeAllListeners();
262
+ this.free();
263
+ this.freeTextureData();
264
+ this.renderableOwners.clear();
265
+ }
266
+
253
267
  /**
254
268
  * Free the source texture data for this Texture.
255
269
  *
@@ -7,7 +7,7 @@ import { type RendererMainSettings } from './Renderer.js';
7
7
  import type { AnimationSettings } from '../core/animations/CoreAnimation.js';
8
8
  import type { IAnimationController } from '../common/IAnimationController.js';
9
9
  import { isProductionEnvironment } from '../utils.js';
10
- import type { CoreTextNode, CoreTextNodeProps } from '../core/CoreTextNode.js';
10
+ import { CoreTextNode, type CoreTextNodeProps } from '../core/CoreTextNode.js';
11
11
 
12
12
  /**
13
13
  * Inspector
@@ -166,6 +166,8 @@ const knownProperties = new Set<string>([
166
166
  export class Inspector {
167
167
  private root: HTMLElement | null = null;
168
168
  private canvas: HTMLCanvasElement | null = null;
169
+ private mutationObserver: MutationObserver = new MutationObserver(() => {});
170
+ private resizeObserver: ResizeObserver = new ResizeObserver(() => {});
169
171
  private height = 1080;
170
172
  private width = 1920;
171
173
  private scaleX = 1;
@@ -196,18 +198,18 @@ export class Inspector {
196
198
  document.body.appendChild(this.root);
197
199
 
198
200
  //listen for changes on canvas
199
- const mutationObserver = new MutationObserver(
201
+ this.mutationObserver = new MutationObserver(
200
202
  this.setRootPosition.bind(this),
201
203
  );
202
- mutationObserver.observe(canvas, {
204
+ this.mutationObserver.observe(canvas, {
203
205
  attributes: true,
204
206
  childList: false,
205
207
  subtree: false,
206
208
  });
207
209
 
208
210
  // Create a ResizeObserver to watch for changes in the element's size
209
- const resizeObserver = new ResizeObserver(this.setRootPosition.bind(this));
210
- resizeObserver.observe(canvas);
211
+ this.resizeObserver = new ResizeObserver(this.setRootPosition.bind(this));
212
+ this.resizeObserver.observe(canvas);
211
213
 
212
214
  //listen for changes on window
213
215
  window.addEventListener('resize', this.setRootPosition.bind(this));
@@ -259,6 +261,24 @@ export class Inspector {
259
261
  return div;
260
262
  }
261
263
 
264
+ createNodes(node: CoreNode): boolean {
265
+ if (this.root === null) {
266
+ return false;
267
+ }
268
+
269
+ const div = this.root.querySelector(`[id="${node.id}"]`);
270
+ if (div === null && node instanceof CoreTextNode) {
271
+ this.createTextNode(node);
272
+ } else if (div === null && node instanceof CoreNode) {
273
+ this.createNode(node);
274
+ }
275
+
276
+ for (const child of node.children) {
277
+ this.createNodes(child);
278
+ }
279
+ return true;
280
+ }
281
+
262
282
  createNode(node: CoreNode): CoreNode {
263
283
  const div = this.createDiv(node.id, node.props);
264
284
  (div as HTMLElement & { node: CoreNode }).node = node;
@@ -323,6 +343,7 @@ export class Inspector {
323
343
  this.destroyNode(node.id);
324
344
  originalDestroy.call(node);
325
345
  },
346
+ configurable: true,
326
347
  });
327
348
 
328
349
  const originalAnimate = node.animate;
@@ -343,11 +364,24 @@ export class Inspector {
343
364
 
344
365
  return animationController;
345
366
  },
367
+ configurable: true,
346
368
  });
347
369
 
348
370
  return node;
349
371
  }
350
372
 
373
+ public destroy() {
374
+ // Remove DOM observers
375
+ this.mutationObserver.disconnect();
376
+ this.resizeObserver.disconnect();
377
+
378
+ // Remove resize listener
379
+ window.removeEventListener('resize', this.setRootPosition.bind(this));
380
+ if (this.root && this.root.parentNode) {
381
+ this.root.remove();
382
+ }
383
+ }
384
+
351
385
  destroyNode(id: number) {
352
386
  const div = document.getElementById(id.toString());
353
387
  div?.remove();
@@ -475,6 +509,19 @@ export class Inspector {
475
509
  }
476
510
  }
477
511
 
512
+ updateViewport(
513
+ width: number,
514
+ height: number,
515
+ deviceLogicalPixelRatio: number,
516
+ ) {
517
+ this.scaleX = deviceLogicalPixelRatio ?? 1;
518
+ this.scaleY = deviceLogicalPixelRatio ?? 1;
519
+
520
+ this.width = width;
521
+ this.height = height;
522
+ this.setRootPosition();
523
+ }
524
+
478
525
  // simple animation handler
479
526
  animateNode(
480
527
  div: HTMLElement,