@xifu/shader-graph-glsl 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.
@@ -0,0 +1,403 @@
1
+ import { S as ShaderConfig, b as UniformValues } from '../ShaderConfig-RGrO5cST.js';
2
+ export { P as ParameterConfig, c as ShaderCompileOptions, d as SubGraphConfig, T as TextureBinding, e as UniformDataType, U as UniformMeta, a as UniformValue } from '../ShaderConfig-RGrO5cST.js';
3
+
4
+ /**
5
+ * RuntimeProgram — 着色器程序编译与管理 (无 Three.js 依赖)
6
+ */
7
+
8
+ /** 编译后的着色器程序 */
9
+ interface RuntimeProgram {
10
+ /** WebGL 程序 */
11
+ program: WebGLProgram;
12
+ /** uniform location 缓存 */
13
+ uniforms: Record<string, WebGLUniformLocation | null>;
14
+ /** attribute location 缓存 */
15
+ attribs: Record<string, number>;
16
+ /** 关联的 ShaderConfig */
17
+ config: ShaderConfig;
18
+ /** 纹理单元追踪 */
19
+ textureUnitMap: Record<string, number>;
20
+ }
21
+
22
+ /**
23
+ * RuntimeRenderer — 独立运行时引擎主类
24
+ *
25
+ * 无 Three.js 依赖,通过 ShaderConfig 完成渲染。
26
+ * 提供对编辑器/预览场景适配的 Three.js 粘合层。
27
+ */
28
+
29
+ interface VertexAttribute$1 {
30
+ data: Float32Array;
31
+ size: number;
32
+ normalized?: boolean;
33
+ stride?: number;
34
+ offset?: number;
35
+ }
36
+ interface RuntimeGeometry {
37
+ attributes: Record<string, VertexAttribute$1>;
38
+ index?: Uint16Array | Uint32Array;
39
+ vertexCount: number;
40
+ }
41
+ interface RuntimeMesh {
42
+ geometry: RuntimeGeometry;
43
+ program: RuntimeProgram;
44
+ uniforms: UniformValues;
45
+ mode?: number;
46
+ }
47
+ declare class RuntimeRenderer {
48
+ gl: WebGL2RenderingContext;
49
+ private programs;
50
+ private currentProgram;
51
+ private defaultVAO;
52
+ private textureUnitCounter;
53
+ private textureCache;
54
+ private canvas;
55
+ clearColor: [number, number, number, number];
56
+ viewport: [number, number, number, number];
57
+ scissor: [number, number, number, number];
58
+ constructor(canvas: HTMLCanvasElement, options?: WebGLContextAttributes);
59
+ /** 从 ShaderConfig 加载程序 */
60
+ loadProgram(config: ShaderConfig, key?: string): RuntimeProgram;
61
+ /** 获取已缓存的程序 */
62
+ getProgram(key: string): RuntimeProgram | undefined;
63
+ /** 加载纹理 (支持 URL 或 HTMLImageElement) */
64
+ loadTexture(url: string): Promise<WebGLTexture>;
65
+ /** 绑定纹理到 uniform */
66
+ bindTexture(uniformName: string, texture: WebGLTexture, unit: number): void;
67
+ /** 创建几何体 VAO */
68
+ createGeometry(geo: RuntimeGeometry): WebGLVertexArrayObject;
69
+ /** 清屏 */
70
+ clear(): void;
71
+ /** 渲染单次绘制调用 */
72
+ drawMesh(mesh: RuntimeMesh): void;
73
+ /** 调整大小 */
74
+ resize(width: number, height: number): void;
75
+ /** 销毁 */
76
+ dispose(): void;
77
+ }
78
+
79
+ /**
80
+ * @xifu/shader-graph-glsl/runtime — 公共类型定义
81
+ */
82
+
83
+ /** 顶点属性 */
84
+ interface VertexAttribute {
85
+ /** 顶点数据 */
86
+ data: Float32Array;
87
+ /** 每分量元素数 (1=float, 2=vec2, 3=vec3, 4=vec4) */
88
+ size: number;
89
+ /** 是否归一化 */
90
+ normalized?: boolean;
91
+ /** 步长 */
92
+ stride?: number;
93
+ /** 偏移 */
94
+ offset?: number;
95
+ }
96
+ /** 几何体描述 */
97
+ interface GeometryDescriptor {
98
+ /** 顶点属性集合 */
99
+ attributes: Record<string, VertexAttribute>;
100
+ /** 索引缓冲区 (可选) */
101
+ index?: Uint16Array | Uint32Array;
102
+ /** 顶点数 */
103
+ vertexCount: number;
104
+ }
105
+ /** 渲染状态 */
106
+ interface RenderState {
107
+ /** 清除颜色 */
108
+ clearColor?: [number, number, number, number];
109
+ /** 是否启用深度测试 */
110
+ depthTest?: boolean;
111
+ /** 深度测试函数 */
112
+ depthFunc?: 'never' | 'less' | 'equal' | 'lequal' | 'greater' | 'notequal' | 'gequal' | 'always';
113
+ /** 是否启用混合 */
114
+ blend?: boolean;
115
+ /** 混合源因子 */
116
+ blendSrc?: number;
117
+ /** 混合目标因子 */
118
+ blendDst?: number;
119
+ /** 视口 */
120
+ viewport?: [number, number, number, number];
121
+ }
122
+ /** 网格渲染描述 */
123
+ interface MeshDescriptor {
124
+ /** 几何体 */
125
+ geometry: GeometryDescriptor;
126
+ /** 着色器程序句柄 */
127
+ program: RuntimeProgram;
128
+ /** uniform 值 */
129
+ uniforms: UniformValues;
130
+ /** 绘制模式 (gl.TRIANGLES / gl.LINES 等,默认 gl.TRIANGLES) */
131
+ mode?: number;
132
+ /** 渲染状态覆盖 */
133
+ renderState?: RenderState;
134
+ }
135
+
136
+ /**
137
+ * ShaderGraphRuntime — 独立 WebGL2 着色器运行时引擎
138
+ *
139
+ * # 概述
140
+ *
141
+ * 纯 WebGL2 运行时,无任何第三方框架依赖。
142
+ * 可直接加载由 ShaderGraphEditor 编译产出的 ShaderConfig 并渲染。
143
+ *
144
+ * 子图支持:
145
+ * 子图在编译时已内联到主图的 vertCode/fragCode 中,运行时通过
146
+ * `linkSubGraph()` 或 `loadWithSubGraphs()` 将子图的 uniform 元数据
147
+ * 关联到主程序,使运行时能正确管理所有 uniform。
148
+ *
149
+ * # 快速开始
150
+ *
151
+ * ```ts
152
+ * import { ShaderGraphRuntime } from '@xifu/shader-graph-glsl/runtime';
153
+ *
154
+ * const canvas = document.getElementById('canvas') as HTMLCanvasElement;
155
+ * const runtime = new ShaderGraphRuntime(canvas);
156
+ *
157
+ * // 加载主图 + 关联子图
158
+ * const program = runtime.loadWithSubGraphs(mainConfig, {
159
+ * 'mySub': subConfig
160
+ * });
161
+ *
162
+ * // 或分步: 先加载主图, 再关联子图
163
+ * // const program = runtime.load(mainConfig);
164
+ * // runtime.linkSubGraph(program, 'mySub', subConfig);
165
+ *
166
+ * // 设置 uniform
167
+ * runtime.uniforms(program).set('uColor', [1, 0, 0, 1]);
168
+ *
169
+ * // 每帧渲染
170
+ * runtime.play((time) => {
171
+ * runtime.uniforms(program).set('uTime', time);
172
+ * runtime.draw({ geometry, program, uniforms: {} });
173
+ * });
174
+ * ```
175
+ *
176
+ * # 与 Three.js 集成
177
+ *
178
+ * ```ts
179
+ * // ShaderConfig.vertCode / fragCode 可直接用于 RawShaderMaterial
180
+ * const material = new THREE.RawShaderMaterial({
181
+ * vertexShader: config.vertCode,
182
+ * fragmentShader: config.fragCode,
183
+ * uniforms: { uTime: { value: 0 } },
184
+ * });
185
+ * ```
186
+ *
187
+ * @module
188
+ */
189
+
190
+ /** 运行时选项 */
191
+ interface RuntimeOptions {
192
+ /** WebGL context 属性 */
193
+ contextAttributes?: WebGLContextAttributes;
194
+ /** 默认清除颜色 (默认 [0,0,0,0]) */
195
+ clearColor?: [number, number, number, number];
196
+ }
197
+ /** 动画帧回调 */
198
+ type FrameCallback = (time: number, delta: number) => void;
199
+ /** 程序句柄 */
200
+ type ProgramHandle = RuntimeProgram;
201
+ /** Uniform 绑定器 — 链式调用 */
202
+ interface UniformBinder {
203
+ set(name: string, value: number | number[]): UniformBinder;
204
+ setMany(values: UniformValues): UniformBinder;
205
+ texture(name: string, source: TexImageSource, unit?: number): UniformBinder;
206
+ commit(): void;
207
+ }
208
+ /**
209
+ * ShaderGraphRuntime 主类
210
+ *
211
+ * ## 特性
212
+ * - 无第三方依赖,纯 WebGL2
213
+ * - 支持 ShaderConfig 直接加载
214
+ * - 内置动画循环
215
+ * - 纹理管理
216
+ * - 渲染状态控制
217
+ */
218
+ declare class ShaderGraphRuntime {
219
+ /** 底层渲染器 */
220
+ readonly renderer: RuntimeRenderer;
221
+ /** WebGL 上下文 */
222
+ readonly gl: WebGL2RenderingContext;
223
+ /** 画布 */
224
+ readonly canvas: HTMLCanvasElement;
225
+ /** 子图关联表: programKey → { subGraphId → ShaderConfig } */
226
+ private subGraphLinks;
227
+ private animFrameId;
228
+ private lastTime;
229
+ private frameCallback;
230
+ private _isPlaying;
231
+ /**
232
+ * 构造运行时
233
+ *
234
+ * @param canvas - HTMLCanvasElement
235
+ * @param options - 运行时选项
236
+ */
237
+ constructor(canvas: HTMLCanvasElement, options?: RuntimeOptions);
238
+ /**
239
+ * 加载着色器配置
240
+ *
241
+ * @param config - 由编辑器编译产出的 ShaderConfig
242
+ * @param key - 缓存键 (默认使用 config.id)
243
+ * @returns 程序句柄
244
+ *
245
+ * @example
246
+ * ```ts
247
+ * const program = runtime.load(shaderConfig);
248
+ * ```
249
+ */
250
+ load(config: ShaderConfig, key?: string): ProgramHandle;
251
+ /**
252
+ * 获取已缓存的程序
253
+ *
254
+ * @param key - 缓存键
255
+ */
256
+ get(key: string): ProgramHandle | undefined;
257
+ /**
258
+ * 卸载着色器程序
259
+ *
260
+ * @param handle - 程序句柄
261
+ */
262
+ unload(handle: ProgramHandle): void;
263
+ /**
264
+ * 关联子图配置到主程序
265
+ *
266
+ * 子图在编译时已内联到主图的 vertCode/fragCode 中。
267
+ * 此方法将子图的 uniform 元数据注册到主程序,使运行时
268
+ * 能正确管理所有由子图引入的 uniform 变量。
269
+ *
270
+ * @param program - 主程序句柄 (由 load() 返回)
271
+ * @param subGraphId - 子图 ID (与主图 SubGraph 节点的 asset.id 对应)
272
+ * @param config - 子图的 ShaderConfig
273
+ *
274
+ * @example
275
+ * ```ts
276
+ * const mainProg = runtime.load(mainConfig);
277
+ * runtime.linkSubGraph(mainProg, 'flowMap', flowMapSubConfig);
278
+ * ```
279
+ */
280
+ linkSubGraph(program: ProgramHandle, subGraphId: string, config: ShaderConfig): void;
281
+ /**
282
+ * 批量关联子图
283
+ *
284
+ * @param program - 主程序句柄
285
+ * @param subGraphs - { [subGraphId]: ShaderConfig }
286
+ */
287
+ linkSubGraphs(program: ProgramHandle, subGraphs: Record<string, ShaderConfig>): void;
288
+ /**
289
+ * 加载主图并同时关联其子图
290
+ *
291
+ * 等价于依次调用 load() + linkSubGraphs()。
292
+ *
293
+ * @param config - 主图 ShaderConfig
294
+ * @param subGraphs - 子图配置表 { subGraphId: ShaderConfig }
295
+ * @param key - 缓存键 (可选)
296
+ * @returns 主程序句柄
297
+ *
298
+ * @example
299
+ * ```ts
300
+ * const program = runtime.loadWithSubGraphs(mainConfig, {
301
+ * 'flowMap': flowMapSubConfig,
302
+ * 'noise': noiseSubConfig,
303
+ * });
304
+ * ```
305
+ */
306
+ loadWithSubGraphs(config: ShaderConfig, subGraphs: Record<string, ShaderConfig>, key?: string): ProgramHandle;
307
+ /**
308
+ * 获取程序关联的子图列表
309
+ *
310
+ * @param program - 程序句柄
311
+ * @returns 子图 ID 列表
312
+ */
313
+ getLinkedSubGraphs(program: ProgramHandle): string[];
314
+ /**
315
+ * 获取程序关联的子图配置
316
+ *
317
+ * @param program - 程序句柄
318
+ * @param subGraphId - 子图 ID
319
+ * @returns ShaderConfig 或 undefined
320
+ */
321
+ getSubGraphConfig(program: ProgramHandle, subGraphId: string): ShaderConfig | undefined;
322
+ /**
323
+ * 获取 Uniform 绑定器
324
+ *
325
+ * 提供链式 API 方便批量设置 uniform。
326
+ *
327
+ * @param handle - 程序句柄
328
+ * @returns UniformBinder
329
+ *
330
+ * @example
331
+ * ```ts
332
+ * runtime.uniforms(program)
333
+ * .set('uColor', [1, 0, 0, 1])
334
+ * .set('uTime', 0.5)
335
+ * .texture('uMainTex', img)
336
+ * .commit();
337
+ * ```
338
+ */
339
+ uniforms(handle: ProgramHandle): UniformBinder;
340
+ /**
341
+ * 清除缓冲区
342
+ *
343
+ * 先应用设置的清除颜色,再清除缓冲区。
344
+ *
345
+ * @param mask - 清除掩码 (默认 gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT)
346
+ */
347
+ clear(mask?: number): void;
348
+ /**
349
+ * 设置清除颜色
350
+ */
351
+ setClearColor(r: number, g: number, b: number, a: number): void;
352
+ /**
353
+ * 绘制网格
354
+ *
355
+ * @param mesh - 网格渲染描述
356
+ *
357
+ * @example
358
+ * ```ts
359
+ * runtime.draw({
360
+ * geometry: { attributes: { aPosition: { data, size: 3 } }, vertexCount: 3 },
361
+ * program: myProgram,
362
+ * uniforms: { uColor: [1, 0, 0, 1] },
363
+ * });
364
+ * ```
365
+ */
366
+ draw(mesh: MeshDescriptor): void;
367
+ /**
368
+ * 开始动画循环
369
+ *
370
+ * @param callback - 每帧回调 (time, delta)
371
+ *
372
+ * @example
373
+ * ```ts
374
+ * runtime.play((time, delta) => {
375
+ * runtime.uniforms(program).set('uTime', time).commit();
376
+ * runtime.draw(mesh);
377
+ * });
378
+ * ```
379
+ */
380
+ play(callback?: FrameCallback): void;
381
+ /** 是否正在播放动画 */
382
+ get isPlaying(): boolean;
383
+ /**
384
+ * 停止动画循环
385
+ */
386
+ stop(): void;
387
+ /**
388
+ * 调整画布尺寸 (自动同步 viewport)
389
+ *
390
+ * @param width - 像素宽度
391
+ * @param height - 像素高度
392
+ */
393
+ resize(width: number, height: number): void;
394
+ /**
395
+ * 释放所有资源
396
+ *
397
+ * 清理着色器程序、纹理、停止动画。
398
+ * 调用后不可再使用此实例。
399
+ */
400
+ dispose(): void;
401
+ }
402
+
403
+ export { type FrameCallback, type GeometryDescriptor, type MeshDescriptor, type ProgramHandle, type RenderState, type RuntimeOptions, ShaderConfig, ShaderGraphRuntime, type UniformBinder, UniformValues, type VertexAttribute };