@galacean/engine-loader 1.1.0-beta.9 → 1.1.2

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 (28) hide show
  1. package/dist/main.js +314 -222
  2. package/dist/main.js.map +1 -1
  3. package/dist/miniprogram.js +314 -222
  4. package/dist/module.js +315 -223
  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/resource-deserialize/resources/parser/HierarchyParser.d.ts +36 -0
  21. package/types/resource-deserialize/resources/parser/ParserContext.d.ts +29 -0
  22. package/types/resource-deserialize/resources/parser/ReflectionParser.d.ts +1 -1
  23. package/types/resource-deserialize/resources/prefab/PrefabParser.d.ts +13 -4
  24. package/types/resource-deserialize/resources/prefab/PrefabParserContext.d.ts +5 -0
  25. package/types/resource-deserialize/resources/schema/BasicSchema.d.ts +2 -0
  26. package/types/resource-deserialize/resources/schema/MaterialSchema.d.ts +1 -1
  27. package/types/resource-deserialize/resources/schema/SceneSchema.d.ts +3 -1
  28. 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){
@@ -2565,6 +2639,7 @@ function transcode(buffer, targetFormat, KTX2File) {
2565
2639
  var faceCount = ktx2File.getFaces();
2566
2640
  var format = getTranscodeFormatFromTarget(targetFormat, hasAlpha);
2567
2641
  var faces = new Array(faceCount);
2642
+ var isBC = format === 2 || format === 3 || format === 7;
2568
2643
  for(var face = 0; face < faceCount; face++){
2569
2644
  var mipmaps = new Array(levelCount);
2570
2645
  for(var mip = 0; mip < levelCount; mip++){
@@ -2572,8 +2647,15 @@ function transcode(buffer, targetFormat, KTX2File) {
2572
2647
  var mipWidth = void 0, mipHeight = void 0;
2573
2648
  for(var layer = 0; layer < layerCount; layer++){
2574
2649
  var levelInfo = ktx2File.getImageLevelInfo(mip, layer, face);
2575
- mipWidth = levelInfo.origWidth;
2576
- 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
+ }
2577
2659
  var dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, format));
2578
2660
  var status = ktx2File.transcodeImage(dst, mip, layer, face, format, 0, -1, -1);
2579
2661
  if (!status) {
@@ -2639,7 +2721,7 @@ function transcode(buffer, targetFormat, KTX2File) {
2639
2721
  } else {
2640
2722
  var funcCode = TranscodeWorkerCode$1.toString();
2641
2723
  var transcodeString = funcCode.substring(funcCode.indexOf("{"), funcCode.lastIndexOf("}") + 1);
2642
- 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 ";
2643
2725
  var workerURL = URL.createObjectURL(new Blob([
2644
2726
  workerCode
2645
2727
  ], {
@@ -2885,10 +2967,14 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2885
2967
  return Loader1.apply(this, arguments);
2886
2968
  }
2887
2969
  var _proto = KTX2Loader1.prototype;
2888
- _proto.initialize = function initialize(engine, configuration) {
2970
+ _proto.initialize = function initialize(_, configuration) {
2889
2971
  if (configuration.ktx2Loader) {
2890
2972
  var options = configuration.ktx2Loader;
2891
- 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) {
2892
2978
  return exports.KTX2Loader._getKhronosTranscoder(options.workerCount).init();
2893
2979
  } else {
2894
2980
  return exports.KTX2Loader._getBinomialLLCTranscoder(options.workerCount).init();
@@ -2907,27 +2993,6 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2907
2993
  });
2908
2994
  });
2909
2995
  };
2910
- _proto._isKhronosSupported = function _isKhronosSupported(priorityFormats, engine) {
2911
- if (priorityFormats === void 0) priorityFormats = [
2912
- exports.KTX2TargetFormat.ASTC,
2913
- exports.KTX2TargetFormat.ETC,
2914
- exports.KTX2TargetFormat.BC7,
2915
- exports.KTX2TargetFormat.BC1_BC3,
2916
- exports.KTX2TargetFormat.PVRTC,
2917
- exports.KTX2TargetFormat.R8G8B8A8
2918
- ];
2919
- var supportedList = new Array();
2920
- if (Array.isArray(priorityFormats[0])) {
2921
- for(var i = 0; i < priorityFormats.length; i++){
2922
- supportedList.push(exports.KTX2Loader._detectSupportedFormat(engine._hardwareRenderer, priorityFormats[i]));
2923
- }
2924
- } else {
2925
- supportedList.push(exports.KTX2Loader._detectSupportedFormat(engine._hardwareRenderer, priorityFormats));
2926
- }
2927
- return supportedList.every(function(format) {
2928
- return KhronosTranscoder.transcoderMap[format];
2929
- });
2930
- };
2931
2996
  /**
2932
2997
  * Destroy ktx2 transcoder worker.
2933
2998
  */ KTX2Loader1.destroy = function destroy() {
@@ -2940,7 +3005,8 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2940
3005
  /** @internal */ KTX2Loader1._parseBuffer = function _parseBuffer(buffer, engine, params) {
2941
3006
  var _params;
2942
3007
  var ktx2Container = new KTX2Container(buffer);
2943
- 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"];
2944
3010
  var targetFormat = exports.KTX2Loader._decideTargetFormat(engine, ktx2Container, formatPriorities);
2945
3011
  var transcodeResultPromise;
2946
3012
  if (exports.KTX2Loader._isBinomialInit || !KhronosTranscoder.transcoderMap[targetFormat] || !ktx2Container.isUASTC) {
@@ -3007,18 +3073,22 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
3007
3073
  return targetFormat;
3008
3074
  };
3009
3075
  KTX2Loader1._detectSupportedFormat = function _detectSupportedFormat(renderer, priorityFormats) {
3010
- if (priorityFormats === void 0) priorityFormats = [
3011
- exports.KTX2TargetFormat.ASTC,
3012
- exports.KTX2TargetFormat.ETC,
3013
- exports.KTX2TargetFormat.BC7,
3014
- exports.KTX2TargetFormat.BC1_BC3,
3015
- exports.KTX2TargetFormat.PVRTC
3016
- ];
3017
3076
  for(var i = 0; i < priorityFormats.length; i++){
3018
- var capabilities = this._supportedMap[priorityFormats[i]];
3019
- for(var j = 0; j < capabilities.length; j++){
3020
- if (renderer.canIUse(capabilities[j])) {
3021
- 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;
3022
3092
  }
3023
3093
  }
3024
3094
  }
@@ -3055,6 +3125,23 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
3055
3125
  return KTX2Loader1;
3056
3126
  }(engineCore.Loader), function() {
3057
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
+ };
3058
3145
  }(), function() {
3059
3146
  var _obj;
3060
3147
  _KTX2Loader._supportedMap = (_obj = {}, _obj[exports.KTX2TargetFormat.ASTC] = [
@@ -3075,6 +3162,11 @@ exports.KTX2Loader = __decorate([
3075
3162
  "ktx2"
3076
3163
  ])
3077
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 = {}));
3078
3170
 
3079
3171
  /**
3080
3172
  * @internal
@@ -3423,23 +3515,20 @@ exports.GLTFSchemaParser = /*#__PURE__*/ function(GLTFParser1) {
3423
3515
  var requestConfig = {
3424
3516
  type: "arraybuffer"
3425
3517
  };
3426
- var isGLB = this._isGLB(url);
3427
- contentRestorer.isGLB = isGLB;
3428
- var promise = isGLB ? engineCore.request(url, requestConfig).then(function(glb) {
3518
+ return engineCore.request(url, requestConfig).then(function(buffer) {
3429
3519
  restoreBufferRequests.push(new BufferRequestInfo(url, requestConfig));
3430
- return GLTFUtils.parseGLB(context, glb);
3431
- }).then(function(param) {
3432
- var glTF = param.glTF, buffers = param.buffers;
3433
- context.buffers = buffers;
3434
- return glTF;
3435
- }) : engineCore.request(url, {
3436
- 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
+ }
3437
3531
  });
3438
- return promise;
3439
- };
3440
- _proto._isGLB = function _isGLB(url) {
3441
- var index = url.lastIndexOf(".");
3442
- return url.substring(index + 1, index + 4) === "glb";
3443
3532
  };
3444
3533
  return GLTFSchemaParser;
3445
3534
  }(GLTFParser);
@@ -3518,6 +3607,7 @@ exports.GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3518
3607
  var promises = new Array();
3519
3608
  // parse samplers
3520
3609
  for(var j = 0, m = samplers.length; j < m; j++)_loop(j);
3610
+ promises.push(context.get(exports.GLTFParserType.Scene));
3521
3611
  return Promise.all(promises).then(function() {
3522
3612
  for(var j = 0, m = channels.length; j < m; j++){
3523
3613
  var gltfChannel = channels[j];
@@ -3529,6 +3619,10 @@ exports.GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3529
3619
  relativePath = relativePath === "" ? "" + entity.name : entity.name + "/" + relativePath;
3530
3620
  entity = entity.parent;
3531
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
+ }
3532
3626
  var ComponentType = void 0;
3533
3627
  var propertyName = void 0;
3534
3628
  switch(target.path){
@@ -3865,7 +3959,7 @@ exports.GLTFMeshParser = (_GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1)
3865
3959
  return context.get(exports.GLTFParserType.Buffer).then(function(buffers) {
3866
3960
  return GLTFUtils.getAccessorData(glTF, indexAccessor, buffers);
3867
3961
  });
3868
- }, context.keepMeshData).then(resolve);
3962
+ }, context.params.keepMeshData).then(resolve);
3869
3963
  }
3870
3964
  });
3871
3965
  };
@@ -4043,9 +4137,9 @@ exports.GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4043
4137
  }
4044
4138
  var _proto = GLTFSceneParser.prototype;
4045
4139
  _proto.parse = function parse(context, index) {
4046
- var _this = this;
4047
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;
4048
4141
  var sceneInfo = scenes[index];
4142
+ var sceneExtensions = sceneInfo.extensions;
4049
4143
  var engine = glTFResource.engine;
4050
4144
  var isDefaultScene = scene === index;
4051
4145
  var sceneNodes = sceneInfo.nodes;
@@ -4071,18 +4165,7 @@ exports.GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4071
4165
  promises.push(this._parseEntityComponent(context, sceneNodes[i1]));
4072
4166
  }
4073
4167
  return Promise.all(promises).then(function() {
4074
- if (isDefaultScene) {
4075
- return Promise.all([
4076
- context.get(exports.GLTFParserType.Skin),
4077
- context.get(exports.GLTFParserType.Animation)
4078
- ]).then(function(param) {
4079
- var skins = param[0], animations = param[1];
4080
- if (skins || animations) {
4081
- _this._createAnimator(context, animations);
4082
- }
4083
- return sceneRoot;
4084
- });
4085
- }
4168
+ GLTFParser.executeExtensionsAdditiveAndParse(sceneExtensions, context, sceneRoot, sceneInfo);
4086
4169
  return sceneRoot;
4087
4170
  });
4088
4171
  };
@@ -4194,28 +4277,6 @@ exports.GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4194
4277
  for(var i = 0; i < glTFMeshPrimitives.length; i++)_loop(i);
4195
4278
  return Promise.all(promises);
4196
4279
  };
4197
- _proto._createAnimator = function _createAnimator(context, animations) {
4198
- var defaultSceneRoot = context.glTFResource.defaultSceneRoot;
4199
- var animator = defaultSceneRoot.addComponent(engineCore.Animator);
4200
- var animatorController = new engineCore.AnimatorController();
4201
- var layer = new engineCore.AnimatorControllerLayer("layer");
4202
- var animatorStateMachine = new engineCore.AnimatorStateMachine();
4203
- animatorController.addLayer(layer);
4204
- animator.animatorController = animatorController;
4205
- layer.stateMachine = animatorStateMachine;
4206
- if (animations) {
4207
- for(var i = 0; i < animations.length; i++){
4208
- var animationClip = animations[i];
4209
- var name = animationClip.name;
4210
- var uniqueName = animatorStateMachine.makeUniqueStateName(name);
4211
- if (uniqueName !== name) {
4212
- console.warn("AnimatorState name is existed, name: " + name + " reset to " + uniqueName);
4213
- }
4214
- var animatorState = animatorStateMachine.addState(uniqueName);
4215
- animatorState.clip = animationClip;
4216
- }
4217
- }
4218
- };
4219
4280
  _proto._computeLocalBounds = function _computeLocalBounds(skinnedMeshRenderer, mesh, bones, rootBone, inverseBindMatrices) {
4220
4281
  var rootBoneIndex = bones.indexOf(rootBone);
4221
4282
  if (rootBoneIndex !== -1) {
@@ -4447,11 +4508,12 @@ var GLTFLoader = /*#__PURE__*/ function(Loader1) {
4447
4508
  }
4448
4509
  var _proto = GLTFLoader.prototype;
4449
4510
  _proto.load = function load(item, resourceManager) {
4450
- var _params;
4451
4511
  var url = item.url;
4452
4512
  var params = item.params;
4453
4513
  var glTFResource = new GLTFResource(resourceManager.engine, url);
4454
- 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));
4455
4517
  return context.parse();
4456
4518
  };
4457
4519
  return GLTFLoader;
@@ -5099,6 +5161,12 @@ var MaterialLoader = /*#__PURE__*/ function(Loader1) {
5099
5161
  materialShaderData.setTexture(key, texture);
5100
5162
  }));
5101
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;
5102
5170
  }
5103
5171
  };
5104
5172
  var engine = resourceManager.engine;
@@ -5234,9 +5302,10 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader1) {
5234
5302
  var _loop = function(i) {
5235
5303
  var atlasItem = atlasItems[i];
5236
5304
  if (atlasItem.img) {
5305
+ var _atlasItem_type;
5237
5306
  chainPromises.push(resourceManager.load({
5238
5307
  url: engineCore.Utils.resolveAbsoluteUrl(item.url, atlasItem.img),
5239
- type: engineCore.AssetType.Texture2D,
5308
+ type: (_atlasItem_type = atlasItem.type) != null ? _atlasItem_type : engineCore.AssetType.Texture2D,
5240
5309
  params: {
5241
5310
  format: format,
5242
5311
  mipmap: mipmap
@@ -5276,7 +5345,7 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader1) {
5276
5345
  };
5277
5346
  _proto._makeSprite = function _makeSprite(engine, config, texture) {
5278
5347
  // Generate a SpriteAtlas object.
5279
- 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;
5280
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);
5281
5350
  if (texture) {
5282
5351
  var invW = 1 / texture.width;
@@ -5288,6 +5357,8 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader1) {
5288
5357
  }
5289
5358
  config.atlasRotated && (sprite.atlasRotated = true);
5290
5359
  }
5360
+ isNaN(width) || (sprite.width = width);
5361
+ isNaN(height) || (sprite.height = height);
5291
5362
  return sprite;
5292
5363
  };
5293
5364
  return SpriteAtlasLoader;
@@ -5306,26 +5377,39 @@ var SpriteLoader = /*#__PURE__*/ function(Loader1) {
5306
5377
  var _proto = SpriteLoader.prototype;
5307
5378
  _proto.load = function load(item, resourceManager) {
5308
5379
  var _this = this;
5309
- return new engineCore.AssetPromise(function(resolve, reject) {
5310
- _this.request(item.url, _extends({}, item, {
5311
- type: "json"
5312
- })).then(function(data) {
5313
- if (data.belongToAtlas) {
5314
- resourceManager// @ts-ignore
5315
- .getResourceByRef(data.belongToAtlas).then(function(atlas) {
5316
- resolve(atlas.getSprite(data.fullPath));
5317
- }).catch(reject);
5318
- } else if (data.texture) {
5319
- resourceManager// @ts-ignore
5320
- .getResourceByRef(data.texture).then(function(texture) {
5321
- resolve(new engineCore.Sprite(resourceManager.engine, texture, data.region, data.pivot, data.border));
5322
- }).catch(reject);
5323
- } else {
5324
- resolve(new engineCore.Sprite(resourceManager.engine, null, data.region, data.pivot, data.border));
5325
- }
5326
- }).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);
5327
5391
  });
5328
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
+ };
5329
5413
  return SpriteLoader;
5330
5414
  }(engineCore.Loader);
5331
5415
  SpriteLoader = __decorate([
@@ -5372,9 +5456,13 @@ var Texture2DLoader = /*#__PURE__*/ function(Loader1) {
5372
5456
  type: "image"
5373
5457
  });
5374
5458
  _this.request(url, requestConfig).then(function(image) {
5375
- var _params, _params1;
5376
- var params = item.params;
5377
- 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;
5378
5466
  texture.setImageSource(image);
5379
5467
  texture.generateMipmaps();
5380
5468
  if (url.indexOf("data:") !== 0) {
@@ -5522,33 +5610,34 @@ var SceneLoader = /*#__PURE__*/ function(Loader1) {
5522
5610
  var promises = [];
5523
5611
  // parse ambient light
5524
5612
  var ambient = data.scene.ambient;
5525
- var useCustomAmbient = ambient.specularMode === "Custom";
5526
- if (useCustomAmbient && ambient.customAmbientLight) {
5527
- // @ts-ignore
5528
- // prettier-ignore
5529
- var customAmbientPromise = resourceManager.getResourceByRef(ambient.customAmbientLight).then(function(ambientLight) {
5530
- scene.ambientLight = ambientLight;
5531
- scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5532
- scene.ambientLight.specularIntensity = ambient.specularIntensity;
5533
- scene.ambientLight.diffuseMode = ambient.diffuseMode;
5534
- scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5535
- });
5536
- promises.push(customAmbientPromise);
5537
- } else if (!useCustomAmbient && ambient.ambientLight) {
5538
- // @ts-ignore
5539
- // prettier-ignore
5540
- var ambientLightPromise = resourceManager.getResourceByRef(ambient.ambientLight).then(function(ambientLight) {
5541
- scene.ambientLight = ambientLight;
5542
- scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5543
- scene.ambientLight.specularIntensity = ambient.specularIntensity;
5544
- scene.ambientLight.diffuseMode = ambient.diffuseMode;
5545
- scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5546
- });
5547
- promises.push(ambientLightPromise);
5548
- } else {
5613
+ if (ambient) {
5614
+ var useCustomAmbient = ambient.specularMode === "Custom";
5615
+ var useSH = ambient.diffuseMode === engineCore.DiffuseMode.SphericalHarmonics;
5549
5616
  scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5550
5617
  scene.ambientLight.specularIntensity = ambient.specularIntensity;
5618
+ scene.ambientLight.diffuseMode = ambient.diffuseMode;
5551
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
+ }
5552
5641
  }
5553
5642
  var background = data.scene.background;
5554
5643
  scene.background.mode = background.mode;
@@ -5590,6 +5679,9 @@ var SceneLoader = /*#__PURE__*/ function(Loader1) {
5590
5679
  if (shadow.shadowResolution != undefined) scene.shadowResolution = shadow.shadowResolution;
5591
5680
  if (shadow.shadowDistance != undefined) scene.shadowDistance = shadow.shadowDistance;
5592
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);
5593
5685
  }
5594
5686
  return Promise.all(promises).then(function() {
5595
5687
  resolve(scene);
@@ -5605,13 +5697,13 @@ SceneLoader = __decorate([
5605
5697
  "scene"
5606
5698
  ], true)
5607
5699
  ], SceneLoader);
5608
- ReflectionParser.registerCustomParseComponent("TextRenderer", /*#__PURE__*/ _async_to_generator(function(instance, item, engine) {
5700
+ ReflectionParser.registerCustomParseComponent("TextRenderer", /*#__PURE__*/ _async_to_generator(function(instance, item) {
5609
5701
  var props;
5610
5702
  return __generator(this, function(_state) {
5611
5703
  props = item.props;
5612
5704
  if (!props.font) {
5613
5705
  // @ts-ignore
5614
- instance.font = engineCore.Font.createFromOS(engine, props.fontFamily || "Arial");
5706
+ instance.font = engineCore.Font.createFromOS(instance.engine, props.fontFamily || "Arial");
5615
5707
  }
5616
5708
  return [
5617
5709
  2,
@@ -5667,7 +5759,7 @@ var KHR_draco_mesh_compression = (_KHR_draco_mesh_compression = /*#__PURE__*/ fu
5667
5759
  throw "BlendShape animation is not supported when using draco.";
5668
5760
  }, function() {
5669
5761
  return decodedGeometry.index.array;
5670
- }, context.keepMeshData);
5762
+ }, context.params.keepMeshData);
5671
5763
  });
5672
5764
  });
5673
5765
  };