@vvfx/shader2ge 0.0.1-beta.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/dist/index.js ADDED
@@ -0,0 +1,1915 @@
1
+ /*!
2
+ * Name: @vvfx/shader2ge
3
+ * Description: Shader to Galacean Effects conversion engine
4
+ * Author: Ant Group CO., Ltd.
5
+ * Contributors: 陈茉
6
+ * Version: v0.0.1-beta.0
7
+ */
8
+
9
+ 'use strict';
10
+
11
+ /**
12
+ * JSON 版本
13
+ */ var JSONSceneVersion;
14
+ (function(JSONSceneVersion) {
15
+ JSONSceneVersion["1_0"] = "1.0";
16
+ JSONSceneVersion["1_1"] = "1.1";
17
+ JSONSceneVersion["1_2"] = "1.2";
18
+ JSONSceneVersion["1_3"] = "1.3";
19
+ JSONSceneVersion["1_5"] = "1.5";
20
+ JSONSceneVersion["1_8"] = "1.8";
21
+ JSONSceneVersion["2_0"] = "2.0";
22
+ JSONSceneVersion["2_1"] = "2.1";
23
+ JSONSceneVersion["2_2"] = "2.2";
24
+ JSONSceneVersion["2_3"] = "2.3";
25
+ JSONSceneVersion["2_4"] = "2.4";
26
+ JSONSceneVersion["3_0"] = "3.0";
27
+ JSONSceneVersion["3_1"] = "3.1";
28
+ JSONSceneVersion["3_2"] = "3.2";
29
+ JSONSceneVersion["3_3"] = "3.3";
30
+ JSONSceneVersion["3_4"] = "3.4";
31
+ JSONSceneVersion["3_5"] = "3.5";
32
+ JSONSceneVersion["3_6"] = "3.6";
33
+ JSONSceneVersion["3_7"] = "3.7";
34
+ JSONSceneVersion["LATEST"] = "3.7";
35
+ })(JSONSceneVersion || (JSONSceneVersion = {}));
36
+
37
+ /*********************************************/ /* 元素属性参数类型 */ /*********************************************/ /**
38
+ * 渲染等级
39
+ */ var RenderLevel;
40
+ (function(RenderLevel) {
41
+ RenderLevel["S"] = "S";
42
+ RenderLevel["APlus"] = "A+";
43
+ RenderLevel["A"] = "A";
44
+ RenderLevel["BPlus"] = "B+";
45
+ RenderLevel["B"] = "B";
46
+ })(RenderLevel || (RenderLevel = {}));
47
+ /**
48
+ * 混合模式
49
+ */ var BlendingMode;
50
+ (function(BlendingMode) {
51
+ /**
52
+ * 普通混合模式
53
+ */ BlendingMode[BlendingMode["ALPHA"] = 0] = "ALPHA";
54
+ /**
55
+ * 叠加混合模式
56
+ */ BlendingMode[BlendingMode["ADD"] = 1] = "ADD";
57
+ /**
58
+ * 相乘混合模式
59
+ */ BlendingMode[BlendingMode["MULTIPLY"] = 2] = "MULTIPLY";
60
+ /**
61
+ * 亮度混合模式
62
+ */ BlendingMode[BlendingMode["BRIGHTNESS"] = 3] = "BRIGHTNESS";
63
+ /**
64
+ * 减色混合模式
65
+ */ BlendingMode[BlendingMode["SUBTRACTION"] = 4] = "SUBTRACTION";
66
+ /**
67
+ * 强光混合模式
68
+ */ BlendingMode[BlendingMode["STRONG_LIGHT"] = 5] = "STRONG_LIGHT";
69
+ /**
70
+ * 弱光混合模式
71
+ */ BlendingMode[BlendingMode["WEAK_LIGHT"] = 6] = "WEAK_LIGHT";
72
+ /**
73
+ * 亮度叠加混合模式
74
+ */ BlendingMode[BlendingMode["SUPERPOSITION"] = 7] = "SUPERPOSITION";
75
+ })(BlendingMode || (BlendingMode = {}));
76
+ /**
77
+ * 单双面模式
78
+ */ var SideMode;
79
+ (function(SideMode) {
80
+ /**
81
+ * 双面模式
82
+ */ SideMode[SideMode["DOUBLE"] = 1032] = "DOUBLE";
83
+ /**
84
+ * 正面模式
85
+ */ SideMode[SideMode["FRONT"] = 1028] = "FRONT";
86
+ /**
87
+ * 背面模式
88
+ */ SideMode[SideMode["BACK"] = 1029] = "BACK";
89
+ })(SideMode || (SideMode = {}));
90
+ /**
91
+ * 元素是否被蒙版遮挡/反向遮挡
92
+ */ var ObscuredMode;
93
+ (function(ObscuredMode) {
94
+ /**
95
+ * 无
96
+ */ // NONE = 0,
97
+ // /**
98
+ // * 蒙版
99
+ // */
100
+ // MASK = 1,
101
+ /**
102
+ * 被遮挡
103
+ */ ObscuredMode[ObscuredMode["OBSCURED"] = 2] = "OBSCURED";
104
+ /**
105
+ * 被反向遮挡
106
+ */ ObscuredMode[ObscuredMode["REVERSE_OBSCURED"] = 3] = "REVERSE_OBSCURED";
107
+ })(ObscuredMode || (ObscuredMode = {}));
108
+ /**
109
+ * 发射器形状
110
+ */ var ParticleEmitterShapeType;
111
+ (function(ParticleEmitterShapeType) {
112
+ /**
113
+ * 没有类型
114
+ */ ParticleEmitterShapeType[ParticleEmitterShapeType["NONE"] = 0] = "NONE";
115
+ /**
116
+ * 圆球
117
+ */ ParticleEmitterShapeType[ParticleEmitterShapeType["SPHERE"] = 1] = "SPHERE";
118
+ /**
119
+ * 圆锥
120
+ */ ParticleEmitterShapeType[ParticleEmitterShapeType["CONE"] = 2] = "CONE";
121
+ /**
122
+ * 半球
123
+ */ ParticleEmitterShapeType[ParticleEmitterShapeType["HEMISPHERE"] = 3] = "HEMISPHERE";
124
+ /**
125
+ * 圆
126
+ */ ParticleEmitterShapeType[ParticleEmitterShapeType["CIRCLE"] = 4] = "CIRCLE";
127
+ /**
128
+ * 圆环
129
+ */ ParticleEmitterShapeType[ParticleEmitterShapeType["DONUT"] = 5] = "DONUT";
130
+ /**
131
+ * 矩形
132
+ */ ParticleEmitterShapeType[ParticleEmitterShapeType["RECTANGLE"] = 6] = "RECTANGLE";
133
+ /**
134
+ * 矩形框
135
+ */ ParticleEmitterShapeType[ParticleEmitterShapeType["RECTANGLE_EDGE"] = 7] = "RECTANGLE_EDGE";
136
+ /**
137
+ * 直线
138
+ */ ParticleEmitterShapeType[ParticleEmitterShapeType["EDGE"] = 8] = "EDGE";
139
+ /**
140
+ * 贴图
141
+ */ ParticleEmitterShapeType[ParticleEmitterShapeType["TEXTURE"] = 9] = "TEXTURE";
142
+ })(ParticleEmitterShapeType || (ParticleEmitterShapeType = {}));
143
+ /**
144
+ * 插件类型
145
+ */ var PluginType;
146
+ (function(PluginType) {
147
+ /**
148
+ * 陀螺仪
149
+ */ PluginType[PluginType["GYROSCOPE"] = 0] = "GYROSCOPE";
150
+ /**
151
+ * Spine
152
+ */ PluginType[PluginType["SPINE"] = 1] = "SPINE";
153
+ })(PluginType || (PluginType = {}));
154
+ /**
155
+ * 交互类型
156
+ */ var InteractType;
157
+ (function(InteractType) {
158
+ /**
159
+ * 点击
160
+ */ InteractType[InteractType["CLICK"] = 0] = "CLICK";
161
+ /**
162
+ * 消息
163
+ * 前端收到 onMessageItem 回调
164
+ */ InteractType[InteractType["MESSAGE"] = 1] = "MESSAGE";
165
+ /**
166
+ * 拖拽
167
+ */ InteractType[InteractType["DRAG"] = 2] = "DRAG";
168
+ })(InteractType || (InteractType = {}));
169
+ /**
170
+ * 交互行为
171
+ */ var InteractBehavior;
172
+ (function(InteractBehavior) {
173
+ /**
174
+ * 无
175
+ */ InteractBehavior[InteractBehavior["NONE"] = 0] = "NONE";
176
+ /**
177
+ * 通知
178
+ */ InteractBehavior[InteractBehavior["NOTIFY"] = 1] = "NOTIFY";
179
+ /**
180
+ * 重置播放器
181
+ */ InteractBehavior[InteractBehavior["RESUME_PLAYER"] = 2] = "RESUME_PLAYER";
182
+ /**
183
+ * 清除元素
184
+ */ InteractBehavior[InteractBehavior["REMOVE"] = 3] = "REMOVE";
185
+ /**
186
+ * 暂停播放器
187
+ */ InteractBehavior[InteractBehavior["PAUSE"] = 4] = "PAUSE";
188
+ })(InteractBehavior || (InteractBehavior = {}));
189
+ /**
190
+ * 元素类型
191
+ */ var ItemType;
192
+ (function(ItemType) {
193
+ /**
194
+ * 错误元素
195
+ */ ItemType["base"] = "0";
196
+ /**
197
+ * 图层元素
198
+ */ ItemType["sprite"] = "1";
199
+ /**
200
+ * 粒子元素
201
+ */ ItemType["particle"] = "2";
202
+ /**
203
+ * 空节点元素
204
+ */ ItemType["null"] = "3";
205
+ /**
206
+ * 交互元素
207
+ */ ItemType["interact"] = "4";
208
+ /**
209
+ * 插件元素
210
+ */ ItemType["plugin"] = "5";
211
+ /**
212
+ * 相机元素
213
+ */ ItemType["camera"] = "6";
214
+ /**
215
+ * 预合成元素
216
+ */ ItemType["composition"] = "7";
217
+ /**
218
+ * Spine 元素
219
+ */ ItemType["spine"] = "spine";
220
+ /**
221
+ * Mesh 元素
222
+ */ ItemType["mesh"] = "mesh";
223
+ /**
224
+ * 节点树元素
225
+ */ ItemType["tree"] = "tree";
226
+ /**
227
+ * 文本元素
228
+ */ ItemType["text"] = "text";
229
+ /**
230
+ * 灯光元素
231
+ */ ItemType["light"] = "light";
232
+ /**
233
+ * 天空盒元素
234
+ */ ItemType["skybox"] = "skybox";
235
+ /**
236
+ * 特效元素
237
+ */ ItemType["effect"] = "effect";
238
+ /**
239
+ * 形状元素
240
+ */ ItemType["shape"] = "shape";
241
+ /**
242
+ * 后处理元素
243
+ */ ItemType["postProcessVolume"] = "postProcessVolume";
244
+ /**
245
+ * 节点元素
246
+ */ ItemType["node"] = "node";
247
+ /**
248
+ * 视频元素
249
+ */ ItemType["video"] = "video";
250
+ /**
251
+ * 音频元素
252
+ */ ItemType["audio"] = "audio";
253
+ /**
254
+ * 富文本元素
255
+ */ ItemType["richtext"] = "richtext";
256
+ })(ItemType || (ItemType = {}));
257
+ /**
258
+ * 渲染模式
259
+ */ var RenderMode;
260
+ (function(RenderMode) {
261
+ /**
262
+ * 广告牌模式
263
+ */ RenderMode[RenderMode["BILLBOARD"] = 0] = "BILLBOARD";
264
+ /**
265
+ * 网格模式
266
+ */ RenderMode[RenderMode["MESH"] = 1] = "MESH";
267
+ /**
268
+ * 垂直广告牌模式
269
+ */ RenderMode[RenderMode["VERTICAL_BILLBOARD"] = 2] = "VERTICAL_BILLBOARD";
270
+ /**
271
+ * 水平广告牌模式
272
+ */ RenderMode[RenderMode["HORIZONTAL_BILLBOARD"] = 3] = "HORIZONTAL_BILLBOARD";
273
+ })(RenderMode || (RenderMode = {}));
274
+ /**
275
+ * 变换中心
276
+ */ var ParticleOrigin;
277
+ (function(ParticleOrigin) {
278
+ /**
279
+ * 水平和垂直中点
280
+ */ ParticleOrigin[ParticleOrigin["PARTICLE_ORIGIN_CENTER"] = 0] = "PARTICLE_ORIGIN_CENTER";
281
+ /**
282
+ * 水平左侧 垂直顶部
283
+ */ ParticleOrigin[ParticleOrigin["PARTICLE_ORIGIN_LEFT_TOP"] = 1] = "PARTICLE_ORIGIN_LEFT_TOP";
284
+ /**
285
+ * 水平左侧 垂直中间
286
+ */ ParticleOrigin[ParticleOrigin["PARTICLE_ORIGIN_LEFT_CENTER"] = 2] = "PARTICLE_ORIGIN_LEFT_CENTER";
287
+ /**
288
+ * 水平左侧 垂直底部
289
+ */ ParticleOrigin[ParticleOrigin["PARTICLE_ORIGIN_LEFT_BOTTOM"] = 3] = "PARTICLE_ORIGIN_LEFT_BOTTOM";
290
+ /**
291
+ * 水平中间 垂直顶部
292
+ */ ParticleOrigin[ParticleOrigin["PARTICLE_ORIGIN_CENTER_TOP"] = 4] = "PARTICLE_ORIGIN_CENTER_TOP";
293
+ /**
294
+ * 水平中间 垂直底部
295
+ */ ParticleOrigin[ParticleOrigin["PARTICLE_ORIGIN_CENTER_BOTTOM"] = 5] = "PARTICLE_ORIGIN_CENTER_BOTTOM";
296
+ /**
297
+ * 水平右侧 垂直顶部
298
+ */ ParticleOrigin[ParticleOrigin["PARTICLE_ORIGIN_RIGHT_TOP"] = 6] = "PARTICLE_ORIGIN_RIGHT_TOP";
299
+ /**
300
+ * 水平右侧 垂直中间
301
+ */ ParticleOrigin[ParticleOrigin["PARTICLE_ORIGIN_RIGHT_CENTER"] = 7] = "PARTICLE_ORIGIN_RIGHT_CENTER";
302
+ /**
303
+ * 水平右侧 垂直底部
304
+ */ ParticleOrigin[ParticleOrigin["PARTICLE_ORIGIN_RIGHT_BOTTOM"] = 8] = "PARTICLE_ORIGIN_RIGHT_BOTTOM";
305
+ })(ParticleOrigin || (ParticleOrigin = {}));
306
+ var RenderType;
307
+ (function(RenderType) {
308
+ RenderType["Opaque"] = "Opaque";
309
+ RenderType["Transparent"] = "Transparent";
310
+ })(RenderType || (RenderType = {}));
311
+ var RenderFace;
312
+ (function(RenderFace) {
313
+ RenderFace["Both"] = "Both";
314
+ RenderFace["Back"] = "Back";
315
+ RenderFace["Front"] = "Front";
316
+ })(RenderFace || (RenderFace = {}));
317
+
318
+ /**
319
+ * 销毁
320
+ */ var END_BEHAVIOR_DESTROY = 0;
321
+ /**
322
+ * 暂停
323
+ * @deprecated since 2.0 - use `END_BEHAVIOR_FREEZE` instead
324
+ */ var END_BEHAVIOR_PAUSE = 1;
325
+ /**
326
+ * 无限播放
327
+ */ var END_BEHAVIOR_FORWARD = 2;
328
+ /**
329
+ * 销毁并保留最后一帧
330
+ * @deprecated since 2.0
331
+ */ var END_BEHAVIOR_PAUSE_AND_DESTROY = 3;
332
+ /**
333
+ * 冻结
334
+ */ var END_BEHAVIOR_FREEZE = 4;
335
+ /**
336
+ * 重播
337
+ */ var END_BEHAVIOR_RESTART = 5;
338
+ /**
339
+ *
340
+ */ var END_BEHAVIOR_DESTROY_CHILDREN = 6;
341
+ var CAMERA_CLIP_MODE_VERTICAL = 1;
342
+ var CAMERA_CLIP_MODE_NORMAL = 0;
343
+ /**
344
+ * 消息开始
345
+ */ var MESSAGE_ITEM_PHRASE_BEGIN = 2;
346
+ /**
347
+ * 消息结束
348
+ */ var MESSAGE_ITEM_PHRASE_END = 1;
349
+
350
+ var CameraClipMode;
351
+ (function(CameraClipMode) {
352
+ /**
353
+ * 剪裁上下
354
+ */ CameraClipMode[CameraClipMode["portrait"] = 1] = "portrait";
355
+ /**
356
+ * 剪裁左右
357
+ */ CameraClipMode[CameraClipMode["landscape"] = 0] = "landscape";
358
+ })(CameraClipMode || (CameraClipMode = {}));
359
+
360
+ /*********************************************/ /* 基本数值属性参数 */ /*********************************************/ var ValueType;
361
+ (function(ValueType) {
362
+ /**
363
+ * 常数
364
+ */ ValueType[ValueType["CONSTANT"] = 0] = "CONSTANT";
365
+ /**
366
+ * 二维常数向量
367
+ */ ValueType[ValueType["CONSTANT_VEC2"] = 1] = "CONSTANT_VEC2";
368
+ /**
369
+ * 三维常数向量
370
+ */ ValueType[ValueType["CONSTANT_VEC3"] = 2] = "CONSTANT_VEC3";
371
+ /**
372
+ * 四维常数向量
373
+ */ ValueType[ValueType["CONSTANT_VEC4"] = 3] = "CONSTANT_VEC4";
374
+ /**
375
+ * 随机数
376
+ */ ValueType[ValueType["RANDOM"] = 4] = "RANDOM";
377
+ /**
378
+ * 直线
379
+ */ ValueType[ValueType["LINE"] = 5] = "LINE";
380
+ /**
381
+ * 曲线(Hermite 曲线)
382
+ * @deprecated 使用 BEZIER_CURVE 替代,此类型仅用于旧数据迁移兼容
383
+ */ ValueType[ValueType["CURVE"] = 6] = "CURVE";
384
+ /**
385
+ * 贝塞尔路径
386
+ * @deprecated 使用 BEZIER_CURVE_PATH 替代,此类型仅用于旧数据迁移兼容
387
+ */ ValueType[ValueType["BEZIER_PATH"] = 7] = "BEZIER_PATH";
388
+ /**
389
+ * 颜色
390
+ */ ValueType[ValueType["RGBA_COLOR"] = 8] = "RGBA_COLOR";
391
+ /**
392
+ * 渐变色
393
+ */ ValueType[ValueType["GRADIENT_COLOR"] = 9] = "GRADIENT_COLOR";
394
+ /**
395
+ * 蒙版形状点集
396
+ */ ValueType[ValueType["SHAPE_POINTS"] = 10] = "SHAPE_POINTS";
397
+ /**
398
+ * 蒙版形状切分
399
+ */ ValueType[ValueType["SHAPE_SPLITS"] = 11] = "SHAPE_SPLITS";
400
+ /**
401
+ * 直线路径
402
+ */ ValueType[ValueType["LINEAR_PATH"] = 12] = "LINEAR_PATH";
403
+ /**
404
+ * 多色
405
+ */ ValueType[ValueType["COLORS"] = 13] = "COLORS";
406
+ /**
407
+ * 二进制指针
408
+ */ ValueType[ValueType["BINARY"] = 20] = "BINARY";
409
+ /**
410
+ * 贝塞尔曲线
411
+ */ ValueType[ValueType["BEZIER_CURVE"] = 21] = "BEZIER_CURVE";
412
+ /**
413
+ * 贝塞尔曲线路径
414
+ */ ValueType[ValueType["BEZIER_CURVE_PATH"] = 22] = "BEZIER_CURVE_PATH";
415
+ /**
416
+ * 贝塞尔曲线四元数
417
+ */ ValueType[ValueType["BEZIER_CURVE_QUAT"] = 23] = "BEZIER_CURVE_QUAT";
418
+ /**
419
+ * 颜色曲线
420
+ */ ValueType[ValueType["COLOR_CURVE"] = 24] = "COLOR_CURVE";
421
+ /**
422
+ * Vector4 曲线
423
+ */ ValueType[ValueType["VECTOR4_CURVE"] = 25] = "VECTOR4_CURVE";
424
+ /**
425
+ * Vector2 曲线
426
+ */ ValueType[ValueType["VECTOR2_CURVE"] = 26] = "VECTOR2_CURVE";
427
+ /**
428
+ * Vector3 曲线
429
+ */ ValueType[ValueType["VECTOR3_CURVE"] = 27] = "VECTOR3_CURVE";
430
+ })(ValueType || (ValueType = {}));
431
+ /**
432
+ * 关键帧类型
433
+ */ var BezierKeyframeType;
434
+ (function(BezierKeyframeType) {
435
+ BezierKeyframeType[BezierKeyframeType["AUTO"] = 0] = "AUTO";
436
+ BezierKeyframeType[BezierKeyframeType["EASE"] = 1] = "EASE";
437
+ BezierKeyframeType[BezierKeyframeType["EASE_IN"] = 2] = "EASE_IN";
438
+ BezierKeyframeType[BezierKeyframeType["EASE_OUT"] = 3] = "EASE_OUT";
439
+ BezierKeyframeType[BezierKeyframeType["LINE"] = 4] = "LINE";
440
+ BezierKeyframeType[BezierKeyframeType["HOLD"] = 5] = "HOLD";
441
+ BezierKeyframeType[BezierKeyframeType["LINE_OUT"] = 6] = "LINE_OUT";
442
+ })(BezierKeyframeType || (BezierKeyframeType = {}));
443
+
444
+ /**
445
+ * 结束行为
446
+ */ var EndBehavior;
447
+ (function(EndBehavior) {
448
+ /**
449
+ * 销毁
450
+ */ EndBehavior[EndBehavior["destroy"] = 0] = "destroy";
451
+ /**
452
+ * 重播
453
+ */ EndBehavior[EndBehavior["restart"] = 5] = "restart";
454
+ /**
455
+ * 无限播放
456
+ */ EndBehavior[EndBehavior["forward"] = 2] = "forward";
457
+ /**
458
+ * 冻结
459
+ */ EndBehavior[EndBehavior["freeze"] = 4] = "freeze";
460
+ })(EndBehavior || (EndBehavior = {}));
461
+
462
+ /**
463
+ * 粒子交互行为
464
+ */ var ParticleInteractionBehavior;
465
+ (function(ParticleInteractionBehavior) {
466
+ /**
467
+ * 无
468
+ */ ParticleInteractionBehavior[ParticleInteractionBehavior["none"] = 0] = "none";
469
+ /**
470
+ * 移出粒子
471
+ */ ParticleInteractionBehavior[ParticleInteractionBehavior["removeParticle"] = 1] = "removeParticle";
472
+ })(ParticleInteractionBehavior || (ParticleInteractionBehavior = {}));
473
+
474
+ var ShapeArcMode;
475
+ (function(ShapeArcMode) {
476
+ /**
477
+ * 随机
478
+ */ ShapeArcMode[ShapeArcMode["RANDOM"] = 0] = "RANDOM";
479
+ /**
480
+ * 单向循环
481
+ */ ShapeArcMode[ShapeArcMode["UNIDIRECTIONAL_CYCLE"] = 1] = "UNIDIRECTIONAL_CYCLE";
482
+ /**
483
+ * 双向循环
484
+ */ ShapeArcMode[ShapeArcMode["BIDIRECTIONAL_CYCLE"] = 2] = "BIDIRECTIONAL_CYCLE";
485
+ /**
486
+ * 均匀爆发
487
+ */ ShapeArcMode[ShapeArcMode["UNIFORM_BURST"] = 3] = "UNIFORM_BURST";
488
+ })(ShapeArcMode || (ShapeArcMode = {}));
489
+
490
+ var LightType;
491
+ (function(LightType) {
492
+ /**
493
+ * 点光源
494
+ */ LightType["point"] = "point";
495
+ /**
496
+ * 聚光灯
497
+ */ LightType["spot"] = "spot";
498
+ /**
499
+ * 方向光
500
+ */ LightType["directional"] = "directional";
501
+ /**
502
+ * 环境光
503
+ */ LightType["ambient"] = "ambient";
504
+ })(LightType || (LightType = {}));
505
+
506
+ var ModelBoundingType;
507
+ (function(ModelBoundingType) {
508
+ ModelBoundingType[ModelBoundingType["box"] = 2] = "box";
509
+ ModelBoundingType[ModelBoundingType["sphere"] = 3] = "sphere";
510
+ })(ModelBoundingType || (ModelBoundingType = {}));
511
+
512
+ var CameraType;
513
+ (function(CameraType) {
514
+ CameraType["orthographic"] = "orthographic";
515
+ CameraType["perspective"] = "perspective";
516
+ })(CameraType || (CameraType = {}));
517
+
518
+ // 材质类型
519
+ var MaterialType;
520
+ (function(MaterialType) {
521
+ MaterialType["unlit"] = "unlit";
522
+ MaterialType["pbr"] = "pbr";
523
+ // 头发材质,在 pbr 材质基础上扩展
524
+ MaterialType["hair"] = "hair";
525
+ })(MaterialType || (MaterialType = {}));
526
+ // 混合模式
527
+ var MaterialBlending;
528
+ (function(MaterialBlending) {
529
+ MaterialBlending[MaterialBlending["opaque"] = 100] = "opaque";
530
+ MaterialBlending[MaterialBlending["masked"] = 101] = "masked";
531
+ MaterialBlending[MaterialBlending["translucent"] = 102] = "translucent";
532
+ MaterialBlending[MaterialBlending["additive"] = 103] = "additive";
533
+ })(MaterialBlending || (MaterialBlending = {}));
534
+
535
+ /**
536
+ * 3D渲染模式:将渲染过程中的中间结果输出,主要用于排查渲染效果问题,支持 pbr 和 unlit 材质
537
+ */ var RenderMode3D;
538
+ (function(RenderMode3D) {
539
+ /**
540
+ * 正常渲染
541
+ */ RenderMode3D["none"] = "none";
542
+ /**
543
+ * 纹理坐标
544
+ */ RenderMode3D["uv"] = "uv";
545
+ /**
546
+ * 世界坐标法线
547
+ */ RenderMode3D["normal"] = "normal";
548
+ /**
549
+ * 基础颜色
550
+ */ RenderMode3D["basecolor"] = "basecolor";
551
+ /**
552
+ * 基础颜色 Alpha
553
+ */ RenderMode3D["alpha"] = "alpha";
554
+ /**
555
+ * 金属度
556
+ */ RenderMode3D["metallic"] = "metallic";
557
+ /**
558
+ * 粗超度
559
+ */ RenderMode3D["roughness"] = "roughness";
560
+ /**
561
+ * 环境遮蔽
562
+ */ RenderMode3D["ao"] = "ao";
563
+ /**
564
+ * 自发光
565
+ */ RenderMode3D["emissive"] = "emissive";
566
+ /**
567
+ * 漫反射
568
+ */ RenderMode3D["diffuse"] = "diffuse";
569
+ })(RenderMode3D || (RenderMode3D = {}));
570
+
571
+ var TextOverflow;
572
+ (function(TextOverflow) {
573
+ /**
574
+ * visible 模式下,文本内容超出边界框时,会继续显示内容,不进行裁剪或缩放。
575
+ */ TextOverflow[TextOverflow["visible"] = 0] = "visible";
576
+ /**
577
+ * display 模式下,会显示所有文本,文本字号大小会根据边界框调整。
578
+ */ TextOverflow[TextOverflow["display"] = 1] = "display";
579
+ /**
580
+ * clip 模式下,当文本内容超出边界框时,多余的会被截断。
581
+ */ TextOverflow[TextOverflow["clip"] = 2] = "clip";
582
+ /**
583
+ * ellipsis 模式下,会使用(...)来代替超出边界框的内容。
584
+ */ TextOverflow[TextOverflow["ellipsis"] = 3] = "ellipsis";
585
+ })(TextOverflow || (TextOverflow = {}));
586
+ var TextSizeMode;
587
+ (function(TextSizeMode) {
588
+ /**
589
+ * 自适应宽度
590
+ */ TextSizeMode[TextSizeMode["autoWidth"] = 0] = "autoWidth";
591
+ /**
592
+ * 自适应高度
593
+ */ TextSizeMode[TextSizeMode["autoHeight"] = 1] = "autoHeight";
594
+ /**
595
+ * 固定宽高
596
+ */ TextSizeMode[TextSizeMode["fixed"] = 2] = "fixed";
597
+ })(TextSizeMode || (TextSizeMode = {}));
598
+ var TextBaseline;
599
+ (function(TextBaseline) {
600
+ /**
601
+ * 文本顶对齐。
602
+ */ TextBaseline[TextBaseline["top"] = 0] = "top";
603
+ /**
604
+ * 文本垂直居中对齐。
605
+ */ TextBaseline[TextBaseline["middle"] = 1] = "middle";
606
+ /**
607
+ * 文本底对齐。
608
+ */ TextBaseline[TextBaseline["bottom"] = 2] = "bottom";
609
+ })(TextBaseline || (TextBaseline = {}));
610
+ var TextAlignment;
611
+ (function(TextAlignment) {
612
+ /**
613
+ * text alignment starts from(x,y) to right direction
614
+ * 从 (x,y) 开始第一个字符,向右边延伸
615
+ */ TextAlignment[TextAlignment["left"] = 0] = "left";
616
+ /**
617
+ * (x,y) is middle position of text, where (left + right)/2 =(x,y)
618
+ * (x,y) 为文字中间位置,(最左位置 + 最右位置)/2 = (x,y)
619
+ */ TextAlignment[TextAlignment["middle"] = 1] = "middle";
620
+ /**
621
+ * text alignment ends with(x,y) from left direction
622
+ * 从 (x,y) 结束最后一个字符,向左边延伸
623
+ */ TextAlignment[TextAlignment["right"] = 2] = "right";
624
+ })(TextAlignment || (TextAlignment = {}));
625
+ var TextVerticalAlign;
626
+ (function(TextVerticalAlign) {
627
+ /**
628
+ * 文本顶对齐。
629
+ */ TextVerticalAlign[TextVerticalAlign["top"] = 0] = "top";
630
+ /**
631
+ * 文本垂直居中对齐。
632
+ */ TextVerticalAlign[TextVerticalAlign["middle"] = 1] = "middle";
633
+ /**
634
+ * 文本底对齐。
635
+ */ TextVerticalAlign[TextVerticalAlign["bottom"] = 2] = "bottom";
636
+ })(TextVerticalAlign || (TextVerticalAlign = {}));
637
+ /**
638
+ * 文本字重
639
+ */ var TextWeight;
640
+ (function(TextWeight) {
641
+ /**
642
+ * 正常
643
+ */ TextWeight["normal"] = "normal";
644
+ /**
645
+ * 粗体
646
+ */ TextWeight["bold"] = "bold";
647
+ /**
648
+ * 瘦体
649
+ */ TextWeight["lighter"] = "lighter";
650
+ })(TextWeight || (TextWeight = {}));
651
+ /**
652
+ * 文本样式
653
+ */ var FontStyle;
654
+ (function(FontStyle) {
655
+ /**
656
+ * 正常
657
+ */ FontStyle["normal"] = "normal";
658
+ /**
659
+ * 斜体
660
+ */ FontStyle["italic"] = "italic";
661
+ /**
662
+ * 倾斜体
663
+ */ FontStyle["oblique"] = "oblique";
664
+ })(FontStyle || (FontStyle = {}));
665
+
666
+ var BuiltinObjectGUID = {
667
+ WhiteTexture: 'whitetexture00000000000000000000',
668
+ EmptyTexture: 'emptyTexture00000000000000000000',
669
+ PBRShader: 'pbr00000000000000000000000000000',
670
+ UnlitShader: 'unlit000000000000000000000000000'
671
+ };
672
+
673
+ var FillType;
674
+ (function(FillType) {
675
+ FillType[FillType["Solid"] = 0] = "Solid";
676
+ FillType[FillType["GradientLinear"] = 1] = "GradientLinear";
677
+ FillType[FillType["GradientRadial"] = 2] = "GradientRadial";
678
+ FillType[FillType["GradientAngular"] = 3] = "GradientAngular";
679
+ FillType[FillType["Texture"] = 4] = "Texture";
680
+ })(FillType || (FillType = {}));
681
+ var TexturePaintScaleMode;
682
+ (function(TexturePaintScaleMode) {
683
+ TexturePaintScaleMode[TexturePaintScaleMode["Fill"] = 0] = "Fill";
684
+ TexturePaintScaleMode[TexturePaintScaleMode["Fit"] = 1] = "Fit";
685
+ TexturePaintScaleMode[TexturePaintScaleMode["Crop"] = 2] = "Crop";
686
+ TexturePaintScaleMode[TexturePaintScaleMode["Tile"] = 3] = "Tile";
687
+ })(TexturePaintScaleMode || (TexturePaintScaleMode = {}));
688
+
689
+ /**
690
+ * 矢量图形类型
691
+ */ var ShapePrimitiveType;
692
+ (function(ShapePrimitiveType) {
693
+ /**
694
+ * 自定义图形
695
+ */ ShapePrimitiveType[ShapePrimitiveType["Custom"] = 0] = "Custom";
696
+ /**
697
+ * 矩形
698
+ */ ShapePrimitiveType[ShapePrimitiveType["Rectangle"] = 1] = "Rectangle";
699
+ /**
700
+ * 椭圆
701
+ */ ShapePrimitiveType[ShapePrimitiveType["Ellipse"] = 2] = "Ellipse";
702
+ /**
703
+ * 多边形
704
+ */ ShapePrimitiveType[ShapePrimitiveType["Polygon"] = 3] = "Polygon";
705
+ /**
706
+ * 星形
707
+ */ ShapePrimitiveType[ShapePrimitiveType["Star"] = 4] = "Star";
708
+ })(ShapePrimitiveType || (ShapePrimitiveType = {}));
709
+
710
+ var LineCap;
711
+ (function(LineCap) {
712
+ /** 默认值。向线条的每个末端添加平直的边缘 */ LineCap[LineCap["Butt"] = 0] = "Butt";
713
+ /** 向线条的每个末端添加圆形线帽 */ LineCap[LineCap["Round"] = 1] = "Round";
714
+ /** 向线条的每个末端添加正方形线帽 */ LineCap[LineCap["Square"] = 2] = "Square";
715
+ })(LineCap || (LineCap = {}));
716
+ var LineJoin;
717
+ (function(LineJoin) {
718
+ /** 创建圆角 */ LineJoin[LineJoin["Round"] = 0] = "Round";
719
+ /** 创建斜角 */ LineJoin[LineJoin["Bevel"] = 1] = "Bevel";
720
+ /** 创建尖角 */ LineJoin[LineJoin["Miter"] = 2] = "Miter";
721
+ })(LineJoin || (LineJoin = {}));
722
+
723
+ var NodeDataType;
724
+ (function(NodeDataType) {
725
+ NodeDataType["AnimationClipNodeData"] = "AnimationClipNodeData";
726
+ NodeDataType["BlendNodeData"] = "BlendNodeData";
727
+ NodeDataType["ApplyAdditiveNodeData"] = "ApplyAdditiveNodeData";
728
+ NodeDataType["LayerBlendNodeData"] = "LayerBlendNodeData";
729
+ NodeDataType["StateMachineNodeData"] = "StateMachineNodeData";
730
+ NodeDataType["TransitionNodeData"] = "TransitionNodeData";
731
+ NodeDataType["StateNodeData"] = "StateNodeData";
732
+ NodeDataType["ConstFloatNodeData"] = "ConstFloatNodeData";
733
+ NodeDataType["ConstBoolNodeData"] = "ConstBoolNodeData";
734
+ NodeDataType["ControlParameterBoolNodeData"] = "ControlParameterBoolNodeData";
735
+ NodeDataType["ControlParameterFloatNodeData"] = "ControlParameterFloatNodeData";
736
+ NodeDataType["ControlParameterTriggerNodeData"] = "ControlParameterTriggerNodeData";
737
+ NodeDataType["NotNodeData"] = "NotNodeData";
738
+ NodeDataType["AndNodeData"] = "AndNodeData";
739
+ NodeDataType["OrNodeData"] = "OrNodeData";
740
+ NodeDataType["EqualNodeData"] = "EqualNodeData";
741
+ NodeDataType["GreaterNodeData"] = "GreaterNodeData";
742
+ NodeDataType["LessNodeData"] = "LessNodeData";
743
+ })(NodeDataType || (NodeDataType = {}));
744
+
745
+ /**
746
+ * 动态换图类型
747
+ * @since 1.1.0
748
+ */ var BackgroundType;
749
+ (function(BackgroundType) {
750
+ BackgroundType["video"] = "video";
751
+ BackgroundType["image"] = "image";
752
+ })(BackgroundType || (BackgroundType = {}));
753
+ /**
754
+ * 多媒体资源类型
755
+ * @since 2.1.0
756
+ */ var MultimediaType;
757
+ (function(MultimediaType) {
758
+ MultimediaType["video"] = "video";
759
+ MultimediaType["audio"] = "audio";
760
+ })(MultimediaType || (MultimediaType = {}));
761
+ var HevcVideoCodec;
762
+ (function(HevcVideoCodec) {
763
+ HevcVideoCodec["L30"] = "hev1.1.0.L30.B0";
764
+ HevcVideoCodec["L60"] = "hev1.1.0.L60.B0";
765
+ HevcVideoCodec["L63"] = "hev1.1.0.L63.B0";
766
+ HevcVideoCodec["L90"] = "hev1.1.0.L90.B0";
767
+ HevcVideoCodec["L93"] = "hev1.1.0.L93.B0";
768
+ HevcVideoCodec["L120"] = "hev1.1.0.L120.B0";
769
+ HevcVideoCodec["L150"] = "hev1.1.0.L150.B0";
770
+ HevcVideoCodec["L180"] = "hev1.1.0.L180.B0";
771
+ })(HevcVideoCodec || (HevcVideoCodec = {}));
772
+
773
+ var DataType;
774
+ (function(DataType) {
775
+ DataType["VFXItemData"] = "VFXItemData";
776
+ // Assets
777
+ DataType["Material"] = "Material";
778
+ DataType["Shader"] = "Shader";
779
+ DataType["Geometry"] = "Geometry";
780
+ DataType["Texture"] = "Texture";
781
+ DataType["Image"] = "Image";
782
+ DataType["AnimationClip"] = "AnimationClip";
783
+ DataType["BinaryAsset"] = "BinaryAsset";
784
+ // Timeline
785
+ DataType["TrackAsset"] = "TrackAsset";
786
+ DataType["TimelineAsset"] = "TimelineAsset";
787
+ DataType["ObjectBindingTrack"] = "ObjectBindingTrack";
788
+ DataType["TransformTrack"] = "TransformTrack";
789
+ DataType["SpriteColorTrack"] = "SpriteColorTrack";
790
+ DataType["ActivationTrack"] = "ActivationTrack";
791
+ DataType["SubCompositionTrack"] = "SubCompositionTrack";
792
+ DataType["FloatPropertyTrack"] = "FloatPropertyTrack";
793
+ DataType["ColorPropertyTrack"] = "ColorPropertyTrack";
794
+ DataType["Vector2PropertyTrack"] = "Vector2PropertyTrack";
795
+ DataType["Vector3PropertyTrack"] = "Vector3PropertyTrack";
796
+ DataType["Vector4PropertyTrack"] = "Vector4PropertyTrack";
797
+ DataType["TransformPlayableAsset"] = "TransformPlayableAsset";
798
+ DataType["SpriteColorPlayableAsset"] = "SpriteColorPlayableAsset";
799
+ DataType["ActivationPlayableAsset"] = "ActivationPlayableAsset";
800
+ DataType["SubCompositionPlayableAsset"] = "SubCompositionPlayableAsset";
801
+ DataType["FloatPropertyPlayableAsset"] = "FloatPropertyPlayableAsset";
802
+ DataType["ColorPropertyPlayableAsset"] = "ColorPropertyPlayableAsset";
803
+ DataType["Vector2PropertyPlayableAsset"] = "Vector2PropertyPlayableAsset";
804
+ DataType["Vector3PropertyPlayableAsset"] = "Vector3PropertyPlayableAsset";
805
+ DataType["Vector4PropertyPlayableAsset"] = "Vector4PropertyPlayableAsset";
806
+ // Components
807
+ DataType["MeshComponent"] = "MeshComponent";
808
+ DataType["SkyboxComponent"] = "SkyboxComponent";
809
+ DataType["LightComponent"] = "LightComponent";
810
+ DataType["CameraComponent"] = "CameraComponent";
811
+ DataType["ModelPluginComponent"] = "ModelPluginComponent";
812
+ DataType["TreeComponent"] = "TreeComponent";
813
+ DataType["AnimationComponent"] = "AnimationComponent";
814
+ DataType["SpineComponent"] = "SpineComponent";
815
+ DataType["VideoComponent"] = "VideoComponent";
816
+ DataType["AudioComponent"] = "AudioComponent";
817
+ DataType["RichTextComponent"] = "RichTextComponent";
818
+ DataType["OrientationComponent"] = "OrientationComponent";
819
+ DataType["ShapeComponent"] = "ShapeComponent";
820
+ DataType["SpriteComponent"] = "SpriteComponent";
821
+ DataType["ParticleSystem"] = "ParticleSystem";
822
+ DataType["InteractComponent"] = "InteractComponent";
823
+ DataType["CameraController"] = "CameraController";
824
+ DataType["PostProcessVolume"] = "PostProcessVolume";
825
+ DataType["EffectComponent"] = "EffectComponent";
826
+ DataType["TextComponent"] = "TextComponent";
827
+ DataType["AnimationGraphAsset"] = "AnimationGraphAsset";
828
+ DataType["CompositionComponent"] = "CompositionComponent";
829
+ DataType["FFDComponent"] = "FFDComponent";
830
+ DataType["FrameComponent"] = "FrameComponent";
831
+ DataType["Animator"] = "Animator";
832
+ // Non-EffectObject
833
+ DataType["TimelineClip"] = "TimelineClip";
834
+ })(DataType || (DataType = {}));
835
+
836
+ var GeometryType;
837
+ (function(GeometryType) {
838
+ /**
839
+ * Draw single points.
840
+ */ GeometryType[GeometryType["POINTS"] = 0] = "POINTS";
841
+ /**
842
+ * Draw lines. Each vertex connects to the one after it.
843
+ */ GeometryType[GeometryType["LINES"] = 1] = "LINES";
844
+ /**
845
+ * Draw lines. Each set of two vertices is treated as a separate line segment.
846
+ */ GeometryType[GeometryType["LINE_LOOP"] = 2] = "LINE_LOOP";
847
+ /**
848
+ * Draw a connected group of line segments from the first vertex to the last.
849
+ */ GeometryType[GeometryType["LINE_STRIP"] = 3] = "LINE_STRIP";
850
+ /**
851
+ * Draw triangles. Each set of three vertices creates a separate triangle.
852
+ */ GeometryType[GeometryType["TRIANGLES"] = 4] = "TRIANGLES";
853
+ /**
854
+ * Draw a connected strip of triangles.
855
+ */ GeometryType[GeometryType["TRIANGLE_STRIP"] = 5] = "TRIANGLE_STRIP";
856
+ /**
857
+ * Draw a connected group of triangles. Each vertex connects to the previous and the first vertex in the fan.
858
+ */ GeometryType[GeometryType["TRIANGLE_FAN"] = 6] = "TRIANGLE_FAN";
859
+ })(GeometryType || (GeometryType = {}));
860
+ var VertexFormatType;
861
+ (function(VertexFormatType) {
862
+ VertexFormatType[VertexFormatType["Float16"] = 0] = "Float16";
863
+ VertexFormatType[VertexFormatType["Float32"] = 1] = "Float32";
864
+ VertexFormatType[VertexFormatType["Int8"] = 2] = "Int8";
865
+ VertexFormatType[VertexFormatType["Int16"] = 3] = "Int16";
866
+ VertexFormatType[VertexFormatType["Int32"] = 4] = "Int32";
867
+ VertexFormatType[VertexFormatType["UInt8"] = 5] = "UInt8";
868
+ VertexFormatType[VertexFormatType["UInt16"] = 6] = "UInt16";
869
+ VertexFormatType[VertexFormatType["UInt32"] = 7] = "UInt32";
870
+ })(VertexFormatType || (VertexFormatType = {}));
871
+ var IndexFormatType;
872
+ (function(IndexFormatType) {
873
+ IndexFormatType[IndexFormatType["None"] = -1] = "None";
874
+ IndexFormatType[IndexFormatType["UInt8"] = 0] = "UInt8";
875
+ IndexFormatType[IndexFormatType["UInt16"] = 1] = "UInt16";
876
+ IndexFormatType[IndexFormatType["UInt32"] = 2] = "UInt32";
877
+ })(IndexFormatType || (IndexFormatType = {}));
878
+ // BINORMAL[n] Binormal float4
879
+ // BLENDINDICES[n] 混合索引 uint
880
+ // BLENDWEIGHT[n] 混合权重 FLOAT
881
+ // COLOR[n] 漫射和反射颜色 float4
882
+ // NORMAL[n] 法向矢量 float4
883
+ // POSITION[n] 对象空间中的顶点位置。 float4
884
+ // POSITIONT 变换的顶点位置。 float4
885
+ // PSIZE[n] 点大小 FLOAT
886
+ // TANGENT[n] 正切 float4
887
+ // TEXCOORD[n] 纹理坐标 float4
888
+ // POSITION_BS[n] Blend Shape 空间中的顶点位置 float4
889
+ // NORMAL_BS[n] Blend Shape 空间中的法向矢量 float4
890
+ // TANGENT_BS[n] Blend Shape 空间中的正切矢量 float4
891
+ var VertexBufferSemantic;
892
+ (function(VertexBufferSemantic) {
893
+ VertexBufferSemantic["Position"] = "POSITION";
894
+ VertexBufferSemantic["Uv"] = "TEXCOORD0";
895
+ VertexBufferSemantic["Uv2"] = "TEXCOORD1";
896
+ VertexBufferSemantic["Normal"] = "NORMAL";
897
+ VertexBufferSemantic["Tangent"] = "TANGENT";
898
+ VertexBufferSemantic["Color"] = "COLOR";
899
+ VertexBufferSemantic["Joints"] = "JOINTS";
900
+ VertexBufferSemantic["Weights"] = "WEIGHTS";
901
+ //
902
+ VertexBufferSemantic["PositionBS0"] = "POSITION_BS0";
903
+ VertexBufferSemantic["PositionBS1"] = "POSITION_BS1";
904
+ VertexBufferSemantic["PositionBS2"] = "POSITION_BS2";
905
+ VertexBufferSemantic["PositionBS3"] = "POSITION_BS3";
906
+ VertexBufferSemantic["PositionBS4"] = "POSITION_BS4";
907
+ VertexBufferSemantic["PositionBS5"] = "POSITION_BS5";
908
+ VertexBufferSemantic["PositionBS6"] = "POSITION_BS6";
909
+ VertexBufferSemantic["PositionBS7"] = "POSITION_BS7";
910
+ VertexBufferSemantic["NormalBS0"] = "NORMAL_BS0";
911
+ VertexBufferSemantic["NormalBS1"] = "NORMAL_BS1";
912
+ VertexBufferSemantic["NormalBS2"] = "NORMAL_BS2";
913
+ VertexBufferSemantic["NormalBS3"] = "NORMAL_BS3";
914
+ VertexBufferSemantic["TangentBS0"] = "TANGENT_BS0";
915
+ VertexBufferSemantic["TangentBS1"] = "TANGENT_BS1";
916
+ VertexBufferSemantic["TangentBS2"] = "TANGENT_BS2";
917
+ VertexBufferSemantic["TangentBS3"] = "TANGENT_BS3";
918
+ })(VertexBufferSemantic || (VertexBufferSemantic = {}));
919
+
920
+ var LATEST_VERSION = JSONSceneVersion.LATEST;
921
+
922
+ var index = /*#__PURE__*/Object.freeze({
923
+ __proto__: null,
924
+ get BackgroundType () { return BackgroundType; },
925
+ get BezierKeyframeType () { return BezierKeyframeType; },
926
+ get BlendingMode () { return BlendingMode; },
927
+ BuiltinObjectGUID: BuiltinObjectGUID,
928
+ CAMERA_CLIP_MODE_NORMAL: CAMERA_CLIP_MODE_NORMAL,
929
+ CAMERA_CLIP_MODE_VERTICAL: CAMERA_CLIP_MODE_VERTICAL,
930
+ get CameraClipMode () { return CameraClipMode; },
931
+ get CameraType () { return CameraType; },
932
+ get DataType () { return DataType; },
933
+ END_BEHAVIOR_DESTROY: END_BEHAVIOR_DESTROY,
934
+ END_BEHAVIOR_DESTROY_CHILDREN: END_BEHAVIOR_DESTROY_CHILDREN,
935
+ END_BEHAVIOR_FORWARD: END_BEHAVIOR_FORWARD,
936
+ END_BEHAVIOR_FREEZE: END_BEHAVIOR_FREEZE,
937
+ END_BEHAVIOR_PAUSE: END_BEHAVIOR_PAUSE,
938
+ END_BEHAVIOR_PAUSE_AND_DESTROY: END_BEHAVIOR_PAUSE_AND_DESTROY,
939
+ END_BEHAVIOR_RESTART: END_BEHAVIOR_RESTART,
940
+ get EndBehavior () { return EndBehavior; },
941
+ get FillType () { return FillType; },
942
+ get FontStyle () { return FontStyle; },
943
+ get GeometryType () { return GeometryType; },
944
+ get HevcVideoCodec () { return HevcVideoCodec; },
945
+ get IndexFormatType () { return IndexFormatType; },
946
+ get InteractBehavior () { return InteractBehavior; },
947
+ get InteractType () { return InteractType; },
948
+ get ItemType () { return ItemType; },
949
+ get JSONSceneVersion () { return JSONSceneVersion; },
950
+ LATEST_VERSION: LATEST_VERSION,
951
+ get LightType () { return LightType; },
952
+ get LineCap () { return LineCap; },
953
+ get LineJoin () { return LineJoin; },
954
+ MESSAGE_ITEM_PHRASE_BEGIN: MESSAGE_ITEM_PHRASE_BEGIN,
955
+ MESSAGE_ITEM_PHRASE_END: MESSAGE_ITEM_PHRASE_END,
956
+ get MaterialBlending () { return MaterialBlending; },
957
+ get MaterialType () { return MaterialType; },
958
+ get ModelBoundingType () { return ModelBoundingType; },
959
+ get MultimediaType () { return MultimediaType; },
960
+ get NodeDataType () { return NodeDataType; },
961
+ get ObscuredMode () { return ObscuredMode; },
962
+ get ParticleEmitterShapeType () { return ParticleEmitterShapeType; },
963
+ get ParticleInteractionBehavior () { return ParticleInteractionBehavior; },
964
+ get ParticleOrigin () { return ParticleOrigin; },
965
+ get PluginType () { return PluginType; },
966
+ get RenderFace () { return RenderFace; },
967
+ get RenderLevel () { return RenderLevel; },
968
+ get RenderMode () { return RenderMode; },
969
+ get RenderMode3D () { return RenderMode3D; },
970
+ get RenderType () { return RenderType; },
971
+ get ShapeArcMode () { return ShapeArcMode; },
972
+ get ShapePrimitiveType () { return ShapePrimitiveType; },
973
+ get SideMode () { return SideMode; },
974
+ get TextAlignment () { return TextAlignment; },
975
+ get TextBaseline () { return TextBaseline; },
976
+ get TextOverflow () { return TextOverflow; },
977
+ get TextSizeMode () { return TextSizeMode; },
978
+ get TextVerticalAlign () { return TextVerticalAlign; },
979
+ get TextWeight () { return TextWeight; },
980
+ get TexturePaintScaleMode () { return TexturePaintScaleMode; },
981
+ get ValueType () { return ValueType; },
982
+ get VertexBufferSemantic () { return VertexBufferSemantic; },
983
+ get VertexFormatType () { return VertexFormatType; }
984
+ });
985
+
986
+ function _extends() {
987
+ _extends = Object.assign || function assign(target) {
988
+ for(var i = 1; i < arguments.length; i++){
989
+ var source = arguments[i];
990
+ for(var key in source)if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
991
+ }
992
+ return target;
993
+ };
994
+ return _extends.apply(this, arguments);
995
+ }
996
+
997
+ function _array_like_to_array(arr, len) {
998
+ if (len == null || len > arr.length) len = arr.length;
999
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
1000
+ return arr2;
1001
+ }
1002
+
1003
+ function _unsupported_iterable_to_array(o, minLen) {
1004
+ if (!o) return;
1005
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
1006
+ var n = Object.prototype.toString.call(o).slice(8, -1);
1007
+ if (n === "Object" && o.constructor) n = o.constructor.name;
1008
+ if (n === "Map" || n === "Set") return Array.from(n);
1009
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
1010
+ }
1011
+
1012
+ function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
1013
+ var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
1014
+ if (it) return (it = it.call(o)).next.bind(it);
1015
+ // Fallback for engines without symbol support
1016
+ if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike) {
1017
+ if (it) o = it;
1018
+ var i = 0;
1019
+ return function() {
1020
+ if (i >= o.length) return {
1021
+ done: true
1022
+ };
1023
+ return {
1024
+ done: false,
1025
+ value: o[i++]
1026
+ };
1027
+ };
1028
+ }
1029
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
1030
+ }
1031
+
1032
+ var SUPPORTED_TYPES = new Set([
1033
+ 'float',
1034
+ 'vec2',
1035
+ 'vec3',
1036
+ 'vec4',
1037
+ 'int',
1038
+ 'sampler2D'
1039
+ ]);
1040
+ /**
1041
+ * 匹配 uniform 声明,支持行尾 // 注释
1042
+ * 示例:
1043
+ * uniform float uTime; // 时间
1044
+ * uniform vec4 uColor;
1045
+ */ var UNIFORM_REGEX = /^\s*uniform\s+(float|vec2|vec3|vec4|int|sampler2D)\s+(\w+)\s*;(?:\s*\/\/\s*(.*))?/gm;
1046
+ /**
1047
+ * 从 fragment shader 源码中提取所有 uniform 声明
1048
+ */ function parseUniforms(source) {
1049
+ var results = [];
1050
+ var seen = new Set();
1051
+ var match;
1052
+ // 重置 lastIndex 以防复用
1053
+ UNIFORM_REGEX.lastIndex = 0;
1054
+ while((match = UNIFORM_REGEX.exec(source)) !== null){
1055
+ var typeStr = match[1], name = match[2], comment = match[3];
1056
+ if (!SUPPORTED_TYPES.has(typeStr)) {
1057
+ continue;
1058
+ }
1059
+ // 跳过重复声明
1060
+ if (seen.has(name)) {
1061
+ continue;
1062
+ }
1063
+ seen.add(name);
1064
+ results.push(_extends({
1065
+ name: name,
1066
+ type: typeStr
1067
+ }, (comment == null ? void 0 : comment.trim()) ? {
1068
+ comment: comment.trim()
1069
+ } : {}));
1070
+ }
1071
+ return results;
1072
+ }
1073
+
1074
+ /**
1075
+ * 固定模板:vertex shader 和全屏 Quad 几何体数据
1076
+ */ /**
1077
+ * 全屏四边形的固定 vertex shader
1078
+ * 传递 Position 和 UV 给 fragment shader
1079
+ */ /**
1080
+ * GE EffectComponent 每帧自动设置 _Time (vec4):
1081
+ * _Time = vec4(time/20, time, time*2, time*3)
1082
+ * 其中 _Time.y 就是经过的秒数。
1083
+ *
1084
+ * 通过 varying vTime 传递给 fragment shader,
1085
+ * convert 阶段会在用户的 fragment shader 头部注入:
1086
+ * float uTime = vTime;
1087
+ * 从而让用户直接使用 uTime 驱动动画。
1088
+ */ var DEFAULT_VERTEX_SHADER = "\nprecision highp float;\nattribute vec3 aPos;\nattribute vec2 aUV;\nuniform vec4 _Time;\nvarying vec2 vUV;\nvarying float vTime;\n\nvoid main () {\n vUV = aUV;\n vTime = _Time.y;\n gl_Position = vec4(aPos, 1.0);\n}\n".trim();
1089
+ /**
1090
+ * Shadertoy 兼容的 vertex shader
1091
+ *
1092
+ * 在标准 vertex shader 基础上增加:
1093
+ * - uniform vec3 iResolution:视口分辨率,由 previewSize 填充
1094
+ * 直接 pass-through 给 fragment shader(flat varying 不可用于 ES1.0,
1095
+ * 因此在 fragment shader 中声明为 uniform,vertex shader 也需声明)
1096
+ *
1097
+ * 注:iResolution 由 convert 层自动添加到 material 的 vector4s 中
1098
+ */ var SHADERTOY_VERTEX_SHADER = "\nprecision highp float;\nattribute vec3 aPos;\nattribute vec2 aUV;\nuniform vec4 _Time;\nvarying vec2 vUV;\nvarying float vTime;\n\nvoid main () {\n vUV = aUV;\n vTime = _Time.y;\n gl_Position = vec4(aPos, 1.0);\n}\n".trim();
1099
+ /**
1100
+ * 示例 fragment shader(渐变色),用于调试和兜底
1101
+ */ var FALLBACK_FRAGMENT_SHADER = "\nprecision highp float;\nvarying vec2 vUV;\nuniform float uTime;\n\nvoid main () {\n vec3 color = 0.5 + 0.5 * cos(uTime + vUV.xyx + vec3(0.0, 2.0, 4.0));\n gl_FragColor = vec4(color, 1.0);\n}\n".trim();
1102
+ /**
1103
+ * 全屏 Quad 的顶点数据(NDC 空间 -1~1,2个三角形组成矩形)
1104
+ *
1105
+ * 分离布局(GE Runtime 按连续块读取每个 channel):
1106
+ * [Position x 4] [UV x 4] [Indices]
1107
+ *
1108
+ * 字节布局:
1109
+ * Position: 4 vertices * 3 floats * 4 bytes = 48 bytes (offset 0)
1110
+ * UV: 4 vertices * 2 floats * 4 bytes = 32 bytes (offset 48)
1111
+ * Indices: 6 indices * 2 bytes = 12 bytes (offset 80)
1112
+ */ var QUAD_POSITIONS = new Float32Array([
1113
+ -1,
1114
+ -1,
1115
+ 0,
1116
+ 1,
1117
+ -1,
1118
+ 0,
1119
+ 1,
1120
+ 1,
1121
+ 0,
1122
+ -1,
1123
+ 1,
1124
+ 0
1125
+ ]);
1126
+ var QUAD_UVS = new Float32Array([
1127
+ 0,
1128
+ 0,
1129
+ 1,
1130
+ 0,
1131
+ 1,
1132
+ 1,
1133
+ 0,
1134
+ 1
1135
+ ]);
1136
+ var QUAD_INDICES = new Uint16Array([
1137
+ 0,
1138
+ 1,
1139
+ 2,
1140
+ 0,
1141
+ 2,
1142
+ 3
1143
+ ]);
1144
+ /** Position 块字节大小 */ var POSITION_BYTES = QUAD_POSITIONS.byteLength; // 48
1145
+ /** UV 块字节偏移(紧跟 Position 之后) */ var UV_OFFSET = POSITION_BYTES; // 48
1146
+ /** Index 块字节偏移(紧跟 UV 之后) */ var INDEX_OFFSET = POSITION_BYTES + QUAD_UVS.byteLength; // 80
1147
+ /**
1148
+ * 将 Quad 数据编码为纯 base64 字符串(用于 GeometryData.buffer)
1149
+ *
1150
+ * GE Runtime 的 decodeBase64ToArrays 直接对该字符串调用 atob,
1151
+ * 不会处理 data URI 前缀,因此此处只返回纯 base64。
1152
+ *
1153
+ * 内存布局:[Position(48B)] [UV(32B)] [Index(12B)] = 92 bytes
1154
+ */ function encodeQuadBuffer() {
1155
+ var totalBytes = POSITION_BYTES + QUAD_UVS.byteLength + QUAD_INDICES.byteLength;
1156
+ var buffer = new ArrayBuffer(totalBytes);
1157
+ var view = new Uint8Array(buffer);
1158
+ view.set(new Uint8Array(QUAD_POSITIONS.buffer), 0);
1159
+ view.set(new Uint8Array(QUAD_UVS.buffer), UV_OFFSET);
1160
+ view.set(new Uint8Array(QUAD_INDICES.buffer), INDEX_OFFSET);
1161
+ var binaryString = Array.from(view, function(byte) {
1162
+ return String.fromCharCode(byte);
1163
+ }).join('');
1164
+ return btoa(binaryString);
1165
+ }
1166
+ // ─── 默认纹理资源 ───
1167
+ /**
1168
+ * 1×1 白色 PNG(base64 data URI)
1169
+ *
1170
+ * 当 sampler2D uniform 未提供纹理时,使用此默认白色纹理,
1171
+ * 避免 shader 采样到黑色/无效区域。
1172
+ *
1173
+ * 这是一个合法的 1x1 像素 RGBA (255,255,255,255) PNG 文件。
1174
+ */ var DEFAULT_WHITE_TEXTURE_URL = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==';
1175
+ /** GL 纹理参数常量 */ var GL_TEXTURE_WRAP_REPEAT = 10497;
1176
+ var GL_TEXTURE_WRAP_CLAMP_TO_EDGE = 33071;
1177
+ var GL_TEXTURE_FILTER_LINEAR = 9729;
1178
+ var GL_TEXTURE_FILTER_NEAREST = 9728;
1179
+ var GL_TEXTURE_2D = 3553;
1180
+
1181
+ /**
1182
+ * 将 fragment shader 源码解析为中间表示(IR)。
1183
+ *
1184
+ * 该函数与 ConvertOptions 完全无关——所有依赖外部参数的逻辑(uniformOverrides、
1185
+ * previewSize 注入、sampler2D 纹理告警等)由 {@link convert} 接力处理。
1186
+ *
1187
+ * 适用于不需要生成完整 JSONScene、只想检视 shader 结构的场景,例如:
1188
+ * - AI 生成 shader 后预检 warnings 决定是否重试
1189
+ * - UI 中展示 uniform 列表 / 是否 Shadertoy / 静态校验信息
1190
+ * - 测试或调试时单独验证桥接行为
1191
+ *
1192
+ * @param source - 原始 GLSL fragment shader 源码(GE 原生格式或 Shadertoy 格式皆可)
1193
+ * @returns 解析后的中间表示,包含桥接后的最终源码、uniform 列表、是否为 Shadertoy、警告列表
1194
+ */ function parseShader(source) {
1195
+ var warnings = [];
1196
+ var fragment = source.trim();
1197
+ // 空 shader 兜底
1198
+ if (!fragment) {
1199
+ warnings.push('Empty fragment shader provided, using fallback gradient shader.');
1200
+ fragment = FALLBACK_FRAGMENT_SHADER;
1201
+ }
1202
+ // Shadertoy 兼容桥接(必须在基础校验之前,因为桥接会注入 main() 和 gl_FragColor)
1203
+ var isShadertoy = /void\s+mainImage\s*\(\s*out\s+vec4/.test(fragment);
1204
+ if (isShadertoy) {
1205
+ fragment = bridgeShadertoy(fragment);
1206
+ }
1207
+ validateMainAndColorOutput(fragment, warnings);
1208
+ // 解析 uniform(对桥接后的源码解析,以获取正确的 uniform 列表)
1209
+ var uniforms = parseUniforms(fragment);
1210
+ // uTime 自动桥接:将用户的 `uniform float uTime` 替换为从 vertex shader 传入的 varying
1211
+ // GE EffectComponent 每帧自动设置 _Time (vec4),vertex shader 已将 _Time.y 传为 vTime
1212
+ var hasUTime = uniforms.some(function(u) {
1213
+ return u.name === 'uTime' && u.type === 'float';
1214
+ });
1215
+ if (hasUTime) {
1216
+ fragment = bridgeUTime(fragment);
1217
+ // uTime 已由 GE _Time 驱动,从 uniform 列表中移除,避免写入 material floats
1218
+ var uTimeIndex = uniforms.findIndex(function(u) {
1219
+ return u.name === 'uTime';
1220
+ });
1221
+ if (uTimeIndex !== -1) {
1222
+ uniforms.splice(uTimeIndex, 1);
1223
+ }
1224
+ }
1225
+ return {
1226
+ fragment: fragment,
1227
+ uniforms: uniforms,
1228
+ isShadertoy: isShadertoy,
1229
+ warnings: warnings
1230
+ };
1231
+ }
1232
+ /**
1233
+ * 将 Shadertoy 格式的 shader 转换为 GE 兼容格式
1234
+ *
1235
+ * 处理内容:
1236
+ * - 注入 precision、varying vUV、varying vTime 声明
1237
+ * - 桥接 iTime → vTime、iResolution → uniform vec4
1238
+ * - iChannel0~3 保留为 sampler2D uniform(由纹理系统处理)
1239
+ * - 将 mainImage(out vec4, in vec2) 包装为 void main()
1240
+ * - fragCoord 通过 vUV * iResolution.xy 推导
1241
+ */ function bridgeShadertoy(source) {
1242
+ // 移除用户可能写的 precision 声明,统一由桥接头注入
1243
+ var body = source.replace(/^\s*precision\s+\w+\s+float\s*;\s*$/gm, '');
1244
+ // 移除已有的 #version 声明(GE 不支持)
1245
+ body = body.replace(/^\s*#version\s+.*$/gm, '');
1246
+ // 移除已有的 iChannel uniform 声明(Shadertoy 用户有时会手动写,但 Shadertoy 运行时会自动注入,
1247
+ // 这里统一由桥接层管理,避免重复声明)
1248
+ body = body.replace(/^\s*uniform\s+sampler2D\s+iChannel[0-3]\s*;(?:\s*\/\/\s*.*)?$/gm, '');
1249
+ // 检测源码中实际引用的 iChannel0~3(无论出现在 texture2D 还是其他表达式)
1250
+ var usedChannels = Array.from(body.matchAll(/\biChannel([0-3])\b/g), function(match) {
1251
+ return "iChannel" + match[1];
1252
+ });
1253
+ var channelSet = new Set(usedChannels);
1254
+ // 构建 header,注入使用的 iChannel uniform 声明
1255
+ var headerLines = [
1256
+ 'precision highp float;',
1257
+ 'varying vec2 vUV;',
1258
+ 'varying float vTime;',
1259
+ 'uniform vec4 iResolution; // viewport resolution (pixels, xy used)'
1260
+ ];
1261
+ for(var _iterator = _create_for_of_iterator_helper_loose(Array.from(channelSet).sort()), _step; !(_step = _iterator()).done;){
1262
+ var channel = _step.value;
1263
+ headerLines.push("uniform sampler2D " + channel + ";");
1264
+ }
1265
+ headerLines.push('', '#define iTime vTime');
1266
+ var header = headerLines.join('\n');
1267
+ var footer = [
1268
+ '',
1269
+ 'void main() {',
1270
+ ' vec2 fragCoord = vUV * iResolution.xy;',
1271
+ ' vec4 fragColor;',
1272
+ ' mainImage(fragColor, fragCoord);',
1273
+ ' gl_FragColor = fragColor;',
1274
+ '}'
1275
+ ].join('\n');
1276
+ return header + "\n\n" + body + "\n" + footer;
1277
+ }
1278
+ function validateMainAndColorOutput(fragment, warnings) {
1279
+ if (!/void\s+main\s*\(/.test(fragment)) {
1280
+ warnings.push('Fragment shader does not contain a main() function. It may not render correctly.');
1281
+ }
1282
+ if (!fragment.includes('gl_FragColor') && !/out\s+vec4/.test(fragment)) {
1283
+ warnings.push('Fragment shader does not write to gl_FragColor. It may not produce visible output.');
1284
+ }
1285
+ }
1286
+ function bridgeUTime(fragment) {
1287
+ return fragment.replace(/uniform\s+float\s+uTime\s*;[^\n]*/, 'varying float vTime;\n#define uTime vTime');
1288
+ }
1289
+
1290
+ var byteToHex = [];
1291
+ for(var i = 0; i < 256; ++i){
1292
+ byteToHex.push((i + 0x100).toString(16).slice(1));
1293
+ }
1294
+ function unsafeStringify(arr, offset) {
1295
+ if (offset === void 0) offset = 0;
1296
+ return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();
1297
+ }
1298
+
1299
+ var getRandomValues;
1300
+ var rnds8 = new Uint8Array(16);
1301
+ function rng() {
1302
+ if (!getRandomValues) {
1303
+ if (typeof crypto === 'undefined' || !crypto.getRandomValues) {
1304
+ throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');
1305
+ }
1306
+ getRandomValues = crypto.getRandomValues.bind(crypto);
1307
+ }
1308
+ return getRandomValues(rnds8);
1309
+ }
1310
+
1311
+ var randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);
1312
+ var native = {
1313
+ randomUUID: randomUUID
1314
+ };
1315
+
1316
+ function _v4(options, buf, offset) {
1317
+ var _ref, _options_random;
1318
+ options = options || {};
1319
+ var rnds = (_ref = (_options_random = options.random) != null ? _options_random : options.rng == null ? void 0 : options.rng.call(options)) != null ? _ref : rng();
1320
+ if (rnds.length < 16) {
1321
+ throw new Error('Random bytes length must be >= 16');
1322
+ }
1323
+ rnds[6] = rnds[6] & 0x0f | 0x40;
1324
+ rnds[8] = rnds[8] & 0x3f | 0x80;
1325
+ return unsafeStringify(rnds);
1326
+ }
1327
+ function v4(options, buf, offset) {
1328
+ if (native.randomUUID && true && !options) {
1329
+ return native.randomUUID();
1330
+ }
1331
+ return _v4(options);
1332
+ }
1333
+
1334
+ function generateId() {
1335
+ return v4().replace(/-/g, '');
1336
+ }
1337
+ /**
1338
+ * 生成全屏 Quad 几何体
1339
+ */ function buildQuadGeometry(geometryId) {
1340
+ return {
1341
+ id: geometryId,
1342
+ name: 'FullscreenQuad',
1343
+ dataType: DataType.Geometry,
1344
+ vertexData: {
1345
+ vertexCount: 4,
1346
+ channels: [
1347
+ {
1348
+ semantic: 'POSITION',
1349
+ offset: 0,
1350
+ format: VertexFormatType.Float32,
1351
+ dimension: 3
1352
+ },
1353
+ {
1354
+ semantic: 'TEXCOORD0',
1355
+ offset: UV_OFFSET,
1356
+ format: VertexFormatType.Float32,
1357
+ dimension: 2
1358
+ }
1359
+ ]
1360
+ },
1361
+ indexFormat: IndexFormatType.UInt16,
1362
+ indexOffset: INDEX_OFFSET,
1363
+ subMeshes: [
1364
+ {
1365
+ offset: 0,
1366
+ indexCount: 6,
1367
+ vertexCount: 4
1368
+ }
1369
+ ],
1370
+ mode: GeometryType.TRIANGLES,
1371
+ buffer: encodeQuadBuffer()
1372
+ };
1373
+ }
1374
+ /**
1375
+ * 构建完整的 GE Timeline 对象图
1376
+ *
1377
+ * 标准结构:TimelineAsset → ObjectBindingTrack → ActivationTrack
1378
+ * clips 内联在 Track 中,不作为独立 miscs 条目
1379
+ */ function buildTimeline(duration, endBehavior) {
1380
+ var miscs = [];
1381
+ // 1. ActivationPlayableAsset
1382
+ var activationPlayableId = generateId();
1383
+ miscs.push({
1384
+ id: activationPlayableId,
1385
+ dataType: DataType.ActivationPlayableAsset
1386
+ });
1387
+ // 2. ActivationTrack(clips 内联)
1388
+ var activationTrackId = generateId();
1389
+ miscs.push({
1390
+ id: activationTrackId,
1391
+ dataType: DataType.ActivationTrack,
1392
+ children: [],
1393
+ clips: [
1394
+ {
1395
+ start: 0,
1396
+ duration: duration,
1397
+ endBehavior: endBehavior,
1398
+ asset: {
1399
+ id: activationPlayableId
1400
+ }
1401
+ }
1402
+ ]
1403
+ });
1404
+ // 3. ObjectBindingTrack(根绑定轨道)
1405
+ var objectBindingTrackId = generateId();
1406
+ miscs.push({
1407
+ id: objectBindingTrackId,
1408
+ dataType: DataType.ObjectBindingTrack,
1409
+ children: [
1410
+ {
1411
+ id: activationTrackId
1412
+ }
1413
+ ],
1414
+ clips: []
1415
+ });
1416
+ // 4. TimelineAsset
1417
+ var timelineAssetId = generateId();
1418
+ miscs.push({
1419
+ id: timelineAssetId,
1420
+ dataType: DataType.TimelineAsset,
1421
+ tracks: [
1422
+ {
1423
+ id: objectBindingTrackId
1424
+ }
1425
+ ]
1426
+ });
1427
+ return {
1428
+ miscs: miscs,
1429
+ timelineAssetId: timelineAssetId,
1430
+ objectBindingTrackId: objectBindingTrackId
1431
+ };
1432
+ }
1433
+
1434
+ function _type_of(obj) {
1435
+ "@swc/helpers - typeof";
1436
+ return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
1437
+ }
1438
+
1439
+ /**
1440
+ * 判断一个 UniformValue 是否是纹理输入
1441
+ */ function isTextureInput(value) {
1442
+ if ((typeof value === "undefined" ? "undefined" : _type_of(value)) !== 'object' || value === null) {
1443
+ return false;
1444
+ }
1445
+ var record = value;
1446
+ return typeof record.url === 'string' && !('x' in record) && !('r' in record);
1447
+ }
1448
+ /**
1449
+ * 判断一个值是否可视作向量覆盖(vec2/vec3/vec4)
1450
+ */ function isVectorInput(value) {
1451
+ if ((typeof value === "undefined" ? "undefined" : _type_of(value)) !== 'object' || value === null) {
1452
+ return false;
1453
+ }
1454
+ var record = value;
1455
+ return typeof record.x === 'number' && typeof record.y === 'number';
1456
+ }
1457
+ /**
1458
+ * 判断一个值是否可视作颜色覆盖
1459
+ */ function isColorInput(value) {
1460
+ if ((typeof value === "undefined" ? "undefined" : _type_of(value)) !== 'object' || value === null) {
1461
+ return false;
1462
+ }
1463
+ var record = value;
1464
+ return typeof record.r === 'number' && typeof record.g === 'number' && typeof record.b === 'number' && typeof record.a === 'number';
1465
+ }
1466
+ /**
1467
+ * 合并 uniformOverrides 与 shadertoyChannels。
1468
+ * 显式传入的 uniformOverrides 优先级更高。
1469
+ */ function mergeUniformOverrides(options) {
1470
+ var merged = {};
1471
+ if (options.uniformOverrides) {
1472
+ Object.assign(merged, options.uniformOverrides);
1473
+ }
1474
+ if (options.shadertoyChannels) {
1475
+ for(var _iterator = _create_for_of_iterator_helper_loose(Object.entries(options.shadertoyChannels)), _step; !(_step = _iterator()).done;){
1476
+ var _step_value = _step.value, channel = _step_value[0], textureInput = _step_value[1];
1477
+ if (!(channel in merged)) {
1478
+ merged[channel] = textureInput;
1479
+ }
1480
+ }
1481
+ }
1482
+ return merged;
1483
+ }
1484
+ /**
1485
+ * 原生 shader 中若显式声明 uResolution(vec4),则用 previewSize 强制覆盖。
1486
+ */ function shouldInjectNativeResolution(uniforms, previewSize) {
1487
+ return Boolean(previewSize) && uniforms.some(function(u) {
1488
+ return u.name === 'uResolution' && u.type === 'vec4';
1489
+ });
1490
+ }
1491
+ function toResolutionVector(previewSize) {
1492
+ return {
1493
+ x: previewSize[0],
1494
+ y: previewSize[1],
1495
+ z: 1,
1496
+ w: 0
1497
+ };
1498
+ }
1499
+
1500
+ function toNumber(value, fallback) {
1501
+ if (fallback === void 0) fallback = 0;
1502
+ return typeof value === 'number' ? value : fallback;
1503
+ }
1504
+ function toTextureDefine(textureInput) {
1505
+ var _ref, _ref1, _ref2, _ref3, _ref4, _ref5;
1506
+ var imageId = generateId();
1507
+ var textureId = generateId();
1508
+ var image = {
1509
+ id: imageId,
1510
+ url: (_ref = textureInput == null ? void 0 : textureInput.url) != null ? _ref : DEFAULT_WHITE_TEXTURE_URL
1511
+ };
1512
+ var texture = {
1513
+ id: textureId,
1514
+ source: {
1515
+ id: imageId
1516
+ },
1517
+ dataType: DataType.Texture,
1518
+ target: GL_TEXTURE_2D,
1519
+ wrapS: (_ref1 = textureInput == null ? void 0 : textureInput.wrapS) != null ? _ref1 : GL_TEXTURE_WRAP_REPEAT,
1520
+ wrapT: (_ref2 = textureInput == null ? void 0 : textureInput.wrapT) != null ? _ref2 : GL_TEXTURE_WRAP_REPEAT,
1521
+ magFilter: (_ref3 = textureInput == null ? void 0 : textureInput.magFilter) != null ? _ref3 : GL_TEXTURE_FILTER_LINEAR,
1522
+ minFilter: (_ref4 = textureInput == null ? void 0 : textureInput.minFilter) != null ? _ref4 : GL_TEXTURE_FILTER_LINEAR,
1523
+ flipY: (_ref5 = textureInput == null ? void 0 : textureInput.flipY) != null ? _ref5 : true
1524
+ };
1525
+ return {
1526
+ image: image,
1527
+ texture: texture,
1528
+ textureId: textureId
1529
+ };
1530
+ }
1531
+ function applyVectorDefault(target, uniformName, override, fallbackW) {
1532
+ if (fallbackW === void 0) fallbackW = 0;
1533
+ if (!isVectorInput(override)) {
1534
+ target[uniformName] = {
1535
+ x: 0,
1536
+ y: 0,
1537
+ z: 0,
1538
+ w: fallbackW
1539
+ };
1540
+ return;
1541
+ }
1542
+ target[uniformName] = {
1543
+ x: override.x,
1544
+ y: override.y,
1545
+ z: toNumber(override.z),
1546
+ w: toNumber(override.w, fallbackW)
1547
+ };
1548
+ }
1549
+ function buildUniformDefaults(uniforms, overrides) {
1550
+ if (overrides === void 0) overrides = {};
1551
+ var floats = {};
1552
+ var vector4s = {};
1553
+ var colors = {};
1554
+ var materialTextures = {};
1555
+ var images = [];
1556
+ var textures = [];
1557
+ for(var _iterator = _create_for_of_iterator_helper_loose(uniforms), _step; !(_step = _iterator()).done;){
1558
+ var uniform = _step.value;
1559
+ var override = overrides[uniform.name];
1560
+ switch(uniform.type){
1561
+ case 'float':
1562
+ case 'int':
1563
+ floats[uniform.name] = toNumber(override);
1564
+ break;
1565
+ case 'vec2':
1566
+ case 'vec3':
1567
+ applyVectorDefault(vector4s, uniform.name, override, 0);
1568
+ break;
1569
+ case 'vec4':
1570
+ if (isColorInput(override)) {
1571
+ colors[uniform.name] = override;
1572
+ } else {
1573
+ applyVectorDefault(vector4s, uniform.name, override, 1);
1574
+ }
1575
+ break;
1576
+ case 'sampler2D':
1577
+ {
1578
+ var textureInput = isTextureInput(override) ? override : null;
1579
+ var _toTextureDefine = toTextureDefine(textureInput), image = _toTextureDefine.image, texture = _toTextureDefine.texture, textureId = _toTextureDefine.textureId;
1580
+ images.push(image);
1581
+ textures.push(texture);
1582
+ materialTextures[uniform.name] = {
1583
+ texture: {
1584
+ id: textureId
1585
+ }
1586
+ };
1587
+ break;
1588
+ }
1589
+ }
1590
+ }
1591
+ return {
1592
+ floats: floats,
1593
+ vector4s: vector4s,
1594
+ colors: colors,
1595
+ materialTextures: materialTextures,
1596
+ images: images,
1597
+ textures: textures
1598
+ };
1599
+ }
1600
+
1601
+ /**
1602
+ * 核心:生成完整的可播放 GE JSONScene
1603
+ */ function generateScene(fragmentShader, uniforms, options, isShadertoy) {
1604
+ if (options === void 0) options = {};
1605
+ if (isShadertoy === void 0) isShadertoy = false;
1606
+ var _options_sceneName = options.sceneName, sceneName = _options_sceneName === void 0 ? 'ShaderScene' : _options_sceneName, _options_duration = options.duration, duration = _options_duration === void 0 ? 5 : _options_duration, _options_endBehavior = options.endBehavior, endBehavior = _options_endBehavior === void 0 ? EndBehavior.restart : _options_endBehavior, _options_previewSize = options.previewSize, previewSize = _options_previewSize === void 0 ? [
1607
+ 512,
1608
+ 512
1609
+ ] : _options_previewSize, _options_uniformOverrides = options.uniformOverrides, uniformOverrides = _options_uniformOverrides === void 0 ? {} : _options_uniformOverrides;
1610
+ // 生成所有 ID
1611
+ var shaderId = generateId();
1612
+ var materialId = generateId();
1613
+ var geometryId = generateId();
1614
+ var effectComponentId = generateId();
1615
+ var compositionComponentId = generateId();
1616
+ var itemId = generateId();
1617
+ var compositionId = generateId();
1618
+ // 1. Shader(Shadertoy 模式使用带 iResolution 的 vertex shader)
1619
+ var shader = {
1620
+ id: shaderId,
1621
+ name: "" + sceneName + "_Shader",
1622
+ dataType: DataType.Shader,
1623
+ vertex: isShadertoy ? SHADERTOY_VERTEX_SHADER : DEFAULT_VERTEX_SHADER,
1624
+ fragment: fragmentShader
1625
+ };
1626
+ // 2. Material(填充 uniform 默认值 + 纹理引用)
1627
+ var _buildUniformDefaults = buildUniformDefaults(uniforms, uniformOverrides), floats = _buildUniformDefaults.floats, vector4s = _buildUniformDefaults.vector4s, colors = _buildUniformDefaults.colors, materialTextures = _buildUniformDefaults.materialTextures, textureImages = _buildUniformDefaults.images, sceneTextures = _buildUniformDefaults.textures;
1628
+ // Shadertoy 模式:自动注入 iResolution(视口分辨率)
1629
+ if (isShadertoy) {
1630
+ vector4s.iResolution = toResolutionVector(previewSize);
1631
+ }
1632
+ var material = {
1633
+ id: materialId,
1634
+ name: "" + sceneName + "_Material",
1635
+ dataType: DataType.Material,
1636
+ shader: {
1637
+ id: shaderId
1638
+ },
1639
+ stringTags: {
1640
+ RenderType: 'Transparent'
1641
+ },
1642
+ macros: [],
1643
+ ints: {},
1644
+ floats: floats,
1645
+ vector4s: vector4s,
1646
+ colors: colors,
1647
+ textures: materialTextures
1648
+ };
1649
+ // 3. Geometry
1650
+ var geometry = buildQuadGeometry(geometryId);
1651
+ // 4. EffectComponent
1652
+ var effectComponent = {
1653
+ id: effectComponentId,
1654
+ name: "" + sceneName + "_Effect",
1655
+ dataType: DataType.EffectComponent,
1656
+ item: {
1657
+ id: itemId
1658
+ },
1659
+ _priority: 0,
1660
+ materials: [
1661
+ {
1662
+ id: materialId
1663
+ }
1664
+ ],
1665
+ geometry: {
1666
+ id: geometryId
1667
+ }
1668
+ };
1669
+ // 5. VFXItem
1670
+ var item = {
1671
+ id: itemId,
1672
+ name: sceneName,
1673
+ duration: duration,
1674
+ type: ItemType.effect,
1675
+ endBehavior: endBehavior,
1676
+ components: [
1677
+ {
1678
+ id: effectComponentId
1679
+ }
1680
+ ],
1681
+ dataType: DataType.VFXItemData,
1682
+ transform: {
1683
+ position: {
1684
+ x: 0,
1685
+ y: 0,
1686
+ z: 0
1687
+ },
1688
+ eulerHint: {
1689
+ x: 0,
1690
+ y: 0,
1691
+ z: 0
1692
+ },
1693
+ scale: {
1694
+ x: 1,
1695
+ y: 1,
1696
+ z: 1
1697
+ }
1698
+ },
1699
+ // Is deprecated but specification
1700
+ content: null
1701
+ };
1702
+ // 6. Timeline(标准结构:TimelineAsset → ObjectBindingTrack → ActivationTrack)
1703
+ var timeline = buildTimeline(duration, endBehavior);
1704
+ // 7. CompositionComponent(指向 composition,包含 items/timelineAsset/sceneBindings)
1705
+ var compositionComponent = {
1706
+ id: compositionComponentId,
1707
+ name: "" + sceneName + "_CompComp",
1708
+ dataType: DataType.CompositionComponent,
1709
+ item: {
1710
+ id: compositionId
1711
+ },
1712
+ items: [
1713
+ {
1714
+ id: itemId
1715
+ }
1716
+ ],
1717
+ timelineAsset: {
1718
+ id: timeline.timelineAssetId
1719
+ },
1720
+ sceneBindings: [
1721
+ {
1722
+ key: {
1723
+ id: timeline.objectBindingTrackId
1724
+ },
1725
+ value: {
1726
+ id: itemId
1727
+ }
1728
+ }
1729
+ ]
1730
+ };
1731
+ // 8. Composition
1732
+ var composition = {
1733
+ id: compositionId,
1734
+ name: sceneName,
1735
+ duration: duration,
1736
+ startTime: 0,
1737
+ endBehavior: endBehavior,
1738
+ previewSize: previewSize,
1739
+ camera: {
1740
+ fov: 60,
1741
+ far: 40,
1742
+ near: 0.1,
1743
+ clipMode: CameraClipMode.portrait,
1744
+ position: [
1745
+ 0,
1746
+ 0,
1747
+ 8
1748
+ ],
1749
+ rotation: [
1750
+ 0,
1751
+ 0,
1752
+ 0
1753
+ ]
1754
+ },
1755
+ components: [
1756
+ {
1757
+ id: compositionComponentId
1758
+ }
1759
+ ],
1760
+ children: [
1761
+ {
1762
+ id: itemId
1763
+ }
1764
+ ]
1765
+ };
1766
+ // 9. 组装 JSONScene
1767
+ return {
1768
+ version: JSONSceneVersion.LATEST,
1769
+ playerVersion: {
1770
+ web: '2.9.0',
1771
+ native: '0.0.1.202311221223'
1772
+ },
1773
+ type: 'ge',
1774
+ compositionId: compositionId,
1775
+ compositions: [
1776
+ composition
1777
+ ],
1778
+ images: textureImages,
1779
+ plugins: [],
1780
+ items: [
1781
+ item
1782
+ ],
1783
+ components: [
1784
+ effectComponent,
1785
+ compositionComponent
1786
+ ],
1787
+ materials: [
1788
+ material
1789
+ ],
1790
+ shaders: [
1791
+ shader
1792
+ ],
1793
+ geometries: [
1794
+ geometry
1795
+ ],
1796
+ animations: [],
1797
+ miscs: timeline.miscs,
1798
+ textures: sceneTextures
1799
+ };
1800
+ }
1801
+
1802
+ /**
1803
+ * 将 fragment shader 源码转换为可在 GE Runtime 播放的 JSONScene。
1804
+ *
1805
+ * 内部委托 {@link parseShader} 完成输入理解(Shadertoy 桥接、uniform 提取、uTime 桥接、
1806
+ * 基础校验),自身只负责应用 ConvertOptions 与生成 JSONScene。
1807
+ *
1808
+ * @param fragmentShader - GLSL fragment shader 源码
1809
+ * @param options - 转换选项(场景名称、时长、uniform 覆盖、Shadertoy 通道映射等)
1810
+ * @returns 转换结果,包含 scene、warnings 和解析出的 uniforms
1811
+ *
1812
+ * @example
1813
+ * ```ts
1814
+ * // 纯数学生成效果
1815
+ * const result = convert(`
1816
+ * precision highp float;
1817
+ * varying vec2 vUV;
1818
+ * varying float vTime;
1819
+ * void main() {
1820
+ * vec3 col = 0.5 + 0.5 * cos(vTime + vUV.xyx + vec3(0,2,4));
1821
+ * gl_FragColor = vec4(col, 1.0);
1822
+ * }
1823
+ * `);
1824
+ *
1825
+ * // 带纹理输入的效果
1826
+ * const result = convert(`
1827
+ * precision highp float;
1828
+ * varying vec2 vUV;
1829
+ * uniform sampler2D uMainTex;
1830
+ * void main() {
1831
+ * gl_FragColor = texture2D(uMainTex, vUV);
1832
+ * }
1833
+ * `, {
1834
+ * uniformOverrides: {
1835
+ * uMainTex: { url: 'https://example.com/image.png' },
1836
+ * },
1837
+ * });
1838
+ *
1839
+ * // Shadertoy 带纹理通道
1840
+ * const result = convert(shadertoyCode, {
1841
+ * shadertoyChannels: {
1842
+ * iChannel0: { url: 'https://example.com/noise.png' },
1843
+ * },
1844
+ * });
1845
+ * ```
1846
+ */ function convert(fragmentShader, options) {
1847
+ if (options === void 0) options = {};
1848
+ // ── 解析阶段:输入理解(与 options 无关)──
1849
+ var parsed = parseShader(fragmentShader);
1850
+ var warnings = [].concat(parsed.warnings);
1851
+ // ── 应用 options ──
1852
+ var mergedOverrides = mergeUniformOverrides(options);
1853
+ // 检查 sampler2D uniform:未提供纹理覆盖的给出提示
1854
+ appendMissingSamplerWarnings(parsed.uniforms, mergedOverrides, warnings);
1855
+ // 原生 shader 的 uResolution 自动注入
1856
+ // 和 Shadertoy 的 iResolution 处理方式一致:用当前 previewSize 自动覆盖
1857
+ // 避免用户修改尺寸后,硬编码在 overrides 中的旧值导致宽高比矫正错误(拉伸)
1858
+ if (shouldInjectNativeResolution(parsed.uniforms, options.previewSize)) {
1859
+ mergedOverrides['uResolution'] = toResolutionVector(options.previewSize);
1860
+ }
1861
+ // ── 生成阶段:构建 JSONScene ──
1862
+ var scene = generateScene(parsed.fragment, parsed.uniforms, _extends({}, options, {
1863
+ uniformOverrides: mergedOverrides
1864
+ }), parsed.isShadertoy);
1865
+ return {
1866
+ scene: scene,
1867
+ warnings: warnings,
1868
+ uniforms: parsed.uniforms
1869
+ };
1870
+ }
1871
+ function appendMissingSamplerWarnings(uniforms, overrides, warnings) {
1872
+ for(var _iterator = _create_for_of_iterator_helper_loose(uniforms), _step; !(_step = _iterator()).done;){
1873
+ var uniform = _step.value;
1874
+ if (uniform.type !== 'sampler2D') {
1875
+ continue;
1876
+ }
1877
+ var override = overrides[uniform.name];
1878
+ if (!isTextureInput(override)) {
1879
+ warnings.push('Uniform "' + uniform.name + '" is sampler2D. No texture override provided — a default 1\xd71 white texture will be used.');
1880
+ }
1881
+ }
1882
+ }
1883
+
1884
+ exports.DEFAULT_VERTEX_SHADER = DEFAULT_VERTEX_SHADER;
1885
+ exports.DEFAULT_WHITE_TEXTURE_URL = DEFAULT_WHITE_TEXTURE_URL;
1886
+ exports.FALLBACK_FRAGMENT_SHADER = FALLBACK_FRAGMENT_SHADER;
1887
+ exports.GL_TEXTURE_2D = GL_TEXTURE_2D;
1888
+ exports.GL_TEXTURE_FILTER_LINEAR = GL_TEXTURE_FILTER_LINEAR;
1889
+ exports.GL_TEXTURE_FILTER_NEAREST = GL_TEXTURE_FILTER_NEAREST;
1890
+ exports.GL_TEXTURE_WRAP_CLAMP_TO_EDGE = GL_TEXTURE_WRAP_CLAMP_TO_EDGE;
1891
+ exports.GL_TEXTURE_WRAP_REPEAT = GL_TEXTURE_WRAP_REPEAT;
1892
+ exports.INDEX_OFFSET = INDEX_OFFSET;
1893
+ exports.POSITION_BYTES = POSITION_BYTES;
1894
+ exports.QUAD_INDICES = QUAD_INDICES;
1895
+ exports.QUAD_POSITIONS = QUAD_POSITIONS;
1896
+ exports.QUAD_UVS = QUAD_UVS;
1897
+ exports.SHADERTOY_VERTEX_SHADER = SHADERTOY_VERTEX_SHADER;
1898
+ exports.UV_OFFSET = UV_OFFSET;
1899
+ exports.buildQuadGeometry = buildQuadGeometry;
1900
+ exports.buildTimeline = buildTimeline;
1901
+ exports.buildUniformDefaults = buildUniformDefaults;
1902
+ exports.convert = convert;
1903
+ exports.encodeQuadBuffer = encodeQuadBuffer;
1904
+ exports.generateId = generateId;
1905
+ exports.generateScene = generateScene;
1906
+ exports.isColorInput = isColorInput;
1907
+ exports.isTextureInput = isTextureInput;
1908
+ exports.isVectorInput = isVectorInput;
1909
+ exports.mergeUniformOverrides = mergeUniformOverrides;
1910
+ exports.parseShader = parseShader;
1911
+ exports.parseUniforms = parseUniforms;
1912
+ exports.shouldInjectNativeResolution = shouldInjectNativeResolution;
1913
+ exports.spec = index;
1914
+ exports.toResolutionVector = toResolutionVector;
1915
+ //# sourceMappingURL=index.js.map