@flighthq/render 0.2.1-next.738.07b221d → 0.2.1-next.841.373388f

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/explainScene2DRender.d.ts +3 -0
  2. package/dist/explainScene2DRender.d.ts.map +1 -0
  3. package/dist/{explainDisplayObjectRender.js → explainScene2DRender.js} +3 -3
  4. package/dist/explainScene2DRender.js.map +1 -0
  5. package/dist/index.d.ts +1 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +1 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/renderProxy.d.ts +2 -2
  10. package/dist/renderProxy.d.ts.map +1 -1
  11. package/dist/renderProxy.js +13 -13
  12. package/dist/renderProxy.js.map +1 -1
  13. package/dist/renderQueue.js +1 -1
  14. package/dist/renderQueue.js.map +1 -1
  15. package/dist/renderTarget.d.ts +7 -7
  16. package/dist/renderTarget.d.ts.map +1 -1
  17. package/dist/renderTarget.js +16 -16
  18. package/dist/renderTarget.js.map +1 -1
  19. package/dist/sceneRender.d.ts +3 -3
  20. package/dist/sceneRender.d.ts.map +1 -1
  21. package/dist/sceneRender.js +27 -23
  22. package/dist/sceneRender.js.map +1 -1
  23. package/package.json +12 -12
  24. package/src/enableColorAdjustmentGuards.test.ts +3 -5
  25. package/src/{explainDisplayObjectRender.test.ts → explainScene2DRender.test.ts} +21 -21
  26. package/src/renderAppearance.test.ts +1 -1
  27. package/src/renderCache.test.ts +1 -1
  28. package/src/renderColorTransform.test.ts +4 -10
  29. package/src/renderProxy.test.ts +45 -45
  30. package/src/renderProxyAdapter.test.ts +1 -1
  31. package/src/renderQueue.test.ts +7 -7
  32. package/src/renderTarget.test.ts +32 -32
  33. package/src/renderTransform2d.test.ts +1 -1
  34. package/src/renderViewport.test.ts +5 -5
  35. package/src/renderer.test.ts +2 -2
  36. package/src/sceneRender.test.ts +76 -62
  37. package/dist/explainDisplayObjectRender.d.ts +0 -3
  38. package/dist/explainDisplayObjectRender.d.ts.map +0 -1
  39. package/dist/explainDisplayObjectRender.js.map +0 -1
@@ -1,22 +1,22 @@
1
- import { createDisplayObject } from '@flighthq/displayobject';
2
1
  import { addNodeChild } from '@flighthq/node';
2
+ import { createDisplayObject } from '@flighthq/scene2d';
3
3
 
4
- import { explainDisplayObjectRender } from './explainDisplayObjectRender';
4
+ import { explainScene2DRender } from './explainScene2DRender';
5
5
  import { registerRenderer } from './renderer';
6
- import { getRenderProxy2D, prepareDisplayObjectRender } from './renderProxy';
6
+ import { getRenderProxy2D, prepareScene2DRender } from './renderProxy';
7
7
  import { createRenderState, getRenderStateRuntime } from './renderState';
8
8
 
9
9
  function makeRenderer() {
10
10
  return { createData: () => ({ tag: 'data' }), submit: vi.fn() } as any;
11
11
  }
12
12
 
13
- describe('explainDisplayObjectRender', () => {
13
+ describe('explainScene2DRender', () => {
14
14
  it('reports no-renderer for a node whose kind has no registered renderer', () => {
15
15
  const state = createRenderState();
16
16
  const source = createDisplayObject();
17
- prepareDisplayObjectRender(state, source);
17
+ prepareScene2DRender(state, source);
18
18
 
19
- const explanation = explainDisplayObjectRender(state, source);
19
+ const explanation = explainScene2DRender(state, source);
20
20
 
21
21
  expect(explanation.hasRenderer).toBe(false);
22
22
  expect(explanation.reason).toBe('no-renderer');
@@ -28,7 +28,7 @@ describe('explainDisplayObjectRender', () => {
28
28
  const source = createDisplayObject();
29
29
  registerRenderer(state, source.kind, makeRenderer());
30
30
 
31
- const explanation = explainDisplayObjectRender(state, source);
31
+ const explanation = explainScene2DRender(state, source);
32
32
 
33
33
  expect(explanation.hasRenderer).toBe(true);
34
34
  expect(explanation.prepared).toBe(false);
@@ -39,9 +39,9 @@ describe('explainDisplayObjectRender', () => {
39
39
  const state = createRenderState();
40
40
  const source = createDisplayObject();
41
41
  registerRenderer(state, source.kind, makeRenderer());
42
- prepareDisplayObjectRender(state, source);
42
+ prepareScene2DRender(state, source);
43
43
 
44
- const explanation = explainDisplayObjectRender(state, source);
44
+ const explanation = explainScene2DRender(state, source);
45
45
 
46
46
  expect(explanation.prepared).toBe(true);
47
47
  expect(explanation.visible).toBe(true);
@@ -54,9 +54,9 @@ describe('explainDisplayObjectRender', () => {
54
54
  const source = createDisplayObject();
55
55
  source.visible = false;
56
56
  registerRenderer(state, source.kind, makeRenderer());
57
- prepareDisplayObjectRender(state, source);
57
+ prepareScene2DRender(state, source);
58
58
 
59
- const explanation = explainDisplayObjectRender(state, source);
59
+ const explanation = explainScene2DRender(state, source);
60
60
 
61
61
  expect(explanation.visible).toBe(false);
62
62
  expect(explanation.reason).toBe('not-visible');
@@ -67,9 +67,9 @@ describe('explainDisplayObjectRender', () => {
67
67
  const source = createDisplayObject();
68
68
  source.alpha = 0;
69
69
  registerRenderer(state, source.kind, makeRenderer());
70
- prepareDisplayObjectRender(state, source);
70
+ prepareScene2DRender(state, source);
71
71
 
72
- const explanation = explainDisplayObjectRender(state, source);
72
+ const explanation = explainScene2DRender(state, source);
73
73
 
74
74
  expect(explanation.visible).toBe(true);
75
75
  expect(explanation.effectiveAlpha).toBe(0);
@@ -83,9 +83,9 @@ describe('explainDisplayObjectRender', () => {
83
83
  parent.visible = false;
84
84
  addNodeChild(parent, child);
85
85
  registerRenderer(state, child.kind, makeRenderer());
86
- prepareDisplayObjectRender(state, parent);
86
+ prepareScene2DRender(state, parent);
87
87
 
88
- const explanation = explainDisplayObjectRender(state, child);
88
+ const explanation = explainScene2DRender(state, child);
89
89
 
90
90
  expect(explanation.prepared).toBe(false);
91
91
  expect(explanation.reason).toBe('not-prepared');
@@ -99,9 +99,9 @@ describe('explainDisplayObjectRender', () => {
99
99
  child.alpha = 0.5;
100
100
  addNodeChild(parent, child);
101
101
  registerRenderer(state, child.kind, makeRenderer());
102
- prepareDisplayObjectRender(state, parent);
102
+ prepareScene2DRender(state, parent);
103
103
 
104
- const explanation = explainDisplayObjectRender(state, child);
104
+ const explanation = explainScene2DRender(state, child);
105
105
 
106
106
  expect(explanation.effectiveAlpha).toBeCloseTo(0.25);
107
107
  expect(explanation.reason).toBe('ok');
@@ -112,10 +112,10 @@ describe('explainDisplayObjectRender', () => {
112
112
  const source = createDisplayObject();
113
113
  registerRenderer(state, source.kind, makeRenderer());
114
114
 
115
- expect(() => explainDisplayObjectRender(state, source)).not.toThrow();
115
+ expect(() => explainScene2DRender(state, source)).not.toThrow();
116
116
  // Two calls agree and neither materialized a proxy — the query is a pure read.
117
- const first = explainDisplayObjectRender(state, source);
118
- const second = explainDisplayObjectRender(state, source);
117
+ const first = explainScene2DRender(state, source);
118
+ const second = explainScene2DRender(state, source);
119
119
  expect(second).toEqual(first);
120
120
  expect(getRenderProxy2D(state, source)).toBeUndefined();
121
121
  expect(getRenderStateRuntime(state).renderProxyMap.get(source)).toBeUndefined();
@@ -125,6 +125,6 @@ describe('explainDisplayObjectRender', () => {
125
125
  const state = createRenderState();
126
126
  const bare = { kind: 'DisplayObject' } as any;
127
127
 
128
- expect(() => explainDisplayObjectRender(state, bare)).not.toThrow();
128
+ expect(() => explainScene2DRender(state, bare)).not.toThrow();
129
129
  });
130
130
  });
@@ -1,5 +1,5 @@
1
- import { createDisplayObject } from '@flighthq/displayobject';
2
1
  import { invalidateNodeAppearance } from '@flighthq/node';
2
+ import { createDisplayObject } from '@flighthq/scene2d';
3
3
  import { BlendMode } from '@flighthq/types';
4
4
 
5
5
  import { updateRenderProxyAppearance } from './renderAppearance';
@@ -1,4 +1,4 @@
1
- import { createDisplayObject } from '@flighthq/displayobject';
1
+ import { createDisplayObject } from '@flighthq/scene2d';
2
2
  import { connectSignal } from '@flighthq/signals';
3
3
 
4
4
  import {
@@ -1,10 +1,6 @@
1
1
  import { createColorTransformAdjustment } from '@flighthq/adjustments';
2
- import {
3
- createDisplayObject,
4
- getDisplayObjectRuntime,
5
- setDisplayObjectColorAdjustments,
6
- } from '@flighthq/displayobject';
7
2
  import { createColorTransform } from '@flighthq/materials';
3
+ import { createDisplayObject, getNode2DRuntime, setNode2DColorAdjustments } from '@flighthq/scene2d';
8
4
  import type { Renderable } from '@flighthq/types';
9
5
 
10
6
  import { updateRenderProxyColorTransform } from './renderColorTransform';
@@ -15,7 +11,7 @@ describe('updateRenderProxyColorTransform', () => {
15
11
  it('resolves a node color-adjustment stack onto the render node as an affine ColorTransform', () => {
16
12
  const state = createRenderState();
17
13
  const node = createDisplayObject();
18
- setDisplayObjectColorAdjustments(node, [
14
+ setNode2DColorAdjustments(node, [
19
15
  createColorTransformAdjustment(createColorTransform({ redMultiplier: 0.5, greenMultiplier: 0 })),
20
16
  ]);
21
17
  const data = createRenderProxy(state, node as unknown as Renderable);
@@ -36,11 +32,9 @@ describe('updateRenderProxyColorTransform', () => {
36
32
  it('reads the cache the accessor fused once (the walk never re-fuses)', () => {
37
33
  const state = createRenderState();
38
34
  const node = createDisplayObject();
39
- setDisplayObjectColorAdjustments(node, [
40
- createColorTransformAdjustment(createColorTransform({ redMultiplier: 0.25 })),
41
- ]);
35
+ setNode2DColorAdjustments(node, [createColorTransformAdjustment(createColorTransform({ redMultiplier: 0.25 }))]);
42
36
  // The set-accessor fused the stack once; the runtime already holds the cached resolved value.
43
- const cached = getDisplayObjectRuntime(node).resolvedColorTransform;
37
+ const cached = getNode2DRuntime(node).resolvedColorTransform;
44
38
  expect(cached).not.toBeNull();
45
39
  const data = createRenderProxy(state, node as unknown as Renderable);
46
40
  updateRenderProxyColorTransform(state, data);
@@ -1,4 +1,3 @@
1
- import { createDisplayObject, setDisplayObjectClip } from '@flighthq/displayobject';
2
1
  import { createMatrix, createRectangle } from '@flighthq/geometry';
3
2
  import {
4
3
  addNodeChild,
@@ -8,6 +7,7 @@ import {
8
7
  invalidateNodeAppearance,
9
8
  invalidateNodeLocalTransform,
10
9
  } from '@flighthq/node';
10
+ import { createDisplayObject, setNode2DClip } from '@flighthq/scene2d';
11
11
  import { createSprite } from '@flighthq/sprite';
12
12
  import type { ClipRegion } from '@flighthq/types';
13
13
 
@@ -15,14 +15,14 @@ import { registerRenderer } from './renderer';
15
15
  import {
16
16
  createRenderProxy,
17
17
  createRenderProxy2D,
18
- disposeDisplayObjectRender,
18
+ disposeScene2DRender,
19
19
  disposeRenderProxy,
20
20
  getOrCreateRenderProxy2D,
21
21
  getRenderProxy2D,
22
22
  installRenderAdaptHook,
23
23
  isRenderProxyDirty,
24
24
  isRenderProxyVisible,
25
- prepareDisplayObjectRender,
25
+ prepareScene2DRender,
26
26
  updateNodeClip,
27
27
  updateRenderProxy2D,
28
28
  updateRenderProxyRenderer,
@@ -108,7 +108,28 @@ describe('createRenderProxy2D', () => {
108
108
  });
109
109
  });
110
110
 
111
- describe('disposeDisplayObjectRender', () => {
111
+ describe('disposeRenderProxy', () => {
112
+ it('cascades to the renderer destroyData and removes the proxy', () => {
113
+ const state = createRenderState();
114
+ const source = createSprite();
115
+ const destroyData = vi.fn();
116
+ registerRenderer(state, source.kind, { createData: () => ({ tag: 'data' }), destroyData, submit: vi.fn() } as any);
117
+ const node = getOrCreateRenderProxy2D(state, source);
118
+ const data = node.rendererData;
119
+
120
+ disposeRenderProxy(state, source);
121
+
122
+ expect(destroyData).toHaveBeenCalledWith(state, data);
123
+ expect(getRenderProxy2D(state, source)).toBeUndefined();
124
+ });
125
+
126
+ it('is a no-op when no proxy exists', () => {
127
+ const state = createRenderState();
128
+ expect(() => disposeRenderProxy(state, createSprite())).not.toThrow();
129
+ });
130
+ });
131
+
132
+ describe('disposeScene2DRender', () => {
112
133
  it('disposes the root and all descendants', () => {
113
134
  const state = createRenderState();
114
135
  const root = createDisplayObject();
@@ -116,9 +137,9 @@ describe('disposeDisplayObjectRender', () => {
116
137
  const grandchild = createDisplayObject();
117
138
  addNodeChild(root, child);
118
139
  addNodeChild(child, grandchild);
119
- prepareDisplayObjectRender(state, root);
140
+ prepareScene2DRender(state, root);
120
141
 
121
- disposeDisplayObjectRender(state, root);
142
+ disposeScene2DRender(state, root);
122
143
 
123
144
  expect(getRenderProxy2D(state, root)).toBeUndefined();
124
145
  expect(getRenderProxy2D(state, child)).toBeUndefined();
@@ -132,9 +153,9 @@ describe('disposeDisplayObjectRender', () => {
132
153
  const grandchild = createSprite();
133
154
  addNodeChild(root, child);
134
155
  addNodeChild(child, grandchild);
135
- prepareDisplayObjectRender(state, root);
156
+ prepareScene2DRender(state, root);
136
157
 
137
- disposeDisplayObjectRender(state, root);
158
+ disposeScene2DRender(state, root);
138
159
 
139
160
  expect(getRenderProxy2D(state, root)).toBeUndefined();
140
161
  expect(getRenderProxy2D(state, child)).toBeUndefined();
@@ -151,7 +172,7 @@ describe('disposeDisplayObjectRender', () => {
151
172
  getOrCreateRenderProxy2D(state, root);
152
173
  getOrCreateRenderProxy2D(state, child);
153
174
 
154
- disposeDisplayObjectRender(state, root);
175
+ disposeScene2DRender(state, root);
155
176
 
156
177
  expect(destroyData).toHaveBeenCalledTimes(2);
157
178
  });
@@ -162,37 +183,16 @@ describe('disposeDisplayObjectRender', () => {
162
183
  const child = createDisplayObject();
163
184
  addNodeChild(root, child);
164
185
  child.enabled = false;
165
- prepareDisplayObjectRender(state, root);
166
- // prepareDisplayObjectRender skips disabled nodes, but disposeDisplayObjectRender should not
186
+ prepareScene2DRender(state, root);
187
+ // prepareScene2DRender skips disabled nodes, but disposeScene2DRender should not
167
188
  getOrCreateRenderProxy2D(state, child);
168
189
 
169
- disposeDisplayObjectRender(state, root);
190
+ disposeScene2DRender(state, root);
170
191
 
171
192
  expect(getRenderProxy2D(state, child)).toBeUndefined();
172
193
  });
173
194
  });
174
195
 
175
- describe('disposeRenderProxy', () => {
176
- it('cascades to the renderer destroyData and removes the proxy', () => {
177
- const state = createRenderState();
178
- const source = createSprite();
179
- const destroyData = vi.fn();
180
- registerRenderer(state, source.kind, { createData: () => ({ tag: 'data' }), destroyData, submit: vi.fn() } as any);
181
- const node = getOrCreateRenderProxy2D(state, source);
182
- const data = node.rendererData;
183
-
184
- disposeRenderProxy(state, source);
185
-
186
- expect(destroyData).toHaveBeenCalledWith(state, data);
187
- expect(getRenderProxy2D(state, source)).toBeUndefined();
188
- });
189
-
190
- it('is a no-op when no proxy exists', () => {
191
- const state = createRenderState();
192
- expect(() => disposeRenderProxy(state, createSprite())).not.toThrow();
193
- });
194
- });
195
-
196
196
  describe('getOrCreateRenderProxy2D', () => {
197
197
  it('creates a node on first call', () => {
198
198
  const state = createRenderState();
@@ -336,14 +336,14 @@ describe('isRenderProxyVisible', () => {
336
336
  });
337
337
  });
338
338
 
339
- describe('prepareDisplayObjectRender', () => {
339
+ describe('prepareScene2DRender', () => {
340
340
  it('creates render nodes for all enabled nodes in the tree', () => {
341
341
  const state = createRenderState();
342
342
  const root = createDisplayObject();
343
343
  const child = createDisplayObject();
344
344
  addNodeChild(root, child);
345
345
 
346
- prepareDisplayObjectRender(state, root);
346
+ prepareScene2DRender(state, root);
347
347
 
348
348
  expect(getRenderStateRuntime(state).renderProxyMap.get(root)).toBeDefined();
349
349
  expect(getRenderStateRuntime(state).renderProxyMap.get(child)).toBeDefined();
@@ -355,7 +355,7 @@ describe('prepareDisplayObjectRender', () => {
355
355
  const child = createSprite();
356
356
  addNodeChild(root, child);
357
357
 
358
- prepareDisplayObjectRender(state, root);
358
+ prepareScene2DRender(state, root);
359
359
 
360
360
  expect(getRenderStateRuntime(state).renderProxyMap.get(root)).toBeDefined();
361
361
  expect(getRenderStateRuntime(state).renderProxyMap.get(child)).toBeDefined();
@@ -368,7 +368,7 @@ describe('prepareDisplayObjectRender', () => {
368
368
  addNodeChild(root, child);
369
369
  child.enabled = false;
370
370
 
371
- prepareDisplayObjectRender(state, root);
371
+ prepareScene2DRender(state, root);
372
372
 
373
373
  expect(getRenderStateRuntime(state).renderProxyMap.get(root)).toBeDefined();
374
374
  expect(getRenderStateRuntime(state).renderProxyMap.get(child)).toBeUndefined();
@@ -378,15 +378,15 @@ describe('prepareDisplayObjectRender', () => {
378
378
  const state = createRenderState();
379
379
  const root = createDisplayObject();
380
380
 
381
- expect(prepareDisplayObjectRender(state, root)).toBe(true);
381
+ expect(prepareScene2DRender(state, root)).toBe(true);
382
382
  });
383
383
 
384
384
  it('returns false when tree is clean', () => {
385
385
  const state = createRenderState({ sceneGraphSyncPolicy: 'requiresInvalidation' });
386
386
  const root = createDisplayObject();
387
- prepareDisplayObjectRender(state, root);
387
+ prepareScene2DRender(state, root);
388
388
 
389
- expect(prepareDisplayObjectRender(state, root)).toBe(false);
389
+ expect(prepareScene2DRender(state, root)).toBe(false);
390
390
  });
391
391
 
392
392
  it('accumulates clip depth down a clipped subtree', () => {
@@ -396,10 +396,10 @@ describe('prepareDisplayObjectRender', () => {
396
396
  const grandchild = createDisplayObject();
397
397
  addNodeChild(root, child);
398
398
  addNodeChild(child, grandchild);
399
- setDisplayObjectClip(root, makeClipRegion());
400
- setDisplayObjectClip(child, makeClipRegion());
399
+ setNode2DClip(root, makeClipRegion());
400
+ setNode2DClip(child, makeClipRegion());
401
401
 
402
- prepareDisplayObjectRender(state, root);
402
+ prepareScene2DRender(state, root);
403
403
 
404
404
  expect(getOrCreateRenderProxy2D(state, root).clipDepth).toBe(1);
405
405
  expect(getOrCreateRenderProxy2D(state, child).clipDepth).toBe(2);
@@ -411,7 +411,7 @@ describe('updateNodeClip', () => {
411
411
  it('adds one to the parent depth when the node has a clip', () => {
412
412
  const state = createRenderState();
413
413
  const node = createDisplayObject();
414
- setDisplayObjectClip(node, makeClipRegion());
414
+ setNode2DClip(node, makeClipRegion());
415
415
  const data = getOrCreateRenderProxy2D(state, node);
416
416
  updateNodeClip(state, node, data, undefined);
417
417
  expect(data.clipDepth).toBe(1);
@@ -456,7 +456,7 @@ describe('updateRenderProxy2D', () => {
456
456
  it('sets clip depth from the parent through the same visitor', () => {
457
457
  const state = createRenderState();
458
458
  const root = createDisplayObject();
459
- setDisplayObjectClip(root, makeClipRegion());
459
+ setNode2DClip(root, makeClipRegion());
460
460
  const data = getOrCreateRenderProxy2D(state, root);
461
461
  updateRenderProxy2D(state, root, data, undefined);
462
462
  expect(data.clipDepth).toBe(1);
@@ -1,4 +1,4 @@
1
- import { createDisplayObject } from '@flighthq/displayobject';
1
+ import { createDisplayObject } from '@flighthq/scene2d';
2
2
  import type { RenderProxyAdapter } from '@flighthq/types';
3
3
 
4
4
  import { registerRenderer } from './renderer';
@@ -1,10 +1,10 @@
1
- import { createDisplayObject } from '@flighthq/displayobject';
2
1
  import { addNodeChild } from '@flighthq/node';
2
+ import { createDisplayObject } from '@flighthq/scene2d';
3
3
  import { createSprite } from '@flighthq/sprite';
4
4
  import type { Renderer, RenderProxy, RenderQueueEntry } from '@flighthq/types';
5
5
 
6
6
  import { registerRenderer } from './renderer';
7
- import { prepareDisplayObjectRender } from './renderProxy';
7
+ import { prepareScene2DRender } from './renderProxy';
8
8
  import {
9
9
  buildRenderQueue,
10
10
  clearRenderQueue,
@@ -24,7 +24,7 @@ describe('buildRenderQueue', () => {
24
24
  it('produces zero entries for a scene with no renderers', () => {
25
25
  const state = createRenderState();
26
26
  const root = createDisplayObject();
27
- prepareDisplayObjectRender(state, root);
27
+ prepareScene2DRender(state, root);
28
28
  const queue = createRenderQueue();
29
29
  buildRenderQueue(state, root, queue);
30
30
  expect(queue.entryCount).toBe(0);
@@ -35,7 +35,7 @@ describe('buildRenderQueue', () => {
35
35
  const child = createDisplayObject();
36
36
  addNodeChild(root, child);
37
37
  registerRenderer(state, root.kind, makeRenderer());
38
- prepareDisplayObjectRender(state, root);
38
+ prepareScene2DRender(state, root);
39
39
  const queue = createRenderQueue();
40
40
  buildRenderQueue(state, root, queue);
41
41
  expect(queue.entryCount).toBe(2);
@@ -45,7 +45,7 @@ describe('buildRenderQueue', () => {
45
45
  const root = createDisplayObject();
46
46
  root.visible = false;
47
47
  registerRenderer(state, root.kind, makeRenderer());
48
- prepareDisplayObjectRender(state, root);
48
+ prepareScene2DRender(state, root);
49
49
  const queue = createRenderQueue();
50
50
  buildRenderQueue(state, root, queue);
51
51
  expect(queue.entryCount).toBe(0);
@@ -54,7 +54,7 @@ describe('buildRenderQueue', () => {
54
54
  const state = createRenderState();
55
55
  const root = createDisplayObject();
56
56
  registerRenderer(state, root.kind, makeRenderer());
57
- prepareDisplayObjectRender(state, root);
57
+ prepareScene2DRender(state, root);
58
58
  const queue = createRenderQueue();
59
59
  buildRenderQueue(state, root, queue);
60
60
  const firstCount = queue.entryCount;
@@ -71,7 +71,7 @@ describe('buildRenderQueue', () => {
71
71
  registerRenderer(state, root.kind, makeRenderer());
72
72
  registerRenderer(state, child1.kind, makeRenderer());
73
73
  registerRenderer(state, child2.kind, makeRenderer());
74
- prepareDisplayObjectRender(state, root);
74
+ prepareScene2DRender(state, root);
75
75
  const queue = createRenderQueue();
76
76
  buildRenderQueue(state, root, queue);
77
77
  expect(queue.entries[0].sortKey).toBeLessThan(queue.entries[1].sortKey);
@@ -1,42 +1,12 @@
1
- import { createDisplayObject } from '@flighthq/displayobject';
2
1
  import { createMatrix, createRectangle } from '@flighthq/geometry';
2
+ import { createDisplayObject } from '@flighthq/scene2d';
3
3
 
4
4
  import {
5
- computeDisplayObjectRenderTargetTransform,
5
+ computeScene2DRenderTargetTransform,
6
6
  computeRenderCacheTransform,
7
7
  computeRenderTargetSize,
8
8
  } from './renderTarget';
9
9
 
10
- describe('computeDisplayObjectRenderTargetTransform', () => {
11
- it('writes an identity-based transform for an unrotated object at origin', () => {
12
- const obj = createDisplayObject();
13
- const bounds = createRectangle(0, 0, 100, 80);
14
- const out = createMatrix();
15
- computeDisplayObjectRenderTargetTransform(out, obj, bounds);
16
- expect(typeof out.a).toBe('number');
17
- expect(typeof out.tx).toBe('number');
18
- });
19
-
20
- it('offsets by contentX and contentY', () => {
21
- const obj = createDisplayObject();
22
- const bounds = createRectangle(10, 20, 100, 80);
23
- const out1 = createMatrix();
24
- const out2 = createMatrix();
25
- computeDisplayObjectRenderTargetTransform(out1, obj, bounds, 0, 0);
26
- computeDisplayObjectRenderTargetTransform(out2, obj, bounds, 5, 10);
27
- expect(out2.tx).not.toBe(out1.tx);
28
- });
29
-
30
- it('does not throw for a non-identity local transform', () => {
31
- const obj = createDisplayObject();
32
- obj.x = 50;
33
- obj.y = 30;
34
- const bounds = createRectangle(50, 30, 100, 80);
35
- const out = createMatrix();
36
- expect(() => computeDisplayObjectRenderTargetTransform(out, obj, bounds)).not.toThrow();
37
- });
38
- });
39
-
40
10
  describe('computeRenderCacheTransform', () => {
41
11
  it('produces a pure translation from bounds origin', () => {
42
12
  const out = createMatrix();
@@ -82,3 +52,33 @@ describe('computeRenderTargetSize', () => {
82
52
  expect(result.height).toBe(1);
83
53
  });
84
54
  });
55
+
56
+ describe('computeScene2DRenderTargetTransform', () => {
57
+ it('writes an identity-based transform for an unrotated object at origin', () => {
58
+ const obj = createDisplayObject();
59
+ const bounds = createRectangle(0, 0, 100, 80);
60
+ const out = createMatrix();
61
+ computeScene2DRenderTargetTransform(out, obj, bounds);
62
+ expect(typeof out.a).toBe('number');
63
+ expect(typeof out.tx).toBe('number');
64
+ });
65
+
66
+ it('offsets by contentX and contentY', () => {
67
+ const obj = createDisplayObject();
68
+ const bounds = createRectangle(10, 20, 100, 80);
69
+ const out1 = createMatrix();
70
+ const out2 = createMatrix();
71
+ computeScene2DRenderTargetTransform(out1, obj, bounds, 0, 0);
72
+ computeScene2DRenderTargetTransform(out2, obj, bounds, 5, 10);
73
+ expect(out2.tx).not.toBe(out1.tx);
74
+ });
75
+
76
+ it('does not throw for a non-identity local transform', () => {
77
+ const obj = createDisplayObject();
78
+ obj.x = 50;
79
+ obj.y = 30;
80
+ const bounds = createRectangle(50, 30, 100, 80);
81
+ const out = createMatrix();
82
+ expect(() => computeScene2DRenderTargetTransform(out, obj, bounds)).not.toThrow();
83
+ });
84
+ });
@@ -1,4 +1,4 @@
1
- import { createDisplayObject } from '@flighthq/displayobject';
1
+ import { createDisplayObject } from '@flighthq/scene2d';
2
2
 
3
3
  import { createRenderProxy2D } from './renderProxy';
4
4
  import { createRenderState, getRenderStateRuntime } from './renderState';
@@ -1,9 +1,9 @@
1
- import { createBitmap, createDisplayObject } from '@flighthq/displayobject';
2
1
  import { createMatrix, createRectangle } from '@flighthq/geometry';
3
2
  import { addNodeChild, getNodeRuntime, invalidateNodeLocalBounds, invalidateNodeLocalTransform } from '@flighthq/node';
3
+ import { createBitmap, createDisplayObject } from '@flighthq/scene2d';
4
4
  import type { HasBoundsRectangleRuntime, RenderProxy2D, RenderViewport2D } from '@flighthq/types';
5
5
 
6
- import { createRenderProxy2D, prepareDisplayObjectRender } from './renderProxy';
6
+ import { createRenderProxy2D, prepareScene2DRender } from './renderProxy';
7
7
  import { createRenderState } from './renderState';
8
8
  import {
9
9
  computeRenderProxyWorldBounds,
@@ -44,7 +44,7 @@ describe('computeRenderProxyWorldBounds', () => {
44
44
  expect(result).toBe(false);
45
45
  });
46
46
 
47
- it('returns true and writes world bounds for a DisplayObject', () => {
47
+ it('returns true and writes world bounds for a Node2D', () => {
48
48
  const obj = makeObjectWithBounds(10, 20, 50, 30);
49
49
  const out = createRectangle();
50
50
  const result = computeRenderProxyWorldBounds(out, obj);
@@ -176,10 +176,10 @@ describe('isRenderProxyInViewport', () => {
176
176
  expect(isRenderProxyInViewport(proxy, vp)).toBe(true);
177
177
  });
178
178
 
179
- it('returns true for a proxy backed by a DisplayObject within the viewport', () => {
179
+ it('returns true for a proxy backed by a Node2D within the viewport', () => {
180
180
  const state = createRenderState();
181
181
  const obj = makeObjectWithBounds(10, 10, 50, 50);
182
- prepareDisplayObjectRender(state, obj);
182
+ prepareScene2DRender(state, obj);
183
183
  const proxy = createRenderProxy2D(state, obj);
184
184
  const vp: RenderViewport2D = { x: 0, y: 0, width: 800, height: 600 };
185
185
  expect(isRenderProxyInViewport(proxy, vp)).toBe(true);
@@ -1,4 +1,4 @@
1
- import type { DisplayObjectClipHooks, Renderer, RenderState } from '@flighthq/types';
1
+ import type { Scene2DClipHooks, Renderer, RenderState } from '@flighthq/types';
2
2
 
3
3
  import {
4
4
  copyAllRenderersFromRenderState,
@@ -18,7 +18,7 @@ describe('copyAllRenderersFromRenderState', () => {
18
18
  finalize: vi.fn(),
19
19
  popClip: vi.fn(),
20
20
  pushClip: vi.fn(),
21
- } as unknown as DisplayObjectClipHooks;
21
+ } as unknown as Scene2DClipHooks;
22
22
  registerRenderer(source, kind, renderer);
23
23
  source.displayObjectClipHooks = hooks;
24
24