@galacean/engine-loader 1.1.0-beta.9 → 1.2.0-alpha.1

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 (30) hide show
  1. package/dist/main.js +863 -487
  2. package/dist/main.js.map +1 -1
  3. package/dist/miniprogram.js +862 -487
  4. package/dist/module.js +852 -477
  5. package/dist/module.js.map +1 -1
  6. package/package.json +4 -5
  7. package/types/GLTFLoader.d.ts +8 -1
  8. package/types/Texture2DLoader.d.ts +9 -1
  9. package/types/gltf/GLTFResource.d.ts +50 -16
  10. package/types/gltf/GLTFSchema.d.ts +1 -1
  11. package/types/gltf/GLTFUtils.d.ts +1 -1
  12. package/types/gltf/extensions/EXT_meshopt_compression.d.ts +13 -0
  13. package/types/gltf/extensions/GLTFExtensionParser.d.ts +1 -1
  14. package/types/gltf/extensions/GLTFExtensionSchema.d.ts +18 -10
  15. package/types/gltf/extensions/KHR_materials_anisotropy.d.ts +1 -0
  16. package/types/gltf/extensions/MeshoptDecoder.d.ts +8 -0
  17. package/types/gltf/extensions/index.d.ts +2 -1
  18. package/types/gltf/index.d.ts +2 -1
  19. package/types/gltf/parser/GLTFBufferViewParser.d.ts +5 -0
  20. package/types/gltf/parser/GLTFParser.d.ts +1 -1
  21. package/types/gltf/parser/GLTFParserContext.d.ts +24 -8
  22. package/types/gltf/parser/GLTFSceneParser.d.ts +0 -1
  23. package/types/gltf/parser/index.d.ts +2 -1
  24. package/types/index.d.ts +2 -1
  25. package/types/ktx2/KTX2Loader.d.ts +20 -8
  26. package/types/resource-deserialize/resources/parser/ReflectionParser.d.ts +1 -1
  27. package/types/resource-deserialize/resources/schema/BasicSchema.d.ts +2 -0
  28. package/types/resource-deserialize/resources/schema/MaterialSchema.d.ts +1 -1
  29. package/types/resource-deserialize/resources/schema/SceneSchema.d.ts +3 -1
  30. package/types/resource-deserialize/utils/BufferReader.d.ts +1 -1
package/dist/module.js CHANGED
@@ -1,7 +1,6 @@
1
- import { Utils, ModelMesh, BlendShape, Texture2D, Loader, Entity, Transform, Animator, DirectLight, Camera, MeshRenderer, ParticleRenderer, PointLight, SpotLight, Script, SpriteMask, SpriteRenderer, TextRenderer, AnimationClip, AnimationEvent, AnimationRefCurve, Keyframe, AnimationQuaternionCurve, AnimationColorCurve, AnimationVector4Curve, AnimationVector3Curve, AnimationVector2Curve, AnimationFloatArrayCurve, AnimationArrayCurve, AnimationFloatCurve, Scene, resourceLoader, AssetPromise, AssetType, AnimatorController, AnimatorControllerLayer, AnimatorStateMachine, AnimatorStateTransition, TextureCube, TextureFilterMode, TextureCubeFace, AmbientLight, DiffuseMode, Font, ReferResource, IndexFormat, VertexElementFormat, GLCapabilityType, Logger, TextureFormat, request, ContentRestorer, InterpolationType, SkinnedMeshRenderer, PBRMaterial, BlinnPhongMaterial, PBRSpecularMaterial, TextureCoordinate, RenderFace, VertexElement, Buffer, BufferBindFlag, BufferUsage, Skin, TextureWrapMode as TextureWrapMode$1, Material, Shader, SpriteAtlas, Sprite, BackgroundMode, UnlitMaterial } from '@galacean/engine-core';
1
+ import { Utils, ModelMesh, BlendShape, Texture2D, Loader, Entity, Transform, Animator, DirectLight, Camera, MeshRenderer, ParticleRenderer, PointLight, SpotLight, Script, SpriteMask, SpriteRenderer, TextRenderer, AnimationClip, AnimationEvent, AnimationStringCurve, Keyframe, AnimationBoolCurve, AnimationRefCurve, AnimationQuaternionCurve, AnimationColorCurve, AnimationVector4Curve, AnimationVector3Curve, AnimationVector2Curve, AnimationFloatArrayCurve, AnimationArrayCurve, AnimationFloatCurve, Scene, resourceLoader, AssetPromise, AssetType, AnimatorController, AnimatorControllerLayer, AnimatorStateMachine, AnimatorStateTransition, TextureCube, TextureFilterMode, TextureCubeFace, AmbientLight, DiffuseMode, Font, ReferResource, IndexFormat, VertexElementFormat, GLCapabilityType, Logger, TextureFormat, request, ContentRestorer, InterpolationType, SkinnedMeshRenderer, PBRMaterial, BlinnPhongMaterial, PBRSpecularMaterial, TextureCoordinate, RenderFace, VertexElement, Buffer, BufferBindFlag, BufferUsage, Skin, TextureWrapMode as TextureWrapMode$1, SystemInfo, Material, Shader, SpriteAtlas, Sprite, BackgroundMode, UnlitMaterial } from '@galacean/engine-core';
2
2
  import { Color, Vector4, Vector3, Vector2, Quaternion, SphericalHarmonics3, MathUtil, BoundingBox, Matrix, Rect } from '@galacean/engine-math';
3
3
  import { GLCompressedTextureInternalFormat } from '@galacean/engine-rhi-webgl';
4
- import { DRACODecoder } from '@galacean/engine-draco';
5
4
 
6
5
  function _extends() {
7
6
  _extends = Object.assign || function assign(target) {
@@ -116,116 +115,116 @@ var BufferReader = /*#__PURE__*/ function() {
116
115
  this.data = data;
117
116
  this._dataView = new DataView(data.buffer, data.byteOffset + byteOffset, byteLength != null ? byteLength : data.byteLength - byteOffset);
118
117
  this._littleEndian = littleEndian;
119
- this._offset = 0;
118
+ this._position = 0;
120
119
  this._baseOffset = byteOffset;
121
120
  }
122
121
  var _proto = BufferReader.prototype;
123
122
  _proto.nextUint8 = function nextUint8() {
124
- var value = this._dataView.getUint8(this._offset);
125
- this._offset += 1;
123
+ var value = this._dataView.getUint8(this._position);
124
+ this._position += 1;
126
125
  return value;
127
126
  };
128
127
  _proto.nextUint16 = function nextUint16() {
129
- var value = this._dataView.getUint16(this._offset, this._littleEndian);
130
- this._offset += 2;
128
+ var value = this._dataView.getUint16(this._position, this._littleEndian);
129
+ this._position += 2;
131
130
  return value;
132
131
  };
133
132
  _proto.nextUint32 = function nextUint32() {
134
- var value = this._dataView.getUint32(this._offset, this._littleEndian);
135
- this._offset += 4;
133
+ var value = this._dataView.getUint32(this._position, this._littleEndian);
134
+ this._position += 4;
136
135
  return value;
137
136
  };
138
137
  _proto.nextInt32 = function nextInt32() {
139
- var value = this._dataView.getInt32(this._offset, this._littleEndian);
140
- this._offset += 4;
138
+ var value = this._dataView.getInt32(this._position, this._littleEndian);
139
+ this._position += 4;
141
140
  return value;
142
141
  };
143
142
  _proto.nextInt32Array = function nextInt32Array(len) {
144
- var value = new Int32Array(this.data.buffer, this._offset + this._dataView.byteOffset, len);
145
- this._offset += 4 * len;
143
+ var value = new Int32Array(this.data.buffer, this._position + this._dataView.byteOffset, len);
144
+ this._position += 4 * len;
146
145
  return value;
147
146
  };
148
147
  _proto.nextFloat32 = function nextFloat32() {
149
- var value = this._dataView.getFloat32(this._offset, this._littleEndian);
150
- this._offset += 4;
148
+ var value = this._dataView.getFloat32(this._position, this._littleEndian);
149
+ this._position += 4;
151
150
  return value;
152
151
  };
153
152
  _proto.nextFloat32Array = function nextFloat32Array(len) {
154
- var value = new Float32Array(this.data.buffer, this._offset + this._dataView.byteOffset, len);
155
- this._offset += 4 * len;
153
+ var value = new Float32Array(this.data.buffer, this._position + this._dataView.byteOffset, len);
154
+ this._position += 4 * len;
156
155
  return value;
157
156
  };
158
157
  _proto.nextUint32Array = function nextUint32Array(len) {
159
- var value = new Uint32Array(this.data.buffer, this._offset + this._dataView.byteOffset, len);
160
- this._offset += 4 * len;
158
+ var value = new Uint32Array(this.data.buffer, this._position + this._dataView.byteOffset, len);
159
+ this._position += 4 * len;
161
160
  return value;
162
161
  };
163
162
  _proto.nextUint8Array = function nextUint8Array(len) {
164
- var value = new Uint8Array(this.data.buffer, this._offset + this._dataView.byteOffset, len);
165
- this._offset += len;
163
+ var value = new Uint8Array(this.data.buffer, this._position + this._dataView.byteOffset, len);
164
+ this._position += len;
166
165
  return value;
167
166
  };
168
167
  _proto.nextUint64 = function nextUint64() {
169
- var left = this._dataView.getUint32(this._offset, this._littleEndian);
170
- var right = this._dataView.getUint32(this._offset + 4, this._littleEndian);
168
+ var left = this._dataView.getUint32(this._position, this._littleEndian);
169
+ var right = this._dataView.getUint32(this._position + 4, this._littleEndian);
171
170
  var value = left + Math.pow(2, 32) * right;
172
- this._offset += 8;
171
+ this._position += 8;
173
172
  return value;
174
173
  };
175
174
  _proto.nextStr = function nextStr() {
176
175
  var strByteLength = this.nextUint16();
177
- var uint8Array = new Uint8Array(this.data.buffer, this._offset + this._dataView.byteOffset, strByteLength);
178
- this._offset += strByteLength;
176
+ var uint8Array = new Uint8Array(this.data.buffer, this._position + this._dataView.byteOffset, strByteLength);
177
+ this._position += strByteLength;
179
178
  return Utils.decodeText(uint8Array);
180
179
  };
181
180
  /**
182
181
  * image data 放在最后
183
182
  */ _proto.nextImageData = function nextImageData(count) {
184
- return new Uint8Array(this.data.buffer, this.data.byteOffset + this._offset);
183
+ return new Uint8Array(this.data.buffer, this.data.byteOffset + this._position);
185
184
  };
186
185
  _proto.nextImagesData = function nextImagesData(count) {
187
186
  var imagesLen = new Array(count);
188
187
  // Start offset of Uint32Array should be a multiple of 4. ref: https://stackoverflow.com/questions/15417310/why-typed-array-constructors-require-offset-to-be-multiple-of-underlying-type-si
189
188
  for(var i = 0; i < count; i++){
190
- var len = this._dataView.getUint32(this._offset, this._littleEndian);
189
+ var len = this._dataView.getUint32(this._position, this._littleEndian);
191
190
  imagesLen[i] = len;
192
- this._offset += 4;
191
+ this._position += 4;
193
192
  }
194
193
  var imagesData = [];
195
194
  for(var i1 = 0; i1 < count; i1++){
196
195
  var len1 = imagesLen[i1];
197
- var buffer = new Uint8Array(this.data.buffer, this._dataView.byteOffset + this._offset, len1);
198
- this._offset += len1;
196
+ var buffer = new Uint8Array(this.data.buffer, this._dataView.byteOffset + this._position, len1);
197
+ this._position += len1;
199
198
  imagesData.push(buffer);
200
199
  }
201
200
  return imagesData;
202
201
  };
203
202
  _proto.skip = function skip(bytes) {
204
- this._offset += bytes;
203
+ this._position += bytes;
205
204
  return this;
206
205
  };
207
206
  _proto.scan = function scan(maxByteLength, term) {
208
207
  if (term === void 0) term = 0x00;
209
- var byteOffset = this._offset;
208
+ var byteOffset = this._position;
210
209
  var byteLength = 0;
211
- while(this._dataView.getUint8(this._offset) !== term && byteLength < maxByteLength){
210
+ while(this._dataView.getUint8(this._position) !== term && byteLength < maxByteLength){
212
211
  byteLength++;
213
- this._offset++;
212
+ this._position++;
214
213
  }
215
- if (byteLength < maxByteLength) this._offset++;
214
+ if (byteLength < maxByteLength) this._position++;
216
215
  return new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + byteOffset, byteLength);
217
216
  };
218
217
  _create_class(BufferReader, [
219
218
  {
220
219
  key: "position",
221
220
  get: function get() {
222
- return this._offset;
221
+ return this._position;
223
222
  }
224
223
  },
225
224
  {
226
225
  key: "offset",
227
226
  get: function get() {
228
- return this._offset + this._baseOffset;
227
+ return this._position + this._baseOffset;
229
228
  }
230
229
  }
231
230
  ]);
@@ -289,75 +288,74 @@ var MeshDecoder = /*#__PURE__*/ function() {
289
288
  var encodedMeshData = JSON.parse(jsonDataString);
290
289
  // @ts-ignore Vector3 is not compatible with {x: number, y: number, z: number}.
291
290
  encodedMeshData.bounds && modelMesh.bounds.copyFrom(encodedMeshData.bounds);
292
- var offset = Math.ceil(bufferReader.offset / 4) * 4;
291
+ var offset = Math.ceil(bufferReader.offset / 4) * 4 + bufferReader.data.byteOffset;
293
292
  var buffer = bufferReader.data.buffer;
294
- var byteOffset = bufferReader.data.byteOffset;
295
- var float32Array = new Float32Array(buffer, encodedMeshData.positions.start + offset + byteOffset, (encodedMeshData.positions.end - encodedMeshData.positions.start) / 4);
293
+ var float32Array = new Float32Array(buffer, encodedMeshData.positions.start + offset, (encodedMeshData.positions.end - encodedMeshData.positions.start) / 4);
296
294
  var vertexCount = float32Array.length / 3;
297
295
  var positions = float32ArrayToVector3(float32Array, vertexCount);
298
296
  modelMesh.setPositions(positions);
299
297
  if (encodedMeshData.normals) {
300
- var float32Array1 = new Float32Array(buffer, encodedMeshData.normals.start + offset + byteOffset, (encodedMeshData.normals.end - encodedMeshData.normals.start) / 4);
298
+ var float32Array1 = new Float32Array(buffer, encodedMeshData.normals.start + offset, (encodedMeshData.normals.end - encodedMeshData.normals.start) / 4);
301
299
  var normals = float32ArrayToVector3(float32Array1, vertexCount);
302
300
  modelMesh.setNormals(normals);
303
301
  }
304
302
  if (encodedMeshData.uvs) {
305
- var float32Array2 = new Float32Array(buffer, encodedMeshData.uvs.start + offset + byteOffset, (encodedMeshData.uvs.end - encodedMeshData.uvs.start) / 4);
303
+ var float32Array2 = new Float32Array(buffer, encodedMeshData.uvs.start + offset, (encodedMeshData.uvs.end - encodedMeshData.uvs.start) / 4);
306
304
  modelMesh.setUVs(float32ArrayToVector2(float32Array2, vertexCount));
307
305
  }
308
306
  if (encodedMeshData.uv1) {
309
- var float32Array3 = new Float32Array(buffer, encodedMeshData.uv1.start + offset + byteOffset, (encodedMeshData.uv1.end - encodedMeshData.uv1.start) / 4);
307
+ var float32Array3 = new Float32Array(buffer, encodedMeshData.uv1.start + offset, (encodedMeshData.uv1.end - encodedMeshData.uv1.start) / 4);
310
308
  modelMesh.setUVs(float32ArrayToVector2(float32Array3, vertexCount), 1);
311
309
  }
312
310
  if (encodedMeshData.uv2) {
313
- var float32Array4 = new Float32Array(buffer, encodedMeshData.uv2.start + offset + byteOffset, (encodedMeshData.uv2.end - encodedMeshData.uv2.start) / 4);
311
+ var float32Array4 = new Float32Array(buffer, encodedMeshData.uv2.start + offset, (encodedMeshData.uv2.end - encodedMeshData.uv2.start) / 4);
314
312
  modelMesh.setUVs(float32ArrayToVector2(float32Array4, vertexCount), 2);
315
313
  }
316
314
  if (encodedMeshData.uv3) {
317
- var float32Array5 = new Float32Array(buffer, encodedMeshData.uv3.start + offset + byteOffset, (encodedMeshData.uv3.end - encodedMeshData.uv3.start) / 4);
315
+ var float32Array5 = new Float32Array(buffer, encodedMeshData.uv3.start + offset, (encodedMeshData.uv3.end - encodedMeshData.uv3.start) / 4);
318
316
  modelMesh.setUVs(float32ArrayToVector2(float32Array5, vertexCount), 3);
319
317
  }
320
318
  if (encodedMeshData.uv4) {
321
- var float32Array6 = new Float32Array(buffer, encodedMeshData.uv4.start + offset + byteOffset, (encodedMeshData.uv4.end - encodedMeshData.uv4.start) / 4);
319
+ var float32Array6 = new Float32Array(buffer, encodedMeshData.uv4.start + offset, (encodedMeshData.uv4.end - encodedMeshData.uv4.start) / 4);
322
320
  modelMesh.setUVs(float32ArrayToVector2(float32Array6, vertexCount), 4);
323
321
  }
324
322
  if (encodedMeshData.uv5) {
325
- var float32Array7 = new Float32Array(buffer, encodedMeshData.uv5.start + offset + byteOffset, (encodedMeshData.uv5.end - encodedMeshData.uv5.start) / 4);
323
+ var float32Array7 = new Float32Array(buffer, encodedMeshData.uv5.start + offset, (encodedMeshData.uv5.end - encodedMeshData.uv5.start) / 4);
326
324
  modelMesh.setUVs(float32ArrayToVector2(float32Array7, vertexCount), 5);
327
325
  }
328
326
  if (encodedMeshData.uv6) {
329
- var float32Array8 = new Float32Array(buffer, encodedMeshData.uv6.start + offset + byteOffset, (encodedMeshData.uv6.end - encodedMeshData.uv6.start) / 4);
327
+ var float32Array8 = new Float32Array(buffer, encodedMeshData.uv6.start + offset, (encodedMeshData.uv6.end - encodedMeshData.uv6.start) / 4);
330
328
  modelMesh.setUVs(float32ArrayToVector2(float32Array8, vertexCount), 6);
331
329
  }
332
330
  if (encodedMeshData.uv7) {
333
- var float32Array9 = new Float32Array(buffer, encodedMeshData.uv7.start + offset + byteOffset, (encodedMeshData.uv7.end - encodedMeshData.uv7.start) / 4);
331
+ var float32Array9 = new Float32Array(buffer, encodedMeshData.uv7.start + offset, (encodedMeshData.uv7.end - encodedMeshData.uv7.start) / 4);
334
332
  modelMesh.setUVs(float32ArrayToVector2(float32Array9, vertexCount), 7);
335
333
  }
336
334
  if (encodedMeshData.colors) {
337
- var float32Array10 = new Float32Array(buffer, encodedMeshData.colors.start + offset + byteOffset, (encodedMeshData.colors.end - encodedMeshData.colors.start) / 4);
335
+ var float32Array10 = new Float32Array(buffer, encodedMeshData.colors.start + offset, (encodedMeshData.colors.end - encodedMeshData.colors.start) / 4);
338
336
  modelMesh.setColors(float32ArrayToVColor(float32Array10, vertexCount));
339
337
  }
340
338
  if (encodedMeshData.boneWeights) {
341
- var float32Array11 = new Float32Array(buffer, encodedMeshData.boneWeights.start + offset + byteOffset, (encodedMeshData.boneWeights.end - encodedMeshData.boneWeights.start) / 4);
339
+ var float32Array11 = new Float32Array(buffer, encodedMeshData.boneWeights.start + offset, (encodedMeshData.boneWeights.end - encodedMeshData.boneWeights.start) / 4);
342
340
  modelMesh.setBoneWeights(float32ArrayToVector4(float32Array11, vertexCount));
343
341
  }
344
342
  if (encodedMeshData.boneIndices) {
345
- var float32Array12 = new Float32Array(buffer, encodedMeshData.boneIndices.start + offset + byteOffset, (encodedMeshData.boneIndices.end - encodedMeshData.boneIndices.start) / 4);
343
+ var float32Array12 = new Float32Array(buffer, encodedMeshData.boneIndices.start + offset, (encodedMeshData.boneIndices.end - encodedMeshData.boneIndices.start) / 4);
346
344
  modelMesh.setBoneIndices(float32ArrayToVector4(float32Array12, vertexCount));
347
345
  }
348
346
  if (encodedMeshData.blendShapes) {
349
347
  encodedMeshData.blendShapes.forEach(function(blendShapeData) {
350
348
  var blendShape = new BlendShape(blendShapeData.name);
351
349
  blendShapeData.frames.forEach(function(frameData) {
352
- var positionArray = new Float32Array(buffer, frameData.deltaPosition.start + offset + byteOffset, (frameData.deltaPosition.end - frameData.deltaPosition.start) / 4);
350
+ var positionArray = new Float32Array(buffer, frameData.deltaPosition.start + offset, (frameData.deltaPosition.end - frameData.deltaPosition.start) / 4);
353
351
  var count = positionArray.length / 3;
354
352
  var deltaPosition = float32ArrayToVector3(positionArray, count);
355
353
  if (frameData.deltaNormals) {
356
- var normalsArray = new Float32Array(buffer, frameData.deltaNormals.start + offset + byteOffset, (frameData.deltaNormals.end - frameData.deltaNormals.start) / 4);
354
+ var normalsArray = new Float32Array(buffer, frameData.deltaNormals.start + offset, (frameData.deltaNormals.end - frameData.deltaNormals.start) / 4);
357
355
  float32ArrayToVector3(normalsArray, count);
358
356
  }
359
357
  if (frameData.deltaTangents) {
360
- var tangentsArray = new Float32Array(buffer, frameData.deltaTangents.start + offset + byteOffset, (frameData.deltaTangents.end - frameData.deltaTangents.start) / 4);
358
+ var tangentsArray = new Float32Array(buffer, frameData.deltaTangents.start + offset, (frameData.deltaTangents.end - frameData.deltaTangents.start) / 4);
361
359
  float32ArrayToVector4(tangentsArray, count);
362
360
  }
363
361
  blendShape.addFrame(frameData.weight, deltaPosition);
@@ -368,9 +366,9 @@ var MeshDecoder = /*#__PURE__*/ function() {
368
366
  if (encodedMeshData.indices) {
369
367
  var indices = null;
370
368
  if (encodedMeshData.indices.type === 0) {
371
- indices = new Uint16Array(buffer, encodedMeshData.indices.start + offset + byteOffset, (encodedMeshData.indices.end - encodedMeshData.indices.start) / 2);
369
+ indices = new Uint16Array(buffer, encodedMeshData.indices.start + offset, (encodedMeshData.indices.end - encodedMeshData.indices.start) / 2);
372
370
  } else {
373
- indices = new Uint32Array(buffer, encodedMeshData.indices.start + offset + byteOffset, (encodedMeshData.indices.end - encodedMeshData.indices.start) / 4);
371
+ indices = new Uint32Array(buffer, encodedMeshData.indices.start + offset, (encodedMeshData.indices.end - encodedMeshData.indices.start) / 4);
374
372
  }
375
373
  modelMesh.setIndices(indices);
376
374
  }
@@ -535,15 +533,23 @@ var ReflectionParser = /*#__PURE__*/ function() {
535
533
  if (position) entity.transform.position.copyFrom(position);
536
534
  if (rotation) entity.transform.rotation.copyFrom(rotation);
537
535
  if (scale) entity.transform.scale.copyFrom(scale);
536
+ var _entityConfig_layer;
537
+ entity.layer = (_entityConfig_layer = entityConfig.layer) != null ? _entityConfig_layer : entity.layer;
538
538
  return entity;
539
539
  });
540
540
  };
541
541
  _proto.parseClassObject = function parseClassObject(item) {
542
+ var _this = this;
542
543
  var Class = Loader.getClass(item.class);
543
544
  var _item_constructParams;
544
545
  var params = (_item_constructParams = item.constructParams) != null ? _item_constructParams : [];
545
- var instance = _construct(Class, [].concat(params));
546
- return this.parsePropsAndMethods(instance, item);
546
+ return Promise.all(params.map(function(param) {
547
+ return _this.parseBasicType(param);
548
+ })).then(function(resultParams) {
549
+ return _construct(Class, [].concat(resultParams));
550
+ }).then(function(instance) {
551
+ return _this.parsePropsAndMethods(instance, item);
552
+ });
547
553
  };
548
554
  _proto.parsePropsAndMethods = function parsePropsAndMethods(instance, item) {
549
555
  var promises = [];
@@ -551,16 +557,14 @@ var ReflectionParser = /*#__PURE__*/ function() {
551
557
  for(var methodName in item.methods){
552
558
  var methodParams = item.methods[methodName];
553
559
  for(var i = 0, count = methodParams.length; i < count; i++){
554
- var params = methodParams[i];
555
- var promise = this.parseMethod(instance, methodName, params);
556
- promises.push(promise);
560
+ promises.push(this.parseMethod(instance, methodName, methodParams[i]));
557
561
  }
558
562
  }
559
563
  }
560
564
  if (item.props) {
561
565
  var _this = this, _loop = function(key) {
562
566
  var value = item.props[key];
563
- var promise = _this.parseBasicType(value).then(function(v) {
567
+ var promise = _this.parseBasicType(value, instance[key]).then(function(v) {
564
568
  return instance[key] = v;
565
569
  });
566
570
  promises.push(promise);
@@ -582,7 +586,7 @@ var ReflectionParser = /*#__PURE__*/ function() {
582
586
  return (_instance = instance)[methodName].apply(_instance, [].concat(result));
583
587
  });
584
588
  };
585
- _proto.parseBasicType = function parseBasicType(value) {
589
+ _proto.parseBasicType = function parseBasicType(value, originValue) {
586
590
  var _this = this;
587
591
  if (Array.isArray(value)) {
588
592
  return Promise.all(value.map(function(item) {
@@ -599,13 +603,33 @@ var ReflectionParser = /*#__PURE__*/ function() {
599
603
  } else if (ReflectionParser._isEntityRef(value)) {
600
604
  // entity reference
601
605
  return Promise.resolve(this._context.entityMap.get(value.entityId));
602
- } else {
603
- // basic type
604
- return Promise.resolve(value);
606
+ } else if (originValue) {
607
+ var _this1 = this, _loop = function(key) {
608
+ if (key === "methods") {
609
+ var methods = value[key];
610
+ for(var methodName in methods){
611
+ var methodParams = methods[methodName];
612
+ for(var i = 0, count = methodParams.length; i < count; i++){
613
+ var params = methodParams[i];
614
+ var promise = _this1.parseMethod(originValue, methodName, params);
615
+ promises.push(promise);
616
+ }
617
+ }
618
+ } else {
619
+ promises.push(_this1.parseBasicType(value[key], originValue[key]).then(function(v) {
620
+ return originValue[key] = v;
621
+ }));
622
+ }
623
+ };
624
+ var promises = [];
625
+ for(var key in value)_loop(key);
626
+ return Promise.all(promises).then(function() {
627
+ return originValue;
628
+ });
605
629
  }
606
- } else {
607
- return Promise.resolve(value);
608
630
  }
631
+ // primitive type
632
+ return Promise.resolve(value);
609
633
  };
610
634
  _proto._getEntityByConfig = function _getEntityByConfig(entityConfig) {
611
635
  // @ts-ignore
@@ -710,6 +734,7 @@ var AnimationClipDecoder = /*#__PURE__*/ function() {
710
734
  var componentStr = bufferReader.nextStr();
711
735
  var componentType = ComponentMap[componentStr];
712
736
  var property = bufferReader.nextStr();
737
+ var getProperty = bufferReader.nextStr();
713
738
  var curve = void 0;
714
739
  var interpolation = bufferReader.nextUint8();
715
740
  var keysLen = bufferReader.nextUint16();
@@ -834,13 +859,42 @@ var AnimationClipDecoder = /*#__PURE__*/ function() {
834
859
  for(var j7 = 0; j7 < keysLen; ++j7){
835
860
  var keyframe8 = new Keyframe();
836
861
  keyframe8.time = bufferReader.nextFloat32();
837
- keyframe8.value = JSON.parse(bufferReader.nextStr());
862
+ var str = bufferReader.nextStr();
863
+ if (str) {
864
+ keyframe8.value = JSON.parse(str);
865
+ } else {
866
+ keyframe8.value = null;
867
+ }
838
868
  curve.addKey(keyframe8);
839
869
  }
840
870
  break;
841
871
  }
872
+ case "AnimationBoolCurve":
873
+ {
874
+ curve = new AnimationBoolCurve();
875
+ curve.interpolation = interpolation;
876
+ for(var j8 = 0; j8 < keysLen; ++j8){
877
+ var keyframe9 = new Keyframe();
878
+ keyframe9.time = bufferReader.nextFloat32();
879
+ keyframe9.value = bufferReader.nextUint8() === 1;
880
+ curve.addKey(keyframe9);
881
+ }
882
+ break;
883
+ }
884
+ case "AnimationStringCurve":
885
+ {
886
+ curve = new AnimationStringCurve();
887
+ curve.interpolation = interpolation;
888
+ for(var j9 = 0; j9 < keysLen; ++j9){
889
+ var keyframe10 = new Keyframe();
890
+ keyframe10.time = bufferReader.nextFloat32();
891
+ keyframe10.value = bufferReader.nextStr();
892
+ curve.addKey(keyframe10);
893
+ }
894
+ break;
895
+ }
842
896
  }
843
- clip.addCurveBinding(relativePath, componentType, property, curve);
897
+ clip.addCurveBinding(relativePath, componentType, property, getProperty, curve);
844
898
  }
845
899
  resolve(clip);
846
900
  });
@@ -1094,26 +1148,34 @@ var AnimationClipLoader = /*#__PURE__*/ function(Loader1) {
1094
1148
  var curveBindingPromises = clip.curveBindings.map(function(curveBinding) {
1095
1149
  var curve = curveBinding.curve;
1096
1150
  var promises = curve.keys.map(function(key) {
1097
- var value = key.value;
1098
- if (typeof value === "object" && value.refId) {
1099
- return new Promise(function(resolve) {
1100
- resourceManager// @ts-ignore
1101
- .getResourceByRef(value).then(function(asset) {
1102
- key.value = asset;
1103
- resolve(key);
1104
- }).catch(reject);
1105
- });
1106
- }
1151
+ return _this._parseKeyframeValue(key, resourceManager).then(function(actualValue) {
1152
+ key.value = actualValue;
1153
+ });
1107
1154
  });
1108
1155
  return Promise.all(promises);
1109
1156
  });
1110
1157
  return Promise.all(curveBindingPromises).then(function() {
1111
1158
  resolve(clip);
1112
1159
  });
1113
- });
1160
+ }).catch(reject);
1114
1161
  }).catch(reject);
1115
1162
  });
1116
1163
  };
1164
+ _proto._parseKeyframeValue = function _parseKeyframeValue(keyframe, resourceManager) {
1165
+ var _value;
1166
+ var value = keyframe.value;
1167
+ if (typeof value === "object" && ((_value = value) == null ? void 0 : _value.refId)) {
1168
+ return new Promise(function(resolve) {
1169
+ resourceManager// @ts-ignore
1170
+ .getResourceByRef(value).then(function(asset) {
1171
+ keyframe.value = asset;
1172
+ resolve(keyframe);
1173
+ });
1174
+ });
1175
+ } else {
1176
+ return Promise.resolve(keyframe.value);
1177
+ }
1178
+ };
1117
1179
  return AnimationClipLoader;
1118
1180
  }(Loader);
1119
1181
  AnimationClipLoader = __decorate([
@@ -1389,6 +1451,60 @@ FontLoader = __decorate([
1389
1451
  _this.url = url;
1390
1452
  return _this;
1391
1453
  }
1454
+ var _proto = GLTFResource.prototype;
1455
+ /**
1456
+ * Instantiate scene root entity.
1457
+ * @param sceneIndex - Scene index
1458
+ * @returns Root entity
1459
+ */ _proto.instantiateSceneRoot = function instantiateSceneRoot(sceneIndex) {
1460
+ var sceneRoot = sceneIndex === undefined ? this._defaultSceneRoot : this._sceneRoots[sceneIndex];
1461
+ return sceneRoot.clone();
1462
+ };
1463
+ _proto._onDestroy = function _onDestroy() {
1464
+ ReferResource1.prototype._onDestroy.call(this);
1465
+ var _this = this, textures = _this.textures, materials = _this.materials, meshes = _this.meshes;
1466
+ textures && this._disassociationSuperResource(textures);
1467
+ materials && this._disassociationSuperResource(materials);
1468
+ if (meshes) {
1469
+ for(var i = 0, n = meshes.length; i < n; i++){
1470
+ this._disassociationSuperResource(meshes[i]);
1471
+ }
1472
+ }
1473
+ };
1474
+ _proto._disassociationSuperResource = function _disassociationSuperResource(resources) {
1475
+ for(var i = 0, n = resources.length; i < n; i++){
1476
+ // @ts-ignore
1477
+ resources[i]._disassociationSuperResource(this);
1478
+ }
1479
+ };
1480
+ _create_class(GLTFResource, [
1481
+ {
1482
+ key: "extensionsData",
1483
+ get: /**
1484
+ * Extensions data.
1485
+ */ function get() {
1486
+ return this._extensionsData;
1487
+ }
1488
+ },
1489
+ {
1490
+ key: "sceneRoots",
1491
+ get: /**
1492
+ * @deprecated Please use `instantiateSceneRoot` instead.
1493
+ * RootEntities after SceneParser.
1494
+ */ function get() {
1495
+ return this._sceneRoots;
1496
+ }
1497
+ },
1498
+ {
1499
+ key: "defaultSceneRoot",
1500
+ get: /**
1501
+ * @deprecated Please use `instantiateSceneRoot` instead.
1502
+ * RootEntity after SceneParser.
1503
+ */ function get() {
1504
+ return this._defaultSceneRoot;
1505
+ }
1506
+ }
1507
+ ]);
1392
1508
  return GLTFResource;
1393
1509
  }(ReferResource);
1394
1510
 
@@ -1542,12 +1658,29 @@ var TextureWrapMode;
1542
1658
  /**
1543
1659
  * @internal
1544
1660
  */ var GLTFParserContext = /*#__PURE__*/ function() {
1545
- function GLTFParserContext(glTFResource, resourceManager, keepMeshData) {
1661
+ function GLTFParserContext(glTFResource, resourceManager, params) {
1662
+ var _this = this;
1546
1663
  this.glTFResource = glTFResource;
1547
1664
  this.resourceManager = resourceManager;
1548
- this.keepMeshData = keepMeshData;
1665
+ this.params = params;
1549
1666
  this.accessorBufferCache = {};
1550
1667
  this._resourceCache = new Map();
1668
+ this._progress = {
1669
+ taskDetail: {},
1670
+ taskComplete: {
1671
+ loaded: 0,
1672
+ total: 0
1673
+ }
1674
+ };
1675
+ this./**
1676
+ * @internal
1677
+ */ _onTaskDetail = function(url, loaded, total) {
1678
+ var _this__progress_taskDetail, _url;
1679
+ var detail = (_this__progress_taskDetail = _this._progress.taskDetail)[_url = url] || (_this__progress_taskDetail[_url] = {});
1680
+ detail.loaded = loaded;
1681
+ detail.total = total;
1682
+ _this._setTaskDetailProgress(url, loaded, total);
1683
+ };
1551
1684
  this.contentRestorer = new GLTFContentRestorer(glTFResource);
1552
1685
  }
1553
1686
  var _proto = GLTFParserContext.prototype;
@@ -1570,7 +1703,7 @@ var TextureWrapMode;
1570
1703
  var glTFItems = this.glTF[glTFSchemaMap[type]];
1571
1704
  if (glTFItems && (index === undefined || glTFItems[index])) {
1572
1705
  if (index === undefined) {
1573
- resource = type === 7 ? glTFItems.map(function(_, index) {
1706
+ resource = type === 8 ? glTFItems.map(function(_, index) {
1574
1707
  return _this.get(type, index);
1575
1708
  }) : Promise.all(glTFItems.map(function(_, index) {
1576
1709
  return _this.get(type, index);
@@ -1588,27 +1721,65 @@ var TextureWrapMode;
1588
1721
  };
1589
1722
  _proto.parse = function parse() {
1590
1723
  var _this = this;
1591
- return this.get(0).then(function(json) {
1724
+ var promise = this.get(0).then(function(json) {
1592
1725
  _this.glTF = json;
1593
1726
  return Promise.all([
1594
1727
  _this.get(1),
1595
- _this.get(4),
1596
1728
  _this.get(5),
1597
1729
  _this.get(6),
1598
- _this.get(8),
1730
+ _this.get(7),
1599
1731
  _this.get(9),
1732
+ _this.get(10),
1600
1733
  _this.get(2)
1601
1734
  ]).then(function() {
1735
+ var glTFResource = _this.glTFResource;
1736
+ if (glTFResource.skins || glTFResource.animations) {
1737
+ _this._createAnimator(_this, glTFResource.animations);
1738
+ }
1602
1739
  _this.resourceManager.addContentRestorer(_this.contentRestorer);
1603
- return _this.glTFResource;
1740
+ return glTFResource;
1604
1741
  });
1605
1742
  });
1743
+ this._addTaskCompletePromise(promise);
1744
+ return promise;
1745
+ };
1746
+ /**
1747
+ * @internal
1748
+ */ _proto._addTaskCompletePromise = function _addTaskCompletePromise(taskPromise) {
1749
+ var _this = this;
1750
+ var task = this._progress.taskComplete;
1751
+ task.total += 1;
1752
+ taskPromise.then(function() {
1753
+ _this._setTaskCompleteProgress(++task.loaded, task.total);
1754
+ });
1755
+ };
1756
+ _proto._createAnimator = function _createAnimator(context, animations) {
1757
+ var defaultSceneRoot = context.glTFResource.defaultSceneRoot;
1758
+ var animator = defaultSceneRoot.addComponent(Animator);
1759
+ var animatorController = new AnimatorController();
1760
+ var layer = new AnimatorControllerLayer("layer");
1761
+ var animatorStateMachine = new AnimatorStateMachine();
1762
+ animatorController.addLayer(layer);
1763
+ animator.animatorController = animatorController;
1764
+ layer.stateMachine = animatorStateMachine;
1765
+ if (animations) {
1766
+ for(var i = 0; i < animations.length; i++){
1767
+ var animationClip = animations[i];
1768
+ var name = animationClip.name;
1769
+ var uniqueName = animatorStateMachine.makeUniqueStateName(name);
1770
+ if (uniqueName !== name) {
1771
+ console.warn("AnimatorState name is existed, name: " + name + " reset to " + uniqueName);
1772
+ }
1773
+ var animatorState = animatorStateMachine.addState(uniqueName);
1774
+ animatorState.clip = animationClip;
1775
+ }
1776
+ }
1606
1777
  };
1607
1778
  _proto._handleSubAsset = function _handleSubAsset(resource, type, index) {
1608
1779
  var _this = this;
1609
1780
  var glTFResourceKey = glTFResourceMap[type];
1610
1781
  if (!glTFResourceKey) return;
1611
- if (type === 7) {
1782
+ if (type === 8) {
1612
1783
  var _this_glTFResource, _glTFResourceKey;
1613
1784
  ((_this_glTFResource = this.glTFResource)[_glTFResourceKey = glTFResourceKey] || (_this_glTFResource[_glTFResourceKey] = []))[index] = resource;
1614
1785
  } else {
@@ -1616,7 +1787,7 @@ var TextureWrapMode;
1616
1787
  resource.then(function(item) {
1617
1788
  var _this_glTFResource, _glTFResourceKey;
1618
1789
  ((_this_glTFResource = _this.glTFResource)[_glTFResourceKey = glTFResourceKey] || (_this_glTFResource[_glTFResourceKey] = []))[index] = item;
1619
- if (type === 6) {
1790
+ if (type === 7) {
1620
1791
  for(var i = 0, length = item.length; i < length; i++){
1621
1792
  var mesh = item[i];
1622
1793
  // @ts-ignore
@@ -1656,17 +1827,18 @@ var GLTFParserType;
1656
1827
  GLTFParserType[GLTFParserType["Validator"] = 1] = "Validator";
1657
1828
  GLTFParserType[GLTFParserType["Scene"] = 2] = "Scene";
1658
1829
  GLTFParserType[GLTFParserType["Buffer"] = 3] = "Buffer";
1659
- GLTFParserType[GLTFParserType["Texture"] = 4] = "Texture";
1660
- GLTFParserType[GLTFParserType["Material"] = 5] = "Material";
1661
- GLTFParserType[GLTFParserType["Mesh"] = 6] = "Mesh";
1662
- GLTFParserType[GLTFParserType["Entity"] = 7] = "Entity";
1663
- GLTFParserType[GLTFParserType["Skin"] = 8] = "Skin";
1664
- GLTFParserType[GLTFParserType["Animation"] = 9] = "Animation";
1830
+ GLTFParserType[GLTFParserType["BufferView"] = 4] = "BufferView";
1831
+ GLTFParserType[GLTFParserType["Texture"] = 5] = "Texture";
1832
+ GLTFParserType[GLTFParserType["Material"] = 6] = "Material";
1833
+ GLTFParserType[GLTFParserType["Mesh"] = 7] = "Mesh";
1834
+ GLTFParserType[GLTFParserType["Entity"] = 8] = "Entity";
1835
+ GLTFParserType[GLTFParserType["Skin"] = 9] = "Skin";
1836
+ GLTFParserType[GLTFParserType["Animation"] = 10] = "Animation";
1665
1837
  })(GLTFParserType || (GLTFParserType = {}));
1666
1838
  var _obj;
1667
- var glTFSchemaMap = (_obj = {}, _obj[2] = "scenes", _obj[3] = "buffers", _obj[4] = "textures", _obj[5] = "materials", _obj[6] = "meshes", _obj[7] = "nodes", _obj[8] = "skins", _obj[9] = "animations", _obj);
1839
+ var glTFSchemaMap = (_obj = {}, _obj[2] = "scenes", _obj[3] = "buffers", _obj[5] = "textures", _obj[6] = "materials", _obj[7] = "meshes", _obj[8] = "nodes", _obj[9] = "skins", _obj[10] = "animations", _obj[4] = "bufferViews", _obj);
1668
1840
  var _obj1;
1669
- var glTFResourceMap = (_obj1 = {}, _obj1[2] = "sceneRoots", _obj1[4] = "textures", _obj1[5] = "materials", _obj1[6] = "meshes", _obj1[7] = "entities", _obj1[8] = "skins", _obj1[9] = "animations", _obj1);
1841
+ var glTFResourceMap = (_obj1 = {}, _obj1[2] = "_sceneRoots", _obj1[5] = "textures", _obj1[6] = "materials", _obj1[7] = "meshes", _obj1[8] = "entities", _obj1[9] = "skins", _obj1[10] = "animations", _obj1);
1670
1842
  function registerGLTFParser(pipeline) {
1671
1843
  return function(Parser) {
1672
1844
  var parser = new Parser();
@@ -1772,11 +1944,10 @@ function registerGLTFParser(pipeline) {
1772
1944
  GLTFUtils.getAccessorBuffer = function getAccessorBuffer(context, bufferViews, accessor) {
1773
1945
  var componentType = accessor.componentType;
1774
1946
  var bufferView = bufferViews[accessor.bufferView];
1775
- return context.get(GLTFParserType.Buffer).then(function(buffers) {
1947
+ return context.get(GLTFParserType.BufferView, accessor.bufferView).then(function(bufferViewData) {
1776
1948
  var bufferIndex = bufferView.buffer;
1777
- var buffer = buffers[bufferIndex];
1778
- var _bufferView_byteOffset;
1779
- var bufferByteOffset = (_bufferView_byteOffset = bufferView.byteOffset) != null ? _bufferView_byteOffset : 0;
1949
+ var _bufferViewData_byteOffset;
1950
+ var bufferByteOffset = (_bufferViewData_byteOffset = bufferViewData.byteOffset) != null ? _bufferViewData_byteOffset : 0;
1780
1951
  var _accessor_byteOffset;
1781
1952
  var byteOffset = (_accessor_byteOffset = accessor.byteOffset) != null ? _accessor_byteOffset : 0;
1782
1953
  var TypedArray = GLTFUtils.getComponentType(componentType);
@@ -1795,19 +1966,21 @@ function registerGLTFParser(pipeline) {
1795
1966
  if (!bufferInfo) {
1796
1967
  var offset = bufferByteOffset + bufferSlice * bufferStride;
1797
1968
  var count = accessorCount * (bufferStride / dataElementBytes);
1798
- var data = new TypedArray(buffer, offset, count);
1969
+ var data = new TypedArray(bufferViewData.buffer, offset, count);
1799
1970
  accessorBufferCache[bufferCacheKey] = bufferInfo = new BufferInfo(data, true, bufferStride);
1800
1971
  bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(bufferIndex, TypedArray, offset, count));
1801
1972
  }
1802
1973
  } else {
1803
1974
  var offset1 = bufferByteOffset + byteOffset;
1804
1975
  var count1 = accessorCount * dataElementSize;
1805
- var data1 = new TypedArray(buffer, offset1, count1);
1976
+ var data1 = new TypedArray(bufferViewData.buffer, offset1, count1);
1806
1977
  bufferInfo = new BufferInfo(data1, false, elementStride);
1807
1978
  bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(bufferIndex, TypedArray, offset1, count1));
1808
1979
  }
1809
1980
  if (accessor.sparse) {
1810
- GLTFUtils.processingSparseData(bufferViews, accessor, buffers, bufferInfo);
1981
+ return GLTFUtils.processingSparseData(context, accessor, bufferInfo).then(function() {
1982
+ return bufferInfo;
1983
+ });
1811
1984
  }
1812
1985
  return bufferInfo;
1813
1986
  });
@@ -1883,40 +2056,43 @@ function registerGLTFParser(pipeline) {
1883
2056
  };
1884
2057
  /**
1885
2058
  * Get accessor data.
1886
- */ GLTFUtils.processingSparseData = function processingSparseData(bufferViews, accessor, buffers, bufferInfo) {
2059
+ */ GLTFUtils.processingSparseData = function processingSparseData(context, accessor, bufferInfo) {
1887
2060
  var restoreInfo = bufferInfo.restoreInfo;
2061
+ var bufferViews = context.glTF.bufferViews;
1888
2062
  var accessorTypeSize = GLTFUtils.getAccessorTypeSize(accessor.type);
1889
2063
  var TypedArray = GLTFUtils.getComponentType(accessor.componentType);
1890
2064
  var data = bufferInfo.data.slice();
1891
2065
  var _accessor_sparse = accessor.sparse, count = _accessor_sparse.count, indices = _accessor_sparse.indices, values = _accessor_sparse.values;
1892
2066
  var indicesBufferView = bufferViews[indices.bufferView];
1893
2067
  var valuesBufferView = bufferViews[values.bufferView];
1894
- var indicesBufferIndex = indicesBufferView.buffer;
1895
- var valuesBufferIndex = valuesBufferView.buffer;
1896
- var indicesArrayBuffer = buffers[indicesBufferIndex];
1897
- var valuesArrayBuffer = buffers[valuesBufferIndex];
1898
- var _indices_byteOffset, _indicesBufferView_byteOffset;
1899
- var indicesByteOffset = ((_indices_byteOffset = indices.byteOffset) != null ? _indices_byteOffset : 0) + ((_indicesBufferView_byteOffset = indicesBufferView.byteOffset) != null ? _indicesBufferView_byteOffset : 0);
1900
- var indicesByteLength = indicesBufferView.byteLength;
1901
- var _values_byteOffset, _valuesBufferView_byteOffset;
1902
- var valuesByteOffset = ((_values_byteOffset = values.byteOffset) != null ? _values_byteOffset : 0) + ((_valuesBufferView_byteOffset = valuesBufferView.byteOffset) != null ? _valuesBufferView_byteOffset : 0);
1903
- var valuesByteLength = valuesBufferView.byteLength;
1904
- restoreInfo.typeSize = accessorTypeSize;
1905
- restoreInfo.sparseCount = count;
1906
- var IndexTypeArray = GLTFUtils.getComponentType(indices.componentType);
1907
- var indexLength = indicesByteLength / IndexTypeArray.BYTES_PER_ELEMENT;
1908
- var indicesArray = new IndexTypeArray(indicesArrayBuffer, indicesByteOffset, indexLength);
1909
- restoreInfo.sparseIndices = new RestoreDataAccessor(indicesBufferIndex, IndexTypeArray, indicesByteOffset, indexLength);
1910
- var valueLength = valuesByteLength / TypedArray.BYTES_PER_ELEMENT;
1911
- var valuesArray = new TypedArray(valuesArrayBuffer, valuesByteOffset, valueLength);
1912
- restoreInfo.sparseValues = new RestoreDataAccessor(valuesBufferIndex, TypedArray, valuesByteOffset, valueLength);
1913
- for(var i = 0; i < count; i++){
1914
- var replaceIndex = indicesArray[i];
1915
- for(var j = 0; j < accessorTypeSize; j++){
1916
- data[replaceIndex * accessorTypeSize + j] = valuesArray[i * accessorTypeSize + j];
2068
+ return Promise.all([
2069
+ context.get(GLTFParserType.BufferView, indices.bufferView),
2070
+ context.get(GLTFParserType.BufferView, values.bufferView)
2071
+ ]).then(function(param) {
2072
+ var indicesUint8Array = param[0], valuesUin8Array = param[1];
2073
+ var _indices_byteOffset, _indicesUint8Array_byteOffset;
2074
+ var indicesByteOffset = ((_indices_byteOffset = indices.byteOffset) != null ? _indices_byteOffset : 0) + ((_indicesUint8Array_byteOffset = indicesUint8Array.byteOffset) != null ? _indicesUint8Array_byteOffset : 0);
2075
+ var indicesByteLength = indicesUint8Array.byteLength;
2076
+ var _values_byteOffset, _valuesUin8Array_byteOffset;
2077
+ var valuesByteOffset = ((_values_byteOffset = values.byteOffset) != null ? _values_byteOffset : 0) + ((_valuesUin8Array_byteOffset = valuesUin8Array.byteOffset) != null ? _valuesUin8Array_byteOffset : 0);
2078
+ var valuesByteLength = valuesUin8Array.byteLength;
2079
+ restoreInfo.typeSize = accessorTypeSize;
2080
+ restoreInfo.sparseCount = count;
2081
+ var IndexTypeArray = GLTFUtils.getComponentType(indices.componentType);
2082
+ var indexLength = indicesByteLength / IndexTypeArray.BYTES_PER_ELEMENT;
2083
+ var indicesArray = new IndexTypeArray(indicesUint8Array.buffer, indicesByteOffset, indexLength);
2084
+ restoreInfo.sparseIndices = new RestoreDataAccessor(indicesBufferView.buffer, IndexTypeArray, indicesByteOffset, indexLength);
2085
+ var valueLength = valuesByteLength / TypedArray.BYTES_PER_ELEMENT;
2086
+ var valuesArray = new TypedArray(valuesUin8Array.buffer, valuesByteOffset, valueLength);
2087
+ restoreInfo.sparseValues = new RestoreDataAccessor(valuesBufferView.buffer, TypedArray, valuesByteOffset, valueLength);
2088
+ for(var i = 0; i < count; i++){
2089
+ var replaceIndex = indicesArray[i];
2090
+ for(var j = 0; j < accessorTypeSize; j++){
2091
+ data[replaceIndex * accessorTypeSize + j] = valuesArray[i * accessorTypeSize + j];
2092
+ }
1917
2093
  }
1918
- }
1919
- bufferInfo.data = data;
2094
+ bufferInfo.data = data;
2095
+ });
1920
2096
  };
1921
2097
  GLTFUtils.getIndexFormat = function getIndexFormat(type) {
1922
2098
  switch(type){
@@ -2243,7 +2419,7 @@ var SupercompressionScheme;
2243
2419
  alphaSliceByteLength: sgdReader.nextUint32()
2244
2420
  };
2245
2421
  }
2246
- var endpointsByteOffset = sgdByteOffset + sgdReader.offset;
2422
+ var endpointsByteOffset = sgdByteOffset + sgdReader.position;
2247
2423
  var selectorsByteOffset = endpointsByteOffset + endpointsByteLength;
2248
2424
  var tablesByteOffset = selectorsByteOffset + selectorsByteLength;
2249
2425
  var extendedByteOffset = tablesByteOffset + tablesByteLength;
@@ -2435,6 +2611,25 @@ var AbstractTranscoder = /*#__PURE__*/ function() {
2435
2611
  }();
2436
2612
 
2437
2613
  /** @internal */ function TranscodeWorkerCode$1() {
2614
+ var initPromise;
2615
+ var init = function init(wasmBinary) {
2616
+ if (!initPromise) {
2617
+ initPromise = new Promise(function(resolve, reject) {
2618
+ var BasisModule = {
2619
+ wasmBinary: wasmBinary,
2620
+ onRuntimeInitialized: function() {
2621
+ return resolve(BasisModule);
2622
+ },
2623
+ onAbort: reject
2624
+ };
2625
+ self["BASIS"](BasisModule);
2626
+ }).then(function(BasisModule) {
2627
+ BasisModule.initializeBasis();
2628
+ return BasisModule.KTX2File;
2629
+ });
2630
+ }
2631
+ return initPromise;
2632
+ };
2438
2633
  self.onmessage = function onmessage(event) {
2439
2634
  var message = event.data;
2440
2635
  switch(message.type){
@@ -2561,6 +2756,7 @@ function transcode(buffer, targetFormat, KTX2File) {
2561
2756
  var faceCount = ktx2File.getFaces();
2562
2757
  var format = getTranscodeFormatFromTarget(targetFormat, hasAlpha);
2563
2758
  var faces = new Array(faceCount);
2759
+ var isBC = format === 2 || format === 3 || format === 7;
2564
2760
  for(var face = 0; face < faceCount; face++){
2565
2761
  var mipmaps = new Array(levelCount);
2566
2762
  for(var mip = 0; mip < levelCount; mip++){
@@ -2568,8 +2764,15 @@ function transcode(buffer, targetFormat, KTX2File) {
2568
2764
  var mipWidth = void 0, mipHeight = void 0;
2569
2765
  for(var layer = 0; layer < layerCount; layer++){
2570
2766
  var levelInfo = ktx2File.getImageLevelInfo(mip, layer, face);
2571
- mipWidth = levelInfo.origWidth;
2572
- mipHeight = levelInfo.origHeight;
2767
+ // see: https://github.com/KhronosGroup/KTX-Software/issues/254
2768
+ if (isBC && mip === 0 && (width !== levelInfo.width || height !== levelInfo.height)) {
2769
+ width = mipWidth = levelInfo.width;
2770
+ height = mipHeight = levelInfo.height;
2771
+ console.warn("KTX2 transcode to BC will resize to width: " + width + ", height: " + height + ". You'd better use an image whose size if multiple of 4.");
2772
+ } else {
2773
+ mipWidth = levelInfo.origWidth;
2774
+ mipHeight = levelInfo.origHeight;
2775
+ }
2573
2776
  var dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, format));
2574
2777
  var status = ktx2File.transcodeImage(dst, mip, layer, face, format, 0, -1, -1);
2575
2778
  if (!status) {
@@ -2635,7 +2838,7 @@ function transcode(buffer, targetFormat, KTX2File) {
2635
2838
  } else {
2636
2839
  var funcCode = TranscodeWorkerCode$1.toString();
2637
2840
  var transcodeString = funcCode.substring(funcCode.indexOf("{"), funcCode.lastIndexOf("}") + 1);
2638
- var workerCode = "\n " + jsCode + "\n var init = (" + _init.toString() + ")();\n " + transcode.toString() + "\n " + transcodeString + "\n ";
2841
+ var workerCode = "\n " + jsCode + "\n " + transcode.toString() + "\n " + transcodeString + "\n ";
2639
2842
  var workerURL = URL.createObjectURL(new Blob([
2640
2843
  workerCode
2641
2844
  ], {
@@ -2881,10 +3084,14 @@ var KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2881
3084
  return Loader1.apply(this, arguments);
2882
3085
  }
2883
3086
  var _proto = KTX2Loader1.prototype;
2884
- _proto.initialize = function initialize(engine, configuration) {
3087
+ _proto.initialize = function initialize(_, configuration) {
2885
3088
  if (configuration.ktx2Loader) {
2886
3089
  var options = configuration.ktx2Loader;
2887
- if (this._isKhronosSupported(options.priorityFormats, engine) && options.workerCount !== 0) {
3090
+ if (options.priorityFormats) {
3091
+ KTX2Loader._priorityFormats["etc1s"] = options.priorityFormats;
3092
+ KTX2Loader._priorityFormats["uastc"] = options.priorityFormats;
3093
+ }
3094
+ if (options.transcoder === /** Khronos transcoder. */ 1) {
2888
3095
  return KTX2Loader._getKhronosTranscoder(options.workerCount).init();
2889
3096
  } else {
2890
3097
  return KTX2Loader._getBinomialLLCTranscoder(options.workerCount).init();
@@ -2894,39 +3101,22 @@ var KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2894
3101
  /**
2895
3102
  * @internal
2896
3103
  */ _proto.load = function load(item, resourceManager) {
2897
- return this.request(item.url, {
2898
- type: "arraybuffer"
2899
- }).then(function(buffer) {
2900
- return KTX2Loader._parseBuffer(new Uint8Array(buffer), resourceManager.engine, item.params).then(function(param) {
2901
- var engine = param.engine, result = param.result, targetFormat = param.targetFormat, params = param.params;
2902
- return KTX2Loader._createTextureByBuffer(engine, result, targetFormat, params);
2903
- });
2904
- });
2905
- };
2906
- _proto._isKhronosSupported = function _isKhronosSupported(priorityFormats, engine) {
2907
- if (priorityFormats === void 0) priorityFormats = [
2908
- KTX2TargetFormat.ASTC,
2909
- KTX2TargetFormat.ETC,
2910
- KTX2TargetFormat.BC7,
2911
- KTX2TargetFormat.BC1_BC3,
2912
- KTX2TargetFormat.PVRTC,
2913
- KTX2TargetFormat.R8G8B8A8
2914
- ];
2915
- var supportedList = new Array();
2916
- if (Array.isArray(priorityFormats[0])) {
2917
- for(var i = 0; i < priorityFormats.length; i++){
2918
- supportedList.push(KTX2Loader._detectSupportedFormat(engine._hardwareRenderer, priorityFormats[i]));
2919
- }
2920
- } else {
2921
- supportedList.push(KTX2Loader._detectSupportedFormat(engine._hardwareRenderer, priorityFormats));
2922
- }
2923
- return supportedList.every(function(format) {
2924
- return KhronosTranscoder.transcoderMap[format];
3104
+ var _this = this;
3105
+ return new AssetPromise(function(resolve, reject, setTaskCompleteProgress, setTaskDetailProgress) {
3106
+ _this.request(item.url, {
3107
+ type: "arraybuffer"
3108
+ }).onProgress(setTaskCompleteProgress, setTaskDetailProgress).then(function(buffer) {
3109
+ return KTX2Loader._parseBuffer(new Uint8Array(buffer), resourceManager.engine, item.params).then(function(param) {
3110
+ var engine = param.engine, result = param.result, targetFormat = param.targetFormat, params = param.params;
3111
+ return KTX2Loader._createTextureByBuffer(engine, result, targetFormat, params);
3112
+ });
3113
+ }).then(resolve).catch(reject);
2925
3114
  });
2926
3115
  };
2927
3116
  /**
2928
- * Destroy ktx2 transcoder worker.
2929
- */ KTX2Loader1.destroy = function destroy() {
3117
+ * Release ktx2 transcoder worker.
3118
+ * @remarks If use loader after releasing, we should release again.
3119
+ */ KTX2Loader1.release = function release() {
2930
3120
  if (this._binomialLLCTranscoder) this._binomialLLCTranscoder.destroy();
2931
3121
  if (this._khronosTranscoder) this._khronosTranscoder.destroy();
2932
3122
  this._binomialLLCTranscoder = null;
@@ -2936,7 +3126,8 @@ var KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2936
3126
  /** @internal */ KTX2Loader1._parseBuffer = function _parseBuffer(buffer, engine, params) {
2937
3127
  var _params;
2938
3128
  var ktx2Container = new KTX2Container(buffer);
2939
- var formatPriorities = (_params = params) == null ? void 0 : _params.priorityFormats;
3129
+ var _params_priorityFormats;
3130
+ var formatPriorities = (_params_priorityFormats = (_params = params) == null ? void 0 : _params.priorityFormats) != null ? _params_priorityFormats : KTX2Loader._priorityFormats[ktx2Container.isUASTC ? "uastc" : "etc1s"];
2940
3131
  var targetFormat = KTX2Loader._decideTargetFormat(engine, ktx2Container, formatPriorities);
2941
3132
  var transcodeResultPromise;
2942
3133
  if (KTX2Loader._isBinomialInit || !KhronosTranscoder.transcoderMap[targetFormat] || !ktx2Container.isUASTC) {
@@ -3003,18 +3194,22 @@ var KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
3003
3194
  return targetFormat;
3004
3195
  };
3005
3196
  KTX2Loader1._detectSupportedFormat = function _detectSupportedFormat(renderer, priorityFormats) {
3006
- if (priorityFormats === void 0) priorityFormats = [
3007
- KTX2TargetFormat.ASTC,
3008
- KTX2TargetFormat.ETC,
3009
- KTX2TargetFormat.BC7,
3010
- KTX2TargetFormat.BC1_BC3,
3011
- KTX2TargetFormat.PVRTC
3012
- ];
3013
3197
  for(var i = 0; i < priorityFormats.length; i++){
3014
- var capabilities = this._supportedMap[priorityFormats[i]];
3015
- for(var j = 0; j < capabilities.length; j++){
3016
- if (renderer.canIUse(capabilities[j])) {
3017
- return priorityFormats[i];
3198
+ var format = priorityFormats[i];
3199
+ var capabilities = this._supportedMap[format];
3200
+ if (capabilities) {
3201
+ for(var j = 0; j < capabilities.length; j++){
3202
+ if (renderer.canIUse(capabilities[j])) {
3203
+ return format;
3204
+ }
3205
+ }
3206
+ } else {
3207
+ switch(priorityFormats[i]){
3208
+ case KTX2TargetFormat.R8G8B8A8:
3209
+ return format;
3210
+ case KTX2TargetFormat.R8:
3211
+ case KTX2TargetFormat.R8G8:
3212
+ if (renderer.isWebGL2) return format;
3018
3213
  }
3019
3214
  }
3020
3215
  }
@@ -3051,6 +3246,23 @@ var KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
3051
3246
  return KTX2Loader1;
3052
3247
  }(Loader), function() {
3053
3248
  _KTX2Loader._isBinomialInit = false;
3249
+ }(), function() {
3250
+ _KTX2Loader._priorityFormats = {
3251
+ etc1s: [
3252
+ KTX2TargetFormat.ETC,
3253
+ KTX2TargetFormat.BC7,
3254
+ KTX2TargetFormat.ASTC,
3255
+ KTX2TargetFormat.BC1_BC3,
3256
+ KTX2TargetFormat.PVRTC
3257
+ ],
3258
+ uastc: [
3259
+ KTX2TargetFormat.ASTC,
3260
+ KTX2TargetFormat.BC7,
3261
+ KTX2TargetFormat.ETC,
3262
+ KTX2TargetFormat.BC1_BC3,
3263
+ KTX2TargetFormat.PVRTC
3264
+ ]
3265
+ };
3054
3266
  }(), function() {
3055
3267
  var _obj;
3056
3268
  _KTX2Loader._supportedMap = (_obj = {}, _obj[KTX2TargetFormat.ASTC] = [
@@ -3071,6 +3283,11 @@ KTX2Loader = __decorate([
3071
3283
  "ktx2"
3072
3284
  ])
3073
3285
  ], KTX2Loader);
3286
+ var KTX2Transcoder;
3287
+ (function(KTX2Transcoder) {
3288
+ KTX2Transcoder[KTX2Transcoder[/** BinomialLLC transcoder. */ "BinomialLLC"] = 0] = "BinomialLLC";
3289
+ KTX2Transcoder[KTX2Transcoder["Khronos"] = 1] = "Khronos";
3290
+ })(KTX2Transcoder || (KTX2Transcoder = {}));
3074
3291
 
3075
3292
  /**
3076
3293
  * @internal
@@ -3421,7 +3638,7 @@ var GLTFSchemaParser = /*#__PURE__*/ function(GLTFParser1) {
3421
3638
  };
3422
3639
  var isGLB = this._isGLB(url);
3423
3640
  contentRestorer.isGLB = isGLB;
3424
- var promise = isGLB ? request(url, requestConfig).then(function(glb) {
3641
+ var promise = isGLB ? request(url, requestConfig).onProgress(undefined, context._onTaskDetail).then(function(glb) {
3425
3642
  restoreBufferRequests.push(new BufferRequestInfo(url, requestConfig));
3426
3643
  return GLTFUtils.parseGLB(context, glb);
3427
3644
  }).then(function(param) {
@@ -3430,7 +3647,7 @@ var GLTFSchemaParser = /*#__PURE__*/ function(GLTFParser1) {
3430
3647
  return glTF;
3431
3648
  }) : request(url, {
3432
3649
  type: "json"
3433
- });
3650
+ }).onProgress(undefined, context._onTaskDetail);
3434
3651
  return promise;
3435
3652
  };
3436
3653
  _proto._isGLB = function _isGLB(url) {
@@ -3462,9 +3679,9 @@ var GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3462
3679
  * @internal
3463
3680
  */ GLTFAnimationParser1._parseStandardProperty = function _parseStandardProperty(context, animationClip, animationInfo) {
3464
3681
  var _loop = function(j, m) {
3465
- var gltfSampler = samplers[j];
3466
- var inputAccessor = accessors[gltfSampler.input];
3467
- var outputAccessor = accessors[gltfSampler.output];
3682
+ var glTFSampler = samplers[j];
3683
+ var inputAccessor = accessors[glTFSampler.input];
3684
+ var outputAccessor = accessors[glTFSampler.output];
3468
3685
  var promise = Promise.all([
3469
3686
  GLTFUtils.getAccessorBuffer(context, bufferViews, inputAccessor),
3470
3687
  GLTFUtils.getAccessorBuffer(context, bufferViews, outputAccessor)
@@ -3480,8 +3697,8 @@ var GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3480
3697
  output = scaled;
3481
3698
  }
3482
3699
  var outputStride = output.length / input.length;
3483
- var _gltfSampler_interpolation;
3484
- var interpolation = (_gltfSampler_interpolation = gltfSampler.interpolation) != null ? _gltfSampler_interpolation : AnimationSamplerInterpolation.Linear;
3700
+ var _glTFSampler_interpolation;
3701
+ var interpolation = (_glTFSampler_interpolation = glTFSampler.interpolation) != null ? _glTFSampler_interpolation : AnimationSamplerInterpolation.Linear;
3485
3702
  var samplerInterpolation;
3486
3703
  switch(interpolation){
3487
3704
  case AnimationSamplerInterpolation.CubicSpine:
@@ -3514,10 +3731,11 @@ var GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3514
3731
  var promises = new Array();
3515
3732
  // parse samplers
3516
3733
  for(var j = 0, m = samplers.length; j < m; j++)_loop(j);
3734
+ promises.push(context.get(GLTFParserType.Scene));
3517
3735
  return Promise.all(promises).then(function() {
3518
3736
  for(var j = 0, m = channels.length; j < m; j++){
3519
- var gltfChannel = channels[j];
3520
- var target = gltfChannel.target;
3737
+ var glTFChannel = channels[j];
3738
+ var target = glTFChannel.target;
3521
3739
  var channelTargetEntity = entities[target.node];
3522
3740
  var relativePath = "";
3523
3741
  var entity = channelTargetEntity;
@@ -3525,6 +3743,10 @@ var GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3525
3743
  relativePath = relativePath === "" ? "" + entity.name : entity.name + "/" + relativePath;
3526
3744
  entity = entity.parent;
3527
3745
  }
3746
+ // If the target node is in the default scene, relativePath will be empty
3747
+ if (context.glTFResource.sceneRoots.indexOf(entity) === -1) {
3748
+ continue;
3749
+ }
3528
3750
  var ComponentType = void 0;
3529
3751
  var propertyName = void 0;
3530
3752
  switch(target.path){
@@ -3545,14 +3767,21 @@ var GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3545
3767
  propertyName = "blendShapeWeights";
3546
3768
  break;
3547
3769
  }
3548
- var curve = _this._addCurve(target.path, gltfChannel, sampleDataCollection);
3549
- animationClip.addCurveBinding(relativePath, ComponentType, propertyName, curve);
3770
+ var curve = _this._addCurve(target.path, glTFChannel, sampleDataCollection);
3771
+ if (target.path === AnimationChannelTargetPath.WEIGHTS) {
3772
+ var mesh = glTF.nodes[target.node].mesh;
3773
+ for(var i = 0, n = glTF.meshes[mesh].primitives.length; i < n; i++){
3774
+ animationClip.addCurveBinding(relativePath, ComponentType, i, propertyName, curve);
3775
+ }
3776
+ } else {
3777
+ animationClip.addCurveBinding(relativePath, ComponentType, propertyName, curve);
3778
+ }
3550
3779
  }
3551
3780
  return animationClip;
3552
3781
  });
3553
3782
  };
3554
- GLTFAnimationParser1._addCurve = function _addCurve(animationChannelTargetPath, gltfChannel, sampleDataCollection) {
3555
- var sampleData = sampleDataCollection[gltfChannel.sampler];
3783
+ GLTFAnimationParser1._addCurve = function _addCurve(animationChannelTargetPath, glTFChannel, sampleDataCollection) {
3784
+ var sampleData = sampleDataCollection[glTFChannel.sampler];
3556
3785
  var input = sampleData.input, output = sampleData.output, outputSize = sampleData.outputSize;
3557
3786
  switch(animationChannelTargetPath){
3558
3787
  case AnimationChannelTargetPath.TRANSLATION:
@@ -3644,7 +3873,9 @@ var GLTFBufferParser = /*#__PURE__*/ function(GLTFParser1) {
3644
3873
  };
3645
3874
  var absoluteUrl = Utils.resolveAbsoluteUrl(url, bufferInfo.uri);
3646
3875
  restoreBufferRequests.push(new BufferRequestInfo(absoluteUrl, requestConfig));
3647
- return request(absoluteUrl, requestConfig);
3876
+ var promise = request(absoluteUrl, requestConfig).onProgress(undefined, context._onTaskDetail);
3877
+ context._addTaskCompletePromise(promise);
3878
+ return promise;
3648
3879
  };
3649
3880
  return GLTFBufferParser;
3650
3881
  }(GLTFParser);
@@ -3659,10 +3890,13 @@ var GLTFEntityParser = /*#__PURE__*/ function(GLTFParser1) {
3659
3890
  }
3660
3891
  var _proto = GLTFEntityParser.prototype;
3661
3892
  _proto.parse = function parse(context, index) {
3893
+ var glTFResource = context.glTFResource;
3662
3894
  var entityInfo = context.glTF.nodes[index];
3663
- var engine = context.glTFResource.engine;
3895
+ var engine = glTFResource.engine;
3664
3896
  var matrix = entityInfo.matrix, translation = entityInfo.translation, rotation = entityInfo.rotation, scale = entityInfo.scale, extensions = entityInfo.extensions;
3665
3897
  var entity = new Entity(engine, entityInfo.name || "_GLTF_ENTITY_" + index);
3898
+ // @ts-ignore
3899
+ entity._markAsTemplate(glTFResource);
3666
3900
  var transform = entity.transform;
3667
3901
  if (matrix) {
3668
3902
  var localMatrix = transform.localMatrix;
@@ -3704,7 +3938,8 @@ var GLTFMaterialParser = /*#__PURE__*/ function(GLTFParser1) {
3704
3938
  var _proto = GLTFMaterialParser1.prototype;
3705
3939
  _proto.parse = function parse(context, index) {
3706
3940
  var materialInfo = context.glTF.materials[index];
3707
- var engine = context.glTFResource.engine;
3941
+ var glTFResource = context.glTFResource;
3942
+ var engine = glTFResource.engine;
3708
3943
  var material = GLTFParser.executeExtensionsCreateAndParse(materialInfo.extensions, context, materialInfo);
3709
3944
  if (!material) {
3710
3945
  material = new PBRMaterial(engine);
@@ -3712,8 +3947,10 @@ var GLTFMaterialParser = /*#__PURE__*/ function(GLTFParser1) {
3712
3947
  GLTFMaterialParser._parseStandardProperty(context, material, materialInfo);
3713
3948
  }
3714
3949
  return Promise.resolve(material).then(function(material) {
3715
- material || (material = GLTFMaterialParser._getDefaultMaterial(context.glTFResource.engine));
3950
+ material || (material = GLTFMaterialParser._getDefaultMaterial(engine));
3716
3951
  GLTFParser.executeExtensionsAdditiveAndParse(materialInfo.extensions, context, material, materialInfo);
3952
+ // @ts-ignore
3953
+ material._associationSuperResource(glTFResource);
3717
3954
  return material;
3718
3955
  });
3719
3956
  };
@@ -3834,14 +4071,20 @@ var GLTFMeshParser = (_GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
3834
4071
  var mesh = GLTFParser.executeExtensionsCreateAndParse(gltfPrimitive.extensions, context, gltfPrimitive, meshInfo);
3835
4072
  if (mesh) {
3836
4073
  if (_instanceof(mesh, ModelMesh)) {
4074
+ // @ts-ignore
4075
+ mesh._associationSuperResource(glTFResource);
3837
4076
  resolve(mesh);
3838
4077
  } else {
3839
4078
  mesh.then(function(mesh) {
3840
- return resolve(mesh);
4079
+ // @ts-ignore
4080
+ mesh._associationSuperResource(glTFResource);
4081
+ resolve(mesh);
3841
4082
  });
3842
4083
  }
3843
4084
  } else {
3844
4085
  var mesh1 = new ModelMesh(engine, meshInfo.name || i + "");
4086
+ // @ts-ignore
4087
+ mesh1._associationSuperResource(glTFResource);
3845
4088
  var meshRestoreInfo = new ModelMeshRestoreInfo();
3846
4089
  meshRestoreInfo.mesh = mesh1;
3847
4090
  context.contentRestorer.meshes.push(meshRestoreInfo);
@@ -3861,12 +4104,13 @@ var GLTFMeshParser = (_GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
3861
4104
  return context.get(GLTFParserType.Buffer).then(function(buffers) {
3862
4105
  return GLTFUtils.getAccessorData(glTF, indexAccessor, buffers);
3863
4106
  });
3864
- }, context.keepMeshData).then(resolve);
4107
+ }, context.params.keepMeshData).then(resolve);
3865
4108
  }
3866
4109
  });
3867
4110
  };
3868
4111
  var meshInfo = context.glTF.meshes[index];
3869
- var glTF = context.glTF, engine = context.glTFResource.engine;
4112
+ var glTF = context.glTF, glTFResource = context.glTFResource;
4113
+ var engine = glTFResource.engine;
3870
4114
  var primitivePromises = new Array();
3871
4115
  for(var i = 0, length = meshInfo.primitives.length; i < length; i++)_loop(i);
3872
4116
  return Promise.all(primitivePromises);
@@ -4039,9 +4283,9 @@ var GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4039
4283
  }
4040
4284
  var _proto = GLTFSceneParser.prototype;
4041
4285
  _proto.parse = function parse(context, index) {
4042
- var _this = this;
4043
4286
  var _context_glTF = context.glTF, scenes = _context_glTF.scenes, _context_glTF_scene = _context_glTF.scene, scene = _context_glTF_scene === void 0 ? 0 : _context_glTF_scene, glTFResource = context.glTFResource;
4044
4287
  var sceneInfo = scenes[index];
4288
+ var sceneExtensions = sceneInfo.extensions;
4045
4289
  var engine = glTFResource.engine;
4046
4290
  var isDefaultScene = scene === index;
4047
4291
  var sceneNodes = sceneInfo.nodes;
@@ -4055,30 +4299,15 @@ var GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4055
4299
  sceneRoot.addChild(childEntity);
4056
4300
  }
4057
4301
  }
4058
- // @ts-ignore
4059
- sceneRoot._hookResource = glTFResource;
4060
- // @ts-ignore
4061
- glTFResource._addReferCount(1);
4062
4302
  if (isDefaultScene) {
4063
- glTFResource.defaultSceneRoot = sceneRoot;
4303
+ glTFResource._defaultSceneRoot = sceneRoot;
4064
4304
  }
4065
4305
  var promises = new Array();
4066
4306
  for(var i1 = 0; i1 < sceneNodes.length; i1++){
4067
4307
  promises.push(this._parseEntityComponent(context, sceneNodes[i1]));
4068
4308
  }
4069
4309
  return Promise.all(promises).then(function() {
4070
- if (isDefaultScene) {
4071
- return Promise.all([
4072
- context.get(GLTFParserType.Skin),
4073
- context.get(GLTFParserType.Animation)
4074
- ]).then(function(param) {
4075
- var skins = param[0], animations = param[1];
4076
- if (skins || animations) {
4077
- _this._createAnimator(context, animations);
4078
- }
4079
- return sceneRoot;
4080
- });
4081
- }
4310
+ GLTFParser.executeExtensionsAdditiveAndParse(sceneExtensions, context, sceneRoot, sceneInfo);
4082
4311
  return sceneRoot;
4083
4312
  });
4084
4313
  };
@@ -4190,28 +4419,6 @@ var GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4190
4419
  for(var i = 0; i < glTFMeshPrimitives.length; i++)_loop(i);
4191
4420
  return Promise.all(promises);
4192
4421
  };
4193
- _proto._createAnimator = function _createAnimator(context, animations) {
4194
- var defaultSceneRoot = context.glTFResource.defaultSceneRoot;
4195
- var animator = defaultSceneRoot.addComponent(Animator);
4196
- var animatorController = new AnimatorController();
4197
- var layer = new AnimatorControllerLayer("layer");
4198
- var animatorStateMachine = new AnimatorStateMachine();
4199
- animatorController.addLayer(layer);
4200
- animator.animatorController = animatorController;
4201
- layer.stateMachine = animatorStateMachine;
4202
- if (animations) {
4203
- for(var i = 0; i < animations.length; i++){
4204
- var animationClip = animations[i];
4205
- var name = animationClip.name;
4206
- var uniqueName = animatorStateMachine.makeUniqueStateName(name);
4207
- if (uniqueName !== name) {
4208
- console.warn("AnimatorState name is existed, name: " + name + " reset to " + uniqueName);
4209
- }
4210
- var animatorState = animatorStateMachine.addState(uniqueName);
4211
- animatorState.clip = animationClip;
4212
- }
4213
- }
4214
- };
4215
4422
  _proto._computeLocalBounds = function _computeLocalBounds(skinnedMeshRenderer, mesh, bones, rootBone, inverseBindMatrices) {
4216
4423
  var rootBoneIndex = bones.indexOf(rootBone);
4217
4424
  if (rootBoneIndex !== -1) {
@@ -4360,11 +4567,12 @@ var GLTFTextureParser = (_GLTFTextureParser = /*#__PURE__*/ function(GLTFParser1
4360
4567
  params: {
4361
4568
  mipmap: (_samplerInfo = samplerInfo) == null ? void 0 : _samplerInfo.mipmap
4362
4569
  }
4363
- }).then(function(texture) {
4570
+ }).onProgress(undefined, context._onTaskDetail).then(function(texture) {
4364
4571
  texture.name = textureName || imageName || texture.name || "texture_" + index;
4365
4572
  useSampler && GLTFUtils.parseSampler(texture, samplerInfo);
4366
4573
  return texture;
4367
4574
  });
4575
+ context._addTaskCompletePromise(texture);
4368
4576
  } else {
4369
4577
  var bufferView = glTF.bufferViews[bufferViewIndex];
4370
4578
  texture = context.get(GLTFParserType.Buffer).then(function(buffers) {
@@ -4386,6 +4594,8 @@ var GLTFTextureParser = (_GLTFTextureParser = /*#__PURE__*/ function(GLTFParser1
4386
4594
  }
4387
4595
  return Promise.resolve(texture).then(function(texture) {
4388
4596
  GLTFParser.executeExtensionsAdditiveAndParse(extensions, context, texture, textureInfo);
4597
+ // @ts-ignore
4598
+ texture._associationSuperResource(glTFResource);
4389
4599
  return texture;
4390
4600
  });
4391
4601
  };
@@ -4436,19 +4646,274 @@ GLTFValidator = __decorate([
4436
4646
  registerGLTFParser(GLTFParserType.Validator)
4437
4647
  ], GLTFValidator);
4438
4648
 
4649
+ var GLTFBufferViewParser = /*#__PURE__*/ function(GLTFParser1) {
4650
+ _inherits(GLTFBufferViewParser, GLTFParser1);
4651
+ function GLTFBufferViewParser() {
4652
+ return GLTFParser1.apply(this, arguments);
4653
+ }
4654
+ var _proto = GLTFBufferViewParser.prototype;
4655
+ _proto.parse = function parse(context, index) {
4656
+ var bufferView = context.glTF.bufferViews[index];
4657
+ var extensions = bufferView.extensions, _bufferView_byteOffset = bufferView.byteOffset, byteOffset = _bufferView_byteOffset === void 0 ? 0 : _bufferView_byteOffset, byteLength = bufferView.byteLength, bufferIndex = bufferView.buffer;
4658
+ return extensions ? GLTFParser.executeExtensionsCreateAndParse(extensions, context, bufferView) : context.get(GLTFParserType.Buffer, bufferIndex).then(function(buffer) {
4659
+ return new Uint8Array(buffer, byteOffset, byteLength);
4660
+ });
4661
+ };
4662
+ return GLTFBufferViewParser;
4663
+ }(GLTFParser);
4664
+ GLTFBufferViewParser = __decorate([
4665
+ registerGLTFParser(GLTFParserType.BufferView)
4666
+ ], GLTFBufferViewParser);
4667
+
4668
+ // Source: https://github.com/zeux/meshoptimizer/blob/master/js/meshopt_decoder.js
4669
+ var MeshoptDecoder = function() {
4670
+ var unpack = function unpack(data) {
4671
+ var result = new Uint8Array(data.length);
4672
+ for(var i = 0; i < data.length; ++i){
4673
+ var ch = data.charCodeAt(i);
4674
+ result[i] = ch > 96 ? ch - 97 : ch > 64 ? ch - 39 : ch + 4;
4675
+ }
4676
+ var write = 0;
4677
+ for(var i1 = 0; i1 < data.length; ++i1){
4678
+ result[write++] = result[i1] < 60 ? wasmpack[result[i1]] : (result[i1] - 60) * 64 + result[++i1];
4679
+ }
4680
+ return result.buffer.slice(0, write);
4681
+ };
4682
+ var decode = function decode(fun, target, count, size, source, filter) {
4683
+ var sbrk = instance.exports.sbrk;
4684
+ var count4 = count + 3 & ~3;
4685
+ var tp = sbrk(count4 * size);
4686
+ var sp = sbrk(source.length);
4687
+ var heap = new Uint8Array(instance.exports.memory.buffer);
4688
+ heap.set(source, sp);
4689
+ var res = fun(tp, count, size, sp, source.length);
4690
+ if (res == 0 && filter) {
4691
+ filter(tp, count4, size);
4692
+ }
4693
+ target.set(heap.subarray(tp, tp + count * size));
4694
+ sbrk(tp - sbrk(0));
4695
+ if (res != 0) {
4696
+ throw new Error("Malformed buffer data: " + res);
4697
+ }
4698
+ };
4699
+ var createWorker = function createWorker(url) {
4700
+ var worker = {
4701
+ object: new Worker(url),
4702
+ pending: 0,
4703
+ requests: {}
4704
+ };
4705
+ worker.object.onmessage = function(event) {
4706
+ var data = event.data;
4707
+ worker.pending -= data.count;
4708
+ worker.requests[data.id][data.action](data.value);
4709
+ delete worker.requests[data.id];
4710
+ };
4711
+ return worker;
4712
+ };
4713
+ var initWorkers = function initWorkers(count) {
4714
+ var source = "var instance; var ready = WebAssembly.instantiate(new Uint8Array([" + new Uint8Array(unpack(wasm)) + "]), {})" + ".then(function(result) {instance = result.instance; instance.exports.__wasm_call_ctors();});" + "self.onmessage = workerProcess;" + decode.toString() + workerProcess.toString();
4715
+ var blob = new Blob([
4716
+ source
4717
+ ], {
4718
+ type: "text/javascript"
4719
+ });
4720
+ var url = URL.createObjectURL(blob);
4721
+ for(var i = 0; i < count; ++i){
4722
+ workers[i] = createWorker(url);
4723
+ }
4724
+ URL.revokeObjectURL(url);
4725
+ };
4726
+ var decodeWorker = function decodeWorker(count, size, source, mode, filter) {
4727
+ var worker = workers[0];
4728
+ for(var i = 1; i < workers.length; ++i){
4729
+ if (workers[i].pending < worker.pending) {
4730
+ worker = workers[i];
4731
+ }
4732
+ }
4733
+ return new Promise(function(resolve, reject) {
4734
+ var data = new Uint8Array(source);
4735
+ var id = requestId++;
4736
+ worker.pending += count;
4737
+ worker.requests[id] = {
4738
+ resolve: resolve,
4739
+ reject: reject
4740
+ };
4741
+ worker.object.postMessage({
4742
+ id: id,
4743
+ count: count,
4744
+ size: size,
4745
+ source: data,
4746
+ mode: mode,
4747
+ filter: filter
4748
+ }, [
4749
+ data.buffer
4750
+ ]);
4751
+ });
4752
+ };
4753
+ var workerProcess = function workerProcess(event) {
4754
+ ready.then(function() {
4755
+ var data = event.data;
4756
+ try {
4757
+ var target = new Uint8Array(data.count * data.size);
4758
+ decode(instance.exports[data.mode], target, data.count, data.size, data.source, instance.exports[data.filter]);
4759
+ self.postMessage({
4760
+ id: data.id,
4761
+ count: data.count,
4762
+ action: "resolve",
4763
+ value: target
4764
+ }, [
4765
+ target.buffer
4766
+ ]);
4767
+ } catch (error) {
4768
+ self.postMessage({
4769
+ id: data.id,
4770
+ count: data.count,
4771
+ action: "reject",
4772
+ value: error
4773
+ });
4774
+ }
4775
+ });
4776
+ };
4777
+ var wasm_base = "b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q;iekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq:P8Yqdbk;3sezu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhDcbhqinaqae9pmeaDaeaq9RaqaDfae6Egkcsfgocl4cifcd4hxdndndndnaoc9WGgmTmbcbhPcehsawcjdfhzalhHinaraH9Rax6midnaraHaxfgl9RcK6mbczhoinawcj;cbfaogifgoc9WfhOdndndndndnaHaic9WfgAco4fRbbaAci4coG4ciGPlbedibkaO9cb83ibaOcwf9cb83ibxikaOalRblalRbbgAco4gCaCciSgCE86bbaocGfalclfaCfgORbbaAcl4ciGgCaCciSgCE86bbaocVfaOaCfgORbbaAcd4ciGgCaCciSgCE86bbaoc7faOaCfgORbbaAciGgAaAciSgAE86bbaoctfaOaAfgARbbalRbegOco4gCaCciSgCE86bbaoc91faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc4faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc93faAaCfgARbbaOciGgOaOciSgOE86bbaoc94faAaOfgARbbalRbdgOco4gCaCciSgCE86bbaoc95faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc96faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc97faAaCfgARbbaOciGgOaOciSgOE86bbaoc98faAaOfgORbbalRbiglco4gAaAciSgAE86bbaoc99faOaAfgORbbalcl4ciGgAaAciSgAE86bbaoc9:faOaAfgORbbalcd4ciGgAaAciSgAE86bbaocufaOaAfgoRbbalciGglalciSglE86bbaoalfhlxdkaOalRbwalRbbgAcl4gCaCcsSgCE86bbaocGfalcwfaCfgORbbaAcsGgAaAcsSgAE86bbaocVfaOaAfgORbbalRbegAcl4gCaCcsSgCE86bbaoc7faOaCfgORbbaAcsGgAaAcsSgAE86bbaoctfaOaAfgORbbalRbdgAcl4gCaCcsSgCE86bbaoc91faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc4faOaAfgORbbalRbigAcl4gCaCcsSgCE86bbaoc93faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc94faOaAfgORbbalRblgAcl4gCaCcsSgCE86bbaoc95faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc96faOaAfgORbbalRbvgAcl4gCaCcsSgCE86bbaoc97faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc98faOaAfgORbbalRbogAcl4gCaCcsSgCE86bbaoc99faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc9:faOaAfgORbbalRbrglcl4gAaAcsSgAE86bbaocufaOaAfgoRbbalcsGglalcsSglE86bbaoalfhlxekaOal8Pbb83bbaOcwfalcwf8Pbb83bbalczfhlkdnaiam9pmbaiczfhoaral9RcL0mekkaiam6mialTmidnakTmbawaPfRbbhOcbhoazhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkkazcefhzaPcefgPad6hsalhHaPad9hmexvkkcbhlasceGmdxikalaxad2fhCdnakTmbcbhHcehsawcjdfhminaral9Rax6mialTmdalaxfhlawaHfRbbhOcbhoamhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkamcefhmaHcefgHad6hsaHad9hmbkaChlxikcbhocehsinaral9Rax6mdalTmealaxfhlaocefgoad6hsadao9hmbkaChlxdkcbhlasceGTmekc9:hoxikabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqalmbkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;ebf8Kjjjjbaok;yzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;siliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabavcefciGaiVcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:Ohkxekcjjjj94hkkabavcdfciGaiVcetfak87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:Ohqxekcjjjj94hqkabavcufciGaiVcetfaq87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohqxekcjjjj94hqkabavciGaiVcetfaq87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2geTmbinababydbgdcwtcw91:Yadce91cjjj;8ifcjjj98G::NUdbabclfhbaecufgembkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaiczfhiaeczfheadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklz9Kbb";
4778
+ var wasm_simd = "b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q;Aekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq;t9tqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk;h8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhwcbhDinaDae9pmeawaeaD9RaDawfae6Egqcsfgoc9WGgkci2hxakcethmaocl4cifcd4hPabaDad2fhscbhzdnincehHalhOcbhAdninaraO9RaP6miavcj;cbfaAak2fhCaOaPfhlcbhidnakc;ab6mbaral9Rc;Gb6mbcbhoinaCaofhidndndndndnaOaoco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklbalczfhlkdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklzalczfhlkdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklaalczfhlkdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalclfaYpQbfaXc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalcwfaYpQbfaXc:q:yjjbfRbbfhlxekaialpbbbpkl8Walczfhlkaoc;abfhiaocjefak0meaihoaral9Rc;Fb0mbkkdndnaiak9pmbaici4hoinaral9RcK6mdaCaifhXdndndndndnaOaico4fRbbaocoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpklbxikaXalpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaXalpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaXalpbbbpklbalczfhlkaocdfhoaiczfgiak6mbkkalTmbaAci6hHalhOaAcefgohAaoclSmdxekkcbhlaHceGmdkdnakTmbavcjdfazfhiavazfpbdbhYcbhXinaiavcj;cbfaXfgopblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLaoakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEaoamfpblbg3cep9Ta3aQp9op9Hp9rg3aoaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfhiaXczfgXak6mbkkazclfgzad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfhDc9:hoalmexikkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk;uzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:EPliuo97eue978Jjjjjbca9Rhidndnadcl9hmbdnaec98GglTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalae9pmeaiaeciGgvcdtgdVcbczad9R;8kbaiabalcdtfglad;8qbbdnavTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkalaiad;8qbbskdnaec98GgxTmbcbhvabhdinadczfglalpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oawaopmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgvax6mbkkaxae9pmbaiaeciGgvcitgdfcbcaad9R;8kbaiabaxcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oawaopmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalae9pmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbhdabheinaeaepbbbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepkbbaeczfheadclfgdav6mbkkdnaval9pmbaialciGgdcdtgeVcbc;abae9R;8kbaiabavcdtfgvae;8qbbdnadTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepklbkavaiae;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz9Tbb";
4779
+ var wasmpack = new Uint8Array([
4780
+ 32,
4781
+ 0,
4782
+ 65,
4783
+ 2,
4784
+ 1,
4785
+ 106,
4786
+ 34,
4787
+ 33,
4788
+ 3,
4789
+ 128,
4790
+ 11,
4791
+ 4,
4792
+ 13,
4793
+ 64,
4794
+ 6,
4795
+ 253,
4796
+ 10,
4797
+ 7,
4798
+ 15,
4799
+ 116,
4800
+ 127,
4801
+ 5,
4802
+ 8,
4803
+ 12,
4804
+ 40,
4805
+ 16,
4806
+ 19,
4807
+ 54,
4808
+ 20,
4809
+ 9,
4810
+ 27,
4811
+ 255,
4812
+ 113,
4813
+ 17,
4814
+ 42,
4815
+ 67,
4816
+ 24,
4817
+ 23,
4818
+ 146,
4819
+ 148,
4820
+ 18,
4821
+ 14,
4822
+ 22,
4823
+ 45,
4824
+ 70,
4825
+ 69,
4826
+ 56,
4827
+ 114,
4828
+ 101,
4829
+ 21,
4830
+ 25,
4831
+ 63,
4832
+ 75,
4833
+ 136,
4834
+ 108,
4835
+ 28,
4836
+ 118,
4837
+ 29,
4838
+ 73,
4839
+ 115
4840
+ ]);
4841
+ // @ts-ignore
4842
+ var wasm = SystemInfo._detectSIMDSupported() ? wasm_simd : wasm_base;
4843
+ var instance;
4844
+ var ready = WebAssembly.instantiate(unpack(wasm), {}).then(function(result) {
4845
+ instance = result.instance;
4846
+ instance.exports.__wasm_call_ctors();
4847
+ });
4848
+ var filters = {
4849
+ NONE: "",
4850
+ OCTAHEDRAL: "meshopt_decodeFilterOct",
4851
+ QUATERNION: "meshopt_decodeFilterQuat",
4852
+ EXPONENTIAL: "meshopt_decodeFilterExp"
4853
+ };
4854
+ var decoders = {
4855
+ ATTRIBUTES: "meshopt_decodeVertexBuffer",
4856
+ TRIANGLES: "meshopt_decodeIndexBuffer",
4857
+ INDICES: "meshopt_decodeIndexSequence"
4858
+ };
4859
+ var workers = [];
4860
+ var requestId = 0;
4861
+ return {
4862
+ workerCount: 4,
4863
+ ready: ready,
4864
+ useWorkers: function useWorkers() {
4865
+ initWorkers(this.workerCount);
4866
+ },
4867
+ decodeGltfBuffer: function decodeGltfBuffer(count, stride, source, mode, filter) {
4868
+ if (this.workerCount > 0 && workers.length === 0) this.useWorkers();
4869
+ if (workers.length > 0) return decodeWorker(count, stride, source, decoders[mode], filters[filter]);
4870
+ return ready.then(function() {
4871
+ var target = new Uint8Array(count * stride);
4872
+ decode(instance.exports[decoders[mode]], target, count, stride, source, instance.exports[filters[filter]]);
4873
+ return target;
4874
+ });
4875
+ },
4876
+ release: function release() {
4877
+ for(var i = 0; i < workers.length; i++){
4878
+ workers[i].object.terminate();
4879
+ }
4880
+ }
4881
+ };
4882
+ }();
4883
+
4439
4884
  var GLTFLoader = /*#__PURE__*/ function(Loader1) {
4440
4885
  _inherits(GLTFLoader, Loader1);
4441
4886
  function GLTFLoader() {
4442
4887
  return Loader1.apply(this, arguments);
4443
4888
  }
4444
4889
  var _proto = GLTFLoader.prototype;
4890
+ _proto.initialize = function initialize(_, configuration) {
4891
+ var _configuration_glTF;
4892
+ var meshOptOptions = (_configuration_glTF = configuration.glTF) == null ? void 0 : _configuration_glTF.meshOpt;
4893
+ if (meshOptOptions) {
4894
+ MeshoptDecoder.workerCount = meshOptOptions.workerCount;
4895
+ MeshoptDecoder.useWorkers();
4896
+ }
4897
+ return Promise.resolve();
4898
+ };
4445
4899
  _proto.load = function load(item, resourceManager) {
4446
- var _params;
4447
4900
  var url = item.url;
4448
4901
  var params = item.params;
4449
4902
  var glTFResource = new GLTFResource(resourceManager.engine, url);
4450
- var context = new GLTFParserContext(glTFResource, resourceManager, !!((_params = params) == null ? void 0 : _params.keepMeshData));
4451
- return context.parse();
4903
+ var context = new GLTFParserContext(glTFResource, resourceManager, _extends({
4904
+ keepMeshData: false
4905
+ }, params));
4906
+ return new AssetPromise(function(resolve, reject, setTaskCompleteProgress, setTaskDetailProgress) {
4907
+ context._setTaskCompleteProgress = setTaskCompleteProgress;
4908
+ context._setTaskDetailProgress = setTaskDetailProgress;
4909
+ context.parse().then(resolve).catch(reject);
4910
+ });
4911
+ };
4912
+ /**
4913
+ * Release glTF loader memory(includes meshopt workers).
4914
+ * @remarks If use loader after releasing, we should release again.
4915
+ */ GLTFLoader.release = function release() {
4916
+ MeshoptDecoder.release();
4452
4917
  };
4453
4918
  return GLTFLoader;
4454
4919
  }(Loader);
@@ -5095,6 +5560,12 @@ var MaterialLoader = /*#__PURE__*/ function(Loader1) {
5095
5560
  materialShaderData.setTexture(key, texture);
5096
5561
  }));
5097
5562
  break;
5563
+ case "Boolean":
5564
+ materialShaderData.setInt(key, value ? 1 : 0);
5565
+ break;
5566
+ case "Integer":
5567
+ materialShaderData.setInt(key, Number(value));
5568
+ break;
5098
5569
  }
5099
5570
  };
5100
5571
  var engine = resourceManager.engine;
@@ -5215,7 +5686,7 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader1) {
5215
5686
  var _proto = SpriteAtlasLoader.prototype;
5216
5687
  _proto.load = function load(item, resourceManager) {
5217
5688
  var _this = this;
5218
- return new AssetPromise(function(resolve, reject, _, onCancel) {
5689
+ return new AssetPromise(function(resolve, reject, _, __, onCancel) {
5219
5690
  var chainPromises = [];
5220
5691
  onCancel(function() {
5221
5692
  for(var i = 0; i < chainPromises.length; i++){
@@ -5230,9 +5701,10 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader1) {
5230
5701
  var _loop = function(i) {
5231
5702
  var atlasItem = atlasItems[i];
5232
5703
  if (atlasItem.img) {
5704
+ var _atlasItem_type;
5233
5705
  chainPromises.push(resourceManager.load({
5234
5706
  url: Utils.resolveAbsoluteUrl(item.url, atlasItem.img),
5235
- type: AssetType.Texture2D,
5707
+ type: (_atlasItem_type = atlasItem.type) != null ? _atlasItem_type : AssetType.Texture2D,
5236
5708
  params: {
5237
5709
  format: format,
5238
5710
  mipmap: mipmap
@@ -5272,7 +5744,7 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader1) {
5272
5744
  };
5273
5745
  _proto._makeSprite = function _makeSprite(engine, config, texture) {
5274
5746
  // Generate a SpriteAtlas object.
5275
- var region = config.region, atlasRegionOffset = config.atlasRegionOffset, atlasRegion = config.atlasRegion, pivot = config.pivot, border = config.border;
5747
+ var region = config.region, atlasRegionOffset = config.atlasRegionOffset, atlasRegion = config.atlasRegion, pivot = config.pivot, border = config.border, width = config.width, height = config.height;
5276
5748
  var sprite = new Sprite(engine, texture, region ? this._tempRect.set(region.x, region.y, region.w, region.h) : undefined, pivot ? this._tempVec2.set(pivot.x, pivot.y) : undefined, border ? this._tempVec4.set(border.x, border.y, border.z, border.w) : undefined, config.name);
5277
5749
  if (texture) {
5278
5750
  var invW = 1 / texture.width;
@@ -5284,6 +5756,8 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader1) {
5284
5756
  }
5285
5757
  config.atlasRotated && (sprite.atlasRotated = true);
5286
5758
  }
5759
+ isNaN(width) || (sprite.width = width);
5760
+ isNaN(height) || (sprite.height = height);
5287
5761
  return sprite;
5288
5762
  };
5289
5763
  return SpriteAtlasLoader;
@@ -5302,26 +5776,39 @@ var SpriteLoader = /*#__PURE__*/ function(Loader1) {
5302
5776
  var _proto = SpriteLoader.prototype;
5303
5777
  _proto.load = function load(item, resourceManager) {
5304
5778
  var _this = this;
5305
- return new AssetPromise(function(resolve, reject) {
5306
- _this.request(item.url, _extends({}, item, {
5307
- type: "json"
5308
- })).then(function(data) {
5309
- if (data.belongToAtlas) {
5310
- resourceManager// @ts-ignore
5311
- .getResourceByRef(data.belongToAtlas).then(function(atlas) {
5312
- resolve(atlas.getSprite(data.fullPath));
5313
- }).catch(reject);
5314
- } else if (data.texture) {
5315
- resourceManager// @ts-ignore
5316
- .getResourceByRef(data.texture).then(function(texture) {
5317
- resolve(new Sprite(resourceManager.engine, texture, data.region, data.pivot, data.border));
5318
- }).catch(reject);
5319
- } else {
5320
- resolve(new Sprite(resourceManager.engine, null, data.region, data.pivot, data.border));
5321
- }
5322
- }).catch(reject);
5779
+ return this.request(item.url, _extends({}, item, {
5780
+ type: "json"
5781
+ })).then(function(data) {
5782
+ return data.belongToAtlas ? _this._loadFromAtlas(resourceManager, data) : _this._loadFromTexture(resourceManager, data);
5323
5783
  });
5324
5784
  };
5785
+ _proto._loadFromAtlas = function _loadFromAtlas(resourceManager, data) {
5786
+ var _this = this;
5787
+ return resourceManager// @ts-ignore
5788
+ .getResourceByRef(data.belongToAtlas).then(function(atlas) {
5789
+ return atlas.getSprite(data.fullPath) || _this._loadFromTexture(resourceManager, data);
5790
+ });
5791
+ };
5792
+ _proto._loadFromTexture = function _loadFromTexture(resourceManager, data) {
5793
+ if (data.texture) {
5794
+ return resourceManager// @ts-ignore
5795
+ .getResourceByRef(data.texture).then(function(texture) {
5796
+ var sprite = new Sprite(resourceManager.engine, texture, data.region, data.pivot, data.border);
5797
+ var width = data.width, height = data.height;
5798
+ isNaN(width) || (sprite.width = width);
5799
+ isNaN(height) || (sprite.height = height);
5800
+ return sprite;
5801
+ });
5802
+ } else {
5803
+ return new AssetPromise(function(resolve) {
5804
+ var sprite = new Sprite(resourceManager.engine, null, data.region, data.pivot, data.border);
5805
+ var width = data.width, height = data.height;
5806
+ isNaN(width) || (sprite.width = width);
5807
+ isNaN(height) || (sprite.height = height);
5808
+ resolve(sprite);
5809
+ });
5810
+ }
5811
+ };
5325
5812
  return SpriteLoader;
5326
5813
  }(Loader);
5327
5814
  SpriteLoader = __decorate([
@@ -5362,15 +5849,19 @@ var Texture2DLoader = /*#__PURE__*/ function(Loader1) {
5362
5849
  var _proto = Texture2DLoader.prototype;
5363
5850
  _proto.load = function load(item, resourceManager) {
5364
5851
  var _this = this;
5365
- return new AssetPromise(function(resolve, reject) {
5852
+ return new AssetPromise(function(resolve, reject, setTaskCompleteProgress, setTaskDetailProgress) {
5366
5853
  var url = item.url;
5367
5854
  var requestConfig = _extends({}, item, {
5368
5855
  type: "image"
5369
5856
  });
5370
- _this.request(url, requestConfig).then(function(image) {
5371
- var _params, _params1;
5372
- var params = item.params;
5373
- var texture = new Texture2D(resourceManager.engine, image.width, image.height, (_params = params) == null ? void 0 : _params.format, (_params1 = params) == null ? void 0 : _params1.mipmap);
5857
+ _this.request(url, requestConfig).onProgress(setTaskCompleteProgress, setTaskDetailProgress).then(function(image) {
5858
+ var _item_params;
5859
+ var _ref = (_item_params = item.params) != null ? _item_params : {}, format = _ref.format, mipmap = _ref.mipmap, anisoLevel = _ref.anisoLevel, wrapModeU = _ref.wrapModeU, wrapModeV = _ref.wrapModeV, filterMode = _ref.filterMode;
5860
+ var texture = new Texture2D(resourceManager.engine, image.width, image.height, format, mipmap);
5861
+ texture.anisoLevel = anisoLevel != null ? anisoLevel : texture.anisoLevel;
5862
+ texture.filterMode = filterMode != null ? filterMode : texture.filterMode;
5863
+ texture.wrapModeU = wrapModeU != null ? wrapModeU : texture.wrapModeU;
5864
+ texture.wrapModeV = wrapModeV != null ? wrapModeV : texture.wrapModeV;
5374
5865
  texture.setImageSource(image);
5375
5866
  texture.generateMipmaps();
5376
5867
  if (url.indexOf("data:") !== 0) {
@@ -5518,33 +6009,34 @@ var SceneLoader = /*#__PURE__*/ function(Loader1) {
5518
6009
  var promises = [];
5519
6010
  // parse ambient light
5520
6011
  var ambient = data.scene.ambient;
5521
- var useCustomAmbient = ambient.specularMode === "Custom";
5522
- if (useCustomAmbient && ambient.customAmbientLight) {
5523
- // @ts-ignore
5524
- // prettier-ignore
5525
- var customAmbientPromise = resourceManager.getResourceByRef(ambient.customAmbientLight).then(function(ambientLight) {
5526
- scene.ambientLight = ambientLight;
5527
- scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5528
- scene.ambientLight.specularIntensity = ambient.specularIntensity;
5529
- scene.ambientLight.diffuseMode = ambient.diffuseMode;
5530
- scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5531
- });
5532
- promises.push(customAmbientPromise);
5533
- } else if (!useCustomAmbient && ambient.ambientLight) {
5534
- // @ts-ignore
5535
- // prettier-ignore
5536
- var ambientLightPromise = resourceManager.getResourceByRef(ambient.ambientLight).then(function(ambientLight) {
5537
- scene.ambientLight = ambientLight;
5538
- scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5539
- scene.ambientLight.specularIntensity = ambient.specularIntensity;
5540
- scene.ambientLight.diffuseMode = ambient.diffuseMode;
5541
- scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5542
- });
5543
- promises.push(ambientLightPromise);
5544
- } else {
6012
+ if (ambient) {
6013
+ var useCustomAmbient = ambient.specularMode === "Custom";
6014
+ var useSH = ambient.diffuseMode === DiffuseMode.SphericalHarmonics;
5545
6015
  scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5546
6016
  scene.ambientLight.specularIntensity = ambient.specularIntensity;
6017
+ scene.ambientLight.diffuseMode = ambient.diffuseMode;
5547
6018
  scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
6019
+ scene.ambientLight.specularTextureDecodeRGBM = true;
6020
+ if (useCustomAmbient && ambient.customAmbientLight) {
6021
+ promises.push(// @ts-ignore
6022
+ resourceManager.getResourceByRef(ambient.customAmbientLight).then(function(ambientLight) {
6023
+ var _ambientLight;
6024
+ scene.ambientLight.specularTexture = (_ambientLight = ambientLight) == null ? void 0 : _ambientLight.specularTexture;
6025
+ }));
6026
+ }
6027
+ if (ambient.ambientLight && (!useCustomAmbient || useSH)) {
6028
+ promises.push(// @ts-ignore
6029
+ resourceManager.getResourceByRef(ambient.ambientLight).then(function(ambientLight) {
6030
+ if (!useCustomAmbient) {
6031
+ var _ambientLight;
6032
+ scene.ambientLight.specularTexture = (_ambientLight = ambientLight) == null ? void 0 : _ambientLight.specularTexture;
6033
+ }
6034
+ if (useSH) {
6035
+ var _ambientLight1;
6036
+ scene.ambientLight.diffuseSphericalHarmonics = (_ambientLight1 = ambientLight) == null ? void 0 : _ambientLight1.diffuseSphericalHarmonics;
6037
+ }
6038
+ }));
6039
+ }
5548
6040
  }
5549
6041
  var background = data.scene.background;
5550
6042
  scene.background.mode = background.mode;
@@ -5586,6 +6078,9 @@ var SceneLoader = /*#__PURE__*/ function(Loader1) {
5586
6078
  if (shadow.shadowResolution != undefined) scene.shadowResolution = shadow.shadowResolution;
5587
6079
  if (shadow.shadowDistance != undefined) scene.shadowDistance = shadow.shadowDistance;
5588
6080
  if (shadow.shadowCascades != undefined) scene.shadowCascades = shadow.shadowCascades;
6081
+ var _shadow_shadowTwoCascadeSplits;
6082
+ scene.shadowTwoCascadeSplits = (_shadow_shadowTwoCascadeSplits = shadow.shadowTwoCascadeSplits) != null ? _shadow_shadowTwoCascadeSplits : scene.shadowTwoCascadeSplits;
6083
+ shadow.shadowFourCascadeSplits && scene.shadowFourCascadeSplits.copyFrom(shadow.shadowFourCascadeSplits);
5589
6084
  }
5590
6085
  return Promise.all(promises).then(function() {
5591
6086
  resolve(scene);
@@ -5601,13 +6096,13 @@ SceneLoader = __decorate([
5601
6096
  "scene"
5602
6097
  ], true)
5603
6098
  ], SceneLoader);
5604
- ReflectionParser.registerCustomParseComponent("TextRenderer", /*#__PURE__*/ _async_to_generator(function(instance, item, engine) {
6099
+ ReflectionParser.registerCustomParseComponent("TextRenderer", /*#__PURE__*/ _async_to_generator(function(instance, item) {
5605
6100
  var props;
5606
6101
  return __generator(this, function(_state) {
5607
6102
  props = item.props;
5608
6103
  if (!props.font) {
5609
6104
  // @ts-ignore
5610
- instance.font = Font.createFromOS(engine, props.fontFamily || "Arial");
6105
+ instance.font = Font.createFromOS(instance.engine, props.fontFamily || "Arial");
5611
6106
  }
5612
6107
  return [
5613
6108
  2,
@@ -5616,170 +6111,6 @@ ReflectionParser.registerCustomParseComponent("TextRenderer", /*#__PURE__*/ _asy
5616
6111
  });
5617
6112
  }));
5618
6113
 
5619
- var _KHR_draco_mesh_compression;
5620
- var KHR_draco_mesh_compression = (_KHR_draco_mesh_compression = /*#__PURE__*/ function(GLTFExtensionParser1) {
5621
- _inherits(KHR_draco_mesh_compression1, GLTFExtensionParser1);
5622
- function KHR_draco_mesh_compression1() {
5623
- return GLTFExtensionParser1.apply(this, arguments);
5624
- }
5625
- var _proto = KHR_draco_mesh_compression1.prototype;
5626
- _proto.createAndParse = function createAndParse(context, schema, glTFPrimitive, glTFMesh) {
5627
- var _this = this;
5628
- this._initialize();
5629
- var glTF = context.glTF, engine = context.glTFResource.engine;
5630
- var bufferViews = glTF.bufferViews, accessors = glTF.accessors;
5631
- var bufferViewIndex = schema.bufferView, gltfAttributeMap = schema.attributes;
5632
- var attributeMap = {};
5633
- var attributeTypeMap = {};
5634
- for(var attributeName in gltfAttributeMap){
5635
- attributeMap[attributeName] = gltfAttributeMap[attributeName];
5636
- }
5637
- for(var attributeName1 in glTFPrimitive.attributes){
5638
- if (gltfAttributeMap[attributeName1] !== undefined) {
5639
- var accessorDef = accessors[glTFPrimitive.attributes[attributeName1]];
5640
- attributeTypeMap[attributeName1] = GLTFUtils.getComponentType(accessorDef.componentType).name;
5641
- }
5642
- }
5643
- var indexAccessor = accessors[glTFPrimitive.indices];
5644
- var indexType = GLTFUtils.getComponentType(indexAccessor.componentType).name;
5645
- var taskConfig = {
5646
- attributeIDs: attributeMap,
5647
- attributeTypes: attributeTypeMap,
5648
- useUniqueIDs: true,
5649
- indexType: indexType
5650
- };
5651
- return context.get(GLTFParserType.Buffer).then(function(buffers) {
5652
- var buffer = GLTFUtils.getBufferViewData(bufferViews[bufferViewIndex], buffers);
5653
- return KHR_draco_mesh_compression._decoder.decode(buffer, taskConfig).then(function(decodedGeometry) {
5654
- var mesh = new ModelMesh(engine, glTFMesh.name);
5655
- return _this._parseMeshFromGLTFPrimitiveDraco(mesh, glTFMesh, glTFPrimitive, glTF, function(attributeSemantic) {
5656
- for(var j = 0; j < decodedGeometry.attributes.length; j++){
5657
- if (decodedGeometry.attributes[j].name === attributeSemantic) {
5658
- return decodedGeometry.attributes[j].array;
5659
- }
5660
- }
5661
- return null;
5662
- }, function(attributeSemantic, shapeIndex) {
5663
- throw "BlendShape animation is not supported when using draco.";
5664
- }, function() {
5665
- return decodedGeometry.index.array;
5666
- }, context.keepMeshData);
5667
- });
5668
- });
5669
- };
5670
- _proto._initialize = function _initialize() {
5671
- if (!KHR_draco_mesh_compression._decoder) {
5672
- KHR_draco_mesh_compression._decoder = new DRACODecoder();
5673
- }
5674
- };
5675
- _proto._parseMeshFromGLTFPrimitiveDraco = function _parseMeshFromGLTFPrimitiveDraco(mesh, gltfMesh, gltfPrimitive, gltf, getVertexBufferData, getBlendShapeData, getIndexBufferData, keepMeshData) {
5676
- var attributes = gltfPrimitive.attributes, targets = gltfPrimitive.targets, indices = gltfPrimitive.indices, mode = gltfPrimitive.mode;
5677
- var vertexCount;
5678
- var accessors = gltf.accessors;
5679
- var accessor = accessors[attributes["POSITION"]];
5680
- var positionBuffer = getVertexBufferData("POSITION");
5681
- var positions = GLTFUtils.floatBufferToVector3Array(positionBuffer);
5682
- mesh.setPositions(positions);
5683
- var bounds = mesh.bounds;
5684
- vertexCount = accessor.count;
5685
- if (accessor.min && accessor.max) {
5686
- bounds.min.copyFromArray(accessor.min);
5687
- bounds.max.copyFromArray(accessor.max);
5688
- } else {
5689
- var position = KHR_draco_mesh_compression._tempVector3;
5690
- var min = bounds.min, max = bounds.max;
5691
- min.set(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);
5692
- max.set(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);
5693
- var stride = positionBuffer.length / vertexCount;
5694
- for(var j = 0; j < vertexCount; j++){
5695
- var offset = j * stride;
5696
- position.copyFromArray(positionBuffer, offset);
5697
- Vector3.min(min, position, min);
5698
- Vector3.max(max, position, max);
5699
- }
5700
- }
5701
- for(var attributeSemantic in attributes){
5702
- if (attributeSemantic === "POSITION") {
5703
- continue;
5704
- }
5705
- var bufferData = getVertexBufferData(attributeSemantic);
5706
- switch(attributeSemantic){
5707
- case "NORMAL":
5708
- var normals = GLTFUtils.floatBufferToVector3Array(bufferData);
5709
- mesh.setNormals(normals);
5710
- break;
5711
- case "TEXCOORD_0":
5712
- var texturecoords = GLTFUtils.floatBufferToVector2Array(bufferData);
5713
- mesh.setUVs(texturecoords, 0);
5714
- break;
5715
- case "TEXCOORD_1":
5716
- var texturecoords1 = GLTFUtils.floatBufferToVector2Array(bufferData);
5717
- mesh.setUVs(texturecoords1, 1);
5718
- break;
5719
- case "TEXCOORD_2":
5720
- var texturecoords2 = GLTFUtils.floatBufferToVector2Array(bufferData);
5721
- mesh.setUVs(texturecoords2, 2);
5722
- break;
5723
- case "TEXCOORD_3":
5724
- var texturecoords3 = GLTFUtils.floatBufferToVector2Array(bufferData);
5725
- mesh.setUVs(texturecoords3, 3);
5726
- break;
5727
- case "TEXCOORD_4":
5728
- var texturecoords4 = GLTFUtils.floatBufferToVector2Array(bufferData);
5729
- mesh.setUVs(texturecoords4, 4);
5730
- break;
5731
- case "TEXCOORD_5":
5732
- var texturecoords5 = GLTFUtils.floatBufferToVector2Array(bufferData);
5733
- mesh.setUVs(texturecoords5, 5);
5734
- break;
5735
- case "TEXCOORD_6":
5736
- var texturecoords6 = GLTFUtils.floatBufferToVector2Array(bufferData);
5737
- mesh.setUVs(texturecoords6, 6);
5738
- break;
5739
- case "TEXCOORD_7":
5740
- var texturecoords7 = GLTFUtils.floatBufferToVector2Array(bufferData);
5741
- mesh.setUVs(texturecoords7, 7);
5742
- break;
5743
- case "COLOR_0":
5744
- var colors = GLTFUtils.floatBufferToColorArray(bufferData, accessors[attributes["COLOR_0"]].type === AccessorType.VEC3);
5745
- mesh.setColors(colors);
5746
- break;
5747
- case "TANGENT":
5748
- var tangents = GLTFUtils.floatBufferToVector4Array(bufferData);
5749
- mesh.setTangents(tangents);
5750
- break;
5751
- case "JOINTS_0":
5752
- var joints = GLTFUtils.floatBufferToVector4Array(bufferData);
5753
- mesh.setBoneIndices(joints);
5754
- break;
5755
- case "WEIGHTS_0":
5756
- var weights = GLTFUtils.floatBufferToVector4Array(bufferData);
5757
- mesh.setBoneWeights(weights);
5758
- break;
5759
- }
5760
- }
5761
- // Indices
5762
- if (indices !== undefined) {
5763
- var indexAccessor = gltf.accessors[indices];
5764
- var indexData = getIndexBufferData();
5765
- mesh.setIndices(indexData);
5766
- mesh.addSubMesh(0, indexAccessor.count, mode);
5767
- } else {
5768
- mesh.addSubMesh(0, vertexCount, mode);
5769
- }
5770
- // BlendShapes
5771
- targets && GLTFMeshParser._createBlendShape(mesh, null, gltfMesh, accessors, targets, getBlendShapeData);
5772
- mesh.uploadData(!keepMeshData);
5773
- return Promise.resolve(mesh);
5774
- };
5775
- return KHR_draco_mesh_compression1;
5776
- }(GLTFExtensionParser), function() {
5777
- _KHR_draco_mesh_compression._tempVector3 = new Vector3();
5778
- }(), _KHR_draco_mesh_compression);
5779
- KHR_draco_mesh_compression = __decorate([
5780
- registerGLTFExtension("KHR_draco_mesh_compression", GLTFExtensionMode.CreateAndParse)
5781
- ], KHR_draco_mesh_compression);
5782
-
5783
6114
  var KHR_lights_punctual = /*#__PURE__*/ function(GLTFExtensionParser1) {
5784
6115
  _inherits(KHR_lights_punctual, GLTFExtensionParser1);
5785
6116
  function KHR_lights_punctual() {
@@ -5954,7 +6285,7 @@ var KHR_materials_variants = /*#__PURE__*/ function(GLTFExtensionParser1) {
5954
6285
  var _glTFResource;
5955
6286
  var _context_glTF = context.glTF, _context_glTF_extensions = _context_glTF.extensions, _context_glTF_extensions_KHR_materials_variants = _context_glTF_extensions.KHR_materials_variants, variantNames = _context_glTF_extensions_KHR_materials_variants.variants, glTFResource = context.glTFResource;
5956
6287
  var mappings = schema.mappings;
5957
- (_glTFResource = glTFResource).extensionsData || (_glTFResource.extensionsData = {});
6288
+ (_glTFResource = glTFResource)._extensionsData || (_glTFResource._extensionsData = {});
5958
6289
  var extensionData = [];
5959
6290
  glTFResource.extensionsData.variants = extensionData;
5960
6291
  for(var i = 0; i < mappings.length; i++)_loop(i);
@@ -5984,7 +6315,7 @@ var KHR_texture_basisu = /*#__PURE__*/ function(GLTFExtensionParser1) {
5984
6315
  var _proto = KHR_texture_basisu.prototype;
5985
6316
  _proto.createAndParse = function createAndParse(context, schema, textureInfo) {
5986
6317
  return _async_to_generator(function() {
5987
- var glTF, glTFResource, engine, url, sampler, textureName, source, _glTF_images_source, uri, bufferViewIndex, mimeType, imageName, samplerInfo, index, bufferView;
6318
+ var glTF, glTFResource, engine, url, sampler, textureName, source, _glTF_images_source, uri, bufferViewIndex, mimeType, imageName, samplerInfo, index, promise, bufferView;
5988
6319
  return __generator(this, function(_state) {
5989
6320
  glTF = context.glTF, glTFResource = context.glTFResource;
5990
6321
  engine = glTFResource.engine, url = glTFResource.url;
@@ -5994,20 +6325,22 @@ var KHR_texture_basisu = /*#__PURE__*/ function(GLTFExtensionParser1) {
5994
6325
  samplerInfo = sampler !== undefined && GLTFUtils.getSamplerInfo(glTF.samplers[sampler]);
5995
6326
  if (uri) {
5996
6327
  index = uri.lastIndexOf(".");
6328
+ promise = engine.resourceManager.load({
6329
+ url: Utils.resolveAbsoluteUrl(url, uri),
6330
+ type: AssetType.KTX2
6331
+ }).onProgress(undefined, context._onTaskDetail).then(function(texture) {
6332
+ if (!texture.name) {
6333
+ texture.name = textureName || imageName || "texture_" + index;
6334
+ }
6335
+ if (sampler !== undefined) {
6336
+ GLTFUtils.parseSampler(texture, samplerInfo);
6337
+ }
6338
+ return texture;
6339
+ });
6340
+ context._addTaskCompletePromise(promise);
5997
6341
  return [
5998
6342
  2,
5999
- engine.resourceManager.load({
6000
- url: Utils.resolveAbsoluteUrl(url, uri),
6001
- type: AssetType.KTX2
6002
- }).then(function(texture) {
6003
- if (!texture.name) {
6004
- texture.name = textureName || imageName || "texture_" + index;
6005
- }
6006
- if (sampler !== undefined) {
6007
- GLTFUtils.parseSampler(texture, samplerInfo);
6008
- }
6009
- return texture;
6010
- })
6343
+ promise
6011
6344
  ];
6012
6345
  } else {
6013
6346
  bufferView = glTF.bufferViews[bufferViewIndex];
@@ -6077,7 +6410,9 @@ var GALACEAN_materials_remap = /*#__PURE__*/ function(GLTFExtensionParser1) {
6077
6410
  _proto.createAndParse = function createAndParse(context, schema) {
6078
6411
  var engine = context.glTFResource.engine;
6079
6412
  // @ts-ignore
6080
- return engine.resourceManager.getResourceByRef(schema);
6413
+ var promise = engine.resourceManager.getResourceByRef(schema);
6414
+ context._addTaskCompletePromise(promise);
6415
+ return promise;
6081
6416
  };
6082
6417
  return GALACEAN_materials_remap;
6083
6418
  }(GLTFExtensionParser);
@@ -6108,5 +6443,45 @@ GALACEAN_animation_event = __decorate([
6108
6443
  registerGLTFExtension("GALACEAN_animation_event", GLTFExtensionMode.AdditiveParse)
6109
6444
  ], GALACEAN_animation_event);
6110
6445
 
6111
- export { AnimationClipDecoder, ComponentMap, EditorTextureLoader, GLTFAnimationParser, GLTFBufferParser, GLTFEntityParser, GLTFExtensionMode, GLTFExtensionParser, GLTFMaterialParser, GLTFMeshParser, GLTFParser, GLTFParserContext, GLTFParserType, GLTFResource, GLTFSceneParser, GLTFSchemaParser, GLTFSkinParser, GLTFTextureParser, GLTFUtils, GLTFValidator, InterpolableValueType, KTX2Loader, KTX2TargetFormat, MeshDecoder, MeshLoader$1 as MeshLoader, PrefabParser, ReflectionParser, SceneParser, SpecularMode, Texture2DDecoder, decode, parseSingleKTX, registerGLTFExtension, registerGLTFParser };
6446
+ var EXT_meshopt_compression = /*#__PURE__*/ function(GLTFExtensionParser1) {
6447
+ _inherits(EXT_meshopt_compression, GLTFExtensionParser1);
6448
+ function EXT_meshopt_compression() {
6449
+ return GLTFExtensionParser1.apply(this, arguments);
6450
+ }
6451
+ var _proto = EXT_meshopt_compression.prototype;
6452
+ _proto.createAndParse = function createAndParse(context, schema) {
6453
+ return context.get(GLTFParserType.Buffer, schema.buffer).then(function(arrayBuffer) {
6454
+ return MeshoptDecoder.decodeGltfBuffer(schema.count, schema.byteStride, new Uint8Array(arrayBuffer, schema.byteOffset, schema.byteLength), schema.mode, schema.filter);
6455
+ });
6456
+ };
6457
+ return EXT_meshopt_compression;
6458
+ }(GLTFExtensionParser);
6459
+ EXT_meshopt_compression = __decorate([
6460
+ registerGLTFExtension("EXT_meshopt_compression", GLTFExtensionMode.CreateAndParse)
6461
+ ], EXT_meshopt_compression);
6462
+
6463
+ var KHR_materials_anisotropy = /*#__PURE__*/ function(GLTFExtensionParser1) {
6464
+ _inherits(KHR_materials_anisotropy, GLTFExtensionParser1);
6465
+ function KHR_materials_anisotropy() {
6466
+ return GLTFExtensionParser1.apply(this, arguments);
6467
+ }
6468
+ var _proto = KHR_materials_anisotropy.prototype;
6469
+ _proto.additiveParse = function additiveParse(context, material, schema) {
6470
+ var _schema_anisotropyStrength = schema.anisotropyStrength, anisotropyStrength = _schema_anisotropyStrength === void 0 ? 0 : _schema_anisotropyStrength, _schema_anisotropyRotation = schema.anisotropyRotation, anisotropyRotation = _schema_anisotropyRotation === void 0 ? 0 : _schema_anisotropyRotation, anisotropyTexture = schema.anisotropyTexture;
6471
+ material.anisotropy = anisotropyStrength;
6472
+ material.anisotropyRotation = anisotropyRotation;
6473
+ if (anisotropyTexture) {
6474
+ GLTFMaterialParser._checkOtherTextureTransform(anisotropyTexture, "Anisotropy texture");
6475
+ context.get(GLTFParserType.Texture, anisotropyTexture.index).then(function(texture) {
6476
+ material.anisotropyTexture = texture;
6477
+ });
6478
+ }
6479
+ };
6480
+ return KHR_materials_anisotropy;
6481
+ }(GLTFExtensionParser);
6482
+ KHR_materials_anisotropy = __decorate([
6483
+ registerGLTFExtension("KHR_materials_anisotropy", GLTFExtensionMode.AdditiveParse)
6484
+ ], KHR_materials_anisotropy);
6485
+
6486
+ export { AccessorType, AnimationClipDecoder, BufferInfo, ComponentMap, EditorTextureLoader, GLTFAnimationParser, GLTFBufferParser, GLTFBufferViewParser, GLTFEntityParser, GLTFExtensionMode, GLTFExtensionParser, GLTFLoader, GLTFMaterialParser, GLTFMeshParser, GLTFParser, GLTFParserContext, GLTFParserType, GLTFResource, GLTFSceneParser, GLTFSchemaParser, GLTFSkinParser, GLTFTextureParser, GLTFUtils, GLTFValidator, InterpolableValueType, KTX2Loader, KTX2TargetFormat, KTX2Transcoder, MeshDecoder, MeshLoader$1 as MeshLoader, PrefabParser, ReflectionParser, SceneParser, SpecularMode, Texture2DDecoder, decode, parseSingleKTX, registerGLTFExtension, registerGLTFParser };
6112
6487
  //# sourceMappingURL=module.js.map