@galacean/effects-core 2.2.2-alpha.0 → 2.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.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.2-alpha.0
6
+ * Version: v2.2.3
7
7
  */
8
8
 
9
9
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
@@ -16582,17 +16582,10 @@ var InteractComponent = /*#__PURE__*/ function(RendererComponent) {
16582
16582
  ];
16583
16583
  };
16584
16584
  _proto.onStart = function onStart() {
16585
- var _this = this;
16586
- var _this_item_composition;
16587
16585
  var options = this.item.props.content.options;
16588
16586
  var env = this.item.engine.renderer.env;
16589
16587
  var composition = this.item.composition;
16590
16588
  var _this_interactData_options = this.interactData.options, type = _this_interactData_options.type, showPreview = _this_interactData_options.showPreview;
16591
- (_this_item_composition = this.item.composition) == null ? void 0 : _this_item_composition.on("goto", function() {
16592
- if (_this.item.time > 0) {
16593
- _this.duringPlay = true;
16594
- }
16595
- });
16596
16589
  if (type === InteractType.CLICK) {
16597
16590
  this.clickable = true;
16598
16591
  if (showPreview && env === PLAYER_OPTIONS_ENV_EDITOR) {
@@ -16627,18 +16620,26 @@ var InteractComponent = /*#__PURE__*/ function(RendererComponent) {
16627
16620
  _proto.onEnable = function onEnable() {
16628
16621
  RendererComponent.prototype.onEnable.call(this);
16629
16622
  var type = this.interactData.options.type;
16623
+ var env = this.item.engine.renderer.env;
16630
16624
  if (type === InteractType.CLICK) {
16631
16625
  this.clickable = true;
16626
+ } else if (type === InteractType.DRAG) {
16627
+ var options = this.interactData.options;
16628
+ var enableInEditor = options.enableInEditor;
16629
+ if (env !== PLAYER_OPTIONS_ENV_EDITOR || enableInEditor) {
16630
+ var _this_item_composition;
16631
+ ((_this_item_composition = this.item.composition) == null ? void 0 : _this_item_composition.event) && this.beginDragTarget(options, this.item.composition.event);
16632
+ }
16632
16633
  }
16633
16634
  };
16634
16635
  _proto.onUpdate = function onUpdate(dt) {
16635
16636
  var _this_previewContent;
16637
+ this.duringPlay = true;
16636
16638
  // trigger messageBegin when item enter
16637
- if (this.item.time > 0 && !this.duringPlay) {
16639
+ if (this.item.time > 0 && this.item.time - dt / 1000 <= 0) {
16638
16640
  var _this_item_composition;
16639
16641
  var options = this.item.props.content.options;
16640
16642
  (_this_item_composition = this.item.composition) == null ? void 0 : _this_item_composition.addInteractiveItem(this.item, options.type);
16641
- this.duringPlay = true;
16642
16643
  }
16643
16644
  (_this_previewContent = this.previewContent) == null ? void 0 : _this_previewContent.updateMesh();
16644
16645
  if (!this.dragEvent || !this.bouncingArg) {
@@ -17164,6 +17165,83 @@ var PlayState;
17164
17165
  PlayState[PlayState["Paused"] = 1] = "Paused";
17165
17166
  })(PlayState || (PlayState = {}));
17166
17167
 
17168
+ /**
17169
+ *
17170
+ */ /**
17171
+ * 事件监听器
17172
+ */ var EventEmitter = function EventEmitter() {
17173
+ var _this = this;
17174
+ var _this1 = this;
17175
+ this.listeners = {};
17176
+ /**
17177
+ * 移除事件监听器
17178
+ * @param eventName - 事件名称
17179
+ * @param listener - 事件监听器
17180
+ * @returns
17181
+ */ this.off = function(eventName, listener) {
17182
+ if (!_this.listeners[eventName]) {
17183
+ return;
17184
+ }
17185
+ _this.listeners[eventName] = _this.listeners[eventName].filter(function(param) {
17186
+ var l = param.listener;
17187
+ return l !== listener;
17188
+ });
17189
+ };
17190
+ /**
17191
+ * 监听事件
17192
+ * @param eventName - 事件名称
17193
+ * @param listener - 事件监听器
17194
+ * @param options - 事件监听器选项
17195
+ * @returns
17196
+ */ this.on = function(eventName, listener, options) {
17197
+ _this.listeners[eventName] = _this.listeners[eventName] || [];
17198
+ _this.listeners[eventName].push({
17199
+ listener: listener,
17200
+ options: options
17201
+ });
17202
+ return function() {
17203
+ return _this.off(eventName, listener);
17204
+ };
17205
+ };
17206
+ /**
17207
+ * 一次性监听事件
17208
+ * @param eventName - 事件名称
17209
+ * @param listener - 事件监听器
17210
+ */ this.once = function(eventName, listener) {
17211
+ _this.on(eventName, listener, {
17212
+ once: true
17213
+ });
17214
+ };
17215
+ /**
17216
+ * 触发事件
17217
+ * @param eventName - 事件名称
17218
+ * @param args - 事件参数
17219
+ */ this.emit = function(eventName) {
17220
+ for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){
17221
+ args[_key - 1] = arguments[_key];
17222
+ }
17223
+ var _this_listeners_eventName;
17224
+ (_this_listeners_eventName = _this1.listeners[eventName]) == null ? void 0 : _this_listeners_eventName.forEach(function(param) {
17225
+ var listener = param.listener, options = param.options;
17226
+ listener.apply(void 0, [].concat(args));
17227
+ if (options == null ? void 0 : options.once) {
17228
+ _this1.off(eventName, listener);
17229
+ }
17230
+ });
17231
+ };
17232
+ /**
17233
+ * 获取事件名称对应的所有监听器
17234
+ * @param eventName - 事件名称
17235
+ * @returns - 返回事件名称对应的所有监听器
17236
+ */ this.getListeners = function(eventName) {
17237
+ var _this_listeners_eventName;
17238
+ return ((_this_listeners_eventName = _this.listeners[eventName]) == null ? void 0 : _this_listeners_eventName.map(function(param) {
17239
+ var listener = param.listener;
17240
+ return listener;
17241
+ })) || [];
17242
+ };
17243
+ };
17244
+
17167
17245
  var tempQuat$1 = new Quaternion();
17168
17246
  var seed$3 = 1;
17169
17247
  // TODO 继承 Component
@@ -17634,83 +17712,6 @@ var seed$3 = 1;
17634
17712
  return Transform;
17635
17713
  }();
17636
17714
 
17637
- /**
17638
- *
17639
- */ /**
17640
- * 事件监听器
17641
- */ var EventEmitter = function EventEmitter() {
17642
- var _this = this;
17643
- var _this1 = this;
17644
- this.listeners = {};
17645
- /**
17646
- * 移除事件监听器
17647
- * @param eventName - 事件名称
17648
- * @param listener - 事件监听器
17649
- * @returns
17650
- */ this.off = function(eventName, listener) {
17651
- if (!_this.listeners[eventName]) {
17652
- return;
17653
- }
17654
- _this.listeners[eventName] = _this.listeners[eventName].filter(function(param) {
17655
- var l = param.listener;
17656
- return l !== listener;
17657
- });
17658
- };
17659
- /**
17660
- * 监听事件
17661
- * @param eventName - 事件名称
17662
- * @param listener - 事件监听器
17663
- * @param options - 事件监听器选项
17664
- * @returns
17665
- */ this.on = function(eventName, listener, options) {
17666
- _this.listeners[eventName] = _this.listeners[eventName] || [];
17667
- _this.listeners[eventName].push({
17668
- listener: listener,
17669
- options: options
17670
- });
17671
- return function() {
17672
- return _this.off(eventName, listener);
17673
- };
17674
- };
17675
- /**
17676
- * 一次性监听事件
17677
- * @param eventName - 事件名称
17678
- * @param listener - 事件监听器
17679
- */ this.once = function(eventName, listener) {
17680
- _this.on(eventName, listener, {
17681
- once: true
17682
- });
17683
- };
17684
- /**
17685
- * 触发事件
17686
- * @param eventName - 事件名称
17687
- * @param args - 事件参数
17688
- */ this.emit = function(eventName) {
17689
- for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){
17690
- args[_key - 1] = arguments[_key];
17691
- }
17692
- var _this_listeners_eventName;
17693
- (_this_listeners_eventName = _this1.listeners[eventName]) == null ? void 0 : _this_listeners_eventName.forEach(function(param) {
17694
- var listener = param.listener, options = param.options;
17695
- listener.apply(void 0, [].concat(args));
17696
- if (options == null ? void 0 : options.once) {
17697
- _this1.off(eventName, listener);
17698
- }
17699
- });
17700
- };
17701
- /**
17702
- * 获取事件名称对应的所有监听器
17703
- * @param eventName - 事件名称
17704
- * @returns - 返回事件名称对应的所有监听器
17705
- */ this.getListeners = function(eventName) {
17706
- var _this_listeners_eventName;
17707
- return ((_this_listeners_eventName = _this.listeners[eventName]) == null ? void 0 : _this_listeners_eventName.map(function(param) {
17708
- var listener = param.listener;
17709
- return listener;
17710
- })) || [];
17711
- };
17712
- };
17713
-
17714
17715
  var VFXItem = /*#__PURE__*/ function(EffectsObject) {
17715
17716
  _inherits(VFXItem, EffectsObject);
17716
17717
  function VFXItem(engine, props) {
@@ -18060,42 +18061,36 @@ var VFXItem = /*#__PURE__*/ function(EffectsObject) {
18060
18061
  EffectsObject.prototype.fromData.call(this, data);
18061
18062
  var id = data.id, name = data.name, delay = data.delay, parentId = data.parentId, endBehavior = data.endBehavior, transform = data.transform, _data_duration = data.duration, duration = _data_duration === void 0 ? 0 : _data_duration;
18062
18063
  this.props = data;
18063
- //@ts-expect-error
18064
18064
  this.type = data.type;
18065
18065
  this.id = id.toString(); // TODO 老数据 id 是 number,需要转换
18066
18066
  this.name = name;
18067
18067
  this.start = delay ? delay : this.start;
18068
+ var transformProps = {};
18068
18069
  if (transform) {
18069
- //@ts-expect-error TODO 数据改造后移除 expect-error
18070
- transform.position = new Vector3().copyFrom(transform.position);
18070
+ transformProps.position = new Vector3().copyFrom(transform.position);
18071
18071
  // FIXME: transform.rotation待删除
18072
+ //@ts-expect-error
18072
18073
  if (transform.quat) {
18073
18074
  //@ts-expect-error
18074
- transform.quat = new Quaternion(transform.quat.x, transform.quat.y, transform.quat.z, transform.quat.w);
18075
+ transformProps.quat = new Quaternion(transform.quat.x, transform.quat.y, transform.quat.z, transform.quat.w);
18075
18076
  } else {
18076
18077
  var _transform_eulerHint;
18077
18078
  //@ts-expect-error
18078
- transform.rotation = new Euler().copyFrom((_transform_eulerHint = transform.eulerHint) != null ? _transform_eulerHint : transform.rotation);
18079
+ transformProps.rotation = new Euler().copyFrom((_transform_eulerHint = transform.eulerHint) != null ? _transform_eulerHint : transform.rotation);
18079
18080
  }
18080
- //@ts-expect-error
18081
- transform.scale = new Vector3().copyFrom(transform.scale);
18082
- //@ts-expect-error
18081
+ transformProps.scale = new Vector3().copyFrom(transform.scale);
18083
18082
  if (transform.size) {
18084
- //@ts-expect-error
18085
- transform.size = new Vector2().copyFrom(transform.size);
18083
+ transformProps.size = new Vector2().copyFrom(transform.size);
18086
18084
  }
18087
- //@ts-expect-error
18088
18085
  if (transform.anchor) {
18089
- //@ts-expect-error
18090
- transform.anchor = new Vector2().copyFrom(transform.anchor);
18086
+ transformProps.anchor = new Vector2().copyFrom(transform.anchor);
18091
18087
  }
18092
- this.transform.setTransform(transform);
18088
+ this.transform.setTransform(transformProps);
18093
18089
  }
18094
18090
  this.transform.name = this.name;
18095
18091
  this.transform.engine = this.engine;
18096
18092
  this.parentId = parentId;
18097
18093
  this.duration = duration;
18098
- // TODO spec endbehavior 类型修正
18099
18094
  this.endBehavior = endBehavior;
18100
18095
  if (!data.content) {
18101
18096
  data.content = {
@@ -24887,9 +24882,23 @@ var TextComponent = /*#__PURE__*/ function(BaseRenderComponent) {
24887
24882
  order: listIndex
24888
24883
  };
24889
24884
  this.interaction = interaction;
24885
+ this.cachePrefix = "-";
24886
+ this.renderInfo = getImageItemRenderInfo(this);
24887
+ var material = this.createMaterial(this.renderInfo, 2);
24888
+ this.worldMatrix = Matrix4.fromIdentity();
24889
+ this.material = material;
24890
+ this.material.setVector4("_TexOffset", new Vector4().setFromArray([
24891
+ 0,
24892
+ 0,
24893
+ 1,
24894
+ 1
24895
+ ]));
24896
+ // TextComponentBase
24890
24897
  this.updateWithOptions(options);
24891
- // Text
24892
24898
  this.updateTexture();
24899
+ this.setItem();
24900
+ // 恢复默认颜色
24901
+ this.material.setVector4("_Color", new Vector4(1, 1, 1, 1));
24893
24902
  };
24894
24903
  _proto.updateWithOptions = function updateWithOptions(options) {
24895
24904
  // OVERRIDE by mixins
@@ -25207,7 +25216,7 @@ var TextComponentBase = /*#__PURE__*/ function() {
25207
25216
  }
25208
25217
  //与 toDataURL() 两种方式都需要像素读取操作
25209
25218
  var imageData = context.getImageData(0, 0, this.canvas.width, this.canvas.height);
25210
- this.material.setTexture("_MainTex", Texture.createWithData(this.engine, {
25219
+ var texture = Texture.createWithData(this.engine, {
25211
25220
  data: new Uint8Array(imageData.data),
25212
25221
  width: imageData.width,
25213
25222
  height: imageData.height
@@ -25217,7 +25226,8 @@ var TextComponentBase = /*#__PURE__*/ function() {
25217
25226
  minFilter: glContext.LINEAR,
25218
25227
  wrapS: glContext.CLAMP_TO_EDGE,
25219
25228
  wrapT: glContext.CLAMP_TO_EDGE
25220
- }));
25229
+ });
25230
+ this.renderer.texture = texture;
25221
25231
  this.isDirty = false;
25222
25232
  };
25223
25233
  _proto.getFontDesc = function getFontDesc() {
@@ -28405,7 +28415,7 @@ var tmpScale = new Vector3(1, 1, 1);
28405
28415
  var sourceItemData = this.engine.jsonSceneData[itemDataPath.id];
28406
28416
  var itemProps = sourceItemData;
28407
28417
  if (passRenderLevel(sourceItemData.renderLevel, this.renderLevel)) {
28408
- if (itemProps.type === ItemType.sprite || itemProps.type === ItemType.particle || itemProps.type === ItemType.spine || //@ts-expect-error
28418
+ if (itemProps.type === ItemType.sprite || itemProps.type === ItemType.particle || itemProps.type === ItemType.spine || itemProps.type === ItemType.text || itemProps.type === ItemType.video || //@ts-expect-error
28409
28419
  itemProps.type === ItemType.shape) {
28410
28420
  for(var _iterator2 = _create_for_of_iterator_helper_loose(itemProps.components), _step2; !(_step2 = _iterator2()).done;){
28411
28421
  var componentPath = _step2.value;
@@ -28426,6 +28436,13 @@ var tmpScale = new Vector3(1, 1, 1);
28426
28436
  }
28427
28437
  }
28428
28438
  items.push(itemDataPath);
28439
+ } else {
28440
+ // 非预合成元素未达到渲染等级的转化为空节点。
28441
+ // 预合成元素有根据 item type 的子元素加载判断,没法保留空节点,这边先整体过滤掉。
28442
+ if (itemProps.type !== ItemType.composition) {
28443
+ itemProps.components = [];
28444
+ items.push(itemDataPath);
28445
+ }
28429
28446
  }
28430
28447
  }
28431
28448
  composition.items = items;
@@ -28670,10 +28687,13 @@ var LateUpdateTickData = /*#__PURE__*/ function(TickData) {
28670
28687
  assertExist(sourceContent);
28671
28688
  _this.renderer = renderer;
28672
28689
  _this.refCompositionProps = refCompositionProps;
28673
- _this.rootItem = new VFXItem(_this.getEngine(), sourceContent);
28690
+ // Instantiate composition rootItem
28691
+ _this.rootItem = new VFXItem(_this.getEngine());
28674
28692
  _this.rootItem.name = "rootItem";
28693
+ _this.rootItem.duration = sourceContent.duration;
28694
+ _this.rootItem.endBehavior = sourceContent.endBehavior;
28675
28695
  _this.rootItem.composition = _assert_this_initialized(_this);
28676
- // Spawn rootCompositionComponent
28696
+ // Create rootCompositionComponent
28677
28697
  _this.rootComposition = _this.rootItem.addComponent(CompositionComponent);
28678
28698
  _this.width = width;
28679
28699
  _this.height = height;
@@ -31347,7 +31367,7 @@ registerPlugin("sprite", SpriteLoader, VFXItem, true);
31347
31367
  registerPlugin("particle", ParticleLoader, VFXItem, true);
31348
31368
  registerPlugin("cal", CalculateLoader, VFXItem, true);
31349
31369
  registerPlugin("interact", InteractLoader, VFXItem, true);
31350
- var version = "2.2.2-alpha.0";
31370
+ var version = "2.2.3";
31351
31371
  logger.info("Core version: " + version + ".");
31352
31372
 
31353
31373
  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 };