@galacean/effects-core 2.2.6 → 2.3.0-alpha.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 (26) hide show
  1. package/dist/components/base-render-component.d.ts +10 -4
  2. package/dist/components/shape-component.d.ts +5 -2
  3. package/dist/composition.d.ts +62 -2
  4. package/dist/config.d.ts +11 -0
  5. package/dist/downloader.d.ts +15 -0
  6. package/dist/index.js +1605 -1020
  7. package/dist/index.js.map +1 -1
  8. package/dist/index.mjs +1605 -1021
  9. package/dist/index.mjs.map +1 -1
  10. package/dist/math/value-getters/index.d.ts +1 -1
  11. package/dist/math/value-getters/{vector4-curve.d.ts → vector-curves.d.ts} +8 -0
  12. package/dist/plugins/shape/build-line.d.ts +32 -0
  13. package/dist/plugins/shape/graphics-path.d.ts +0 -4
  14. package/dist/plugins/shape/polygon.d.ts +0 -4
  15. package/dist/plugins/shape/shape-path.d.ts +0 -4
  16. package/dist/plugins/timeline/playable-assets/index.d.ts +1 -1
  17. package/dist/plugins/timeline/playable-assets/{vector4-property-playable-asset.d.ts → vector-property-playable-assets.d.ts} +5 -1
  18. package/dist/plugins/timeline/playables/color-property-mixer-playable.d.ts +5 -5
  19. package/dist/plugins/timeline/playables/float-property-mixer-playable.d.ts +4 -5
  20. package/dist/plugins/timeline/playables/index.d.ts +1 -1
  21. package/dist/plugins/timeline/playables/property-mixer-playable.d.ts +9 -0
  22. package/dist/plugins/timeline/playables/vector-property-mixer-playable.d.ts +11 -0
  23. package/dist/plugins/timeline/tracks/index.d.ts +1 -1
  24. package/dist/plugins/timeline/tracks/{vector4-property-track.d.ts → vector-property-track.d.ts} +3 -0
  25. package/package.json +2 -2
  26. package/dist/plugins/timeline/playables/vector4-property-mixer-playable.d.ts +0 -6
package/dist/index.mjs CHANGED
@@ -3,7 +3,7 @@
3
3
  * Description: Galacean Effects runtime core for the web
4
4
  * Author: Ant Group CO., Ltd.
5
5
  * Contributors: 燃然,飂兮,十弦,云垣,茂安,意绮
6
- * Version: v2.2.6
6
+ * Version: v2.3.0-alpha.0
7
7
  */
8
8
 
9
9
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
@@ -1018,6 +1018,26 @@ function _inherits(subClass, superClass) {
1018
1018
  if (superClass) _set_prototype_of(subClass, superClass);
1019
1019
  }
1020
1020
 
1021
+ /**
1022
+ * JSON 版本
1023
+ */ var JSONSceneVersion;
1024
+ (function(JSONSceneVersion) {
1025
+ JSONSceneVersion["1_0"] = "1.0";
1026
+ JSONSceneVersion["1_1"] = "1.1";
1027
+ JSONSceneVersion["1_2"] = "1.2";
1028
+ JSONSceneVersion["1_3"] = "1.3";
1029
+ JSONSceneVersion["1_5"] = "1.5";
1030
+ JSONSceneVersion["1_8"] = "1.8";
1031
+ JSONSceneVersion["2_0"] = "2.0";
1032
+ JSONSceneVersion["2_1"] = "2.1";
1033
+ JSONSceneVersion["2_2"] = "2.2";
1034
+ JSONSceneVersion["2_3"] = "2.3";
1035
+ JSONSceneVersion["2_4"] = "2.4";
1036
+ JSONSceneVersion["3_0"] = "3.0";
1037
+ JSONSceneVersion["3_1"] = "3.1";
1038
+ JSONSceneVersion["LATEST"] = "3.1";
1039
+ })(JSONSceneVersion || (JSONSceneVersion = {}));
1040
+
1021
1041
  /*********************************************/ /* 元素属性参数类型 */ /*********************************************/ /**
1022
1042
  * 渲染等级
1023
1043
  */ var RenderLevel;
@@ -1323,8 +1343,12 @@ var RenderFace;
1323
1343
  */ var END_BEHAVIOR_DESTROY_CHILDREN = 6;
1324
1344
  var CAMERA_CLIP_MODE_VERTICAL = 1;
1325
1345
  var CAMERA_CLIP_MODE_NORMAL = 0;
1326
- var MESSAGE_ITEM_PHRASE_BEGIN = 2;
1327
- var MESSAGE_ITEM_PHRASE_END = 1;
1346
+ /**
1347
+ * 消息开始
1348
+ */ var MESSAGE_ITEM_PHRASE_BEGIN = 2;
1349
+ /**
1350
+ * 消息结束
1351
+ */ var MESSAGE_ITEM_PHRASE_END = 1;
1328
1352
 
1329
1353
  var CameraClipMode;
1330
1354
  (function(CameraClipMode) {
@@ -1398,6 +1422,9 @@ var CameraClipMode;
1398
1422
  /**
1399
1423
  * Vector4 曲线
1400
1424
  */ ValueType[ValueType["VECTOR4_CURVE"] = 25] = "VECTOR4_CURVE";
1425
+ /**
1426
+ * Vector2 曲线
1427
+ */ ValueType[ValueType["VECTOR2_CURVE"] = 26] = "VECTOR2_CURVE";
1401
1428
  })(ValueType || (ValueType = {}));
1402
1429
  /**
1403
1430
  * 关键帧类型
@@ -1666,19 +1693,13 @@ var ShapePointType;
1666
1693
  var DataType;
1667
1694
  (function(DataType) {
1668
1695
  DataType["VFXItemData"] = "VFXItemData";
1669
- DataType["EffectComponent"] = "EffectComponent";
1696
+ // Assets
1670
1697
  DataType["Material"] = "Material";
1671
1698
  DataType["Shader"] = "Shader";
1672
- DataType["SpriteComponent"] = "SpriteComponent";
1673
- DataType["ParticleSystem"] = "ParticleSystem";
1674
- DataType["InteractComponent"] = "InteractComponent";
1675
- DataType["CameraController"] = "CameraController";
1676
- DataType["PostProcessVolume"] = "PostProcessVolume";
1677
1699
  DataType["Geometry"] = "Geometry";
1678
1700
  DataType["Texture"] = "Texture";
1679
1701
  DataType["Image"] = "Image";
1680
1702
  DataType["AnimationClip"] = "AnimationClip";
1681
- DataType["TextComponent"] = "TextComponent";
1682
1703
  DataType["BinaryAsset"] = "BinaryAsset";
1683
1704
  // Timeline
1684
1705
  DataType["TrackAsset"] = "TrackAsset";
@@ -1690,6 +1711,7 @@ var DataType;
1690
1711
  DataType["SubCompositionTrack"] = "SubCompositionTrack";
1691
1712
  DataType["FloatPropertyTrack"] = "FloatPropertyTrack";
1692
1713
  DataType["ColorPropertyTrack"] = "ColorPropertyTrack";
1714
+ DataType["Vector2PropertyTrack"] = "Vector2PropertyTrack";
1693
1715
  DataType["Vector4PropertyTrack"] = "Vector4PropertyTrack";
1694
1716
  DataType["TransformPlayableAsset"] = "TransformPlayableAsset";
1695
1717
  DataType["SpriteColorPlayableAsset"] = "SpriteColorPlayableAsset";
@@ -1697,6 +1719,9 @@ var DataType;
1697
1719
  DataType["SubCompositionPlayableAsset"] = "SubCompositionPlayableAsset";
1698
1720
  DataType["FloatPropertyPlayableAsset"] = "FloatPropertyPlayableAsset";
1699
1721
  DataType["ColorPropertyPlayableAsset"] = "ColorPropertyPlayableAsset";
1722
+ DataType["Vector2PropertyPlayableAsset"] = "Vector2PropertyPlayableAsset";
1723
+ DataType["Vector4PropertyPlayableAsset"] = "Vector4PropertyPlayableAsset";
1724
+ // Components
1700
1725
  DataType["MeshComponent"] = "MeshComponent";
1701
1726
  DataType["SkyboxComponent"] = "SkyboxComponent";
1702
1727
  DataType["LightComponent"] = "LightComponent";
@@ -1710,6 +1735,13 @@ var DataType;
1710
1735
  DataType["RichTextComponent"] = "RichTextComponent";
1711
1736
  DataType["OrientationComponent"] = "OrientationComponent";
1712
1737
  DataType["ShapeComponent"] = "ShapeComponent";
1738
+ DataType["SpriteComponent"] = "SpriteComponent";
1739
+ DataType["ParticleSystem"] = "ParticleSystem";
1740
+ DataType["InteractComponent"] = "InteractComponent";
1741
+ DataType["CameraController"] = "CameraController";
1742
+ DataType["PostProcessVolume"] = "PostProcessVolume";
1743
+ DataType["EffectComponent"] = "EffectComponent";
1744
+ DataType["TextComponent"] = "TextComponent";
1713
1745
  // Non-EffectObject
1714
1746
  DataType["TimelineClip"] = "TimelineClip";
1715
1747
  })(DataType || (DataType = {}));
@@ -1798,8 +1830,11 @@ var VertexBufferSemantic;
1798
1830
  VertexBufferSemantic["TangentBS3"] = "TANGENT_BS3";
1799
1831
  })(VertexBufferSemantic || (VertexBufferSemantic = {}));
1800
1832
 
1833
+ var LATEST_VERSION = JSONSceneVersion.LATEST;
1834
+
1801
1835
  var index$1 = /*#__PURE__*/Object.freeze({
1802
1836
  __proto__: null,
1837
+ LATEST_VERSION: LATEST_VERSION,
1803
1838
  get RenderLevel () { return RenderLevel; },
1804
1839
  get BlendingMode () { return BlendingMode; },
1805
1840
  get SideMode () { return SideMode; },
@@ -1827,6 +1862,7 @@ var index$1 = /*#__PURE__*/Object.freeze({
1827
1862
  MESSAGE_ITEM_PHRASE_END: MESSAGE_ITEM_PHRASE_END,
1828
1863
  get ValueType () { return ValueType; },
1829
1864
  get BezierKeyframeType () { return BezierKeyframeType; },
1865
+ get JSONSceneVersion () { return JSONSceneVersion; },
1830
1866
  get EndBehavior () { return EndBehavior; },
1831
1867
  get ParentItemEndBehavior () { return ParentItemEndBehavior; },
1832
1868
  get ParticleInteractionBehavior () { return ParticleInteractionBehavior; },
@@ -5274,988 +5310,719 @@ Matrix4.tempVec1 = new Vector3();
5274
5310
  Matrix4.tempVec2 = new Vector3();
5275
5311
  Matrix4.tempMat0 = new Matrix4();
5276
5312
 
5277
- function _array_like_to_array(arr, len) {
5278
- if (len == null || len > arr.length) len = arr.length;
5279
- for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
5280
- return arr2;
5281
- }
5282
-
5283
- function _unsupported_iterable_to_array(o, minLen) {
5284
- if (!o) return;
5285
- if (typeof o === "string") return _array_like_to_array(o, minLen);
5286
- var n = Object.prototype.toString.call(o).slice(8, -1);
5287
- if (n === "Object" && o.constructor) n = o.constructor.name;
5288
- if (n === "Map" || n === "Set") return Array.from(n);
5289
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
5313
+ function _extends() {
5314
+ _extends = Object.assign || function assign(target) {
5315
+ for(var i = 1; i < arguments.length; i++){
5316
+ var source = arguments[i];
5317
+ for(var key in source)if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
5318
+ }
5319
+ return target;
5320
+ };
5321
+ return _extends.apply(this, arguments);
5290
5322
  }
5291
5323
 
5292
- function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
5293
- var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
5294
- if (it) return (it = it.call(o)).next.bind(it);
5295
- // Fallback for engines without symbol support
5296
- if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike && o && typeof o.length === "number") {
5297
- if (it) o = it;
5298
- var i = 0;
5299
- return function() {
5300
- if (i >= o.length) return {
5301
- done: true
5302
- };
5303
- return {
5304
- done: false,
5305
- value: o[i++]
5306
- };
5307
- };
5308
- }
5309
- throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
5310
- }
5324
+ var TextureLoadAction;
5325
+ (function(TextureLoadAction) {
5326
+ TextureLoadAction[TextureLoadAction["whatever"] = 0] = "whatever";
5327
+ //preserve previous attachment
5328
+ //load = 1,
5329
+ //clear attachment
5330
+ TextureLoadAction[TextureLoadAction["clear"] = 2] = "clear";
5331
+ })(TextureLoadAction || (TextureLoadAction = {}));
5332
+ var TextureSourceType;
5333
+ (function(TextureSourceType) {
5334
+ TextureSourceType[TextureSourceType["none"] = 0] = "none";
5335
+ TextureSourceType[TextureSourceType["data"] = 1] = "data";
5336
+ TextureSourceType[TextureSourceType["image"] = 2] = "image";
5337
+ TextureSourceType[TextureSourceType["compressed"] = 3] = "compressed";
5338
+ TextureSourceType[TextureSourceType["video"] = 4] = "video";
5339
+ TextureSourceType[TextureSourceType["canvas"] = 5] = "canvas";
5340
+ TextureSourceType[TextureSourceType["framebuffer"] = 6] = "framebuffer";
5341
+ TextureSourceType[TextureSourceType["mipmaps"] = 7] = "mipmaps";
5342
+ })(TextureSourceType || (TextureSourceType = {}));
5311
5343
 
5312
- var ShaderCompileResultStatus;
5313
- (function(ShaderCompileResultStatus) {
5314
- ShaderCompileResultStatus[ShaderCompileResultStatus["noShader"] = 0] = "noShader";
5315
- ShaderCompileResultStatus[ShaderCompileResultStatus["success"] = 1] = "success";
5316
- ShaderCompileResultStatus[ShaderCompileResultStatus["fail"] = 2] = "fail";
5317
- ShaderCompileResultStatus[ShaderCompileResultStatus["compiling"] = 3] = "compiling";
5318
- })(ShaderCompileResultStatus || (ShaderCompileResultStatus = {}));
5319
- var GLSLVersion;
5320
- (function(GLSLVersion) {
5321
- GLSLVersion["GLSL1"] = "100";
5322
- GLSLVersion["GLSL3"] = "300 es";
5323
- })(GLSLVersion || (GLSLVersion = {}));
5324
- var ShaderVariant = /*#__PURE__*/ function(EffectsObject) {
5325
- _inherits(ShaderVariant, EffectsObject);
5326
- function ShaderVariant(engine, source) {
5327
- var _this;
5328
- _this = EffectsObject.call(this, engine) || this;
5329
- _this.source = source;
5330
- return _this;
5331
- }
5332
- return ShaderVariant;
5333
- }(EffectsObject);
5334
- var Shader = /*#__PURE__*/ function(EffectsObject) {
5335
- _inherits(Shader, EffectsObject);
5336
- function Shader() {
5337
- return EffectsObject.apply(this, arguments);
5344
+ /**
5345
+ * 负责下载各种资源,并提供了一些异步加载和缓存管理的功能
5346
+ */ var Downloader = /*#__PURE__*/ function() {
5347
+ function Downloader() {
5348
+ /**
5349
+ * 存储多个回调函数的对象
5350
+ */ this.callbacks = {};
5338
5351
  }
5339
- var _proto = Shader.prototype;
5340
- _proto.createVariant = function createVariant(macros) {
5341
- var shaderMacros = [];
5342
- if (macros) {
5343
- for(var _iterator = _create_for_of_iterator_helper_loose(Object.keys(macros)), _step; !(_step = _iterator()).done;){
5344
- var key = _step.value;
5345
- shaderMacros.push([
5346
- key,
5347
- macros[key]
5348
- ]);
5349
- }
5350
- }
5351
- var shaderVariant = this.engine.getShaderLibrary().createShader(this.shaderData, shaderMacros);
5352
- shaderVariant.shader = this;
5353
- return shaderVariant;
5352
+ var _proto = Downloader.prototype;
5353
+ /**
5354
+ * 下载一个 JSON 文件
5355
+ * @param url - 要下载的 JSON 文件的 URL
5356
+ * @param onSuccess - 下载成功后的回调函数
5357
+ * @param onError - 下载失败后的回调函数
5358
+ */ _proto.downloadJSON = function downloadJSON(url, onSuccess, onError) {
5359
+ this.download(url, "json", onSuccess, onError);
5354
5360
  };
5355
- _proto.fromData = function fromData(data) {
5356
- EffectsObject.prototype.fromData.call(this, data);
5357
- this.shaderData = data;
5361
+ /**
5362
+ * 下载一个二进制文件
5363
+ * @param url - 要下载的二进制文件的 URL
5364
+ * @param onSuccess - 下载成功后的回调函数
5365
+ * @param onError - 下载失败后的回调函数
5366
+ */ _proto.downloadBinary = function downloadBinary(url, onSuccess, onError) {
5367
+ this.download(url, "arraybuffer", onSuccess, onError);
5358
5368
  };
5359
- return Shader;
5360
- }(EffectsObject);
5361
- Shader = __decorate([
5362
- effectsClass(DataType.Shader)
5363
- ], Shader);
5364
-
5365
- var EFFECTS_COPY_MESH_NAME = "effects-internal-copy";
5366
- var COPY_MESH_SHADER_ID = "effects-internal-copy-mesh";
5367
- var COPY_VERTEX_SHADER = "\nprecision highp float;\nattribute vec2 aPos;\nvarying vec2 vTex;\nvoid main(){\n gl_Position = vec4(aPos,0.,1.0);\n vTex = (aPos + vec2(1.0))/2.;\n}";
5368
- var COPY_FRAGMENT_SHADER = "precision mediump float;\nvarying vec2 vTex;\n\n#ifdef DEPTH_TEXTURE\nuniform sampler2D uDepth;\n#extension GL_EXT_frag_depth : enable\n#endif\nvoid main(){\n #ifdef DEPTH_TEXTURE\n gl_FragDepthEXT = texture2D(uDepth,vTex).r;\n #endif\n}\n";
5369
- function createCopyShader(level, writeDepth) {
5370
- var webgl2 = level === 2;
5371
- return {
5372
- name: EFFECTS_COPY_MESH_NAME,
5373
- vertex: COPY_VERTEX_SHADER,
5374
- fragment: COPY_FRAGMENT_SHADER,
5375
- glslVersion: webgl2 ? GLSLVersion.GLSL3 : GLSLVersion.GLSL1,
5376
- macros: [
5377
- [
5378
- "DEPTH_TEXTURE",
5379
- !!writeDepth
5380
- ]
5381
- ],
5382
- // @ts-expect-error
5383
- cacheId: COPY_MESH_SHADER_ID + +writeDepth
5369
+ /**
5370
+ * 下载一个 Blob 文件
5371
+ * @param url - 要下载的 Blob 文件的 URL
5372
+ * @param onSuccess - 下载成功后的回调函数
5373
+ * @param onError - 下载失败后的回调函数
5374
+ */ _proto.downloadBlob = function downloadBlob(url, onSuccess, onError) {
5375
+ this.download(url, "blob", onSuccess, onError);
5384
5376
  };
5385
- }
5386
-
5387
- /**
5388
- * Helper class to create a WebGL Context
5389
- *
5390
- * @param canvas
5391
- * @param glType
5392
- * @param options
5393
- * @returns
5394
- */ function createGLContext(canvas, glType, options) {
5395
- if (glType === void 0) glType = "webgl";
5396
- var context;
5397
- if (glType === "webgl2") {
5398
- context = canvas.getContext("webgl2", options);
5399
- if (!context) {
5400
- console.debug("WebGL2 context retrieval failed, falling back to WebGL context.");
5401
- }
5402
- }
5403
- if (!context || glType === "webgl") {
5404
- context = canvas.getContext("webgl", options);
5405
- }
5406
- if (!context) {
5407
- throw new Error("This browser does not support WebGL or the WebGL version is incorrect. Please check your WebGL version.");
5408
- }
5409
- return context;
5410
- }
5411
-
5412
- function gpuTimer(gl) {
5413
- var ext = gl.getExtension("EXT_disjoint_timer_query_webgl2");
5414
- if (ext) {
5415
- var query = gl.createQuery();
5416
- var getTime = /*#__PURE__*/ _async_to_generator(function() {
5417
- return __generator(this, function(_state) {
5418
- return [
5419
- 2,
5420
- new Promise(function(resolve, reject) {
5421
- if (query) {
5422
- var available = gl.getQueryParameter(query, gl.QUERY_RESULT_AVAILABLE);
5423
- var disjoint = gl.getParameter(ext.GPU_DISJOINT_EXT);
5424
- if (available && !disjoint) {
5425
- // See how much time the rendering of the object took in nanoseconds.
5426
- var timeElapsed = gl.getQueryParameter(query, gl.QUERY_RESULT); // Do something useful with the time. Note that care should be
5427
- // taken to use all significant bits of the result, not just the
5428
- // least significant 32 bits.
5429
- resolve(timeElapsed / 1000 / 1000);
5430
- }
5431
- if (available || disjoint) {
5432
- // Clean up the query object.
5433
- gl.deleteQuery(query); // Don't re-enter this polling loop.
5434
- query = null;
5435
- }
5436
- available !== null && query && window.setTimeout(function() {
5437
- getTime().then(resolve).catch;
5438
- }, 1);
5439
- }
5440
- })
5441
- ];
5442
- });
5443
- });
5444
- if (!query) {
5377
+ _proto.download = function download(url, responseType, onSuccess, onError) {
5378
+ var _this = this;
5379
+ if (responseType === void 0) responseType = "json";
5380
+ if (this.start(url, onSuccess, onError)) {
5445
5381
  return;
5446
5382
  }
5447
- return {
5448
- begin: function() {
5449
- query && gl.beginQuery(ext.TIME_ELAPSED_EXT, query);
5450
- },
5451
- end: function() {
5452
- gl.endQuery(ext.TIME_ELAPSED_EXT);
5453
- },
5454
- getTime: getTime
5383
+ var xhr = new XMLHttpRequest();
5384
+ var handleError = function() {
5385
+ _this.finish(url, xhr.status, xhr.response);
5455
5386
  };
5456
- }
5457
- }
5458
-
5459
- var initErrors = [];
5460
- // @ts-expect-error
5461
- var glContext = {};
5462
- if (!initErrors.length) {
5463
- initGLContext();
5464
- }
5465
- function initGLContext() {
5466
- // 重要:iOS 9/10 低版本需要拷贝 gl context 的 prototype,要不然会有属性值的缺失
5467
- if (typeof WebGL2RenderingContext === "function") {
5468
- copy(WebGL2RenderingContext);
5469
- } else if (typeof WebGLRenderingContext !== "undefined") {
5470
- copy(WebGLRenderingContext);
5471
- copy(WebGLRenderingContext.prototype);
5472
- } else {
5473
- initErrors.push(// iOS 16 lockdown mode
5474
- "iOS16 lockdown mode, WebGL Constants not in global");
5475
- }
5476
- if (!initErrors.length && !("HALF_FLOAT" in glContext)) {
5477
- // @ts-expect-error set default value
5478
- glContext["HALF_FLOAT"] = 5131;
5479
- }
5387
+ var handleLoad = function() {
5388
+ if (xhr.status == 200) {
5389
+ _this.finish(url, 200, xhr.response);
5390
+ } else {
5391
+ handleError();
5392
+ }
5393
+ };
5394
+ xhr.responseType = responseType;
5395
+ xhr.addEventListener("load", handleLoad);
5396
+ xhr.addEventListener("error", handleError);
5397
+ xhr.open("GET", url, true);
5398
+ xhr.send();
5399
+ };
5400
+ _proto.start = function start(url, onSuccess, onError) {
5401
+ var callbacks = this.callbacks[url];
5402
+ try {
5403
+ if (callbacks) {
5404
+ return true;
5405
+ }
5406
+ this.callbacks[url] = callbacks = [];
5407
+ } finally{
5408
+ callbacks.push(onSuccess, onError);
5409
+ }
5410
+ };
5411
+ _proto.finish = function finish(url, status, data) {
5412
+ var callbacks = this.callbacks[url];
5413
+ delete this.callbacks[url];
5414
+ var args = status == 200 ? [
5415
+ data
5416
+ ] : [
5417
+ status,
5418
+ data
5419
+ ];
5420
+ for(var i = args.length - 1, n = callbacks.length; i < n; i += 2){
5421
+ callbacks[i].apply(null, args);
5422
+ }
5423
+ };
5424
+ return Downloader;
5425
+ }();
5426
+ var webPFailed = false;
5427
+ var avifFailed = false;
5428
+ /**
5429
+ * 异步加载一个 WebP 图片文件,如果不支持 WebP,则加载 PNG 图片文件
5430
+ * @param png - PNG 图片文件的 URL
5431
+ * @param webp - WebP 图片文件的 URL
5432
+ */ function loadWebPOptional(png, webp) {
5433
+ return _loadWebPOptional.apply(this, arguments);
5480
5434
  }
5481
- function isWebGL2(gl) {
5482
- return typeof WebGL2RenderingContext !== "undefined" && gl.constructor.name === "WebGL2RenderingContext";
5435
+ function _loadWebPOptional() {
5436
+ _loadWebPOptional = _async_to_generator(function(png, webp) {
5437
+ var image, image1, image2;
5438
+ return __generator(this, function(_state) {
5439
+ switch(_state.label){
5440
+ case 0:
5441
+ if (!(webPFailed || !webp)) return [
5442
+ 3,
5443
+ 2
5444
+ ];
5445
+ return [
5446
+ 4,
5447
+ loadImage(png)
5448
+ ];
5449
+ case 1:
5450
+ image = _state.sent();
5451
+ return [
5452
+ 2,
5453
+ {
5454
+ image: image,
5455
+ url: png
5456
+ }
5457
+ ];
5458
+ case 2:
5459
+ _state.trys.push([
5460
+ 2,
5461
+ 4,
5462
+ ,
5463
+ 6
5464
+ ]);
5465
+ return [
5466
+ 4,
5467
+ loadImage(webp)
5468
+ ];
5469
+ case 3:
5470
+ image1 = _state.sent();
5471
+ return [
5472
+ 2,
5473
+ {
5474
+ image: image1,
5475
+ url: webp
5476
+ }
5477
+ ];
5478
+ case 4:
5479
+ _state.sent();
5480
+ webPFailed = true;
5481
+ return [
5482
+ 4,
5483
+ loadImage(png)
5484
+ ];
5485
+ case 5:
5486
+ image2 = _state.sent();
5487
+ return [
5488
+ 2,
5489
+ {
5490
+ image: image2,
5491
+ url: png
5492
+ }
5493
+ ];
5494
+ case 6:
5495
+ return [
5496
+ 2
5497
+ ];
5498
+ }
5499
+ });
5500
+ });
5501
+ return _loadWebPOptional.apply(this, arguments);
5483
5502
  }
5484
- function copy(target) {
5485
- for(var name in target){
5486
- if (/^[A-Z_]/.test(name)) {
5487
- // @ts-expect-error safe to assign
5488
- glContext[name] = target[name];
5489
- }
5490
- }
5503
+ /**
5504
+ * 异步加载一个 AVIF 图片文件,如果不支持 AVIF,则加载 PNG 图片文件
5505
+ * @param png - PNG 图片文件的 URL
5506
+ * @param avif - AVIF 图片文件的 URL
5507
+ */ function loadAVIFOptional(png, avif) {
5508
+ return _loadAVIFOptional.apply(this, arguments);
5491
5509
  }
5492
- function vertexFormatType2GLType(formatType) {
5493
- switch(formatType){
5494
- case VertexFormatType.Float32:
5495
- return WebGLRenderingContext["FLOAT"];
5496
- case VertexFormatType.Int16:
5497
- return WebGLRenderingContext["SHORT"];
5498
- case VertexFormatType.Int8:
5499
- return WebGLRenderingContext["BYTE"];
5500
- case VertexFormatType.UInt16:
5501
- return WebGLRenderingContext["UNSIGNED_SHORT"];
5502
- case VertexFormatType.UInt8:
5503
- return WebGLRenderingContext["UNSIGNED_BYTE"];
5504
- default:
5505
- return WebGLRenderingContext["FLOAT"];
5506
- }
5510
+ function _loadAVIFOptional() {
5511
+ _loadAVIFOptional = _async_to_generator(function(png, avif) {
5512
+ var image, image1, image2;
5513
+ return __generator(this, function(_state) {
5514
+ switch(_state.label){
5515
+ case 0:
5516
+ if (!(avifFailed || !avif)) return [
5517
+ 3,
5518
+ 2
5519
+ ];
5520
+ return [
5521
+ 4,
5522
+ loadImage(png)
5523
+ ];
5524
+ case 1:
5525
+ image = _state.sent();
5526
+ return [
5527
+ 2,
5528
+ {
5529
+ image: image,
5530
+ url: png
5531
+ }
5532
+ ];
5533
+ case 2:
5534
+ _state.trys.push([
5535
+ 2,
5536
+ 4,
5537
+ ,
5538
+ 6
5539
+ ]);
5540
+ return [
5541
+ 4,
5542
+ loadImage(avif)
5543
+ ];
5544
+ case 3:
5545
+ image1 = _state.sent();
5546
+ return [
5547
+ 2,
5548
+ {
5549
+ image: image1,
5550
+ url: avif
5551
+ }
5552
+ ];
5553
+ case 4:
5554
+ _state.sent();
5555
+ avifFailed = true;
5556
+ return [
5557
+ 4,
5558
+ loadImage(png)
5559
+ ];
5560
+ case 5:
5561
+ image2 = _state.sent();
5562
+ return [
5563
+ 2,
5564
+ {
5565
+ image: image2,
5566
+ url: png
5567
+ }
5568
+ ];
5569
+ case 6:
5570
+ return [
5571
+ 2
5572
+ ];
5573
+ }
5574
+ });
5575
+ });
5576
+ return _loadAVIFOptional.apply(this, arguments);
5507
5577
  }
5508
- function glType2VertexFormatType(webglType) {
5509
- switch(webglType){
5510
- case WebGLRenderingContext["FLOAT"]:
5511
- return VertexFormatType.Float32;
5512
- case WebGLRenderingContext["SHORT"]:
5513
- return VertexFormatType.Int16;
5514
- case WebGLRenderingContext["BYTE"]:
5515
- return VertexFormatType.Int8;
5516
- case WebGLRenderingContext["UNSIGNED_SHORT"]:
5517
- return VertexFormatType.UInt16;
5518
- case WebGLRenderingContext["UNSIGNED_BYTE"]:
5519
- return VertexFormatType.UInt8;
5520
- default:
5521
- return VertexFormatType.Float32;
5522
- }
5578
+ /**
5579
+ * 异步加载一个图片文件
5580
+ * @param source - 图片文件的 URL、Blob 或 HTMLImageElement 对象
5581
+ */ function loadImage(source) {
5582
+ return _loadImage.apply(this, arguments);
5523
5583
  }
5524
-
5525
- var ShaderType;
5526
- (function(ShaderType) {
5527
- ShaderType[ShaderType["vertex"] = 0] = "vertex";
5528
- ShaderType[ShaderType["fragment"] = 1] = "fragment";
5529
- })(ShaderType || (ShaderType = {}));
5530
-
5531
- function valIfUndefined(val, def) {
5532
- if (val === undefined || val === null) {
5533
- return def;
5534
- }
5535
- return val;
5584
+ function _loadImage() {
5585
+ _loadImage = _async_to_generator(function(source) {
5586
+ var url, revokeURL;
5587
+ return __generator(this, function(_state) {
5588
+ url = "";
5589
+ // 1. string | Blob | HTMLImageElement 处理逻辑
5590
+ if (_instanceof1(source, HTMLImageElement)) {
5591
+ if (source.complete) {
5592
+ return [
5593
+ 2,
5594
+ source
5595
+ ];
5596
+ }
5597
+ url = source.src;
5598
+ } else if (_instanceof1(source, Blob)) {
5599
+ url = URL.createObjectURL(source);
5600
+ revokeURL = true;
5601
+ } else if (typeof source === "string") {
5602
+ url = source;
5603
+ }
5604
+ // 2. 非法类型
5605
+ if (!url) {
5606
+ throw new Error("Invalid url type: " + JSON.stringify(source) + ".");
5607
+ }
5608
+ return [
5609
+ 2,
5610
+ new Promise(function(resolve, reject) {
5611
+ var img = new Image();
5612
+ if (!/^data:/.test(url)) {
5613
+ img.crossOrigin = "*";
5614
+ }
5615
+ img.onload = function() {
5616
+ img.onload = null;
5617
+ if (revokeURL) {
5618
+ URL.revokeObjectURL(url);
5619
+ }
5620
+ return resolve(img);
5621
+ };
5622
+ img.onerror = function(e) {
5623
+ img.onerror = null;
5624
+ if (revokeURL) {
5625
+ URL.revokeObjectURL(url);
5626
+ }
5627
+ return reject("Load image fail: " + url + ", reason: " + JSON.stringify(e));
5628
+ };
5629
+ img.src = url;
5630
+ })
5631
+ ];
5632
+ });
5633
+ });
5634
+ return _loadImage.apply(this, arguments);
5536
5635
  }
5537
- function getPreMultiAlpha(blending) {
5538
- switch(blending){
5539
- case BlendingMode.ALPHA:
5540
- return 1;
5541
- case BlendingMode.ADD:
5542
- return 1;
5543
- case BlendingMode.SUBTRACTION:
5544
- return 1;
5545
- case BlendingMode.STRONG_LIGHT:
5546
- return 1;
5547
- case BlendingMode.WEAK_LIGHT:
5548
- return 1;
5549
- case BlendingMode.SUPERPOSITION:
5550
- return 2;
5551
- case BlendingMode.BRIGHTNESS:
5552
- return 3;
5553
- case BlendingMode.MULTIPLY:
5554
- return 0;
5555
- default:
5556
- // 处理undefined
5557
- return 1;
5558
- }
5636
+ /**
5637
+ * 异步加载一个二进制文件
5638
+ * @param url - 二进制文件的 URL
5639
+ */ function loadBinary(url) {
5640
+ return _loadBinary.apply(this, arguments);
5559
5641
  }
5560
- function setBlendMode(material, blendMode) {
5561
- switch(blendMode){
5562
- case undefined:
5563
- material.blendFunction = [
5564
- glContext.ONE,
5565
- glContext.ONE_MINUS_SRC_ALPHA,
5566
- glContext.ONE,
5567
- glContext.ONE_MINUS_SRC_ALPHA
5568
- ];
5569
- break;
5570
- case BlendingMode.ALPHA:
5571
- material.blendFunction = [
5572
- glContext.ONE,
5573
- glContext.ONE_MINUS_SRC_ALPHA,
5574
- glContext.ONE,
5575
- glContext.ONE_MINUS_SRC_ALPHA
5576
- ];
5577
- break;
5578
- case BlendingMode.ADD:
5579
- material.blendFunction = [
5580
- glContext.ONE,
5581
- glContext.ONE,
5582
- glContext.ONE,
5583
- glContext.ONE
5584
- ];
5585
- break;
5586
- case BlendingMode.SUBTRACTION:
5587
- material.blendFunction = [
5588
- glContext.ONE,
5589
- glContext.ONE,
5590
- glContext.ZERO,
5591
- glContext.ONE
5592
- ];
5593
- material.blendEquation = [
5594
- glContext.FUNC_REVERSE_SUBTRACT,
5595
- glContext.FUNC_REVERSE_SUBTRACT
5596
- ];
5597
- break;
5598
- case BlendingMode.SUPERPOSITION:
5599
- material.blendFunction = [
5600
- glContext.ONE,
5601
- glContext.ONE,
5602
- glContext.ONE,
5603
- glContext.ONE
5604
- ];
5605
- break;
5606
- case BlendingMode.MULTIPLY:
5607
- material.blendFunction = [
5608
- glContext.DST_COLOR,
5609
- glContext.ONE_MINUS_SRC_ALPHA,
5610
- glContext.DST_COLOR,
5611
- glContext.ONE_MINUS_SRC_ALPHA
5612
- ];
5613
- break;
5614
- case BlendingMode.BRIGHTNESS:
5615
- material.blendFunction = [
5616
- glContext.ONE,
5617
- glContext.ONE_MINUS_SRC_ALPHA,
5618
- glContext.ONE,
5619
- glContext.ONE_MINUS_SRC_ALPHA
5620
- ];
5621
- break;
5622
- case BlendingMode.STRONG_LIGHT:
5623
- material.blendFunction = [
5624
- glContext.DST_COLOR,
5625
- glContext.DST_ALPHA,
5626
- glContext.ZERO,
5627
- glContext.ONE
5628
- ];
5629
- break;
5630
- case BlendingMode.WEAK_LIGHT:
5631
- material.blendFunction = [
5632
- glContext.DST_COLOR,
5633
- glContext.ZERO,
5634
- glContext.ZERO,
5635
- glContext.ONE
5642
+ function _loadBinary() {
5643
+ _loadBinary = _async_to_generator(function(url) {
5644
+ return __generator(this, function(_state) {
5645
+ return [
5646
+ 2,
5647
+ new Promise(function(resolve, reject) {
5648
+ new Downloader().downloadBinary(url, resolve, function(status, responseText) {
5649
+ reject("Couldn't load bins " + url + ": status " + status + ", " + responseText);
5650
+ });
5651
+ })
5636
5652
  ];
5637
- break;
5638
- default:
5639
- console.warn("BlendMode " + blendMode + " not in specification, please set blend params separately.");
5640
- }
5653
+ });
5654
+ });
5655
+ return _loadBinary.apply(this, arguments);
5641
5656
  }
5642
- function setSideMode(material, side) {
5643
- if (side === SideMode.DOUBLE) {
5644
- material.culling = false;
5645
- } else {
5646
- material.culling = true;
5647
- material.frontFace = glContext.CW;
5648
- material.cullFace = side === SideMode.BACK ? glContext.BACK : glContext.FRONT;
5649
- }
5657
+ /**
5658
+ * 异步加载一个 Blob 文件
5659
+ * @param url - Blob 文件的 URL
5660
+ */ function loadBlob(url) {
5661
+ return _loadBlob.apply(this, arguments);
5650
5662
  }
5651
- function setMaskMode(material, maskMode) {
5652
- switch(maskMode){
5653
- case undefined:
5654
- material.stencilTest = false;
5655
- break;
5656
- case MaskMode.MASK:
5657
- material.stencilTest = true;
5658
- material.stencilFunc = [
5659
- glContext.ALWAYS,
5660
- glContext.ALWAYS
5661
- ];
5662
- material.stencilOpZPass = [
5663
- glContext.REPLACE,
5664
- glContext.REPLACE
5665
- ];
5666
- break;
5667
- case MaskMode.OBSCURED:
5668
- material.stencilTest = true;
5669
- material.stencilFunc = [
5670
- glContext.EQUAL,
5671
- glContext.EQUAL
5672
- ];
5673
- break;
5674
- case MaskMode.REVERSE_OBSCURED:
5675
- material.stencilTest = true;
5676
- material.stencilFunc = [
5677
- glContext.NOTEQUAL,
5678
- glContext.NOTEQUAL
5663
+ function _loadBlob() {
5664
+ _loadBlob = _async_to_generator(function(url) {
5665
+ return __generator(this, function(_state) {
5666
+ return [
5667
+ 2,
5668
+ new Promise(function(resolve, reject) {
5669
+ new Downloader().downloadBlob(url, resolve, function(status, responseText) {
5670
+ reject("Couldn't load blob " + url + ": status " + status + ", " + responseText);
5671
+ });
5672
+ })
5679
5673
  ];
5680
- break;
5681
- case MaskMode.NONE:
5682
- material.stencilTest = false;
5683
- break;
5684
- default:
5685
- console.warn("MaskMode " + maskMode + " not in specification, please set stencil params seperately.");
5686
- }
5674
+ });
5675
+ });
5676
+ return _loadBlob.apply(this, arguments);
5687
5677
  }
5688
-
5689
- function _extends() {
5690
- _extends = Object.assign || function assign(target) {
5691
- for(var i = 1; i < arguments.length; i++){
5692
- var source = arguments[i];
5693
- for(var key in source)if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
5694
- }
5695
- return target;
5696
- };
5697
- return _extends.apply(this, arguments);
5678
+ /**
5679
+ * 异步加载一个视频文件
5680
+ * @param url - 视频文件的 URL 或 MediaProvider 对象
5681
+ */ function loadVideo(url) {
5682
+ return _loadVideo.apply(this, arguments);
5698
5683
  }
5699
-
5700
- var TextureLoadAction;
5701
- (function(TextureLoadAction) {
5702
- TextureLoadAction[TextureLoadAction["whatever"] = 0] = "whatever";
5703
- //preserve previous attachment
5704
- //load = 1,
5705
- //clear attachment
5706
- TextureLoadAction[TextureLoadAction["clear"] = 2] = "clear";
5707
- })(TextureLoadAction || (TextureLoadAction = {}));
5708
- var TextureSourceType;
5709
- (function(TextureSourceType) {
5710
- TextureSourceType[TextureSourceType["none"] = 0] = "none";
5711
- TextureSourceType[TextureSourceType["data"] = 1] = "data";
5712
- TextureSourceType[TextureSourceType["image"] = 2] = "image";
5713
- TextureSourceType[TextureSourceType["compressed"] = 3] = "compressed";
5714
- TextureSourceType[TextureSourceType["video"] = 4] = "video";
5715
- TextureSourceType[TextureSourceType["canvas"] = 5] = "canvas";
5716
- TextureSourceType[TextureSourceType["framebuffer"] = 6] = "framebuffer";
5717
- TextureSourceType[TextureSourceType["mipmaps"] = 7] = "mipmaps";
5718
- })(TextureSourceType || (TextureSourceType = {}));
5719
-
5720
- /**
5721
- * 负责下载各种资源,并提供了一些异步加载和缓存管理的功能
5722
- */ var Downloader = /*#__PURE__*/ function() {
5723
- function Downloader() {
5724
- /**
5725
- * 存储多个回调函数的对象
5726
- */ this.callbacks = {};
5727
- }
5728
- var _proto = Downloader.prototype;
5729
- /**
5730
- * 下载一个 JSON 文件
5731
- * @param url - 要下载的 JSON 文件的 URL
5732
- * @param onSuccess - 下载成功后的回调函数
5733
- * @param onError - 下载失败后的回调函数
5734
- */ _proto.downloadJSON = function downloadJSON(url, onSuccess, onError) {
5735
- this.download(url, "json", onSuccess, onError);
5736
- };
5737
- /**
5738
- * 下载一个二进制文件
5739
- * @param url - 要下载的二进制文件的 URL
5740
- * @param onSuccess - 下载成功后的回调函数
5741
- * @param onError - 下载失败后的回调函数
5742
- */ _proto.downloadBinary = function downloadBinary(url, onSuccess, onError) {
5743
- this.download(url, "arraybuffer", onSuccess, onError);
5744
- };
5745
- /**
5746
- * 下载一个 Blob 文件
5747
- * @param url - 要下载的 Blob 文件的 URL
5748
- * @param onSuccess - 下载成功后的回调函数
5749
- * @param onError - 下载失败后的回调函数
5750
- */ _proto.downloadBlob = function downloadBlob(url, onSuccess, onError) {
5751
- this.download(url, "blob", onSuccess, onError);
5752
- };
5753
- _proto.download = function download(url, responseType, onSuccess, onError) {
5754
- var _this = this;
5755
- if (responseType === void 0) responseType = "json";
5756
- if (this.start(url, onSuccess, onError)) {
5757
- return;
5758
- }
5759
- var xhr = new XMLHttpRequest();
5760
- var handleError = function() {
5761
- _this.finish(url, xhr.status, xhr.response);
5762
- };
5763
- var handleLoad = function() {
5764
- if (xhr.status == 200) {
5765
- _this.finish(url, 200, xhr.response);
5684
+ function _loadVideo() {
5685
+ _loadVideo = _async_to_generator(function(url) {
5686
+ var video;
5687
+ return __generator(this, function(_state) {
5688
+ video = document.createElement("video");
5689
+ if (typeof url === "string") {
5690
+ video.src = url;
5766
5691
  } else {
5767
- handleError();
5692
+ video.srcObject = url;
5768
5693
  }
5769
- };
5770
- xhr.responseType = responseType;
5771
- xhr.addEventListener("load", handleLoad);
5772
- xhr.addEventListener("error", handleError);
5773
- xhr.open("GET", url, true);
5774
- xhr.send();
5775
- };
5776
- _proto.start = function start(url, onSuccess, onError) {
5777
- var callbacks = this.callbacks[url];
5778
- try {
5779
- if (callbacks) {
5780
- return true;
5694
+ video.crossOrigin = "anonymous";
5695
+ video.muted = true;
5696
+ if (isAndroid()) {
5697
+ video.setAttribute("renderer", "standard");
5781
5698
  }
5782
- this.callbacks[url] = callbacks = [];
5783
- } finally{
5784
- callbacks.push(onSuccess, onError);
5785
- }
5786
- };
5787
- _proto.finish = function finish(url, status, data) {
5788
- var callbacks = this.callbacks[url];
5789
- delete this.callbacks[url];
5790
- var args = status == 200 ? [
5791
- data
5792
- ] : [
5793
- status,
5794
- data
5795
- ];
5796
- for(var i = args.length - 1, n = callbacks.length; i < n; i += 2){
5797
- callbacks[i].apply(null, args);
5798
- }
5799
- };
5800
- return Downloader;
5801
- }();
5802
- var webPFailed = false;
5803
- var avifFailed = false;
5699
+ video.setAttribute("playsinline", "playsinline");
5700
+ return [
5701
+ 2,
5702
+ new Promise(function(resolve, reject) {
5703
+ var pending = video.play();
5704
+ if (pending) {
5705
+ void pending.then(function() {
5706
+ return resolve(video);
5707
+ });
5708
+ } else {
5709
+ video.addEventListener("loadeddata", function listener() {
5710
+ resolve(video);
5711
+ video.removeEventListener("loadeddata", listener);
5712
+ }, true);
5713
+ }
5714
+ video.addEventListener("error", function(e) {
5715
+ reject("Load video fail.");
5716
+ });
5717
+ })
5718
+ ];
5719
+ });
5720
+ });
5721
+ return _loadVideo.apply(this, arguments);
5722
+ }
5804
5723
  /**
5805
- * 异步加载一个 WebP 图片文件,如果不支持 WebP,则加载 PNG 图片文件
5806
- * @param png - PNG 图片文件的 URL
5807
- * @param webp - WebP 图片文件的 URL
5808
- */ function loadWebPOptional(png, webp) {
5809
- return _loadWebPOptional.apply(this, arguments);
5724
+ * 异步加载一个媒体文件
5725
+ * @param url
5726
+ * @param loadFn
5727
+ * @returns
5728
+ */ function loadMedia(url, loadFn) {
5729
+ return _loadMedia.apply(this, arguments);
5810
5730
  }
5811
- function _loadWebPOptional() {
5812
- _loadWebPOptional = _async_to_generator(function(png, webp) {
5813
- var image, image1, image2;
5731
+ function _loadMedia() {
5732
+ _loadMedia = _async_to_generator(function(url, loadFn) {
5814
5733
  return __generator(this, function(_state) {
5815
5734
  switch(_state.label){
5816
5735
  case 0:
5817
- if (!(webPFailed || !webp)) return [
5736
+ if (!Array.isArray(url)) return [
5818
5737
  3,
5819
- 2
5820
- ];
5821
- return [
5822
- 4,
5823
- loadImage(png)
5738
+ 5
5824
5739
  ];
5740
+ _state.label = 1;
5825
5741
  case 1:
5826
- image = _state.sent();
5827
- return [
5828
- 2,
5829
- {
5830
- image: image,
5831
- url: png
5832
- }
5833
- ];
5834
- case 2:
5835
5742
  _state.trys.push([
5836
- 2,
5837
- 4,
5743
+ 1,
5744
+ 3,
5838
5745
  ,
5839
- 6
5746
+ 5
5840
5747
  ]);
5841
5748
  return [
5842
5749
  4,
5843
- loadImage(webp)
5750
+ loadFn(url[0])
5844
5751
  ];
5845
- case 3:
5846
- image1 = _state.sent();
5752
+ case 2:
5847
5753
  return [
5848
5754
  2,
5849
- {
5850
- image: image1,
5851
- url: webp
5852
- }
5755
+ _state.sent()
5853
5756
  ];
5854
- case 4:
5757
+ case 3:
5855
5758
  _state.sent();
5856
- webPFailed = true;
5857
5759
  return [
5858
5760
  4,
5859
- loadImage(png)
5761
+ loadFn(url[1])
5860
5762
  ];
5861
- case 5:
5862
- image2 = _state.sent();
5763
+ case 4:
5863
5764
  return [
5864
5765
  2,
5865
- {
5866
- image: image2,
5867
- url: png
5868
- }
5766
+ _state.sent()
5869
5767
  ];
5870
- case 6:
5768
+ case 5:
5871
5769
  return [
5872
- 2
5770
+ 2,
5771
+ loadFn(url)
5873
5772
  ];
5874
5773
  }
5875
5774
  });
5876
5775
  });
5877
- return _loadWebPOptional.apply(this, arguments);
5776
+ return _loadMedia.apply(this, arguments);
5878
5777
  }
5879
- /**
5880
- * 异步加载一个 AVIF 图片文件,如果不支持 AVIF,则加载 PNG 图片文件
5881
- * @param png - PNG 图片文件的 URL
5882
- * @param avif - AVIF 图片文件的 URL
5883
- */ function loadAVIFOptional(png, avif) {
5884
- return _loadAVIFOptional.apply(this, arguments);
5778
+
5779
+ function deserializeMipmapTexture(textureOptions, bins, assets) {
5780
+ return _deserializeMipmapTexture.apply(this, arguments);
5885
5781
  }
5886
- function _loadAVIFOptional() {
5887
- _loadAVIFOptional = _async_to_generator(function(png, avif) {
5888
- var image, image1, image2;
5782
+ function _deserializeMipmapTexture() {
5783
+ _deserializeMipmapTexture = _async_to_generator(function(textureOptions, bins, assets, files) {
5784
+ var mipmaps, target, jobs, loadedMipmaps, mipmaps1, target1, jobs1, loadedMipmaps1, bin;
5889
5785
  return __generator(this, function(_state) {
5890
5786
  switch(_state.label){
5891
5787
  case 0:
5892
- if (!(avifFailed || !avif)) return [
5788
+ if (files === void 0) files = [];
5789
+ if (!(textureOptions.target === 34067)) return [
5893
5790
  3,
5894
5791
  2
5895
5792
  ];
5793
+ mipmaps = textureOptions.mipmaps, target = textureOptions.target;
5794
+ jobs = mipmaps.map(function(mipmap) {
5795
+ return Promise.all(mipmap.map(function(pointer) {
5796
+ // @ts-expect-error
5797
+ if (pointer.id) {
5798
+ // @ts-expect-error
5799
+ var loadedImage = assets[pointer.id];
5800
+ return loadedImage;
5801
+ } else {
5802
+ return loadMipmapImage(pointer, bins);
5803
+ }
5804
+ }));
5805
+ });
5896
5806
  return [
5897
5807
  4,
5898
- loadImage(png)
5808
+ Promise.all(jobs)
5899
5809
  ];
5900
5810
  case 1:
5901
- image = _state.sent();
5811
+ loadedMipmaps = _state.sent();
5902
5812
  return [
5903
5813
  2,
5904
- {
5905
- image: image,
5906
- url: png
5907
- }
5814
+ _extends({
5815
+ keepImageSource: false
5816
+ }, textureOptions, {
5817
+ mipmaps: loadedMipmaps,
5818
+ sourceFrom: {
5819
+ target: target,
5820
+ // bin,
5821
+ type: TextureSourceType.mipmaps
5822
+ }
5823
+ })
5908
5824
  ];
5909
5825
  case 2:
5910
- _state.trys.push([
5911
- 2,
5912
- 4,
5913
- ,
5914
- 6
5915
- ]);
5826
+ // TODO: 补充测试用例
5827
+ mipmaps1 = textureOptions.mipmaps, target1 = textureOptions.target;
5828
+ jobs1 = mipmaps1.map(function(pointer) {
5829
+ return loadMipmapImage(pointer, bins);
5830
+ });
5916
5831
  return [
5917
5832
  4,
5918
- loadImage(avif)
5833
+ Promise.all(jobs1)
5919
5834
  ];
5920
5835
  case 3:
5921
- image1 = _state.sent();
5836
+ loadedMipmaps1 = _state.sent();
5837
+ bin = files[mipmaps1[0][1][0]].url;
5922
5838
  return [
5923
5839
  2,
5924
- {
5925
- image: image1,
5926
- url: avif
5927
- }
5840
+ _extends({
5841
+ keepImageSource: false
5842
+ }, textureOptions, {
5843
+ mipmaps: loadedMipmaps1,
5844
+ sourceType: TextureSourceType.mipmaps,
5845
+ sourceFrom: {
5846
+ target: target1,
5847
+ bin: bin,
5848
+ type: TextureSourceType.mipmaps,
5849
+ mipmaps: mipmaps1.map(function(pointer) {
5850
+ return [
5851
+ pointer[1][1],
5852
+ pointer[1][2]
5853
+ ];
5854
+ })
5855
+ }
5856
+ })
5928
5857
  ];
5929
5858
  case 4:
5930
- _state.sent();
5931
- avifFailed = true;
5932
- return [
5933
- 4,
5934
- loadImage(png)
5935
- ];
5936
- case 5:
5937
- image2 = _state.sent();
5938
- return [
5939
- 2,
5940
- {
5941
- image: image2,
5942
- url: png
5943
- }
5944
- ];
5945
- case 6:
5946
5859
  return [
5947
5860
  2
5948
5861
  ];
5949
5862
  }
5950
5863
  });
5951
5864
  });
5952
- return _loadAVIFOptional.apply(this, arguments);
5865
+ return _deserializeMipmapTexture.apply(this, arguments);
5953
5866
  }
5954
- /**
5955
- * 异步加载一个图片文件
5956
- * @param source - 图片文件的 URL、Blob 或 HTMLImageElement 对象
5957
- */ function loadImage(source) {
5958
- return _loadImage.apply(this, arguments);
5867
+ function loadMipmapImage(pointer, bins) {
5868
+ return _loadMipmapImage.apply(this, arguments);
5959
5869
  }
5960
- function _loadImage() {
5961
- _loadImage = _async_to_generator(function(source) {
5962
- var url, revokeURL;
5870
+ function _loadMipmapImage() {
5871
+ _loadMipmapImage = _async_to_generator(function(pointer, bins) {
5872
+ var _pointer_, index, start, length, bin;
5963
5873
  return __generator(this, function(_state) {
5964
- url = "";
5965
- // 1. string | Blob | HTMLImageElement 处理逻辑
5966
- if (_instanceof1(source, HTMLImageElement)) {
5967
- if (source.complete) {
5968
- return [
5969
- 2,
5970
- source
5971
- ];
5972
- }
5973
- url = source.src;
5974
- } else if (_instanceof1(source, Blob)) {
5975
- url = URL.createObjectURL(source);
5976
- revokeURL = true;
5977
- } else if (typeof source === "string") {
5978
- url = source;
5979
- }
5980
- // 2. 非法类型
5981
- if (!url) {
5982
- throw new Error("Invalid url type: " + JSON.stringify(source) + ".");
5874
+ _pointer_ = pointer[1], index = _pointer_[0], start = _pointer_[1], length = _pointer_[2];
5875
+ bin = bins[index];
5876
+ if (!bin) {
5877
+ throw new Error("Invalid bin pointer: " + JSON.stringify(pointer) + ".");
5983
5878
  }
5984
5879
  return [
5985
5880
  2,
5986
- new Promise(function(resolve, reject) {
5987
- var img = new Image();
5988
- if (!/^data:/.test(url)) {
5989
- img.crossOrigin = "*";
5990
- }
5991
- img.onload = function() {
5992
- img.onload = null;
5993
- if (revokeURL) {
5994
- URL.revokeObjectURL(url);
5995
- }
5996
- return resolve(img);
5997
- };
5998
- img.onerror = function(e) {
5999
- img.onerror = null;
6000
- if (revokeURL) {
6001
- URL.revokeObjectURL(url);
6002
- }
6003
- return reject("Load image fail: " + url + ", reason: " + JSON.stringify(e));
6004
- };
6005
- img.src = url;
6006
- })
5881
+ loadImage(new Blob([
5882
+ new Uint8Array(bin, start, length)
5883
+ ]))
6007
5884
  ];
6008
5885
  });
6009
5886
  });
6010
- return _loadImage.apply(this, arguments);
5887
+ return _loadMipmapImage.apply(this, arguments);
6011
5888
  }
5889
+
6012
5890
  /**
6013
- * 异步加载一个二进制文件
6014
- * @param url - 二进制文件的 URL
6015
- */ function loadBinary(url) {
6016
- return _loadBinary.apply(this, arguments);
5891
+ * Helper class to create a WebGL Context
5892
+ *
5893
+ * @param canvas
5894
+ * @param glType
5895
+ * @param options
5896
+ * @returns
5897
+ */ function createGLContext(canvas, glType, options) {
5898
+ if (glType === void 0) glType = "webgl";
5899
+ var context;
5900
+ if (glType === "webgl2") {
5901
+ context = canvas.getContext("webgl2", options);
5902
+ if (!context) {
5903
+ console.debug("WebGL2 context retrieval failed, falling back to WebGL context.");
5904
+ }
5905
+ }
5906
+ if (!context || glType === "webgl") {
5907
+ context = canvas.getContext("webgl", options);
5908
+ }
5909
+ if (!context) {
5910
+ throw new Error("This browser does not support WebGL or the WebGL version is incorrect. Please check your WebGL version.");
5911
+ }
5912
+ return context;
6017
5913
  }
6018
- function _loadBinary() {
6019
- _loadBinary = _async_to_generator(function(url) {
6020
- return __generator(this, function(_state) {
6021
- return [
6022
- 2,
6023
- new Promise(function(resolve, reject) {
6024
- new Downloader().downloadBinary(url, resolve, function(status, responseText) {
6025
- reject("Couldn't load bins " + url + ": status " + status + ", " + responseText);
6026
- });
6027
- })
6028
- ];
5914
+
5915
+ function gpuTimer(gl) {
5916
+ var ext = gl.getExtension("EXT_disjoint_timer_query_webgl2");
5917
+ if (ext) {
5918
+ var query = gl.createQuery();
5919
+ var getTime = /*#__PURE__*/ _async_to_generator(function() {
5920
+ return __generator(this, function(_state) {
5921
+ return [
5922
+ 2,
5923
+ new Promise(function(resolve, reject) {
5924
+ if (query) {
5925
+ var available = gl.getQueryParameter(query, gl.QUERY_RESULT_AVAILABLE);
5926
+ var disjoint = gl.getParameter(ext.GPU_DISJOINT_EXT);
5927
+ if (available && !disjoint) {
5928
+ // See how much time the rendering of the object took in nanoseconds.
5929
+ var timeElapsed = gl.getQueryParameter(query, gl.QUERY_RESULT); // Do something useful with the time. Note that care should be
5930
+ // taken to use all significant bits of the result, not just the
5931
+ // least significant 32 bits.
5932
+ resolve(timeElapsed / 1000 / 1000);
5933
+ }
5934
+ if (available || disjoint) {
5935
+ // Clean up the query object.
5936
+ gl.deleteQuery(query); // Don't re-enter this polling loop.
5937
+ query = null;
5938
+ }
5939
+ available !== null && query && window.setTimeout(function() {
5940
+ getTime().then(resolve).catch;
5941
+ }, 1);
5942
+ }
5943
+ })
5944
+ ];
5945
+ });
6029
5946
  });
6030
- });
6031
- return _loadBinary.apply(this, arguments);
5947
+ if (!query) {
5948
+ return;
5949
+ }
5950
+ return {
5951
+ begin: function() {
5952
+ query && gl.beginQuery(ext.TIME_ELAPSED_EXT, query);
5953
+ },
5954
+ end: function() {
5955
+ gl.endQuery(ext.TIME_ELAPSED_EXT);
5956
+ },
5957
+ getTime: getTime
5958
+ };
5959
+ }
6032
5960
  }
6033
- /**
6034
- * 异步加载一个 Blob 文件
6035
- * @param url - Blob 文件的 URL
6036
- */ function loadBlob(url) {
6037
- return _loadBlob.apply(this, arguments);
5961
+
5962
+ var initErrors = [];
5963
+ // @ts-expect-error
5964
+ var glContext = {};
5965
+ if (!initErrors.length) {
5966
+ initGLContext();
6038
5967
  }
6039
- function _loadBlob() {
6040
- _loadBlob = _async_to_generator(function(url) {
6041
- return __generator(this, function(_state) {
6042
- return [
6043
- 2,
6044
- new Promise(function(resolve, reject) {
6045
- new Downloader().downloadBlob(url, resolve, function(status, responseText) {
6046
- reject("Couldn't load blob " + url + ": status " + status + ", " + responseText);
6047
- });
6048
- })
6049
- ];
6050
- });
6051
- });
6052
- return _loadBlob.apply(this, arguments);
5968
+ function initGLContext() {
5969
+ // 重要:iOS 9/10 低版本需要拷贝 gl context 的 prototype,要不然会有属性值的缺失
5970
+ if (typeof WebGL2RenderingContext === "function") {
5971
+ copy(WebGL2RenderingContext);
5972
+ } else if (typeof WebGLRenderingContext !== "undefined") {
5973
+ copy(WebGLRenderingContext);
5974
+ copy(WebGLRenderingContext.prototype);
5975
+ } else {
5976
+ initErrors.push(// iOS 16 lockdown mode
5977
+ "iOS16 lockdown mode, WebGL Constants not in global");
5978
+ }
5979
+ if (!initErrors.length && !("HALF_FLOAT" in glContext)) {
5980
+ // @ts-expect-error set default value
5981
+ glContext["HALF_FLOAT"] = 5131;
5982
+ }
6053
5983
  }
6054
- /**
6055
- * 异步加载一个视频文件
6056
- * @param url - 视频文件的 URL 或 MediaProvider 对象
6057
- */ function loadVideo(url) {
6058
- return _loadVideo.apply(this, arguments);
5984
+ function isWebGL2(gl) {
5985
+ return typeof WebGL2RenderingContext !== "undefined" && gl.constructor.name === "WebGL2RenderingContext";
6059
5986
  }
6060
- function _loadVideo() {
6061
- _loadVideo = _async_to_generator(function(url) {
6062
- var video;
6063
- return __generator(this, function(_state) {
6064
- video = document.createElement("video");
6065
- if (typeof url === "string") {
6066
- video.src = url;
6067
- } else {
6068
- video.srcObject = url;
6069
- }
6070
- video.crossOrigin = "anonymous";
6071
- video.muted = true;
6072
- if (isAndroid()) {
6073
- video.setAttribute("renderer", "standard");
6074
- }
6075
- video.setAttribute("playsinline", "playsinline");
6076
- return [
6077
- 2,
6078
- new Promise(function(resolve, reject) {
6079
- var pending = video.play();
6080
- if (pending) {
6081
- void pending.then(function() {
6082
- return resolve(video);
6083
- });
6084
- } else {
6085
- video.addEventListener("loadeddata", function listener() {
6086
- resolve(video);
6087
- video.removeEventListener("loadeddata", listener);
6088
- }, true);
6089
- }
6090
- video.addEventListener("error", function(e) {
6091
- reject("Load video fail.");
6092
- });
6093
- })
6094
- ];
6095
- });
6096
- });
6097
- return _loadVideo.apply(this, arguments);
6098
- }
6099
- function loadMedia(url, loadFn) {
6100
- return _loadMedia.apply(this, arguments);
6101
- }
6102
- function _loadMedia() {
6103
- _loadMedia = _async_to_generator(function(url, loadFn) {
6104
- return __generator(this, function(_state) {
6105
- switch(_state.label){
6106
- case 0:
6107
- if (!Array.isArray(url)) return [
6108
- 3,
6109
- 5
6110
- ];
6111
- _state.label = 1;
6112
- case 1:
6113
- _state.trys.push([
6114
- 1,
6115
- 3,
6116
- ,
6117
- 5
6118
- ]);
6119
- return [
6120
- 4,
6121
- loadFn(url[0])
6122
- ];
6123
- case 2:
6124
- return [
6125
- 2,
6126
- _state.sent()
6127
- ];
6128
- case 3:
6129
- _state.sent();
6130
- return [
6131
- 4,
6132
- loadFn(url[1])
6133
- ];
6134
- case 4:
6135
- return [
6136
- 2,
6137
- _state.sent()
6138
- ];
6139
- case 5:
6140
- return [
6141
- 2,
6142
- loadFn(url)
6143
- ];
6144
- }
6145
- });
6146
- });
6147
- return _loadMedia.apply(this, arguments);
6148
- }
6149
-
6150
- function deserializeMipmapTexture(textureOptions, bins, assets) {
6151
- return _deserializeMipmapTexture.apply(this, arguments);
6152
- }
6153
- function _deserializeMipmapTexture() {
6154
- _deserializeMipmapTexture = _async_to_generator(function(textureOptions, bins, assets, files) {
6155
- var mipmaps, target, jobs, loadedMipmaps, mipmaps1, target1, jobs1, loadedMipmaps1, bin;
6156
- return __generator(this, function(_state) {
6157
- switch(_state.label){
6158
- case 0:
6159
- if (files === void 0) files = [];
6160
- if (!(textureOptions.target === 34067)) return [
6161
- 3,
6162
- 2
6163
- ];
6164
- mipmaps = textureOptions.mipmaps, target = textureOptions.target;
6165
- jobs = mipmaps.map(function(mipmap) {
6166
- return Promise.all(mipmap.map(function(pointer) {
6167
- // @ts-expect-error
6168
- if (pointer.id) {
6169
- // @ts-expect-error
6170
- var loadedImage = assets[pointer.id];
6171
- return loadedImage;
6172
- } else {
6173
- return loadMipmapImage(pointer, bins);
6174
- }
6175
- }));
6176
- });
6177
- return [
6178
- 4,
6179
- Promise.all(jobs)
6180
- ];
6181
- case 1:
6182
- loadedMipmaps = _state.sent();
6183
- return [
6184
- 2,
6185
- _extends({
6186
- keepImageSource: false
6187
- }, textureOptions, {
6188
- mipmaps: loadedMipmaps,
6189
- sourceFrom: {
6190
- target: target,
6191
- // bin,
6192
- type: TextureSourceType.mipmaps
6193
- }
6194
- })
6195
- ];
6196
- case 2:
6197
- // TODO: 补充测试用例
6198
- mipmaps1 = textureOptions.mipmaps, target1 = textureOptions.target;
6199
- jobs1 = mipmaps1.map(function(pointer) {
6200
- return loadMipmapImage(pointer, bins);
6201
- });
6202
- return [
6203
- 4,
6204
- Promise.all(jobs1)
6205
- ];
6206
- case 3:
6207
- loadedMipmaps1 = _state.sent();
6208
- bin = files[mipmaps1[0][1][0]].url;
6209
- return [
6210
- 2,
6211
- _extends({
6212
- keepImageSource: false
6213
- }, textureOptions, {
6214
- mipmaps: loadedMipmaps1,
6215
- sourceType: TextureSourceType.mipmaps,
6216
- sourceFrom: {
6217
- target: target1,
6218
- bin: bin,
6219
- type: TextureSourceType.mipmaps,
6220
- mipmaps: mipmaps1.map(function(pointer) {
6221
- return [
6222
- pointer[1][1],
6223
- pointer[1][2]
6224
- ];
6225
- })
6226
- }
6227
- })
6228
- ];
6229
- case 4:
6230
- return [
6231
- 2
6232
- ];
6233
- }
6234
- });
6235
- });
6236
- return _deserializeMipmapTexture.apply(this, arguments);
5987
+ function copy(target) {
5988
+ for(var name in target){
5989
+ if (/^[A-Z_]/.test(name)) {
5990
+ // @ts-expect-error safe to assign
5991
+ glContext[name] = target[name];
5992
+ }
5993
+ }
6237
5994
  }
6238
- function loadMipmapImage(pointer, bins) {
6239
- return _loadMipmapImage.apply(this, arguments);
5995
+ function vertexFormatType2GLType(formatType) {
5996
+ switch(formatType){
5997
+ case VertexFormatType.Float32:
5998
+ return WebGLRenderingContext["FLOAT"];
5999
+ case VertexFormatType.Int16:
6000
+ return WebGLRenderingContext["SHORT"];
6001
+ case VertexFormatType.Int8:
6002
+ return WebGLRenderingContext["BYTE"];
6003
+ case VertexFormatType.UInt16:
6004
+ return WebGLRenderingContext["UNSIGNED_SHORT"];
6005
+ case VertexFormatType.UInt8:
6006
+ return WebGLRenderingContext["UNSIGNED_BYTE"];
6007
+ default:
6008
+ return WebGLRenderingContext["FLOAT"];
6009
+ }
6240
6010
  }
6241
- function _loadMipmapImage() {
6242
- _loadMipmapImage = _async_to_generator(function(pointer, bins) {
6243
- var _pointer_, index, start, length, bin;
6244
- return __generator(this, function(_state) {
6245
- _pointer_ = pointer[1], index = _pointer_[0], start = _pointer_[1], length = _pointer_[2];
6246
- bin = bins[index];
6247
- if (!bin) {
6248
- throw new Error("Invalid bin pointer: " + JSON.stringify(pointer) + ".");
6249
- }
6250
- return [
6251
- 2,
6252
- loadImage(new Blob([
6253
- new Uint8Array(bin, start, length)
6254
- ]))
6255
- ];
6256
- });
6257
- });
6258
- return _loadMipmapImage.apply(this, arguments);
6011
+ function glType2VertexFormatType(webglType) {
6012
+ switch(webglType){
6013
+ case WebGLRenderingContext["FLOAT"]:
6014
+ return VertexFormatType.Float32;
6015
+ case WebGLRenderingContext["SHORT"]:
6016
+ return VertexFormatType.Int16;
6017
+ case WebGLRenderingContext["BYTE"]:
6018
+ return VertexFormatType.Int8;
6019
+ case WebGLRenderingContext["UNSIGNED_SHORT"]:
6020
+ return VertexFormatType.UInt16;
6021
+ case WebGLRenderingContext["UNSIGNED_BYTE"]:
6022
+ return VertexFormatType.UInt8;
6023
+ default:
6024
+ return VertexFormatType.Float32;
6025
+ }
6259
6026
  }
6260
6027
 
6261
6028
  var seed$9 = 1;
@@ -6886,10 +6653,284 @@ function getDefaultTextureFactory() {
6886
6653
  if (!g) {
6887
6654
  g = new TextureFactory();
6888
6655
  }
6889
- return g;
6890
- }
6891
- function setDefaultTextureFactory(factory) {
6892
- g = factory;
6656
+ return g;
6657
+ }
6658
+ function setDefaultTextureFactory(factory) {
6659
+ g = factory;
6660
+ }
6661
+
6662
+ function _array_like_to_array(arr, len) {
6663
+ if (len == null || len > arr.length) len = arr.length;
6664
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
6665
+ return arr2;
6666
+ }
6667
+
6668
+ function _unsupported_iterable_to_array(o, minLen) {
6669
+ if (!o) return;
6670
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
6671
+ var n = Object.prototype.toString.call(o).slice(8, -1);
6672
+ if (n === "Object" && o.constructor) n = o.constructor.name;
6673
+ if (n === "Map" || n === "Set") return Array.from(n);
6674
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
6675
+ }
6676
+
6677
+ function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
6678
+ var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
6679
+ if (it) return (it = it.call(o)).next.bind(it);
6680
+ // Fallback for engines without symbol support
6681
+ if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike && o && typeof o.length === "number") {
6682
+ if (it) o = it;
6683
+ var i = 0;
6684
+ return function() {
6685
+ if (i >= o.length) return {
6686
+ done: true
6687
+ };
6688
+ return {
6689
+ done: false,
6690
+ value: o[i++]
6691
+ };
6692
+ };
6693
+ }
6694
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
6695
+ }
6696
+
6697
+ var ShaderCompileResultStatus;
6698
+ (function(ShaderCompileResultStatus) {
6699
+ ShaderCompileResultStatus[ShaderCompileResultStatus["noShader"] = 0] = "noShader";
6700
+ ShaderCompileResultStatus[ShaderCompileResultStatus["success"] = 1] = "success";
6701
+ ShaderCompileResultStatus[ShaderCompileResultStatus["fail"] = 2] = "fail";
6702
+ ShaderCompileResultStatus[ShaderCompileResultStatus["compiling"] = 3] = "compiling";
6703
+ })(ShaderCompileResultStatus || (ShaderCompileResultStatus = {}));
6704
+ var GLSLVersion;
6705
+ (function(GLSLVersion) {
6706
+ GLSLVersion["GLSL1"] = "100";
6707
+ GLSLVersion["GLSL3"] = "300 es";
6708
+ })(GLSLVersion || (GLSLVersion = {}));
6709
+ var ShaderVariant = /*#__PURE__*/ function(EffectsObject) {
6710
+ _inherits(ShaderVariant, EffectsObject);
6711
+ function ShaderVariant(engine, source) {
6712
+ var _this;
6713
+ _this = EffectsObject.call(this, engine) || this;
6714
+ _this.source = source;
6715
+ return _this;
6716
+ }
6717
+ return ShaderVariant;
6718
+ }(EffectsObject);
6719
+ var Shader = /*#__PURE__*/ function(EffectsObject) {
6720
+ _inherits(Shader, EffectsObject);
6721
+ function Shader() {
6722
+ return EffectsObject.apply(this, arguments);
6723
+ }
6724
+ var _proto = Shader.prototype;
6725
+ _proto.createVariant = function createVariant(macros) {
6726
+ var shaderMacros = [];
6727
+ if (macros) {
6728
+ for(var _iterator = _create_for_of_iterator_helper_loose(Object.keys(macros)), _step; !(_step = _iterator()).done;){
6729
+ var key = _step.value;
6730
+ shaderMacros.push([
6731
+ key,
6732
+ macros[key]
6733
+ ]);
6734
+ }
6735
+ }
6736
+ var shaderVariant = this.engine.getShaderLibrary().createShader(this.shaderData, shaderMacros);
6737
+ shaderVariant.shader = this;
6738
+ return shaderVariant;
6739
+ };
6740
+ _proto.fromData = function fromData(data) {
6741
+ EffectsObject.prototype.fromData.call(this, data);
6742
+ this.shaderData = data;
6743
+ };
6744
+ return Shader;
6745
+ }(EffectsObject);
6746
+ Shader = __decorate([
6747
+ effectsClass(DataType.Shader)
6748
+ ], Shader);
6749
+
6750
+ var EFFECTS_COPY_MESH_NAME = "effects-internal-copy";
6751
+ var COPY_MESH_SHADER_ID = "effects-internal-copy-mesh";
6752
+ var COPY_VERTEX_SHADER = "\nprecision highp float;\nattribute vec2 aPos;\nvarying vec2 vTex;\nvoid main(){\n gl_Position = vec4(aPos,0.,1.0);\n vTex = (aPos + vec2(1.0))/2.;\n}";
6753
+ var COPY_FRAGMENT_SHADER = "precision mediump float;\nvarying vec2 vTex;\n\n#ifdef DEPTH_TEXTURE\nuniform sampler2D uDepth;\n#extension GL_EXT_frag_depth : enable\n#endif\nvoid main(){\n #ifdef DEPTH_TEXTURE\n gl_FragDepthEXT = texture2D(uDepth,vTex).r;\n #endif\n}\n";
6754
+ function createCopyShader(level, writeDepth) {
6755
+ var webgl2 = level === 2;
6756
+ return {
6757
+ name: EFFECTS_COPY_MESH_NAME,
6758
+ vertex: COPY_VERTEX_SHADER,
6759
+ fragment: COPY_FRAGMENT_SHADER,
6760
+ glslVersion: webgl2 ? GLSLVersion.GLSL3 : GLSLVersion.GLSL1,
6761
+ macros: [
6762
+ [
6763
+ "DEPTH_TEXTURE",
6764
+ !!writeDepth
6765
+ ]
6766
+ ],
6767
+ // @ts-expect-error
6768
+ cacheId: COPY_MESH_SHADER_ID + +writeDepth
6769
+ };
6770
+ }
6771
+
6772
+ var ShaderType;
6773
+ (function(ShaderType) {
6774
+ ShaderType[ShaderType["vertex"] = 0] = "vertex";
6775
+ ShaderType[ShaderType["fragment"] = 1] = "fragment";
6776
+ })(ShaderType || (ShaderType = {}));
6777
+
6778
+ function valIfUndefined(val, def) {
6779
+ if (val === undefined || val === null) {
6780
+ return def;
6781
+ }
6782
+ return val;
6783
+ }
6784
+ function getPreMultiAlpha(blending) {
6785
+ switch(blending){
6786
+ case BlendingMode.ALPHA:
6787
+ return 1;
6788
+ case BlendingMode.ADD:
6789
+ return 1;
6790
+ case BlendingMode.SUBTRACTION:
6791
+ return 1;
6792
+ case BlendingMode.STRONG_LIGHT:
6793
+ return 1;
6794
+ case BlendingMode.WEAK_LIGHT:
6795
+ return 1;
6796
+ case BlendingMode.SUPERPOSITION:
6797
+ return 2;
6798
+ case BlendingMode.BRIGHTNESS:
6799
+ return 3;
6800
+ case BlendingMode.MULTIPLY:
6801
+ return 0;
6802
+ default:
6803
+ // 处理undefined
6804
+ return 1;
6805
+ }
6806
+ }
6807
+ function setBlendMode(material, blendMode) {
6808
+ switch(blendMode){
6809
+ case undefined:
6810
+ material.blendFunction = [
6811
+ glContext.ONE,
6812
+ glContext.ONE_MINUS_SRC_ALPHA,
6813
+ glContext.ONE,
6814
+ glContext.ONE_MINUS_SRC_ALPHA
6815
+ ];
6816
+ break;
6817
+ case BlendingMode.ALPHA:
6818
+ material.blendFunction = [
6819
+ glContext.ONE,
6820
+ glContext.ONE_MINUS_SRC_ALPHA,
6821
+ glContext.ONE,
6822
+ glContext.ONE_MINUS_SRC_ALPHA
6823
+ ];
6824
+ break;
6825
+ case BlendingMode.ADD:
6826
+ material.blendFunction = [
6827
+ glContext.ONE,
6828
+ glContext.ONE,
6829
+ glContext.ONE,
6830
+ glContext.ONE
6831
+ ];
6832
+ break;
6833
+ case BlendingMode.SUBTRACTION:
6834
+ material.blendFunction = [
6835
+ glContext.ONE,
6836
+ glContext.ONE,
6837
+ glContext.ZERO,
6838
+ glContext.ONE
6839
+ ];
6840
+ material.blendEquation = [
6841
+ glContext.FUNC_REVERSE_SUBTRACT,
6842
+ glContext.FUNC_REVERSE_SUBTRACT
6843
+ ];
6844
+ break;
6845
+ case BlendingMode.SUPERPOSITION:
6846
+ material.blendFunction = [
6847
+ glContext.ONE,
6848
+ glContext.ONE,
6849
+ glContext.ONE,
6850
+ glContext.ONE
6851
+ ];
6852
+ break;
6853
+ case BlendingMode.MULTIPLY:
6854
+ material.blendFunction = [
6855
+ glContext.DST_COLOR,
6856
+ glContext.ONE_MINUS_SRC_ALPHA,
6857
+ glContext.DST_COLOR,
6858
+ glContext.ONE_MINUS_SRC_ALPHA
6859
+ ];
6860
+ break;
6861
+ case BlendingMode.BRIGHTNESS:
6862
+ material.blendFunction = [
6863
+ glContext.ONE,
6864
+ glContext.ONE_MINUS_SRC_ALPHA,
6865
+ glContext.ONE,
6866
+ glContext.ONE_MINUS_SRC_ALPHA
6867
+ ];
6868
+ break;
6869
+ case BlendingMode.STRONG_LIGHT:
6870
+ material.blendFunction = [
6871
+ glContext.DST_COLOR,
6872
+ glContext.DST_ALPHA,
6873
+ glContext.ZERO,
6874
+ glContext.ONE
6875
+ ];
6876
+ break;
6877
+ case BlendingMode.WEAK_LIGHT:
6878
+ material.blendFunction = [
6879
+ glContext.DST_COLOR,
6880
+ glContext.ZERO,
6881
+ glContext.ZERO,
6882
+ glContext.ONE
6883
+ ];
6884
+ break;
6885
+ default:
6886
+ console.warn("BlendMode " + blendMode + " not in specification, please set blend params separately.");
6887
+ }
6888
+ }
6889
+ function setSideMode(material, side) {
6890
+ if (side === SideMode.DOUBLE) {
6891
+ material.culling = false;
6892
+ } else {
6893
+ material.culling = true;
6894
+ material.frontFace = glContext.CW;
6895
+ material.cullFace = side === SideMode.BACK ? glContext.BACK : glContext.FRONT;
6896
+ }
6897
+ }
6898
+ function setMaskMode(material, maskMode) {
6899
+ switch(maskMode){
6900
+ case undefined:
6901
+ material.stencilTest = false;
6902
+ break;
6903
+ case MaskMode.MASK:
6904
+ material.stencilTest = true;
6905
+ material.stencilFunc = [
6906
+ glContext.ALWAYS,
6907
+ glContext.ALWAYS
6908
+ ];
6909
+ material.stencilOpZPass = [
6910
+ glContext.REPLACE,
6911
+ glContext.REPLACE
6912
+ ];
6913
+ break;
6914
+ case MaskMode.OBSCURED:
6915
+ material.stencilTest = true;
6916
+ material.stencilFunc = [
6917
+ glContext.EQUAL,
6918
+ glContext.EQUAL
6919
+ ];
6920
+ break;
6921
+ case MaskMode.REVERSE_OBSCURED:
6922
+ material.stencilTest = true;
6923
+ material.stencilFunc = [
6924
+ glContext.NOTEQUAL,
6925
+ glContext.NOTEQUAL
6926
+ ];
6927
+ break;
6928
+ case MaskMode.NONE:
6929
+ material.stencilTest = false;
6930
+ break;
6931
+ default:
6932
+ console.warn("MaskMode " + maskMode + " not in specification, please set stencil params seperately.");
6933
+ }
6893
6934
  }
6894
6935
 
6895
6936
  /**
@@ -13102,6 +13143,27 @@ var Vector4Curve = /*#__PURE__*/ function(ValueGetter) {
13102
13143
  };
13103
13144
  return Vector4Curve;
13104
13145
  }(ValueGetter);
13146
+ var Vector2Curve = /*#__PURE__*/ function(ValueGetter) {
13147
+ _inherits(Vector2Curve, ValueGetter);
13148
+ function Vector2Curve() {
13149
+ var _this;
13150
+ _this = ValueGetter.apply(this, arguments) || this;
13151
+ _this.value = new Vector2();
13152
+ return _this;
13153
+ }
13154
+ var _proto = Vector2Curve.prototype;
13155
+ _proto.onCreate = function onCreate(arg) {
13156
+ this.xCurve = createValueGetter(arg[0]);
13157
+ this.yCurve = createValueGetter(arg[1]);
13158
+ };
13159
+ _proto.getValue = function getValue(t) {
13160
+ var x = this.xCurve.getValue(t);
13161
+ var y = this.yCurve.getValue(t);
13162
+ this.value.set(x, y);
13163
+ return this.value;
13164
+ };
13165
+ return Vector2Curve;
13166
+ }(ValueGetter);
13105
13167
 
13106
13168
  var SPRITE_VERTEX_STRIDE = 6;
13107
13169
  var SEMANTIC_PRE_COLOR_ATTACHMENT_0 = "PRE_COLOR_0";
@@ -13165,6 +13227,8 @@ var map$1 = (_obj$3 = {}, _obj$3[ValueType.RANDOM] = function(props) {
13165
13227
  return new ColorCurve(props);
13166
13228
  }, _obj$3[ValueType.VECTOR4_CURVE] = function(props) {
13167
13229
  return new Vector4Curve(props);
13230
+ }, _obj$3[ValueType.VECTOR2_CURVE] = function(props) {
13231
+ return new Vector2Curve(props);
13168
13232
  }, _obj$3);
13169
13233
  function createValueGetter(args) {
13170
13234
  if (!args || !isNaN(+args)) {
@@ -13289,13 +13353,39 @@ var ColorCurve = /*#__PURE__*/ function(ValueGetter) {
13289
13353
  this.color = color;
13290
13354
  this.material.setVector4("_Color", new Vector4().setFromArray(color));
13291
13355
  };
13292
- /**
13293
- * 设置当前 Mesh 的纹理
13294
- * @since 2.0.0
13295
- * @param texture - 纹理对象
13296
- */ _proto.setTexture = function setTexture(texture) {
13297
- this.renderer.texture = texture;
13298
- this.material.setTexture("_MainTex", texture);
13356
+ _proto.setTexture = function setTexture(input) {
13357
+ var _this = this;
13358
+ return _async_to_generator(function() {
13359
+ var texture;
13360
+ return __generator(this, function(_state) {
13361
+ switch(_state.label){
13362
+ case 0:
13363
+ if (!(typeof input === "string")) return [
13364
+ 3,
13365
+ 2
13366
+ ];
13367
+ return [
13368
+ 4,
13369
+ Texture.fromImage(input, _this.item.engine)
13370
+ ];
13371
+ case 1:
13372
+ texture = _state.sent();
13373
+ return [
13374
+ 3,
13375
+ 3
13376
+ ];
13377
+ case 2:
13378
+ texture = input;
13379
+ _state.label = 3;
13380
+ case 3:
13381
+ _this.renderer.texture = texture;
13382
+ _this.material.setTexture("_MainTex", texture);
13383
+ return [
13384
+ 2
13385
+ ];
13386
+ }
13387
+ });
13388
+ })();
13299
13389
  };
13300
13390
  /**
13301
13391
  * @internal
@@ -13557,6 +13647,8 @@ function getImageItemRenderInfo(item) {
13557
13647
  };
13558
13648
  }
13559
13649
 
13650
+ // Based on:
13651
+ // https://github.com/pixijs/pixijs/blob/dev/src/maths/shapes/ShapePrimitive.ts
13560
13652
  var ShapePrimitive = function ShapePrimitive() {
13561
13653
  };
13562
13654
 
@@ -14662,6 +14754,7 @@ function triangulate(contours) {
14662
14754
  return triangleVerts;
14663
14755
  }
14664
14756
 
14757
+ // Based on:
14665
14758
  /**
14666
14759
  * A class to define a shape via user defined coordinates.
14667
14760
  */ var Polygon = /*#__PURE__*/ function(ShapePrimitive) {
@@ -14761,12 +14854,13 @@ function triangulate(contours) {
14761
14854
  var triangles = triangulate([
14762
14855
  points
14763
14856
  ]);
14857
+ var indexStart = vertices.length / 2;
14764
14858
  for(var i = 0; i < triangles.length; i++){
14765
- vertices[verticesOffset + i] = triangles[i];
14859
+ vertices[verticesOffset * 2 + i] = triangles[i];
14766
14860
  }
14767
14861
  var vertexCount = triangles.length / 2;
14768
14862
  for(var i1 = 0; i1 < vertexCount; i1++){
14769
- indices[indicesOffset + i1] = i1;
14863
+ indices[indicesOffset + i1] = indexStart + i1;
14770
14864
  }
14771
14865
  };
14772
14866
  _create_class(Polygon, [
@@ -14888,6 +14982,7 @@ function recursive(x1, y1, x2, y2, x3, y3, x4, y4, points, distanceTolerance, le
14888
14982
  recursive(x1234, y1234, x234, y234, x34, y34, x4, y4, points, distanceTolerance, level + 1);
14889
14983
  }
14890
14984
 
14985
+ // Based on:
14891
14986
  /**
14892
14987
  * The Ellipse object is used to help draw graphics and can also be used to specify a hit area for containers.
14893
14988
  */ var Ellipse = /*#__PURE__*/ function(ShapePrimitive) {
@@ -15094,6 +15189,7 @@ function recursive(x1, y1, x2, y2, x3, y3, x4, y4, points, distanceTolerance, le
15094
15189
  return Ellipse;
15095
15190
  }(ShapePrimitive);
15096
15191
 
15192
+ // Based on:
15097
15193
  var StarType;
15098
15194
  (function(StarType) {
15099
15195
  StarType[StarType["Star"] = 0] = "Star";
@@ -15162,12 +15258,13 @@ var PolyStar = /*#__PURE__*/ function(ShapePrimitive) {
15162
15258
  var triangles = triangulate([
15163
15259
  points
15164
15260
  ]);
15261
+ var indexStart = vertices.length / 2;
15165
15262
  for(var i = 0; i < triangles.length; i++){
15166
- vertices[verticesOffset + i] = triangles[i];
15263
+ vertices[verticesOffset * 2 + i] = triangles[i];
15167
15264
  }
15168
15265
  var vertexCount = triangles.length / 2;
15169
15266
  for(var i1 = 0; i1 < vertexCount; i1++){
15170
- indices[indicesOffset + i1] = i1;
15267
+ indices[indicesOffset + i1] = indexStart + i1;
15171
15268
  }
15172
15269
  };
15173
15270
  _proto.buildStarPath = function buildStarPath() {
@@ -15238,6 +15335,7 @@ var PolyStar = /*#__PURE__*/ function(ShapePrimitive) {
15238
15335
  return PolyStar;
15239
15336
  }(ShapePrimitive);
15240
15337
 
15338
+ // Based on:
15241
15339
  // const tempPoints = [new Point(), new Point(), new Point(), new Point()];
15242
15340
  /**
15243
15341
  * The `Rectangle` object is an area defined by its position, as indicated by its upper-left corner
@@ -15561,6 +15659,7 @@ var PolyStar = /*#__PURE__*/ function(ShapePrimitive) {
15561
15659
  return Rectangle;
15562
15660
  }(ShapePrimitive);
15563
15661
 
15662
+ // Based on:
15564
15663
  var ShapePath = /*#__PURE__*/ function() {
15565
15664
  function ShapePath(graphicsPath) {
15566
15665
  this.graphicsPath = graphicsPath;
@@ -15719,6 +15818,7 @@ var ShapePath = /*#__PURE__*/ function() {
15719
15818
  return ShapePath;
15720
15819
  }();
15721
15820
 
15821
+ // Based on:
15722
15822
  var GraphicsPath = /*#__PURE__*/ function() {
15723
15823
  function GraphicsPath() {
15724
15824
  this.instructions = [];
@@ -15856,14 +15956,433 @@ var GraphicsPath = /*#__PURE__*/ function() {
15856
15956
  return GraphicsPath;
15857
15957
  }();
15858
15958
 
15959
+ // Based on:
15960
+ /**
15961
+ * The Point object represents a location in a two-dimensional coordinate system, where `x` represents
15962
+ * the position on the horizontal axis and `y` represents the position on the vertical axis.
15963
+ */ var Point = /*#__PURE__*/ function() {
15964
+ function Point(x, y) {
15965
+ if (x === void 0) x = 0;
15966
+ if (y === void 0) y = 0;
15967
+ /**
15968
+ * Position of the point on the x axis
15969
+ */ this.x = 0;
15970
+ /**
15971
+ * Position of the point on the y axis
15972
+ */ this.y = 0;
15973
+ this.x = x;
15974
+ this.y = y;
15975
+ }
15976
+ var _proto = Point.prototype;
15977
+ /**
15978
+ * Creates a clone of this point
15979
+ * @returns A clone of this point
15980
+ */ _proto.clone = function clone() {
15981
+ return new Point(this.x, this.y);
15982
+ };
15983
+ /**
15984
+ * Copies `x` and `y` from the given point into this point
15985
+ * @param p - The point to copy from
15986
+ * @returns The point instance itself
15987
+ */ _proto.copyFrom = function copyFrom(p) {
15988
+ this.set(p.x, p.y);
15989
+ return this;
15990
+ };
15991
+ /**
15992
+ * Copies this point's x and y into the given point (`p`).
15993
+ * @param p - The point to copy to. Can be any of type that is or extends `PointData`
15994
+ * @returns The point (`p`) with values updated
15995
+ */ _proto.copyTo = function copyTo(p) {
15996
+ p.set(this.x, this.y);
15997
+ return p;
15998
+ };
15999
+ /**
16000
+ * Accepts another point (`p`) and returns `true` if the given point is equal to this point
16001
+ * @param p - The point to check
16002
+ * @returns Returns `true` if both `x` and `y` are equal
16003
+ */ _proto.equals = function equals(p) {
16004
+ return p.x === this.x && p.y === this.y;
16005
+ };
16006
+ /**
16007
+ * Sets the point to a new `x` and `y` position.
16008
+ * If `y` is omitted, both `x` and `y` will be set to `x`.
16009
+ * @param {number} [x=0] - position of the point on the `x` axis
16010
+ * @param {number} [y=x] - position of the point on the `y` axis
16011
+ * @returns The point instance itself
16012
+ */ _proto.set = function set(x, y) {
16013
+ if (x === void 0) x = 0;
16014
+ if (y === void 0) y = x;
16015
+ this.x = x;
16016
+ this.y = y;
16017
+ return this;
16018
+ };
16019
+ _create_class(Point, null, [
16020
+ {
16021
+ key: "shared",
16022
+ get: /**
16023
+ * A static Point object with `x` and `y` values of `0`. Can be used to avoid creating new objects multiple times.
16024
+ * @readonly
16025
+ */ function get() {
16026
+ tempPoint.x = 0;
16027
+ tempPoint.y = 0;
16028
+ return tempPoint;
16029
+ }
16030
+ }
16031
+ ]);
16032
+ return Point;
16033
+ }();
16034
+ var tempPoint = new Point();
16035
+
16036
+ // Based on:
16037
+ var closePointEps = 1e-4;
16038
+ var curveEps = 0.0001;
16039
+ /**
16040
+ * Buffers vertices to draw a square cap.
16041
+ *
16042
+ * @internal
16043
+ * @private
16044
+ * @param x - X-coord of end point
16045
+ * @param y - Y-coord of end point
16046
+ * @param nx - X-coord of line normal pointing inside
16047
+ * @param ny - Y-coord of line normal pointing inside
16048
+ * @param innerWeight - Weight of inner points
16049
+ * @param outerWeight - Weight of outer points
16050
+ * @param clockwise - Whether the cap is drawn clockwise
16051
+ * @param verts - vertex buffer
16052
+ * @returns - no. of vertices pushed
16053
+ */ function square(x, y, nx, ny, innerWeight, outerWeight, clockwise, /* rotation for square (true at left end, false at right end) */ verts) {
16054
+ var ix = x - nx * innerWeight;
16055
+ var iy = y - ny * innerWeight;
16056
+ var ox = x + nx * outerWeight;
16057
+ var oy = y + ny * outerWeight;
16058
+ /* Rotate nx,ny for extension vector */ var exx;
16059
+ var eyy;
16060
+ if (clockwise) {
16061
+ exx = ny;
16062
+ eyy = -nx;
16063
+ } else {
16064
+ exx = -ny;
16065
+ eyy = nx;
16066
+ }
16067
+ /* [i|0]x,y extended at cap */ var eix = ix + exx;
16068
+ var eiy = iy + eyy;
16069
+ var eox = ox + exx;
16070
+ var eoy = oy + eyy;
16071
+ /* Square itself must be inserted clockwise*/ verts.push(eix, eiy);
16072
+ verts.push(eox, eoy);
16073
+ return 2;
16074
+ }
16075
+ /**
16076
+ * Buffers vertices to draw an arc at the line joint or cap.
16077
+ *
16078
+ * @internal
16079
+ * @private
16080
+ * @param cx - X-coord of center
16081
+ * @param cy - Y-coord of center
16082
+ * @param sx - X-coord of arc start
16083
+ * @param sy - Y-coord of arc start
16084
+ * @param ex - X-coord of arc end
16085
+ * @param ey - Y-coord of arc end
16086
+ * @param verts - buffer of vertices
16087
+ * @param clockwise - orientation of vertices
16088
+ * @returns - no. of vertices pushed
16089
+ */ function round(cx, cy, sx, sy, ex, ey, verts, clockwise) {
16090
+ var cx2p0x = sx - cx;
16091
+ var cy2p0y = sy - cy;
16092
+ var angle0 = Math.atan2(cx2p0x, cy2p0y);
16093
+ var angle1 = Math.atan2(ex - cx, ey - cy);
16094
+ if (clockwise && angle0 < angle1) {
16095
+ angle0 += Math.PI * 2;
16096
+ } else if (!clockwise && angle0 > angle1) {
16097
+ angle1 += Math.PI * 2;
16098
+ }
16099
+ var startAngle = angle0;
16100
+ var angleDiff = angle1 - angle0;
16101
+ var absAngleDiff = Math.abs(angleDiff);
16102
+ var radius = Math.sqrt(cx2p0x * cx2p0x + cy2p0y * cy2p0y);
16103
+ var segCount = (15 * absAngleDiff * Math.sqrt(radius) / Math.PI >> 0) + 1;
16104
+ var angleInc = angleDiff / segCount;
16105
+ startAngle += angleInc;
16106
+ if (clockwise) {
16107
+ verts.push(cx, cy);
16108
+ verts.push(sx, sy);
16109
+ for(var i = 1, angle = startAngle; i < segCount; i++, angle += angleInc){
16110
+ verts.push(cx, cy);
16111
+ verts.push(cx + Math.sin(angle) * radius, cy + Math.cos(angle) * radius);
16112
+ }
16113
+ verts.push(cx, cy);
16114
+ verts.push(ex, ey);
16115
+ } else {
16116
+ verts.push(sx, sy);
16117
+ verts.push(cx, cy);
16118
+ for(var i1 = 1, angle2 = startAngle; i1 < segCount; i1++, angle2 += angleInc){
16119
+ verts.push(cx + Math.sin(angle2) * radius, cy + Math.cos(angle2) * radius);
16120
+ verts.push(cx, cy);
16121
+ }
16122
+ verts.push(ex, ey);
16123
+ verts.push(cx, cy);
16124
+ }
16125
+ return segCount * 2;
16126
+ }
16127
+ function getOrientationOfPoints(points) {
16128
+ var m = points.length;
16129
+ if (m < 6) {
16130
+ return 1;
16131
+ }
16132
+ var area = 0;
16133
+ for(var i = 0, x1 = points[m - 2], y1 = points[m - 1]; i < m; i += 2){
16134
+ var x2 = points[i];
16135
+ var y2 = points[i + 1];
16136
+ area += (x2 - x1) * (y2 + y1);
16137
+ x1 = x2;
16138
+ y1 = y2;
16139
+ }
16140
+ if (area < 0) {
16141
+ return -1;
16142
+ }
16143
+ return 1;
16144
+ }
16145
+ /**
16146
+ * Builds a line to draw using the polygon method.
16147
+ * @param points
16148
+ * @param lineStyle
16149
+ * @param flipAlignment
16150
+ * @param closed
16151
+ * @param vertices
16152
+ * @param _verticesStride
16153
+ * @param _verticesOffset
16154
+ * @param indices
16155
+ * @param _indicesOffset
16156
+ */ function buildLine(points, lineStyle, flipAlignment, closed, // alignment:number,
16157
+ vertices, _verticesStride, _verticesOffset, indices, _indicesOffset) {
16158
+ // const shape = graphicsData.shape as Polygon;
16159
+ // let points = graphicsData.points || shape.points.slice();
16160
+ var eps = closePointEps;
16161
+ if (points.length === 0) {
16162
+ return;
16163
+ }
16164
+ var style = lineStyle;
16165
+ var alignment = style.alignment;
16166
+ if (lineStyle.alignment !== 0.5) {
16167
+ // rotate the points!
16168
+ var orientation = getOrientationOfPoints(points);
16169
+ if (flipAlignment) {
16170
+ orientation *= -1;
16171
+ }
16172
+ alignment = (alignment - 0.5) * orientation + 0.5;
16173
+ }
16174
+ // get first and last point.. figure out the middle!
16175
+ var firstPoint = new Point(points[0], points[1]);
16176
+ var lastPoint = new Point(points[points.length - 2], points[points.length - 1]);
16177
+ var closedShape = closed;
16178
+ var closedPath = Math.abs(firstPoint.x - lastPoint.x) < eps && Math.abs(firstPoint.y - lastPoint.y) < eps;
16179
+ // if the first point is the last point - gonna have issues :)
16180
+ if (closedShape) {
16181
+ // need to clone as we are going to slightly modify the shape..
16182
+ points = points.slice();
16183
+ if (closedPath) {
16184
+ points.pop();
16185
+ points.pop();
16186
+ lastPoint.set(points[points.length - 2], points[points.length - 1]);
16187
+ }
16188
+ var midPointX = (firstPoint.x + lastPoint.x) * 0.5;
16189
+ var midPointY = (lastPoint.y + firstPoint.y) * 0.5;
16190
+ points.unshift(midPointX, midPointY);
16191
+ points.push(midPointX, midPointY);
16192
+ }
16193
+ var verts = vertices;
16194
+ var length = points.length / 2;
16195
+ var indexCount = points.length;
16196
+ var indexStart = verts.length / 2;
16197
+ // Max. inner and outer width
16198
+ var width = style.width / 2;
16199
+ var widthSquared = width * width;
16200
+ var miterLimitSquared = style.miterLimit * style.miterLimit;
16201
+ /* Line segments of interest where (x1,y1) forms the corner. */ var x0 = points[0];
16202
+ var y0 = points[1];
16203
+ var x1 = points[2];
16204
+ var y1 = points[3];
16205
+ var x2 = 0;
16206
+ var y2 = 0;
16207
+ /* perp[?](x|y) = the line normal with magnitude lineWidth. */ var perpX = -(y0 - y1);
16208
+ var perpY = x0 - x1;
16209
+ var perp1x = 0;
16210
+ var perp1y = 0;
16211
+ var dist = Math.sqrt(perpX * perpX + perpY * perpY);
16212
+ perpX /= dist;
16213
+ perpY /= dist;
16214
+ perpX *= width;
16215
+ perpY *= width;
16216
+ var ratio = alignment; // 0.5;
16217
+ var innerWeight = (1 - ratio) * 2;
16218
+ var outerWeight = ratio * 2;
16219
+ if (!closedShape) {
16220
+ if (style.cap === "round") {
16221
+ indexCount += round(x0 - perpX * (innerWeight - outerWeight) * 0.5, y0 - perpY * (innerWeight - outerWeight) * 0.5, x0 - perpX * innerWeight, y0 - perpY * innerWeight, x0 + perpX * outerWeight, y0 + perpY * outerWeight, verts, true) + 2;
16222
+ } else if (style.cap === "square") {
16223
+ indexCount += square(x0, y0, perpX, perpY, innerWeight, outerWeight, true, verts);
16224
+ }
16225
+ }
16226
+ // Push first point (below & above vertices)
16227
+ verts.push(x0 - perpX * innerWeight, y0 - perpY * innerWeight);
16228
+ verts.push(x0 + perpX * outerWeight, y0 + perpY * outerWeight);
16229
+ for(var i = 1; i < length - 1; ++i){
16230
+ x0 = points[(i - 1) * 2];
16231
+ y0 = points[(i - 1) * 2 + 1];
16232
+ x1 = points[i * 2];
16233
+ y1 = points[i * 2 + 1];
16234
+ x2 = points[(i + 1) * 2];
16235
+ y2 = points[(i + 1) * 2 + 1];
16236
+ perpX = -(y0 - y1);
16237
+ perpY = x0 - x1;
16238
+ dist = Math.sqrt(perpX * perpX + perpY * perpY);
16239
+ perpX /= dist;
16240
+ perpY /= dist;
16241
+ perpX *= width;
16242
+ perpY *= width;
16243
+ perp1x = -(y1 - y2);
16244
+ perp1y = x1 - x2;
16245
+ dist = Math.sqrt(perp1x * perp1x + perp1y * perp1y);
16246
+ perp1x /= dist;
16247
+ perp1y /= dist;
16248
+ perp1x *= width;
16249
+ perp1y *= width;
16250
+ /* d[x|y](0|1) = the component displacement between points p(0,1|1,2) */ var dx0 = x1 - x0;
16251
+ var dy0 = y0 - y1;
16252
+ var dx1 = x1 - x2;
16253
+ var dy1 = y2 - y1;
16254
+ /* +ve if internal angle < 90 degree, -ve if internal angle > 90 degree. */ var dot = dx0 * dx1 + dy0 * dy1;
16255
+ /* +ve if internal angle counterclockwise, -ve if internal angle clockwise. */ var cross = dy0 * dx1 - dy1 * dx0;
16256
+ var clockwise = cross < 0;
16257
+ /* Going nearly parallel? */ /* atan(0.001) ~= 0.001 rad ~= 0.057 degree */ if (Math.abs(cross) < 0.001 * Math.abs(dot)) {
16258
+ verts.push(x1 - perpX * innerWeight, y1 - perpY * innerWeight);
16259
+ verts.push(x1 + perpX * outerWeight, y1 + perpY * outerWeight);
16260
+ /* 180 degree corner? */ if (dot >= 0) {
16261
+ if (style.join === "round") {
16262
+ indexCount += round(x1, y1, x1 - perpX * innerWeight, y1 - perpY * innerWeight, x1 - perp1x * innerWeight, y1 - perp1y * innerWeight, verts, false) + 4;
16263
+ } else {
16264
+ indexCount += 2;
16265
+ }
16266
+ verts.push(x1 - perp1x * outerWeight, y1 - perp1y * outerWeight);
16267
+ verts.push(x1 + perp1x * innerWeight, y1 + perp1y * innerWeight);
16268
+ }
16269
+ continue;
16270
+ }
16271
+ /* p[x|y] is the miter point. pDist is the distance between miter point and p1. */ var c1 = (-perpX + x0) * (-perpY + y1) - (-perpX + x1) * (-perpY + y0);
16272
+ var c2 = (-perp1x + x2) * (-perp1y + y1) - (-perp1x + x1) * (-perp1y + y2);
16273
+ var px = (dx0 * c2 - dx1 * c1) / cross;
16274
+ var py = (dy1 * c1 - dy0 * c2) / cross;
16275
+ var pDist = (px - x1) * (px - x1) + (py - y1) * (py - y1);
16276
+ /* Inner miter point */ var imx = x1 + (px - x1) * innerWeight;
16277
+ var imy = y1 + (py - y1) * innerWeight;
16278
+ /* Outer miter point */ var omx = x1 - (px - x1) * outerWeight;
16279
+ var omy = y1 - (py - y1) * outerWeight;
16280
+ /* Is the inside miter point too far away, creating a spike? */ var smallerInsideSegmentSq = Math.min(dx0 * dx0 + dy0 * dy0, dx1 * dx1 + dy1 * dy1);
16281
+ var insideWeight = clockwise ? innerWeight : outerWeight;
16282
+ var smallerInsideDiagonalSq = smallerInsideSegmentSq + insideWeight * insideWeight * widthSquared;
16283
+ var insideMiterOk = pDist <= smallerInsideDiagonalSq;
16284
+ if (insideMiterOk) {
16285
+ if (style.join === "bevel" || pDist / widthSquared > miterLimitSquared) {
16286
+ if (clockwise) /* rotating at inner angle */ {
16287
+ verts.push(imx, imy); // inner miter point
16288
+ verts.push(x1 + perpX * outerWeight, y1 + perpY * outerWeight); // first segment's outer vertex
16289
+ verts.push(imx, imy); // inner miter point
16290
+ verts.push(x1 + perp1x * outerWeight, y1 + perp1y * outerWeight); // second segment's outer vertex
16291
+ } else /* rotating at outer angle */ {
16292
+ verts.push(x1 - perpX * innerWeight, y1 - perpY * innerWeight); // first segment's inner vertex
16293
+ verts.push(omx, omy); // outer miter point
16294
+ verts.push(x1 - perp1x * innerWeight, y1 - perp1y * innerWeight); // second segment's outer vertex
16295
+ verts.push(omx, omy); // outer miter point
16296
+ }
16297
+ indexCount += 2;
16298
+ } else if (style.join === "round") {
16299
+ if (clockwise) /* arc is outside */ {
16300
+ verts.push(imx, imy);
16301
+ verts.push(x1 + perpX * outerWeight, y1 + perpY * outerWeight);
16302
+ indexCount += round(x1, y1, x1 + perpX * outerWeight, y1 + perpY * outerWeight, x1 + perp1x * outerWeight, y1 + perp1y * outerWeight, verts, true) + 4;
16303
+ verts.push(imx, imy);
16304
+ verts.push(x1 + perp1x * outerWeight, y1 + perp1y * outerWeight);
16305
+ } else /* arc is inside */ {
16306
+ verts.push(x1 - perpX * innerWeight, y1 - perpY * innerWeight);
16307
+ verts.push(omx, omy);
16308
+ indexCount += round(x1, y1, x1 - perpX * innerWeight, y1 - perpY * innerWeight, x1 - perp1x * innerWeight, y1 - perp1y * innerWeight, verts, false) + 4;
16309
+ verts.push(x1 - perp1x * innerWeight, y1 - perp1y * innerWeight);
16310
+ verts.push(omx, omy);
16311
+ }
16312
+ } else {
16313
+ verts.push(imx, imy);
16314
+ verts.push(omx, omy);
16315
+ }
16316
+ } else {
16317
+ verts.push(x1 - perpX * innerWeight, y1 - perpY * innerWeight); // first segment's inner vertex
16318
+ verts.push(x1 + perpX * outerWeight, y1 + perpY * outerWeight); // first segment's outer vertex
16319
+ if (style.join === "round") {
16320
+ if (clockwise) /* arc is outside */ {
16321
+ indexCount += round(x1, y1, x1 + perpX * outerWeight, y1 + perpY * outerWeight, x1 + perp1x * outerWeight, y1 + perp1y * outerWeight, verts, true) + 2;
16322
+ } else /* arc is inside */ {
16323
+ indexCount += round(x1, y1, x1 - perpX * innerWeight, y1 - perpY * innerWeight, x1 - perp1x * innerWeight, y1 - perp1y * innerWeight, verts, false) + 2;
16324
+ }
16325
+ } else if (style.join === "miter" && pDist / widthSquared <= miterLimitSquared) {
16326
+ if (clockwise) {
16327
+ verts.push(omx, omy); // inner miter point
16328
+ verts.push(omx, omy); // inner miter point
16329
+ } else {
16330
+ verts.push(imx, imy); // outer miter point
16331
+ verts.push(imx, imy); // outer miter point
16332
+ }
16333
+ indexCount += 2;
16334
+ }
16335
+ verts.push(x1 - perp1x * innerWeight, y1 - perp1y * innerWeight); // second segment's inner vertex
16336
+ verts.push(x1 + perp1x * outerWeight, y1 + perp1y * outerWeight); // second segment's outer vertex
16337
+ indexCount += 2;
16338
+ }
16339
+ }
16340
+ x0 = points[(length - 2) * 2];
16341
+ y0 = points[(length - 2) * 2 + 1];
16342
+ x1 = points[(length - 1) * 2];
16343
+ y1 = points[(length - 1) * 2 + 1];
16344
+ perpX = -(y0 - y1);
16345
+ perpY = x0 - x1;
16346
+ dist = Math.sqrt(perpX * perpX + perpY * perpY);
16347
+ perpX /= dist;
16348
+ perpY /= dist;
16349
+ perpX *= width;
16350
+ perpY *= width;
16351
+ verts.push(x1 - perpX * innerWeight, y1 - perpY * innerWeight);
16352
+ verts.push(x1 + perpX * outerWeight, y1 + perpY * outerWeight);
16353
+ if (!closedShape) {
16354
+ if (style.cap === "round") {
16355
+ indexCount += round(x1 - perpX * (innerWeight - outerWeight) * 0.5, y1 - perpY * (innerWeight - outerWeight) * 0.5, x1 - perpX * innerWeight, y1 - perpY * innerWeight, x1 + perpX * outerWeight, y1 + perpY * outerWeight, verts, false) + 2;
16356
+ } else if (style.cap === "square") {
16357
+ indexCount += square(x1, y1, perpX, perpY, innerWeight, outerWeight, false, verts);
16358
+ }
16359
+ }
16360
+ // const indices = graphicsGeometry.indices;
16361
+ var eps2 = curveEps * curveEps;
16362
+ // indices.push(indexStart);
16363
+ for(var i1 = indexStart; i1 < indexCount + indexStart - 2; ++i1){
16364
+ x0 = verts[i1 * 2];
16365
+ y0 = verts[i1 * 2 + 1];
16366
+ x1 = verts[(i1 + 1) * 2];
16367
+ y1 = verts[(i1 + 1) * 2 + 1];
16368
+ x2 = verts[(i1 + 2) * 2];
16369
+ y2 = verts[(i1 + 2) * 2 + 1];
16370
+ /* Skip zero area triangles */ if (Math.abs(x0 * (y1 - y2) + x1 * (y2 - y0) + x2 * (y0 - y1)) < eps2) {
16371
+ continue;
16372
+ }
16373
+ indices.push(i1, i1 + 1, i1 + 2);
16374
+ }
16375
+ }
16376
+
15859
16377
  var ShapeComponent = /*#__PURE__*/ function(MeshComponent) {
15860
16378
  _inherits(ShapeComponent, MeshComponent);
15861
16379
  function ShapeComponent(engine) {
15862
16380
  var _this;
15863
16381
  _this = MeshComponent.call(this, engine) || this;
15864
- _this.path = new GraphicsPath();
16382
+ _this.isStroke = false;
16383
+ _this.graphicsPath = new GraphicsPath();
15865
16384
  _this.curveValues = [];
15866
- _this.animated = true;
16385
+ _this.shapeDirty = true;
15867
16386
  _this.vert = "\nprecision highp float;\n\nattribute vec3 aPos;//x y\n\nuniform mat4 effects_MatrixVP;\nuniform mat4 effects_MatrixInvV;\nuniform mat4 effects_ObjectToWorld;\n\nvoid main() {\n vec4 pos = vec4(aPos.xyz, 1.0);\n gl_Position = effects_MatrixVP * effects_ObjectToWorld * pos;\n}\n";
15868
16387
  _this.frag = "\nprecision highp float;\n\nuniform vec4 _Color;\n\nvoid main() {\n vec4 color = _Color;\n color.rgb *= color.a;\n gl_FragColor = color;\n}\n";
15869
16388
  if (!_this.geometry) {
@@ -15911,6 +16430,13 @@ var ShapeComponent = /*#__PURE__*/ function(MeshComponent) {
15911
16430
  _this.material.depthTest = true;
15912
16431
  _this.material.blending = true;
15913
16432
  }
16433
+ _this.strokeAttributes = {
16434
+ width: 1,
16435
+ alignment: 0.5,
16436
+ cap: "butt",
16437
+ join: "miter",
16438
+ miterLimit: 10
16439
+ };
15914
16440
  return _this;
15915
16441
  }
15916
16442
  var _proto = ShapeComponent.prototype;
@@ -15918,10 +16444,10 @@ var ShapeComponent = /*#__PURE__*/ function(MeshComponent) {
15918
16444
  this.item.getHitTestParams = this.getHitTestParams;
15919
16445
  };
15920
16446
  _proto.onUpdate = function onUpdate(dt) {
15921
- if (this.animated) {
16447
+ if (this.shapeDirty) {
15922
16448
  this.buildPath(this.data);
15923
- this.buildGeometryFromPath(this.path.shapePath);
15924
- this.animated = false;
16449
+ this.buildGeometryFromPath(this.graphicsPath.shapePath);
16450
+ this.shapeDirty = false;
15925
16451
  }
15926
16452
  };
15927
16453
  _proto.buildGeometryFromPath = function buildGeometryFromPath(shapePath) {
@@ -15936,7 +16462,13 @@ var ShapeComponent = /*#__PURE__*/ function(MeshComponent) {
15936
16462
  var indexOffset = indices.length;
15937
16463
  var vertOffset = vertices.length / 2;
15938
16464
  shape.build(points);
15939
- shape.triangulate(points, vertices, vertOffset, indices, indexOffset);
16465
+ if (!this.isStroke) {
16466
+ shape.triangulate(points, vertices, vertOffset, indices, indexOffset);
16467
+ } else {
16468
+ var close = true;
16469
+ var lineStyle = this.strokeAttributes;
16470
+ buildLine(points, lineStyle, false, close, vertices, 2, vertOffset, indices);
16471
+ }
15940
16472
  }
15941
16473
  var vertexCount = vertices.length / 2;
15942
16474
  // get the current attribute and index arrays from the geometry, avoiding re-creation
@@ -15949,7 +16481,7 @@ var ShapeComponent = /*#__PURE__*/ function(MeshComponent) {
15949
16481
  if (!uvArray || uvArray.length < vertexCount * 2) {
15950
16482
  uvArray = new Float32Array(vertexCount * 2);
15951
16483
  }
15952
- if (!indexArray) {
16484
+ if (!indexArray || indexArray.length < indices.length) {
15953
16485
  indexArray = new Uint16Array(indices.length);
15954
16486
  }
15955
16487
  // set position and uv attribute array
@@ -15972,7 +16504,7 @@ var ShapeComponent = /*#__PURE__*/ function(MeshComponent) {
15972
16504
  this.geometry.setDrawCount(indices.length);
15973
16505
  };
15974
16506
  _proto.buildPath = function buildPath(data) {
15975
- this.path.clear();
16507
+ this.graphicsPath.clear();
15976
16508
  var shapeData = data;
15977
16509
  switch(shapeData.type){
15978
16510
  case ShapePrimitiveType.Custom:
@@ -15981,9 +16513,9 @@ var ShapeComponent = /*#__PURE__*/ function(MeshComponent) {
15981
16513
  var points = customData.points;
15982
16514
  var easingIns = customData.easingIns;
15983
16515
  var easingOuts = customData.easingOuts;
15984
- this.curveValues = [];
15985
16516
  for(var _iterator = _create_for_of_iterator_helper_loose(customData.shapes), _step; !(_step = _iterator()).done;){
15986
16517
  var shape = _step.value;
16518
+ this.curveValues = [];
15987
16519
  this.setFillColor(shape.fill);
15988
16520
  var indices = shape.indexes;
15989
16521
  for(var i = 1; i < indices.length; i++){
@@ -16001,42 +16533,42 @@ var ShapeComponent = /*#__PURE__*/ function(MeshComponent) {
16001
16533
  controlPoint1: easingOuts[indices[indices.length - 1].easingOut],
16002
16534
  controlPoint2: easingIns[indices[0].easingIn]
16003
16535
  });
16004
- }
16005
- this.path.moveTo(this.curveValues[this.curveValues.length - 1].point.x, this.curveValues[this.curveValues.length - 1].point.y);
16006
- for(var _iterator1 = _create_for_of_iterator_helper_loose(this.curveValues), _step1; !(_step1 = _iterator1()).done;){
16007
- var curveValue = _step1.value;
16008
- var point = curveValue.point;
16009
- var control1 = curveValue.controlPoint1;
16010
- var control2 = curveValue.controlPoint2;
16011
- this.path.bezierCurveTo(control1.x, control1.y, control2.x, control2.y, point.x, point.y, 1);
16536
+ this.graphicsPath.moveTo(this.curveValues[this.curveValues.length - 1].point.x, this.curveValues[this.curveValues.length - 1].point.y);
16537
+ for(var _iterator1 = _create_for_of_iterator_helper_loose(this.curveValues), _step1; !(_step1 = _iterator1()).done;){
16538
+ var curveValue = _step1.value;
16539
+ var point = curveValue.point;
16540
+ var control1 = curveValue.controlPoint1;
16541
+ var control2 = curveValue.controlPoint2;
16542
+ this.graphicsPath.bezierCurveTo(control1.x, control1.y, control2.x, control2.y, point.x, point.y, 1);
16543
+ }
16012
16544
  }
16013
16545
  break;
16014
16546
  }
16015
16547
  case ShapePrimitiveType.Ellipse:
16016
16548
  {
16017
16549
  var ellipseData = shapeData;
16018
- this.path.ellipse(0, 0, ellipseData.xRadius, ellipseData.yRadius);
16550
+ this.graphicsPath.ellipse(0, 0, ellipseData.xRadius, ellipseData.yRadius);
16019
16551
  this.setFillColor(ellipseData.fill);
16020
16552
  break;
16021
16553
  }
16022
16554
  case ShapePrimitiveType.Rectangle:
16023
16555
  {
16024
16556
  var rectangleData = shapeData;
16025
- this.path.rect(-rectangleData.width / 2, -rectangleData.height / 2, rectangleData.width, rectangleData.height);
16557
+ this.graphicsPath.rect(-rectangleData.width / 2, -rectangleData.height / 2, rectangleData.width, rectangleData.height);
16026
16558
  this.setFillColor(rectangleData.fill);
16027
16559
  break;
16028
16560
  }
16029
16561
  case ShapePrimitiveType.Star:
16030
16562
  {
16031
16563
  var starData = shapeData;
16032
- this.path.polyStar(starData.pointCount, starData.outerRadius, starData.innerRadius, starData.outerRoundness, starData.innerRoundness, StarType.Star);
16564
+ this.graphicsPath.polyStar(starData.pointCount, starData.outerRadius, starData.innerRadius, starData.outerRoundness, starData.innerRoundness, StarType.Star);
16033
16565
  this.setFillColor(starData.fill);
16034
16566
  break;
16035
16567
  }
16036
16568
  case ShapePrimitiveType.Polygon:
16037
16569
  {
16038
16570
  var polygonData = shapeData;
16039
- this.path.polyStar(polygonData.pointCount, polygonData.radius, polygonData.radius, polygonData.roundness, polygonData.roundness, StarType.Polygon);
16571
+ this.graphicsPath.polyStar(polygonData.pointCount, polygonData.radius, polygonData.radius, polygonData.roundness, polygonData.roundness, StarType.Polygon);
16040
16572
  this.setFillColor(polygonData.fill);
16041
16573
  break;
16042
16574
  }
@@ -16051,6 +16583,12 @@ var ShapeComponent = /*#__PURE__*/ function(MeshComponent) {
16051
16583
  _proto.fromData = function fromData(data) {
16052
16584
  MeshComponent.prototype.fromData.call(this, data);
16053
16585
  this.data = data;
16586
+ this.shapeDirty = true;
16587
+ var strokeParam = data.stroke;
16588
+ if (strokeParam) {
16589
+ this.isStroke = true;
16590
+ this.strokeAttributes.width = strokeParam.width;
16591
+ }
16054
16592
  var material = this.material;
16055
16593
  //@ts-expect-error // TODO 新版蒙版上线后重构
16056
16594
  material.stencilRef = data.renderer.mask !== undefined ? [
@@ -16060,6 +16598,15 @@ var ShapeComponent = /*#__PURE__*/ function(MeshComponent) {
16060
16598
  //@ts-expect-error // TODO 新版蒙版上线后重构
16061
16599
  setMaskMode(material, data.renderer.maskMode);
16062
16600
  };
16601
+ _create_class(ShapeComponent, [
16602
+ {
16603
+ key: "path",
16604
+ get: function get() {
16605
+ this.shapeDirty = true;
16606
+ return this.data;
16607
+ }
16608
+ }
16609
+ ]);
16063
16610
  return ShapeComponent;
16064
16611
  }(MeshComponent);
16065
16612
  ShapeComponent = __decorate([
@@ -18747,10 +19294,19 @@ var TEMPLATE_USE_OFFSCREEN_CANVAS = "offscreen_canvas";
18747
19294
  // 后处理配置相关
18748
19295
  var POST_PROCESS_SETTINGS = "post_process_settings";
18749
19296
  var config = {};
18750
- function getConfig(name) {
19297
+ /**
19298
+ * 获取全局配置项
19299
+ * @param name
19300
+ * @returns
19301
+ */ function getConfig(name) {
18751
19302
  return config[name];
18752
19303
  }
18753
- function setConfig(name, value) {
19304
+ /**
19305
+ * 设置全局配置项
19306
+ * @param name
19307
+ * @param value
19308
+ * @returns
19309
+ */ function setConfig(name, value) {
18754
19310
  return config[name] = value;
18755
19311
  }
18756
19312
 
@@ -23097,88 +23653,81 @@ var PropertyClipPlayable = /*#__PURE__*/ function(Playable) {
23097
23653
  return PropertyClipPlayable;
23098
23654
  }(Playable);
23099
23655
 
23100
- var ColorPropertyMixerPlayable = /*#__PURE__*/ function(TrackMixerPlayable) {
23101
- _inherits(ColorPropertyMixerPlayable, TrackMixerPlayable);
23102
- function ColorPropertyMixerPlayable() {
23656
+ var PropertyMixerPlayable = /*#__PURE__*/ function(TrackMixerPlayable) {
23657
+ _inherits(PropertyMixerPlayable, TrackMixerPlayable);
23658
+ function PropertyMixerPlayable() {
23103
23659
  var _this;
23104
23660
  _this = TrackMixerPlayable.apply(this, arguments) || this;
23105
23661
  _this.propertyName = "";
23106
23662
  return _this;
23107
23663
  }
23108
- var _proto = ColorPropertyMixerPlayable.prototype;
23664
+ var _proto = PropertyMixerPlayable.prototype;
23109
23665
  _proto.evaluate = function evaluate(context) {
23110
23666
  var boundObject = context.output.getUserData();
23111
23667
  if (!boundObject) {
23112
23668
  return;
23113
23669
  }
23114
23670
  var hasInput = false;
23115
- var value = boundObject[this.propertyName];
23116
- if (!_instanceof1(value, Color)) {
23671
+ this.propertyValue = boundObject[this.propertyName];
23672
+ if (this.propertyValue === undefined || this.propertyValue === null) {
23117
23673
  return;
23118
23674
  }
23119
- value.setZero();
23675
+ this.resetPropertyValue();
23120
23676
  // evaluate the curve
23121
23677
  for(var i = 0; i < this.clipPlayables.length; i++){
23122
23678
  var weight = this.getClipWeight(i);
23123
23679
  if (weight > 0) {
23124
23680
  var propertyClipPlayable = this.getClipPlayable(i);
23125
23681
  if (!_instanceof1(propertyClipPlayable, PropertyClipPlayable)) {
23126
- console.error("ColorPropertyMixerPlayable received incompatible input");
23682
+ console.error("PropertyTrack added non-PropertyPlayableAsset");
23127
23683
  continue;
23128
23684
  }
23129
23685
  var curveValue = propertyClipPlayable.value;
23130
- value.r += curveValue.r * weight;
23131
- value.g += curveValue.g * weight;
23132
- value.b += curveValue.b * weight;
23133
- value.a += curveValue.a * weight;
23686
+ this.addWeightedValue(curveValue, weight);
23134
23687
  hasInput = true;
23135
23688
  }
23136
23689
  }
23137
23690
  // set value
23138
23691
  if (hasInput) {
23139
- boundObject[this.propertyName] = value;
23692
+ boundObject[this.propertyName] = this.propertyValue;
23140
23693
  }
23141
23694
  };
23142
- return ColorPropertyMixerPlayable;
23695
+ return PropertyMixerPlayable;
23143
23696
  }(TrackMixerPlayable);
23144
23697
 
23145
- var FloatPropertyMixerPlayable = /*#__PURE__*/ function(TrackMixerPlayable) {
23146
- _inherits(FloatPropertyMixerPlayable, TrackMixerPlayable);
23698
+ var ColorPropertyMixerPlayable = /*#__PURE__*/ function(PropertyMixerPlayable) {
23699
+ _inherits(ColorPropertyMixerPlayable, PropertyMixerPlayable);
23700
+ function ColorPropertyMixerPlayable() {
23701
+ return PropertyMixerPlayable.apply(this, arguments);
23702
+ }
23703
+ var _proto = ColorPropertyMixerPlayable.prototype;
23704
+ _proto.resetPropertyValue = function resetPropertyValue() {
23705
+ this.propertyValue.setZero();
23706
+ };
23707
+ _proto.addWeightedValue = function addWeightedValue(curveValue, weight) {
23708
+ var result = this.propertyValue;
23709
+ result.r += curveValue.r * weight;
23710
+ result.g += curveValue.g * weight;
23711
+ result.b += curveValue.b * weight;
23712
+ result.a += curveValue.a * weight;
23713
+ };
23714
+ return ColorPropertyMixerPlayable;
23715
+ }(PropertyMixerPlayable);
23716
+
23717
+ var FloatPropertyMixerPlayable = /*#__PURE__*/ function(PropertyMixerPlayable) {
23718
+ _inherits(FloatPropertyMixerPlayable, PropertyMixerPlayable);
23147
23719
  function FloatPropertyMixerPlayable() {
23148
- var _this;
23149
- _this = TrackMixerPlayable.apply(this, arguments) || this;
23150
- _this.propertyName = "";
23151
- return _this;
23720
+ return PropertyMixerPlayable.apply(this, arguments);
23152
23721
  }
23153
23722
  var _proto = FloatPropertyMixerPlayable.prototype;
23154
- _proto.evaluate = function evaluate(context) {
23155
- var boundObject = context.output.getUserData();
23156
- if (!boundObject) {
23157
- return;
23158
- }
23159
- var hasInput = false;
23160
- var value = 0;
23161
- // evaluate the curve
23162
- for(var i = 0; i < this.clipPlayables.length; i++){
23163
- var weight = this.getClipWeight(i);
23164
- if (weight > 0) {
23165
- var propertyClipPlayable = this.getClipPlayable(i);
23166
- if (!_instanceof1(propertyClipPlayable, PropertyClipPlayable)) {
23167
- console.error("FloatPropertyTrack added non-FloatPropertyPlayableAsset");
23168
- continue;
23169
- }
23170
- var curveValue = propertyClipPlayable.value;
23171
- value += curveValue * weight;
23172
- hasInput = true;
23173
- }
23174
- }
23175
- // set value
23176
- if (hasInput) {
23177
- boundObject[this.propertyName] = value;
23178
- }
23723
+ _proto.resetPropertyValue = function resetPropertyValue() {
23724
+ this.propertyValue = 0;
23725
+ };
23726
+ _proto.addWeightedValue = function addWeightedValue(curveValue, weight) {
23727
+ this.propertyValue += curveValue * weight;
23179
23728
  };
23180
23729
  return FloatPropertyMixerPlayable;
23181
- }(TrackMixerPlayable);
23730
+ }(PropertyMixerPlayable);
23182
23731
 
23183
23732
  var ParticleMixerPlayable = /*#__PURE__*/ function(TrackMixerPlayable) {
23184
23733
  _inherits(ParticleMixerPlayable, TrackMixerPlayable);
@@ -23922,50 +24471,40 @@ var TransformMixerPlayable = /*#__PURE__*/ function(TrackMixerPlayable) {
23922
24471
  return TransformMixerPlayable;
23923
24472
  }(TrackMixerPlayable);
23924
24473
 
23925
- var Vector4PropertyMixerPlayable = /*#__PURE__*/ function(TrackMixerPlayable) {
23926
- _inherits(Vector4PropertyMixerPlayable, TrackMixerPlayable);
24474
+ var Vector4PropertyMixerPlayable = /*#__PURE__*/ function(PropertyMixerPlayable) {
24475
+ _inherits(Vector4PropertyMixerPlayable, PropertyMixerPlayable);
23927
24476
  function Vector4PropertyMixerPlayable() {
23928
- var _this;
23929
- _this = TrackMixerPlayable.apply(this, arguments) || this;
23930
- _this.propertyName = "";
23931
- return _this;
24477
+ return PropertyMixerPlayable.apply(this, arguments);
23932
24478
  }
23933
24479
  var _proto = Vector4PropertyMixerPlayable.prototype;
23934
- _proto.evaluate = function evaluate(context) {
23935
- var boundObject = context.output.getUserData();
23936
- if (!boundObject) {
23937
- return;
23938
- }
23939
- var hasInput = false;
23940
- var value = boundObject[this.propertyName];
23941
- if (!_instanceof1(value, Vector4)) {
23942
- return;
23943
- }
23944
- value.setZero();
23945
- // evaluate the curve
23946
- for(var i = 0; i < this.clipPlayables.length; i++){
23947
- var weight = this.getClipWeight(i);
23948
- if (weight > 0) {
23949
- var propertyClipPlayable = this.getClipPlayable(i);
23950
- if (!_instanceof1(propertyClipPlayable, PropertyClipPlayable)) {
23951
- console.error("Vector4PropertyTrack added non-Vector4PropertyPlayableAsset");
23952
- continue;
23953
- }
23954
- var curveValue = propertyClipPlayable.value;
23955
- value.x += curveValue.x * weight;
23956
- value.y += curveValue.y * weight;
23957
- value.z += curveValue.z * weight;
23958
- value.w += curveValue.w * weight;
23959
- hasInput = true;
23960
- }
23961
- }
23962
- // set value
23963
- if (hasInput) {
23964
- boundObject[this.propertyName] = value;
23965
- }
24480
+ _proto.resetPropertyValue = function resetPropertyValue() {
24481
+ this.propertyValue.setZero();
24482
+ };
24483
+ _proto.addWeightedValue = function addWeightedValue(curveValue, weight) {
24484
+ var result = this.propertyValue;
24485
+ result.x += curveValue.x * weight;
24486
+ result.y += curveValue.y * weight;
24487
+ result.z += curveValue.z * weight;
24488
+ result.w += curveValue.w * weight;
23966
24489
  };
23967
24490
  return Vector4PropertyMixerPlayable;
23968
- }(TrackMixerPlayable);
24491
+ }(PropertyMixerPlayable);
24492
+ var Vector2PropertyMixerPlayable = /*#__PURE__*/ function(PropertyMixerPlayable) {
24493
+ _inherits(Vector2PropertyMixerPlayable, PropertyMixerPlayable);
24494
+ function Vector2PropertyMixerPlayable() {
24495
+ return PropertyMixerPlayable.apply(this, arguments);
24496
+ }
24497
+ var _proto = Vector2PropertyMixerPlayable.prototype;
24498
+ _proto.resetPropertyValue = function resetPropertyValue() {
24499
+ this.propertyValue.setZero();
24500
+ };
24501
+ _proto.addWeightedValue = function addWeightedValue(curveValue, weight) {
24502
+ var result = this.propertyValue;
24503
+ result.x += curveValue.x * weight;
24504
+ result.y += curveValue.y * weight;
24505
+ };
24506
+ return Vector2PropertyMixerPlayable;
24507
+ }(PropertyMixerPlayable);
23969
24508
 
23970
24509
  /**
23971
24510
  * @since 2.0.0
@@ -24346,6 +24885,26 @@ var Vector4PropertyTrack = /*#__PURE__*/ function(PropertyTrack) {
24346
24885
  Vector4PropertyTrack = __decorate([
24347
24886
  effectsClass(DataType.Vector4PropertyTrack)
24348
24887
  ], Vector4PropertyTrack);
24888
+ var Vector2PropertyTrack = /*#__PURE__*/ function(PropertyTrack) {
24889
+ _inherits(Vector2PropertyTrack, PropertyTrack);
24890
+ function Vector2PropertyTrack() {
24891
+ return PropertyTrack.apply(this, arguments);
24892
+ }
24893
+ var _proto = Vector2PropertyTrack.prototype;
24894
+ _proto.createTrackMixer = function createTrackMixer(graph) {
24895
+ var mixer = new Vector2PropertyMixerPlayable(graph);
24896
+ var propertyNames = this.propertyNames;
24897
+ if (propertyNames.length > 0) {
24898
+ var propertyName = propertyNames[propertyNames.length - 1];
24899
+ mixer.propertyName = propertyName;
24900
+ }
24901
+ return mixer;
24902
+ };
24903
+ return Vector2PropertyTrack;
24904
+ }(PropertyTrack);
24905
+ Vector2PropertyTrack = __decorate([
24906
+ effectsClass("Vector2PropertyTrack")
24907
+ ], Vector2PropertyTrack);
24349
24908
 
24350
24909
  var ColorPropertyTrack = /*#__PURE__*/ function(PropertyTrack) {
24351
24910
  _inherits(ColorPropertyTrack, PropertyTrack);
@@ -24612,8 +25171,28 @@ __decorate([
24612
25171
  serialize()
24613
25172
  ], Vector4PropertyPlayableAsset.prototype, "curveData", void 0);
24614
25173
  Vector4PropertyPlayableAsset = __decorate([
24615
- effectsClass("Vector4PropertyPlayableAsset")
25174
+ effectsClass(DataType.Vector4PropertyPlayableAsset)
24616
25175
  ], Vector4PropertyPlayableAsset);
25176
+ var Vector2PropertyPlayableAsset = /*#__PURE__*/ function(PlayableAsset) {
25177
+ _inherits(Vector2PropertyPlayableAsset, PlayableAsset);
25178
+ function Vector2PropertyPlayableAsset() {
25179
+ return PlayableAsset.apply(this, arguments);
25180
+ }
25181
+ var _proto = Vector2PropertyPlayableAsset.prototype;
25182
+ _proto.createPlayable = function createPlayable(graph) {
25183
+ var clipPlayable = new PropertyClipPlayable(graph);
25184
+ clipPlayable.curve = createValueGetter(this.curveData);
25185
+ clipPlayable.value = clipPlayable.curve.getValue(0);
25186
+ return clipPlayable;
25187
+ };
25188
+ return Vector2PropertyPlayableAsset;
25189
+ }(PlayableAsset);
25190
+ __decorate([
25191
+ serialize()
25192
+ ], Vector2PropertyPlayableAsset.prototype, "curveData", void 0);
25193
+ Vector2PropertyPlayableAsset = __decorate([
25194
+ effectsClass(DataType.Vector2PropertyPlayableAsset)
25195
+ ], Vector2PropertyPlayableAsset);
24617
25196
 
24618
25197
  var ObjectBindingTrack = /*#__PURE__*/ function(TrackAsset) {
24619
25198
  _inherits(ObjectBindingTrack, TrackAsset);
@@ -25996,7 +26575,7 @@ function getStandardInteractContent(ui) {
25996
26575
  }
25997
26576
  });
25998
26577
  });
25999
- json.version = "2.1";
26578
+ json.version = JSONSceneVersion["2_1"];
26000
26579
  return json;
26001
26580
  }
26002
26581
  /**
@@ -26335,7 +26914,7 @@ function getStandardInteractContent(ui) {
26335
26914
  break;
26336
26915
  }
26337
26916
  }
26338
- result.version = "3.0";
26917
+ result.version = JSONSceneVersion["3_0"];
26339
26918
  return result;
26340
26919
  }
26341
26920
  /**
@@ -26877,13 +27456,13 @@ function getStandardJSON(json) {
26877
27456
  }
26878
27457
  throw new Error("Invalid JSON version: " + json.version + ".");
26879
27458
  }
26880
- var currentVersion = "1.0";
27459
+ var currentVersion = JSONSceneVersion["1_0"];
26881
27460
  function getStandardJSONFromV0(json) {
26882
27461
  var _json_bins;
26883
- currentVersion = "1.0";
27462
+ currentVersion = JSONSceneVersion["1_0"];
26884
27463
  var plugins = json.plugins || [];
26885
27464
  if ((_json_bins = json.bins) == null ? void 0 : _json_bins.length) {
26886
- currentVersion = "1.3";
27465
+ currentVersion = JSONSceneVersion["1_3"];
26887
27466
  }
26888
27467
  var requires = (json.requires || []).slice();
26889
27468
  var images = json.images.map(function(img, index) {
@@ -28806,7 +29385,9 @@ var LateUpdateTickData = /*#__PURE__*/ function(TickData) {
28806
29385
  */ _proto.getSpeed = function getSpeed() {
28807
29386
  return this.speed;
28808
29387
  };
28809
- _proto.play = function play() {
29388
+ /**
29389
+ *
29390
+ */ _proto.play = function play() {
28810
29391
  if (this.isEnded && this.reusable) {
28811
29392
  this.restart();
28812
29393
  }
@@ -28821,7 +29402,10 @@ var LateUpdateTickData = /*#__PURE__*/ function(TickData) {
28821
29402
  */ _proto.pause = function pause() {
28822
29403
  this.paused = true;
28823
29404
  };
28824
- _proto.getPaused = function getPaused() {
29405
+ /**
29406
+ *
29407
+ * @returns
29408
+ */ _proto.getPaused = function getPaused() {
28825
29409
  return this.paused;
28826
29410
  };
28827
29411
  /**
@@ -31399,8 +31983,8 @@ registerPlugin("sprite", SpriteLoader, VFXItem, true);
31399
31983
  registerPlugin("particle", ParticleLoader, VFXItem, true);
31400
31984
  registerPlugin("cal", CalculateLoader, VFXItem, true);
31401
31985
  registerPlugin("interact", InteractLoader, VFXItem, true);
31402
- var version = "2.2.6";
31986
+ var version = "2.3.0-alpha.0";
31403
31987
  logger.info("Core version: " + version + ".");
31404
31988
 
31405
- export { AbstractPlugin, ActivationPlayable, ActivationPlayableAsset, ActivationTrack, AnimationClip, AnimationClipPlayable, Asset, AssetLoader, AssetManager, BYTES_TYPE_MAP, BaseRenderComponent, Behaviour, BezierCurve, BezierCurvePath, BezierCurveQuat, BinaryAsset, COMPRESSED_TEXTURE, COPY_FRAGMENT_SHADER, COPY_MESH_SHADER_ID, COPY_VERTEX_SHADER, CalculateLoader, Camera, CameraController, CameraVFXItemLoader, ColorCurve, ColorPropertyPlayableAsset, ColorPropertyTrack, Component, Composition, CompositionComponent, CompositionSourceManager, DEFAULT_FONTS, DEFAULT_FPS, Database, DestroyOptions, Downloader, EFFECTS_COPY_MESH_NAME, EVENT_TYPE_CLICK, EVENT_TYPE_TOUCH_END, EVENT_TYPE_TOUCH_MOVE, EVENT_TYPE_TOUCH_START, EffectComponent, EffectsObject, EffectsPackage, Engine, EventEmitter, EventSystem, Fake3DAnimationMode, Fake3DComponent, FilterMode, Float16ArrayWrapper, FloatPropertyPlayableAsset, FloatPropertyTrack, Framebuffer, GLSLVersion, GPUCapability, Geometry, GlobalUniforms, GradientValue, HELP_LINK, HitTestType, InteractComponent, InteractLoader, InteractMesh, Item, KTXTexture, LineSegments, LinearValue, Material, MaterialDataBlock, MaterialRenderType, MaterialTrack, Mesh, MeshCollider, ObjectBindingTrack, OrderType, PLAYER_OPTIONS_ENV_EDITOR, POST_PROCESS_SETTINGS, ParticleBehaviourPlayable, ParticleBehaviourPlayableAsset, ParticleLoader, ParticleMesh, ParticleSystem, ParticleSystemRenderer, ParticleTrack, PassTextureCache, PathSegments, PluginSystem, PostProcessVolume, PropertyTrack, RENDER_PASS_NAME_PREFIX, RENDER_PREFER_LOOKUP_TEXTURE, RUNTIME_ENV, RandomSetValue, RandomValue, RandomVectorValue, RenderFrame, RenderPass, RenderPassAttachmentStorageType, RenderPassDestroyAttachmentType, RenderPassPriorityNormal, RenderPassPriorityPostprocess, RenderPassPriorityPrepare, RenderTargetHandle, RenderTextureFormat, Renderbuffer, Renderer, RendererComponent, RuntimeClip, SEMANTIC_MAIN_PRE_COLOR_ATTACHMENT_0, SEMANTIC_MAIN_PRE_COLOR_ATTACHMENT_SIZE_0, SEMANTIC_PRE_COLOR_ATTACHMENT_0, SEMANTIC_PRE_COLOR_ATTACHMENT_SIZE_0, SPRITE_VERTEX_STRIDE, Scene, SemanticMap, SerializationHelper, Shader, ShaderCompileResultStatus, ShaderFactory, ShaderType, ShaderVariant, ShapeComponent, SpriteColorPlayableAsset, SpriteColorTrack, SpriteComponent, SpriteLoader, StaticValue, SubCompositionPlayableAsset, SubCompositionTrack, TEMPLATE_USE_OFFSCREEN_CANVAS, TextComponent, TextComponentBase, TextLayout, TextLoader, TextStyle, Texture, TextureFactory, TextureLoadAction, TextureSourceType, TextureStoreAction, Ticker, TimelineAsset, TimelineClip, TimelinePlayable, TrackAsset, TrackSortWrapper, TrackType, Transform, TransformAnimationPlayable, TransformPlayableAsset, TransformTrack, VFXItem, ValueGetter, Vector4Curve, Vector4PropertyPlayableAsset, Vector4PropertyTrack, addByOrder, addItem, addItemWithOrder, applyMixins, assertExist, asserts, base64ToFile, blend, calculateTranslation, canvasPool, colorGradingFrag, colorStopsFromGradient, colorToArr$1 as colorToArr, combineImageTemplate, createCopyShader, createGLContext, createKeyFrameMeta, createShape, createValueGetter, decimalEqual, defaultPlugins, deserializeMipmapTexture, earcut, effectsClass, effectsClassStore, enlargeBuffer, ensureFixedNumber, ensureVec3, findPreviousRenderPass, gaussianDown_frag as gaussianDownFrag, gaussianDownHFrag, gaussianDownVFrag, gaussianUpFrag, generateEmptyTypedArray, generateGUID, generateHalfFloatTexture, generateTransparentTexture, generateWhiteTexture, getBackgroundImage, getColorFromGradientStops, getConfig, getDefaultTextureFactory, getGeometryByShape, getGeometryTriangles, getImageItemRenderInfo, getKTXTextureOptions, getKeyFrameMetaByRawValue, getMergedStore, getParticleMeshShader, getPixelRatio, getPreMultiAlpha, getStandardComposition, getStandardImage, getStandardItem, getStandardJSON, getTextureSize, glContext, glType2VertexFormatType, gpuTimer, imageDataFromColor, imageDataFromGradient, initErrors, initGLContext, integrate, interpolateColor, isAlipayMiniApp, isAndroid, isArray, isCanvas, isFunction, isIOS, isIOSByUA, isMiniProgram, isObject, isSimulatorCellPhone, isString, isUniformStruct, isUniformStructArray, isValidFontFamily, isWebGL2, isWechatMiniApp, itemFrag, itemFrameFrag, itemVert, loadAVIFOptional, loadBinary, loadBlob, loadImage, loadMedia, loadVideo, loadWebPOptional, logger, index as math, maxSpriteMeshItemCount, modifyMaxKeyframeShader, nearestPowerOfTwo, noop, normalizeColor, numberToFix, parsePercent$1 as parsePercent, particleFrag, particleOriginTranslateMap$1 as particleOriginTranslateMap, particleUniformTypeMap, particleVert, passRenderLevel, pluginLoaderMap, randomInRange, registerPlugin, removeItem, rotateVec2, screenMeshVert, serialize, setBlendMode, setConfig, setDefaultTextureFactory, setMaskMode, setMaxSpriteMeshItemCount, setRayFromCamera, setSideMode, setSpriteMeshMaxItemCountByGPU, sortByOrder, index$1 as spec, spriteMeshShaderFromFilter, spriteMeshShaderFromRenderInfo, spriteMeshShaderIdFromRenderInfo, thresholdFrag, throwDestroyedError, trailVert, translatePoint, trianglesFromRect, unregisterPlugin, valIfUndefined, value, valueDefine, vecFill, vecMulCombine, version, vertexFormatType2GLType };
31989
+ export { AbstractPlugin, ActivationPlayable, ActivationPlayableAsset, ActivationTrack, AnimationClip, AnimationClipPlayable, Asset, AssetLoader, AssetManager, BYTES_TYPE_MAP, BaseRenderComponent, Behaviour, BezierCurve, BezierCurvePath, BezierCurveQuat, BinaryAsset, COMPRESSED_TEXTURE, COPY_FRAGMENT_SHADER, COPY_MESH_SHADER_ID, COPY_VERTEX_SHADER, CalculateLoader, Camera, CameraController, CameraVFXItemLoader, ColorCurve, ColorPropertyPlayableAsset, ColorPropertyTrack, Component, Composition, CompositionComponent, CompositionSourceManager, DEFAULT_FONTS, DEFAULT_FPS, Database, DestroyOptions, Downloader, EFFECTS_COPY_MESH_NAME, EVENT_TYPE_CLICK, EVENT_TYPE_TOUCH_END, EVENT_TYPE_TOUCH_MOVE, EVENT_TYPE_TOUCH_START, EffectComponent, EffectsObject, EffectsPackage, Engine, EventEmitter, EventSystem, Fake3DAnimationMode, Fake3DComponent, FilterMode, Float16ArrayWrapper, FloatPropertyPlayableAsset, FloatPropertyTrack, Framebuffer, GLSLVersion, GPUCapability, Geometry, GlobalUniforms, GradientValue, HELP_LINK, HitTestType, InteractComponent, InteractLoader, InteractMesh, Item, KTXTexture, LineSegments, LinearValue, Material, MaterialDataBlock, MaterialRenderType, MaterialTrack, Mesh, MeshCollider, ObjectBindingTrack, OrderType, PLAYER_OPTIONS_ENV_EDITOR, POST_PROCESS_SETTINGS, ParticleBehaviourPlayable, ParticleBehaviourPlayableAsset, ParticleLoader, ParticleMesh, ParticleSystem, ParticleSystemRenderer, ParticleTrack, PassTextureCache, PathSegments, PluginSystem, PostProcessVolume, PropertyTrack, RENDER_PASS_NAME_PREFIX, RENDER_PREFER_LOOKUP_TEXTURE, RUNTIME_ENV, RandomSetValue, RandomValue, RandomVectorValue, RenderFrame, RenderPass, RenderPassAttachmentStorageType, RenderPassDestroyAttachmentType, RenderPassPriorityNormal, RenderPassPriorityPostprocess, RenderPassPriorityPrepare, RenderTargetHandle, RenderTextureFormat, Renderbuffer, Renderer, RendererComponent, RuntimeClip, SEMANTIC_MAIN_PRE_COLOR_ATTACHMENT_0, SEMANTIC_MAIN_PRE_COLOR_ATTACHMENT_SIZE_0, SEMANTIC_PRE_COLOR_ATTACHMENT_0, SEMANTIC_PRE_COLOR_ATTACHMENT_SIZE_0, SPRITE_VERTEX_STRIDE, Scene, SemanticMap, SerializationHelper, Shader, ShaderCompileResultStatus, ShaderFactory, ShaderType, ShaderVariant, ShapeComponent, SpriteColorPlayableAsset, SpriteColorTrack, SpriteComponent, SpriteLoader, StaticValue, SubCompositionPlayableAsset, SubCompositionTrack, TEMPLATE_USE_OFFSCREEN_CANVAS, TextComponent, TextComponentBase, TextLayout, TextLoader, TextStyle, Texture, TextureFactory, TextureLoadAction, TextureSourceType, TextureStoreAction, Ticker, TimelineAsset, TimelineClip, TimelinePlayable, TrackAsset, TrackSortWrapper, TrackType, Transform, TransformAnimationPlayable, TransformPlayableAsset, TransformTrack, VFXItem, ValueGetter, Vector2Curve, Vector2PropertyPlayableAsset, Vector2PropertyTrack, Vector4Curve, Vector4PropertyPlayableAsset, Vector4PropertyTrack, addByOrder, addItem, addItemWithOrder, applyMixins, assertExist, asserts, base64ToFile, blend, calculateTranslation, canvasPool, colorGradingFrag, colorStopsFromGradient, colorToArr$1 as colorToArr, combineImageTemplate, createCopyShader, createGLContext, createKeyFrameMeta, createShape, createValueGetter, decimalEqual, defaultPlugins, deserializeMipmapTexture, earcut, effectsClass, effectsClassStore, enlargeBuffer, ensureFixedNumber, ensureVec3, findPreviousRenderPass, gaussianDown_frag as gaussianDownFrag, gaussianDownHFrag, gaussianDownVFrag, gaussianUpFrag, generateEmptyTypedArray, generateGUID, generateHalfFloatTexture, generateTransparentTexture, generateWhiteTexture, getBackgroundImage, getColorFromGradientStops, getConfig, getDefaultTextureFactory, getGeometryByShape, getGeometryTriangles, getImageItemRenderInfo, getKTXTextureOptions, getKeyFrameMetaByRawValue, getMergedStore, getParticleMeshShader, getPixelRatio, getPreMultiAlpha, getStandardComposition, getStandardImage, getStandardItem, getStandardJSON, getTextureSize, glContext, glType2VertexFormatType, gpuTimer, imageDataFromColor, imageDataFromGradient, initErrors, initGLContext, integrate, interpolateColor, isAlipayMiniApp, isAndroid, isArray, isCanvas, isFunction, isIOS, isIOSByUA, isMiniProgram, isObject, isSimulatorCellPhone, isString, isUniformStruct, isUniformStructArray, isValidFontFamily, isWebGL2, isWechatMiniApp, itemFrag, itemFrameFrag, itemVert, loadAVIFOptional, loadBinary, loadBlob, loadImage, loadMedia, loadVideo, loadWebPOptional, logger, index as math, maxSpriteMeshItemCount, modifyMaxKeyframeShader, nearestPowerOfTwo, noop, normalizeColor, numberToFix, parsePercent$1 as parsePercent, particleFrag, particleOriginTranslateMap$1 as particleOriginTranslateMap, particleUniformTypeMap, particleVert, passRenderLevel, pluginLoaderMap, randomInRange, registerPlugin, removeItem, rotateVec2, screenMeshVert, serialize, setBlendMode, setConfig, setDefaultTextureFactory, setMaskMode, setMaxSpriteMeshItemCount, setRayFromCamera, setSideMode, setSpriteMeshMaxItemCountByGPU, sortByOrder, index$1 as spec, spriteMeshShaderFromFilter, spriteMeshShaderFromRenderInfo, spriteMeshShaderIdFromRenderInfo, thresholdFrag, throwDestroyedError, trailVert, translatePoint, trianglesFromRect, unregisterPlugin, valIfUndefined, value, valueDefine, vecFill, vecMulCombine, version, vertexFormatType2GLType };
31406
31990
  //# sourceMappingURL=index.mjs.map