@lightningjs/renderer 3.0.0-beta22 → 3.0.0-beta24

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 (190) hide show
  1. package/README.md +93 -0
  2. package/dist/exports/index.d.ts +3 -1
  3. package/dist/exports/index.js +2 -0
  4. package/dist/exports/index.js.map +1 -1
  5. package/dist/exports/platform.d.ts +7 -0
  6. package/dist/exports/platform.js +27 -0
  7. package/dist/exports/platform.js.map +1 -0
  8. package/dist/src/core/AutosizeManager.d.ts +29 -0
  9. package/dist/src/core/AutosizeManager.js +169 -0
  10. package/dist/src/core/AutosizeManager.js.map +1 -0
  11. package/dist/src/core/CoreNode.d.ts +0 -1
  12. package/dist/src/core/CoreNode.js +47 -41
  13. package/dist/src/core/CoreNode.js.map +1 -1
  14. package/dist/src/core/CoreTextureManager.d.ts +0 -13
  15. package/dist/src/core/CoreTextureManager.js +4 -78
  16. package/dist/src/core/CoreTextureManager.js.map +1 -1
  17. package/dist/src/core/Stage.js +2 -12
  18. package/dist/src/core/Stage.js.map +1 -1
  19. package/dist/src/core/animations/Animation.d.ts +21 -0
  20. package/dist/src/core/animations/Animation.js +194 -0
  21. package/dist/src/core/animations/Animation.js.map +1 -0
  22. package/dist/src/core/animations/CoreAnimationController.d.ts +1 -1
  23. package/dist/src/core/animations/CoreAnimationController.js +4 -2
  24. package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
  25. package/dist/src/core/animations/Playback.d.ts +64 -0
  26. package/dist/src/core/animations/Playback.js +169 -0
  27. package/dist/src/core/animations/Playback.js.map +1 -0
  28. package/dist/src/core/animations/Transition.d.ts +27 -0
  29. package/dist/src/core/animations/Transition.js +52 -0
  30. package/dist/src/core/animations/Transition.js.map +1 -0
  31. package/dist/src/core/animations/utils.d.ts +2 -0
  32. package/dist/src/core/animations/utils.js +136 -0
  33. package/dist/src/core/animations/utils.js.map +1 -0
  34. package/dist/src/core/lib/collectionUtils.d.ts +0 -1
  35. package/dist/src/core/lib/collectionUtils.js +0 -28
  36. package/dist/src/core/lib/collectionUtils.js.map +1 -1
  37. package/dist/src/core/lib/utils.d.ts +0 -5
  38. package/dist/src/core/lib/utils.js +0 -63
  39. package/dist/src/core/lib/utils.js.map +1 -1
  40. package/dist/src/core/platforms/GlContextWrapper.d.ts +136 -0
  41. package/dist/src/core/platforms/GlContextWrapper.js +32 -0
  42. package/dist/src/core/platforms/GlContextWrapper.js.map +1 -0
  43. package/dist/src/core/platforms/Platform.d.ts +74 -13
  44. package/dist/src/core/platforms/Platform.js +18 -0
  45. package/dist/src/core/platforms/Platform.js.map +1 -1
  46. package/dist/src/core/platforms/web/WebGlContextWrapper.d.ts +776 -0
  47. package/dist/src/core/platforms/web/WebGlContextWrapper.js +1208 -0
  48. package/dist/src/core/platforms/web/WebGlContextWrapper.js.map +1 -0
  49. package/dist/src/core/platforms/web/WebPlatform.d.ts +13 -2
  50. package/dist/src/core/platforms/web/WebPlatform.js +109 -8
  51. package/dist/src/core/platforms/web/WebPlatform.js.map +1 -1
  52. package/dist/src/core/platforms/web/WebPlatformChrome50.d.ts +17 -0
  53. package/dist/src/core/platforms/web/WebPlatformChrome50.js +50 -0
  54. package/dist/src/core/platforms/web/WebPlatformChrome50.js.map +1 -0
  55. package/dist/src/core/platforms/web/WebPlatformLegacy.d.ts +18 -0
  56. package/dist/src/core/platforms/web/WebPlatformLegacy.js +99 -0
  57. package/dist/src/core/platforms/web/WebPlatformLegacy.js.map +1 -0
  58. package/dist/src/core/platforms/web/WebPlatformNext.d.ts +21 -0
  59. package/dist/src/core/platforms/web/WebPlatformNext.js +52 -0
  60. package/dist/src/core/platforms/web/WebPlatformNext.js.map +1 -0
  61. package/dist/src/core/platforms/web/lib/ImageWorker.d.ts +15 -0
  62. package/dist/src/core/platforms/web/lib/ImageWorker.js +189 -0
  63. package/dist/src/core/platforms/web/lib/ImageWorker.js.map +1 -0
  64. package/dist/src/core/platforms/web/lib/createImageBitmap.d.ts +1 -0
  65. package/dist/src/core/platforms/web/lib/createImageBitmap.js +27 -0
  66. package/dist/src/core/platforms/web/lib/createImageBitmap.js.map +1 -0
  67. package/dist/src/core/platforms/web/lib/textureCompression.d.ts +26 -0
  68. package/dist/src/core/platforms/web/lib/textureCompression.js +301 -0
  69. package/dist/src/core/platforms/web/lib/textureCompression.js.map +1 -0
  70. package/dist/src/core/platforms/web/lib/textureSvg.d.ts +7 -0
  71. package/dist/src/core/platforms/web/lib/textureSvg.js +51 -0
  72. package/dist/src/core/platforms/web/lib/textureSvg.js.map +1 -0
  73. package/dist/src/core/platforms/web/lib/utils.d.ts +5 -0
  74. package/dist/src/core/platforms/web/lib/utils.js +86 -0
  75. package/dist/src/core/platforms/web/lib/utils.js.map +1 -0
  76. package/dist/src/core/renderers/CoreRenderer.d.ts +1 -9
  77. package/dist/src/core/renderers/CoreRenderer.js +2 -4
  78. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  79. package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +3 -2
  80. package/dist/src/core/renderers/canvas/CanvasRenderer.js +6 -5
  81. package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
  82. package/dist/src/core/renderers/canvas/CanvasShaderNode.js +3 -3
  83. package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
  84. package/dist/src/core/renderers/webgl/SdfRenderOp.js +3 -2
  85. package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -1
  86. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -2
  87. package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
  88. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +2 -2
  89. package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
  90. package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +3 -3
  91. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +1 -2
  92. package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
  93. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +5 -5
  94. package/dist/src/core/renderers/webgl/WebGlRenderer.js +10 -11
  95. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  96. package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +2 -2
  97. package/dist/src/core/renderers/webgl/WebGlShaderNode.js +3 -3
  98. package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
  99. package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +2 -2
  100. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +0 -3
  101. package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
  102. package/dist/src/core/renderers/webgl/internal/RendererUtils.d.ts +4 -4
  103. package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
  104. package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +3 -3
  105. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +3 -2
  106. package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
  107. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +24 -8
  108. package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
  109. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +25 -8
  110. package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -1
  111. package/dist/src/core/shaders/webgl/Border.js +6 -4
  112. package/dist/src/core/shaders/webgl/Border.js.map +1 -1
  113. package/dist/src/core/shaders/webgl/RoundedWithBorder.js +16 -17
  114. package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
  115. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +19 -21
  116. package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
  117. package/dist/src/core/shaders/webgl/SdfShadowShader.d.ts +9 -0
  118. package/dist/src/core/shaders/webgl/SdfShadowShader.js +100 -0
  119. package/dist/src/core/shaders/webgl/SdfShadowShader.js.map +1 -0
  120. package/dist/src/core/text-rendering/CanvasFont.d.ts +1 -1
  121. package/dist/src/core/text-rendering/CanvasFont.js +2 -6
  122. package/dist/src/core/text-rendering/CanvasFont.js.map +1 -1
  123. package/dist/src/core/text-rendering/CoreFont.d.ts +1 -1
  124. package/dist/src/core/text-rendering/CoreFont.js +1 -1
  125. package/dist/src/core/text-rendering/CoreFont.js.map +1 -1
  126. package/dist/src/core/text-rendering/FontManager.js +2 -1
  127. package/dist/src/core/text-rendering/FontManager.js.map +1 -1
  128. package/dist/src/core/text-rendering/SdfFontHandler.js +10 -20
  129. package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -1
  130. package/dist/src/core/text-rendering/SdfTextRenderer.js +10 -12
  131. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -1
  132. package/dist/src/core/textures/ImageTexture.d.ts +24 -11
  133. package/dist/src/core/textures/ImageTexture.js +32 -95
  134. package/dist/src/core/textures/ImageTexture.js.map +1 -1
  135. package/dist/src/core/textures/SubTexture.js +3 -3
  136. package/dist/src/core/textures/SubTexture.js.map +1 -1
  137. package/dist/src/core/textures/Texture.d.ts +1 -1
  138. package/dist/src/core/textures/Texture.js +1 -1
  139. package/dist/src/core/textures/Texture.js.map +1 -1
  140. package/dist/src/main-api/Renderer.js +18 -21
  141. package/dist/src/main-api/Renderer.js.map +1 -1
  142. package/dist/src/utils.d.ts +0 -2
  143. package/dist/src/utils.js +0 -36
  144. package/dist/src/utils.js.map +1 -1
  145. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  146. package/dist/tsconfig.tsbuildinfo +1 -0
  147. package/exports/index.ts +3 -1
  148. package/exports/platform.ts +31 -0
  149. package/package.json +3 -2
  150. package/src/core/CoreNode.ts +52 -49
  151. package/src/core/CoreTextureManager.ts +10 -103
  152. package/src/core/Stage.ts +1 -14
  153. package/src/core/animations/CoreAnimationController.ts +5 -2
  154. package/src/core/lib/collectionUtils.ts +0 -35
  155. package/src/core/lib/utils.ts +0 -78
  156. package/src/core/platforms/GlContextWrapper.ts +291 -0
  157. package/src/core/platforms/Platform.ts +121 -28
  158. package/src/core/{lib → platforms/web}/WebGlContextWrapper.ts +129 -4
  159. package/src/core/platforms/web/WebPlatform.ts +171 -22
  160. package/src/core/platforms/web/WebPlatformChrome50.ts +57 -0
  161. package/src/core/platforms/web/WebPlatformLegacy.ts +140 -0
  162. package/src/core/platforms/web/WebPlatformNext.ts +57 -0
  163. package/src/core/{lib → platforms/web/lib}/ImageWorker.ts +10 -74
  164. package/src/core/platforms/web/lib/createImageBitmap.ts +40 -0
  165. package/src/core/{lib → platforms/web/lib}/textureCompression.ts +19 -138
  166. package/src/core/{lib → platforms/web/lib}/textureSvg.ts +3 -15
  167. package/src/core/platforms/web/lib/utils.ts +105 -0
  168. package/src/core/renderers/CoreRenderer.ts +2 -11
  169. package/src/core/renderers/canvas/CanvasRenderer.ts +8 -6
  170. package/src/core/renderers/canvas/CanvasShaderNode.ts +3 -3
  171. package/src/core/renderers/webgl/SdfRenderOp.ts +3 -2
  172. package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +2 -2
  173. package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +2 -2
  174. package/src/core/renderers/webgl/WebGlCtxTexture.ts +3 -4
  175. package/src/core/renderers/webgl/WebGlRenderer.ts +15 -22
  176. package/src/core/renderers/webgl/WebGlShaderNode.ts +5 -5
  177. package/src/core/renderers/webgl/WebGlShaderProgram.ts +2 -6
  178. package/src/core/renderers/webgl/internal/RendererUtils.ts +4 -8
  179. package/src/core/renderers/webgl/internal/ShaderUtils.ts +7 -5
  180. package/src/core/shaders/webgl/Border.ts +6 -4
  181. package/src/core/shaders/webgl/RoundedWithBorder.ts +16 -17
  182. package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +19 -21
  183. package/src/core/text-rendering/SdfFontHandler.ts +10 -17
  184. package/src/core/text-rendering/SdfTextRenderer.ts +11 -16
  185. package/src/core/textures/ImageTexture.ts +42 -161
  186. package/src/core/textures/SubTexture.ts +3 -3
  187. package/src/core/textures/Texture.ts +2 -2
  188. package/src/main-api/Renderer.ts +24 -22
  189. package/src/utils.ts +0 -47
  190. package/src/core/lib/validateImageBitmap.ts +0 -87
@@ -91,14 +91,14 @@ export class SubTexture extends Texture {
91
91
  super(txManager);
92
92
  this.props = props;
93
93
 
94
- assertTruthy(this.props.texture, 'SubTexture requires a parent texture');
94
+ assertTruthy(props.texture, 'SubTexture requires a parent texture');
95
95
  assertTruthy(
96
- this.props.texture instanceof ImageTexture,
96
+ props.texture instanceof ImageTexture,
97
97
  'SubTexture requires an ImageTexture parent',
98
98
  );
99
99
 
100
100
  // Resolve parent texture from cache or fallback to provided texture
101
- this.parentTexture = txManager.resolveParentTexture(this.props.texture);
101
+ this.parentTexture = txManager.resolveParentTexture(props.texture);
102
102
 
103
103
  if (this.renderableOwners.length > 0) {
104
104
  this.parentTexture.setRenderableOwner(this.subtextureId, true);
@@ -60,7 +60,7 @@ export interface CompressedData {
60
60
  /**
61
61
  * Supported container types ('pvr' or 'ktx').
62
62
  */
63
- type: 'pvr' | 'ktx' | 'astc';
63
+ type: 'PVR' | 'KTX' | 'ASTC';
64
64
 
65
65
  /**
66
66
  * The width of the compressed texture in pixels. Defaults to 0.
@@ -202,7 +202,7 @@ export abstract class Texture extends EventEmitter {
202
202
 
203
203
  constructor(protected txManager: CoreTextureManager) {
204
204
  super();
205
- this.maxRetryCount = this.txManager.maxRetryCount;
205
+ this.maxRetryCount = txManager.maxRetryCount;
206
206
  }
207
207
 
208
208
  get dimensions(): Dimensions | null {
@@ -19,7 +19,7 @@
19
19
 
20
20
  import type { ExtractProps, TextureMap } from '../core/CoreTextureManager.js';
21
21
  import { EventEmitter } from '../common/EventEmitter.js';
22
- import { isProductionEnvironment } from '../utils.js';
22
+ import { assertTruthy, isProductionEnvironment } from '../utils.js';
23
23
  import { Stage, type StageOptions } from '../core/Stage.js';
24
24
  import { CoreNode, type CoreNodeProps } from '../core/CoreNode.js';
25
25
  import { type CoreTextNodeProps } from '../core/CoreTextNode.js';
@@ -550,7 +550,7 @@ export class RendererMain extends EventEmitter {
550
550
  textureProcessingTimeLimit: settings.textureProcessingTimeLimit || 42,
551
551
  canvas: settings.canvas,
552
552
  createImageBitmapSupport: settings.createImageBitmapSupport || 'full',
553
- platform: settings.platform || null,
553
+ platform: settings.platform || WebPlatform,
554
554
  maxRetryCount: settings.maxRetryCount ?? 5,
555
555
  };
556
556
 
@@ -562,29 +562,28 @@ export class RendererMain extends EventEmitter {
562
562
  inspector,
563
563
  } = settings as RendererMainSettings;
564
564
 
565
- let platform;
566
- if (
567
- settings.platform !== undefined &&
568
- settings.platform !== null &&
569
- settings.platform.prototype instanceof Platform === true
570
- ) {
571
- // @ts-ignore - if Platform is a valid class, it will be used
572
- platform = new settings.platform();
573
- } else {
574
- platform = new WebPlatform();
575
- }
565
+ assertTruthy(
566
+ settings.platform,
567
+ 'A platform implementation must be provided in settings.platform',
568
+ );
576
569
 
577
- const canvas = settings.canvas || platform.createCanvas();
570
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
571
+ const platform = new (settings.platform as any)({
572
+ numImageWorkers: settings.numImageWorkers,
573
+ forceWebGL2: settings.forceWebGL2,
574
+ canvas: settings.canvas,
575
+ });
578
576
 
579
577
  const deviceLogicalWidth = appWidth * deviceLogicalPixelRatio;
580
578
  const deviceLogicalHeight = appHeight * deviceLogicalPixelRatio;
581
579
 
582
- this.canvas = canvas;
583
- canvas.width = deviceLogicalWidth * devicePhysicalPixelRatio;
584
- canvas.height = deviceLogicalHeight * devicePhysicalPixelRatio;
580
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-unsafe-member-access
581
+ this.canvas = platform.canvas! as HTMLCanvasElement;
582
+ this.canvas.width = deviceLogicalWidth * devicePhysicalPixelRatio;
583
+ this.canvas.height = deviceLogicalHeight * devicePhysicalPixelRatio;
585
584
 
586
- canvas.style.width = `${deviceLogicalWidth}px`;
587
- canvas.style.height = `${deviceLogicalHeight}px`;
585
+ this.canvas.style.width = `${deviceLogicalWidth}px`;
586
+ this.canvas.style.height = `${deviceLogicalHeight}px`;
588
587
 
589
588
  // Initialize the stage
590
589
  this.stage = new Stage({
@@ -629,8 +628,8 @@ export class RendererMain extends EventEmitter {
629
628
  throw new Error('Could not find target element');
630
629
  }
631
630
 
632
- targetEl.appendChild(canvas);
633
- } else if (settings.canvas !== canvas) {
631
+ targetEl.appendChild(this.canvas);
632
+ } else if (settings.canvas !== this.canvas) {
634
633
  throw new Error(
635
634
  'New canvas element could not be appended to undefined target',
636
635
  );
@@ -638,7 +637,10 @@ export class RendererMain extends EventEmitter {
638
637
 
639
638
  // Initialize inspector (if enabled)
640
639
  if (inspector && isProductionEnvironment === false) {
641
- this.inspector = new inspector(canvas, settings as RendererMainSettings);
640
+ this.inspector = new inspector(
641
+ this.canvas,
642
+ settings as RendererMainSettings,
643
+ );
642
644
  }
643
645
  }
644
646
 
package/src/utils.ts CHANGED
@@ -17,53 +17,6 @@
17
17
  * limitations under the License.
18
18
  */
19
19
 
20
- import type { ContextSpy } from './core/lib/ContextSpy.js';
21
-
22
- export function createWebGLContext(
23
- canvas: HTMLCanvasElement | OffscreenCanvas,
24
- forceWebGL2 = false,
25
- contextSpy: ContextSpy | null,
26
- ): WebGLRenderingContext {
27
- const config: WebGLContextAttributes = {
28
- alpha: true,
29
- antialias: false,
30
- depth: false,
31
- stencil: true,
32
- desynchronized: false,
33
- // Disabled because it prevents Visual Regression Tests from working
34
- // failIfMajorPerformanceCaveat: true,
35
- powerPreference: 'high-performance',
36
- premultipliedAlpha: true,
37
- preserveDrawingBuffer: false,
38
- };
39
- const gl =
40
- // TODO: Remove this assertion once this issue is fixed in TypeScript
41
- // https://github.com/microsoft/TypeScript/issues/53614
42
- (canvas.getContext(forceWebGL2 ? 'webgl2' : 'webgl', config) ||
43
- canvas.getContext(
44
- 'experimental-webgl' as 'webgl',
45
- config,
46
- )) as unknown as WebGLRenderingContext | null;
47
- if (!gl) {
48
- throw new Error('Unable to create WebGL context');
49
- }
50
- if (contextSpy) {
51
- // Proxy the GL context to log all GL calls
52
- return new Proxy(gl, {
53
- get(target, prop) {
54
- const value = target[prop as never] as unknown;
55
- if (typeof value === 'function') {
56
- contextSpy.increment(String(prop));
57
- return value.bind(target);
58
- }
59
- return value;
60
- },
61
- });
62
- }
63
-
64
- return gl;
65
- }
66
-
67
20
  /**
68
21
  * Checks if we're in a development environment or not.
69
22
  *
@@ -1,87 +0,0 @@
1
- import type { Platform } from '../platforms/Platform.js';
2
-
3
- export interface CreateImageBitmapSupport {
4
- basic: boolean; // Supports createImageBitmap(image)
5
- options: boolean; // Supports createImageBitmap(image, options)
6
- full: boolean; // Supports createImageBitmap(image, sx, sy, sw, sh, options)
7
- }
8
-
9
- export async function validateCreateImageBitmap(
10
- platform: Platform,
11
- ): Promise<CreateImageBitmapSupport> {
12
- // Test if createImageBitmap is supported using a simple 1x1 PNG image
13
- // prettier-ignore
14
- const pngBinaryData = new Uint8Array([
15
- 0x89, 0x50, 0x4e, 0x47,
16
- 0x0d, 0x0a, 0x1a, 0x0a, // PNG signature
17
- 0x00, 0x00, 0x00, 0x0d, // IHDR chunk length
18
- 0x49, 0x48, 0x44, 0x52, // "IHDR" chunk type
19
- 0x00, 0x00, 0x00, 0x01, // Width: 1
20
- 0x00, 0x00, 0x00, 0x01, // Height: 1
21
- 0x01, // Bit depth: 1
22
- 0x03, // Color type: Indexed
23
- 0x00, // Compression method: Deflate
24
- 0x00, // Filter method: None
25
- 0x00, // Interlace method: None
26
- 0x25, 0xdb, 0x56, 0xca, // CRC for IHDR
27
- 0x00, 0x00, 0x00, 0x03, // PLTE chunk length
28
- 0x50, 0x4c, 0x54, 0x45, // "PLTE" chunk type
29
- 0x00, 0x00, 0x00, // Palette entry: Black
30
- 0xa7, 0x7a, 0x3d, 0xda, // CRC for PLTE
31
- 0x00, 0x00, 0x00, 0x01, // tRNS chunk length
32
- 0x74, 0x52, 0x4e, 0x53, // "tRNS" chunk type
33
- 0x00, // Transparency for black: Fully transparent
34
- 0x40, 0xe6, 0xd8, 0x66, // CRC for tRNS
35
- 0x00, 0x00, 0x00, 0x0a, // IDAT chunk length
36
- 0x49, 0x44, 0x41, 0x54, // "IDAT" chunk type
37
- 0x08, 0xd7, // Deflate header
38
- 0x63, 0x60, 0x00, 0x00,
39
- 0x00, 0x02, 0x00, 0x01, // Zlib-compressed data
40
- 0xe2, 0x21, 0xbc, 0x33, // CRC for IDAT
41
- 0x00, 0x00, 0x00, 0x00, // IEND chunk length
42
- 0x49, 0x45, 0x4e, 0x44, // "IEND" chunk type
43
- 0xae, 0x42, 0x60, 0x82, // CRC for IEND
44
- ]);
45
-
46
- const support: CreateImageBitmapSupport = {
47
- basic: false,
48
- options: false,
49
- full: false,
50
- };
51
-
52
- // Test basic createImageBitmap support
53
- const blob = new Blob([pngBinaryData], { type: 'image/png' });
54
- const bitmap = await platform.createImageBitmap(blob);
55
- bitmap.close?.();
56
- support.basic = true;
57
-
58
- // Test createImageBitmap with options support
59
- try {
60
- const options = { premultiplyAlpha: 'none' as const };
61
- const bitmapWithOptions = await platform.createImageBitmap(blob, options);
62
- bitmapWithOptions.close?.();
63
- support.options = true;
64
- } catch (e) {
65
- /* ignore */
66
- }
67
-
68
- // Test createImageBitmap with full options support
69
- try {
70
- const bitmapWithFullOptions = await platform.createImageBitmap(
71
- blob,
72
- 0,
73
- 0,
74
- 1,
75
- 1,
76
- {
77
- premultiplyAlpha: 'none',
78
- },
79
- );
80
- bitmapWithFullOptions.close?.();
81
- support.full = true;
82
- } catch (e) {
83
- /* ignore */
84
- }
85
-
86
- return support;
87
- }