@headless-three/renderer 0.1.10 → 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.
- package/README.md +32 -0
- package/dist/gpu-output.d.ts +190 -0
- package/dist/gpu-output.d.ts.map +1 -0
- package/dist/gpu-output.js +114 -0
- package/dist/gpu-output.js.map +1 -0
- package/dist/index.d.ts +26 -770
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -6226
- package/dist/index.js.map +1 -1
- package/dist/index.part-001.d.ts +95 -0
- package/dist/index.part-001.d.ts.map +1 -0
- package/dist/index.part-001.js +273 -0
- package/dist/index.part-001.js.map +1 -0
- package/dist/index.part-002.d.ts +69 -0
- package/dist/index.part-002.d.ts.map +1 -0
- package/dist/index.part-002.js +211 -0
- package/dist/index.part-002.js.map +1 -0
- package/dist/index.part-003.d.ts +105 -0
- package/dist/index.part-003.d.ts.map +1 -0
- package/dist/index.part-003.js +270 -0
- package/dist/index.part-003.js.map +1 -0
- package/dist/index.part-004.d.ts +78 -0
- package/dist/index.part-004.d.ts.map +1 -0
- package/dist/index.part-004.js +390 -0
- package/dist/index.part-004.js.map +1 -0
- package/dist/index.part-005.d.ts +75 -0
- package/dist/index.part-005.d.ts.map +1 -0
- package/dist/index.part-005.js +236 -0
- package/dist/index.part-005.js.map +1 -0
- package/dist/index.part-006.d.ts +105 -0
- package/dist/index.part-006.d.ts.map +1 -0
- package/dist/index.part-006.js +262 -0
- package/dist/index.part-006.js.map +1 -0
- package/dist/index.part-007.d.ts +112 -0
- package/dist/index.part-007.d.ts.map +1 -0
- package/dist/index.part-007.js +358 -0
- package/dist/index.part-007.js.map +1 -0
- package/dist/index.part-008.d.ts +240 -0
- package/dist/index.part-008.d.ts.map +1 -0
- package/dist/index.part-008.js +458 -0
- package/dist/index.part-008.js.map +1 -0
- package/dist/index.part-009.d.ts +46 -0
- package/dist/index.part-009.d.ts.map +1 -0
- package/dist/index.part-009.js +379 -0
- package/dist/index.part-009.js.map +1 -0
- package/dist/index.part-010.d.ts +24 -0
- package/dist/index.part-010.d.ts.map +1 -0
- package/dist/index.part-010.js +277 -0
- package/dist/index.part-010.js.map +1 -0
- package/dist/index.part-011.d.ts +21 -0
- package/dist/index.part-011.d.ts.map +1 -0
- package/dist/index.part-011.js +361 -0
- package/dist/index.part-011.js.map +1 -0
- package/dist/index.part-012.d.ts +115 -0
- package/dist/index.part-012.d.ts.map +1 -0
- package/dist/index.part-012.js +298 -0
- package/dist/index.part-012.js.map +1 -0
- package/dist/index.part-013.d.ts +37 -0
- package/dist/index.part-013.d.ts.map +1 -0
- package/dist/index.part-013.js +341 -0
- package/dist/index.part-013.js.map +1 -0
- package/dist/index.part-014.d.ts +43 -0
- package/dist/index.part-014.d.ts.map +1 -0
- package/dist/index.part-014.js +441 -0
- package/dist/index.part-014.js.map +1 -0
- package/dist/index.part-015.d.ts +45 -0
- package/dist/index.part-015.d.ts.map +1 -0
- package/dist/index.part-015.js +432 -0
- package/dist/index.part-015.js.map +1 -0
- package/dist/index.part-016.d.ts +55 -0
- package/dist/index.part-016.d.ts.map +1 -0
- package/dist/index.part-016.js +382 -0
- package/dist/index.part-016.js.map +1 -0
- package/dist/index.part-017.d.ts +55 -0
- package/dist/index.part-017.d.ts.map +1 -0
- package/dist/index.part-017.js +436 -0
- package/dist/index.part-017.js.map +1 -0
- package/dist/index.part-018.d.ts +34 -0
- package/dist/index.part-018.d.ts.map +1 -0
- package/dist/index.part-018.js +365 -0
- package/dist/index.part-018.js.map +1 -0
- package/dist/index.part-019.d.ts +29 -0
- package/dist/index.part-019.d.ts.map +1 -0
- package/dist/index.part-019.js +261 -0
- package/dist/index.part-019.js.map +1 -0
- package/dist/index.part-020.d.ts +37 -0
- package/dist/index.part-020.d.ts.map +1 -0
- package/dist/index.part-020.js +388 -0
- package/dist/index.part-020.js.map +1 -0
- package/dist/index.part-021.d.ts +10 -0
- package/dist/index.part-021.d.ts.map +1 -0
- package/dist/index.part-021.js +142 -0
- package/dist/index.part-021.js.map +1 -0
- package/dist/loaders.d.ts +27 -91
- package/dist/loaders.d.ts.map +1 -1
- package/dist/loaders.js +22 -855
- package/dist/loaders.js.map +1 -1
- package/dist/loaders.part-001.d.ts +163 -0
- package/dist/loaders.part-001.d.ts.map +1 -0
- package/dist/loaders.part-001.js +277 -0
- package/dist/loaders.part-001.js.map +1 -0
- package/dist/loaders.part-002.d.ts +33 -0
- package/dist/loaders.part-002.d.ts.map +1 -0
- package/dist/loaders.part-002.js +511 -0
- package/dist/loaders.part-002.js.map +1 -0
- package/dist/loaders.part-003.d.ts +23 -0
- package/dist/loaders.part-003.d.ts.map +1 -0
- package/dist/loaders.part-003.js +138 -0
- package/dist/loaders.part-003.js.map +1 -0
- package/dist/materials.d.ts +33 -49
- package/dist/materials.d.ts.map +1 -1
- package/dist/materials.js +39 -4339
- package/dist/materials.js.map +1 -1
- package/dist/materials.part-001.d.ts +153 -0
- package/dist/materials.part-001.d.ts.map +1 -0
- package/dist/materials.part-001.js +347 -0
- package/dist/materials.part-001.js.map +1 -0
- package/dist/materials.part-002.d.ts +46 -0
- package/dist/materials.part-002.d.ts.map +1 -0
- package/dist/materials.part-002.js +299 -0
- package/dist/materials.part-002.js.map +1 -0
- package/dist/materials.part-003.d.ts +14 -0
- package/dist/materials.part-003.d.ts.map +1 -0
- package/dist/materials.part-003.js +438 -0
- package/dist/materials.part-003.js.map +1 -0
- package/dist/materials.part-004.d.ts +30 -0
- package/dist/materials.part-004.d.ts.map +1 -0
- package/dist/materials.part-004.js +464 -0
- package/dist/materials.part-004.js.map +1 -0
- package/dist/materials.part-005.d.ts +38 -0
- package/dist/materials.part-005.d.ts.map +1 -0
- package/dist/materials.part-005.js +366 -0
- package/dist/materials.part-005.js.map +1 -0
- package/dist/materials.part-006.d.ts +18 -0
- package/dist/materials.part-006.d.ts.map +1 -0
- package/dist/materials.part-006.js +391 -0
- package/dist/materials.part-006.js.map +1 -0
- package/dist/materials.part-007.d.ts +24 -0
- package/dist/materials.part-007.d.ts.map +1 -0
- package/dist/materials.part-007.js +467 -0
- package/dist/materials.part-007.js.map +1 -0
- package/dist/materials.part-008.d.ts +95 -0
- package/dist/materials.part-008.d.ts.map +1 -0
- package/dist/materials.part-008.js +404 -0
- package/dist/materials.part-008.js.map +1 -0
- package/dist/materials.part-009.d.ts +89 -0
- package/dist/materials.part-009.d.ts.map +1 -0
- package/dist/materials.part-009.js +412 -0
- package/dist/materials.part-009.js.map +1 -0
- package/dist/materials.part-010.d.ts +46 -0
- package/dist/materials.part-010.d.ts.map +1 -0
- package/dist/materials.part-010.js +375 -0
- package/dist/materials.part-010.js.map +1 -0
- package/dist/materials.part-011.d.ts +25 -0
- package/dist/materials.part-011.d.ts.map +1 -0
- package/dist/materials.part-011.js +435 -0
- package/dist/materials.part-011.js.map +1 -0
- package/dist/materials.part-012.d.ts +15 -0
- package/dist/materials.part-012.d.ts.map +1 -0
- package/dist/materials.part-012.js +229 -0
- package/dist/materials.part-012.js.map +1 -0
- package/dist/scene.d.ts +19 -279
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +21 -3931
- package/dist/scene.js.map +1 -1
- package/dist/scene.part-001.d.ts +375 -0
- package/dist/scene.part-001.d.ts.map +1 -0
- package/dist/scene.part-001.js +20 -0
- package/dist/scene.part-001.js.map +1 -0
- package/dist/scene.part-002.d.ts +28 -0
- package/dist/scene.part-002.d.ts.map +1 -0
- package/dist/scene.part-002.js +311 -0
- package/dist/scene.part-002.js.map +1 -0
- package/dist/scene.part-003.d.ts +26 -0
- package/dist/scene.part-003.d.ts.map +1 -0
- package/dist/scene.part-003.js +384 -0
- package/dist/scene.part-003.js.map +1 -0
- package/dist/scene.part-004.d.ts +24 -0
- package/dist/scene.part-004.d.ts.map +1 -0
- package/dist/scene.part-004.js +287 -0
- package/dist/scene.part-004.js.map +1 -0
- package/dist/scene.part-005.d.ts +37 -0
- package/dist/scene.part-005.d.ts.map +1 -0
- package/dist/scene.part-005.js +350 -0
- package/dist/scene.part-005.js.map +1 -0
- package/dist/scene.part-006.d.ts +25 -0
- package/dist/scene.part-006.d.ts.map +1 -0
- package/dist/scene.part-006.js +362 -0
- package/dist/scene.part-006.js.map +1 -0
- package/dist/scene.part-007.d.ts +36 -0
- package/dist/scene.part-007.d.ts.map +1 -0
- package/dist/scene.part-007.js +417 -0
- package/dist/scene.part-007.js.map +1 -0
- package/dist/scene.part-008.d.ts +78 -0
- package/dist/scene.part-008.d.ts.map +1 -0
- package/dist/scene.part-008.js +416 -0
- package/dist/scene.part-008.js.map +1 -0
- package/dist/scene.part-009.d.ts +25 -0
- package/dist/scene.part-009.d.ts.map +1 -0
- package/dist/scene.part-009.js +330 -0
- package/dist/scene.part-009.js.map +1 -0
- package/dist/scene.part-010.d.ts +32 -0
- package/dist/scene.part-010.d.ts.map +1 -0
- package/dist/scene.part-010.js +336 -0
- package/dist/scene.part-010.js.map +1 -0
- package/dist/scene.part-011.d.ts +100 -0
- package/dist/scene.part-011.d.ts.map +1 -0
- package/dist/scene.part-011.js +262 -0
- package/dist/scene.part-011.js.map +1 -0
- package/dist/scene.part-012.d.ts +48 -0
- package/dist/scene.part-012.d.ts.map +1 -0
- package/dist/scene.part-012.js +357 -0
- package/dist/scene.part-012.js.map +1 -0
- package/dist/scene.part-013.d.ts +51 -0
- package/dist/scene.part-013.d.ts.map +1 -0
- package/dist/scene.part-013.js +368 -0
- package/dist/scene.part-013.js.map +1 -0
- package/dist/scene.part-014.d.ts +16 -0
- package/dist/scene.part-014.d.ts.map +1 -0
- package/dist/scene.part-014.js +112 -0
- package/dist/scene.part-014.js.map +1 -0
- package/dist/types.d.ts +53 -1564
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -1
- package/dist/types.js.map +1 -1
- package/dist/types.part-001.d.ts +386 -0
- package/dist/types.part-001.d.ts.map +1 -0
- package/dist/types.part-001.js +4 -0
- package/dist/types.part-001.js.map +1 -0
- package/dist/types.part-002.d.ts +407 -0
- package/dist/types.part-002.d.ts.map +1 -0
- package/dist/types.part-002.js +3 -0
- package/dist/types.part-002.js.map +1 -0
- package/dist/types.part-003.d.ts +427 -0
- package/dist/types.part-003.d.ts.map +1 -0
- package/dist/types.part-003.js +3 -0
- package/dist/types.part-003.js.map +1 -0
- package/dist/types.part-004.d.ts +351 -0
- package/dist/types.part-004.d.ts.map +1 -0
- package/dist/types.part-004.js +3 -0
- package/dist/types.part-004.js.map +1 -0
- package/native.d.ts +130 -0
- package/native.js +56 -52
- package/package.json +11 -8
package/README.md
CHANGED
|
@@ -68,6 +68,37 @@ const imageBuffer = renderer.render(scene, camera, { width: 512, height: 512 })
|
|
|
68
68
|
|
|
69
69
|
`Renderer.renderAsync(scene, camera, options)` is a Promise-returning compatibility wrapper around the same scene-output contract.
|
|
70
70
|
|
|
71
|
+
`Renderer.renderGpuFrame(scene, camera, options)` returns a same-device GPU texture lease without RGBA readback when `Renderer.getGpuOutputCapabilities().texture.supported` is true. Native handles are borrowed `bigint` values and must be released deterministically. See the [GPU-native output contract](https://github.com/portwatcher/headless-three-renderer/blob/main/docs/gpu-native-output.md).
|
|
72
|
+
|
|
73
|
+
For real-time media, `Renderer.createGpuFramePool()` provides asynchronous,
|
|
74
|
+
bounded, reusable `rgba8unorm`, `nv12-planes`, and capability-gated
|
|
75
|
+
`p010-planes` output. The YUV forms are real GPU-converted separate plane
|
|
76
|
+
textures, not directly importable encoder-native multi-planar surfaces. Consult
|
|
77
|
+
capabilities and the linked contract before using borrowed plane handles.
|
|
78
|
+
|
|
79
|
+
```js
|
|
80
|
+
const pool = renderer.createGpuFramePool({
|
|
81
|
+
width: 1920,
|
|
82
|
+
height: 1080,
|
|
83
|
+
capacity: 3,
|
|
84
|
+
format: 'nv12-planes',
|
|
85
|
+
overflow: 'drop-newest',
|
|
86
|
+
})
|
|
87
|
+
const frame = await pool.render(scene, camera)
|
|
88
|
+
if (frame) {
|
|
89
|
+
const yTexture = frame.planeHandle(0)
|
|
90
|
+
const uvTexture = frame.planeHandle(1)
|
|
91
|
+
await consumeOnRendererDevice({ yTexture, uvTexture, planes: frame.planes })
|
|
92
|
+
// The consumer must first restore every plane to requiredStateOnRelease.
|
|
93
|
+
frame.completeExternalUse()
|
|
94
|
+
frame.release()
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
These two handles are separate textures, not an encoder-native NV12 surface.
|
|
99
|
+
If a handle was requested, `release()` throws until external work is complete
|
|
100
|
+
and `completeExternalUse()` has acknowledged the required state restoration.
|
|
101
|
+
|
|
71
102
|
`Renderer.sortObjects`, `Renderer.opaque`, `Renderer.transparent`, `Renderer.setOpaqueSort(fn)`, `Renderer.setTransparentSort(fn)`, and the matching `render()` options (`sortObjects`, `opaque`, `transparent`, `opaqueSort`, `transparentSort`) control native draw-list sorting and bucket inclusion.
|
|
72
103
|
|
|
73
104
|
It also exports Node loader helpers:
|
|
@@ -122,6 +153,7 @@ Install the main package, not the platform package directly.
|
|
|
122
153
|
- [Compatibility matrix](https://github.com/portwatcher/headless-three-renderer/blob/main/docs/compatibility.md)
|
|
123
154
|
- [Node loader setup](https://github.com/portwatcher/headless-three-renderer/blob/main/docs/node-loader-setup.md)
|
|
124
155
|
- [Scale budgets](https://github.com/portwatcher/headless-three-renderer/blob/main/docs/scale-budgets.md)
|
|
156
|
+
- [GPU-native output](https://github.com/portwatcher/headless-three-renderer/blob/main/docs/gpu-native-output.md)
|
|
125
157
|
- [Release notes](https://github.com/portwatcher/headless-three-renderer/blob/main/docs/release-notes.md)
|
|
126
158
|
- [glTF example](https://github.com/portwatcher/headless-three-renderer/blob/main/examples/render-gltf.mjs)
|
|
127
159
|
- [VRM/VRMA example](https://github.com/portwatcher/headless-three-renderer/blob/main/examples/render-vrm.mjs)
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
export type GpuTextureHandleType = 'metal-texture' | 'vulkan-image' | 'd3d12-resource';
|
|
2
|
+
export interface GpuTextureOutputCapability {
|
|
3
|
+
supported: boolean;
|
|
4
|
+
handleType?: GpuTextureHandleType;
|
|
5
|
+
synchronization: 'submission-complete';
|
|
6
|
+
scope: 'same-renderer-device';
|
|
7
|
+
format: 'rgba8unorm';
|
|
8
|
+
usage: 'copy-dst|copy-src|texture-binding';
|
|
9
|
+
layout: 'backend-managed-copy-dst';
|
|
10
|
+
reason?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface DmaBufOutputCapability {
|
|
13
|
+
supported: boolean;
|
|
14
|
+
reason?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface GpuOutputCapabilities {
|
|
17
|
+
backend: 'metal' | 'vulkan' | 'dx12' | 'gles' | 'browser-webgpu' | 'noop';
|
|
18
|
+
texture: GpuTextureOutputCapability;
|
|
19
|
+
dmaBuf: DmaBufOutputCapability;
|
|
20
|
+
encoderSurface: {
|
|
21
|
+
supported: boolean;
|
|
22
|
+
reason: string;
|
|
23
|
+
};
|
|
24
|
+
mediaFormats: GpuMediaFormatCapability[];
|
|
25
|
+
}
|
|
26
|
+
export type GpuMediaOutputFormat = 'rgba8unorm' | 'nv12-planes' | 'p010-planes';
|
|
27
|
+
export type GpuFramePoolOverflowPolicy = 'error' | 'drop-newest';
|
|
28
|
+
export interface GpuMediaFormatCapability {
|
|
29
|
+
format: GpuMediaOutputFormat;
|
|
30
|
+
supported: boolean;
|
|
31
|
+
storage: 'single-texture' | 'separate-textures';
|
|
32
|
+
planeFormats: string[];
|
|
33
|
+
reason?: string;
|
|
34
|
+
colorMatrix?: 'bt709';
|
|
35
|
+
colorRange?: 'limited';
|
|
36
|
+
chromaSiting?: 'centered-2x2-box';
|
|
37
|
+
}
|
|
38
|
+
export interface GpuFramePoolOptions {
|
|
39
|
+
width: number;
|
|
40
|
+
height: number;
|
|
41
|
+
capacity?: number;
|
|
42
|
+
format?: GpuMediaOutputFormat;
|
|
43
|
+
overflow?: GpuFramePoolOverflowPolicy;
|
|
44
|
+
}
|
|
45
|
+
export interface GpuFramePoolStats {
|
|
46
|
+
capacity: number;
|
|
47
|
+
available: number;
|
|
48
|
+
inFlight: number;
|
|
49
|
+
peakInFlight: number;
|
|
50
|
+
submitted: number;
|
|
51
|
+
completed: number;
|
|
52
|
+
dropped: number;
|
|
53
|
+
rejected: number;
|
|
54
|
+
reused: number;
|
|
55
|
+
allocations: number;
|
|
56
|
+
retired: number;
|
|
57
|
+
closed: boolean;
|
|
58
|
+
}
|
|
59
|
+
export interface GpuMediaPlaneInfo {
|
|
60
|
+
index: number;
|
|
61
|
+
format: string;
|
|
62
|
+
width: number;
|
|
63
|
+
height: number;
|
|
64
|
+
bytesPerRow: number;
|
|
65
|
+
rowSemantics: string;
|
|
66
|
+
expectedStateBeforeUse: string;
|
|
67
|
+
requiredStateOnRelease: string;
|
|
68
|
+
}
|
|
69
|
+
export interface GpuMediaPlaneData extends Omit<GpuMediaPlaneInfo, 'rowSemantics' | 'expectedStateBeforeUse' | 'requiredStateOnRelease'> {
|
|
70
|
+
data: Buffer;
|
|
71
|
+
}
|
|
72
|
+
export interface DmaBufPlane {
|
|
73
|
+
fd: number;
|
|
74
|
+
offset: number;
|
|
75
|
+
stride: number;
|
|
76
|
+
}
|
|
77
|
+
export interface DmaBufFrameLease {
|
|
78
|
+
width: number;
|
|
79
|
+
height: number;
|
|
80
|
+
fourcc: number;
|
|
81
|
+
modifier: bigint;
|
|
82
|
+
planes: DmaBufPlane[];
|
|
83
|
+
released: boolean;
|
|
84
|
+
release(): void;
|
|
85
|
+
}
|
|
86
|
+
interface NativeGpuFrameLeaseLike {
|
|
87
|
+
readonly width: number;
|
|
88
|
+
readonly height: number;
|
|
89
|
+
readonly format: string;
|
|
90
|
+
readonly backend: string;
|
|
91
|
+
readonly handleType: string;
|
|
92
|
+
readonly released: boolean;
|
|
93
|
+
readonly completed: boolean;
|
|
94
|
+
readonly scope: string;
|
|
95
|
+
readonly usage: string;
|
|
96
|
+
readonly layout: string;
|
|
97
|
+
nativeHandle(): bigint;
|
|
98
|
+
exportDmaBuf(): unknown;
|
|
99
|
+
release(): void;
|
|
100
|
+
}
|
|
101
|
+
interface NativeGpuMediaFrameLeaseLike {
|
|
102
|
+
readonly width: number;
|
|
103
|
+
readonly height: number;
|
|
104
|
+
readonly format: string;
|
|
105
|
+
readonly backend: string;
|
|
106
|
+
readonly handleType: string;
|
|
107
|
+
readonly sequence: number;
|
|
108
|
+
readonly released: boolean;
|
|
109
|
+
readonly ready: boolean;
|
|
110
|
+
planeInfo(index: number): GpuMediaPlaneInfo;
|
|
111
|
+
planeHandle(index: number): bigint;
|
|
112
|
+
readPlanes(): Promise<GpuMediaPlaneData[]>;
|
|
113
|
+
exportDmaBuf(): unknown;
|
|
114
|
+
completeExternalUse(): void;
|
|
115
|
+
release(): void;
|
|
116
|
+
}
|
|
117
|
+
interface NativeGpuFramePoolLike {
|
|
118
|
+
reserve(): object | null;
|
|
119
|
+
renderAsync(reservation: object, scene: unknown, camera: unknown): Promise<NativeGpuMediaFrameLeaseLike>;
|
|
120
|
+
stats(): GpuFramePoolStats;
|
|
121
|
+
close(): void;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Owns one rendered GPU texture and controls the lifetime of its borrowed
|
|
125
|
+
* native handle. Call `release()` in a `finally` block when interop completes.
|
|
126
|
+
*/
|
|
127
|
+
export declare class GpuFrameLease {
|
|
128
|
+
private readonly nativeLease;
|
|
129
|
+
constructor(nativeLease: NativeGpuFrameLeaseLike);
|
|
130
|
+
get width(): number;
|
|
131
|
+
get height(): number;
|
|
132
|
+
get format(): 'rgba8unorm';
|
|
133
|
+
get backend(): GpuOutputCapabilities['backend'];
|
|
134
|
+
get handleType(): GpuTextureHandleType;
|
|
135
|
+
get released(): boolean;
|
|
136
|
+
get completed(): true;
|
|
137
|
+
get scope(): 'same-renderer-device';
|
|
138
|
+
get usage(): 'copy-dst|copy-src|texture-binding';
|
|
139
|
+
get layout(): 'backend-managed-copy-dst';
|
|
140
|
+
/**
|
|
141
|
+
* Returns a borrowed MTLTexture*, VkImage, or ID3D12Resource* bigint.
|
|
142
|
+
* It is valid only for integrations already using this renderer's native
|
|
143
|
+
* device/context. Never destroy it, use it after release, or access/transition
|
|
144
|
+
* it concurrently with renderer work.
|
|
145
|
+
*/
|
|
146
|
+
nativeHandle(): bigint;
|
|
147
|
+
/** Export an owned DMA-BUF descriptor when `capabilities.dmaBuf.supported`. */
|
|
148
|
+
exportDmaBuf(): DmaBufFrameLease;
|
|
149
|
+
/** Idempotently invalidates the borrowed handle and drops the GPU texture. */
|
|
150
|
+
release(): void;
|
|
151
|
+
}
|
|
152
|
+
/** A ready, pooled media frame. Release only after all external GPU use ends. */
|
|
153
|
+
export declare class GpuMediaFrameLease {
|
|
154
|
+
private readonly nativeLease;
|
|
155
|
+
constructor(nativeLease: NativeGpuMediaFrameLeaseLike);
|
|
156
|
+
get width(): number;
|
|
157
|
+
get height(): number;
|
|
158
|
+
get format(): GpuMediaOutputFormat;
|
|
159
|
+
get backend(): GpuOutputCapabilities['backend'];
|
|
160
|
+
get handleType(): GpuTextureHandleType | 'unsupported';
|
|
161
|
+
get sequence(): number;
|
|
162
|
+
get released(): boolean;
|
|
163
|
+
get ready(): boolean;
|
|
164
|
+
get planes(): GpuMediaPlaneInfo[];
|
|
165
|
+
/** Borrowed same-device texture handle for one physical plane. */
|
|
166
|
+
planeHandle(index: number): bigint;
|
|
167
|
+
/** Confirm external work ended and every plane is back in requiredStateOnRelease. */
|
|
168
|
+
completeExternalUse(): void;
|
|
169
|
+
/** Explicit diagnostic CPU readback; the normal media path performs no readback. */
|
|
170
|
+
readPlanes(): Promise<GpuMediaPlaneData[]>;
|
|
171
|
+
exportDmaBuf(): DmaBufFrameLease;
|
|
172
|
+
release(): void;
|
|
173
|
+
}
|
|
174
|
+
type PoolRender = (scene: ThreeSceneRootLike, camera: ThreeCameraLike, options: RenderOptions) => Promise<GpuMediaFrameLease | null>;
|
|
175
|
+
/** Fixed-size reusable GPU output pool with explicit overflow and lease semantics. */
|
|
176
|
+
export declare class GpuFramePool {
|
|
177
|
+
private readonly nativePool;
|
|
178
|
+
private readonly renderFrame;
|
|
179
|
+
readonly options: Required<GpuFramePoolOptions>;
|
|
180
|
+
constructor(nativePool: NativeGpuFramePoolLike, renderFrame: PoolRender, options: Required<GpuFramePoolOptions>);
|
|
181
|
+
render(scene: ThreeSceneRootLike, camera: ThreeCameraLike, options?: RenderOptions): Promise<GpuMediaFrameLease | null>;
|
|
182
|
+
/** @internal */
|
|
183
|
+
renderNative(scene: unknown, camera: unknown): Promise<GpuMediaFrameLease | null>;
|
|
184
|
+
stats(): GpuFramePoolStats;
|
|
185
|
+
close(): void;
|
|
186
|
+
}
|
|
187
|
+
export declare function wrapGpuOutputCapabilities(value: unknown): GpuOutputCapabilities;
|
|
188
|
+
import type { RenderOptions, ThreeCameraLike, ThreeSceneRootLike } from './types';
|
|
189
|
+
export {};
|
|
190
|
+
//# sourceMappingURL=gpu-output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gpu-output.d.ts","sourceRoot":"","sources":["../api/gpu-output.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GpuFramePool = exports.GpuMediaFrameLease = exports.GpuFrameLease = void 0;
|
|
4
|
+
exports.wrapGpuOutputCapabilities = wrapGpuOutputCapabilities;
|
|
5
|
+
/**
|
|
6
|
+
* Owns one rendered GPU texture and controls the lifetime of its borrowed
|
|
7
|
+
* native handle. Call `release()` in a `finally` block when interop completes.
|
|
8
|
+
*/
|
|
9
|
+
class GpuFrameLease {
|
|
10
|
+
constructor(nativeLease) {
|
|
11
|
+
this.nativeLease = nativeLease;
|
|
12
|
+
}
|
|
13
|
+
get width() { return this.nativeLease.width; }
|
|
14
|
+
get height() { return this.nativeLease.height; }
|
|
15
|
+
get format() { return this.nativeLease.format; }
|
|
16
|
+
get backend() {
|
|
17
|
+
return this.nativeLease.backend;
|
|
18
|
+
}
|
|
19
|
+
get handleType() {
|
|
20
|
+
return this.nativeLease.handleType;
|
|
21
|
+
}
|
|
22
|
+
get released() { return this.nativeLease.released; }
|
|
23
|
+
get completed() { return this.nativeLease.completed; }
|
|
24
|
+
get scope() { return this.nativeLease.scope; }
|
|
25
|
+
get usage() {
|
|
26
|
+
return this.nativeLease.usage;
|
|
27
|
+
}
|
|
28
|
+
get layout() {
|
|
29
|
+
return this.nativeLease.layout;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Returns a borrowed MTLTexture*, VkImage, or ID3D12Resource* bigint.
|
|
33
|
+
* It is valid only for integrations already using this renderer's native
|
|
34
|
+
* device/context. Never destroy it, use it after release, or access/transition
|
|
35
|
+
* it concurrently with renderer work.
|
|
36
|
+
*/
|
|
37
|
+
nativeHandle() {
|
|
38
|
+
return this.nativeLease.nativeHandle();
|
|
39
|
+
}
|
|
40
|
+
/** Export an owned DMA-BUF descriptor when `capabilities.dmaBuf.supported`. */
|
|
41
|
+
exportDmaBuf() {
|
|
42
|
+
return this.nativeLease.exportDmaBuf();
|
|
43
|
+
}
|
|
44
|
+
/** Idempotently invalidates the borrowed handle and drops the GPU texture. */
|
|
45
|
+
release() {
|
|
46
|
+
this.nativeLease.release();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.GpuFrameLease = GpuFrameLease;
|
|
50
|
+
/** A ready, pooled media frame. Release only after all external GPU use ends. */
|
|
51
|
+
class GpuMediaFrameLease {
|
|
52
|
+
constructor(nativeLease) {
|
|
53
|
+
this.nativeLease = nativeLease;
|
|
54
|
+
}
|
|
55
|
+
get width() { return this.nativeLease.width; }
|
|
56
|
+
get height() { return this.nativeLease.height; }
|
|
57
|
+
get format() { return this.nativeLease.format; }
|
|
58
|
+
get backend() {
|
|
59
|
+
return this.nativeLease.backend;
|
|
60
|
+
}
|
|
61
|
+
get handleType() {
|
|
62
|
+
return this.nativeLease.handleType;
|
|
63
|
+
}
|
|
64
|
+
get sequence() { return this.nativeLease.sequence; }
|
|
65
|
+
get released() { return this.nativeLease.released; }
|
|
66
|
+
get ready() { return this.nativeLease.ready; }
|
|
67
|
+
get planes() {
|
|
68
|
+
const count = this.format === 'rgba8unorm' ? 1 : 2;
|
|
69
|
+
return Array.from({ length: count }, (_, index) => this.nativeLease.planeInfo(index));
|
|
70
|
+
}
|
|
71
|
+
/** Borrowed same-device texture handle for one physical plane. */
|
|
72
|
+
planeHandle(index) {
|
|
73
|
+
return this.nativeLease.planeHandle(index);
|
|
74
|
+
}
|
|
75
|
+
/** Confirm external work ended and every plane is back in requiredStateOnRelease. */
|
|
76
|
+
completeExternalUse() {
|
|
77
|
+
this.nativeLease.completeExternalUse();
|
|
78
|
+
}
|
|
79
|
+
/** Explicit diagnostic CPU readback; the normal media path performs no readback. */
|
|
80
|
+
readPlanes() {
|
|
81
|
+
return this.nativeLease.readPlanes();
|
|
82
|
+
}
|
|
83
|
+
exportDmaBuf() {
|
|
84
|
+
return this.nativeLease.exportDmaBuf();
|
|
85
|
+
}
|
|
86
|
+
release() { this.nativeLease.release(); }
|
|
87
|
+
}
|
|
88
|
+
exports.GpuMediaFrameLease = GpuMediaFrameLease;
|
|
89
|
+
/** Fixed-size reusable GPU output pool with explicit overflow and lease semantics. */
|
|
90
|
+
class GpuFramePool {
|
|
91
|
+
constructor(nativePool, renderFrame, options) {
|
|
92
|
+
this.nativePool = nativePool;
|
|
93
|
+
this.renderFrame = renderFrame;
|
|
94
|
+
this.options = options;
|
|
95
|
+
}
|
|
96
|
+
render(scene, camera, options = {}) {
|
|
97
|
+
return this.renderFrame(scene, camera, options);
|
|
98
|
+
}
|
|
99
|
+
/** @internal */
|
|
100
|
+
async renderNative(scene, camera) {
|
|
101
|
+
const reservation = this.nativePool.reserve();
|
|
102
|
+
if (!reservation)
|
|
103
|
+
return null;
|
|
104
|
+
const lease = await this.nativePool.renderAsync(reservation, scene, camera);
|
|
105
|
+
return new GpuMediaFrameLease(lease);
|
|
106
|
+
}
|
|
107
|
+
stats() { return this.nativePool.stats(); }
|
|
108
|
+
close() { this.nativePool.close(); }
|
|
109
|
+
}
|
|
110
|
+
exports.GpuFramePool = GpuFramePool;
|
|
111
|
+
function wrapGpuOutputCapabilities(value) {
|
|
112
|
+
return value;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=gpu-output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gpu-output.js","sourceRoot":"","sources":["../api/gpu-output.ts"],"names":[],"mappings":"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"}
|