@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
@@ -121,116 +121,116 @@ var BufferReader = /*#__PURE__*/ function() {
121
121
  this.data = data;
122
122
  this._dataView = new DataView(data.buffer, data.byteOffset + byteOffset, byteLength != null ? byteLength : data.byteLength - byteOffset);
123
123
  this._littleEndian = littleEndian;
124
- this._offset = 0;
124
+ this._position = 0;
125
125
  this._baseOffset = byteOffset;
126
126
  }
127
127
  var _proto = BufferReader.prototype;
128
128
  _proto.nextUint8 = function nextUint8() {
129
- var value = this._dataView.getUint8(this._offset);
130
- this._offset += 1;
129
+ var value = this._dataView.getUint8(this._position);
130
+ this._position += 1;
131
131
  return value;
132
132
  };
133
133
  _proto.nextUint16 = function nextUint16() {
134
- var value = this._dataView.getUint16(this._offset, this._littleEndian);
135
- this._offset += 2;
134
+ var value = this._dataView.getUint16(this._position, this._littleEndian);
135
+ this._position += 2;
136
136
  return value;
137
137
  };
138
138
  _proto.nextUint32 = function nextUint32() {
139
- var value = this._dataView.getUint32(this._offset, this._littleEndian);
140
- this._offset += 4;
139
+ var value = this._dataView.getUint32(this._position, this._littleEndian);
140
+ this._position += 4;
141
141
  return value;
142
142
  };
143
143
  _proto.nextInt32 = function nextInt32() {
144
- var value = this._dataView.getInt32(this._offset, this._littleEndian);
145
- this._offset += 4;
144
+ var value = this._dataView.getInt32(this._position, this._littleEndian);
145
+ this._position += 4;
146
146
  return value;
147
147
  };
148
148
  _proto.nextInt32Array = function nextInt32Array(len) {
149
- var value = new Int32Array(this.data.buffer, this._offset + this._dataView.byteOffset, len);
150
- this._offset += 4 * len;
149
+ var value = new Int32Array(this.data.buffer, this._position + this._dataView.byteOffset, len);
150
+ this._position += 4 * len;
151
151
  return value;
152
152
  };
153
153
  _proto.nextFloat32 = function nextFloat32() {
154
- var value = this._dataView.getFloat32(this._offset, this._littleEndian);
155
- this._offset += 4;
154
+ var value = this._dataView.getFloat32(this._position, this._littleEndian);
155
+ this._position += 4;
156
156
  return value;
157
157
  };
158
158
  _proto.nextFloat32Array = function nextFloat32Array(len) {
159
- var value = new Float32Array(this.data.buffer, this._offset + this._dataView.byteOffset, len);
160
- this._offset += 4 * len;
159
+ var value = new Float32Array(this.data.buffer, this._position + this._dataView.byteOffset, len);
160
+ this._position += 4 * len;
161
161
  return value;
162
162
  };
163
163
  _proto.nextUint32Array = function nextUint32Array(len) {
164
- var value = new Uint32Array(this.data.buffer, this._offset + this._dataView.byteOffset, len);
165
- this._offset += 4 * len;
164
+ var value = new Uint32Array(this.data.buffer, this._position + this._dataView.byteOffset, len);
165
+ this._position += 4 * len;
166
166
  return value;
167
167
  };
168
168
  _proto.nextUint8Array = function nextUint8Array(len) {
169
- var value = new Uint8Array(this.data.buffer, this._offset + this._dataView.byteOffset, len);
170
- this._offset += len;
169
+ var value = new Uint8Array(this.data.buffer, this._position + this._dataView.byteOffset, len);
170
+ this._position += len;
171
171
  return value;
172
172
  };
173
173
  _proto.nextUint64 = function nextUint64() {
174
- var left = this._dataView.getUint32(this._offset, this._littleEndian);
175
- var right = this._dataView.getUint32(this._offset + 4, this._littleEndian);
174
+ var left = this._dataView.getUint32(this._position, this._littleEndian);
175
+ var right = this._dataView.getUint32(this._position + 4, this._littleEndian);
176
176
  var value = left + Math.pow(2, 32) * right;
177
- this._offset += 8;
177
+ this._position += 8;
178
178
  return value;
179
179
  };
180
180
  _proto.nextStr = function nextStr() {
181
181
  var strByteLength = this.nextUint16();
182
- var uint8Array = new Uint8Array(this.data.buffer, this._offset + this._dataView.byteOffset, strByteLength);
183
- this._offset += strByteLength;
182
+ var uint8Array = new Uint8Array(this.data.buffer, this._position + this._dataView.byteOffset, strByteLength);
183
+ this._position += strByteLength;
184
184
  return miniprogram.Utils.decodeText(uint8Array);
185
185
  };
186
186
  /**
187
187
  * image data 放在最后
188
188
  */ _proto.nextImageData = function nextImageData(count) {
189
- return new Uint8Array(this.data.buffer, this.data.byteOffset + this._offset);
189
+ return new Uint8Array(this.data.buffer, this.data.byteOffset + this._position);
190
190
  };
191
191
  _proto.nextImagesData = function nextImagesData(count) {
192
192
  var imagesLen = new Array(count);
193
193
  // 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
194
194
  for(var i = 0; i < count; i++){
195
- var len = this._dataView.getUint32(this._offset, this._littleEndian);
195
+ var len = this._dataView.getUint32(this._position, this._littleEndian);
196
196
  imagesLen[i] = len;
197
- this._offset += 4;
197
+ this._position += 4;
198
198
  }
199
199
  var imagesData = [];
200
200
  for(var i1 = 0; i1 < count; i1++){
201
201
  var len1 = imagesLen[i1];
202
- var buffer = new Uint8Array(this.data.buffer, this._dataView.byteOffset + this._offset, len1);
203
- this._offset += len1;
202
+ var buffer = new Uint8Array(this.data.buffer, this._dataView.byteOffset + this._position, len1);
203
+ this._position += len1;
204
204
  imagesData.push(buffer);
205
205
  }
206
206
  return imagesData;
207
207
  };
208
208
  _proto.skip = function skip(bytes) {
209
- this._offset += bytes;
209
+ this._position += bytes;
210
210
  return this;
211
211
  };
212
212
  _proto.scan = function scan(maxByteLength, term) {
213
213
  if (term === void 0) term = 0x00;
214
- var byteOffset = this._offset;
214
+ var byteOffset = this._position;
215
215
  var byteLength = 0;
216
- while(this._dataView.getUint8(this._offset) !== term && byteLength < maxByteLength){
216
+ while(this._dataView.getUint8(this._position) !== term && byteLength < maxByteLength){
217
217
  byteLength++;
218
- this._offset++;
218
+ this._position++;
219
219
  }
220
- if (byteLength < maxByteLength) this._offset++;
220
+ if (byteLength < maxByteLength) this._position++;
221
221
  return new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + byteOffset, byteLength);
222
222
  };
223
223
  _create_class(BufferReader, [
224
224
  {
225
225
  key: "position",
226
226
  get: function get() {
227
- return this._offset;
227
+ return this._position;
228
228
  }
229
229
  },
230
230
  {
231
231
  key: "offset",
232
232
  get: function get() {
233
- return this._offset + this._baseOffset;
233
+ return this._position + this._baseOffset;
234
234
  }
235
235
  }
236
236
  ]);
@@ -294,75 +294,74 @@ exports.MeshDecoder = /*#__PURE__*/ function() {
294
294
  var encodedMeshData = JSON.parse(jsonDataString);
295
295
  // @ts-ignore Vector3 is not compatible with {x: number, y: number, z: number}.
296
296
  encodedMeshData.bounds && modelMesh.bounds.copyFrom(encodedMeshData.bounds);
297
- var offset = Math.ceil(bufferReader.offset / 4) * 4;
297
+ var offset = Math.ceil(bufferReader.offset / 4) * 4 + bufferReader.data.byteOffset;
298
298
  var buffer = bufferReader.data.buffer;
299
- var byteOffset = bufferReader.data.byteOffset;
300
- var float32Array = new Float32Array(buffer, encodedMeshData.positions.start + offset + byteOffset, (encodedMeshData.positions.end - encodedMeshData.positions.start) / 4);
299
+ var float32Array = new Float32Array(buffer, encodedMeshData.positions.start + offset, (encodedMeshData.positions.end - encodedMeshData.positions.start) / 4);
301
300
  var vertexCount = float32Array.length / 3;
302
301
  var positions = float32ArrayToVector3(float32Array, vertexCount);
303
302
  modelMesh.setPositions(positions);
304
303
  if (encodedMeshData.normals) {
305
- var float32Array1 = new Float32Array(buffer, encodedMeshData.normals.start + offset + byteOffset, (encodedMeshData.normals.end - encodedMeshData.normals.start) / 4);
304
+ var float32Array1 = new Float32Array(buffer, encodedMeshData.normals.start + offset, (encodedMeshData.normals.end - encodedMeshData.normals.start) / 4);
306
305
  var normals = float32ArrayToVector3(float32Array1, vertexCount);
307
306
  modelMesh.setNormals(normals);
308
307
  }
309
308
  if (encodedMeshData.uvs) {
310
- var float32Array2 = new Float32Array(buffer, encodedMeshData.uvs.start + offset + byteOffset, (encodedMeshData.uvs.end - encodedMeshData.uvs.start) / 4);
309
+ var float32Array2 = new Float32Array(buffer, encodedMeshData.uvs.start + offset, (encodedMeshData.uvs.end - encodedMeshData.uvs.start) / 4);
311
310
  modelMesh.setUVs(float32ArrayToVector2(float32Array2, vertexCount));
312
311
  }
313
312
  if (encodedMeshData.uv1) {
314
- var float32Array3 = new Float32Array(buffer, encodedMeshData.uv1.start + offset + byteOffset, (encodedMeshData.uv1.end - encodedMeshData.uv1.start) / 4);
313
+ var float32Array3 = new Float32Array(buffer, encodedMeshData.uv1.start + offset, (encodedMeshData.uv1.end - encodedMeshData.uv1.start) / 4);
315
314
  modelMesh.setUVs(float32ArrayToVector2(float32Array3, vertexCount), 1);
316
315
  }
317
316
  if (encodedMeshData.uv2) {
318
- var float32Array4 = new Float32Array(buffer, encodedMeshData.uv2.start + offset + byteOffset, (encodedMeshData.uv2.end - encodedMeshData.uv2.start) / 4);
317
+ var float32Array4 = new Float32Array(buffer, encodedMeshData.uv2.start + offset, (encodedMeshData.uv2.end - encodedMeshData.uv2.start) / 4);
319
318
  modelMesh.setUVs(float32ArrayToVector2(float32Array4, vertexCount), 2);
320
319
  }
321
320
  if (encodedMeshData.uv3) {
322
- var float32Array5 = new Float32Array(buffer, encodedMeshData.uv3.start + offset + byteOffset, (encodedMeshData.uv3.end - encodedMeshData.uv3.start) / 4);
321
+ var float32Array5 = new Float32Array(buffer, encodedMeshData.uv3.start + offset, (encodedMeshData.uv3.end - encodedMeshData.uv3.start) / 4);
323
322
  modelMesh.setUVs(float32ArrayToVector2(float32Array5, vertexCount), 3);
324
323
  }
325
324
  if (encodedMeshData.uv4) {
326
- var float32Array6 = new Float32Array(buffer, encodedMeshData.uv4.start + offset + byteOffset, (encodedMeshData.uv4.end - encodedMeshData.uv4.start) / 4);
325
+ var float32Array6 = new Float32Array(buffer, encodedMeshData.uv4.start + offset, (encodedMeshData.uv4.end - encodedMeshData.uv4.start) / 4);
327
326
  modelMesh.setUVs(float32ArrayToVector2(float32Array6, vertexCount), 4);
328
327
  }
329
328
  if (encodedMeshData.uv5) {
330
- var float32Array7 = new Float32Array(buffer, encodedMeshData.uv5.start + offset + byteOffset, (encodedMeshData.uv5.end - encodedMeshData.uv5.start) / 4);
329
+ var float32Array7 = new Float32Array(buffer, encodedMeshData.uv5.start + offset, (encodedMeshData.uv5.end - encodedMeshData.uv5.start) / 4);
331
330
  modelMesh.setUVs(float32ArrayToVector2(float32Array7, vertexCount), 5);
332
331
  }
333
332
  if (encodedMeshData.uv6) {
334
- var float32Array8 = new Float32Array(buffer, encodedMeshData.uv6.start + offset + byteOffset, (encodedMeshData.uv6.end - encodedMeshData.uv6.start) / 4);
333
+ var float32Array8 = new Float32Array(buffer, encodedMeshData.uv6.start + offset, (encodedMeshData.uv6.end - encodedMeshData.uv6.start) / 4);
335
334
  modelMesh.setUVs(float32ArrayToVector2(float32Array8, vertexCount), 6);
336
335
  }
337
336
  if (encodedMeshData.uv7) {
338
- var float32Array9 = new Float32Array(buffer, encodedMeshData.uv7.start + offset + byteOffset, (encodedMeshData.uv7.end - encodedMeshData.uv7.start) / 4);
337
+ var float32Array9 = new Float32Array(buffer, encodedMeshData.uv7.start + offset, (encodedMeshData.uv7.end - encodedMeshData.uv7.start) / 4);
339
338
  modelMesh.setUVs(float32ArrayToVector2(float32Array9, vertexCount), 7);
340
339
  }
341
340
  if (encodedMeshData.colors) {
342
- var float32Array10 = new Float32Array(buffer, encodedMeshData.colors.start + offset + byteOffset, (encodedMeshData.colors.end - encodedMeshData.colors.start) / 4);
341
+ var float32Array10 = new Float32Array(buffer, encodedMeshData.colors.start + offset, (encodedMeshData.colors.end - encodedMeshData.colors.start) / 4);
343
342
  modelMesh.setColors(float32ArrayToVColor(float32Array10, vertexCount));
344
343
  }
345
344
  if (encodedMeshData.boneWeights) {
346
- var float32Array11 = new Float32Array(buffer, encodedMeshData.boneWeights.start + offset + byteOffset, (encodedMeshData.boneWeights.end - encodedMeshData.boneWeights.start) / 4);
345
+ var float32Array11 = new Float32Array(buffer, encodedMeshData.boneWeights.start + offset, (encodedMeshData.boneWeights.end - encodedMeshData.boneWeights.start) / 4);
347
346
  modelMesh.setBoneWeights(float32ArrayToVector4(float32Array11, vertexCount));
348
347
  }
349
348
  if (encodedMeshData.boneIndices) {
350
- var float32Array12 = new Float32Array(buffer, encodedMeshData.boneIndices.start + offset + byteOffset, (encodedMeshData.boneIndices.end - encodedMeshData.boneIndices.start) / 4);
349
+ var float32Array12 = new Float32Array(buffer, encodedMeshData.boneIndices.start + offset, (encodedMeshData.boneIndices.end - encodedMeshData.boneIndices.start) / 4);
351
350
  modelMesh.setBoneIndices(float32ArrayToVector4(float32Array12, vertexCount));
352
351
  }
353
352
  if (encodedMeshData.blendShapes) {
354
353
  encodedMeshData.blendShapes.forEach(function(blendShapeData) {
355
354
  var blendShape = new miniprogram.BlendShape(blendShapeData.name);
356
355
  blendShapeData.frames.forEach(function(frameData) {
357
- var positionArray = new Float32Array(buffer, frameData.deltaPosition.start + offset + byteOffset, (frameData.deltaPosition.end - frameData.deltaPosition.start) / 4);
356
+ var positionArray = new Float32Array(buffer, frameData.deltaPosition.start + offset, (frameData.deltaPosition.end - frameData.deltaPosition.start) / 4);
358
357
  var count = positionArray.length / 3;
359
358
  var deltaPosition = float32ArrayToVector3(positionArray, count);
360
359
  if (frameData.deltaNormals) {
361
- var normalsArray = new Float32Array(buffer, frameData.deltaNormals.start + offset + byteOffset, (frameData.deltaNormals.end - frameData.deltaNormals.start) / 4);
360
+ var normalsArray = new Float32Array(buffer, frameData.deltaNormals.start + offset, (frameData.deltaNormals.end - frameData.deltaNormals.start) / 4);
362
361
  float32ArrayToVector3(normalsArray, count);
363
362
  }
364
363
  if (frameData.deltaTangents) {
365
- var tangentsArray = new Float32Array(buffer, frameData.deltaTangents.start + offset + byteOffset, (frameData.deltaTangents.end - frameData.deltaTangents.start) / 4);
364
+ var tangentsArray = new Float32Array(buffer, frameData.deltaTangents.start + offset, (frameData.deltaTangents.end - frameData.deltaTangents.start) / 4);
366
365
  float32ArrayToVector4(tangentsArray, count);
367
366
  }
368
367
  blendShape.addFrame(frameData.weight, deltaPosition);
@@ -373,9 +372,9 @@ exports.MeshDecoder = /*#__PURE__*/ function() {
373
372
  if (encodedMeshData.indices) {
374
373
  var indices = null;
375
374
  if (encodedMeshData.indices.type === 0) {
376
- indices = new Uint16Array(buffer, encodedMeshData.indices.start + offset + byteOffset, (encodedMeshData.indices.end - encodedMeshData.indices.start) / 2);
375
+ indices = new Uint16Array(buffer, encodedMeshData.indices.start + offset, (encodedMeshData.indices.end - encodedMeshData.indices.start) / 2);
377
376
  } else {
378
- indices = new Uint32Array(buffer, encodedMeshData.indices.start + offset + byteOffset, (encodedMeshData.indices.end - encodedMeshData.indices.start) / 4);
377
+ indices = new Uint32Array(buffer, encodedMeshData.indices.start + offset, (encodedMeshData.indices.end - encodedMeshData.indices.start) / 4);
379
378
  }
380
379
  modelMesh.setIndices(indices);
381
380
  }
@@ -540,15 +539,23 @@ var ReflectionParser = /*#__PURE__*/ function() {
540
539
  if (position) entity.transform.position.copyFrom(position);
541
540
  if (rotation) entity.transform.rotation.copyFrom(rotation);
542
541
  if (scale) entity.transform.scale.copyFrom(scale);
542
+ var _entityConfig_layer;
543
+ entity.layer = (_entityConfig_layer = entityConfig.layer) != null ? _entityConfig_layer : entity.layer;
543
544
  return entity;
544
545
  });
545
546
  };
546
547
  _proto.parseClassObject = function parseClassObject(item) {
548
+ var _this = this;
547
549
  var Class = miniprogram.Loader.getClass(item.class);
548
550
  var _item_constructParams;
549
551
  var params = (_item_constructParams = item.constructParams) != null ? _item_constructParams : [];
550
- var instance = _construct(Class, [].concat(params));
551
- return this.parsePropsAndMethods(instance, item);
552
+ return Promise.all(params.map(function(param) {
553
+ return _this.parseBasicType(param);
554
+ })).then(function(resultParams) {
555
+ return _construct(Class, [].concat(resultParams));
556
+ }).then(function(instance) {
557
+ return _this.parsePropsAndMethods(instance, item);
558
+ });
552
559
  };
553
560
  _proto.parsePropsAndMethods = function parsePropsAndMethods(instance, item) {
554
561
  var promises = [];
@@ -556,16 +563,14 @@ var ReflectionParser = /*#__PURE__*/ function() {
556
563
  for(var methodName in item.methods){
557
564
  var methodParams = item.methods[methodName];
558
565
  for(var i = 0, count = methodParams.length; i < count; i++){
559
- var params = methodParams[i];
560
- var promise = this.parseMethod(instance, methodName, params);
561
- promises.push(promise);
566
+ promises.push(this.parseMethod(instance, methodName, methodParams[i]));
562
567
  }
563
568
  }
564
569
  }
565
570
  if (item.props) {
566
571
  var _this = this, _loop = function(key) {
567
572
  var value = item.props[key];
568
- var promise = _this.parseBasicType(value).then(function(v) {
573
+ var promise = _this.parseBasicType(value, instance[key]).then(function(v) {
569
574
  return instance[key] = v;
570
575
  });
571
576
  promises.push(promise);
@@ -587,7 +592,7 @@ var ReflectionParser = /*#__PURE__*/ function() {
587
592
  return (_instance = instance)[methodName].apply(_instance, [].concat(result));
588
593
  });
589
594
  };
590
- _proto.parseBasicType = function parseBasicType(value) {
595
+ _proto.parseBasicType = function parseBasicType(value, originValue) {
591
596
  var _this = this;
592
597
  if (Array.isArray(value)) {
593
598
  return Promise.all(value.map(function(item) {
@@ -604,13 +609,33 @@ var ReflectionParser = /*#__PURE__*/ function() {
604
609
  } else if (ReflectionParser._isEntityRef(value)) {
605
610
  // entity reference
606
611
  return Promise.resolve(this._context.entityMap.get(value.entityId));
607
- } else {
608
- // basic type
609
- return Promise.resolve(value);
612
+ } else if (originValue) {
613
+ var _this1 = this, _loop = function(key) {
614
+ if (key === "methods") {
615
+ var methods = value[key];
616
+ for(var methodName in methods){
617
+ var methodParams = methods[methodName];
618
+ for(var i = 0, count = methodParams.length; i < count; i++){
619
+ var params = methodParams[i];
620
+ var promise = _this1.parseMethod(originValue, methodName, params);
621
+ promises.push(promise);
622
+ }
623
+ }
624
+ } else {
625
+ promises.push(_this1.parseBasicType(value[key], originValue[key]).then(function(v) {
626
+ return originValue[key] = v;
627
+ }));
628
+ }
629
+ };
630
+ var promises = [];
631
+ for(var key in value)_loop(key);
632
+ return Promise.all(promises).then(function() {
633
+ return originValue;
634
+ });
610
635
  }
611
- } else {
612
- return Promise.resolve(value);
613
636
  }
637
+ // primitive type
638
+ return Promise.resolve(value);
614
639
  };
615
640
  _proto._getEntityByConfig = function _getEntityByConfig(entityConfig) {
616
641
  // @ts-ignore
@@ -1547,10 +1572,10 @@ var TextureWrapMode;
1547
1572
  /**
1548
1573
  * @internal
1549
1574
  */ var GLTFParserContext = /*#__PURE__*/ function() {
1550
- function GLTFParserContext(glTFResource, resourceManager, keepMeshData) {
1575
+ function GLTFParserContext(glTFResource, resourceManager, params) {
1551
1576
  this.glTFResource = glTFResource;
1552
1577
  this.resourceManager = resourceManager;
1553
- this.keepMeshData = keepMeshData;
1578
+ this.params = params;
1554
1579
  this.accessorBufferCache = {};
1555
1580
  this._resourceCache = new Map();
1556
1581
  this.contentRestorer = new GLTFContentRestorer(glTFResource);
@@ -1604,11 +1629,37 @@ var TextureWrapMode;
1604
1629
  _this.get(9),
1605
1630
  _this.get(2)
1606
1631
  ]).then(function() {
1632
+ var glTFResource = _this.glTFResource;
1633
+ if (glTFResource.skins || glTFResource.animations) {
1634
+ _this._createAnimator(_this, glTFResource.animations);
1635
+ }
1607
1636
  _this.resourceManager.addContentRestorer(_this.contentRestorer);
1608
- return _this.glTFResource;
1637
+ return glTFResource;
1609
1638
  });
1610
1639
  });
1611
1640
  };
1641
+ _proto._createAnimator = function _createAnimator(context, animations) {
1642
+ var defaultSceneRoot = context.glTFResource.defaultSceneRoot;
1643
+ var animator = defaultSceneRoot.addComponent(miniprogram.Animator);
1644
+ var animatorController = new miniprogram.AnimatorController();
1645
+ var layer = new miniprogram.AnimatorControllerLayer("layer");
1646
+ var animatorStateMachine = new miniprogram.AnimatorStateMachine();
1647
+ animatorController.addLayer(layer);
1648
+ animator.animatorController = animatorController;
1649
+ layer.stateMachine = animatorStateMachine;
1650
+ if (animations) {
1651
+ for(var i = 0; i < animations.length; i++){
1652
+ var animationClip = animations[i];
1653
+ var name = animationClip.name;
1654
+ var uniqueName = animatorStateMachine.makeUniqueStateName(name);
1655
+ if (uniqueName !== name) {
1656
+ console.warn("AnimatorState name is existed, name: " + name + " reset to " + uniqueName);
1657
+ }
1658
+ var animatorState = animatorStateMachine.addState(uniqueName);
1659
+ animatorState.clip = animationClip;
1660
+ }
1661
+ }
1662
+ };
1612
1663
  _proto._handleSubAsset = function _handleSubAsset(resource, type, index) {
1613
1664
  var _this = this;
1614
1665
  var glTFResourceKey = glTFResourceMap[type];
@@ -1776,7 +1827,9 @@ function registerGLTFParser(pipeline) {
1776
1827
  };
1777
1828
  GLTFUtils.getAccessorBuffer = function getAccessorBuffer(context, bufferViews, accessor) {
1778
1829
  var componentType = accessor.componentType;
1779
- var bufferView = bufferViews[accessor.bufferView];
1830
+ var _accessor_bufferView;
1831
+ var bufferViewIndex = (_accessor_bufferView = accessor.bufferView) != null ? _accessor_bufferView : 0;
1832
+ var bufferView = bufferViews[bufferViewIndex];
1780
1833
  return context.get(exports.GLTFParserType.Buffer).then(function(buffers) {
1781
1834
  var bufferIndex = bufferView.buffer;
1782
1835
  var buffer = buffers[bufferIndex];
@@ -1794,7 +1847,7 @@ function registerGLTFParser(pipeline) {
1794
1847
  // According to the glTF official documentation only byteStride not undefined is allowed
1795
1848
  if (bufferStride !== undefined && bufferStride !== elementStride) {
1796
1849
  var bufferSlice = Math.floor(byteOffset / bufferStride);
1797
- var bufferCacheKey = accessor.bufferView + ":" + componentType + ":" + bufferSlice + ":" + accessorCount;
1850
+ var bufferCacheKey = bufferViewIndex + ":" + componentType + ":" + bufferSlice + ":" + accessorCount;
1798
1851
  var accessorBufferCache = context.accessorBufferCache;
1799
1852
  bufferInfo = accessorBufferCache[bufferCacheKey];
1800
1853
  if (!bufferInfo) {
@@ -1833,7 +1886,8 @@ function registerGLTFParser(pipeline) {
1833
1886
  * Get accessor data.
1834
1887
  */ GLTFUtils.getAccessorData = function getAccessorData(glTF, accessor, buffers) {
1835
1888
  var bufferViews = glTF.bufferViews;
1836
- var bufferView = bufferViews[accessor.bufferView];
1889
+ var _accessor_bufferView;
1890
+ var bufferView = bufferViews[(_accessor_bufferView = accessor.bufferView) != null ? _accessor_bufferView : 0];
1837
1891
  var arrayBuffer = buffers[bufferView.buffer];
1838
1892
  var accessorByteOffset = accessor.hasOwnProperty("byteOffset") ? accessor.byteOffset : 0;
1839
1893
  var bufferViewByteOffset = bufferView.hasOwnProperty("byteOffset") ? bufferView.byteOffset : 0;
@@ -2010,7 +2064,7 @@ function registerGLTFParser(pipeline) {
2010
2064
  };
2011
2065
  /**
2012
2066
  * Parse the glb format.
2013
- */ GLTFUtils.parseGLB = function parseGLB(context, glb) {
2067
+ */ GLTFUtils.parseGLB = function parseGLB(context, originBuffer) {
2014
2068
  var UINT32_LENGTH = 4;
2015
2069
  var GLB_HEADER_MAGIC = 0x46546c67; // 'glTF'
2016
2070
  var GLB_HEADER_LENGTH = 12;
@@ -2018,7 +2072,7 @@ function registerGLTFParser(pipeline) {
2018
2072
  JSON: 0x4e4f534a,
2019
2073
  BIN: 0x004e4942
2020
2074
  };
2021
- var dataView = new DataView(glb);
2075
+ var dataView = new DataView(originBuffer);
2022
2076
  // read header
2023
2077
  var header = {
2024
2078
  magic: dataView.getUint32(0, true),
@@ -2026,8 +2080,9 @@ function registerGLTFParser(pipeline) {
2026
2080
  length: dataView.getUint32(2 * UINT32_LENGTH, true)
2027
2081
  };
2028
2082
  if (header.magic !== GLB_HEADER_MAGIC) {
2029
- console.error("Invalid glb magic number. Expected 0x46546C67, found 0x" + header.magic.toString(16));
2030
- return null;
2083
+ return {
2084
+ originBuffer: originBuffer
2085
+ };
2031
2086
  }
2032
2087
  // read main data
2033
2088
  var chunkLength = dataView.getUint32(GLB_HEADER_LENGTH, true);
@@ -2037,7 +2092,7 @@ function registerGLTFParser(pipeline) {
2037
2092
  console.error("Invalid glb chunk type. Expected 0x4E4F534A, found 0x" + chunkType.toString(16));
2038
2093
  return null;
2039
2094
  }
2040
- var glTFData = new Uint8Array(glb, GLB_HEADER_LENGTH + 2 * UINT32_LENGTH, chunkLength);
2095
+ var glTFData = new Uint8Array(originBuffer, GLB_HEADER_LENGTH + 2 * UINT32_LENGTH, chunkLength);
2041
2096
  var glTF = JSON.parse(miniprogram.Utils.decodeText(glTFData));
2042
2097
  // read all buffers
2043
2098
  var buffers = [];
@@ -2051,7 +2106,7 @@ function registerGLTFParser(pipeline) {
2051
2106
  return null;
2052
2107
  }
2053
2108
  var currentOffset = byteOffset + 2 * UINT32_LENGTH;
2054
- var buffer = glb.slice(currentOffset, currentOffset + chunkLength);
2109
+ var buffer = originBuffer.slice(currentOffset, currentOffset + chunkLength);
2055
2110
  buffers.push(buffer);
2056
2111
  restoreGLBBufferSlice.push(new miniprogram$1.Vector2(currentOffset, chunkLength));
2057
2112
  byteOffset += chunkLength + 2 * UINT32_LENGTH;
@@ -2248,7 +2303,7 @@ var SupercompressionScheme;
2248
2303
  alphaSliceByteLength: sgdReader.nextUint32()
2249
2304
  };
2250
2305
  }
2251
- var endpointsByteOffset = sgdByteOffset + sgdReader.offset;
2306
+ var endpointsByteOffset = sgdByteOffset + sgdReader.position;
2252
2307
  var selectorsByteOffset = endpointsByteOffset + endpointsByteLength;
2253
2308
  var tablesByteOffset = selectorsByteOffset + selectorsByteLength;
2254
2309
  var extendedByteOffset = tablesByteOffset + tablesByteLength;
@@ -2440,6 +2495,25 @@ var AbstractTranscoder = /*#__PURE__*/ function() {
2440
2495
  }();
2441
2496
 
2442
2497
  /** @internal */ function TranscodeWorkerCode$1() {
2498
+ var initPromise;
2499
+ var init = function init(wasmBinary) {
2500
+ if (!initPromise) {
2501
+ initPromise = new Promise(function(resolve, reject) {
2502
+ var BasisModule = {
2503
+ wasmBinary: wasmBinary,
2504
+ onRuntimeInitialized: function() {
2505
+ return resolve(BasisModule);
2506
+ },
2507
+ onAbort: reject
2508
+ };
2509
+ self["BASIS"](BasisModule);
2510
+ }).then(function(BasisModule) {
2511
+ BasisModule.initializeBasis();
2512
+ return BasisModule.KTX2File;
2513
+ });
2514
+ }
2515
+ return initPromise;
2516
+ };
2443
2517
  self.onmessage = function onmessage(event) {
2444
2518
  var message = event.data;
2445
2519
  switch(message.type){
@@ -2566,6 +2640,7 @@ function transcode(buffer, targetFormat, KTX2File) {
2566
2640
  var faceCount = ktx2File.getFaces();
2567
2641
  var format = getTranscodeFormatFromTarget(targetFormat, hasAlpha);
2568
2642
  var faces = new Array(faceCount);
2643
+ var isBC = format === 2 || format === 3 || format === 7;
2569
2644
  for(var face = 0; face < faceCount; face++){
2570
2645
  var mipmaps = new Array(levelCount);
2571
2646
  for(var mip = 0; mip < levelCount; mip++){
@@ -2573,8 +2648,15 @@ function transcode(buffer, targetFormat, KTX2File) {
2573
2648
  var mipWidth = void 0, mipHeight = void 0;
2574
2649
  for(var layer = 0; layer < layerCount; layer++){
2575
2650
  var levelInfo = ktx2File.getImageLevelInfo(mip, layer, face);
2576
- mipWidth = levelInfo.origWidth;
2577
- mipHeight = levelInfo.origHeight;
2651
+ // see: https://github.com/KhronosGroup/KTX-Software/issues/254
2652
+ if (isBC && mip === 0 && (width !== levelInfo.width || height !== levelInfo.height)) {
2653
+ width = mipWidth = levelInfo.width;
2654
+ height = mipHeight = levelInfo.height;
2655
+ 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.");
2656
+ } else {
2657
+ mipWidth = levelInfo.origWidth;
2658
+ mipHeight = levelInfo.origHeight;
2659
+ }
2578
2660
  var dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, format));
2579
2661
  var status = ktx2File.transcodeImage(dst, mip, layer, face, format, 0, -1, -1);
2580
2662
  if (!status) {
@@ -2640,7 +2722,7 @@ function transcode(buffer, targetFormat, KTX2File) {
2640
2722
  } else {
2641
2723
  var funcCode = TranscodeWorkerCode$1.toString();
2642
2724
  var transcodeString = funcCode.substring(funcCode.indexOf("{"), funcCode.lastIndexOf("}") + 1);
2643
- var workerCode = "\n " + jsCode + "\n var init = (" + _init.toString() + ")();\n " + transcode.toString() + "\n " + transcodeString + "\n ";
2725
+ var workerCode = "\n " + jsCode + "\n " + transcode.toString() + "\n " + transcodeString + "\n ";
2644
2726
  var workerURL = engineMiniprogramAdapter.URL.createObjectURL(new engineMiniprogramAdapter.Blob([
2645
2727
  workerCode
2646
2728
  ], {
@@ -2886,10 +2968,14 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2886
2968
  return Loader1.apply(this, arguments);
2887
2969
  }
2888
2970
  var _proto = KTX2Loader1.prototype;
2889
- _proto.initialize = function initialize(engine, configuration) {
2971
+ _proto.initialize = function initialize(_, configuration) {
2890
2972
  if (configuration.ktx2Loader) {
2891
2973
  var options = configuration.ktx2Loader;
2892
- if (this._isKhronosSupported(options.priorityFormats, engine) && options.workerCount !== 0) {
2974
+ if (options.priorityFormats) {
2975
+ exports.KTX2Loader._priorityFormats["etc1s"] = options.priorityFormats;
2976
+ exports.KTX2Loader._priorityFormats["uastc"] = options.priorityFormats;
2977
+ }
2978
+ if (options.transcoder === /** Khronos transcoder. */ 1) {
2893
2979
  return exports.KTX2Loader._getKhronosTranscoder(options.workerCount).init();
2894
2980
  } else {
2895
2981
  return exports.KTX2Loader._getBinomialLLCTranscoder(options.workerCount).init();
@@ -2908,27 +2994,6 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2908
2994
  });
2909
2995
  });
2910
2996
  };
2911
- _proto._isKhronosSupported = function _isKhronosSupported(priorityFormats, engine) {
2912
- if (priorityFormats === void 0) priorityFormats = [
2913
- exports.KTX2TargetFormat.ASTC,
2914
- exports.KTX2TargetFormat.ETC,
2915
- exports.KTX2TargetFormat.BC7,
2916
- exports.KTX2TargetFormat.BC1_BC3,
2917
- exports.KTX2TargetFormat.PVRTC,
2918
- exports.KTX2TargetFormat.R8G8B8A8
2919
- ];
2920
- var supportedList = new Array();
2921
- if (Array.isArray(priorityFormats[0])) {
2922
- for(var i = 0; i < priorityFormats.length; i++){
2923
- supportedList.push(exports.KTX2Loader._detectSupportedFormat(engine._hardwareRenderer, priorityFormats[i]));
2924
- }
2925
- } else {
2926
- supportedList.push(exports.KTX2Loader._detectSupportedFormat(engine._hardwareRenderer, priorityFormats));
2927
- }
2928
- return supportedList.every(function(format) {
2929
- return KhronosTranscoder.transcoderMap[format];
2930
- });
2931
- };
2932
2997
  /**
2933
2998
  * Destroy ktx2 transcoder worker.
2934
2999
  */ KTX2Loader1.destroy = function destroy() {
@@ -2941,7 +3006,8 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2941
3006
  /** @internal */ KTX2Loader1._parseBuffer = function _parseBuffer(buffer, engine, params) {
2942
3007
  var _params;
2943
3008
  var ktx2Container = new KTX2Container(buffer);
2944
- var formatPriorities = (_params = params) == null ? void 0 : _params.priorityFormats;
3009
+ var _params_priorityFormats;
3010
+ var formatPriorities = (_params_priorityFormats = (_params = params) == null ? void 0 : _params.priorityFormats) != null ? _params_priorityFormats : exports.KTX2Loader._priorityFormats[ktx2Container.isUASTC ? "uastc" : "etc1s"];
2945
3011
  var targetFormat = exports.KTX2Loader._decideTargetFormat(engine, ktx2Container, formatPriorities);
2946
3012
  var transcodeResultPromise;
2947
3013
  if (exports.KTX2Loader._isBinomialInit || !KhronosTranscoder.transcoderMap[targetFormat] || !ktx2Container.isUASTC) {
@@ -3008,18 +3074,22 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
3008
3074
  return targetFormat;
3009
3075
  };
3010
3076
  KTX2Loader1._detectSupportedFormat = function _detectSupportedFormat(renderer, priorityFormats) {
3011
- if (priorityFormats === void 0) priorityFormats = [
3012
- exports.KTX2TargetFormat.ASTC,
3013
- exports.KTX2TargetFormat.ETC,
3014
- exports.KTX2TargetFormat.BC7,
3015
- exports.KTX2TargetFormat.BC1_BC3,
3016
- exports.KTX2TargetFormat.PVRTC
3017
- ];
3018
3077
  for(var i = 0; i < priorityFormats.length; i++){
3019
- var capabilities = this._supportedMap[priorityFormats[i]];
3020
- for(var j = 0; j < capabilities.length; j++){
3021
- if (renderer.canIUse(capabilities[j])) {
3022
- return priorityFormats[i];
3078
+ var format = priorityFormats[i];
3079
+ var capabilities = this._supportedMap[format];
3080
+ if (capabilities) {
3081
+ for(var j = 0; j < capabilities.length; j++){
3082
+ if (renderer.canIUse(capabilities[j])) {
3083
+ return format;
3084
+ }
3085
+ }
3086
+ } else {
3087
+ switch(priorityFormats[i]){
3088
+ case exports.KTX2TargetFormat.R8G8B8A8:
3089
+ return format;
3090
+ case exports.KTX2TargetFormat.R8:
3091
+ case exports.KTX2TargetFormat.R8G8:
3092
+ if (renderer.isWebGL2) return format;
3023
3093
  }
3024
3094
  }
3025
3095
  }
@@ -3056,6 +3126,23 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
3056
3126
  return KTX2Loader1;
3057
3127
  }(miniprogram.Loader), function() {
3058
3128
  _KTX2Loader._isBinomialInit = false;
3129
+ }(), function() {
3130
+ _KTX2Loader._priorityFormats = {
3131
+ etc1s: [
3132
+ exports.KTX2TargetFormat.ETC,
3133
+ exports.KTX2TargetFormat.BC7,
3134
+ exports.KTX2TargetFormat.ASTC,
3135
+ exports.KTX2TargetFormat.BC1_BC3,
3136
+ exports.KTX2TargetFormat.PVRTC
3137
+ ],
3138
+ uastc: [
3139
+ exports.KTX2TargetFormat.ASTC,
3140
+ exports.KTX2TargetFormat.BC7,
3141
+ exports.KTX2TargetFormat.ETC,
3142
+ exports.KTX2TargetFormat.BC1_BC3,
3143
+ exports.KTX2TargetFormat.PVRTC
3144
+ ]
3145
+ };
3059
3146
  }(), function() {
3060
3147
  var _obj;
3061
3148
  _KTX2Loader._supportedMap = (_obj = {}, _obj[exports.KTX2TargetFormat.ASTC] = [
@@ -3076,6 +3163,11 @@ exports.KTX2Loader = __decorate([
3076
3163
  "ktx2"
3077
3164
  ])
3078
3165
  ], exports.KTX2Loader);
3166
+ exports.KTX2Transcoder = void 0;
3167
+ (function(KTX2Transcoder) {
3168
+ KTX2Transcoder[KTX2Transcoder[/** BinomialLLC transcoder. */ "BinomialLLC"] = 0] = "BinomialLLC";
3169
+ KTX2Transcoder[KTX2Transcoder["Khronos"] = 1] = "Khronos";
3170
+ })(exports.KTX2Transcoder || (exports.KTX2Transcoder = {}));
3079
3171
 
3080
3172
  /**
3081
3173
  * @internal
@@ -3424,23 +3516,20 @@ exports.GLTFSchemaParser = /*#__PURE__*/ function(GLTFParser1) {
3424
3516
  var requestConfig = {
3425
3517
  type: "arraybuffer"
3426
3518
  };
3427
- var isGLB = this._isGLB(url);
3428
- contentRestorer.isGLB = isGLB;
3429
- var promise = isGLB ? miniprogram.request(url, requestConfig).then(function(glb) {
3519
+ return miniprogram.request(url, requestConfig).then(function(buffer) {
3430
3520
  restoreBufferRequests.push(new BufferRequestInfo(url, requestConfig));
3431
- return GLTFUtils.parseGLB(context, glb);
3432
- }).then(function(param) {
3433
- var glTF = param.glTF, buffers = param.buffers;
3434
- context.buffers = buffers;
3435
- return glTF;
3436
- }) : miniprogram.request(url, {
3437
- type: "json"
3521
+ return GLTFUtils.parseGLB(context, buffer);
3522
+ }).then(function(result) {
3523
+ var _result;
3524
+ if ((_result = result) == null ? void 0 : _result.glTF) {
3525
+ contentRestorer.isGLB = true;
3526
+ context.buffers = result.buffers;
3527
+ return result.glTF;
3528
+ } else {
3529
+ contentRestorer.isGLB = false;
3530
+ return JSON.parse(miniprogram.Utils.decodeText(new Uint8Array(result.originBuffer)));
3531
+ }
3438
3532
  });
3439
- return promise;
3440
- };
3441
- _proto._isGLB = function _isGLB(url) {
3442
- var index = url.lastIndexOf(".");
3443
- return url.substring(index + 1, index + 4) === "glb";
3444
3533
  };
3445
3534
  return GLTFSchemaParser;
3446
3535
  }(GLTFParser);
@@ -3519,6 +3608,7 @@ exports.GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3519
3608
  var promises = new Array();
3520
3609
  // parse samplers
3521
3610
  for(var j = 0, m = samplers.length; j < m; j++)_loop(j);
3611
+ promises.push(context.get(exports.GLTFParserType.Scene));
3522
3612
  return Promise.all(promises).then(function() {
3523
3613
  for(var j = 0, m = channels.length; j < m; j++){
3524
3614
  var gltfChannel = channels[j];
@@ -3530,6 +3620,10 @@ exports.GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3530
3620
  relativePath = relativePath === "" ? "" + entity.name : entity.name + "/" + relativePath;
3531
3621
  entity = entity.parent;
3532
3622
  }
3623
+ // If the target node is in the default scene, relativePath will be empty
3624
+ if (context.glTFResource.sceneRoots.indexOf(entity) === -1) {
3625
+ continue;
3626
+ }
3533
3627
  var ComponentType = void 0;
3534
3628
  var propertyName = void 0;
3535
3629
  switch(target.path){
@@ -3866,7 +3960,7 @@ exports.GLTFMeshParser = (_GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1)
3866
3960
  return context.get(exports.GLTFParserType.Buffer).then(function(buffers) {
3867
3961
  return GLTFUtils.getAccessorData(glTF, indexAccessor, buffers);
3868
3962
  });
3869
- }, context.keepMeshData).then(resolve);
3963
+ }, context.params.keepMeshData).then(resolve);
3870
3964
  }
3871
3965
  });
3872
3966
  };
@@ -4044,9 +4138,9 @@ exports.GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4044
4138
  }
4045
4139
  var _proto = GLTFSceneParser.prototype;
4046
4140
  _proto.parse = function parse(context, index) {
4047
- var _this = this;
4048
4141
  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;
4049
4142
  var sceneInfo = scenes[index];
4143
+ var sceneExtensions = sceneInfo.extensions;
4050
4144
  var engine = glTFResource.engine;
4051
4145
  var isDefaultScene = scene === index;
4052
4146
  var sceneNodes = sceneInfo.nodes;
@@ -4072,18 +4166,7 @@ exports.GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4072
4166
  promises.push(this._parseEntityComponent(context, sceneNodes[i1]));
4073
4167
  }
4074
4168
  return Promise.all(promises).then(function() {
4075
- if (isDefaultScene) {
4076
- return Promise.all([
4077
- context.get(exports.GLTFParserType.Skin),
4078
- context.get(exports.GLTFParserType.Animation)
4079
- ]).then(function(param) {
4080
- var skins = param[0], animations = param[1];
4081
- if (skins || animations) {
4082
- _this._createAnimator(context, animations);
4083
- }
4084
- return sceneRoot;
4085
- });
4086
- }
4169
+ GLTFParser.executeExtensionsAdditiveAndParse(sceneExtensions, context, sceneRoot, sceneInfo);
4087
4170
  return sceneRoot;
4088
4171
  });
4089
4172
  };
@@ -4195,28 +4278,6 @@ exports.GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4195
4278
  for(var i = 0; i < glTFMeshPrimitives.length; i++)_loop(i);
4196
4279
  return Promise.all(promises);
4197
4280
  };
4198
- _proto._createAnimator = function _createAnimator(context, animations) {
4199
- var defaultSceneRoot = context.glTFResource.defaultSceneRoot;
4200
- var animator = defaultSceneRoot.addComponent(miniprogram.Animator);
4201
- var animatorController = new miniprogram.AnimatorController();
4202
- var layer = new miniprogram.AnimatorControllerLayer("layer");
4203
- var animatorStateMachine = new miniprogram.AnimatorStateMachine();
4204
- animatorController.addLayer(layer);
4205
- animator.animatorController = animatorController;
4206
- layer.stateMachine = animatorStateMachine;
4207
- if (animations) {
4208
- for(var i = 0; i < animations.length; i++){
4209
- var animationClip = animations[i];
4210
- var name = animationClip.name;
4211
- var uniqueName = animatorStateMachine.makeUniqueStateName(name);
4212
- if (uniqueName !== name) {
4213
- console.warn("AnimatorState name is existed, name: " + name + " reset to " + uniqueName);
4214
- }
4215
- var animatorState = animatorStateMachine.addState(uniqueName);
4216
- animatorState.clip = animationClip;
4217
- }
4218
- }
4219
- };
4220
4281
  _proto._computeLocalBounds = function _computeLocalBounds(skinnedMeshRenderer, mesh, bones, rootBone, inverseBindMatrices) {
4221
4282
  var rootBoneIndex = bones.indexOf(rootBone);
4222
4283
  if (rootBoneIndex !== -1) {
@@ -4448,11 +4509,12 @@ var GLTFLoader = /*#__PURE__*/ function(Loader1) {
4448
4509
  }
4449
4510
  var _proto = GLTFLoader.prototype;
4450
4511
  _proto.load = function load(item, resourceManager) {
4451
- var _params;
4452
4512
  var url = item.url;
4453
4513
  var params = item.params;
4454
4514
  var glTFResource = new GLTFResource(resourceManager.engine, url);
4455
- var context = new GLTFParserContext(glTFResource, resourceManager, !!((_params = params) == null ? void 0 : _params.keepMeshData));
4515
+ var context = new GLTFParserContext(glTFResource, resourceManager, _extends({
4516
+ keepMeshData: false
4517
+ }, params));
4456
4518
  return context.parse();
4457
4519
  };
4458
4520
  return GLTFLoader;
@@ -5100,6 +5162,12 @@ var MaterialLoader = /*#__PURE__*/ function(Loader1) {
5100
5162
  materialShaderData.setTexture(key, texture);
5101
5163
  }));
5102
5164
  break;
5165
+ case "Boolean":
5166
+ materialShaderData.setInt(key, value ? 1 : 0);
5167
+ break;
5168
+ case "Integer":
5169
+ materialShaderData.setInt(key, Number(value));
5170
+ break;
5103
5171
  }
5104
5172
  };
5105
5173
  var engine = resourceManager.engine;
@@ -5235,9 +5303,10 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader1) {
5235
5303
  var _loop = function(i) {
5236
5304
  var atlasItem = atlasItems[i];
5237
5305
  if (atlasItem.img) {
5306
+ var _atlasItem_type;
5238
5307
  chainPromises.push(resourceManager.load({
5239
5308
  url: miniprogram.Utils.resolveAbsoluteUrl(item.url, atlasItem.img),
5240
- type: miniprogram.AssetType.Texture2D,
5309
+ type: (_atlasItem_type = atlasItem.type) != null ? _atlasItem_type : miniprogram.AssetType.Texture2D,
5241
5310
  params: {
5242
5311
  format: format,
5243
5312
  mipmap: mipmap
@@ -5277,7 +5346,7 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader1) {
5277
5346
  };
5278
5347
  _proto._makeSprite = function _makeSprite(engine, config, texture) {
5279
5348
  // Generate a SpriteAtlas object.
5280
- var region = config.region, atlasRegionOffset = config.atlasRegionOffset, atlasRegion = config.atlasRegion, pivot = config.pivot, border = config.border;
5349
+ var region = config.region, atlasRegionOffset = config.atlasRegionOffset, atlasRegion = config.atlasRegion, pivot = config.pivot, border = config.border, width = config.width, height = config.height;
5281
5350
  var sprite = new miniprogram.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);
5282
5351
  if (texture) {
5283
5352
  var invW = 1 / texture.width;
@@ -5289,6 +5358,8 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader1) {
5289
5358
  }
5290
5359
  config.atlasRotated && (sprite.atlasRotated = true);
5291
5360
  }
5361
+ isNaN(width) || (sprite.width = width);
5362
+ isNaN(height) || (sprite.height = height);
5292
5363
  return sprite;
5293
5364
  };
5294
5365
  return SpriteAtlasLoader;
@@ -5307,26 +5378,39 @@ var SpriteLoader = /*#__PURE__*/ function(Loader1) {
5307
5378
  var _proto = SpriteLoader.prototype;
5308
5379
  _proto.load = function load(item, resourceManager) {
5309
5380
  var _this = this;
5310
- return new miniprogram.AssetPromise(function(resolve, reject) {
5311
- _this.request(item.url, _extends({}, item, {
5312
- type: "json"
5313
- })).then(function(data) {
5314
- if (data.belongToAtlas) {
5315
- resourceManager// @ts-ignore
5316
- .getResourceByRef(data.belongToAtlas).then(function(atlas) {
5317
- resolve(atlas.getSprite(data.fullPath));
5318
- }).catch(reject);
5319
- } else if (data.texture) {
5320
- resourceManager// @ts-ignore
5321
- .getResourceByRef(data.texture).then(function(texture) {
5322
- resolve(new miniprogram.Sprite(resourceManager.engine, texture, data.region, data.pivot, data.border));
5323
- }).catch(reject);
5324
- } else {
5325
- resolve(new miniprogram.Sprite(resourceManager.engine, null, data.region, data.pivot, data.border));
5326
- }
5327
- }).catch(reject);
5381
+ return this.request(item.url, _extends({}, item, {
5382
+ type: "json"
5383
+ })).then(function(data) {
5384
+ return data.belongToAtlas ? _this._loadFromAtlas(resourceManager, data) : _this._loadFromTexture(resourceManager, data);
5385
+ });
5386
+ };
5387
+ _proto._loadFromAtlas = function _loadFromAtlas(resourceManager, data) {
5388
+ var _this = this;
5389
+ return resourceManager// @ts-ignore
5390
+ .getResourceByRef(data.belongToAtlas).then(function(atlas) {
5391
+ return atlas.getSprite(data.fullPath) || _this._loadFromTexture(resourceManager, data);
5328
5392
  });
5329
5393
  };
5394
+ _proto._loadFromTexture = function _loadFromTexture(resourceManager, data) {
5395
+ if (data.texture) {
5396
+ return resourceManager// @ts-ignore
5397
+ .getResourceByRef(data.texture).then(function(texture) {
5398
+ var sprite = new miniprogram.Sprite(resourceManager.engine, texture, data.region, data.pivot, data.border);
5399
+ var width = data.width, height = data.height;
5400
+ isNaN(width) || (sprite.width = width);
5401
+ isNaN(height) || (sprite.height = height);
5402
+ return sprite;
5403
+ });
5404
+ } else {
5405
+ return new miniprogram.AssetPromise(function(resolve) {
5406
+ var sprite = new miniprogram.Sprite(resourceManager.engine, null, data.region, data.pivot, data.border);
5407
+ var width = data.width, height = data.height;
5408
+ isNaN(width) || (sprite.width = width);
5409
+ isNaN(height) || (sprite.height = height);
5410
+ resolve(sprite);
5411
+ });
5412
+ }
5413
+ };
5330
5414
  return SpriteLoader;
5331
5415
  }(miniprogram.Loader);
5332
5416
  SpriteLoader = __decorate([
@@ -5373,9 +5457,13 @@ var Texture2DLoader = /*#__PURE__*/ function(Loader1) {
5373
5457
  type: "image"
5374
5458
  });
5375
5459
  _this.request(url, requestConfig).then(function(image) {
5376
- var _params, _params1;
5377
- var params = item.params;
5378
- var texture = new miniprogram.Texture2D(resourceManager.engine, image.width, image.height, (_params = params) == null ? void 0 : _params.format, (_params1 = params) == null ? void 0 : _params1.mipmap);
5460
+ var _item_params;
5461
+ 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;
5462
+ var texture = new miniprogram.Texture2D(resourceManager.engine, image.width, image.height, format, mipmap);
5463
+ texture.anisoLevel = anisoLevel != null ? anisoLevel : texture.anisoLevel;
5464
+ texture.filterMode = filterMode != null ? filterMode : texture.filterMode;
5465
+ texture.wrapModeU = wrapModeU != null ? wrapModeU : texture.wrapModeU;
5466
+ texture.wrapModeV = wrapModeV != null ? wrapModeV : texture.wrapModeV;
5379
5467
  texture.setImageSource(image);
5380
5468
  texture.generateMipmaps();
5381
5469
  if (url.indexOf("data:") !== 0) {
@@ -5523,33 +5611,34 @@ var SceneLoader = /*#__PURE__*/ function(Loader1) {
5523
5611
  var promises = [];
5524
5612
  // parse ambient light
5525
5613
  var ambient = data.scene.ambient;
5526
- var useCustomAmbient = ambient.specularMode === "Custom";
5527
- if (useCustomAmbient && ambient.customAmbientLight) {
5528
- // @ts-ignore
5529
- // prettier-ignore
5530
- var customAmbientPromise = resourceManager.getResourceByRef(ambient.customAmbientLight).then(function(ambientLight) {
5531
- scene.ambientLight = ambientLight;
5532
- scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5533
- scene.ambientLight.specularIntensity = ambient.specularIntensity;
5534
- scene.ambientLight.diffuseMode = ambient.diffuseMode;
5535
- scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5536
- });
5537
- promises.push(customAmbientPromise);
5538
- } else if (!useCustomAmbient && ambient.ambientLight) {
5539
- // @ts-ignore
5540
- // prettier-ignore
5541
- var ambientLightPromise = resourceManager.getResourceByRef(ambient.ambientLight).then(function(ambientLight) {
5542
- scene.ambientLight = ambientLight;
5543
- scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5544
- scene.ambientLight.specularIntensity = ambient.specularIntensity;
5545
- scene.ambientLight.diffuseMode = ambient.diffuseMode;
5546
- scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5547
- });
5548
- promises.push(ambientLightPromise);
5549
- } else {
5614
+ if (ambient) {
5615
+ var useCustomAmbient = ambient.specularMode === "Custom";
5616
+ var useSH = ambient.diffuseMode === miniprogram.DiffuseMode.SphericalHarmonics;
5550
5617
  scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5551
5618
  scene.ambientLight.specularIntensity = ambient.specularIntensity;
5619
+ scene.ambientLight.diffuseMode = ambient.diffuseMode;
5552
5620
  scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5621
+ scene.ambientLight.specularTextureDecodeRGBM = true;
5622
+ if (useCustomAmbient && ambient.customAmbientLight) {
5623
+ promises.push(// @ts-ignore
5624
+ resourceManager.getResourceByRef(ambient.customAmbientLight).then(function(ambientLight) {
5625
+ var _ambientLight;
5626
+ scene.ambientLight.specularTexture = (_ambientLight = ambientLight) == null ? void 0 : _ambientLight.specularTexture;
5627
+ }));
5628
+ }
5629
+ if (ambient.ambientLight && (!useCustomAmbient || useSH)) {
5630
+ promises.push(// @ts-ignore
5631
+ resourceManager.getResourceByRef(ambient.ambientLight).then(function(ambientLight) {
5632
+ if (!useCustomAmbient) {
5633
+ var _ambientLight;
5634
+ scene.ambientLight.specularTexture = (_ambientLight = ambientLight) == null ? void 0 : _ambientLight.specularTexture;
5635
+ }
5636
+ if (useSH) {
5637
+ var _ambientLight1;
5638
+ scene.ambientLight.diffuseSphericalHarmonics = (_ambientLight1 = ambientLight) == null ? void 0 : _ambientLight1.diffuseSphericalHarmonics;
5639
+ }
5640
+ }));
5641
+ }
5553
5642
  }
5554
5643
  var background = data.scene.background;
5555
5644
  scene.background.mode = background.mode;
@@ -5591,6 +5680,9 @@ var SceneLoader = /*#__PURE__*/ function(Loader1) {
5591
5680
  if (shadow.shadowResolution != undefined) scene.shadowResolution = shadow.shadowResolution;
5592
5681
  if (shadow.shadowDistance != undefined) scene.shadowDistance = shadow.shadowDistance;
5593
5682
  if (shadow.shadowCascades != undefined) scene.shadowCascades = shadow.shadowCascades;
5683
+ var _shadow_shadowTwoCascadeSplits;
5684
+ scene.shadowTwoCascadeSplits = (_shadow_shadowTwoCascadeSplits = shadow.shadowTwoCascadeSplits) != null ? _shadow_shadowTwoCascadeSplits : scene.shadowTwoCascadeSplits;
5685
+ shadow.shadowFourCascadeSplits && scene.shadowFourCascadeSplits.copyFrom(shadow.shadowFourCascadeSplits);
5594
5686
  }
5595
5687
  return Promise.all(promises).then(function() {
5596
5688
  resolve(scene);
@@ -5606,13 +5698,13 @@ SceneLoader = __decorate([
5606
5698
  "scene"
5607
5699
  ], true)
5608
5700
  ], SceneLoader);
5609
- ReflectionParser.registerCustomParseComponent("TextRenderer", /*#__PURE__*/ _async_to_generator(function(instance, item, engine) {
5701
+ ReflectionParser.registerCustomParseComponent("TextRenderer", /*#__PURE__*/ _async_to_generator(function(instance, item) {
5610
5702
  var props;
5611
5703
  return __generator(this, function(_state) {
5612
5704
  props = item.props;
5613
5705
  if (!props.font) {
5614
5706
  // @ts-ignore
5615
- instance.font = miniprogram.Font.createFromOS(engine, props.fontFamily || "Arial");
5707
+ instance.font = miniprogram.Font.createFromOS(instance.engine, props.fontFamily || "Arial");
5616
5708
  }
5617
5709
  return [
5618
5710
  2,
@@ -5668,7 +5760,7 @@ var KHR_draco_mesh_compression = (_KHR_draco_mesh_compression = /*#__PURE__*/ fu
5668
5760
  throw "BlendShape animation is not supported when using draco.";
5669
5761
  }, function() {
5670
5762
  return decodedGeometry.index.array;
5671
- }, context.keepMeshData);
5763
+ }, context.params.keepMeshData);
5672
5764
  });
5673
5765
  });
5674
5766
  };