layershift 0.2.1 → 0.3.0

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 (38) hide show
  1. package/README.md +14 -0
  2. package/dist/components/layershift.js +1782 -653
  3. package/dist/npm/layershift.es.js +5212 -2583
  4. package/dist/types/components/layershift/layershift-element.d.ts +10 -8
  5. package/dist/types/components/layershift/layershift-element.d.ts.map +1 -1
  6. package/dist/types/components/layershift/lifecycle.d.ts +77 -0
  7. package/dist/types/components/layershift/lifecycle.d.ts.map +1 -0
  8. package/dist/types/components/layershift/portal-element.d.ts +10 -8
  9. package/dist/types/components/layershift/portal-element.d.ts.map +1 -1
  10. package/dist/types/components/layershift/types.d.ts +8 -0
  11. package/dist/types/components/layershift/types.d.ts.map +1 -1
  12. package/dist/types/gpu-backend.d.ts +37 -0
  13. package/dist/types/gpu-backend.d.ts.map +1 -0
  14. package/dist/types/jfa-distance-field.d.ts +78 -0
  15. package/dist/types/jfa-distance-field.d.ts.map +1 -0
  16. package/dist/types/parallax-renderer-webgpu.d.ts +103 -0
  17. package/dist/types/parallax-renderer-webgpu.d.ts.map +1 -0
  18. package/dist/types/parallax-renderer.d.ts +54 -91
  19. package/dist/types/parallax-renderer.d.ts.map +1 -1
  20. package/dist/types/portal-renderer-webgpu.d.ts +199 -0
  21. package/dist/types/portal-renderer-webgpu.d.ts.map +1 -0
  22. package/dist/types/portal-renderer.d.ts +64 -65
  23. package/dist/types/portal-renderer.d.ts.map +1 -1
  24. package/dist/types/precomputed-depth.d.ts +9 -51
  25. package/dist/types/precomputed-depth.d.ts.map +1 -1
  26. package/dist/types/quality.d.ts +95 -0
  27. package/dist/types/quality.d.ts.map +1 -0
  28. package/dist/types/render-pass-webgpu.d.ts +76 -0
  29. package/dist/types/render-pass-webgpu.d.ts.map +1 -0
  30. package/dist/types/render-pass.d.ts +171 -0
  31. package/dist/types/render-pass.d.ts.map +1 -0
  32. package/dist/types/renderer-base.d.ts +124 -0
  33. package/dist/types/renderer-base.d.ts.map +1 -0
  34. package/dist/types/webgl-utils.d.ts +29 -0
  35. package/dist/types/webgl-utils.d.ts.map +1 -0
  36. package/dist/types/webgpu-utils.d.ts +42 -0
  37. package/dist/types/webgpu-utils.d.ts.map +1 -0
  38. package/package.json +38 -4
@@ -7,40 +7,46 @@
7
7
  * and current mouse/gyro input, creating a continuous parallax effect
8
8
  * with no discrete layer banding.
9
9
  *
10
- * ## Rendering pipeline (per frame)
10
+ * ## Multi-pass architecture
11
11
  *
12
- * 1. The video element's current frame is uploaded to the GPU via
13
- * `gl.texImage2D`, providing the color frame at native resolution.
12
+ * The renderer uses a pass-based pipeline where each render pass is a
13
+ * self-contained unit with its own shader program and uniform cache,
14
+ * sharing a single fullscreen quad VAO and depth textures:
14
15
  *
15
- * 2. The depth interpolator produces a Uint8Array for the current
16
- * playback time (interpolated between precomputed 5fps keyframes,
17
- * bilateral-filtered on the CPU, then quantized to 0-255).
18
- * This is copied into a single-channel R8 texture on the GPU.
16
+ * 1. **Bilateral filter pass** edge-preserving depth smoothing.
17
+ * Reads raw depth (UNIT 2), writes filtered depth (UNIT 1) via FBO.
18
+ * Runs at RVFC rate (~5fps, only when depth data changes).
19
19
  *
20
- * 3. The InputHandler provides a smoothed {x, y} offset in [-1, 1].
21
- * This is passed to the shader as the uOffset uniform.
20
+ * 2. **Parallax pass** per-pixel depth-based displacement.
21
+ * Reads video (UNIT 0) + filtered depth (UNIT 1), renders to screen.
22
+ * Runs at RAF rate (60-120fps).
22
23
  *
23
- * 4. The fragment shader samples the depth map at each pixel's UV,
24
- * computes a UV displacement proportional to (1 - depth) * strength,
25
- * and samples the video texture at the displaced coordinates.
26
- * Near objects (depth ≈ 0) move more; far objects (depth ≈ 1) less.
27
- *
28
- * 5. When POM is enabled, the shader ray-marches through the depth
29
- * field to find the correct surface intersection, producing
30
- * self-occlusion (near objects cover far objects behind them).
24
+ * Each pass is created by a factory function and conforms to a minimal
25
+ * interface. Adding a new post-processing pass requires only a new
26
+ * factory function and wiring it into the render loop.
31
27
  *
32
28
  * ## Texture memory
33
29
  *
34
- * Only 2 textures per frame: 1 video texture (uploaded from HTMLVideoElement)
35
- * + 1 depth texture (R8 format, uploaded only when depth changes at ~5fps).
30
+ * 3 textures total: 1 video (RGBA), 1 raw depth (R8), 1 filtered depth (R8).
31
+ * The raw depth texture is uploaded from CPU when depth changes (~5fps).
32
+ * The filtered depth texture is rendered via FBO bilateral filter pass.
36
33
  */
37
- import type { ParallaxInput } from './input-handler';
34
+ import type { QualityTier } from './quality';
35
+ import { RendererBase } from './renderer-base';
38
36
  /** Configuration subset relevant to the parallax renderer. */
39
37
  export interface ParallaxRendererConfig {
40
38
  parallaxStrength: number;
41
39
  pomEnabled: boolean;
42
40
  pomSteps: number;
43
41
  overscanPadding: number;
42
+ /**
43
+ * Adaptive quality tier. Controls render resolution, depth resolution,
44
+ * sample counts, and bilateral kernel size.
45
+ * - 'auto' — probe device capabilities and classify automatically.
46
+ * - 'high' / 'medium' / 'low' — use the specified tier directly.
47
+ * - undefined — defaults to 'auto'.
48
+ */
49
+ quality?: 'auto' | QualityTier;
44
50
  /**
45
51
  * Depth-adaptive shader parameters.
46
52
  * When omitted, calibrated defaults matching the current hardcoded values
@@ -52,39 +58,15 @@ export interface ParallaxRendererConfig {
52
58
  dofStart?: number;
53
59
  dofStrength?: number;
54
60
  }
55
- export declare class ParallaxRenderer {
56
- /** Debounce delay for resize events to avoid layout thrashing. */
57
- private static readonly RESIZE_DEBOUNCE_MS;
58
- /** Compile-time upper bound for the POM for-loop in GLSL. */
59
- private static readonly MAX_POM_STEPS;
60
- private readonly canvas;
61
+ export declare class ParallaxRenderer extends RendererBase {
61
62
  private gl;
62
- private program;
63
- private uniforms;
64
- private vao;
65
- private videoTexture;
66
- private depthTexture;
67
- private readonly container;
68
- private depthWidth;
69
- private depthHeight;
70
- private videoAspect;
71
- private readDepth;
72
- private readInput;
73
- private playbackVideo;
74
- /**
75
- * Optional callback invoked on each new video frame (from RVFC).
76
- * The Web Component uses this to dispatch the 'layershift-parallax:frame' event.
77
- */
78
- private onVideoFrame;
79
- private animationFrameHandle;
80
- /** requestVideoFrameCallback handle (0 = inactive). */
81
- private rvfcHandle;
82
- /** Whether RVFC is supported on the current video element. */
83
- private rvfcSupported;
84
- private resizeObserver;
85
- private resizeTimer;
86
- private uvOffset;
87
- private uvScale;
63
+ private quadVao;
64
+ private bilateralPass;
65
+ private parallaxPass;
66
+ private readonly textures;
67
+ private readonly videoSlot;
68
+ private readonly filteredDepthSlot;
69
+ private readonly rawDepthSlot;
88
70
  /** Resolved config with all optional shader params filled from defaults. */
89
71
  private readonly config;
90
72
  /**
@@ -97,8 +79,8 @@ export declare class ParallaxRenderer {
97
79
  */
98
80
  constructor(parent: HTMLElement, config: ParallaxRendererConfig);
99
81
  /**
100
- * Set up the scene: create video texture, depth texture, and set
101
- * static shader uniforms.
82
+ * Set up the scene: create video texture, depth textures + FBO, and
83
+ * set static shader uniforms.
102
84
  *
103
85
  * Call this once after the video element and depth data are loaded.
104
86
  *
@@ -109,31 +91,12 @@ export declare class ParallaxRenderer {
109
91
  */
110
92
  initialize(video: HTMLVideoElement, depthWidth: number, depthHeight: number): void;
111
93
  /**
112
- * Begin the render loop.
113
- *
114
- * When `requestVideoFrameCallback` is available, two loops run:
115
- * 1. RVFC loop — fires once per new video frame, handles depth update.
116
- * 2. RAF loop — fires at display refresh rate, handles input + render.
94
+ * Create render passes and shared fullscreen quad VAO.
117
95
  *
118
- * When RVFC is not available, falls back to a single RAF loop that
119
- * does everything (the pre-RVFC behavior).
96
+ * Each pass is a self-contained unit with its own program and uniform
97
+ * cache. They share a single VAO for the fullscreen quad geometry.
120
98
  */
121
- start(video: HTMLVideoElement, readDepth: (timeSec: number) => Uint8Array, readInput: () => ParallaxInput, onVideoFrame?: (currentTime: number, frameNumber: number) => void): void;
122
- /** Stop both render loops and release callbacks. */
123
- stop(): void;
124
- /** Stop rendering and release all GPU resources. */
125
- dispose(): void;
126
- /** Create the shader program, fullscreen quad VAO, and cache uniform locations. */
127
99
  private initGPUResources;
128
- /** Check whether requestVideoFrameCallback is available. */
129
- private static isRVFCSupported;
130
- /**
131
- * RVFC callback — fires only when the browser presents a new video frame.
132
- *
133
- * Handles the depth texture update, which only needs to happen
134
- * when the video frame actually changes (~24-30fps, not 60-120fps).
135
- */
136
- private readonly videoFrameLoop;
137
100
  /**
138
101
  * Main render loop — called every animation frame at display refresh rate.
139
102
  *
@@ -145,16 +108,16 @@ export declare class ParallaxRenderer {
145
108
  * When RVFC is NOT supported, this falls back to the original behavior:
146
109
  * depth update + input update + render all in a single RAF tick.
147
110
  */
148
- private readonly renderLoop;
149
- /** Upload fresh depth data to the GPU texture. */
150
- private updateDepthTexture;
111
+ protected onRenderFrame(): void;
151
112
  /**
152
- * Set up a ResizeObserver on the container element and a fallback
153
- * window resize listener.
113
+ * Upload raw depth data to the GPU and run the bilateral filter pass.
114
+ *
115
+ * Delegates to the bilateral filter pass object, which encapsulates
116
+ * the upload → FBO bind → draw → FBO unbind → viewport restore sequence.
117
+ *
118
+ * The parallax shader reads from filteredDepthTexture (UNIT 1).
154
119
  */
155
- private setupResizeHandling;
156
- /** Debounce resize events to avoid expensive layout recalculations. */
157
- private readonly scheduleResizeRecalculate;
120
+ protected onDepthUpdate(timeSec: number): void;
158
121
  /**
159
122
  * Recalculate the WebGL canvas size and UV transform to match the
160
123
  * current container dimensions.
@@ -162,14 +125,14 @@ export declare class ParallaxRenderer {
162
125
  * Cover-fit + overscan is expressed as a UV-space transform (offset + scale)
163
126
  * rather than geometry resize. The fullscreen quad stays fixed at -1 to 1.
164
127
  */
165
- private recalculateViewportLayout;
166
- /** Read the container's pixel dimensions, with a minimum of 1x1. */
167
- private getViewportSize;
168
- private readonly handleContextLost;
169
- private readonly handleContextRestored;
170
- /** Dispose textures only. */
128
+ protected recalculateViewportLayout(): void;
129
+ /** Release all GPU resources. */
130
+ protected disposeRenderer(): void;
131
+ /** Rebuild GPU state after context restoration. */
132
+ protected onContextRestored(): void;
133
+ /** Dispose all textures via the registry (video, rawDepth, filteredDepth). */
171
134
  private disposeTextures;
172
- /** Dispose the shader program and VAO. */
135
+ /** Dispose render passes and shared VAO. */
173
136
  private disposeGPUResources;
174
137
  }
175
138
  //# sourceMappingURL=parallax-renderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parallax-renderer.d.ts","sourceRoot":"","sources":["../../src/parallax-renderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parallax-renderer.d.ts","sourceRoot":"","sources":["../../src/parallax-renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAUH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAe/C,8DAA8D;AAC9D,MAAM,WAAW,sBAAsB;IACrC,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IAExB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IAE/B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAySD,qBAAa,gBAAiB,SAAQ,YAAY;IAEhD,OAAO,CAAC,EAAE,CAAuC;IACjD,OAAO,CAAC,OAAO,CAAuC;IAGtD,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,YAAY,CAA6B;IAGjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAc;IAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAE3C,4EAA4E;IAC5E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;IAExD;;;;;;;OAOG;gBAED,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,sBAAsB;IAoDhC;;;;;;;;;;OAUG;IACH,UAAU,CAAC,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IA6DlF;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;;;;;;;;;OAUG;IACH,SAAS,CAAC,aAAa,IAAI,IAAI;IAwC/B;;;;;;;OAOG;IACH,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAqB9C;;;;;;OAMG;IACH,SAAS,CAAC,yBAAyB,IAAI,IAAI;IA0B3C,iCAAiC;IACjC,SAAS,CAAC,eAAe,IAAI,IAAI;IAYjC,mDAAmD;IACnD,SAAS,CAAC,iBAAiB,IAAI,IAAI;IAwBnC,8EAA8E;IAC9E,OAAO,CAAC,eAAe;IAOvB,4CAA4C;IAC5C,OAAO,CAAC,mBAAmB;CAmB5B"}
@@ -0,0 +1,199 @@
1
+ /**
2
+ * Portal Renderer (WebGPU) — GPU-accelerated multi-pass portal compositing.
3
+ *
4
+ * WebGPU counterpart to `portal-renderer.ts` (WebGL2). Shares the same
5
+ * `RendererBase` abstract base class and `PortalRendererConfig` interface.
6
+ *
7
+ * ## Pipeline (per frame, 6 draw calls)
8
+ *
9
+ * 1. **Interior pass** — POM ray-march + lens depth + DOF + fog + color grade.
10
+ * MRT output: color (rgba8unorm) + depth (r8unorm) to offscreen textures.
11
+ *
12
+ * 2a. **Stencil mark** — triangulated SVG mesh into depth-stencil attachment.
13
+ * Color writes disabled, stencil ref=1 written.
14
+ *
15
+ * 2b. **Composite** — emissive interior passthrough with edge occlusion ramp,
16
+ * stencil-tested (only where stencil == 1).
17
+ *
18
+ * 2c. **Chamfer geometry** — Blinn-Phong lit ring with frosted-glass blur.
19
+ *
20
+ * 3. **Boundary effects** — rim lighting, refraction, chromatic fringe,
21
+ * volumetric edge wall. Alpha blended onto backbuffer.
22
+ *
23
+ * ## JFA Distance Field (cached, recomputed on resize)
24
+ *
25
+ * mask render -> seed extraction -> flood iterations -> distance conversion.
26
+ * Uses rg16float ping-pong textures. Runs at reduced resolution (quality tier).
27
+ *
28
+ * ## Key WebGPU differences from WebGL2 version
29
+ *
30
+ * - Stencil via explicit `depth24plus-stencil8` texture attachment.
31
+ * - MRT via multiple color attachments in a single render pass.
32
+ * - Float render targets (rg16float) natively supported — no extension needed.
33
+ * - Pipeline state objects bake blend/stencil/depth config at creation time.
34
+ * - Bind groups replace individual uniform calls.
35
+ * - Override constants for POM loop bound.
36
+ * - `writeTexture` with manual Y-flip (no UNPACK_FLIP_Y_WEBGL equivalent).
37
+ * - `copyExternalImageToTexture` for zero-copy video frame import.
38
+ */
39
+ import { RendererBase } from './renderer-base';
40
+ import type { PortalRendererConfig } from './portal-renderer';
41
+ import type { ShapeMesh } from './shape-generator';
42
+ export declare class PortalRendererWebGPU extends RendererBase {
43
+ private device;
44
+ private context;
45
+ private canvasFormat;
46
+ private readonly config;
47
+ private quadBuffer;
48
+ private linearSampler;
49
+ private nearestSampler;
50
+ private interiorPipeline;
51
+ private interiorBindGroupLayout;
52
+ private stencilMarkPipeline;
53
+ private stencilMarkBindGroupLayout;
54
+ private compositePipeline;
55
+ private compositeBindGroupLayout;
56
+ private chamferPipeline;
57
+ private chamferBindGroupLayout;
58
+ private boundaryPipeline;
59
+ private boundaryBindGroupLayout;
60
+ private maskPipeline;
61
+ private maskBindGroupLayout;
62
+ private jfaSeedPipeline;
63
+ private jfaSeedBindGroupLayout;
64
+ private jfaFloodPipeline;
65
+ private jfaFloodBindGroupLayout;
66
+ private jfaDistPipeline;
67
+ private jfaDistBindGroupLayout;
68
+ private meshScaleUniformBuffer;
69
+ private interiorVertexUniformBuffer;
70
+ private interiorFragmentUniformBuffer;
71
+ private compositeUniformBuffer;
72
+ private boundaryUniformBuffer;
73
+ private chamferUniformBuffer;
74
+ private jfaSeedUniformBuffer;
75
+ private jfaFloodUniformBuffer;
76
+ private jfaDistUniformBuffer;
77
+ private interiorBindGroup;
78
+ private stencilMarkBindGroup;
79
+ private compositeBindGroup;
80
+ private chamferBindGroup;
81
+ private boundaryBindGroup;
82
+ private maskBindGroup;
83
+ private jfaSeedBindGroup;
84
+ private jfaDistBindGroup;
85
+ private videoTexture;
86
+ private videoTextureView;
87
+ private depthTexture;
88
+ private depthTextureView;
89
+ private interiorColorTexture;
90
+ private interiorColorView;
91
+ private interiorDepthTexture;
92
+ private interiorDepthView;
93
+ private fboWidth;
94
+ private fboHeight;
95
+ private depthStencilTexture;
96
+ private depthStencilView;
97
+ private dsWidth;
98
+ private dsHeight;
99
+ private jfaMaskTexture;
100
+ private jfaMaskView;
101
+ private jfaPingTexture;
102
+ private jfaPingView;
103
+ private jfaPongTexture;
104
+ private jfaPongView;
105
+ private jfaDistTexture;
106
+ private jfaDistView;
107
+ private jfaWidth;
108
+ private jfaHeight;
109
+ private jfaDirty;
110
+ private stencilVertexBuffer;
111
+ private stencilIndexBuffer;
112
+ private stencilIndexCount;
113
+ private boundaryVertexBuffer;
114
+ private boundaryVertexCount;
115
+ private chamferVertexBuffer;
116
+ private chamferVertexCount;
117
+ private meshAspect;
118
+ private meshScaleX;
119
+ private meshScaleY;
120
+ private lightDirX;
121
+ private lightDirY;
122
+ private lightDir3;
123
+ private depthFlipBuffer;
124
+ private readonly offsetData;
125
+ constructor(parent: HTMLElement, config: PortalRendererConfig, device: GPUDevice, adapterInfo: GPUAdapterInfo);
126
+ initialize(video: HTMLVideoElement, depthWidth: number, depthHeight: number, mesh: ShapeMesh): void;
127
+ private createInteriorPipeline;
128
+ private createStencilMarkPipeline;
129
+ private createCompositePipeline;
130
+ private createChamferPipeline;
131
+ private createBoundaryPipeline;
132
+ private createMaskPipeline;
133
+ private createJFASeedPipeline;
134
+ private createJFAFloodPipeline;
135
+ private createJFADistPipeline;
136
+ private uploadStencilMesh;
137
+ private uploadBoundaryMesh;
138
+ private uploadChamferMesh;
139
+ private writeStaticInteriorUniforms;
140
+ private writeStaticCompositeUniforms;
141
+ private writeStaticChamferUniforms;
142
+ private writeStaticBoundaryUniforms;
143
+ private rebuildInteriorBindGroup;
144
+ private rebuildStencilMarkBindGroup;
145
+ private rebuildCompositeBindGroup;
146
+ private rebuildChamferBindGroup;
147
+ private rebuildBoundaryBindGroup;
148
+ private rebuildMaskBindGroup;
149
+ private rebuildJFASeedBindGroup;
150
+ private rebuildJFADistBindGroup;
151
+ /** Rebuild all bind groups that reference textures (after resize or init). */
152
+ private rebuildBindGroups;
153
+ private createInteriorFBO;
154
+ private createDepthStencilTexture;
155
+ private createJFAResources;
156
+ private computeDistanceField;
157
+ /**
158
+ * Flip depth data vertically.
159
+ *
160
+ * WebGPU writeTexture has no UNPACK_FLIP_Y_WEBGL equivalent. Video frames
161
+ * are imported with flipY:true via copyExternalImageToTexture, so depth
162
+ * data must also be flipped to maintain spatial alignment.
163
+ */
164
+ private flipDepthY;
165
+ private fallbackTexture;
166
+ private createFallbackTextureView;
167
+ /**
168
+ * Main render loop -- 6 draw calls per frame.
169
+ *
170
+ * Pass 1: Interior -> MRT offscreen textures.
171
+ * Pass 2a: Stencil mark -> depth-stencil attachment.
172
+ * Pass 2b: Composite -> canvas (stencil-tested).
173
+ * Pass 2c: Chamfer geometry -> canvas.
174
+ * Pass 3: Boundary effects -> canvas (alpha blended).
175
+ * JFA: runs inside command encoder when dirty (cached on resize).
176
+ */
177
+ protected onRenderFrame(): void;
178
+ /**
179
+ * Upload depth data to the GPU texture.
180
+ * Called from the RVFC loop at video frame rate, or from RAF fallback.
181
+ */
182
+ protected onDepthUpdate(timeSec: number): void;
183
+ protected recalculateViewportLayout(): void;
184
+ /**
185
+ * WebGPU device loss recovery.
186
+ *
187
+ * Device loss is handled via the `device.lost` promise (set in constructor).
188
+ * Full recovery requires re-requesting adapter + device, which is managed
189
+ * at the Web Component level by re-creating the renderer.
190
+ */
191
+ protected onContextRestored(): void;
192
+ protected disposeRenderer(): void;
193
+ private disposeTextures;
194
+ private disposeInteriorFBO;
195
+ private disposeDepthStencilTexture;
196
+ private disposeJFAResources;
197
+ private disposeGeometryBuffers;
198
+ }
199
+ //# sourceMappingURL=portal-renderer-webgpu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portal-renderer-webgpu.d.ts","sourceRoot":"","sources":["../../src/portal-renderer-webgpu.ts"],"names":[],"mappings":"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"}
@@ -29,13 +29,22 @@
29
29
  * refraction, chromatic fringe, occlusion — all driven by distance field
30
30
  * and interior depth texture.
31
31
  */
32
- import type { ParallaxInput } from './input-handler';
33
32
  import type { ShapeMesh } from './shape-generator';
33
+ import type { QualityTier } from './quality';
34
+ import { RendererBase } from './renderer-base';
34
35
  export interface PortalRendererConfig {
35
36
  parallaxStrength: number;
36
37
  overscanPadding: number;
37
38
  /** POM step count for interior (default: 16). */
38
39
  pomSteps: number;
40
+ /**
41
+ * Adaptive quality tier. Controls render resolution, JFA resolution,
42
+ * depth resolution, and sample counts.
43
+ * - 'auto' — probe device capabilities and classify automatically.
44
+ * - 'high' / 'medium' / 'low' — use the specified tier directly.
45
+ * - undefined — defaults to 'auto'.
46
+ */
47
+ quality?: 'auto' | QualityTier;
39
48
  rimLightIntensity: number;
40
49
  rimLightColor: [number, number, number];
41
50
  rimLightWidth: number;
@@ -66,7 +75,7 @@ export interface PortalRendererConfig {
66
75
  chamferWidth: number;
67
76
  /** Chamfer angle in degrees (0 = face-forward, 90 = wall). Default: 45 */
68
77
  chamferAngle: number;
69
- /** Chamfer base color [r, g, b] in 01 range. Default: [0.15, 0.15, 0.18] */
78
+ /** Chamfer base color [r, g, b] in 0-1 range. Default: [0.15, 0.15, 0.18] */
70
79
  chamferColor: [number, number, number];
71
80
  /** Chamfer ambient light level. Default: 0.12 */
72
81
  chamferAmbient: number;
@@ -81,29 +90,36 @@ export interface PortalRendererConfig {
81
90
  /** 3D light direction [x, y, z] for chamfer lighting (will be normalized). */
82
91
  lightDirection: [number, number, number];
83
92
  }
84
- export declare class PortalRenderer {
85
- private static readonly RESIZE_DEBOUNCE_MS;
86
- private readonly canvas;
93
+ export declare function buildEdgeMesh(edgeVertices: Float32Array): {
94
+ vertices: Float32Array;
95
+ count: number;
96
+ };
97
+ /**
98
+ * Build geometric chamfer ring around each contour with smooth per-vertex
99
+ * normals and inner/outer lerp parameter for progressive blur.
100
+ *
101
+ * Normals are averaged between adjacent segments at shared vertices so the
102
+ * chamfer surface appears smooth rather than faceted. The `lerpT` value is
103
+ * 0 at the inner (silhouette) edge and 1 at the outer edge, driving blur
104
+ * intensity in the fragment shader.
105
+ *
106
+ * Vertex format: [x, y, nx3, ny3, nz3, lerpT] — 6 floats per vertex.
107
+ */
108
+ export declare function buildChamferMesh(edgeVertices: Float32Array, contourOffsets: number[], contourIsHole: boolean[], chamferWidth: number, chamferAngle: number): {
109
+ vertices: Float32Array;
110
+ count: number;
111
+ };
112
+ export declare class PortalRenderer extends RendererBase {
87
113
  private gl;
88
- private readonly container;
89
- private stencilProgram;
90
- private maskProgram;
91
- private jfaSeedProgram;
92
- private jfaFloodProgram;
93
- private jfaDistProgram;
94
- private interiorProgram;
95
- private compositeProgram;
96
- private boundaryProgram;
97
- private chamferProgram;
98
- private stencilUniforms;
99
- private maskUniforms;
100
- private jfaSeedUniforms;
101
- private jfaFloodUniforms;
102
- private jfaDistUniforms;
103
- private interiorUniforms;
104
- private compositeUniforms;
105
- private boundaryUniforms;
106
- private chamferUniforms;
114
+ private stencilPass;
115
+ private maskPass;
116
+ private jfaSeedPass;
117
+ private jfaFloodPass;
118
+ private jfaDistPass;
119
+ private interiorPass;
120
+ private compositePass;
121
+ private boundaryPass;
122
+ private chamferPass;
107
123
  private quadVao;
108
124
  private stencilVao;
109
125
  private stencilIndexCount;
@@ -112,41 +128,19 @@ export declare class PortalRenderer {
112
128
  private boundaryVertexCount;
113
129
  private chamferVao;
114
130
  private chamferVertexCount;
115
- private videoTexture;
116
- private depthTexture;
131
+ private readonly textures;
132
+ private readonly videoSlot;
133
+ private readonly depthSlot;
117
134
  private interiorFbo;
118
135
  private interiorColorTex;
119
136
  private interiorDepthTex;
120
137
  private fboWidth;
121
138
  private fboHeight;
122
- private maskFbo;
123
- private maskTex;
124
- private jfaPingFbo;
125
- private jfaPingTex;
126
- private jfaPongFbo;
127
- private jfaPongTex;
128
- private distFbo;
129
- private distTex;
130
- private jfaWidth;
131
- private jfaHeight;
132
- private distFieldDirty;
133
- private depthWidth;
134
- private depthHeight;
135
- private videoAspect;
139
+ private jfa;
140
+ private hasColorBufferFloat;
136
141
  private meshAspect;
137
142
  private meshScaleX;
138
143
  private meshScaleY;
139
- private readDepth;
140
- private readInput;
141
- private playbackVideo;
142
- private onVideoFrame;
143
- private animationFrameHandle;
144
- private rvfcHandle;
145
- private rvfcSupported;
146
- private resizeObserver;
147
- private resizeTimer;
148
- private uvOffset;
149
- private uvScale;
150
144
  private lightDirX;
151
145
  private lightDirY;
152
146
  private lightDir3;
@@ -161,25 +155,30 @@ export declare class PortalRenderer {
161
155
  private createFBO;
162
156
  private createJFAResources;
163
157
  private computeDistanceField;
164
- start(video: HTMLVideoElement, readDepth: (timeSec: number) => Uint8Array, readInput: () => ParallaxInput, onVideoFrame?: (currentTime: number, frameNumber: number) => void): void;
165
- stop(): void;
166
- dispose(): void;
167
158
  private initGPUResources;
168
- private getUniforms;
169
- private readonly videoFrameLoop;
170
- private readonly renderLoop;
171
- private updateDepthTexture;
172
- private setupResizeHandling;
173
- private readonly scheduleResizeRecalculate;
174
- private recalculateViewportLayout;
175
- private getViewportSize;
176
- private readonly handleContextLost;
177
- private readonly handleContextRestored;
159
+ /**
160
+ * Main render loop — called every animation frame at display refresh rate.
161
+ *
162
+ * Handles interior FBO rendering, stencil marking, emissive composite,
163
+ * chamfer geometry, and boundary effects in a multi-pass pipeline.
164
+ */
165
+ protected onRenderFrame(): void;
166
+ /**
167
+ * Upload depth data to the GPU texture.
168
+ * Called from the RVFC loop at video frame rate, or from RAF fallback.
169
+ */
170
+ protected onDepthUpdate(timeSec: number): void;
171
+ protected recalculateViewportLayout(): void;
172
+ /** Rebuild GPU state after context restoration. */
173
+ protected onContextRestored(): void;
174
+ /** Dispose source textures via the registry (video, depth). */
178
175
  private disposeTextures;
179
176
  private disposeFBO;
180
- private disposeJFA;
181
177
  private disposeStencilGeometry;
182
178
  private disposeBoundaryGeometry;
179
+ /** Dispose all GPU resources — called by base class dispose(). */
180
+ protected disposeRenderer(): void;
181
+ /** Dispose all render passes and shared VAO. */
183
182
  private disposeGPUResources;
184
183
  }
185
184
  //# sourceMappingURL=portal-renderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"portal-renderer.d.ts","sourceRoot":"","sources":["../../src/portal-renderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"portal-renderer.d.ts","sourceRoot":"","sources":["../../src/portal-renderer.ts"],"names":[],"mappings":"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"}