@flighthq/scene2d-canvas 0.3.0-next.906.07cea63 → 0.3.0
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/dist/canvasBitmapText.d.ts +1 -1
- package/dist/canvasBitmapText.d.ts.map +1 -1
- package/dist/canvasBitmapText.js +9 -5
- package/dist/canvasBitmapText.js.map +1 -1
- package/dist/canvasBitmapTextureResolver.d.ts +3 -0
- package/dist/canvasBitmapTextureResolver.d.ts.map +1 -0
- package/dist/canvasBitmapTextureResolver.js +21 -0
- package/dist/canvasBitmapTextureResolver.js.map +1 -0
- package/dist/canvasCache.d.ts +6 -0
- package/dist/canvasCache.d.ts.map +1 -1
- package/dist/canvasCache.js +14 -1
- package/dist/canvasCache.js.map +1 -1
- package/dist/canvasFillPattern.d.ts +2 -2
- package/dist/canvasFillPattern.d.ts.map +1 -1
- package/dist/canvasFillPattern.js +17 -3
- package/dist/canvasFillPattern.js.map +1 -1
- package/dist/canvasImageSource.d.ts +2 -3
- package/dist/canvasImageSource.d.ts.map +1 -1
- package/dist/canvasImageSource.js +5 -41
- package/dist/canvasImageSource.js.map +1 -1
- package/dist/canvasImageTextureResolver.d.ts +3 -0
- package/dist/canvasImageTextureResolver.d.ts.map +1 -0
- package/dist/canvasImageTextureResolver.js +10 -0
- package/dist/canvasImageTextureResolver.js.map +1 -0
- package/dist/canvasParticleEmitter2D.d.ts.map +1 -1
- package/dist/canvasParticleEmitter2D.js +9 -4
- package/dist/canvasParticleEmitter2D.js.map +1 -1
- package/dist/canvasQuadBatch.d.ts.map +1 -1
- package/dist/canvasQuadBatch.js +9 -4
- package/dist/canvasQuadBatch.js.map +1 -1
- package/dist/canvasRenderState.d.ts +4 -1
- package/dist/canvasRenderState.d.ts.map +1 -1
- package/dist/canvasRenderState.js +29 -1
- package/dist/canvasRenderState.js.map +1 -1
- package/dist/canvasRenderTexture.d.ts +14 -0
- package/dist/canvasRenderTexture.d.ts.map +1 -0
- package/dist/canvasRenderTexture.js +99 -0
- package/dist/canvasRenderTexture.js.map +1 -0
- package/dist/canvasRenderTexturePool.d.ts +7 -0
- package/dist/canvasRenderTexturePool.d.ts.map +1 -0
- package/dist/canvasRenderTexturePool.js +92 -0
- package/dist/canvasRenderTexturePool.js.map +1 -0
- package/dist/canvasRenderTextureResolver.d.ts +3 -0
- package/dist/canvasRenderTextureResolver.d.ts.map +1 -0
- package/dist/canvasRenderTextureResolver.js +9 -0
- package/dist/canvasRenderTextureResolver.js.map +1 -0
- package/dist/canvasScale9Shape.d.ts +1 -2
- package/dist/canvasScale9Shape.d.ts.map +1 -1
- package/dist/canvasScale9Shape.js +5 -115
- package/dist/canvasScale9Shape.js.map +1 -1
- package/dist/canvasShape.d.ts +3 -2
- package/dist/canvasShape.d.ts.map +1 -1
- package/dist/canvasShape.js +19 -7
- package/dist/canvasShape.js.map +1 -1
- package/dist/canvasShapeCommands.d.ts +3 -2
- package/dist/canvasShapeCommands.d.ts.map +1 -1
- package/dist/canvasShapeCommands.js +21 -17
- package/dist/canvasShapeCommands.js.map +1 -1
- package/dist/canvasShapeRasterizer.d.ts +3 -0
- package/dist/canvasShapeRasterizer.d.ts.map +1 -0
- package/dist/canvasShapeRasterizer.js +17 -0
- package/dist/canvasShapeRasterizer.js.map +1 -0
- package/dist/canvasShapeRegistry.d.ts +4 -4
- package/dist/canvasShapeRegistry.d.ts.map +1 -1
- package/dist/canvasShapeRegistry.js +15 -10
- package/dist/canvasShapeRegistry.js.map +1 -1
- package/dist/canvasSprite.d.ts +3 -4
- package/dist/canvasSprite.d.ts.map +1 -1
- package/dist/canvasSprite.js +28 -50
- package/dist/canvasSprite.js.map +1 -1
- package/dist/canvasTextureResolver.d.ts +6 -0
- package/dist/canvasTextureResolver.d.ts.map +1 -0
- package/dist/canvasTextureResolver.js +44 -0
- package/dist/canvasTextureResolver.js.map +1 -0
- package/dist/canvasTextureWindowSource.d.ts +3 -0
- package/dist/canvasTextureWindowSource.d.ts.map +1 -0
- package/dist/canvasTextureWindowSource.js +82 -0
- package/dist/canvasTextureWindowSource.js.map +1 -0
- package/dist/canvasTilemap.d.ts.map +1 -1
- package/dist/canvasTilemap.js +9 -8
- package/dist/canvasTilemap.js.map +1 -1
- package/dist/contract.d.ts +12 -4
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +12 -4
- package/dist/contract.js.map +1 -1
- package/dist/enableCanvasTextureResolverGuards.d.ts +4 -0
- package/dist/enableCanvasTextureResolverGuards.d.ts.map +1 -0
- package/dist/enableCanvasTextureResolverGuards.js +8 -0
- package/dist/enableCanvasTextureResolverGuards.js.map +1 -0
- package/dist/explainCanvasScene2DCoverage.d.ts +4 -0
- package/dist/explainCanvasScene2DCoverage.d.ts.map +1 -0
- package/dist/explainCanvasScene2DCoverage.js +43 -0
- package/dist/explainCanvasScene2DCoverage.js.map +1 -0
- package/dist/explainCanvasTextureResolution.d.ts +3 -0
- package/dist/explainCanvasTextureResolution.d.ts.map +1 -0
- package/dist/explainCanvasTextureResolution.js +11 -0
- package/dist/explainCanvasTextureResolution.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +23 -15
- package/src/canvasBitmapText.test.ts +13 -9
- package/src/canvasBitmapTextureResolver.test.ts +21 -0
- package/src/canvasCache.test.ts +34 -1
- package/src/canvasFillPattern.test.ts +34 -14
- package/src/canvasImageSource.test.ts +127 -41
- package/src/canvasImageTextureResolver.test.ts +25 -0
- package/src/canvasParticleEmitter2D.test.ts +11 -2
- package/src/canvasQuadBatch.test.ts +11 -4
- package/src/canvasRenderState.test.ts +53 -0
- package/src/canvasRenderTexture.test.ts +133 -0
- package/src/canvasRenderTexturePool.test.ts +161 -0
- package/src/canvasRenderTextureResolver.test.ts +19 -0
- package/src/canvasScale9Shape.test.ts +2 -65
- package/src/canvasShape.test.ts +137 -39
- package/src/canvasShapeCommands.test.ts +146 -118
- package/src/canvasShapeRasterizer.test.ts +102 -0
- package/src/canvasShapeRegistry.test.ts +26 -12
- package/src/canvasSprite.test.ts +56 -77
- package/src/canvasTextureResolver.test.ts +120 -0
- package/src/canvasTextureWindowSource.test.ts +17 -0
- package/src/canvasTilemap.test.ts +14 -13
- package/src/enableCanvasTextureResolverGuards.test.ts +62 -0
- package/src/explainCanvasScene2DCoverage.test.ts +87 -0
- package/src/explainCanvasTextureResolution.test.ts +37 -0
- package/dist/canvasBitmap.d.ts +0 -4
- package/dist/canvasBitmap.d.ts.map +0 -1
- package/dist/canvasBitmap.js +0 -36
- package/dist/canvasBitmap.js.map +0 -1
- package/dist/canvasRenderTargetNode2D.d.ts +0 -11
- package/dist/canvasRenderTargetNode2D.d.ts.map +0 -1
- package/dist/canvasRenderTargetNode2D.js +0 -68
- package/dist/canvasRenderTargetNode2D.js.map +0 -1
- package/dist/canvasVideo.d.ts +0 -4
- package/dist/canvasVideo.d.ts.map +0 -1
- package/dist/canvasVideo.js +0 -26
- package/dist/canvasVideo.js.map +0 -1
- package/src/canvasBitmap.test.ts +0 -92
- package/src/canvasRenderTargetNode2D.test.ts +0 -137
- package/src/canvasVideo.test.ts +0 -43
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { CanvasRenderState, RenderProxy2D, SpriteRenderer } from '@flighthq/types/contract';
|
|
2
|
-
export declare function
|
|
2
|
+
export declare function drawCanvasSpriteText(state: CanvasRenderState, node: RenderProxy2D): void;
|
|
3
3
|
export declare const defaultCanvasBitmapTextRenderer: SpriteRenderer;
|
|
4
4
|
//# sourceMappingURL=canvasBitmapText.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasBitmapText.d.ts","sourceRoot":"","sources":["../src/canvasBitmapText.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,iBAAiB,EACjB,aAAa,EACb,cAAc,EACf,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"canvasBitmapText.d.ts","sourceRoot":"","sources":["../src/canvasBitmapText.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAGV,iBAAiB,EACjB,aAAa,EACb,cAAc,EACf,MAAM,0BAA0B,CAAC;AAUlC,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,CAiDxF;AAED,eAAO,MAAM,+BAA+B,EAAE,cAG7C,CAAC"}
|
package/dist/canvasBitmapText.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { noopRendererData } from '@flighthq/render/contract';
|
|
2
2
|
import { getNode2DRuntime } from '@flighthq/scene2d/contract';
|
|
3
3
|
import { applyCanvasMaterial } from './canvasMaterialRegistry';
|
|
4
|
+
import { getCanvasRenderStateTextureResolvers } from './canvasRenderState';
|
|
5
|
+
import { resolveCanvasTexture } from './canvasTextureResolver';
|
|
4
6
|
// Draws a BitmapText leaf on Canvas 2D: one `drawImage` per glyph, per glyph-atlas page. Canvas realizes
|
|
5
7
|
// no color-adjustment fold, so a node tint is not applied here (honest — the missing
|
|
6
8
|
// `enableCanvasColorAdjustment` is the signal). Mirrors `drawCanvasQuadBatch`'s vector2 path, one page at
|
|
7
9
|
// a time.
|
|
8
|
-
export function
|
|
10
|
+
export function drawCanvasSpriteText(state, node) {
|
|
9
11
|
const source = node.source;
|
|
10
12
|
const pages = getNode2DRuntime(source).pages;
|
|
11
13
|
const context = state.context;
|
|
@@ -19,10 +21,12 @@ export function drawCanvasBitmapText(state, node) {
|
|
|
19
21
|
context.setTransform(transform.a, transform.b, transform.c, transform.d, transform.tx, transform.ty);
|
|
20
22
|
for (const page of pages) {
|
|
21
23
|
const atlas = page.atlas;
|
|
22
|
-
const
|
|
23
|
-
if (
|
|
24
|
+
const texture = atlas.texture;
|
|
25
|
+
if (texture === null || page.instanceCount === 0)
|
|
26
|
+
continue;
|
|
27
|
+
const domImage = resolveCanvasTexture(getCanvasRenderStateTextureResolvers(state), texture);
|
|
28
|
+
if (domImage === null)
|
|
24
29
|
continue;
|
|
25
|
-
const domImage = image.source;
|
|
26
30
|
const regions = atlas.regions;
|
|
27
31
|
const numRegions = regions.length;
|
|
28
32
|
const ids = page.ids;
|
|
@@ -47,6 +51,6 @@ export function drawCanvasBitmapText(state, node) {
|
|
|
47
51
|
}
|
|
48
52
|
export const defaultCanvasBitmapTextRenderer = {
|
|
49
53
|
createData: noopRendererData,
|
|
50
|
-
submit:
|
|
54
|
+
submit: drawCanvasSpriteText,
|
|
51
55
|
};
|
|
52
56
|
//# sourceMappingURL=canvasBitmapText.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasBitmapText.js","sourceRoot":"","sources":["../src/canvasBitmapText.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAS9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,yGAAyG;AACzG,qFAAqF;AACrF,0GAA0G;AAC1G,UAAU;AACV,MAAM,UAAU,oBAAoB,CAAC,KAAwB,EAAE,IAAmB;IAChF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAoB,CAAC;IACzC,MAAM,KAAK,GAAI,gBAAgB,CAAC,MAAM,CAAuB,CAAC,KAAK,CAAC;IAEpE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC;IACnC,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IAEtC,KAAK,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9C,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;IACjC,IAAI,CAAC,KAAK,CAAC,cAAc;QAAE,OAAO,CAAC,qBAAqB,GAAG,KAAK,CAAC;IACjE,MAAM,eAAe,GAAG,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClE,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IAErG,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,MAAM,
|
|
1
|
+
{"version":3,"file":"canvasBitmapText.js","sourceRoot":"","sources":["../src/canvasBitmapText.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasBitmapTextureResolver.d.ts","sourceRoot":"","sources":["../src/canvasBitmapTextureResolver.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAU,sBAAsB,EAAW,MAAM,0BAA0B,CAAC;AAKxF,wBAAgB,mCAAmC,CAAC,SAAS,EAAE,sBAAsB,GAAG,IAAI,CAE3F"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { createImageResourceFromBitmap } from '@flighthq/image/contract';
|
|
2
|
+
import { getTextureSource } from '@flighthq/texture/contract';
|
|
3
|
+
import { BitmapTextureSourceKind } from '@flighthq/types/contract';
|
|
4
|
+
import { registerCanvasTextureResolver } from './canvasTextureResolver';
|
|
5
|
+
export function registerCanvasBitmapTextureResolver(resolvers) {
|
|
6
|
+
registerCanvasTextureResolver(resolvers, BitmapTextureSourceKind, resolveCanvasBitmapTexture);
|
|
7
|
+
}
|
|
8
|
+
function resolveCanvasBitmapTexture(resolvers, texture) {
|
|
9
|
+
const bitmap = getTextureSource(texture);
|
|
10
|
+
if (bitmap === null)
|
|
11
|
+
return null;
|
|
12
|
+
const cache = (resolvers.bitmapElementCache ??= new WeakMap());
|
|
13
|
+
let entry = cache.get(bitmap);
|
|
14
|
+
if (entry === undefined || entry.version !== bitmap.version) {
|
|
15
|
+
const image = createImageResourceFromBitmap(bitmap);
|
|
16
|
+
entry = { element: image.source, version: bitmap.version };
|
|
17
|
+
cache.set(bitmap, entry);
|
|
18
|
+
}
|
|
19
|
+
return entry.element;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=canvasBitmapTextureResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasBitmapTextureResolver.js","sourceRoot":"","sources":["../src/canvasBitmapTextureResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAExE,MAAM,UAAU,mCAAmC,CAAC,SAAiC;IACnF,6BAA6B,CAAC,SAAS,EAAE,uBAAuB,EAAE,0BAA0B,CAAC,CAAC;AAChG,CAAC;AAED,SAAS,0BAA0B,CACjC,SAAiC,EACjC,OAA0B;IAE1B,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAA4B,CAAC;IACpE,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEjC,MAAM,KAAK,GAAG,CAAC,SAAS,CAAC,kBAAkB,KAAK,IAAI,OAAO,EAAE,CAAC,CAAC;IAC/D,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC;QAC5D,MAAM,KAAK,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAC;QACpD,KAAK,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,MAA2B,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAChF,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC"}
|
package/dist/canvasCache.d.ts
CHANGED
|
@@ -7,6 +7,12 @@ import type { CanvasRenderState, CanvasRenderTarget, Node2D, Scene2DRenderer, Re
|
|
|
7
7
|
* node map, adapter map, and frame counter, so baking never touches the screen state.
|
|
8
8
|
*/
|
|
9
9
|
export declare function createCanvasCacheState(screenState: CanvasRenderState): CanvasRenderState;
|
|
10
|
+
/**
|
|
11
|
+
* Creates an independent offscreen pipeline whose Canvas targets remain owned by `screenState`.
|
|
12
|
+
* Renderers and policy registrations are creation-time snapshots; traversal/proxy state and host
|
|
13
|
+
* canvases remain independent.
|
|
14
|
+
*/
|
|
15
|
+
export declare function createCanvasOffscreenRenderState(screenState: CanvasRenderState): CanvasRenderState;
|
|
10
16
|
export declare function destroyCanvasRenderCacheTarget(state: CanvasRenderState, cache: RenderCache): void;
|
|
11
17
|
export declare function enableCanvasRenderCache(state: RenderState): void;
|
|
12
18
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasCache.d.ts","sourceRoot":"","sources":["../src/canvasCache.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,MAAM,EACN,eAAe,EAEf,WAAW,EACX,yBAAyB,EAEzB,WAAW,EACZ,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"canvasCache.d.ts","sourceRoot":"","sources":["../src/canvasCache.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,MAAM,EACN,eAAe,EAEf,WAAW,EACX,yBAAyB,EAEzB,WAAW,EACZ,MAAM,0BAA0B,CAAC;AAmBlC;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,iBAAiB,GAAG,iBAAiB,CAExF;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAAC,WAAW,EAAE,iBAAiB,GAAG,iBAAiB,CAiBlG;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAcjG;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAEhE;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,iBAAiB,EACxB,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,kBAAkB,CAUpB;AAID,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,iBAAiB,GAAG,iBAAiB,CAE3F;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,WAAW,GAAG,kBAAkB,GAAG,IAAI,CAElH;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,iBAAiB,EAC7B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,QAAQ,CAAC,yBAAyB,CAAC,GAC5C,OAAO,CAgCT;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAG3F;AAuBD,eAAO,MAAM,gCAAgC,EAAE,eAG9C,CAAC"}
|
package/dist/canvasCache.js
CHANGED
|
@@ -2,7 +2,7 @@ import { createMatrix, createRectangle } from '@flighthq/geometry/contract';
|
|
|
2
2
|
import { computeNodeBoundsRectangle } from '@flighthq/node/contract';
|
|
3
3
|
import { computeScene2DRenderTargetTransform, computeRenderCacheTransform, computeRenderTargetSize, copyAllRenderersFromRenderState, getRenderProxyCache, noopRendererData, prepareScene2DRender, registerRenderCacheRenderer, } from '@flighthq/render/contract';
|
|
4
4
|
import { renderCanvasScene2D } from './canvasNode2D';
|
|
5
|
-
import { createCanvasRenderState, getCanvasRenderStateRuntime } from './canvasRenderState';
|
|
5
|
+
import { copyCanvasRenderStateRegistrations, createCanvasRenderState, getCanvasRenderStateRuntime, } from './canvasRenderState';
|
|
6
6
|
import { createCanvasRenderTarget, resizeCanvasRenderTarget, setCanvasRenderTransform2D } from './canvasRenderTarget';
|
|
7
7
|
import { setCanvasTransform } from './canvasTransform';
|
|
8
8
|
/**
|
|
@@ -13,15 +13,28 @@ import { setCanvasTransform } from './canvasTransform';
|
|
|
13
13
|
* node map, adapter map, and frame counter, so baking never touches the screen state.
|
|
14
14
|
*/
|
|
15
15
|
export function createCanvasCacheState(screenState) {
|
|
16
|
+
return createCanvasOffscreenRenderState(screenState);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Creates an independent offscreen pipeline whose Canvas targets remain owned by `screenState`.
|
|
20
|
+
* Renderers and policy registrations are creation-time snapshots; traversal/proxy state and host
|
|
21
|
+
* canvases remain independent.
|
|
22
|
+
*/
|
|
23
|
+
export function createCanvasOffscreenRenderState(screenState) {
|
|
16
24
|
const screen = getCanvasRenderStateRuntime(screenState);
|
|
17
25
|
const cacheState = createCanvasRenderState(document.createElement('canvas'), {
|
|
26
|
+
backgroundColor: screenState.backgroundColor,
|
|
18
27
|
imageSmoothingEnabled: screen.imageSmoothingEnabled,
|
|
19
28
|
imageSmoothingQuality: screen.imageSmoothingQuality,
|
|
20
29
|
pixelRatio: screenState.pixelRatio,
|
|
21
30
|
roundPixels: screenState.roundPixels,
|
|
22
31
|
sceneGraphSyncPolicy: screenState.sceneGraphSyncPolicy,
|
|
23
32
|
});
|
|
33
|
+
cacheState.allowSmoothing = screenState.allowSmoothing;
|
|
34
|
+
cacheState.renderAlpha = screenState.renderAlpha;
|
|
35
|
+
cacheState.renderBlendMode = screenState.renderBlendMode;
|
|
24
36
|
copyAllRenderersFromRenderState(cacheState, screenState);
|
|
37
|
+
copyCanvasRenderStateRegistrations(cacheState, screenState);
|
|
25
38
|
_cacheStateScreen.set(cacheState, screenState);
|
|
26
39
|
return cacheState;
|
|
27
40
|
}
|
package/dist/canvasCache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasCache.js","sourceRoot":"","sources":["../src/canvasCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EACL,mCAAmC,EACnC,2BAA2B,EAC3B,uBAAuB,EACvB,+BAA+B,EAC/B,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,2BAA2B,CAAC;AAanC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,
|
|
1
|
+
{"version":3,"file":"canvasCache.js","sourceRoot":"","sources":["../src/canvasCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EACL,mCAAmC,EACnC,2BAA2B,EAC3B,uBAAuB,EACvB,+BAA+B,EAC/B,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,2BAA2B,CAAC;AAanC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EACL,kCAAkC,EAClC,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AACtH,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAUvD;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,WAA8B;IACnE,OAAO,gCAAgC,CAAC,WAAW,CAAC,CAAC;AACvD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gCAAgC,CAAC,WAA8B;IAC7E,MAAM,MAAM,GAAG,2BAA2B,CAAC,WAAW,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,uBAAuB,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;QAC3E,eAAe,EAAE,WAAW,CAAC,eAAe;QAC5C,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;QACnD,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;QACnD,UAAU,EAAE,WAAW,CAAC,UAAU;QAClC,WAAW,EAAE,WAAW,CAAC,WAAW;QACpC,oBAAoB,EAAE,WAAW,CAAC,oBAAoB;KACvD,CAAC,CAAC;IACH,UAAU,CAAC,cAAc,GAAG,WAAW,CAAC,cAAc,CAAC;IACvD,UAAU,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;IACjD,UAAU,CAAC,eAAe,GAAG,WAAW,CAAC,eAAe,CAAC;IACzD,+BAA+B,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACzD,kCAAkC,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAC5D,iBAAiB,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAC/C,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,KAAwB,EAAE,KAAkB;IACzF,8FAA8F;IAC9F,+FAA+F;IAC/F,8FAA8F;IAC9F,wCAAwC;IACxC,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;QACxB,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACzB,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;QACjB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAkB;IACxD,2BAA2B,CAAC,KAAK,EAAE,gCAAgC,CAAC,CAAC;AACvE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CAC3C,KAAwB,EACxB,KAAkB,EAClB,KAAa,EACb,MAAc;IAEd,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,GAAG,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,wBAAwB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8FAA8F;AAC9F,gGAAgG;AAChG,MAAM,UAAU,+BAA+B,CAAC,KAAwB;IACtE,OAAO,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAAwB,EAAE,KAAkB;IACrF,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;AAC9C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,wBAAwB,CACtC,UAA6B,EAC7B,KAAkB,EAClB,MAAc,EACd,OAA6C;IAE7C,MAAM,WAAW,GAAG,+BAA+B,CAAC,UAAU,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,CAAC,CAAC;IAE1C,0BAA0B,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAEzF,MAAM,QAAQ,GAAG,0BAA0B,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAChE,qFAAqF;IACrF,+BAA+B;IAC/B,MAAM,OAAO,GAAG,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,KAAK,KAAK,KAAK,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC;IAC5F,MAAM,MAAM,GAAG,6BAA6B,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAEhF,mCAAmC,CAAC,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACzF,2BAA2B,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAExE,MAAM,OAAO,GAAG,UAAsC,CAAC;IACvD,MAAM,OAAO,GAAG,2BAA2B,CAAC,UAAU,CAAC,CAAC;IACxD,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC/B,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IACjC,OAAO,CAAC,OAAO,CAAC,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IACtE,OAAO,CAAC,OAAO,CAAC,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IACtE,0BAA0B,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;IAEzD,MAAM,KAAK,GAAG,oBAAoB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACvD,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;QACrB,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3E,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,KAAK,IAAI,OAAO,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAwB,EAAE,KAAkB;IACnF,yFAAyF;IACzF,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAkB,EAAE,WAA0B;IAC3E,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7D,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO;IAC3B,MAAM,WAAW,GAAG,KAA0B,CAAC;IAC/C,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO;IACjC,0FAA0F;IAC1F,2DAA2D;IAC3D,kBAAkB,CAAC,WAAW,EAAE,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAC9E,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,UAAU,CAAC,KAAwB;IAC1C,IAAI,OAAO,GAAG,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QACxB,mBAAmB,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,MAAM,gCAAgC,GAAoB;IAC/D,UAAU,EAAE,gBAAgB;IAC5B,MAAM,EAAE,qBAAqB;CAC9B,CAAC;AAEF,uFAAuF;AACvF,+EAA+E;AAC/E,MAAM,mBAAmB,GAAG,IAAI,OAAO,EAA+D,CAAC;AACvG,uFAAuF;AACvF,MAAM,iBAAiB,GAAG,IAAI,OAAO,EAAwC,CAAC;AAC9E,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;AAClC,MAAM,gBAAgB,GAAG,YAAY,EAAY,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function createBitmapPattern(context: CanvasRenderingContext2D,
|
|
1
|
+
import type { CanvasTextureResolvers, GradientType, InterpolationMethod, Matrix, SpreadMethod, Texture } from '@flighthq/types/contract';
|
|
2
|
+
export declare function createBitmapPattern(context: CanvasRenderingContext2D, texture: Readonly<Texture>, resolvers: CanvasTextureResolvers, allowSmoothing?: boolean): CanvasPattern | null;
|
|
3
3
|
export declare function createGradientPattern(context: CanvasRenderingContext2D, gradientType: GradientType, colors: number[], alphas: number[], ratios: number[], m: Matrix | null, spreadMethod: SpreadMethod, _interpolationMethod: InterpolationMethod, focalPointRatio: number): CanvasPattern | CanvasGradient | null;
|
|
4
4
|
//# sourceMappingURL=canvasFillPattern.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasFillPattern.d.ts","sourceRoot":"","sources":["../src/canvasFillPattern.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,
|
|
1
|
+
{"version":3,"file":"canvasFillPattern.d.ts","sourceRoot":"","sources":["../src/canvasFillPattern.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,sBAAsB,EACtB,YAAY,EACZ,mBAAmB,EACnB,MAAM,EAEN,YAAY,EACZ,OAAO,EACR,MAAM,0BAA0B,CAAC;AAOlC,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,wBAAwB,EACjC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,EAC1B,SAAS,EAAE,sBAAsB,EACjC,cAAc,UAAO,GACpB,aAAa,GAAG,IAAI,CAMtB;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,wBAAwB,EACjC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EAAE,EAChB,MAAM,EAAE,MAAM,EAAE,EAChB,MAAM,EAAE,MAAM,EAAE,EAChB,CAAC,EAAE,MAAM,GAAG,IAAI,EAChB,YAAY,EAAE,YAAY,EAC1B,oBAAoB,EAAE,mBAAmB,EACzC,eAAe,EAAE,MAAM,GACtB,aAAa,GAAG,cAAc,GAAG,IAAI,CAOvC"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { createMatrix } from '@flighthq/geometry/contract';
|
|
2
|
+
import { resolveCanvasTextureWindowSource } from './canvasTextureWindowSource';
|
|
2
3
|
// Flash's gradient box is normalized to ±819.2 units.
|
|
3
4
|
const GRADIENT_HALF = 819.2;
|
|
4
|
-
export function createBitmapPattern(context,
|
|
5
|
-
|
|
5
|
+
export function createBitmapPattern(context, texture, resolvers, allowSmoothing = true) {
|
|
6
|
+
const source = resolveCanvasTextureWindowSource(resolvers, texture);
|
|
7
|
+
if (source === null)
|
|
6
8
|
return null;
|
|
9
|
+
const smooth = allowSmoothing && !texture.sampler.magFilter.startsWith('nearest');
|
|
7
10
|
setSmoothing(context, smooth);
|
|
8
|
-
return context.createPattern(
|
|
11
|
+
return context.createPattern(source, getCanvasPatternRepetition(texture));
|
|
9
12
|
}
|
|
10
13
|
export function createGradientPattern(context, gradientType, colors, alphas, ratios, m, spreadMethod, _interpolationMethod, focalPointRatio) {
|
|
11
14
|
const mat = m ?? IDENTITY;
|
|
@@ -94,6 +97,17 @@ function createLinearGradient(context, colors, alphas, ratios, m, spreadMethod)
|
|
|
94
97
|
octx.fillRect(0, 0, offscreen.width, offscreen.height);
|
|
95
98
|
return context.createPattern(offscreen, 'no-repeat');
|
|
96
99
|
}
|
|
100
|
+
function getCanvasPatternRepetition(texture) {
|
|
101
|
+
const repeatX = texture.sampler.wrapU !== 'clamp-to-edge';
|
|
102
|
+
const repeatY = texture.sampler.wrapV !== 'clamp-to-edge';
|
|
103
|
+
if (repeatX && repeatY)
|
|
104
|
+
return 'repeat';
|
|
105
|
+
if (repeatX)
|
|
106
|
+
return 'repeat-x';
|
|
107
|
+
if (repeatY)
|
|
108
|
+
return 'repeat-y';
|
|
109
|
+
return 'no-repeat';
|
|
110
|
+
}
|
|
97
111
|
function setSmoothing(context, smooth) {
|
|
98
112
|
if (context.imageSmoothingEnabled !== smooth) {
|
|
99
113
|
context.imageSmoothingEnabled = smooth;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasFillPattern.js","sourceRoot":"","sources":["../src/canvasFillPattern.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"canvasFillPattern.js","sourceRoot":"","sources":["../src/canvasFillPattern.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function explainCanvasImageSource(image: Readonly<
|
|
3
|
-
export declare function resolveCanvasImageSource(state: CanvasRenderState, image: Readonly<ImageResource>): CanvasImageSource | null;
|
|
1
|
+
import type { Bitmap, CanvasImageSourceKind, Image } from '@flighthq/types/contract';
|
|
2
|
+
export declare function explainCanvasImageSource(image: Readonly<Image> | Readonly<Bitmap>): CanvasImageSourceKind;
|
|
4
3
|
//# sourceMappingURL=canvasImageSource.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasImageSource.d.ts","sourceRoot":"","sources":["../src/canvasImageSource.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"canvasImageSource.d.ts","sourceRoot":"","sources":["../src/canvasImageSource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAKrF,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,qBAAqB,CAGzG"}
|
|
@@ -1,45 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
//
|
|
4
|
-
// — the shakeable diagnostic for the otherwise-silent data→element transcode. `element` is free;
|
|
5
|
-
// `data` means resolveCanvasImageSource transcodes the pixels into a cached canvas on first use and
|
|
6
|
-
// after every `version` bump (a CPU copy the GL/wgpu data path does not incur, since those upload raw
|
|
7
|
-
// texels natively). A guard or dev tool surfaces this so the cost is legible, per the diagnostics rule.
|
|
1
|
+
import { BitmapTextureSourceKind } from '@flighthq/types/contract';
|
|
2
|
+
// Reports whether Canvas can draw a source directly or must materialize its bytes. The query never
|
|
3
|
+
// performs the conversion; registerCanvasBitmapTextureResolver is the explicit opt-in that does.
|
|
8
4
|
export function explainCanvasImageSource(image) {
|
|
9
|
-
if (image.
|
|
10
|
-
return 'element';
|
|
11
|
-
if (image.data !== null)
|
|
5
|
+
if (image.kind === BitmapTextureSourceKind)
|
|
12
6
|
return 'data';
|
|
13
|
-
return '
|
|
14
|
-
}
|
|
15
|
-
// Resolves a (possibly data-only) ImageResource to a CanvasImageSource the 2D context can draw. An
|
|
16
|
-
// element-backed resource returns its host `source` directly with no copy. A data-only resource — a
|
|
17
|
-
// generated Surface with no element — materializes an HTMLCanvasElement from its raw pixels and caches
|
|
18
|
-
// it per render state, re-materializing only when `version` bumps (see invalidateImageResource).
|
|
19
|
-
// Returns null when the resource carries neither pixel form.
|
|
20
|
-
//
|
|
21
|
-
// This is the Canvas parallel to the GL backend's bindGlImageResourceTexture: derived, renderer-owned
|
|
22
|
-
// state keyed on the caller's explicit invalidation signal, never written back onto the shared
|
|
23
|
-
// resource. It closes the gap where a data-only Surface previously drew nothing on Canvas/DOM unless
|
|
24
|
-
// the caller manually built an element (createImageResourceFromSurface) first. The transcode cost is
|
|
25
|
-
// reportable via explainCanvasImageSource rather than hidden.
|
|
26
|
-
export function resolveCanvasImageSource(state, image) {
|
|
27
|
-
if (image.source !== null)
|
|
28
|
-
return image.source;
|
|
29
|
-
if (image.data === null)
|
|
30
|
-
return null;
|
|
31
|
-
const runtime = getCanvasRenderStateRuntime(state);
|
|
32
|
-
let cache = runtime.imageResourceElementCache;
|
|
33
|
-
if (cache === undefined) {
|
|
34
|
-
cache = new WeakMap();
|
|
35
|
-
runtime.imageResourceElementCache = cache;
|
|
36
|
-
}
|
|
37
|
-
let entry = cache.get(image);
|
|
38
|
-
if (entry === undefined || entry.version !== image.version) {
|
|
39
|
-
// data is non-null here, so the transcode never returns null.
|
|
40
|
-
entry = { element: createCanvasFromImageResource(image), version: image.version };
|
|
41
|
-
cache.set(image, entry);
|
|
42
|
-
}
|
|
43
|
-
return entry.element;
|
|
7
|
+
return 'element';
|
|
44
8
|
}
|
|
45
9
|
//# sourceMappingURL=canvasImageSource.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasImageSource.js","sourceRoot":"","sources":["../src/canvasImageSource.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"canvasImageSource.js","sourceRoot":"","sources":["../src/canvasImageSource.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,mGAAmG;AACnG,iGAAiG;AACjG,MAAM,UAAU,wBAAwB,CAAC,KAAyC;IAChF,IAAI,KAAK,CAAC,IAAI,KAAK,uBAAuB;QAAE,OAAO,MAAM,CAAC;IAC1D,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasImageTextureResolver.d.ts","sourceRoot":"","sources":["../src/canvasImageTextureResolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAkB,MAAM,0BAA0B,CAAC;AAKvF,wBAAgB,kCAAkC,CAAC,SAAS,EAAE,sBAAsB,GAAG,IAAI,CAE1F"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { getTextureSource } from '@flighthq/texture/contract';
|
|
2
|
+
import { ImageTextureSourceKind } from '@flighthq/types/contract';
|
|
3
|
+
import { registerCanvasTextureResolver } from './canvasTextureResolver';
|
|
4
|
+
export function registerCanvasImageTextureResolver(resolvers) {
|
|
5
|
+
registerCanvasTextureResolver(resolvers, ImageTextureSourceKind, resolveCanvasImageTexture);
|
|
6
|
+
}
|
|
7
|
+
function resolveCanvasImageTexture(_resolvers, texture) {
|
|
8
|
+
return getTextureSource(texture)?.source ?? null;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=canvasImageTextureResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasImageTextureResolver.js","sourceRoot":"","sources":["../src/canvasImageTextureResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAExE,MAAM,UAAU,kCAAkC,CAAC,SAAiC;IAClF,6BAA6B,CAAC,SAAS,EAAE,sBAAsB,EAAE,yBAAyB,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,yBAAyB,CAChC,UAAkC,EAClC,OAA0B;IAE1B,OAAQ,gBAAgB,CAAC,OAAO,CAA4B,EAAE,MAAM,IAAI,IAAI,CAAC;AAC/E,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasParticleEmitter2D.d.ts","sourceRoot":"","sources":["../src/canvasParticleEmitter2D.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAqB,aAAa,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"canvasParticleEmitter2D.d.ts","sourceRoot":"","sources":["../src/canvasParticleEmitter2D.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAqB,aAAa,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AASpH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,aAAa,GAAG,IAAI,CAyDtG;AAED,eAAO,MAAM,sCAAsC,EAAE,cAGpD,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { noopRendererData } from '@flighthq/render/contract';
|
|
2
|
+
import { getCanvasRenderStateTextureResolvers } from './canvasRenderState';
|
|
3
|
+
import { resolveCanvasTexture } from './canvasTextureResolver';
|
|
2
4
|
// Canvas 2D does not support per-pixel color multiplication, so only alpha
|
|
3
5
|
// and transform (position, rotation, scale) are applied. Color tint values
|
|
4
6
|
// from the emitter config are silently ignored. Use the Gl renderer for
|
|
@@ -6,16 +8,19 @@ import { noopRendererData } from '@flighthq/render/contract';
|
|
|
6
8
|
export function drawCanvasParticleEmitter2D(state, renderProxy) {
|
|
7
9
|
const source = renderProxy.source;
|
|
8
10
|
const { atlas, alphas, ids, particleCount, transforms } = source.data;
|
|
9
|
-
if (atlas === null || atlas.
|
|
11
|
+
if (atlas === null || atlas.texture === null || particleCount === 0)
|
|
12
|
+
return;
|
|
13
|
+
const imageSource = resolveCanvasTexture(getCanvasRenderStateTextureResolvers(state), atlas.texture);
|
|
14
|
+
if (imageSource === null)
|
|
10
15
|
return;
|
|
11
16
|
const regions = atlas.regions;
|
|
12
17
|
const numRegions = regions.length;
|
|
13
18
|
const nodeAlpha = renderProxy.alpha;
|
|
14
19
|
const t = renderProxy.transform2D;
|
|
15
|
-
const imageSource = atlas.image.source;
|
|
16
20
|
const context = state.context;
|
|
17
21
|
state.applyBlendMode?.(state, renderProxy.blendMode);
|
|
18
|
-
|
|
22
|
+
const smoothing = state.allowSmoothing && !atlas.texture.sampler.magFilter.startsWith('nearest');
|
|
23
|
+
if (!smoothing)
|
|
19
24
|
context.imageSmoothingEnabled = false;
|
|
20
25
|
for (let i = 0; i < particleCount; i++) {
|
|
21
26
|
const id = ids[i];
|
|
@@ -54,7 +59,7 @@ export function drawCanvasParticleEmitter2D(state, renderProxy) {
|
|
|
54
59
|
context.setTransform(a, b, c, d, tx, ty);
|
|
55
60
|
context.drawImage(imageSource, region.x, region.y, region.width, region.height, 0, 0, region.width, region.height);
|
|
56
61
|
}
|
|
57
|
-
if (!
|
|
62
|
+
if (!smoothing)
|
|
58
63
|
context.imageSmoothingEnabled = true;
|
|
59
64
|
}
|
|
60
65
|
export const defaultCanvasParticleEmitter2DRenderer = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasParticleEmitter2D.js","sourceRoot":"","sources":["../src/canvasParticleEmitter2D.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAG7D,2EAA2E;AAC3E,2EAA2E;AAC3E,wEAAwE;AACxE,oCAAoC;AACpC,MAAM,UAAU,2BAA2B,CAAC,KAAwB,EAAE,WAA0B;IAC9F,MAAM,MAAM,GAAG,WAAW,CAAC,MAA2B,CAAC;IACvD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IACtE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"canvasParticleEmitter2D.js","sourceRoot":"","sources":["../src/canvasParticleEmitter2D.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasQuadBatch.d.ts","sourceRoot":"","sources":["../src/canvasQuadBatch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAa,aAAa,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"canvasQuadBatch.d.ts","sourceRoot":"","sources":["../src/canvasQuadBatch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAa,aAAa,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAM5G,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,aAAa,GAAG,IAAI,CAuF5F;AAED,eAAO,MAAM,8BAA8B,EAAE,cAG5C,CAAC"}
|
package/dist/canvasQuadBatch.js
CHANGED
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import { acquireMatrix, multiplyMatrix, releaseMatrix, setMatrixFromFloat32Array } from '@flighthq/geometry/contract';
|
|
2
2
|
import { noopRendererData } from '@flighthq/render/contract';
|
|
3
3
|
import { applyCanvasMaterial } from './canvasMaterialRegistry';
|
|
4
|
+
import { getCanvasRenderStateTextureResolvers } from './canvasRenderState';
|
|
5
|
+
import { resolveCanvasTexture } from './canvasTextureResolver';
|
|
4
6
|
export function drawCanvasQuadBatch(state, quadBatch) {
|
|
5
7
|
const source = quadBatch.source;
|
|
6
8
|
const data = source.data;
|
|
7
9
|
const { atlas, instanceCount, ids, transforms } = data;
|
|
8
|
-
if (atlas === null || atlas.
|
|
10
|
+
if (atlas === null || atlas.texture === null || instanceCount === 0)
|
|
11
|
+
return;
|
|
12
|
+
const image = resolveCanvasTexture(getCanvasRenderStateTextureResolvers(state), atlas.texture);
|
|
13
|
+
if (image === null)
|
|
9
14
|
return;
|
|
10
15
|
state.applyBlendMode?.(state, quadBatch.blendMode);
|
|
11
16
|
const context = state.context;
|
|
12
|
-
const image = atlas.image.source;
|
|
13
17
|
const regions = atlas.regions;
|
|
14
18
|
const numRegions = regions.length;
|
|
15
19
|
const transform = quadBatch.transform2D;
|
|
@@ -17,7 +21,8 @@ export function drawCanvasQuadBatch(state, quadBatch) {
|
|
|
17
21
|
const quadTransform = acquireMatrix();
|
|
18
22
|
const stride = data.transformType === 'vector2' ? 2 : 6;
|
|
19
23
|
context.globalAlpha = quadBatch.alpha;
|
|
20
|
-
|
|
24
|
+
const smoothing = state.allowSmoothing && !atlas.texture.sampler.magFilter.startsWith('nearest');
|
|
25
|
+
if (!smoothing) {
|
|
21
26
|
context.imageSmoothingEnabled = false;
|
|
22
27
|
}
|
|
23
28
|
const restoreMaterial = applyCanvasMaterial(state, quadBatch.material);
|
|
@@ -51,7 +56,7 @@ export function drawCanvasQuadBatch(state, quadBatch) {
|
|
|
51
56
|
context.restore();
|
|
52
57
|
context.setTransform(1, 0, 0, 1, 0, 0);
|
|
53
58
|
releaseMatrix(quadTransform);
|
|
54
|
-
if (!
|
|
59
|
+
if (!smoothing) {
|
|
55
60
|
context.imageSmoothingEnabled = true;
|
|
56
61
|
}
|
|
57
62
|
// popClip(state);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasQuadBatch.js","sourceRoot":"","sources":["../src/canvasQuadBatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACtH,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAG7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,MAAM,UAAU,mBAAmB,CAAC,KAAwB,EAAE,SAAwB;IACpF,MAAM,MAAM,GAAG,SAAS,CAAC,MAAmB,CAAC;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IACzB,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IACvD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"canvasQuadBatch.js","sourceRoot":"","sources":["../src/canvasQuadBatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import type { CanvasRenderOptions, CanvasRenderState, CanvasRenderStateRuntime } from '@flighthq/types/contract';
|
|
1
|
+
import type { CanvasRenderOptions, CanvasRenderState, CanvasRenderStateRuntime, CanvasTextureResolvers } from '@flighthq/types/contract';
|
|
2
|
+
export declare function copyCanvasRenderStateRegistrations(target: CanvasRenderState, source: CanvasRenderState): void;
|
|
2
3
|
export declare function createCanvasRenderState(canvas: HTMLCanvasElement, options?: Partial<CanvasRenderOptions>): CanvasRenderState;
|
|
3
4
|
export declare function createCanvasRenderStateRuntime(): CanvasRenderStateRuntime;
|
|
5
|
+
export declare function destroyCanvasRenderState(state: CanvasRenderState): void;
|
|
4
6
|
export declare function getCanvasRenderStateRuntime(state: CanvasRenderState): CanvasRenderStateRuntime;
|
|
7
|
+
export declare function getCanvasRenderStateTextureResolvers(state: CanvasRenderState): CanvasTextureResolvers;
|
|
5
8
|
//# sourceMappingURL=canvasRenderState.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasRenderState.d.ts","sourceRoot":"","sources":["../src/canvasRenderState.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"canvasRenderState.d.ts","sourceRoot":"","sources":["../src/canvasRenderState.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAOlC,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAS7G;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,iBAAiB,EACzB,OAAO,GAAE,OAAO,CAAC,mBAAmB,CAAM,GACzC,iBAAiB,CAkCnB;AAMD,wBAAgB,8BAA8B,IAAI,wBAAwB,CAEzE;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAEvE;AAID,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,iBAAiB,GAAG,wBAAwB,CAE9F;AAQD,wBAAgB,oCAAoC,CAAC,KAAK,EAAE,iBAAiB,GAAG,sBAAsB,CAErG"}
|
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
import { createMatrix } from '@flighthq/geometry/contract';
|
|
2
|
-
import { createRenderState as _createRenderState, createRenderStateRuntime, setRenderStateBackgroundColor, } from '@flighthq/render/contract';
|
|
2
|
+
import { copyRenderStateRegistrations, createRenderState as _createRenderState, createRenderStateRuntime, destroyRenderState, setRenderStateBackgroundColor, } from '@flighthq/render/contract';
|
|
3
3
|
import { EntityRuntimeKey } from '@flighthq/types/contract';
|
|
4
|
+
import { createCanvasTextureResolvers } from './canvasTextureResolver';
|
|
5
|
+
// Explicit snapshot re-copy for policy that is meaningful to a derived Canvas pipeline. Resource
|
|
6
|
+
// caches remain state-local; registrations are cloned so later changes do not leak across states.
|
|
7
|
+
export function copyCanvasRenderStateRegistrations(target, source) {
|
|
8
|
+
const targetRuntime = getCanvasRenderStateRuntime(target);
|
|
9
|
+
const sourceRuntime = getCanvasRenderStateRuntime(source);
|
|
10
|
+
target.applyBlendMode = source.applyBlendMode;
|
|
11
|
+
target.canvasCssFilterResolver = source.canvasCssFilterResolver;
|
|
12
|
+
targetRuntime.canvasTextureResolvers.registry = copyMap(sourceRuntime.canvasTextureResolvers.registry);
|
|
13
|
+
targetRuntime.materialRendererMap = copyMap(sourceRuntime.materialRendererMap);
|
|
14
|
+
targetRuntime.canvasRenderEffectRegistry = copyMap(sourceRuntime.canvasRenderEffectRegistry);
|
|
15
|
+
copyRenderStateRegistrations(target, source);
|
|
16
|
+
}
|
|
4
17
|
export function createCanvasRenderState(canvas, options = {}) {
|
|
5
18
|
const context = canvas.getContext('2d', options.contextAttributes || undefined);
|
|
6
19
|
if (!context)
|
|
@@ -22,6 +35,10 @@ export function createCanvasRenderState(canvas, options = {}) {
|
|
|
22
35
|
state.contextAttributes = context.getContextAttributes();
|
|
23
36
|
const runtime = createCanvasRenderStateRuntime();
|
|
24
37
|
state[EntityRuntimeKey] = runtime;
|
|
38
|
+
// The state owns a resolution set and points its miss seam at its own emitter. The closure reads the
|
|
39
|
+
// emitter at call time, so enabling the guards later still reports through it.
|
|
40
|
+
runtime.canvasTextureResolvers = createCanvasTextureResolvers();
|
|
41
|
+
runtime.canvasTextureResolvers.registryMiss = (registry, kind) => runtime.registryMiss?.(registry, kind);
|
|
25
42
|
runtime.currentBlendMode = null;
|
|
26
43
|
runtime.imageSmoothingEnabled = options.imageSmoothingEnabled ?? true;
|
|
27
44
|
runtime.imageSmoothingQuality = options.imageSmoothingQuality ?? 'high';
|
|
@@ -36,9 +53,20 @@ export function createCanvasRenderState(canvas, options = {}) {
|
|
|
36
53
|
export function createCanvasRenderStateRuntime() {
|
|
37
54
|
return createRenderStateRuntime();
|
|
38
55
|
}
|
|
56
|
+
export function destroyCanvasRenderState(state) {
|
|
57
|
+
destroyRenderState(state);
|
|
58
|
+
}
|
|
39
59
|
// Resolves the package-private 2D-canvas runtime attached to a CanvasRenderState. Mutable by design:
|
|
40
60
|
// the render path writes its fields every frame.
|
|
41
61
|
export function getCanvasRenderStateRuntime(state) {
|
|
42
62
|
return state[EntityRuntimeKey];
|
|
43
63
|
}
|
|
64
|
+
function copyMap(source) {
|
|
65
|
+
return source === null || source === undefined ? undefined : new Map(source);
|
|
66
|
+
}
|
|
67
|
+
// The state's own resolution set, which a shape rasterizer on another backend can share so both resolve
|
|
68
|
+
// one Texture through one transcode cache.
|
|
69
|
+
export function getCanvasRenderStateTextureResolvers(state) {
|
|
70
|
+
return getCanvasRenderStateRuntime(state).canvasTextureResolvers;
|
|
71
|
+
}
|
|
44
72
|
//# sourceMappingURL=canvasRenderState.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasRenderState.js","sourceRoot":"","sources":["../src/canvasRenderState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EACL,iBAAiB,IAAI,kBAAkB,EACvC,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"canvasRenderState.js","sourceRoot":"","sources":["../src/canvasRenderState.ts"],"names":[],"mappings":"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"}
|