@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.
- package/README.md +93 -0
- package/dist/exports/index.d.ts +3 -1
- package/dist/exports/index.js +2 -0
- package/dist/exports/index.js.map +1 -1
- package/dist/exports/platform.d.ts +7 -0
- package/dist/exports/platform.js +27 -0
- package/dist/exports/platform.js.map +1 -0
- package/dist/src/core/AutosizeManager.d.ts +29 -0
- package/dist/src/core/AutosizeManager.js +169 -0
- package/dist/src/core/AutosizeManager.js.map +1 -0
- package/dist/src/core/CoreNode.d.ts +0 -1
- package/dist/src/core/CoreNode.js +47 -41
- package/dist/src/core/CoreNode.js.map +1 -1
- package/dist/src/core/CoreTextureManager.d.ts +0 -13
- package/dist/src/core/CoreTextureManager.js +4 -78
- package/dist/src/core/CoreTextureManager.js.map +1 -1
- package/dist/src/core/Stage.js +2 -12
- package/dist/src/core/Stage.js.map +1 -1
- package/dist/src/core/animations/Animation.d.ts +21 -0
- package/dist/src/core/animations/Animation.js +194 -0
- package/dist/src/core/animations/Animation.js.map +1 -0
- package/dist/src/core/animations/CoreAnimationController.d.ts +1 -1
- package/dist/src/core/animations/CoreAnimationController.js +4 -2
- package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
- package/dist/src/core/animations/Playback.d.ts +64 -0
- package/dist/src/core/animations/Playback.js +169 -0
- package/dist/src/core/animations/Playback.js.map +1 -0
- package/dist/src/core/animations/Transition.d.ts +27 -0
- package/dist/src/core/animations/Transition.js +52 -0
- package/dist/src/core/animations/Transition.js.map +1 -0
- package/dist/src/core/animations/utils.d.ts +2 -0
- package/dist/src/core/animations/utils.js +136 -0
- package/dist/src/core/animations/utils.js.map +1 -0
- package/dist/src/core/lib/collectionUtils.d.ts +0 -1
- package/dist/src/core/lib/collectionUtils.js +0 -28
- package/dist/src/core/lib/collectionUtils.js.map +1 -1
- package/dist/src/core/lib/utils.d.ts +0 -5
- package/dist/src/core/lib/utils.js +0 -63
- package/dist/src/core/lib/utils.js.map +1 -1
- package/dist/src/core/platforms/GlContextWrapper.d.ts +136 -0
- package/dist/src/core/platforms/GlContextWrapper.js +32 -0
- package/dist/src/core/platforms/GlContextWrapper.js.map +1 -0
- package/dist/src/core/platforms/Platform.d.ts +74 -13
- package/dist/src/core/platforms/Platform.js +18 -0
- package/dist/src/core/platforms/Platform.js.map +1 -1
- package/dist/src/core/platforms/web/WebGlContextWrapper.d.ts +776 -0
- package/dist/src/core/platforms/web/WebGlContextWrapper.js +1208 -0
- package/dist/src/core/platforms/web/WebGlContextWrapper.js.map +1 -0
- package/dist/src/core/platforms/web/WebPlatform.d.ts +13 -2
- package/dist/src/core/platforms/web/WebPlatform.js +109 -8
- package/dist/src/core/platforms/web/WebPlatform.js.map +1 -1
- package/dist/src/core/platforms/web/WebPlatformChrome50.d.ts +17 -0
- package/dist/src/core/platforms/web/WebPlatformChrome50.js +50 -0
- package/dist/src/core/platforms/web/WebPlatformChrome50.js.map +1 -0
- package/dist/src/core/platforms/web/WebPlatformLegacy.d.ts +18 -0
- package/dist/src/core/platforms/web/WebPlatformLegacy.js +99 -0
- package/dist/src/core/platforms/web/WebPlatformLegacy.js.map +1 -0
- package/dist/src/core/platforms/web/WebPlatformNext.d.ts +21 -0
- package/dist/src/core/platforms/web/WebPlatformNext.js +52 -0
- package/dist/src/core/platforms/web/WebPlatformNext.js.map +1 -0
- package/dist/src/core/platforms/web/lib/ImageWorker.d.ts +15 -0
- package/dist/src/core/platforms/web/lib/ImageWorker.js +189 -0
- package/dist/src/core/platforms/web/lib/ImageWorker.js.map +1 -0
- package/dist/src/core/platforms/web/lib/createImageBitmap.d.ts +1 -0
- package/dist/src/core/platforms/web/lib/createImageBitmap.js +27 -0
- package/dist/src/core/platforms/web/lib/createImageBitmap.js.map +1 -0
- package/dist/src/core/platforms/web/lib/textureCompression.d.ts +26 -0
- package/dist/src/core/platforms/web/lib/textureCompression.js +301 -0
- package/dist/src/core/platforms/web/lib/textureCompression.js.map +1 -0
- package/dist/src/core/platforms/web/lib/textureSvg.d.ts +7 -0
- package/dist/src/core/platforms/web/lib/textureSvg.js +51 -0
- package/dist/src/core/platforms/web/lib/textureSvg.js.map +1 -0
- package/dist/src/core/platforms/web/lib/utils.d.ts +5 -0
- package/dist/src/core/platforms/web/lib/utils.js +86 -0
- package/dist/src/core/platforms/web/lib/utils.js.map +1 -0
- package/dist/src/core/renderers/CoreRenderer.d.ts +1 -9
- package/dist/src/core/renderers/CoreRenderer.js +2 -4
- package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +3 -2
- package/dist/src/core/renderers/canvas/CanvasRenderer.js +6 -5
- package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js +3 -3
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
- package/dist/src/core/renderers/webgl/SdfRenderOp.js +3 -2
- package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -2
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +2 -2
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +3 -3
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +1 -2
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +5 -5
- package/dist/src/core/renderers/webgl/WebGlRenderer.js +10 -11
- package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +2 -2
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js +3 -3
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +2 -2
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +0 -3
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/RendererUtils.d.ts +4 -4
- package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.d.ts +3 -3
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +3 -2
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js +24 -8
- package/dist/src/core/renderers/webgl/shaders/effects/LinearGradientEffect.js.map +1 -1
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js +25 -8
- package/dist/src/core/renderers/webgl/shaders/effects/RadialGradientEffect.js.map +1 -1
- package/dist/src/core/shaders/webgl/Border.js +6 -4
- package/dist/src/core/shaders/webgl/Border.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js +16 -17
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +19 -21
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
- package/dist/src/core/shaders/webgl/SdfShadowShader.d.ts +9 -0
- package/dist/src/core/shaders/webgl/SdfShadowShader.js +100 -0
- package/dist/src/core/shaders/webgl/SdfShadowShader.js.map +1 -0
- package/dist/src/core/text-rendering/CanvasFont.d.ts +1 -1
- package/dist/src/core/text-rendering/CanvasFont.js +2 -6
- package/dist/src/core/text-rendering/CanvasFont.js.map +1 -1
- package/dist/src/core/text-rendering/CoreFont.d.ts +1 -1
- package/dist/src/core/text-rendering/CoreFont.js +1 -1
- package/dist/src/core/text-rendering/CoreFont.js.map +1 -1
- package/dist/src/core/text-rendering/FontManager.js +2 -1
- package/dist/src/core/text-rendering/FontManager.js.map +1 -1
- package/dist/src/core/text-rendering/SdfFontHandler.js +10 -20
- package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -1
- package/dist/src/core/text-rendering/SdfTextRenderer.js +10 -12
- package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -1
- package/dist/src/core/textures/ImageTexture.d.ts +24 -11
- package/dist/src/core/textures/ImageTexture.js +32 -95
- package/dist/src/core/textures/ImageTexture.js.map +1 -1
- package/dist/src/core/textures/SubTexture.js +3 -3
- package/dist/src/core/textures/SubTexture.js.map +1 -1
- package/dist/src/core/textures/Texture.d.ts +1 -1
- package/dist/src/core/textures/Texture.js +1 -1
- package/dist/src/core/textures/Texture.js.map +1 -1
- package/dist/src/main-api/Renderer.js +18 -21
- package/dist/src/main-api/Renderer.js.map +1 -1
- package/dist/src/utils.d.ts +0 -2
- package/dist/src/utils.js +0 -36
- package/dist/src/utils.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/exports/index.ts +3 -1
- package/exports/platform.ts +31 -0
- package/package.json +3 -2
- package/src/core/CoreNode.ts +52 -49
- package/src/core/CoreTextureManager.ts +10 -103
- package/src/core/Stage.ts +1 -14
- package/src/core/animations/CoreAnimationController.ts +5 -2
- package/src/core/lib/collectionUtils.ts +0 -35
- package/src/core/lib/utils.ts +0 -78
- package/src/core/platforms/GlContextWrapper.ts +291 -0
- package/src/core/platforms/Platform.ts +121 -28
- package/src/core/{lib → platforms/web}/WebGlContextWrapper.ts +129 -4
- package/src/core/platforms/web/WebPlatform.ts +171 -22
- package/src/core/platforms/web/WebPlatformChrome50.ts +57 -0
- package/src/core/platforms/web/WebPlatformLegacy.ts +140 -0
- package/src/core/platforms/web/WebPlatformNext.ts +57 -0
- package/src/core/{lib → platforms/web/lib}/ImageWorker.ts +10 -74
- package/src/core/platforms/web/lib/createImageBitmap.ts +40 -0
- package/src/core/{lib → platforms/web/lib}/textureCompression.ts +19 -138
- package/src/core/{lib → platforms/web/lib}/textureSvg.ts +3 -15
- package/src/core/platforms/web/lib/utils.ts +105 -0
- package/src/core/renderers/CoreRenderer.ts +2 -11
- package/src/core/renderers/canvas/CanvasRenderer.ts +8 -6
- package/src/core/renderers/canvas/CanvasShaderNode.ts +3 -3
- package/src/core/renderers/webgl/SdfRenderOp.ts +3 -2
- package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +2 -2
- package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +2 -2
- package/src/core/renderers/webgl/WebGlCtxTexture.ts +3 -4
- package/src/core/renderers/webgl/WebGlRenderer.ts +15 -22
- package/src/core/renderers/webgl/WebGlShaderNode.ts +5 -5
- package/src/core/renderers/webgl/WebGlShaderProgram.ts +2 -6
- package/src/core/renderers/webgl/internal/RendererUtils.ts +4 -8
- package/src/core/renderers/webgl/internal/ShaderUtils.ts +7 -5
- package/src/core/shaders/webgl/Border.ts +6 -4
- package/src/core/shaders/webgl/RoundedWithBorder.ts +16 -17
- package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +19 -21
- package/src/core/text-rendering/SdfFontHandler.ts +10 -17
- package/src/core/text-rendering/SdfTextRenderer.ts +11 -16
- package/src/core/textures/ImageTexture.ts +42 -161
- package/src/core/textures/SubTexture.ts +3 -3
- package/src/core/textures/Texture.ts +2 -2
- package/src/main-api/Renderer.ts +24 -22
- package/src/utils.ts +0 -47
- 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(
|
|
94
|
+
assertTruthy(props.texture, 'SubTexture requires a parent texture');
|
|
95
95
|
assertTruthy(
|
|
96
|
-
|
|
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(
|
|
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: '
|
|
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 =
|
|
205
|
+
this.maxRetryCount = txManager.maxRetryCount;
|
|
206
206
|
}
|
|
207
207
|
|
|
208
208
|
get dimensions(): Dimensions | null {
|
package/src/main-api/Renderer.ts
CHANGED
|
@@ -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 ||
|
|
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
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
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
|
-
|
|
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
|
-
|
|
583
|
-
canvas
|
|
584
|
-
canvas.
|
|
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(
|
|
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
|
-
}
|