@threenative/core 0.3.0 → 0.3.2

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/README.md +10 -0
  2. package/capabilities.json +1881 -131
  3. package/dist/assets-kyoF7JlJ.d.ts +103 -0
  4. package/dist/{audio-Dp2mXpD3.d.ts → audio-BFiGneTL.d.ts} +62 -0
  5. package/dist/canvas-layer-BLVijiUJ.d.ts +62 -0
  6. package/dist/{game-CYIaKhgl.d.ts → game-XGrTzapq.d.ts} +350 -164
  7. package/dist/gpu-readback-D2iRvoe9.d.ts +112 -0
  8. package/dist/hot.d.ts +5 -3
  9. package/dist/hot.js +5 -1
  10. package/dist/index.d.ts +813 -143
  11. package/dist/index.js +4548 -941
  12. package/dist/net.d.ts +65 -0
  13. package/dist/net.js +643 -0
  14. package/dist/playtest.d.ts +29 -5
  15. package/dist/playtest.js +181 -35
  16. package/dist/react.d.ts +4 -2
  17. package/dist/{canvas-layer-CtrZHgIh.d.ts → renderer-C6hqZpoG.d.ts} +237 -75
  18. package/dist/world.d.ts +203 -4
  19. package/dist/world.js +2536 -25
  20. package/gpl/LICENSE.GPL +117 -0
  21. package/gpl/convert.py +192 -0
  22. package/gpl/recipes/_common.py +169 -0
  23. package/gpl/recipes/bake_ao.py +111 -0
  24. package/gpl/recipes/decimate.py +64 -0
  25. package/gpl/recipes/retarget.py +131 -0
  26. package/gpl/recipes/unwrap.py +71 -0
  27. package/mcp/blender-server.mjs +632 -0
  28. package/mcp/blender.mjs +27 -0
  29. package/mcp/engine-server.mjs +271 -23
  30. package/mcp/engine.mjs +15 -7
  31. package/mcp/install.d.mts +37 -0
  32. package/mcp/install.mjs +94 -26
  33. package/mcp/servers.d.mts +34 -0
  34. package/mcp/servers.mjs +110 -9
  35. package/package.json +36 -8
  36. package/patches/three@0.185.1.patch +249 -14
  37. package/scripts/ensure-mcp.mjs +20 -13
  38. package/scripts/bundle-engine-mcp.mjs +0 -15
  39. package/scripts/generate-version.mjs +0 -13
@@ -1,5 +1,4 @@
1
- import * as three from 'three';
2
- import { Object3D, Matrix4, Camera, Vector2, Vector3, Scene, OrthographicCamera } from 'three';
1
+ import { Object3D, Matrix4, Camera } from 'three';
3
2
  import { MRTNode, Node } from 'three/webgpu';
4
3
 
5
4
  /**
@@ -72,6 +71,8 @@ interface IFrameSurfaceState {
72
71
  * false under a pinned scale, which has no floor to reach.
73
72
  */
74
73
  readonly atFloor: boolean;
74
+ /** Compilation overlapped the measured window; automatic scaling waits for a clean window. */
75
+ readonly compiling?: boolean;
75
76
  }
76
77
  interface IFrameBudgetSummary {
77
78
  readonly samples: number;
@@ -112,6 +113,8 @@ interface IFrameBudgetWindow {
112
113
  * frame that genuinely cost no GPU time are different facts, and a zero would merge them.
113
114
  */
114
115
  readonly gpuMs?: number;
116
+ /** Age of the resolved GPU timestamp in Three.js frame IDs; absent means unobservable. */
117
+ readonly gpuAgeFrames?: number;
115
118
  }
116
119
  interface IFrameBudgetOptions {
117
120
  /** Presented frames per report window. Default 300. */
@@ -137,6 +140,8 @@ interface IFrameBudgetOptions {
137
140
  readonly readSurface?: () => IFrameSurfaceState;
138
141
  /** Reads the last resolved GPU frame time, called once per reported window. */
139
142
  readonly readGpuMs?: () => number | undefined;
143
+ /** Reads the successful GPU query frame age, not the age of the last resolve attempt. */
144
+ readonly readGpuAgeFrames?: () => number | undefined;
140
145
  }
141
146
  /**
142
147
  * Accumulates one frame at a time and reports windowed attribution.
@@ -176,6 +181,170 @@ declare class FrameBudget {
176
181
  window(): IFrameBudgetWindow;
177
182
  }
178
183
 
184
+ /**
185
+ * A bounded observation of the pipelines a Three.js renderer actually asked the GPU device to make.
186
+ *
187
+ * This module deliberately knows the shape of Three's private render object, but not its cache-key
188
+ * algorithm. Three owns the identity; the collector only reads the object at the backend boundary
189
+ * where a cache miss becomes a real device creation. That keeps a material label from becoming a
190
+ * pipeline key and makes the same observation useful on browser WebGPU and the native binding.
191
+ *
192
+ * The backend boundary alone is not the whole device, and a census that claims otherwise is
193
+ * wrong by exactly the pipelines it cannot see: Three's texture pass utils build mipmap transfer
194
+ * pipelines straight on the device, which is why a Bayview native capture logged 94 device
195
+ * creations against 92 renderer events. So the device's own creation methods are observed too,
196
+ * with creations reached through the wrapped backend attributed to their backend event rather
197
+ * than counted twice, and a direct creation reported with the label the device was given, an
198
+ * explicitly unknown pass and unknown provenance rather than the render object that happened to
199
+ * be drawing when a texture uploaded.
200
+ */
201
+ declare const PIPELINE_CENSUS_VERSION: 1;
202
+ declare const PIPELINE_CENSUS_CAPABILITY: "runtime.pipelineCensus";
203
+ declare const DEFAULT_PIPELINE_CENSUS_LIMIT = 512;
204
+ type PipelineCensusStatus = "created" | "failed" | "pending";
205
+ type PipelineCensusMode = "sync" | "async";
206
+ interface IPipelineShaderObservation {
207
+ readonly bytes: number;
208
+ readonly hash: string;
209
+ }
210
+ interface IPipelineProvenance {
211
+ readonly material?: {
212
+ readonly id?: number;
213
+ readonly name?: string;
214
+ readonly type?: string;
215
+ };
216
+ readonly object?: {
217
+ readonly id?: number;
218
+ readonly name?: string;
219
+ readonly uuid?: string;
220
+ };
221
+ /** True when no stable material/object label was available at the creation boundary. */
222
+ readonly unknown: boolean;
223
+ }
224
+ interface IPipelineCensusEvent {
225
+ /** Monotonic sequence, useful for detecting a dropped event in a merged native log. */
226
+ readonly sequence: number;
227
+ /** Three's program identity: the generated vertex/fragment source pair. */
228
+ readonly programIdentity: string;
229
+ /** Backend identity, separate from the program identity and from the material label. */
230
+ readonly pipelineIdentity: string;
231
+ readonly kind: "compute" | "render";
232
+ readonly pass: string;
233
+ readonly mode: PipelineCensusMode;
234
+ readonly status: PipelineCensusStatus;
235
+ readonly vertex?: IPipelineShaderObservation;
236
+ readonly fragment?: IPipelineShaderObservation;
237
+ readonly compute?: IPipelineShaderObservation;
238
+ readonly provenance: IPipelineProvenance;
239
+ /** The label the device was handed, when one was observed. A label is never read as a pass. */
240
+ readonly label?: string;
241
+ /** Structural inputs observed beside the generated shader, not a guessed reason. */
242
+ readonly reasons: readonly string[];
243
+ /** Host monotonic milliseconds relative to the capture origin. */
244
+ readonly startedMs: number;
245
+ readonly settledMs?: number;
246
+ /** Synchronous device-call wall time; absent for an async promise. */
247
+ readonly serviceMs?: number;
248
+ /** Promise latency is retained as latency, never labelled native compiler time. */
249
+ readonly promiseMs?: number;
250
+ readonly error?: string;
251
+ /** Whether this event settled before the first present boundary. */
252
+ readonly beforeFirstPresent?: boolean;
253
+ }
254
+ interface IPipelineCensusCounts {
255
+ readonly lookups: number;
256
+ readonly creations: number;
257
+ readonly failures: number;
258
+ readonly pending: number;
259
+ readonly uniquePrograms: number;
260
+ readonly uniquePipelines: number;
261
+ readonly recordedEvents: number;
262
+ readonly droppedEvents: number;
263
+ /**
264
+ * Every creation seen at the device, including those attributed to a backend event. Absent
265
+ * when the device could not be observed at all, so no reader mistakes silence for zero.
266
+ */
267
+ readonly deviceCreations?: number;
268
+ /** Creations seen only at the device, never reached through the wrapped backend methods. */
269
+ readonly directCreations?: number;
270
+ }
271
+ interface IPipelineCensus {
272
+ readonly version: typeof PIPELINE_CENSUS_VERSION;
273
+ readonly complete: boolean;
274
+ readonly overflowed: boolean;
275
+ readonly unsupported: boolean;
276
+ readonly limit: number;
277
+ readonly clock: {
278
+ readonly originMs: number;
279
+ readonly source: "performance" | "date";
280
+ };
281
+ readonly build: {
282
+ readonly identity: string;
283
+ };
284
+ readonly adapter: {
285
+ readonly identity: string;
286
+ readonly thermal: string;
287
+ };
288
+ readonly backend: {
289
+ readonly kind: "webgpu" | "webgl2";
290
+ readonly identity: string;
291
+ };
292
+ readonly firstPresent?: {
293
+ readonly boundaryMs: number;
294
+ readonly eventsSettled: number;
295
+ };
296
+ readonly counts: IPipelineCensusCounts;
297
+ readonly events: readonly IPipelineCensusEvent[];
298
+ readonly incompleteReasons: readonly string[];
299
+ }
300
+ interface IPipelineCensusOptions {
301
+ readonly adapterIdentity?: string;
302
+ readonly buildIdentity?: string;
303
+ readonly kind: "webgpu" | "webgl2";
304
+ readonly limit?: number;
305
+ readonly now?: () => number;
306
+ readonly backendIdentity?: string;
307
+ readonly thermalIdentity?: string;
308
+ }
309
+ interface IRendererHookTarget {
310
+ backend?: unknown;
311
+ renderObject?: (...args: unknown[]) => unknown;
312
+ }
313
+ /**
314
+ * Create and install a bounded census. The returned object is intentionally small: renderers own
315
+ * lifecycle and callers only need `snapshot()`, `withRenderObject()`, and `firstPresent()`.
316
+ */
317
+ declare function createPipelineCensus(options: IPipelineCensusOptions): PipelineCensus;
318
+ declare class PipelineCensus {
319
+ #private;
320
+ constructor(options: IPipelineCensusOptions);
321
+ /** Install the backend creation hooks and the render-object context wrapper once. */
322
+ install(backendValue: unknown): () => void;
323
+ /** Install every renderer-side hook owned by this capture. */
324
+ installRenderer(renderer: IRendererHookTarget): void;
325
+ /** Restore private hooks while retaining the immutable capture already recorded. */
326
+ dispose(): void;
327
+ /** Wrap Three's public render-object method so compileAsync retains the authored pass id. */
328
+ withRenderObject<T>(args: readonly unknown[], callback: () => T): T;
329
+ /** Mark the first renderer render call as the first-present boundary. */
330
+ firstPresent(): void;
331
+ snapshot(): IPipelineCensus;
332
+ }
333
+
334
+ /** The marker shared by alpha-antialiasing logs, playtests, and native diagnostics. */
335
+ declare const ALPHA_ANTIALIASING_MARKER = "TN_ALPHA_ANTIALIASING";
336
+ interface IAlphaAntialiasingReport {
337
+ /** True once at least one cutout material has been put on the coverage mask. */
338
+ readonly applied: boolean;
339
+ readonly marker: typeof ALPHA_ANTIALIASING_MARKER;
340
+ /** Empty when applied; otherwise why the convention did nothing, and what to change. */
341
+ readonly reason: string;
342
+ /** The sample count the decision was made against. One means there is no coverage mask. */
343
+ readonly sampleCount: number;
344
+ /** How many distinct cutout materials this renderer has converted. */
345
+ readonly materials: number;
346
+ }
347
+
179
348
  /** The output name shared by the scene pass and temporal consumers. */
180
349
  declare const VELOCITY_OUTPUT_NAME = "velocity";
181
350
  /**
@@ -258,6 +427,8 @@ declare const RENDER_CHAIN_MARKER = "TN_RENDER_CHAIN";
258
427
  /** Canonical order for the stages a game may request. */
259
428
  declare const RENDER_CHAIN_STAGE_ORDER: readonly ["probeVolume", "ambientOcclusion", "ssgi", "godRays", "ssr", "denoise", "temporalReproject", "taa", "traa", "motionBlur", "sharpen", "bloom", "vignette", "lensDistortion", "sparkle", "gradualBackground"];
260
429
  type RenderChainStageName = (typeof RENDER_CHAIN_STAGE_ORDER)[number];
430
+ /** Built-in stage names plus an opaque id owned by the game that supplied the stage. */
431
+ type RenderChainStageId = RenderChainStageName | (string & {});
261
432
  type RenderChainTier = "high" | "medium" | "low" | "off";
262
433
  type RenderChainTierRequest = RenderChainTier | "auto";
263
434
  type RenderChainSource = "pinned" | "auto";
@@ -324,8 +495,8 @@ interface IRenderChainVelocityRequest {
324
495
  source?: Exclude<RenderChainVelocitySource, null>;
325
496
  }
326
497
  interface IRenderChainRequest {
327
- /** Stages are sorted into {@link RENDER_CHAIN_STAGE_ORDER}; an empty list is a no-op. */
328
- stages?: readonly string[];
498
+ /** Built-ins use canonical order; authored stages use their supplied anchor order. */
499
+ stages?: readonly RenderChainStageId[];
329
500
  /** A fixed tier pins quality; `auto` enables the measured frame-budget ladder. */
330
501
  tier?: RenderChainTierRequest;
331
502
  velocity?: IRenderChainVelocityRequest;
@@ -338,7 +509,11 @@ interface IRenderChainStageContext {
338
509
  readonly quality: (typeof RENDER_CHAIN_TIERS)[RenderChainTier];
339
510
  }
340
511
  interface IRenderChainStage {
341
- readonly name: RenderChainStageName;
512
+ readonly name: RenderChainStageId;
513
+ /** Place an authored stage immediately before this built-in or supplied stage. */
514
+ readonly before?: RenderChainStageId;
515
+ /** Place an authored stage immediately after this built-in or supplied stage. */
516
+ readonly after?: RenderChainStageId;
342
517
  readonly build: (input: unknown, context: IRenderChainStageContext) => unknown;
343
518
  /** Stages below this tier are named as dropped instead of silently changing the graph. */
344
519
  readonly minimumTier?: RenderChainTier;
@@ -348,9 +523,11 @@ interface IRenderChainStage {
348
523
  readonly readVelocityResult?: (node: unknown) => IRenderChainVelocityResult | undefined;
349
524
  /** Defaults from the canonical stage name for the temporal stages. */
350
525
  readonly requiresVelocity?: boolean;
526
+ /** Release resources allocated while building this stage's graph. */
527
+ readonly dispose?: () => void;
351
528
  }
352
529
  interface IRenderChainDroppedStage {
353
- readonly name: RenderChainStageName;
530
+ readonly name: RenderChainStageId;
354
531
  readonly reason: string;
355
532
  }
356
533
  interface IRenderChainVelocityReport {
@@ -361,10 +538,14 @@ interface IRenderChainVelocityReport {
361
538
  readonly measurementFrame?: number;
362
539
  }
363
540
  interface IRenderChainApplied {
541
+ readonly contributions: readonly {
542
+ readonly graphOutputChanged: boolean;
543
+ readonly name: RenderChainStageId;
544
+ }[];
364
545
  readonly dropped: readonly IRenderChainDroppedStage[];
365
- readonly requested: readonly RenderChainStageName[];
546
+ readonly requested: readonly RenderChainStageId[];
366
547
  readonly source: RenderChainSource;
367
- readonly stages: readonly RenderChainStageName[];
548
+ readonly stages: readonly RenderChainStageId[];
368
549
  readonly tier: RenderChainTier;
369
550
  readonly velocity: IRenderChainVelocityReport;
370
551
  }
@@ -373,6 +554,8 @@ interface IRenderChainMarker {
373
554
  readonly marker: typeof RENDER_CHAIN_MARKER;
374
555
  }
375
556
  interface IRenderChainBudgetWindow {
557
+ /** Compilation-contaminated windows remain observable but cannot drive quality changes. */
558
+ readonly surface?: Pick<NonNullable<IFrameBudgetWindow["surface"]>, "compiling">;
376
559
  readonly phases: {
377
560
  readonly render: Pick<IFrameBudgetWindow["phases"]["render"], "p95">;
378
561
  };
@@ -380,6 +563,8 @@ interface IRenderChainBudgetWindow {
380
563
  interface IRenderChainOptions {
381
564
  readonly renderer: IRenderChainRenderer;
382
565
  readonly input?: unknown;
566
+ /** Explicit scene pass for output retargeting; avoids traversing a composed graph to find it. */
567
+ readonly worldPass?: unknown;
383
568
  readonly report?: (line: string) => void;
384
569
  readonly request?: IRenderChainRequest;
385
570
  readonly stages?: readonly IRenderChainStage[];
@@ -459,7 +644,25 @@ interface IRendererLike {
459
644
  * It is on the wrapper for one reason: without it a game must cast through `.raw` to warm up,
460
645
  * and a game that cannot warm up without a cast will not warm up.
461
646
  */
462
- compileAsync(scene: Object3D, camera: Camera): Promise<void>;
647
+ compileAsync(scene: Object3D, camera: Camera, targetScene?: Object3D): Promise<void>;
648
+ /** A warm-up may outlive its caller's timeout; its render targets must remain alive. */
649
+ readonly compiling?: boolean;
650
+ /** Compilation starts, including work that settles entirely between rendered frames. */
651
+ readonly compileCount?: number;
652
+ /** The bounded, fail-closed pipeline observation for this renderer, when enabled. */
653
+ readonly pipelineCensus?: () => IPipelineCensus;
654
+ /**
655
+ * What alpha antialiasing did with the multisampled surface, and why, when it did nothing.
656
+ *
657
+ * MSAA resolves triangle edges; a cutout silhouette is carved inside the triangle by an alpha
658
+ * test and resolves through the coverage mask or not at all. This is where to read whether the
659
+ * samples this surface pays for reach the game's foliage, fences and hair.
660
+ *
661
+ * Optional on the interface for the same reason the render-chain seams are: a stub renderer
662
+ * implements the drawing contract, not every report. `createRenderer` always provides it, and
663
+ * the `TN_ALPHA_ANTIALIASING` marker is printed either way, so nothing is only readable here.
664
+ */
665
+ alphaAntialiasing?: () => IAlphaAntialiasingReport;
463
666
  compute(node: unknown): void;
464
667
  /**
465
668
  * Copies one GPU storage attribute back to the CPU, asynchronously.
@@ -499,10 +702,12 @@ interface IRendererLike {
499
702
  * caller reads whatever the last resolve produced.
500
703
  */
501
704
  gpuFrameMs(): number | undefined;
705
+ /** Age in Three.js frame IDs of the resolved render timestamp; absent when unobservable. */
706
+ gpuFrameAge?(): number | undefined;
502
707
  /** Starts a resolve of the GPU timestamps for the frames drawn since the last call. */
503
708
  resolveGpuFrame(): void;
504
709
  /**
505
- * Moves the drawing-buffer scale, re-applying it immediately. The adaptive scaler is the only
710
+ * Moves the drawing-buffer scale, deferring while a compile retains its targets. The adaptive scaler is the only
506
711
  * caller; a pinned game never reaches this, which is what makes "pinned" mean pinned.
507
712
  */
508
713
  setResolutionScale(scale: number, scaleSource: "auto" | "auto-pinned"): void;
@@ -521,6 +726,13 @@ interface IRendererPlatformSource {
521
726
  readSize(canvas: HTMLCanvasElement): readonly [width: number, height: number];
522
727
  }
523
728
  interface IRendererOptions {
729
+ /**
730
+ * Resolves alpha-tested cutout silhouettes — foliage, fences, hair — through the multisample
731
+ * coverage mask instead of a binary `discard`. Defaults to true, and does nothing at all on a
732
+ * single-sampled surface, which it reports rather than pretends. Godot's
733
+ * `alpha_antialiasing_mode`, in Three.js's `alphaToCoverage`.
734
+ */
735
+ alphaAntialiasing?: boolean;
524
736
  /** Requests multisample antialiasing from the renderer. Defaults to true. */
525
737
  antialias?: boolean;
526
738
  canvas?: HTMLCanvasElement;
@@ -530,15 +742,22 @@ interface IRendererOptions {
530
742
  /** Whether the game pinned that scale or the engine chose it. Reported, never inferred. */
531
743
  scaleSource?: "pinned" | "auto" | "auto-pinned";
532
744
  /**
533
- * Physical pixels per logical (CSS) pixel of the canvas this draws into. Default 1.
534
- *
535
- * Native reports a real `devicePixelRatio` and a canvas measured in logical pixels, so the
536
- * buffer is `logical × pixelRatio × resolutionScale` — arithmetic that reproduces the physical
537
- * surface exactly and moves no tuned game's frame. Web keeps the default of 1 and its
538
- * intentional DPR-1 buffer; unifying web onto real device density is a separate decision with
539
- * its own visuals gate, and this option is where it would be made.
745
+ * Physical pixels per logical (CSS) pixel of the canvas this draws into. Default: the device's
746
+ * own `devicePixelRatio` on both runtimes (unified 2026-09-01; web's old DPR-1 buffer read as
747
+ * pixelation on any HiDPI display). The resolution scaler composes on top, so an unaffordable
748
+ * density is trimmed by scaler rungs rather than by the developer. An explicit value wins on
749
+ * both runtimes.
540
750
  */
541
751
  pixelRatio?: number;
752
+ /** Where convention markers go. Defaults to the console, exactly as the render chain reports. */
753
+ report?: (line: string) => void;
754
+ /**
755
+ * Bounded pipeline detail for a real launch capture. It is on by default so a town does not
756
+ * need an instrumented build; pass `false` for an identical-build overhead control.
757
+ */
758
+ pipelineCensus?: false | {
759
+ readonly limit?: number;
760
+ };
542
761
  source?: IRendererPlatformSource;
543
762
  webgpuFactory?: (canvas: HTMLCanvasElement, options: Readonly<{
544
763
  antialias: boolean;
@@ -548,61 +767,4 @@ interface IRendererOptions {
548
767
  }>) => unknown;
549
768
  }
550
769
 
551
- interface IViewportSize {
552
- readonly aspect: number;
553
- readonly height: number;
554
- readonly width: number;
555
- }
556
- interface IViewportInsets {
557
- readonly bottom: number;
558
- readonly left: number;
559
- readonly right: number;
560
- readonly top: number;
561
- }
562
- interface IViewportSafeArea extends IViewportInsets {
563
- /** The safe rectangle in drawable pixel coordinates, with y measured from the top edge. */
564
- readonly height: number;
565
- readonly source: "full-drawable-fallback" | "measured";
566
- readonly width: number;
567
- readonly x: number;
568
- readonly y: number;
569
- }
570
- interface IViewportOptions {
571
- readonly camera: Camera;
572
- readonly renderer: IRendererLike;
573
- readonly source?: IViewportPlatformSource;
574
- }
575
- type ViewportResizeHandler = (size: IViewportSize) => void;
576
- interface IViewportPlatformSource {
577
- observeResize(canvas: HTMLCanvasElement, resize: () => void): () => void;
578
- readSize(canvas: HTMLCanvasElement): IViewportSize;
579
- readSafeArea?(canvas: HTMLCanvasElement, size: IViewportSize): IViewportInsets | undefined;
580
- }
581
- declare class Viewport {
582
- #private;
583
- readonly camera: Camera;
584
- readonly renderer: IRendererLike;
585
- constructor(options: IViewportOptions);
586
- get size(): IViewportSize;
587
- get safeArea(): IViewportSafeArea;
588
- projectPosition(screen: Vector2, z?: number, target?: Vector3): Vector3;
589
- unprojectPosition(world: Vector3, target?: Vector2): Vector2;
590
- onResize(handler: ViewportResizeHandler): () => void;
591
- resize(): void;
592
- dispose(): void;
593
- }
594
-
595
- /** A Godot-shaped render surface that is independent of the world camera and post pipeline. */
596
- declare class CanvasLayer {
597
- #private;
598
- readonly scene: Scene<three.Object3DEventMap>;
599
- readonly camera: OrthographicCamera;
600
- /** Declares that this layer covers the framebuffer, allowing the world pass to be skipped. */
601
- opaque: boolean;
602
- constructor(viewport: Pick<Viewport, "onResize" | "size">);
603
- dispose(): void;
604
- /** Subscribe to drawable-size changes after this layer has updated its camera. */
605
- onResize(handler: (size: IViewportSize) => void): () => void;
606
- }
607
-
608
- export { type RenderChainTier as A, type RenderChainTierRequest as B, CanvasLayer as C, type RenderChainVelocitySource as D, VELOCITY_PREVIOUS_BONE_MATRICES as E, FRAME_BUDGET_MARKER as F, VELOCITY_PREVIOUS_INSTANCE_MATRICES as G, VELOCITY_PREVIOUS_WORLD_MATRIX as H, type IRendererLike as I, VelocityTracker as J, ensureVelocityOutput as K, prewarm as L, readRenderChainObservation as M, readRenderChainReport as N, readVelocityPreviousBoneMatrices as O, readVelocityPreviousMatrices as P, readVelocityPreviousWorldMatrix as Q, RENDER_CHAIN_MARKER as R, velocityTexture as S, withVelocityContext as T, Viewport as U, VELOCITY_OUTPUT_NAME as V, type IRendererOptions as W, type IViewportOptions as X, FRAME_BUDGET_PHASES as a, FRAME_HITCH_MARKER as b, FrameBudget as c, type FrameBudgetPhase as d, type IFrameBudgetOptions as e, type IFrameBudgetSummary as f, type IFrameBudgetWindow as g, type IFramePhaseSample as h, type IRenderChainApplied as i, type IRenderChainBudgetWindow as j, type IRenderChainDroppedStage as k, type IRenderChainOptions as l, type IRenderChainRenderer as m, type IRenderChainRequest as n, type IRenderChainStage as o, type IRenderChainStageContext as p, type IRenderChainVelocityMeasurement as q, type IRenderChainVelocityReport as r, type IRenderChainVelocityRequest as s, type IRenderChainVelocityResult as t, type IVelocityRenderPass as u, RENDER_CHAIN_STAGE_ORDER as v, RENDER_CHAIN_TIERS as w, RenderChain as x, type RenderChainSource as y, type RenderChainStageName as z };
770
+ export { readRenderChainObservation as $, type IVelocityRenderPass as A, PIPELINE_CENSUS_VERSION as B, PipelineCensus as C, DEFAULT_PIPELINE_CENSUS_LIMIT as D, type PipelineCensusMode as E, FRAME_BUDGET_MARKER as F, type PipelineCensusStatus as G, RENDER_CHAIN_STAGE_ORDER as H, type IRendererLike as I, RENDER_CHAIN_TIERS as J, RenderChain as K, type RenderChainSource as L, type RenderChainStageId as M, type RenderChainStageName as N, type RenderChainTier as O, PIPELINE_CENSUS_CAPABILITY as P, type RenderChainTierRequest as Q, RENDER_CHAIN_MARKER as R, type RenderChainVelocitySource as S, VELOCITY_PREVIOUS_BONE_MATRICES as T, VELOCITY_PREVIOUS_INSTANCE_MATRICES as U, VELOCITY_OUTPUT_NAME as V, VELOCITY_PREVIOUS_WORLD_MATRIX as W, VelocityTracker as X, createPipelineCensus as Y, ensureVelocityOutput as Z, prewarm as _, FRAME_BUDGET_PHASES as a, readRenderChainReport as a0, readVelocityPreviousBoneMatrices as a1, readVelocityPreviousMatrices as a2, readVelocityPreviousWorldMatrix as a3, velocityTexture as a4, withVelocityContext as a5, type IRendererOptions as a6, FRAME_HITCH_MARKER as b, FrameBudget as c, type FrameBudgetPhase as d, type IFrameBudgetOptions as e, type IFrameBudgetSummary as f, type IFrameBudgetWindow as g, type IFramePhaseSample as h, type IPipelineCensus as i, type IPipelineCensusCounts as j, type IPipelineCensusEvent as k, type IPipelineCensusOptions as l, type IPipelineProvenance as m, type IPipelineShaderObservation as n, type IRenderChainApplied as o, type IRenderChainBudgetWindow as p, type IRenderChainDroppedStage as q, type IRenderChainOptions as r, type IRenderChainRenderer as s, type IRenderChainRequest as t, type IRenderChainStage as u, type IRenderChainStageContext as v, type IRenderChainVelocityMeasurement as w, type IRenderChainVelocityReport as x, type IRenderChainVelocityRequest as y, type IRenderChainVelocityResult as z };