@galacean/engine-loader 1.1.0-beta.4 → 1.1.0-beta.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/main.js +393 -256
  2. package/dist/main.js.map +1 -1
  3. package/dist/miniprogram.js +393 -256
  4. package/dist/module.js +395 -258
  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/extensions/EXT_meshopt_compression.d.ts +13 -0
  11. package/types/gltf/extensions/KHR_materials_anisotropy.d.ts +1 -0
  12. package/types/gltf/extensions/MeshoptDecoder.d.ts +8 -0
  13. package/types/gltf/parser/GLTFBufferViewParser.d.ts +5 -0
  14. package/types/gltf/parser/GLTFParserContext.d.ts +4 -2
  15. package/types/gltf/parser/GLTFSceneParser.d.ts +0 -1
  16. package/types/index.d.ts +2 -1
  17. package/types/ktx2/KTX2Loader.d.ts +16 -5
  18. package/types/ktx2/transcoder/AbstractTranscoder.d.ts +1 -1
  19. package/types/ktx2/transcoder/BinomialLLCTranscoder.d.ts +1 -1
  20. package/types/ktx2/transcoder/BinomialLLCWorkerCode.d.ts +1 -1
  21. package/types/resource-deserialize/resources/parser/HierarchyParser.d.ts +36 -0
  22. package/types/resource-deserialize/resources/parser/ParserContext.d.ts +29 -0
  23. package/types/resource-deserialize/resources/parser/ReflectionParser.d.ts +12 -8
  24. package/types/resource-deserialize/resources/prefab/PrefabParser.d.ts +13 -4
  25. package/types/resource-deserialize/resources/prefab/PrefabParserContext.d.ts +5 -0
  26. package/types/resource-deserialize/resources/scene/SceneParser.d.ts +1 -0
  27. package/types/resource-deserialize/resources/scene/SceneParserContext.d.ts +3 -1
  28. package/types/resource-deserialize/resources/schema/BasicSchema.d.ts +20 -15
  29. package/types/resource-deserialize/resources/schema/MaterialSchema.d.ts +1 -1
  30. package/types/resource-deserialize/resources/schema/SceneSchema.d.ts +3 -1
  31. package/types/resource-deserialize/utils/BufferReader.d.ts +1 -1
@@ -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
  }
@@ -528,87 +527,50 @@ function _construct(Parent, args, Class) {
528
527
  }
529
528
 
530
529
  var ReflectionParser = /*#__PURE__*/ function() {
531
- function ReflectionParser() {}
532
- ReflectionParser.registerCustomParseComponent = function registerCustomParseComponent(componentType, handle) {
533
- this.customParseComponentHandles[componentType] = handle;
534
- };
535
- ReflectionParser.parseEntity = function parseEntity(entityConfig, engine) {
536
- return ReflectionParser.getEntityByConfig(entityConfig, engine).then(function(entity) {
530
+ function ReflectionParser(_context) {
531
+ this._context = _context;
532
+ }
533
+ var _proto = ReflectionParser.prototype;
534
+ _proto.parseEntity = function parseEntity(entityConfig) {
535
+ return this._getEntityByConfig(entityConfig).then(function(entity) {
537
536
  var _entityConfig_isActive;
538
537
  entity.isActive = (_entityConfig_isActive = entityConfig.isActive) != null ? _entityConfig_isActive : true;
539
538
  var position = entityConfig.position, rotation = entityConfig.rotation, scale = entityConfig.scale;
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
- ReflectionParser.getEntityByConfig = function getEntityByConfig(entityConfig, engine) {
547
- // @ts-ignore
548
- var assetRefId = entityConfig.assetRefId;
549
- if (assetRefId) {
550
- return engine.resourceManager// @ts-ignore
551
- .getResourceByRef({
552
- refId: assetRefId,
553
- key: entityConfig.key,
554
- isClone: entityConfig.isClone
555
- }).then(function(entity) {
556
- entity.name = entityConfig.name;
557
- return entity;
558
- });
559
- } else {
560
- var entity = new miniprogram.Entity(engine, entityConfig.name);
561
- return Promise.resolve(entity);
562
- }
563
- };
564
- ReflectionParser.parseClassObject = function parseClassObject(item, engine, resourceManager) {
565
- if (resourceManager === void 0) resourceManager = engine.resourceManager;
547
+ _proto.parseClassObject = function parseClassObject(item) {
548
+ var _this = this;
566
549
  var Class = miniprogram.Loader.getClass(item.class);
567
550
  var _item_constructParams;
568
551
  var params = (_item_constructParams = item.constructParams) != null ? _item_constructParams : [];
569
- var instance = _construct(Class, [].concat(params));
570
- return this.parsePropsAndMethods(instance, item, engine, resourceManager);
571
- };
572
- ReflectionParser.parseBasicType = function parseBasicType(value, engine, resourceManager) {
573
- if (resourceManager === void 0) resourceManager = engine.resourceManager;
574
- var _this = this;
575
- if (Array.isArray(value)) {
576
- return Promise.all(value.map(function(item) {
577
- return _this.parseBasicType(item, engine, resourceManager);
578
- }));
579
- } else if (typeof value === "object" && value != null) {
580
- if (this._isClass(value)) {
581
- // class object
582
- return this.parseClassObject(value, engine, resourceManager);
583
- } else if (this._isRef(value)) {
584
- // reference object
585
- return resourceManager.getResourceByRef(value);
586
- } else {
587
- // basic type
588
- return Promise.resolve(value);
589
- }
590
- } else {
591
- return Promise.resolve(value);
592
- }
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
+ });
593
559
  };
594
- ReflectionParser.parsePropsAndMethods = function parsePropsAndMethods(instance, item, engine, resourceManager) {
595
- if (resourceManager === void 0) resourceManager = engine.resourceManager;
596
- var _this = this;
560
+ _proto.parsePropsAndMethods = function parsePropsAndMethods(instance, item) {
597
561
  var promises = [];
598
562
  if (item.methods) {
599
563
  for(var methodName in item.methods){
600
564
  var methodParams = item.methods[methodName];
601
565
  for(var i = 0, count = methodParams.length; i < count; i++){
602
- var params = methodParams[i];
603
- var promise = this.parseMethod(instance, methodName, params, engine, resourceManager);
604
- promises.push(promise);
566
+ promises.push(this.parseMethod(instance, methodName, methodParams[i]));
605
567
  }
606
568
  }
607
569
  }
608
570
  if (item.props) {
609
- var _this1 = this, _loop = function(key) {
571
+ var _this = this, _loop = function(key) {
610
572
  var value = item.props[key];
611
- var promise = _this1.parseBasicType(value, engine).then(function(v) {
573
+ var promise = _this.parseBasicType(value, instance[key]).then(function(v) {
612
574
  return instance[key] = v;
613
575
  });
614
576
  promises.push(promise);
@@ -616,27 +578,96 @@ var ReflectionParser = /*#__PURE__*/ function() {
616
578
  for(var key in item.props)_loop(key);
617
579
  }
618
580
  return Promise.all(promises).then(function() {
619
- var handle = _this.customParseComponentHandles[instance.constructor.name];
620
- if (handle) return handle(instance, item, engine);
581
+ var handle = ReflectionParser.customParseComponentHandles[instance.constructor.name];
582
+ if (handle) return handle(instance, item);
621
583
  else return instance;
622
584
  });
623
585
  };
624
- ReflectionParser.parseMethod = function parseMethod(instance, methodName, methodParams, engine, resourceManager) {
625
- if (resourceManager === void 0) resourceManager = engine.resourceManager;
586
+ _proto.parseMethod = function parseMethod(instance, methodName, methodParams) {
626
587
  var _this = this;
627
588
  return Promise.all(methodParams.map(function(param) {
628
- return _this.parseBasicType(param, engine, resourceManager);
589
+ return _this.parseBasicType(param);
629
590
  })).then(function(result) {
630
591
  var _instance;
631
592
  return (_instance = instance)[methodName].apply(_instance, [].concat(result));
632
593
  });
633
594
  };
595
+ _proto.parseBasicType = function parseBasicType(value, originValue) {
596
+ var _this = this;
597
+ if (Array.isArray(value)) {
598
+ return Promise.all(value.map(function(item) {
599
+ return _this.parseBasicType(item);
600
+ }));
601
+ } else if (typeof value === "object" && value != null) {
602
+ if (ReflectionParser._isClass(value)) {
603
+ // class object
604
+ return this.parseClassObject(value);
605
+ } else if (ReflectionParser._isAssetRef(value)) {
606
+ // reference object
607
+ // @ts-ignore
608
+ return this._context.resourceManager.getResourceByRef(value);
609
+ } else if (ReflectionParser._isEntityRef(value)) {
610
+ // entity reference
611
+ return Promise.resolve(this._context.entityMap.get(value.entityId));
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
+ });
635
+ }
636
+ }
637
+ // primitive type
638
+ return Promise.resolve(value);
639
+ };
640
+ _proto._getEntityByConfig = function _getEntityByConfig(entityConfig) {
641
+ // @ts-ignore
642
+ var assetRefId = entityConfig.assetRefId;
643
+ var engine = this._context.engine;
644
+ if (assetRefId) {
645
+ return engine.resourceManager// @ts-ignore
646
+ .getResourceByRef({
647
+ refId: assetRefId,
648
+ key: entityConfig.key,
649
+ isClone: entityConfig.isClone
650
+ }).then(function(entity) {
651
+ entity.name = entityConfig.name;
652
+ return entity;
653
+ });
654
+ } else {
655
+ var entity = new miniprogram.Entity(engine, entityConfig.name);
656
+ return Promise.resolve(entity);
657
+ }
658
+ };
659
+ ReflectionParser.registerCustomParseComponent = function registerCustomParseComponent(componentType, handle) {
660
+ this.customParseComponentHandles[componentType] = handle;
661
+ };
634
662
  ReflectionParser._isClass = function _isClass(value) {
635
663
  return value["class"] != undefined;
636
664
  };
637
- ReflectionParser._isRef = function _isRef(value) {
665
+ ReflectionParser._isAssetRef = function _isAssetRef(value) {
638
666
  return value["refId"] != undefined;
639
667
  };
668
+ ReflectionParser._isEntityRef = function _isEntityRef(value) {
669
+ return value["entityId"] != undefined;
670
+ };
640
671
  return ReflectionParser;
641
672
  }();
642
673
  (function() {
@@ -904,6 +935,8 @@ var SceneParserContext = /*#__PURE__*/ function() {
904
935
  this.assets = new Map();
905
936
  this.entityConfigMap = new Map();
906
937
  this.rootIds = [];
938
+ this.engine = scene.engine;
939
+ this.resourceManager = scene.engine.resourceManager;
907
940
  }
908
941
  var _proto = SceneParserContext.prototype;
909
942
  _proto.destroy = function destroy() {
@@ -920,7 +953,7 @@ var SceneParserContext = /*#__PURE__*/ function() {
920
953
  function SceneParser(context) {
921
954
  var _this = this;
922
955
  this.context = context;
923
- this._engine = this.context.scene.engine;
956
+ this._engine = context.scene.engine;
924
957
  this._organizeEntities = this._organizeEntities.bind(this);
925
958
  this._parseComponents = this._parseComponents.bind(this);
926
959
  this._clearAndResolveScene = this._clearAndResolveScene.bind(this);
@@ -928,22 +961,24 @@ var SceneParserContext = /*#__PURE__*/ function() {
928
961
  _this._reject = reject;
929
962
  _this._resolve = resolve;
930
963
  });
964
+ this._reflectionParser = new ReflectionParser(context);
931
965
  }
932
966
  var _proto = SceneParser.prototype;
933
967
  /** start parse the scene */ _proto.start = function start() {
934
968
  this._parseEntities().then(this._organizeEntities).then(this._parseComponents).then(this._clearAndResolveScene).then(this._resolve).catch(this._reject);
935
969
  };
936
970
  _proto._parseEntities = function _parseEntities() {
971
+ var _this = this;
937
972
  var entitiesConfig = this.context.originalData.entities;
938
973
  var entityConfigMap = this.context.entityConfigMap;
939
974
  var entitiesMap = this.context.entityMap;
940
975
  var rootIds = this.context.rootIds;
941
- var engine = this._engine;
976
+ this._engine;
942
977
  var promises = entitiesConfig.map(function(entityConfig) {
943
978
  entityConfigMap.set(entityConfig.id, entityConfig);
944
979
  // record root entities
945
980
  if (!entityConfig.parent) rootIds.push(entityConfig.id);
946
- return ReflectionParser.parseEntity(entityConfig, engine);
981
+ return _this._reflectionParser.parseEntity(entityConfig);
947
982
  });
948
983
  return Promise.all(promises).then(function(entities) {
949
984
  for(var i = 0, l = entities.length; i < l; i++){
@@ -981,7 +1016,7 @@ var SceneParserContext = /*#__PURE__*/ function() {
981
1016
  component = entity.getComponent(miniprogram.Loader.getClass(key));
982
1017
  }
983
1018
  component = component || entity.addComponent(miniprogram.Loader.getClass(key));
984
- var promise = ReflectionParser.parsePropsAndMethods(component, componentConfig, entity.engine);
1019
+ var promise = this._reflectionParser.parsePropsAndMethods(component, componentConfig);
985
1020
  promises.push(promise);
986
1021
  }
987
1022
  }
@@ -1537,10 +1572,10 @@ var TextureWrapMode;
1537
1572
  /**
1538
1573
  * @internal
1539
1574
  */ var GLTFParserContext = /*#__PURE__*/ function() {
1540
- function GLTFParserContext(glTFResource, resourceManager, keepMeshData) {
1575
+ function GLTFParserContext(glTFResource, resourceManager, params) {
1541
1576
  this.glTFResource = glTFResource;
1542
1577
  this.resourceManager = resourceManager;
1543
- this.keepMeshData = keepMeshData;
1578
+ this.params = params;
1544
1579
  this.accessorBufferCache = {};
1545
1580
  this._resourceCache = new Map();
1546
1581
  this.contentRestorer = new GLTFContentRestorer(glTFResource);
@@ -1594,11 +1629,37 @@ var TextureWrapMode;
1594
1629
  _this.get(9),
1595
1630
  _this.get(2)
1596
1631
  ]).then(function() {
1632
+ var glTFResource = _this.glTFResource;
1633
+ if (glTFResource.skins || glTFResource.animations) {
1634
+ _this._createAnimator(_this, glTFResource.animations);
1635
+ }
1597
1636
  _this.resourceManager.addContentRestorer(_this.contentRestorer);
1598
- return _this.glTFResource;
1637
+ return glTFResource;
1599
1638
  });
1600
1639
  });
1601
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
+ };
1602
1663
  _proto._handleSubAsset = function _handleSubAsset(resource, type, index) {
1603
1664
  var _this = this;
1604
1665
  var glTFResourceKey = glTFResourceMap[type];
@@ -2238,7 +2299,7 @@ var SupercompressionScheme;
2238
2299
  alphaSliceByteLength: sgdReader.nextUint32()
2239
2300
  };
2240
2301
  }
2241
- var endpointsByteOffset = sgdByteOffset + sgdReader.offset;
2302
+ var endpointsByteOffset = sgdByteOffset + sgdReader.position;
2242
2303
  var selectorsByteOffset = endpointsByteOffset + endpointsByteLength;
2243
2304
  var tablesByteOffset = selectorsByteOffset + selectorsByteLength;
2244
2305
  var extendedByteOffset = tablesByteOffset + tablesByteLength;
@@ -2430,6 +2491,25 @@ var AbstractTranscoder = /*#__PURE__*/ function() {
2430
2491
  }();
2431
2492
 
2432
2493
  /** @internal */ function TranscodeWorkerCode$1() {
2494
+ var initPromise;
2495
+ var init = function init(wasmBinary) {
2496
+ if (!initPromise) {
2497
+ initPromise = new Promise(function(resolve, reject) {
2498
+ var BasisModule = {
2499
+ wasmBinary: wasmBinary,
2500
+ onRuntimeInitialized: function() {
2501
+ return resolve(BasisModule);
2502
+ },
2503
+ onAbort: reject
2504
+ };
2505
+ self["BASIS"](BasisModule);
2506
+ }).then(function(BasisModule) {
2507
+ BasisModule.initializeBasis();
2508
+ return BasisModule.KTX2File;
2509
+ });
2510
+ }
2511
+ return initPromise;
2512
+ };
2433
2513
  self.onmessage = function onmessage(event) {
2434
2514
  var message = event.data;
2435
2515
  switch(message.type){
@@ -2544,6 +2624,10 @@ function transcode(buffer, targetFormat, KTX2File) {
2544
2624
  cleanup();
2545
2625
  throw new Error("Invalid or unsupported .ktx2 file");
2546
2626
  }
2627
+ if (!ktx2File.startTranscoding()) {
2628
+ cleanup();
2629
+ throw new Error("KTX2 startTranscoding failed");
2630
+ }
2547
2631
  var width = ktx2File.getWidth();
2548
2632
  var height = ktx2File.getHeight();
2549
2633
  var layerCount = ktx2File.getLayers() || 1;
@@ -2552,6 +2636,7 @@ function transcode(buffer, targetFormat, KTX2File) {
2552
2636
  var faceCount = ktx2File.getFaces();
2553
2637
  var format = getTranscodeFormatFromTarget(targetFormat, hasAlpha);
2554
2638
  var faces = new Array(faceCount);
2639
+ var isBC = format === 2 || format === 3 || format === 7;
2555
2640
  for(var face = 0; face < faceCount; face++){
2556
2641
  var mipmaps = new Array(levelCount);
2557
2642
  for(var mip = 0; mip < levelCount; mip++){
@@ -2559,8 +2644,15 @@ function transcode(buffer, targetFormat, KTX2File) {
2559
2644
  var mipWidth = void 0, mipHeight = void 0;
2560
2645
  for(var layer = 0; layer < layerCount; layer++){
2561
2646
  var levelInfo = ktx2File.getImageLevelInfo(mip, layer, face);
2562
- mipWidth = levelInfo.origWidth;
2563
- mipHeight = levelInfo.origHeight;
2647
+ // see: https://github.com/KhronosGroup/KTX-Software/issues/254
2648
+ if (isBC && mip === 0 && (width !== levelInfo.width || height !== levelInfo.height)) {
2649
+ width = mipWidth = levelInfo.width;
2650
+ height = mipHeight = levelInfo.height;
2651
+ 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.");
2652
+ } else {
2653
+ mipWidth = levelInfo.origWidth;
2654
+ mipHeight = levelInfo.origHeight;
2655
+ }
2564
2656
  var dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, format));
2565
2657
  var status = ktx2File.transcodeImage(dst, mip, layer, face, format, 0, -1, -1);
2566
2658
  if (!status) {
@@ -2626,7 +2718,7 @@ function transcode(buffer, targetFormat, KTX2File) {
2626
2718
  } else {
2627
2719
  var funcCode = TranscodeWorkerCode$1.toString();
2628
2720
  var transcodeString = funcCode.substring(funcCode.indexOf("{"), funcCode.lastIndexOf("}") + 1);
2629
- var workerCode = "\n " + jsCode + "\n var init = (" + _init.toString() + ")();\n " + transcode.toString() + "\n " + transcodeString + "\n ";
2721
+ var workerCode = "\n " + jsCode + "\n " + transcode.toString() + "\n " + transcodeString + "\n ";
2630
2722
  var workerURL = engineMiniprogramAdapter.URL.createObjectURL(new engineMiniprogramAdapter.Blob([
2631
2723
  workerCode
2632
2724
  ], {
@@ -2872,10 +2964,14 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2872
2964
  return Loader1.apply(this, arguments);
2873
2965
  }
2874
2966
  var _proto = KTX2Loader1.prototype;
2875
- _proto.initialize = function initialize(engine, configuration) {
2967
+ _proto.initialize = function initialize(_, configuration) {
2876
2968
  if (configuration.ktx2Loader) {
2877
2969
  var options = configuration.ktx2Loader;
2878
- if (this._isKhronosSupported(options.priorityFormats, engine) && options.workerCount !== 0) {
2970
+ if (options.priorityFormats) {
2971
+ exports.KTX2Loader._priorityFormats["etc1s"] = options.priorityFormats;
2972
+ exports.KTX2Loader._priorityFormats["uastc"] = options.priorityFormats;
2973
+ }
2974
+ if (options.transcoder === /** Khronos transcoder. */ 1) {
2879
2975
  return exports.KTX2Loader._getKhronosTranscoder(options.workerCount).init();
2880
2976
  } else {
2881
2977
  return exports.KTX2Loader._getBinomialLLCTranscoder(options.workerCount).init();
@@ -2894,27 +2990,6 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2894
2990
  });
2895
2991
  });
2896
2992
  };
2897
- _proto._isKhronosSupported = function _isKhronosSupported(priorityFormats, engine) {
2898
- if (priorityFormats === void 0) priorityFormats = [
2899
- exports.KTX2TargetFormat.ASTC,
2900
- exports.KTX2TargetFormat.ETC,
2901
- exports.KTX2TargetFormat.BC7,
2902
- exports.KTX2TargetFormat.BC1_BC3,
2903
- exports.KTX2TargetFormat.PVRTC,
2904
- exports.KTX2TargetFormat.R8G8B8A8
2905
- ];
2906
- var supportedList = new Array();
2907
- if (Array.isArray(priorityFormats[0])) {
2908
- for(var i = 0; i < priorityFormats.length; i++){
2909
- supportedList.push(exports.KTX2Loader._detectSupportedFormat(engine._hardwareRenderer, priorityFormats[i]));
2910
- }
2911
- } else {
2912
- supportedList.push(exports.KTX2Loader._detectSupportedFormat(engine._hardwareRenderer, priorityFormats));
2913
- }
2914
- return supportedList.every(function(format) {
2915
- return KhronosTranscoder.transcoderMap[format];
2916
- });
2917
- };
2918
2993
  /**
2919
2994
  * Destroy ktx2 transcoder worker.
2920
2995
  */ KTX2Loader1.destroy = function destroy() {
@@ -2927,7 +3002,8 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2927
3002
  /** @internal */ KTX2Loader1._parseBuffer = function _parseBuffer(buffer, engine, params) {
2928
3003
  var _params;
2929
3004
  var ktx2Container = new KTX2Container(buffer);
2930
- var formatPriorities = (_params = params) == null ? void 0 : _params.priorityFormats;
3005
+ var _params_priorityFormats;
3006
+ var formatPriorities = (_params_priorityFormats = (_params = params) == null ? void 0 : _params.priorityFormats) != null ? _params_priorityFormats : exports.KTX2Loader._priorityFormats[ktx2Container.isUASTC ? "uastc" : "etc1s"];
2931
3007
  var targetFormat = exports.KTX2Loader._decideTargetFormat(engine, ktx2Container, formatPriorities);
2932
3008
  var transcodeResultPromise;
2933
3009
  if (exports.KTX2Loader._isBinomialInit || !KhronosTranscoder.transcoderMap[targetFormat] || !ktx2Container.isUASTC) {
@@ -2994,18 +3070,22 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2994
3070
  return targetFormat;
2995
3071
  };
2996
3072
  KTX2Loader1._detectSupportedFormat = function _detectSupportedFormat(renderer, priorityFormats) {
2997
- if (priorityFormats === void 0) priorityFormats = [
2998
- exports.KTX2TargetFormat.ASTC,
2999
- exports.KTX2TargetFormat.ETC,
3000
- exports.KTX2TargetFormat.BC7,
3001
- exports.KTX2TargetFormat.BC1_BC3,
3002
- exports.KTX2TargetFormat.PVRTC
3003
- ];
3004
3073
  for(var i = 0; i < priorityFormats.length; i++){
3005
- var capabilities = this._supportedMap[priorityFormats[i]];
3006
- for(var j = 0; j < capabilities.length; j++){
3007
- if (renderer.canIUse(capabilities[j])) {
3008
- return priorityFormats[i];
3074
+ var format = priorityFormats[i];
3075
+ var capabilities = this._supportedMap[format];
3076
+ if (capabilities) {
3077
+ for(var j = 0; j < capabilities.length; j++){
3078
+ if (renderer.canIUse(capabilities[j])) {
3079
+ return format;
3080
+ }
3081
+ }
3082
+ } else {
3083
+ switch(priorityFormats[i]){
3084
+ case exports.KTX2TargetFormat.R8G8B8A8:
3085
+ return format;
3086
+ case exports.KTX2TargetFormat.R8:
3087
+ case exports.KTX2TargetFormat.R8G8:
3088
+ if (renderer.isWebGL2) return format;
3009
3089
  }
3010
3090
  }
3011
3091
  }
@@ -3042,6 +3122,23 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
3042
3122
  return KTX2Loader1;
3043
3123
  }(miniprogram.Loader), function() {
3044
3124
  _KTX2Loader._isBinomialInit = false;
3125
+ }(), function() {
3126
+ _KTX2Loader._priorityFormats = {
3127
+ etc1s: [
3128
+ exports.KTX2TargetFormat.ETC,
3129
+ exports.KTX2TargetFormat.BC7,
3130
+ exports.KTX2TargetFormat.ASTC,
3131
+ exports.KTX2TargetFormat.BC1_BC3,
3132
+ exports.KTX2TargetFormat.PVRTC
3133
+ ],
3134
+ uastc: [
3135
+ exports.KTX2TargetFormat.ASTC,
3136
+ exports.KTX2TargetFormat.BC7,
3137
+ exports.KTX2TargetFormat.ETC,
3138
+ exports.KTX2TargetFormat.BC1_BC3,
3139
+ exports.KTX2TargetFormat.PVRTC
3140
+ ]
3141
+ };
3045
3142
  }(), function() {
3046
3143
  var _obj;
3047
3144
  _KTX2Loader._supportedMap = (_obj = {}, _obj[exports.KTX2TargetFormat.ASTC] = [
@@ -3062,6 +3159,11 @@ exports.KTX2Loader = __decorate([
3062
3159
  "ktx2"
3063
3160
  ])
3064
3161
  ], exports.KTX2Loader);
3162
+ exports.KTX2Transcoder = void 0;
3163
+ (function(KTX2Transcoder) {
3164
+ KTX2Transcoder[KTX2Transcoder[/** BinomialLLC transcoder. */ "BinomialLLC"] = 0] = "BinomialLLC";
3165
+ KTX2Transcoder[KTX2Transcoder["Khronos"] = 1] = "Khronos";
3166
+ })(exports.KTX2Transcoder || (exports.KTX2Transcoder = {}));
3065
3167
 
3066
3168
  /**
3067
3169
  * @internal
@@ -3505,6 +3607,7 @@ exports.GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3505
3607
  var promises = new Array();
3506
3608
  // parse samplers
3507
3609
  for(var j = 0, m = samplers.length; j < m; j++)_loop(j);
3610
+ promises.push(context.get(exports.GLTFParserType.Scene));
3508
3611
  return Promise.all(promises).then(function() {
3509
3612
  for(var j = 0, m = channels.length; j < m; j++){
3510
3613
  var gltfChannel = channels[j];
@@ -3516,6 +3619,10 @@ exports.GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3516
3619
  relativePath = relativePath === "" ? "" + entity.name : entity.name + "/" + relativePath;
3517
3620
  entity = entity.parent;
3518
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
+ }
3519
3626
  var ComponentType = void 0;
3520
3627
  var propertyName = void 0;
3521
3628
  switch(target.path){
@@ -3852,7 +3959,7 @@ exports.GLTFMeshParser = (_GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1)
3852
3959
  return context.get(exports.GLTFParserType.Buffer).then(function(buffers) {
3853
3960
  return GLTFUtils.getAccessorData(glTF, indexAccessor, buffers);
3854
3961
  });
3855
- }, context.keepMeshData).then(resolve);
3962
+ }, context.params.keepMeshData).then(resolve);
3856
3963
  }
3857
3964
  });
3858
3965
  };
@@ -4030,9 +4137,9 @@ exports.GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4030
4137
  }
4031
4138
  var _proto = GLTFSceneParser.prototype;
4032
4139
  _proto.parse = function parse(context, index) {
4033
- var _this = this;
4034
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;
4035
4141
  var sceneInfo = scenes[index];
4142
+ var sceneExtensions = sceneInfo.extensions;
4036
4143
  var engine = glTFResource.engine;
4037
4144
  var isDefaultScene = scene === index;
4038
4145
  var sceneNodes = sceneInfo.nodes;
@@ -4058,18 +4165,7 @@ exports.GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4058
4165
  promises.push(this._parseEntityComponent(context, sceneNodes[i1]));
4059
4166
  }
4060
4167
  return Promise.all(promises).then(function() {
4061
- if (isDefaultScene) {
4062
- return Promise.all([
4063
- context.get(exports.GLTFParserType.Skin),
4064
- context.get(exports.GLTFParserType.Animation)
4065
- ]).then(function(param) {
4066
- var skins = param[0], animations = param[1];
4067
- if (skins || animations) {
4068
- _this._createAnimator(context, animations);
4069
- }
4070
- return sceneRoot;
4071
- });
4072
- }
4168
+ GLTFParser.executeExtensionsAdditiveAndParse(sceneExtensions, context, sceneRoot, sceneInfo);
4073
4169
  return sceneRoot;
4074
4170
  });
4075
4171
  };
@@ -4181,28 +4277,6 @@ exports.GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4181
4277
  for(var i = 0; i < glTFMeshPrimitives.length; i++)_loop(i);
4182
4278
  return Promise.all(promises);
4183
4279
  };
4184
- _proto._createAnimator = function _createAnimator(context, animations) {
4185
- var defaultSceneRoot = context.glTFResource.defaultSceneRoot;
4186
- var animator = defaultSceneRoot.addComponent(miniprogram.Animator);
4187
- var animatorController = new miniprogram.AnimatorController();
4188
- var layer = new miniprogram.AnimatorControllerLayer("layer");
4189
- var animatorStateMachine = new miniprogram.AnimatorStateMachine();
4190
- animatorController.addLayer(layer);
4191
- animator.animatorController = animatorController;
4192
- layer.stateMachine = animatorStateMachine;
4193
- if (animations) {
4194
- for(var i = 0; i < animations.length; i++){
4195
- var animationClip = animations[i];
4196
- var name = animationClip.name;
4197
- var uniqueName = animatorStateMachine.makeUniqueStateName(name);
4198
- if (uniqueName !== name) {
4199
- console.warn("AnimatorState name is existed, name: " + name + " reset to " + uniqueName);
4200
- }
4201
- var animatorState = animatorStateMachine.addState(uniqueName);
4202
- animatorState.clip = animationClip;
4203
- }
4204
- }
4205
- };
4206
4280
  _proto._computeLocalBounds = function _computeLocalBounds(skinnedMeshRenderer, mesh, bones, rootBone, inverseBindMatrices) {
4207
4281
  var rootBoneIndex = bones.indexOf(rootBone);
4208
4282
  if (rootBoneIndex !== -1) {
@@ -4352,8 +4426,7 @@ exports.GLTFTextureParser = (_GLTFTextureParser = /*#__PURE__*/ function(GLTFPar
4352
4426
  mipmap: (_samplerInfo = samplerInfo) == null ? void 0 : _samplerInfo.mipmap
4353
4427
  }
4354
4428
  }).then(function(texture) {
4355
- var _texture;
4356
- (_texture = texture).name || (_texture.name = textureName || imageName || "texture_" + index);
4429
+ texture.name = textureName || imageName || texture.name || "texture_" + index;
4357
4430
  useSampler && GLTFUtils.parseSampler(texture, samplerInfo);
4358
4431
  return texture;
4359
4432
  });
@@ -4435,11 +4508,12 @@ var GLTFLoader = /*#__PURE__*/ function(Loader1) {
4435
4508
  }
4436
4509
  var _proto = GLTFLoader.prototype;
4437
4510
  _proto.load = function load(item, resourceManager) {
4438
- var _params;
4439
4511
  var url = item.url;
4440
4512
  var params = item.params;
4441
4513
  var glTFResource = new GLTFResource(resourceManager.engine, url);
4442
- 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));
4443
4517
  return context.parse();
4444
4518
  };
4445
4519
  return GLTFLoader;
@@ -5087,6 +5161,12 @@ var MaterialLoader = /*#__PURE__*/ function(Loader1) {
5087
5161
  materialShaderData.setTexture(key, texture);
5088
5162
  }));
5089
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;
5090
5170
  }
5091
5171
  };
5092
5172
  var engine = resourceManager.engine;
@@ -5222,9 +5302,10 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader1) {
5222
5302
  var _loop = function(i) {
5223
5303
  var atlasItem = atlasItems[i];
5224
5304
  if (atlasItem.img) {
5305
+ var _atlasItem_type;
5225
5306
  chainPromises.push(resourceManager.load({
5226
5307
  url: miniprogram.Utils.resolveAbsoluteUrl(item.url, atlasItem.img),
5227
- type: miniprogram.AssetType.Texture2D,
5308
+ type: (_atlasItem_type = atlasItem.type) != null ? _atlasItem_type : miniprogram.AssetType.Texture2D,
5228
5309
  params: {
5229
5310
  format: format,
5230
5311
  mipmap: mipmap
@@ -5264,7 +5345,7 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader1) {
5264
5345
  };
5265
5346
  _proto._makeSprite = function _makeSprite(engine, config, texture) {
5266
5347
  // Generate a SpriteAtlas object.
5267
- 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;
5268
5349
  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);
5269
5350
  if (texture) {
5270
5351
  var invW = 1 / texture.width;
@@ -5276,6 +5357,8 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader1) {
5276
5357
  }
5277
5358
  config.atlasRotated && (sprite.atlasRotated = true);
5278
5359
  }
5360
+ isNaN(width) || (sprite.width = width);
5361
+ isNaN(height) || (sprite.height = height);
5279
5362
  return sprite;
5280
5363
  };
5281
5364
  return SpriteAtlasLoader;
@@ -5294,26 +5377,39 @@ var SpriteLoader = /*#__PURE__*/ function(Loader1) {
5294
5377
  var _proto = SpriteLoader.prototype;
5295
5378
  _proto.load = function load(item, resourceManager) {
5296
5379
  var _this = this;
5297
- return new miniprogram.AssetPromise(function(resolve, reject) {
5298
- _this.request(item.url, _extends({}, item, {
5299
- type: "json"
5300
- })).then(function(data) {
5301
- if (data.belongToAtlas) {
5302
- resourceManager// @ts-ignore
5303
- .getResourceByRef(data.belongToAtlas).then(function(atlas) {
5304
- resolve(atlas.getSprite(data.fullPath));
5305
- }).catch(reject);
5306
- } else if (data.texture) {
5307
- resourceManager// @ts-ignore
5308
- .getResourceByRef(data.texture).then(function(texture) {
5309
- resolve(new miniprogram.Sprite(resourceManager.engine, texture, data.region, data.pivot, data.border));
5310
- }).catch(reject);
5311
- } else {
5312
- resolve(new miniprogram.Sprite(resourceManager.engine, null, data.region, data.pivot, data.border));
5313
- }
5314
- }).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);
5315
5391
  });
5316
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 miniprogram.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 miniprogram.AssetPromise(function(resolve) {
5405
+ var sprite = new miniprogram.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
+ };
5317
5413
  return SpriteLoader;
5318
5414
  }(miniprogram.Loader);
5319
5415
  SpriteLoader = __decorate([
@@ -5360,9 +5456,13 @@ var Texture2DLoader = /*#__PURE__*/ function(Loader1) {
5360
5456
  type: "image"
5361
5457
  });
5362
5458
  _this.request(url, requestConfig).then(function(image) {
5363
- var _params, _params1;
5364
- var params = item.params;
5365
- 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);
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 miniprogram.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;
5366
5466
  texture.setImageSource(image);
5367
5467
  texture.generateMipmaps();
5368
5468
  if (url.indexOf("data:") !== 0) {
@@ -5460,6 +5560,39 @@ TextureCubeLoader = __decorate([
5460
5560
  ])
5461
5561
  ], TextureCubeLoader);
5462
5562
 
5563
+ var ProjectLoader = /*#__PURE__*/ function(Loader1) {
5564
+ _inherits(ProjectLoader, Loader1);
5565
+ function ProjectLoader() {
5566
+ return Loader1.apply(this, arguments);
5567
+ }
5568
+ var _proto = ProjectLoader.prototype;
5569
+ _proto.load = function load(item, resourceManager) {
5570
+ var _this = this;
5571
+ var engine = resourceManager.engine;
5572
+ return new miniprogram.AssetPromise(function(resolve, reject) {
5573
+ _this.request(item.url, {
5574
+ type: "json"
5575
+ }).then(function(data) {
5576
+ // @ts-ignore
5577
+ engine.resourceManager.initVirtualResources(data.files);
5578
+ return resourceManager.load({
5579
+ type: miniprogram.AssetType.Scene,
5580
+ url: data.scene
5581
+ }).then(function(scene) {
5582
+ engine.sceneManager.activeScene = scene;
5583
+ resolve();
5584
+ });
5585
+ }).catch(reject);
5586
+ });
5587
+ };
5588
+ return ProjectLoader;
5589
+ }(miniprogram.Loader);
5590
+ ProjectLoader = __decorate([
5591
+ miniprogram.resourceLoader(miniprogram.AssetType.Project, [
5592
+ "proj"
5593
+ ], false)
5594
+ ], ProjectLoader);
5595
+
5463
5596
  var SceneLoader = /*#__PURE__*/ function(Loader1) {
5464
5597
  _inherits(SceneLoader, Loader1);
5465
5598
  function SceneLoader() {
@@ -5477,33 +5610,34 @@ var SceneLoader = /*#__PURE__*/ function(Loader1) {
5477
5610
  var promises = [];
5478
5611
  // parse ambient light
5479
5612
  var ambient = data.scene.ambient;
5480
- var useCustomAmbient = ambient.specularMode === "Custom";
5481
- if (useCustomAmbient && ambient.customAmbientLight) {
5482
- // @ts-ignore
5483
- // prettier-ignore
5484
- var customAmbientPromise = resourceManager.getResourceByRef(ambient.customAmbientLight).then(function(ambientLight) {
5485
- scene.ambientLight = ambientLight;
5486
- scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5487
- scene.ambientLight.specularIntensity = ambient.specularIntensity;
5488
- scene.ambientLight.diffuseMode = ambient.diffuseMode;
5489
- scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5490
- });
5491
- promises.push(customAmbientPromise);
5492
- } else if (!useCustomAmbient && ambient.ambientLight) {
5493
- // @ts-ignore
5494
- // prettier-ignore
5495
- var ambientLightPromise = resourceManager.getResourceByRef(ambient.ambientLight).then(function(ambientLight) {
5496
- scene.ambientLight = ambientLight;
5497
- scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5498
- scene.ambientLight.specularIntensity = ambient.specularIntensity;
5499
- scene.ambientLight.diffuseMode = ambient.diffuseMode;
5500
- scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5501
- });
5502
- promises.push(ambientLightPromise);
5503
- } else {
5613
+ if (ambient) {
5614
+ var useCustomAmbient = ambient.specularMode === "Custom";
5615
+ var useSH = ambient.diffuseMode === miniprogram.DiffuseMode.SphericalHarmonics;
5504
5616
  scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5505
5617
  scene.ambientLight.specularIntensity = ambient.specularIntensity;
5618
+ scene.ambientLight.diffuseMode = ambient.diffuseMode;
5506
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
+ }
5507
5641
  }
5508
5642
  var background = data.scene.background;
5509
5643
  scene.background.mode = background.mode;
@@ -5545,6 +5679,9 @@ var SceneLoader = /*#__PURE__*/ function(Loader1) {
5545
5679
  if (shadow.shadowResolution != undefined) scene.shadowResolution = shadow.shadowResolution;
5546
5680
  if (shadow.shadowDistance != undefined) scene.shadowDistance = shadow.shadowDistance;
5547
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);
5548
5685
  }
5549
5686
  return Promise.all(promises).then(function() {
5550
5687
  resolve(scene);
@@ -5560,13 +5697,13 @@ SceneLoader = __decorate([
5560
5697
  "scene"
5561
5698
  ], true)
5562
5699
  ], SceneLoader);
5563
- ReflectionParser.registerCustomParseComponent("TextRenderer", /*#__PURE__*/ _async_to_generator(function(instance, item, engine) {
5700
+ ReflectionParser.registerCustomParseComponent("TextRenderer", /*#__PURE__*/ _async_to_generator(function(instance, item) {
5564
5701
  var props;
5565
5702
  return __generator(this, function(_state) {
5566
5703
  props = item.props;
5567
5704
  if (!props.font) {
5568
5705
  // @ts-ignore
5569
- instance.font = miniprogram.Font.createFromOS(engine, props.fontFamily || "Arial");
5706
+ instance.font = miniprogram.Font.createFromOS(instance.engine, props.fontFamily || "Arial");
5570
5707
  }
5571
5708
  return [
5572
5709
  2,
@@ -5622,7 +5759,7 @@ var KHR_draco_mesh_compression = (_KHR_draco_mesh_compression = /*#__PURE__*/ fu
5622
5759
  throw "BlendShape animation is not supported when using draco.";
5623
5760
  }, function() {
5624
5761
  return decodedGeometry.index.array;
5625
- }, context.keepMeshData);
5762
+ }, context.params.keepMeshData);
5626
5763
  });
5627
5764
  });
5628
5765
  };