@galacean/engine-loader 1.1.0-beta.0 → 1.1.0-beta.10

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.
package/dist/module.js CHANGED
@@ -1,4 +1,4 @@
1
- import { Utils, ModelMesh, BlendShape, Texture2D, Entity, Loader, Transform, Animator, DirectLight, Camera, MeshRenderer, ParticleRenderer, PointLight, SpotLight, Script, SpriteMask, SpriteRenderer, TextRenderer, AnimationClip, AnimationEvent, AnimationRefCurve, Keyframe, AnimationQuaternionCurve, AnimationColorCurve, AnimationVector4Curve, AnimationVector3Curve, AnimationVector2Curve, AnimationFloatArrayCurve, AnimationArrayCurve, AnimationFloatCurve, Scene, resourceLoader, AssetPromise, AssetType, AnimatorController, AnimatorControllerLayer, AnimatorStateMachine, AnimatorStateTransition, TextureCube, TextureFilterMode, TextureCubeFace, AmbientLight, DiffuseMode, Font, ReferResource, IndexFormat, VertexElementFormat, GLCapabilityType, Logger, TextureFormat, request, ContentRestorer, InterpolationType, SkinnedMeshRenderer, PBRMaterial, BlinnPhongMaterial, PBRSpecularMaterial, TextureCoordinate, RenderFace, VertexElement, Buffer, BufferBindFlag, BufferUsage, Skin, TextureWrapMode as TextureWrapMode$1, Material, Shader, SpriteAtlas, Sprite, BackgroundMode, UnlitMaterial } from '@galacean/engine-core';
1
+ import { Utils, ModelMesh, BlendShape, Texture2D, Loader, Entity, Transform, Animator, DirectLight, Camera, MeshRenderer, ParticleRenderer, PointLight, SpotLight, Script, SpriteMask, SpriteRenderer, TextRenderer, AnimationClip, AnimationEvent, AnimationRefCurve, Keyframe, AnimationQuaternionCurve, AnimationColorCurve, AnimationVector4Curve, AnimationVector3Curve, AnimationVector2Curve, AnimationFloatArrayCurve, AnimationArrayCurve, AnimationFloatCurve, Scene, resourceLoader, AssetPromise, AssetType, AnimatorController, AnimatorControllerLayer, AnimatorStateMachine, AnimatorStateTransition, TextureCube, TextureFilterMode, TextureCubeFace, AmbientLight, DiffuseMode, Font, ReferResource, IndexFormat, VertexElementFormat, GLCapabilityType, Logger, TextureFormat, request, ContentRestorer, InterpolationType, SkinnedMeshRenderer, PBRMaterial, BlinnPhongMaterial, PBRSpecularMaterial, TextureCoordinate, RenderFace, VertexElement, Buffer, BufferBindFlag, BufferUsage, Skin, TextureWrapMode as TextureWrapMode$1, Material, Shader, SpriteAtlas, Sprite, BackgroundMode, UnlitMaterial } from '@galacean/engine-core';
2
2
  import { Color, Vector4, Vector3, Vector2, Quaternion, SphericalHarmonics3, MathUtil, BoundingBox, Matrix, Rect } from '@galacean/engine-math';
3
3
  import { GLCompressedTextureInternalFormat } from '@galacean/engine-rhi-webgl';
4
4
  import { DRACODecoder } from '@galacean/engine-draco';
@@ -523,12 +523,12 @@ function _construct(Parent, args, Class) {
523
523
  }
524
524
 
525
525
  var ReflectionParser = /*#__PURE__*/ function() {
526
- function ReflectionParser() {}
527
- ReflectionParser.registerCustomParseComponent = function registerCustomParseComponent(componentType, handle) {
528
- this.customParseComponentHandles[componentType] = handle;
529
- };
530
- ReflectionParser.parseEntity = function parseEntity(entityConfig, engine) {
531
- return ReflectionParser.getEntityByConfig(entityConfig, engine).then(function(entity) {
526
+ function ReflectionParser(_context) {
527
+ this._context = _context;
528
+ }
529
+ var _proto = ReflectionParser.prototype;
530
+ _proto.parseEntity = function parseEntity(entityConfig) {
531
+ return this._getEntityByConfig(entityConfig).then(function(entity) {
532
532
  var _entityConfig_isActive;
533
533
  entity.isActive = (_entityConfig_isActive = entityConfig.isActive) != null ? _entityConfig_isActive : true;
534
534
  var position = entityConfig.position, rotation = entityConfig.rotation, scale = entityConfig.scale;
@@ -538,72 +538,29 @@ var ReflectionParser = /*#__PURE__*/ function() {
538
538
  return entity;
539
539
  });
540
540
  };
541
- ReflectionParser.getEntityByConfig = function getEntityByConfig(entityConfig, engine) {
542
- // @ts-ignore
543
- var assetRefId = entityConfig.assetRefId;
544
- if (assetRefId) {
545
- return engine.resourceManager// @ts-ignore
546
- .getResourceByRef({
547
- refId: assetRefId,
548
- key: entityConfig.key,
549
- isClone: entityConfig.isClone
550
- }).then(function(entity) {
551
- entity.name = entityConfig.name;
552
- return entity;
553
- });
554
- } else {
555
- var entity = new Entity(engine, entityConfig.name);
556
- return Promise.resolve(entity);
557
- }
558
- };
559
- ReflectionParser.parseClassObject = function parseClassObject(item, engine, resourceManager) {
560
- if (resourceManager === void 0) resourceManager = engine.resourceManager;
541
+ _proto.parseClassObject = function parseClassObject(item) {
561
542
  var Class = Loader.getClass(item.class);
562
543
  var _item_constructParams;
563
544
  var params = (_item_constructParams = item.constructParams) != null ? _item_constructParams : [];
564
545
  var instance = _construct(Class, [].concat(params));
565
- return this.parsePropsAndMethods(instance, item, engine, resourceManager);
566
- };
567
- ReflectionParser.parseBasicType = function parseBasicType(value, engine, resourceManager) {
568
- if (resourceManager === void 0) resourceManager = engine.resourceManager;
569
- var _this = this;
570
- if (Array.isArray(value)) {
571
- return Promise.all(value.map(function(item) {
572
- return _this.parseBasicType(item, engine, resourceManager);
573
- }));
574
- } else if (typeof value === "object" && value != null) {
575
- if (this._isClass(value)) {
576
- // class object
577
- return this.parseClassObject(value, engine, resourceManager);
578
- } else if (this._isRef(value)) {
579
- // reference object
580
- return resourceManager.getResourceByRef(value);
581
- } else {
582
- // basic type
583
- return Promise.resolve(value);
584
- }
585
- } else {
586
- return Promise.resolve(value);
587
- }
546
+ return this.parsePropsAndMethods(instance, item);
588
547
  };
589
- ReflectionParser.parsePropsAndMethods = function parsePropsAndMethods(instance, item, engine, resourceManager) {
590
- if (resourceManager === void 0) resourceManager = engine.resourceManager;
591
- var _this = this;
548
+ _proto.parsePropsAndMethods = function parsePropsAndMethods(instance, item) {
592
549
  var promises = [];
593
550
  if (item.methods) {
594
551
  for(var methodName in item.methods){
595
552
  var methodParams = item.methods[methodName];
596
553
  for(var i = 0, count = methodParams.length; i < count; i++){
597
554
  var params = methodParams[i];
598
- var promise = this.parseMethod(instance, methodName, params, engine, resourceManager);
555
+ var promise = this.parseMethod(instance, methodName, params);
599
556
  promises.push(promise);
600
557
  }
601
558
  }
602
559
  }
603
560
  if (item.props) {
604
- var _this1 = this, _loop = function(key) {
561
+ var _this = this, _loop = function(key) {
605
562
  var value = item.props[key];
606
- var promise = _this1.parseBasicType(value, engine).then(function(v) {
563
+ var promise = _this.parseBasicType(value).then(function(v) {
607
564
  return instance[key] = v;
608
565
  });
609
566
  promises.push(promise);
@@ -611,27 +568,76 @@ var ReflectionParser = /*#__PURE__*/ function() {
611
568
  for(var key in item.props)_loop(key);
612
569
  }
613
570
  return Promise.all(promises).then(function() {
614
- var handle = _this.customParseComponentHandles[instance.constructor.name];
615
- if (handle) return handle(instance, item, engine);
571
+ var handle = ReflectionParser.customParseComponentHandles[instance.constructor.name];
572
+ if (handle) return handle(instance, item);
616
573
  else return instance;
617
574
  });
618
575
  };
619
- ReflectionParser.parseMethod = function parseMethod(instance, methodName, methodParams, engine, resourceManager) {
620
- if (resourceManager === void 0) resourceManager = engine.resourceManager;
576
+ _proto.parseMethod = function parseMethod(instance, methodName, methodParams) {
621
577
  var _this = this;
622
578
  return Promise.all(methodParams.map(function(param) {
623
- return _this.parseBasicType(param, engine, resourceManager);
579
+ return _this.parseBasicType(param);
624
580
  })).then(function(result) {
625
581
  var _instance;
626
582
  return (_instance = instance)[methodName].apply(_instance, [].concat(result));
627
583
  });
628
584
  };
585
+ _proto.parseBasicType = function parseBasicType(value) {
586
+ var _this = this;
587
+ if (Array.isArray(value)) {
588
+ return Promise.all(value.map(function(item) {
589
+ return _this.parseBasicType(item);
590
+ }));
591
+ } else if (typeof value === "object" && value != null) {
592
+ if (ReflectionParser._isClass(value)) {
593
+ // class object
594
+ return this.parseClassObject(value);
595
+ } else if (ReflectionParser._isAssetRef(value)) {
596
+ // reference object
597
+ // @ts-ignore
598
+ return this._context.resourceManager.getResourceByRef(value);
599
+ } else if (ReflectionParser._isEntityRef(value)) {
600
+ // entity reference
601
+ return Promise.resolve(this._context.entityMap.get(value.entityId));
602
+ } else {
603
+ // basic type
604
+ return Promise.resolve(value);
605
+ }
606
+ } else {
607
+ return Promise.resolve(value);
608
+ }
609
+ };
610
+ _proto._getEntityByConfig = function _getEntityByConfig(entityConfig) {
611
+ // @ts-ignore
612
+ var assetRefId = entityConfig.assetRefId;
613
+ var engine = this._context.engine;
614
+ if (assetRefId) {
615
+ return engine.resourceManager// @ts-ignore
616
+ .getResourceByRef({
617
+ refId: assetRefId,
618
+ key: entityConfig.key,
619
+ isClone: entityConfig.isClone
620
+ }).then(function(entity) {
621
+ entity.name = entityConfig.name;
622
+ return entity;
623
+ });
624
+ } else {
625
+ var entity = new Entity(engine, entityConfig.name);
626
+ return Promise.resolve(entity);
627
+ }
628
+ };
629
+ ReflectionParser.registerCustomParseComponent = function registerCustomParseComponent(componentType, handle) {
630
+ this.customParseComponentHandles[componentType] = handle;
631
+ };
629
632
  ReflectionParser._isClass = function _isClass(value) {
630
633
  return value["class"] != undefined;
631
634
  };
632
- ReflectionParser._isRef = function _isRef(value) {
635
+ ReflectionParser._isAssetRef = function _isAssetRef(value) {
633
636
  return value["refId"] != undefined;
634
637
  };
638
+ ReflectionParser._isEntityRef = function _isEntityRef(value) {
639
+ return value["entityId"] != undefined;
640
+ };
635
641
  return ReflectionParser;
636
642
  }();
637
643
  (function() {
@@ -899,6 +905,8 @@ var SceneParserContext = /*#__PURE__*/ function() {
899
905
  this.assets = new Map();
900
906
  this.entityConfigMap = new Map();
901
907
  this.rootIds = [];
908
+ this.engine = scene.engine;
909
+ this.resourceManager = scene.engine.resourceManager;
902
910
  }
903
911
  var _proto = SceneParserContext.prototype;
904
912
  _proto.destroy = function destroy() {
@@ -915,7 +923,7 @@ var SceneParserContext = /*#__PURE__*/ function() {
915
923
  function SceneParser(context) {
916
924
  var _this = this;
917
925
  this.context = context;
918
- this._engine = this.context.scene.engine;
926
+ this._engine = context.scene.engine;
919
927
  this._organizeEntities = this._organizeEntities.bind(this);
920
928
  this._parseComponents = this._parseComponents.bind(this);
921
929
  this._clearAndResolveScene = this._clearAndResolveScene.bind(this);
@@ -923,22 +931,24 @@ var SceneParserContext = /*#__PURE__*/ function() {
923
931
  _this._reject = reject;
924
932
  _this._resolve = resolve;
925
933
  });
934
+ this._reflectionParser = new ReflectionParser(context);
926
935
  }
927
936
  var _proto = SceneParser.prototype;
928
937
  /** start parse the scene */ _proto.start = function start() {
929
938
  this._parseEntities().then(this._organizeEntities).then(this._parseComponents).then(this._clearAndResolveScene).then(this._resolve).catch(this._reject);
930
939
  };
931
940
  _proto._parseEntities = function _parseEntities() {
941
+ var _this = this;
932
942
  var entitiesConfig = this.context.originalData.entities;
933
943
  var entityConfigMap = this.context.entityConfigMap;
934
944
  var entitiesMap = this.context.entityMap;
935
945
  var rootIds = this.context.rootIds;
936
- var engine = this._engine;
946
+ this._engine;
937
947
  var promises = entitiesConfig.map(function(entityConfig) {
938
948
  entityConfigMap.set(entityConfig.id, entityConfig);
939
949
  // record root entities
940
950
  if (!entityConfig.parent) rootIds.push(entityConfig.id);
941
- return ReflectionParser.parseEntity(entityConfig, engine);
951
+ return _this._reflectionParser.parseEntity(entityConfig);
942
952
  });
943
953
  return Promise.all(promises).then(function(entities) {
944
954
  for(var i = 0, l = entities.length; i < l; i++){
@@ -976,7 +986,7 @@ var SceneParserContext = /*#__PURE__*/ function() {
976
986
  component = entity.getComponent(Loader.getClass(key));
977
987
  }
978
988
  component = component || entity.addComponent(Loader.getClass(key));
979
- var promise = ReflectionParser.parsePropsAndMethods(component, componentConfig, entity.engine);
989
+ var promise = this._reflectionParser.parsePropsAndMethods(component, componentConfig);
980
990
  promises.push(promise);
981
991
  }
982
992
  }
@@ -2425,20 +2435,56 @@ var AbstractTranscoder = /*#__PURE__*/ function() {
2425
2435
  }();
2426
2436
 
2427
2437
  /** @internal */ function TranscodeWorkerCode$1() {
2428
- var concat = function concat(arrays) {
2429
- if (arrays.length === 1) return arrays[0];
2430
- var totalByteLength = 0;
2431
- for(var i = 0; i < arrays.length; i++){
2432
- totalByteLength += arrays[i].byteLength;
2438
+ self.onmessage = function onmessage(event) {
2439
+ var message = event.data;
2440
+ switch(message.type){
2441
+ case "init":
2442
+ init(message.transcoderWasm).then(function() {
2443
+ self.postMessage("init-completed");
2444
+ }).catch(function(e) {
2445
+ return self.postMessage({
2446
+ error: e
2447
+ });
2448
+ });
2449
+ break;
2450
+ case "transcode":
2451
+ init().then(function(KTX2File) {
2452
+ var result = transcode(message.buffer, message.format, KTX2File);
2453
+ // @ts-ignore
2454
+ result.type = "transcoded";
2455
+ self.postMessage(result);
2456
+ }).catch(function(e) {
2457
+ return self.postMessage({
2458
+ error: e
2459
+ });
2460
+ });
2461
+ break;
2433
2462
  }
2434
- var result = new Uint8Array(totalByteLength);
2435
- var byteOffset = 0;
2436
- for(var i1 = 0; i1 < arrays.length; i1++){
2437
- result.set(arrays[i1], byteOffset);
2438
- byteOffset += arrays[i1].byteLength;
2463
+ };
2464
+ }
2465
+ var _init = function init() {
2466
+ var initPromise;
2467
+ return function init(wasmBinary) {
2468
+ if (!initPromise) {
2469
+ initPromise = new Promise(function(resolve, reject) {
2470
+ var BasisModule = {
2471
+ wasmBinary: wasmBinary,
2472
+ onRuntimeInitialized: function() {
2473
+ return resolve(BasisModule);
2474
+ },
2475
+ onAbort: reject
2476
+ };
2477
+ self["BASIS"](BasisModule);
2478
+ }).then(function(BasisModule) {
2479
+ BasisModule.initializeBasis();
2480
+ return BasisModule.KTX2File;
2481
+ });
2439
2482
  }
2440
- return result;
2483
+ return initPromise;
2441
2484
  };
2485
+ };
2486
+ var init = _init();
2487
+ function transcode(buffer, targetFormat, KTX2File) {
2442
2488
  var getTranscodeFormatFromTarget = function getTranscodeFormatFromTarget(target, hasAlpha) {
2443
2489
  switch(target){
2444
2490
  case 2:
@@ -2455,76 +2501,24 @@ var AbstractTranscoder = /*#__PURE__*/ function() {
2455
2501
  return 7;
2456
2502
  }
2457
2503
  };
2458
- var init = function init(wasmBinary) {
2459
- transcodePromise = new Promise(function(resolve, reject) {
2460
- var BasisModule = {
2461
- wasmBinary: wasmBinary,
2462
- onRuntimeInitialized: function() {
2463
- return resolve(BasisModule);
2464
- },
2465
- onAbort: reject
2466
- };
2467
- self["BASIS"](BasisModule);
2468
- }).then(function(BasisModule) {
2469
- BasisModule.initializeBasis();
2470
- return BasisModule.KTX2File;
2471
- });
2472
- return transcodePromise;
2473
- };
2474
- var transcode = function transcode(buffer, targetFormat, KTX2File) {
2475
- var ktx2File = new KTX2File(new Uint8Array(buffer));
2476
- function cleanup() {
2477
- ktx2File.close();
2478
- ktx2File.delete();
2479
- }
2480
- if (!ktx2File.isValid()) {
2481
- cleanup();
2482
- throw new Error("Invalid or unsupported .ktx2 file");
2483
- }
2484
- var width = ktx2File.getWidth();
2485
- var height = ktx2File.getHeight();
2486
- var layerCount = ktx2File.getLayers() || 1;
2487
- var levelCount = ktx2File.getLevels();
2488
- var hasAlpha = ktx2File.getHasAlpha();
2489
- var faceCount = ktx2File.getFaces();
2490
- var format = getTranscodeFormatFromTarget(targetFormat, hasAlpha);
2491
- var faces = new Array(faceCount);
2492
- for(var face = 0; face < faceCount; face++){
2493
- var mipmaps = new Array(levelCount);
2494
- for(var mip = 0; mip < levelCount; mip++){
2495
- var layerMips = new Array(layerCount);
2496
- var mipWidth = void 0, mipHeight = void 0;
2497
- for(var layer = 0; layer < layerCount; layer++){
2498
- var levelInfo = ktx2File.getImageLevelInfo(mip, layer, face);
2499
- mipWidth = levelInfo.origWidth;
2500
- mipHeight = levelInfo.origHeight;
2501
- var dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, format));
2502
- var status = ktx2File.transcodeImage(dst, mip, layer, face, format, 0, -1, -1);
2503
- if (!status) {
2504
- cleanup();
2505
- throw new Error("transcodeImage failed.");
2506
- }
2507
- layerMips[layer] = dst;
2508
- }
2509
- mipmaps[mip] = {
2510
- data: concat(layerMips),
2511
- width: mipWidth,
2512
- height: mipHeight
2513
- };
2514
- }
2515
- faces[face] = mipmaps;
2504
+ var concat = function concat(arrays) {
2505
+ if (arrays.length === 1) return arrays[0];
2506
+ var totalByteLength = 0;
2507
+ for(var i = 0; i < arrays.length; i++){
2508
+ totalByteLength += arrays[i].byteLength;
2516
2509
  }
2517
- cleanup();
2518
- return {
2519
- faces: faces,
2520
- width: width,
2521
- height: height,
2522
- hasAlpha: hasAlpha,
2523
- faceCount: faceCount,
2524
- format: format
2525
- };
2510
+ var result = new Uint8Array(totalByteLength);
2511
+ var byteOffset = 0;
2512
+ for(var i1 = 0; i1 < arrays.length; i1++){
2513
+ result.set(arrays[i1], byteOffset);
2514
+ byteOffset += arrays[i1].byteLength;
2515
+ }
2516
+ return result;
2517
+ };
2518
+ var cleanup = function cleanup() {
2519
+ ktx2File.close();
2520
+ ktx2File.delete();
2526
2521
  };
2527
- var transcodePromise;
2528
2522
  var BasisFormat;
2529
2523
  (function(BasisFormat) {
2530
2524
  BasisFormat[BasisFormat["ETC1"] = 0] = "ETC1";
@@ -2550,31 +2544,56 @@ var AbstractTranscoder = /*#__PURE__*/ function() {
2550
2544
  TargetFormat[TargetFormat["RG8"] = 6] = "RG8";
2551
2545
  TargetFormat[TargetFormat["RGBA8"] = 7] = "RGBA8";
2552
2546
  })(TargetFormat || (TargetFormat = {}));
2553
- self.onmessage = function onmessage(event) {
2554
- var message = event.data;
2555
- switch(message.type){
2556
- case "init":
2557
- init(message.transcoderWasm).then(function() {
2558
- return self.postMessage("init-completed");
2559
- }).catch(function(e) {
2560
- return self.postMessage({
2561
- error: e
2562
- });
2563
- });
2564
- break;
2565
- case "transcode":
2566
- transcodePromise.then(function(KTX2File) {
2567
- var result = transcode(message.buffer, message.format, KTX2File);
2568
- // @ts-ignore
2569
- result.type = "transcoded";
2570
- self.postMessage(result);
2571
- }).catch(function(e) {
2572
- return self.postMessage({
2573
- error: e
2574
- });
2575
- });
2576
- break;
2547
+ var ktx2File = new KTX2File(new Uint8Array(buffer));
2548
+ if (!ktx2File.isValid()) {
2549
+ cleanup();
2550
+ throw new Error("Invalid or unsupported .ktx2 file");
2551
+ }
2552
+ if (!ktx2File.startTranscoding()) {
2553
+ cleanup();
2554
+ throw new Error("KTX2 startTranscoding failed");
2555
+ }
2556
+ var width = ktx2File.getWidth();
2557
+ var height = ktx2File.getHeight();
2558
+ var layerCount = ktx2File.getLayers() || 1;
2559
+ var levelCount = ktx2File.getLevels();
2560
+ var hasAlpha = ktx2File.getHasAlpha();
2561
+ var faceCount = ktx2File.getFaces();
2562
+ var format = getTranscodeFormatFromTarget(targetFormat, hasAlpha);
2563
+ var faces = new Array(faceCount);
2564
+ for(var face = 0; face < faceCount; face++){
2565
+ var mipmaps = new Array(levelCount);
2566
+ for(var mip = 0; mip < levelCount; mip++){
2567
+ var layerMips = new Array(layerCount);
2568
+ var mipWidth = void 0, mipHeight = void 0;
2569
+ for(var layer = 0; layer < layerCount; layer++){
2570
+ var levelInfo = ktx2File.getImageLevelInfo(mip, layer, face);
2571
+ mipWidth = levelInfo.origWidth;
2572
+ mipHeight = levelInfo.origHeight;
2573
+ var dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, format));
2574
+ var status = ktx2File.transcodeImage(dst, mip, layer, face, format, 0, -1, -1);
2575
+ if (!status) {
2576
+ cleanup();
2577
+ throw new Error("transcodeImage failed.");
2578
+ }
2579
+ layerMips[layer] = dst;
2580
+ }
2581
+ mipmaps[mip] = {
2582
+ data: concat(layerMips),
2583
+ width: mipWidth,
2584
+ height: mipHeight
2585
+ };
2577
2586
  }
2587
+ faces[face] = mipmaps;
2588
+ }
2589
+ cleanup();
2590
+ return {
2591
+ faces: faces,
2592
+ width: width,
2593
+ height: height,
2594
+ hasAlpha: hasAlpha,
2595
+ faceCount: faceCount,
2596
+ format: format
2578
2597
  };
2579
2598
  }
2580
2599
 
@@ -2595,23 +2614,49 @@ var AbstractTranscoder = /*#__PURE__*/ function() {
2595
2614
  })
2596
2615
  ]).then(function(param) {
2597
2616
  var jsCode = param[0], wasmBuffer = param[1];
2598
- var funcCode = TranscodeWorkerCode$1.toString();
2599
- var transcodeString = funcCode.substring(funcCode.indexOf("{"), funcCode.lastIndexOf("}") + 1);
2600
- var workerCode = "\n " + jsCode + "\n " + transcodeString + "\n ";
2601
- var workerURL = URL.createObjectURL(new Blob([
2602
- workerCode
2603
- ], {
2604
- type: "application/javascript"
2605
- }));
2606
- return _this._createTranscodePool(workerURL, wasmBuffer);
2617
+ if (_this.workerLimitCount === 0) {
2618
+ return new Promise(function(resolve, reject) {
2619
+ var scriptDom = document.createElement("script");
2620
+ scriptDom.src = URL.createObjectURL(new Blob([
2621
+ jsCode
2622
+ ], {
2623
+ type: "application/javascript"
2624
+ }));
2625
+ document.body.appendChild(scriptDom);
2626
+ scriptDom.onload = function() {
2627
+ init(wasmBuffer).then(function() {
2628
+ resolve(null);
2629
+ });
2630
+ };
2631
+ scriptDom.onerror = function() {
2632
+ reject();
2633
+ };
2634
+ });
2635
+ } else {
2636
+ var funcCode = TranscodeWorkerCode$1.toString();
2637
+ var transcodeString = funcCode.substring(funcCode.indexOf("{"), funcCode.lastIndexOf("}") + 1);
2638
+ var workerCode = "\n " + jsCode + "\n var init = (" + _init.toString() + ")();\n " + transcode.toString() + "\n " + transcodeString + "\n ";
2639
+ var workerURL = URL.createObjectURL(new Blob([
2640
+ workerCode
2641
+ ], {
2642
+ type: "application/javascript"
2643
+ }));
2644
+ return _this._createTranscodePool(workerURL, wasmBuffer);
2645
+ }
2607
2646
  });
2608
2647
  };
2609
- _proto.transcode = function transcode(buffer, format) {
2610
- return this._transcodeWorkerPool.postMessage({
2611
- buffer: buffer,
2612
- format: format,
2613
- type: "transcode"
2614
- });
2648
+ _proto.transcode = function transcode1(buffer, format) {
2649
+ if (this.workerLimitCount === 0) {
2650
+ return init().then(function(KTX2File) {
2651
+ return transcode(buffer, format, KTX2File);
2652
+ });
2653
+ } else {
2654
+ return this._transcodeWorkerPool.postMessage({
2655
+ buffer: buffer,
2656
+ format: format,
2657
+ type: "transcode"
2658
+ });
2659
+ }
2615
2660
  };
2616
2661
  return BinomialLLCTranscoder;
2617
2662
  }(AbstractTranscoder);
@@ -2839,7 +2884,7 @@ var KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2839
2884
  _proto.initialize = function initialize(engine, configuration) {
2840
2885
  if (configuration.ktx2Loader) {
2841
2886
  var options = configuration.ktx2Loader;
2842
- if (this._isKhronosSupported(options.priorityFormats, engine)) {
2887
+ if (this._isKhronosSupported(options.priorityFormats, engine) && options.workerCount !== 0) {
2843
2888
  return KTX2Loader._getKhronosTranscoder(options.workerCount).init();
2844
2889
  } else {
2845
2890
  return KTX2Loader._getBinomialLLCTranscoder(options.workerCount).init();
@@ -3560,12 +3605,12 @@ var GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3560
3605
  if (curve2.interpolation === InterpolationType.CubicSpine) {
3561
3606
  keyframe2.inTangent = Array.from(output.subarray(offset2, offset2 + outputSize));
3562
3607
  offset2 += outputSize;
3563
- keyframe2.value = output.subarray(offset2, offset2 + outputSize);
3608
+ keyframe2.value = output.slice(offset2, offset2 + outputSize);
3564
3609
  offset2 += outputSize;
3565
3610
  keyframe2.outTangent = Array.from(output.subarray(offset2, offset2 + outputSize));
3566
3611
  offset2 += outputSize;
3567
3612
  } else {
3568
- keyframe2.value = output.subarray(offset2, offset2 + outputSize);
3613
+ keyframe2.value = output.slice(offset2, offset2 + outputSize);
3569
3614
  offset2 += outputSize;
3570
3615
  }
3571
3616
  curve2.addKey(keyframe2);
@@ -4316,8 +4361,7 @@ var GLTFTextureParser = (_GLTFTextureParser = /*#__PURE__*/ function(GLTFParser1
4316
4361
  mipmap: (_samplerInfo = samplerInfo) == null ? void 0 : _samplerInfo.mipmap
4317
4362
  }
4318
4363
  }).then(function(texture) {
4319
- var _texture;
4320
- (_texture = texture).name || (_texture.name = textureName || imageName || "texture_" + index);
4364
+ texture.name = textureName || imageName || texture.name || "texture_" + index;
4321
4365
  useSampler && GLTFUtils.parseSampler(texture, samplerInfo);
4322
4366
  return texture;
4323
4367
  });
@@ -5424,6 +5468,39 @@ TextureCubeLoader = __decorate([
5424
5468
  ])
5425
5469
  ], TextureCubeLoader);
5426
5470
 
5471
+ var ProjectLoader = /*#__PURE__*/ function(Loader1) {
5472
+ _inherits(ProjectLoader, Loader1);
5473
+ function ProjectLoader() {
5474
+ return Loader1.apply(this, arguments);
5475
+ }
5476
+ var _proto = ProjectLoader.prototype;
5477
+ _proto.load = function load(item, resourceManager) {
5478
+ var _this = this;
5479
+ var engine = resourceManager.engine;
5480
+ return new AssetPromise(function(resolve, reject) {
5481
+ _this.request(item.url, {
5482
+ type: "json"
5483
+ }).then(function(data) {
5484
+ // @ts-ignore
5485
+ engine.resourceManager.initVirtualResources(data.files);
5486
+ return resourceManager.load({
5487
+ type: AssetType.Scene,
5488
+ url: data.scene
5489
+ }).then(function(scene) {
5490
+ engine.sceneManager.activeScene = scene;
5491
+ resolve();
5492
+ });
5493
+ }).catch(reject);
5494
+ });
5495
+ };
5496
+ return ProjectLoader;
5497
+ }(Loader);
5498
+ ProjectLoader = __decorate([
5499
+ resourceLoader(AssetType.Project, [
5500
+ "proj"
5501
+ ], false)
5502
+ ], ProjectLoader);
5503
+
5427
5504
  var SceneLoader = /*#__PURE__*/ function(Loader1) {
5428
5505
  _inherits(SceneLoader, Loader1);
5429
5506
  function SceneLoader() {
@@ -5442,32 +5519,28 @@ var SceneLoader = /*#__PURE__*/ function(Loader1) {
5442
5519
  // parse ambient light
5443
5520
  var ambient = data.scene.ambient;
5444
5521
  var useCustomAmbient = ambient.specularMode === "Custom";
5522
+ var useSH = ambient.diffuseMode === DiffuseMode.SphericalHarmonics;
5523
+ scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5524
+ scene.ambientLight.specularIntensity = ambient.specularIntensity;
5525
+ scene.ambientLight.diffuseMode = ambient.diffuseMode;
5526
+ scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5527
+ scene.ambientLight.specularTextureDecodeRGBM = true;
5445
5528
  if (useCustomAmbient && ambient.customAmbientLight) {
5446
- // @ts-ignore
5447
- // prettier-ignore
5448
- var customAmbientPromise = resourceManager.getResourceByRef(ambient.customAmbientLight).then(function(ambientLight) {
5449
- scene.ambientLight = ambientLight;
5450
- scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5451
- scene.ambientLight.specularIntensity = ambient.specularIntensity;
5452
- scene.ambientLight.diffuseMode = ambient.diffuseMode;
5453
- scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5454
- });
5455
- promises.push(customAmbientPromise);
5456
- } else if (!useCustomAmbient && ambient.ambientLight) {
5457
- // @ts-ignore
5458
- // prettier-ignore
5459
- var ambientLightPromise = resourceManager.getResourceByRef(ambient.ambientLight).then(function(ambientLight) {
5460
- scene.ambientLight = ambientLight;
5461
- scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5462
- scene.ambientLight.specularIntensity = ambient.specularIntensity;
5463
- scene.ambientLight.diffuseMode = ambient.diffuseMode;
5464
- scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5465
- });
5466
- promises.push(ambientLightPromise);
5467
- } else {
5468
- scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5469
- scene.ambientLight.specularIntensity = ambient.specularIntensity;
5470
- scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5529
+ promises.push(// @ts-ignore
5530
+ resourceManager.getResourceByRef(ambient.customAmbientLight).then(function(ambientLight) {
5531
+ scene.ambientLight.specularTexture = ambientLight.specularTexture;
5532
+ }));
5533
+ }
5534
+ if (ambient.ambientLight && (!useCustomAmbient || useSH)) {
5535
+ promises.push(// @ts-ignore
5536
+ resourceManager.getResourceByRef(ambient.ambientLight).then(function(ambientLight) {
5537
+ if (!useCustomAmbient) {
5538
+ scene.ambientLight.specularTexture = ambientLight.specularTexture;
5539
+ }
5540
+ if (useSH) {
5541
+ scene.ambientLight.diffuseSphericalHarmonics = ambientLight.diffuseSphericalHarmonics;
5542
+ }
5543
+ }));
5471
5544
  }
5472
5545
  var background = data.scene.background;
5473
5546
  scene.background.mode = background.mode;