@flighthq/render 0.2.1-next.841.373388f → 0.3.0-next.1032.e2b99fc

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 (87) hide show
  1. package/dist/contract.d.ts +17 -0
  2. package/dist/contract.d.ts.map +1 -0
  3. package/dist/contract.js +17 -0
  4. package/dist/contract.js.map +1 -0
  5. package/dist/enableColorAdjustmentGuards.d.ts +1 -1
  6. package/dist/enableColorAdjustmentGuards.d.ts.map +1 -1
  7. package/dist/enableColorAdjustmentGuards.js +12 -13
  8. package/dist/enableColorAdjustmentGuards.js.map +1 -1
  9. package/dist/explainScene2DRender.d.ts +1 -1
  10. package/dist/explainScene2DRender.d.ts.map +1 -1
  11. package/dist/index.d.ts +1 -16
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +1 -16
  14. package/dist/index.js.map +1 -1
  15. package/dist/renderAppearance.d.ts +1 -1
  16. package/dist/renderAppearance.d.ts.map +1 -1
  17. package/dist/renderAppearance.js +1 -1
  18. package/dist/renderAppearance.js.map +1 -1
  19. package/dist/renderCache.d.ts +2 -2
  20. package/dist/renderCache.d.ts.map +1 -1
  21. package/dist/renderCache.js +4 -4
  22. package/dist/renderCache.js.map +1 -1
  23. package/dist/renderColor.d.ts +1 -1
  24. package/dist/renderColor.d.ts.map +1 -1
  25. package/dist/renderColorScaleBias.d.ts +3 -0
  26. package/dist/renderColorScaleBias.d.ts.map +1 -0
  27. package/dist/renderColorScaleBias.js +21 -0
  28. package/dist/renderColorScaleBias.js.map +1 -0
  29. package/dist/renderMaterial.d.ts +1 -1
  30. package/dist/renderMaterial.d.ts.map +1 -1
  31. package/dist/renderProxy.d.ts +1 -1
  32. package/dist/renderProxy.d.ts.map +1 -1
  33. package/dist/renderProxy.js +9 -8
  34. package/dist/renderProxy.js.map +1 -1
  35. package/dist/renderProxyAdapter.d.ts +1 -1
  36. package/dist/renderProxyAdapter.d.ts.map +1 -1
  37. package/dist/renderProxyAdapter.js +1 -1
  38. package/dist/renderProxyAdapter.js.map +1 -1
  39. package/dist/renderQueue.d.ts +1 -1
  40. package/dist/renderQueue.d.ts.map +1 -1
  41. package/dist/renderQueue.js +1 -1
  42. package/dist/renderQueue.js.map +1 -1
  43. package/dist/renderState.d.ts +1 -1
  44. package/dist/renderState.d.ts.map +1 -1
  45. package/dist/renderState.js +3 -3
  46. package/dist/renderState.js.map +1 -1
  47. package/dist/renderTarget.d.ts +1 -1
  48. package/dist/renderTarget.d.ts.map +1 -1
  49. package/dist/renderTarget.js +2 -2
  50. package/dist/renderTarget.js.map +1 -1
  51. package/dist/renderTransform2d.d.ts +1 -1
  52. package/dist/renderTransform2d.d.ts.map +1 -1
  53. package/dist/renderTransform2d.js +2 -2
  54. package/dist/renderTransform2d.js.map +1 -1
  55. package/dist/renderViewport.d.ts +1 -1
  56. package/dist/renderViewport.d.ts.map +1 -1
  57. package/dist/renderViewport.js +2 -2
  58. package/dist/renderViewport.js.map +1 -1
  59. package/dist/renderer.d.ts +2 -1
  60. package/dist/renderer.d.ts.map +1 -1
  61. package/dist/renderer.js +7 -0
  62. package/dist/renderer.js.map +1 -1
  63. package/dist/sceneRender.d.ts +2 -2
  64. package/dist/sceneRender.d.ts.map +1 -1
  65. package/dist/sceneRender.js +26 -18
  66. package/dist/sceneRender.js.map +1 -1
  67. package/package.json +16 -11
  68. package/src/enableColorAdjustmentGuards.test.ts +13 -13
  69. package/src/explainScene2DRender.test.ts +2 -2
  70. package/src/renderAppearance.test.ts +3 -3
  71. package/src/renderCache.test.ts +2 -2
  72. package/src/renderColorScaleBias.test.ts +53 -0
  73. package/src/renderMaterial.test.ts +2 -2
  74. package/src/renderProxy.test.ts +5 -5
  75. package/src/renderProxyAdapter.test.ts +2 -2
  76. package/src/renderQueue.test.ts +4 -4
  77. package/src/renderState.test.ts +3 -3
  78. package/src/renderTarget.test.ts +2 -2
  79. package/src/renderTransform2d.test.ts +1 -1
  80. package/src/renderViewport.test.ts +9 -4
  81. package/src/renderer.test.ts +25 -1
  82. package/src/sceneRender.test.ts +31 -9
  83. package/dist/renderColorTransform.d.ts +0 -3
  84. package/dist/renderColorTransform.d.ts.map +0 -1
  85. package/dist/renderColorTransform.js +0 -21
  86. package/dist/renderColorTransform.js.map +0 -1
  87. package/src/renderColorTransform.test.ts +0 -45
@@ -1,28 +1,37 @@
1
- import { createCamera3D, createPerspectiveProjection, setCamera3DViewMatrix4FromLookAt } from '@flighthq/camera';
2
- import { unpackColorToLinear } from '@flighthq/color';
3
- import { createAabb, createMatrix4 } from '@flighthq/geometry';
1
+ import {
2
+ createCamera3D,
3
+ createPerspectiveProjection,
4
+ setCamera3DViewMatrix4FromLookAt,
5
+ } from '@flighthq/camera/contract';
6
+ import { unpackColorToLinear } from '@flighthq/color/contract';
7
+ import { createAabb, createMatrix4 } from '@flighthq/geometry/contract';
4
8
  import {
5
9
  createAmbientLight,
6
10
  createDirectionalLight,
7
11
  createHemisphereLight,
8
12
  createPointLight,
9
13
  createSpotLight,
10
- } from '@flighthq/lighting';
14
+ } from '@flighthq/lighting/contract';
11
15
  import {
12
16
  CANONICAL_MESH_GEOMETRY_LAYOUT,
13
17
  computeMeshGeometryBounds,
14
18
  createBoxMeshGeometry,
15
19
  createMeshGeometry,
16
- } from '@flighthq/mesh';
17
- import { addNodeChild, getNodeWorldMatrix4, invalidateNodeLocalTransform, setNodeLocalMatrix4 } from '@flighthq/node';
18
- import { createMesh, createNode3D, Node3DKind, getNode3DWorldAlpha } from '@flighthq/scene3d';
19
- import type { Camera3D, Material, MeshGeometry, Scene3DLightBlock, Scene3DLightsLike } from '@flighthq/types';
20
+ } from '@flighthq/mesh/contract';
21
+ import {
22
+ addNodeChild,
23
+ getNodeWorldMatrix4,
24
+ invalidateNodeLocalTransform,
25
+ setNodeLocalMatrix4,
26
+ } from '@flighthq/node/contract';
27
+ import { createMesh, createNode3D, Node3DKind, getNode3DWorldAlpha } from '@flighthq/scene3d/contract';
28
+ import type { Camera3D, Material, MeshGeometry, Scene3DLightBlock, Scene3DLightsLike } from '@flighthq/types/contract';
20
29
  import {
21
30
  SCENE_LIGHT_BLOCK_FLOATS,
22
31
  SCENE_LIGHT_HEMISPHERE_OFFSET,
23
32
  SCENE_LIGHT_POINT_OFFSET,
24
33
  SCENE_LIGHT_SPOT_OFFSET,
25
- } from '@flighthq/types';
34
+ } from '@flighthq/types/contract';
26
35
  import { describe, expect, it } from 'vitest';
27
36
 
28
37
  import { createRenderState } from './renderState';
@@ -235,6 +244,19 @@ describe('prepareScene3DRender', () => {
235
244
  expect(list.viewProjection.m[15]).not.toBe(1);
236
245
  });
237
246
 
247
+ it('uses a draw-time viewport aspect without mutating the camera projection', () => {
248
+ const state = createRenderState();
249
+ const scene = createNode3D(Node3DKind);
250
+ const camera = frontCamera();
251
+
252
+ const tallXScale = prepareScene3DRender(state, scene, camera, emptyLights(), 0.5).viewProjection.m[0];
253
+ const wideXScale = prepareScene3DRender(state, scene, camera, emptyLights(), 2).viewProjection.m[0];
254
+
255
+ expect(tallXScale).toBeCloseTo(wideXScale * 4);
256
+ expect(camera.projection.kind).toBe('perspective');
257
+ if (camera.projection.kind === 'perspective') expect(camera.projection.aspect).toBe(1);
258
+ });
259
+
238
260
  it('culls a mesh placed far behind the camera', () => {
239
261
  const state = createRenderState();
240
262
  const scene = createNode3D(Node3DKind);
@@ -1,3 +0,0 @@
1
- import type { RenderProxy, RenderState } from '@flighthq/types';
2
- export declare function updateRenderProxyColorTransform(state: RenderState, data: RenderProxy, _parentData?: RenderProxy): void;
3
- //# sourceMappingURL=renderColorTransform.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"renderColorTransform.d.ts","sourceRoot":"","sources":["../src/renderColorTransform.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAoB,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAelF,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,WAAW,EACjB,WAAW,CAAC,EAAE,WAAW,GACxB,IAAI,CAMN"}
@@ -1,21 +0,0 @@
1
- import { getNodeRuntime } from '@flighthq/node';
2
- import { getRenderStateRuntime } from './renderState';
3
- // Hands the node's resolved color transform to the render node. A node's color-adjustment stack
4
- // (NodeRuntime.colorAdjustments) is fused once into the affine `resolvedColorTransform` cache by the
5
- // set-accessors on change — never per frame — so this hot-path visitor is a single field read, identical
6
- // in cost to reading the old `.colorTransform`. Non-inheriting: a node uses its own resolved value (or
7
- // none → null). The value is the Adjustment-tier fold input; it is not a material and does not key the
8
- // batch.
9
- //
10
- // When the fused stack carries off-diagonal channel-mixing terms the 8-float inline fold cannot represent
11
- // yet (the 4×5 path is deferred), the node is flagged `colorAdjustmentsChannelMixing`: only the affine
12
- // part is applied, and the render state's shakeable guard (enableColorAdjustmentGuards) is invoked so the
13
- // deferral is reported rather than silent.
14
- export function updateRenderProxyColorTransform(state, data, _parentData) {
15
- const runtime = getNodeRuntime(data.source);
16
- data.colorTransform = runtime.resolvedColorTransform ?? null;
17
- if (runtime.colorAdjustmentsChannelMixing) {
18
- getRenderStateRuntime(state).colorAdjustmentChannelMixingGuard?.(state, data.source);
19
- }
20
- }
21
- //# sourceMappingURL=renderColorTransform.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"renderColorTransform.js","sourceRoot":"","sources":["../src/renderColorTransform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEtD,gGAAgG;AAChG,qGAAqG;AACrG,yGAAyG;AACzG,uGAAuG;AACvG,uGAAuG;AACvG,SAAS;AACT,EAAE;AACF,0GAA0G;AAC1G,uGAAuG;AACvG,0GAA0G;AAC1G,2CAA2C;AAC3C,MAAM,UAAU,+BAA+B,CAC7C,KAAkB,EAClB,IAAiB,EACjB,WAAyB;IAEzB,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,MAAc,CAAC,CAAC;IACpD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,sBAAsB,IAAI,IAAI,CAAC;IAC7D,IAAI,OAAO,CAAC,6BAA6B,EAAE,CAAC;QAC1C,qBAAqB,CAAC,KAAK,CAAC,CAAC,iCAAiC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,MAAoB,CAAC,CAAC;IACrG,CAAC;AACH,CAAC"}
@@ -1,45 +0,0 @@
1
- import { createColorTransformAdjustment } from '@flighthq/adjustments';
2
- import { createColorTransform } from '@flighthq/materials';
3
- import { createDisplayObject, getNode2DRuntime, setNode2DColorAdjustments } from '@flighthq/scene2d';
4
- import type { Renderable } from '@flighthq/types';
5
-
6
- import { updateRenderProxyColorTransform } from './renderColorTransform';
7
- import { createRenderProxy } from './renderProxy';
8
- import { createRenderState } from './renderState';
9
-
10
- describe('updateRenderProxyColorTransform', () => {
11
- it('resolves a node color-adjustment stack onto the render node as an affine ColorTransform', () => {
12
- const state = createRenderState();
13
- const node = createDisplayObject();
14
- setNode2DColorAdjustments(node, [
15
- createColorTransformAdjustment(createColorTransform({ redMultiplier: 0.5, greenMultiplier: 0 })),
16
- ]);
17
- const data = createRenderProxy(state, node as unknown as Renderable);
18
- updateRenderProxyColorTransform(state, data);
19
- expect(data.colorTransform).not.toBeNull();
20
- expect(data.colorTransform!.redMultiplier).toBe(0.5);
21
- expect(data.colorTransform!.greenMultiplier).toBe(0);
22
- });
23
-
24
- it('resolves to null when the node carries no adjustments', () => {
25
- const state = createRenderState();
26
- const node = createDisplayObject();
27
- const data = createRenderProxy(state, node as unknown as Renderable);
28
- updateRenderProxyColorTransform(state, data);
29
- expect(data.colorTransform).toBeNull();
30
- });
31
-
32
- it('reads the cache the accessor fused once (the walk never re-fuses)', () => {
33
- const state = createRenderState();
34
- const node = createDisplayObject();
35
- setNode2DColorAdjustments(node, [createColorTransformAdjustment(createColorTransform({ redMultiplier: 0.25 }))]);
36
- // The set-accessor fused the stack once; the runtime already holds the cached resolved value.
37
- const cached = getNode2DRuntime(node).resolvedColorTransform;
38
- expect(cached).not.toBeNull();
39
- const data = createRenderProxy(state, node as unknown as Renderable);
40
- updateRenderProxyColorTransform(state, data);
41
- expect(data.colorTransform).toBe(cached);
42
- updateRenderProxyColorTransform(state, data);
43
- expect(data.colorTransform).toBe(cached);
44
- });
45
- });