@solidtv/renderer 1.5.4 → 1.5.6

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 (77) hide show
  1. package/dist/exports/canvas-shaders.d.ts +1 -0
  2. package/dist/exports/canvas-shaders.js +1 -0
  3. package/dist/exports/canvas-shaders.js.map +1 -1
  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 +1 -0
  8. package/dist/exports/webgl-shaders.js +1 -0
  9. package/dist/exports/webgl-shaders.js.map +1 -1
  10. package/dist/src/core/CoreShaderManager.js +16 -2
  11. package/dist/src/core/CoreShaderManager.js.map +1 -1
  12. package/dist/src/core/lib/WebGlContextWrapper.d.ts +13 -0
  13. package/dist/src/core/lib/WebGlContextWrapper.js +15 -0
  14. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  15. package/dist/src/core/lib/validateImageBitmap.js +7 -0
  16. package/dist/src/core/lib/validateImageBitmap.js.map +1 -1
  17. package/dist/src/core/platforms/web/WebPlatform.js +57 -30
  18. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -1
  19. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +10 -0
  20. package/dist/src/core/renderers/canvas/CanvasRenderer.js +19 -0
  21. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  22. package/dist/src/core/renderers/webgl/WebGlRenderer.js +14 -1
  23. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  24. package/dist/src/core/shaders/canvas/EdgeFade.d.ts +10 -0
  25. package/dist/src/core/shaders/canvas/EdgeFade.js +92 -0
  26. package/dist/src/core/shaders/canvas/EdgeFade.js.map +1 -0
  27. package/dist/src/core/shaders/canvas/LinearGradient.js +1 -18
  28. package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
  29. package/dist/src/core/shaders/templates/EdgeFadeTemplate.d.ts +32 -0
  30. package/dist/src/core/shaders/templates/EdgeFadeTemplate.js +9 -0
  31. package/dist/src/core/shaders/templates/EdgeFadeTemplate.js.map +1 -0
  32. package/dist/src/core/shaders/webgl/EdgeFade.d.ts +9 -0
  33. package/dist/src/core/shaders/webgl/EdgeFade.js +74 -0
  34. package/dist/src/core/shaders/webgl/EdgeFade.js.map +1 -0
  35. package/dist/src/core/shaders/webgl/LinearGradient.js +31 -51
  36. package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
  37. package/dist/src/core/shaders/webgl/RadialGradient.js +2 -2
  38. package/dist/src/core/shaders/webgl/RadialProgress.js +7 -0
  39. package/dist/src/core/shaders/webgl/RadialProgress.js.map +1 -1
  40. package/dist/src/core/text-rendering/SdfFontHandler.d.ts +1 -0
  41. package/dist/src/core/text-rendering/SdfFontHandler.js +88 -51
  42. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -1
  43. package/dist/src/core/textures/ImageTexture.js +2 -1
  44. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  45. package/dist/src/main-api/Renderer.d.ts +20 -0
  46. package/dist/src/main-api/Renderer.js +6 -0
  47. package/dist/src/main-api/Renderer.js.map +1 -1
  48. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  49. package/exports/canvas-shaders.ts +1 -0
  50. package/exports/index.ts +1 -0
  51. package/exports/webgl-shaders.ts +1 -0
  52. package/package.json +1 -1
  53. package/src/core/CoreShaderManager.contextLoss.test.ts +72 -0
  54. package/src/core/CoreShaderManager.ts +15 -2
  55. package/src/core/lib/WebGlContextWrapper.ts +16 -0
  56. package/src/core/lib/validateImageBitmap.test.ts +15 -0
  57. package/src/core/lib/validateImageBitmap.ts +8 -0
  58. package/src/core/platforms/web/WebPlatform.loopError.test.ts +145 -0
  59. package/src/core/platforms/web/WebPlatform.ts +61 -35
  60. package/src/core/renderers/canvas/CanvasRenderer.ts +20 -0
  61. package/src/core/renderers/webgl/WebGlRenderer.contextLoss.test.ts +49 -0
  62. package/src/core/renderers/webgl/WebGlRenderer.ts +13 -1
  63. package/src/core/shaders/canvas/EdgeFade.ts +105 -0
  64. package/src/core/shaders/canvas/LinearGradient.test.ts +45 -0
  65. package/src/core/shaders/canvas/LinearGradient.ts +1 -18
  66. package/src/core/shaders/templates/EdgeFadeTemplate.test.ts +35 -0
  67. package/src/core/shaders/templates/EdgeFadeTemplate.ts +41 -0
  68. package/src/core/shaders/webgl/EdgeFade.ts +84 -0
  69. package/src/core/shaders/webgl/LinearGradient.test.ts +70 -0
  70. package/src/core/shaders/webgl/LinearGradient.ts +36 -51
  71. package/src/core/shaders/webgl/RadialGradient.ts +2 -2
  72. package/src/core/shaders/webgl/RadialProgress.ts +7 -0
  73. package/src/core/text-rendering/SdfFontHandler.ts +77 -30
  74. package/src/core/text-rendering/tests/SdfFontHandler.test.ts +181 -35
  75. package/src/core/textures/ImageTexture.test.ts +91 -0
  76. package/src/core/textures/ImageTexture.ts +4 -1
  77. package/src/main-api/Renderer.ts +28 -0
@@ -219,7 +219,10 @@ export class ImageTexture extends Texture {
219
219
  },
220
220
  );
221
221
  return { data: bitmap, premultiplyAlpha: useGlPremultiply };
222
- } else if (imageBitmapSupported.basic === true) {
222
+ } else if (
223
+ imageBitmapSupported.options === false &&
224
+ imageBitmapSupported.full === false
225
+ ) {
223
226
  // basic createImageBitmap without options or crop
224
227
  // this is supported for Chrome v50 to v52/54 that doesn't support options.
225
228
  // The browser default premultiplies, so WebGL must not premultiply again.
@@ -23,6 +23,9 @@ import type {
23
23
  import { WebPlatform } from '../core/platforms/web/WebPlatform.js';
24
24
  import { Platform } from '../core/platforms/Platform.js';
25
25
 
26
+ /** Shared default `handleLoopError` — swallows the error, keeping the loop alive. */
27
+ const noop = (): void => {};
28
+
26
29
  /**
27
30
  * FPS Update Event Data
28
31
  *
@@ -661,6 +664,27 @@ export type RendererMainSettings = RendererRuntimeSettings & {
661
664
  *
662
665
  */
663
666
  maxRetryCount?: number;
667
+
668
+ /**
669
+ * Render loop error handler — an escape hatch for `requestAnimationFrame` crashes
670
+ *
671
+ * @remarks
672
+ * The render loop runs client-supplied code every frame: synchronous event
673
+ * subscribers (`frameTick`, `idle`, `fpsUpdate`, etc.) and animation steps. If
674
+ * any of these throw, the exception would otherwise propagate out of the
675
+ * `requestAnimationFrame` callback and permanently stop the loop — freezing
676
+ * the entire app until reload.
677
+ *
678
+ * The loop catches such errors and never lets them stop it. By default the
679
+ * error is swallowed (the default handler is a no-op), so a single bad frame
680
+ * can't freeze the app. Provide your own handler to log/report the crash (and
681
+ * optionally recover); the loop still keeps running after it returns.
682
+ *
683
+ * @param error The error thrown during the frame
684
+ *
685
+ * @defaultValue a no-op (errors are swallowed; the loop keeps running)
686
+ */
687
+ handleLoopError?: (error: unknown) => void;
664
688
  };
665
689
 
666
690
  /**
@@ -777,6 +801,9 @@ export class RendererMain extends EventEmitter {
777
801
  : settings.premultiplyAlphaHonored,
778
802
  platform: settings.platform || null,
779
803
  maxRetryCount: settings.maxRetryCount ?? 5,
804
+ // Default to a no-op so a thrown frame is swallowed and the render loop
805
+ // never crashes; apps can override to log/report.
806
+ handleLoopError: settings.handleLoopError ?? noop,
780
807
  };
781
808
 
782
809
  const {
@@ -841,6 +868,7 @@ export class RendererMain extends EventEmitter {
841
868
  premultiplyAlphaHonored: settings.premultiplyAlphaHonored,
842
869
  platform,
843
870
  maxRetryCount: settings.maxRetryCount ?? 5,
871
+ handleLoopError: settings.handleLoopError,
844
872
  });
845
873
 
846
874
  // Extract the root node