@galacean/engine-loader 1.0.0-beta.9 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/main.js +534 -411
  2. package/dist/main.js.map +1 -1
  3. package/dist/miniprogram.js +534 -411
  4. package/dist/module.js +536 -413
  5. package/dist/module.js.map +1 -1
  6. package/package.json +5 -5
  7. package/types/GLTFContentRestorer.d.ts +18 -8
  8. package/types/ProjectLoader.d.ts +1 -0
  9. package/types/gltf/GLTFResource.d.ts +2 -6
  10. package/types/gltf/GLTFUtil.d.ts +3 -3
  11. package/types/gltf/GLTFUtils.d.ts +3 -2
  12. package/types/gltf/extensions/GLTFExtensionSchema.d.ts +1 -1
  13. package/types/gltf/parser/GLTFAnimationParser.d.ts +2 -2
  14. package/types/gltf/parser/GLTFMeshParser.d.ts +5 -5
  15. package/types/gltf/parser/GLTFParser.d.ts +1 -1
  16. package/types/gltf/parser/GLTFParserContext.d.ts +7 -2
  17. package/types/gltf/parser/GLTFSceneParser.d.ts +2 -2
  18. package/types/gltf/parser/GLTFSchemaParser.d.ts +7 -0
  19. package/types/gltf/parser/GLTFSkinParser.d.ts +2 -1
  20. package/types/gltf/parser/GLTFTextureParser.d.ts +3 -2
  21. package/types/ktx2/BinomialLLCTranscoder/BinomialLLCTranscoder.d.ts +13 -0
  22. package/types/ktx2/BinomialLLCTranscoder/TranscodeWorkerCode.d.ts +33 -0
  23. package/types/ktx2/KTX2Container.d.ts +72 -0
  24. package/types/ktx2/KTX2Loader.d.ts +53 -0
  25. package/types/ktx2/KTX2TargetFormat.d.ts +21 -0
  26. package/types/ktx2/KhronosTranscoder/KhronosTranscoder.d.ts +17 -0
  27. package/types/ktx2/KhronosTranscoder/TranscoderWorkerCode.d.ts +34 -0
  28. package/types/ktx2/TranscodeResult.d.ts +10 -0
  29. package/types/ktx2/WorkerPool.d.ts +32 -0
  30. package/types/ktx2/constants.d.ts +7 -0
  31. package/types/ktx2/transcoder/AbstractTranscoder.d.ts +55 -0
  32. package/types/ktx2/transcoder/BinomialLLCTranscoder.d.ts +8 -0
  33. package/types/ktx2/transcoder/BinomialLLCWorkerCode.d.ts +2 -0
  34. package/types/ktx2/transcoder/KhronosTranscoder.d.ts +13 -0
  35. package/types/ktx2/transcoder/KhronosWorkerCode.d.ts +1 -0
  36. package/types/ktx2/zstddec.d.ts +62 -0
  37. package/types/resource-deserialize/index.d.ts +3 -3
  38. package/types/resource-deserialize/resources/mesh/MeshDecoder.d.ts +1 -1
  39. package/types/resource-deserialize/resources/parser/PrefabParser.d.ts +5 -0
  40. package/types/resource-deserialize/resources/parser/ReflectionParser.d.ts +14 -0
  41. package/types/resource-deserialize/resources/prefab/PrefabDesign.d.ts +4 -4
  42. package/types/resource-deserialize/resources/scene/SceneParser.d.ts +1 -1
  43. package/types/resource-deserialize/resources/scene/SceneParserContext.d.ts +1 -1
  44. package/types/resource-deserialize/resources/schema/BasicSchema.d.ts +61 -0
  45. package/types/resource-deserialize/resources/schema/MaterialSchema.d.ts +91 -0
  46. package/types/resource-deserialize/resources/schema/ProjectSchema.d.ts +9 -0
  47. package/types/resource-deserialize/resources/schema/SceneSchema.d.ts +41 -0
  48. package/types/resource-deserialize/resources/schema/index.d.ts +3 -0
@@ -122,7 +122,8 @@ var AnimatorControllerLoader = /*#__PURE__*/ function(Loader1) {
122
122
  state.wrapMode = wrapMode;
123
123
  state.clipStartTime = clipStartNormalizedTime;
124
124
  state.clipEndTime = clipEndNormalizedTime;
125
- scripts == null ? void 0 : scripts.forEach(function(script) {
125
+ var scriptsObject = JSON.parse(scripts);
126
+ scriptsObject == null ? void 0 : scriptsObject.forEach(function(script) {
126
127
  state.addStateMachineScript(miniprogram.Loader.getClass(script));
127
128
  });
128
129
  if (clipData) {
@@ -222,7 +223,8 @@ var EnvLoader = /*#__PURE__*/ function(Loader) {
222
223
  var shArray = new Float32Array(arraybuffer, 0, 27);
223
224
  var shByteLength = 27 * 4;
224
225
  var size = (_ref = new Uint16Array(arraybuffer, shByteLength, 1)) == null ? void 0 : _ref[0];
225
- var texture = new miniprogram.TextureCube(resourceManager.engine, size);
226
+ var engine = resourceManager.engine;
227
+ var texture = new miniprogram.TextureCube(engine, size);
226
228
  texture.filterMode = miniprogram.TextureFilterMode.Trilinear;
227
229
  var mipmapCount = texture.mipmapCount;
228
230
  var offset = shByteLength + 2;
@@ -235,7 +237,7 @@ var EnvLoader = /*#__PURE__*/ function(Loader) {
235
237
  texture.setPixelBuffer(miniprogram.TextureCubeFace.PositiveX + face, data, mipLevel);
236
238
  }
237
239
  }
238
- var ambientLight = new miniprogram.AmbientLight();
240
+ var ambientLight = new miniprogram.AmbientLight(engine);
239
241
  var sh = new miniprogram$1.SphericalHarmonics3();
240
242
  ambientLight.diffuseMode = miniprogram.DiffuseMode.SphericalHarmonics;
241
243
  sh.copyFromArray(shArray);
@@ -442,15 +444,18 @@ function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
442
444
  for(var _iterator2 = _create_for_of_iterator_helper_loose(meshInfo.blendShapes), _step2; !(_step2 = _iterator2()).done;){
443
445
  var restoreInfo = _step2.value;
444
446
  var frame = restoreInfo.blendShape.frames[0];
445
- var positionData = _this._getBufferData(buffers, restoreInfo.position);
446
- frame.deltaPositions = GLTFUtils.floatBufferToVector3Array(positionData);
447
+ var position = restoreInfo.position;
448
+ var positionData = _this._getBufferData(buffers, position.buffer);
449
+ frame.deltaPositions = GLTFUtils.bufferToVector3Array(positionData, position.stride, position.byteOffset, position.count);
447
450
  if (restoreInfo.normal) {
448
- var normalData = _this._getBufferData(buffers, restoreInfo.normal);
449
- frame.deltaNormals = GLTFUtils.floatBufferToVector3Array(normalData);
451
+ var normal = restoreInfo.normal;
452
+ var normalData = _this._getBufferData(buffers, normal.buffer);
453
+ frame.deltaNormals = GLTFUtils.bufferToVector3Array(normalData, normal.stride, normal.byteOffset, normal.count);
450
454
  }
451
455
  if (restoreInfo.tangent) {
452
- var tangentData = _this._getBufferData(buffers, restoreInfo.tangent);
453
- frame.deltaTangents = GLTFUtils.floatBufferToVector3Array(tangentData);
456
+ var tangent = restoreInfo.tangent;
457
+ var tangentData = _this._getBufferData(buffers, tangent.buffer);
458
+ frame.deltaTangents = GLTFUtils.bufferToVector3Array(tangentData, tangent.stride, tangent.byteOffset, tangent.count);
454
459
  }
455
460
  }
456
461
  mesh.uploadData(true);
@@ -534,6 +539,14 @@ function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
534
539
  this.normal = normal;
535
540
  this.tangent = tangent;
536
541
  };
542
+ /**
543
+ * @internal
544
+ */ var BlendShapeDataRestoreInfo = function BlendShapeDataRestoreInfo(buffer, stride, byteOffset, count) {
545
+ this.buffer = buffer;
546
+ this.stride = stride;
547
+ this.byteOffset = byteOffset;
548
+ this.count = count;
549
+ };
537
550
 
538
551
  /**
539
552
  * Module for glTF 2.0 Interface
@@ -705,6 +718,11 @@ var TextureWrapMode;
705
718
  promiseMap["" + url] = this._initPromiseInfo(this.masterPromiseInfo);
706
719
  }
707
720
  var _proto = GLTFParserContext.prototype;
721
+ /**
722
+ * Get all the buffer data.
723
+ */ _proto.getBuffers = function getBuffers() {
724
+ return Promise.resolve(this._buffers);
725
+ };
708
726
  _proto._initPromiseInfo = function _initPromiseInfo(promiseInfo) {
709
727
  var promise = new miniprogram.AssetPromise(function(resolve, reject, setProgress, onCancel) {
710
728
  promiseInfo.resolve = resolve;
@@ -826,44 +844,58 @@ var TextureWrapMode;
826
844
  }
827
845
  };
828
846
  GLTFUtils.getAccessorBuffer = function getAccessorBuffer(context, bufferViews, accessor) {
829
- var buffers = context.buffers;
830
847
  var componentType = accessor.componentType;
831
848
  var bufferView = bufferViews[accessor.bufferView];
832
- var bufferIndex = bufferView.buffer;
833
- var buffer = buffers[bufferIndex];
834
- var bufferByteOffset = bufferView.byteOffset || 0;
835
- var byteOffset = accessor.byteOffset || 0;
836
- var TypedArray = GLTFUtils.getComponentType(componentType);
837
- var dataElementSize = GLTFUtils.getAccessorTypeSize(accessor.type);
838
- var dataElementBytes = TypedArray.BYTES_PER_ELEMENT;
839
- var elementStride = dataElementSize * dataElementBytes;
840
- var accessorCount = accessor.count;
841
- var bufferStride = bufferView.byteStride;
842
- var bufferInfo;
843
- // According to the glTF official documentation only byteStride not undefined is allowed
844
- if (bufferStride !== undefined && bufferStride !== elementStride) {
845
- var bufferSlice = Math.floor(byteOffset / bufferStride);
846
- var bufferCacheKey = accessor.bufferView + ":" + componentType + ":" + bufferSlice + ":" + accessorCount;
847
- var accessorBufferCache = context.accessorBufferCache;
848
- bufferInfo = accessorBufferCache[bufferCacheKey];
849
- if (!bufferInfo) {
850
- var offset = bufferByteOffset + bufferSlice * bufferStride;
851
- var count = accessorCount * (bufferStride / dataElementBytes);
852
- var data = new TypedArray(buffer, offset, count);
853
- accessorBufferCache[bufferCacheKey] = bufferInfo = new BufferInfo(data, true, bufferStride);
854
- bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(bufferIndex, TypedArray, offset, count));
849
+ return context.getBuffers().then(function(buffers) {
850
+ var bufferIndex = bufferView.buffer;
851
+ var buffer = buffers[bufferIndex];
852
+ var _bufferView_byteOffset;
853
+ var bufferByteOffset = (_bufferView_byteOffset = bufferView.byteOffset) != null ? _bufferView_byteOffset : 0;
854
+ var _accessor_byteOffset;
855
+ var byteOffset = (_accessor_byteOffset = accessor.byteOffset) != null ? _accessor_byteOffset : 0;
856
+ var TypedArray = GLTFUtils.getComponentType(componentType);
857
+ var dataElementSize = GLTFUtils.getAccessorTypeSize(accessor.type);
858
+ var dataElementBytes = TypedArray.BYTES_PER_ELEMENT;
859
+ var elementStride = dataElementSize * dataElementBytes;
860
+ var accessorCount = accessor.count;
861
+ var bufferStride = bufferView.byteStride;
862
+ var bufferInfo;
863
+ // According to the glTF official documentation only byteStride not undefined is allowed
864
+ if (bufferStride !== undefined && bufferStride !== elementStride) {
865
+ var bufferSlice = Math.floor(byteOffset / bufferStride);
866
+ var bufferCacheKey = accessor.bufferView + ":" + componentType + ":" + bufferSlice + ":" + accessorCount;
867
+ var accessorBufferCache = context.accessorBufferCache;
868
+ bufferInfo = accessorBufferCache[bufferCacheKey];
869
+ if (!bufferInfo) {
870
+ var offset = bufferByteOffset + bufferSlice * bufferStride;
871
+ var count = accessorCount * (bufferStride / dataElementBytes);
872
+ var data = new TypedArray(buffer, offset, count);
873
+ accessorBufferCache[bufferCacheKey] = bufferInfo = new BufferInfo(data, true, bufferStride);
874
+ bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(bufferIndex, TypedArray, offset, count));
875
+ }
876
+ } else {
877
+ var offset1 = bufferByteOffset + byteOffset;
878
+ var count1 = accessorCount * dataElementSize;
879
+ var data1 = new TypedArray(buffer, offset1, count1);
880
+ bufferInfo = new BufferInfo(data1, false, elementStride);
881
+ bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(bufferIndex, TypedArray, offset1, count1));
855
882
  }
856
- } else {
857
- var offset1 = bufferByteOffset + byteOffset;
858
- var count1 = accessorCount * dataElementSize;
859
- var data1 = new TypedArray(buffer, offset1, count1);
860
- bufferInfo = new BufferInfo(data1, false, elementStride);
861
- bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(bufferIndex, TypedArray, offset1, count1));
862
- }
863
- if (accessor.sparse) {
864
- GLTFUtils.processingSparseData(bufferViews, accessor, buffers, bufferInfo);
883
+ if (accessor.sparse) {
884
+ GLTFUtils.processingSparseData(bufferViews, accessor, buffers, bufferInfo);
885
+ }
886
+ return bufferInfo;
887
+ });
888
+ };
889
+ GLTFUtils.bufferToVector3Array = function bufferToVector3Array(data, byteStride, accessorByteOffset, count) {
890
+ var bytesPerElement = data.BYTES_PER_ELEMENT;
891
+ var offset = accessorByteOffset % byteStride / bytesPerElement;
892
+ var stride = byteStride / bytesPerElement;
893
+ var vector3s = new Array(count);
894
+ for(var i = 0; i < count; i++){
895
+ var index = offset + i * stride;
896
+ vector3s[i] = new miniprogram$1.Vector3(data[index], data[index + 1], data[index + 2]);
865
897
  }
866
- return bufferInfo;
898
+ return vector3s;
867
899
  };
868
900
  /**
869
901
  * @deprecated
@@ -1329,7 +1361,7 @@ var GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
1329
1361
  }
1330
1362
  var _proto = GLTFAnimationParser.prototype;
1331
1363
  _proto.parse = function parse(context) {
1332
- var glTF = context.glTF; context.buffers; var glTFResource = context.glTFResource;
1364
+ var glTF = context.glTF, glTFResource = context.glTFResource;
1333
1365
  glTFResource.entities;
1334
1366
  var animations = glTF.animations; glTF.accessors; glTF.bufferViews;
1335
1367
  if (!animations) {
@@ -1339,106 +1371,120 @@ var GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
1339
1371
  var animationClipCount = animations.length;
1340
1372
  var animationClipPromises = [];
1341
1373
  new Array(animationClipCount);
1374
+ var parseStandardPropertyPromises = new Array();
1342
1375
  for(var i = 0; i < animationClipCount; i++){
1343
1376
  var animationInfo = animations[i];
1344
1377
  var _animationInfo_name = animationInfo.name, name = _animationInfo_name === void 0 ? "AnimationClip" + i : _animationInfo_name;
1345
1378
  var animationClip = GLTFParser.executeExtensionsCreateAndParse(animationInfo.extensions, context, animationInfo);
1346
1379
  if (!animationClip) {
1347
1380
  animationClip = new miniprogram.AnimationClip(name);
1348
- GLTFAnimationParser._parseStandardProperty(context, animationClip, animationInfo);
1381
+ parseStandardPropertyPromises.push(GLTFAnimationParser._parseStandardProperty(context, animationClip, animationInfo));
1349
1382
  }
1350
1383
  animationClipPromises.push(animationClip);
1351
1384
  }
1352
- return miniprogram.AssetPromise.all(animationClipPromises).then(function(animationClips) {
1353
- glTFResource.animations = animationClips;
1354
- for(var i = 0; i < glTF.animations.length; i++){
1355
- var animationInfo = glTF.animations[i];
1356
- GLTFParser.executeExtensionsAdditiveAndParse(animationInfo.extensions, context, animationClips[i], animationInfo);
1357
- }
1358
- animationClipsPromiseInfo.resolve(animationClips);
1359
- return animationClipsPromiseInfo.promise;
1385
+ return miniprogram.AssetPromise.all(parseStandardPropertyPromises).then(function() {
1386
+ return miniprogram.AssetPromise.all(animationClipPromises).then(function(animationClips) {
1387
+ glTFResource.animations = animationClips;
1388
+ for(var i = 0; i < glTF.animations.length; i++){
1389
+ var animationInfo = glTF.animations[i];
1390
+ GLTFParser.executeExtensionsAdditiveAndParse(animationInfo.extensions, context, animationClips[i], animationInfo);
1391
+ }
1392
+ animationClipsPromiseInfo.resolve(animationClips);
1393
+ return animationClipsPromiseInfo.promise;
1394
+ });
1360
1395
  });
1361
1396
  };
1362
1397
  /**
1363
1398
  * @internal
1364
1399
  */ GLTFAnimationParser._parseStandardProperty = function _parseStandardProperty(context, animationClip, animationInfo) {
1400
+ var _loop = function(j, m) {
1401
+ var gltfSampler = samplers[j];
1402
+ var inputAccessor = accessors[gltfSampler.input];
1403
+ var outputAccessor = accessors[gltfSampler.output];
1404
+ var promise = Promise.all([
1405
+ GLTFUtils.getAccessorBuffer(context, bufferViews, inputAccessor),
1406
+ GLTFUtils.getAccessorBuffer(context, bufferViews, outputAccessor)
1407
+ ]).then(function(bufferInfos) {
1408
+ var input = bufferInfos[0].data;
1409
+ var output = bufferInfos[1].data;
1410
+ if (outputAccessor.normalized) {
1411
+ var scale = GLTFUtils.getNormalizedComponentScale(outputAccessor.componentType);
1412
+ var scaled = new Float32Array(output.length);
1413
+ for(var k = 0, v = output.length; k < v; k++){
1414
+ scaled[k] = output[k] * scale;
1415
+ }
1416
+ output = scaled;
1417
+ }
1418
+ var outputStride = output.length / input.length;
1419
+ var _gltfSampler_interpolation;
1420
+ var interpolation = (_gltfSampler_interpolation = gltfSampler.interpolation) != null ? _gltfSampler_interpolation : AnimationSamplerInterpolation.Linear;
1421
+ var samplerInterpolation;
1422
+ switch(interpolation){
1423
+ case AnimationSamplerInterpolation.CubicSpine:
1424
+ samplerInterpolation = miniprogram.InterpolationType.CubicSpine;
1425
+ break;
1426
+ case AnimationSamplerInterpolation.Step:
1427
+ samplerInterpolation = miniprogram.InterpolationType.Step;
1428
+ break;
1429
+ case AnimationSamplerInterpolation.Linear:
1430
+ samplerInterpolation = miniprogram.InterpolationType.Linear;
1431
+ break;
1432
+ }
1433
+ input[input.length - 1];
1434
+ sampleDataCollection.push({
1435
+ type: outputAccessor.type,
1436
+ interpolation: samplerInterpolation,
1437
+ input: input,
1438
+ output: output,
1439
+ outputSize: outputStride
1440
+ });
1441
+ });
1442
+ promises.push(promise);
1443
+ };
1444
+ var _this = this;
1365
1445
  var glTF = context.glTF, glTFResource = context.glTFResource;
1366
1446
  var entities = glTFResource.entities;
1367
1447
  var accessors = glTF.accessors, bufferViews = glTF.bufferViews;
1368
1448
  var channels = animationInfo.channels, samplers = animationInfo.samplers;
1369
1449
  var sampleDataCollection = new Array();
1450
+ var promises = new Array();
1370
1451
  // parse samplers
1371
- for(var j = 0, m = samplers.length; j < m; j++){
1372
- var gltfSampler = samplers[j];
1373
- var inputAccessor = accessors[gltfSampler.input];
1374
- var outputAccessor = accessors[gltfSampler.output];
1375
- var input = GLTFUtils.getAccessorBuffer(context, bufferViews, inputAccessor).data;
1376
- var output = GLTFUtils.getAccessorBuffer(context, bufferViews, outputAccessor).data;
1377
- if (outputAccessor.normalized) {
1378
- var scale = GLTFUtils.getNormalizedComponentScale(outputAccessor.componentType);
1379
- var scaled = new Float32Array(output.length);
1380
- for(var k = 0, v = output.length; k < v; k++){
1381
- scaled[k] = output[k] * scale;
1452
+ for(var j = 0, m = samplers.length; j < m; j++)_loop(j);
1453
+ return Promise.all(promises).then(function() {
1454
+ for(var j = 0, m = channels.length; j < m; j++){
1455
+ var gltfChannel = channels[j];
1456
+ var target = gltfChannel.target;
1457
+ var channelTargetEntity = entities[target.node];
1458
+ var relativePath = "";
1459
+ var entity = channelTargetEntity;
1460
+ while(entity.parent){
1461
+ relativePath = relativePath === "" ? "" + entity.name : entity.name + "/" + relativePath;
1462
+ entity = entity.parent;
1382
1463
  }
1383
- output = scaled;
1384
- }
1385
- var outputStride = output.length / input.length;
1386
- var _gltfSampler_interpolation;
1387
- var interpolation = (_gltfSampler_interpolation = gltfSampler.interpolation) != null ? _gltfSampler_interpolation : AnimationSamplerInterpolation.Linear;
1388
- var samplerInterpolation = void 0;
1389
- switch(interpolation){
1390
- case AnimationSamplerInterpolation.CubicSpine:
1391
- samplerInterpolation = miniprogram.InterpolationType.CubicSpine;
1392
- break;
1393
- case AnimationSamplerInterpolation.Step:
1394
- samplerInterpolation = miniprogram.InterpolationType.Step;
1395
- break;
1396
- case AnimationSamplerInterpolation.Linear:
1397
- samplerInterpolation = miniprogram.InterpolationType.Linear;
1398
- break;
1399
- }
1400
- input[input.length - 1];
1401
- sampleDataCollection.push({
1402
- type: outputAccessor.type,
1403
- interpolation: samplerInterpolation,
1404
- input: input,
1405
- output: output,
1406
- outputSize: outputStride
1407
- });
1408
- }
1409
- for(var j1 = 0, m1 = channels.length; j1 < m1; j1++){
1410
- var gltfChannel = channels[j1];
1411
- var target = gltfChannel.target;
1412
- var channelTargetEntity = entities[target.node];
1413
- var relativePath = "";
1414
- var entity = channelTargetEntity;
1415
- while(entity.parent){
1416
- relativePath = relativePath === "" ? "" + entity.name : entity.name + "/" + relativePath;
1417
- entity = entity.parent;
1418
- }
1419
- var ComponentType = void 0;
1420
- var propertyName = void 0;
1421
- switch(target.path){
1422
- case AnimationChannelTargetPath.TRANSLATION:
1423
- ComponentType = miniprogram.Transform;
1424
- propertyName = "position";
1425
- break;
1426
- case AnimationChannelTargetPath.ROTATION:
1427
- ComponentType = miniprogram.Transform;
1428
- propertyName = "rotationQuaternion";
1429
- break;
1430
- case AnimationChannelTargetPath.SCALE:
1431
- ComponentType = miniprogram.Transform;
1432
- propertyName = "scale";
1433
- break;
1434
- case AnimationChannelTargetPath.WEIGHTS:
1435
- ComponentType = miniprogram.SkinnedMeshRenderer;
1436
- propertyName = "blendShapeWeights";
1437
- break;
1464
+ var ComponentType = void 0;
1465
+ var propertyName = void 0;
1466
+ switch(target.path){
1467
+ case AnimationChannelTargetPath.TRANSLATION:
1468
+ ComponentType = miniprogram.Transform;
1469
+ propertyName = "position";
1470
+ break;
1471
+ case AnimationChannelTargetPath.ROTATION:
1472
+ ComponentType = miniprogram.Transform;
1473
+ propertyName = "rotationQuaternion";
1474
+ break;
1475
+ case AnimationChannelTargetPath.SCALE:
1476
+ ComponentType = miniprogram.Transform;
1477
+ propertyName = "scale";
1478
+ break;
1479
+ case AnimationChannelTargetPath.WEIGHTS:
1480
+ ComponentType = miniprogram.SkinnedMeshRenderer;
1481
+ propertyName = "blendShapeWeights";
1482
+ break;
1483
+ }
1484
+ var curve = _this._addCurve(target.path, gltfChannel, sampleDataCollection);
1485
+ animationClip.addCurveBinding(relativePath, ComponentType, propertyName, curve);
1438
1486
  }
1439
- var curve = this._addCurve(target.path, gltfChannel, sampleDataCollection);
1440
- animationClip.addCurveBinding(relativePath, ComponentType, propertyName, curve);
1441
- }
1487
+ });
1442
1488
  };
1443
1489
  GLTFAnimationParser._addCurve = function _addCurve(animationChannelTargetPath, gltfChannel, sampleDataCollection) {
1444
1490
  var sampleData = sampleDataCollection[gltfChannel.sampler];
@@ -1533,20 +1579,18 @@ var GLTFBufferParser = /*#__PURE__*/ function(GLTFParser) {
1533
1579
  }).then(function(param) {
1534
1580
  var glTF = param.glTF, buffers = param.buffers;
1535
1581
  context.glTF = glTF;
1536
- context.buffers = buffers;
1582
+ context._buffers = buffers;
1537
1583
  });
1538
1584
  } else {
1539
1585
  return miniprogram.request(url, {
1540
1586
  type: "json"
1541
1587
  }).then(function(glTF) {
1542
1588
  context.glTF = glTF;
1543
- return Promise.all(glTF.buffers.map(function(buffer) {
1589
+ context._buffers = Promise.all(glTF.buffers.map(function(buffer) {
1544
1590
  var absoluteUrl = miniprogram.Utils.resolveAbsoluteUrl(url, buffer.uri);
1545
1591
  restoreBufferRequests.push(new BufferRequestInfo(absoluteUrl, requestConfig));
1546
1592
  return miniprogram.request(absoluteUrl, requestConfig);
1547
- })).then(function(buffers) {
1548
- context.buffers = buffers;
1549
- });
1593
+ }));
1550
1594
  });
1551
1595
  }
1552
1596
  };
@@ -1625,6 +1669,10 @@ var GLTFEntityParser = /*#__PURE__*/ function(GLTFParser) {
1625
1669
  }
1626
1670
  sceneRoots[i] = rootEntity;
1627
1671
  }
1672
+ // @ts-ignore
1673
+ sceneRoots[i]._hookResource = glTFResource;
1674
+ // @ts-ignore
1675
+ glTFResource._addReferCount(1);
1628
1676
  }
1629
1677
  glTFResource.sceneRoots = sceneRoots;
1630
1678
  glTFResource.defaultSceneRoot = sceneRoots[sceneID];
@@ -1791,7 +1839,9 @@ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
1791
1839
  }
1792
1840
  }, function() {
1793
1841
  var indexAccessor = glTF.accessors[gltfPrimitive.indices];
1794
- return GLTFUtils.getAccessorData(glTF, indexAccessor, buffers);
1842
+ return context.getBuffers().then(function(buffers) {
1843
+ return GLTFUtils.getAccessorData(glTF, indexAccessor, buffers);
1844
+ });
1795
1845
  }, context.keepMeshData).then(resolve);
1796
1846
  }
1797
1847
  });
@@ -1801,7 +1851,7 @@ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
1801
1851
  for(var j = 0; j < gltfMesh.primitives.length; j++)_loop(j);
1802
1852
  meshPromises[i] = Promise.all(primitivePromises);
1803
1853
  };
1804
- var glTF = context.glTF, buffers = context.buffers, glTFResource = context.glTFResource;
1854
+ var glTF = context.glTF, glTFResource = context.glTFResource;
1805
1855
  var engine = glTFResource.engine;
1806
1856
  if (!glTF.meshes) return;
1807
1857
  var meshesPromiseInfo = context.meshesPromiseInfo;
@@ -1816,8 +1866,109 @@ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
1816
1866
  /**
1817
1867
  * @internal
1818
1868
  */ GLTFMeshParser._parseMeshFromGLTFPrimitive = function _parseMeshFromGLTFPrimitive(context, mesh, meshRestoreInfo, gltfMesh, gltfPrimitive, gltf, getVertexBufferData, getBlendShapeData, getIndexBufferData, keepMeshData) {
1869
+ var _loop = function(attribute) {
1870
+ var accessor = accessors[attributes[attribute]];
1871
+ var promise = GLTFUtils.getAccessorBuffer(context, gltf.bufferViews, accessor).then(function(accessorBuffer) {
1872
+ var dataElementSize = GLTFUtils.getAccessorTypeSize(accessor.type);
1873
+ var accessorCount = accessor.count;
1874
+ var vertices = accessorBuffer.data;
1875
+ var vertexElement;
1876
+ var meshId = mesh.instanceId;
1877
+ var vertexBindingInfos = accessorBuffer.vertexBindingInfos;
1878
+ var elementNormalized = accessor.normalized;
1879
+ var elementFormat = GLTFUtils.getElementFormat(accessor.componentType, dataElementSize, elementNormalized);
1880
+ var scaleFactor;
1881
+ elementNormalized && (scaleFactor = GLTFUtils.getNormalizedComponentScale(accessor.componentType));
1882
+ var elementOffset;
1883
+ if (accessorBuffer.interleaved) {
1884
+ var byteOffset = accessor.byteOffset || 0;
1885
+ var stride = accessorBuffer.stride;
1886
+ elementOffset = byteOffset % stride;
1887
+ if (vertexBindingInfos[meshId] === undefined) {
1888
+ vertexElement = new miniprogram.VertexElement(attribute, elementOffset, elementFormat, bufferBindIndex);
1889
+ var vertexBuffer = accessorBuffer.vertexBuffer;
1890
+ if (!vertexBuffer) {
1891
+ vertexBuffer = new miniprogram.Buffer(engine, miniprogram.BufferBindFlag.VertexBuffer, vertices.byteLength, miniprogram.BufferUsage.Static);
1892
+ vertexBuffer.setData(vertices);
1893
+ accessorBuffer.vertexBuffer = vertexBuffer;
1894
+ meshRestoreInfo.vertexBuffers.push(new BufferRestoreInfo(vertexBuffer, accessorBuffer.restoreInfo));
1895
+ }
1896
+ mesh.setVertexBufferBinding(vertexBuffer, stride, bufferBindIndex);
1897
+ vertexBindingInfos[meshId] = bufferBindIndex++;
1898
+ } else {
1899
+ vertexElement = new miniprogram.VertexElement(attribute, elementOffset, elementFormat, vertexBindingInfos[meshId]);
1900
+ }
1901
+ } else {
1902
+ elementOffset = 0;
1903
+ vertexElement = new miniprogram.VertexElement(attribute, elementOffset, elementFormat, bufferBindIndex);
1904
+ var vertexBuffer1 = new miniprogram.Buffer(engine, miniprogram.BufferBindFlag.VertexBuffer, vertices.byteLength, miniprogram.BufferUsage.Static);
1905
+ vertexBuffer1.setData(vertices);
1906
+ meshRestoreInfo.vertexBuffers.push(new BufferRestoreInfo(vertexBuffer1, accessorBuffer.restoreInfo));
1907
+ mesh.setVertexBufferBinding(vertexBuffer1, accessorBuffer.stride, bufferBindIndex);
1908
+ vertexBindingInfos[meshId] = bufferBindIndex++;
1909
+ }
1910
+ vertexElements.push(vertexElement);
1911
+ if (attribute === "POSITION") {
1912
+ vertexCount = accessorCount;
1913
+ var _mesh_bounds = mesh.bounds, min = _mesh_bounds.min, max = _mesh_bounds.max;
1914
+ if (accessor.min && accessor.max) {
1915
+ min.copyFromArray(accessor.min);
1916
+ max.copyFromArray(accessor.max);
1917
+ if (keepMeshData) {
1918
+ var baseOffset = elementOffset / vertices.BYTES_PER_ELEMENT;
1919
+ var stride1 = vertices.length / accessorCount;
1920
+ for(var j = 0; j < accessorCount; j++){
1921
+ var offset = baseOffset + j * stride1;
1922
+ var position = new miniprogram$1.Vector3(vertices[offset], vertices[offset + 1], vertices[offset + 2]);
1923
+ elementNormalized && position.scale(scaleFactor);
1924
+ positions[j] = position;
1925
+ }
1926
+ }
1927
+ } else {
1928
+ var position1 = GLTFMeshParser._tempVector3;
1929
+ min.set(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);
1930
+ max.set(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);
1931
+ var baseOffset1 = elementOffset / vertices.BYTES_PER_ELEMENT;
1932
+ var stride2 = vertices.length / accessorCount;
1933
+ for(var j1 = 0; j1 < accessorCount; j1++){
1934
+ var offset1 = baseOffset1 + j1 * stride2;
1935
+ position1.copyFromArray(vertices, offset1);
1936
+ miniprogram$1.Vector3.min(min, position1, min);
1937
+ miniprogram$1.Vector3.max(max, position1, max);
1938
+ if (keepMeshData) {
1939
+ var clonePosition = position1.clone();
1940
+ elementNormalized && clonePosition.scale(scaleFactor);
1941
+ positions[j1] = clonePosition;
1942
+ }
1943
+ }
1944
+ }
1945
+ if (elementNormalized) {
1946
+ min.scale(scaleFactor);
1947
+ max.scale(scaleFactor);
1948
+ }
1949
+ } else if (attribute === "JOINTS_0" && keepMeshData) {
1950
+ var baseOffset2 = elementOffset / vertices.BYTES_PER_ELEMENT;
1951
+ var stride3 = vertices.length / accessorCount;
1952
+ for(var j2 = 0; j2 < accessorCount; j2++){
1953
+ var offset2 = baseOffset2 + j2 * stride3;
1954
+ var boneIndex = new miniprogram$1.Vector4(vertices[offset2], vertices[offset2 + 1], vertices[offset2 + 2], vertices[offset2 + 3]);
1955
+ elementNormalized && boneIndex.scale(scaleFactor);
1956
+ boneIndices[j2] = boneIndex;
1957
+ }
1958
+ } else if (attribute === "WEIGHTS_0" && keepMeshData) {
1959
+ var baseOffset3 = elementOffset / vertices.BYTES_PER_ELEMENT;
1960
+ var stride4 = vertices.length / accessorCount;
1961
+ for(var j3 = 0; j3 < accessorCount; j3++){
1962
+ var offset3 = baseOffset3 + j3 * stride4;
1963
+ var boneWeight = new miniprogram$1.Vector4(vertices[offset3], vertices[offset3 + 1], vertices[offset3 + 2], vertices[offset3 + 3]);
1964
+ elementNormalized && boneWeight.scale(scaleFactor);
1965
+ boneWeights[j3] = boneWeight;
1966
+ }
1967
+ }
1968
+ });
1969
+ promises.push(promise);
1970
+ };
1819
1971
  var accessors = gltf.accessors;
1820
- context.buffers;
1821
1972
  var attributes = gltfPrimitive.attributes, targets = gltfPrimitive.targets, indices = gltfPrimitive.indices, mode = gltfPrimitive.mode;
1822
1973
  var engine = mesh.engine;
1823
1974
  var vertexElements = new Array();
@@ -1831,145 +1982,85 @@ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
1831
1982
  boneIndices = new Array(vertexCount);
1832
1983
  boneWeights = new Array(vertexCount);
1833
1984
  }
1834
- for(var attribute in attributes){
1835
- var accessor = accessors[attributes[attribute]];
1836
- var accessorBuffer = GLTFUtils.getAccessorBuffer(context, gltf.bufferViews, accessor);
1837
- var dataElementSize = GLTFUtils.getAccessorTypeSize(accessor.type);
1838
- var accessorCount = accessor.count;
1839
- var vertices = accessorBuffer.data;
1840
- var vertexElement = void 0;
1841
- var meshId = mesh.instanceId;
1842
- var vertexBindingInfos = accessorBuffer.vertexBindingInfos;
1843
- var elementNormalized = accessor.normalized;
1844
- var elementFormat = GLTFUtils.getElementFormat(accessor.componentType, dataElementSize, elementNormalized);
1845
- var scaleFactor = void 0;
1846
- elementNormalized && (scaleFactor = GLTFUtils.getNormalizedComponentScale(accessor.componentType));
1847
- var elementOffset = void 0;
1848
- if (accessorBuffer.interleaved) {
1849
- var byteOffset = accessor.byteOffset || 0;
1850
- var stride = accessorBuffer.stride;
1851
- elementOffset = byteOffset % stride;
1852
- if (vertexBindingInfos[meshId] === undefined) {
1853
- vertexElement = new miniprogram.VertexElement(attribute, elementOffset, elementFormat, bufferBindIndex);
1854
- var vertexBuffer = accessorBuffer.vertexBuffer;
1855
- if (!vertexBuffer) {
1856
- vertexBuffer = new miniprogram.Buffer(engine, miniprogram.BufferBindFlag.VertexBuffer, vertices.byteLength, miniprogram.BufferUsage.Static);
1857
- vertexBuffer.setData(vertices);
1858
- accessorBuffer.vertexBuffer = vertexBuffer;
1859
- meshRestoreInfo.vertexBuffers.push(new BufferRestoreInfo(vertexBuffer, accessorBuffer.restoreInfo));
1860
- }
1861
- mesh.setVertexBufferBinding(vertexBuffer, stride, bufferBindIndex);
1862
- vertexBindingInfos[meshId] = bufferBindIndex++;
1863
- } else {
1864
- vertexElement = new miniprogram.VertexElement(attribute, elementOffset, elementFormat, vertexBindingInfos[meshId]);
1865
- }
1985
+ var promises = new Array();
1986
+ for(var attribute in attributes)_loop(attribute);
1987
+ return Promise.all(promises).then(function() {
1988
+ mesh.setVertexElements(vertexElements);
1989
+ // Indices
1990
+ if (indices !== undefined) {
1991
+ var indexAccessor = gltf.accessors[indices];
1992
+ var promise = GLTFUtils.getAccessorBuffer(context, gltf.bufferViews, indexAccessor).then(function(accessorBuffer) {
1993
+ mesh.setIndices(accessorBuffer.data);
1994
+ mesh.addSubMesh(0, indexAccessor.count, mode);
1995
+ meshRestoreInfo.indexBuffer = accessorBuffer.restoreInfo;
1996
+ });
1997
+ promises.push(promise);
1866
1998
  } else {
1867
- elementOffset = 0;
1868
- vertexElement = new miniprogram.VertexElement(attribute, elementOffset, elementFormat, bufferBindIndex);
1869
- var vertexBuffer1 = new miniprogram.Buffer(engine, miniprogram.BufferBindFlag.VertexBuffer, vertices.byteLength, miniprogram.BufferUsage.Static);
1870
- vertexBuffer1.setData(vertices);
1871
- meshRestoreInfo.vertexBuffers.push(new BufferRestoreInfo(vertexBuffer1, accessorBuffer.restoreInfo));
1872
- mesh.setVertexBufferBinding(vertexBuffer1, accessorBuffer.stride, bufferBindIndex);
1873
- vertexBindingInfos[meshId] = bufferBindIndex++;
1999
+ mesh.addSubMesh(0, vertexCount, mode);
1874
2000
  }
1875
- vertexElements.push(vertexElement);
1876
- if (attribute === "POSITION") {
1877
- vertexCount = accessorCount;
1878
- var _mesh_bounds = mesh.bounds, min = _mesh_bounds.min, max = _mesh_bounds.max;
1879
- if (accessor.min && accessor.max) {
1880
- min.copyFromArray(accessor.min);
1881
- max.copyFromArray(accessor.max);
1882
- if (keepMeshData) {
1883
- var baseOffset = elementOffset / vertices.BYTES_PER_ELEMENT;
1884
- var stride1 = vertices.length / accessorCount;
1885
- for(var j = 0; j < accessorCount; j++){
1886
- var offset = baseOffset + j * stride1;
1887
- var position = new miniprogram$1.Vector3(vertices[offset], vertices[offset + 1], vertices[offset + 2]);
1888
- elementNormalized && position.scale(scaleFactor);
1889
- positions[j] = position;
1890
- }
1891
- }
1892
- } else {
1893
- var position1 = GLTFMeshParser._tempVector3;
1894
- min.set(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);
1895
- max.set(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);
1896
- var baseOffset1 = elementOffset / vertices.BYTES_PER_ELEMENT;
1897
- var stride2 = vertices.length / accessorCount;
1898
- for(var j1 = 0; j1 < accessorCount; j1++){
1899
- var offset1 = baseOffset1 + j1 * stride2;
1900
- position1.copyFromArray(vertices, offset1);
1901
- miniprogram$1.Vector3.min(min, position1, min);
1902
- miniprogram$1.Vector3.max(max, position1, max);
1903
- if (keepMeshData) {
1904
- var clonePosition = position1.clone();
1905
- elementNormalized && clonePosition.scale(scaleFactor);
1906
- positions[j1] = clonePosition;
1907
- }
1908
- }
1909
- }
1910
- if (elementNormalized) {
1911
- min.scale(scaleFactor);
1912
- max.scale(scaleFactor);
1913
- }
1914
- } else if (attribute === "JOINTS_0" && keepMeshData) {
1915
- var baseOffset2 = elementOffset / vertices.BYTES_PER_ELEMENT;
1916
- var stride3 = vertices.length / accessorCount;
1917
- for(var j2 = 0; j2 < accessorCount; j2++){
1918
- var offset2 = baseOffset2 + j2 * stride3;
1919
- var boneIndex = new miniprogram$1.Vector4(vertices[offset2], vertices[offset2 + 1], vertices[offset2 + 2], vertices[offset2 + 3]);
1920
- elementNormalized && boneIndex.scale(scaleFactor);
1921
- boneIndices[j2] = boneIndex;
1922
- }
1923
- } else if (attribute === "WEIGHTS_0" && keepMeshData) {
1924
- var baseOffset3 = elementOffset / vertices.BYTES_PER_ELEMENT;
1925
- var stride4 = vertices.length / accessorCount;
1926
- for(var j3 = 0; j3 < accessorCount; j3++){
1927
- var offset3 = baseOffset3 + j3 * stride4;
1928
- var boneWeight = new miniprogram$1.Vector4(vertices[offset3], vertices[offset3 + 1], vertices[offset3 + 2], vertices[offset3 + 3]);
1929
- elementNormalized && boneWeight.scale(scaleFactor);
1930
- boneWeights[j3] = boneWeight;
1931
- }
2001
+ // BlendShapes
2002
+ if (targets) {
2003
+ promises.push(GLTFMeshParser._createBlendShape(mesh, meshRestoreInfo, gltfMesh, accessors, targets, getBlendShapeData));
1932
2004
  }
1933
- }
1934
- mesh.setVertexElements(vertexElements);
1935
- // Indices
1936
- if (indices !== undefined) {
1937
- var indexAccessor = gltf.accessors[indices];
1938
- var accessorBuffer1 = GLTFUtils.getAccessorBuffer(context, gltf.bufferViews, indexAccessor);
1939
- mesh.setIndices(accessorBuffer1.data);
1940
- mesh.addSubMesh(0, indexAccessor.count, mode);
1941
- meshRestoreInfo.indexBuffer = accessorBuffer1.restoreInfo;
1942
- } else {
1943
- mesh.addSubMesh(0, vertexCount, mode);
1944
- }
1945
- // BlendShapes
1946
- targets && GLTFMeshParser._createBlendShape(mesh, meshRestoreInfo, gltfMesh, targets, getBlendShapeData);
1947
- mesh.uploadData(!keepMeshData);
1948
- //@ts-ignore
1949
- mesh._positions = positions;
1950
- //@ts-ignore
1951
- mesh._boneIndices = boneIndices;
1952
- //@ts-ignore
1953
- mesh._boneWeights = boneWeights;
1954
- return Promise.resolve(mesh);
2005
+ return Promise.all(promises).then(function() {
2006
+ mesh.uploadData(!keepMeshData);
2007
+ //@ts-ignore
2008
+ mesh._positions = positions;
2009
+ //@ts-ignore
2010
+ mesh._boneIndices = boneIndices;
2011
+ //@ts-ignore
2012
+ mesh._boneWeights = boneWeights;
2013
+ return Promise.resolve(mesh);
2014
+ });
2015
+ });
1955
2016
  };
1956
2017
  /**
1957
2018
  * @internal
1958
- */ GLTFMeshParser._createBlendShape = function _createBlendShape(mesh, meshRestoreInfo, glTFMesh, glTFTargets, getBlendShapeData) {
1959
- var blendShapeNames = glTFMesh.extras ? glTFMesh.extras.targetNames : null;
1960
- for(var i = 0, n = glTFTargets.length; i < n; i++){
2019
+ */ GLTFMeshParser._createBlendShape = function _createBlendShape(mesh, meshRestoreInfo, glTFMesh, accessors, glTFTargets, getBlendShapeData) {
2020
+ var _loop = function(i, n) {
1961
2021
  var name = blendShapeNames ? blendShapeNames[i] : "blendShape" + i;
1962
- var deltaPosBufferInfo = getBlendShapeData("POSITION", i);
1963
- var deltaNorBufferInfo = getBlendShapeData("NORMAL", i);
1964
- var deltaTanBufferInfo = getBlendShapeData("TANGENT", i);
1965
- var deltaPositions = deltaPosBufferInfo.data ? GLTFUtils.floatBufferToVector3Array(deltaPosBufferInfo.data) : null;
1966
- var deltaNormals = (deltaNorBufferInfo == null ? void 0 : deltaNorBufferInfo.data) ? GLTFUtils.floatBufferToVector3Array(deltaNorBufferInfo == null ? void 0 : deltaNorBufferInfo.data) : null;
1967
- var deltaTangents = (deltaTanBufferInfo == null ? void 0 : deltaTanBufferInfo.data) ? GLTFUtils.floatBufferToVector3Array(deltaTanBufferInfo == null ? void 0 : deltaTanBufferInfo.data) : null;
1968
- var blendShape = new miniprogram.BlendShape(name);
1969
- blendShape.addFrame(1.0, deltaPositions, deltaNormals, deltaTangents);
1970
- mesh.addBlendShape(blendShape);
1971
- meshRestoreInfo.blendShapes.push(new BlendShapeRestoreInfo(blendShape, deltaPosBufferInfo.restoreInfo, deltaNorBufferInfo == null ? void 0 : deltaNorBufferInfo.restoreInfo, deltaTanBufferInfo == null ? void 0 : deltaTanBufferInfo.restoreInfo));
1972
- }
2022
+ var promise = Promise.all([
2023
+ getBlendShapeData("POSITION", i),
2024
+ getBlendShapeData("NORMAL", i),
2025
+ getBlendShapeData("TANGENT", i)
2026
+ ]).then(function(infos) {
2027
+ var posBufferInfo = infos[0];
2028
+ var norBufferInfo = infos[1];
2029
+ var tanBufferInfo = infos[2];
2030
+ var target = glTFTargets[i];
2031
+ var posAccessor;
2032
+ var norAccessor;
2033
+ var tanAccessor;
2034
+ var positions = null;
2035
+ if (posBufferInfo) {
2036
+ posAccessor = accessors[target["POSITION"]];
2037
+ var _posAccessor_byteOffset;
2038
+ positions = GLTFUtils.bufferToVector3Array(posBufferInfo.data, posBufferInfo.stride, (_posAccessor_byteOffset = posAccessor.byteOffset) != null ? _posAccessor_byteOffset : 0, posAccessor.count);
2039
+ }
2040
+ var normals = null;
2041
+ if (norBufferInfo) {
2042
+ norAccessor = accessors[target["NORMAL"]];
2043
+ var _norAccessor_byteOffset;
2044
+ normals = GLTFUtils.bufferToVector3Array(norBufferInfo.data, norBufferInfo.stride, (_norAccessor_byteOffset = norAccessor.byteOffset) != null ? _norAccessor_byteOffset : 0, norAccessor.count);
2045
+ }
2046
+ var tangents = null;
2047
+ if (tanBufferInfo) {
2048
+ tanAccessor = accessors[target["NORMAL"]];
2049
+ var _tanAccessor_byteOffset;
2050
+ tangents = GLTFUtils.bufferToVector3Array(tanBufferInfo.data, tanBufferInfo.stride, (_tanAccessor_byteOffset = tanAccessor.byteOffset) != null ? _tanAccessor_byteOffset : 0, tanAccessor.count);
2051
+ }
2052
+ var blendShape = new miniprogram.BlendShape(name);
2053
+ blendShape.addFrame(1.0, positions, normals, tangents);
2054
+ mesh.addBlendShape(blendShape);
2055
+ var _posAccessor_byteOffset1, _norAccessor_byteOffset1, _tanAccessor_byteOffset1;
2056
+ meshRestoreInfo.blendShapes.push(new BlendShapeRestoreInfo(blendShape, new BlendShapeDataRestoreInfo(posBufferInfo.restoreInfo, posBufferInfo.stride, (_posAccessor_byteOffset1 = posAccessor.byteOffset) != null ? _posAccessor_byteOffset1 : 0, posAccessor.count), norBufferInfo ? new BlendShapeDataRestoreInfo(norBufferInfo.restoreInfo, norBufferInfo.stride, (_norAccessor_byteOffset1 = norAccessor.byteOffset) != null ? _norAccessor_byteOffset1 : 0, norAccessor.count) : null, tanBufferInfo ? new BlendShapeDataRestoreInfo(tanBufferInfo.restoreInfo, tanBufferInfo.stride, (_tanAccessor_byteOffset1 = tanAccessor.byteOffset) != null ? _tanAccessor_byteOffset1 : 0, tanAccessor.count) : null));
2057
+ });
2058
+ promises.push(promise);
2059
+ };
2060
+ var blendShapeNames = glTFMesh.extras ? glTFMesh.extras.targetNames : null;
2061
+ var promises = new Array();
2062
+ for(var i = 0, n = glTFTargets.length; i < n; i++)_loop(i);
2063
+ return Promise.all(promises);
1973
2064
  };
1974
2065
  return GLTFMeshParser;
1975
2066
  }(GLTFParser);
@@ -2121,51 +2212,58 @@ var GLTFSkinParser = /*#__PURE__*/ function(GLTFParser) {
2121
2212
  }
2122
2213
  var _proto = GLTFSkinParser.prototype;
2123
2214
  _proto.parse = function parse(context) {
2124
- var glTFResource = context.glTFResource, glTF = context.glTF; context.buffers;
2125
- var entities = glTFResource.entities;
2126
- var gltfSkins = glTF.skins;
2127
- if (!gltfSkins) return;
2128
- var count = gltfSkins.length;
2129
- var skins = new Array(count);
2130
- for(var i = 0; i < count; i++){
2215
+ var _loop = function(i) {
2131
2216
  var _gltfSkins_i = gltfSkins[i], inverseBindMatrices = _gltfSkins_i.inverseBindMatrices, skeleton = _gltfSkins_i.skeleton, joints = _gltfSkins_i.joints, _gltfSkins_i_name = _gltfSkins_i.name, name = _gltfSkins_i_name === void 0 ? "SKIN_" + i : _gltfSkins_i_name;
2132
2217
  var jointCount = joints.length;
2133
2218
  var skin = new miniprogram.Skin(name);
2134
2219
  skin.inverseBindMatrices.length = jointCount;
2135
2220
  // parse IBM
2136
2221
  var accessor = glTF.accessors[inverseBindMatrices];
2137
- var buffer = GLTFUtils.getAccessorBuffer(context, glTF.bufferViews, accessor).data;
2138
- for(var i1 = 0; i1 < jointCount; i1++){
2139
- var inverseBindMatrix = new miniprogram$1.Matrix();
2140
- inverseBindMatrix.copyFromArray(buffer, i1 * 16);
2141
- skin.inverseBindMatrices[i1] = inverseBindMatrix;
2142
- }
2143
- // get joints
2144
- for(var i2 = 0; i2 < jointCount; i2++){
2145
- var jointIndex = joints[i2];
2146
- var jointName = entities[jointIndex].name;
2147
- skin.joints[i2] = jointName;
2148
- // @todo Temporary solution, but it can alleviate the current BUG, and the skinning data mechanism of SkinnedMeshRenderer will be completely refactored in the future
2149
- for(var j = entities.length - 1; j >= 0; j--){
2150
- if (jointIndex !== j && entities[j].name === jointName) {
2151
- entities[j].name = jointName + "_" + j;
2222
+ var promise = GLTFUtils.getAccessorBuffer(context, glTF.bufferViews, accessor).then(function(bufferInfo) {
2223
+ var buffer = bufferInfo.data;
2224
+ for(var i = 0; i < jointCount; i++){
2225
+ var inverseBindMatrix = new miniprogram$1.Matrix();
2226
+ inverseBindMatrix.copyFromArray(buffer, i * 16);
2227
+ skin.inverseBindMatrices[i] = inverseBindMatrix;
2228
+ // get joints
2229
+ for(var i1 = 0; i1 < jointCount; i1++){
2230
+ var jointIndex = joints[i1];
2231
+ var jointName = entities[jointIndex].name;
2232
+ skin.joints[i1] = jointName;
2233
+ // @todo Temporary solution, but it can alleviate the current BUG, and the skinning data mechanism of SkinnedMeshRenderer will be completely refactored in the future
2234
+ for(var j = entities.length - 1; j >= 0; j--){
2235
+ if (jointIndex !== j && entities[j].name === jointName) {
2236
+ entities[j].name = jointName + "_" + j;
2237
+ }
2238
+ }
2239
+ }
2240
+ // get skeleton
2241
+ if (skeleton !== undefined) {
2242
+ skin.skeleton = entities[skeleton].name;
2243
+ } else {
2244
+ var rootBone = _this._findSkeletonRootBone(joints, entities);
2245
+ if (rootBone) {
2246
+ skin.skeleton = rootBone.name;
2247
+ } else {
2248
+ throw "Failed to find skeleton root bone.";
2249
+ }
2152
2250
  }
2153
2251
  }
2154
- }
2155
- // get skeleton
2156
- if (skeleton !== undefined) {
2157
- skin.skeleton = entities[skeleton].name;
2158
- } else {
2159
- var rootBone = this._findSkeletonRootBone(joints, entities);
2160
- if (rootBone) {
2161
- skin.skeleton = rootBone.name;
2162
- } else {
2163
- throw "Failed to find skeleton root bone.";
2164
- }
2165
- }
2166
- skins[i] = skin;
2167
- }
2168
- glTFResource.skins = skins;
2252
+ return skin;
2253
+ });
2254
+ promises.push(promise);
2255
+ };
2256
+ var _this = this;
2257
+ var glTFResource = context.glTFResource, glTF = context.glTF;
2258
+ var entities = glTFResource.entities;
2259
+ var gltfSkins = glTF.skins;
2260
+ if (!gltfSkins) return;
2261
+ var count = gltfSkins.length;
2262
+ var promises = new Array();
2263
+ for(var i = 0; i < count; i++)_loop(i);
2264
+ return miniprogram.AssetPromise.all(promises).then(function(skins) {
2265
+ glTFResource.skins = skins;
2266
+ });
2169
2267
  };
2170
2268
  _proto._findSkeletonRootBone = function _findSkeletonRootBone(joints, entities) {
2171
2269
  var paths = {};
@@ -2206,13 +2304,14 @@ var GLTFTextureParser = /*#__PURE__*/ function(GLTFParser) {
2206
2304
  var _proto = GLTFTextureParser.prototype;
2207
2305
  _proto.parse = function parse(context) {
2208
2306
  var _this = this;
2209
- var glTFResource = context.glTFResource, glTF = context.glTF, buffers = context.buffers;
2307
+ var glTFResource = context.glTFResource, glTF = context.glTF;
2210
2308
  var engine = glTFResource.engine, url = glTFResource.url;
2211
2309
  if (glTF.textures) {
2212
2310
  var texturesPromiseInfo = context.texturesPromiseInfo;
2213
2311
  miniprogram.AssetPromise.all(glTF.textures.map(function(param, index) {
2214
2312
  var sampler = param.sampler, _param_source = param.source, source = _param_source === void 0 ? 0 : _param_source, textureName = param.name;
2215
2313
  var _glTF_images_source = glTF.images[source], uri = _glTF_images_source.uri, bufferViewIndex = _glTF_images_source.bufferView, mimeType = _glTF_images_source.mimeType, imageName = _glTF_images_source.name;
2314
+ var samplerInfo = sampler !== undefined && _this._getSamplerInfo(glTF.samplers[sampler]);
2216
2315
  if (uri) {
2217
2316
  // TODO: support ktx extension https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_texture_basisu/README.md
2218
2317
  var index1 = uri.lastIndexOf(".");
@@ -2220,31 +2319,36 @@ var GLTFTextureParser = /*#__PURE__*/ function(GLTFParser) {
2220
2319
  var type = ext.startsWith("ktx") ? miniprogram.AssetType.KTX : miniprogram.AssetType.Texture2D;
2221
2320
  return engine.resourceManager.load({
2222
2321
  url: miniprogram.Utils.resolveAbsoluteUrl(url, uri),
2223
- type: type
2322
+ type: type,
2323
+ params: {
2324
+ mipmap: samplerInfo == null ? void 0 : samplerInfo.mipmap
2325
+ }
2224
2326
  }).then(function(texture) {
2225
2327
  if (!texture.name) {
2226
2328
  texture.name = textureName || imageName || "texture_" + index1;
2227
2329
  }
2228
2330
  if (sampler !== undefined) {
2229
- _this._parseSampler(texture, glTF.samplers[sampler]);
2331
+ _this._parseSampler(texture, samplerInfo);
2230
2332
  }
2231
2333
  return texture;
2232
2334
  });
2233
2335
  } else {
2234
2336
  var bufferView = glTF.bufferViews[bufferViewIndex];
2235
- var buffer = buffers[bufferView.buffer];
2236
- var imageBuffer = new Uint8Array(buffer, bufferView.byteOffset, bufferView.byteLength);
2237
- return GLTFUtils.loadImageBuffer(imageBuffer, mimeType).then(function(image) {
2238
- var texture = new miniprogram.Texture2D(engine, image.width, image.height);
2239
- texture.setImageSource(image);
2240
- texture.generateMipmaps();
2241
- texture.name = textureName || imageName || "texture_" + index;
2242
- if (sampler !== undefined) {
2243
- _this._parseSampler(texture, glTF.samplers[sampler]);
2244
- }
2245
- var bufferTextureRestoreInfo = new BufferTextureRestoreInfo(texture, bufferView, mimeType);
2246
- context.contentRestorer.bufferTextures.push(bufferTextureRestoreInfo);
2247
- return texture;
2337
+ return context.getBuffers().then(function(buffers) {
2338
+ var buffer = buffers[bufferView.buffer];
2339
+ var imageBuffer = new Uint8Array(buffer, bufferView.byteOffset, bufferView.byteLength);
2340
+ return GLTFUtils.loadImageBuffer(imageBuffer, mimeType).then(function(image) {
2341
+ var texture = new miniprogram.Texture2D(engine, image.width, image.height, undefined, samplerInfo == null ? void 0 : samplerInfo.mipmap);
2342
+ texture.setImageSource(image);
2343
+ texture.generateMipmaps();
2344
+ texture.name = textureName || imageName || "texture_" + index;
2345
+ if (sampler !== undefined) {
2346
+ _this._parseSampler(texture, samplerInfo);
2347
+ }
2348
+ var bufferTextureRestoreInfo = new BufferTextureRestoreInfo(texture, bufferView, mimeType);
2349
+ context.contentRestorer.bufferTextures.push(bufferTextureRestoreInfo);
2350
+ return texture;
2351
+ });
2248
2352
  });
2249
2353
  }
2250
2354
  })).then(function(textures) {
@@ -2254,22 +2358,39 @@ var GLTFTextureParser = /*#__PURE__*/ function(GLTFParser) {
2254
2358
  return texturesPromiseInfo.promise;
2255
2359
  }
2256
2360
  };
2257
- _proto._parseSampler = function _parseSampler(texture, sampler) {
2258
- var magFilter = sampler.magFilter, minFilter = sampler.minFilter, wrapS = sampler.wrapS, wrapT = sampler.wrapT;
2259
- if (magFilter || minFilter) {
2361
+ _proto._getSamplerInfo = function _getSamplerInfo(sampler) {
2362
+ var minFilter = sampler.minFilter, magFilter = sampler.magFilter, wrapS = sampler.wrapS, wrapT = sampler.wrapT;
2363
+ var info = {};
2364
+ if (minFilter || magFilter) {
2365
+ info.mipmap = minFilter >= TextureMinFilter.NEAREST_MIPMAP_NEAREST;
2260
2366
  if (magFilter === TextureMagFilter.NEAREST) {
2261
- texture.filterMode = miniprogram.TextureFilterMode.Point;
2262
- } else if (minFilter <= TextureMinFilter.LINEAR_MIPMAP_NEAREST) {
2263
- texture.filterMode = miniprogram.TextureFilterMode.Bilinear;
2367
+ info.filterMode = miniprogram.TextureFilterMode.Point;
2264
2368
  } else {
2265
- texture.filterMode = miniprogram.TextureFilterMode.Trilinear;
2369
+ if (minFilter <= TextureMinFilter.LINEAR_MIPMAP_NEAREST) {
2370
+ info.filterMode = miniprogram.TextureFilterMode.Bilinear;
2371
+ } else {
2372
+ info.filterMode = miniprogram.TextureFilterMode.Trilinear;
2373
+ }
2266
2374
  }
2267
2375
  }
2268
2376
  if (wrapS) {
2269
- texture.wrapModeU = GLTFTextureParser._wrapMap[wrapS];
2377
+ info.wrapModeU = GLTFTextureParser._wrapMap[wrapS];
2270
2378
  }
2271
2379
  if (wrapT) {
2272
- texture.wrapModeV = GLTFTextureParser._wrapMap[wrapT];
2380
+ info.wrapModeV = GLTFTextureParser._wrapMap[wrapT];
2381
+ }
2382
+ return info;
2383
+ };
2384
+ _proto._parseSampler = function _parseSampler(texture, samplerInfo) {
2385
+ var filterMode = samplerInfo.filterMode, wrapModeU = samplerInfo.wrapModeU, wrapModeV = samplerInfo.wrapModeV;
2386
+ if (filterMode !== undefined) {
2387
+ texture.filterMode = filterMode;
2388
+ }
2389
+ if (wrapModeU !== undefined) {
2390
+ texture.wrapModeU = wrapModeU;
2391
+ }
2392
+ if (wrapModeV !== undefined) {
2393
+ texture.wrapModeV = wrapModeV;
2273
2394
  }
2274
2395
  };
2275
2396
  return GLTFTextureParser;
@@ -2367,33 +2488,16 @@ var GLTFValidator = /*#__PURE__*/ function(GLTFParser1) {
2367
2488
 
2368
2489
  /**
2369
2490
  * Product after glTF parser, usually, `defaultSceneRoot` is only needed to use.
2370
- */ var GLTFResource = /*#__PURE__*/ function(EngineObject) {
2371
- _inherits(GLTFResource, EngineObject);
2491
+ */ var GLTFResource = /*#__PURE__*/ function(ReferResource) {
2492
+ _inherits(GLTFResource, ReferResource);
2372
2493
  function GLTFResource(engine, url) {
2373
2494
  var _this;
2374
- _this = EngineObject.call(this, engine) || this;
2495
+ _this = ReferResource.call(this, engine) || this;
2375
2496
  _this.url = url;
2376
2497
  return _this;
2377
2498
  }
2378
- var _proto = GLTFResource.prototype;
2379
- /**
2380
- * @internal
2381
- */ _proto._onDestroy = function _onDestroy() {
2382
- EngineObject.prototype._onDestroy.call(this);
2383
- this.defaultSceneRoot.destroy();
2384
- this.textures = null;
2385
- this.materials = null;
2386
- this.meshes = null;
2387
- this.skins = null;
2388
- this.animations = null;
2389
- this.entities = null;
2390
- this.cameras = null;
2391
- this.lights = null;
2392
- this.sceneRoots = null;
2393
- this.extensionsData = null;
2394
- };
2395
2499
  return GLTFResource;
2396
- }(miniprogram.EngineObject);
2500
+ }(miniprogram.ReferResource);
2397
2501
 
2398
2502
  var GLTFLoader = /*#__PURE__*/ function(Loader) {
2399
2503
  _inherits(GLTFLoader, Loader);
@@ -2423,8 +2527,14 @@ var GLTFLoader = /*#__PURE__*/ function(Loader) {
2423
2527
  resourceManager.addContentRestorer(restorer);
2424
2528
  masterPromiseInfo.resolve(glTFResource);
2425
2529
  }).catch(function(e) {
2426
- console.error(e);
2427
- masterPromiseInfo.reject("Error loading glTF model from " + url + " .");
2530
+ var msg = "Error loading glTF model from " + url + " : " + e;
2531
+ miniprogram.Logger.error(msg);
2532
+ masterPromiseInfo.reject(msg);
2533
+ context.defaultSceneRootPromiseInfo.reject(e);
2534
+ context.texturesPromiseInfo.reject(e);
2535
+ context.materialsPromiseInfo.reject(e);
2536
+ context.meshesPromiseInfo.reject(e);
2537
+ context.animationClipsPromiseInfo.reject(e);
2428
2538
  });
2429
2539
  return context.promiseMap;
2430
2540
  };
@@ -3026,6 +3136,15 @@ KTXLoader = __decorate([
3026
3136
  ])
3027
3137
  ], KTXLoader);
3028
3138
 
3139
+ function parseProperty(object, key, value) {
3140
+ if (typeof value === "object") {
3141
+ for(var subKey in value){
3142
+ parseProperty(object[key], subKey, value[subKey]);
3143
+ }
3144
+ } else {
3145
+ object[key] = value;
3146
+ }
3147
+ }
3029
3148
  var MaterialLoader = /*#__PURE__*/ function(Loader) {
3030
3149
  _inherits(MaterialLoader, Loader);
3031
3150
  function MaterialLoader() {
@@ -3037,7 +3156,7 @@ var MaterialLoader = /*#__PURE__*/ function(Loader) {
3037
3156
  return new miniprogram.AssetPromise(function(resolve, reject) {
3038
3157
  _this.request(item.url, _extends({}, item, {
3039
3158
  type: "json"
3040
- })).then(function(json) {
3159
+ })).then(function(materialSchema) {
3041
3160
  var _loop = function(key) {
3042
3161
  var _shaderData_key = shaderData[key], type = _shaderData_key.type, value = _shaderData_key.value;
3043
3162
  switch(type){
@@ -3065,27 +3184,8 @@ var MaterialLoader = /*#__PURE__*/ function(Loader) {
3065
3184
  }
3066
3185
  };
3067
3186
  var engine = resourceManager.engine;
3068
- var name = json.name, shader = json.shader, shaderData = json.shaderData, macros = json.macros, renderState = json.renderState;
3069
- var material;
3070
- switch(shader){
3071
- case "pbr":
3072
- material = new miniprogram.PBRMaterial(engine);
3073
- break;
3074
- case "pbr-specular":
3075
- material = new miniprogram.PBRSpecularMaterial(engine);
3076
- break;
3077
- case "unlit":
3078
- material = new miniprogram.UnlitMaterial(engine);
3079
- break;
3080
- case "blinn-phong":
3081
- material = new miniprogram.BlinnPhongMaterial(engine);
3082
- break;
3083
- case "bake-pbr":
3084
- // @todo refactor custom shader later
3085
- // @ts-ignore
3086
- material = new miniprogram.PBRBaseMaterial(engine, miniprogram.Shader.find("bake-pbr"));
3087
- break;
3088
- }
3187
+ var name = materialSchema.name, shader = materialSchema.shader, shaderData = materialSchema.shaderData, macros = materialSchema.macros, renderState = materialSchema.renderState;
3188
+ var material = new miniprogram.Material(engine, miniprogram.Shader.find(shader));
3089
3189
  material.name = name;
3090
3190
  var texturePromises = new Array();
3091
3191
  var materialShaderData = material.shaderData;
@@ -3098,9 +3198,7 @@ var MaterialLoader = /*#__PURE__*/ function(Loader) {
3098
3198
  materialShaderData.enableMacro(name1, value);
3099
3199
  }
3100
3200
  }
3101
- for(var key1 in renderState){
3102
- material[key1] = renderState[key1];
3103
- }
3201
+ parseProperty(material, "renderState", renderState);
3104
3202
  return Promise.all(texturePromises).then(function() {
3105
3203
  resolve(material);
3106
3204
  });
@@ -3855,6 +3953,12 @@ exports.AnimationClipDecoder = __decorate([
3855
3953
  decoder("AnimationClip")
3856
3954
  ], exports.AnimationClipDecoder);
3857
3955
 
3956
+ exports.SpecularMode = void 0;
3957
+ (function(SpecularMode) {
3958
+ SpecularMode["Sky"] = "Sky";
3959
+ SpecularMode["Custom"] = "Custom";
3960
+ })(exports.SpecularMode || (exports.SpecularMode = {}));
3961
+
3858
3962
  var SceneParserContext = /*#__PURE__*/ function() {
3859
3963
  function SceneParserContext(originalData, scene) {
3860
3964
  this.originalData = originalData;
@@ -3982,7 +4086,7 @@ exports.MeshLoader = /*#__PURE__*/ function(Loader) {
3982
4086
  decode(data, resourceManager.engine).then(function(mesh) {
3983
4087
  resolve(mesh);
3984
4088
  });
3985
- });
4089
+ }).catch(reject);
3986
4090
  });
3987
4091
  };
3988
4092
  return MeshLoader;
@@ -4001,14 +4105,14 @@ exports.EditorTextureLoader = /*#__PURE__*/ function(Loader) {
4001
4105
  var _proto = EditorTextureLoader.prototype;
4002
4106
  _proto.load = function load(item, resourceManager) {
4003
4107
  var _this = this;
4004
- return new miniprogram.AssetPromise(function(resolve) {
4108
+ return new miniprogram.AssetPromise(function(resolve, reject) {
4005
4109
  _this.request(item.url, {
4006
4110
  type: "arraybuffer"
4007
4111
  }).then(function(data) {
4008
4112
  decode(data, resourceManager.engine).then(function(texture) {
4009
4113
  resolve(texture);
4010
4114
  });
4011
- });
4115
+ }).catch(reject);
4012
4116
  });
4013
4117
  };
4014
4118
  return EditorTextureLoader;
@@ -4385,7 +4489,7 @@ var AnimationClipLoader = /*#__PURE__*/ function(Loader) {
4385
4489
  _this.request(item.url, _extends({}, item, {
4386
4490
  type: "arraybuffer"
4387
4491
  })).then(function(data) {
4388
- return decode(data, resourceManager.engine);
4492
+ return decode(data, resourceManager.engine).then(resolve);
4389
4493
  }).catch(reject);
4390
4494
  });
4391
4495
  };
@@ -4413,16 +4517,32 @@ var SceneLoader = /*#__PURE__*/ function(Loader) {
4413
4517
  // @ts-ignore
4414
4518
  engine.resourceManager.initVirtualResources(data.files);
4415
4519
  return SceneParser.parse(engine, data).then(function(scene) {
4520
+ var promises = [];
4416
4521
  // parse ambient light
4417
4522
  var ambient = data.scene.ambient;
4418
- var ambientLightPromise = Promise.resolve();
4419
- if (ambient.ambientLight) {
4420
- ambientLightPromise = resourceManager// @ts-ignore
4421
- .getResourceByRef(data.scene.ambient.ambientLight).then(function(light) {
4422
- scene.ambientLight = light;
4523
+ var useCustomAmbient = ambient.specularMode === "Custom";
4524
+ if (useCustomAmbient && ambient.customAmbientLight) {
4525
+ // @ts-ignore
4526
+ // prettier-ignore
4527
+ var customAmbientPromise = resourceManager.getResourceByRef(ambient.customAmbientLight).then(function(ambientLight) {
4528
+ scene.ambientLight = ambientLight;
4529
+ scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
4530
+ scene.ambientLight.specularIntensity = ambient.specularIntensity;
4531
+ scene.ambientLight.diffuseMode = ambient.diffuseMode;
4532
+ scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
4533
+ });
4534
+ promises.push(customAmbientPromise);
4535
+ } else if (!useCustomAmbient && ambient.ambientLight) {
4536
+ // @ts-ignore
4537
+ // prettier-ignore
4538
+ var ambientLightPromise = resourceManager.getResourceByRef(ambient.ambientLight).then(function(ambientLight) {
4539
+ scene.ambientLight = ambientLight;
4423
4540
  scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
4424
4541
  scene.ambientLight.specularIntensity = ambient.specularIntensity;
4542
+ scene.ambientLight.diffuseMode = ambient.diffuseMode;
4543
+ scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
4425
4544
  });
4545
+ promises.push(ambientLightPromise);
4426
4546
  } else {
4427
4547
  scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
4428
4548
  scene.ambientLight.specularIntensity = ambient.specularIntensity;
@@ -4430,30 +4550,34 @@ var SceneLoader = /*#__PURE__*/ function(Loader) {
4430
4550
  }
4431
4551
  var background = data.scene.background;
4432
4552
  scene.background.mode = background.mode;
4433
- var backgroundPromise = Promise.resolve();
4434
4553
  switch(scene.background.mode){
4435
4554
  case miniprogram.BackgroundMode.SolidColor:
4436
4555
  scene.background.solidColor.copyFrom(background.color);
4437
4556
  break;
4438
4557
  case miniprogram.BackgroundMode.Sky:
4439
- if (background.sky) {
4558
+ if (background.skyMesh && background.skyMaterial) {
4559
+ // @ts-ignore
4560
+ var skyMeshPromise = resourceManager.getResourceByRef(background.skyMesh).then(function(mesh) {
4561
+ scene.background.sky.mesh = mesh;
4562
+ });
4440
4563
  // @ts-ignore
4441
- backgroundPromise = resourceManager.getResourceByRef(background.sky).then(function(light) {
4442
- var sky = scene.background.sky;
4443
- var skyMaterial = new miniprogram.SkyBoxMaterial(engine);
4444
- skyMaterial.texture = light.specularTexture;
4445
- skyMaterial.textureDecodeRGBM = true;
4446
- sky.material = skyMaterial;
4447
- sky.mesh = miniprogram.PrimitiveMesh.createCuboid(engine, 1, 1, 1);
4564
+ // prettier-ignore
4565
+ var skyMaterialPromise = resourceManager.getResourceByRef(background.skyMaterial).then(function(material) {
4566
+ scene.background.sky.material = material;
4448
4567
  });
4568
+ promises.push(skyMeshPromise, skyMaterialPromise);
4569
+ } else {
4570
+ miniprogram.Logger.warn("Sky background mode requires skyMesh and skyMaterial");
4449
4571
  }
4450
4572
  break;
4451
4573
  case miniprogram.BackgroundMode.Texture:
4452
4574
  if (background.texture) {
4453
4575
  // @ts-ignore
4454
- backgroundPromise = resourceManager.getResourceByRef(background.texture).then(function(texture) {
4576
+ // prettier-ignore
4577
+ var backgroundPromise = resourceManager.getResourceByRef(background.texture).then(function(texture) {
4455
4578
  scene.background.texture = texture;
4456
4579
  });
4580
+ promises.push(backgroundPromise);
4457
4581
  }
4458
4582
  break;
4459
4583
  }
@@ -4465,10 +4589,7 @@ var SceneLoader = /*#__PURE__*/ function(Loader) {
4465
4589
  if (shadow.shadowDistance != undefined) scene.shadowDistance = shadow.shadowDistance;
4466
4590
  if (shadow.shadowCascades != undefined) scene.shadowCascades = shadow.shadowCascades;
4467
4591
  }
4468
- return Promise.all([
4469
- ambientLightPromise,
4470
- backgroundPromise
4471
- ]).then(function() {
4592
+ return Promise.all(promises).then(function() {
4472
4593
  resolve(scene);
4473
4594
  });
4474
4595
  });
@@ -4511,7 +4632,7 @@ var KHR_draco_mesh_compression = (_KHR_draco_mesh_compression = /*#__PURE__*/ fu
4511
4632
  };
4512
4633
  _proto.createAndParse = function createAndParse(context, schema, glTFPrimitive, glTFMesh) {
4513
4634
  var _this = this;
4514
- var glTF = context.glTF, buffers = context.buffers, engine = context.glTFResource.engine;
4635
+ var glTF = context.glTF, engine = context.glTFResource.engine;
4515
4636
  var bufferViews = glTF.bufferViews, accessors = glTF.accessors;
4516
4637
  var bufferViewIndex = schema.bufferView, gltfAttributeMap = schema.attributes;
4517
4638
  var attributeMap = {};
@@ -4533,21 +4654,23 @@ var KHR_draco_mesh_compression = (_KHR_draco_mesh_compression = /*#__PURE__*/ fu
4533
4654
  useUniqueIDs: true,
4534
4655
  indexType: indexType
4535
4656
  };
4536
- var buffer = GLTFUtils.getBufferViewData(bufferViews[bufferViewIndex], buffers);
4537
- return KHR_draco_mesh_compression._decoder.decode(buffer, taskConfig).then(function(decodedGeometry) {
4538
- var mesh = new miniprogram.ModelMesh(engine, glTFMesh.name);
4539
- return _this._parseMeshFromGLTFPrimitiveDraco(mesh, glTFMesh, glTFPrimitive, glTF, function(attributeSemantic) {
4540
- for(var j = 0; j < decodedGeometry.attributes.length; j++){
4541
- if (decodedGeometry.attributes[j].name === attributeSemantic) {
4542
- return decodedGeometry.attributes[j].array;
4657
+ return context.getBuffers().then(function(buffers) {
4658
+ var buffer = GLTFUtils.getBufferViewData(bufferViews[bufferViewIndex], buffers);
4659
+ return KHR_draco_mesh_compression._decoder.decode(buffer, taskConfig).then(function(decodedGeometry) {
4660
+ var mesh = new miniprogram.ModelMesh(engine, glTFMesh.name);
4661
+ return _this._parseMeshFromGLTFPrimitiveDraco(mesh, glTFMesh, glTFPrimitive, glTF, function(attributeSemantic) {
4662
+ for(var j = 0; j < decodedGeometry.attributes.length; j++){
4663
+ if (decodedGeometry.attributes[j].name === attributeSemantic) {
4664
+ return decodedGeometry.attributes[j].array;
4665
+ }
4543
4666
  }
4544
- }
4545
- return null;
4546
- }, function(attributeSemantic, shapeIndex) {
4547
- throw "BlendShape animation is not supported when using draco.";
4548
- }, function() {
4549
- return decodedGeometry.index.array;
4550
- }, context.keepMeshData);
4667
+ return null;
4668
+ }, function(attributeSemantic, shapeIndex) {
4669
+ throw "BlendShape animation is not supported when using draco.";
4670
+ }, function() {
4671
+ return decodedGeometry.index.array;
4672
+ }, context.keepMeshData);
4673
+ });
4551
4674
  });
4552
4675
  };
4553
4676
  _proto._parseMeshFromGLTFPrimitiveDraco = function _parseMeshFromGLTFPrimitiveDraco(mesh, gltfMesh, gltfPrimitive, gltf, getVertexBufferData, getBlendShapeData, getIndexBufferData, keepMeshData) {
@@ -4646,7 +4769,7 @@ var KHR_draco_mesh_compression = (_KHR_draco_mesh_compression = /*#__PURE__*/ fu
4646
4769
  mesh.addSubMesh(0, vertexCount, mode);
4647
4770
  }
4648
4771
  // BlendShapes
4649
- targets && GLTFMeshParser._createBlendShape(mesh, null, gltfMesh, targets, getBlendShapeData);
4772
+ targets && GLTFMeshParser._createBlendShape(mesh, null, gltfMesh, accessors, targets, getBlendShapeData);
4650
4773
  mesh.uploadData(!keepMeshData);
4651
4774
  return Promise.resolve(mesh);
4652
4775
  };