@lightningjs/renderer 2.13.0 → 2.13.1

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 (213) hide show
  1. package/LICENSE +202 -202
  2. package/NOTICE +3 -3
  3. package/README.md +147 -147
  4. package/dist/exports/core-api.d.ts +74 -0
  5. package/dist/exports/core-api.js +96 -0
  6. package/dist/exports/core-api.js.map +1 -0
  7. package/dist/exports/main-api.d.ts +30 -0
  8. package/dist/exports/main-api.js +45 -0
  9. package/dist/exports/main-api.js.map +1 -0
  10. package/dist/src/core/CoreExtension.d.ts +12 -0
  11. package/dist/src/core/CoreExtension.js +29 -0
  12. package/dist/src/core/CoreExtension.js.map +1 -0
  13. package/dist/src/core/lib/ImageWorker.js +2 -1
  14. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  15. package/dist/src/core/lib/utils.d.ts +4 -0
  16. package/dist/src/core/lib/utils.js +46 -0
  17. package/dist/src/core/lib/utils.js.map +1 -1
  18. package/dist/src/core/renderers/webgl/shaders/DefaultShader.js +45 -45
  19. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js +61 -61
  20. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js +93 -93
  21. package/dist/src/core/renderers/webgl/shaders/RoundedRectangle.js +63 -63
  22. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +62 -62
  23. package/dist/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.js +15 -15
  24. package/dist/src/core/renderers/webgl/shaders/effects/BorderEffect.js +6 -6
  25. package/dist/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.js +15 -15
  26. package/dist/src/core/renderers/webgl/shaders/effects/BorderRightEffect.js +15 -15
  27. package/dist/src/core/renderers/webgl/shaders/effects/BorderTopEffect.js +15 -15
  28. package/dist/src/core/renderers/webgl/shaders/effects/FadeOutEffect.js +42 -42
  29. package/dist/src/core/renderers/webgl/shaders/effects/GlitchEffect.js +44 -44
  30. package/dist/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.js +3 -3
  31. package/dist/src/core/renderers/webgl/shaders/effects/HolePunchEffect.js +22 -22
  32. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +28 -28
  33. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +10 -10
  34. package/dist/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.js +37 -37
  35. package/dist/src/core/renderers/webgl/shaders/effects/RadiusEffect.js +19 -19
  36. package/dist/src/core/textures/ImageTexture.d.ts +2 -2
  37. package/dist/src/core/textures/ImageTexture.js +24 -4
  38. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  39. package/dist/src/main-api/ICoreDriver.d.ts +24 -0
  40. package/dist/src/main-api/ICoreDriver.js +20 -0
  41. package/dist/src/main-api/ICoreDriver.js.map +1 -0
  42. package/dist/src/main-api/RendererMain.d.ts +378 -0
  43. package/dist/src/main-api/RendererMain.js +367 -0
  44. package/dist/src/main-api/RendererMain.js.map +1 -0
  45. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.d.ts +9 -0
  46. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js +38 -0
  47. package/dist/src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js.map +1 -0
  48. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.d.ts +56 -0
  49. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js +101 -0
  50. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +1 -0
  51. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.d.ts +32 -0
  52. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js +28 -0
  53. package/dist/src/main-api/texture-usage-trackers/TextureUsageTracker.js.map +1 -0
  54. package/dist/src/render-drivers/main/MainCoreDriver.d.ts +21 -0
  55. package/dist/src/render-drivers/main/MainCoreDriver.js +115 -0
  56. package/dist/src/render-drivers/main/MainCoreDriver.js.map +1 -0
  57. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +101 -0
  58. package/dist/src/render-drivers/main/MainOnlyNode.js +425 -0
  59. package/dist/src/render-drivers/main/MainOnlyNode.js.map +1 -0
  60. package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +47 -0
  61. package/dist/src/render-drivers/main/MainOnlyTextNode.js +204 -0
  62. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +1 -0
  63. package/dist/src/render-drivers/threadx/NodeStruct.d.ts +93 -0
  64. package/dist/src/render-drivers/threadx/NodeStruct.js +290 -0
  65. package/dist/src/render-drivers/threadx/NodeStruct.js.map +1 -0
  66. package/dist/src/render-drivers/threadx/SharedNode.d.ts +40 -0
  67. package/dist/src/render-drivers/threadx/SharedNode.js +61 -0
  68. package/dist/src/render-drivers/threadx/SharedNode.js.map +1 -0
  69. package/dist/src/render-drivers/threadx/TextNodeStruct.d.ts +44 -0
  70. package/dist/src/render-drivers/threadx/TextNodeStruct.js +203 -0
  71. package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +1 -0
  72. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +25 -0
  73. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +232 -0
  74. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +1 -0
  75. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +24 -0
  76. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +113 -0
  77. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +1 -0
  78. package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +46 -0
  79. package/dist/src/render-drivers/threadx/ThreadXMainNode.js +160 -0
  80. package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +1 -0
  81. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.d.ts +28 -0
  82. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js +55 -0
  83. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +1 -0
  84. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.d.ts +70 -0
  85. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js +32 -0
  86. package/dist/src/render-drivers/threadx/ThreadXRendererMessage.js.map +1 -0
  87. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.d.ts +19 -0
  88. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +184 -0
  89. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +1 -0
  90. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.d.ts +27 -0
  91. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +109 -0
  92. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +1 -0
  93. package/dist/src/render-drivers/threadx/worker/renderer.d.ts +1 -0
  94. package/dist/src/render-drivers/threadx/worker/renderer.js +147 -0
  95. package/dist/src/render-drivers/threadx/worker/renderer.js.map +1 -0
  96. package/dist/src/render-drivers/utils.d.ts +12 -0
  97. package/dist/src/render-drivers/utils.js +74 -0
  98. package/dist/src/render-drivers/utils.js.map +1 -0
  99. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  100. package/dist/tsconfig.tsbuildinfo +1 -0
  101. package/exports/canvas.ts +39 -39
  102. package/exports/index.ts +89 -89
  103. package/exports/inspector.ts +24 -24
  104. package/exports/utils.ts +44 -44
  105. package/exports/webgl.ts +38 -38
  106. package/package.json +2 -1
  107. package/scripts/please-use-pnpm.js +13 -13
  108. package/src/common/CommonTypes.ts +146 -146
  109. package/src/common/EventEmitter.ts +77 -77
  110. package/src/common/IAnimationController.ts +92 -92
  111. package/src/common/IEventEmitter.ts +28 -28
  112. package/src/core/CoreNode.test.ts +202 -202
  113. package/src/core/CoreNode.ts +2455 -2455
  114. package/src/core/CoreShaderManager.ts +292 -292
  115. package/src/core/CoreTextNode.ts +455 -455
  116. package/src/core/CoreTextureManager.ts +597 -597
  117. package/src/core/Stage.ts +743 -743
  118. package/src/core/TextureMemoryManager.ts +395 -395
  119. package/src/core/animations/AnimationManager.ts +38 -38
  120. package/src/core/animations/CoreAnimation.ts +340 -340
  121. package/src/core/animations/CoreAnimationController.ts +157 -157
  122. package/src/core/lib/ContextSpy.ts +41 -41
  123. package/src/core/lib/ImageWorker.ts +280 -279
  124. package/src/core/lib/Matrix3d.ts +244 -244
  125. package/src/core/lib/RenderCoords.ts +86 -86
  126. package/src/core/lib/WebGlContextWrapper.ts +1332 -1332
  127. package/src/core/lib/textureCompression.ts +152 -152
  128. package/src/core/lib/textureSvg.ts +78 -78
  129. package/src/core/lib/utils.ts +384 -310
  130. package/src/core/lib/validateImageBitmap.ts +76 -76
  131. package/src/core/platform.ts +63 -63
  132. package/src/core/renderers/CoreContextTexture.ts +43 -43
  133. package/src/core/renderers/CoreRenderOp.ts +22 -22
  134. package/src/core/renderers/CoreRenderer.ts +115 -115
  135. package/src/core/renderers/CoreShader.ts +41 -41
  136. package/src/core/renderers/canvas/CanvasCoreRenderer.ts +375 -375
  137. package/src/core/renderers/canvas/CanvasCoreTexture.ts +153 -153
  138. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +231 -231
  139. package/src/core/renderers/canvas/internal/ColorUtils.ts +69 -69
  140. package/src/core/renderers/canvas/shaders/UnsupportedShader.ts +48 -48
  141. package/src/core/renderers/webgl/WebGlCoreCtxRenderTexture.ts +86 -86
  142. package/src/core/renderers/webgl/WebGlCoreCtxSubTexture.ts +50 -50
  143. package/src/core/renderers/webgl/WebGlCoreCtxTexture.ts +301 -301
  144. package/src/core/renderers/webgl/WebGlCoreRenderOp.ts +125 -125
  145. package/src/core/renderers/webgl/WebGlCoreRenderer.ts +815 -815
  146. package/src/core/renderers/webgl/WebGlCoreShader.ts +362 -362
  147. package/src/core/renderers/webgl/internal/BufferCollection.ts +54 -54
  148. package/src/core/renderers/webgl/internal/RendererUtils.ts +155 -155
  149. package/src/core/renderers/webgl/internal/ShaderUtils.ts +143 -143
  150. package/src/core/renderers/webgl/internal/WebGlUtils.ts +35 -35
  151. package/src/core/renderers/webgl/shaders/DefaultShader.ts +93 -93
  152. package/src/core/renderers/webgl/shaders/DefaultShaderBatched.ts +132 -132
  153. package/src/core/renderers/webgl/shaders/DynamicShader.ts +580 -580
  154. package/src/core/renderers/webgl/shaders/RoundedRectangle.ts +167 -167
  155. package/src/core/renderers/webgl/shaders/SdfShader.ts +204 -204
  156. package/src/core/renderers/webgl/shaders/effects/BorderBottomEffect.ts +101 -101
  157. package/src/core/renderers/webgl/shaders/effects/BorderEffect.ts +87 -87
  158. package/src/core/renderers/webgl/shaders/effects/BorderLeftEffect.ts +101 -101
  159. package/src/core/renderers/webgl/shaders/effects/BorderRightEffect.ts +101 -101
  160. package/src/core/renderers/webgl/shaders/effects/BorderTopEffect.ts +101 -101
  161. package/src/core/renderers/webgl/shaders/effects/EffectUtils.ts +159 -159
  162. package/src/core/renderers/webgl/shaders/effects/FadeOutEffect.ts +127 -127
  163. package/src/core/renderers/webgl/shaders/effects/GlitchEffect.ts +148 -148
  164. package/src/core/renderers/webgl/shaders/effects/GrayscaleEffect.ts +67 -67
  165. package/src/core/renderers/webgl/shaders/effects/HolePunchEffect.ts +157 -157
  166. package/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.ts +171 -171
  167. package/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.ts +168 -168
  168. package/src/core/renderers/webgl/shaders/effects/RadialProgressEffect.ts +187 -187
  169. package/src/core/renderers/webgl/shaders/effects/RadiusEffect.ts +110 -110
  170. package/src/core/renderers/webgl/shaders/effects/ShaderEffect.ts +196 -196
  171. package/src/core/text-rendering/TextRenderingUtils.ts +36 -36
  172. package/src/core/text-rendering/TextTextureRendererUtils.ts +263 -263
  173. package/src/core/text-rendering/TrFontManager.ts +183 -183
  174. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +176 -176
  175. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +139 -139
  176. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +173 -173
  177. package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +171 -171
  178. package/src/core/text-rendering/font-face-types/TrFontFace.ts +187 -187
  179. package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +94 -94
  180. package/src/core/text-rendering/font-face-types/utils.ts +39 -39
  181. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +509 -509
  182. package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +808 -808
  183. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +853 -853
  184. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +48 -48
  185. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +66 -66
  186. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +52 -52
  187. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +32 -32
  188. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +117 -117
  189. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +133 -133
  190. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +38 -38
  191. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +408 -408
  192. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +49 -49
  193. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +52 -52
  194. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +205 -205
  195. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +93 -93
  196. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +40 -40
  197. package/src/core/text-rendering/renderers/TextRenderer.ts +557 -557
  198. package/src/core/textures/ColorTexture.ts +102 -102
  199. package/src/core/textures/ImageTexture.ts +399 -376
  200. package/src/core/textures/NoiseTexture.ts +104 -104
  201. package/src/core/textures/RenderTexture.ts +85 -85
  202. package/src/core/textures/SubTexture.ts +205 -205
  203. package/src/core/textures/Texture.ts +337 -337
  204. package/src/core/utils.ts +227 -227
  205. package/src/env.d.ts +7 -7
  206. package/src/main-api/DynamicShaderController.ts +104 -104
  207. package/src/main-api/INode.ts +101 -101
  208. package/src/main-api/Inspector.ts +522 -522
  209. package/src/main-api/Renderer.ts +751 -751
  210. package/src/main-api/ShaderController.ts +80 -80
  211. package/src/main-api/utils.ts +45 -45
  212. package/src/utils.ts +248 -248
  213. package/COPYING +0 -1
@@ -0,0 +1,367 @@
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
+ import { ManualCountTextureUsageTracker, } from './texture-usage-trackers/ManualCountTextureUsageTracker.js';
20
+ import { FinalizationRegistryTextureUsageTracker } from './texture-usage-trackers/FinalizationRegistryTextureUsageTracker.js';
21
+ import { EventEmitter } from '../common/EventEmitter.js';
22
+ import { Inspector } from './Inspector.js';
23
+ import { santizeCustomDataMap } from '../render-drivers/utils.js';
24
+ import { isProductionEnvironment } from '../utils.js';
25
+ /**
26
+ * The Renderer Main API
27
+ *
28
+ * @remarks
29
+ * This is the primary class used to configure and operate the Renderer.
30
+ *
31
+ * It is used to create and destroy Nodes, as well as Texture and Shader
32
+ * references.
33
+ *
34
+ * Example:
35
+ * ```ts
36
+ * import { RendererMain, MainCoreDriver } from '@lightningjs/renderer';
37
+ *
38
+ * // Initialize the Renderer
39
+ * const renderer = new RendererMain(
40
+ * {
41
+ * appWidth: 1920,
42
+ * appHeight: 1080
43
+ * },
44
+ * 'app',
45
+ * new MainCoreDriver(),
46
+ * );
47
+ * ```
48
+ */
49
+ export class RendererMain extends EventEmitter {
50
+ root = null;
51
+ driver;
52
+ canvas;
53
+ settings;
54
+ inspector = null;
55
+ nodes = new Map();
56
+ nextTextureId = 1;
57
+ /**
58
+ * Texture Usage Tracker for Usage Based Texture Garbage Collection
59
+ *
60
+ * @remarks
61
+ * For internal use only. DO NOT ACCESS.
62
+ */
63
+ textureTracker;
64
+ /**
65
+ * Constructs a new Renderer instance
66
+ *
67
+ * @param settings Renderer settings
68
+ * @param target Element ID or HTMLElement to insert the canvas into
69
+ * @param driver Core Driver to use
70
+ */
71
+ constructor(settings, target, driver) {
72
+ super();
73
+ const resolvedSettings = {
74
+ appWidth: settings.appWidth || 1920,
75
+ appHeight: settings.appHeight || 1080,
76
+ txMemByteThreshold: settings.txMemByteThreshold || 124e6,
77
+ boundsMargin: settings.boundsMargin || 0,
78
+ deviceLogicalPixelRatio: settings.deviceLogicalPixelRatio || 1,
79
+ devicePhysicalPixelRatio: settings.devicePhysicalPixelRatio || window.devicePixelRatio,
80
+ clearColor: settings.clearColor ?? 0x00000000,
81
+ coreExtensionModule: settings.coreExtensionModule || null,
82
+ experimental_FinalizationRegistryTextureUsageTracker: settings.experimental_FinalizationRegistryTextureUsageTracker ?? false,
83
+ textureCleanupOptions: settings.textureCleanupOptions || {},
84
+ fpsUpdateInterval: settings.fpsUpdateInterval || 0,
85
+ numImageWorkers: settings.numImageWorkers !== undefined ? settings.numImageWorkers : 2,
86
+ enableContextSpy: settings.enableContextSpy ?? false,
87
+ enableInspector: settings.enableInspector ?? false,
88
+ renderMode: settings.renderMode ?? 'webgl',
89
+ };
90
+ this.settings = resolvedSettings;
91
+ const { appWidth, appHeight, deviceLogicalPixelRatio, devicePhysicalPixelRatio, enableInspector, } = resolvedSettings;
92
+ const releaseCallback = (textureId) => {
93
+ this.driver.releaseTexture(textureId);
94
+ };
95
+ const useFinalizationRegistryTracker = resolvedSettings.experimental_FinalizationRegistryTextureUsageTracker &&
96
+ typeof FinalizationRegistry === 'function';
97
+ this.textureTracker = useFinalizationRegistryTracker
98
+ ? new FinalizationRegistryTextureUsageTracker(releaseCallback)
99
+ : new ManualCountTextureUsageTracker(releaseCallback, this.settings.textureCleanupOptions);
100
+ const deviceLogicalWidth = appWidth * deviceLogicalPixelRatio;
101
+ const deviceLogicalHeight = appHeight * deviceLogicalPixelRatio;
102
+ this.driver = driver;
103
+ const canvas = document.createElement('canvas');
104
+ this.canvas = canvas;
105
+ canvas.width = deviceLogicalWidth * devicePhysicalPixelRatio;
106
+ canvas.height = deviceLogicalHeight * devicePhysicalPixelRatio;
107
+ canvas.style.width = `${deviceLogicalWidth}px`;
108
+ canvas.style.height = `${deviceLogicalHeight}px`;
109
+ let targetEl;
110
+ if (typeof target === 'string') {
111
+ targetEl = document.getElementById(target);
112
+ }
113
+ else {
114
+ targetEl = target;
115
+ }
116
+ if (!targetEl) {
117
+ throw new Error('Could not find target element');
118
+ }
119
+ // Hook up the driver's callbacks
120
+ driver.onCreateNode = (node) => {
121
+ this.nodes.set(node.id, node);
122
+ };
123
+ driver.onBeforeDestroyNode = (node) => {
124
+ this.nodes.delete(node.id);
125
+ };
126
+ driver.onFpsUpdate = (fpsData) => {
127
+ this.emit('fpsUpdate', fpsData);
128
+ };
129
+ driver.onFrameTick = (frameTickData) => {
130
+ this.emit('frameTick', frameTickData);
131
+ };
132
+ driver.onIdle = () => {
133
+ this.emit('idle');
134
+ };
135
+ targetEl.appendChild(canvas);
136
+ if (enableInspector && !isProductionEnvironment()) {
137
+ this.inspector = new Inspector(canvas, resolvedSettings);
138
+ }
139
+ }
140
+ /**
141
+ * Initialize the renderer
142
+ *
143
+ * @remarks
144
+ * This method must be called and resolved asyncronously before any other
145
+ * methods are called.
146
+ */
147
+ async init() {
148
+ await this.driver.init(this, this.settings, this.canvas);
149
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
150
+ this.root = this.driver.getRootNode();
151
+ }
152
+ /**
153
+ * Create a new scene graph node
154
+ *
155
+ * @remarks
156
+ * A node is the main graphical building block of the Renderer scene graph. It
157
+ * can be a container for other nodes, or it can be a leaf node that renders a
158
+ * solid color, gradient, image, or specific texture, using a specific shader.
159
+ *
160
+ * To create a text node, see {@link createTextNode}.
161
+ *
162
+ * See {@link INode} for more details.
163
+ *
164
+ * @param props
165
+ * @returns
166
+ */
167
+ createNode(props) {
168
+ if (this.inspector) {
169
+ return this.inspector.createNode(this.driver, this.resolveNodeDefaults(props));
170
+ }
171
+ return this.driver.createNode(this.resolveNodeDefaults(props));
172
+ }
173
+ /**
174
+ * Create a new scene graph text node
175
+ *
176
+ * @remarks
177
+ * A text node is the second graphical building block of the Renderer scene
178
+ * graph. It renders text using a specific text renderer that is automatically
179
+ * chosen based on the font requested and what type of fonts are installed
180
+ * into an app via a CoreExtension.
181
+ *
182
+ * See {@link ITextNode} for more details.
183
+ *
184
+ * @param props
185
+ * @returns
186
+ */
187
+ createTextNode(props) {
188
+ const fontSize = props.fontSize ?? 16;
189
+ const data = {
190
+ ...this.resolveNodeDefaults(props),
191
+ text: props.text ?? '',
192
+ textRendererOverride: props.textRendererOverride ?? null,
193
+ fontSize,
194
+ fontFamily: props.fontFamily ?? 'sans-serif',
195
+ fontStyle: props.fontStyle ?? 'normal',
196
+ fontWeight: props.fontWeight ?? 'normal',
197
+ fontStretch: props.fontStretch ?? 'normal',
198
+ textAlign: props.textAlign ?? 'left',
199
+ contain: props.contain ?? 'none',
200
+ scrollable: props.scrollable ?? false,
201
+ scrollY: props.scrollY ?? 0,
202
+ offsetY: props.offsetY ?? 0,
203
+ letterSpacing: props.letterSpacing ?? 0,
204
+ lineHeight: props.lineHeight, // `undefined` is a valid value
205
+ maxLines: props.maxLines ?? 0,
206
+ textBaseline: props.textBaseline ?? 'alphabetic',
207
+ verticalAlign: props.verticalAlign ?? 'middle',
208
+ overflowSuffix: props.overflowSuffix ?? '...',
209
+ debug: props.debug ?? {},
210
+ };
211
+ if (this.inspector) {
212
+ return this.inspector.createTextNode(this.driver, data);
213
+ }
214
+ return this.driver.createTextNode(data);
215
+ }
216
+ /**
217
+ * Resolves the default property values for a Node
218
+ *
219
+ * @remarks
220
+ * This method is used internally by the RendererMain to resolve the default
221
+ * property values for a Node. It is exposed publicly so that it can be used
222
+ * by Core Driver implementations.
223
+ *
224
+ * @param props
225
+ * @returns
226
+ */
227
+ resolveNodeDefaults(props) {
228
+ const color = props.color ?? 0xffffffff;
229
+ const colorTl = props.colorTl ?? props.colorTop ?? props.colorLeft ?? color;
230
+ const colorTr = props.colorTr ?? props.colorTop ?? props.colorRight ?? color;
231
+ const colorBl = props.colorBl ?? props.colorBottom ?? props.colorLeft ?? color;
232
+ const colorBr = props.colorBr ?? props.colorBottom ?? props.colorRight ?? color;
233
+ const data = santizeCustomDataMap(props.data ?? {});
234
+ return {
235
+ x: props.x ?? 0,
236
+ y: props.y ?? 0,
237
+ width: props.width ?? 0,
238
+ height: props.height ?? 0,
239
+ alpha: props.alpha ?? 1,
240
+ autosize: props.autosize ?? false,
241
+ clipping: props.clipping ?? false,
242
+ color,
243
+ colorTop: props.colorTop ?? color,
244
+ colorBottom: props.colorBottom ?? color,
245
+ colorLeft: props.colorLeft ?? color,
246
+ colorRight: props.colorRight ?? color,
247
+ colorBl,
248
+ colorBr,
249
+ colorTl,
250
+ colorTr,
251
+ zIndex: props.zIndex ?? 0,
252
+ zIndexLocked: props.zIndexLocked ?? 0,
253
+ parent: props.parent ?? null,
254
+ texture: props.texture ?? null,
255
+ shader: props.shader ?? null,
256
+ // Since setting the `src` will trigger a texture load, we need to set it after
257
+ // we set the texture. Otherwise, problems happen.
258
+ src: props.src ?? '',
259
+ scale: props.scale ?? null,
260
+ scaleX: props.scaleX ?? props.scale ?? 1,
261
+ scaleY: props.scaleY ?? props.scale ?? 1,
262
+ mount: props.mount ?? 0,
263
+ mountX: props.mountX ?? props.mount ?? 0,
264
+ mountY: props.mountY ?? props.mount ?? 0,
265
+ pivot: props.pivot ?? 0.5,
266
+ pivotX: props.pivotX ?? props.pivot ?? 0.5,
267
+ pivotY: props.pivotY ?? props.pivot ?? 0.5,
268
+ rotation: props.rotation ?? 0,
269
+ rtt: props.rtt ?? false,
270
+ data: data,
271
+ };
272
+ }
273
+ /**
274
+ * Destroy a node
275
+ *
276
+ * @remarks
277
+ * This method destroys a node but does not destroy its children.
278
+ *
279
+ * @param node
280
+ * @returns
281
+ */
282
+ destroyNode(node) {
283
+ if (this.inspector) {
284
+ this.inspector.destroyNode(node);
285
+ }
286
+ return this.driver.destroyNode(node);
287
+ }
288
+ /**
289
+ * Create a new texture reference
290
+ *
291
+ * @remarks
292
+ * This method creates a new reference to a texture. The texture is not
293
+ * loaded until it is used on a node.
294
+ *
295
+ * It can be assigned to a node's `texture` property, or it can be used
296
+ * when creating a SubTexture.
297
+ *
298
+ * @param textureType
299
+ * @param props
300
+ * @param options
301
+ * @returns
302
+ */
303
+ createTexture(textureType, props, options) {
304
+ const id = this.nextTextureId++;
305
+ const desc = {
306
+ descType: 'texture',
307
+ txType: textureType,
308
+ props,
309
+ options: {
310
+ ...options,
311
+ // This ID is used to identify the texture in the CoreTextureManager's
312
+ // ID Texture Map cache.
313
+ id,
314
+ },
315
+ };
316
+ this.textureTracker.registerTexture(desc);
317
+ return desc;
318
+ }
319
+ /**
320
+ * Create a new shader reference
321
+ *
322
+ * @remarks
323
+ * This method creates a new reference to a shader. The shader is not
324
+ * loaded until it is used on a Node.
325
+ *
326
+ * It can be assigned to a Node's `shader` property.
327
+ *
328
+ * @param shaderType
329
+ * @param props
330
+ * @returns
331
+ */
332
+ createShader(shaderType, props) {
333
+ return {
334
+ descType: 'shader',
335
+ shType: shaderType,
336
+ props: props,
337
+ };
338
+ }
339
+ /**
340
+ * Get a Node by its ID
341
+ *
342
+ * @param id
343
+ * @returns
344
+ */
345
+ getNodeById(id) {
346
+ return this.nodes.get(id) || null;
347
+ }
348
+ toggleFreeze() {
349
+ throw new Error('Not implemented');
350
+ }
351
+ advanceFrame() {
352
+ throw new Error('Not implemented');
353
+ }
354
+ /**
355
+ * Re-render the current frame without advancing any running animations.
356
+ *
357
+ * @remarks
358
+ * Any state changes will be reflected in the re-rendered frame. Useful for
359
+ * debugging.
360
+ *
361
+ * May not do anything if the render loop is running on a separate worker.
362
+ */
363
+ rerender() {
364
+ throw new Error('Not implemented');
365
+ }
366
+ }
367
+ //# sourceMappingURL=RendererMain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RendererMain.js","sourceRoot":"","sources":["../../../src/main-api/RendererMain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { TextureRef } from '../RendererMain.js';
2
+ import { TextureUsageTracker } from './TextureUsageTracker.js';
3
+ export declare class FinalizationRegistryTextureUsageTracker extends TextureUsageTracker {
4
+ private registry;
5
+ constructor(releaseCallback: (textureDescId: number) => void);
6
+ registerTexture(texture: TextureRef): void;
7
+ incrementTextureRefCount(): void;
8
+ decrementTextureRefCount(): void;
9
+ }
@@ -0,0 +1,38 @@
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
+ import { assertTruthy } from '../../utils.js';
20
+ import { TextureUsageTracker } from './TextureUsageTracker.js';
21
+ export class FinalizationRegistryTextureUsageTracker extends TextureUsageTracker {
22
+ registry;
23
+ constructor(releaseCallback) {
24
+ super(releaseCallback);
25
+ this.registry = new FinalizationRegistry(releaseCallback);
26
+ }
27
+ registerTexture(texture) {
28
+ assertTruthy(texture.options?.id, 'Texture must have an ID to be registered');
29
+ this.registry.register(texture, texture.options?.id);
30
+ }
31
+ incrementTextureRefCount() {
32
+ // No-op for FinalizationRegistry
33
+ }
34
+ decrementTextureRefCount() {
35
+ // No-op for FinalizationRegistry
36
+ }
37
+ }
38
+ //# sourceMappingURL=FinalizationRegistryTextureUsageTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FinalizationRegistryTextureUsageTracker.js","sourceRoot":"","sources":["../../../../src/main-api/texture-usage-trackers/FinalizationRegistryTextureUsageTracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,MAAM,OAAO,uCAAwC,SAAQ,mBAAmB;IACtE,QAAQ,CAA+B;IAE/C,YAAY,eAAgD;QAC1D,KAAK,CAAC,eAAe,CAAC,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,oBAAoB,CAAC,eAAe,CAAC,CAAC;IAC5D,CAAC;IAEQ,eAAe,CAAC,OAAmB;QAC1C,YAAY,CACV,OAAO,CAAC,OAAO,EAAE,EAAE,EACnB,0CAA0C,CAC3C,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC;IACQ,wBAAwB;QAC/B,iCAAiC;IACnC,CAAC;IACQ,wBAAwB;QAC/B,iCAAiC;IACnC,CAAC;CACF"}
@@ -0,0 +1,56 @@
1
+ import type { TextureRef } from '../RendererMain.js';
2
+ import { TextureUsageTracker } from './TextureUsageTracker.js';
3
+ interface TextureRefInfo {
4
+ /**
5
+ * Texture Reference ID
6
+ */
7
+ id: number;
8
+ /**
9
+ * The number of references to this texture that are currently assigned to
10
+ * Nodes.
11
+ */
12
+ nodeRefCount: number;
13
+ /**
14
+ * The last time the texture reference count was updated.
15
+ *
16
+ * @remarks
17
+ * This is used to determine when a texture is no longer referenced by any
18
+ * Nodes and can be removed from the GPU.
19
+ */
20
+ lastUpdate: number;
21
+ }
22
+ export interface ManualCountTextureUsageTrackerOptions {
23
+ /**
24
+ * The interval at which to check if textures that are no longer referenced
25
+ * by any Nodes can be released from the Core Space Texture Usage Cache.
26
+ *
27
+ * @remarks
28
+ * Only valid when the {@link ManualCountTextureUsageTracker} is used.
29
+ *
30
+ * @defaultValue 10000 (10 seconds)
31
+ */
32
+ textureCleanupIntervalMs?: number;
33
+ /**
34
+ * The age at which a texture is considered to be no longer referenced by any
35
+ * Nodes and can be released from the Core Space Texture Usage Cache.
36
+ *
37
+ * @remarks
38
+ * Only valid when the {@link ManualCountTextureUsageTracker} is used.
39
+ *
40
+ * @defaultValue 60000 (1 minute)
41
+ */
42
+ textureCleanupAgeThreadholdMs?: number;
43
+ }
44
+ /**
45
+ * Usage-based Texture Garbage Collection Registry
46
+ */
47
+ export declare class ManualCountTextureUsageTracker extends TextureUsageTracker {
48
+ textureMap: Map<number, TextureRefInfo>;
49
+ zeroReferenceTextureSet: Set<TextureRefInfo>;
50
+ options: Required<ManualCountTextureUsageTrackerOptions>;
51
+ constructor(releaseCallback: (textureDescId: number) => void, options: ManualCountTextureUsageTrackerOptions);
52
+ registerTexture(texture: TextureRef): void;
53
+ incrementTextureRefCount(texture: TextureRef): void;
54
+ decrementTextureRefCount(texture: TextureRef): void;
55
+ }
56
+ export {};
@@ -0,0 +1,101 @@
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
+ import { assertTruthy } from '../../utils.js';
20
+ import { TextureUsageTracker } from './TextureUsageTracker.js';
21
+ /**
22
+ * Usage-based Texture Garbage Collection Registry
23
+ */
24
+ export class ManualCountTextureUsageTracker extends TextureUsageTracker {
25
+ textureMap = new Map();
26
+ zeroReferenceTextureSet = new Set();
27
+ options;
28
+ constructor(releaseCallback, options) {
29
+ super(releaseCallback);
30
+ this.options = {
31
+ textureCleanupIntervalMs: options.textureCleanupIntervalMs ?? 10000,
32
+ textureCleanupAgeThreadholdMs: options.textureCleanupAgeThreadholdMs ?? 60000,
33
+ };
34
+ // Periodically check for textures that are no longer referenced by any
35
+ // Nodes and notify RendererMain to release them.
36
+ setInterval(() => {
37
+ const now = Date.now();
38
+ const thresholdMs = this.options.textureCleanupAgeThreadholdMs;
39
+ for (const textureRefInfo of this.zeroReferenceTextureSet) {
40
+ if (now - textureRefInfo.lastUpdate > thresholdMs) {
41
+ this.releaseCallback(textureRefInfo.id);
42
+ this.textureMap.delete(textureRefInfo.id);
43
+ this.zeroReferenceTextureSet.delete(textureRefInfo);
44
+ }
45
+ }
46
+ }, this.options.textureCleanupIntervalMs);
47
+ }
48
+ registerTexture(texture) {
49
+ const textureId = texture.options?.id;
50
+ assertTruthy(textureId, 'Texture must have an id to be registered');
51
+ if (!this.textureMap.has(textureId)) {
52
+ const textureRefInfo = {
53
+ id: textureId,
54
+ nodeRefCount: 0,
55
+ lastUpdate: Date.now(),
56
+ };
57
+ this.textureMap.set(textureId, textureRefInfo);
58
+ this.zeroReferenceTextureSet.add(textureRefInfo);
59
+ }
60
+ }
61
+ incrementTextureRefCount(texture) {
62
+ const textureId = texture.options?.id;
63
+ assertTruthy(textureId, 'Texture must have an id to be registered');
64
+ let textureRefInfo = this.textureMap.get(textureId);
65
+ if (!textureRefInfo) {
66
+ // Texture has not been registered yet, so register it now.
67
+ // This may happen if the TextureRef was cleaned up from the registry
68
+ // but was still alive in memory and eventually re-used.
69
+ this.registerTexture(texture);
70
+ textureRefInfo = this.textureMap.get(textureId);
71
+ }
72
+ assertTruthy(textureRefInfo, 'Texture must have been registered');
73
+ if (texture.txType === 'SubTexture') {
74
+ // If this is a SubTexture, then increment the reference count of the
75
+ // parent texture as well.
76
+ this.incrementTextureRefCount(texture.props.texture);
77
+ }
78
+ textureRefInfo.nodeRefCount++;
79
+ textureRefInfo.lastUpdate = Date.now();
80
+ if (this.zeroReferenceTextureSet.has(textureRefInfo)) {
81
+ this.zeroReferenceTextureSet.delete(textureRefInfo);
82
+ }
83
+ }
84
+ decrementTextureRefCount(texture) {
85
+ const textureId = texture.options?.id;
86
+ assertTruthy(textureId, 'Texture must have an id to be registered');
87
+ const textureRefInfo = this.textureMap.get(textureId);
88
+ assertTruthy(textureRefInfo, 'Texture must have been registered');
89
+ textureRefInfo.nodeRefCount--;
90
+ textureRefInfo.lastUpdate = Date.now();
91
+ if (textureRefInfo.nodeRefCount === 0) {
92
+ this.zeroReferenceTextureSet.add(textureRefInfo);
93
+ }
94
+ if (texture.txType === 'SubTexture') {
95
+ // If this is a SubTexture, then decrement the reference count of the
96
+ // parent texture as well.
97
+ this.decrementTextureRefCount(texture.props.texture);
98
+ }
99
+ }
100
+ }
101
+ //# sourceMappingURL=ManualCountTextureUsageTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ManualCountTextureUsageTracker.js","sourceRoot":"","sources":["../../../../src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { TextureRef } from '../RendererMain.js';
2
+ /**
3
+ * Texture Usage Tracker for Usage Based Texture Garbage Collection
4
+ */
5
+ export declare abstract class TextureUsageTracker {
6
+ protected releaseCallback: (textureDescId: number) => void;
7
+ constructor(releaseCallback: (textureDescId: number) => void);
8
+ /**
9
+ * Register a texture with the tracker.
10
+ *
11
+ * @param texture
12
+ */
13
+ abstract registerTexture(texture: TextureRef): void;
14
+ /**
15
+ * Increment the reference count for a texture.
16
+ *
17
+ * @remarks
18
+ * This should be called anytime a Node sets a new texture.
19
+ *
20
+ * @param texture
21
+ */
22
+ abstract incrementTextureRefCount(texture: TextureRef): void;
23
+ /**
24
+ * Decrement the Node reference count for a texture.
25
+ *
26
+ * @remarks
27
+ * This should be called anytime a Node removes a texture.
28
+ *
29
+ * @param texture
30
+ */
31
+ abstract decrementTextureRefCount(texture: TextureRef): void;
32
+ }
@@ -0,0 +1,28 @@
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
+ * Texture Usage Tracker for Usage Based Texture Garbage Collection
21
+ */
22
+ export class TextureUsageTracker {
23
+ releaseCallback;
24
+ constructor(releaseCallback) {
25
+ this.releaseCallback = releaseCallback;
26
+ }
27
+ }
28
+ //# sourceMappingURL=TextureUsageTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextureUsageTracker.js","sourceRoot":"","sources":["../../../../src/main-api/texture-usage-trackers/TextureUsageTracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH;;GAEG;AACH,MAAM,OAAgB,mBAAmB;IACjB;IAAtB,YAAsB,eAAgD;QAAhD,oBAAe,GAAf,eAAe,CAAiC;IAAG,CAAC;CA4B3E"}