@supersoniks/concorde 4.9.98-visual-stack.0 → 4.9.98-visual-stack.1

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 (164) hide show
  1. package/build-infos.json +1 -1
  2. package/concorde-3d.bundle.js +201 -152
  3. package/concorde-3d.es.js +14687 -13905
  4. package/concorde-core.bundle.js +1 -1
  5. package/concorde-core.es.js +1 -1
  6. package/concorde-hugging-face-infer.bundle.js +1 -1
  7. package/concorde-hugging-face-infer.es.js +1 -1
  8. package/concorde-shader.bundle.js +31 -20
  9. package/concorde-shader.es.js +2773 -2547
  10. package/concorde-webgpu.bundle.js +43 -32
  11. package/concorde-webgpu.es.js +1819 -1553
  12. package/dist/concorde-3d.bundle.js +201 -152
  13. package/dist/concorde-3d.es.js +14687 -13905
  14. package/dist/concorde-core.bundle.js +1 -1
  15. package/dist/concorde-core.es.js +1 -1
  16. package/dist/concorde-hugging-face-infer.bundle.js +1 -1
  17. package/dist/concorde-hugging-face-infer.es.js +1 -1
  18. package/dist/concorde-shader.bundle.js +31 -20
  19. package/dist/concorde-shader.es.js +2773 -2547
  20. package/dist/concorde-webgpu.bundle.js +43 -32
  21. package/dist/concorde-webgpu.es.js +1819 -1553
  22. package/dist/js/core/components/functional/3d/3d.js +90 -2
  23. package/dist/js/core/components/functional/3d/3d.js.map +1 -1
  24. package/dist/js/core/components/functional/3d/constants.js +1 -0
  25. package/dist/js/core/components/functional/3d/constants.js.map +1 -1
  26. package/dist/js/core/components/functional/3d/ensure.js +6 -3
  27. package/dist/js/core/components/functional/3d/ensure.js.map +1 -1
  28. package/dist/js/core/components/functional/3d/form-params.js +2 -0
  29. package/dist/js/core/components/functional/3d/form-params.js.map +1 -1
  30. package/dist/js/core/components/functional/3d/life.js +2 -1
  31. package/dist/js/core/components/functional/3d/life.js.map +1 -1
  32. package/dist/js/core/components/functional/3d/out-publish.js +3 -2
  33. package/dist/js/core/components/functional/3d/out-publish.js.map +1 -1
  34. package/dist/js/core/components/functional/3d/playback.js +6 -1
  35. package/dist/js/core/components/functional/3d/playback.js.map +1 -1
  36. package/dist/js/core/components/functional/3d/post-bind.js +207 -0
  37. package/dist/js/core/components/functional/3d/post-bind.js.map +1 -0
  38. package/dist/js/core/components/functional/3d/post-channels.js +39 -0
  39. package/dist/js/core/components/functional/3d/post-channels.js.map +1 -0
  40. package/dist/js/core/components/functional/3d/post-fx.js +495 -0
  41. package/dist/js/core/components/functional/3d/post-fx.js.map +1 -0
  42. package/dist/js/core/components/functional/3d/props.js +142 -0
  43. package/dist/js/core/components/functional/3d/props.js.map +1 -1
  44. package/dist/js/core/components/functional/3d/reload.js +2 -0
  45. package/dist/js/core/components/functional/3d/reload.js.map +1 -1
  46. package/dist/js/core/components/functional/3d/runtime.js +80 -3
  47. package/dist/js/core/components/functional/3d/runtime.js.map +1 -1
  48. package/dist/js/core/components/functional/3d/scene-runtime.js +1 -1
  49. package/dist/js/core/components/functional/3d/scene-runtime.js.map +1 -1
  50. package/dist/js/core/components/functional/3d/tune.js +21 -0
  51. package/dist/js/core/components/functional/3d/tune.js.map +1 -1
  52. package/dist/js/core/components/functional/3d/updated.js +13 -1
  53. package/dist/js/core/components/functional/3d/updated.js.map +1 -1
  54. package/dist/js/core/components/functional/shader/gl-runtime.js +128 -14
  55. package/dist/js/core/components/functional/shader/gl-runtime.js.map +1 -1
  56. package/dist/js/core/components/functional/shader/shader.js +154 -57
  57. package/dist/js/core/components/functional/shader/shader.js.map +1 -1
  58. package/dist/js/core/components/functional/shader/shadertoy-prelude.js +39 -5
  59. package/dist/js/core/components/functional/shader/shadertoy-prelude.js.map +1 -1
  60. package/dist/js/core/components/functional/shader/types.js +58 -7
  61. package/dist/js/core/components/functional/shader/types.js.map +1 -1
  62. package/dist/js/core/components/functional/webgpu/gl-fallback.js +27 -6
  63. package/dist/js/core/components/functional/webgpu/gl-fallback.js.map +1 -1
  64. package/dist/js/core/components/functional/webgpu/gpu-runtime.js +115 -13
  65. package/dist/js/core/components/functional/webgpu/gpu-runtime.js.map +1 -1
  66. package/dist/js/core/components/functional/webgpu/helpers.js +8 -2
  67. package/dist/js/core/components/functional/webgpu/helpers.js.map +1 -1
  68. package/dist/js/core/components/functional/webgpu/webgpu.js +34 -1
  69. package/dist/js/core/components/functional/webgpu/webgpu.js.map +1 -1
  70. package/dist/js/core/utils/mediaRef.js +37 -0
  71. package/dist/js/core/utils/mediaRef.js.map +1 -1
  72. package/dist/types/core/components/functional/3d/3d.d.ts +26 -3
  73. package/dist/types/core/components/functional/3d/3d.d.ts.map +1 -1
  74. package/dist/types/core/components/functional/3d/constants.d.ts +1 -1
  75. package/dist/types/core/components/functional/3d/constants.d.ts.map +1 -1
  76. package/dist/types/core/components/functional/3d/ensure.d.ts +3 -0
  77. package/dist/types/core/components/functional/3d/ensure.d.ts.map +1 -1
  78. package/dist/types/core/components/functional/3d/form-params.d.ts.map +1 -1
  79. package/dist/types/core/components/functional/3d/life.d.ts +2 -0
  80. package/dist/types/core/components/functional/3d/life.d.ts.map +1 -1
  81. package/dist/types/core/components/functional/3d/out-publish.d.ts +1 -0
  82. package/dist/types/core/components/functional/3d/out-publish.d.ts.map +1 -1
  83. package/dist/types/core/components/functional/3d/playback.d.ts +9 -0
  84. package/dist/types/core/components/functional/3d/playback.d.ts.map +1 -1
  85. package/dist/types/core/components/functional/3d/post-bind.d.ts +52 -0
  86. package/dist/types/core/components/functional/3d/post-bind.d.ts.map +1 -0
  87. package/dist/types/core/components/functional/3d/post-channels.d.ts +40 -0
  88. package/dist/types/core/components/functional/3d/post-channels.d.ts.map +1 -0
  89. package/dist/types/core/components/functional/3d/post-fx.d.ts +73 -0
  90. package/dist/types/core/components/functional/3d/post-fx.d.ts.map +1 -0
  91. package/dist/types/core/components/functional/3d/props.d.ts +42 -0
  92. package/dist/types/core/components/functional/3d/props.d.ts.map +1 -1
  93. package/dist/types/core/components/functional/3d/reload.d.ts.map +1 -1
  94. package/dist/types/core/components/functional/3d/runtime.d.ts +16 -1
  95. package/dist/types/core/components/functional/3d/runtime.d.ts.map +1 -1
  96. package/dist/types/core/components/functional/3d/scene-runtime.d.ts +1 -1
  97. package/dist/types/core/components/functional/3d/scene-runtime.d.ts.map +1 -1
  98. package/dist/types/core/components/functional/3d/tune.d.ts +5 -0
  99. package/dist/types/core/components/functional/3d/tune.d.ts.map +1 -1
  100. package/dist/types/core/components/functional/3d/types.d.ts +9 -0
  101. package/dist/types/core/components/functional/3d/types.d.ts.map +1 -1
  102. package/dist/types/core/components/functional/3d/updated.d.ts.map +1 -1
  103. package/dist/types/core/components/functional/shader/gl-runtime.d.ts +33 -1
  104. package/dist/types/core/components/functional/shader/gl-runtime.d.ts.map +1 -1
  105. package/dist/types/core/components/functional/shader/shader.d.ts +28 -7
  106. package/dist/types/core/components/functional/shader/shader.d.ts.map +1 -1
  107. package/dist/types/core/components/functional/shader/shadertoy-prelude.d.ts +16 -2
  108. package/dist/types/core/components/functional/shader/shadertoy-prelude.d.ts.map +1 -1
  109. package/dist/types/core/components/functional/shader/types.d.ts +29 -5
  110. package/dist/types/core/components/functional/shader/types.d.ts.map +1 -1
  111. package/dist/types/core/components/functional/webgpu/gl-fallback.d.ts +4 -0
  112. package/dist/types/core/components/functional/webgpu/gl-fallback.d.ts.map +1 -1
  113. package/dist/types/core/components/functional/webgpu/gpu-runtime.d.ts +14 -0
  114. package/dist/types/core/components/functional/webgpu/gpu-runtime.d.ts.map +1 -1
  115. package/dist/types/core/components/functional/webgpu/helpers.d.ts +1 -0
  116. package/dist/types/core/components/functional/webgpu/helpers.d.ts.map +1 -1
  117. package/dist/types/core/components/functional/webgpu/webgpu.d.ts +7 -1
  118. package/dist/types/core/components/functional/webgpu/webgpu.d.ts.map +1 -1
  119. package/dist/types/core/utils/mediaRef.d.ts +15 -0
  120. package/dist/types/core/utils/mediaRef.d.ts.map +1 -1
  121. package/package.json +37 -1
  122. package/src/core/components/functional/3d/3d.md +34 -1
  123. package/src/core/components/functional/3d/3d.spec.ts +42 -0
  124. package/src/core/components/functional/3d/3d.ts +101 -3
  125. package/src/core/components/functional/3d/constants.ts +1 -0
  126. package/src/core/components/functional/3d/ensure.ts +11 -3
  127. package/src/core/components/functional/3d/form-params.ts +2 -0
  128. package/src/core/components/functional/3d/life.ts +4 -1
  129. package/src/core/components/functional/3d/out-publish.ts +4 -3
  130. package/src/core/components/functional/3d/playback.ts +13 -1
  131. package/src/core/components/functional/3d/post-bind.ts +262 -0
  132. package/src/core/components/functional/3d/post-channels.spec.ts +36 -0
  133. package/src/core/components/functional/3d/post-channels.ts +69 -0
  134. package/src/core/components/functional/3d/post-fx.ts +594 -0
  135. package/src/core/components/functional/3d/props.ts +45 -0
  136. package/src/core/components/functional/3d/reload.ts +2 -0
  137. package/src/core/components/functional/3d/runtime.ts +93 -4
  138. package/src/core/components/functional/3d/scene-runtime.ts +3 -0
  139. package/src/core/components/functional/3d/tune.ts +21 -0
  140. package/src/core/components/functional/3d/types.ts +9 -0
  141. package/src/core/components/functional/3d/updated.ts +17 -1
  142. package/src/core/components/functional/shader/gl-runtime.ts +169 -12
  143. package/src/core/components/functional/shader/shader.md +27 -4
  144. package/src/core/components/functional/shader/shader.spec.ts +267 -0
  145. package/src/core/components/functional/shader/shader.ts +177 -55
  146. package/src/core/components/functional/shader/shadertoy-prelude.ts +49 -5
  147. package/src/core/components/functional/shader/types.ts +89 -12
  148. package/src/core/components/functional/webgpu/gl-fallback.ts +28 -4
  149. package/src/core/components/functional/webgpu/gpu-runtime.ts +154 -18
  150. package/src/core/components/functional/webgpu/helpers.ts +8 -2
  151. package/src/core/components/functional/webgpu/webgpu.md +13 -2
  152. package/src/core/components/functional/webgpu/webgpu.spec.ts +37 -0
  153. package/src/core/components/functional/webgpu/webgpu.ts +39 -1
  154. package/src/core/utils/mediaRef.spec.ts +25 -0
  155. package/src/core/utils/mediaRef.ts +45 -0
  156. package/src/docs/_misc/visual-stack.md +19 -1
  157. package/src/docs/components/docs-demo-sources.ts +28 -0
  158. package/src/docs/docs.ts +2 -0
  159. package/src/docs/example/docs-3d-post-depth-demo.ts +68 -0
  160. package/src/docs/example/docs-3d-webgpu-live-demo.ts +83 -0
  161. package/src/docs/example/docs-harris-webgpu-demo.ts +53 -55
  162. package/src/docs/search/docs-search.json +252 -2
  163. package/src/tsconfig.json +27 -0
  164. package/src/tsconfig.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/functional/shader/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/functional/shader/types.ts"],"names":[],"mappings":"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"}
@@ -10,8 +10,10 @@ export declare class WebGl2FallbackRuntime {
10
10
  private lastTime;
11
11
  private disposed;
12
12
  private channelQueue;
13
+ private elementResolver;
13
14
  private constructor();
14
15
  static create(canvas: HTMLCanvasElement): WebGl2FallbackRuntime;
16
+ setElementResolver(fn: ((key: string) => Element | null) | null): void;
15
17
  /** WGSL ignoré — effet GLSL fixe (canaux / params OK). */
16
18
  setShader(_userBody: string): Promise<void>;
17
19
  setChannel(index: 0 | 1 | 2 | 3, url: string): Promise<void>;
@@ -23,8 +25,10 @@ export declare class WebGl2FallbackRuntime {
23
25
  height: number;
24
26
  } | null;
25
27
  resize(width: number, height: number): void;
28
+ updateLiveChannels(resolveEl: (key: string) => Element | null): void;
26
29
  draw(state: WebGpuFrameState): void;
27
30
  dispose(loseContext?: boolean): void;
31
+ private ensureChannelAssets;
28
32
  private applySources;
29
33
  private assertAlive;
30
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"gl-fallback.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/functional/webgpu/gl-fallback.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AA8BtD;;GAEG;AACH,qBAAa,qBAAqB;IAChC,QAAQ,CAAC,OAAO,EAAG,QAAQ,CAAU;IACrC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,OAAO,CAAC,GAAG,CAAmB;IAC9B,OAAO,CAAC,WAAW,CAAsD;IACzE,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAoC;IAExD,OAAO;IAMP,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,qBAAqB;IAK/D,0DAA0D;IACpD,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,UAAU,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAQpD,aAAa;IAmB3B,yDAAyD;IACnD,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBxE,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAIrE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAKpC,IAAI,CAAC,KAAK,EAAE,gBAAgB;IAgB5B,OAAO,CAAC,WAAW,UAAO;IAM1B,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,WAAW;CAGpB"}
1
+ {"version":3,"file":"gl-fallback.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/functional/webgpu/gl-fallback.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AA8BtD;;GAEG;AACH,qBAAa,qBAAqB;IAChC,QAAQ,CAAC,OAAO,EAAG,QAAQ,CAAU;IACrC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,OAAO,CAAC,GAAG,CAAmB;IAC9B,OAAO,CAAC,WAAW,CAAsD;IACzE,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,eAAe,CAAkD;IAEzE,OAAO;IAMP,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,qBAAqB;IAK/D,kBAAkB,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI;IAK/D,0DAA0D;IACpD,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,UAAU,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAQpD,aAAa;IAsB3B,yDAAyD;IACnD,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAexE,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAIrE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAKpC,kBAAkB,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI;IAK7D,IAAI,CAAC,KAAK,EAAE,gBAAgB;IAmB5B,OAAO,CAAC,WAAW,UAAO;YAMZ,mBAAmB;IAQjC,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,WAAW;CAGpB"}
@@ -1,3 +1,8 @@
1
+ /** `true` si la texture existante peut être réécrite (même taille). */
2
+ export declare function channelTextureNeedsRecreate(current: {
3
+ width: number;
4
+ height: number;
5
+ } | null | undefined, nextW: number, nextH: number): boolean;
1
6
  /** Adapter WebGPU : high-performance → low-power → défaut. */
2
7
  export declare function requestBestAdapter(gpu?: GPU): Promise<GPUAdapter | null>;
3
8
  export type WebGpuFrameState = {
@@ -24,6 +29,8 @@ export declare class WebGpuRuntime {
24
29
  private channelViews;
25
30
  private channelSizes;
26
31
  private channelUrls;
32
+ private channelLastSeq;
33
+ private channelLastSrc;
27
34
  private placeholder;
28
35
  private placeholderView;
29
36
  private bindGroup;
@@ -39,6 +46,11 @@ export declare class WebGpuRuntime {
39
46
  static create(canvas: HTMLCanvasElement): Promise<WebGpuRuntime>;
40
47
  setShader(userBody: string): Promise<void>;
41
48
  setChannel(index: 0 | 1 | 2 | 3, url: string): Promise<void>;
49
+ /**
50
+ * Upload live des canaux `#id` / FrameSource / video / canvas.
51
+ * Recrée la texture seulement si la taille change (pas de createTexture chaque frame).
52
+ */
53
+ updateLiveChannels(resolveEl: (key: string) => Element | null): void;
42
54
  getTextureSize(url: string): {
43
55
  width: number;
44
56
  height: number;
@@ -46,6 +58,8 @@ export declare class WebGpuRuntime {
46
58
  resize(width: number, height: number): void;
47
59
  draw(state: WebGpuFrameState): void;
48
60
  dispose(destroyDevice?: boolean): void;
61
+ private bindElementChannel;
62
+ private uploadExternal;
49
63
  private writeUniforms;
50
64
  private destroyChannel;
51
65
  private assertAlive;
@@ -1 +1 @@
1
- {"version":3,"file":"gpu-runtime.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/functional/webgpu/gpu-runtime.ts"],"names":[],"mappings":"AAQA,8DAA8D;AAC9D,wBAAsB,kBAAkB,CACtC,GAAG,GAAE,GAAoB,GACxB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAM5B;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C,CAAC;AAsBF;;GAEG;AACH,qBAAa,aAAa;IACxB,QAAQ,CAAC,OAAO,EAAG,QAAQ,CAAU;IACrC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,eAAe,CAKrB;IACF,OAAO,CAAC,YAAY,CAKlB;IACF,OAAO,CAAC,YAAY,CAKlB;IACF,OAAO,CAAC,WAAW,CAAsD;IACzE,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,QAAQ,CAAS;IACzB,+EAA+E;IAC/E,OAAO,CAAC,iBAAiB,CAAgB;IAEzC,OAAO;IAsBP;;;OAGG;WACU,KAAK,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;WAc/B,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC;IA2BhE,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B1C,UAAU,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmClE,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAMrE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAcpC,IAAI,CAAC,KAAK,EAAE,gBAAgB;IA+C5B,OAAO,CAAC,aAAa,UAAQ;IA2B7B,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,WAAW;CAGpB"}
1
+ {"version":3,"file":"gpu-runtime.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/functional/webgpu/gpu-runtime.ts"],"names":[],"mappings":"AAaA,uEAAuE;AACvE,wBAAgB,2BAA2B,CACzC,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,EAC7D,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,OAAO,CAGT;AA6BD,8DAA8D;AAC9D,wBAAsB,kBAAkB,CACtC,GAAG,GAAE,GAAoB,GACxB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAM5B;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C,CAAC;AAsBF;;GAEG;AACH,qBAAa,aAAa;IACxB,QAAQ,CAAC,OAAO,EAAG,QAAQ,CAAU;IACrC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,eAAe,CAKrB;IACF,OAAO,CAAC,YAAY,CAKlB;IACF,OAAO,CAAC,YAAY,CAKlB;IACF,OAAO,CAAC,WAAW,CAAsD;IACzE,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,cAAc,CAKpB;IACF,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,QAAQ,CAAS;IACzB,+EAA+E;IAC/E,OAAO,CAAC,iBAAiB,CAAgB;IAEzC,OAAO;IAsBP;;;OAGG;WACU,KAAK,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;WAc/B,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC;IA2BhE,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B1C,UAAU,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBlE;;;OAGG;IACH,kBAAkB,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI;IAwB7D,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAMrE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAcpC,IAAI,CAAC,KAAK,EAAE,gBAAgB;IA+C5B,OAAO,CAAC,aAAa,UAAQ;IA2B7B,OAAO,CAAC,kBAAkB;IA8B1B,OAAO,CAAC,cAAc;IAwCtB,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,WAAW;CAGpB"}
@@ -5,5 +5,6 @@ export declare const CHANNEL_FORM_KEYS: readonly ["channel0", "channel1", "chann
5
5
  export declare const FRAME_OUT_KEYS: readonly ["frameUrl", "snapshot"];
6
6
  export declare function prefersReducedMotion(): boolean;
7
7
  export declare function toNum(v: unknown, fallback: number): number;
8
+ /** string (url / #id) | MediaRef → url | { element }. */
8
9
  export declare function channelFormValue(value: unknown): string | undefined;
9
10
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/functional/webgpu/helpers.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,mBAAmB,CAAC;AAE3C,eAAO,MAAM,aAAa,4DAMhB,CAAC;AAEX,eAAO,MAAM,cAAc,mDAAoD,CAAC;AAEhF,eAAO,MAAM,iBAAiB,2DAKpB,CAAC;AAEX,eAAO,MAAM,cAAc,mCAAoC,CAAC;AAEhE,wBAAgB,oBAAoB,IAAI,OAAO,CAK9C;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAO1D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAOnE"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/functional/webgpu/helpers.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,mBAAmB,CAAC;AAE3C,eAAO,MAAM,aAAa,4DAMhB,CAAC;AAEX,eAAO,MAAM,cAAc,mDAAoD,CAAC;AAEhF,eAAO,MAAM,iBAAiB,2DAKpB,CAAC;AAEX,eAAO,MAAM,cAAc,mCAAoC,CAAC;AAEhE,wBAAgB,oBAAoB,IAAI,OAAO,CAK9C;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAO1D;AAED,yDAAyD;AACzD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAYnE"}
@@ -72,6 +72,7 @@ export declare class SonicWebGpu extends LitElement {
72
72
  private resizeObserver;
73
73
  private intersectionObserver;
74
74
  private rebuildToken;
75
+ private frameConsumers;
75
76
  ready: boolean;
76
77
  /** Évite deux boots concurrents (IO + rAF) qui disposent le fallback. */
77
78
  private boot;
@@ -98,7 +99,11 @@ export declare class SonicWebGpu extends LitElement {
98
99
  private ensureCanvas;
99
100
  /** Jette le canvas (verrouillé webgpu/webgl) et en crée un neuf. */
100
101
  private replaceCanvas;
102
+ /** Résout `#id` dans getRootNode() puis document ; clés live `__sonic_frame_`. */
103
+ private lookupElement;
101
104
  private releaseRuntime;
105
+ /** Enregistre les producteurs live pour play-offscreen auto. */
106
+ private syncFrameConsumers;
102
107
  private rebuild;
103
108
  private syncSize;
104
109
  private syncVisibility;
@@ -120,8 +125,9 @@ export declare class SonicWebGpu extends LitElement {
120
125
  export type { SonicWebGpuBackend, SonicWebGpuBackendPrefer, SonicWebGpuConfig, SonicWebGpuKernel, SonicWebGpuOutput, } from "./types";
121
126
  export { parseBackendPrefer, parseKernel, WebGpuCompileError } from "./types";
122
127
  export { buildWgslSource, DEFAULT_MAIN_IMAGE } from "./wgsl-prelude";
123
- export { WebGpuRuntime } from "./gpu-runtime";
128
+ export { WebGpuRuntime, channelTextureNeedsRecreate } from "./gpu-runtime";
124
129
  export { WebGl2FallbackRuntime } from "./gl-fallback";
125
130
  export { Canvas2dFallbackRuntime } from "./canvas2d-fallback";
126
131
  export { ParticlesRuntime } from "./particles-runtime";
132
+ export { channelFormValue } from "./helpers";
127
133
  //# sourceMappingURL=webgpu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/functional/webgpu/webgpu.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webgpu.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/functional/webgpu/webgpu.ts"],"names":[],"mappings":"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"}
@@ -26,7 +26,22 @@ export type SonicFrameSource = {
26
26
  /** Incrémenté après chaque rendu effectif. */
27
27
  readonly frameSeq: number;
28
28
  };
29
+ /**
30
+ * Producteur de frames live qui peut rester actif hors viewport
31
+ * tant qu’un consommateur est enregistré (`sonic-3d` Lot 9).
32
+ */
33
+ export type SonicFrameConsumerHost = {
34
+ registerFrameConsumer(token?: object): void;
35
+ unregisterFrameConsumer(token?: object): void;
36
+ };
29
37
  export declare function isFrameSource(el: unknown): el is SonicFrameSource;
38
+ export declare function isFrameConsumerHost(el: unknown): el is SonicFrameConsumerHost;
39
+ /** Suit les `#id` résolus → register/unregister auprès du producteur. */
40
+ export declare class FrameConsumerRegistry {
41
+ private tokens;
42
+ sync(elements: Iterable<Element | null | undefined>): void;
43
+ clear(): void;
44
+ }
30
45
  /** Enregistre un Element sans id → clé `#__sonic_frame_N` (réutilisée). */
31
46
  export declare function registerLiveElement(el: Element): string;
32
47
  export declare function lookupLiveElement(key: string): Element | null;
@@ -1 +1 @@
1
- {"version":3,"file":"mediaRef.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/mediaRef.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC5B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,8EAA8E;IAC9E,cAAc,IAAI,iBAAiB,GAAG,IAAI,CAAC;IAC3C,8CAA8C;IAC9C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,wBAAgB,aAAa,CAAC,EAAE,EAAE,OAAO,GAAG,EAAE,IAAI,gBAAgB,CAMjE;AAQD,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,CAOvD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAQ7D;AAED,0DAA0D;AAC1D,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAY7D;AAED,uEAAuE;AACvE,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,aAAa,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,CAWzC;AAaD,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAMxD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAqBT;AAED,0DAA0D;AAC1D,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAQ5D;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CA6B/B"}
1
+ {"version":3,"file":"mediaRef.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/mediaRef.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC5B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,8EAA8E;IAC9E,cAAc,IAAI,iBAAiB,GAAG,IAAI,CAAC;IAC3C,8CAA8C;IAC9C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,uBAAuB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/C,CAAC;AAEF,wBAAgB,aAAa,CAAC,EAAE,EAAE,OAAO,GAAG,EAAE,IAAI,gBAAgB,CAMjE;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,OAAO,GAAG,EAAE,IAAI,sBAAsB,CAO7E;AAED,yEAAyE;AACzE,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAA8B;IAE5C,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAkBnD,KAAK;CAGN;AAQD,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,CAOvD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAQ7D;AAED,0DAA0D;AAC1D,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAY7D;AAED,uEAAuE;AACvE,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,aAAa,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,CAWzC;AAaD,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAMxD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAqBT;AAED,0DAA0D;AAC1D,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAQ5D;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CA6B/B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@supersoniks/concorde",
3
- "version": "4.9.98-visual-stack.0",
3
+ "version": "4.9.98-visual-stack.1",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "",
@@ -322,6 +322,42 @@
322
322
  "types": "./dist/types/core/components/functional/3d/pointer.d.ts",
323
323
  "default": "./dist/js/core/components/functional/3d/pointer.js"
324
324
  },
325
+ "./post-bind": {
326
+ "types": "./dist/types/core/components/functional/3d/post-bind.d.ts",
327
+ "default": "./dist/js/core/components/functional/3d/post-bind.js"
328
+ },
329
+ "./functional/post-bind": {
330
+ "types": "./dist/types/core/components/functional/3d/post-bind.d.ts",
331
+ "default": "./dist/js/core/components/functional/3d/post-bind.js"
332
+ },
333
+ "./functional/3d/post-bind": {
334
+ "types": "./dist/types/core/components/functional/3d/post-bind.d.ts",
335
+ "default": "./dist/js/core/components/functional/3d/post-bind.js"
336
+ },
337
+ "./post-channels": {
338
+ "types": "./dist/types/core/components/functional/3d/post-channels.d.ts",
339
+ "default": "./dist/js/core/components/functional/3d/post-channels.js"
340
+ },
341
+ "./functional/post-channels": {
342
+ "types": "./dist/types/core/components/functional/3d/post-channels.d.ts",
343
+ "default": "./dist/js/core/components/functional/3d/post-channels.js"
344
+ },
345
+ "./functional/3d/post-channels": {
346
+ "types": "./dist/types/core/components/functional/3d/post-channels.d.ts",
347
+ "default": "./dist/js/core/components/functional/3d/post-channels.js"
348
+ },
349
+ "./post-fx": {
350
+ "types": "./dist/types/core/components/functional/3d/post-fx.d.ts",
351
+ "default": "./dist/js/core/components/functional/3d/post-fx.js"
352
+ },
353
+ "./functional/post-fx": {
354
+ "types": "./dist/types/core/components/functional/3d/post-fx.d.ts",
355
+ "default": "./dist/js/core/components/functional/3d/post-fx.js"
356
+ },
357
+ "./functional/3d/post-fx": {
358
+ "types": "./dist/types/core/components/functional/3d/post-fx.d.ts",
359
+ "default": "./dist/js/core/components/functional/3d/post-fx.js"
360
+ },
325
361
  "./props": {
326
362
  "types": "./dist/types/core/components/functional/3d/props.d.ts",
327
363
  "default": "./dist/js/core/components/functional/3d/props.js"
@@ -85,7 +85,9 @@ Le viewer lit `asset` ou `src` depuis le DP — la source (fetch, upload, HF) n
85
85
  | `fit` | Fit bbox après load (défaut true) |
86
86
  | `pick` | Survol highlight + clic → event `pick` + `hit*` ; double-clic = fit |
87
87
  | `play` / `play-on-hover` | Boucle RAF |
88
- | `release-offscreen` | Dispose renderer hors viewport (défaut true) |
88
+ | `play-offscreen` | Garde RAF / runtime hors viewport (pont live `#id`) |
89
+ | `release-offscreen` | Dispose renderer hors viewport (défaut true) sauf si `play-offscreen` / consommateur live |
90
+ | `damping` | Inertie OrbitControls (défaut `0.08`, `0` = off) |
89
91
  | `dpr-max` | Cap devicePixelRatio (défaut 2) |
90
92
  | `dataProvider` / `out-data-provider` | Entrée / sortie |
91
93
  | `out-interval` | Throttle publication ms (défaut 80) |
@@ -126,3 +128,34 @@ No shared WebGL context between `sonic-3d` and `sonic-shader`.
126
128
  ```
127
129
 
128
130
  Demo: [Visual stack — 3D → shader live](#docs/_misc/visual-stack.md/visual-stack).
131
+
132
+ Un `sonic-shader` / `sonic-webgpu` qui pointe `#id` s’enregistre via `registerFrameConsumer` : le 3D **continue hors viewport** (pas de dispose). Option explicite : `play-offscreen`.
133
+
134
+ ### Arrêt net
135
+
136
+ `el.stopMotion()` coupe `autoRotate` et l’inertie OrbitControls. Quand la caméra est immobile depuis ~8 frames : event `rest` + champ out `moving: 0|1`. Attribut `damping` (défaut `0.08`, `0` = off).
137
+
138
+ ## Post FX (in-viewer)
139
+
140
+ When `post-image` is set, the scene renders to an offscreen target with a **depth texture**, then ShaderToy-style passes run inside the same Three context (`post-buffer-a`…`post-image`). Same GLSL as `sonic-shader` (`mainImage`, `iChannel0–3`, `uParam0–3`, `sonicLinearDepth`).
141
+
142
+ | Channel token | Source |
143
+ |---------------|--------|
144
+ | `scene` (default ch0) | Color render target |
145
+ | `depth` | Depth texture from the scene pass |
146
+ | `buffer-a`…`d` | Ping-pong buffers |
147
+ | URL / `#id` | External texture (same as shader live bridge) |
148
+
149
+ ```html
150
+ <sonic-3d
151
+ post-image="…GLSL…"
152
+ post-image-ch0="scene"
153
+ post-image-ch1="depth"
154
+ param0="0.5"
155
+ post-scale="1"
156
+ ></sonic-3d>
157
+ ```
158
+
159
+ Demo: [Visual stack — post depth edges](#docs/_misc/visual-stack.md/visual-stack).
160
+
161
+ Pick / orbit still use scene geometry; `frame-out` captures the **final** canvas after post.
@@ -169,3 +169,45 @@ describe("orbit.wheelAffectsZoom", () => {
169
169
  expect(orbit.wheelAffectsZoom(atMaxZoom, 1)).toBe(true);
170
170
  });
171
171
  });
172
+
173
+ describe("wantsOffscreenPlay / frame consumers", () => {
174
+ it("playOffscreen ou consumers → true", async () => {
175
+ const { wantsOffscreenPlay } = await import("./playback");
176
+ expect(wantsOffscreenPlay({ playOffscreen: false, frameConsumerCount: 0 })).toBe(
177
+ false,
178
+ );
179
+ expect(wantsOffscreenPlay({ playOffscreen: true, frameConsumerCount: 0 })).toBe(
180
+ true,
181
+ );
182
+ expect(wantsOffscreenPlay({ playOffscreen: false, frameConsumerCount: 1 })).toBe(
183
+ true,
184
+ );
185
+ });
186
+
187
+ it("registerFrameConsumer incrémente le compteur", async () => {
188
+ const el = TestUtils.bootstrap(
189
+ `<sonic-3d style="width:64px;height:64px"></sonic-3d>`,
190
+ true,
191
+ )[0] as Sonic3d;
192
+ await el.updateComplete;
193
+ expect(el.frameConsumerCount).toBe(0);
194
+ const token = {};
195
+ el.registerFrameConsumer(token);
196
+ expect(el.frameConsumerCount).toBe(1);
197
+ expect(el.playOffscreen).toBe(false);
198
+ el.unregisterFrameConsumer(token);
199
+ expect(el.frameConsumerCount).toBe(0);
200
+ });
201
+
202
+ it("stopMotion coupe autoRotate", async () => {
203
+ const el = TestUtils.bootstrap(
204
+ `<sonic-3d auto-rotate style="width:64px;height:64px"></sonic-3d>`,
205
+ true,
206
+ )[0] as Sonic3d;
207
+ await el.updateComplete;
208
+ expect(el.autoRotate).toBe(true);
209
+ el.stopMotion();
210
+ expect(el.autoRotate).toBe(false);
211
+ expect(el.moving).toBe(0);
212
+ });
213
+ });
@@ -1,9 +1,11 @@
1
1
  import { html } from "lit";
2
2
  import { customElement, state } from "lit/decorators.js";
3
3
  import { PublisherManager } from "@supersoniks/concorde/utils";
4
+ import { ensure } from "./ensure";
4
5
  import { formBind, type FormOrbit } from "./form-bind";
5
6
  import { life } from "./life";
6
7
  import { outPublish } from "./out-publish";
8
+ import { postBind } from "./post-bind";
7
9
  import type { SceneHit } from "./pick";
8
10
  import { playback } from "./playback";
9
11
  import { pointer } from "./pointer";
@@ -13,6 +15,8 @@ import { sonic3dStyles } from "./styles";
13
15
  import { propUpdate } from "./updated";
14
16
  import { wire } from "./wire";
15
17
 
18
+ /** Frames sans mouvement avant `rest` / `moving=0`. */
19
+ const REST_STILL_FRAMES = 8;
16
20
  /**
17
21
  * Viewer 3D Concorde (Three.js) — glTF/GLB, caméra orbit/perspective/ortho,
18
22
  * outputs dataProvider paresseux. Opt-in : `@supersoniks/concorde/3d`.
@@ -21,7 +25,7 @@ import { wire } from "./wire";
21
25
  export class Sonic3d extends Sonic3dProps {
22
26
  static styles = sonic3dStyles;
23
27
 
24
- @state() private errorMessage = "";
28
+ @state() errorMessage = "";
25
29
 
26
30
  /** État runtime partagé avec les helpers (lu ici pour noUnusedLocals). */
27
31
  runtime: SceneRuntime | null = null;
@@ -48,7 +52,20 @@ export class Sonic3d extends Sonic3dProps {
48
52
  snapshotSeq = 0;
49
53
  /** Contrat SonicFrameSource — incrémenté après chaque render. */
50
54
  frameSeq = 0;
55
+ lastDrawAt = 0;
51
56
  lastFormOrbit: FormOrbit | null = null;
57
+ /** Consommateurs live (`registerFrameConsumer`). */
58
+ private frameConsumers = new Set<object>();
59
+ /** 1 si caméra en mouvement, 0 sinon (publié en out). */
60
+ moving = 0;
61
+ private stillFrames = 0;
62
+ private lastMotionYaw = NaN;
63
+ private lastMotionPitch = NaN;
64
+ private lastMotionDist = NaN;
65
+
66
+ get frameConsumerCount() {
67
+ return this.frameConsumers.size;
68
+ }
52
69
 
53
70
  onFormMutation = () => {
54
71
  const data = (this.formPublisher?.get() ?? {}) as Record<string, unknown>;
@@ -137,9 +154,87 @@ export class Sonic3d extends Sonic3dProps {
137
154
  private drawFrame(now: number) {
138
155
  if (!this.runtime || !this.ready) return;
139
156
  this.frame++;
157
+ const time = (now - this.startTime) / 1000;
158
+ const timeDelta = Math.max(0, (now - this.lastDrawAt) / 1000);
159
+ this.lastDrawAt = now;
160
+ postBind.syncFrame(this as never, time, timeDelta, this.frame);
140
161
  this.runtime.render();
141
162
  this.frameSeq++;
142
- outPublish.maybePublish(this as never, now, (now - this.startTime) / 1000);
163
+ this.trackMotion(time);
164
+ outPublish.maybePublish(this as never, now, time);
165
+ }
166
+
167
+ /**
168
+ * Enregistre un consommateur live (`sonic-shader` / `sonic-webgpu` via `#id`).
169
+ * Garde le RAF hors viewport tant qu’il reste au moins un token.
170
+ */
171
+ registerFrameConsumer(token: object = {}) {
172
+ this.frameConsumers.add(token);
173
+ ensure.syncVisibility(this as never);
174
+ }
175
+
176
+ unregisterFrameConsumer(token: object = {}) {
177
+ this.frameConsumers.delete(token);
178
+ ensure.syncVisibility(this as never);
179
+ }
180
+
181
+ /**
182
+ * Coupe `autoRotate` + inertie OrbitControls.
183
+ * Émet `rest` si la caméra était en mouvement.
184
+ */
185
+ stopMotion() {
186
+ this.autoRotate = false;
187
+ this.runtime?.stopMotion();
188
+ this.stillFrames = REST_STILL_FRAMES;
189
+ if (this.moving !== 0) {
190
+ this.moving = 0;
191
+ this.dispatchEvent(
192
+ new CustomEvent("rest", {
193
+ detail: { moving: 0 },
194
+ bubbles: true,
195
+ composed: true,
196
+ }),
197
+ );
198
+ }
199
+ this.syncPlayback();
200
+ }
201
+
202
+ private trackMotion(time: number) {
203
+ if (!this.runtime) return;
204
+ const snap = this.runtime.snapshot({
205
+ time,
206
+ frame: this.frame,
207
+ hovering: this.hovering ? 1 : 0,
208
+ pointerX: this.pointerX,
209
+ pointerY: this.pointerY,
210
+ hit: this.lastHit,
211
+ });
212
+ const eps = 1e-5;
213
+ const still =
214
+ Number.isFinite(this.lastMotionYaw) &&
215
+ Math.abs(snap.yaw - this.lastMotionYaw) < eps &&
216
+ Math.abs(snap.pitch - this.lastMotionPitch) < eps &&
217
+ Math.abs(snap.distance - this.lastMotionDist) < eps &&
218
+ !this.autoRotate;
219
+ this.lastMotionYaw = snap.yaw;
220
+ this.lastMotionPitch = snap.pitch;
221
+ this.lastMotionDist = snap.distance;
222
+ if (still) {
223
+ this.stillFrames++;
224
+ if (this.stillFrames >= REST_STILL_FRAMES && this.moving !== 0) {
225
+ this.moving = 0;
226
+ this.dispatchEvent(
227
+ new CustomEvent("rest", {
228
+ detail: { moving: 0, yaw: snap.yaw, pitch: snap.pitch },
229
+ bubbles: true,
230
+ composed: true,
231
+ }),
232
+ );
233
+ }
234
+ } else {
235
+ this.stillFrames = 0;
236
+ this.moving = 1;
237
+ }
143
238
  }
144
239
 
145
240
  /** Contrat SonicFrameSource — canvas Three (preserveDrawingBuffer). */
@@ -170,12 +265,15 @@ export type {
170
265
  Sonic3dConfig,
171
266
  Sonic3dOutput,
172
267
  } from "./types";
173
- export type { SonicMediaRef, SonicFrameSource } from "@supersoniks/concorde/core/utils/mediaRef";
268
+ export type { SonicMediaRef, SonicFrameSource, SonicFrameConsumerHost } from "@supersoniks/concorde/core/utils/mediaRef";
174
269
  export {
175
270
  toMediaUrl,
176
271
  cloneMediaRef,
177
272
  isFrameSource,
273
+ isFrameConsumerHost,
274
+ FrameConsumerRegistry,
178
275
  } from "@supersoniks/concorde/core/utils/mediaRef";
276
+ export { wantsOffscreenPlay } from "./playback";
179
277
  export { frameCapture } from "./frame-capture";
180
278
  export { frameSource } from "./frame-source";
181
279
 
@@ -95,6 +95,7 @@ export const OUT_CONSUMER_KEYS = [
95
95
  "snapshot",
96
96
  /** Pont live → sonic-shader (`{ element }`), publié une fois au ready. */
97
97
  "frameSource",
98
+ "moving",
98
99
  ] as const;
99
100
 
100
101
  export type Sonic3dFormControlKey = (typeof FORM_CONTROL_KEYS)[number];
@@ -1,6 +1,6 @@
1
1
  import type { Sonic3dCameraMode } from "./constants";
2
2
  import { parse } from "./parse";
3
- import { playback } from "./playback";
3
+ import { playback, wantsOffscreenPlay } from "./playback";
4
4
  import { reload } from "./reload";
5
5
  import { SceneRuntime } from "./scene-runtime";
6
6
 
@@ -16,10 +16,13 @@ export type EnsureHost = {
16
16
  maxDistance: number;
17
17
  minPolar: number;
18
18
  maxPolar: number;
19
+ damping: number;
19
20
  loadToken: number;
20
21
  ready: boolean;
21
22
  inView: boolean;
22
23
  releaseOffscreen: boolean;
24
+ playOffscreen: boolean;
25
+ frameConsumerCount: number;
23
26
  getBoundingClientRect: () => DOMRect;
24
27
  clientWidth: number;
25
28
  clientHeight: number;
@@ -52,6 +55,7 @@ async function ensureRuntime(host: EnsureHost) {
52
55
  minPolar: reload.degToRad(host.minPolar),
53
56
  maxPolar: reload.degToRad(host.maxPolar),
54
57
  });
58
+ host.runtime.setDamping(host.damping);
55
59
  reload.applyOrbitLimits(host as never);
56
60
  syncSize(host);
57
61
  await reload.run(host as never);
@@ -71,11 +75,15 @@ function releaseRuntime(host: EnsureHost) {
71
75
  }
72
76
 
73
77
  function syncVisibility(host: EnsureHost) {
74
- if (!host.inView && host.releaseOffscreen) {
78
+ const keepOffscreen = wantsOffscreenPlay(host);
79
+ if (!host.inView && host.releaseOffscreen && !keepOffscreen) {
75
80
  releaseRuntime(host);
76
81
  return;
77
82
  }
78
- if (host.inView && (!host.runtime || host.runtime.isLost)) {
83
+ if (
84
+ (!host.runtime || host.runtime.isLost) &&
85
+ (host.inView || keepOffscreen || !host.releaseOffscreen)
86
+ ) {
79
87
  void ensureRuntime(host);
80
88
  return;
81
89
  }
@@ -2,6 +2,7 @@ import { ORBIT_CHANGE_EPSILON } from "./constants";
2
2
  import { formFields } from "./form-fields";
3
3
  import { parse } from "./parse";
4
4
  import { playback } from "./playback";
5
+ import { postBind } from "./post-bind";
5
6
  import { reload } from "./reload";
6
7
  import type { SceneRuntime } from "./runtime";
7
8
  import type { Sonic3dAsset, Sonic3dCameraMode } from "./types";
@@ -91,6 +92,7 @@ function applyFormParams(host: FormBindHost, data: Record<string, unknown>) {
91
92
 
92
93
  formFields.pushToRuntime(host, data);
93
94
  applyFormOrbit(host, data);
95
+ postBind.applyFormPost(host as never, data);
94
96
  if (needReload) void reload.run(host as never);
95
97
  }
96
98
 
@@ -1,6 +1,7 @@
1
1
  import { PublisherManager } from "@supersoniks/concorde/utils";
2
2
  import { ensure } from "./ensure";
3
3
  import { formBind } from "./form-bind";
4
+ import { wantsOffscreenPlay } from "./playback";
4
5
  import type { SceneRuntime } from "./runtime";
5
6
 
6
7
  /** Host Lit pour cycle de vie / observers / bind DP. */
@@ -9,6 +10,8 @@ export type LifeHost = {
9
10
  dataProvider: string;
10
11
  outDataProvider: string;
11
12
  releaseOffscreen: boolean;
13
+ playOffscreen: boolean;
14
+ frameConsumerCount: number;
12
15
  inView: boolean;
13
16
  runtime: SceneRuntime | null;
14
17
  camera: string;
@@ -86,7 +89,7 @@ function firstUpdated(host: LifeHost) {
86
89
  bindFormProvider(host);
87
90
  bindOutPublisher(host);
88
91
  requestAnimationFrame(() => {
89
- if (host.inView || !host.releaseOffscreen) {
92
+ if (host.inView || !host.releaseOffscreen || wantsOffscreenPlay(host)) {
90
93
  void ensure.ensureRuntime(host as never);
91
94
  }
92
95
  });
@@ -33,6 +33,7 @@ export type OutPublishHost = {
33
33
  pointerY: number;
34
34
  lastHit: SceneHit | null;
35
35
  fov: number;
36
+ moving: number;
36
37
  formPublisher: OutPublisherLike | null;
37
38
  bindOutPublisher: () => void;
38
39
  dispatchEvent: (event: Event) => boolean;
@@ -64,7 +65,7 @@ function shouldSkipFormControlOutWrite(
64
65
  }
65
66
 
66
67
  function buildOutput(host: OutPublishHost, time: number): Sonic3dOutput {
67
- return (
68
+ const base =
68
69
  host.runtime?.snapshot({
69
70
  time,
70
71
  frame: host.frame,
@@ -91,8 +92,8 @@ function buildOutput(host: OutPublishHost, time: number): Sonic3dOutput {
91
92
  distance: 0,
92
93
  yaw: 0,
93
94
  pitch: 0,
94
- }
95
- );
95
+ };
96
+ return { ...base, moving: host.moving };
96
97
  }
97
98
 
98
99
  function writePayload(host: OutPublishHost, payload: Sonic3dOutput) {