@galacean/engine-loader 1.1.0-beta.1 → 1.1.0-beta.11

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/main.js CHANGED
@@ -527,12 +527,12 @@ function _construct(Parent, args, Class) {
527
527
  }
528
528
 
529
529
  var ReflectionParser = /*#__PURE__*/ function() {
530
- function ReflectionParser() {}
531
- ReflectionParser.registerCustomParseComponent = function registerCustomParseComponent(componentType, handle) {
532
- this.customParseComponentHandles[componentType] = handle;
533
- };
534
- ReflectionParser.parseEntity = function parseEntity(entityConfig, engine) {
535
- return ReflectionParser.getEntityByConfig(entityConfig, engine).then(function(entity) {
530
+ function ReflectionParser(_context) {
531
+ this._context = _context;
532
+ }
533
+ var _proto = ReflectionParser.prototype;
534
+ _proto.parseEntity = function parseEntity(entityConfig) {
535
+ return this._getEntityByConfig(entityConfig).then(function(entity) {
536
536
  var _entityConfig_isActive;
537
537
  entity.isActive = (_entityConfig_isActive = entityConfig.isActive) != null ? _entityConfig_isActive : true;
538
538
  var position = entityConfig.position, rotation = entityConfig.rotation, scale = entityConfig.scale;
@@ -542,72 +542,29 @@ var ReflectionParser = /*#__PURE__*/ function() {
542
542
  return entity;
543
543
  });
544
544
  };
545
- ReflectionParser.getEntityByConfig = function getEntityByConfig(entityConfig, engine) {
546
- // @ts-ignore
547
- var assetRefId = entityConfig.assetRefId;
548
- if (assetRefId) {
549
- return engine.resourceManager// @ts-ignore
550
- .getResourceByRef({
551
- refId: assetRefId,
552
- key: entityConfig.key,
553
- isClone: entityConfig.isClone
554
- }).then(function(entity) {
555
- entity.name = entityConfig.name;
556
- return entity;
557
- });
558
- } else {
559
- var entity = new engineCore.Entity(engine, entityConfig.name);
560
- return Promise.resolve(entity);
561
- }
562
- };
563
- ReflectionParser.parseClassObject = function parseClassObject(item, engine, resourceManager) {
564
- if (resourceManager === void 0) resourceManager = engine.resourceManager;
545
+ _proto.parseClassObject = function parseClassObject(item) {
565
546
  var Class = engineCore.Loader.getClass(item.class);
566
547
  var _item_constructParams;
567
548
  var params = (_item_constructParams = item.constructParams) != null ? _item_constructParams : [];
568
549
  var instance = _construct(Class, [].concat(params));
569
- return this.parsePropsAndMethods(instance, item, engine, resourceManager);
550
+ return this.parsePropsAndMethods(instance, item);
570
551
  };
571
- ReflectionParser.parseBasicType = function parseBasicType(value, engine, resourceManager) {
572
- if (resourceManager === void 0) resourceManager = engine.resourceManager;
573
- var _this = this;
574
- if (Array.isArray(value)) {
575
- return Promise.all(value.map(function(item) {
576
- return _this.parseBasicType(item, engine, resourceManager);
577
- }));
578
- } else if (typeof value === "object" && value != null) {
579
- if (this._isClass(value)) {
580
- // class object
581
- return this.parseClassObject(value, engine, resourceManager);
582
- } else if (this._isRef(value)) {
583
- // reference object
584
- return resourceManager.getResourceByRef(value);
585
- } else {
586
- // basic type
587
- return Promise.resolve(value);
588
- }
589
- } else {
590
- return Promise.resolve(value);
591
- }
592
- };
593
- ReflectionParser.parsePropsAndMethods = function parsePropsAndMethods(instance, item, engine, resourceManager) {
594
- if (resourceManager === void 0) resourceManager = engine.resourceManager;
595
- var _this = this;
552
+ _proto.parsePropsAndMethods = function parsePropsAndMethods(instance, item) {
596
553
  var promises = [];
597
554
  if (item.methods) {
598
555
  for(var methodName in item.methods){
599
556
  var methodParams = item.methods[methodName];
600
557
  for(var i = 0, count = methodParams.length; i < count; i++){
601
558
  var params = methodParams[i];
602
- var promise = this.parseMethod(instance, methodName, params, engine, resourceManager);
559
+ var promise = this.parseMethod(instance, methodName, params);
603
560
  promises.push(promise);
604
561
  }
605
562
  }
606
563
  }
607
564
  if (item.props) {
608
- var _this1 = this, _loop = function(key) {
565
+ var _this = this, _loop = function(key) {
609
566
  var value = item.props[key];
610
- var promise = _this1.parseBasicType(value, engine).then(function(v) {
567
+ var promise = _this.parseBasicType(value).then(function(v) {
611
568
  return instance[key] = v;
612
569
  });
613
570
  promises.push(promise);
@@ -615,27 +572,76 @@ var ReflectionParser = /*#__PURE__*/ function() {
615
572
  for(var key in item.props)_loop(key);
616
573
  }
617
574
  return Promise.all(promises).then(function() {
618
- var handle = _this.customParseComponentHandles[instance.constructor.name];
619
- if (handle) return handle(instance, item, engine);
575
+ var handle = ReflectionParser.customParseComponentHandles[instance.constructor.name];
576
+ if (handle) return handle(instance, item);
620
577
  else return instance;
621
578
  });
622
579
  };
623
- ReflectionParser.parseMethod = function parseMethod(instance, methodName, methodParams, engine, resourceManager) {
624
- if (resourceManager === void 0) resourceManager = engine.resourceManager;
580
+ _proto.parseMethod = function parseMethod(instance, methodName, methodParams) {
625
581
  var _this = this;
626
582
  return Promise.all(methodParams.map(function(param) {
627
- return _this.parseBasicType(param, engine, resourceManager);
583
+ return _this.parseBasicType(param);
628
584
  })).then(function(result) {
629
585
  var _instance;
630
586
  return (_instance = instance)[methodName].apply(_instance, [].concat(result));
631
587
  });
632
588
  };
589
+ _proto.parseBasicType = function parseBasicType(value) {
590
+ var _this = this;
591
+ if (Array.isArray(value)) {
592
+ return Promise.all(value.map(function(item) {
593
+ return _this.parseBasicType(item);
594
+ }));
595
+ } else if (typeof value === "object" && value != null) {
596
+ if (ReflectionParser._isClass(value)) {
597
+ // class object
598
+ return this.parseClassObject(value);
599
+ } else if (ReflectionParser._isAssetRef(value)) {
600
+ // reference object
601
+ // @ts-ignore
602
+ return this._context.resourceManager.getResourceByRef(value);
603
+ } else if (ReflectionParser._isEntityRef(value)) {
604
+ // entity reference
605
+ return Promise.resolve(this._context.entityMap.get(value.entityId));
606
+ } else {
607
+ // basic type
608
+ return Promise.resolve(value);
609
+ }
610
+ } else {
611
+ return Promise.resolve(value);
612
+ }
613
+ };
614
+ _proto._getEntityByConfig = function _getEntityByConfig(entityConfig) {
615
+ // @ts-ignore
616
+ var assetRefId = entityConfig.assetRefId;
617
+ var engine = this._context.engine;
618
+ if (assetRefId) {
619
+ return engine.resourceManager// @ts-ignore
620
+ .getResourceByRef({
621
+ refId: assetRefId,
622
+ key: entityConfig.key,
623
+ isClone: entityConfig.isClone
624
+ }).then(function(entity) {
625
+ entity.name = entityConfig.name;
626
+ return entity;
627
+ });
628
+ } else {
629
+ var entity = new engineCore.Entity(engine, entityConfig.name);
630
+ return Promise.resolve(entity);
631
+ }
632
+ };
633
+ ReflectionParser.registerCustomParseComponent = function registerCustomParseComponent(componentType, handle) {
634
+ this.customParseComponentHandles[componentType] = handle;
635
+ };
633
636
  ReflectionParser._isClass = function _isClass(value) {
634
637
  return value["class"] != undefined;
635
638
  };
636
- ReflectionParser._isRef = function _isRef(value) {
639
+ ReflectionParser._isAssetRef = function _isAssetRef(value) {
637
640
  return value["refId"] != undefined;
638
641
  };
642
+ ReflectionParser._isEntityRef = function _isEntityRef(value) {
643
+ return value["entityId"] != undefined;
644
+ };
639
645
  return ReflectionParser;
640
646
  }();
641
647
  (function() {
@@ -903,6 +909,8 @@ var SceneParserContext = /*#__PURE__*/ function() {
903
909
  this.assets = new Map();
904
910
  this.entityConfigMap = new Map();
905
911
  this.rootIds = [];
912
+ this.engine = scene.engine;
913
+ this.resourceManager = scene.engine.resourceManager;
906
914
  }
907
915
  var _proto = SceneParserContext.prototype;
908
916
  _proto.destroy = function destroy() {
@@ -919,7 +927,7 @@ var SceneParserContext = /*#__PURE__*/ function() {
919
927
  function SceneParser(context) {
920
928
  var _this = this;
921
929
  this.context = context;
922
- this._engine = this.context.scene.engine;
930
+ this._engine = context.scene.engine;
923
931
  this._organizeEntities = this._organizeEntities.bind(this);
924
932
  this._parseComponents = this._parseComponents.bind(this);
925
933
  this._clearAndResolveScene = this._clearAndResolveScene.bind(this);
@@ -927,22 +935,24 @@ var SceneParserContext = /*#__PURE__*/ function() {
927
935
  _this._reject = reject;
928
936
  _this._resolve = resolve;
929
937
  });
938
+ this._reflectionParser = new ReflectionParser(context);
930
939
  }
931
940
  var _proto = SceneParser.prototype;
932
941
  /** start parse the scene */ _proto.start = function start() {
933
942
  this._parseEntities().then(this._organizeEntities).then(this._parseComponents).then(this._clearAndResolveScene).then(this._resolve).catch(this._reject);
934
943
  };
935
944
  _proto._parseEntities = function _parseEntities() {
945
+ var _this = this;
936
946
  var entitiesConfig = this.context.originalData.entities;
937
947
  var entityConfigMap = this.context.entityConfigMap;
938
948
  var entitiesMap = this.context.entityMap;
939
949
  var rootIds = this.context.rootIds;
940
- var engine = this._engine;
950
+ this._engine;
941
951
  var promises = entitiesConfig.map(function(entityConfig) {
942
952
  entityConfigMap.set(entityConfig.id, entityConfig);
943
953
  // record root entities
944
954
  if (!entityConfig.parent) rootIds.push(entityConfig.id);
945
- return ReflectionParser.parseEntity(entityConfig, engine);
955
+ return _this._reflectionParser.parseEntity(entityConfig);
946
956
  });
947
957
  return Promise.all(promises).then(function(entities) {
948
958
  for(var i = 0, l = entities.length; i < l; i++){
@@ -980,7 +990,7 @@ var SceneParserContext = /*#__PURE__*/ function() {
980
990
  component = entity.getComponent(engineCore.Loader.getClass(key));
981
991
  }
982
992
  component = component || entity.addComponent(engineCore.Loader.getClass(key));
983
- var promise = ReflectionParser.parsePropsAndMethods(component, componentConfig, entity.engine);
993
+ var promise = this._reflectionParser.parsePropsAndMethods(component, componentConfig);
984
994
  promises.push(promise);
985
995
  }
986
996
  }
@@ -2429,20 +2439,75 @@ var AbstractTranscoder = /*#__PURE__*/ function() {
2429
2439
  }();
2430
2440
 
2431
2441
  /** @internal */ function TranscodeWorkerCode$1() {
2432
- var concat = function concat(arrays) {
2433
- if (arrays.length === 1) return arrays[0];
2434
- var totalByteLength = 0;
2435
- for(var i = 0; i < arrays.length; i++){
2436
- totalByteLength += arrays[i].byteLength;
2442
+ var initPromise;
2443
+ var init = function init(wasmBinary) {
2444
+ if (!initPromise) {
2445
+ initPromise = new Promise(function(resolve, reject) {
2446
+ var BasisModule = {
2447
+ wasmBinary: wasmBinary,
2448
+ onRuntimeInitialized: function() {
2449
+ return resolve(BasisModule);
2450
+ },
2451
+ onAbort: reject
2452
+ };
2453
+ self["BASIS"](BasisModule);
2454
+ }).then(function(BasisModule) {
2455
+ BasisModule.initializeBasis();
2456
+ return BasisModule.KTX2File;
2457
+ });
2437
2458
  }
2438
- var result = new Uint8Array(totalByteLength);
2439
- var byteOffset = 0;
2440
- for(var i1 = 0; i1 < arrays.length; i1++){
2441
- result.set(arrays[i1], byteOffset);
2442
- byteOffset += arrays[i1].byteLength;
2459
+ return initPromise;
2460
+ };
2461
+ self.onmessage = function onmessage(event) {
2462
+ var message = event.data;
2463
+ switch(message.type){
2464
+ case "init":
2465
+ init(message.transcoderWasm).then(function() {
2466
+ self.postMessage("init-completed");
2467
+ }).catch(function(e) {
2468
+ return self.postMessage({
2469
+ error: e
2470
+ });
2471
+ });
2472
+ break;
2473
+ case "transcode":
2474
+ init().then(function(KTX2File) {
2475
+ var result = transcode(message.buffer, message.format, KTX2File);
2476
+ // @ts-ignore
2477
+ result.type = "transcoded";
2478
+ self.postMessage(result);
2479
+ }).catch(function(e) {
2480
+ return self.postMessage({
2481
+ error: e
2482
+ });
2483
+ });
2484
+ break;
2443
2485
  }
2444
- return result;
2445
2486
  };
2487
+ }
2488
+ var _init = function init() {
2489
+ var initPromise;
2490
+ return function init(wasmBinary) {
2491
+ if (!initPromise) {
2492
+ initPromise = new Promise(function(resolve, reject) {
2493
+ var BasisModule = {
2494
+ wasmBinary: wasmBinary,
2495
+ onRuntimeInitialized: function() {
2496
+ return resolve(BasisModule);
2497
+ },
2498
+ onAbort: reject
2499
+ };
2500
+ self["BASIS"](BasisModule);
2501
+ }).then(function(BasisModule) {
2502
+ BasisModule.initializeBasis();
2503
+ return BasisModule.KTX2File;
2504
+ });
2505
+ }
2506
+ return initPromise;
2507
+ };
2508
+ };
2509
+ var init = _init();
2510
+ function transcode(buffer, targetFormat, KTX2File) {
2446
2511
  var getTranscodeFormatFromTarget = function getTranscodeFormatFromTarget(target, hasAlpha) {
2447
2512
  switch(target){
2448
2513
  case 2:
@@ -2459,76 +2524,24 @@ var AbstractTranscoder = /*#__PURE__*/ function() {
2459
2524
  return 7;
2460
2525
  }
2461
2526
  };
2462
- var init = function init(wasmBinary) {
2463
- transcodePromise = new Promise(function(resolve, reject) {
2464
- var BasisModule = {
2465
- wasmBinary: wasmBinary,
2466
- onRuntimeInitialized: function() {
2467
- return resolve(BasisModule);
2468
- },
2469
- onAbort: reject
2470
- };
2471
- self["BASIS"](BasisModule);
2472
- }).then(function(BasisModule) {
2473
- BasisModule.initializeBasis();
2474
- return BasisModule.KTX2File;
2475
- });
2476
- return transcodePromise;
2477
- };
2478
- var transcode = function transcode(buffer, targetFormat, KTX2File) {
2479
- var ktx2File = new KTX2File(new Uint8Array(buffer));
2480
- function cleanup() {
2481
- ktx2File.close();
2482
- ktx2File.delete();
2483
- }
2484
- if (!ktx2File.isValid()) {
2485
- cleanup();
2486
- throw new Error("Invalid or unsupported .ktx2 file");
2487
- }
2488
- var width = ktx2File.getWidth();
2489
- var height = ktx2File.getHeight();
2490
- var layerCount = ktx2File.getLayers() || 1;
2491
- var levelCount = ktx2File.getLevels();
2492
- var hasAlpha = ktx2File.getHasAlpha();
2493
- var faceCount = ktx2File.getFaces();
2494
- var format = getTranscodeFormatFromTarget(targetFormat, hasAlpha);
2495
- var faces = new Array(faceCount);
2496
- for(var face = 0; face < faceCount; face++){
2497
- var mipmaps = new Array(levelCount);
2498
- for(var mip = 0; mip < levelCount; mip++){
2499
- var layerMips = new Array(layerCount);
2500
- var mipWidth = void 0, mipHeight = void 0;
2501
- for(var layer = 0; layer < layerCount; layer++){
2502
- var levelInfo = ktx2File.getImageLevelInfo(mip, layer, face);
2503
- mipWidth = levelInfo.origWidth;
2504
- mipHeight = levelInfo.origHeight;
2505
- var dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, format));
2506
- var status = ktx2File.transcodeImage(dst, mip, layer, face, format, 0, -1, -1);
2507
- if (!status) {
2508
- cleanup();
2509
- throw new Error("transcodeImage failed.");
2510
- }
2511
- layerMips[layer] = dst;
2512
- }
2513
- mipmaps[mip] = {
2514
- data: concat(layerMips),
2515
- width: mipWidth,
2516
- height: mipHeight
2517
- };
2518
- }
2519
- faces[face] = mipmaps;
2527
+ var concat = function concat(arrays) {
2528
+ if (arrays.length === 1) return arrays[0];
2529
+ var totalByteLength = 0;
2530
+ for(var i = 0; i < arrays.length; i++){
2531
+ totalByteLength += arrays[i].byteLength;
2520
2532
  }
2521
- cleanup();
2522
- return {
2523
- faces: faces,
2524
- width: width,
2525
- height: height,
2526
- hasAlpha: hasAlpha,
2527
- faceCount: faceCount,
2528
- format: format
2529
- };
2533
+ var result = new Uint8Array(totalByteLength);
2534
+ var byteOffset = 0;
2535
+ for(var i1 = 0; i1 < arrays.length; i1++){
2536
+ result.set(arrays[i1], byteOffset);
2537
+ byteOffset += arrays[i1].byteLength;
2538
+ }
2539
+ return result;
2540
+ };
2541
+ var cleanup = function cleanup() {
2542
+ ktx2File.close();
2543
+ ktx2File.delete();
2530
2544
  };
2531
- var transcodePromise;
2532
2545
  var BasisFormat;
2533
2546
  (function(BasisFormat) {
2534
2547
  BasisFormat[BasisFormat["ETC1"] = 0] = "ETC1";
@@ -2554,31 +2567,56 @@ var AbstractTranscoder = /*#__PURE__*/ function() {
2554
2567
  TargetFormat[TargetFormat["RG8"] = 6] = "RG8";
2555
2568
  TargetFormat[TargetFormat["RGBA8"] = 7] = "RGBA8";
2556
2569
  })(TargetFormat || (TargetFormat = {}));
2557
- self.onmessage = function onmessage(event) {
2558
- var message = event.data;
2559
- switch(message.type){
2560
- case "init":
2561
- init(message.transcoderWasm).then(function() {
2562
- return self.postMessage("init-completed");
2563
- }).catch(function(e) {
2564
- return self.postMessage({
2565
- error: e
2566
- });
2567
- });
2568
- break;
2569
- case "transcode":
2570
- transcodePromise.then(function(KTX2File) {
2571
- var result = transcode(message.buffer, message.format, KTX2File);
2572
- // @ts-ignore
2573
- result.type = "transcoded";
2574
- self.postMessage(result);
2575
- }).catch(function(e) {
2576
- return self.postMessage({
2577
- error: e
2578
- });
2579
- });
2580
- break;
2570
+ var ktx2File = new KTX2File(new Uint8Array(buffer));
2571
+ if (!ktx2File.isValid()) {
2572
+ cleanup();
2573
+ throw new Error("Invalid or unsupported .ktx2 file");
2574
+ }
2575
+ if (!ktx2File.startTranscoding()) {
2576
+ cleanup();
2577
+ throw new Error("KTX2 startTranscoding failed");
2578
+ }
2579
+ var width = ktx2File.getWidth();
2580
+ var height = ktx2File.getHeight();
2581
+ var layerCount = ktx2File.getLayers() || 1;
2582
+ var levelCount = ktx2File.getLevels();
2583
+ var hasAlpha = ktx2File.getHasAlpha();
2584
+ var faceCount = ktx2File.getFaces();
2585
+ var format = getTranscodeFormatFromTarget(targetFormat, hasAlpha);
2586
+ var faces = new Array(faceCount);
2587
+ for(var face = 0; face < faceCount; face++){
2588
+ var mipmaps = new Array(levelCount);
2589
+ for(var mip = 0; mip < levelCount; mip++){
2590
+ var layerMips = new Array(layerCount);
2591
+ var mipWidth = void 0, mipHeight = void 0;
2592
+ for(var layer = 0; layer < layerCount; layer++){
2593
+ var levelInfo = ktx2File.getImageLevelInfo(mip, layer, face);
2594
+ mipWidth = levelInfo.origWidth;
2595
+ mipHeight = levelInfo.origHeight;
2596
+ var dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, format));
2597
+ var status = ktx2File.transcodeImage(dst, mip, layer, face, format, 0, -1, -1);
2598
+ if (!status) {
2599
+ cleanup();
2600
+ throw new Error("transcodeImage failed.");
2601
+ }
2602
+ layerMips[layer] = dst;
2603
+ }
2604
+ mipmaps[mip] = {
2605
+ data: concat(layerMips),
2606
+ width: mipWidth,
2607
+ height: mipHeight
2608
+ };
2581
2609
  }
2610
+ faces[face] = mipmaps;
2611
+ }
2612
+ cleanup();
2613
+ return {
2614
+ faces: faces,
2615
+ width: width,
2616
+ height: height,
2617
+ hasAlpha: hasAlpha,
2618
+ faceCount: faceCount,
2619
+ format: format
2582
2620
  };
2583
2621
  }
2584
2622
 
@@ -2599,23 +2637,49 @@ var AbstractTranscoder = /*#__PURE__*/ function() {
2599
2637
  })
2600
2638
  ]).then(function(param) {
2601
2639
  var jsCode = param[0], wasmBuffer = param[1];
2602
- var funcCode = TranscodeWorkerCode$1.toString();
2603
- var transcodeString = funcCode.substring(funcCode.indexOf("{"), funcCode.lastIndexOf("}") + 1);
2604
- var workerCode = "\n " + jsCode + "\n " + transcodeString + "\n ";
2605
- var workerURL = URL.createObjectURL(new Blob([
2606
- workerCode
2607
- ], {
2608
- type: "application/javascript"
2609
- }));
2610
- return _this._createTranscodePool(workerURL, wasmBuffer);
2640
+ if (_this.workerLimitCount === 0) {
2641
+ return new Promise(function(resolve, reject) {
2642
+ var scriptDom = document.createElement("script");
2643
+ scriptDom.src = URL.createObjectURL(new Blob([
2644
+ jsCode
2645
+ ], {
2646
+ type: "application/javascript"
2647
+ }));
2648
+ document.body.appendChild(scriptDom);
2649
+ scriptDom.onload = function() {
2650
+ init(wasmBuffer).then(function() {
2651
+ resolve(null);
2652
+ });
2653
+ };
2654
+ scriptDom.onerror = function() {
2655
+ reject();
2656
+ };
2657
+ });
2658
+ } else {
2659
+ var funcCode = TranscodeWorkerCode$1.toString();
2660
+ var transcodeString = funcCode.substring(funcCode.indexOf("{"), funcCode.lastIndexOf("}") + 1);
2661
+ var workerCode = "\n " + jsCode + "\n " + transcode.toString() + "\n " + transcodeString + "\n ";
2662
+ var workerURL = URL.createObjectURL(new Blob([
2663
+ workerCode
2664
+ ], {
2665
+ type: "application/javascript"
2666
+ }));
2667
+ return _this._createTranscodePool(workerURL, wasmBuffer);
2668
+ }
2611
2669
  });
2612
2670
  };
2613
- _proto.transcode = function transcode(buffer, format) {
2614
- return this._transcodeWorkerPool.postMessage({
2615
- buffer: buffer,
2616
- format: format,
2617
- type: "transcode"
2618
- });
2671
+ _proto.transcode = function transcode1(buffer, format) {
2672
+ if (this.workerLimitCount === 0) {
2673
+ return init().then(function(KTX2File) {
2674
+ return transcode(buffer, format, KTX2File);
2675
+ });
2676
+ } else {
2677
+ return this._transcodeWorkerPool.postMessage({
2678
+ buffer: buffer,
2679
+ format: format,
2680
+ type: "transcode"
2681
+ });
2682
+ }
2619
2683
  };
2620
2684
  return BinomialLLCTranscoder;
2621
2685
  }(AbstractTranscoder);
@@ -2843,7 +2907,7 @@ exports.KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2843
2907
  _proto.initialize = function initialize(engine, configuration) {
2844
2908
  if (configuration.ktx2Loader) {
2845
2909
  var options = configuration.ktx2Loader;
2846
- if (this._isKhronosSupported(options.priorityFormats, engine)) {
2910
+ if (this._isKhronosSupported(options.priorityFormats, engine) && options.workerCount !== 0) {
2847
2911
  return exports.KTX2Loader._getKhronosTranscoder(options.workerCount).init();
2848
2912
  } else {
2849
2913
  return exports.KTX2Loader._getBinomialLLCTranscoder(options.workerCount).init();
@@ -3564,12 +3628,12 @@ exports.GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3564
3628
  if (curve2.interpolation === engineCore.InterpolationType.CubicSpine) {
3565
3629
  keyframe2.inTangent = Array.from(output.subarray(offset2, offset2 + outputSize));
3566
3630
  offset2 += outputSize;
3567
- keyframe2.value = output.subarray(offset2, offset2 + outputSize);
3631
+ keyframe2.value = output.slice(offset2, offset2 + outputSize);
3568
3632
  offset2 += outputSize;
3569
3633
  keyframe2.outTangent = Array.from(output.subarray(offset2, offset2 + outputSize));
3570
3634
  offset2 += outputSize;
3571
3635
  } else {
3572
- keyframe2.value = output.subarray(offset2, offset2 + outputSize);
3636
+ keyframe2.value = output.slice(offset2, offset2 + outputSize);
3573
3637
  offset2 += outputSize;
3574
3638
  }
3575
3639
  curve2.addKey(keyframe2);
@@ -4320,8 +4384,7 @@ exports.GLTFTextureParser = (_GLTFTextureParser = /*#__PURE__*/ function(GLTFPar
4320
4384
  mipmap: (_samplerInfo = samplerInfo) == null ? void 0 : _samplerInfo.mipmap
4321
4385
  }
4322
4386
  }).then(function(texture) {
4323
- var _texture;
4324
- (_texture = texture).name || (_texture.name = textureName || imageName || "texture_" + index);
4387
+ texture.name = textureName || imageName || texture.name || "texture_" + index;
4325
4388
  useSampler && GLTFUtils.parseSampler(texture, samplerInfo);
4326
4389
  return texture;
4327
4390
  });
@@ -5428,6 +5491,39 @@ TextureCubeLoader = __decorate([
5428
5491
  ])
5429
5492
  ], TextureCubeLoader);
5430
5493
 
5494
+ var ProjectLoader = /*#__PURE__*/ function(Loader1) {
5495
+ _inherits(ProjectLoader, Loader1);
5496
+ function ProjectLoader() {
5497
+ return Loader1.apply(this, arguments);
5498
+ }
5499
+ var _proto = ProjectLoader.prototype;
5500
+ _proto.load = function load(item, resourceManager) {
5501
+ var _this = this;
5502
+ var engine = resourceManager.engine;
5503
+ return new engineCore.AssetPromise(function(resolve, reject) {
5504
+ _this.request(item.url, {
5505
+ type: "json"
5506
+ }).then(function(data) {
5507
+ // @ts-ignore
5508
+ engine.resourceManager.initVirtualResources(data.files);
5509
+ return resourceManager.load({
5510
+ type: engineCore.AssetType.Scene,
5511
+ url: data.scene
5512
+ }).then(function(scene) {
5513
+ engine.sceneManager.activeScene = scene;
5514
+ resolve();
5515
+ });
5516
+ }).catch(reject);
5517
+ });
5518
+ };
5519
+ return ProjectLoader;
5520
+ }(engineCore.Loader);
5521
+ ProjectLoader = __decorate([
5522
+ engineCore.resourceLoader(engineCore.AssetType.Project, [
5523
+ "proj"
5524
+ ], false)
5525
+ ], ProjectLoader);
5526
+
5431
5527
  var SceneLoader = /*#__PURE__*/ function(Loader1) {
5432
5528
  _inherits(SceneLoader, Loader1);
5433
5529
  function SceneLoader() {
@@ -5446,32 +5542,28 @@ var SceneLoader = /*#__PURE__*/ function(Loader1) {
5446
5542
  // parse ambient light
5447
5543
  var ambient = data.scene.ambient;
5448
5544
  var useCustomAmbient = ambient.specularMode === "Custom";
5545
+ var useSH = ambient.diffuseMode === engineCore.DiffuseMode.SphericalHarmonics;
5546
+ scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5547
+ scene.ambientLight.specularIntensity = ambient.specularIntensity;
5548
+ scene.ambientLight.diffuseMode = ambient.diffuseMode;
5549
+ scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5550
+ scene.ambientLight.specularTextureDecodeRGBM = true;
5449
5551
  if (useCustomAmbient && ambient.customAmbientLight) {
5450
- // @ts-ignore
5451
- // prettier-ignore
5452
- var customAmbientPromise = resourceManager.getResourceByRef(ambient.customAmbientLight).then(function(ambientLight) {
5453
- scene.ambientLight = ambientLight;
5454
- scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5455
- scene.ambientLight.specularIntensity = ambient.specularIntensity;
5456
- scene.ambientLight.diffuseMode = ambient.diffuseMode;
5457
- scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5458
- });
5459
- promises.push(customAmbientPromise);
5460
- } else if (!useCustomAmbient && ambient.ambientLight) {
5461
- // @ts-ignore
5462
- // prettier-ignore
5463
- var ambientLightPromise = resourceManager.getResourceByRef(ambient.ambientLight).then(function(ambientLight) {
5464
- scene.ambientLight = ambientLight;
5465
- scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5466
- scene.ambientLight.specularIntensity = ambient.specularIntensity;
5467
- scene.ambientLight.diffuseMode = ambient.diffuseMode;
5468
- scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5469
- });
5470
- promises.push(ambientLightPromise);
5471
- } else {
5472
- scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5473
- scene.ambientLight.specularIntensity = ambient.specularIntensity;
5474
- scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5552
+ promises.push(// @ts-ignore
5553
+ resourceManager.getResourceByRef(ambient.customAmbientLight).then(function(ambientLight) {
5554
+ scene.ambientLight.specularTexture = ambientLight.specularTexture;
5555
+ }));
5556
+ }
5557
+ if (ambient.ambientLight && (!useCustomAmbient || useSH)) {
5558
+ promises.push(// @ts-ignore
5559
+ resourceManager.getResourceByRef(ambient.ambientLight).then(function(ambientLight) {
5560
+ if (!useCustomAmbient) {
5561
+ scene.ambientLight.specularTexture = ambientLight.specularTexture;
5562
+ }
5563
+ if (useSH) {
5564
+ scene.ambientLight.diffuseSphericalHarmonics = ambientLight.diffuseSphericalHarmonics;
5565
+ }
5566
+ }));
5475
5567
  }
5476
5568
  var background = data.scene.background;
5477
5569
  scene.background.mode = background.mode;
@@ -5528,13 +5620,13 @@ SceneLoader = __decorate([
5528
5620
  "scene"
5529
5621
  ], true)
5530
5622
  ], SceneLoader);
5531
- ReflectionParser.registerCustomParseComponent("TextRenderer", /*#__PURE__*/ _async_to_generator(function(instance, item, engine) {
5623
+ ReflectionParser.registerCustomParseComponent("TextRenderer", /*#__PURE__*/ _async_to_generator(function(instance, item) {
5532
5624
  var props;
5533
5625
  return __generator(this, function(_state) {
5534
5626
  props = item.props;
5535
5627
  if (!props.font) {
5536
5628
  // @ts-ignore
5537
- instance.font = engineCore.Font.createFromOS(engine, props.fontFamily || "Arial");
5629
+ instance.font = engineCore.Font.createFromOS(instance.engine, props.fontFamily || "Arial");
5538
5630
  }
5539
5631
  return [
5540
5632
  2,