@galacean/engine-loader 1.1.0-beta.5 → 1.1.0-beta.50

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 (31) hide show
  1. package/dist/main.js +319 -223
  2. package/dist/main.js.map +1 -1
  3. package/dist/miniprogram.js +319 -223
  4. package/dist/module.js +320 -224
  5. package/dist/module.js.map +1 -1
  6. package/package.json +5 -5
  7. package/types/GLTFLoader.d.ts +1 -0
  8. package/types/PrimitiveMeshLoader.d.ts +1 -0
  9. package/types/Texture2DLoader.d.ts +9 -1
  10. package/types/gltf/GLTFUtils.d.ts +4 -3
  11. package/types/gltf/extensions/EXT_meshopt_compression.d.ts +13 -0
  12. package/types/gltf/extensions/KHR_materials_anisotropy.d.ts +1 -0
  13. package/types/gltf/extensions/MeshoptDecoder.d.ts +8 -0
  14. package/types/gltf/parser/GLTFBufferViewParser.d.ts +5 -0
  15. package/types/gltf/parser/GLTFParserContext.d.ts +4 -2
  16. package/types/gltf/parser/GLTFSceneParser.d.ts +0 -1
  17. package/types/gltf/parser/GLTFSchemaParser.d.ts +0 -1
  18. package/types/index.d.ts +1 -1
  19. package/types/ktx2/KTX2Loader.d.ts +16 -5
  20. package/types/ktx2/transcoder/AbstractTranscoder.d.ts +1 -1
  21. package/types/ktx2/transcoder/BinomialLLCTranscoder.d.ts +1 -1
  22. package/types/ktx2/transcoder/BinomialLLCWorkerCode.d.ts +1 -1
  23. package/types/resource-deserialize/resources/parser/HierarchyParser.d.ts +36 -0
  24. package/types/resource-deserialize/resources/parser/ParserContext.d.ts +29 -0
  25. package/types/resource-deserialize/resources/parser/ReflectionParser.d.ts +1 -1
  26. package/types/resource-deserialize/resources/prefab/PrefabParser.d.ts +13 -4
  27. package/types/resource-deserialize/resources/prefab/PrefabParserContext.d.ts +5 -0
  28. package/types/resource-deserialize/resources/schema/BasicSchema.d.ts +2 -0
  29. package/types/resource-deserialize/resources/schema/MaterialSchema.d.ts +1 -1
  30. package/types/resource-deserialize/resources/schema/SceneSchema.d.ts +3 -1
  31. package/types/resource-deserialize/utils/BufferReader.d.ts +1 -1
package/dist/main.js CHANGED
@@ -120,116 +120,116 @@ var BufferReader = /*#__PURE__*/ function() {
120
120
  this.data = data;
121
121
  this._dataView = new DataView(data.buffer, data.byteOffset + byteOffset, byteLength != null ? byteLength : data.byteLength - byteOffset);
122
122
  this._littleEndian = littleEndian;
123
- this._offset = 0;
123
+ this._position = 0;
124
124
  this._baseOffset = byteOffset;
125
125
  }
126
126
  var _proto = BufferReader.prototype;
127
127
  _proto.nextUint8 = function nextUint8() {
128
- var value = this._dataView.getUint8(this._offset);
129
- this._offset += 1;
128
+ var value = this._dataView.getUint8(this._position);
129
+ this._position += 1;
130
130
  return value;
131
131
  };
132
132
  _proto.nextUint16 = function nextUint16() {
133
- var value = this._dataView.getUint16(this._offset, this._littleEndian);
134
- this._offset += 2;
133
+ var value = this._dataView.getUint16(this._position, this._littleEndian);
134
+ this._position += 2;
135
135
  return value;
136
136
  };
137
137
  _proto.nextUint32 = function nextUint32() {
138
- var value = this._dataView.getUint32(this._offset, this._littleEndian);
139
- this._offset += 4;
138
+ var value = this._dataView.getUint32(this._position, this._littleEndian);
139
+ this._position += 4;
140
140
  return value;
141
141
  };
142
142
  _proto.nextInt32 = function nextInt32() {
143
- var value = this._dataView.getInt32(this._offset, this._littleEndian);
144
- this._offset += 4;
143
+ var value = this._dataView.getInt32(this._position, this._littleEndian);
144
+ this._position += 4;
145
145
  return value;
146
146
  };
147
147
  _proto.nextInt32Array = function nextInt32Array(len) {
148
- var value = new Int32Array(this.data.buffer, this._offset + this._dataView.byteOffset, len);
149
- this._offset += 4 * len;
148
+ var value = new Int32Array(this.data.buffer, this._position + this._dataView.byteOffset, len);
149
+ this._position += 4 * len;
150
150
  return value;
151
151
  };
152
152
  _proto.nextFloat32 = function nextFloat32() {
153
- var value = this._dataView.getFloat32(this._offset, this._littleEndian);
154
- this._offset += 4;
153
+ var value = this._dataView.getFloat32(this._position, this._littleEndian);
154
+ this._position += 4;
155
155
  return value;
156
156
  };
157
157
  _proto.nextFloat32Array = function nextFloat32Array(len) {
158
- var value = new Float32Array(this.data.buffer, this._offset + this._dataView.byteOffset, len);
159
- this._offset += 4 * len;
158
+ var value = new Float32Array(this.data.buffer, this._position + this._dataView.byteOffset, len);
159
+ this._position += 4 * len;
160
160
  return value;
161
161
  };
162
162
  _proto.nextUint32Array = function nextUint32Array(len) {
163
- var value = new Uint32Array(this.data.buffer, this._offset + this._dataView.byteOffset, len);
164
- this._offset += 4 * len;
163
+ var value = new Uint32Array(this.data.buffer, this._position + this._dataView.byteOffset, len);
164
+ this._position += 4 * len;
165
165
  return value;
166
166
  };
167
167
  _proto.nextUint8Array = function nextUint8Array(len) {
168
- var value = new Uint8Array(this.data.buffer, this._offset + this._dataView.byteOffset, len);
169
- this._offset += len;
168
+ var value = new Uint8Array(this.data.buffer, this._position + this._dataView.byteOffset, len);
169
+ this._position += len;
170
170
  return value;
171
171
  };
172
172
  _proto.nextUint64 = function nextUint64() {
173
- var left = this._dataView.getUint32(this._offset, this._littleEndian);
174
- var right = this._dataView.getUint32(this._offset + 4, this._littleEndian);
173
+ var left = this._dataView.getUint32(this._position, this._littleEndian);
174
+ var right = this._dataView.getUint32(this._position + 4, this._littleEndian);
175
175
  var value = left + Math.pow(2, 32) * right;
176
- this._offset += 8;
176
+ this._position += 8;
177
177
  return value;
178
178
  };
179
179
  _proto.nextStr = function nextStr() {
180
180
  var strByteLength = this.nextUint16();
181
- var uint8Array = new Uint8Array(this.data.buffer, this._offset + this._dataView.byteOffset, strByteLength);
182
- this._offset += strByteLength;
181
+ var uint8Array = new Uint8Array(this.data.buffer, this._position + this._dataView.byteOffset, strByteLength);
182
+ this._position += strByteLength;
183
183
  return engineCore.Utils.decodeText(uint8Array);
184
184
  };
185
185
  /**
186
186
  * image data 放在最后
187
187
  */ _proto.nextImageData = function nextImageData(count) {
188
- return new Uint8Array(this.data.buffer, this.data.byteOffset + this._offset);
188
+ return new Uint8Array(this.data.buffer, this.data.byteOffset + this._position);
189
189
  };
190
190
  _proto.nextImagesData = function nextImagesData(count) {
191
191
  var imagesLen = new Array(count);
192
192
  // 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
193
193
  for(var i = 0; i < count; i++){
194
- var len = this._dataView.getUint32(this._offset, this._littleEndian);
194
+ var len = this._dataView.getUint32(this._position, this._littleEndian);
195
195
  imagesLen[i] = len;
196
- this._offset += 4;
196
+ this._position += 4;
197
197
  }
198
198
  var imagesData = [];
199
199
  for(var i1 = 0; i1 < count; i1++){
200
200
  var len1 = imagesLen[i1];
201
- var buffer = new Uint8Array(this.data.buffer, this._dataView.byteOffset + this._offset, len1);
202
- this._offset += len1;
201
+ var buffer = new Uint8Array(this.data.buffer, this._dataView.byteOffset + this._position, len1);
202
+ this._position += len1;
203
203
  imagesData.push(buffer);
204
204
  }
205
205
  return imagesData;
206
206
  };
207
207
  _proto.skip = function skip(bytes) {
208
- this._offset += bytes;
208
+ this._position += bytes;
209
209
  return this;
210
210
  };
211
211
  _proto.scan = function scan(maxByteLength, term) {
212
212
  if (term === void 0) term = 0x00;
213
- var byteOffset = this._offset;
213
+ var byteOffset = this._position;
214
214
  var byteLength = 0;
215
- while(this._dataView.getUint8(this._offset) !== term && byteLength < maxByteLength){
215
+ while(this._dataView.getUint8(this._position) !== term && byteLength < maxByteLength){
216
216
  byteLength++;
217
- this._offset++;
217
+ this._position++;
218
218
  }
219
- if (byteLength < maxByteLength) this._offset++;
219
+ if (byteLength < maxByteLength) this._position++;
220
220
  return new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + byteOffset, byteLength);
221
221
  };
222
222
  _create_class(BufferReader, [
223
223
  {
224
224
  key: "position",
225
225
  get: function get() {
226
- return this._offset;
226
+ return this._position;
227
227
  }
228
228
  },
229
229
  {
230
230
  key: "offset",
231
231
  get: function get() {
232
- return this._offset + this._baseOffset;
232
+ return this._position + this._baseOffset;
233
233
  }
234
234
  }
235
235
  ]);
@@ -293,75 +293,74 @@ exports.MeshDecoder = /*#__PURE__*/ function() {
293
293
  var encodedMeshData = JSON.parse(jsonDataString);
294
294
  // @ts-ignore Vector3 is not compatible with {x: number, y: number, z: number}.
295
295
  encodedMeshData.bounds && modelMesh.bounds.copyFrom(encodedMeshData.bounds);
296
- var offset = Math.ceil(bufferReader.offset / 4) * 4;
296
+ var offset = Math.ceil(bufferReader.offset / 4) * 4 + bufferReader.data.byteOffset;
297
297
  var buffer = bufferReader.data.buffer;
298
- var byteOffset = bufferReader.data.byteOffset;
299
- var float32Array = new Float32Array(buffer, encodedMeshData.positions.start + offset + byteOffset, (encodedMeshData.positions.end - encodedMeshData.positions.start) / 4);
298
+ var float32Array = new Float32Array(buffer, encodedMeshData.positions.start + offset, (encodedMeshData.positions.end - encodedMeshData.positions.start) / 4);
300
299
  var vertexCount = float32Array.length / 3;
301
300
  var positions = float32ArrayToVector3(float32Array, vertexCount);
302
301
  modelMesh.setPositions(positions);
303
302
  if (encodedMeshData.normals) {
304
- var float32Array1 = new Float32Array(buffer, encodedMeshData.normals.start + offset + byteOffset, (encodedMeshData.normals.end - encodedMeshData.normals.start) / 4);
303
+ var float32Array1 = new Float32Array(buffer, encodedMeshData.normals.start + offset, (encodedMeshData.normals.end - encodedMeshData.normals.start) / 4);
305
304
  var normals = float32ArrayToVector3(float32Array1, vertexCount);
306
305
  modelMesh.setNormals(normals);
307
306
  }
308
307
  if (encodedMeshData.uvs) {
309
- var float32Array2 = new Float32Array(buffer, encodedMeshData.uvs.start + offset + byteOffset, (encodedMeshData.uvs.end - encodedMeshData.uvs.start) / 4);
308
+ var float32Array2 = new Float32Array(buffer, encodedMeshData.uvs.start + offset, (encodedMeshData.uvs.end - encodedMeshData.uvs.start) / 4);
310
309
  modelMesh.setUVs(float32ArrayToVector2(float32Array2, vertexCount));
311
310
  }
312
311
  if (encodedMeshData.uv1) {
313
- var float32Array3 = new Float32Array(buffer, encodedMeshData.uv1.start + offset + byteOffset, (encodedMeshData.uv1.end - encodedMeshData.uv1.start) / 4);
312
+ var float32Array3 = new Float32Array(buffer, encodedMeshData.uv1.start + offset, (encodedMeshData.uv1.end - encodedMeshData.uv1.start) / 4);
314
313
  modelMesh.setUVs(float32ArrayToVector2(float32Array3, vertexCount), 1);
315
314
  }
316
315
  if (encodedMeshData.uv2) {
317
- var float32Array4 = new Float32Array(buffer, encodedMeshData.uv2.start + offset + byteOffset, (encodedMeshData.uv2.end - encodedMeshData.uv2.start) / 4);
316
+ var float32Array4 = new Float32Array(buffer, encodedMeshData.uv2.start + offset, (encodedMeshData.uv2.end - encodedMeshData.uv2.start) / 4);
318
317
  modelMesh.setUVs(float32ArrayToVector2(float32Array4, vertexCount), 2);
319
318
  }
320
319
  if (encodedMeshData.uv3) {
321
- var float32Array5 = new Float32Array(buffer, encodedMeshData.uv3.start + offset + byteOffset, (encodedMeshData.uv3.end - encodedMeshData.uv3.start) / 4);
320
+ var float32Array5 = new Float32Array(buffer, encodedMeshData.uv3.start + offset, (encodedMeshData.uv3.end - encodedMeshData.uv3.start) / 4);
322
321
  modelMesh.setUVs(float32ArrayToVector2(float32Array5, vertexCount), 3);
323
322
  }
324
323
  if (encodedMeshData.uv4) {
325
- var float32Array6 = new Float32Array(buffer, encodedMeshData.uv4.start + offset + byteOffset, (encodedMeshData.uv4.end - encodedMeshData.uv4.start) / 4);
324
+ var float32Array6 = new Float32Array(buffer, encodedMeshData.uv4.start + offset, (encodedMeshData.uv4.end - encodedMeshData.uv4.start) / 4);
326
325
  modelMesh.setUVs(float32ArrayToVector2(float32Array6, vertexCount), 4);
327
326
  }
328
327
  if (encodedMeshData.uv5) {
329
- var float32Array7 = new Float32Array(buffer, encodedMeshData.uv5.start + offset + byteOffset, (encodedMeshData.uv5.end - encodedMeshData.uv5.start) / 4);
328
+ var float32Array7 = new Float32Array(buffer, encodedMeshData.uv5.start + offset, (encodedMeshData.uv5.end - encodedMeshData.uv5.start) / 4);
330
329
  modelMesh.setUVs(float32ArrayToVector2(float32Array7, vertexCount), 5);
331
330
  }
332
331
  if (encodedMeshData.uv6) {
333
- var float32Array8 = new Float32Array(buffer, encodedMeshData.uv6.start + offset + byteOffset, (encodedMeshData.uv6.end - encodedMeshData.uv6.start) / 4);
332
+ var float32Array8 = new Float32Array(buffer, encodedMeshData.uv6.start + offset, (encodedMeshData.uv6.end - encodedMeshData.uv6.start) / 4);
334
333
  modelMesh.setUVs(float32ArrayToVector2(float32Array8, vertexCount), 6);
335
334
  }
336
335
  if (encodedMeshData.uv7) {
337
- var float32Array9 = new Float32Array(buffer, encodedMeshData.uv7.start + offset + byteOffset, (encodedMeshData.uv7.end - encodedMeshData.uv7.start) / 4);
336
+ var float32Array9 = new Float32Array(buffer, encodedMeshData.uv7.start + offset, (encodedMeshData.uv7.end - encodedMeshData.uv7.start) / 4);
338
337
  modelMesh.setUVs(float32ArrayToVector2(float32Array9, vertexCount), 7);
339
338
  }
340
339
  if (encodedMeshData.colors) {
341
- var float32Array10 = new Float32Array(buffer, encodedMeshData.colors.start + offset + byteOffset, (encodedMeshData.colors.end - encodedMeshData.colors.start) / 4);
340
+ var float32Array10 = new Float32Array(buffer, encodedMeshData.colors.start + offset, (encodedMeshData.colors.end - encodedMeshData.colors.start) / 4);
342
341
  modelMesh.setColors(float32ArrayToVColor(float32Array10, vertexCount));
343
342
  }
344
343
  if (encodedMeshData.boneWeights) {
345
- var float32Array11 = new Float32Array(buffer, encodedMeshData.boneWeights.start + offset + byteOffset, (encodedMeshData.boneWeights.end - encodedMeshData.boneWeights.start) / 4);
344
+ var float32Array11 = new Float32Array(buffer, encodedMeshData.boneWeights.start + offset, (encodedMeshData.boneWeights.end - encodedMeshData.boneWeights.start) / 4);
346
345
  modelMesh.setBoneWeights(float32ArrayToVector4(float32Array11, vertexCount));
347
346
  }
348
347
  if (encodedMeshData.boneIndices) {
349
- var float32Array12 = new Float32Array(buffer, encodedMeshData.boneIndices.start + offset + byteOffset, (encodedMeshData.boneIndices.end - encodedMeshData.boneIndices.start) / 4);
348
+ var float32Array12 = new Float32Array(buffer, encodedMeshData.boneIndices.start + offset, (encodedMeshData.boneIndices.end - encodedMeshData.boneIndices.start) / 4);
350
349
  modelMesh.setBoneIndices(float32ArrayToVector4(float32Array12, vertexCount));
351
350
  }
352
351
  if (encodedMeshData.blendShapes) {
353
352
  encodedMeshData.blendShapes.forEach(function(blendShapeData) {
354
353
  var blendShape = new engineCore.BlendShape(blendShapeData.name);
355
354
  blendShapeData.frames.forEach(function(frameData) {
356
- var positionArray = new Float32Array(buffer, frameData.deltaPosition.start + offset + byteOffset, (frameData.deltaPosition.end - frameData.deltaPosition.start) / 4);
355
+ var positionArray = new Float32Array(buffer, frameData.deltaPosition.start + offset, (frameData.deltaPosition.end - frameData.deltaPosition.start) / 4);
357
356
  var count = positionArray.length / 3;
358
357
  var deltaPosition = float32ArrayToVector3(positionArray, count);
359
358
  if (frameData.deltaNormals) {
360
- var normalsArray = new Float32Array(buffer, frameData.deltaNormals.start + offset + byteOffset, (frameData.deltaNormals.end - frameData.deltaNormals.start) / 4);
359
+ var normalsArray = new Float32Array(buffer, frameData.deltaNormals.start + offset, (frameData.deltaNormals.end - frameData.deltaNormals.start) / 4);
361
360
  float32ArrayToVector3(normalsArray, count);
362
361
  }
363
362
  if (frameData.deltaTangents) {
364
- var tangentsArray = new Float32Array(buffer, frameData.deltaTangents.start + offset + byteOffset, (frameData.deltaTangents.end - frameData.deltaTangents.start) / 4);
363
+ var tangentsArray = new Float32Array(buffer, frameData.deltaTangents.start + offset, (frameData.deltaTangents.end - frameData.deltaTangents.start) / 4);
365
364
  float32ArrayToVector4(tangentsArray, count);
366
365
  }
367
366
  blendShape.addFrame(frameData.weight, deltaPosition);
@@ -372,9 +371,9 @@ exports.MeshDecoder = /*#__PURE__*/ function() {
372
371
  if (encodedMeshData.indices) {
373
372
  var indices = null;
374
373
  if (encodedMeshData.indices.type === 0) {
375
- indices = new Uint16Array(buffer, encodedMeshData.indices.start + offset + byteOffset, (encodedMeshData.indices.end - encodedMeshData.indices.start) / 2);
374
+ indices = new Uint16Array(buffer, encodedMeshData.indices.start + offset, (encodedMeshData.indices.end - encodedMeshData.indices.start) / 2);
376
375
  } else {
377
- indices = new Uint32Array(buffer, encodedMeshData.indices.start + offset + byteOffset, (encodedMeshData.indices.end - encodedMeshData.indices.start) / 4);
376
+ indices = new Uint32Array(buffer, encodedMeshData.indices.start + offset, (encodedMeshData.indices.end - encodedMeshData.indices.start) / 4);
378
377
  }
379
378
  modelMesh.setIndices(indices);
380
379
  }
@@ -539,15 +538,23 @@ var ReflectionParser = /*#__PURE__*/ function() {
539
538
  if (position) entity.transform.position.copyFrom(position);
540
539
  if (rotation) entity.transform.rotation.copyFrom(rotation);
541
540
  if (scale) entity.transform.scale.copyFrom(scale);
541
+ var _entityConfig_layer;
542
+ entity.layer = (_entityConfig_layer = entityConfig.layer) != null ? _entityConfig_layer : entity.layer;
542
543
  return entity;
543
544
  });
544
545
  };
545
546
  _proto.parseClassObject = function parseClassObject(item) {
547
+ var _this = this;
546
548
  var Class = engineCore.Loader.getClass(item.class);
547
549
  var _item_constructParams;
548
550
  var params = (_item_constructParams = item.constructParams) != null ? _item_constructParams : [];
549
- var instance = _construct(Class, [].concat(params));
550
- return this.parsePropsAndMethods(instance, item);
551
+ return Promise.all(params.map(function(param) {
552
+ return _this.parseBasicType(param);
553
+ })).then(function(resultParams) {
554
+ return _construct(Class, [].concat(resultParams));
555
+ }).then(function(instance) {
556
+ return _this.parsePropsAndMethods(instance, item);
557
+ });
551
558
  };
552
559
  _proto.parsePropsAndMethods = function parsePropsAndMethods(instance, item) {
553
560
  var promises = [];
@@ -555,16 +562,14 @@ var ReflectionParser = /*#__PURE__*/ function() {
555
562
  for(var methodName in item.methods){
556
563
  var methodParams = item.methods[methodName];
557
564
  for(var i = 0, count = methodParams.length; i < count; i++){
558
- var params = methodParams[i];
559
- var promise = this.parseMethod(instance, methodName, params);
560
- promises.push(promise);
565
+ promises.push(this.parseMethod(instance, methodName, methodParams[i]));
561
566
  }
562
567
  }
563
568
  }
564
569
  if (item.props) {
565
570
  var _this = this, _loop = function(key) {
566
571
  var value = item.props[key];
567
- var promise = _this.parseBasicType(value).then(function(v) {
572
+ var promise = _this.parseBasicType(value, instance[key]).then(function(v) {
568
573
  return instance[key] = v;
569
574
  });
570
575
  promises.push(promise);
@@ -586,7 +591,7 @@ var ReflectionParser = /*#__PURE__*/ function() {
586
591
  return (_instance = instance)[methodName].apply(_instance, [].concat(result));
587
592
  });
588
593
  };
589
- _proto.parseBasicType = function parseBasicType(value) {
594
+ _proto.parseBasicType = function parseBasicType(value, originValue) {
590
595
  var _this = this;
591
596
  if (Array.isArray(value)) {
592
597
  return Promise.all(value.map(function(item) {
@@ -603,13 +608,33 @@ var ReflectionParser = /*#__PURE__*/ function() {
603
608
  } else if (ReflectionParser._isEntityRef(value)) {
604
609
  // entity reference
605
610
  return Promise.resolve(this._context.entityMap.get(value.entityId));
606
- } else {
607
- // basic type
608
- return Promise.resolve(value);
611
+ } else if (originValue) {
612
+ var _this1 = this, _loop = function(key) {
613
+ if (key === "methods") {
614
+ var methods = value[key];
615
+ for(var methodName in methods){
616
+ var methodParams = methods[methodName];
617
+ for(var i = 0, count = methodParams.length; i < count; i++){
618
+ var params = methodParams[i];
619
+ var promise = _this1.parseMethod(originValue, methodName, params);
620
+ promises.push(promise);
621
+ }
622
+ }
623
+ } else {
624
+ promises.push(_this1.parseBasicType(value[key], originValue[key]).then(function(v) {
625
+ return originValue[key] = v;
626
+ }));
627
+ }
628
+ };
629
+ var promises = [];
630
+ for(var key in value)_loop(key);
631
+ return Promise.all(promises).then(function() {
632
+ return originValue;
633
+ });
609
634
  }
610
- } else {
611
- return Promise.resolve(value);
612
635
  }
636
+ // primitive type
637
+ return Promise.resolve(value);
613
638
  };
614
639
  _proto._getEntityByConfig = function _getEntityByConfig(entityConfig) {
615
640
  // @ts-ignore
@@ -1546,10 +1571,10 @@ var TextureWrapMode;
1546
1571
  /**
1547
1572
  * @internal
1548
1573
  */ var GLTFParserContext = /*#__PURE__*/ function() {
1549
- function GLTFParserContext(glTFResource, resourceManager, keepMeshData) {
1574
+ function GLTFParserContext(glTFResource, resourceManager, params) {
1550
1575
  this.glTFResource = glTFResource;
1551
1576
  this.resourceManager = resourceManager;
1552
- this.keepMeshData = keepMeshData;
1577
+ this.params = params;
1553
1578
  this.accessorBufferCache = {};
1554
1579
  this._resourceCache = new Map();
1555
1580
  this.contentRestorer = new GLTFContentRestorer(glTFResource);
@@ -1603,11 +1628,37 @@ var TextureWrapMode;
1603
1628
  _this.get(9),
1604
1629
  _this.get(2)
1605
1630
  ]).then(function() {
1631
+ var glTFResource = _this.glTFResource;
1632
+ if (glTFResource.skins || glTFResource.animations) {
1633
+ _this._createAnimator(_this, glTFResource.animations);
1634
+ }
1606
1635
  _this.resourceManager.addContentRestorer(_this.contentRestorer);
1607
- return _this.glTFResource;
1636
+ return glTFResource;
1608
1637
  });
1609
1638
  });
1610
1639
  };
1640
+ _proto._createAnimator = function _createAnimator(context, animations) {
1641
+ var defaultSceneRoot = context.glTFResource.defaultSceneRoot;
1642
+ var animator = defaultSceneRoot.addComponent(engineCore.Animator);
1643
+ var animatorController = new engineCore.AnimatorController();
1644
+ var layer = new engineCore.AnimatorControllerLayer("layer");
1645
+ var animatorStateMachine = new engineCore.AnimatorStateMachine();
1646
+ animatorController.addLayer(layer);
1647
+ animator.animatorController = animatorController;
1648
+ layer.stateMachine = animatorStateMachine;
1649
+ if (animations) {
1650
+ for(var i = 0; i < animations.length; i++){
1651
+ var animationClip = animations[i];
1652
+ var name = animationClip.name;
1653
+ var uniqueName = animatorStateMachine.makeUniqueStateName(name);
1654
+ if (uniqueName !== name) {
1655
+ console.warn("AnimatorState name is existed, name: " + name + " reset to " + uniqueName);
1656
+ }
1657
+ var animatorState = animatorStateMachine.addState(uniqueName);
1658
+ animatorState.clip = animationClip;
1659
+ }
1660
+ }
1661
+ };
1611
1662
  _proto._handleSubAsset = function _handleSubAsset(resource, type, index) {
1612
1663
  var _this = this;
1613
1664
  var glTFResourceKey = glTFResourceMap[type];
@@ -1775,7 +1826,9 @@ function registerGLTFParser(pipeline) {
1775
1826
  };
1776
1827
  GLTFUtils.getAccessorBuffer = function getAccessorBuffer(context, bufferViews, accessor) {
1777
1828
  var componentType = accessor.componentType;
1778
- var bufferView = bufferViews[accessor.bufferView];
1829
+ var _accessor_bufferView;
1830
+ var bufferViewIndex = (_accessor_bufferView = accessor.bufferView) != null ? _accessor_bufferView : 0;
1831
+ var bufferView = bufferViews[bufferViewIndex];
1779
1832
  return context.get(exports.GLTFParserType.Buffer).then(function(buffers) {
1780
1833
  var bufferIndex = bufferView.buffer;
1781
1834
  var buffer = buffers[bufferIndex];
@@ -1793,7 +1846,7 @@ function registerGLTFParser(pipeline) {
1793
1846
  // According to the glTF official documentation only byteStride not undefined is allowed
1794
1847
  if (bufferStride !== undefined && bufferStride !== elementStride) {
1795
1848
  var bufferSlice = Math.floor(byteOffset / bufferStride);
1796
- var bufferCacheKey = accessor.bufferView + ":" + componentType + ":" + bufferSlice + ":" + accessorCount;
1849
+ var bufferCacheKey = bufferViewIndex + ":" + componentType + ":" + bufferSlice + ":" + accessorCount;
1797
1850
  var accessorBufferCache = context.accessorBufferCache;
1798
1851
  bufferInfo = accessorBufferCache[bufferCacheKey];
1799
1852
  if (!bufferInfo) {
@@ -1832,7 +1885,8 @@ function registerGLTFParser(pipeline) {
1832
1885
  * Get accessor data.
1833
1886
  */ GLTFUtils.getAccessorData = function getAccessorData(glTF, accessor, buffers) {
1834
1887
  var bufferViews = glTF.bufferViews;
1835
- var bufferView = bufferViews[accessor.bufferView];
1888
+ var _accessor_bufferView;
1889
+ var bufferView = bufferViews[(_accessor_bufferView = accessor.bufferView) != null ? _accessor_bufferView : 0];
1836
1890
  var arrayBuffer = buffers[bufferView.buffer];
1837
1891
  var accessorByteOffset = accessor.hasOwnProperty("byteOffset") ? accessor.byteOffset : 0;
1838
1892
  var bufferViewByteOffset = bufferView.hasOwnProperty("byteOffset") ? bufferView.byteOffset : 0;
@@ -2009,7 +2063,7 @@ function registerGLTFParser(pipeline) {
2009
2063
  };
2010
2064
  /**
2011
2065
  * Parse the glb format.
2012
- */ GLTFUtils.parseGLB = function parseGLB(context, glb) {
2066
+ */ GLTFUtils.parseGLB = function parseGLB(context, originBuffer) {
2013
2067
  var UINT32_LENGTH = 4;
2014
2068
  var GLB_HEADER_MAGIC = 0x46546c67; // 'glTF'
2015
2069
  var GLB_HEADER_LENGTH = 12;
@@ -2017,7 +2071,7 @@ function registerGLTFParser(pipeline) {
2017
2071
  JSON: 0x4e4f534a,
2018
2072
  BIN: 0x004e4942
2019
2073
  };
2020
- var dataView = new DataView(glb);
2074
+ var dataView = new DataView(originBuffer);
2021
2075
  // read header
2022
2076
  var header = {
2023
2077
  magic: dataView.getUint32(0, true),
@@ -2025,8 +2079,9 @@ function registerGLTFParser(pipeline) {
2025
2079
  length: dataView.getUint32(2 * UINT32_LENGTH, true)
2026
2080
  };
2027
2081
  if (header.magic !== GLB_HEADER_MAGIC) {
2028
- console.error("Invalid glb magic number. Expected 0x46546C67, found 0x" + header.magic.toString(16));
2029
- return null;
2082
+ return {
2083
+ originBuffer: originBuffer
2084
+ };
2030
2085
  }
2031
2086
  // read main data
2032
2087
  var chunkLength = dataView.getUint32(GLB_HEADER_LENGTH, true);
@@ -2036,7 +2091,7 @@ function registerGLTFParser(pipeline) {
2036
2091
  console.error("Invalid glb chunk type. Expected 0x4E4F534A, found 0x" + chunkType.toString(16));
2037
2092
  return null;
2038
2093
  }
2039
- var glTFData = new Uint8Array(glb, GLB_HEADER_LENGTH + 2 * UINT32_LENGTH, chunkLength);
2094
+ var glTFData = new Uint8Array(originBuffer, GLB_HEADER_LENGTH + 2 * UINT32_LENGTH, chunkLength);
2040
2095
  var glTF = JSON.parse(engineCore.Utils.decodeText(glTFData));
2041
2096
  // read all buffers
2042
2097
  var buffers = [];
@@ -2050,7 +2105,7 @@ function registerGLTFParser(pipeline) {
2050
2105
  return null;
2051
2106
  }
2052
2107
  var currentOffset = byteOffset + 2 * UINT32_LENGTH;
2053
- var buffer = glb.slice(currentOffset, currentOffset + chunkLength);
2108
+ var buffer = originBuffer.slice(currentOffset, currentOffset + chunkLength);
2054
2109
  buffers.push(buffer);
2055
2110
  restoreGLBBufferSlice.push(new engineMath.Vector2(currentOffset, chunkLength));
2056
2111
  byteOffset += chunkLength + 2 * UINT32_LENGTH;
@@ -2247,7 +2302,7 @@ var SupercompressionScheme;
2247
2302
  alphaSliceByteLength: sgdReader.nextUint32()
2248
2303
  };
2249
2304
  }
2250
- var endpointsByteOffset = sgdByteOffset + sgdReader.offset;
2305
+ var endpointsByteOffset = sgdByteOffset + sgdReader.position;
2251
2306
  var selectorsByteOffset = endpointsByteOffset + endpointsByteLength;
2252
2307
  var tablesByteOffset = selectorsByteOffset + selectorsByteLength;
2253
2308
  var extendedByteOffset = tablesByteOffset + tablesByteLength;
@@ -2439,6 +2494,25 @@ var AbstractTranscoder = /*#__PURE__*/ function() {
2439
2494
  }();
2440
2495
 
2441
2496
  /** @internal */ function TranscodeWorkerCode$1() {
2497
+ var initPromise;
2498
+ var init = function init(wasmBinary) {
2499
+ if (!initPromise) {
2500
+ initPromise = new Promise(function(resolve, reject) {
2501
+ var BasisModule = {
2502
+ wasmBinary: wasmBinary,
2503
+ onRuntimeInitialized: function() {
2504
+ return resolve(BasisModule);
2505
+ },
2506
+ onAbort: reject
2507
+ };
2508
+ self["BASIS"](BasisModule);
2509
+ }).then(function(BasisModule) {
2510
+ BasisModule.initializeBasis();
2511
+ return BasisModule.KTX2File;
2512
+ });
2513
+ }
2514
+ return initPromise;
2515
+ };
2442
2516
  self.onmessage = function onmessage(event) {
2443
2517
  var message = event.data;
2444
2518
  switch(message.type){
@@ -2553,6 +2627,10 @@ function transcode(buffer, targetFormat, KTX2File) {
2553
2627
  cleanup();
2554
2628
  throw new Error("Invalid or unsupported .ktx2 file");
2555
2629
  }
2630
+ if (!ktx2File.startTranscoding()) {
2631
+ cleanup();
2632
+ throw new Error("KTX2 startTranscoding failed");
2633
+ }
2556
2634
  var width = ktx2File.getWidth();
2557
2635
  var height = ktx2File.getHeight();
2558
2636
  var layerCount = ktx2File.getLayers() || 1;
@@ -2561,6 +2639,7 @@ function transcode(buffer, targetFormat, KTX2File) {
2561
2639
  var faceCount = ktx2File.getFaces();
2562
2640
  var format = getTranscodeFormatFromTarget(targetFormat, hasAlpha);
2563
2641
  var faces = new Array(faceCount);
2642
+ var isBC = format === 2 || format === 3 || format === 7;
2564
2643
  for(var face = 0; face < faceCount; face++){
2565
2644
  var mipmaps = new Array(levelCount);
2566
2645
  for(var mip = 0; mip < levelCount; mip++){
@@ -2568,8 +2647,15 @@ function transcode(buffer, targetFormat, KTX2File) {
2568
2647
  var mipWidth = void 0, mipHeight = void 0;
2569
2648
  for(var layer = 0; layer < layerCount; layer++){
2570
2649
  var levelInfo = ktx2File.getImageLevelInfo(mip, layer, face);
2571
- mipWidth = levelInfo.origWidth;
2572
- mipHeight = levelInfo.origHeight;
2650
+ // see: https://github.com/KhronosGroup/KTX-Software/issues/254
2651
+ if (isBC && mip === 0 && (width !== levelInfo.width || height !== levelInfo.height)) {
2652
+ width = mipWidth = levelInfo.width;
2653
+ height = mipHeight = levelInfo.height;
2654
+ 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.");
2655
+ } else {
2656
+ mipWidth = levelInfo.origWidth;
2657
+ mipHeight = levelInfo.origHeight;
2658
+ }
2573
2659
  var dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, format));
2574
2660
  var status = ktx2File.transcodeImage(dst, mip, layer, face, format, 0, -1, -1);
2575
2661
  if (!status) {
@@ -2635,7 +2721,7 @@ function transcode(buffer, targetFormat, KTX2File) {
2635
2721
  } else {
2636
2722
  var funcCode = TranscodeWorkerCode$1.toString();
2637
2723
  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 ";
2724
+ var workerCode = "\n " + jsCode + "\n " + transcode.toString() + "\n " + transcodeString + "\n ";
2639
2725
  var workerURL = URL.createObjectURL(new Blob([
2640
2726
  workerCode
2641
2727
  ], {
@@ -2881,10 +2967,14 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2881
2967
  return Loader1.apply(this, arguments);
2882
2968
  }
2883
2969
  var _proto = KTX2Loader1.prototype;
2884
- _proto.initialize = function initialize(engine, configuration) {
2970
+ _proto.initialize = function initialize(_, configuration) {
2885
2971
  if (configuration.ktx2Loader) {
2886
2972
  var options = configuration.ktx2Loader;
2887
- if (this._isKhronosSupported(options.priorityFormats, engine) && options.workerCount !== 0) {
2973
+ if (options.priorityFormats) {
2974
+ exports.KTX2Loader._priorityFormats["etc1s"] = options.priorityFormats;
2975
+ exports.KTX2Loader._priorityFormats["uastc"] = options.priorityFormats;
2976
+ }
2977
+ if (options.transcoder === /** Khronos transcoder. */ 1) {
2888
2978
  return exports.KTX2Loader._getKhronosTranscoder(options.workerCount).init();
2889
2979
  } else {
2890
2980
  return exports.KTX2Loader._getBinomialLLCTranscoder(options.workerCount).init();
@@ -2903,27 +2993,6 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2903
2993
  });
2904
2994
  });
2905
2995
  };
2906
- _proto._isKhronosSupported = function _isKhronosSupported(priorityFormats, engine) {
2907
- if (priorityFormats === void 0) priorityFormats = [
2908
- exports.KTX2TargetFormat.ASTC,
2909
- exports.KTX2TargetFormat.ETC,
2910
- exports.KTX2TargetFormat.BC7,
2911
- exports.KTX2TargetFormat.BC1_BC3,
2912
- exports.KTX2TargetFormat.PVRTC,
2913
- exports.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(exports.KTX2Loader._detectSupportedFormat(engine._hardwareRenderer, priorityFormats[i]));
2919
- }
2920
- } else {
2921
- supportedList.push(exports.KTX2Loader._detectSupportedFormat(engine._hardwareRenderer, priorityFormats));
2922
- }
2923
- return supportedList.every(function(format) {
2924
- return KhronosTranscoder.transcoderMap[format];
2925
- });
2926
- };
2927
2996
  /**
2928
2997
  * Destroy ktx2 transcoder worker.
2929
2998
  */ KTX2Loader1.destroy = function destroy() {
@@ -2936,7 +3005,8 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2936
3005
  /** @internal */ KTX2Loader1._parseBuffer = function _parseBuffer(buffer, engine, params) {
2937
3006
  var _params;
2938
3007
  var ktx2Container = new KTX2Container(buffer);
2939
- var formatPriorities = (_params = params) == null ? void 0 : _params.priorityFormats;
3008
+ var _params_priorityFormats;
3009
+ var formatPriorities = (_params_priorityFormats = (_params = params) == null ? void 0 : _params.priorityFormats) != null ? _params_priorityFormats : exports.KTX2Loader._priorityFormats[ktx2Container.isUASTC ? "uastc" : "etc1s"];
2940
3010
  var targetFormat = exports.KTX2Loader._decideTargetFormat(engine, ktx2Container, formatPriorities);
2941
3011
  var transcodeResultPromise;
2942
3012
  if (exports.KTX2Loader._isBinomialInit || !KhronosTranscoder.transcoderMap[targetFormat] || !ktx2Container.isUASTC) {
@@ -3003,18 +3073,22 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
3003
3073
  return targetFormat;
3004
3074
  };
3005
3075
  KTX2Loader1._detectSupportedFormat = function _detectSupportedFormat(renderer, priorityFormats) {
3006
- if (priorityFormats === void 0) priorityFormats = [
3007
- exports.KTX2TargetFormat.ASTC,
3008
- exports.KTX2TargetFormat.ETC,
3009
- exports.KTX2TargetFormat.BC7,
3010
- exports.KTX2TargetFormat.BC1_BC3,
3011
- exports.KTX2TargetFormat.PVRTC
3012
- ];
3013
3076
  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];
3077
+ var format = priorityFormats[i];
3078
+ var capabilities = this._supportedMap[format];
3079
+ if (capabilities) {
3080
+ for(var j = 0; j < capabilities.length; j++){
3081
+ if (renderer.canIUse(capabilities[j])) {
3082
+ return format;
3083
+ }
3084
+ }
3085
+ } else {
3086
+ switch(priorityFormats[i]){
3087
+ case exports.KTX2TargetFormat.R8G8B8A8:
3088
+ return format;
3089
+ case exports.KTX2TargetFormat.R8:
3090
+ case exports.KTX2TargetFormat.R8G8:
3091
+ if (renderer.isWebGL2) return format;
3018
3092
  }
3019
3093
  }
3020
3094
  }
@@ -3051,6 +3125,23 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
3051
3125
  return KTX2Loader1;
3052
3126
  }(engineCore.Loader), function() {
3053
3127
  _KTX2Loader._isBinomialInit = false;
3128
+ }(), function() {
3129
+ _KTX2Loader._priorityFormats = {
3130
+ etc1s: [
3131
+ exports.KTX2TargetFormat.ETC,
3132
+ exports.KTX2TargetFormat.BC7,
3133
+ exports.KTX2TargetFormat.ASTC,
3134
+ exports.KTX2TargetFormat.BC1_BC3,
3135
+ exports.KTX2TargetFormat.PVRTC
3136
+ ],
3137
+ uastc: [
3138
+ exports.KTX2TargetFormat.ASTC,
3139
+ exports.KTX2TargetFormat.BC7,
3140
+ exports.KTX2TargetFormat.ETC,
3141
+ exports.KTX2TargetFormat.BC1_BC3,
3142
+ exports.KTX2TargetFormat.PVRTC
3143
+ ]
3144
+ };
3054
3145
  }(), function() {
3055
3146
  var _obj;
3056
3147
  _KTX2Loader._supportedMap = (_obj = {}, _obj[exports.KTX2TargetFormat.ASTC] = [
@@ -3071,6 +3162,11 @@ exports.KTX2Loader = __decorate([
3071
3162
  "ktx2"
3072
3163
  ])
3073
3164
  ], exports.KTX2Loader);
3165
+ exports.KTX2Transcoder = void 0;
3166
+ (function(KTX2Transcoder) {
3167
+ KTX2Transcoder[KTX2Transcoder[/** BinomialLLC transcoder. */ "BinomialLLC"] = 0] = "BinomialLLC";
3168
+ KTX2Transcoder[KTX2Transcoder["Khronos"] = 1] = "Khronos";
3169
+ })(exports.KTX2Transcoder || (exports.KTX2Transcoder = {}));
3074
3170
 
3075
3171
  /**
3076
3172
  * @internal
@@ -3419,23 +3515,20 @@ exports.GLTFSchemaParser = /*#__PURE__*/ function(GLTFParser1) {
3419
3515
  var requestConfig = {
3420
3516
  type: "arraybuffer"
3421
3517
  };
3422
- var isGLB = this._isGLB(url);
3423
- contentRestorer.isGLB = isGLB;
3424
- var promise = isGLB ? engineCore.request(url, requestConfig).then(function(glb) {
3518
+ return engineCore.request(url, requestConfig).then(function(buffer) {
3425
3519
  restoreBufferRequests.push(new BufferRequestInfo(url, requestConfig));
3426
- return GLTFUtils.parseGLB(context, glb);
3427
- }).then(function(param) {
3428
- var glTF = param.glTF, buffers = param.buffers;
3429
- context.buffers = buffers;
3430
- return glTF;
3431
- }) : engineCore.request(url, {
3432
- type: "json"
3520
+ return GLTFUtils.parseGLB(context, buffer);
3521
+ }).then(function(result) {
3522
+ var _result;
3523
+ if ((_result = result) == null ? void 0 : _result.glTF) {
3524
+ contentRestorer.isGLB = true;
3525
+ context.buffers = result.buffers;
3526
+ return result.glTF;
3527
+ } else {
3528
+ contentRestorer.isGLB = false;
3529
+ return JSON.parse(engineCore.Utils.decodeText(new Uint8Array(result.originBuffer)));
3530
+ }
3433
3531
  });
3434
- return promise;
3435
- };
3436
- _proto._isGLB = function _isGLB(url) {
3437
- var index = url.lastIndexOf(".");
3438
- return url.substring(index + 1, index + 4) === "glb";
3439
3532
  };
3440
3533
  return GLTFSchemaParser;
3441
3534
  }(GLTFParser);
@@ -3514,6 +3607,7 @@ exports.GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3514
3607
  var promises = new Array();
3515
3608
  // parse samplers
3516
3609
  for(var j = 0, m = samplers.length; j < m; j++)_loop(j);
3610
+ promises.push(context.get(exports.GLTFParserType.Scene));
3517
3611
  return Promise.all(promises).then(function() {
3518
3612
  for(var j = 0, m = channels.length; j < m; j++){
3519
3613
  var gltfChannel = channels[j];
@@ -3525,6 +3619,10 @@ exports.GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3525
3619
  relativePath = relativePath === "" ? "" + entity.name : entity.name + "/" + relativePath;
3526
3620
  entity = entity.parent;
3527
3621
  }
3622
+ // If the target node is in the default scene, relativePath will be empty
3623
+ if (context.glTFResource.sceneRoots.indexOf(entity) === -1) {
3624
+ continue;
3625
+ }
3528
3626
  var ComponentType = void 0;
3529
3627
  var propertyName = void 0;
3530
3628
  switch(target.path){
@@ -3861,7 +3959,7 @@ exports.GLTFMeshParser = (_GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1)
3861
3959
  return context.get(exports.GLTFParserType.Buffer).then(function(buffers) {
3862
3960
  return GLTFUtils.getAccessorData(glTF, indexAccessor, buffers);
3863
3961
  });
3864
- }, context.keepMeshData).then(resolve);
3962
+ }, context.params.keepMeshData).then(resolve);
3865
3963
  }
3866
3964
  });
3867
3965
  };
@@ -4039,9 +4137,9 @@ exports.GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4039
4137
  }
4040
4138
  var _proto = GLTFSceneParser.prototype;
4041
4139
  _proto.parse = function parse(context, index) {
4042
- var _this = this;
4043
4140
  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
4141
  var sceneInfo = scenes[index];
4142
+ var sceneExtensions = sceneInfo.extensions;
4045
4143
  var engine = glTFResource.engine;
4046
4144
  var isDefaultScene = scene === index;
4047
4145
  var sceneNodes = sceneInfo.nodes;
@@ -4067,18 +4165,7 @@ exports.GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4067
4165
  promises.push(this._parseEntityComponent(context, sceneNodes[i1]));
4068
4166
  }
4069
4167
  return Promise.all(promises).then(function() {
4070
- if (isDefaultScene) {
4071
- return Promise.all([
4072
- context.get(exports.GLTFParserType.Skin),
4073
- context.get(exports.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
- }
4168
+ GLTFParser.executeExtensionsAdditiveAndParse(sceneExtensions, context, sceneRoot, sceneInfo);
4082
4169
  return sceneRoot;
4083
4170
  });
4084
4171
  };
@@ -4190,28 +4277,6 @@ exports.GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4190
4277
  for(var i = 0; i < glTFMeshPrimitives.length; i++)_loop(i);
4191
4278
  return Promise.all(promises);
4192
4279
  };
4193
- _proto._createAnimator = function _createAnimator(context, animations) {
4194
- var defaultSceneRoot = context.glTFResource.defaultSceneRoot;
4195
- var animator = defaultSceneRoot.addComponent(engineCore.Animator);
4196
- var animatorController = new engineCore.AnimatorController();
4197
- var layer = new engineCore.AnimatorControllerLayer("layer");
4198
- var animatorStateMachine = new engineCore.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
4280
  _proto._computeLocalBounds = function _computeLocalBounds(skinnedMeshRenderer, mesh, bones, rootBone, inverseBindMatrices) {
4216
4281
  var rootBoneIndex = bones.indexOf(rootBone);
4217
4282
  if (rootBoneIndex !== -1) {
@@ -4443,11 +4508,12 @@ var GLTFLoader = /*#__PURE__*/ function(Loader1) {
4443
4508
  }
4444
4509
  var _proto = GLTFLoader.prototype;
4445
4510
  _proto.load = function load(item, resourceManager) {
4446
- var _params;
4447
4511
  var url = item.url;
4448
4512
  var params = item.params;
4449
4513
  var glTFResource = new GLTFResource(resourceManager.engine, url);
4450
- var context = new GLTFParserContext(glTFResource, resourceManager, !!((_params = params) == null ? void 0 : _params.keepMeshData));
4514
+ var context = new GLTFParserContext(glTFResource, resourceManager, _extends({
4515
+ keepMeshData: false
4516
+ }, params));
4451
4517
  return context.parse();
4452
4518
  };
4453
4519
  return GLTFLoader;
@@ -5095,6 +5161,12 @@ var MaterialLoader = /*#__PURE__*/ function(Loader1) {
5095
5161
  materialShaderData.setTexture(key, texture);
5096
5162
  }));
5097
5163
  break;
5164
+ case "Boolean":
5165
+ materialShaderData.setInt(key, value ? 1 : 0);
5166
+ break;
5167
+ case "Integer":
5168
+ materialShaderData.setInt(key, Number(value));
5169
+ break;
5098
5170
  }
5099
5171
  };
5100
5172
  var engine = resourceManager.engine;
@@ -5230,9 +5302,10 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader1) {
5230
5302
  var _loop = function(i) {
5231
5303
  var atlasItem = atlasItems[i];
5232
5304
  if (atlasItem.img) {
5305
+ var _atlasItem_type;
5233
5306
  chainPromises.push(resourceManager.load({
5234
5307
  url: engineCore.Utils.resolveAbsoluteUrl(item.url, atlasItem.img),
5235
- type: engineCore.AssetType.Texture2D,
5308
+ type: (_atlasItem_type = atlasItem.type) != null ? _atlasItem_type : engineCore.AssetType.Texture2D,
5236
5309
  params: {
5237
5310
  format: format,
5238
5311
  mipmap: mipmap
@@ -5272,7 +5345,7 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader1) {
5272
5345
  };
5273
5346
  _proto._makeSprite = function _makeSprite(engine, config, texture) {
5274
5347
  // Generate a SpriteAtlas object.
5275
- var region = config.region, atlasRegionOffset = config.atlasRegionOffset, atlasRegion = config.atlasRegion, pivot = config.pivot, border = config.border;
5348
+ var region = config.region, atlasRegionOffset = config.atlasRegionOffset, atlasRegion = config.atlasRegion, pivot = config.pivot, border = config.border, width = config.width, height = config.height;
5276
5349
  var sprite = new engineCore.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
5350
  if (texture) {
5278
5351
  var invW = 1 / texture.width;
@@ -5284,6 +5357,8 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader1) {
5284
5357
  }
5285
5358
  config.atlasRotated && (sprite.atlasRotated = true);
5286
5359
  }
5360
+ isNaN(width) || (sprite.width = width);
5361
+ isNaN(height) || (sprite.height = height);
5287
5362
  return sprite;
5288
5363
  };
5289
5364
  return SpriteAtlasLoader;
@@ -5302,26 +5377,39 @@ var SpriteLoader = /*#__PURE__*/ function(Loader1) {
5302
5377
  var _proto = SpriteLoader.prototype;
5303
5378
  _proto.load = function load(item, resourceManager) {
5304
5379
  var _this = this;
5305
- return new engineCore.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 engineCore.Sprite(resourceManager.engine, texture, data.region, data.pivot, data.border));
5318
- }).catch(reject);
5319
- } else {
5320
- resolve(new engineCore.Sprite(resourceManager.engine, null, data.region, data.pivot, data.border));
5321
- }
5322
- }).catch(reject);
5380
+ return this.request(item.url, _extends({}, item, {
5381
+ type: "json"
5382
+ })).then(function(data) {
5383
+ return data.belongToAtlas ? _this._loadFromAtlas(resourceManager, data) : _this._loadFromTexture(resourceManager, data);
5384
+ });
5385
+ };
5386
+ _proto._loadFromAtlas = function _loadFromAtlas(resourceManager, data) {
5387
+ var _this = this;
5388
+ return resourceManager// @ts-ignore
5389
+ .getResourceByRef(data.belongToAtlas).then(function(atlas) {
5390
+ return atlas.getSprite(data.fullPath) || _this._loadFromTexture(resourceManager, data);
5323
5391
  });
5324
5392
  };
5393
+ _proto._loadFromTexture = function _loadFromTexture(resourceManager, data) {
5394
+ if (data.texture) {
5395
+ return resourceManager// @ts-ignore
5396
+ .getResourceByRef(data.texture).then(function(texture) {
5397
+ var sprite = new engineCore.Sprite(resourceManager.engine, texture, data.region, data.pivot, data.border);
5398
+ var width = data.width, height = data.height;
5399
+ isNaN(width) || (sprite.width = width);
5400
+ isNaN(height) || (sprite.height = height);
5401
+ return sprite;
5402
+ });
5403
+ } else {
5404
+ return new engineCore.AssetPromise(function(resolve) {
5405
+ var sprite = new engineCore.Sprite(resourceManager.engine, null, data.region, data.pivot, data.border);
5406
+ var width = data.width, height = data.height;
5407
+ isNaN(width) || (sprite.width = width);
5408
+ isNaN(height) || (sprite.height = height);
5409
+ resolve(sprite);
5410
+ });
5411
+ }
5412
+ };
5325
5413
  return SpriteLoader;
5326
5414
  }(engineCore.Loader);
5327
5415
  SpriteLoader = __decorate([
@@ -5368,9 +5456,13 @@ var Texture2DLoader = /*#__PURE__*/ function(Loader1) {
5368
5456
  type: "image"
5369
5457
  });
5370
5458
  _this.request(url, requestConfig).then(function(image) {
5371
- var _params, _params1;
5372
- var params = item.params;
5373
- var texture = new engineCore.Texture2D(resourceManager.engine, image.width, image.height, (_params = params) == null ? void 0 : _params.format, (_params1 = params) == null ? void 0 : _params1.mipmap);
5459
+ var _item_params;
5460
+ 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;
5461
+ var texture = new engineCore.Texture2D(resourceManager.engine, image.width, image.height, format, mipmap);
5462
+ texture.anisoLevel = anisoLevel != null ? anisoLevel : texture.anisoLevel;
5463
+ texture.filterMode = filterMode != null ? filterMode : texture.filterMode;
5464
+ texture.wrapModeU = wrapModeU != null ? wrapModeU : texture.wrapModeU;
5465
+ texture.wrapModeV = wrapModeV != null ? wrapModeV : texture.wrapModeV;
5374
5466
  texture.setImageSource(image);
5375
5467
  texture.generateMipmaps();
5376
5468
  if (url.indexOf("data:") !== 0) {
@@ -5498,7 +5590,7 @@ var ProjectLoader = /*#__PURE__*/ function(Loader1) {
5498
5590
  ProjectLoader = __decorate([
5499
5591
  engineCore.resourceLoader(engineCore.AssetType.Project, [
5500
5592
  "proj"
5501
- ], true)
5593
+ ], false)
5502
5594
  ], ProjectLoader);
5503
5595
 
5504
5596
  var SceneLoader = /*#__PURE__*/ function(Loader1) {
@@ -5518,33 +5610,34 @@ var SceneLoader = /*#__PURE__*/ function(Loader1) {
5518
5610
  var promises = [];
5519
5611
  // parse ambient light
5520
5612
  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 {
5613
+ if (ambient) {
5614
+ var useCustomAmbient = ambient.specularMode === "Custom";
5615
+ var useSH = ambient.diffuseMode === engineCore.DiffuseMode.SphericalHarmonics;
5545
5616
  scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5546
5617
  scene.ambientLight.specularIntensity = ambient.specularIntensity;
5618
+ scene.ambientLight.diffuseMode = ambient.diffuseMode;
5547
5619
  scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5620
+ scene.ambientLight.specularTextureDecodeRGBM = true;
5621
+ if (useCustomAmbient && ambient.customAmbientLight) {
5622
+ promises.push(// @ts-ignore
5623
+ resourceManager.getResourceByRef(ambient.customAmbientLight).then(function(ambientLight) {
5624
+ var _ambientLight;
5625
+ scene.ambientLight.specularTexture = (_ambientLight = ambientLight) == null ? void 0 : _ambientLight.specularTexture;
5626
+ }));
5627
+ }
5628
+ if (ambient.ambientLight && (!useCustomAmbient || useSH)) {
5629
+ promises.push(// @ts-ignore
5630
+ resourceManager.getResourceByRef(ambient.ambientLight).then(function(ambientLight) {
5631
+ if (!useCustomAmbient) {
5632
+ var _ambientLight;
5633
+ scene.ambientLight.specularTexture = (_ambientLight = ambientLight) == null ? void 0 : _ambientLight.specularTexture;
5634
+ }
5635
+ if (useSH) {
5636
+ var _ambientLight1;
5637
+ scene.ambientLight.diffuseSphericalHarmonics = (_ambientLight1 = ambientLight) == null ? void 0 : _ambientLight1.diffuseSphericalHarmonics;
5638
+ }
5639
+ }));
5640
+ }
5548
5641
  }
5549
5642
  var background = data.scene.background;
5550
5643
  scene.background.mode = background.mode;
@@ -5586,6 +5679,9 @@ var SceneLoader = /*#__PURE__*/ function(Loader1) {
5586
5679
  if (shadow.shadowResolution != undefined) scene.shadowResolution = shadow.shadowResolution;
5587
5680
  if (shadow.shadowDistance != undefined) scene.shadowDistance = shadow.shadowDistance;
5588
5681
  if (shadow.shadowCascades != undefined) scene.shadowCascades = shadow.shadowCascades;
5682
+ var _shadow_shadowTwoCascadeSplits;
5683
+ scene.shadowTwoCascadeSplits = (_shadow_shadowTwoCascadeSplits = shadow.shadowTwoCascadeSplits) != null ? _shadow_shadowTwoCascadeSplits : scene.shadowTwoCascadeSplits;
5684
+ shadow.shadowFourCascadeSplits && scene.shadowFourCascadeSplits.copyFrom(shadow.shadowFourCascadeSplits);
5589
5685
  }
5590
5686
  return Promise.all(promises).then(function() {
5591
5687
  resolve(scene);
@@ -5601,13 +5697,13 @@ SceneLoader = __decorate([
5601
5697
  "scene"
5602
5698
  ], true)
5603
5699
  ], SceneLoader);
5604
- ReflectionParser.registerCustomParseComponent("TextRenderer", /*#__PURE__*/ _async_to_generator(function(instance, item, engine) {
5700
+ ReflectionParser.registerCustomParseComponent("TextRenderer", /*#__PURE__*/ _async_to_generator(function(instance, item) {
5605
5701
  var props;
5606
5702
  return __generator(this, function(_state) {
5607
5703
  props = item.props;
5608
5704
  if (!props.font) {
5609
5705
  // @ts-ignore
5610
- instance.font = engineCore.Font.createFromOS(engine, props.fontFamily || "Arial");
5706
+ instance.font = engineCore.Font.createFromOS(instance.engine, props.fontFamily || "Arial");
5611
5707
  }
5612
5708
  return [
5613
5709
  2,
@@ -5663,7 +5759,7 @@ var KHR_draco_mesh_compression = (_KHR_draco_mesh_compression = /*#__PURE__*/ fu
5663
5759
  throw "BlendShape animation is not supported when using draco.";
5664
5760
  }, function() {
5665
5761
  return decodedGeometry.index.array;
5666
- }, context.keepMeshData);
5762
+ }, context.params.keepMeshData);
5667
5763
  });
5668
5764
  });
5669
5765
  };