@lightningjs/renderer 2.7.2 → 2.9.0-beta1

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 (247) hide show
  1. package/README.md +7 -4
  2. package/dist/src/common/EventEmitter.js.map +1 -1
  3. package/dist/src/core/CoreNode.d.ts +2 -0
  4. package/dist/src/core/CoreNode.js +27 -8
  5. package/dist/src/core/CoreNode.js.map +1 -1
  6. package/dist/src/core/CoreShaderManager.js.map +1 -1
  7. package/dist/src/core/CoreTextNode.js.map +1 -1
  8. package/dist/src/core/CoreTextureManager.d.ts +13 -1
  9. package/dist/src/core/CoreTextureManager.js +163 -7
  10. package/dist/src/core/CoreTextureManager.js.map +1 -1
  11. package/dist/src/core/Stage.d.ts +1 -0
  12. package/dist/src/core/Stage.js +5 -1
  13. package/dist/src/core/Stage.js.map +1 -1
  14. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  15. package/dist/src/core/animations/CoreAnimation.js.map +1 -1
  16. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  17. package/dist/src/core/lib/ContextSpy.js.map +1 -1
  18. package/dist/src/core/lib/ImageWorker.d.ts +2 -1
  19. package/dist/src/core/lib/ImageWorker.js +40 -11
  20. package/dist/src/core/lib/ImageWorker.js.map +1 -1
  21. package/dist/src/core/lib/Matrix3d.js.map +1 -1
  22. package/dist/src/core/lib/RenderCoords.js.map +1 -1
  23. package/dist/src/core/lib/WebGlContextWrapper.d.ts +10 -0
  24. package/dist/src/core/lib/WebGlContextWrapper.js +15 -0
  25. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  26. package/dist/src/core/lib/textureCompression.js.map +1 -1
  27. package/dist/src/core/lib/utils.js.map +1 -1
  28. package/dist/src/core/platform.js.map +1 -1
  29. package/dist/src/core/renderers/CoreRenderer.d.ts +1 -0
  30. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  31. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.d.ts +6 -0
  32. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js +11 -3
  33. package/dist/src/core/renderers/canvas/CanvasCoreRenderer.js.map +1 -1
  34. package/dist/src/core/renderers/canvas/CanvasCoreTexture.js.map +1 -1
  35. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +1 -0
  36. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +38 -0
  37. package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +1 -1
  38. package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +1 -1
  39. package/dist/src/core/renderers/webgl/WebGlCoreCtxSubTexture.js.map +1 -1
  40. package/dist/src/core/renderers/webgl/WebGlCoreCtxTexture.js.map +1 -1
  41. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js +9 -3
  42. package/dist/src/core/renderers/webgl/WebGlCoreRenderOp.js.map +1 -1
  43. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +8 -1
  44. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +29 -8
  45. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  46. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +6 -1
  47. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
  48. package/dist/src/core/renderers/webgl/internal/RendererUtils.d.ts +4 -0
  49. package/dist/src/core/renderers/webgl/internal/RendererUtils.js +1 -1
  50. package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
  51. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +4 -3
  52. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
  53. package/dist/src/core/renderers/webgl/shaders/DefaultShaderBatched.js.map +1 -1
  54. package/dist/src/core/renderers/webgl/shaders/DynamicShader.js.map +1 -1
  55. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -1
  56. package/dist/src/core/renderers/webgl/shaders/effects/EffectUtils.js.map +1 -1
  57. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
  58. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -1
  59. package/dist/src/core/renderers/webgl/shaders/effects/ShaderEffect.js.map +1 -1
  60. package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +1 -1
  61. package/dist/src/core/text-rendering/TrFontManager.js.map +1 -1
  62. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +3 -4
  63. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +1 -1
  64. package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +1 -1
  65. package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +1 -1
  66. package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +1 -1
  67. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
  68. package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +1 -1
  69. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +4 -4
  70. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  71. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +1 -1
  72. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +1 -1
  73. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +1 -1
  74. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
  75. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +1 -1
  76. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +1 -1
  77. package/dist/src/core/text-rendering/renderers/TextRenderer.js +1 -1
  78. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  79. package/dist/src/core/textures/ColorTexture.js.map +1 -1
  80. package/dist/src/core/textures/ImageTexture.d.ts +8 -0
  81. package/dist/src/core/textures/ImageTexture.js +52 -39
  82. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  83. package/dist/src/core/textures/NoiseTexture.js.map +1 -1
  84. package/dist/src/core/textures/SubTexture.js.map +1 -1
  85. package/dist/src/core/textures/Texture.js.map +1 -1
  86. package/dist/src/core/utils.d.ts +1 -1
  87. package/dist/src/core/utils.js.map +1 -1
  88. package/dist/src/main-api/DynamicShaderController.js.map +1 -1
  89. package/dist/src/main-api/ICoreDriver.d.ts +1 -4
  90. package/dist/src/main-api/Inspector.js.map +1 -1
  91. package/dist/src/main-api/Renderer.d.ts +6 -0
  92. package/dist/src/main-api/Renderer.js +8 -0
  93. package/dist/src/main-api/Renderer.js.map +1 -1
  94. package/dist/src/main-api/RendererMain.d.ts +5 -2
  95. package/dist/src/main-api/RendererMain.js +6 -4
  96. package/dist/src/main-api/RendererMain.js.map +1 -1
  97. package/dist/src/main-api/ShaderController.js.map +1 -1
  98. package/dist/src/main-api/texture-usage-trackers/ManualCountTextureUsageTracker.js.map +1 -1
  99. package/dist/src/main-api/utils.js.map +1 -1
  100. package/dist/src/render-drivers/main/MainCoreDriver.d.ts +1 -4
  101. package/dist/src/render-drivers/main/MainCoreDriver.js +1 -4
  102. package/dist/src/render-drivers/main/MainCoreDriver.js.map +1 -1
  103. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +8 -6
  104. package/dist/src/render-drivers/main/MainOnlyNode.js +30 -1
  105. package/dist/src/render-drivers/main/MainOnlyNode.js.map +1 -1
  106. package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +1 -1
  107. package/dist/src/render-drivers/main/MainOnlyTextNode.js +2 -3
  108. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +1 -1
  109. package/dist/src/render-drivers/threadx/NodeStruct.d.ts +3 -0
  110. package/dist/src/render-drivers/threadx/NodeStruct.js +9 -0
  111. package/dist/src/render-drivers/threadx/NodeStruct.js.map +1 -1
  112. package/dist/src/render-drivers/threadx/SharedNode.d.ts +1 -0
  113. package/dist/src/render-drivers/threadx/SharedNode.js +1 -0
  114. package/dist/src/render-drivers/threadx/SharedNode.js.map +1 -1
  115. package/dist/src/render-drivers/threadx/TextNodeStruct.js +3 -1
  116. package/dist/src/render-drivers/threadx/TextNodeStruct.js.map +1 -1
  117. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.d.ts +1 -4
  118. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js +2 -4
  119. package/dist/src/render-drivers/threadx/ThreadXCoreDriver.js.map +1 -1
  120. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.d.ts +8 -4
  121. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js +53 -24
  122. package/dist/src/render-drivers/threadx/ThreadXMainAnimationController.js.map +1 -1
  123. package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +7 -5
  124. package/dist/src/render-drivers/threadx/ThreadXMainNode.js +8 -2
  125. package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +1 -1
  126. package/dist/src/render-drivers/threadx/ThreadXMainTextNode.js.map +1 -1
  127. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +7 -0
  128. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +1 -1
  129. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +1 -0
  130. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +1 -1
  131. package/dist/src/render-drivers/threadx/worker/renderer.js +2 -0
  132. package/dist/src/render-drivers/threadx/worker/renderer.js.map +1 -1
  133. package/dist/src/render-drivers/utils.js +6 -1
  134. package/dist/src/render-drivers/utils.js.map +1 -1
  135. package/dist/src/utils.js.map +1 -1
  136. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  137. package/dist/tsconfig.tsbuildinfo +1 -0
  138. package/package.json +10 -11
  139. package/src/core/CoreNode.ts +30 -9
  140. package/src/core/CoreTextureManager.ts +188 -10
  141. package/src/core/Stage.ts +5 -0
  142. package/src/core/lib/ImageWorker.ts +63 -11
  143. package/src/core/lib/WebGlContextWrapper.ts +16 -0
  144. package/src/core/renderers/CoreRenderer.ts +1 -0
  145. package/src/core/renderers/canvas/CanvasCoreRenderer.ts +18 -3
  146. package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +93 -0
  147. package/src/core/renderers/webgl/WebGlCoreRenderOp.ts +12 -5
  148. package/src/core/renderers/webgl/WebGlCoreRenderer.ts +35 -5
  149. package/src/core/renderers/webgl/WebGlCoreShader.ts +7 -1
  150. package/src/core/renderers/webgl/internal/RendererUtils.ts +5 -0
  151. package/src/core/renderers/webgl/internal/ShaderUtils.ts +9 -3
  152. package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +6 -4
  153. package/src/core/textures/ImageTexture.ts +78 -45
  154. package/src/main-api/Renderer.ts +9 -0
  155. package/dist/src/core/CoreStuff.d.ts +0 -1
  156. package/dist/src/core/CoreStuff.js +0 -138
  157. package/dist/src/core/CoreStuff.js.map +0 -1
  158. package/dist/src/core/LngNode.d.ts +0 -736
  159. package/dist/src/core/LngNode.js +0 -1174
  160. package/dist/src/core/LngNode.js.map +0 -1
  161. package/dist/src/core/Matrix2DContext.d.ts +0 -15
  162. package/dist/src/core/Matrix2DContext.js +0 -45
  163. package/dist/src/core/Matrix2DContext.js.map +0 -1
  164. package/dist/src/core/ShaderNode.d.ts +0 -10
  165. package/dist/src/core/ShaderNode.js +0 -30
  166. package/dist/src/core/ShaderNode.js.map +0 -1
  167. package/dist/src/core/TextNode.d.ts +0 -103
  168. package/dist/src/core/TextNode.js +0 -331
  169. package/dist/src/core/TextNode.js.map +0 -1
  170. package/dist/src/core/lib/Coords.d.ts +0 -14
  171. package/dist/src/core/lib/Coords.js +0 -55
  172. package/dist/src/core/lib/Coords.js.map +0 -1
  173. package/dist/src/core/lib/glm/common.d.ts +0 -162
  174. package/dist/src/core/lib/glm/common.js +0 -81
  175. package/dist/src/core/lib/glm/common.js.map +0 -1
  176. package/dist/src/core/lib/glm/index.d.ts +0 -11
  177. package/dist/src/core/lib/glm/index.js +0 -30
  178. package/dist/src/core/lib/glm/index.js.map +0 -1
  179. package/dist/src/core/lib/glm/mat2.d.ts +0 -219
  180. package/dist/src/core/lib/glm/mat2.js +0 -396
  181. package/dist/src/core/lib/glm/mat2.js.map +0 -1
  182. package/dist/src/core/lib/glm/mat2d.d.ts +0 -237
  183. package/dist/src/core/lib/glm/mat2d.js +0 -442
  184. package/dist/src/core/lib/glm/mat2d.js.map +0 -1
  185. package/dist/src/core/lib/glm/mat3.d.ts +0 -283
  186. package/dist/src/core/lib/glm/mat3.js +0 -680
  187. package/dist/src/core/lib/glm/mat3.js.map +0 -1
  188. package/dist/src/core/lib/glm/mat4.d.ts +0 -550
  189. package/dist/src/core/lib/glm/mat4.js +0 -1802
  190. package/dist/src/core/lib/glm/mat4.js.map +0 -1
  191. package/dist/src/core/lib/glm/quat.d.ts +0 -363
  192. package/dist/src/core/lib/glm/quat.js +0 -693
  193. package/dist/src/core/lib/glm/quat.js.map +0 -1
  194. package/dist/src/core/lib/glm/quat2.d.ts +0 -356
  195. package/dist/src/core/lib/glm/quat2.js +0 -754
  196. package/dist/src/core/lib/glm/quat2.js.map +0 -1
  197. package/dist/src/core/lib/glm/vec2.d.ts +0 -365
  198. package/dist/src/core/lib/glm/vec2.js +0 -569
  199. package/dist/src/core/lib/glm/vec2.js.map +0 -1
  200. package/dist/src/core/lib/glm/vec3.d.ts +0 -406
  201. package/dist/src/core/lib/glm/vec3.js +0 -720
  202. package/dist/src/core/lib/glm/vec3.js.map +0 -1
  203. package/dist/src/core/lib/glm/vec4.d.ts +0 -330
  204. package/dist/src/core/lib/glm/vec4.js +0 -608
  205. package/dist/src/core/lib/glm/vec4.js.map +0 -1
  206. package/dist/src/core/renderers/CoreShaderManager.d.ts +0 -19
  207. package/dist/src/core/renderers/CoreShaderManager.js +0 -33
  208. package/dist/src/core/renderers/CoreShaderManager.js.map +0 -1
  209. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.d.ts +0 -27
  210. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js +0 -82
  211. package/dist/src/core/renderers/webgl/WebGlCoreShaderManager.js.map +0 -1
  212. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.d.ts +0 -11
  213. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js +0 -34
  214. package/dist/src/core/renderers/webgl/WebGlCoreShaderProgram.js.map +0 -1
  215. package/dist/src/core/scene/Scene.d.ts +0 -59
  216. package/dist/src/core/scene/Scene.js +0 -106
  217. package/dist/src/core/scene/Scene.js.map +0 -1
  218. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.d.ts +0 -20
  219. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js +0 -55
  220. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/makeRenderWindow.js.map +0 -1
  221. package/dist/src/main-api/IRenderDriver.d.ts +0 -20
  222. package/dist/src/main-api/IRenderDriver.js +0 -20
  223. package/dist/src/main-api/IRenderDriver.js.map +0 -1
  224. package/dist/src/main-api/IShaderController.d.ts +0 -14
  225. package/dist/src/main-api/IShaderController.js +0 -30
  226. package/dist/src/main-api/IShaderController.js.map +0 -1
  227. package/dist/src/main-api/IShaderNode.d.ts +0 -17
  228. package/dist/src/main-api/IShaderNode.js +0 -19
  229. package/dist/src/main-api/IShaderNode.js.map +0 -1
  230. package/dist/src/render-drivers/main/MainOnlyShaderController.d.ts +0 -6
  231. package/dist/src/render-drivers/main/MainOnlyShaderController.js +0 -15
  232. package/dist/src/render-drivers/main/MainOnlyShaderController.js.map +0 -1
  233. package/dist/src/render-drivers/main/MainOnlyShaderNode.d.ts +0 -7
  234. package/dist/src/render-drivers/main/MainOnlyShaderNode.js +0 -34
  235. package/dist/src/render-drivers/main/MainOnlyShaderNode.js.map +0 -1
  236. package/dist/src/render-drivers/main/MainRenderDriver.d.ts +0 -17
  237. package/dist/src/render-drivers/main/MainRenderDriver.js +0 -88
  238. package/dist/src/render-drivers/main/MainRenderDriver.js.map +0 -1
  239. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.d.ts +0 -6
  240. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js +0 -16
  241. package/dist/src/render-drivers/threadx/ThreadXMainShaderController.js.map +0 -1
  242. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.d.ts +0 -7
  243. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js +0 -15
  244. package/dist/src/render-drivers/threadx/ThreadXMainShaderNode.js.map +0 -1
  245. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.d.ts +0 -21
  246. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js +0 -198
  247. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js.map +0 -1
@@ -146,3 +146,8 @@ export function isHTMLImageElement(obj: unknown): obj is HTMLImageElement {
146
146
  obj.constructor.name === 'HTMLImageElement'
147
147
  );
148
148
  }
149
+
150
+ export interface WebGlColor {
151
+ raw: number;
152
+ normalized: [number, number, number, number];
153
+ }
@@ -100,8 +100,14 @@ export function createShader(
100
100
  ) {
101
101
  const shader = glw.createShader(type);
102
102
  if (!shader) {
103
- throw new Error(`Unable to create shader type: ${type}. Source: ${source}`);
103
+ const glError = glw.getError();
104
+ throw new Error(
105
+ `Unable to create the shader: ${
106
+ type === glw.VERTEX_SHADER ? 'VERTEX_SHADER' : 'FRAGMENT_SHADER'
107
+ }.${glError ? ` WebGlContext Error: ${glError}` : ''}`,
108
+ );
104
109
  }
110
+
105
111
  glw.shaderSource(shader, source);
106
112
  glw.compileShader(shader);
107
113
  const success = !!glw.getShaderParameter(shader, glw.COMPILE_STATUS);
@@ -109,7 +115,7 @@ export function createShader(
109
115
  return shader;
110
116
  }
111
117
 
112
- console.log(glw.getShaderInfoLog(shader));
118
+ console.error(glw.getShaderInfoLog(shader));
113
119
  glw.deleteShader(shader);
114
120
  }
115
121
 
@@ -131,7 +137,7 @@ export function createProgram(
131
137
  return program;
132
138
  }
133
139
 
134
- console.log(glw.getProgramInfoLog(program));
140
+ console.warn(glw.getProgramInfoLog(program));
135
141
  glw.deleteProgram(program);
136
142
  return undefined;
137
143
  }
@@ -93,7 +93,9 @@ export class SdfTrFontFace<
93
93
  });
94
94
 
95
95
  // Pre-load it
96
- this.texture.ctxTexture.load();
96
+ stage.txManager.once('initialized', () => {
97
+ this.texture.ctxTexture.load();
98
+ });
97
99
 
98
100
  // Set this.data to the fetched data from dataUrl
99
101
  fetch(atlasDataUrl)
@@ -102,7 +104,7 @@ export class SdfTrFontFace<
102
104
  (this.data as SdfFontData) = await response.json();
103
105
  assertTruthy(this.data);
104
106
  // Add all the glyphs to the glyph map
105
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
107
+
106
108
  let maxCharHeight = 0;
107
109
  this.data.chars.forEach((glyph) => {
108
110
  this.glyphMap.set(glyph.id, glyph);
@@ -111,10 +113,10 @@ export class SdfTrFontFace<
111
113
  maxCharHeight = charHeight;
112
114
  }
113
115
  });
114
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
116
+
115
117
  (this.maxCharHeight as number) = maxCharHeight;
116
118
  // We know `data` is defined here, because we just set it
117
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
119
+
118
120
  (this.shaper as FontShaper) = new SdfFontShaper(
119
121
  this.data,
120
122
  this.glyphMap,
@@ -132,61 +132,94 @@ export class ImageTexture extends Texture {
132
132
  return mimeType.indexOf('image/png') !== -1;
133
133
  }
134
134
 
135
- async loadImage(src: string) {
136
- const { premultiplyAlpha, sx, sy, sw, sh, width, height } = this.props;
135
+ async loadImageFallback(src: string, hasAlpha: boolean) {
136
+ const img = new Image();
137
137
 
138
- if (this.txManager.imageWorkerManager !== null) {
139
- return await this.txManager.imageWorkerManager.getImage(
140
- src,
141
- premultiplyAlpha,
142
- sx,
143
- sy,
144
- sw,
145
- sh,
146
- );
147
- } else if (this.txManager.hasCreateImageBitmap === true) {
148
- const response = await fetch(src);
149
- const blob = await response.blob();
150
- const hasAlphaChannel =
151
- premultiplyAlpha ?? this.hasAlphaChannel(blob.type);
138
+ return new Promise<{ data: HTMLImageElement; premultiplyAlpha: boolean }>(
139
+ (resolve) => {
140
+ img.onload = () => {
141
+ resolve({ data: img, premultiplyAlpha: hasAlpha });
142
+ };
152
143
 
153
- if (sw !== null && sh !== null) {
154
- return {
155
- data: await createImageBitmap(blob, sx ?? 0, sy ?? 0, sw, sh, {
156
- premultiplyAlpha: hasAlphaChannel ? 'premultiply' : 'none',
157
- colorSpaceConversion: 'none',
158
- imageOrientation: 'none',
159
- }),
160
- premultiplyAlpha: hasAlphaChannel,
144
+ img.onerror = () => {
145
+ console.warn('Image loading failed, returning fallback object.');
146
+ resolve({ data: img, premultiplyAlpha: hasAlpha });
161
147
  };
162
- }
163
148
 
149
+ img.src = src;
150
+ },
151
+ );
152
+ }
153
+
154
+ async createImageBitmap(
155
+ blob: Blob,
156
+ premultiplyAlpha: boolean | null,
157
+ sx: number | null,
158
+ sy: number | null,
159
+ sw: number | null,
160
+ sh: number | null,
161
+ ): Promise<{
162
+ data: ImageBitmap | HTMLImageElement;
163
+ premultiplyAlpha: boolean;
164
+ }> {
165
+ const hasAlphaChannel = premultiplyAlpha ?? blob.type.includes('image/png');
166
+ const imageBitmapSupported = this.txManager.imageBitmapSupported;
167
+
168
+ if (
169
+ imageBitmapSupported.full === true &&
170
+ sx !== null &&
171
+ sy !== null &&
172
+ sw !== null &&
173
+ sh !== null
174
+ ) {
175
+ // createImageBitmap with crop
176
+ const bitmap = await createImageBitmap(blob, sx, sy, sw, sh, {
177
+ premultiplyAlpha: hasAlphaChannel ? 'premultiply' : 'none',
178
+ colorSpaceConversion: 'none',
179
+ imageOrientation: 'none',
180
+ });
181
+ return { data: bitmap, premultiplyAlpha: hasAlphaChannel };
182
+ } else if (imageBitmapSupported.options === true) {
183
+ // createImageBitmap without crop but with options
184
+ const bitmap = await createImageBitmap(blob, {
185
+ premultiplyAlpha: hasAlphaChannel ? 'premultiply' : 'none',
186
+ colorSpaceConversion: 'none',
187
+ imageOrientation: 'none',
188
+ });
189
+ return { data: bitmap, premultiplyAlpha: hasAlphaChannel };
190
+ } else {
191
+ // basic createImageBitmap without options or crop
192
+ // this is supported for Chrome v50 to v52/54 that doesn't support options
164
193
  return {
165
- data: await createImageBitmap(blob, {
166
- premultiplyAlpha: hasAlphaChannel ? 'premultiply' : 'none',
167
- colorSpaceConversion: 'none',
168
- imageOrientation: 'none',
169
- }),
194
+ data: await createImageBitmap(blob),
170
195
  premultiplyAlpha: hasAlphaChannel,
171
196
  };
172
- } else {
173
- const img = new Image();
174
- if (!src.startsWith('data:')) {
175
- img.crossOrigin = 'Anonymous';
197
+ }
198
+ }
199
+
200
+ async loadImage(src: string) {
201
+ const { premultiplyAlpha, sx, sy, sw, sh } = this.props;
202
+
203
+ if (this.txManager.hasCreateImageBitmap === true) {
204
+ if (
205
+ this.txManager.hasWorker === true &&
206
+ this.txManager.imageWorkerManager !== null
207
+ ) {
208
+ return this.txManager.imageWorkerManager.getImage(
209
+ src,
210
+ premultiplyAlpha,
211
+ sx,
212
+ sy,
213
+ sw,
214
+ sh,
215
+ );
176
216
  }
177
- img.src = src;
178
- await new Promise<void>((resolve, reject) => {
179
- img.onload = () => resolve();
180
- img.onerror = () => reject(new Error(`Failed to load image`));
181
- }).catch((e) => {
182
- console.error(e);
183
- });
184
217
 
185
- return {
186
- data: img,
187
- premultiplyAlpha: premultiplyAlpha ?? true,
188
- };
218
+ const blob = await fetch(src).then((response) => response.blob());
219
+ return this.createImageBitmap(blob, premultiplyAlpha, sx, sy, sw, sh);
189
220
  }
221
+
222
+ return this.loadImageFallback(src, premultiplyAlpha ?? true);
190
223
  }
191
224
 
192
225
  override async getTextureData(): Promise<TextureData> {
@@ -658,4 +658,13 @@ export class RendererMain extends EventEmitter {
658
658
  rerender() {
659
659
  throw new Error('Not implemented');
660
660
  }
661
+
662
+ /**
663
+ * Sets the clear color for the stage.
664
+ *
665
+ * @param color - The color to set as the clear color.
666
+ */
667
+ setClearColor(color: number) {
668
+ this.stage.setClearColor(color);
669
+ }
661
670
  }
@@ -1 +0,0 @@
1
- export {};
@@ -1,138 +0,0 @@
1
- export {};
2
- /*interface InstanceMap {
3
- renderer: CoreRenderer;
4
- effect: CoreEffect;
5
- program: new () => void;
6
- }
7
-
8
- type WebGlInstanceMap = InstanceMap & {
9
- renderer: WebGlCoreRenderer;
10
- effect: WebGlEffect;
11
- };
12
-
13
- interface AdvEffectProp {
14
- default: any;
15
- isColor?: boolean;
16
- validator?: (value: any) => any;
17
- }
18
-
19
- interface EffectProps {
20
- [key: string]: any | AdvEffectProp;
21
- }
22
-
23
- type EffectDescriptor<Effect, Props> = Effect & {
24
- props?: Props;
25
- };
26
-
27
- type InferEffectProps<T> = {
28
- [K in keyof T]: T[K] extends AdvEffectProp ? T[K]['default'] : T[K];
29
- };
30
-
31
- interface CoreEffect {
32
- props?: EffectProps;
33
- update?: (ctx: unknown) => void;
34
- }
35
-
36
- type WebGlEffect = CoreEffect & {
37
- fragment: string;
38
- update?: (glw: WebGLRenderingContext) => void;
39
- };
40
-
41
- type StageOptions<Renderer extends InstanceMap> = {
42
- renderEngine?: new () => Renderer['renderer'];
43
- };
44
-
45
- class Stage<RendererMap extends InstanceMap> {
46
- fxManager: CoreFxManager<RendererMap>;
47
- constructor(options: StageOptions<RendererMap>) {
48
- this.fxManager = new CoreFxManager();
49
- const renderer = new options.renderEngine();
50
- }
51
-
52
- createShader<Effect extends RendererMap['effect'], Props>(
53
- effect: EffectDescriptor<Effect, Props>,
54
- props?: InferEffectProps<Props>
55
- ): EffectNode<Effect, Props> {
56
- return this.fxManager.createShader(effect, props);
57
- }
58
- }
59
-
60
- class CoreRenderer {
61
- mode = 'core';
62
- }
63
-
64
- class WebGlCoreRenderer extends CoreRenderer {
65
- override mode = 'webgl';
66
- }
67
-
68
- class CanvasCoreRenderer extends CoreRenderer {
69
- override mode = 'canvas';
70
- }
71
-
72
- class CoreFxManager<RendererMap extends InstanceMap> {
73
- fxCache: Map<string, RendererMap['effect']> = new Map();
74
-
75
- resolveProps(defaultProps?: EffectProps, props?: EffectProps) {
76
- if(defaultProps !== undefined) {
77
- props = props ?? {}
78
- const keys = Object.keys(defaultProps);
79
- const l = keys.length;
80
- for(let i = 0; i < l; i++) {
81
- if(props[keys[i]] === undefined) {
82
- props[keys[i]] = defaultProps[keys[i]].default || defaultProps[keys[i]]
83
- }
84
- }
85
- }
86
- }
87
-
88
- createShader<Effect extends RendererMap['effect'], Props>(
89
- effect: EffectDescriptor<Effect, Props>,
90
- props?: InferEffectProps<Props>
91
- ): EffectNode<Effect, Props> {
92
-
93
- // const f = JSON.stringify(effect);
94
- // if (this.fxCache.has(f)) {
95
- // console.log('already has this effect');
96
- // } else {
97
- // console.log('create new effect program');
98
- // this.fxCache.set(f, effect);
99
- // }
100
-
101
- return new EffectNode<Effect, Props>(effect, WebGlCoreRenderer, props);
102
- }
103
- }
104
-
105
- class EffectNode<Effect extends CoreEffect, Props extends EffectProps> {
106
- #data: Record<string, any> | undefined = undefined;
107
- constructor(
108
- readonly type: Effect,
109
- readonly program: new () => void,
110
- props?: InferEffectProps<Props>
111
- ) {
112
- this.#data = props;
113
- }
114
- }
115
-
116
- const stage = new Stage<WebGlInstanceMap>({
117
- renderEngine: CanvasCoreRenderer,
118
- });
119
-
120
- stage.createShader(
121
- {
122
- props: {
123
- radius: 10,
124
- },
125
- fragment: '',
126
- },
127
- {
128
- radius: 30,
129
- }
130
- );
131
-
132
- stage.createShader({
133
- props: {
134
- radius: 10,
135
- },
136
- fragment: '',
137
- });*/
138
- //# sourceMappingURL=CoreStuff.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CoreStuff.js","sourceRoot":"","sources":["../../../src/core/CoreStuff.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAuIK"}