@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
@@ -16,8 +16,14 @@
16
16
  * See the License for the specific language governing permissions and
17
17
  * limitations under the License.
18
18
  */
19
+ import { type CompressedData, type TextureData } from '../textures/Texture.js';
20
+ import type { WebGlContextWrapper } from './WebGlContextWrapper.js';
19
21
 
20
- import { type TextureData } from '../textures/Texture.js';
22
+ export type UploadCompressedTextureFunction = (
23
+ glw: WebGlContextWrapper,
24
+ texture: WebGLTexture,
25
+ data: CompressedData,
26
+ ) => void;
21
27
 
22
28
  /**
23
29
  * Tests if the given location is a compressed texture container
@@ -27,10 +33,38 @@ import { type TextureData } from '../textures/Texture.js';
27
33
  * and only supports the following extensions: .ktx and .pvr
28
34
  * @returns
29
35
  */
30
- export function isCompressedTextureContainer(url: string): boolean {
31
- return /\.(ktx|pvr)$/.test(url);
36
+ export function isCompressedTextureContainer(src: string): boolean {
37
+ return /\.(ktx|pvr)$/.test(src);
32
38
  }
33
39
 
40
+ const PVR_MAGIC = 0x03525650; // 'PVR3' in little-endian
41
+ const PVR_TO_GL_INTERNAL_FORMAT: Record<string, number> = {
42
+ 0: 0x8c01,
43
+ 1: 0x8c03,
44
+ 2: 0x8c00,
45
+ 3: 0x8c02, // PVRTC1
46
+ 6: 0x8d64, // ETC1
47
+ 7: 0x83f0,
48
+ 8: 0x83f2,
49
+ 9: 0x83f2,
50
+ 10: 0x83f3,
51
+ 11: 0x83f3, // DXT variants
52
+ };
53
+ const ASTC_MAGIC = 0x5ca1ab13;
54
+
55
+ const ASTC_TO_GL_INTERNAL_FORMAT: Record<string, number> = {
56
+ '4x4': 0x93b0, // COMPRESSED_RGBA_ASTC_4x4_KHR
57
+ '5x5': 0x93b1, // COMPRESSED_RGBA_ASTC_5x5_KHR
58
+ '6x6': 0x93b2, // COMPRESSED_RGBA_ASTC_6x6_KHR
59
+ '8x8': 0x93b3, // COMPRESSED_RGBA_ASTC_8x8_KHR
60
+ '10x10': 0x93b4, // COMPRESSED_RGBA_ASTC_10x10_KHR
61
+ '12x12': 0x93b5, // COMPRESSED_RGBA_ASTC_12x12_KHR
62
+ };
63
+
64
+ // KTX file identifier
65
+ const KTX_IDENTIFIER = [
66
+ 0xab, 0x4b, 0x54, 0x58, 0x20, 0x31, 0x31, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a,
67
+ ];
34
68
  /**
35
69
  * Loads a compressed texture container
36
70
  * @param url
@@ -39,116 +73,438 @@ export function isCompressedTextureContainer(url: string): boolean {
39
73
  export const loadCompressedTexture = async (
40
74
  url: string,
41
75
  ): Promise<TextureData> => {
42
- const response = await fetch(url);
43
- const arrayBuffer = await response.arrayBuffer();
76
+ try {
77
+ const response = await fetch(url);
78
+ if (!response.ok) {
79
+ throw new Error(
80
+ `Failed to fetch compressed texture: ${response.status} ${response.statusText}`,
81
+ );
82
+ }
44
83
 
45
- if (url.indexOf('.ktx') !== -1) {
46
- return loadKTXData(arrayBuffer);
47
- }
84
+ const arrayBuffer = await response.arrayBuffer();
85
+
86
+ // Ensure we have enough data to check magic numbers
87
+ if (arrayBuffer.byteLength < 16) {
88
+ throw new Error(
89
+ `File too small to be a valid compressed texture (${arrayBuffer.byteLength} bytes). Expected at least 16 bytes for header inspection.`,
90
+ );
91
+ }
92
+
93
+ const view = new DataView(arrayBuffer);
94
+ const magic = view.getUint32(0, true);
48
95
 
49
- return loadPVRData(arrayBuffer);
96
+ if (magic === PVR_MAGIC) {
97
+ return loadPVR(view);
98
+ }
99
+
100
+ if (magic === ASTC_MAGIC) {
101
+ return loadASTC(view);
102
+ }
103
+
104
+ let isKTX = true;
105
+
106
+ for (let i = 0; i < KTX_IDENTIFIER.length; i++) {
107
+ if (view.getUint8(i) !== KTX_IDENTIFIER[i]) {
108
+ isKTX = false;
109
+ break;
110
+ }
111
+ }
112
+
113
+ if (isKTX === true) {
114
+ return loadKTX(view);
115
+ } else {
116
+ throw new Error('Unrecognized compressed texture format');
117
+ }
118
+ } catch (error) {
119
+ throw new Error(`Failed to load compressed texture from ${url}: ${error}`);
120
+ }
50
121
  };
51
122
 
123
+ function readUint24(view: DataView, offset: number) {
124
+ return (
125
+ view.getUint8(offset) +
126
+ (view.getUint8(offset + 1) << 8) +
127
+ (view.getUint8(offset + 2) << 16)
128
+ );
129
+ }
130
+
52
131
  /**
53
- * Loads a KTX texture container and returns the texture data
54
- * @param buffer
132
+ * Loads an ASTC texture container and returns the texture data
133
+ * @param view
55
134
  * @returns
56
135
  */
57
- const loadKTXData = async (buffer: ArrayBuffer): Promise<TextureData> => {
58
- const view = new DataView(buffer);
59
- const littleEndian = view.getUint32(12) === 16909060 ? true : false;
136
+ const loadASTC = async function (view: DataView): Promise<TextureData> {
137
+ const blockX = view.getUint8(4);
138
+ const blockY = view.getUint8(5);
139
+ const sizeX = readUint24(view, 7);
140
+ const sizeY = readUint24(view, 10);
141
+
142
+ if (sizeX === 0 || sizeY === 0) {
143
+ throw new Error(`Invalid ASTC texture dimensions: ${sizeX}x${sizeY}`);
144
+ }
145
+ const expected = Math.ceil(sizeX / blockX) * Math.ceil(sizeY / blockY) * 16;
146
+ const dataSize = view.byteLength - 16;
147
+ if (expected !== dataSize) {
148
+ throw new Error(
149
+ `Invalid ASTC texture data size: expected ${expected}, got ${dataSize}`,
150
+ );
151
+ }
152
+
153
+ const internalFormat = ASTC_TO_GL_INTERNAL_FORMAT[`${blockX}x${blockY}`];
154
+ if (internalFormat === undefined) {
155
+ throw new Error(`Unsupported ASTC block size: ${blockX}x${blockY}`);
156
+ }
157
+
158
+ const buffer = view.buffer as ArrayBuffer;
159
+
60
160
  const mipmaps: ArrayBuffer[] = [];
161
+ mipmaps.push(buffer.slice(16));
61
162
 
62
- const data = {
63
- glInternalFormat: view.getUint32(28, littleEndian),
64
- pixelWidth: view.getUint32(36, littleEndian),
65
- pixelHeight: view.getUint32(40, littleEndian),
66
- numberOfMipmapLevels: view.getUint32(56, littleEndian),
67
- bytesOfKeyValueData: view.getUint32(60, littleEndian),
163
+ return {
164
+ data: {
165
+ blockInfo: blockInfoMap[internalFormat]!,
166
+ glInternalFormat: internalFormat,
167
+ mipmaps,
168
+ w: sizeX,
169
+ h: sizeY,
170
+ type: 'astc',
171
+ },
172
+ premultiplyAlpha: false,
68
173
  };
174
+ };
175
+
176
+ const uploadASTC = function (
177
+ glw: WebGlContextWrapper,
178
+ texture: WebGLTexture,
179
+ data: CompressedData,
180
+ ) {
181
+ if (glw.getExtension('WEBGL_compressed_texture_astc') === null) {
182
+ throw new Error('ASTC compressed textures not supported by this device');
183
+ }
69
184
 
70
- let offset = 64;
185
+ glw.bindTexture(texture);
71
186
 
72
- // Key Value Pairs of data start at byte offset 64
73
- // But the only known kvp is the API version, so skipping parsing.
74
- offset += data.bytesOfKeyValueData;
187
+ const { glInternalFormat, mipmaps, w, h } = data;
188
+ if (mipmaps === undefined) {
189
+ return;
190
+ }
191
+
192
+ const view = new Uint8Array(mipmaps[0]!);
193
+
194
+ glw.compressedTexImage2D(0, glInternalFormat, w, h, 0, view);
195
+ // ASTC textures MUST use no mipmaps unless stored
196
+ glw.texParameteri(glw.TEXTURE_WRAP_S, glw.CLAMP_TO_EDGE);
197
+ glw.texParameteri(glw.TEXTURE_WRAP_T, glw.CLAMP_TO_EDGE);
198
+ glw.texParameteri(glw.TEXTURE_MAG_FILTER, glw.LINEAR);
199
+ glw.texParameteri(glw.TEXTURE_MIN_FILTER, glw.LINEAR);
200
+ };
201
+ /**
202
+ * Loads a KTX texture container and returns the texture data
203
+ * @param view
204
+ * @returns
205
+ */
206
+ const loadKTX = async function (view: DataView): Promise<TextureData> {
207
+ const endianness = view.getUint32(12, true);
208
+ const littleEndian = endianness === 0x04030201;
209
+ if (littleEndian === false && endianness !== 0x01020304) {
210
+ throw new Error('Invalid KTX endianness value');
211
+ }
75
212
 
76
- for (let i = 0; i < data.numberOfMipmapLevels; i++) {
77
- const imageSize = view.getUint32(offset);
213
+ const glType = view.getUint32(16, littleEndian);
214
+ const glFormat = view.getUint32(24, littleEndian);
215
+ if (glType !== 0 || glFormat !== 0) {
216
+ throw new Error(
217
+ `KTX texture is not compressed (glType: ${glType}, glFormat: ${glFormat})`,
218
+ );
219
+ }
220
+
221
+ const glInternalFormat = view.getUint32(28, littleEndian);
222
+ if (blockInfoMap[glInternalFormat] === undefined) {
223
+ throw new Error(
224
+ `Unsupported KTX compressed texture format: 0x${glInternalFormat.toString(
225
+ 16,
226
+ )}`,
227
+ );
228
+ }
229
+
230
+ const width = view.getUint32(36, littleEndian);
231
+ const height = view.getUint32(40, littleEndian);
232
+ if (width === 0 || height === 0) {
233
+ throw new Error(`Invalid KTX texture dimensions: ${width}x${height}`);
234
+ }
235
+
236
+ const mipmapLevels = view.getUint32(56, littleEndian);
237
+ if (mipmapLevels === 0) {
238
+ throw new Error('KTX texture has no mipmap levels');
239
+ }
240
+
241
+ const bytesOfKeyValueData = view.getUint32(60, littleEndian);
242
+ const mipmaps: ArrayBuffer[] = [];
243
+ const buffer = view.buffer as ArrayBuffer;
244
+ let offset = 64 + bytesOfKeyValueData;
245
+
246
+ if (offset > view.byteLength) {
247
+ throw new Error('Invalid KTX file: key/value data exceeds file size');
248
+ }
249
+
250
+ for (let i = 0; i < mipmapLevels; i++) {
251
+ const imageSize = view.getUint32(offset, littleEndian);
78
252
  offset += 4;
79
253
 
80
- mipmaps.push(view.buffer.slice(offset, imageSize));
81
- offset += imageSize;
254
+ const end = offset + imageSize;
255
+
256
+ mipmaps.push(buffer.slice(offset, end));
257
+ offset = end;
258
+ if (offset % 4 !== 0) {
259
+ offset += 4 - (offset % 4);
260
+ }
82
261
  }
83
262
 
84
263
  return {
85
264
  data: {
86
- glInternalFormat: data.glInternalFormat,
265
+ blockInfo: blockInfoMap[glInternalFormat]!,
266
+ glInternalFormat: glInternalFormat,
87
267
  mipmaps,
88
- w: data.pixelWidth || 0,
89
- h: data.pixelHeight || 0,
268
+ w: width,
269
+ h: height,
90
270
  type: 'ktx',
91
271
  },
92
272
  premultiplyAlpha: false,
93
273
  };
94
274
  };
95
275
 
96
- /**
97
- * Loads a PVR texture container and returns the texture data
98
- * @param buffer
99
- * @returns
100
- */
101
- const loadPVRData = async (buffer: ArrayBuffer): Promise<TextureData> => {
102
- // pvr header length in 32 bits
103
- const pvrHeaderLength = 13;
104
- // for now only we only support: COMPRESSED_RGB_ETC1_WEBGL
105
- const pvrFormatEtc1 = 0x8d64;
106
- const pvrWidth = 7;
107
- const pvrHeight = 6;
108
- const pvrMipmapCount = 11;
109
- const pvrMetadata = 12;
110
- const arrayBuffer = buffer;
111
- const header = new Int32Array(arrayBuffer, 0, pvrHeaderLength);
112
-
113
- // @ts-expect-error Object possibly undefined
114
-
115
- const dataOffset = header[pvrMetadata] + 52;
116
- const pvrtcData = new Uint8Array(arrayBuffer, dataOffset);
117
- const mipmaps: ArrayBuffer[] = [];
118
- const data = {
119
- pixelWidth: header[pvrWidth],
120
- pixelHeight: header[pvrHeight],
121
- numberOfMipmapLevels: header[pvrMipmapCount] || 0,
122
- };
276
+ const uploadKTX = function (
277
+ glw: WebGlContextWrapper,
278
+ texture: WebGLTexture,
279
+ data: CompressedData,
280
+ ) {
281
+ const { glInternalFormat, mipmaps, w: width, h: height, blockInfo } = data;
282
+ if (mipmaps === undefined) {
283
+ return;
284
+ }
285
+ glw.bindTexture(texture);
123
286
 
124
- let offset = 0;
125
- let width = data.pixelWidth || 0;
126
- let height = data.pixelHeight || 0;
287
+ const blockWidth = blockInfo.width;
288
+ const blockHeight = blockInfo.height;
289
+ let w = width;
290
+ let h = height;
127
291
 
128
- for (let i = 0; i < data.numberOfMipmapLevels; i++) {
129
- const level = ((width + 3) >> 2) * ((height + 3) >> 2) * 8;
130
- const view = new Uint8Array(
131
- arrayBuffer,
132
- pvrtcData.byteOffset + offset,
133
- level,
134
- );
292
+ for (let i = 0; i < mipmaps!.length; i++) {
293
+ let view = new Uint8Array(mipmaps![i]!);
135
294
 
136
- mipmaps.push(
137
- view.buffer.slice(view.byteOffset, view.byteOffset + view.byteLength),
295
+ const uploadW = Math.ceil(w / blockWidth) * blockWidth;
296
+ const uploadH = Math.ceil(h / blockHeight) * blockHeight;
297
+
298
+ const expectedBytes =
299
+ Math.ceil(w / blockWidth) * Math.ceil(h / blockHeight) * blockInfo.bytes;
300
+
301
+ if (view.byteLength < expectedBytes) {
302
+ const padded = new Uint8Array(expectedBytes);
303
+ padded.set(view);
304
+ view = padded;
305
+ }
306
+
307
+ glw.compressedTexImage2D(i, glInternalFormat, uploadW, uploadH, 0, view);
308
+
309
+ w = Math.max(1, w >> 1);
310
+ h = Math.max(1, h >> 1);
311
+ }
312
+
313
+ glw.texParameteri(glw.TEXTURE_WRAP_S, glw.CLAMP_TO_EDGE);
314
+ glw.texParameteri(glw.TEXTURE_WRAP_T, glw.CLAMP_TO_EDGE);
315
+ glw.texParameteri(glw.TEXTURE_MAG_FILTER, glw.LINEAR);
316
+ glw.texParameteri(
317
+ glw.TEXTURE_MIN_FILTER,
318
+ mipmaps!.length > 1 ? glw.LINEAR_MIPMAP_LINEAR : glw.LINEAR,
319
+ );
320
+ };
321
+
322
+ function pvrtcMipSize(width: number, height: number, bpp: 2 | 4) {
323
+ const minW = bpp === 2 ? 16 : 8;
324
+ const minH = 8;
325
+ const w = Math.max(width, minW);
326
+ const h = Math.max(height, minH);
327
+ return (w * h * bpp) / 8;
328
+ }
329
+
330
+ const loadPVR = async function (view: DataView): Promise<TextureData> {
331
+ const pixelFormatLow = view.getUint32(8, true);
332
+ const internalFormat = PVR_TO_GL_INTERNAL_FORMAT[pixelFormatLow];
333
+
334
+ if (internalFormat === undefined) {
335
+ throw new Error(
336
+ `Unsupported PVR pixel format: 0x${pixelFormatLow.toString(16)}`,
138
337
  );
139
- offset += level;
140
- width = width >> 1;
141
- height = height >> 1;
338
+ }
339
+
340
+ const height = view.getInt32(24, true);
341
+ const width = view.getInt32(28, true);
342
+
343
+ // validate dimensions
344
+ if (width === 0 || height === 0) {
345
+ throw new Error(`Invalid PVR texture dimensions: ${width}x${height}`);
346
+ }
347
+ const mipmapLevels = view.getInt32(44, true);
348
+ const metadataSize = view.getUint32(48, true);
349
+ const buffer = view.buffer as ArrayBuffer;
350
+
351
+ let offset = 52 + metadataSize;
352
+ if (offset > buffer.byteLength) {
353
+ throw new Error('Invalid PVR file: metadata exceeds file size');
354
+ }
355
+
356
+ const mipmaps: ArrayBuffer[] = [];
357
+
358
+ const block = blockInfoMap[internalFormat]!;
359
+
360
+ for (let i = 0; i < mipmapLevels; i++) {
361
+ const declaredSize = view.getUint32(offset, true);
362
+ const max = buffer.byteLength - (offset + 4);
363
+
364
+ if (declaredSize > 0 && declaredSize <= max) {
365
+ offset += 4;
366
+ const start = offset;
367
+ const end = offset + declaredSize;
368
+
369
+ mipmaps.push(buffer.slice(start, end));
370
+ offset = end;
371
+ offset = (offset + 3) & ~3; // align to 4 bytes
372
+ continue;
373
+ }
374
+
375
+ if (
376
+ pixelFormatLow === 0 ||
377
+ pixelFormatLow === 1 ||
378
+ pixelFormatLow === 2 ||
379
+ pixelFormatLow === 3
380
+ ) {
381
+ const bpp = pixelFormatLow === 0 || pixelFormatLow === 1 ? 2 : 4;
382
+ const computed = pvrtcMipSize(width >> i, height >> i, bpp);
383
+
384
+ mipmaps.push(buffer.slice(offset, offset + computed));
385
+ offset += computed;
386
+ offset = (offset + 3) & ~3; // align to 4 bytes
387
+ continue;
388
+ }
389
+
390
+ if (block !== undefined) {
391
+ const blockW = Math.ceil((width >> i) / block.width);
392
+ const blockH = Math.ceil((height >> i) / block.height);
393
+ const computed = blockW * blockH * block.bytes;
394
+
395
+ mipmaps.push(buffer.slice(offset, offset + computed));
396
+ offset += computed;
397
+ offset = (offset + 3) & ~3;
398
+ }
142
399
  }
143
400
 
144
401
  return {
145
402
  data: {
146
- glInternalFormat: pvrFormatEtc1,
147
- mipmaps: mipmaps,
148
- w: data.pixelWidth || 0,
149
- h: data.pixelHeight || 0,
403
+ blockInfo: blockInfoMap[internalFormat]!,
404
+ glInternalFormat: internalFormat,
405
+ mipmaps,
406
+ w: width,
407
+ h: height,
150
408
  type: 'pvr',
151
409
  },
152
410
  premultiplyAlpha: false,
153
411
  };
154
412
  };
413
+
414
+ const uploadPVR = function (
415
+ glw: WebGlContextWrapper,
416
+ texture: WebGLTexture,
417
+ data: CompressedData,
418
+ ) {
419
+ const { glInternalFormat, mipmaps, w: width, h: height } = data;
420
+ if (mipmaps === undefined) {
421
+ return;
422
+ }
423
+ glw.bindTexture(texture);
424
+
425
+ let w = width;
426
+ let h = height;
427
+
428
+ for (let i = 0; i < mipmaps!.length; i++) {
429
+ glw.compressedTexImage2D(
430
+ i,
431
+ glInternalFormat,
432
+ w,
433
+ h,
434
+ 0,
435
+ new Uint8Array(mipmaps[i]!),
436
+ );
437
+
438
+ w = Math.max(1, w >> 1);
439
+ h = Math.max(1, h >> 1);
440
+ }
441
+
442
+ glw.texParameteri(glw.TEXTURE_WRAP_S, glw.CLAMP_TO_EDGE);
443
+ glw.texParameteri(glw.TEXTURE_WRAP_T, glw.CLAMP_TO_EDGE);
444
+ glw.texParameteri(glw.TEXTURE_MAG_FILTER, glw.LINEAR);
445
+ glw.texParameteri(
446
+ glw.TEXTURE_MIN_FILTER,
447
+ mipmaps.length > 1 ? glw.LINEAR_MIPMAP_LINEAR : glw.LINEAR,
448
+ );
449
+ };
450
+
451
+ type BlockInfo = {
452
+ width: number;
453
+ height: number;
454
+ bytes: number;
455
+ };
456
+
457
+ // Predefined block info for common compressed texture formats
458
+ const BLOCK_4x4x8: BlockInfo = { width: 4, height: 4, bytes: 8 };
459
+ const BLOCK_4x4x16: BlockInfo = { width: 4, height: 4, bytes: 16 };
460
+ const BLOCK_5x5x16: BlockInfo = { width: 5, height: 5, bytes: 16 };
461
+ const BLOCK_6x6x16: BlockInfo = { width: 6, height: 6, bytes: 16 };
462
+ const BLOCK_8x4x8: BlockInfo = { width: 8, height: 4, bytes: 8 };
463
+ const BLOCK_8x8x16: BlockInfo = { width: 8, height: 8, bytes: 16 };
464
+ const BLOCK_10x10x16: BlockInfo = { width: 10, height: 10, bytes: 16 };
465
+ const BLOCK_12x12x16: BlockInfo = { width: 12, height: 12, bytes: 16 };
466
+
467
+ // Map of GL internal formats to their corresponding block info
468
+ export const blockInfoMap: { [key: number]: BlockInfo } = {
469
+ // S3TC / DXTn (WEBGL_compressed_texture_s3tc, sRGB variants)
470
+ 0x83f0: BLOCK_4x4x8, // COMPRESSED_RGB_S3TC_DXT1_EXT
471
+ 0x83f1: BLOCK_4x4x8, // COMPRESSED_RGBA_S3TC_DXT1_EXT
472
+ 0x83f2: BLOCK_4x4x16, // COMPRESSED_RGBA_S3TC_DXT3_EXT
473
+ 0x83f3: BLOCK_4x4x16, // COMPRESSED_RGBA_S3TC_DXT5_EXT
474
+
475
+ // ETC1 / ETC2 / EAC
476
+ 0x8d64: BLOCK_4x4x8, // COMPRESSED_RGB_ETC1_WEBGL
477
+ 0x9274: BLOCK_4x4x8, // COMPRESSED_RGB8_ETC2
478
+ 0x9275: BLOCK_4x4x8, // COMPRESSED_SRGB8_ETC2
479
+ 0x9278: BLOCK_4x4x16, // COMPRESSED_RGBA8_ETC2_EAC
480
+ 0x9279: BLOCK_4x4x16, // COMPRESSED_SRGB8_ALPHA8_ETC2_EAC
481
+
482
+ // PVRTC (WEBGL_compressed_texture_pvrtc)
483
+ 0x8c00: BLOCK_4x4x8, // COMPRESSED_RGB_PVRTC_4BPPV1_IMG
484
+ 0x8c02: BLOCK_4x4x8, // COMPRESSED_RGBA_PVRTC_4BPPV1_IMG
485
+ 0x8c01: BLOCK_8x4x8, // COMPRESSED_RGB_PVRTC_2BPPV1_IMG
486
+ 0x8c03: BLOCK_8x4x8,
487
+
488
+ // ASTC (WEBGL_compressed_texture_astc)
489
+ 0x93b0: BLOCK_4x4x16, // COMPRESSED_RGBA_ASTC_4x4_KHR
490
+ 0x93d0: BLOCK_4x4x16, // COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR
491
+ 0x93b1: BLOCK_5x5x16, // 5x5
492
+ 0x93d1: BLOCK_5x5x16,
493
+ 0x93b2: BLOCK_6x6x16, // 6x6
494
+ 0x93d2: BLOCK_6x6x16,
495
+ 0x93b3: BLOCK_8x8x16, // 8x8
496
+ 0x93d3: BLOCK_8x8x16,
497
+ 0x93b4: BLOCK_10x10x16, // 10x10
498
+ 0x93d4: BLOCK_10x10x16,
499
+ 0x93b5: BLOCK_12x12x16, // 12x12
500
+ 0x93d5: BLOCK_12x12x16,
501
+ };
502
+
503
+ export const uploadCompressedTexture: Record<
504
+ string,
505
+ UploadCompressedTextureFunction
506
+ > = {
507
+ ktx: uploadKTX,
508
+ pvr: uploadPVR,
509
+ astc: uploadASTC,
510
+ };
@@ -62,14 +62,14 @@ export class WebPlatform extends Platform {
62
62
  setTimeout(() => requestAnimationFrame(runLoop), 16.666666666666668);
63
63
  }
64
64
 
65
- if (!isIdle) {
65
+ if (isIdle === false) {
66
66
  stage.shManager.cleanup();
67
67
  stage.eventBus.emit('idle');
68
68
  isIdle = true;
69
69
  }
70
70
 
71
71
  if (stage.txMemManager.checkCleanup() === true) {
72
- stage.txMemManager.cleanup(false);
72
+ stage.txMemManager.cleanup();
73
73
  }
74
74
 
75
75
  stage.flushFrameEvents();
@@ -35,6 +35,7 @@ export abstract class CoreContextTexture {
35
35
  }
36
36
 
37
37
  abstract load(): Promise<void>;
38
+ abstract release(): void;
38
39
  abstract free(): void;
39
40
 
40
41
  get renderable(): boolean {
@@ -53,6 +53,7 @@ export interface QuadOptions {
53
53
  rtt: boolean;
54
54
  parentHasRenderTexture: boolean;
55
55
  framebufferDimensions: Dimensions | null;
56
+ time?: number | null;
56
57
  }
57
58
 
58
59
  export interface CoreRendererOptions {
@@ -70,7 +71,7 @@ export interface BufferInfo {
70
71
  export abstract class CoreRenderer {
71
72
  public options: CoreRendererOptions;
72
73
  public mode: 'webgl' | 'canvas' | undefined;
73
-
74
+ defaultTextureCoords: TextureCoords | undefined = undefined;
74
75
  readonly stage: Stage;
75
76
 
76
77
  //// Core Managers
@@ -106,5 +107,5 @@ export abstract class CoreRenderer {
106
107
  abstract getQuadCount(): number | null;
107
108
  abstract updateViewport(): void;
108
109
  abstract updateClearColor(color: number): void;
109
- getTextureCoords?(node: CoreNode): TextureCoords;
110
+ getTextureCoords?(node: CoreNode): TextureCoords | undefined;
110
111
  }
@@ -75,6 +75,11 @@ export interface CoreShaderType<Props extends object = any> {
75
75
  * used for making a cache key to check for reusability, currently only used for webgl ShaderTypes but might be needed for other types of renderer
76
76
  */
77
77
  getCacheMarkers?: (props: Props) => string;
78
+ /**
79
+ * timer that updates every loop, by default uses the stage elapsed time If you want to do a special calculation you can define a function.
80
+ * When you calculate your own value you can use the Stage timing values deltaTime, lastFrameTime, and currentFrameTime;
81
+ */
82
+ time?: boolean | ((stage: Stage) => number);
78
83
  }
79
84
 
80
85
  /**
@@ -89,6 +94,7 @@ export class CoreShaderNode<Props extends object = Record<string, unknown>> {
89
94
  readonly resolvedProps: Props | undefined = undefined;
90
95
  protected definedProps: Props | undefined = undefined;
91
96
  protected node: CoreNode | null = null;
97
+ readonly time: CoreShaderType['time'] = undefined;
92
98
  update: (() => void) | undefined = undefined;
93
99
 
94
100
  constructor(
@@ -99,6 +105,7 @@ export class CoreShaderNode<Props extends object = Record<string, unknown>> {
99
105
  ) {
100
106
  this.stage = stage;
101
107
  this.shaderType = type;
108
+ this.time = type.time;
102
109
 
103
110
  if (props !== undefined) {
104
111
  /**
@@ -50,9 +50,13 @@ export class CanvasTexture extends CoreContextTexture {
50
50
  }
51
51
  }
52
52
 
53
- free(): void {
53
+ release(): void {
54
54
  this.image = undefined;
55
55
  this.tintCache = undefined;
56
+ }
57
+
58
+ free(): void {
59
+ this.release();
56
60
  this.textureSource.setState('freed');
57
61
  this.setTextureMemUse(0);
58
62
  this.textureSource.freeTextureData();
@@ -20,6 +20,7 @@
20
20
  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
+ import type { Bound } from '../../lib/utils.js';
23
24
  import type { RenderTexture } from '../../textures/RenderTexture.js';
24
25
  import { WebGlCtxTexture } from './WebGlCtxTexture.js';
25
26
 
@@ -28,6 +29,13 @@ export class WebGlCtxRenderTexture extends WebGlCtxTexture {
28
29
 
29
30
  public framebuffer: WebGLFramebuffer | null = null;
30
31
 
32
+ override txCoords: Bound = {
33
+ x1: 0,
34
+ y1: 1,
35
+ x2: 1,
36
+ y2: 0,
37
+ };
38
+
31
39
  constructor(
32
40
  glw: WebGlContextWrapper,
33
41
  memManager: TextureMemoryManager,