@elah/core 0.1.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 (153) hide show
  1. package/dist/actions/index.d.ts +3 -0
  2. package/dist/actions/index.js +1 -0
  3. package/dist/actions/splitClipAtPlayhead.d.ts +8 -0
  4. package/dist/actions/splitClipAtPlayhead.js +34 -0
  5. package/dist/actions/types.d.ts +8 -0
  6. package/dist/actions/types.js +1 -0
  7. package/dist/assets/importFiles.d.ts +29 -0
  8. package/dist/assets/importFiles.js +351 -0
  9. package/dist/assets/index.d.ts +10 -0
  10. package/dist/assets/index.js +13 -0
  11. package/dist/assets/store.d.ts +13 -0
  12. package/dist/assets/store.js +20 -0
  13. package/dist/assets/types.d.ts +23 -0
  14. package/dist/assets/types.js +1 -0
  15. package/dist/debug/trace.d.ts +20 -0
  16. package/dist/debug/trace.js +98 -0
  17. package/dist/editor/TimelineEngine.d.ts +65 -0
  18. package/dist/editor/TimelineEngine.js +413 -0
  19. package/dist/editor-context.d.ts +10 -0
  20. package/dist/editor-context.js +10 -0
  21. package/dist/elements/audio.d.ts +13 -0
  22. package/dist/elements/audio.js +4 -0
  23. package/dist/elements/base.d.ts +40 -0
  24. package/dist/elements/base.js +39 -0
  25. package/dist/elements/image.d.ts +13 -0
  26. package/dist/elements/image.js +4 -0
  27. package/dist/elements/text.d.ts +12 -0
  28. package/dist/elements/text.js +8 -0
  29. package/dist/elements/video.d.ts +13 -0
  30. package/dist/elements/video.js +4 -0
  31. package/dist/export/ExportWorker.d.ts +1 -0
  32. package/dist/export/ExportWorker.js +371 -0
  33. package/dist/export/exportVideo.d.ts +3 -0
  34. package/dist/export/exportVideo.js +118 -0
  35. package/dist/export/index.d.ts +2 -0
  36. package/dist/export/index.js +1 -0
  37. package/dist/export/lazyExport.d.ts +4 -0
  38. package/dist/export/lazyExport.js +4 -0
  39. package/dist/export/types.d.ts +37 -0
  40. package/dist/export/types.js +1 -0
  41. package/dist/index.d.ts +48 -0
  42. package/dist/index.js +28 -0
  43. package/dist/media/audio/AudioPlaybackController.d.ts +26 -0
  44. package/dist/media/audio/AudioPlaybackController.js +125 -0
  45. package/dist/media/video/DecoderBackedVideoFrameProvider.d.ts +51 -0
  46. package/dist/media/video/DecoderBackedVideoFrameProvider.js +125 -0
  47. package/dist/media/video/FrameCache.d.ts +28 -0
  48. package/dist/media/video/FrameCache.js +88 -0
  49. package/dist/media/video/StreamingFrameProducer.d.ts +57 -0
  50. package/dist/media/video/StreamingFrameProducer.js +356 -0
  51. package/dist/media/video/VideoDecoderManager.d.ts +59 -0
  52. package/dist/media/video/VideoDecoderManager.js +342 -0
  53. package/dist/media/video/VideoFrameProvider.d.ts +101 -0
  54. package/dist/media/video/VideoFrameProvider.js +257 -0
  55. package/dist/media/video/demuxer/MediabunnyDemuxer.d.ts +23 -0
  56. package/dist/media/video/demuxer/MediabunnyDemuxer.js +88 -0
  57. package/dist/media/video/demuxer/createMediabunnyBackend.d.ts +32 -0
  58. package/dist/media/video/demuxer/createMediabunnyBackend.js +156 -0
  59. package/dist/media/video/index.d.ts +8 -0
  60. package/dist/media/video/index.js +5 -0
  61. package/dist/playback/PlaybackEngine.d.ts +50 -0
  62. package/dist/playback/PlaybackEngine.js +188 -0
  63. package/dist/renderer/gpu/GpuRenderer.d.ts +38 -0
  64. package/dist/renderer/gpu/GpuRenderer.js +208 -0
  65. package/dist/renderer/gpu/RenderGraph.d.ts +10 -0
  66. package/dist/renderer/gpu/RenderGraph.js +80 -0
  67. package/dist/renderer/gpu/ShaderProgram.d.ts +14 -0
  68. package/dist/renderer/gpu/ShaderProgram.js +76 -0
  69. package/dist/renderer/gpu/TexturePool.d.ts +25 -0
  70. package/dist/renderer/gpu/TexturePool.js +93 -0
  71. package/dist/renderer/gpu/VideoTexture.d.ts +13 -0
  72. package/dist/renderer/gpu/VideoTexture.js +54 -0
  73. package/dist/renderer/gpu/WebGLContext.d.ts +28 -0
  74. package/dist/renderer/gpu/WebGLContext.js +102 -0
  75. package/dist/renderer/gpu/debug/DebugGpuRenderer.d.ts +27 -0
  76. package/dist/renderer/gpu/debug/DebugGpuRenderer.js +108 -0
  77. package/dist/renderer/gpu/debug/DebugOverlay.d.ts +17 -0
  78. package/dist/renderer/gpu/debug/DebugOverlay.js +83 -0
  79. package/dist/renderer/gpu/debug/GpuDebugCounters.d.ts +38 -0
  80. package/dist/renderer/gpu/debug/GpuDebugCounters.js +72 -0
  81. package/dist/renderer/gpu/debug/GpuDebugGlobal.d.ts +16 -0
  82. package/dist/renderer/gpu/debug/GpuDebugGlobal.js +14 -0
  83. package/dist/renderer/gpu/debug/GpuRendererDebugPanel.d.ts +31 -0
  84. package/dist/renderer/gpu/debug/GpuRendererDebugPanel.js +128 -0
  85. package/dist/renderer/gpu/debug/RecordingGl.d.ts +88 -0
  86. package/dist/renderer/gpu/debug/RecordingGl.js +214 -0
  87. package/dist/renderer/gpu/debug/playground.d.ts +20 -0
  88. package/dist/renderer/gpu/debug/playground.js +64 -0
  89. package/dist/renderer/gpu/debug/scenarios.d.ts +7 -0
  90. package/dist/renderer/gpu/debug/scenarios.js +145 -0
  91. package/dist/renderer/gpu/debug/types.d.ts +16 -0
  92. package/dist/renderer/gpu/debug/types.js +1 -0
  93. package/dist/renderer/gpu/layers/FrameProbeLayer.d.ts +16 -0
  94. package/dist/renderer/gpu/layers/FrameProbeLayer.js +127 -0
  95. package/dist/renderer/gpu/layers/ImageLayer.d.ts +23 -0
  96. package/dist/renderer/gpu/layers/ImageLayer.js +124 -0
  97. package/dist/renderer/gpu/layers/TestLayer.d.ts +16 -0
  98. package/dist/renderer/gpu/layers/TestLayer.js +109 -0
  99. package/dist/renderer/gpu/layers/TextLayer.d.ts +19 -0
  100. package/dist/renderer/gpu/layers/TextLayer.js +166 -0
  101. package/dist/renderer/gpu/layers/VideoLayer.d.ts +38 -0
  102. package/dist/renderer/gpu/layers/VideoLayer.js +194 -0
  103. package/dist/renderer/gpu/layers/drawRect.d.ts +13 -0
  104. package/dist/renderer/gpu/layers/drawRect.js +55 -0
  105. package/dist/renderer/gpu/layers/objectFit.d.ts +7 -0
  106. package/dist/renderer/gpu/layers/objectFit.js +26 -0
  107. package/dist/renderer/gpu/layers/textLayout.d.ts +47 -0
  108. package/dist/renderer/gpu/layers/textLayout.js +82 -0
  109. package/dist/renderer/gpu/layers/types.d.ts +18 -0
  110. package/dist/renderer/gpu/layers/types.js +1 -0
  111. package/dist/renderer/gpu/shaders/quad.frag.d.ts +1 -0
  112. package/dist/renderer/gpu/shaders/quad.frag.js +14 -0
  113. package/dist/renderer/gpu/shaders/quad.vert.d.ts +1 -0
  114. package/dist/renderer/gpu/shaders/quad.vert.js +28 -0
  115. package/dist/renderer/gpu/types.d.ts +21 -0
  116. package/dist/renderer/gpu/types.js +1 -0
  117. package/dist/renderer/gpu/viewport.d.ts +7 -0
  118. package/dist/renderer/gpu/viewport.js +33 -0
  119. package/dist/renderer/types.d.ts +7 -0
  120. package/dist/renderer/types.js +1 -0
  121. package/dist/resolver/resolveTimeline.d.ts +3 -0
  122. package/dist/resolver/resolveTimeline.js +249 -0
  123. package/dist/resolver/scene.d.ts +54 -0
  124. package/dist/resolver/scene.js +1 -0
  125. package/dist/stores/playback.store.d.ts +50 -0
  126. package/dist/stores/playback.store.js +42 -0
  127. package/dist/stores/selection.store.d.ts +12 -0
  128. package/dist/stores/selection.store.js +19 -0
  129. package/dist/stores/tracks.store.d.ts +19 -0
  130. package/dist/stores/tracks.store.js +27 -0
  131. package/dist/stores/transitions.store.d.ts +9 -0
  132. package/dist/stores/transitions.store.js +7 -0
  133. package/dist/track/track.d.ts +8 -0
  134. package/dist/track/track.js +19 -0
  135. package/dist/types/index.d.ts +117 -0
  136. package/dist/types/index.js +1 -0
  137. package/dist/utils/frames.d.ts +20 -0
  138. package/dist/utils/frames.js +40 -0
  139. package/dist/utils/id.d.ts +1 -0
  140. package/dist/utils/id.js +3 -0
  141. package/dist/utils/snap.d.ts +5 -0
  142. package/dist/utils/snap.js +79 -0
  143. package/dist/visitor/add.d.ts +3 -0
  144. package/dist/visitor/add.js +16 -0
  145. package/dist/visitor/clone.d.ts +3 -0
  146. package/dist/visitor/clone.js +25 -0
  147. package/dist/visitor/remove.d.ts +5 -0
  148. package/dist/visitor/remove.js +29 -0
  149. package/dist/visitor/split.d.ts +3 -0
  150. package/dist/visitor/split.js +31 -0
  151. package/dist/visitor/update.d.ts +4 -0
  152. package/dist/visitor/update.js +31 -0
  153. package/package.json +31 -0
@@ -0,0 +1,88 @@
1
+ export declare class RecordingGl {
2
+ private readonly _log;
3
+ private _handleCounter;
4
+ private _boundProgram;
5
+ private _boundVao;
6
+ private _activeTexture;
7
+ private _boundTextures;
8
+ get log(): Uint8Array;
9
+ reset(): void;
10
+ digest(): Promise<string>;
11
+ texImage2D(_target: number, _level: number, _internalformat: number, widthOrFormat: number, heightOrType: number, borderOrSource: unknown, format?: number, _type?: number, _source?: unknown): void;
12
+ drawArrays(mode: number, _first: number, count: number): void;
13
+ uniformMatrix3fv(location: WebGLUniformLocation | null, _transpose: boolean, value: Float32Array | number[]): void;
14
+ uniform1f(location: WebGLUniformLocation | null, x: number): void;
15
+ uniform1i(location: WebGLUniformLocation | null, x: number): void;
16
+ uniform2f(location: WebGLUniformLocation | null, x: number, y: number): void;
17
+ clear(_mask: number): void;
18
+ useProgram(program: WebGLProgram | null): void;
19
+ bindVertexArray(vao: WebGLVertexArrayObject | null): void;
20
+ bindTexture(_target: number, texture: WebGLTexture | null): void;
21
+ texParameteri(_target: number, pname: number, param: number): void;
22
+ activeTexture(texture: number): void;
23
+ createProgram(): WebGLProgram;
24
+ createShader(_type: number): WebGLShader;
25
+ createTexture(): WebGLTexture;
26
+ createVertexArray(): WebGLVertexArrayObject;
27
+ createBuffer(): WebGLBuffer;
28
+ shaderSource(_shader: WebGLShader, _source: string): void;
29
+ compileShader(_shader: WebGLShader): void;
30
+ getShaderParameter(_shader: WebGLShader, _pname: number): unknown;
31
+ getShaderInfoLog(_shader: WebGLShader): string;
32
+ attachShader(_program: WebGLProgram, _shader: WebGLShader): void;
33
+ detachShader(_program: WebGLProgram, _shader: WebGLShader): void;
34
+ linkProgram(_program: WebGLProgram): void;
35
+ getProgramParameter(_program: WebGLProgram, _pname: number): unknown;
36
+ getProgramInfoLog(_program: WebGLProgram): string;
37
+ deleteShader(_shader: WebGLShader | null): void;
38
+ deleteProgram(_program: WebGLProgram | null): void;
39
+ deleteTexture(_texture: WebGLTexture | null): void;
40
+ deleteVertexArray(_vao: WebGLVertexArrayObject | null): void;
41
+ deleteBuffer(_buffer: WebGLBuffer | null): void;
42
+ getUniformLocation(_program: WebGLProgram, name: string): WebGLUniformLocation;
43
+ getAttribLocation(_program: WebGLProgram, _name: string): number;
44
+ enableVertexAttribArray(_index: number): void;
45
+ vertexAttribPointer(_index: number, _size: number, _type: number, _normalized: boolean, _stride: number, _offset: number): void;
46
+ bindBuffer(_target: number, _buffer: WebGLBuffer | null): void;
47
+ bufferData(_target: number, _data: unknown, _usage: number): void;
48
+ viewport(_x: number, _y: number, _width: number, _height: number): void;
49
+ clearColor(_r: number, _g: number, _b: number, _a: number): void;
50
+ enable(_cap: number): void;
51
+ blendFuncSeparate(_srcRGB: number, _dstRGB: number, _srcAlpha: number, _dstAlpha: number): void;
52
+ getContextAttributes(): WebGLContextAttributes;
53
+ isContextLost(): boolean;
54
+ generateMipmap(_target: number): void;
55
+ pixelStorei(_pname: number, _param: number): void;
56
+ readonly TEXTURE_2D = 3553;
57
+ readonly TRIANGLE_STRIP = 5;
58
+ readonly ARRAY_BUFFER = 34962;
59
+ readonly STATIC_DRAW = 34996;
60
+ readonly FLOAT = 5126;
61
+ readonly UNSIGNED_BYTE = 5121;
62
+ readonly RGBA = 6408;
63
+ readonly COLOR_BUFFER_BIT = 16384;
64
+ readonly VERTEX_SHADER = 35633;
65
+ readonly FRAGMENT_SHADER = 35632;
66
+ readonly LINK_STATUS = 35714;
67
+ readonly COMPILE_STATUS = 35713;
68
+ readonly TEXTURE0 = 33984;
69
+ readonly TEXTURE_MIN_FILTER = 10241;
70
+ readonly TEXTURE_MAG_FILTER = 10240;
71
+ readonly LINEAR = 9729;
72
+ readonly TEXTURE_WRAP_S = 10242;
73
+ readonly TEXTURE_WRAP_T = 10243;
74
+ readonly CLAMP_TO_EDGE = 33071;
75
+ readonly BLEND = 3042;
76
+ readonly ONE = 1;
77
+ readonly ONE_MINUS_SRC_ALPHA = 771;
78
+ readonly SRC_ALPHA = 770;
79
+ readonly UNPACK_FLIP_Y_WEBGL = 37440;
80
+ private _write;
81
+ private _writeUint32;
82
+ private _writeFloat32;
83
+ private _makeHandle;
84
+ private _locationId;
85
+ private readonly _nameMap;
86
+ private _nameCounter;
87
+ private _stableNameId;
88
+ }
@@ -0,0 +1,214 @@
1
+ var Tag;
2
+ (function (Tag) {
3
+ Tag[Tag["TexImage2D"] = 1] = "TexImage2D";
4
+ Tag[Tag["DrawArrays"] = 2] = "DrawArrays";
5
+ Tag[Tag["UniformMatrix3fv"] = 3] = "UniformMatrix3fv";
6
+ Tag[Tag["Uniform1f"] = 4] = "Uniform1f";
7
+ Tag[Tag["Uniform1i"] = 5] = "Uniform1i";
8
+ Tag[Tag["Clear"] = 6] = "Clear";
9
+ Tag[Tag["UseProgram"] = 7] = "UseProgram";
10
+ Tag[Tag["BindVertexArray"] = 8] = "BindVertexArray";
11
+ Tag[Tag["BindTexture"] = 9] = "BindTexture";
12
+ Tag[Tag["TexParameteri"] = 10] = "TexParameteri";
13
+ })(Tag || (Tag = {}));
14
+ export class RecordingGl {
15
+ constructor() {
16
+ this._log = [];
17
+ this._handleCounter = 1;
18
+ this._boundProgram = 0;
19
+ this._boundVao = 0;
20
+ this._activeTexture = 0;
21
+ this._boundTextures = new Map();
22
+ this.TEXTURE_2D = 0x0de1;
23
+ this.TRIANGLE_STRIP = 0x0005;
24
+ this.ARRAY_BUFFER = 0x8892;
25
+ this.STATIC_DRAW = 0x88b4;
26
+ this.FLOAT = 0x1406;
27
+ this.UNSIGNED_BYTE = 0x1401;
28
+ this.RGBA = 0x1908;
29
+ this.COLOR_BUFFER_BIT = 0x4000;
30
+ this.VERTEX_SHADER = 0x8b31;
31
+ this.FRAGMENT_SHADER = 0x8b30;
32
+ this.LINK_STATUS = 0x8b82;
33
+ this.COMPILE_STATUS = 0x8b81;
34
+ this.TEXTURE0 = 0x84c0;
35
+ this.TEXTURE_MIN_FILTER = 0x2801;
36
+ this.TEXTURE_MAG_FILTER = 0x2800;
37
+ this.LINEAR = 0x2601;
38
+ this.TEXTURE_WRAP_S = 0x2802;
39
+ this.TEXTURE_WRAP_T = 0x2803;
40
+ this.CLAMP_TO_EDGE = 0x812f;
41
+ this.BLEND = 0x0be2;
42
+ this.ONE = 1;
43
+ this.ONE_MINUS_SRC_ALPHA = 0x0303;
44
+ this.SRC_ALPHA = 0x0302;
45
+ this.UNPACK_FLIP_Y_WEBGL = 0x9240;
46
+ this._nameMap = new Map();
47
+ this._nameCounter = 1;
48
+ }
49
+ get log() {
50
+ return new Uint8Array(this._log);
51
+ }
52
+ reset() {
53
+ this._log.length = 0;
54
+ this._handleCounter = 1;
55
+ this._boundProgram = 0;
56
+ this._boundVao = 0;
57
+ this._activeTexture = 0;
58
+ this._boundTextures.clear();
59
+ this._nameMap.clear();
60
+ this._nameCounter = 1;
61
+ }
62
+ async digest() {
63
+ const bytes = new Uint8Array(this._log);
64
+ const hashBuffer = await crypto.subtle.digest('SHA-256', bytes);
65
+ return Array.from(new Uint8Array(hashBuffer))
66
+ .map((b) => b.toString(16).padStart(2, '0'))
67
+ .join('');
68
+ }
69
+ texImage2D(_target, _level, _internalformat, widthOrFormat, heightOrType, borderOrSource, format, _type, _source) {
70
+ this._write([Tag.TexImage2D]);
71
+ if (format !== undefined) {
72
+ this._writeUint32(widthOrFormat);
73
+ this._writeUint32(heightOrType);
74
+ this._writeUint32(format);
75
+ }
76
+ else {
77
+ this._writeUint32(widthOrFormat);
78
+ this._writeUint32(heightOrType);
79
+ void borderOrSource;
80
+ }
81
+ }
82
+ drawArrays(mode, _first, count) {
83
+ this._write([Tag.DrawArrays]);
84
+ this._writeUint32(mode);
85
+ this._writeUint32(count);
86
+ }
87
+ uniformMatrix3fv(location, _transpose, value) {
88
+ this._write([Tag.UniformMatrix3fv]);
89
+ this._writeUint32(this._locationId(location));
90
+ for (const v of value) {
91
+ this._writeFloat32(v);
92
+ }
93
+ }
94
+ uniform1f(location, x) {
95
+ this._write([Tag.Uniform1f]);
96
+ this._writeUint32(this._locationId(location));
97
+ this._writeFloat32(x);
98
+ }
99
+ uniform1i(location, x) {
100
+ this._write([Tag.Uniform1i]);
101
+ this._writeUint32(this._locationId(location));
102
+ this._writeUint32(x);
103
+ }
104
+ uniform2f(location, x, y) {
105
+ this._write([Tag.Uniform1f, 0x02]);
106
+ this._writeUint32(this._locationId(location));
107
+ this._writeFloat32(x);
108
+ this._writeFloat32(y);
109
+ }
110
+ clear(_mask) {
111
+ this._write([Tag.Clear]);
112
+ }
113
+ useProgram(program) {
114
+ this._write([Tag.UseProgram]);
115
+ this._writeUint32(program ? program._id ?? 0 : 0);
116
+ this._boundProgram = program ? program._id ?? 0 : 0;
117
+ }
118
+ bindVertexArray(vao) {
119
+ this._write([Tag.BindVertexArray]);
120
+ this._writeUint32(vao ? vao._id ?? 0 : 0);
121
+ this._boundVao = vao ? vao._id ?? 0 : 0;
122
+ }
123
+ bindTexture(_target, texture) {
124
+ this._write([Tag.BindTexture]);
125
+ const id = texture ? texture._id ?? 0 : 0;
126
+ this._writeUint32(id);
127
+ this._boundTextures.set(this._activeTexture, id);
128
+ }
129
+ texParameteri(_target, pname, param) {
130
+ this._write([Tag.TexParameteri]);
131
+ this._writeUint32(pname);
132
+ this._writeUint32(param);
133
+ }
134
+ activeTexture(texture) {
135
+ this._activeTexture = texture;
136
+ }
137
+ createProgram() {
138
+ return this._makeHandle();
139
+ }
140
+ createShader(_type) {
141
+ return this._makeHandle();
142
+ }
143
+ createTexture() {
144
+ return this._makeHandle();
145
+ }
146
+ createVertexArray() {
147
+ return this._makeHandle();
148
+ }
149
+ createBuffer() {
150
+ return this._makeHandle();
151
+ }
152
+ shaderSource(_shader, _source) { }
153
+ compileShader(_shader) { }
154
+ getShaderParameter(_shader, _pname) { return true; }
155
+ getShaderInfoLog(_shader) { return ''; }
156
+ attachShader(_program, _shader) { }
157
+ detachShader(_program, _shader) { }
158
+ linkProgram(_program) { }
159
+ getProgramParameter(_program, _pname) { return true; }
160
+ getProgramInfoLog(_program) { return ''; }
161
+ deleteShader(_shader) { }
162
+ deleteProgram(_program) { }
163
+ deleteTexture(_texture) { }
164
+ deleteVertexArray(_vao) { }
165
+ deleteBuffer(_buffer) { }
166
+ getUniformLocation(_program, name) {
167
+ return { _id: this._stableNameId(name) };
168
+ }
169
+ getAttribLocation(_program, _name) { return 0; }
170
+ enableVertexAttribArray(_index) { }
171
+ vertexAttribPointer(_index, _size, _type, _normalized, _stride, _offset) { }
172
+ bindBuffer(_target, _buffer) { }
173
+ bufferData(_target, _data, _usage) { }
174
+ viewport(_x, _y, _width, _height) { }
175
+ clearColor(_r, _g, _b, _a) { }
176
+ enable(_cap) { }
177
+ blendFuncSeparate(_srcRGB, _dstRGB, _srcAlpha, _dstAlpha) { }
178
+ getContextAttributes() { return {}; }
179
+ isContextLost() { return false; }
180
+ generateMipmap(_target) { }
181
+ pixelStorei(_pname, _param) { }
182
+ _write(bytes) {
183
+ for (const b of bytes) {
184
+ this._log.push(b);
185
+ }
186
+ }
187
+ _writeUint32(value) {
188
+ const buf = new ArrayBuffer(4);
189
+ new DataView(buf).setUint32(0, value, false);
190
+ this._write(Array.from(new Uint8Array(buf)));
191
+ }
192
+ _writeFloat32(value) {
193
+ const buf = new ArrayBuffer(4);
194
+ new DataView(buf).setFloat32(0, value, false);
195
+ this._write(Array.from(new Uint8Array(buf)));
196
+ }
197
+ _makeHandle() {
198
+ const id = this._handleCounter++;
199
+ return { _id: id };
200
+ }
201
+ _locationId(location) {
202
+ if (!location)
203
+ return 0;
204
+ return location._id ?? 0;
205
+ }
206
+ _stableNameId(name) {
207
+ let id = this._nameMap.get(name);
208
+ if (id === undefined) {
209
+ id = this._nameCounter++;
210
+ this._nameMap.set(name, id);
211
+ }
212
+ return id;
213
+ }
214
+ }
@@ -0,0 +1,20 @@
1
+ import type { DebugRenderItem, DebugScenario } from './types';
2
+ export interface PlaygroundOptions {
3
+ stage?: {
4
+ width: number;
5
+ height: number;
6
+ };
7
+ showOverlay?: boolean;
8
+ dpr?: number;
9
+ enableGpuDebug?: boolean;
10
+ }
11
+ export interface PlaygroundHandle {
12
+ render(items: DebugRenderItem[]): void;
13
+ resize(cssWidth: number, cssHeight: number, dpr?: number): void;
14
+ dispose(): void;
15
+ }
16
+ export declare function renderDebugScene(container: HTMLElement, items: DebugRenderItem[], options?: PlaygroundOptions): PlaygroundHandle & (() => void);
17
+ export declare function loadDebugScenario(container: HTMLElement, scenario: DebugScenario, options?: PlaygroundOptions): PlaygroundHandle & (() => void);
18
+ export { loadScenario } from './scenarios';
19
+ export type { DebugRenderItem, DebugScenario } from './types';
20
+ export { DEBUG_STAGE } from './types';
@@ -0,0 +1,64 @@
1
+ import { DebugGpuRenderer } from './DebugGpuRenderer';
2
+ import { DebugOverlay } from './DebugOverlay';
3
+ import { GpuDebugCounters } from './GpuDebugCounters';
4
+ import { installGpuDebugGlobal, uninstallGpuDebugGlobal } from './GpuDebugGlobal';
5
+ import { loadScenario } from './scenarios';
6
+ import { DEBUG_STAGE } from './types';
7
+ export function renderDebugScene(container, items, options = {}) {
8
+ const stage = options.stage ?? { ...DEBUG_STAGE };
9
+ const dpr = options.dpr ?? (typeof window !== 'undefined' ? window.devicePixelRatio : 1);
10
+ const renderer = new DebugGpuRenderer({ stage });
11
+ renderer.mount(container);
12
+ const cssWidth = container.clientWidth || stage.width;
13
+ const cssHeight = container.clientHeight || stage.height;
14
+ renderer.resize(cssWidth, cssHeight, dpr);
15
+ renderer.render(items);
16
+ let currentItems = items;
17
+ let overlay = null;
18
+ if (options.showOverlay) {
19
+ overlay = new DebugOverlay(container, stage);
20
+ overlay.update(items, 0, stage);
21
+ }
22
+ if (options.enableGpuDebug) {
23
+ installGpuDebugGlobal(() => ({
24
+ decoderStates: {},
25
+ cacheSizes: {},
26
+ textureCount: 0,
27
+ activeClipIds: currentItems.map((item) => item.id),
28
+ counters: GpuDebugCounters.snapshot(),
29
+ }));
30
+ }
31
+ let lastFrameTime = typeof performance !== 'undefined' ? performance.now() : 0;
32
+ const handle = {
33
+ render(nextItems) {
34
+ currentItems = nextItems;
35
+ const now = typeof performance !== 'undefined' ? performance.now() : 0;
36
+ const dt = now - lastFrameTime;
37
+ const fps = dt > 0 ? 1000 / dt : 0;
38
+ lastFrameTime = now;
39
+ renderer.render(nextItems);
40
+ overlay?.update(nextItems, fps, stage);
41
+ },
42
+ resize(cssW, cssH, nextDpr) {
43
+ renderer.resize(cssW, cssH, nextDpr ?? dpr);
44
+ renderer.render(currentItems);
45
+ overlay?.update(currentItems, 0, stage);
46
+ },
47
+ dispose() {
48
+ overlay?.dispose();
49
+ overlay = null;
50
+ if (options.enableGpuDebug) {
51
+ uninstallGpuDebugGlobal();
52
+ }
53
+ renderer.dispose();
54
+ },
55
+ };
56
+ const cleanup = () => handle.dispose();
57
+ return Object.assign(cleanup, handle);
58
+ }
59
+ export function loadDebugScenario(container, scenario, options = {}) {
60
+ const items = loadScenario(scenario);
61
+ return renderDebugScene(container, items, options);
62
+ }
63
+ export { loadScenario } from './scenarios';
64
+ export { DEBUG_STAGE } from './types';
@@ -0,0 +1,7 @@
1
+ import { type DebugRenderItem, type DebugScenario } from './types';
2
+ export declare function scenarioA(): DebugRenderItem[];
3
+ export declare function scenarioB(): DebugRenderItem[];
4
+ export declare function scenarioC(): DebugRenderItem[];
5
+ export declare function scenarioD(): DebugRenderItem[];
6
+ export declare function scenarioE(): DebugRenderItem[];
7
+ export declare function loadScenario(scenario: DebugScenario): DebugRenderItem[];
@@ -0,0 +1,145 @@
1
+ import { DEBUG_STAGE } from './types';
2
+ const { width: SW, height: SH } = DEBUG_STAGE;
3
+ export function scenarioA() {
4
+ return [
5
+ {
6
+ id: 'a-center',
7
+ zIndex: 0,
8
+ color: [0.9, 0.15, 0.15, 1],
9
+ x: (SW - 400) / 2,
10
+ y: (SH - 300) / 2,
11
+ width: 400,
12
+ height: 300,
13
+ },
14
+ ];
15
+ }
16
+ export function scenarioB() {
17
+ return [
18
+ {
19
+ id: 'b-back',
20
+ zIndex: 0,
21
+ color: [0.2, 0.4, 0.9, 1],
22
+ x: 200,
23
+ y: 150,
24
+ width: 500,
25
+ height: 400,
26
+ },
27
+ {
28
+ id: 'b-mid-low',
29
+ zIndex: 1,
30
+ color: [0.2, 0.75, 0.3, 1],
31
+ x: 350,
32
+ y: 200,
33
+ width: 500,
34
+ height: 400,
35
+ },
36
+ {
37
+ id: 'b-mid-high',
38
+ zIndex: 2,
39
+ color: [0.9, 0.7, 0.1, 1],
40
+ x: 500,
41
+ y: 250,
42
+ width: 500,
43
+ height: 400,
44
+ },
45
+ {
46
+ id: 'b-front',
47
+ zIndex: 3,
48
+ color: [0.85, 0.2, 0.2, 1],
49
+ x: 650,
50
+ y: 300,
51
+ width: 500,
52
+ height: 400,
53
+ },
54
+ ];
55
+ }
56
+ export function scenarioC() {
57
+ return [
58
+ {
59
+ id: 'c-translate',
60
+ zIndex: 0,
61
+ color: [0.2, 0.4, 0.9, 1],
62
+ x: 80,
63
+ y: 80,
64
+ width: 200,
65
+ height: 150,
66
+ },
67
+ {
68
+ id: 'c-scale',
69
+ zIndex: 1,
70
+ color: [0.2, 0.75, 0.3, 1],
71
+ x: SW / 2 - 150,
72
+ y: SH / 2 - 100,
73
+ width: 300,
74
+ height: 200,
75
+ rotation: 0,
76
+ },
77
+ {
78
+ id: 'c-rotate',
79
+ zIndex: 2,
80
+ color: [0.85, 0.2, 0.85, 1],
81
+ x: SW - 380,
82
+ y: SH / 2 - 120,
83
+ width: 260,
84
+ height: 240,
85
+ rotation: Math.PI / 6,
86
+ },
87
+ ];
88
+ }
89
+ export function scenarioD() {
90
+ return [
91
+ {
92
+ id: 'd-opaque',
93
+ zIndex: 0,
94
+ color: [0.9, 0.15, 0.15, 1],
95
+ x: 300,
96
+ y: 180,
97
+ width: 400,
98
+ height: 360,
99
+ opacity: 1.0,
100
+ },
101
+ {
102
+ id: 'd-half',
103
+ zIndex: 1,
104
+ color: [0.15, 0.75, 0.25, 1],
105
+ x: 440,
106
+ y: 220,
107
+ width: 400,
108
+ height: 360,
109
+ opacity: 0.5,
110
+ },
111
+ {
112
+ id: 'd-quarter',
113
+ zIndex: 2,
114
+ color: [0.15, 0.35, 0.9, 1],
115
+ x: 580,
116
+ y: 260,
117
+ width: 400,
118
+ height: 360,
119
+ opacity: 0.25,
120
+ },
121
+ ];
122
+ }
123
+ export function scenarioE() {
124
+ return [
125
+ {
126
+ id: 'e-fullstage',
127
+ zIndex: 0,
128
+ color: [0.1, 0.65, 0.75, 1],
129
+ x: 0,
130
+ y: 0,
131
+ width: SW,
132
+ height: SH,
133
+ },
134
+ ];
135
+ }
136
+ const SCENARIO_FACTORIES = {
137
+ A: scenarioA,
138
+ B: scenarioB,
139
+ C: scenarioC,
140
+ D: scenarioD,
141
+ E: scenarioE,
142
+ };
143
+ export function loadScenario(scenario) {
144
+ return SCENARIO_FACTORIES[scenario]();
145
+ }
@@ -0,0 +1,16 @@
1
+ export interface DebugRenderItem {
2
+ id: string;
3
+ zIndex: number;
4
+ color: [number, number, number, number];
5
+ x: number;
6
+ y: number;
7
+ width: number;
8
+ height: number;
9
+ rotation?: number;
10
+ opacity?: number;
11
+ }
12
+ export type DebugScenario = 'A' | 'B' | 'C' | 'D' | 'E';
13
+ export declare const DEBUG_STAGE: {
14
+ readonly width: 1280;
15
+ readonly height: 720;
16
+ };
@@ -0,0 +1 @@
1
+ export const DEBUG_STAGE = { width: 1280, height: 720 };
@@ -0,0 +1,16 @@
1
+ import type { ActiveVideoClip } from '../../../resolver/scene';
2
+ import type { Layer, LayerContext } from './types';
3
+ export declare class FrameProbeLayer implements Layer<ActiveVideoClip> {
4
+ private _program;
5
+ private _vao;
6
+ private _gl;
7
+ private readonly _resources;
8
+ acquire(item: ActiveVideoClip, ctx: LayerContext): void;
9
+ release(itemId: string): void;
10
+ draw(item: ActiveVideoClip, ctx: LayerContext): void;
11
+ dispose(): void;
12
+ notifyContextLost(): void;
13
+ disposeGL(gl: WebGL2RenderingContext): void;
14
+ private _paint;
15
+ private _ensurePipeline;
16
+ }