@lightningjs/renderer 2.18.2 → 2.18.4

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 (222) hide show
  1. package/dist/exports/canvas-shaders.d.ts +10 -0
  2. package/dist/exports/canvas-shaders.js +27 -0
  3. package/dist/exports/canvas-shaders.js.map +1 -0
  4. package/dist/exports/index.d.ts +1 -0
  5. package/dist/exports/index.js +1 -0
  6. package/dist/exports/index.js.map +1 -1
  7. package/dist/exports/webgl-shaders.d.ts +11 -0
  8. package/dist/exports/webgl-shaders.js +28 -0
  9. package/dist/exports/webgl-shaders.js.map +1 -0
  10. package/dist/src/common/CommonTypes.d.ts +2 -1
  11. package/dist/src/core/CoreNode.js +8 -4
  12. package/dist/src/core/CoreNode.js.map +1 -1
  13. package/dist/src/core/CoreTextureManager.d.ts +2 -0
  14. package/dist/src/core/CoreTextureManager.js +8 -4
  15. package/dist/src/core/CoreTextureManager.js.map +1 -1
  16. package/dist/src/core/Stage.d.ts +1 -0
  17. package/dist/src/core/Stage.js +2 -1
  18. package/dist/src/core/Stage.js.map +1 -1
  19. package/dist/src/core/TextureError.d.ts +11 -0
  20. package/dist/src/core/TextureError.js +37 -0
  21. package/dist/src/core/TextureError.js.map +1 -0
  22. package/dist/src/core/TextureMemoryManager.d.ts +1 -19
  23. package/dist/src/core/TextureMemoryManager.js +16 -43
  24. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  25. package/dist/src/core/lib/colorCache.d.ts +1 -0
  26. package/dist/src/core/lib/colorCache.js +19 -0
  27. package/dist/src/core/lib/colorCache.js.map +1 -0
  28. package/dist/src/core/lib/colorParser.d.ts +21 -0
  29. package/dist/src/core/lib/colorParser.js +72 -0
  30. package/dist/src/core/lib/colorParser.js.map +1 -0
  31. package/dist/src/core/platform.js +0 -3
  32. package/dist/src/core/platform.js.map +1 -1
  33. package/dist/src/core/platforms/Platform.d.ts +37 -0
  34. package/dist/src/core/platforms/Platform.js +22 -0
  35. package/dist/src/core/platforms/Platform.js.map +1 -0
  36. package/dist/src/core/platforms/web/WebPlatform.d.ts +9 -0
  37. package/dist/src/core/platforms/web/WebPlatform.js +84 -0
  38. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
  39. package/dist/src/core/renderers/CoreShaderNode.d.ts +59 -0
  40. package/dist/src/core/renderers/CoreShaderNode.js +113 -0
  41. package/dist/src/core/renderers/CoreShaderNode.js.map +1 -0
  42. package/dist/src/core/renderers/CoreShaderProgram.d.ts +4 -0
  43. package/dist/src/core/renderers/CoreShaderProgram.js +20 -0
  44. package/dist/src/core/renderers/CoreShaderProgram.js.map +1 -0
  45. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +35 -0
  46. package/dist/src/core/renderers/canvas/CanvasRenderer.js +201 -0
  47. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -0
  48. package/dist/src/core/renderers/canvas/CanvasShaderNode.d.ts +21 -0
  49. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +58 -0
  50. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -0
  51. package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +16 -0
  52. package/dist/src/core/renderers/canvas/CanvasTexture.js +125 -0
  53. package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -0
  54. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +12 -0
  55. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +57 -0
  56. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -0
  57. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +22 -0
  58. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +67 -0
  59. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -0
  60. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +56 -0
  61. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +236 -0
  62. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -0
  63. package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +44 -0
  64. package/dist/src/core/renderers/webgl/WebGlRenderOp.js +125 -0
  65. package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +1 -0
  66. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +136 -0
  67. package/dist/src/core/renderers/webgl/WebGlRenderer.js +573 -0
  68. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -0
  69. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +222 -0
  70. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +331 -0
  71. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -0
  72. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +37 -0
  73. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +218 -0
  74. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -0
  75. package/dist/src/core/shaders/canvas/Border.d.ts +9 -0
  76. package/dist/src/core/shaders/canvas/Border.js +57 -0
  77. package/dist/src/core/shaders/canvas/Border.js.map +1 -0
  78. package/dist/src/core/shaders/canvas/HolePunch.d.ts +7 -0
  79. package/dist/src/core/shaders/canvas/HolePunch.js +38 -0
  80. package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -0
  81. package/dist/src/core/shaders/canvas/LinearGradient.d.ts +10 -0
  82. package/dist/src/core/shaders/canvas/LinearGradient.js +48 -0
  83. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -0
  84. package/dist/src/core/shaders/canvas/RadialGradient.d.ts +11 -0
  85. package/dist/src/core/shaders/canvas/RadialGradient.js +70 -0
  86. package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -0
  87. package/dist/src/core/shaders/canvas/Rounded.d.ts +7 -0
  88. package/dist/src/core/shaders/canvas/Rounded.js +33 -0
  89. package/dist/src/core/shaders/canvas/Rounded.js.map +1 -0
  90. package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +7 -0
  91. package/dist/src/core/shaders/canvas/RoundedWithBorder.js +43 -0
  92. package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -0
  93. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +8 -0
  94. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +41 -0
  95. package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -0
  96. package/dist/src/core/shaders/canvas/RoundedWithShadow.d.ts +7 -0
  97. package/dist/src/core/shaders/canvas/RoundedWithShadow.js +40 -0
  98. package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -0
  99. package/dist/src/core/shaders/canvas/Shadow.d.ts +8 -0
  100. package/dist/src/core/shaders/canvas/Shadow.js +31 -0
  101. package/dist/src/core/shaders/canvas/Shadow.js.map +1 -0
  102. package/dist/src/core/shaders/canvas/utils/render.d.ts +5 -0
  103. package/dist/src/core/shaders/canvas/utils/render.js +84 -0
  104. package/dist/src/core/shaders/canvas/utils/render.js.map +1 -0
  105. package/dist/src/core/shaders/templates/BorderTemplate.d.ts +37 -0
  106. package/dist/src/core/shaders/templates/BorderTemplate.js +73 -0
  107. package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -0
  108. package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +46 -0
  109. package/dist/src/core/shaders/templates/HolePunchTemplate.js +35 -0
  110. package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -0
  111. package/dist/src/core/shaders/templates/LinearGradientTemplate.d.ts +23 -0
  112. package/dist/src/core/shaders/templates/LinearGradientTemplate.js +47 -0
  113. package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +1 -0
  114. package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +31 -0
  115. package/dist/src/core/shaders/templates/RadialGradientTemplate.js +49 -0
  116. package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -0
  117. package/dist/src/core/shaders/templates/RoundedTemplate.d.ts +29 -0
  118. package/dist/src/core/shaders/templates/RoundedTemplate.js +67 -0
  119. package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -0
  120. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +7 -0
  121. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +24 -0
  122. package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -0
  123. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +6 -0
  124. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +23 -0
  125. package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +1 -0
  126. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +6 -0
  127. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +23 -0
  128. package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +1 -0
  129. package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +34 -0
  130. package/dist/src/core/shaders/templates/ShadowTemplate.js +66 -0
  131. package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -0
  132. package/dist/src/core/shaders/utils.d.ts +5 -0
  133. package/dist/src/core/shaders/utils.js +41 -0
  134. package/dist/src/core/shaders/utils.js.map +1 -0
  135. package/dist/src/core/shaders/webgl/Border.d.ts +3 -0
  136. package/dist/src/core/shaders/webgl/Border.js +110 -0
  137. package/dist/src/core/shaders/webgl/Border.js.map +1 -0
  138. package/dist/src/core/shaders/webgl/Default.d.ts +2 -0
  139. package/dist/src/core/shaders/webgl/Default.js +86 -0
  140. package/dist/src/core/shaders/webgl/Default.js.map +1 -0
  141. package/dist/src/core/shaders/webgl/DefaultBatched.d.ts +2 -0
  142. package/dist/src/core/shaders/webgl/DefaultBatched.js +104 -0
  143. package/dist/src/core/shaders/webgl/DefaultBatched.js.map +1 -0
  144. package/dist/src/core/shaders/webgl/HolePunch.d.ts +3 -0
  145. package/dist/src/core/shaders/webgl/HolePunch.js +65 -0
  146. package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -0
  147. package/dist/src/core/shaders/webgl/LinearGradient.d.ts +3 -0
  148. package/dist/src/core/shaders/webgl/LinearGradient.js +76 -0
  149. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -0
  150. package/dist/src/core/shaders/webgl/RadialGradient.d.ts +3 -0
  151. package/dist/src/core/shaders/webgl/RadialGradient.js +74 -0
  152. package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -0
  153. package/dist/src/core/shaders/webgl/Rounded.d.ts +7 -0
  154. package/dist/src/core/shaders/webgl/Rounded.js +86 -0
  155. package/dist/src/core/shaders/webgl/Rounded.js.map +1 -0
  156. package/dist/src/core/shaders/webgl/RoundedWithBorder.d.ts +3 -0
  157. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +140 -0
  158. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -0
  159. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.d.ts +3 -0
  160. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +162 -0
  161. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -0
  162. package/dist/src/core/shaders/webgl/RoundedWithShadow.d.ts +3 -0
  163. package/dist/src/core/shaders/webgl/RoundedWithShadow.js +84 -0
  164. package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -0
  165. package/dist/src/core/shaders/webgl/SdfShader.d.ts +30 -0
  166. package/dist/src/core/shaders/webgl/SdfShader.js +107 -0
  167. package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -0
  168. package/dist/src/core/shaders/webgl/Shadow.d.ts +3 -0
  169. package/dist/src/core/shaders/webgl/Shadow.js +110 -0
  170. package/dist/src/core/shaders/webgl/Shadow.js.map +1 -0
  171. package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
  172. package/dist/src/core/text-rendering/CanvasFontHandler.js +221 -0
  173. package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
  174. package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
  175. package/dist/src/core/text-rendering/CanvasTextRenderer.js +157 -0
  176. package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
  177. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +182 -0
  178. package/dist/src/core/text-rendering/SdfFontHandler.js +388 -0
  179. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
  180. package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +17 -0
  181. package/dist/src/core/text-rendering/SdfTextRenderer.js +311 -0
  182. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
  183. package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +19 -0
  184. package/dist/src/core/text-rendering/TextLayoutEngine.js +324 -0
  185. package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
  186. package/dist/src/core/text-rendering/TextRenderer.d.ts +368 -0
  187. package/dist/src/core/text-rendering/TextRenderer.js +20 -0
  188. package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
  189. package/dist/src/core/text-rendering/Utils.d.ts +30 -0
  190. package/dist/src/core/text-rendering/Utils.js +84 -0
  191. package/dist/src/core/text-rendering/Utils.js.map +1 -0
  192. package/dist/src/core/textures/ImageTexture.js +3 -2
  193. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  194. package/dist/src/core/textures/SubTexture.js +2 -0
  195. package/dist/src/core/textures/SubTexture.js.map +1 -1
  196. package/dist/src/core/textures/Texture.d.ts +2 -1
  197. package/dist/src/core/textures/Texture.js +2 -1
  198. package/dist/src/core/textures/Texture.js.map +1 -1
  199. package/dist/src/core/utils.d.ts +1 -1
  200. package/dist/src/main-api/Inspector.js +1 -1
  201. package/dist/src/main-api/Inspector.js.map +1 -1
  202. package/dist/src/main-api/Renderer.d.ts +13 -0
  203. package/dist/src/main-api/Renderer.js +2 -0
  204. package/dist/src/main-api/Renderer.js.map +1 -1
  205. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  206. package/exports/index.ts +5 -0
  207. package/package.json +1 -1
  208. package/src/common/CommonTypes.ts +2 -1
  209. package/src/core/CoreNode.ts +10 -4
  210. package/src/core/CoreTextureManager.ts +19 -4
  211. package/src/core/Stage.ts +3 -0
  212. package/src/core/TextureError.ts +46 -0
  213. package/src/core/TextureMemoryManager.ts +18 -52
  214. package/src/core/platform.ts +0 -4
  215. package/src/core/textures/ImageTexture.ts +3 -2
  216. package/src/core/textures/SubTexture.ts +2 -0
  217. package/src/core/textures/Texture.ts +5 -3
  218. package/src/main-api/Inspector.ts +4 -1
  219. package/src/main-api/Renderer.ts +16 -0
  220. package/dist/src/core/renderers/webgl/WebGlCoreShader.destroy.d.ts +0 -1
  221. package/dist/src/core/renderers/webgl/WebGlCoreShader.destroy.js +0 -2
  222. package/dist/src/core/renderers/webgl/WebGlCoreShader.destroy.js.map +0 -1
@@ -0,0 +1,37 @@
1
+ export var TextureErrorCode;
2
+ (function (TextureErrorCode) {
3
+ TextureErrorCode["MEMORY_THRESHOLD_EXCEEDED"] = "MEMORY_THRESHOLD_EXCEEDED";
4
+ TextureErrorCode["TEXTURE_DATA_NULL"] = "TEXTURE_DATA_NULL";
5
+ TextureErrorCode["TEXTURE_TYPE_NOT_REGISTERED"] = "TEXTURE_TYPE_NOT_REGISTERED";
6
+ })(TextureErrorCode || (TextureErrorCode = {}));
7
+ const defaultMessages = {
8
+ [TextureErrorCode.MEMORY_THRESHOLD_EXCEEDED]: 'Memory threshold exceeded',
9
+ [TextureErrorCode.TEXTURE_DATA_NULL]: 'Texture data is null',
10
+ [TextureErrorCode.TEXTURE_TYPE_NOT_REGISTERED]: 'Texture type is not registered',
11
+ };
12
+ export class TextureError extends Error {
13
+ code;
14
+ constructor(codeOrMessage, maybeMessage) {
15
+ const isCode = Object.values(TextureErrorCode).includes(codeOrMessage);
16
+ const code = isCode ? codeOrMessage : undefined;
17
+ let message;
18
+ if (isCode && code) {
19
+ message = maybeMessage ?? defaultMessages[code];
20
+ }
21
+ else {
22
+ message = String(codeOrMessage);
23
+ }
24
+ super(message);
25
+ this.name = new.target.name;
26
+ if (code)
27
+ this.code = code;
28
+ }
29
+ }
30
+ export function isTextureError(err) {
31
+ return (err instanceof TextureError ||
32
+ (typeof err === 'object' &&
33
+ err !== null &&
34
+ err.name === 'TextureError' &&
35
+ typeof err.code === 'string'));
36
+ }
37
+ //# sourceMappingURL=TextureError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextureError.js","sourceRoot":"","sources":["../../../src/core/TextureError.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,2EAAuD,CAAA;IACvD,2DAAuC,CAAA;IACvC,+EAA2D,CAAA;AAC7D,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B;AAED,MAAM,eAAe,GAAqC;IACxD,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,EAAE,2BAA2B;IACzE,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,sBAAsB;IAC5D,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,EAC5C,gCAAgC;CACnC,CAAC;AAEF,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,IAAI,CAAoB;IAIxB,YAAY,aAAwC,EAAE,YAAqB;QACzE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CACrD,aAAiC,CAClC,CAAC;QAEF,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAE,aAAkC,CAAC,CAAC,CAAC,SAAS,CAAC;QACtE,IAAI,OAAe,CAAC;QACpB,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;YACnB,OAAO,GAAG,YAAY,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;QAClC,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QAC5B,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,OAAO,CACL,GAAG,YAAY,YAAY;QAC3B,CAAC,OAAO,GAAG,KAAK,QAAQ;YACtB,GAAG,KAAK,IAAI;YACX,GAA0B,CAAC,IAAI,KAAK,cAAc;YACnD,OAAQ,GAA0B,CAAC,IAAI,KAAK,QAAQ,CAAC,CACxD,CAAC;AACJ,CAAC"}
@@ -95,7 +95,7 @@ export declare class TextureMemoryManager {
95
95
  private debugLogging;
96
96
  private lastCleanupTime;
97
97
  private baselineMemoryAllocation;
98
- private needsDefrag;
98
+ private hasWarnedAboveCritical;
99
99
  criticalCleanupRequested: boolean;
100
100
  doNotExceedCriticalThreshold: boolean;
101
101
  /**
@@ -117,16 +117,6 @@ export declare class TextureMemoryManager {
117
117
  setTextureMemUse(texture: Texture, byteSize: number): void;
118
118
  checkCleanup(): boolean;
119
119
  checkCriticalCleanup(): boolean;
120
- /**
121
- * Check if defragmentation is needed
122
- *
123
- * @remarks
124
- * Returns true if the loadedTextures array has null entries that need
125
- * to be compacted. Called by platform during idle periods.
126
- *
127
- * @returns true if defragmentation should be performed
128
- */
129
- checkDefrag(): boolean;
130
120
  /**
131
121
  * Destroy a texture and null out its array position
132
122
  *
@@ -134,14 +124,6 @@ export declare class TextureMemoryManager {
134
124
  */
135
125
  destroyTexture(texture: Texture): void;
136
126
  cleanup(): void;
137
- /**
138
- * Defragment the loadedTextures array by removing null entries
139
- *
140
- * @remarks
141
- * This should be called during idle periods to compact the array
142
- * after null-marking deletions. Zero overhead during critical cleanup.
143
- */
144
- defragment(): void;
145
127
  /**
146
128
  * Get the current texture memory usage information
147
129
  *
@@ -44,7 +44,7 @@ export class TextureMemoryManager {
44
44
  debugLogging;
45
45
  lastCleanupTime = 0;
46
46
  baselineMemoryAllocation;
47
- needsDefrag = false;
47
+ hasWarnedAboveCritical = false;
48
48
  criticalCleanupRequested = false;
49
49
  doNotExceedCriticalThreshold;
50
50
  /**
@@ -93,11 +93,10 @@ export class TextureMemoryManager {
93
93
  // Update global memory counter by subtracting old value
94
94
  this.memUsed -= texture.memUsed;
95
95
  if (byteSize === 0) {
96
- // PERFORMANCE: Mark for deletion instead of splice (zero overhead)
96
+ // PERFORMANCE: Mark for deletion, slot will be reused later
97
97
  const index = this.loadedTextures.indexOf(texture);
98
98
  if (index !== -1) {
99
99
  this.loadedTextures[index] = null;
100
- this.needsDefrag = true;
101
100
  }
102
101
  texture.memUsed = 0;
103
102
  return;
@@ -107,7 +106,14 @@ export class TextureMemoryManager {
107
106
  texture.memUsed = byteSize;
108
107
  this.memUsed += byteSize;
109
108
  if (this.loadedTextures.indexOf(texture) === -1) {
110
- this.loadedTextures.push(texture);
109
+ // PERFORMANCE: Reuse empty slots before appending
110
+ const emptyIndex = this.loadedTextures.indexOf(null);
111
+ if (emptyIndex !== -1) {
112
+ this.loadedTextures[emptyIndex] = texture;
113
+ }
114
+ else {
115
+ this.loadedTextures.push(texture);
116
+ }
111
117
  }
112
118
  }
113
119
  if (this.memUsed > this.criticalThreshold) {
@@ -122,18 +128,6 @@ export class TextureMemoryManager {
122
128
  checkCriticalCleanup() {
123
129
  return this.memUsed > this.criticalThreshold;
124
130
  }
125
- /**
126
- * Check if defragmentation is needed
127
- *
128
- * @remarks
129
- * Returns true if the loadedTextures array has null entries that need
130
- * to be compacted. Called by platform during idle periods.
131
- *
132
- * @returns true if defragmentation should be performed
133
- */
134
- checkDefrag() {
135
- return this.needsDefrag;
136
- }
137
131
  /**
138
132
  * Destroy a texture and null out its array position
139
133
  *
@@ -143,11 +137,10 @@ export class TextureMemoryManager {
143
137
  if (this.debugLogging === true) {
144
138
  console.log(`[TextureMemoryManager] Destroying texture. State: ${texture.state}`);
145
139
  }
146
- // PERFORMANCE: Null out array position instead of splice (zero overhead)
140
+ // PERFORMANCE: Null out array position, slot will be reused later
147
141
  const index = this.loadedTextures.indexOf(texture);
148
142
  if (index !== -1) {
149
143
  this.loadedTextures[index] = null;
150
- this.needsDefrag = true;
151
144
  }
152
145
  // Destroy texture and update memory counters
153
146
  const txManager = this.stage.txManager;
@@ -200,38 +193,18 @@ export class TextureMemoryManager {
200
193
  memUsed: this.memUsed,
201
194
  criticalThreshold: this.criticalThreshold,
202
195
  });
203
- if (this.debugLogging === true || isProductionEnvironment() === false) {
196
+ // Only emit the warning once per over-threshold period
197
+ if (!this.hasWarnedAboveCritical &&
198
+ (this.debugLogging === true || isProductionEnvironment() === false)) {
204
199
  console.warn(`[TextureMemoryManager] Memory usage above critical threshold after cleanup: ${this.memUsed}`);
200
+ this.hasWarnedAboveCritical = true;
205
201
  }
206
202
  }
207
203
  else {
208
204
  this.criticalCleanupRequested = false;
205
+ this.hasWarnedAboveCritical = false;
209
206
  }
210
207
  }
211
- /**
212
- * Defragment the loadedTextures array by removing null entries
213
- *
214
- * @remarks
215
- * This should be called during idle periods to compact the array
216
- * after null-marking deletions. Zero overhead during critical cleanup.
217
- */
218
- defragment() {
219
- if (!this.needsDefrag) {
220
- return;
221
- }
222
- // PERFORMANCE: Single-pass compaction
223
- let writeIndex = 0;
224
- for (let readIndex = 0; readIndex < this.loadedTextures.length; readIndex++) {
225
- const texture = this.loadedTextures[readIndex];
226
- if (texture !== null && texture !== undefined) {
227
- this.loadedTextures[writeIndex] = texture;
228
- writeIndex++;
229
- }
230
- }
231
- // Trim array to new size
232
- this.loadedTextures.length = writeIndex;
233
- this.needsDefrag = false;
234
- }
235
208
  /**
236
209
  * Get the current texture memory usage information
237
210
  *
@@ -1 +1 @@
1
- {"version":3,"file":"TextureMemoryManager.js","sourceRoot":"","sources":["../../../src/core/TextureMemoryManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TextureMemoryManager.js","sourceRoot":"","sources":["../../../src/core/TextureMemoryManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function normalizeCanvasColor(color: number, isRGBA?: boolean): string;
@@ -0,0 +1,19 @@
1
+ import { parseToAbgrString, parseToRgbaString } from './colorParser.js';
2
+ const parsedArgbColors = new Map();
3
+ const parsedRgbaColors = new Map();
4
+ export function normalizeCanvasColor(color, isRGBA = false) {
5
+ let targetCache = isRGBA === true ? parsedRgbaColors : parsedArgbColors;
6
+ let out = targetCache.get(color);
7
+ if (out !== undefined) {
8
+ return out;
9
+ }
10
+ if (isRGBA === true) {
11
+ out = parseToRgbaString(color);
12
+ }
13
+ else {
14
+ out = parseToAbgrString(color);
15
+ }
16
+ targetCache.set(color, out);
17
+ return out;
18
+ }
19
+ //# sourceMappingURL=colorCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colorCache.js","sourceRoot":"","sources":["../../../../src/core/lib/colorCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAExE,MAAM,gBAAgB,GAAwB,IAAI,GAAG,EAAE,CAAC;AACxD,MAAM,gBAAgB,GAAwB,IAAI,GAAG,EAAE,CAAC;AAExD,MAAM,UAAU,oBAAoB,CAAC,KAAa,EAAE,SAAkB,KAAK;IACzE,IAAI,WAAW,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC;IACxE,IAAI,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,GAAG,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IACD,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC5B,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,21 @@
1
+ export interface IParsedColor {
2
+ isWhite: boolean;
3
+ a: number;
4
+ r: number;
5
+ g: number;
6
+ b: number;
7
+ }
8
+ /**
9
+ * Extract color components
10
+ */
11
+ export declare function parseColor(abgr: number): IParsedColor;
12
+ export declare function parseToAbgrString(abgr: number): string;
13
+ export declare function parseToRgbaString(rgba: number): string;
14
+ /**
15
+ * Extract color components
16
+ */
17
+ export declare function parseColorRgba(rgba: number): IParsedColor;
18
+ /**
19
+ * Format a parsed color into a rgba CSS color
20
+ */
21
+ export declare function formatRgba({ a, r, g, b }: IParsedColor): string;
@@ -0,0 +1,72 @@
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
+ const WHITE = {
20
+ isWhite: true,
21
+ a: 1,
22
+ r: 0xff,
23
+ g: 0xff,
24
+ b: 0xff,
25
+ };
26
+ /**
27
+ * Extract color components
28
+ */
29
+ export function parseColor(abgr) {
30
+ if (abgr === 0xffffffff) {
31
+ return WHITE;
32
+ }
33
+ const a = ((abgr >>> 24) & 0xff) / 255;
34
+ const b = (abgr >>> 16) & 0xff & 0xff;
35
+ const g = (abgr >>> 8) & 0xff & 0xff;
36
+ const r = abgr & 0xff & 0xff;
37
+ return { isWhite: false, a, r, g, b };
38
+ }
39
+ export function parseToAbgrString(abgr) {
40
+ const a = ((abgr >>> 24) & 0xff) / 255;
41
+ const b = (abgr >>> 16) & 0xff & 0xff;
42
+ const g = (abgr >>> 8) & 0xff & 0xff;
43
+ const r = abgr & 0xff & 0xff;
44
+ return `rgba(${r},${g},${b},${a})`;
45
+ }
46
+ export function parseToRgbaString(rgba) {
47
+ const r = (rgba >>> 24) & 0xff;
48
+ const g = (rgba >>> 16) & 0xff & 0xff;
49
+ const b = (rgba >>> 8) & 0xff & 0xff;
50
+ const a = (rgba & 0xff & 0xff) / 255;
51
+ return `rgba(${r},${g},${b},${a})`;
52
+ }
53
+ /**
54
+ * Extract color components
55
+ */
56
+ export function parseColorRgba(rgba) {
57
+ if (rgba === 0xffffffff) {
58
+ return WHITE;
59
+ }
60
+ const r = (rgba >>> 24) & 0xff;
61
+ const g = (rgba >>> 16) & 0xff & 0xff;
62
+ const b = (rgba >>> 8) & 0xff & 0xff;
63
+ const a = (rgba & 0xff & 0xff) / 255;
64
+ return { isWhite: false, r, g, b, a };
65
+ }
66
+ /**
67
+ * Format a parsed color into a rgba CSS color
68
+ */
69
+ export function formatRgba({ a, r, g, b }) {
70
+ return `rgba(${r},${g},${b},${a})`;
71
+ }
72
+ //# sourceMappingURL=colorParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colorParser.js","sourceRoot":"","sources":["../../../../src/core/lib/colorParser.ts"],"names":[],"mappings":"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"}
@@ -52,9 +52,6 @@ export const startLoop = (stage) => {
52
52
  if (stage.txMemManager.checkCleanup() === true) {
53
53
  stage.txMemManager.cleanup();
54
54
  }
55
- if (stage.txMemManager.checkDefrag() === true) {
56
- stage.txMemManager.defragment();
57
- }
58
55
  stage.flushFrameEvents();
59
56
  return;
60
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../../../src/core/platform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAY,EAAE,EAAE;IACxC,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,MAAM,OAAO,GAAG,CAAC,cAAsB,CAAC,EAAE,EAAE;QAC1C,MAAM,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;QAE9C,yCAAyC;QACzC,IAAI,eAAe,GAAG,CAAC,IAAI,WAAW,GAAG,aAAa,GAAG,eAAe,EAAE,CAAC;YACzE,wEAAwE;YACxE,MAAM,KAAK,GAAG,eAAe,GAAG,CAAC,WAAW,GAAG,aAAa,CAAC,CAAC;YAC9D,UAAU,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QAED,aAAa,GAAG,WAAW,CAAC;QAE5B,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAEzB,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,CAAC;YAC7B,0EAA0E;YAC1E,KAAK,CAAC,YAAY,EAAE,CAAC;YAErB,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;gBACxB,2CAA2C;gBAC3C,UAAU,CACR,GAAG,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC,EACpC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAC9C,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,gDAAgD;gBAChD,UAAU,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC,CAAC;YACvE,CAAC;YAED,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC5B,MAAM,GAAG,IAAI,CAAC;YAChB,CAAC;YAED,IAAI,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC;gBAC/C,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YAC/B,CAAC;YAED,IAAI,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC;gBAC9C,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;YAClC,CAAC;YAED,KAAK,CAAC,gBAAgB,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,MAAM,GAAG,KAAK,CAAC;QACf,KAAK,CAAC,SAAS,EAAE,CAAC;QAClB,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAEzB,sBAAsB;QACtB,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;YACxB,2DAA2D;YAC3D,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAC7B,CAAC,EACD,eAAe,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,CACpD,CAAC;YACF,UAAU,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,uCAAuC;YACvC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC;IAEF,qBAAqB,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE;IAC/B,OAAO,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AACtD,CAAC,CAAC"}
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../../../src/core/platform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAY,EAAE,EAAE;IACxC,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,MAAM,OAAO,GAAG,CAAC,cAAsB,CAAC,EAAE,EAAE;QAC1C,MAAM,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;QAE9C,yCAAyC;QACzC,IAAI,eAAe,GAAG,CAAC,IAAI,WAAW,GAAG,aAAa,GAAG,eAAe,EAAE,CAAC;YACzE,wEAAwE;YACxE,MAAM,KAAK,GAAG,eAAe,GAAG,CAAC,WAAW,GAAG,aAAa,CAAC,CAAC;YAC9D,UAAU,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QAED,aAAa,GAAG,WAAW,CAAC;QAE5B,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAEzB,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,CAAC;YAC7B,0EAA0E;YAC1E,KAAK,CAAC,YAAY,EAAE,CAAC;YAErB,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;gBACxB,2CAA2C;gBAC3C,UAAU,CACR,GAAG,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC,EACpC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAC9C,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,gDAAgD;gBAChD,UAAU,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC,CAAC;YACvE,CAAC;YAED,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC5B,MAAM,GAAG,IAAI,CAAC;YAChB,CAAC;YAED,IAAI,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC;gBAC/C,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YAC/B,CAAC;YAED,KAAK,CAAC,gBAAgB,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,MAAM,GAAG,KAAK,CAAC;QACf,KAAK,CAAC,SAAS,EAAE,CAAC;QAClB,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAEzB,sBAAsB;QACtB,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;YACxB,2DAA2D;YAC3D,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAC7B,CAAC,EACD,eAAe,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,CACpD,CAAC;YACF,UAAU,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,uCAAuC;YACvC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC;IAEF,qBAAqB,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE;IAC/B,OAAO,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AACtD,CAAC,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { type Stage } from '../Stage.js';
2
+ export declare abstract class Platform {
3
+ /**
4
+ * Creates a new canvas element.
5
+ * @returns The created HTMLCanvasElement.
6
+ */
7
+ abstract createCanvas(): HTMLCanvasElement;
8
+ /**
9
+ * Get a DOM element by ID
10
+ * @returns The DOM element (or null)
11
+ */
12
+ abstract getElementById(id: string): HTMLElement | null;
13
+ /**
14
+ * Starts the main rendering loop, calling the provided update function every frame.
15
+ * @param Stage - The stage for rendering
16
+ */
17
+ abstract startLoop(stage: Stage): void;
18
+ /**
19
+ * Abstracted createImageBitmap method.
20
+ * @param blob - The image source to create the ImageBitmap from.
21
+ * @param sxOrOptions - The source rectangle x coordinate or ImageBitmapOptions.
22
+ * @param sy - The source rectangle y coordinate.
23
+ * @param sw - The source rectangle width.
24
+ * @param sh - The source rectangle height.
25
+ * @param options - The ImageBitmapOptions.
26
+ * @returns A promise that resolves with the created ImageBitmap.
27
+ */
28
+ abstract createImageBitmap(blob: ImageBitmapSource): Promise<ImageBitmap>;
29
+ abstract createImageBitmap(blob: ImageBitmapSource, options: ImageBitmapOptions): Promise<ImageBitmap>;
30
+ abstract createImageBitmap(blob: ImageBitmapSource, sx: number, sy: number, sw: number, sh: number): Promise<ImageBitmap>;
31
+ abstract createImageBitmap(blob: ImageBitmapSource, sx: number, sy: number, sw: number, sh: number, options: ImageBitmapOptions): Promise<ImageBitmap>;
32
+ /**
33
+ * Retrieves the current timestamp.
34
+ * @returns The current timestamp.
35
+ */
36
+ abstract getTimeStamp(): number;
37
+ }
@@ -0,0 +1,22 @@
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 {} from '../Stage.js';
20
+ export class Platform {
21
+ }
22
+ //# sourceMappingURL=Platform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Platform.js","sourceRoot":"","sources":["../../../../src/core/platforms/Platform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAc,MAAM,aAAa,CAAC;AAEzC,MAAM,OAAgB,QAAQ;CAuD7B"}
@@ -0,0 +1,9 @@
1
+ import { Platform } from '../Platform.js';
2
+ import type { Stage } from '../../Stage.js';
3
+ export declare class WebPlatform extends Platform {
4
+ createCanvas(): HTMLCanvasElement;
5
+ getElementById(id: string): HTMLElement | null;
6
+ startLoop(stage: Stage): void;
7
+ createImageBitmap(blob: ImageBitmapSource, sxOrOptions?: number | ImageBitmapOptions, sy?: number, sw?: number, sh?: number, options?: ImageBitmapOptions): Promise<ImageBitmap>;
8
+ getTimeStamp(): number;
9
+ }
@@ -0,0 +1,84 @@
1
+ import { Platform } from '../Platform.js';
2
+ export class WebPlatform extends Platform {
3
+ ////////////////////////
4
+ // Platform-specific methods
5
+ ////////////////////////
6
+ createCanvas() {
7
+ const canvas = document.createElement('canvas');
8
+ return canvas;
9
+ }
10
+ getElementById(id) {
11
+ return document.getElementById(id);
12
+ }
13
+ ////////////////////////
14
+ // Update loop
15
+ ////////////////////////
16
+ startLoop(stage) {
17
+ let isIdle = false;
18
+ let lastFrameTime = 0;
19
+ const runLoop = (currentTime = 0) => {
20
+ const targetFrameTime = stage.targetFrameTime;
21
+ // Check if we should throttle this frame
22
+ if (targetFrameTime > 0 &&
23
+ currentTime - lastFrameTime < targetFrameTime) {
24
+ // Too early for next frame, schedule with setTimeout for precise timing
25
+ const delay = targetFrameTime - (currentTime - lastFrameTime);
26
+ setTimeout(() => requestAnimationFrame(runLoop), delay);
27
+ return;
28
+ }
29
+ stage.updateFrameTime();
30
+ stage.updateAnimations();
31
+ if (!stage.hasSceneUpdates()) {
32
+ // We still need to calculate the fps else it looks like the app is frozen
33
+ stage.calculateFps();
34
+ if (targetFrameTime > 0) {
35
+ // Use setTimeout for throttled idle frames
36
+ setTimeout(() => requestAnimationFrame(runLoop), Math.max(targetFrameTime, 16.666666666666668));
37
+ }
38
+ else {
39
+ // Use standard idle timeout when not throttling
40
+ setTimeout(() => requestAnimationFrame(runLoop), 16.666666666666668);
41
+ }
42
+ if (!isIdle) {
43
+ stage.shManager.cleanup();
44
+ stage.eventBus.emit('idle');
45
+ isIdle = true;
46
+ }
47
+ if (stage.txMemManager.checkCleanup() === true) {
48
+ stage.txMemManager.cleanup(false);
49
+ }
50
+ stage.flushFrameEvents();
51
+ return;
52
+ }
53
+ isIdle = false;
54
+ stage.drawFrame();
55
+ stage.flushFrameEvents();
56
+ // Schedule next frame
57
+ if (targetFrameTime > 0) {
58
+ // Use setTimeout + rAF combination for precise FPS control
59
+ const nextFrameDelay = Math.max(0, targetFrameTime - (performance.now() - currentTime));
60
+ setTimeout(() => requestAnimationFrame(runLoop), nextFrameDelay);
61
+ }
62
+ else {
63
+ // Use standard rAF when not throttling
64
+ requestAnimationFrame(runLoop);
65
+ }
66
+ };
67
+ requestAnimationFrame(runLoop);
68
+ }
69
+ ////////////////////////
70
+ // ImageBitmap
71
+ ////////////////////////
72
+ createImageBitmap(blob, sxOrOptions, sy, sw, sh, options) {
73
+ if (typeof sxOrOptions === 'number') {
74
+ return createImageBitmap(blob, sxOrOptions, sy ?? 0, sw ?? 0, sh ?? 0, options);
75
+ }
76
+ else {
77
+ return createImageBitmap(blob, sxOrOptions);
78
+ }
79
+ }
80
+ getTimeStamp() {
81
+ return performance ? performance.now() : Date.now();
82
+ }
83
+ }
84
+ //# sourceMappingURL=WebPlatform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebPlatform.js","sourceRoot":"","sources":["../../../../../src/core/platforms/web/WebPlatform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import { type CoreNode } from '../CoreNode.js';
2
+ import type { Stage } from '../Stage.js';
3
+ export interface AdvShaderProp<T = any, Props = Record<string, unknown>> {
4
+ /**
5
+ * default value
6
+ */
7
+ default: T;
8
+ resolve?: (this: AdvShaderProp<T, Props>, value: T, props: Props) => T;
9
+ transform?: (start: T, end: T, progress: number) => T;
10
+ }
11
+ export type AdvancedShaderProp<T = any, Props = Record<string, unknown>> = (AdvShaderProp<T, Props> & {
12
+ set: (value: T, props: Props) => void;
13
+ get: (props: Props) => T;
14
+ }) | (AdvShaderProp<T, Props> & {
15
+ set?: never;
16
+ get?: never;
17
+ });
18
+ export type ShaderProp<T, Props> = T | AdvancedShaderProp<T, Props>;
19
+ export type ShaderProps<Props> = {
20
+ [K in keyof Props]: ShaderProp<Props[K], Props>;
21
+ };
22
+ export declare function isAdvancedShaderProp(obj: any): obj is AdvancedShaderProp;
23
+ export declare function resolveShaderProps(props: Record<string, unknown>, propsConfig: ShaderProps<Record<string, unknown>>): void;
24
+ /**
25
+ * CoreShaderType is a template for ShaderTypes the renderer.
26
+ * You could view a ShaderType as a configuration object that contains methods,
27
+ * and values that you can use to alter the way a node is drawn by the Renderer.
28
+ */
29
+ export interface CoreShaderType<Props extends object = any> {
30
+ /**
31
+ * Values you use to draw the Shader
32
+ */
33
+ props?: ShaderProps<Props>;
34
+ /**
35
+ * used for making a cache key to check for reusability, currently only used for webgl ShaderTypes but might be needed for other types of renderer
36
+ */
37
+ getCacheMarkers?: (props: Props) => string;
38
+ }
39
+ /**
40
+ * CoreShaderNode is a base class that manages the shader prop values.
41
+ * When a prop is being updated the CoreShaderNode will notify either the associated CoreNode,
42
+ * or the Stage that there has been a change and a new render of the scene.
43
+ */
44
+ export declare class CoreShaderNode<Props extends object = Record<string, unknown>> {
45
+ readonly shaderKey: string;
46
+ readonly stage: Stage;
47
+ readonly shaderType: CoreShaderType<Props>;
48
+ protected propsConfig: ShaderProps<Props> | undefined;
49
+ readonly resolvedProps: Props | undefined;
50
+ protected definedProps: Props | undefined;
51
+ protected node: CoreNode | null;
52
+ update: (() => void) | undefined;
53
+ constructor(shaderKey: string, type: CoreShaderType<Props>, stage: Stage, props?: Props);
54
+ private defineProps;
55
+ attachNode(node: CoreNode): void;
56
+ createValueKey(): string;
57
+ get props(): Props | undefined;
58
+ set props(props: Props | undefined);
59
+ }