@lightningjs/renderer 3.0.0-beta2 → 3.0.0-beta20

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 (551) hide show
  1. package/README.md +16 -26
  2. package/dist/exports/canvas.d.ts +1 -1
  3. package/dist/exports/canvas.js +1 -1
  4. package/dist/exports/canvas.js.map +1 -1
  5. package/dist/exports/index.d.ts +2 -5
  6. package/dist/exports/index.js +1 -5
  7. package/dist/exports/index.js.map +1 -1
  8. package/dist/exports/utils.d.ts +2 -1
  9. package/dist/exports/utils.js +2 -1
  10. package/dist/exports/utils.js.map +1 -1
  11. package/dist/exports/webgl.d.ts +2 -1
  12. package/dist/exports/webgl.js +2 -1
  13. package/dist/exports/webgl.js.map +1 -1
  14. package/dist/src/common/CommonTypes.d.ts +13 -2
  15. package/dist/src/core/Autosizer.d.ts +35 -0
  16. package/dist/src/core/Autosizer.js +196 -0
  17. package/dist/src/core/Autosizer.js.map +1 -0
  18. package/dist/src/core/CoreNode.d.ts +73 -95
  19. package/dist/src/core/CoreNode.js +599 -461
  20. package/dist/src/core/CoreNode.js.map +1 -1
  21. package/dist/src/core/CoreShaderManager.d.ts +3 -5
  22. package/dist/src/core/CoreShaderManager.js.map +1 -1
  23. package/dist/src/core/CoreTextNode.d.ts +74 -87
  24. package/dist/src/core/CoreTextNode.js +357 -232
  25. package/dist/src/core/CoreTextNode.js.map +1 -1
  26. package/dist/src/core/CoreTextureManager.d.ts +25 -13
  27. package/dist/src/core/CoreTextureManager.js +80 -104
  28. package/dist/src/core/CoreTextureManager.js.map +1 -1
  29. package/dist/src/core/Stage.d.ts +92 -33
  30. package/dist/src/core/Stage.js +313 -151
  31. package/dist/src/core/Stage.js.map +1 -1
  32. package/dist/src/core/TextureError.d.ts +11 -0
  33. package/dist/src/core/TextureError.js +37 -0
  34. package/dist/src/core/TextureError.js.map +1 -0
  35. package/dist/src/core/TextureMemoryManager.d.ts +11 -4
  36. package/dist/src/core/TextureMemoryManager.js +128 -109
  37. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  38. package/dist/src/core/animations/CoreAnimation.d.ts +3 -3
  39. package/dist/src/core/animations/CoreAnimation.js +8 -3
  40. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  41. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
  42. package/dist/src/core/animations/CoreAnimationController.js +11 -4
  43. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  44. package/dist/src/core/lib/ImageWorker.js +1 -1
  45. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  46. package/dist/src/core/lib/WebGlContextWrapper.d.ts +41 -3
  47. package/dist/src/core/lib/WebGlContextWrapper.js +104 -27
  48. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  49. package/dist/src/core/lib/collectionUtils.d.ts +5 -0
  50. package/dist/src/core/lib/collectionUtils.js +100 -0
  51. package/dist/src/core/lib/collectionUtils.js.map +1 -0
  52. package/dist/src/core/lib/colorCache.d.ts +1 -0
  53. package/dist/src/core/lib/colorCache.js +19 -0
  54. package/dist/src/core/lib/colorCache.js.map +1 -0
  55. package/dist/src/core/lib/colorParser.d.ts +21 -0
  56. package/dist/src/core/lib/colorParser.js +72 -0
  57. package/dist/src/core/lib/colorParser.js.map +1 -0
  58. package/dist/src/core/lib/textureCompression.d.ts +14 -2
  59. package/dist/src/core/lib/textureCompression.js +320 -67
  60. package/dist/src/core/lib/textureCompression.js.map +1 -1
  61. package/dist/src/core/lib/utils.d.ts +2 -0
  62. package/dist/src/core/lib/utils.js +22 -0
  63. package/dist/src/core/lib/utils.js.map +1 -1
  64. package/dist/src/core/lib/validateImageBitmap.d.ts +2 -1
  65. package/dist/src/core/lib/validateImageBitmap.js +4 -4
  66. package/dist/src/core/lib/validateImageBitmap.js.map +1 -1
  67. package/dist/src/core/platform.js +30 -5
  68. package/dist/src/core/platform.js.map +1 -1
  69. package/dist/src/core/platforms/Platform.d.ts +42 -0
  70. package/dist/src/{main-api/IRenderDriver.js → core/platforms/Platform.js} +4 -2
  71. package/dist/src/core/platforms/Platform.js.map +1 -0
  72. package/dist/src/core/platforms/web/WebPlatform.d.ts +10 -0
  73. package/dist/src/core/platforms/web/WebPlatform.js +87 -0
  74. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  75. package/dist/src/core/renderers/CoreContextTexture.d.ts +2 -1
  76. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  77. package/dist/src/core/renderers/CoreRenderer.d.ts +7 -2
  78. package/dist/src/core/renderers/CoreRenderer.js +1 -0
  79. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  80. package/dist/src/core/renderers/CoreShaderNode.d.ts +8 -1
  81. package/dist/src/core/renderers/CoreShaderNode.js +11 -0
  82. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
  83. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +2 -1
  84. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +11 -9
  85. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
  86. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +1 -2
  87. package/dist/src/core/renderers/canvas/CanvasRenderer.js +32 -59
  88. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  89. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +3 -5
  90. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  91. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +3 -2
  92. package/dist/src/core/renderers/canvas/CanvasTexture.js +17 -13
  93. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
  94. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +13 -0
  95. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +113 -192
  96. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
  97. package/dist/src/core/renderers/canvas/internal/ColorUtils.d.ts +0 -2
  98. package/dist/src/core/renderers/canvas/internal/ColorUtils.js +0 -14
  99. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
  100. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js +3 -0
  101. package/dist/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.js.map +1 -1
  102. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +18 -6
  103. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +86 -41
  104. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  105. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +1 -1
  106. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +53 -17
  107. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  108. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +2 -7
  109. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +21 -50
  110. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
  111. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -0
  112. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -6
  113. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  114. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +13 -0
  115. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -5
  116. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
  117. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +16 -6
  118. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +95 -49
  119. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  120. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +3 -2
  121. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +14 -5
  122. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -1
  123. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +5 -3
  124. package/dist/src/core/renderers/webgl/WebGlRenderer.js +141 -112
  125. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  126. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
  127. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  128. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +6 -3
  129. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +47 -18
  130. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  131. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +3 -6
  132. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js.map +1 -1
  133. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +0 -11
  134. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -1
  135. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +5 -10
  136. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
  137. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +5 -10
  138. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js.map +1 -1
  139. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +0 -12
  140. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -1
  141. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +1 -1
  142. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +1 -1
  143. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +1 -1
  144. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +1 -1
  145. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +5 -5
  146. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +1 -1
  147. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +24 -19
  148. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
  149. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +1 -0
  150. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +32 -5
  151. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -1
  152. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +1 -1
  153. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +5 -5
  154. package/dist/src/core/shaders/canvas/Border.js +5 -5
  155. package/dist/src/core/shaders/canvas/Border.js.map +1 -1
  156. package/dist/src/core/shaders/canvas/HolePunch.js +3 -3
  157. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
  158. package/dist/src/core/shaders/canvas/LinearGradient.js +7 -5
  159. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  160. package/dist/src/core/shaders/canvas/RadialGradient.js +14 -12
  161. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
  162. package/dist/src/core/shaders/canvas/Rounded.js +1 -1
  163. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
  164. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +14 -6
  165. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
  166. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +10 -8
  167. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
  168. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +7 -5
  169. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
  170. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +2 -2
  171. package/dist/src/core/shaders/templates/BorderTemplate.js +11 -11
  172. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
  173. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
  174. package/dist/src/core/shaders/templates/HolePunchTemplate.js +3 -3
  175. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
  176. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
  177. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -2
  178. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
  179. package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -1
  180. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
  181. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
  182. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +1 -1
  183. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
  184. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
  185. package/dist/src/core/shaders/{templates/shaderUtils.d.ts → utils.d.ts} +1 -1
  186. package/dist/src/core/shaders/{templates/shaderUtils.js → utils.js} +2 -2
  187. package/dist/src/core/shaders/utils.js.map +1 -0
  188. package/dist/src/core/shaders/webgl/Border.js +57 -34
  189. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  190. package/dist/src/core/shaders/webgl/Default.js +6 -7
  191. package/dist/src/core/shaders/webgl/Default.js.map +1 -1
  192. package/dist/src/core/shaders/webgl/HolePunch.js +4 -3
  193. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
  194. package/dist/src/core/shaders/webgl/LinearGradient.js +33 -8
  195. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  196. package/dist/src/core/shaders/webgl/RadialGradient.js +56 -32
  197. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
  198. package/dist/src/core/shaders/webgl/Rounded.js +4 -2
  199. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
  200. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +81 -37
  201. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  202. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +93 -42
  203. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  204. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +3 -2
  205. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
  206. package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
  207. package/dist/src/core/shaders/webgl/SdfShader.js +7 -17
  208. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
  209. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  210. package/dist/src/core/text-rendering/CanvasFontHandler.js +224 -0
  211. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  212. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  213. package/dist/src/core/text-rendering/CanvasTextRenderer.js +157 -0
  214. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  215. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +182 -0
  216. package/dist/src/core/text-rendering/SdfFontHandler.js +391 -0
  217. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  218. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
  219. package/dist/src/core/text-rendering/SdfTextRenderer.js +311 -0
  220. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  221. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
  222. package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
  223. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  224. package/dist/src/core/text-rendering/TextRenderer.d.ts +383 -0
  225. package/dist/src/{main-api/ICoreDriver.js → core/text-rendering/TextRenderer.js} +1 -1
  226. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  227. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
  228. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  229. package/dist/src/core/text-rendering/Utils.js +84 -0
  230. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  231. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +2 -2
  232. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  233. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -6
  234. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  235. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +3 -2
  236. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +35 -38
  237. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  238. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +4 -1
  239. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  240. package/dist/src/core/textures/ColorTexture.d.ts +1 -1
  241. package/dist/src/core/textures/ColorTexture.js +3 -4
  242. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  243. package/dist/src/core/textures/ImageTexture.d.ts +11 -4
  244. package/dist/src/core/textures/ImageTexture.js +31 -40
  245. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  246. package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
  247. package/dist/src/core/textures/NoiseTexture.js +8 -8
  248. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  249. package/dist/src/core/textures/RenderTexture.d.ts +7 -7
  250. package/dist/src/core/textures/RenderTexture.js +12 -12
  251. package/dist/src/core/textures/RenderTexture.js.map +1 -1
  252. package/dist/src/core/textures/SubTexture.d.ts +6 -8
  253. package/dist/src/core/textures/SubTexture.js +19 -37
  254. package/dist/src/core/textures/SubTexture.js.map +1 -1
  255. package/dist/src/core/textures/Texture.d.ts +87 -10
  256. package/dist/src/core/textures/Texture.js +160 -17
  257. package/dist/src/core/textures/Texture.js.map +1 -1
  258. package/dist/src/core/utils.d.ts +3 -2
  259. package/dist/src/core/utils.js +1 -1
  260. package/dist/src/core/utils.js.map +1 -1
  261. package/dist/src/main-api/INode.d.ts +2 -2
  262. package/dist/src/main-api/Inspector.d.ts +130 -1
  263. package/dist/src/main-api/Inspector.js +341 -27
  264. package/dist/src/main-api/Inspector.js.map +1 -1
  265. package/dist/src/main-api/Renderer.d.ts +285 -82
  266. package/dist/src/main-api/Renderer.js +221 -76
  267. package/dist/src/main-api/Renderer.js.map +1 -1
  268. package/dist/src/utils.d.ts +1 -6
  269. package/dist/src/utils.js +2 -9
  270. package/dist/src/utils.js.map +1 -1
  271. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  272. package/dist/tsconfig.tsbuildinfo +1 -0
  273. package/exports/canvas.ts +1 -1
  274. package/exports/index.ts +2 -8
  275. package/exports/utils.ts +7 -1
  276. package/exports/webgl.ts +3 -1
  277. package/package.json +15 -17
  278. package/src/common/CommonTypes.ts +18 -2
  279. package/src/core/CoreNode.test.ts +63 -15
  280. package/src/core/CoreNode.ts +709 -582
  281. package/src/core/CoreShaderManager.ts +5 -10
  282. package/src/core/CoreTextNode.ts +424 -286
  283. package/src/core/CoreTextureManager.ts +110 -130
  284. package/src/core/Stage.ts +394 -195
  285. package/src/core/TextureError.ts +46 -0
  286. package/src/core/TextureMemoryManager.ts +164 -141
  287. package/src/core/animations/CoreAnimation.ts +15 -9
  288. package/src/core/animations/CoreAnimationController.ts +13 -4
  289. package/src/core/lib/ImageWorker.ts +7 -1
  290. package/src/core/lib/WebGlContextWrapper.ts +126 -78
  291. package/src/core/lib/collectionUtils.ts +118 -0
  292. package/src/core/lib/colorCache.ts +20 -0
  293. package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +2 -2
  294. package/src/core/lib/textureCompression.ts +433 -75
  295. package/src/core/lib/utils.ts +26 -0
  296. package/src/core/lib/validateImageBitmap.ts +17 -6
  297. package/src/core/platforms/Platform.ts +83 -0
  298. package/src/core/platforms/web/WebPlatform.ts +132 -0
  299. package/src/core/renderers/CoreContextTexture.ts +2 -1
  300. package/src/core/renderers/CoreRenderer.ts +7 -3
  301. package/src/core/renderers/CoreShaderNode.ts +18 -3
  302. package/src/core/renderers/canvas/CanvasRenderer.ts +48 -82
  303. package/src/core/renderers/canvas/CanvasShaderNode.ts +3 -6
  304. package/src/core/renderers/canvas/CanvasTexture.ts +22 -18
  305. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +18 -15
  306. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +50 -5
  307. package/src/core/renderers/webgl/WebGlCtxTexture.ts +124 -81
  308. package/src/core/renderers/webgl/WebGlRenderOp.ts +21 -12
  309. package/src/core/renderers/webgl/WebGlRenderer.ts +172 -137
  310. package/src/core/renderers/webgl/WebGlShaderNode.ts +2 -4
  311. package/src/core/renderers/webgl/WebGlShaderProgram.ts +58 -20
  312. package/src/core/shaders/canvas/Border.ts +5 -8
  313. package/src/core/shaders/canvas/HolePunch.ts +4 -11
  314. package/src/core/shaders/canvas/LinearGradient.ts +10 -8
  315. package/src/core/shaders/canvas/RadialGradient.ts +23 -37
  316. package/src/core/shaders/canvas/Rounded.ts +2 -2
  317. package/src/core/shaders/canvas/RoundedWithBorder.ts +20 -16
  318. package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +17 -17
  319. package/src/core/shaders/canvas/RoundedWithShadow.ts +10 -9
  320. package/src/core/shaders/templates/BorderTemplate.ts +12 -12
  321. package/src/core/shaders/templates/HolePunchTemplate.ts +5 -5
  322. package/src/core/shaders/templates/RadialGradientTemplate.ts +10 -8
  323. package/src/core/shaders/templates/RoundedTemplate.ts +1 -1
  324. package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -1
  325. package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +1 -1
  326. package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -1
  327. package/src/core/shaders/templates/ShadowTemplate.ts +1 -1
  328. package/src/core/shaders/{templates/shaderUtils.ts → utils.ts} +2 -3
  329. package/src/core/shaders/webgl/Border.ts +57 -37
  330. package/src/core/shaders/webgl/Default.ts +6 -7
  331. package/src/core/shaders/webgl/HolePunch.ts +4 -7
  332. package/src/core/shaders/webgl/LinearGradient.ts +33 -8
  333. package/src/core/shaders/webgl/RadialGradient.ts +58 -34
  334. package/src/core/shaders/webgl/Rounded.ts +4 -6
  335. package/src/core/shaders/webgl/RoundedWithBorder.ts +82 -44
  336. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +93 -50
  337. package/src/core/shaders/webgl/RoundedWithShadow.ts +3 -6
  338. package/src/core/shaders/webgl/SdfShader.ts +7 -19
  339. package/src/core/text-rendering/CanvasFontHandler.ts +304 -0
  340. package/src/core/text-rendering/CanvasTextRenderer.ts +255 -0
  341. package/src/core/text-rendering/SdfFontHandler.ts +591 -0
  342. package/src/core/text-rendering/SdfTextRenderer.ts +411 -0
  343. package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
  344. package/src/core/text-rendering/TextRenderer.ts +444 -0
  345. package/src/core/text-rendering/Utils.ts +99 -0
  346. package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +453 -0
  347. package/src/core/textures/ColorTexture.ts +7 -5
  348. package/src/core/textures/ImageTexture.ts +78 -66
  349. package/src/core/textures/NoiseTexture.ts +14 -12
  350. package/src/core/textures/RenderTexture.ts +18 -16
  351. package/src/core/textures/SubTexture.ts +25 -46
  352. package/src/core/textures/Texture.ts +207 -24
  353. package/src/core/utils.ts +9 -7
  354. package/src/main-api/INode.ts +4 -3
  355. package/src/main-api/Inspector.ts +571 -33
  356. package/src/main-api/Renderer.ts +505 -139
  357. package/src/utils.ts +10 -10
  358. package/dist/exports/core-api.d.ts +0 -74
  359. package/dist/exports/core-api.js +0 -96
  360. package/dist/exports/core-api.js.map +0 -1
  361. package/dist/exports/main-api.d.ts +0 -30
  362. package/dist/exports/main-api.js +0 -45
  363. package/dist/exports/main-api.js.map +0 -1
  364. package/dist/src/core/CoreExtension.d.ts +0 -12
  365. package/dist/src/core/CoreExtension.js +0 -29
  366. package/dist/src/core/CoreExtension.js.map +0 -1
  367. package/dist/src/core/CoreStuff.d.ts +0 -1
  368. package/dist/src/core/CoreStuff.js +0 -138
  369. package/dist/src/core/CoreStuff.js.map +0 -1
  370. package/dist/src/core/CoreTexturizer.d.ts +0 -14
  371. package/dist/src/core/CoreTexturizer.js +0 -47
  372. package/dist/src/core/CoreTexturizer.js.map +0 -1
  373. package/dist/src/core/LngNode.d.ts +0 -736
  374. package/dist/src/core/LngNode.js +0 -1174
  375. package/dist/src/core/LngNode.js.map +0 -1
  376. package/dist/src/core/Matrix2DContext.d.ts +0 -15
  377. package/dist/src/core/Matrix2DContext.js +0 -45
  378. package/dist/src/core/Matrix2DContext.js.map +0 -1
  379. package/dist/src/core/ShaderNode.d.ts +0 -10
  380. package/dist/src/core/ShaderNode.js +0 -30
  381. package/dist/src/core/ShaderNode.js.map +0 -1
  382. package/dist/src/core/TextNode.d.ts +0 -103
  383. package/dist/src/core/TextNode.js +0 -331
  384. package/dist/src/core/TextNode.js.map +0 -1
  385. package/dist/src/core/lib/Coords.d.ts +0 -14
  386. package/dist/src/core/lib/Coords.js +0 -55
  387. package/dist/src/core/lib/Coords.js.map +0 -1
  388. package/dist/src/core/lib/glm/common.d.ts +0 -162
  389. package/dist/src/core/lib/glm/common.js +0 -81
  390. package/dist/src/core/lib/glm/common.js.map +0 -1
  391. package/dist/src/core/lib/glm/index.d.ts +0 -11
  392. package/dist/src/core/lib/glm/index.js +0 -30
  393. package/dist/src/core/lib/glm/index.js.map +0 -1
  394. package/dist/src/core/lib/glm/mat2.d.ts +0 -219
  395. package/dist/src/core/lib/glm/mat2.js +0 -396
  396. package/dist/src/core/lib/glm/mat2.js.map +0 -1
  397. package/dist/src/core/lib/glm/mat2d.d.ts +0 -237
  398. package/dist/src/core/lib/glm/mat2d.js +0 -442
  399. package/dist/src/core/lib/glm/mat2d.js.map +0 -1
  400. package/dist/src/core/lib/glm/mat3.d.ts +0 -283
  401. package/dist/src/core/lib/glm/mat3.js +0 -680
  402. package/dist/src/core/lib/glm/mat3.js.map +0 -1
  403. package/dist/src/core/lib/glm/mat4.d.ts +0 -550
  404. package/dist/src/core/lib/glm/mat4.js +0 -1802
  405. package/dist/src/core/lib/glm/mat4.js.map +0 -1
  406. package/dist/src/core/lib/glm/quat.d.ts +0 -363
  407. package/dist/src/core/lib/glm/quat.js +0 -693
  408. package/dist/src/core/lib/glm/quat.js.map +0 -1
  409. package/dist/src/core/lib/glm/quat2.d.ts +0 -356
  410. package/dist/src/core/lib/glm/quat2.js +0 -754
  411. package/dist/src/core/lib/glm/quat2.js.map +0 -1
  412. package/dist/src/core/lib/glm/vec2.d.ts +0 -365
  413. package/dist/src/core/lib/glm/vec2.js +0 -569
  414. package/dist/src/core/lib/glm/vec2.js.map +0 -1
  415. package/dist/src/core/lib/glm/vec3.d.ts +0 -406
  416. package/dist/src/core/lib/glm/vec3.js +0 -720
  417. package/dist/src/core/lib/glm/vec3.js.map +0 -1
  418. package/dist/src/core/lib/glm/vec4.d.ts +0 -330
  419. package/dist/src/core/lib/glm/vec4.js +0 -608
  420. package/dist/src/core/lib/glm/vec4.js.map +0 -1
  421. package/dist/src/core/renderers/CoreShaderManager.d.ts +0 -19
  422. package/dist/src/core/renderers/CoreShaderManager.js +0 -33
  423. package/dist/src/core/renderers/CoreShaderManager.js.map +0 -1
  424. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.d.ts +0 -27
  425. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js +0 -82
  426. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js.map +0 -1
  427. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.d.ts +0 -11
  428. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js +0 -34
  429. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js.map +0 -1
  430. package/dist/src/core/scene/Scene.d.ts +0 -59
  431. package/dist/src/core/scene/Scene.js +0 -106
  432. package/dist/src/core/scene/Scene.js.map +0 -1
  433. package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
  434. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.d.ts +0 -20
  435. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js +0 -55
  436. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js.map +0 -1
  437. package/dist/src/main-api/ICoreDriver.d.ts +0 -27
  438. package/dist/src/main-api/ICoreDriver.js.map +0 -1
  439. package/dist/src/main-api/IRenderDriver.d.ts +0 -20
  440. package/dist/src/main-api/IRenderDriver.js.map +0 -1
  441. package/dist/src/main-api/IShaderController.d.ts +0 -14
  442. package/dist/src/main-api/IShaderController.js +0 -30
  443. package/dist/src/main-api/IShaderController.js.map +0 -1
  444. package/dist/src/main-api/IShaderNode.d.ts +0 -17
  445. package/dist/src/main-api/IShaderNode.js +0 -19
  446. package/dist/src/main-api/IShaderNode.js.map +0 -1
  447. package/dist/src/main-api/RendererMain.d.ts +0 -375
  448. package/dist/src/main-api/RendererMain.js +0 -365
  449. package/dist/src/main-api/RendererMain.js.map +0 -1
  450. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +0 -9
  451. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +0 -38
  452. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +0 -1
  453. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +0 -56
  454. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +0 -101
  455. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +0 -1
  456. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +0 -32
  457. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js +0 -28
  458. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +0 -1
  459. package/dist/src/render-drivers/main/MainCoreDriver.d.ts +0 -24
  460. package/dist/src/render-drivers/main/MainCoreDriver.js +0 -118
  461. package/dist/src/render-drivers/main/MainCoreDriver.js.map +0 -1
  462. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +0 -99
  463. package/dist/src/render-drivers/main/MainOnlyNode.js +0 -396
  464. package/dist/src/render-drivers/main/MainOnlyNode.js.map +0 -1
  465. package/dist/src/render-drivers/main/MainOnlyShaderController.d.ts +0 -6
  466. package/dist/src/render-drivers/main/MainOnlyShaderController.js +0 -15
  467. package/dist/src/render-drivers/main/MainOnlyShaderController.js.map +0 -1
  468. package/dist/src/render-drivers/main/MainOnlyShaderNode.d.ts +0 -7
  469. package/dist/src/render-drivers/main/MainOnlyShaderNode.js +0 -34
  470. package/dist/src/render-drivers/main/MainOnlyShaderNode.js.map +0 -1
  471. package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +0 -47
  472. package/dist/src/render-drivers/main/MainOnlyTextNode.js +0 -205
  473. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +0 -1
  474. package/dist/src/render-drivers/main/MainRenderDriver.d.ts +0 -17
  475. package/dist/src/render-drivers/main/MainRenderDriver.js +0 -88
  476. package/dist/src/render-drivers/main/MainRenderDriver.js.map +0 -1
  477. package/dist/src/render-drivers/threadx/NodeStruct.d.ts +0 -90
  478. package/dist/src/render-drivers/threadx/NodeStruct.js +0 -281
  479. package/dist/src/render-drivers/threadx/NodeStruct.js.map +0 -1
  480. package/dist/src/render-drivers/threadx/SharedNode.d.ts +0 -39
  481. package/dist/src/render-drivers/threadx/SharedNode.js +0 -60
  482. package/dist/src/render-drivers/threadx/SharedNode.js.map +0 -1
  483. package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +0 -44
  484. package/dist/src/render-drivers/threadx/TextNodeStruct.js +0 -201
  485. package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +0 -1
  486. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +0 -28
  487. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +0 -234
  488. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +0 -1
  489. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +0 -20
  490. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +0 -84
  491. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +0 -1
  492. package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +0 -44
  493. package/dist/src/render-drivers/threadx/ThreadXMainNode.js +0 -154
  494. package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +0 -1
  495. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.d.ts +0 -6
  496. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js +0 -16
  497. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js.map +0 -1
  498. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.d.ts +0 -7
  499. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js +0 -15
  500. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js.map +0 -1
  501. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +0 -28
  502. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +0 -55
  503. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +0 -1
  504. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.d.ts +0 -21
  505. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js +0 -198
  506. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js.map +0 -1
  507. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +0 -70
  508. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +0 -32
  509. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +0 -1
  510. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +0 -19
  511. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +0 -177
  512. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +0 -1
  513. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +0 -27
  514. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +0 -108
  515. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +0 -1
  516. package/dist/src/render-drivers/threadx/worker/renderer.d.ts +0 -1
  517. package/dist/src/render-drivers/threadx/worker/renderer.js +0 -145
  518. package/dist/src/render-drivers/threadx/worker/renderer.js.map +0 -1
  519. package/dist/src/render-drivers/utils.d.ts +0 -12
  520. package/dist/src/render-drivers/utils.js +0 -69
  521. package/dist/src/render-drivers/utils.js.map +0 -1
  522. package/scripts/please-use-pnpm.js +0 -13
  523. package/src/core/platform.ts +0 -64
  524. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
  525. package/src/core/text-rendering/TextRenderingUtils.ts +0 -36
  526. package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
  527. package/src/core/text-rendering/TrFontManager.ts +0 -183
  528. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
  529. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
  530. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
  531. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
  532. package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
  533. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
  534. package/src/core/text-rendering/font-face-types/utils.ts +0 -39
  535. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -509
  536. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -815
  537. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -840
  538. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
  539. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
  540. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
  541. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +0 -32
  542. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
  543. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
  544. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +0 -38
  545. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -408
  546. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
  547. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
  548. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
  549. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
  550. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +0 -40
  551. package/src/core/text-rendering/renderers/TextRenderer.ts +0 -550
@@ -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,114 +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
+ }
184
+
185
+ glw.bindTexture(texture);
186
+
187
+ const { glInternalFormat, mipmaps, w, h } = data;
188
+ if (mipmaps === undefined) {
189
+ return;
190
+ }
69
191
 
70
- let offset = 64;
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
+ }
71
212
 
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;
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
+ }
75
249
 
76
- for (let i = 0; i < data.numberOfMipmapLevels; i++) {
77
- const imageSize = view.getUint32(offset);
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
- width: data.pixelWidth || 0,
89
- height: 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: Uint8Array[] = [];
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);
286
+
287
+ const blockWidth = blockInfo.width;
288
+ const blockHeight = blockInfo.height;
289
+ let w = width;
290
+ let h = height;
123
291
 
124
- let offset = 0;
125
- let width = data.pixelWidth || 0;
126
- let height = data.pixelHeight || 0;
292
+ for (let i = 0; i < mipmaps!.length; i++) {
293
+ let view = new Uint8Array(mipmaps![i]!);
127
294
 
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,
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)}`,
134
337
  );
338
+ }
339
+
340
+ const height = view.getInt32(24, true);
341
+ const width = view.getInt32(28, true);
135
342
 
136
- mipmaps.push(view);
137
- offset += level;
138
- width = width >> 1;
139
- height = height >> 1;
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
+ }
140
399
  }
141
400
 
142
401
  return {
143
402
  data: {
144
- glInternalFormat: pvrFormatEtc1,
145
- mipmaps: mipmaps,
146
- width: data.pixelWidth || 0,
147
- height: data.pixelHeight || 0,
403
+ blockInfo: blockInfoMap[internalFormat]!,
404
+ glInternalFormat: internalFormat,
405
+ mipmaps,
406
+ w: width,
407
+ h: height,
148
408
  type: 'pvr',
149
409
  },
150
410
  premultiplyAlpha: false,
151
411
  };
152
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
+ };
@@ -255,6 +255,10 @@ export function boundLargeThanBound(bound1: Bound, bound2: Bound) {
255
255
  );
256
256
  }
257
257
 
258
+ export function pointInBound(x: number, y: number, bound: Bound) {
259
+ return !(x < bound.x1 || x > bound.x2 || y < bound.y1 || y > bound.y2);
260
+ }
261
+
258
262
  export function isBoundPositive(bound: Bound): boolean {
259
263
  return bound.x1 < bound.x2 && bound.y1 < bound.y2;
260
264
  }
@@ -384,3 +388,25 @@ export function dataURIToBlob(dataURI: string): Blob {
384
388
  }
385
389
  return new Blob(byteArrays, { type });
386
390
  }
391
+
392
+ export function fetchJson(
393
+ url: string,
394
+ responseType: XMLHttpRequestResponseType = '',
395
+ ): Promise<unknown> {
396
+ return new Promise((resolve, reject) => {
397
+ const xhr = new XMLHttpRequest();
398
+ xhr.responseType = responseType;
399
+ xhr.onreadystatechange = function () {
400
+ if (xhr.readyState == XMLHttpRequest.DONE) {
401
+ // On most devices like WebOS and Tizen, the file protocol returns 0 while http(s) protocol returns 200
402
+ if (xhr.status === 0 || xhr.status === 200) {
403
+ resolve(xhr.response);
404
+ } else {
405
+ reject(xhr.statusText);
406
+ }
407
+ }
408
+ };
409
+ xhr.open('GET', url, true);
410
+ xhr.send(null);
411
+ });
412
+ }
@@ -1,10 +1,14 @@
1
+ import type { Platform } from '../platforms/Platform.js';
2
+
1
3
  export interface CreateImageBitmapSupport {
2
4
  basic: boolean; // Supports createImageBitmap(image)
3
5
  options: boolean; // Supports createImageBitmap(image, options)
4
6
  full: boolean; // Supports createImageBitmap(image, sx, sy, sw, sh, options)
5
7
  }
6
8
 
7
- export async function validateCreateImageBitmap(): Promise<CreateImageBitmapSupport> {
9
+ export async function validateCreateImageBitmap(
10
+ platform: Platform,
11
+ ): Promise<CreateImageBitmapSupport> {
8
12
  // Test if createImageBitmap is supported using a simple 1x1 PNG image
9
13
  // prettier-ignore
10
14
  const pngBinaryData = new Uint8Array([
@@ -47,14 +51,14 @@ export async function validateCreateImageBitmap(): Promise<CreateImageBitmapSupp
47
51
 
48
52
  // Test basic createImageBitmap support
49
53
  const blob = new Blob([pngBinaryData], { type: 'image/png' });
50
- const bitmap = await createImageBitmap(blob);
54
+ const bitmap = await platform.createImageBitmap(blob);
51
55
  bitmap.close?.();
52
56
  support.basic = true;
53
57
 
54
58
  // Test createImageBitmap with options support
55
59
  try {
56
60
  const options = { premultiplyAlpha: 'none' as const };
57
- const bitmapWithOptions = await createImageBitmap(blob, options);
61
+ const bitmapWithOptions = await platform.createImageBitmap(blob, options);
58
62
  bitmapWithOptions.close?.();
59
63
  support.options = true;
60
64
  } catch (e) {
@@ -63,9 +67,16 @@ export async function validateCreateImageBitmap(): Promise<CreateImageBitmapSupp
63
67
 
64
68
  // Test createImageBitmap with full options support
65
69
  try {
66
- const bitmapWithFullOptions = await createImageBitmap(blob, 0, 0, 1, 1, {
67
- premultiplyAlpha: 'none',
68
- });
70
+ const bitmapWithFullOptions = await platform.createImageBitmap(
71
+ blob,
72
+ 0,
73
+ 0,
74
+ 1,
75
+ 1,
76
+ {
77
+ premultiplyAlpha: 'none',
78
+ },
79
+ );
69
80
  bitmapWithFullOptions.close?.();
70
81
  support.full = true;
71
82
  } catch (e) {