@lightningjs/renderer 3.0.0-beta18 → 3.0.0-beta19

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 (306) hide show
  1. package/dist/src/core/Autosizer.d.ts +29 -0
  2. package/dist/src/core/Autosizer.js +178 -0
  3. package/dist/src/core/Autosizer.js.map +1 -0
  4. package/dist/src/core/CoreNode.d.ts +44 -26
  5. package/dist/src/core/CoreNode.js +253 -150
  6. package/dist/src/core/CoreNode.js.map +1 -1
  7. package/dist/src/core/CoreTextNode.d.ts +1 -0
  8. package/dist/src/core/CoreTextNode.js +8 -4
  9. package/dist/src/core/CoreTextNode.js.map +1 -1
  10. package/dist/src/core/CoreTextureManager.d.ts +16 -2
  11. package/dist/src/core/CoreTextureManager.js +38 -51
  12. package/dist/src/core/CoreTextureManager.js.map +1 -1
  13. package/dist/src/core/Stage.d.ts +18 -2
  14. package/dist/src/core/Stage.js +44 -14
  15. package/dist/src/core/Stage.js.map +1 -1
  16. package/dist/src/core/TextureMemoryManager.d.ts +2 -4
  17. package/dist/src/core/TextureMemoryManager.js +80 -95
  18. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  19. package/dist/src/core/lib/WebGlContextWrapper.d.ts +11 -0
  20. package/dist/src/core/lib/WebGlContextWrapper.js +34 -0
  21. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  22. package/dist/src/core/lib/textureCompression.d.ts +14 -2
  23. package/dist/src/core/lib/textureCompression.js +320 -67
  24. package/dist/src/core/lib/textureCompression.js.map +1 -1
  25. package/dist/src/core/platforms/web/WebPlatform.js +2 -2
  26. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -1
  27. package/dist/src/core/renderers/CoreContextTexture.d.ts +1 -0
  28. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  29. package/dist/src/core/renderers/CoreRenderer.d.ts +3 -1
  30. package/dist/src/core/renderers/CoreRenderer.js +1 -0
  31. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  32. package/dist/src/core/renderers/CoreShaderNode.d.ts +6 -0
  33. package/dist/src/core/renderers/CoreShaderNode.js +2 -0
  34. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  35. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +1 -0
  36. package/dist/src/core/renderers/canvas/CanvasTexture.js +4 -1
  37. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  38. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -0
  39. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +6 -0
  40. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  41. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +11 -0
  42. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +51 -14
  43. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  44. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +2 -1
  45. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +2 -0
  46. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
  47. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +1 -1
  48. package/dist/src/core/renderers/webgl/WebGlRenderer.js +57 -61
  49. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  50. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +1 -0
  51. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +12 -0
  52. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  53. package/dist/src/core/shaders/webgl/Rounded.js +3 -1
  54. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
  55. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +3 -2
  56. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  57. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +3 -2
  58. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  59. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +2 -1
  60. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
  61. package/dist/src/core/text-rendering/SdfFontHandler.js +1 -1
  62. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -1
  63. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  64. package/dist/src/core/textures/ColorTexture.js +2 -3
  65. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  66. package/dist/src/core/textures/ImageTexture.d.ts +7 -1
  67. package/dist/src/core/textures/ImageTexture.js +20 -36
  68. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  69. package/dist/src/core/textures/NoiseTexture.d.ts +1 -1
  70. package/dist/src/core/textures/NoiseTexture.js +2 -2
  71. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  72. package/dist/src/core/textures/RenderTexture.d.ts +1 -1
  73. package/dist/src/core/textures/RenderTexture.js +2 -2
  74. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  75. package/dist/src/core/textures/SubTexture.d.ts +2 -4
  76. package/dist/src/core/textures/SubTexture.js +13 -31
  77. package/dist/src/core/textures/SubTexture.js.map +1 -1
  78. package/dist/src/core/textures/Texture.d.ts +67 -8
  79. package/dist/src/core/textures/Texture.js +127 -15
  80. package/dist/src/core/textures/Texture.js.map +1 -1
  81. package/dist/src/main-api/Renderer.d.ts +15 -2
  82. package/dist/src/main-api/Renderer.js +19 -12
  83. package/dist/src/main-api/Renderer.js.map +1 -1
  84. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  85. package/package.json +1 -1
  86. package/src/core/CoreNode.test.ts +0 -1
  87. package/src/core/CoreNode.ts +296 -177
  88. package/src/core/CoreTextNode.ts +9 -4
  89. package/src/core/CoreTextureManager.ts +69 -57
  90. package/src/core/Stage.ts +51 -17
  91. package/src/core/TextureError.ts +46 -0
  92. package/src/core/TextureMemoryManager.ts +95 -122
  93. package/src/core/lib/WebGlContextWrapper.ts +40 -0
  94. package/src/core/lib/collectionUtils.ts +118 -0
  95. package/src/core/lib/textureCompression.ts +433 -77
  96. package/src/core/platforms/web/WebPlatform.ts +2 -2
  97. package/src/core/renderers/CoreContextTexture.ts +1 -0
  98. package/src/core/renderers/CoreRenderer.ts +3 -2
  99. package/src/core/renderers/CoreShaderNode.ts +7 -0
  100. package/src/core/renderers/canvas/CanvasTexture.ts +5 -1
  101. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +8 -0
  102. package/src/core/renderers/webgl/WebGlCtxTexture.ts +58 -15
  103. package/src/core/renderers/webgl/WebGlRenderOp.ts +4 -1
  104. package/src/core/renderers/webgl/WebGlRenderer.ts +66 -68
  105. package/src/core/renderers/webgl/WebGlShaderProgram.ts +16 -0
  106. package/src/core/shaders/webgl/Rounded.ts +3 -1
  107. package/src/core/shaders/webgl/RoundedWithBorder.ts +3 -2
  108. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +3 -2
  109. package/src/core/shaders/webgl/RoundedWithShadow.ts +2 -1
  110. package/src/core/text-rendering/SdfFontHandler.ts +1 -1
  111. package/src/core/textures/ColorTexture.ts +6 -4
  112. package/src/core/textures/ImageTexture.ts +35 -42
  113. package/src/core/textures/NoiseTexture.ts +6 -4
  114. package/src/core/textures/RenderTexture.ts +6 -4
  115. package/src/core/textures/SubTexture.ts +17 -38
  116. package/src/core/textures/Texture.ts +159 -20
  117. package/src/main-api/Renderer.ts +36 -14
  118. package/dist/src/core/AutosizeManager.d.ts +0 -29
  119. package/dist/src/core/AutosizeManager.js +0 -171
  120. package/dist/src/core/AutosizeManager.js.map +0 -1
  121. package/dist/src/core/animations/Animation.d.ts +0 -16
  122. package/dist/src/core/animations/Animation.js +0 -111
  123. package/dist/src/core/animations/Animation.js.map +0 -1
  124. package/dist/src/core/animations/CoreTransition.d.ts +0 -24
  125. package/dist/src/core/animations/CoreTransition.js +0 -63
  126. package/dist/src/core/animations/CoreTransition.js.map +0 -1
  127. package/dist/src/core/animations/Playback.d.ts +0 -62
  128. package/dist/src/core/animations/Playback.js +0 -155
  129. package/dist/src/core/animations/Playback.js.map +0 -1
  130. package/dist/src/core/animations/Transition.d.ts +0 -25
  131. package/dist/src/core/animations/Transition.js +0 -63
  132. package/dist/src/core/animations/Transition.js.map +0 -1
  133. package/dist/src/core/animations/utils.d.ts +0 -2
  134. package/dist/src/core/animations/utils.js +0 -137
  135. package/dist/src/core/animations/utils.js.map +0 -1
  136. package/dist/src/core/platform.d.ts +0 -10
  137. package/dist/src/core/platform.js +0 -81
  138. package/dist/src/core/platform.js.map +0 -1
  139. package/dist/src/core/renderers/CoreShader.d.ts +0 -9
  140. package/dist/src/core/renderers/CoreShader.js +0 -28
  141. package/dist/src/core/renderers/CoreShader.js.map +0 -1
  142. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +0 -33
  143. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +0 -250
  144. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +0 -1
  145. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +0 -17
  146. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +0 -125
  147. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +0 -1
  148. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +0 -14
  149. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +0 -138
  150. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +0 -1
  151. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -19
  152. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -58
  153. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +0 -1
  154. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.d.ts +0 -10
  155. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js +0 -43
  156. package/dist/src/core/renderers/canvas/shaders/UnsupportedShader.js.map +0 -1
  157. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.d.ts +0 -12
  158. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +0 -58
  159. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +0 -1
  160. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +0 -9
  161. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +0 -38
  162. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +0 -1
  163. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +0 -69
  164. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +0 -272
  165. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +0 -1
  166. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.d.ts +0 -34
  167. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +0 -114
  168. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +0 -1
  169. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +0 -133
  170. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +0 -645
  171. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +0 -1
  172. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +0 -78
  173. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +0 -202
  174. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +0 -1
  175. package/dist/src/core/renderers/webgl/shaders/DefaultShader.d.ts +0 -9
  176. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +0 -84
  177. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +0 -1
  178. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.d.ts +0 -10
  179. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -108
  180. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +0 -1
  181. package/dist/src/core/renderers/webgl/shaders/DynamicShader.d.ts +0 -29
  182. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +0 -408
  183. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +0 -1
  184. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.d.ts +0 -28
  185. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +0 -126
  186. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +0 -1
  187. package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +0 -47
  188. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -148
  189. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +0 -1
  190. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.d.ts +0 -31
  191. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +0 -71
  192. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js.map +0 -1
  193. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.d.ts +0 -30
  194. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +0 -58
  195. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js.map +0 -1
  196. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.d.ts +0 -31
  197. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +0 -71
  198. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js.map +0 -1
  199. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.d.ts +0 -31
  200. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +0 -71
  201. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js.map +0 -1
  202. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.d.ts +0 -31
  203. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +0 -71
  204. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js.map +0 -1
  205. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.d.ts +0 -9
  206. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js +0 -136
  207. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +0 -1
  208. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.d.ts +0 -36
  209. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +0 -85
  210. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js.map +0 -1
  211. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.d.ts +0 -45
  212. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +0 -104
  213. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js.map +0 -1
  214. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.d.ts +0 -22
  215. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +0 -45
  216. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js.map +0 -1
  217. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.d.ts +0 -58
  218. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +0 -80
  219. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js.map +0 -1
  220. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.d.ts +0 -35
  221. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +0 -134
  222. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +0 -1
  223. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +0 -40
  224. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +0 -143
  225. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +0 -1
  226. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.d.ts +0 -61
  227. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +0 -127
  228. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js.map +0 -1
  229. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.d.ts +0 -40
  230. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +0 -71
  231. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js.map +0 -1
  232. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.d.ts +0 -115
  233. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js +0 -61
  234. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +0 -1
  235. package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +0 -12
  236. package/dist/src/core/text-rendering/TextRenderingUtils.js +0 -14
  237. package/dist/src/core/text-rendering/TextRenderingUtils.js.map +0 -1
  238. package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +0 -72
  239. package/dist/src/core/text-rendering/TextTextureRendererUtils.js +0 -217
  240. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +0 -1
  241. package/dist/src/core/text-rendering/TrFontManager.d.ts +0 -26
  242. package/dist/src/core/text-rendering/TrFontManager.js +0 -131
  243. package/dist/src/core/text-rendering/TrFontManager.js.map +0 -1
  244. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +0 -39
  245. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +0 -125
  246. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +0 -1
  247. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +0 -103
  248. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js +0 -21
  249. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +0 -1
  250. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +0 -62
  251. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +0 -88
  252. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +0 -1
  253. package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +0 -118
  254. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +0 -63
  255. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +0 -1
  256. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +0 -14
  257. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +0 -66
  258. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +0 -1
  259. package/dist/src/core/text-rendering/font-face-types/utils.d.ts +0 -1
  260. package/dist/src/core/text-rendering/font-face-types/utils.js +0 -38
  261. package/dist/src/core/text-rendering/font-face-types/utils.js.map +0 -1
  262. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +0 -59
  263. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +0 -397
  264. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +0 -1
  265. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -120
  266. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +0 -551
  267. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +0 -1
  268. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +0 -92
  269. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +0 -607
  270. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +0 -1
  271. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +0 -12
  272. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +0 -61
  273. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +0 -1
  274. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +0 -33
  275. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +0 -52
  276. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +0 -1
  277. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +0 -13
  278. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +0 -32
  279. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +0 -1
  280. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +0 -23
  281. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +0 -84
  282. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +0 -1
  283. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +0 -4
  284. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +0 -34
  285. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +0 -1
  286. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +0 -20
  287. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +0 -308
  288. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +0 -1
  289. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +0 -10
  290. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +0 -40
  291. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +0 -1
  292. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +0 -26
  293. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +0 -70
  294. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +0 -1
  295. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +0 -16
  296. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js +0 -39
  297. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +0 -1
  298. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +0 -373
  299. package/dist/src/core/text-rendering/renderers/TextRenderer.js +0 -178
  300. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +0 -1
  301. package/dist/src/main-api/DynamicShaderController.d.ts +0 -29
  302. package/dist/src/main-api/DynamicShaderController.js +0 -58
  303. package/dist/src/main-api/DynamicShaderController.js.map +0 -1
  304. package/dist/src/main-api/ShaderController.d.ts +0 -31
  305. package/dist/src/main-api/ShaderController.js +0 -37
  306. package/dist/src/main-api/ShaderController.js.map +0 -1
@@ -21,8 +21,10 @@ import type { Dimensions } from '../../../common/CommonTypes.js';
21
21
  import type { TextureMemoryManager } from '../../TextureMemoryManager.js';
22
22
  import type { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
23
23
  import type { Texture } from '../../textures/Texture.js';
24
+ import { uploadCompressedTexture } from '../../lib/textureCompression.js';
24
25
  import { CoreContextTexture } from '../CoreContextTexture.js';
25
26
  import { isHTMLImageElement } from './internal/RendererUtils.js';
27
+ import type { Bound } from '../../lib/utils.js';
26
28
 
27
29
  const TRANSPARENT_TEXTURE_DATA = new Uint8Array([0, 0, 0, 0]);
28
30
 
@@ -42,6 +44,13 @@ export class WebGlCtxTexture extends CoreContextTexture {
42
44
  private _w = 0;
43
45
  private _h = 0;
44
46
 
47
+ txCoords: Bound = {
48
+ x1: 0,
49
+ y1: 0,
50
+ x2: 1,
51
+ y2: 1,
52
+ };
53
+
45
54
  constructor(
46
55
  protected glw: WebGlContextWrapper,
47
56
  memManager: TextureMemoryManager,
@@ -50,6 +59,25 @@ export class WebGlCtxTexture extends CoreContextTexture {
50
59
  super(memManager, textureSource);
51
60
  }
52
61
 
62
+ /**
63
+ * GL error check with direct state marking
64
+ * Uses cached error result to minimize function calls
65
+ */
66
+ private checkGLError(): boolean {
67
+ // Skip if already failed to prevent double-processing
68
+ if (this.state === 'failed') {
69
+ return true;
70
+ }
71
+
72
+ const error = this.glw.getError();
73
+ if (error !== 0) {
74
+ this.state = 'failed';
75
+ this.textureSource.setState('failed', new Error(`WebGL Error: ${error}`));
76
+ return true;
77
+ }
78
+ return false;
79
+ }
80
+
53
81
  get ctxTexture(): WebGLTexture | null {
54
82
  if (this.state === 'freed') {
55
83
  this.load();
@@ -117,9 +145,7 @@ export class WebGlCtxTexture extends CoreContextTexture {
117
145
  // to the GL context before freeing the source data.
118
146
  // This is important to avoid issues with the texture data being
119
147
  // freed while the texture is still being loaded or used.
120
- queueMicrotask(() => {
121
- this.textureSource.freeTextureData();
122
- });
148
+ this.textureSource.freeTextureData();
123
149
  } catch (err: unknown) {
124
150
  // If the texture has been freed while loading, return early.
125
151
  // Type assertion needed because state could change during async operations
@@ -180,6 +206,11 @@ export class WebGlCtxTexture extends CoreContextTexture {
180
206
 
181
207
  glw.texImage2D(0, format, format, glw.UNSIGNED_BYTE, tdata);
182
208
 
209
+ // Check for errors after compressed texture operations
210
+ if (this.checkGLError() === true) {
211
+ return { w: 0, h: 0 };
212
+ }
213
+
183
214
  this.setTextureMemUse(h * w * formatBytes * memoryPadding);
184
215
  } else if (tdata === null) {
185
216
  w = 0;
@@ -199,21 +230,21 @@ export class WebGlCtxTexture extends CoreContextTexture {
199
230
  );
200
231
  this.setTextureMemUse(TRANSPARENT_TEXTURE_DATA.byteLength);
201
232
  } else if ('mipmaps' in tdata && tdata.mipmaps) {
202
- const { mipmaps, w = 0, h = 0, type, glInternalFormat } = tdata;
203
- const view =
204
- type === 'ktx'
205
- ? new DataView(mipmaps[0] ?? new ArrayBuffer(0))
206
- : (mipmaps[0] as unknown as ArrayBufferView);
233
+ const { mipmaps, type, blockInfo } = tdata;
234
+ uploadCompressedTexture[type]!(glw, this._nativeCtxTexture, tdata);
207
235
 
208
- glw.bindTexture(this._nativeCtxTexture);
236
+ // Check for errors after compressed texture operations
237
+ if (this.checkGLError() === true) {
238
+ return { w: 0, h: 0 };
239
+ }
209
240
 
210
- glw.compressedTexImage2D(0, glInternalFormat, w, h, 0, view);
211
- glw.texParameteri(glw.TEXTURE_WRAP_S, glw.CLAMP_TO_EDGE);
212
- glw.texParameteri(glw.TEXTURE_WRAP_T, glw.CLAMP_TO_EDGE);
213
- glw.texParameteri(glw.TEXTURE_MAG_FILTER, glw.LINEAR);
214
- glw.texParameteri(glw.TEXTURE_MIN_FILTER, glw.LINEAR);
241
+ w = tdata.w;
242
+ h = tdata.h;
243
+ this.txCoords.x2 = w / (Math.ceil(w / blockInfo.width) * blockInfo.width);
244
+ this.txCoords.y2 =
245
+ h / (Math.ceil(h / blockInfo.height) * blockInfo.height);
215
246
 
216
- this.setTextureMemUse(view.byteLength);
247
+ this.setTextureMemUse(mipmaps[0]?.byteLength ?? 0);
217
248
  } else if (tdata && tdata instanceof Uint8Array) {
218
249
  // Color Texture
219
250
  w = 1;
@@ -227,6 +258,11 @@ export class WebGlCtxTexture extends CoreContextTexture {
227
258
 
228
259
  glw.texImage2D(0, format, w, h, 0, format, glw.UNSIGNED_BYTE, tdata);
229
260
 
261
+ // Check for errors after compressed texture operations
262
+ if (this.checkGLError() === true) {
263
+ return { w: 0, h: 0 };
264
+ }
265
+
230
266
  this.setTextureMemUse(w * h * formatBytes);
231
267
  } else {
232
268
  console.error(
@@ -253,6 +289,13 @@ export class WebGlCtxTexture extends CoreContextTexture {
253
289
 
254
290
  this.state = 'freed';
255
291
  this.textureSource.setState('freed');
292
+ this.release();
293
+ }
294
+
295
+ /**
296
+ * Release the WebGLTexture from the GPU without changing state
297
+ */
298
+ release(): void {
256
299
  this._w = 0;
257
300
  this._h = 0;
258
301
 
@@ -34,7 +34,8 @@ type ReqQuad =
34
34
  | 'rtt'
35
35
  | 'clippingRect'
36
36
  | 'height'
37
- | 'width';
37
+ | 'width'
38
+ | 'time';
38
39
  type RenderOpQuadOptions = Pick<QuadOptions, ReqQuad> &
39
40
  Partial<Omit<QuadOptions, ReqQuad>> & {
40
41
  sdfShaderProps?: Record<string, unknown>;
@@ -65,6 +66,7 @@ export class WebGlRenderOp extends CoreRenderOp {
65
66
  readonly framebufferDimensions?: Dimensions | null;
66
67
  readonly alpha: number;
67
68
  readonly pixelRatio: number;
69
+ readonly time?: number | null;
68
70
 
69
71
  constructor(
70
72
  readonly renderer: WebGlRenderer,
@@ -83,6 +85,7 @@ export class WebGlRenderOp extends CoreRenderOp {
83
85
  this.alpha = quad.alpha;
84
86
  this.pixelRatio =
85
87
  this.parentHasRenderTexture === true ? 1 : renderer.stage.pixelRatio;
88
+ this.time = quad.time;
86
89
 
87
90
  /**
88
91
  * related to line 51
@@ -52,6 +52,7 @@ import { WebGlCtxRenderTexture } from './WebGlCtxRenderTexture.js';
52
52
  import { Default } from '../../shaders/webgl/Default.js';
53
53
  import type { WebGlShaderType } from './WebGlShaderNode.js';
54
54
  import { WebGlShaderNode } from './WebGlShaderNode.js';
55
+ import type { Dimensions } from '../../../common/CommonTypes.js';
55
56
 
56
57
  export type WebGlRendererOptions = CoreRendererOptions;
57
58
 
@@ -77,7 +78,7 @@ export class WebGlRenderer extends CoreRenderer {
77
78
  override rttNodes: CoreNode[] = [];
78
79
  activeRttNode: CoreNode | null = null;
79
80
 
80
- defaultTextureCoords: TextureCoords = {
81
+ override defaultTextureCoords: TextureCoords = {
81
82
  x1: 0,
82
83
  y1: 0,
83
84
  x2: 1,
@@ -640,85 +641,82 @@ export class WebGlRenderer extends CoreRenderer {
640
641
  return this.defaultShaderNode;
641
642
  }
642
643
 
643
- override getTextureCoords(node: CoreNode): TextureCoords {
644
+ override getTextureCoords(node: CoreNode): TextureCoords | undefined {
644
645
  const texture = node.texture;
645
646
  if (texture === null) {
646
- return this.defaultTextureCoords;
647
+ return undefined;
647
648
  }
648
649
 
649
- const textureOptions = node.textureOptions;
650
+ //this stuff needs to be properly moved to CtxSubTexture at some point in the future.
651
+ const ctxTexture =
652
+ (texture as SubTexture).parentTexture !== undefined
653
+ ? (texture as SubTexture).parentTexture.ctxTexture
654
+ : texture.ctxTexture;
655
+ if (ctxTexture === undefined) {
656
+ return undefined;
657
+ }
658
+
659
+ const textureOptions = node.props.textureOptions;
660
+
661
+ //early exit for textures with no options unless its a subtexture
650
662
  if (
651
- texture.type === TextureType.subTexture ||
652
- texture.type === TextureType.image ||
653
- texture.type === TextureType.renderToTexture ||
654
- textureOptions !== null
663
+ texture.type !== TextureType.subTexture &&
664
+ textureOptions === undefined
655
665
  ) {
656
- const result = {
657
- x1: 0,
658
- y1: 0,
659
- x2: 1,
660
- y2: 1,
661
- };
662
-
663
- if (texture.type === TextureType.subTexture) {
664
- const props = (texture as SubTexture).props;
665
- const { w: parentW = 0, h: parentH = 0 } = (texture as SubTexture)
666
- .parentTexture.dimensions || { w: 0, h: 0 };
667
- result.x1 = props.x / parentW;
668
- result.x2 = result.x1 + props.w / parentW;
669
- result.y1 = props.y / parentH;
670
- result.y2 = result.y1 + props.h / parentH;
671
- }
672
-
673
- if (
674
- texture.type === TextureType.image &&
675
- textureOptions !== null &&
676
- textureOptions.resizeMode !== undefined &&
677
- texture.dimensions !== null
678
- ) {
679
- const resizeMode = textureOptions.resizeMode;
680
- const dimensions = texture.dimensions;
681
- if (resizeMode.type === 'cover') {
682
- const scaleX = node.props.w / dimensions.w;
683
- const scaleY = node.props.h / dimensions.h;
684
- const scale = Math.max(scaleX, scaleY);
685
- const precision = 1 / scale;
686
- // Determine based on width
687
- if (scaleX < scale) {
688
- const desiredSize = precision * node.props.w;
689
- result.x1 =
690
- (1 - desiredSize / dimensions.w) * (resizeMode.clipX ?? 0.5);
691
- result.x2 = result.x1 + desiredSize / dimensions.w;
692
- }
693
- // Determine based on height
694
- if (scaleY < scale) {
695
- const desiredSize = precision * node.props.h;
696
- result.y1 =
697
- (1 - desiredSize / dimensions.h) * (resizeMode.clipY ?? 0.5);
698
- result.y2 = result.y1 + desiredSize / dimensions.h;
699
- }
700
- }
701
- }
666
+ return (ctxTexture as WebGlCtxTexture).txCoords;
667
+ }
702
668
 
703
- // Flip texture coordinates if dictated by texture options
704
- let flipY = 0;
705
- if (textureOptions !== null) {
706
- if (textureOptions.flipX === true) {
707
- [result.x1, result.x2] = [result.x2, result.x1];
708
- }
669
+ let { x1, x2, y1, y2 } = (ctxTexture as WebGlCtxTexture).txCoords;
670
+ if (texture.type === TextureType.subTexture) {
671
+ const { w: parentW, h: parentH } = (texture as SubTexture).parentTexture
672
+ .dimensions!;
673
+ const { x, y, w, h } = (texture as SubTexture).props;
674
+ x1 = x / parentW;
675
+ y1 = y / parentH;
676
+ x2 = x1 + w / parentW;
677
+ y2 = y1 + h / parentH;
678
+ }
709
679
 
710
- // convert to integer for bitwise operation below
711
- flipY = +(textureOptions.flipY || false);
680
+ const resizeMode = textureOptions.resizeMode;
681
+ if (
682
+ resizeMode !== undefined &&
683
+ resizeMode.type === 'cover' &&
684
+ texture.dimensions !== null
685
+ ) {
686
+ const dimensions = texture.dimensions as Dimensions;
687
+ const w = node.props.w;
688
+ const h = node.props.h;
689
+ const scaleX = w / dimensions.w;
690
+ const scaleY = h / dimensions.h;
691
+ const scale = Math.max(scaleX, scaleY);
692
+ const precision = 1 / scale;
693
+
694
+ // Determine based on width
695
+ if (scaleX < scale) {
696
+ const desiredSize = precision * node.props.w;
697
+ x1 = (1 - desiredSize / dimensions.w) * (resizeMode.clipX ?? 0.5);
698
+ x2 = x1 + desiredSize / dimensions.w;
712
699
  }
713
-
714
- // Eitherone should be true
715
- if (flipY ^ +(texture.type === TextureType.renderToTexture)) {
716
- [result.y1, result.y2] = [result.y2, result.y1];
700
+ // Determine based on height
701
+ if (scaleY < scale) {
702
+ const desiredSize = precision * node.props.h;
703
+ y1 = (1 - desiredSize / dimensions.h) * (resizeMode.clipY ?? 0.5);
704
+ y2 = y1 + desiredSize / dimensions.h;
717
705
  }
718
- return result as TextureCoords;
719
706
  }
720
707
 
721
- return this.defaultTextureCoords;
708
+ if (textureOptions.flipX === true) {
709
+ [x1, x2] = [x2, x1];
710
+ }
711
+ if (textureOptions.flipY === true) {
712
+ [y1, y2] = [y2, y1];
713
+ }
714
+ return {
715
+ x1,
716
+ y1,
717
+ x2,
718
+ y2,
719
+ };
722
720
  }
723
721
 
724
722
  /**
@@ -50,6 +50,7 @@ export class WebGlShaderProgram implements CoreShaderProgram {
50
50
  protected lifecycle: Pick<WebGlShaderType, 'update' | 'canBatch'>;
51
51
  protected useSystemAlpha = false;
52
52
  protected useSystemDimensions = false;
53
+ protected useTimeValue = false;
53
54
  public isDestroyed = false;
54
55
  supportsIndexedTextures = false;
55
56
 
@@ -123,6 +124,10 @@ export class WebGlShaderProgram implements CoreShaderProgram {
123
124
  this.useSystemAlpha = uniLocs['u_alpha'] !== undefined;
124
125
  this.useSystemDimensions = uniLocs['u_dimensions'] !== undefined;
125
126
 
127
+ this.useTimeValue =
128
+ this.glw.getUniformLocation(program, 'u_dimensions') !== null &&
129
+ config.time !== undefined;
130
+
126
131
  this.lifecycle = {
127
132
  update: config.update,
128
133
  canBatch: config.canBatch,
@@ -149,6 +154,12 @@ export class WebGlShaderProgram implements CoreShaderProgram {
149
154
  return this.lifecycle.canBatch(incomingQuad, currentRenderOp);
150
155
  }
151
156
 
157
+ if (this.useTimeValue === true) {
158
+ if (incomingQuad.time !== currentRenderOp.time) {
159
+ return false;
160
+ }
161
+ }
162
+
152
163
  if (this.useSystemAlpha === true) {
153
164
  if (incomingQuad.alpha !== currentRenderOp.alpha) {
154
165
  return false;
@@ -169,6 +180,7 @@ export class WebGlShaderProgram implements CoreShaderProgram {
169
180
  if (incomingQuad.shader !== null) {
170
181
  shaderPropsA = incomingQuad.shader.resolvedProps;
171
182
  }
183
+
172
184
  if (currentRenderOp.shader !== null) {
173
185
  shaderPropsB = currentRenderOp.shader.resolvedProps;
174
186
  }
@@ -221,6 +233,10 @@ export class WebGlShaderProgram implements CoreShaderProgram {
221
233
  );
222
234
  }
223
235
 
236
+ if (this.useTimeValue === true) {
237
+ this.glw.uniform1f('u_time', renderOp.time as number);
238
+ }
239
+
224
240
  if (this.useSystemAlpha === true) {
225
241
  this.glw.uniform1f('u_alpha', renderOp.alpha);
226
242
  }
@@ -80,6 +80,7 @@ export const Rounded: WebGlShaderType<RoundedProps> = {
80
80
  uniform vec2 u_resolution;
81
81
  uniform vec2 u_dimensions;
82
82
  uniform float u_alpha;
83
+ uniform float u_pixelRatio;
83
84
  uniform sampler2D u_texture;
84
85
 
85
86
  //custom uniforms
@@ -103,7 +104,8 @@ export const Rounded: WebGlShaderType<RoundedProps> = {
103
104
  vec2 boxUv = v_nodeCoords.xy * u_dimensions - halfDimensions;
104
105
  float boxDist = roundedBox(boxUv, halfDimensions, u_radius);
105
106
 
106
- float roundedAlpha = 1.0 - smoothstep(0.0, 1.0, boxDist);
107
+ float edgeWidth = 1.0 / u_pixelRatio;
108
+ float roundedAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, boxDist);
107
109
 
108
110
  vec4 resColor = vec4(0.0);
109
111
  resColor = mix(resColor, color, roundedAlpha);
@@ -130,7 +130,8 @@ export const RoundedWithBorder: WebGlShaderType<RoundedWithBorderProps> = {
130
130
  vec2 boxUv = v_nodeCoords.xy * u_dimensions - v_halfDimensions;
131
131
  float outerDist = roundedBox(boxUv, v_halfDimensions, u_radius);
132
132
 
133
- float outerAlpha = 1.0 - smoothstep(0.0, 1.0, outerDist);
133
+ float edgeWidth = 1.0 / u_pixelRatio;
134
+ float outerAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, outerDist);
134
135
 
135
136
  if(v_borderZero == 1.0) {
136
137
  gl_FragColor = mix(vec4(0.0), color, outerAlpha) * u_alpha;
@@ -141,7 +142,7 @@ export const RoundedWithBorder: WebGlShaderType<RoundedWithBorderProps> = {
141
142
  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;
142
143
 
143
144
  float innerDist = roundedBox(boxUv, v_innerSize, v_innerRadius);
144
- float innerAlpha = 1.0 - smoothstep(0.0, 1.0, innerDist);
145
+ float innerAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, innerDist);
145
146
 
146
147
  vec4 resColor = mix(u_borderColor, color, innerAlpha);
147
148
  resColor = mix(vec4(0.0), resColor, outerAlpha);
@@ -151,7 +151,8 @@ export const RoundedWithBorderAndShadow: WebGlShaderType<RoundedWithBorderAndSha
151
151
  vec2 boxUv = v_nodeCoords.xy * u_dimensions - v_halfDimensions;
152
152
  float outerDist = roundedBox(boxUv, v_halfDimensions - 1.0, u_radius);
153
153
 
154
- float outerAlpha = 1.0 - smoothstep(0.0, 1.0, outerDist);
154
+ float edgeWidth = 1.0 / u_pixelRatio;
155
+ float outerAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, outerDist);
155
156
 
156
157
  float shadowAlpha = shadowBox(boxUv - u_shadow.xy, v_halfDimensions + u_shadow.w, u_radius + u_shadow.z);
157
158
  vec4 shadow = mix(vec4(0.0), u_shadowColor, shadowAlpha);
@@ -165,7 +166,7 @@ export const RoundedWithBorderAndShadow: WebGlShaderType<RoundedWithBorderAndSha
165
166
  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;
166
167
 
167
168
  float innerDist = roundedBox(boxUv, v_innerSize, v_innerRadius);
168
- float innerAlpha = 1.0 - smoothstep(0.0, 1.0, innerDist);
169
+ float innerAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, innerDist);
169
170
 
170
171
  vec4 resColor = mix(u_borderColor, color, innerAlpha);
171
172
  resColor = mix(shadow, resColor, outerAlpha);
@@ -81,7 +81,8 @@ export const RoundedWithShadow: WebGlShaderType<RoundedWithShadowProps> = {
81
81
  vec2 boxUv = v_nodeCoords.xy * u_dimensions - halfDimensions;
82
82
  float boxDist = roundedBox(boxUv, halfDimensions, u_radius);
83
83
 
84
- float roundedAlpha = 1.0 - smoothstep(0.0, u_pixelRatio, boxDist);
84
+ float edgeWidth = 1.0 / u_pixelRatio;
85
+ float roundedAlpha = 1.0 - smoothstep(-0.5 * edgeWidth, 0.5 * edgeWidth, boxDist);
85
86
 
86
87
  float shadowAlpha = shadowBox(boxUv - u_shadow.xy, halfDimensions + u_shadow.w, u_radius + u_shadow.z);
87
88
 
@@ -326,7 +326,7 @@ export const loadFont = async (
326
326
  premultiplyAlpha: false,
327
327
  });
328
328
 
329
- atlasTexture.setRenderableOwner(this, true);
329
+ atlasTexture.setRenderableOwner(fontFamily, true);
330
330
  atlasTexture.preventCleanup = true; // Prevent automatic cleanup
331
331
 
332
332
  if (atlasTexture.state === 'loaded') {
@@ -49,9 +49,12 @@ export class ColorTexture extends Texture {
49
49
 
50
50
  props: Required<ColorTextureProps>;
51
51
 
52
- constructor(txManager: CoreTextureManager, props?: ColorTextureProps) {
52
+ constructor(
53
+ txManager: CoreTextureManager,
54
+ props: Required<ColorTextureProps>,
55
+ ) {
53
56
  super(txManager);
54
- this.props = ColorTexture.resolveDefaults(props || {});
57
+ this.props = props;
55
58
  }
56
59
 
57
60
  get color() {
@@ -86,8 +89,7 @@ export class ColorTexture extends Texture {
86
89
  }
87
90
 
88
91
  static override makeCacheKey(props: ColorTextureProps): string {
89
- const resolvedProps = ColorTexture.resolveDefaults(props);
90
- return `ColorTexture,${resolvedProps.color}`;
92
+ return `ColorTexture,${props.color}`;
91
93
  }
92
94
 
93
95
  static override resolveDefaults(
@@ -109,6 +109,12 @@ export interface ImageTextureProps {
109
109
  * @default null
110
110
  */
111
111
  sy?: number | null;
112
+ /**
113
+ * Maximum number of times to retry loading the image if it fails.
114
+ *
115
+ * @default 5
116
+ */
117
+ maxRetryCount?: number;
112
118
  }
113
119
 
114
120
  /**
@@ -131,11 +137,15 @@ export class ImageTexture extends Texture {
131
137
  public props: Required<ImageTextureProps>;
132
138
  public override type: TextureType = TextureType.image;
133
139
 
134
- constructor(txManager: CoreTextureManager, props: ImageTextureProps) {
140
+ constructor(
141
+ txManager: CoreTextureManager,
142
+ props: Required<ImageTextureProps>,
143
+ ) {
135
144
  super(txManager);
136
145
 
137
146
  this.platform = txManager.platform;
138
- this.props = ImageTexture.resolveDefaults(props);
147
+ this.props = props;
148
+ this.maxRetryCount = props.maxRetryCount as number;
139
149
  }
140
150
 
141
151
  hasAlphaChannel(mimeType: string) {
@@ -152,14 +162,19 @@ export class ImageTexture extends Texture {
152
162
  return new Promise<{
153
163
  data: HTMLImageElement | null;
154
164
  premultiplyAlpha: boolean;
155
- }>((resolve) => {
165
+ }>((resolve, reject) => {
156
166
  img.onload = () => {
157
167
  resolve({ data: img, premultiplyAlpha: hasAlpha });
158
168
  };
159
169
 
160
- img.onerror = () => {
161
- console.warn('Image loading failed, returning fallback object.');
162
- resolve({ data: null, premultiplyAlpha: hasAlpha });
170
+ img.onerror = (err) => {
171
+ const errorMessage =
172
+ err instanceof Error
173
+ ? err.message
174
+ : err instanceof Event
175
+ ? `Image loading failed for ${img.src}`
176
+ : 'Unknown image loading error';
177
+ reject(new Error(`Image loading failed: ${errorMessage}`));
163
178
  };
164
179
 
165
180
  if (src instanceof Blob) {
@@ -253,17 +268,12 @@ export class ImageTexture extends Texture {
253
268
  }
254
269
 
255
270
  override async getTextureSource(): Promise<TextureData> {
256
- let resp;
271
+ let resp: TextureData;
257
272
  try {
258
273
  resp = await this.determineImageTypeAndLoadImage();
259
274
  } catch (e) {
260
275
  this.setState('failed', e as Error);
261
276
 
262
- // log error only in development
263
- if (isProductionEnvironment === false) {
264
- console.error('ImageTexture:', e);
265
- }
266
-
267
277
  return {
268
278
  data: null,
269
279
  };
@@ -276,23 +286,6 @@ export class ImageTexture extends Texture {
276
286
  };
277
287
  }
278
288
 
279
- let w, h;
280
- // check if resp.data is typeof Uint8ClampedArray else
281
- // use resp.data.width and resp.data.height
282
- if (resp.data instanceof Uint8Array) {
283
- w = this.props.w ?? 0;
284
- h = this.props.h ?? 0;
285
- } else {
286
- w = resp.data?.width ?? (this.props.w || 0);
287
- h = resp.data?.height ?? (this.props.h || 0);
288
- }
289
-
290
- // we're loaded!
291
- this.setState('fetched', {
292
- w,
293
- h,
294
- });
295
-
296
289
  return {
297
290
  data: resp.data,
298
291
  premultiplyAlpha: this.props.premultiplyAlpha ?? true,
@@ -375,26 +368,25 @@ export class ImageTexture extends Texture {
375
368
  * @returns The cache key as a string, or `false` if the key cannot be generated.
376
369
  */
377
370
  static override makeCacheKey(props: ImageTextureProps): string | false {
378
- const resolvedProps = ImageTexture.resolveDefaults(props);
379
371
  // Only cache key-able textures; prioritise key
380
- const key = resolvedProps.key || resolvedProps.src;
372
+ const key = props.key || props.src;
381
373
  if (typeof key !== 'string') {
382
374
  return false;
383
375
  }
384
376
 
385
- // if we have source dimensions, cache the texture separately
386
- let dimensionProps = '';
387
- if (resolvedProps.sh !== null && resolvedProps.sw !== null) {
388
- dimensionProps += ',';
389
- dimensionProps += resolvedProps.sx ?? '';
390
- dimensionProps += resolvedProps.sy ?? '';
391
- dimensionProps += resolvedProps.sw || '';
392
- dimensionProps += resolvedProps.sh || '';
377
+ let cacheKey = `ImageTexture,${key},${props.premultiplyAlpha ?? 'true'},${
378
+ props.maxRetryCount
379
+ }`;
380
+
381
+ if (props.sh !== null && props.sw !== null) {
382
+ cacheKey += ',';
383
+ cacheKey += props.sx ?? '';
384
+ cacheKey += props.sy ?? '';
385
+ cacheKey += props.sw || '';
386
+ cacheKey += props.sh || '';
393
387
  }
394
388
 
395
- return `ImageTexture,${key},${
396
- resolvedProps.premultiplyAlpha ?? 'true'
397
- }${dimensionProps}`;
389
+ return cacheKey;
398
390
  }
399
391
 
400
392
  static override resolveDefaults(
@@ -411,6 +403,7 @@ export class ImageTexture extends Texture {
411
403
  sy: props.sy ?? null,
412
404
  sw: props.sw ?? null,
413
405
  sh: props.sh ?? null,
406
+ maxRetryCount: props.maxRetryCount ?? 5,
414
407
  };
415
408
  }
416
409
 
@@ -58,9 +58,12 @@ export class NoiseTexture extends Texture {
58
58
 
59
59
  public override type: TextureType = TextureType.noise;
60
60
 
61
- constructor(txManager: CoreTextureManager, props: NoiseTextureProps) {
61
+ constructor(
62
+ txManager: CoreTextureManager,
63
+ props: Required<NoiseTextureProps>,
64
+ ) {
62
65
  super(txManager);
63
- this.props = NoiseTexture.resolveDefaults(props);
66
+ this.props = props;
64
67
  }
65
68
 
66
69
  override async getTextureSource(): Promise<TextureData> {
@@ -75,8 +78,7 @@ export class NoiseTexture extends Texture {
75
78
  pixelData8[i + 3] = 255;
76
79
  }
77
80
 
78
- this.setState('fetched');
79
-
81
+ // Noise Texture data ready - dimensions will be set during upload
80
82
  return {
81
83
  data: new ImageData(pixelData8, w, h),
82
84
  };
@@ -42,9 +42,12 @@ export class RenderTexture extends Texture {
42
42
 
43
43
  public override type: TextureType = TextureType.renderToTexture;
44
44
 
45
- constructor(txManager: CoreTextureManager, props?: RenderTextureProps) {
45
+ constructor(
46
+ txManager: CoreTextureManager,
47
+ props: Required<RenderTextureProps>,
48
+ ) {
46
49
  super(txManager);
47
- this.props = RenderTexture.resolveDefaults(props || {});
50
+ this.props = props;
48
51
  }
49
52
 
50
53
  get w() {
@@ -64,8 +67,7 @@ export class RenderTexture extends Texture {
64
67
  }
65
68
 
66
69
  override async getTextureSource(): Promise<TextureData> {
67
- this.setState('fetched');
68
-
70
+ // Render texture data ready - dimensions will be set during upload
69
71
  return {
70
72
  data: null,
71
73
  premultiplyAlpha: null,