@flighthq/scene2d-gl 0.5.1-next.1069.554a2ac → 0.5.1-next.1201.9b49dee
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 +2 -2
- package/dist/glCache.d.ts +4 -13
- package/dist/glCache.d.ts.map +1 -1
- package/dist/glCache.js +12 -21
- package/dist/glCache.js.map +1 -1
- package/dist/glNode2D.d.ts +2 -2
- package/dist/glNode2D.d.ts.map +1 -1
- package/dist/glNode2D.js +2 -1
- package/dist/glNode2D.js.map +1 -1
- package/dist/glTestHelper.d.ts.map +1 -1
- package/dist/glTestHelper.js +3 -9
- package/dist/glTestHelper.js.map +1 -1
- package/dist/glVelocity.d.ts +3 -3
- package/dist/glVelocity.d.ts.map +1 -1
- package/dist/glVelocity.js +2 -2
- package/dist/glVelocity.js.map +1 -1
- package/package.json +20 -20
- package/src/glBitmapText.test.ts +15 -1
- package/src/glCache.test.ts +28 -21
- package/src/glClipContours.test.ts +8 -8
- package/src/glNode2D.test.ts +12 -21
- package/src/glParticleEmitter2D.test.ts +15 -1
- package/src/glQuadBatch.test.ts +15 -1
- package/src/glRasterShapeRenderer.test.ts +15 -1
- package/src/glRichText.test.ts +15 -1
- package/src/glScale9Shape.test.ts +16 -1
- package/src/glShape.test.ts +15 -1
- package/src/glShapeData.test.ts +15 -1
- package/src/glSprite.test.ts +1 -1
- package/src/glTextInput.test.ts +15 -1
- package/src/glTextLabel.test.ts +15 -1
- package/src/glTilemap.test.ts +15 -1
- package/src/glVelocity.test.ts +2 -5
package/README.md
CHANGED
|
@@ -13,5 +13,5 @@ Import the supported application-facing API from `@flighthq/scene2d-gl`. The `@f
|
|
|
13
13
|
This package is part of the locked-version Flight SDK graph. Applications may instead install and import `@flighthq/sdk` when package-level tree shaking is sufficient.
|
|
14
14
|
|
|
15
15
|
- [Flight project](https://github.com/flighthq/flight)
|
|
16
|
-
- [Source for @flighthq/scene2d-gl@0.5.1-next.
|
|
17
|
-
- [License](https://github.com/flighthq/flight/blob/
|
|
16
|
+
- [Source for @flighthq/scene2d-gl@0.5.1-next.1201.9b49dee](https://github.com/flighthq/flight/tree/9b49dee3f22f6b2838c3d237edcc77bca65734f2/packages/scene2d-gl)
|
|
17
|
+
- [License](https://github.com/flighthq/flight/blob/9b49dee3f22f6b2838c3d237edcc77bca65734f2/LICENSE.md)
|
package/dist/glCache.d.ts
CHANGED
|
@@ -1,22 +1,13 @@
|
|
|
1
|
-
import type { Node2D, Scene2DRenderer, GlRenderState,
|
|
2
|
-
|
|
3
|
-
* Creates an offscreen render state for baking render caches consumed by `screenState`.
|
|
4
|
-
*
|
|
5
|
-
* Gl textures and framebuffers cannot cross GL contexts, so — unlike the canvas backend —
|
|
6
|
-
* this offscreen state must share the screen state's GL context and every context-bound
|
|
7
|
-
* resource (shaders, buffers, the uploaded-texture cache). What it keeps separate is the
|
|
8
|
-
* scene-graph bookkeeping: its own render node map, adapter map, and frame counter, so baking
|
|
9
|
-
* neither substitutes a cache into itself nor disturbs the screen state's nodes.
|
|
10
|
-
*/
|
|
11
|
-
export declare function createGlCacheState(ownerState: GlRenderState, contextState: Readonly<GlContextState>, pipeline: Readonly<GlPipeline>, options?: GlRenderOptions): GlRenderState;
|
|
1
|
+
import type { Node2D, Scene2DRenderer, GlRenderState, GlPipeline, GlRenderOptions, GlTextureRenderTarget, RenderCache, RenderCacheRefreshOptions } from '@flighthq/types/contract';
|
|
2
|
+
export declare function createGlCacheState(ownerState: GlRenderState, pipeline: Readonly<GlPipeline>, options?: GlRenderOptions): GlRenderState;
|
|
12
3
|
export declare function enableGlRenderCache(state: GlRenderState): void;
|
|
13
4
|
/**
|
|
14
5
|
* Allocates or resizes the framebuffer-backed texture `screenState` composites for `cache`,
|
|
15
6
|
* returning it so a caller can render custom content into it directly. For engine-baked
|
|
16
7
|
* content prefer refreshGlRenderCache.
|
|
17
8
|
*/
|
|
18
|
-
export declare function ensureGlRenderCacheTarget(ownerState: GlRenderState, cache: RenderCache, width: number, height: number):
|
|
19
|
-
export declare function getGlRenderCacheTarget(ownerState: GlRenderState, cache: RenderCache):
|
|
9
|
+
export declare function ensureGlRenderCacheTarget(ownerState: GlRenderState, cache: RenderCache, width: number, height: number): GlTextureRenderTarget;
|
|
10
|
+
export declare function getGlRenderCacheTarget(ownerState: GlRenderState, cache: RenderCache): GlTextureRenderTarget | null;
|
|
20
11
|
/**
|
|
21
12
|
* Bakes `source`'s subtree into its cache target using the offscreen `cacheState`, then records
|
|
22
13
|
* the transform that places the result back in scene space. Returns whether a bake happened —
|
package/dist/glCache.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glCache.d.ts","sourceRoot":"","sources":["../src/glCache.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"glCache.d.ts","sourceRoot":"","sources":["../src/glCache.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EACV,MAAM,EACN,eAAe,EACf,aAAa,EACb,UAAU,EACV,eAAe,EACf,qBAAqB,EAErB,WAAW,EACX,yBAAyB,EAE1B,MAAM,0BAA0B,CAAC;AAKlC,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,aAAa,EACzB,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC9B,OAAO,GAAE,eAAoB,GAC5B,aAAa,CAIf;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAE9D;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,aAAa,EACzB,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,qBAAqB,CAUvB;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,GAAG,qBAAqB,GAAG,IAAI,CAElH;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,aAAa,EACzB,UAAU,EAAE,aAAa,EACzB,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,QAAQ,CAAC,yBAAyB,CAAC,GAC5C,OAAO,CAiCT;AAED,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAQxF;AAmCD,eAAO,MAAM,4BAA4B,EAAE,eAG1C,CAAC"}
|
package/dist/glCache.js
CHANGED
|
@@ -1,20 +1,11 @@
|
|
|
1
1
|
import { createMatrix, createRectangle } from '@flighthq/geometry/contract';
|
|
2
2
|
import { computeNodeRootLocalBoundsRectangle } from '@flighthq/node/contract';
|
|
3
|
-
import { beginGlRenderPass,
|
|
3
|
+
import { beginGlRenderPass, createGlRenderState, createGlTextureRenderTarget, destroyGlRenderState, destroyGlTextureRenderTarget, drawGlTextureRenderTargetResult, endGlRenderPass, getGlCurrentRenderPass, resizeGlTextureRenderTarget, registerGlRenderStateTeardown, setGlRenderTransform2D, } from '@flighthq/render-gl/contract';
|
|
4
4
|
import { computeScene2DRenderTargetTransform, computeRenderCacheTransform, computeRenderTargetSize, getRenderProxyCache, noopRendererData, prepareScene2DRender, registerRenderCacheRenderer, } from '@flighthq/render/contract';
|
|
5
5
|
import { renderGlScene2D } from './glNode2D';
|
|
6
6
|
import { flushGlQuadBatchWriter } from './glQuadBatchWriter';
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
*
|
|
10
|
-
* Gl textures and framebuffers cannot cross GL contexts, so — unlike the canvas backend —
|
|
11
|
-
* this offscreen state must share the screen state's GL context and every context-bound
|
|
12
|
-
* resource (shaders, buffers, the uploaded-texture cache). What it keeps separate is the
|
|
13
|
-
* scene-graph bookkeeping: its own render node map, adapter map, and frame counter, so baking
|
|
14
|
-
* neither substitutes a cache into itself nor disturbs the screen state's nodes.
|
|
15
|
-
*/
|
|
16
|
-
export function createGlCacheState(ownerState, contextState, pipeline, options = {}) {
|
|
17
|
-
const cacheState = createGlOffscreenRenderState(contextState, pipeline, options);
|
|
7
|
+
export function createGlCacheState(ownerState, pipeline, options = {}) {
|
|
8
|
+
const cacheState = createGlRenderState(ownerState.gl, pipeline, options);
|
|
18
9
|
registerGlRenderStateTeardown(ownerState, () => destroyGlRenderState(cacheState));
|
|
19
10
|
return cacheState;
|
|
20
11
|
}
|
|
@@ -30,11 +21,11 @@ export function ensureGlRenderCacheTarget(ownerState, cache, width, height) {
|
|
|
30
21
|
const targets = ensureTargets(ownerState);
|
|
31
22
|
let target = targets.get(cache);
|
|
32
23
|
if (target === undefined) {
|
|
33
|
-
target =
|
|
24
|
+
target = createGlTextureRenderTarget(ownerState, { width, height });
|
|
34
25
|
targets.set(cache, target);
|
|
35
26
|
}
|
|
36
27
|
else {
|
|
37
|
-
|
|
28
|
+
resizeGlTextureRenderTarget(ownerState, target, width, height);
|
|
38
29
|
}
|
|
39
30
|
return target;
|
|
40
31
|
}
|
|
@@ -62,7 +53,7 @@ export function refreshGlRenderCache(ownerState, cacheState, cache, source, opti
|
|
|
62
53
|
// Preserve on begin — the bake below clears and redraws only when dirty; clearing here would wipe the
|
|
63
54
|
// retained cache content on the not-dirty path. The cache's local-space transform is set explicitly,
|
|
64
55
|
// since a pass no longer carries one.
|
|
65
|
-
beginGlRenderPass(cacheState, target
|
|
56
|
+
const pass = beginGlRenderPass(cacheState, target);
|
|
66
57
|
let dirty = false;
|
|
67
58
|
try {
|
|
68
59
|
setGlRenderTransform2D(cacheState, _renderTransform);
|
|
@@ -70,11 +61,11 @@ export function refreshGlRenderCache(ownerState, cacheState, cache, source, opti
|
|
|
70
61
|
if (dirty || resized) {
|
|
71
62
|
cacheState.gl.clearColor(0, 0, 0, 0);
|
|
72
63
|
cacheState.gl.clear(cacheState.gl.COLOR_BUFFER_BIT);
|
|
73
|
-
renderGlScene2D(
|
|
64
|
+
renderGlScene2D(pass, source);
|
|
74
65
|
}
|
|
75
66
|
}
|
|
76
67
|
finally {
|
|
77
|
-
endGlRenderPass(
|
|
68
|
+
endGlRenderPass(pass);
|
|
78
69
|
}
|
|
79
70
|
return dirty || resized;
|
|
80
71
|
}
|
|
@@ -85,8 +76,8 @@ export function releaseGlRenderCache(ownerState, cache) {
|
|
|
85
76
|
const target = targets.get(cache);
|
|
86
77
|
if (target === undefined)
|
|
87
78
|
return;
|
|
88
|
-
// A
|
|
89
|
-
|
|
79
|
+
// A GlTextureRenderTarget owns a framebuffer and texture; GC will not free them.
|
|
80
|
+
destroyGlTextureRenderTarget(target);
|
|
90
81
|
targets.delete(cache);
|
|
91
82
|
}
|
|
92
83
|
function drawGlRenderCache(state, renderProxy) {
|
|
@@ -103,7 +94,7 @@ function drawGlRenderCache(state, renderProxy) {
|
|
|
103
94
|
flushGlQuadBatchWriter(state);
|
|
104
95
|
// renderProxy.transform2D already carries the cache placement transform (folded in by the
|
|
105
96
|
// adapter), so the target composites with an identity offset.
|
|
106
|
-
|
|
97
|
+
drawGlTextureRenderTargetResult(getGlCurrentRenderPass(state), renderProxy, target, _identity);
|
|
107
98
|
}
|
|
108
99
|
function ensureTargets(ownerState) {
|
|
109
100
|
let targets = _renderCacheTargets.get(ownerState);
|
|
@@ -119,7 +110,7 @@ function destroyOwnedGlRenderCacheTargets(ownerState) {
|
|
|
119
110
|
if (targets === undefined)
|
|
120
111
|
return;
|
|
121
112
|
for (const target of targets.values())
|
|
122
|
-
|
|
113
|
+
destroyGlTextureRenderTarget(target);
|
|
123
114
|
targets.clear();
|
|
124
115
|
_renderCacheTargets.delete(ownerState);
|
|
125
116
|
}
|
package/dist/glCache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glCache.js","sourceRoot":"","sources":["../src/glCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,mCAAmC,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EACL,iBAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"glCache.js","sourceRoot":"","sources":["../src/glCache.ts"],"names":[],"mappings":"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"}
|
package/dist/glNode2D.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { GlRenderPass, GlRenderState, Node2D, RenderProxy2D, Scene2DRenderer } from '@flighthq/types/contract';
|
|
2
2
|
export declare function drawGlScene2D(_state: GlRenderState, _renderProxy: RenderProxy2D): void;
|
|
3
|
-
export declare function renderGlScene2D(
|
|
3
|
+
export declare function renderGlScene2D(pass: GlRenderPass, source: Node2D): void;
|
|
4
4
|
export declare const defaultGlScene2DRenderer: Scene2DRenderer;
|
|
5
5
|
//# sourceMappingURL=glNode2D.d.ts.map
|
package/dist/glNode2D.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glNode2D.d.ts","sourceRoot":"","sources":["../src/glNode2D.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"glNode2D.d.ts","sourceRoot":"","sources":["../src/glNode2D.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAIpH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,GAAG,IAAI,CAEtF;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CA+CxE;AAED,eAAO,MAAM,wBAAwB,EAAE,eAGtC,CAAC"}
|
package/dist/glNode2D.js
CHANGED
|
@@ -5,7 +5,8 @@ import { flushGlQuadBatchWriter } from './glQuadBatchWriter';
|
|
|
5
5
|
export function drawGlScene2D(_state, _renderProxy) {
|
|
6
6
|
// Plain display objects have no visual geometry of their own.
|
|
7
7
|
}
|
|
8
|
-
export function renderGlScene2D(
|
|
8
|
+
export function renderGlScene2D(pass, source) {
|
|
9
|
+
const state = pass.state;
|
|
9
10
|
const gl = state.gl;
|
|
10
11
|
// The 2D pass establishes the state it draws under rather than depending on a context-lifetime
|
|
11
12
|
// invariant. These were previously taken on trust from createGlRenderState, which runs once per state,
|
package/dist/glNode2D.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glNode2D.js","sourceRoot":"","sources":["../src/glNode2D.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACrG,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAG9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,UAAU,aAAa,CAAC,MAAqB,EAAE,YAA2B;IAC9E,8DAA8D;AAChE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"glNode2D.js","sourceRoot":"","sources":["../src/glNode2D.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACrG,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAG9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,UAAU,aAAa,CAAC,MAAqB,EAAE,YAA2B;IAC9E,8DAA8D;AAChE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAkB,EAAE,MAAc;IAChE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACzB,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IACpB,+FAA+F;IAC/F,uGAAuG;IACvG,uGAAuG;IACvG,uGAAuG;IACvG,uFAAuF;IACvF,0FAA0F;IAC1F,qGAAqG;IACrG,sFAAsF;IACtF,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;IACzB,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;IAC1B,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAEpB,MAAM,SAAS,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;IAC3D,MAAM,SAAS,GAAG,KAAK,CAAC,sBAAsB,CAAC;IAE/C,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IAEtB,OAAO,WAAW,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,SAAS,CAAC,EAAE,WAAW,CAAW,CAAC;QACnD,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE,SAAS;QAE/B,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9C,IAAI,IAAI,KAAK,SAAS;YAAE,SAAS;QAEjC,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAEzC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;YAAE,SAAS;QAE1C,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAE1C,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;YACpD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC9C,SAAS,CAAC,WAAW,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAW,CAAC;gBACnD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAC9B,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAoB;IACvD,UAAU,EAAE,gBAAgB;IAC5B,MAAM,EAAE,aAAa;CACtB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glTestHelper.d.ts","sourceRoot":"","sources":["../src/glTestHelper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"glTestHelper.d.ts","sourceRoot":"","sources":["../src/glTestHelper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzE,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IAC1F,KAAK,EAAE,aAAa,CAAC;IACrB,EAAE,EAAE,SAAS,CAAC;IACd,MAAM,EAAE,iBAAiB,CAAC;CAC3B,CAcA"}
|
package/dist/glTestHelper.js
CHANGED
|
@@ -1,20 +1,14 @@
|
|
|
1
|
-
import { createEmptyGlRegistries,
|
|
2
|
-
// Local test helper for scene2d-gl unit tests. Mirrors render-gl's glTestHelper pattern,
|
|
3
|
-
// building state through createGlRenderState. The jsdom webgl2Mock setup file patches
|
|
4
|
-
// HTMLCanvasElement.getContext('webgl2') to return a mock GlContext, so
|
|
5
|
-
// createGlRenderState produces a fully-populated state with a working mock GL.
|
|
1
|
+
import { createEmptyGlRegistries, createGlPipeline, createGlRenderState } from '@flighthq/render-gl/contract';
|
|
6
2
|
export function createGlState(options) {
|
|
7
3
|
const canvas = document.createElement('canvas');
|
|
8
4
|
canvas.width = 200;
|
|
9
5
|
canvas.height = 100;
|
|
10
|
-
const gl =
|
|
6
|
+
const gl = canvas.getContext('webgl2');
|
|
11
7
|
Object.defineProperties(gl, {
|
|
12
8
|
drawingBufferHeight: { configurable: true, value: canvas.height },
|
|
13
9
|
drawingBufferWidth: { configurable: true, value: canvas.width },
|
|
14
10
|
});
|
|
15
|
-
const
|
|
16
|
-
const state = createGlRenderState(contextState, createGlPipeline(createEmptyGlRegistries()), {
|
|
17
|
-
backgroundColor: 0x00000000,
|
|
11
|
+
const state = createGlRenderState(gl, createGlPipeline(createEmptyGlRegistries()), {
|
|
18
12
|
imageSmoothingEnabled: options?.allowSmoothing ?? true,
|
|
19
13
|
pixelRatio: options?.pixelRatio,
|
|
20
14
|
});
|
package/dist/glTestHelper.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glTestHelper.js","sourceRoot":"","sources":["../src/glTestHelper.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"glTestHelper.js","sourceRoot":"","sources":["../src/glTestHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAG9G,MAAM,UAAU,aAAa,CAAC,OAA2D;IAKvF,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC;IACnB,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;IACpB,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAE,CAAC;IACxC,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE;QAC1B,mBAAmB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;QACjE,kBAAkB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE;KAChE,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,mBAAmB,CAAC,EAAE,EAAE,gBAAgB,CAAC,uBAAuB,EAAE,CAAC,EAAE;QACjF,qBAAqB,EAAE,OAAO,EAAE,cAAc,IAAI,IAAI;QACtD,UAAU,EAAE,OAAO,EAAE,UAAU;KAChC,CAAC,CAAC;IACH,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC;AACzC,CAAC"}
|
package/dist/glVelocity.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { GlRenderState,
|
|
1
|
+
import type { GlRenderState, GlTextureRenderTarget, GlVelocityContext, GlVelocityWriter, Kind, Transform2DNode, VelocityField } from '@flighthq/types/contract';
|
|
2
2
|
/** Allocates an rgba16f render target sized to hold a signed, sub-pixel screen-space velocity buffer. */
|
|
3
|
-
export declare function createGlVelocityTarget(state: GlRenderState, width: number, height: number):
|
|
3
|
+
export declare function createGlVelocityTarget(state: GlRenderState, width: number, height: number): GlTextureRenderTarget;
|
|
4
4
|
export declare const defaultGlNode2DVelocityWriter: GlVelocityWriter;
|
|
5
5
|
export declare const defaultGlParticleEmitter2DVelocityWriter: GlVelocityWriter;
|
|
6
6
|
export declare const defaultGlQuadBatchVelocityWriter: GlVelocityWriter;
|
|
@@ -18,5 +18,5 @@ export declare function registerGlVelocityWriter(state: GlRenderState, kind: Kin
|
|
|
18
18
|
* registered GlVelocityWriter for each node's kind. Nodes whose kind has no writer are skipped; the
|
|
19
19
|
* cleared (0,0,0,0) background means zero velocity. Restores the previously bound framebuffer.
|
|
20
20
|
*/
|
|
21
|
-
export declare function renderGlVelocity<Traits extends object>(state: GlRenderState, root: Readonly<Transform2DNode<Traits>>, field: VelocityField, target: Readonly<
|
|
21
|
+
export declare function renderGlVelocity<Traits extends object>(state: GlRenderState, root: Readonly<Transform2DNode<Traits>>, field: VelocityField, target: Readonly<GlTextureRenderTarget>): void;
|
|
22
22
|
//# sourceMappingURL=glVelocity.d.ts.map
|
package/dist/glVelocity.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glVelocity.d.ts","sourceRoot":"","sources":["../src/glVelocity.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAEV,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"glVelocity.d.ts","sourceRoot":"","sources":["../src/glVelocity.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAEV,aAAa,EACb,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,IAAI,EAKJ,eAAe,EAEf,aAAa,EACd,MAAM,0BAA0B,CAAC;AAgBlC,yGAAyG;AACzG,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,qBAAqB,CAEjH;AAID,eAAO,MAAM,6BAA6B,EAAE,gBAO3C,CAAC;AAWF,eAAO,MAAM,wCAAwC,EAAE,gBA8DtD,CAAC;AAeF,eAAO,MAAM,gCAAgC,EAAE,gBAyF9C,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EAChC,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,IAAI,CAUN;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,gBAAgB,GAAG,IAAI,CAG7F;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAMzG;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,SAAS,MAAM,EACpD,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EACvC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,qBAAqB,CAAC,GACtC,IAAI,CAuCN"}
|
package/dist/glVelocity.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ensureNodeWorldBoundsRectangle, ensureNodeWorldMatrix, getNodeChildAt, getNodeChildCount, getNodeWorldBoundsRectangle, getNodeWorldMatrix, } from '@flighthq/node/contract';
|
|
2
2
|
import { createGlProgram } from '@flighthq/render-gl/contract';
|
|
3
3
|
import { getGlRenderStateRuntime } from '@flighthq/render-gl/contract';
|
|
4
|
-
import {
|
|
4
|
+
import { createGlTextureRenderTarget } from '@flighthq/render-gl/contract';
|
|
5
5
|
import { TextureAtlasRotation } from '@flighthq/types/contract';
|
|
6
6
|
import { EntityRuntimeKey, RegistryEntryState } from '@flighthq/types/contract';
|
|
7
7
|
import { getVelocity } from '@flighthq/velocity/contract';
|
|
@@ -18,7 +18,7 @@ import { getVelocity } from '@flighthq/velocity/contract';
|
|
|
18
18
|
// top-left origin, y-down; drawGlVelocityQuad maps a rect into clip space, flipping y.
|
|
19
19
|
/** Allocates an rgba16f render target sized to hold a signed, sub-pixel screen-space velocity buffer. */
|
|
20
20
|
export function createGlVelocityTarget(state, width, height) {
|
|
21
|
-
return
|
|
21
|
+
return createGlTextureRenderTarget(state, { width, height, format: 'rgba16f' });
|
|
22
22
|
}
|
|
23
23
|
// The default writer for plain display-object nodes: cover the node's world bounds with its velocity.
|
|
24
24
|
// Batched/instanced kinds (QuadBatch, particles) register a writer that emits per-instance velocity.
|
package/dist/glVelocity.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glVelocity.js","sourceRoot":"","sources":["../src/glVelocity.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"glVelocity.js","sourceRoot":"","sources":["../src/glVelocity.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flighthq/scene2d-gl",
|
|
3
|
-
"version": "0.5.1-next.
|
|
3
|
+
"version": "0.5.1-next.1201.9b49dee",
|
|
4
4
|
"author": "Joshua Granick and other contributors",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -38,25 +38,25 @@
|
|
|
38
38
|
"clean:dist": "tsx ../../scripts/clean-package-dist.ts"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@flighthq/color": "0.5.1-next.
|
|
42
|
-
"@flighthq/entity": "0.5.1-next.
|
|
43
|
-
"@flighthq/scene2d": "0.5.1-next.
|
|
44
|
-
"@flighthq/scene2d-canvas": "0.5.1-next.
|
|
45
|
-
"@flighthq/geometry": "0.5.1-next.
|
|
46
|
-
"@flighthq/image": "0.5.1-next.
|
|
47
|
-
"@flighthq/log": "0.5.1-next.
|
|
48
|
-
"@flighthq/node": "0.5.1-next.
|
|
49
|
-
"@flighthq/path": "0.5.1-next.
|
|
50
|
-
"@flighthq/registry": "0.5.1-next.
|
|
51
|
-
"@flighthq/render": "0.5.1-next.
|
|
52
|
-
"@flighthq/render-gl": "0.5.1-next.
|
|
53
|
-
"@flighthq/shape": "0.5.1-next.
|
|
54
|
-
"@flighthq/text": "0.5.1-next.
|
|
55
|
-
"@flighthq/textinput": "0.5.1-next.
|
|
56
|
-
"@flighthq/textlayout": "0.5.1-next.
|
|
57
|
-
"@flighthq/texture": "0.5.1-next.
|
|
58
|
-
"@flighthq/types": "0.5.1-next.
|
|
59
|
-
"@flighthq/velocity": "0.5.1-next.
|
|
41
|
+
"@flighthq/color": "0.5.1-next.1201.9b49dee",
|
|
42
|
+
"@flighthq/entity": "0.5.1-next.1201.9b49dee",
|
|
43
|
+
"@flighthq/scene2d": "0.5.1-next.1201.9b49dee",
|
|
44
|
+
"@flighthq/scene2d-canvas": "0.5.1-next.1201.9b49dee",
|
|
45
|
+
"@flighthq/geometry": "0.5.1-next.1201.9b49dee",
|
|
46
|
+
"@flighthq/image": "0.5.1-next.1201.9b49dee",
|
|
47
|
+
"@flighthq/log": "0.5.1-next.1201.9b49dee",
|
|
48
|
+
"@flighthq/node": "0.5.1-next.1201.9b49dee",
|
|
49
|
+
"@flighthq/path": "0.5.1-next.1201.9b49dee",
|
|
50
|
+
"@flighthq/registry": "0.5.1-next.1201.9b49dee",
|
|
51
|
+
"@flighthq/render": "0.5.1-next.1201.9b49dee",
|
|
52
|
+
"@flighthq/render-gl": "0.5.1-next.1201.9b49dee",
|
|
53
|
+
"@flighthq/shape": "0.5.1-next.1201.9b49dee",
|
|
54
|
+
"@flighthq/text": "0.5.1-next.1201.9b49dee",
|
|
55
|
+
"@flighthq/textinput": "0.5.1-next.1201.9b49dee",
|
|
56
|
+
"@flighthq/textlayout": "0.5.1-next.1201.9b49dee",
|
|
57
|
+
"@flighthq/texture": "0.5.1-next.1201.9b49dee",
|
|
58
|
+
"@flighthq/types": "0.5.1-next.1201.9b49dee",
|
|
59
|
+
"@flighthq/velocity": "0.5.1-next.1201.9b49dee"
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
62
|
"@flighthq/bitmap": "*",
|
package/src/glBitmapText.test.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { createBitmapText, getBitmapTextPages, updateBitmapText } from '@flighthq/bitmaptext/contract';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
createImageResource,
|
|
4
|
+
registerTestImageDimensionResolver,
|
|
5
|
+
unregisterTestImageDimensionResolver,
|
|
6
|
+
} from '@flighthq/image/contract';
|
|
3
7
|
import { setNodeColorAdjustmentsTint } from '@flighthq/node/contract';
|
|
4
8
|
import { registerGlImageTextureResolver } from '@flighthq/render-gl/contract';
|
|
5
9
|
import type { BitmapText, GlyphEntry, GlyphSource, RenderProxy2D } from '@flighthq/types/contract';
|
|
@@ -11,6 +15,16 @@ import { flushGlQuadBatchWriter } from './glQuadBatchWriter';
|
|
|
11
15
|
import { registerGlStandardMaterial } from './glStandardMaterial';
|
|
12
16
|
import { createGlState } from './glTestHelper';
|
|
13
17
|
|
|
18
|
+
// A test that wraps a host handle supplies the host: the resource measures through the registered
|
|
19
|
+
// resolver, and clearing after each test keeps this file from covering for another's missing one.
|
|
20
|
+
beforeEach(() => {
|
|
21
|
+
registerTestImageDimensionResolver();
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
afterEach(() => {
|
|
25
|
+
unregisterTestImageDimensionResolver();
|
|
26
|
+
});
|
|
27
|
+
|
|
14
28
|
// A single-page stub glyph source whose page-0 image carries a drawable host source.
|
|
15
29
|
function createTestGlyphSource(): GlyphSource {
|
|
16
30
|
const entries = new Map<number, GlyphEntry>([
|
package/src/glCache.test.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { createMatrix } from '@flighthq/geometry/contract';
|
|
|
3
3
|
import * as renderGl from '@flighthq/render-gl/contract';
|
|
4
4
|
import { createRenderCache, RenderCacheKind, useRenderCache } from '@flighthq/render/contract';
|
|
5
5
|
import { createDisplayObject } from '@flighthq/scene2d/contract';
|
|
6
|
-
import type { GlRenderState,
|
|
6
|
+
import type { GlRenderState, GlTextureRenderTarget } from '@flighthq/types/contract';
|
|
7
7
|
|
|
8
8
|
import {
|
|
9
9
|
createGlCacheState,
|
|
@@ -19,16 +19,21 @@ import * as glQuadBatchWriter from './glQuadBatchWriter';
|
|
|
19
19
|
|
|
20
20
|
// The GL render-target lifecycle (@flighthq/render-gl) and the two local collaborators
|
|
21
21
|
// ./glQuadBatchWriter and ./glNode2D are stubbed so cache orchestration can be unit-tested without a real
|
|
22
|
-
// GL pipeline:
|
|
22
|
+
// GL pipeline: createGlTextureRenderTarget returns a plain descriptor, and the composite, batch-flush and
|
|
23
23
|
// subtree-render calls become spies for the call and ordering assertions below.
|
|
24
24
|
beforeEach(() => {
|
|
25
25
|
vi.spyOn(glQuadBatchWriter, 'flushGlQuadBatchWriter').mockImplementation((() => {}) as never);
|
|
26
26
|
vi.spyOn(renderGl, 'beginGlRenderPass').mockImplementation((() => {}) as never);
|
|
27
|
+
vi.spyOn(renderGl, 'getGlCurrentRenderPass').mockImplementation(((state: GlRenderState) => ({
|
|
28
|
+
gl: state.gl,
|
|
29
|
+
state,
|
|
30
|
+
target: null,
|
|
31
|
+
})) as never);
|
|
27
32
|
vi.spyOn(renderGl, 'setGlRenderTransform2D').mockImplementation((() => {}) as never);
|
|
28
|
-
vi.spyOn(renderGl, '
|
|
33
|
+
vi.spyOn(renderGl, 'createGlTextureRenderTarget').mockImplementation(((
|
|
29
34
|
_state: unknown,
|
|
30
35
|
descriptor: { width: number; height: number },
|
|
31
|
-
):
|
|
36
|
+
): GlTextureRenderTarget => {
|
|
32
37
|
const texture = {} as WebGLTexture;
|
|
33
38
|
const out = allocateEntity<any>();
|
|
34
39
|
out.requestedAxes = {
|
|
@@ -53,19 +58,17 @@ beforeEach(() => {
|
|
|
53
58
|
out.colorFormats = ['rgba8'];
|
|
54
59
|
out.depth = 'none';
|
|
55
60
|
out.colorSpace = 'srgb';
|
|
56
|
-
out.clearColors = [];
|
|
57
|
-
out.clearDepth = 1;
|
|
58
61
|
out.sampleCount = 1;
|
|
59
62
|
out.width = descriptor.width;
|
|
60
63
|
out.height = descriptor.height;
|
|
61
64
|
return finishEntity(out);
|
|
62
65
|
}) as never);
|
|
63
|
-
vi.spyOn(renderGl, '
|
|
64
|
-
vi.spyOn(renderGl, '
|
|
66
|
+
vi.spyOn(renderGl, 'destroyGlTextureRenderTarget').mockImplementation((() => {}) as never);
|
|
67
|
+
vi.spyOn(renderGl, 'drawGlTextureRenderTargetResult').mockImplementation((() => {}) as never);
|
|
65
68
|
vi.spyOn(renderGl, 'endGlRenderPass').mockImplementation((() => {}) as never);
|
|
66
|
-
vi.spyOn(renderGl, '
|
|
69
|
+
vi.spyOn(renderGl, 'resizeGlTextureRenderTarget').mockImplementation(((
|
|
67
70
|
_state: unknown,
|
|
68
|
-
target:
|
|
71
|
+
target: GlTextureRenderTarget,
|
|
69
72
|
width: number,
|
|
70
73
|
height: number,
|
|
71
74
|
) => {
|
|
@@ -81,7 +84,7 @@ const testPipeline = renderGl.createGlPipeline(renderGl.createEmptyGlRegistries(
|
|
|
81
84
|
|
|
82
85
|
function fakeScreen(options = {}): GlRenderState {
|
|
83
86
|
const gl = document.createElement('canvas').getContext('webgl2')!;
|
|
84
|
-
return renderGl.createGlRenderState(
|
|
87
|
+
return renderGl.createGlRenderState(gl, testPipeline, options);
|
|
85
88
|
}
|
|
86
89
|
|
|
87
90
|
function makeCacheNode(source: unknown): any {
|
|
@@ -94,7 +97,6 @@ describe('createGlCacheState', () => {
|
|
|
94
97
|
enableGlRenderCache(screen);
|
|
95
98
|
const cacheState = createGlCacheState(
|
|
96
99
|
screen,
|
|
97
|
-
screen.contextState,
|
|
98
100
|
renderGl.createGlPipeline(renderGl.getGlRenderStateRuntime(screen).registries),
|
|
99
101
|
);
|
|
100
102
|
expect(renderGl.getGlRenderStateRuntime(cacheState).registries.renderers.entries.get(RenderCacheKind)).toEqual({
|
|
@@ -112,7 +114,7 @@ describe('createGlCacheState', () => {
|
|
|
112
114
|
const teardown = vi.fn();
|
|
113
115
|
renderGl.getGlRenderStateRuntime(screen).context.teardowns.push(teardown);
|
|
114
116
|
|
|
115
|
-
createGlCacheState(screen, screen.
|
|
117
|
+
createGlCacheState(screen, screen.pipeline);
|
|
116
118
|
renderGl.destroyGlRenderState(screen);
|
|
117
119
|
|
|
118
120
|
expect(teardown).toHaveBeenCalledOnce();
|
|
@@ -123,7 +125,7 @@ describe('defaultGlRenderCacheRenderer', () => {
|
|
|
123
125
|
it('does nothing when no cache is attached to the source', () => {
|
|
124
126
|
const state = fakeScreen();
|
|
125
127
|
defaultGlRenderCacheRenderer.submit(state, makeCacheNode(createDisplayObject()));
|
|
126
|
-
expect(renderGl.
|
|
128
|
+
expect(renderGl.drawGlTextureRenderTargetResult).not.toHaveBeenCalled();
|
|
127
129
|
});
|
|
128
130
|
|
|
129
131
|
it('composites the cache target attached to the source node', () => {
|
|
@@ -133,7 +135,12 @@ describe('defaultGlRenderCacheRenderer', () => {
|
|
|
133
135
|
useRenderCache(state, obj, cache);
|
|
134
136
|
const target = ensureGlRenderCacheTarget(state, cache, 16, 16);
|
|
135
137
|
defaultGlRenderCacheRenderer.submit(state, makeCacheNode(obj));
|
|
136
|
-
expect(renderGl.
|
|
138
|
+
expect(renderGl.drawGlTextureRenderTargetResult).toHaveBeenCalledWith(
|
|
139
|
+
expect.objectContaining({ state }),
|
|
140
|
+
expect.anything(),
|
|
141
|
+
target,
|
|
142
|
+
expect.anything(),
|
|
143
|
+
);
|
|
137
144
|
});
|
|
138
145
|
|
|
139
146
|
it('flushes pending batched geometry before the immediate composite', () => {
|
|
@@ -147,7 +154,7 @@ describe('defaultGlRenderCacheRenderer', () => {
|
|
|
147
154
|
// the walk must be drained first, or it replays after the cache result (a doubled image).
|
|
148
155
|
expect(glQuadBatchWriter.flushGlQuadBatchWriter).toHaveBeenCalledWith(state);
|
|
149
156
|
expect((glQuadBatchWriter.flushGlQuadBatchWriter as any).mock.invocationCallOrder[0]).toBeLessThan(
|
|
150
|
-
(renderGl.
|
|
157
|
+
(renderGl.drawGlTextureRenderTargetResult as any).mock.invocationCallOrder[0],
|
|
151
158
|
);
|
|
152
159
|
});
|
|
153
160
|
});
|
|
@@ -204,7 +211,7 @@ describe('getGlRenderCacheTarget', () => {
|
|
|
204
211
|
describe('refreshGlRenderCache', () => {
|
|
205
212
|
it('bakes on the first call and allocates the target on the screen state', () => {
|
|
206
213
|
const screen = fakeScreen();
|
|
207
|
-
const cacheState = createGlCacheState(screen, screen.
|
|
214
|
+
const cacheState = createGlCacheState(screen, screen.pipeline);
|
|
208
215
|
const cache = createRenderCache();
|
|
209
216
|
const obj = createDisplayObject();
|
|
210
217
|
const rebaked = refreshGlRenderCache(screen, cacheState, cache, obj, { padding: 5 });
|
|
@@ -217,7 +224,7 @@ describe('refreshGlRenderCache', () => {
|
|
|
217
224
|
|
|
218
225
|
it('skips the bake under requiresInvalidation when nothing changed', () => {
|
|
219
226
|
const screen = fakeScreen({ sceneGraphSyncPolicy: 'requiresInvalidation' });
|
|
220
|
-
const cacheState = createGlCacheState(screen, screen.
|
|
227
|
+
const cacheState = createGlCacheState(screen, screen.pipeline, {
|
|
221
228
|
sceneGraphSyncPolicy: 'requiresInvalidation',
|
|
222
229
|
});
|
|
223
230
|
const cache = createRenderCache();
|
|
@@ -233,7 +240,7 @@ describe('releaseGlRenderCache', () => {
|
|
|
233
240
|
const cache = createRenderCache();
|
|
234
241
|
const target = ensureGlRenderCacheTarget(state, cache, 8, 8);
|
|
235
242
|
releaseGlRenderCache(state, cache);
|
|
236
|
-
expect(renderGl.
|
|
243
|
+
expect(renderGl.destroyGlTextureRenderTarget).toHaveBeenCalledWith(target);
|
|
237
244
|
expect(getGlRenderCacheTarget(state, cache)).toBeNull();
|
|
238
245
|
});
|
|
239
246
|
|
|
@@ -241,10 +248,10 @@ describe('releaseGlRenderCache', () => {
|
|
|
241
248
|
const state = fakeScreen();
|
|
242
249
|
ensureGlRenderCacheTarget(state, createRenderCache(), 8, 8);
|
|
243
250
|
ensureGlRenderCacheTarget(state, createRenderCache(), 16, 16);
|
|
244
|
-
vi.mocked(renderGl.
|
|
251
|
+
vi.mocked(renderGl.destroyGlTextureRenderTarget).mockClear();
|
|
245
252
|
|
|
246
253
|
renderGl.destroyGlRenderState(state);
|
|
247
254
|
|
|
248
|
-
expect(renderGl.
|
|
255
|
+
expect(renderGl.destroyGlTextureRenderTarget).toHaveBeenCalledTimes(2);
|
|
249
256
|
});
|
|
250
257
|
});
|
|
@@ -2,7 +2,7 @@ import { createMatrix } from '@flighthq/geometry/contract';
|
|
|
2
2
|
import { createViewport } from '@flighthq/node/contract';
|
|
3
3
|
import {
|
|
4
4
|
beginGlRenderPass,
|
|
5
|
-
|
|
5
|
+
createGlTextureRenderTarget,
|
|
6
6
|
endGlRenderPass,
|
|
7
7
|
getGlRenderStateRuntime,
|
|
8
8
|
} from '@flighthq/render-gl/contract';
|
|
@@ -33,10 +33,10 @@ describe('pushGlClipContours', () => {
|
|
|
33
33
|
it('rejects a shared-context cache refresh into the contour target before it can clear coverage', () => {
|
|
34
34
|
const { state, gl } = createGlState();
|
|
35
35
|
const cache = createRenderCache();
|
|
36
|
-
const cacheState = createGlCacheState(state, state.
|
|
36
|
+
const cacheState = createGlCacheState(state, state.pipeline);
|
|
37
37
|
const source = createDisplayObject();
|
|
38
38
|
const target = ensureGlRenderCacheTarget(state, cache, 1, 1);
|
|
39
|
-
beginGlRenderPass(state, target
|
|
39
|
+
const pass = beginGlRenderPass(state, target);
|
|
40
40
|
pushGlClipContours(state, SQUARE, 'nonZero', createMatrix());
|
|
41
41
|
gl.depthMask(false);
|
|
42
42
|
const stencilClearCount = vi.mocked(gl.clear).mock.calls.length;
|
|
@@ -47,13 +47,13 @@ describe('pushGlClipContours', () => {
|
|
|
47
47
|
|
|
48
48
|
expect(gl.clear).toHaveBeenCalledTimes(stencilClearCount);
|
|
49
49
|
expect(getGlRenderStateRuntime(state).currentMaskDepth).toBe(1);
|
|
50
|
-
endGlRenderPass(
|
|
50
|
+
endGlRenderPass(pass);
|
|
51
51
|
});
|
|
52
52
|
|
|
53
53
|
it('restores the outer framebuffer after a shared-context cache refresh into another target', () => {
|
|
54
54
|
const { state, gl } = createGlState();
|
|
55
|
-
const cacheState = createGlCacheState(state, state.
|
|
56
|
-
const outer =
|
|
55
|
+
const cacheState = createGlCacheState(state, state.pipeline);
|
|
56
|
+
const outer = createGlTextureRenderTarget(state, {
|
|
57
57
|
depth: 'depth-stencil',
|
|
58
58
|
height: 64,
|
|
59
59
|
width: 64,
|
|
@@ -66,14 +66,14 @@ describe('pushGlClipContours', () => {
|
|
|
66
66
|
y: 5,
|
|
67
67
|
});
|
|
68
68
|
|
|
69
|
-
beginGlRenderPass(state, outer,
|
|
69
|
+
const pass = beginGlRenderPass(state, outer, undefined, viewport);
|
|
70
70
|
const outerScissor = getGlRenderStateRuntime(state).currentScissorRect;
|
|
71
71
|
refreshGlRenderCache(state, cacheState, createRenderCache(), createDisplayObject());
|
|
72
72
|
|
|
73
73
|
expect(vi.mocked(gl.bindFramebuffer).mock.calls.at(-1)?.[1]).toBe(outer.framebuffer);
|
|
74
74
|
expect(getGlRenderStateRuntime(state).currentFramebuffer).toBe(outer.framebuffer);
|
|
75
75
|
expect(getGlRenderStateRuntime(state).currentScissorRect).toEqual(outerScissor);
|
|
76
|
-
endGlRenderPass(
|
|
76
|
+
endGlRenderPass(pass);
|
|
77
77
|
});
|
|
78
78
|
|
|
79
79
|
it('enables the stencil test and clears the buffer when opening the first clip', () => {
|
package/src/glNode2D.test.ts
CHANGED
|
@@ -1,14 +1,8 @@
|
|
|
1
1
|
import { addNodeChild } from '@flighthq/node/contract';
|
|
2
|
-
import {
|
|
3
|
-
createEmptyGlRegistries,
|
|
4
|
-
createGlContextFromCanvasElement,
|
|
5
|
-
createGlContextState,
|
|
6
|
-
createGlPipeline,
|
|
7
|
-
createGlRenderState,
|
|
8
|
-
} from '@flighthq/render-gl/contract';
|
|
2
|
+
import { createEmptyGlRegistries, createGlPipeline, createGlRenderState } from '@flighthq/render-gl/contract';
|
|
9
3
|
import { getOrCreateRenderProxy2D, prepareScene2DRender, registerRenderer } from '@flighthq/render/contract';
|
|
10
4
|
import { createDisplayObject } from '@flighthq/scene2d/contract';
|
|
11
|
-
import type { GlRenderState } from '@flighthq/types/contract';
|
|
5
|
+
import type { GlRenderPass, GlRenderState, GlRenderTarget } from '@flighthq/types/contract';
|
|
12
6
|
import { DisplayObjectKind } from '@flighthq/types/contract';
|
|
13
7
|
|
|
14
8
|
import { defaultGlScene2DRenderer, drawGlScene2D, renderGlScene2D } from './glNode2D';
|
|
@@ -17,8 +11,11 @@ function makeState(): GlRenderState {
|
|
|
17
11
|
const canvas = document.createElement('canvas');
|
|
18
12
|
canvas.width = 200;
|
|
19
13
|
canvas.height = 100;
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
return createGlRenderState(canvas.getContext('webgl2')!, createGlPipeline(createEmptyGlRegistries()));
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function mockPass(state: GlRenderState): GlRenderPass {
|
|
18
|
+
return { gl: state.gl, state, target: {} as GlRenderTarget } as GlRenderPass;
|
|
22
19
|
}
|
|
23
20
|
|
|
24
21
|
function makeRenderer() {
|
|
@@ -46,18 +43,12 @@ describe('renderGlScene2D', () => {
|
|
|
46
43
|
it('establishes its own cull, depth, and blend state rather than inheriting it from a previous 3D pass', () => {
|
|
47
44
|
const state = makeState();
|
|
48
45
|
const gl = state.gl;
|
|
49
|
-
// Real WebGL2 confirms the consequence this guards: Flight's 2D quad is wound (x0,y0)(x1,y0)(x1,y1)
|
|
50
|
-
// in a y-down space that the projection flips, so it is a BACK face under the CCW default. Drawing
|
|
51
|
-
// it with CULL_FACE left enabled by the 3D mesh path erases 2D content entirely — 2304 lit pixels
|
|
52
|
-
// become 0. Depth testing is the same class: a stale 3D depth buffer rejects 2D fragments.
|
|
53
|
-
// Seeded to the exact hostile state a prior 3D pass leaves: cull and depth on, blend off. Starting
|
|
54
|
-
// from the API default would make "sets what it needs" indistinguishable from "changed nothing".
|
|
55
46
|
const enabled = new Set<number>([gl.CULL_FACE, gl.DEPTH_TEST]);
|
|
56
47
|
(gl.isEnabled as ReturnType<typeof vi.fn>).mockImplementation((cap: number) => enabled.has(cap));
|
|
57
48
|
(gl.enable as ReturnType<typeof vi.fn>).mockImplementation((cap: number) => enabled.add(cap));
|
|
58
49
|
(gl.disable as ReturnType<typeof vi.fn>).mockImplementation((cap: number) => enabled.delete(cap));
|
|
59
50
|
|
|
60
|
-
renderGlScene2D(state, createDisplayObject());
|
|
51
|
+
renderGlScene2D(mockPass(state), createDisplayObject());
|
|
61
52
|
|
|
62
53
|
expect(enabled.has(gl.CULL_FACE)).toBe(false);
|
|
63
54
|
expect(enabled.has(gl.DEPTH_TEST)).toBe(false);
|
|
@@ -68,7 +59,7 @@ describe('renderGlScene2D', () => {
|
|
|
68
59
|
const state = makeState();
|
|
69
60
|
const obj = createDisplayObject();
|
|
70
61
|
prepareScene2DRender(state, obj);
|
|
71
|
-
expect(() => renderGlScene2D(state, obj)).not.toThrow();
|
|
62
|
+
expect(() => renderGlScene2D(mockPass(state), obj)).not.toThrow();
|
|
72
63
|
});
|
|
73
64
|
|
|
74
65
|
it('calls renderer.submit for a visible object with a renderer', () => {
|
|
@@ -79,7 +70,7 @@ describe('renderGlScene2D', () => {
|
|
|
79
70
|
const data = getOrCreateRenderProxy2D(state, obj);
|
|
80
71
|
prepareScene2DRender(state, obj);
|
|
81
72
|
|
|
82
|
-
renderGlScene2D(state, obj);
|
|
73
|
+
renderGlScene2D(mockPass(state), obj);
|
|
83
74
|
|
|
84
75
|
expect(renderer.submit).toHaveBeenCalledWith(state, data);
|
|
85
76
|
});
|
|
@@ -92,7 +83,7 @@ describe('renderGlScene2D', () => {
|
|
|
92
83
|
obj.alpha = 0;
|
|
93
84
|
prepareScene2DRender(state, obj);
|
|
94
85
|
|
|
95
|
-
renderGlScene2D(state, obj);
|
|
86
|
+
renderGlScene2D(mockPass(state), obj);
|
|
96
87
|
|
|
97
88
|
expect(renderer.submit).not.toHaveBeenCalled();
|
|
98
89
|
});
|
|
@@ -106,7 +97,7 @@ describe('renderGlScene2D', () => {
|
|
|
106
97
|
addNodeChild(parent, child);
|
|
107
98
|
prepareScene2DRender(state, parent);
|
|
108
99
|
|
|
109
|
-
renderGlScene2D(state, parent);
|
|
100
|
+
renderGlScene2D(mockPass(state), parent);
|
|
110
101
|
|
|
111
102
|
expect(renderer.submit).toHaveBeenCalledTimes(2);
|
|
112
103
|
});
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
createImageResource,
|
|
3
|
+
registerTestImageDimensionResolver,
|
|
4
|
+
unregisterTestImageDimensionResolver,
|
|
5
|
+
} from '@flighthq/image/contract';
|
|
2
6
|
import {
|
|
3
7
|
getGlRenderStateRuntime,
|
|
4
8
|
registerGlCompressedImageTextureResolver,
|
|
@@ -11,6 +15,16 @@ import { CompressedImageTextureSourceKind, RegistryEntryState, TextureAtlasRotat
|
|
|
11
15
|
import { defaultGlParticleEmitter2DRenderer, drawGlParticleEmitter2D } from './glParticleEmitter2D';
|
|
12
16
|
import { createGlState } from './glTestHelper';
|
|
13
17
|
|
|
18
|
+
// A test that wraps a host handle supplies the host: the resource measures through the registered
|
|
19
|
+
// resolver, and clearing after each test keeps this file from covering for another's missing one.
|
|
20
|
+
beforeEach(() => {
|
|
21
|
+
registerTestImageDimensionResolver();
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
afterEach(() => {
|
|
25
|
+
unregisterTestImageDimensionResolver();
|
|
26
|
+
});
|
|
27
|
+
|
|
14
28
|
function makeAtlas(rotation = TextureAtlasRotation.None) {
|
|
15
29
|
const img = document.createElement('img');
|
|
16
30
|
const image = createImageResource(img);
|
package/src/glQuadBatch.test.ts
CHANGED
|
@@ -179,6 +179,20 @@ describe('defaultGlQuadBatchRenderer.submit', () => {
|
|
|
179
179
|
expect(gl.drawElementsInstanced).toHaveBeenCalledWith(expect.anything(), 6, expect.anything(), 0, 1);
|
|
180
180
|
});
|
|
181
181
|
});
|
|
182
|
-
import {
|
|
182
|
+
import {
|
|
183
|
+
createImageResource,
|
|
184
|
+
registerTestImageDimensionResolver,
|
|
185
|
+
unregisterTestImageDimensionResolver,
|
|
186
|
+
} from '@flighthq/image/contract';
|
|
183
187
|
import { registerGlImageTextureResolver } from '@flighthq/render-gl/contract';
|
|
184
188
|
import { createTexture } from '@flighthq/texture/contract';
|
|
189
|
+
|
|
190
|
+
// A test that wraps a host handle supplies the host: the resource measures through the registered
|
|
191
|
+
// resolver, and clearing after each test keeps this file from covering for another's missing one.
|
|
192
|
+
beforeEach(() => {
|
|
193
|
+
registerTestImageDimensionResolver();
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
afterEach(() => {
|
|
197
|
+
unregisterTestImageDimensionResolver();
|
|
198
|
+
});
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
createImageResource,
|
|
3
|
+
registerTestImageDimensionResolver,
|
|
4
|
+
unregisterTestImageDimensionResolver,
|
|
5
|
+
} from '@flighthq/image/contract';
|
|
2
6
|
import * as flightNode from '@flighthq/node/contract';
|
|
3
7
|
import { getGlRenderStateRuntime } from '@flighthq/render-gl/contract';
|
|
4
8
|
import { enableRenderRegistryGuards, explainRenderRegistryMisses } from '@flighthq/render/contract';
|
|
@@ -27,6 +31,16 @@ import { registerGlShapeRasterizer } from './glShapeRasterizer';
|
|
|
27
31
|
import { registerGlStandardMaterial } from './glStandardMaterial';
|
|
28
32
|
import { createGlState } from './glTestHelper';
|
|
29
33
|
|
|
34
|
+
// A test that wraps a host handle supplies the host: the resource measures through the registered
|
|
35
|
+
// resolver, and clearing after each test keeps this file from covering for another's missing one.
|
|
36
|
+
beforeEach(() => {
|
|
37
|
+
registerTestImageDimensionResolver();
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
afterEach(() => {
|
|
41
|
+
unregisterTestImageDimensionResolver();
|
|
42
|
+
});
|
|
43
|
+
|
|
30
44
|
function createTestRaster2DSurface(width: number, height: number): Raster2DSurface {
|
|
31
45
|
const canvas = document.createElement('canvas');
|
|
32
46
|
canvas.width = width;
|
package/src/glRichText.test.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
createImageResource,
|
|
3
|
+
registerTestImageDimensionResolver,
|
|
4
|
+
unregisterTestImageDimensionResolver,
|
|
5
|
+
} from '@flighthq/image/contract';
|
|
2
6
|
import { getGlRenderStateRuntime } from '@flighthq/render-gl/contract';
|
|
3
7
|
import { createRichText } from '@flighthq/text/contract';
|
|
4
8
|
import { enableTextInput } from '@flighthq/textinput/contract';
|
|
@@ -17,6 +21,16 @@ import {
|
|
|
17
21
|
} from './glRichText';
|
|
18
22
|
import { createGlState } from './glTestHelper';
|
|
19
23
|
|
|
24
|
+
// A test that wraps a host handle supplies the host: the resource measures through the registered
|
|
25
|
+
// resolver, and clearing after each test keeps this file from covering for another's missing one.
|
|
26
|
+
beforeEach(() => {
|
|
27
|
+
registerTestImageDimensionResolver();
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
afterEach(() => {
|
|
31
|
+
unregisterTestImageDimensionResolver();
|
|
32
|
+
});
|
|
33
|
+
|
|
20
34
|
function makeRichTextNode(rendererData: unknown = { surface: createTestRaster2DSurface(1, 1) }): RenderProxy2D {
|
|
21
35
|
const richText = createRichText();
|
|
22
36
|
return {
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
createImageResource,
|
|
3
|
+
invalidateImageResource,
|
|
4
|
+
registerTestImageDimensionResolver,
|
|
5
|
+
unregisterTestImageDimensionResolver,
|
|
6
|
+
} from '@flighthq/image/contract';
|
|
2
7
|
import { bindGlImageResourceTexture, getGlRenderStateRuntime } from '@flighthq/render-gl/contract';
|
|
3
8
|
import { getOrCreateRenderProxy2D } from '@flighthq/render/contract';
|
|
4
9
|
import { appendShapeBeginFill, appendShapeRectangle, createScale9Shape } from '@flighthq/shape/contract';
|
|
@@ -17,6 +22,16 @@ import {
|
|
|
17
22
|
} from './glScale9Shape';
|
|
18
23
|
import { createGlState } from './glTestHelper';
|
|
19
24
|
|
|
25
|
+
// A test that wraps a host handle supplies the host: the resource measures through the registered
|
|
26
|
+
// resolver, and clearing after each test keeps this file from covering for another's missing one.
|
|
27
|
+
beforeEach(() => {
|
|
28
|
+
registerTestImageDimensionResolver();
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
afterEach(() => {
|
|
32
|
+
unregisterTestImageDimensionResolver();
|
|
33
|
+
});
|
|
34
|
+
|
|
20
35
|
const grid = { height: 80, width: 80, x: 10, y: 10 };
|
|
21
36
|
const destroySurface = vi.fn();
|
|
22
37
|
|
package/src/glShape.test.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
createImageResource,
|
|
3
|
+
registerTestImageDimensionResolver,
|
|
4
|
+
unregisterTestImageDimensionResolver,
|
|
5
|
+
} from '@flighthq/image/contract';
|
|
2
6
|
import * as flightNode from '@flighthq/node/contract';
|
|
3
7
|
import { getGlRenderStateRuntime } from '@flighthq/render-gl/contract';
|
|
4
8
|
import {
|
|
@@ -40,6 +44,16 @@ import { registerGlShapeRasterizer } from './glShapeRasterizer';
|
|
|
40
44
|
import { registerGlStandardMaterial } from './glStandardMaterial';
|
|
41
45
|
import { createGlState } from './glTestHelper';
|
|
42
46
|
|
|
47
|
+
// A test that wraps a host handle supplies the host: the resource measures through the registered
|
|
48
|
+
// resolver, and clearing after each test keeps this file from covering for another's missing one.
|
|
49
|
+
beforeEach(() => {
|
|
50
|
+
registerTestImageDimensionResolver();
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
afterEach(() => {
|
|
54
|
+
unregisterTestImageDimensionResolver();
|
|
55
|
+
});
|
|
56
|
+
|
|
43
57
|
const noopRasterizer = (): void => {};
|
|
44
58
|
|
|
45
59
|
function createTestRaster2DSurface(width: number, height: number): Raster2DSurface {
|
package/src/glShapeData.test.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { allocateEntity, finishEntity } from '@flighthq/entity/contract';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
createImageResource,
|
|
4
|
+
registerTestImageDimensionResolver,
|
|
5
|
+
unregisterTestImageDimensionResolver,
|
|
6
|
+
} from '@flighthq/image/contract';
|
|
3
7
|
import { getGlRenderStateRuntime } from '@flighthq/render-gl/contract';
|
|
4
8
|
import type { GlShapeRendererData, Raster2DSurface, Raster2DSurfaceProvider } from '@flighthq/types/contract';
|
|
5
9
|
import { EntityRuntimeKey } from '@flighthq/types/contract';
|
|
@@ -14,6 +18,16 @@ import {
|
|
|
14
18
|
} from './glShapeData';
|
|
15
19
|
import { createGlState } from './glTestHelper';
|
|
16
20
|
|
|
21
|
+
// A test that wraps a host handle supplies the host: the resource measures through the registered
|
|
22
|
+
// resolver, and clearing after each test keeps this file from covering for another's missing one.
|
|
23
|
+
beforeEach(() => {
|
|
24
|
+
registerTestImageDimensionResolver();
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
afterEach(() => {
|
|
28
|
+
unregisterTestImageDimensionResolver();
|
|
29
|
+
});
|
|
30
|
+
|
|
17
31
|
const destroySurface = vi.fn();
|
|
18
32
|
|
|
19
33
|
function emptyData(): GlShapeRendererData {
|
package/src/glSprite.test.ts
CHANGED
|
@@ -86,7 +86,7 @@ describe('drawGlSprite', () => {
|
|
|
86
86
|
registerGlStandardMaterial(state);
|
|
87
87
|
const renderTexture = createRenderTexture({ height: 480, width: 720 });
|
|
88
88
|
setTextureUvFromPixelRect(renderTexture, 140, 160, 100, 80);
|
|
89
|
-
renderIntoGlRenderTexture(state, renderTexture, () => {});
|
|
89
|
+
renderIntoGlRenderTexture(state, renderTexture, () => {}, { color: [0, 0, 0, 0], depth: 1.0, stencil: 0 });
|
|
90
90
|
const sprite = { data: { texture: renderTexture } } as Sprite;
|
|
91
91
|
|
|
92
92
|
drawGlSprite(state, makeRenderProxy(sprite));
|
package/src/glTextInput.test.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
createImageResource,
|
|
3
|
+
registerTestImageDimensionResolver,
|
|
4
|
+
unregisterTestImageDimensionResolver,
|
|
5
|
+
} from '@flighthq/image/contract';
|
|
2
6
|
import { createRichText } from '@flighthq/text/contract';
|
|
3
7
|
import { enableTextInput, setTextInputSelection } from '@flighthq/textinput/contract';
|
|
4
8
|
import type { Raster2DSurface, RenderProxy2D, RichText } from '@flighthq/types/contract';
|
|
@@ -8,6 +12,16 @@ import { createGlRichTextData, drawGlRichText } from './glRichText';
|
|
|
8
12
|
import { createGlState } from './glTestHelper';
|
|
9
13
|
import { drawGlTextInputOverlay, enableGlTextInput } from './glTextInput';
|
|
10
14
|
|
|
15
|
+
// A test that wraps a host handle supplies the host: the resource measures through the registered
|
|
16
|
+
// resolver, and clearing after each test keeps this file from covering for another's missing one.
|
|
17
|
+
beforeEach(() => {
|
|
18
|
+
registerTestImageDimensionResolver();
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
afterEach(() => {
|
|
22
|
+
unregisterTestImageDimensionResolver();
|
|
23
|
+
});
|
|
24
|
+
|
|
11
25
|
function makeFocusedInputProxy(state: Parameters<typeof createGlRichTextData>[0]): RenderProxy2D {
|
|
12
26
|
const node = createRichText({ data: { height: 40, text: 'hello', width: 100 } });
|
|
13
27
|
enableTextInput(node).focused = true;
|
package/src/glTextLabel.test.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
createImageResource,
|
|
3
|
+
registerTestImageDimensionResolver,
|
|
4
|
+
unregisterTestImageDimensionResolver,
|
|
5
|
+
} from '@flighthq/image/contract';
|
|
2
6
|
import { getGlRenderStateRuntime } from '@flighthq/render-gl/contract';
|
|
3
7
|
import { createTextLabel, setTextLabelString } from '@flighthq/text/contract';
|
|
4
8
|
import * as textlayout from '@flighthq/textlayout/contract';
|
|
@@ -10,6 +14,16 @@ import { registerGlStandardMaterial } from './glStandardMaterial';
|
|
|
10
14
|
import { createGlState } from './glTestHelper';
|
|
11
15
|
import { defaultGlTextLabelRenderer, drawGlTextLabel, initializeGlTextLabelData } from './glTextLabel';
|
|
12
16
|
|
|
17
|
+
// A test that wraps a host handle supplies the host: the resource measures through the registered
|
|
18
|
+
// resolver, and clearing after each test keeps this file from covering for another's missing one.
|
|
19
|
+
beforeEach(() => {
|
|
20
|
+
registerTestImageDimensionResolver();
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
afterEach(() => {
|
|
24
|
+
unregisterTestImageDimensionResolver();
|
|
25
|
+
});
|
|
26
|
+
|
|
13
27
|
// @flighthq/textlayout.computeTextLayout is stubbed to emit one deterministic glyph group.
|
|
14
28
|
beforeEach(() => {
|
|
15
29
|
vi.spyOn(textlayout, 'computeTextLayout').mockImplementation(((
|
package/src/glTilemap.test.ts
CHANGED
|
@@ -119,6 +119,20 @@ describe('defaultGlTilemapRenderer.submit', () => {
|
|
|
119
119
|
expect(gl.drawElementsInstanced).toHaveBeenCalledWith(expect.anything(), 6, expect.anything(), 0, 2);
|
|
120
120
|
});
|
|
121
121
|
});
|
|
122
|
-
import {
|
|
122
|
+
import {
|
|
123
|
+
createImageResource,
|
|
124
|
+
registerTestImageDimensionResolver,
|
|
125
|
+
unregisterTestImageDimensionResolver,
|
|
126
|
+
} from '@flighthq/image/contract';
|
|
123
127
|
import { registerGlImageTextureResolver } from '@flighthq/render-gl/contract';
|
|
124
128
|
import { createTexture } from '@flighthq/texture/contract';
|
|
129
|
+
|
|
130
|
+
// A test that wraps a host handle supplies the host: the resource measures through the registered
|
|
131
|
+
// resolver, and clearing after each test keeps this file from covering for another's missing one.
|
|
132
|
+
beforeEach(() => {
|
|
133
|
+
registerTestImageDimensionResolver();
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
afterEach(() => {
|
|
137
|
+
unregisterTestImageDimensionResolver();
|
|
138
|
+
});
|
package/src/glVelocity.test.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createParticleEmitter2D, reserveParticleEmitter2D } from '@flighthq/particleemitter/contract';
|
|
2
2
|
import { createQuadBatch, getQuadBatchRuntime } from '@flighthq/quadbatch/contract';
|
|
3
|
-
import {
|
|
3
|
+
import { createGlPipeline, createGlRenderState, getGlRenderStateRuntime } from '@flighthq/render-gl/contract';
|
|
4
4
|
import { createDisplayObject } from '@flighthq/scene2d/contract';
|
|
5
5
|
import type { QuadBatchRuntime, TextureAtlas, TextureAtlasRegion } from '@flighthq/types/contract';
|
|
6
6
|
import { QuadBatchKind } from '@flighthq/types/contract';
|
|
@@ -138,10 +138,7 @@ describe('registerGlVelocityWriter', () => {
|
|
|
138
138
|
|
|
139
139
|
registerGlVelocityWriter(state, kind, defaultGlNode2DVelocityWriter);
|
|
140
140
|
const registered = getGlRenderStateRuntime(state).registries.velocityWriters;
|
|
141
|
-
const offscreen =
|
|
142
|
-
state.contextState,
|
|
143
|
-
createGlPipeline(getGlRenderStateRuntime(state).registries),
|
|
144
|
-
);
|
|
141
|
+
const offscreen = createGlRenderState(state.gl, createGlPipeline(getGlRenderStateRuntime(state).registries));
|
|
145
142
|
registerGlVelocityWriter(state, kind, replacement);
|
|
146
143
|
|
|
147
144
|
expect(registered).not.toBe(before);
|