@lightningjs/renderer 2.8.0 → 2.9.0-beta2

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 (269) hide show
  1. package/README.md +7 -4
  2. package/dist/src/common/EventEmitter.js.map +1 -1
  3. package/dist/src/core/CoreNode.js.map +1 -1
  4. package/dist/src/core/CoreShaderManager.js.map +1 -1
  5. package/dist/src/core/CoreTextNode.js.map +1 -1
  6. package/dist/src/core/CoreTextureManager.d.ts +13 -1
  7. package/dist/src/core/CoreTextureManager.js +163 -7
  8. package/dist/src/core/CoreTextureManager.js.map +1 -1
  9. package/dist/src/core/Stage.js +1 -1
  10. package/dist/src/core/Stage.js.map +1 -1
  11. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  12. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  13. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  14. package/dist/src/core/lib/ContextSpy.js.map +1 -1
  15. package/dist/src/core/lib/ImageWorker.d.ts +2 -1
  16. package/dist/src/core/lib/ImageWorker.js +40 -11
  17. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  18. package/dist/src/core/lib/Matrix3d.js.map +1 -1
  19. package/dist/src/core/lib/RenderCoords.js.map +1 -1
  20. package/dist/src/core/lib/WebGlContextWrapper.d.ts +10 -0
  21. package/dist/src/core/lib/WebGlContextWrapper.js +15 -0
  22. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  23. package/dist/src/core/lib/textureCompression.js.map +1 -1
  24. package/dist/src/core/lib/utils.js.map +1 -1
  25. package/dist/src/core/platform.js.map +1 -1
  26. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +10 -5
  27. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -1
  28. package/dist/src/core/renderers/canvas/CanvasCoreTexture.d.ts +3 -3
  29. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js +2 -2
  30. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
  31. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +1 -0
  32. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +38 -0
  33. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
  34. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
  35. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +1 -1
  36. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +12 -13
  37. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  38. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +9 -3
  39. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +1 -1
  40. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +4 -4
  41. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  42. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +6 -1
  43. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
  44. package/dist/src/core/renderers/webgl/internal/RendererUtils.js +6 -4
  45. package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
  46. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +4 -3
  47. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
  48. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -1
  49. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
  50. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -1
  51. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +1 -1
  52. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
  53. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -1
  54. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +1 -1
  55. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
  56. package/dist/src/core/text-rendering/TrFontManager.js.map +1 -1
  57. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +3 -4
  58. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  59. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +1 -1
  60. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +1 -1
  61. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +1 -1
  62. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +1 -2
  63. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
  64. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  65. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +4 -4
  66. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  67. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +1 -1
  68. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +1 -1
  69. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +1 -1
  70. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
  71. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +1 -1
  72. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +1 -1
  73. package/dist/src/core/text-rendering/renderers/TextRenderer.js +1 -1
  74. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  75. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  76. package/dist/src/core/textures/ImageTexture.d.ts +8 -0
  77. package/dist/src/core/textures/ImageTexture.js +55 -39
  78. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  79. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  80. package/dist/src/core/textures/SubTexture.js.map +1 -1
  81. package/dist/src/core/textures/Texture.js.map +1 -1
  82. package/dist/src/core/utils.d.ts +1 -1
  83. package/dist/src/core/utils.js.map +1 -1
  84. package/dist/src/main-api/DynamicShaderController.js.map +1 -1
  85. package/dist/src/main-api/Inspector.js +1 -1
  86. package/dist/src/main-api/Inspector.js.map +1 -1
  87. package/dist/src/main-api/Renderer.js.map +1 -1
  88. package/dist/src/main-api/ShaderController.js.map +1 -1
  89. package/dist/src/main-api/utils.js.map +1 -1
  90. package/dist/src/utils.js.map +1 -1
  91. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  92. package/package.json +10 -11
  93. package/src/core/CoreTextureManager.ts +188 -10
  94. package/src/core/lib/ImageWorker.ts +63 -11
  95. package/src/core/lib/WebGlContextWrapper.ts +16 -0
  96. package/src/core/renderers/canvas/CanvasCoreRenderer.ts +15 -5
  97. package/src/core/renderers/canvas/CanvasCoreTexture.ts +11 -5
  98. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +93 -0
  99. package/src/core/renderers/webgl/WebGlCoreCtxTexture.ts +12 -19
  100. package/src/core/renderers/webgl/WebGlCoreRenderOp.ts +12 -5
  101. package/src/core/renderers/webgl/WebGlCoreShader.ts +7 -1
  102. package/src/core/renderers/webgl/internal/RendererUtils.ts +5 -3
  103. package/src/core/renderers/webgl/internal/ShaderUtils.ts +9 -3
  104. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +6 -4
  105. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +3 -4
  106. package/src/core/textures/ImageTexture.ts +82 -45
  107. package/src/main-api/Inspector.ts +1 -1
  108. package/dist/exports/core-api.d.ts +0 -74
  109. package/dist/exports/core-api.js +0 -96
  110. package/dist/exports/core-api.js.map +0 -1
  111. package/dist/exports/main-api.d.ts +0 -30
  112. package/dist/exports/main-api.js +0 -45
  113. package/dist/exports/main-api.js.map +0 -1
  114. package/dist/src/core/CoreExtension.d.ts +0 -12
  115. package/dist/src/core/CoreExtension.js +0 -29
  116. package/dist/src/core/CoreExtension.js.map +0 -1
  117. package/dist/src/core/CoreStuff.d.ts +0 -1
  118. package/dist/src/core/CoreStuff.js +0 -138
  119. package/dist/src/core/CoreStuff.js.map +0 -1
  120. package/dist/src/core/LngNode.d.ts +0 -736
  121. package/dist/src/core/LngNode.js +0 -1174
  122. package/dist/src/core/LngNode.js.map +0 -1
  123. package/dist/src/core/Matrix2DContext.d.ts +0 -15
  124. package/dist/src/core/Matrix2DContext.js +0 -45
  125. package/dist/src/core/Matrix2DContext.js.map +0 -1
  126. package/dist/src/core/ShaderNode.d.ts +0 -10
  127. package/dist/src/core/ShaderNode.js +0 -30
  128. package/dist/src/core/ShaderNode.js.map +0 -1
  129. package/dist/src/core/TextNode.d.ts +0 -103
  130. package/dist/src/core/TextNode.js +0 -331
  131. package/dist/src/core/TextNode.js.map +0 -1
  132. package/dist/src/core/lib/Coords.d.ts +0 -14
  133. package/dist/src/core/lib/Coords.js +0 -55
  134. package/dist/src/core/lib/Coords.js.map +0 -1
  135. package/dist/src/core/lib/glm/common.d.ts +0 -162
  136. package/dist/src/core/lib/glm/common.js +0 -81
  137. package/dist/src/core/lib/glm/common.js.map +0 -1
  138. package/dist/src/core/lib/glm/index.d.ts +0 -11
  139. package/dist/src/core/lib/glm/index.js +0 -30
  140. package/dist/src/core/lib/glm/index.js.map +0 -1
  141. package/dist/src/core/lib/glm/mat2.d.ts +0 -219
  142. package/dist/src/core/lib/glm/mat2.js +0 -396
  143. package/dist/src/core/lib/glm/mat2.js.map +0 -1
  144. package/dist/src/core/lib/glm/mat2d.d.ts +0 -237
  145. package/dist/src/core/lib/glm/mat2d.js +0 -442
  146. package/dist/src/core/lib/glm/mat2d.js.map +0 -1
  147. package/dist/src/core/lib/glm/mat3.d.ts +0 -283
  148. package/dist/src/core/lib/glm/mat3.js +0 -680
  149. package/dist/src/core/lib/glm/mat3.js.map +0 -1
  150. package/dist/src/core/lib/glm/mat4.d.ts +0 -550
  151. package/dist/src/core/lib/glm/mat4.js +0 -1802
  152. package/dist/src/core/lib/glm/mat4.js.map +0 -1
  153. package/dist/src/core/lib/glm/quat.d.ts +0 -363
  154. package/dist/src/core/lib/glm/quat.js +0 -693
  155. package/dist/src/core/lib/glm/quat.js.map +0 -1
  156. package/dist/src/core/lib/glm/quat2.d.ts +0 -356
  157. package/dist/src/core/lib/glm/quat2.js +0 -754
  158. package/dist/src/core/lib/glm/quat2.js.map +0 -1
  159. package/dist/src/core/lib/glm/vec2.d.ts +0 -365
  160. package/dist/src/core/lib/glm/vec2.js +0 -569
  161. package/dist/src/core/lib/glm/vec2.js.map +0 -1
  162. package/dist/src/core/lib/glm/vec3.d.ts +0 -406
  163. package/dist/src/core/lib/glm/vec3.js +0 -720
  164. package/dist/src/core/lib/glm/vec3.js.map +0 -1
  165. package/dist/src/core/lib/glm/vec4.d.ts +0 -330
  166. package/dist/src/core/lib/glm/vec4.js +0 -608
  167. package/dist/src/core/lib/glm/vec4.js.map +0 -1
  168. package/dist/src/core/renderers/CoreShaderManager.d.ts +0 -19
  169. package/dist/src/core/renderers/CoreShaderManager.js +0 -33
  170. package/dist/src/core/renderers/CoreShaderManager.js.map +0 -1
  171. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.d.ts +0 -27
  172. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js +0 -82
  173. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js.map +0 -1
  174. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.d.ts +0 -11
  175. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js +0 -34
  176. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js.map +0 -1
  177. package/dist/src/core/scene/Scene.d.ts +0 -59
  178. package/dist/src/core/scene/Scene.js +0 -106
  179. package/dist/src/core/scene/Scene.js.map +0 -1
  180. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.d.ts +0 -20
  181. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js +0 -55
  182. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js.map +0 -1
  183. package/dist/src/main-api/ICoreDriver.d.ts +0 -27
  184. package/dist/src/main-api/ICoreDriver.js +0 -20
  185. package/dist/src/main-api/ICoreDriver.js.map +0 -1
  186. package/dist/src/main-api/IRenderDriver.d.ts +0 -20
  187. package/dist/src/main-api/IRenderDriver.js +0 -20
  188. package/dist/src/main-api/IRenderDriver.js.map +0 -1
  189. package/dist/src/main-api/IShaderController.d.ts +0 -14
  190. package/dist/src/main-api/IShaderController.js +0 -30
  191. package/dist/src/main-api/IShaderController.js.map +0 -1
  192. package/dist/src/main-api/IShaderNode.d.ts +0 -17
  193. package/dist/src/main-api/IShaderNode.js +0 -19
  194. package/dist/src/main-api/IShaderNode.js.map +0 -1
  195. package/dist/src/main-api/RendererMain.d.ts +0 -375
  196. package/dist/src/main-api/RendererMain.js +0 -365
  197. package/dist/src/main-api/RendererMain.js.map +0 -1
  198. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +0 -9
  199. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +0 -38
  200. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +0 -1
  201. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +0 -56
  202. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +0 -101
  203. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +0 -1
  204. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +0 -32
  205. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js +0 -28
  206. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +0 -1
  207. package/dist/src/render-drivers/main/MainCoreDriver.d.ts +0 -24
  208. package/dist/src/render-drivers/main/MainCoreDriver.js +0 -118
  209. package/dist/src/render-drivers/main/MainCoreDriver.js.map +0 -1
  210. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +0 -99
  211. package/dist/src/render-drivers/main/MainOnlyNode.js +0 -396
  212. package/dist/src/render-drivers/main/MainOnlyNode.js.map +0 -1
  213. package/dist/src/render-drivers/main/MainOnlyShaderController.d.ts +0 -6
  214. package/dist/src/render-drivers/main/MainOnlyShaderController.js +0 -15
  215. package/dist/src/render-drivers/main/MainOnlyShaderController.js.map +0 -1
  216. package/dist/src/render-drivers/main/MainOnlyShaderNode.d.ts +0 -7
  217. package/dist/src/render-drivers/main/MainOnlyShaderNode.js +0 -34
  218. package/dist/src/render-drivers/main/MainOnlyShaderNode.js.map +0 -1
  219. package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +0 -47
  220. package/dist/src/render-drivers/main/MainOnlyTextNode.js +0 -205
  221. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +0 -1
  222. package/dist/src/render-drivers/main/MainRenderDriver.d.ts +0 -17
  223. package/dist/src/render-drivers/main/MainRenderDriver.js +0 -88
  224. package/dist/src/render-drivers/main/MainRenderDriver.js.map +0 -1
  225. package/dist/src/render-drivers/threadx/NodeStruct.d.ts +0 -90
  226. package/dist/src/render-drivers/threadx/NodeStruct.js +0 -281
  227. package/dist/src/render-drivers/threadx/NodeStruct.js.map +0 -1
  228. package/dist/src/render-drivers/threadx/SharedNode.d.ts +0 -39
  229. package/dist/src/render-drivers/threadx/SharedNode.js +0 -60
  230. package/dist/src/render-drivers/threadx/SharedNode.js.map +0 -1
  231. package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +0 -44
  232. package/dist/src/render-drivers/threadx/TextNodeStruct.js +0 -201
  233. package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +0 -1
  234. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +0 -28
  235. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +0 -234
  236. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +0 -1
  237. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +0 -20
  238. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +0 -84
  239. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +0 -1
  240. package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +0 -44
  241. package/dist/src/render-drivers/threadx/ThreadXMainNode.js +0 -154
  242. package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +0 -1
  243. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.d.ts +0 -6
  244. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js +0 -16
  245. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js.map +0 -1
  246. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.d.ts +0 -7
  247. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js +0 -15
  248. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js.map +0 -1
  249. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +0 -28
  250. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +0 -55
  251. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +0 -1
  252. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.d.ts +0 -21
  253. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js +0 -198
  254. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js.map +0 -1
  255. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +0 -70
  256. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +0 -32
  257. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +0 -1
  258. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +0 -19
  259. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +0 -177
  260. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +0 -1
  261. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +0 -27
  262. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +0 -108
  263. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +0 -1
  264. package/dist/src/render-drivers/threadx/worker/renderer.d.ts +0 -1
  265. package/dist/src/render-drivers/threadx/worker/renderer.js +0 -145
  266. package/dist/src/render-drivers/threadx/worker/renderer.js.map +0 -1
  267. package/dist/src/render-drivers/utils.d.ts +0 -12
  268. package/dist/src/render-drivers/utils.js +0 -69
  269. package/dist/src/render-drivers/utils.js.map +0 -1
@@ -17,6 +17,7 @@
17
17
  * limitations under the License.
18
18
  */
19
19
 
20
+ import type { CreateImageBitmapSupport } from '../CoreTextureManager.js';
20
21
  import { type TextureData } from '../textures/Texture.js';
21
22
 
22
23
  type MessageCallback = [(value: any) => void, (reason: any) => void];
@@ -47,6 +48,9 @@ interface ImageWorkerMessage {
47
48
 
48
49
  /* eslint-disable */
49
50
  function createImageWorker() {
51
+ var supportsOptionsCreateImageBitmap = false;
52
+ var supportsFullCreateImageBitmap = false;
53
+
50
54
  function hasAlphaChannel(mimeType: string) {
51
55
  return mimeType.indexOf('image/png') !== -1;
52
56
  }
@@ -75,7 +79,12 @@ function createImageWorker() {
75
79
  ? premultiplyAlpha
76
80
  : hasAlphaChannel(blob.type);
77
81
 
78
- if (width !== null && height !== null) {
82
+ // createImageBitmap with crop and options
83
+ if (
84
+ supportsFullCreateImageBitmap === true &&
85
+ width !== null &&
86
+ height !== null
87
+ ) {
79
88
  createImageBitmap(blob, x || 0, y || 0, width, height, {
80
89
  premultiplyAlpha: withAlphaChannel ? 'premultiply' : 'none',
81
90
  colorSpaceConversion: 'none',
@@ -90,11 +99,25 @@ function createImageWorker() {
90
99
  return;
91
100
  }
92
101
 
93
- createImageBitmap(blob, {
94
- premultiplyAlpha: withAlphaChannel ? 'premultiply' : 'none',
95
- colorSpaceConversion: 'none',
96
- imageOrientation: 'none',
97
- })
102
+ // createImageBitmap without crop but with options
103
+ if (supportsOptionsCreateImageBitmap === true) {
104
+ createImageBitmap(blob, {
105
+ premultiplyAlpha: withAlphaChannel ? 'premultiply' : 'none',
106
+ colorSpaceConversion: 'none',
107
+ imageOrientation: 'none',
108
+ })
109
+ .then(function (data) {
110
+ resolve({ data, premultiplyAlpha: premultiplyAlpha });
111
+ })
112
+ .catch(function (error) {
113
+ reject(error);
114
+ });
115
+ return;
116
+ }
117
+
118
+ // Fallback for browsers that do not support createImageBitmap with options
119
+ // this is supported for Chrome v50 to v52/54 that doesn't support options
120
+ createImageBitmap(blob)
98
121
  .then(function (data) {
99
122
  resolve({ data, premultiplyAlpha: premultiplyAlpha });
100
123
  })
@@ -140,8 +163,14 @@ export class ImageWorkerManager {
140
163
  workerIndex = 0;
141
164
  nextId = 0;
142
165
 
143
- constructor(numImageWorkers: number) {
144
- this.workers = this.createWorkers(numImageWorkers);
166
+ constructor(
167
+ numImageWorkers: number,
168
+ createImageBitmapSupport: CreateImageBitmapSupport,
169
+ ) {
170
+ this.workers = this.createWorkers(
171
+ numImageWorkers,
172
+ createImageBitmapSupport,
173
+ );
145
174
  this.workers.forEach((worker) => {
146
175
  worker.onmessage = this.handleMessage.bind(this);
147
176
  });
@@ -161,8 +190,23 @@ export class ImageWorkerManager {
161
190
  }
162
191
  }
163
192
 
164
- private createWorkers(numWorkers = 1): Worker[] {
165
- const workerCode = `(${createImageWorker.toString()})()`;
193
+ private createWorkers(
194
+ numWorkers = 1,
195
+ createImageBitmapSupport: CreateImageBitmapSupport,
196
+ ): Worker[] {
197
+ let workerCode = `(${createImageWorker.toString()})()`;
198
+
199
+ // Replace placeholders with actual initialization values
200
+ const supportsOptions = createImageBitmapSupport.options ? 'true' : 'false';
201
+ const supportsFull = createImageBitmapSupport.full ? 'true' : 'false';
202
+ workerCode = workerCode.replace(
203
+ 'var supportsOptionsCreateImageBitmap = false;',
204
+ `var supportsOptionsCreateImageBitmap = ${supportsOptions};`,
205
+ );
206
+ workerCode = workerCode.replace(
207
+ 'var supportsFullCreateImageBitmap = false;',
208
+ `var supportsFullCreateImageBitmap = ${supportsFull};`,
209
+ );
166
210
 
167
211
  const blob: Blob = new Blob([workerCode.replace('"use strict";', '')], {
168
212
  type: 'application/javascript',
@@ -170,7 +214,15 @@ export class ImageWorkerManager {
170
214
  const blobURL: string = (self.URL ? URL : webkitURL).createObjectURL(blob);
171
215
  const workers: Worker[] = [];
172
216
  for (let i = 0; i < numWorkers; i++) {
173
- workers.push(new Worker(blobURL));
217
+ const worker = new Worker(blobURL);
218
+
219
+ // Pass `createImageBitmap` support level during worker initialization
220
+ worker.postMessage({
221
+ type: 'init',
222
+ support: createImageBitmapSupport,
223
+ });
224
+
225
+ workers.push(worker);
174
226
  }
175
227
  return workers;
176
228
  }
@@ -84,6 +84,8 @@ export class WebGlContextWrapper {
84
84
  public readonly LINK_STATUS;
85
85
  public readonly DYNAMIC_DRAW;
86
86
  public readonly COLOR_ATTACHMENT0;
87
+ public readonly INVALID_ENUM: number;
88
+ public readonly INVALID_OPERATION: number;
87
89
  //#endregion WebGL Enums
88
90
 
89
91
  constructor(private gl: WebGLRenderingContext | WebGL2RenderingContext) {
@@ -175,6 +177,8 @@ export class WebGlContextWrapper {
175
177
  this.LINK_STATUS = gl.LINK_STATUS;
176
178
  this.DYNAMIC_DRAW = gl.DYNAMIC_DRAW;
177
179
  this.COLOR_ATTACHMENT0 = gl.COLOR_ATTACHMENT0;
180
+ this.INVALID_ENUM = gl.INVALID_ENUM;
181
+ this.INVALID_OPERATION = gl.INVALID_OPERATION;
178
182
  }
179
183
  /**
180
184
  * Returns true if the WebGL context is WebGL2
@@ -1020,6 +1024,18 @@ export class WebGlContextWrapper {
1020
1024
  return gl.getExtension(name);
1021
1025
  }
1022
1026
 
1027
+ /**
1028
+ * ```
1029
+ * gl.getError(type);
1030
+ * ```
1031
+ *
1032
+ * @returns
1033
+ */
1034
+ getError() {
1035
+ const { gl } = this;
1036
+ return gl.getError();
1037
+ }
1038
+
1023
1039
  /**
1024
1040
  * ```
1025
1041
  * gl.createVertexArray();
@@ -30,7 +30,12 @@ import {
30
30
  type QuadOptions,
31
31
  } from '../CoreRenderer.js';
32
32
  import { CanvasCoreTexture } from './CanvasCoreTexture.js';
33
- import { getBorder, getRadius, strokeLine } from './internal/C2DShaderUtils.js';
33
+ import {
34
+ getBorder,
35
+ getRadius,
36
+ roundRect,
37
+ strokeLine,
38
+ } from './internal/C2DShaderUtils.js';
34
39
  import {
35
40
  formatRgba,
36
41
  parseColorRgba,
@@ -73,7 +78,6 @@ export class CanvasCoreRenderer extends CoreRenderer {
73
78
  }
74
79
 
75
80
  reset(): void {
76
- // eslint-disable-next-line no-self-assign
77
81
  this.canvas.width = this.canvas.width; // quick reset canvas
78
82
 
79
83
  const ctx = this.context;
@@ -166,7 +170,7 @@ export class CanvasCoreRenderer extends CoreRenderer {
166
170
 
167
171
  if (radius) {
168
172
  const path = new Path2D();
169
- path.roundRect(tx, ty, width, height, radius);
173
+ roundRect.call(path, tx, ty, width, height, radius);
170
174
  ctx.clip(path);
171
175
  }
172
176
 
@@ -186,7 +190,12 @@ export class CanvasCoreRenderer extends CoreRenderer {
186
190
  height,
187
191
  );
188
192
  } else {
189
- ctx.drawImage(image, tx, ty, width, height);
193
+ try {
194
+ ctx.drawImage(image, tx, ty, width, height);
195
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
196
+ } catch (error) {
197
+ // noop
198
+ }
190
199
  }
191
200
  ctx.globalAlpha = 1;
192
201
  } else if (hasGradient) {
@@ -224,7 +233,8 @@ export class CanvasCoreRenderer extends CoreRenderer {
224
233
  ctx.strokeStyle = borderColor;
225
234
  ctx.globalAlpha = alpha;
226
235
  if (radius) {
227
- ctx.roundRect(
236
+ roundRect.call(
237
+ ctx,
228
238
  tx + borderInnerWidth,
229
239
  ty + borderInnerWidth,
230
240
  width - borderWidth,
@@ -23,7 +23,11 @@ import { CoreContextTexture } from '../CoreContextTexture.js';
23
23
  import { formatRgba, type IParsedColor } from './internal/ColorUtils.js';
24
24
 
25
25
  export class CanvasCoreTexture extends CoreContextTexture {
26
- protected image: ImageBitmap | HTMLCanvasElement | undefined;
26
+ protected image:
27
+ | ImageBitmap
28
+ | HTMLCanvasElement
29
+ | HTMLImageElement
30
+ | undefined;
27
31
  protected tintCache:
28
32
  | {
29
33
  key: string;
@@ -68,7 +72,9 @@ export class CanvasCoreTexture extends CoreContextTexture {
68
72
  return this.image !== undefined;
69
73
  }
70
74
 
71
- getImage(color: IParsedColor): ImageBitmap | HTMLCanvasElement {
75
+ getImage(
76
+ color: IParsedColor,
77
+ ): ImageBitmap | HTMLCanvasElement | HTMLImageElement {
72
78
  const image = this.image;
73
79
  assertTruthy(image, 'Attempt to get unloaded image texture');
74
80
 
@@ -94,7 +100,7 @@ export class CanvasCoreTexture extends CoreContextTexture {
94
100
  }
95
101
 
96
102
  protected tintTexture(
97
- source: ImageBitmap | HTMLCanvasElement,
103
+ source: ImageBitmap | HTMLCanvasElement | HTMLImageElement,
98
104
  color: string,
99
105
  ) {
100
106
  const { width, height } = source;
@@ -132,8 +138,8 @@ export class CanvasCoreTexture extends CoreContextTexture {
132
138
  this.image = canvas;
133
139
  return { width: data.width, height: data.height };
134
140
  } else if (
135
- typeof ImageBitmap !== 'undefined' &&
136
- data instanceof ImageBitmap
141
+ (typeof ImageBitmap !== 'undefined' && data instanceof ImageBitmap) ||
142
+ data instanceof HTMLImageElement
137
143
  ) {
138
144
  this.image = data;
139
145
  return { width: data.width, height: data.height };
@@ -84,6 +84,99 @@ export function getBorder(
84
84
  return undefined;
85
85
  }
86
86
 
87
+ export function roundRect(
88
+ this: CanvasRenderingContext2D | Path2D,
89
+ x: number,
90
+ y: number,
91
+ width: number,
92
+ height: number,
93
+ radius: number | DOMPointInit | (number | DOMPointInit)[],
94
+ ) {
95
+ const context = Object.getPrototypeOf(this) as Path2D;
96
+ if (!context.roundRect) {
97
+ const fixOverlappingCorners = (radii: {
98
+ topLeft: number;
99
+ topRight: number;
100
+ bottomRight: number;
101
+ bottomLeft: number;
102
+ }) => {
103
+ const maxRadius = Math.min(width / 2, height / 2);
104
+ const totalHorizontal =
105
+ radii.topLeft + radii.topRight + radii.bottomRight + radii.bottomLeft;
106
+
107
+ if (totalHorizontal > width || totalHorizontal > height) {
108
+ const scale =
109
+ maxRadius /
110
+ Math.max(
111
+ radii.topLeft,
112
+ radii.topRight,
113
+ radii.bottomRight,
114
+ radii.bottomLeft,
115
+ );
116
+ radii.topLeft *= scale;
117
+ radii.topRight *= scale;
118
+ radii.bottomRight *= scale;
119
+ radii.bottomLeft *= scale;
120
+ }
121
+ };
122
+ const radii =
123
+ typeof radius === 'number'
124
+ ? {
125
+ topLeft: radius,
126
+ topRight: radius,
127
+ bottomRight: radius,
128
+ bottomLeft: radius,
129
+ }
130
+ : { topLeft: 0, topRight: 0, bottomRight: 0, bottomLeft: 0, ...radius };
131
+
132
+ fixOverlappingCorners(radii);
133
+
134
+ this.moveTo(x + radii.topLeft, y);
135
+ this.lineTo(x + width - radii.topRight, y);
136
+ this.ellipse(
137
+ x + width - radii.topRight,
138
+ y + radii.topRight,
139
+ radii.topRight,
140
+ radii.topRight,
141
+ 0,
142
+ 1.5 * Math.PI,
143
+ 2 * Math.PI,
144
+ );
145
+ this.lineTo(x + width, y + height - radii.bottomRight);
146
+ this.ellipse(
147
+ x + width - radii.bottomRight,
148
+ y + height - radii.bottomRight,
149
+ radii.bottomRight,
150
+ radii.bottomRight,
151
+ 0,
152
+ 0,
153
+ 0.5 * Math.PI,
154
+ );
155
+ this.lineTo(x + radii.bottomLeft, y + height);
156
+ this.ellipse(
157
+ x + radii.bottomLeft,
158
+ y + height - radii.bottomLeft,
159
+ radii.bottomLeft,
160
+ radii.bottomLeft,
161
+ 0,
162
+ 0.5 * Math.PI,
163
+ Math.PI,
164
+ );
165
+ this.lineTo(x, y + radii.topLeft);
166
+ this.ellipse(
167
+ x + radii.topLeft,
168
+ y + radii.topLeft,
169
+ radii.topLeft,
170
+ radii.topLeft,
171
+ 0,
172
+ Math.PI,
173
+ 1.5 * Math.PI,
174
+ );
175
+ } else {
176
+ this.roundRect(x, y, width, height, radius);
177
+ }
178
+ }
179
+
87
180
  export function strokeLine(
88
181
  ctx: CanvasRenderingContext2D,
89
182
  x: number,
@@ -140,32 +140,31 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
140
140
 
141
141
  assertTruthy(this._nativeCtxTexture);
142
142
  glw.activeTexture(0);
143
+ const tdata = textureData.data;
143
144
  // If textureData is null, the texture is empty (0, 0) and we don't need to
144
145
  // upload any data to the GPU.
145
146
  if (
146
- (typeof ImageBitmap !== 'undefined' &&
147
- textureData.data instanceof ImageBitmap) ||
148
- textureData.data instanceof ImageData ||
147
+ (typeof ImageBitmap !== 'undefined' && tdata instanceof ImageBitmap) ||
148
+ tdata instanceof ImageData ||
149
149
  // not using typeof HTMLImageElement due to web worker
150
- isHTMLImageElement(textureData.data)
150
+ isHTMLImageElement(tdata)
151
151
  ) {
152
- const data = textureData.data;
153
- width = data.width;
154
- height = data.height;
152
+ width = tdata.width;
153
+ height = tdata.height;
155
154
  glw.bindTexture(this._nativeCtxTexture);
156
155
  glw.pixelStorei(
157
156
  glw.UNPACK_PREMULTIPLY_ALPHA_WEBGL,
158
157
  !!textureData.premultiplyAlpha,
159
158
  );
160
159
 
161
- glw.texImage2D(0, glw.RGBA, glw.RGBA, glw.UNSIGNED_BYTE, data);
160
+ glw.texImage2D(0, glw.RGBA, glw.RGBA, glw.UNSIGNED_BYTE, tdata);
162
161
  this.setTextureMemUse(width * height * 4);
163
162
 
164
163
  // generate mipmaps for power-of-2 textures or in WebGL2RenderingContext
165
164
  if (glw.isWebGl2() || (isPowerOfTwo(width) && isPowerOfTwo(height))) {
166
165
  glw.generateMipmap();
167
166
  }
168
- } else if (textureData.data === null) {
167
+ } else if (tdata === null) {
169
168
  width = 0;
170
169
  height = 0;
171
170
  // Reset to a 1x1 transparent texture
@@ -182,14 +181,8 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
182
181
  TRANSPARENT_TEXTURE_DATA,
183
182
  );
184
183
  this.setTextureMemUse(TRANSPARENT_TEXTURE_DATA.byteLength);
185
- } else if ('mipmaps' in textureData.data && textureData.data.mipmaps) {
186
- const {
187
- mipmaps,
188
- width = 0,
189
- height = 0,
190
- type,
191
- glInternalFormat,
192
- } = textureData.data;
184
+ } else if ('mipmaps' in tdata && tdata.mipmaps) {
185
+ const { mipmaps, width = 0, height = 0, type, glInternalFormat } = tdata;
193
186
  const view =
194
187
  type === 'ktx'
195
188
  ? new DataView(mipmaps[0] ?? new ArrayBuffer(0))
@@ -204,7 +197,7 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
204
197
  glw.texParameteri(glw.TEXTURE_MIN_FILTER, glw.LINEAR);
205
198
 
206
199
  this.setTextureMemUse(view.byteLength);
207
- } else if (textureData.data && textureData.data instanceof Uint8Array) {
200
+ } else if (tdata && tdata instanceof Uint8Array) {
208
201
  // Color Texture
209
202
  width = 1;
210
203
  height = 1;
@@ -223,7 +216,7 @@ export class WebGlCoreCtxTexture extends CoreContextTexture {
223
216
  0,
224
217
  glw.RGBA,
225
218
  glw.UNSIGNED_BYTE,
226
- textureData.data,
219
+ tdata,
227
220
  );
228
221
 
229
222
  this.setTextureMemUse(width * height * 4);
@@ -23,11 +23,9 @@ import type { WebGlCoreCtxTexture } from './WebGlCoreCtxTexture.js';
23
23
  import type { WebGlCoreRendererOptions } from './WebGlCoreRenderer.js';
24
24
  import type { BufferCollection } from './internal/BufferCollection.js';
25
25
  import type { Dimensions } from '../../../common/CommonTypes.js';
26
- import type { Rect, RectWithValid } from '../../lib/utils.js';
26
+ import type { RectWithValid } from '../../lib/utils.js';
27
27
  import type { WebGlContextWrapper } from '../../lib/WebGlContextWrapper.js';
28
28
 
29
- const MAX_TEXTURES = 8; // TODO: get from gl
30
-
31
29
  /**
32
30
  * Can render multiple quads with multiple textures (up to vertex shader texture limit)
33
31
  *
@@ -95,13 +93,22 @@ export class WebGlCoreRenderOp extends CoreRenderOp {
95
93
  // Clipping
96
94
  if (this.clippingRect.valid) {
97
95
  const { x, y, width, height } = this.clippingRect;
98
- const pixelRatio = options.pixelRatio;
96
+ const pixelRatio = this.parentHasRenderTexture ? 1 : options.pixelRatio;
99
97
  const canvasHeight = options.canvas.height;
100
98
 
101
99
  const clipX = Math.round(x * pixelRatio);
102
100
  const clipWidth = Math.round(width * pixelRatio);
103
101
  const clipHeight = Math.round(height * pixelRatio);
104
- const clipY = Math.round(canvasHeight - clipHeight - y * pixelRatio);
102
+ let clipY = Math.round(canvasHeight - clipHeight - y * pixelRatio);
103
+
104
+ // if parent has render texture, we need to adjust the scissor rect
105
+ // to be relative to the parent's framebuffer
106
+ if (this.parentHasRenderTexture) {
107
+ clipY = this.framebufferDimensions
108
+ ? this.framebufferDimensions.height - this.dimensions.height
109
+ : 0;
110
+ }
111
+
105
112
  glw.setScissorTest(true);
106
113
  glw.scissor(clipX, clipY, clipWidth, clipHeight);
107
114
  } else {
@@ -142,9 +142,15 @@ export abstract class WebGlCoreShader extends CoreShader {
142
142
  glw.FRAGMENT_SHADER,
143
143
  fragmentSource,
144
144
  );
145
+
145
146
  if (!vertexShader || !fragmentShader) {
146
147
  throw new Error(
147
- `Unable to create shader type: ${glw.FRAGMENT_SHADER}. Source: ${fragmentSource}`,
148
+ `Unable to create the following shader(s): ${[
149
+ !vertexShader && 'VERTEX_SHADER',
150
+ !fragmentShader && 'FRAGMENT_SHADER',
151
+ ]
152
+ .filter(Boolean)
153
+ .join(' and ')}`,
148
154
  );
149
155
  }
150
156
 
@@ -141,9 +141,11 @@ export function createIndexBuffer(glw: WebGlContextWrapper, size: number) {
141
141
  export function isHTMLImageElement(obj: unknown): obj is HTMLImageElement {
142
142
  return (
143
143
  obj !== null &&
144
- typeof obj === 'object' &&
145
- obj.constructor &&
146
- obj.constructor.name === 'HTMLImageElement'
144
+ ((typeof obj === 'object' &&
145
+ obj.constructor &&
146
+ obj.constructor.name === 'HTMLImageElement') ||
147
+ (typeof HTMLImageElement !== 'undefined' &&
148
+ obj instanceof HTMLImageElement))
147
149
  );
148
150
  }
149
151
 
@@ -100,8 +100,14 @@ export function createShader(
100
100
  ) {
101
101
  const shader = glw.createShader(type);
102
102
  if (!shader) {
103
- throw new Error(`Unable to create shader type: ${type}. Source: ${source}`);
103
+ const glError = glw.getError();
104
+ throw new Error(
105
+ `Unable to create the shader: ${
106
+ type === glw.VERTEX_SHADER ? 'VERTEX_SHADER' : 'FRAGMENT_SHADER'
107
+ }.${glError ? ` WebGlContext Error: ${glError}` : ''}`,
108
+ );
104
109
  }
110
+
105
111
  glw.shaderSource(shader, source);
106
112
  glw.compileShader(shader);
107
113
  const success = !!glw.getShaderParameter(shader, glw.COMPILE_STATUS);
@@ -109,7 +115,7 @@ export function createShader(
109
115
  return shader;
110
116
  }
111
117
 
112
- console.log(glw.getShaderInfoLog(shader));
118
+ console.error(glw.getShaderInfoLog(shader));
113
119
  glw.deleteShader(shader);
114
120
  }
115
121
 
@@ -131,7 +137,7 @@ export function createProgram(
131
137
  return program;
132
138
  }
133
139
 
134
- console.log(glw.getProgramInfoLog(program));
140
+ console.warn(glw.getProgramInfoLog(program));
135
141
  glw.deleteProgram(program);
136
142
  return undefined;
137
143
  }
@@ -93,7 +93,9 @@ export class SdfTrFontFace<
93
93
  });
94
94
 
95
95
  // Pre-load it
96
- this.texture.ctxTexture.load();
96
+ stage.txManager.once('initialized', () => {
97
+ this.texture.ctxTexture.load();
98
+ });
97
99
 
98
100
  // Set this.data to the fetched data from dataUrl
99
101
  fetch(atlasDataUrl)
@@ -102,7 +104,7 @@ export class SdfTrFontFace<
102
104
  (this.data as SdfFontData) = await response.json();
103
105
  assertTruthy(this.data);
104
106
  // Add all the glyphs to the glyph map
105
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
107
+
106
108
  let maxCharHeight = 0;
107
109
  this.data.chars.forEach((glyph) => {
108
110
  this.glyphMap.set(glyph.id, glyph);
@@ -111,10 +113,10 @@ export class SdfTrFontFace<
111
113
  maxCharHeight = charHeight;
112
114
  }
113
115
  });
114
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
116
+
115
117
  (this.maxCharHeight as number) = maxCharHeight;
116
118
  // We know `data` is defined here, because we just set it
117
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
119
+
118
120
  (this.shaper as FontShaper) = new SdfFontShaper(
119
121
  this.data,
120
122
  this.glyphMap,
@@ -26,8 +26,7 @@ import {
26
26
  getNormalizedRgbaComponents,
27
27
  getNormalizedAlphaComponent,
28
28
  } from '../../lib/utils.js';
29
- import type { ImageTexture } from '../../textures/ImageTexture.js';
30
- import { TrFontManager, type FontFamilyMap } from '../TrFontManager.js';
29
+ import { type FontFamilyMap } from '../TrFontManager.js';
31
30
  import type { TrFontFace } from '../font-face-types/TrFontFace.js';
32
31
  import { WebTrFontFace } from '../font-face-types/WebTrFontFace.js';
33
32
  import {
@@ -47,7 +46,7 @@ const resolvedGlobal = typeof self === 'undefined' ? globalThis : self;
47
46
  /**
48
47
  * Global font set regardless of if run in the main thread or a web worker
49
48
  */
50
- const globalFontSet = ((resolvedGlobal.document as any)?.fonts ||
49
+ const globalFontSet: FontFaceSet = (resolvedGlobal.document?.fonts ||
51
50
  (resolvedGlobal as any).fonts) as FontFaceSet;
52
51
 
53
52
  declare module './TextRenderer.js' {
@@ -99,7 +98,7 @@ export class CanvasTextRenderer extends TextRenderer<CanvasTextRendererState> {
99
98
  } else {
100
99
  this.canvas = document.createElement('canvas');
101
100
  }
102
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
101
+
103
102
  let context = this.canvas.getContext('2d', {
104
103
  willReadFrequently: true,
105
104
  }) as OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D | null;