@lightningjs/renderer 0.7.5 → 0.8.0

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 (252) hide show
  1. package/LICENSE +202 -202
  2. package/NOTICE +3 -3
  3. package/README.md +233 -221
  4. package/dist/src/common/CommonTypes.d.ts +12 -0
  5. package/dist/src/core/CoreNode.d.ts +83 -9
  6. package/dist/src/core/CoreNode.js +232 -44
  7. package/dist/src/core/CoreNode.js.map +1 -1
  8. package/dist/src/core/CoreTextNode.d.ts +6 -1
  9. package/dist/src/core/CoreTextNode.js +33 -20
  10. package/dist/src/core/CoreTextNode.js.map +1 -1
  11. package/dist/src/core/CoreTextureManager.d.ts +3 -1
  12. package/dist/src/core/CoreTextureManager.js +11 -2
  13. package/dist/src/core/CoreTextureManager.js.map +1 -1
  14. package/dist/src/core/Stage.d.ts +6 -0
  15. package/dist/src/core/Stage.js +16 -1
  16. package/dist/src/core/Stage.js.map +1 -1
  17. package/dist/src/core/TextureMemoryManager.d.ts +12 -0
  18. package/dist/src/core/TextureMemoryManager.js +42 -0
  19. package/dist/src/core/TextureMemoryManager.js.map +1 -0
  20. package/dist/src/core/lib/ImageWorker.d.ts +0 -1
  21. package/dist/src/core/lib/ImageWorker.js +55 -40
  22. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  23. package/dist/src/core/lib/RenderCoords.d.ts +13 -0
  24. package/dist/src/core/lib/RenderCoords.js +63 -0
  25. package/dist/src/core/lib/RenderCoords.js.map +1 -0
  26. package/dist/src/core/lib/WebGlContext.d.ts +414 -0
  27. package/dist/src/core/lib/WebGlContext.js +640 -0
  28. package/dist/src/core/lib/WebGlContext.js.map +1 -0
  29. package/dist/src/core/lib/utils.d.ts +1 -0
  30. package/dist/src/core/lib/utils.js +6 -0
  31. package/dist/src/core/lib/utils.js.map +1 -1
  32. package/dist/src/core/platform.js +8 -0
  33. package/dist/src/core/platform.js.map +1 -1
  34. package/dist/src/core/renderers/CoreContextTexture.d.ts +5 -1
  35. package/dist/src/core/renderers/CoreContextTexture.js +3 -1
  36. package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
  37. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.d.ts +2 -1
  38. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js +2 -2
  39. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +1 -1
  40. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.d.ts +3 -1
  41. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js +26 -6
  42. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  43. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +3 -0
  44. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +4 -2
  45. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  46. package/dist/src/core/renderers/webgl/internal/RendererUtils.d.ts +9 -0
  47. package/dist/src/core/renderers/webgl/internal/RendererUtils.js +14 -0
  48. package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
  49. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +47 -47
  50. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +61 -61
  51. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +93 -93
  52. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +63 -63
  53. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +49 -49
  54. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +15 -15
  55. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +5 -5
  56. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +15 -15
  57. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +15 -15
  58. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +15 -15
  59. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +42 -42
  60. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +44 -44
  61. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +3 -3
  62. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +44 -57
  63. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
  64. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.d.ts +1 -0
  65. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +33 -39
  66. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -1
  67. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +37 -37
  68. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +19 -19
  69. package/dist/src/core/scene/Scene.d.ts +59 -0
  70. package/dist/src/core/scene/Scene.js +106 -0
  71. package/dist/src/core/scene/Scene.js.map +1 -0
  72. package/dist/src/core/text-rendering/TrFontManager.js +30 -25
  73. package/dist/src/core/text-rendering/TrFontManager.js.map +1 -1
  74. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +2 -0
  75. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +26 -2
  76. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
  77. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +8 -0
  78. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +34 -6
  79. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  80. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/findNearestMultiple.d.ts +8 -0
  81. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/findNearestMultiple.js +29 -0
  82. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/findNearestMultiple.js.map +1 -0
  83. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +1 -3
  84. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
  85. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/SdfBufferHelper.d.ts +19 -0
  86. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/SdfBufferHelper.js +84 -0
  87. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/SdfBufferHelper.js.map +1 -0
  88. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutLine.d.ts +8 -0
  89. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutLine.js +40 -0
  90. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutLine.js.map +1 -0
  91. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutText2.d.ts +2 -0
  92. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutText2.js +41 -0
  93. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/layoutText2.js.map +1 -0
  94. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/utils.d.ts +1 -0
  95. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/utils.js +4 -0
  96. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2/utils.js.map +1 -0
  97. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2.d.ts +1 -0
  98. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2.js +2 -0
  99. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText2.js.map +1 -0
  100. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.d.ts +20 -0
  101. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js +55 -0
  102. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js.map +1 -0
  103. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/roundUpToMultiple.d.ts +9 -0
  104. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/roundUpToMultiple.js +32 -0
  105. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/roundUpToMultiple.js.map +1 -0
  106. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +31 -0
  107. package/dist/src/core/text-rendering/renderers/TextRenderer.js +26 -0
  108. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  109. package/dist/src/core/textures/ImageTexture.js +16 -2
  110. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  111. package/dist/src/core/textures/Texture.d.ts +27 -2
  112. package/dist/src/core/textures/Texture.js +30 -1
  113. package/dist/src/core/textures/Texture.js.map +1 -1
  114. package/dist/src/core/utils.d.ts +1 -1
  115. package/dist/src/main-api/ICoreDriver.d.ts +1 -0
  116. package/dist/src/main-api/Inspector.js +2 -1
  117. package/dist/src/main-api/Inspector.js.map +1 -1
  118. package/dist/src/main-api/RendererMain.d.ts +15 -0
  119. package/dist/src/main-api/RendererMain.js +7 -1
  120. package/dist/src/main-api/RendererMain.js.map +1 -1
  121. package/dist/src/render-drivers/main/MainCoreDriver.d.ts +1 -0
  122. package/dist/src/render-drivers/main/MainCoreDriver.js +8 -0
  123. package/dist/src/render-drivers/main/MainCoreDriver.js.map +1 -1
  124. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +5 -0
  125. package/dist/src/render-drivers/main/MainOnlyNode.js +26 -0
  126. package/dist/src/render-drivers/main/MainOnlyNode.js.map +1 -1
  127. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +2 -0
  128. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +1 -1
  129. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +2 -0
  130. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +1 -1
  131. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +3 -0
  132. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +1 -1
  133. package/dist/src/render-drivers/threadx/worker/renderer.js +2 -0
  134. package/dist/src/render-drivers/threadx/worker/renderer.js.map +1 -1
  135. package/dist/src/utils.d.ts +6 -0
  136. package/dist/src/utils.js +9 -1
  137. package/dist/src/utils.js.map +1 -1
  138. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  139. package/exports/core-api.ts +102 -102
  140. package/exports/main-api.ts +60 -60
  141. package/exports/utils.ts +41 -41
  142. package/package.json +1 -1
  143. package/scripts/please-use-pnpm.js +13 -13
  144. package/src/common/CommonTypes.ts +132 -113
  145. package/src/common/EventEmitter.ts +77 -77
  146. package/src/common/IAnimationController.ts +29 -29
  147. package/src/core/CoreExtension.ts +32 -32
  148. package/src/core/CoreNode.ts +1199 -955
  149. package/src/core/CoreShaderManager.ts +243 -243
  150. package/src/core/CoreTextNode.ts +400 -391
  151. package/src/core/CoreTextureManager.ts +339 -326
  152. package/src/core/Stage.ts +375 -354
  153. package/src/core/TextureMemoryManager.ts +66 -0
  154. package/src/core/animations/AnimationManager.ts +38 -38
  155. package/src/core/animations/CoreAnimation.ts +181 -181
  156. package/src/core/animations/CoreAnimationController.ts +148 -148
  157. package/src/core/lib/ContextSpy.ts +41 -41
  158. package/src/core/lib/ImageWorker.ts +149 -135
  159. package/src/core/lib/Matrix3d.ts +290 -290
  160. package/src/core/lib/RenderCoords.ts +86 -0
  161. package/src/core/lib/WebGlContextWrapper.ts +992 -992
  162. package/src/core/lib/textureCompression.ts +152 -152
  163. package/src/core/lib/utils.ts +250 -241
  164. package/src/core/platform.ts +54 -46
  165. package/src/core/renderers/CoreContextTexture.ts +35 -30
  166. package/src/core/renderers/CoreRenderOp.ts +22 -22
  167. package/src/core/renderers/CoreRenderer.ts +63 -63
  168. package/src/core/renderers/CoreShader.ts +41 -41
  169. package/src/core/renderers/webgl/WebGlCoreCtxSubTexture.ts +42 -37
  170. package/src/core/renderers/webgl/WebGlCoreCtxTexture.ts +261 -230
  171. package/src/core/renderers/webgl/WebGlCoreRenderOp.ts +107 -107
  172. package/src/core/renderers/webgl/WebGlCoreRenderer.ts +528 -520
  173. package/src/core/renderers/webgl/WebGlCoreShader.ts +337 -337
  174. package/src/core/renderers/webgl/internal/BufferCollection.ts +54 -54
  175. package/src/core/renderers/webgl/internal/RendererUtils.ts +148 -131
  176. package/src/core/renderers/webgl/internal/ShaderUtils.ts +136 -136
  177. package/src/core/renderers/webgl/internal/WebGlUtils.ts +35 -35
  178. package/src/core/renderers/webgl/shaders/DefaultShader.ts +95 -95
  179. package/src/core/renderers/webgl/shaders/DefaultShaderBatched.ts +132 -132
  180. package/src/core/renderers/webgl/shaders/DynamicShader.ts +474 -474
  181. package/src/core/renderers/webgl/shaders/RoundedRectangle.ts +161 -161
  182. package/src/core/renderers/webgl/shaders/SdfShader.ts +174 -174
  183. package/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.ts +101 -101
  184. package/src/core/renderers/webgl/shaders/effects/BorderEffect.ts +86 -86
  185. package/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.ts +101 -101
  186. package/src/core/renderers/webgl/shaders/effects/BorderRightEffect.ts +101 -101
  187. package/src/core/renderers/webgl/shaders/effects/BorderTopEffect.ts +101 -101
  188. package/src/core/renderers/webgl/shaders/effects/EffectUtils.ts +33 -33
  189. package/src/core/renderers/webgl/shaders/effects/FadeOutEffect.ts +135 -135
  190. package/src/core/renderers/webgl/shaders/effects/GlitchEffect.ts +145 -145
  191. package/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.ts +67 -67
  192. package/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.ts +160 -176
  193. package/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.ts +153 -159
  194. package/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.ts +186 -186
  195. package/src/core/renderers/webgl/shaders/effects/RadiusEffect.ts +121 -121
  196. package/src/core/renderers/webgl/shaders/effects/ShaderEffect.ts +114 -114
  197. package/src/core/text-rendering/TextTextureRendererUtils.ts +189 -189
  198. package/src/core/text-rendering/TrFontManager.ts +170 -166
  199. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +141 -141
  200. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +139 -139
  201. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +173 -173
  202. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +169 -169
  203. package/src/core/text-rendering/font-face-types/TrFontFace.ts +105 -105
  204. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +77 -77
  205. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +780 -751
  206. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +741 -741
  207. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +812 -778
  208. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +48 -48
  209. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +66 -66
  210. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +52 -52
  211. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +32 -32
  212. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +84 -84
  213. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +133 -133
  214. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +38 -38
  215. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +391 -393
  216. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +49 -49
  217. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +51 -51
  218. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +205 -205
  219. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +93 -93
  220. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +40 -40
  221. package/src/core/text-rendering/renderers/TextRenderer.ts +548 -504
  222. package/src/core/textures/ColorTexture.ts +86 -86
  223. package/src/core/textures/ImageTexture.ts +154 -140
  224. package/src/core/textures/NoiseTexture.ts +96 -96
  225. package/src/core/textures/SubTexture.ts +143 -143
  226. package/src/core/textures/Texture.ts +261 -218
  227. package/src/core/utils.ts +224 -224
  228. package/src/env.d.ts +7 -7
  229. package/src/main-api/ICoreDriver.ts +68 -66
  230. package/src/main-api/INode.ts +499 -499
  231. package/src/main-api/Inspector.ts +440 -439
  232. package/src/main-api/RendererMain.ts +676 -652
  233. package/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.ts +45 -45
  234. package/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.ts +154 -154
  235. package/src/main-api/texture-usage-trackers/TextureUsageTracker.ts +54 -54
  236. package/src/render-drivers/main/MainCoreDriver.ts +158 -148
  237. package/src/render-drivers/main/MainOnlyNode.ts +500 -466
  238. package/src/render-drivers/main/MainOnlyTextNode.ts +261 -261
  239. package/src/render-drivers/threadx/NodeStruct.ts +300 -300
  240. package/src/render-drivers/threadx/SharedNode.ts +97 -97
  241. package/src/render-drivers/threadx/TextNodeStruct.ts +211 -211
  242. package/src/render-drivers/threadx/ThreadXCoreDriver.ts +287 -285
  243. package/src/render-drivers/threadx/ThreadXMainAnimationController.ts +99 -99
  244. package/src/render-drivers/threadx/ThreadXMainNode.ts +192 -192
  245. package/src/render-drivers/threadx/ThreadXMainTextNode.ts +85 -85
  246. package/src/render-drivers/threadx/ThreadXRendererMessage.ts +112 -110
  247. package/src/render-drivers/threadx/worker/ThreadXRendererNode.ts +245 -238
  248. package/src/render-drivers/threadx/worker/ThreadXRendererTextNode.ts +149 -149
  249. package/src/render-drivers/threadx/worker/renderer.ts +153 -151
  250. package/src/render-drivers/utils.ts +97 -97
  251. package/src/utils.ts +216 -207
  252. package/COPYING +0 -1
@@ -1,218 +1,261 @@
1
- /*
2
- * If not stated otherwise in this file or this component's LICENSE file the
3
- * following copyright and licenses apply:
4
- *
5
- * Copyright 2023 Comcast Cable Communications Management, LLC.
6
- *
7
- * Licensed under the Apache License, Version 2.0 (the License);
8
- * you may not use this file except in compliance with the License.
9
- * You may obtain a copy of the License at
10
- *
11
- * http://www.apache.org/licenses/LICENSE-2.0
12
- *
13
- * Unless required by applicable law or agreed to in writing, software
14
- * distributed under the License is distributed on an "AS IS" BASIS,
15
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- * See the License for the specific language governing permissions and
17
- * limitations under the License.
18
- */
19
-
20
- import type { CoreTextureManager } from '../CoreTextureManager.js';
21
- import type { SubTextureProps } from './SubTexture.js';
22
- import type { Dimensions } from '../../common/CommonTypes.js';
23
- import { EventEmitter } from '../../common/EventEmitter.js';
24
-
25
- /**
26
- * Event handler for when a Texture is loading
27
- */
28
- export type TextureLoadingEventHandler = (target: any) => void;
29
-
30
- /**
31
- * Event handler for when a Texture is loaded
32
- */
33
- export type TextureLoadedEventHandler = (
34
- target: any,
35
- dimensions: Readonly<Dimensions>,
36
- ) => void;
37
-
38
- /**
39
- * Represents compressed texture data.
40
- */
41
- interface CompressedData {
42
- /**
43
- * GLenum spcifying compression format
44
- */
45
- glInternalFormat: number;
46
-
47
- /**
48
- * All mipmap levels
49
- */
50
- mipmaps?: ArrayBuffer[];
51
-
52
- /**
53
- * Supported container types ('pvr' or 'ktx').
54
- */
55
- type: 'pvr' | 'ktx';
56
-
57
- /**
58
- * The width of the compressed texture in pixels. Defaults to 0.
59
- *
60
- * @default 0
61
- */
62
- width: number;
63
-
64
- /**
65
- * The height of the compressed texture in pixels.
66
- **/
67
- height: number;
68
- }
69
-
70
- /**
71
- * Event handler for when a Texture fails to load
72
- */
73
- export type TextureFailedEventHandler = (target: any, error: Error) => void;
74
-
75
- /**
76
- * TextureData that is used to populate a CoreContextTexture
77
- */
78
- export interface TextureData {
79
- /**
80
- * The texture data
81
- */
82
- data: ImageBitmap | ImageData | SubTextureProps | CompressedData | null;
83
- /**
84
- * Premultiply alpha when uploading texture data to the GPU
85
- *
86
- * @defaultValue `false`
87
- */
88
- premultiplyAlpha?: boolean | null;
89
- }
90
-
91
- export type TextureState = 'loading' | 'loaded' | 'failed';
92
-
93
- export interface TextureStateEventMap {
94
- loading: TextureLoadingEventHandler;
95
- loaded: TextureLoadedEventHandler;
96
- failed: TextureFailedEventHandler;
97
- }
98
-
99
- /**
100
- * Like the built-in Parameters<> type but skips the first parameter (which is
101
- * `target` currently)
102
- */
103
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
104
- type ParametersSkipTarget<T extends (...args: any) => any> = T extends (
105
- target: any,
106
- ...args: infer P
107
- ) => any
108
- ? P
109
- : never;
110
-
111
- /**
112
- * Represents a source of texture data for a CoreContextTexture.
113
- *
114
- * @remarks
115
- * Texture sources are used to populate a CoreContextTexture when that texture
116
- * is loaded. Texture data retrieved by the CoreContextTexture by the
117
- * `getTextureData` method. It's the responsibility of the concerete `Texture`
118
- * subclass to implement this method appropriately.
119
- */
120
- export abstract class Texture extends EventEmitter {
121
- /**
122
- * The dimensions of the texture
123
- *
124
- * @remarks
125
- * Until the texture data is loaded for the first time the value will be
126
- * `null`.
127
- */
128
- readonly dimensions: Readonly<Dimensions> | null = null;
129
-
130
- readonly error: Error | null = null;
131
-
132
- readonly state: TextureState = 'loading';
133
-
134
- constructor(protected txManager: CoreTextureManager) {
135
- super();
136
- }
137
-
138
- /**
139
- * Set the state of the texture
140
- *
141
- * @remark
142
- * Intended for internal-use only but declared public so that it can be set
143
- * by it's associated {@link CoreContextTexture}
144
- *
145
- * @param state
146
- * @param args
147
- */
148
- setState<State extends TextureState>(
149
- state: State,
150
- ...args: ParametersSkipTarget<TextureStateEventMap[State]>
151
- ): void {
152
- if (this.state !== state) {
153
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
154
- (this.state as TextureState) = state;
155
- if (state === 'loaded') {
156
- const loadedArgs = args as ParametersSkipTarget<
157
- TextureStateEventMap['loaded']
158
- >;
159
- (this.dimensions as Dimensions) = loadedArgs[0];
160
- } else if (state === 'failed') {
161
- const failedArgs = args as ParametersSkipTarget<
162
- TextureStateEventMap['failed']
163
- >;
164
- (this.error as Error) = failedArgs[0];
165
- }
166
- this.emit(state, ...args);
167
- }
168
- }
169
-
170
- /**
171
- * Get the texture data for this texture.
172
- *
173
- * @remarks
174
- * This method is called by the CoreContextTexture when the texture is loaded.
175
- * The texture data is then used to populate the CoreContextTexture.
176
- *
177
- * @returns
178
- * The texture data for this texture.
179
- */
180
- abstract getTextureData(): Promise<TextureData>;
181
-
182
- /**
183
- * Make a cache key for this texture.
184
- *
185
- * @remarks
186
- * Each concrete `Texture` subclass must implement this method to provide an
187
- * appropriate cache key for the texture type including the texture's
188
- * properties that uniquely identify a copy of the texture. If the texture
189
- * type does not support caching, then this method should return `false`.
190
- *
191
- * @param props
192
- * @returns
193
- * A cache key for this texture or `false` if the texture type does not
194
- * support caching.
195
- */
196
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
197
- static makeCacheKey(props: unknown): string | false {
198
- return false;
199
- }
200
-
201
- /**
202
- * Resolve the default values for the texture's properties.
203
- *
204
- * @remarks
205
- * Each concrete `Texture` subclass must implement this method to provide
206
- * default values for the texture's optional properties.
207
- *
208
- * @param props
209
- * @returns
210
- * The default values for the texture's properties.
211
- */
212
- static resolveDefaults(
213
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
214
- props: unknown,
215
- ): Record<string, unknown> {
216
- return {};
217
- }
218
- }
1
+ /*
2
+ * If not stated otherwise in this file or this component's LICENSE file the
3
+ * following copyright and licenses apply:
4
+ *
5
+ * Copyright 2023 Comcast Cable Communications Management, LLC.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the License);
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ */
19
+
20
+ import type { CoreTextureManager } from '../CoreTextureManager.js';
21
+ import type { SubTextureProps } from './SubTexture.js';
22
+ import type { Dimensions } from '../../common/CommonTypes.js';
23
+ import { EventEmitter } from '../../common/EventEmitter.js';
24
+
25
+ /**
26
+ * Event handler for when a Texture is freed
27
+ */
28
+ export type TextureFreedEventHandler = (target: any) => void;
29
+
30
+ /**
31
+ * Event handler for when a Texture is loading
32
+ */
33
+ export type TextureLoadingEventHandler = (target: any) => void;
34
+
35
+ /**
36
+ * Event handler for when a Texture is loaded
37
+ */
38
+ export type TextureLoadedEventHandler = (
39
+ target: any,
40
+ dimensions: Readonly<Dimensions>,
41
+ ) => void;
42
+
43
+ /**
44
+ * Represents compressed texture data.
45
+ */
46
+ interface CompressedData {
47
+ /**
48
+ * GLenum spcifying compression format
49
+ */
50
+ glInternalFormat: number;
51
+
52
+ /**
53
+ * All mipmap levels
54
+ */
55
+ mipmaps?: ArrayBuffer[];
56
+
57
+ /**
58
+ * Supported container types ('pvr' or 'ktx').
59
+ */
60
+ type: 'pvr' | 'ktx';
61
+
62
+ /**
63
+ * The width of the compressed texture in pixels. Defaults to 0.
64
+ *
65
+ * @default 0
66
+ */
67
+ width: number;
68
+
69
+ /**
70
+ * The height of the compressed texture in pixels.
71
+ **/
72
+ height: number;
73
+ }
74
+
75
+ /**
76
+ * Event handler for when a Texture fails to load
77
+ */
78
+ export type TextureFailedEventHandler = (target: any, error: Error) => void;
79
+
80
+ /**
81
+ * TextureData that is used to populate a CoreContextTexture
82
+ */
83
+ export interface TextureData {
84
+ /**
85
+ * The texture data
86
+ */
87
+ data:
88
+ | ImageBitmap
89
+ | ImageData
90
+ | SubTextureProps
91
+ | CompressedData
92
+ | HTMLImageElement
93
+ | null;
94
+ /**
95
+ * Premultiply alpha when uploading texture data to the GPU
96
+ *
97
+ * @defaultValue `false`
98
+ */
99
+ premultiplyAlpha?: boolean | null;
100
+ }
101
+
102
+ export type TextureState = 'freed' | 'loading' | 'loaded' | 'failed';
103
+
104
+ export interface TextureStateEventMap {
105
+ freed: TextureFreedEventHandler;
106
+ loading: TextureLoadingEventHandler;
107
+ loaded: TextureLoadedEventHandler;
108
+ failed: TextureFailedEventHandler;
109
+ }
110
+
111
+ /**
112
+ * Like the built-in Parameters<> type but skips the first parameter (which is
113
+ * `target` currently)
114
+ */
115
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
116
+ type ParametersSkipTarget<T extends (...args: any) => any> = T extends (
117
+ target: any,
118
+ ...args: infer P
119
+ ) => any
120
+ ? P
121
+ : never;
122
+
123
+ /**
124
+ * Represents a source of texture data for a CoreContextTexture.
125
+ *
126
+ * @remarks
127
+ * Texture sources are used to populate a CoreContextTexture when that texture
128
+ * is loaded. Texture data retrieved by the CoreContextTexture by the
129
+ * `getTextureData` method. It's the responsibility of the concerete `Texture`
130
+ * subclass to implement this method appropriately.
131
+ */
132
+ export abstract class Texture extends EventEmitter {
133
+ /**
134
+ * The dimensions of the texture
135
+ *
136
+ * @remarks
137
+ * Until the texture data is loaded for the first time the value will be
138
+ * `null`.
139
+ */
140
+ readonly dimensions: Readonly<Dimensions> | null = null;
141
+
142
+ readonly error: Error | null = null;
143
+
144
+ readonly state: TextureState = 'freed';
145
+
146
+ readonly renderableOwners = new Set<unknown>();
147
+
148
+ constructor(protected txManager: CoreTextureManager) {
149
+ super();
150
+ }
151
+
152
+ /**
153
+ * Add/remove an owner to/from the Texture based on its renderability.
154
+ *
155
+ * @remarks
156
+ * Any object can own a texture, be it a CoreNode or even the state object
157
+ * from a Text Renderer.
158
+ *
159
+ * When the reference to the texture that an owner object holds is replaced
160
+ * or cleared it must call this with `renderable=false` to release the owner
161
+ * association.
162
+ *
163
+ * @param owner
164
+ * @param renderable
165
+ */
166
+ setRenderableOwner(owner: unknown, renderable: boolean): void {
167
+ if (renderable) {
168
+ this.renderableOwners.add(owner);
169
+ } else {
170
+ this.renderableOwners.delete(owner);
171
+ }
172
+ }
173
+
174
+ /**
175
+ * Returns true if the texture is assigned to any Nodes that are renderable.
176
+ */
177
+ get renderable(): boolean {
178
+ return this.renderableOwners.size > 0;
179
+ }
180
+
181
+ /**
182
+ * Set the state of the texture
183
+ *
184
+ * @remark
185
+ * Intended for internal-use only but declared public so that it can be set
186
+ * by it's associated {@link CoreContextTexture}
187
+ *
188
+ * @param state
189
+ * @param args
190
+ */
191
+ setState<State extends TextureState>(
192
+ state: State,
193
+ ...args: ParametersSkipTarget<TextureStateEventMap[State]>
194
+ ): void {
195
+ if (this.state !== state) {
196
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
197
+ (this.state as TextureState) = state;
198
+ if (state === 'loaded') {
199
+ const loadedArgs = args as ParametersSkipTarget<
200
+ TextureStateEventMap['loaded']
201
+ >;
202
+ (this.dimensions as Dimensions) = loadedArgs[0];
203
+ } else if (state === 'failed') {
204
+ const failedArgs = args as ParametersSkipTarget<
205
+ TextureStateEventMap['failed']
206
+ >;
207
+ (this.error as Error) = failedArgs[0];
208
+ }
209
+ this.emit(state, ...args);
210
+ }
211
+ }
212
+
213
+ /**
214
+ * Get the texture data for this texture.
215
+ *
216
+ * @remarks
217
+ * This method is called by the CoreContextTexture when the texture is loaded.
218
+ * The texture data is then used to populate the CoreContextTexture.
219
+ *
220
+ * @returns
221
+ * The texture data for this texture.
222
+ */
223
+ abstract getTextureData(): Promise<TextureData>;
224
+
225
+ /**
226
+ * Make a cache key for this texture.
227
+ *
228
+ * @remarks
229
+ * Each concrete `Texture` subclass must implement this method to provide an
230
+ * appropriate cache key for the texture type including the texture's
231
+ * properties that uniquely identify a copy of the texture. If the texture
232
+ * type does not support caching, then this method should return `false`.
233
+ *
234
+ * @param props
235
+ * @returns
236
+ * A cache key for this texture or `false` if the texture type does not
237
+ * support caching.
238
+ */
239
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
240
+ static makeCacheKey(props: unknown): string | false {
241
+ return false;
242
+ }
243
+
244
+ /**
245
+ * Resolve the default values for the texture's properties.
246
+ *
247
+ * @remarks
248
+ * Each concrete `Texture` subclass must implement this method to provide
249
+ * default values for the texture's optional properties.
250
+ *
251
+ * @param props
252
+ * @returns
253
+ * The default values for the texture's properties.
254
+ */
255
+ static resolveDefaults(
256
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
257
+ props: unknown,
258
+ ): Record<string, unknown> {
259
+ return {};
260
+ }
261
+ }