@galacean/engine-loader 2.0.0-alpha.1 → 2.0.0-alpha.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/main.js +545 -521
- package/dist/main.js.map +1 -1
- package/dist/module.js +546 -523
- package/dist/module.js.map +1 -1
- package/package.json +4 -4
- package/types/HDRDecoder.d.ts +22 -0
- package/types/gltf/extensions/GLTFExtensionSchema.d.ts +1 -1
- package/types/index.d.ts +2 -1
- package/types/resource-deserialize/index.d.ts +0 -1
- package/types/resource-deserialize/resources/parser/ParserContext.d.ts +1 -1
- package/types/resource-deserialize/resources/schema/BasicSchema.d.ts +3 -3
- package/types/resource-deserialize/resources/texture2D/TextureDecoder.d.ts +4 -0
- package/types/resource-deserialize/utils/FileHeader.d.ts +5 -0
- package/types/HDRLoader.d.ts +0 -1
- package/types/Texture2DContentRestorer.d.ts +0 -10
- package/types/TextureCubeContentRestorer.d.ts +0 -10
- package/types/resource-deserialize/resources/scene/EditorTextureLoader.d.ts +0 -4
package/dist/main.js
CHANGED
|
@@ -252,7 +252,9 @@ var decoderMap = {};
|
|
|
252
252
|
};
|
|
253
253
|
}
|
|
254
254
|
|
|
255
|
-
|
|
255
|
+
/**
|
|
256
|
+
* Binary format: [MAGIC(4B)] [totalLength(4B)] [version(1B)] [typeLen(2B)] [type] [nameLen(2B)] [name] [data...]
|
|
257
|
+
*/ var FileHeader = /*#__PURE__*/ function() {
|
|
256
258
|
function FileHeader() {
|
|
257
259
|
this.totalLength = 0;
|
|
258
260
|
this.version = 0;
|
|
@@ -260,14 +262,23 @@ var FileHeader = /*#__PURE__*/ function() {
|
|
|
260
262
|
this.name = "";
|
|
261
263
|
this.headerLength = 0;
|
|
262
264
|
}
|
|
265
|
+
FileHeader.checkMagic = function checkMagic(arrayBuffer) {
|
|
266
|
+
if (arrayBuffer.byteLength < 4) return false;
|
|
267
|
+
var view = new DataView(arrayBuffer);
|
|
268
|
+
return view.getUint32(0, true) === FileHeader.MAGIC;
|
|
269
|
+
};
|
|
263
270
|
FileHeader.decode = function decode(arrayBuffer) {
|
|
264
271
|
var dataView = new DataView(arrayBuffer);
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
var
|
|
269
|
-
var
|
|
270
|
-
var
|
|
272
|
+
if (!FileHeader.checkMagic(arrayBuffer)) {
|
|
273
|
+
throw new Error("Invalid Galacean binary file: missing GLCN magic header.");
|
|
274
|
+
}
|
|
275
|
+
var offset = 4;
|
|
276
|
+
var totalLen = dataView.getUint32(offset, true);
|
|
277
|
+
var fileVersion = dataView.getUint8(offset + 4);
|
|
278
|
+
var typeLen = dataView.getUint16(offset + 5, true);
|
|
279
|
+
var typeUint8Array = new Uint8Array(arrayBuffer, offset + 7, typeLen);
|
|
280
|
+
var nameLen = dataView.getUint16(offset + 7 + typeLen, true);
|
|
281
|
+
var nameUint8Array = new Uint8Array(arrayBuffer, offset + 9 + typeLen, nameLen);
|
|
271
282
|
var name = engineCore.Utils.decodeText(nameUint8Array);
|
|
272
283
|
var type = engineCore.Utils.decodeText(typeUint8Array);
|
|
273
284
|
var header = new FileHeader();
|
|
@@ -275,7 +286,7 @@ var FileHeader = /*#__PURE__*/ function() {
|
|
|
275
286
|
header.name = name;
|
|
276
287
|
header.type = type;
|
|
277
288
|
header.version = fileVersion;
|
|
278
|
-
header.headerLength = nameUint8Array.byteLength + typeUint8Array.byteLength + 9;
|
|
289
|
+
header.headerLength = offset + nameUint8Array.byteLength + typeUint8Array.byteLength + 9;
|
|
279
290
|
return header;
|
|
280
291
|
};
|
|
281
292
|
_create_class(FileHeader, [
|
|
@@ -288,6 +299,8 @@ var FileHeader = /*#__PURE__*/ function() {
|
|
|
288
299
|
]);
|
|
289
300
|
return FileHeader;
|
|
290
301
|
}();
|
|
302
|
+
FileHeader.MAGIC = 0x4e434c47 // "GLCN" in little-endian
|
|
303
|
+
;
|
|
291
304
|
|
|
292
305
|
var InterpolableValueType = /*#__PURE__*/ function(InterpolableValueType) {
|
|
293
306
|
InterpolableValueType[InterpolableValueType["Float"] = 0] = "Float";
|
|
@@ -694,12 +707,12 @@ var ParserType = /*#__PURE__*/ function(ParserType) {
|
|
|
694
707
|
this.rootIds.length = 0;
|
|
695
708
|
this.strippedIds.length = 0;
|
|
696
709
|
};
|
|
697
|
-
/** @internal */ _proto._addDependentAsset = function _addDependentAsset(
|
|
710
|
+
/** @internal */ _proto._addDependentAsset = function _addDependentAsset(url, promise) {
|
|
698
711
|
var _this = this;
|
|
699
712
|
var tasks = this._tasks;
|
|
700
|
-
if (tasks.has(
|
|
713
|
+
if (tasks.has(url)) return;
|
|
701
714
|
++this._total;
|
|
702
|
-
tasks.add(
|
|
715
|
+
tasks.add(url);
|
|
703
716
|
promise.finally(function() {
|
|
704
717
|
++_this._loaded;
|
|
705
718
|
_this._setTaskCompleteProgress(_this._loaded, _this._total);
|
|
@@ -807,7 +820,7 @@ var ReflectionParser = /*#__PURE__*/ function() {
|
|
|
807
820
|
// reference object
|
|
808
821
|
// @ts-ignore
|
|
809
822
|
return context.resourceManager.getResourceByRef(value).then(function(resource) {
|
|
810
|
-
if (context.type === ParserType.Prefab) {
|
|
823
|
+
if (resource && context.type === ParserType.Prefab) {
|
|
811
824
|
// @ts-ignore
|
|
812
825
|
context.resource._addDependenceAsset(resource);
|
|
813
826
|
}
|
|
@@ -850,18 +863,18 @@ var ReflectionParser = /*#__PURE__*/ function() {
|
|
|
850
863
|
_proto._getEntityByConfig = function _getEntityByConfig(entityConfig) {
|
|
851
864
|
var _this = this;
|
|
852
865
|
// @ts-ignore
|
|
853
|
-
var
|
|
866
|
+
var assetUrl = entityConfig.assetUrl;
|
|
854
867
|
var engine = this._context.engine;
|
|
855
|
-
if (
|
|
868
|
+
if (assetUrl) {
|
|
856
869
|
return engine.resourceManager// @ts-ignore
|
|
857
870
|
.getResourceByRef({
|
|
858
|
-
|
|
871
|
+
url: assetUrl,
|
|
859
872
|
key: entityConfig.key,
|
|
860
873
|
isClone: entityConfig.isClone
|
|
861
874
|
}).then(function(entity) {
|
|
862
875
|
// @ts-ignore
|
|
863
|
-
var resource = engine.resourceManager._objectPool[
|
|
864
|
-
if (_this._context.type === ParserType.Prefab) {
|
|
876
|
+
var resource = engine.resourceManager._objectPool[assetUrl];
|
|
877
|
+
if (resource && _this._context.type === ParserType.Prefab) {
|
|
865
878
|
// @ts-ignore
|
|
866
879
|
_this._context.resource._addDependenceAsset(resource);
|
|
867
880
|
}
|
|
@@ -884,7 +897,7 @@ var ReflectionParser = /*#__PURE__*/ function() {
|
|
|
884
897
|
return value["classType"] !== undefined;
|
|
885
898
|
};
|
|
886
899
|
ReflectionParser._isAssetRef = function _isAssetRef(value) {
|
|
887
|
-
return value["
|
|
900
|
+
return value["url"] !== undefined;
|
|
888
901
|
};
|
|
889
902
|
ReflectionParser._isEntityRef = function _isEntityRef(value) {
|
|
890
903
|
return value["entityId"] !== undefined;
|
|
@@ -903,7 +916,7 @@ exports.Texture2DDecoder = /*#__PURE__*/ function() {
|
|
|
903
916
|
function Texture2DDecoder() {}
|
|
904
917
|
Texture2DDecoder.decode = function decode(engine, bufferReader, restoredTexture) {
|
|
905
918
|
return new engineCore.AssetPromise(function(resolve, reject) {
|
|
906
|
-
var
|
|
919
|
+
var url = bufferReader.nextStr();
|
|
907
920
|
var mipmap = !!bufferReader.nextUint8();
|
|
908
921
|
var filterMode = bufferReader.nextUint8();
|
|
909
922
|
var anisoLevel = bufferReader.nextUint8();
|
|
@@ -932,7 +945,7 @@ exports.Texture2DDecoder = /*#__PURE__*/ function() {
|
|
|
932
945
|
}
|
|
933
946
|
}
|
|
934
947
|
// @ts-ignore
|
|
935
|
-
engine.resourceManager._objectPool[
|
|
948
|
+
engine.resourceManager._objectPool[url] = texture2D;
|
|
936
949
|
resolve(texture2D);
|
|
937
950
|
} else {
|
|
938
951
|
var blob = new window.Blob([
|
|
@@ -1236,7 +1249,7 @@ function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
|
|
|
1236
1249
|
_proto._getEntityByConfig = function _getEntityByConfig(entityConfig, engine) {
|
|
1237
1250
|
var _this = this;
|
|
1238
1251
|
var entityPromise;
|
|
1239
|
-
if (entityConfig.
|
|
1252
|
+
if (entityConfig.assetUrl) {
|
|
1240
1253
|
entityPromise = this._parsePrefab(entityConfig, engine);
|
|
1241
1254
|
} else if (entityConfig.strippedId) {
|
|
1242
1255
|
entityPromise = this._parseStrippedEntity(entityConfig);
|
|
@@ -1256,10 +1269,10 @@ function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
|
|
|
1256
1269
|
};
|
|
1257
1270
|
_proto._parsePrefab = function _parsePrefab(entityConfig, engine) {
|
|
1258
1271
|
var _this = this;
|
|
1259
|
-
var
|
|
1272
|
+
var assetUrl = entityConfig.assetUrl;
|
|
1260
1273
|
return engine.resourceManager// @ts-ignore
|
|
1261
1274
|
.getResourceByRef({
|
|
1262
|
-
|
|
1275
|
+
url: assetUrl
|
|
1263
1276
|
}).then(function(prefabResource) {
|
|
1264
1277
|
var entity = _instanceof(prefabResource, PrefabResource) ? prefabResource.instantiate() : prefabResource.instantiateSceneRoot();
|
|
1265
1278
|
var instanceContext = new ParserContext(engine, ParserType.Prefab, null);
|
|
@@ -1310,7 +1323,7 @@ function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
|
|
|
1310
1323
|
var componentConfigMap = context.componentConfigMap;
|
|
1311
1324
|
for(var i = 0, n = components.length; i < n; i++){
|
|
1312
1325
|
var componentConfig = components[i];
|
|
1313
|
-
var key = !componentConfig.
|
|
1326
|
+
var key = !componentConfig.url ? componentConfig.class : componentConfig.url;
|
|
1314
1327
|
var componentId = componentConfig.id;
|
|
1315
1328
|
var component = entity.addComponent(engineCore.Loader.getClass(key));
|
|
1316
1329
|
componentMap.set(componentId, component);
|
|
@@ -1358,53 +1371,6 @@ function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
|
|
|
1358
1371
|
return HierarchyParser;
|
|
1359
1372
|
}();
|
|
1360
1373
|
|
|
1361
|
-
exports.EditorTextureLoader = /*#__PURE__*/ function(Loader) {
|
|
1362
|
-
_inherits(EditorTextureLoader, Loader);
|
|
1363
|
-
function EditorTextureLoader() {
|
|
1364
|
-
return Loader.apply(this, arguments) || this;
|
|
1365
|
-
}
|
|
1366
|
-
var _proto = EditorTextureLoader.prototype;
|
|
1367
|
-
_proto.load = function load(item, resourceManager) {
|
|
1368
|
-
var requestConfig = _extends({}, item, {
|
|
1369
|
-
type: "arraybuffer"
|
|
1370
|
-
});
|
|
1371
|
-
var url = item.url;
|
|
1372
|
-
return new engineCore.AssetPromise(function(resolve, reject) {
|
|
1373
|
-
resourceManager// @ts-ignore
|
|
1374
|
-
._request(url, requestConfig).then(function(data) {
|
|
1375
|
-
decode(data, resourceManager.engine).then(function(texture) {
|
|
1376
|
-
resourceManager.addContentRestorer(new EditorTexture2DContentRestorer(texture, url, requestConfig));
|
|
1377
|
-
resolve(texture);
|
|
1378
|
-
});
|
|
1379
|
-
}).catch(reject);
|
|
1380
|
-
});
|
|
1381
|
-
};
|
|
1382
|
-
return EditorTextureLoader;
|
|
1383
|
-
}(engineCore.Loader);
|
|
1384
|
-
exports.EditorTextureLoader = __decorate([
|
|
1385
|
-
engineCore.resourceLoader("EditorTexture2D", [
|
|
1386
|
-
"prefab"
|
|
1387
|
-
], true)
|
|
1388
|
-
], exports.EditorTextureLoader);
|
|
1389
|
-
var EditorTexture2DContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
|
|
1390
|
-
_inherits(EditorTexture2DContentRestorer, ContentRestorer);
|
|
1391
|
-
function EditorTexture2DContentRestorer(resource, url, requestConfig) {
|
|
1392
|
-
var _this;
|
|
1393
|
-
_this = ContentRestorer.call(this, resource) || this, _this.url = url, _this.requestConfig = requestConfig;
|
|
1394
|
-
return _this;
|
|
1395
|
-
}
|
|
1396
|
-
var _proto = EditorTexture2DContentRestorer.prototype;
|
|
1397
|
-
_proto.restoreContent = function restoreContent() {
|
|
1398
|
-
var texture = this.resource;
|
|
1399
|
-
var engine = texture.engine;
|
|
1400
|
-
return engine.resourceManager// @ts-ignore
|
|
1401
|
-
._request(this.url, this.requestConfig).then(function(data) {
|
|
1402
|
-
return decode(data, engine, texture);
|
|
1403
|
-
});
|
|
1404
|
-
};
|
|
1405
|
-
return EditorTexture2DContentRestorer;
|
|
1406
|
-
}(engineCore.ContentRestorer);
|
|
1407
|
-
|
|
1408
1374
|
var MaterialLoaderType = /*#__PURE__*/ function(MaterialLoaderType) {
|
|
1409
1375
|
MaterialLoaderType["Vector2"] = "Vector2";
|
|
1410
1376
|
MaterialLoaderType["Vector3"] = "Vector3";
|
|
@@ -1445,11 +1411,11 @@ var SpecularMode = /*#__PURE__*/ function(SpecularMode) {
|
|
|
1445
1411
|
var customAmbientLight = ambient.customAmbientLight, ambientLight = ambient.ambientLight;
|
|
1446
1412
|
if (useCustomAmbient && customAmbientLight) {
|
|
1447
1413
|
// @ts-ignore
|
|
1448
|
-
context._addDependentAsset(customAmbientLight.
|
|
1414
|
+
context._addDependentAsset(customAmbientLight.url, resourceManager.getResourceByRef(customAmbientLight));
|
|
1449
1415
|
}
|
|
1450
1416
|
if (ambientLight && (!useCustomAmbient || useSH)) {
|
|
1451
1417
|
// @ts-ignore
|
|
1452
|
-
context._addDependentAsset(ambientLight.
|
|
1418
|
+
context._addDependentAsset(ambientLight.url, resourceManager.getResourceByRef(ambientLight));
|
|
1453
1419
|
}
|
|
1454
1420
|
}
|
|
1455
1421
|
var background = scene.background;
|
|
@@ -1457,14 +1423,14 @@ var SpecularMode = /*#__PURE__*/ function(SpecularMode) {
|
|
|
1457
1423
|
if (backgroundMode === engineCore.BackgroundMode.Texture) {
|
|
1458
1424
|
var texture = background.texture;
|
|
1459
1425
|
// @ts-ignore
|
|
1460
|
-
texture && context._addDependentAsset(texture.
|
|
1426
|
+
texture && context._addDependentAsset(texture.url, resourceManager.getResourceByRef(texture));
|
|
1461
1427
|
} else if (backgroundMode === engineCore.BackgroundMode.Sky) {
|
|
1462
1428
|
var skyMesh = background.skyMesh, skyMaterial = background.skyMaterial;
|
|
1463
1429
|
if (skyMesh && skyMaterial) {
|
|
1464
1430
|
// @ts-ignore
|
|
1465
|
-
context._addDependentAsset(skyMesh.
|
|
1431
|
+
context._addDependentAsset(skyMesh.url, resourceManager.getResourceByRef(skyMesh));
|
|
1466
1432
|
// @ts-ignore
|
|
1467
|
-
context._addDependentAsset(skyMaterial.
|
|
1433
|
+
context._addDependentAsset(skyMaterial.url, resourceManager.getResourceByRef(skyMaterial));
|
|
1468
1434
|
}
|
|
1469
1435
|
}
|
|
1470
1436
|
};
|
|
@@ -1480,12 +1446,12 @@ var SpecularMode = /*#__PURE__*/ function(SpecularMode) {
|
|
|
1480
1446
|
var entities = file.entities;
|
|
1481
1447
|
for(var i = 0, n = entities.length; i < n; i++){
|
|
1482
1448
|
var entity = entities[i];
|
|
1483
|
-
if (!!entity.
|
|
1449
|
+
if (!!entity.assetUrl) {
|
|
1484
1450
|
var context = this.context;
|
|
1485
|
-
var
|
|
1451
|
+
var url = entity.assetUrl, key = entity.key;
|
|
1486
1452
|
// @ts-ignore
|
|
1487
|
-
context._addDependentAsset(
|
|
1488
|
-
|
|
1453
|
+
context._addDependentAsset(url, context.resourceManager.getResourceByRef({
|
|
1454
|
+
url: url,
|
|
1489
1455
|
key: key
|
|
1490
1456
|
}));
|
|
1491
1457
|
} else if (entity.strippedId) {
|
|
@@ -1510,7 +1476,7 @@ var SpecularMode = /*#__PURE__*/ function(SpecularMode) {
|
|
|
1510
1476
|
if (ReflectionParser._isAssetRef(value)) {
|
|
1511
1477
|
var context = this.context;
|
|
1512
1478
|
// @ts-ignore
|
|
1513
|
-
context._addDependentAsset(value.
|
|
1479
|
+
context._addDependentAsset(value.url, context.resourceManager.getResourceByRef(value));
|
|
1514
1480
|
} else {
|
|
1515
1481
|
for(var key in value){
|
|
1516
1482
|
this._searchDependentAssets(value[key]);
|
|
@@ -1574,7 +1540,7 @@ var AnimationClipLoader = /*#__PURE__*/ function(Loader) {
|
|
|
1574
1540
|
};
|
|
1575
1541
|
_proto._parseKeyframeValue = function _parseKeyframeValue(keyframe, resourceManager) {
|
|
1576
1542
|
var value = keyframe.value;
|
|
1577
|
-
if ((typeof value === "undefined" ? "undefined" : _type_of(value)) === "object" && (value == null ? void 0 : value.
|
|
1543
|
+
if ((typeof value === "undefined" ? "undefined" : _type_of(value)) === "object" && (value == null ? void 0 : value.url)) {
|
|
1578
1544
|
return new Promise(function(resolve) {
|
|
1579
1545
|
resourceManager// @ts-ignore
|
|
1580
1546
|
.getResourceByRef(value).then(function(asset) {
|
|
@@ -1590,7 +1556,7 @@ var AnimationClipLoader = /*#__PURE__*/ function(Loader) {
|
|
|
1590
1556
|
}(engineCore.Loader);
|
|
1591
1557
|
AnimationClipLoader = __decorate([
|
|
1592
1558
|
engineCore.resourceLoader(engineCore.AssetType.AnimationClip, [
|
|
1593
|
-
"
|
|
1559
|
+
"anim"
|
|
1594
1560
|
])
|
|
1595
1561
|
], AnimationClipLoader);
|
|
1596
1562
|
|
|
@@ -1702,13 +1668,11 @@ var AnimatorControllerLoader = /*#__PURE__*/ function(Loader1) {
|
|
|
1702
1668
|
}(engineCore.Loader);
|
|
1703
1669
|
AnimatorControllerLoader = __decorate([
|
|
1704
1670
|
engineCore.resourceLoader(engineCore.AssetType.AnimatorController, [
|
|
1705
|
-
"
|
|
1706
|
-
]
|
|
1671
|
+
"animCtrl"
|
|
1672
|
+
])
|
|
1707
1673
|
], AnimatorControllerLoader);
|
|
1708
1674
|
|
|
1709
|
-
|
|
1710
|
-
return /^data:(.+?);base64,/.test(url);
|
|
1711
|
-
}
|
|
1675
|
+
var base64Regex = /^data:(.+?);base64,/;
|
|
1712
1676
|
var BufferLoader = /*#__PURE__*/ function(Loader) {
|
|
1713
1677
|
_inherits(BufferLoader, Loader);
|
|
1714
1678
|
function BufferLoader() {
|
|
@@ -1717,27 +1681,24 @@ var BufferLoader = /*#__PURE__*/ function(Loader) {
|
|
|
1717
1681
|
var _proto = BufferLoader.prototype;
|
|
1718
1682
|
_proto.load = function load(item, resourceManager) {
|
|
1719
1683
|
var url = item.url;
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
return c.charCodeAt(0);
|
|
1725
|
-
});
|
|
1726
|
-
resolve(result.buffer);
|
|
1727
|
-
});
|
|
1728
|
-
}
|
|
1729
|
-
// @ts-ignore
|
|
1730
|
-
return resourceManager._request(url, _extends({}, item, {
|
|
1684
|
+
var base64Match = base64Regex.exec(url);
|
|
1685
|
+
var bufferPromise = base64Match ? Promise.resolve(Uint8Array.from(atob(url.slice(13 + base64Match[1].length)), function(c) {
|
|
1686
|
+
return c.charCodeAt(0);
|
|
1687
|
+
}).buffer) : resourceManager._request(url, _extends({}, item, {
|
|
1731
1688
|
type: "arraybuffer"
|
|
1732
1689
|
}));
|
|
1690
|
+
return engineCore.AssetPromise.resolve(bufferPromise).then(function(buffer) {
|
|
1691
|
+
var asset = new engineCore.BufferAsset(resourceManager.engine);
|
|
1692
|
+
asset.buffer = buffer;
|
|
1693
|
+
return asset;
|
|
1694
|
+
});
|
|
1733
1695
|
};
|
|
1734
1696
|
return BufferLoader;
|
|
1735
1697
|
}(engineCore.Loader);
|
|
1736
1698
|
BufferLoader = __decorate([
|
|
1737
1699
|
engineCore.resourceLoader(engineCore.AssetType.Buffer, [
|
|
1738
|
-
"bin"
|
|
1739
|
-
|
|
1740
|
-
], false)
|
|
1700
|
+
"bin"
|
|
1701
|
+
])
|
|
1741
1702
|
], BufferLoader);
|
|
1742
1703
|
|
|
1743
1704
|
var EnvLoader = /*#__PURE__*/ function(Loader) {
|
|
@@ -1763,7 +1724,6 @@ var EnvLoader = /*#__PURE__*/ function(Loader) {
|
|
|
1763
1724
|
sh.copyFromArray(new Float32Array(arraybuffer, 0, 27));
|
|
1764
1725
|
ambientLight.diffuseSphericalHarmonics = sh;
|
|
1765
1726
|
ambientLight.specularTexture = texture;
|
|
1766
|
-
ambientLight.specularTextureDecodeRGBM = true;
|
|
1767
1727
|
resolve(ambientLight);
|
|
1768
1728
|
}).catch(function(e) {
|
|
1769
1729
|
reject(e);
|
|
@@ -1776,7 +1736,7 @@ var EnvLoader = /*#__PURE__*/ function(Loader) {
|
|
|
1776
1736
|
var _this;
|
|
1777
1737
|
var shByteLength = 27 * 4;
|
|
1778
1738
|
var size = (_this = new Uint16Array(buffer, shByteLength, 1)) == null ? void 0 : _this[0];
|
|
1779
|
-
texture || (texture = new engineCore.TextureCube(engine, size,
|
|
1739
|
+
texture || (texture = new engineCore.TextureCube(engine, size, engineCore.TextureFormat.R16G16B16A16, true, false));
|
|
1780
1740
|
texture.filterMode = engineCore.TextureFilterMode.Trilinear;
|
|
1781
1741
|
var mipmapCount = texture.mipmapCount;
|
|
1782
1742
|
var offset = shByteLength + 2;
|
|
@@ -1784,8 +1744,8 @@ var EnvLoader = /*#__PURE__*/ function(Loader) {
|
|
|
1784
1744
|
var mipSize = size >> mipLevel;
|
|
1785
1745
|
for(var face = 0; face < 6; face++){
|
|
1786
1746
|
var dataSize = mipSize * mipSize * 4;
|
|
1787
|
-
var data = new
|
|
1788
|
-
offset += dataSize;
|
|
1747
|
+
var data = new Uint16Array(buffer, offset, dataSize);
|
|
1748
|
+
offset += dataSize * 2;
|
|
1789
1749
|
texture.setPixelBuffer(engineCore.TextureCubeFace.PositiveX + face, data, mipLevel);
|
|
1790
1750
|
}
|
|
1791
1751
|
}
|
|
@@ -5314,341 +5274,6 @@ PrefabLoader = __decorate([
|
|
|
5314
5274
|
])
|
|
5315
5275
|
], PrefabLoader);
|
|
5316
5276
|
|
|
5317
|
-
var PI = Math.PI;
|
|
5318
|
-
// referenece: https://www.flipcode.com/archives/HDR_Image_Reader.shtml
|
|
5319
|
-
var HDRLoader = /*#__PURE__*/ function(Loader) {
|
|
5320
|
-
_inherits(HDRLoader, Loader);
|
|
5321
|
-
function HDRLoader() {
|
|
5322
|
-
return Loader.apply(this, arguments) || this;
|
|
5323
|
-
}
|
|
5324
|
-
var _proto = HDRLoader.prototype;
|
|
5325
|
-
_proto.load = function load(item, resourceManager) {
|
|
5326
|
-
return new engineCore.AssetPromise(function(resolve, reject) {
|
|
5327
|
-
var engine = resourceManager.engine;
|
|
5328
|
-
var requestConfig = _extends({}, item, {
|
|
5329
|
-
type: "arraybuffer"
|
|
5330
|
-
});
|
|
5331
|
-
var url = item.url;
|
|
5332
|
-
resourceManager// @ts-ignore
|
|
5333
|
-
._request(url, requestConfig).then(function(buffer) {
|
|
5334
|
-
var texture = HDRLoader._setTextureByBuffer(engine, buffer);
|
|
5335
|
-
engine.resourceManager.addContentRestorer(new HDRContentRestorer(texture, url, requestConfig));
|
|
5336
|
-
resolve(texture);
|
|
5337
|
-
}).catch(reject);
|
|
5338
|
-
});
|
|
5339
|
-
};
|
|
5340
|
-
/**
|
|
5341
|
-
* @internal
|
|
5342
|
-
*/ HDRLoader._setTextureByBuffer = function _setTextureByBuffer(engine, buffer, texture) {
|
|
5343
|
-
var bufferArray = new Uint8Array(buffer);
|
|
5344
|
-
var _HDRLoader__parseHeader = HDRLoader._parseHeader(bufferArray), width = _HDRLoader__parseHeader.width, height = _HDRLoader__parseHeader.height, dataPosition = _HDRLoader__parseHeader.dataPosition;
|
|
5345
|
-
var cubeSize = height >> 1;
|
|
5346
|
-
texture || (texture = new engineCore.TextureCube(engine, cubeSize, undefined, undefined, false));
|
|
5347
|
-
var pixels = HDRLoader._readPixels(bufferArray.subarray(dataPosition), width, height);
|
|
5348
|
-
var cubeMapData = HDRLoader._convertToCubemap(pixels, width, height, cubeSize);
|
|
5349
|
-
for(var faceIndex = 0; faceIndex < 6; faceIndex++){
|
|
5350
|
-
texture.setPixelBuffer(engineCore.TextureCubeFace.PositiveX + faceIndex, cubeMapData[faceIndex], 0);
|
|
5351
|
-
}
|
|
5352
|
-
texture.generateMipmaps();
|
|
5353
|
-
return texture;
|
|
5354
|
-
};
|
|
5355
|
-
HDRLoader._convertToCubemap = function _convertToCubemap(pixels, inputWidth, inputHeight, size) {
|
|
5356
|
-
if (!pixels) {
|
|
5357
|
-
throw "ConvertPanoramaToCubemap: input cannot be null";
|
|
5358
|
-
}
|
|
5359
|
-
if (pixels.length != inputWidth * inputHeight * 4) {
|
|
5360
|
-
throw "ConvertPanoramaToCubemap: input size is wrong";
|
|
5361
|
-
}
|
|
5362
|
-
var textureRight = this._createCubemapData(size, this._faceRight, pixels, inputWidth, inputHeight);
|
|
5363
|
-
var textureLeft = this._createCubemapData(size, this._faceLeft, pixels, inputWidth, inputHeight);
|
|
5364
|
-
var textureUp = this._createCubemapData(size, this._faceUp, pixels, inputWidth, inputHeight);
|
|
5365
|
-
var textureDown = this._createCubemapData(size, this._faceBottom, pixels, inputWidth, inputHeight);
|
|
5366
|
-
var textureFront = this._createCubemapData(size, this._faceFront, pixels, inputWidth, inputHeight);
|
|
5367
|
-
var textureBack = this._createCubemapData(size, this._faceBack, pixels, inputWidth, inputHeight);
|
|
5368
|
-
return [
|
|
5369
|
-
textureRight,
|
|
5370
|
-
textureLeft,
|
|
5371
|
-
textureUp,
|
|
5372
|
-
textureDown,
|
|
5373
|
-
textureFront,
|
|
5374
|
-
textureBack
|
|
5375
|
-
];
|
|
5376
|
-
};
|
|
5377
|
-
HDRLoader._createCubemapData = function _createCubemapData(texSize, faceData, pixels, inputWidth, inputHeight) {
|
|
5378
|
-
var textureArray = new Uint8ClampedArray(texSize * texSize * 4);
|
|
5379
|
-
var rotDX1 = this._tempVector3.set(0, 0, 0).add(faceData[1]).subtract(faceData[0]).scale(1 / texSize);
|
|
5380
|
-
var rotDX2 = this._temp2Vector3.set(0, 0, 0).add(faceData[3]).subtract(faceData[2]).scale(1 / texSize);
|
|
5381
|
-
var dy = 1 / texSize;
|
|
5382
|
-
var fy = 0;
|
|
5383
|
-
for(var y = 0; y < texSize; y++){
|
|
5384
|
-
var xv1 = this._temp3Vector3.set(0, 0, 0).add(faceData[0]);
|
|
5385
|
-
var xv2 = this._temp4Vector3.set(0, 0, 0).add(faceData[2]);
|
|
5386
|
-
for(var x = 0; x < texSize; x++){
|
|
5387
|
-
var v = this._temp5Vector3.set(0, 0, 0).add(xv2).subtract(xv1).scale(fy).add(xv1);
|
|
5388
|
-
v.normalize();
|
|
5389
|
-
var color = this._calcProjectionSpherical(v, pixels, inputWidth, inputHeight);
|
|
5390
|
-
this._RGBEToLinear(color);
|
|
5391
|
-
this._linearToRGBM(color, 5);
|
|
5392
|
-
// 4 channels per pixels
|
|
5393
|
-
var index = y * texSize * 4 + x * 4;
|
|
5394
|
-
textureArray[index] = color.r;
|
|
5395
|
-
textureArray[index + 1] = color.g;
|
|
5396
|
-
textureArray[index + 2] = color.b;
|
|
5397
|
-
textureArray[index + 3] = color.a;
|
|
5398
|
-
xv1.add(rotDX1);
|
|
5399
|
-
xv2.add(rotDX2);
|
|
5400
|
-
}
|
|
5401
|
-
fy += dy;
|
|
5402
|
-
}
|
|
5403
|
-
return textureArray;
|
|
5404
|
-
};
|
|
5405
|
-
HDRLoader._calcProjectionSpherical = function _calcProjectionSpherical(vDir, pixels, inputWidth, inputHeight) {
|
|
5406
|
-
var theta = Math.atan2(vDir.z, vDir.x);
|
|
5407
|
-
var phi = Math.acos(vDir.y);
|
|
5408
|
-
while(theta < -PI){
|
|
5409
|
-
theta += 2 * PI;
|
|
5410
|
-
}
|
|
5411
|
-
while(theta > PI){
|
|
5412
|
-
theta -= 2 * PI;
|
|
5413
|
-
}
|
|
5414
|
-
var dx = theta / PI;
|
|
5415
|
-
var dy = phi / PI;
|
|
5416
|
-
// recenter.
|
|
5417
|
-
dx = dx * 0.5 + 0.5;
|
|
5418
|
-
var px = Math.round(dx * inputWidth);
|
|
5419
|
-
if (px < 0) {
|
|
5420
|
-
px = 0;
|
|
5421
|
-
} else if (px >= inputWidth) {
|
|
5422
|
-
px = inputWidth - 1;
|
|
5423
|
-
}
|
|
5424
|
-
var py = Math.round(dy * inputHeight);
|
|
5425
|
-
if (py < 0) {
|
|
5426
|
-
py = 0;
|
|
5427
|
-
} else if (py >= inputHeight) {
|
|
5428
|
-
py = inputHeight - 1;
|
|
5429
|
-
}
|
|
5430
|
-
var inputY = inputHeight - py - 1;
|
|
5431
|
-
var index = inputY * inputWidth * 4 + px * 4;
|
|
5432
|
-
var r = pixels[index];
|
|
5433
|
-
var g = pixels[index + 1];
|
|
5434
|
-
var b = pixels[index + 2];
|
|
5435
|
-
var a = pixels[index + 3];
|
|
5436
|
-
return new engineMath.Color(r, g, b, a);
|
|
5437
|
-
};
|
|
5438
|
-
HDRLoader._readStringLine = function _readStringLine(uint8array, startIndex) {
|
|
5439
|
-
var line = "";
|
|
5440
|
-
var character = "";
|
|
5441
|
-
for(var i = startIndex; i < uint8array.length - startIndex; i++){
|
|
5442
|
-
character = String.fromCharCode(uint8array[i]);
|
|
5443
|
-
if (character == "\n") {
|
|
5444
|
-
break;
|
|
5445
|
-
}
|
|
5446
|
-
line += character;
|
|
5447
|
-
}
|
|
5448
|
-
return line;
|
|
5449
|
-
};
|
|
5450
|
-
HDRLoader._parseHeader = function _parseHeader(uint8array) {
|
|
5451
|
-
var height = 0;
|
|
5452
|
-
var width = 0;
|
|
5453
|
-
var line = this._readStringLine(uint8array, 0);
|
|
5454
|
-
if (line[0] != "#" || line[1] != "?") {
|
|
5455
|
-
throw "Bad HDR Format.";
|
|
5456
|
-
}
|
|
5457
|
-
var endOfHeader = false;
|
|
5458
|
-
var findFormat = false;
|
|
5459
|
-
var lineIndex = 0;
|
|
5460
|
-
do {
|
|
5461
|
-
lineIndex += line.length + 1;
|
|
5462
|
-
line = this._readStringLine(uint8array, lineIndex);
|
|
5463
|
-
if (line == "FORMAT=32-bit_rle_rgbe") {
|
|
5464
|
-
findFormat = true;
|
|
5465
|
-
} else if (line.length == 0) {
|
|
5466
|
-
endOfHeader = true;
|
|
5467
|
-
}
|
|
5468
|
-
}while (!endOfHeader);
|
|
5469
|
-
if (!findFormat) {
|
|
5470
|
-
throw "HDR Bad header format, unsupported FORMAT";
|
|
5471
|
-
}
|
|
5472
|
-
lineIndex += line.length + 1;
|
|
5473
|
-
line = this._readStringLine(uint8array, lineIndex);
|
|
5474
|
-
var sizeRegexp = /^\-Y (.*) \+X (.*)$/g;
|
|
5475
|
-
var match = sizeRegexp.exec(line);
|
|
5476
|
-
// TODO. Support +Y and -X if needed.
|
|
5477
|
-
if (!match || match.length < 3) {
|
|
5478
|
-
throw "HDR Bad header format, no size";
|
|
5479
|
-
}
|
|
5480
|
-
width = parseInt(match[2]);
|
|
5481
|
-
height = parseInt(match[1]);
|
|
5482
|
-
if (width < 8 || width > 0x7fff) {
|
|
5483
|
-
throw "HDR Bad header format, unsupported size";
|
|
5484
|
-
}
|
|
5485
|
-
lineIndex += line.length + 1;
|
|
5486
|
-
return {
|
|
5487
|
-
height: height,
|
|
5488
|
-
width: width,
|
|
5489
|
-
dataPosition: lineIndex
|
|
5490
|
-
};
|
|
5491
|
-
};
|
|
5492
|
-
HDRLoader._readPixels = function _readPixels(buffer, width, height) {
|
|
5493
|
-
var scanLineWidth = width;
|
|
5494
|
-
var byteLength = buffer.byteLength;
|
|
5495
|
-
var dataRGBA = new Uint8Array(4 * width * height);
|
|
5496
|
-
var offset = 0, pos = 0;
|
|
5497
|
-
var ptrEnd = 4 * scanLineWidth;
|
|
5498
|
-
var scanLineBuffer = new Uint8Array(ptrEnd);
|
|
5499
|
-
var numScanLines = height; // read in each successive scanLine
|
|
5500
|
-
while(numScanLines > 0 && pos < byteLength){
|
|
5501
|
-
var a = buffer[pos++];
|
|
5502
|
-
var b = buffer[pos++];
|
|
5503
|
-
var c = buffer[pos++];
|
|
5504
|
-
var d = buffer[pos++];
|
|
5505
|
-
if (a != 2 || b != 2 || c & 0x80 || width < 8 || width > 32767) {
|
|
5506
|
-
// this file is not run length encoded
|
|
5507
|
-
// read values sequentially
|
|
5508
|
-
return buffer;
|
|
5509
|
-
}
|
|
5510
|
-
if ((c << 8 | d) != scanLineWidth) {
|
|
5511
|
-
// eslint-disable-next-line no-throw-literal
|
|
5512
|
-
throw "HDR Bad header format, wrong scan line width";
|
|
5513
|
-
}
|
|
5514
|
-
// read each of the four channels for the scanline into the buffer
|
|
5515
|
-
// first red, then green, then blue, then exponent
|
|
5516
|
-
var ptr = 0, count = void 0;
|
|
5517
|
-
while(ptr < ptrEnd && pos < byteLength){
|
|
5518
|
-
count = buffer[pos++];
|
|
5519
|
-
var isEncodedRun = count > 128;
|
|
5520
|
-
if (isEncodedRun) count -= 128;
|
|
5521
|
-
if (0 === count || ptr + count > ptrEnd) {
|
|
5522
|
-
throw "HDR Bad Format, bad scanline data (run)";
|
|
5523
|
-
}
|
|
5524
|
-
if (isEncodedRun) {
|
|
5525
|
-
// a (encoded) run of the same value
|
|
5526
|
-
var byteValue = buffer[pos++];
|
|
5527
|
-
for(var i = 0; i < count; i++){
|
|
5528
|
-
scanLineBuffer[ptr++] = byteValue;
|
|
5529
|
-
} //ptr += count;
|
|
5530
|
-
} else {
|
|
5531
|
-
// a literal-run
|
|
5532
|
-
scanLineBuffer.set(buffer.subarray(pos, pos + count), ptr);
|
|
5533
|
-
ptr += count;
|
|
5534
|
-
pos += count;
|
|
5535
|
-
}
|
|
5536
|
-
} // now convert data from buffer into rgba
|
|
5537
|
-
// first red, then green, then blue, then exponent (alpha)
|
|
5538
|
-
var l = scanLineWidth; //scanLine_buffer.byteLength;
|
|
5539
|
-
for(var i1 = 0; i1 < l; i1++){
|
|
5540
|
-
var off = 0;
|
|
5541
|
-
dataRGBA[offset] = scanLineBuffer[i1 + off];
|
|
5542
|
-
off += scanLineWidth;
|
|
5543
|
-
dataRGBA[offset + 1] = scanLineBuffer[i1 + off];
|
|
5544
|
-
off += scanLineWidth;
|
|
5545
|
-
dataRGBA[offset + 2] = scanLineBuffer[i1 + off];
|
|
5546
|
-
off += scanLineWidth;
|
|
5547
|
-
dataRGBA[offset + 3] = scanLineBuffer[i1 + off];
|
|
5548
|
-
offset += 4;
|
|
5549
|
-
}
|
|
5550
|
-
numScanLines--;
|
|
5551
|
-
}
|
|
5552
|
-
return dataRGBA;
|
|
5553
|
-
};
|
|
5554
|
-
HDRLoader._RGBEToLinear = function _RGBEToLinear(color) {
|
|
5555
|
-
var scaleFactor = Math.pow(2, color.a - 128) / 255;
|
|
5556
|
-
color.r *= scaleFactor;
|
|
5557
|
-
color.g *= scaleFactor;
|
|
5558
|
-
color.b *= scaleFactor;
|
|
5559
|
-
color.a = 1;
|
|
5560
|
-
};
|
|
5561
|
-
HDRLoader._linearToRGBM = function _linearToRGBM(color, maxRange) {
|
|
5562
|
-
var maxRGB = Math.max(color.r, Math.max(color.g, color.b));
|
|
5563
|
-
var M = Math.min(maxRGB / maxRange, 1);
|
|
5564
|
-
M = Math.ceil(M * 255);
|
|
5565
|
-
var scaleFactor = 65025 / (M * maxRange); // 255 * (255 / (M * maxRange) )
|
|
5566
|
-
color.r *= scaleFactor;
|
|
5567
|
-
color.g *= scaleFactor;
|
|
5568
|
-
color.b *= scaleFactor;
|
|
5569
|
-
color.a *= M;
|
|
5570
|
-
};
|
|
5571
|
-
return HDRLoader;
|
|
5572
|
-
}(engineCore.Loader);
|
|
5573
|
-
HDRLoader._rightBottomBack = new engineMath.Vector3(1.0, -1.0, -1.0);
|
|
5574
|
-
HDRLoader._rightBottomFront = new engineMath.Vector3(1.0, -1.0, 1.0);
|
|
5575
|
-
HDRLoader._rightUpBack = new engineMath.Vector3(1.0, 1.0, -1.0);
|
|
5576
|
-
HDRLoader._rightUpFront = new engineMath.Vector3(1.0, 1.0, 1.0);
|
|
5577
|
-
HDRLoader._leftBottomBack = new engineMath.Vector3(-1.0, -1.0, -1.0);
|
|
5578
|
-
HDRLoader._leftBottomFront = new engineMath.Vector3(-1.0, -1.0, 1.0);
|
|
5579
|
-
HDRLoader._leftUpBack = new engineMath.Vector3(-1.0, 1.0, -1.0);
|
|
5580
|
-
HDRLoader._leftUpFront = new engineMath.Vector3(-1.0, 1.0, 1.0);
|
|
5581
|
-
HDRLoader._faceRight = [
|
|
5582
|
-
HDRLoader._rightBottomBack,
|
|
5583
|
-
HDRLoader._rightBottomFront,
|
|
5584
|
-
HDRLoader._rightUpBack,
|
|
5585
|
-
HDRLoader._rightUpFront
|
|
5586
|
-
];
|
|
5587
|
-
HDRLoader._faceLeft = [
|
|
5588
|
-
HDRLoader._leftBottomFront,
|
|
5589
|
-
HDRLoader._leftBottomBack,
|
|
5590
|
-
HDRLoader._leftUpFront,
|
|
5591
|
-
HDRLoader._leftUpBack
|
|
5592
|
-
];
|
|
5593
|
-
HDRLoader._faceUp = [
|
|
5594
|
-
HDRLoader._leftBottomFront,
|
|
5595
|
-
HDRLoader._rightBottomFront,
|
|
5596
|
-
HDRLoader._leftBottomBack,
|
|
5597
|
-
HDRLoader._rightBottomBack
|
|
5598
|
-
];
|
|
5599
|
-
HDRLoader._faceBottom = [
|
|
5600
|
-
HDRLoader._leftUpBack,
|
|
5601
|
-
HDRLoader._rightUpBack,
|
|
5602
|
-
HDRLoader._leftUpFront,
|
|
5603
|
-
HDRLoader._rightUpFront
|
|
5604
|
-
];
|
|
5605
|
-
HDRLoader._faceFront = [
|
|
5606
|
-
HDRLoader._leftBottomBack,
|
|
5607
|
-
HDRLoader._rightBottomBack,
|
|
5608
|
-
HDRLoader._leftUpBack,
|
|
5609
|
-
HDRLoader._rightUpBack
|
|
5610
|
-
];
|
|
5611
|
-
HDRLoader._faceBack = [
|
|
5612
|
-
HDRLoader._rightBottomFront,
|
|
5613
|
-
HDRLoader._leftBottomFront,
|
|
5614
|
-
HDRLoader._rightUpFront,
|
|
5615
|
-
HDRLoader._leftUpFront
|
|
5616
|
-
];
|
|
5617
|
-
HDRLoader._tempVector3 = new engineMath.Vector3();
|
|
5618
|
-
HDRLoader._temp2Vector3 = new engineMath.Vector3();
|
|
5619
|
-
HDRLoader._temp3Vector3 = new engineMath.Vector3();
|
|
5620
|
-
HDRLoader._temp4Vector3 = new engineMath.Vector3();
|
|
5621
|
-
HDRLoader._temp5Vector3 = new engineMath.Vector3();
|
|
5622
|
-
HDRLoader = __decorate([
|
|
5623
|
-
engineCore.resourceLoader(engineCore.AssetType.HDR, [
|
|
5624
|
-
"hdr"
|
|
5625
|
-
])
|
|
5626
|
-
], HDRLoader);
|
|
5627
|
-
/**
|
|
5628
|
-
* @internal
|
|
5629
|
-
*/ var HDRContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
|
|
5630
|
-
_inherits(HDRContentRestorer, ContentRestorer);
|
|
5631
|
-
function HDRContentRestorer(resource, url, requestConfig) {
|
|
5632
|
-
var _this;
|
|
5633
|
-
_this = ContentRestorer.call(this, resource) || this, _this.url = url, _this.requestConfig = requestConfig;
|
|
5634
|
-
return _this;
|
|
5635
|
-
}
|
|
5636
|
-
var _proto = HDRContentRestorer.prototype;
|
|
5637
|
-
_proto.restoreContent = function restoreContent() {
|
|
5638
|
-
var _this = this;
|
|
5639
|
-
return new engineCore.AssetPromise(function(resolve, reject) {
|
|
5640
|
-
var resource = _this.resource;
|
|
5641
|
-
var engine = resource.engine;
|
|
5642
|
-
engine.resourceManager// @ts-ignore
|
|
5643
|
-
._request(_this.url, _this.requestConfig).then(function(buffer) {
|
|
5644
|
-
HDRLoader._setTextureByBuffer(engine, buffer, resource);
|
|
5645
|
-
resolve(resource);
|
|
5646
|
-
}).catch(reject);
|
|
5647
|
-
});
|
|
5648
|
-
};
|
|
5649
|
-
return HDRContentRestorer;
|
|
5650
|
-
}(engineCore.ContentRestorer);
|
|
5651
|
-
|
|
5652
5277
|
var JSONLoader = /*#__PURE__*/ function(Loader) {
|
|
5653
5278
|
_inherits(JSONLoader, Loader);
|
|
5654
5279
|
function JSONLoader() {
|
|
@@ -5659,14 +5284,18 @@ var JSONLoader = /*#__PURE__*/ function(Loader) {
|
|
|
5659
5284
|
// @ts-ignore
|
|
5660
5285
|
return resourceManager._request(item.url, _extends({}, item, {
|
|
5661
5286
|
type: "json"
|
|
5662
|
-
}))
|
|
5287
|
+
})).then(function(data) {
|
|
5288
|
+
var asset = new engineCore.JSONAsset(resourceManager.engine);
|
|
5289
|
+
asset.data = data;
|
|
5290
|
+
return asset;
|
|
5291
|
+
});
|
|
5663
5292
|
};
|
|
5664
5293
|
return JSONLoader;
|
|
5665
5294
|
}(engineCore.Loader);
|
|
5666
5295
|
JSONLoader = __decorate([
|
|
5667
5296
|
engineCore.resourceLoader(engineCore.AssetType.JSON, [
|
|
5668
5297
|
"json"
|
|
5669
|
-
]
|
|
5298
|
+
])
|
|
5670
5299
|
], JSONLoader);
|
|
5671
5300
|
|
|
5672
5301
|
var HEADER_LEN = 12 + 13 * 4; // identifier + header elements (not including key value meta-data pairs)
|
|
@@ -6047,7 +5676,7 @@ var MaterialLoader = /*#__PURE__*/ function(Loader) {
|
|
|
6047
5676
|
}(engineCore.Loader);
|
|
6048
5677
|
MaterialLoader = __decorate([
|
|
6049
5678
|
engineCore.resourceLoader(engineCore.AssetType.Material, [
|
|
6050
|
-
"
|
|
5679
|
+
"mat"
|
|
6051
5680
|
])
|
|
6052
5681
|
], MaterialLoader);
|
|
6053
5682
|
|
|
@@ -6170,7 +5799,7 @@ var ProjectLoader = /*#__PURE__*/ function(Loader) {
|
|
|
6170
5799
|
}(engineCore.Loader);
|
|
6171
5800
|
ProjectLoader = __decorate([
|
|
6172
5801
|
engineCore.resourceLoader(engineCore.AssetType.Project, [
|
|
6173
|
-
"
|
|
5802
|
+
"project"
|
|
6174
5803
|
], false)
|
|
6175
5804
|
], ProjectLoader);
|
|
6176
5805
|
|
|
@@ -6367,28 +5996,44 @@ SpriteLoader = __decorate([
|
|
|
6367
5996
|
])
|
|
6368
5997
|
], SpriteLoader);
|
|
6369
5998
|
|
|
6370
|
-
|
|
6371
|
-
|
|
6372
|
-
|
|
6373
|
-
|
|
6374
|
-
function Texture2DContentRestorer(resource, url, requestConfig) {
|
|
6375
|
-
var _this;
|
|
6376
|
-
_this = ContentRestorer.call(this, resource) || this, _this.url = url, _this.requestConfig = requestConfig;
|
|
6377
|
-
return _this;
|
|
5999
|
+
var TextLoader = /*#__PURE__*/ function(Loader) {
|
|
6000
|
+
_inherits(TextLoader, Loader);
|
|
6001
|
+
function TextLoader() {
|
|
6002
|
+
return Loader.apply(this, arguments) || this;
|
|
6378
6003
|
}
|
|
6379
|
-
var _proto =
|
|
6380
|
-
_proto.
|
|
6381
|
-
|
|
6382
|
-
return
|
|
6383
|
-
|
|
6384
|
-
|
|
6385
|
-
|
|
6386
|
-
|
|
6004
|
+
var _proto = TextLoader.prototype;
|
|
6005
|
+
_proto.load = function load(item, resourceManager) {
|
|
6006
|
+
// @ts-ignore
|
|
6007
|
+
return resourceManager._request(item.url, _extends({}, item, {
|
|
6008
|
+
type: "text"
|
|
6009
|
+
})).then(function(text) {
|
|
6010
|
+
var asset = new engineCore.TextAsset(resourceManager.engine);
|
|
6011
|
+
asset.text = text;
|
|
6012
|
+
return asset;
|
|
6387
6013
|
});
|
|
6388
6014
|
};
|
|
6389
|
-
return
|
|
6390
|
-
}(engineCore.
|
|
6015
|
+
return TextLoader;
|
|
6016
|
+
}(engineCore.Loader);
|
|
6017
|
+
TextLoader = __decorate([
|
|
6018
|
+
engineCore.resourceLoader(engineCore.AssetType.Text, [
|
|
6019
|
+
"txt"
|
|
6020
|
+
])
|
|
6021
|
+
], TextLoader);
|
|
6391
6022
|
|
|
6023
|
+
function loadImageFromBuffer(buffer) {
|
|
6024
|
+
return new engineCore.AssetPromise(function(resolve, reject) {
|
|
6025
|
+
var blob = new Blob([
|
|
6026
|
+
buffer
|
|
6027
|
+
]);
|
|
6028
|
+
var img = new Image();
|
|
6029
|
+
img.onload = function() {
|
|
6030
|
+
URL.revokeObjectURL(img.src);
|
|
6031
|
+
resolve(img);
|
|
6032
|
+
};
|
|
6033
|
+
img.onerror = reject;
|
|
6034
|
+
img.src = URL.createObjectURL(blob);
|
|
6035
|
+
});
|
|
6036
|
+
}
|
|
6392
6037
|
var Texture2DLoader = /*#__PURE__*/ function(Loader) {
|
|
6393
6038
|
_inherits(Texture2DLoader, Loader);
|
|
6394
6039
|
function Texture2DLoader() {
|
|
@@ -6396,36 +6041,48 @@ var Texture2DLoader = /*#__PURE__*/ function(Loader) {
|
|
|
6396
6041
|
}
|
|
6397
6042
|
var _proto = Texture2DLoader.prototype;
|
|
6398
6043
|
_proto.load = function load(item, resourceManager) {
|
|
6044
|
+
var _this = this;
|
|
6045
|
+
var url = item.url;
|
|
6046
|
+
var requestConfig = _extends({}, item, {
|
|
6047
|
+
type: "arraybuffer"
|
|
6048
|
+
});
|
|
6399
6049
|
return new engineCore.AssetPromise(function(resolve, reject, setTaskCompleteProgress, setTaskDetailProgress) {
|
|
6400
|
-
var url = item.url;
|
|
6401
|
-
var requestConfig = _extends({}, item, {
|
|
6402
|
-
type: "image"
|
|
6403
|
-
});
|
|
6404
6050
|
resourceManager// @ts-ignore
|
|
6405
|
-
._request(url, requestConfig).onProgress(setTaskCompleteProgress, setTaskDetailProgress).then(function(
|
|
6406
|
-
|
|
6407
|
-
|
|
6408
|
-
|
|
6409
|
-
|
|
6410
|
-
|
|
6411
|
-
|
|
6412
|
-
|
|
6413
|
-
|
|
6414
|
-
|
|
6415
|
-
|
|
6416
|
-
|
|
6417
|
-
generateMipmap && texture.generateMipmaps();
|
|
6418
|
-
if (url.indexOf("data:") !== 0) {
|
|
6419
|
-
var index = url.lastIndexOf("/");
|
|
6420
|
-
texture.name = url.substring(index + 1);
|
|
6051
|
+
._request(url, requestConfig).onProgress(setTaskCompleteProgress, setTaskDetailProgress).then(function(buffer) {
|
|
6052
|
+
if (FileHeader.checkMagic(buffer)) {
|
|
6053
|
+
decode(buffer, resourceManager.engine).then(function(texture) {
|
|
6054
|
+
resourceManager.addContentRestorer(new Texture2DContentRestorer(texture, url, requestConfig));
|
|
6055
|
+
resolve(texture);
|
|
6056
|
+
}, reject);
|
|
6057
|
+
} else {
|
|
6058
|
+
loadImageFromBuffer(buffer).then(function(img) {
|
|
6059
|
+
var texture = _this._createTexture(img, item, resourceManager);
|
|
6060
|
+
resourceManager.addContentRestorer(new Texture2DContentRestorer(texture, url, requestConfig));
|
|
6061
|
+
resolve(texture);
|
|
6062
|
+
}, reject);
|
|
6421
6063
|
}
|
|
6422
|
-
|
|
6423
|
-
resolve(texture);
|
|
6424
|
-
}).catch(function(e) {
|
|
6425
|
-
reject(e);
|
|
6426
|
-
});
|
|
6064
|
+
}).catch(reject);
|
|
6427
6065
|
});
|
|
6428
6066
|
};
|
|
6067
|
+
_proto._createTexture = function _createTexture(img, item, resourceManager) {
|
|
6068
|
+
var _item_params;
|
|
6069
|
+
var _ref = (_item_params = item.params) != null ? _item_params : {}, _ref_format = _ref.format, format = _ref_format === void 0 ? engineCore.TextureFormat.R8G8B8A8 : _ref_format, anisoLevel = _ref.anisoLevel, wrapModeU = _ref.wrapModeU, wrapModeV = _ref.wrapModeV, filterMode = _ref.filterMode, _ref_isSRGBColorSpace = _ref.isSRGBColorSpace, isSRGBColorSpace = _ref_isSRGBColorSpace === void 0 ? true : _ref_isSRGBColorSpace, _ref_mipmap = _ref.mipmap, mipmap = _ref_mipmap === void 0 ? true : _ref_mipmap;
|
|
6070
|
+
var width = img.width, height = img.height;
|
|
6071
|
+
var engine = resourceManager.engine;
|
|
6072
|
+
var generateMipmap = engineCore.TextureUtils.supportGenerateMipmapsWithCorrection(engine, width, height, format, mipmap, isSRGBColorSpace);
|
|
6073
|
+
var texture = new engineCore.Texture2D(engine, width, height, format, generateMipmap, isSRGBColorSpace);
|
|
6074
|
+
texture.anisoLevel = anisoLevel != null ? anisoLevel : texture.anisoLevel;
|
|
6075
|
+
texture.filterMode = filterMode != null ? filterMode : texture.filterMode;
|
|
6076
|
+
texture.wrapModeU = wrapModeU != null ? wrapModeU : texture.wrapModeU;
|
|
6077
|
+
texture.wrapModeV = wrapModeV != null ? wrapModeV : texture.wrapModeV;
|
|
6078
|
+
texture.setImageSource(img);
|
|
6079
|
+
generateMipmap && texture.generateMipmaps();
|
|
6080
|
+
var url = item.url;
|
|
6081
|
+
if (url.indexOf("data:") !== 0) {
|
|
6082
|
+
texture.name = url.substring(url.lastIndexOf("/") + 1);
|
|
6083
|
+
}
|
|
6084
|
+
return texture;
|
|
6085
|
+
};
|
|
6429
6086
|
return Texture2DLoader;
|
|
6430
6087
|
}(engineCore.Loader);
|
|
6431
6088
|
Texture2DLoader = __decorate([
|
|
@@ -6433,40 +6090,319 @@ Texture2DLoader = __decorate([
|
|
|
6433
6090
|
"png",
|
|
6434
6091
|
"jpg",
|
|
6435
6092
|
"webp",
|
|
6436
|
-
"jpeg"
|
|
6093
|
+
"jpeg",
|
|
6094
|
+
"tex"
|
|
6437
6095
|
])
|
|
6438
6096
|
], Texture2DLoader);
|
|
6439
|
-
|
|
6440
|
-
|
|
6441
|
-
|
|
6442
|
-
*/ var TextureCubeContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
|
|
6443
|
-
_inherits(TextureCubeContentRestorer, ContentRestorer);
|
|
6444
|
-
function TextureCubeContentRestorer(resource, urls, requestConfig) {
|
|
6097
|
+
var Texture2DContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
|
|
6098
|
+
_inherits(Texture2DContentRestorer, ContentRestorer);
|
|
6099
|
+
function Texture2DContentRestorer(resource, url, requestConfig) {
|
|
6445
6100
|
var _this;
|
|
6446
|
-
_this = ContentRestorer.call(this, resource) || this, _this.
|
|
6101
|
+
_this = ContentRestorer.call(this, resource) || this, _this.url = url, _this.requestConfig = requestConfig;
|
|
6447
6102
|
return _this;
|
|
6448
6103
|
}
|
|
6449
|
-
var _proto =
|
|
6104
|
+
var _proto = Texture2DContentRestorer.prototype;
|
|
6450
6105
|
_proto.restoreContent = function restoreContent() {
|
|
6451
|
-
var
|
|
6452
|
-
|
|
6453
|
-
|
|
6454
|
-
|
|
6455
|
-
|
|
6456
|
-
|
|
6457
|
-
|
|
6458
|
-
|
|
6459
|
-
|
|
6460
|
-
|
|
6461
|
-
|
|
6462
|
-
|
|
6463
|
-
|
|
6464
|
-
});
|
|
6106
|
+
var texture = this.resource;
|
|
6107
|
+
var engine = texture.engine;
|
|
6108
|
+
return engine.resourceManager// @ts-ignore
|
|
6109
|
+
._request(this.url, this.requestConfig).then(function(buffer) {
|
|
6110
|
+
if (FileHeader.checkMagic(buffer)) {
|
|
6111
|
+
return decode(buffer, engine, texture);
|
|
6112
|
+
} else {
|
|
6113
|
+
return loadImageFromBuffer(buffer).then(function(img) {
|
|
6114
|
+
texture.setImageSource(img);
|
|
6115
|
+
texture.generateMipmaps();
|
|
6116
|
+
return texture;
|
|
6117
|
+
});
|
|
6118
|
+
}
|
|
6465
6119
|
});
|
|
6466
6120
|
};
|
|
6467
|
-
return
|
|
6121
|
+
return Texture2DContentRestorer;
|
|
6468
6122
|
}(engineCore.ContentRestorer);
|
|
6469
6123
|
|
|
6124
|
+
/**
|
|
6125
|
+
* HDR panorama to cubemap decoder.
|
|
6126
|
+
*/ var HDRDecoder = /*#__PURE__*/ function() {
|
|
6127
|
+
function HDRDecoder() {}
|
|
6128
|
+
HDRDecoder.parseHeader = function parseHeader(uint8array) {
|
|
6129
|
+
var line = this._readStringLine(uint8array, 0);
|
|
6130
|
+
if (line[0] !== "#" || line[1] !== "?") {
|
|
6131
|
+
throw "HDRDecoder: invalid file header";
|
|
6132
|
+
}
|
|
6133
|
+
var endOfHeader = false;
|
|
6134
|
+
var findFormat = false;
|
|
6135
|
+
var lineIndex = 0;
|
|
6136
|
+
do {
|
|
6137
|
+
lineIndex += line.length + 1;
|
|
6138
|
+
line = this._readStringLine(uint8array, lineIndex);
|
|
6139
|
+
if (line === "FORMAT=32-bit_rle_rgbe") findFormat = true;
|
|
6140
|
+
else if (line.length === 0) endOfHeader = true;
|
|
6141
|
+
}while (!endOfHeader);
|
|
6142
|
+
if (!findFormat) {
|
|
6143
|
+
throw "HDRDecoder: unsupported format, expected 32-bit_rle_rgbe";
|
|
6144
|
+
}
|
|
6145
|
+
lineIndex += line.length + 1;
|
|
6146
|
+
line = this._readStringLine(uint8array, lineIndex);
|
|
6147
|
+
var match = /^\-Y (.*) \+X (.*)$/g.exec(line);
|
|
6148
|
+
if (!match || match.length < 3) {
|
|
6149
|
+
throw "HDRDecoder: missing image size, only -Y +X layout is supported";
|
|
6150
|
+
}
|
|
6151
|
+
var width = parseInt(match[2]);
|
|
6152
|
+
var height = parseInt(match[1]);
|
|
6153
|
+
if (width < 8 || width > 0x7fff) {
|
|
6154
|
+
throw "HDRDecoder: unsupported image width, must be between 8 and 32767";
|
|
6155
|
+
}
|
|
6156
|
+
return {
|
|
6157
|
+
height: height,
|
|
6158
|
+
width: width,
|
|
6159
|
+
dataPosition: lineIndex + line.length + 1
|
|
6160
|
+
};
|
|
6161
|
+
};
|
|
6162
|
+
HDRDecoder.decodeFaces = function decodeFaces(bufferArray, header, onFace) {
|
|
6163
|
+
var width = header.width, height = header.height, dataPosition = header.dataPosition;
|
|
6164
|
+
var cubeSize = height >> 1;
|
|
6165
|
+
var pixels = HDRDecoder._readPixels(bufferArray.subarray(dataPosition), width, height);
|
|
6166
|
+
var faces = HDRDecoder._faces;
|
|
6167
|
+
var faceBuffer = new Uint16Array(cubeSize * cubeSize * 4);
|
|
6168
|
+
for(var faceIndex = 0; faceIndex < 6; faceIndex++){
|
|
6169
|
+
HDRDecoder._createCubemapData(cubeSize, faces[faceIndex], pixels, width, height, faceBuffer);
|
|
6170
|
+
onFace(faceIndex, faceBuffer);
|
|
6171
|
+
}
|
|
6172
|
+
};
|
|
6173
|
+
HDRDecoder._generateFloat2HalfTables = function _generateFloat2HalfTables() {
|
|
6174
|
+
var baseTable = new Uint32Array(512);
|
|
6175
|
+
var shiftTable = new Uint32Array(512);
|
|
6176
|
+
for(var i = 0; i < 256; ++i){
|
|
6177
|
+
var e = i - 127;
|
|
6178
|
+
if (e < -27) {
|
|
6179
|
+
baseTable[i] = 0x0000;
|
|
6180
|
+
baseTable[i | 0x100] = 0x8000;
|
|
6181
|
+
shiftTable[i] = 24;
|
|
6182
|
+
shiftTable[i | 0x100] = 24;
|
|
6183
|
+
} else if (e < -14) {
|
|
6184
|
+
baseTable[i] = 0x0400 >> -e - 14;
|
|
6185
|
+
baseTable[i | 0x100] = 0x0400 >> -e - 14 | 0x8000;
|
|
6186
|
+
shiftTable[i] = -e - 1;
|
|
6187
|
+
shiftTable[i | 0x100] = -e - 1;
|
|
6188
|
+
} else if (e <= 15) {
|
|
6189
|
+
baseTable[i] = e + 15 << 10;
|
|
6190
|
+
baseTable[i | 0x100] = e + 15 << 10 | 0x8000;
|
|
6191
|
+
shiftTable[i] = 13;
|
|
6192
|
+
shiftTable[i | 0x100] = 13;
|
|
6193
|
+
} else if (e < 128) {
|
|
6194
|
+
baseTable[i] = 0x7c00;
|
|
6195
|
+
baseTable[i | 0x100] = 0xfc00;
|
|
6196
|
+
shiftTable[i] = 24;
|
|
6197
|
+
shiftTable[i | 0x100] = 24;
|
|
6198
|
+
} else {
|
|
6199
|
+
baseTable[i] = 0x7c00;
|
|
6200
|
+
baseTable[i | 0x100] = 0xfc00;
|
|
6201
|
+
shiftTable[i] = 13;
|
|
6202
|
+
shiftTable[i | 0x100] = 13;
|
|
6203
|
+
}
|
|
6204
|
+
}
|
|
6205
|
+
return {
|
|
6206
|
+
baseTable: baseTable,
|
|
6207
|
+
shiftTable: shiftTable
|
|
6208
|
+
};
|
|
6209
|
+
};
|
|
6210
|
+
HDRDecoder._createCubemapData = function _createCubemapData(texSize, face, pixels, inputWidth, inputHeight, facePixels) {
|
|
6211
|
+
var invSize = 1 / texSize;
|
|
6212
|
+
var rotDX1X = (face[3] - face[0]) * invSize;
|
|
6213
|
+
var rotDX1Y = (face[4] - face[1]) * invSize;
|
|
6214
|
+
var rotDX1Z = (face[5] - face[2]) * invSize;
|
|
6215
|
+
var rotDX2X = (face[9] - face[6]) * invSize;
|
|
6216
|
+
var rotDX2Y = (face[10] - face[7]) * invSize;
|
|
6217
|
+
var rotDX2Z = (face[11] - face[8]) * invSize;
|
|
6218
|
+
var floatView = HDRDecoder._floatView;
|
|
6219
|
+
var uint32View = HDRDecoder._uint32View;
|
|
6220
|
+
var _HDRDecoder__float2HalfTables = HDRDecoder._float2HalfTables, baseTable = _HDRDecoder__float2HalfTables.baseTable, shiftTable = _HDRDecoder__float2HalfTables.shiftTable;
|
|
6221
|
+
var one = HDRDecoder._one;
|
|
6222
|
+
var fy = 0;
|
|
6223
|
+
for(var y = 0; y < texSize; y++){
|
|
6224
|
+
var xv1X = face[0], xv1Y = face[1], xv1Z = face[2];
|
|
6225
|
+
var xv2X = face[6], xv2Y = face[7], xv2Z = face[8];
|
|
6226
|
+
for(var x = 0; x < texSize; x++){
|
|
6227
|
+
var dirX = xv1X + (xv2X - xv1X) * fy;
|
|
6228
|
+
var dirY = xv1Y + (xv2Y - xv1Y) * fy;
|
|
6229
|
+
var dirZ = xv1Z + (xv2Z - xv1Z) * fy;
|
|
6230
|
+
var invLen = 1 / Math.sqrt(dirX * dirX + dirY * dirY + dirZ * dirZ);
|
|
6231
|
+
dirX *= invLen;
|
|
6232
|
+
dirY *= invLen;
|
|
6233
|
+
dirZ *= invLen;
|
|
6234
|
+
var px = Math.round((Math.atan2(dirZ, dirX) / Math.PI * 0.5 + 0.5) * inputWidth);
|
|
6235
|
+
if (px < 0) px = 0;
|
|
6236
|
+
else if (px >= inputWidth) px = inputWidth - 1;
|
|
6237
|
+
var py = Math.round(Math.acos(dirY) / Math.PI * inputHeight);
|
|
6238
|
+
if (py < 0) py = 0;
|
|
6239
|
+
else if (py >= inputHeight) py = inputHeight - 1;
|
|
6240
|
+
var srcIndex = (inputHeight - py - 1) * inputWidth * 4 + px * 4;
|
|
6241
|
+
var scaleFactor = Math.pow(2, pixels[srcIndex + 3] - 128) / 255;
|
|
6242
|
+
var dstIndex = y * texSize * 4 + x * 4;
|
|
6243
|
+
for(var c = 0; c < 3; c++){
|
|
6244
|
+
// Clamp to half-float max (65504) to prevent Infinity in R16G16B16A16
|
|
6245
|
+
floatView[0] = Math.min(pixels[srcIndex + c] * scaleFactor, 65504);
|
|
6246
|
+
var f = uint32View[0];
|
|
6247
|
+
var e = f >> 23 & 0x1ff;
|
|
6248
|
+
facePixels[dstIndex + c] = baseTable[e] + ((f & 0x007fffff) >> shiftTable[e]);
|
|
6249
|
+
}
|
|
6250
|
+
facePixels[dstIndex + 3] = one;
|
|
6251
|
+
xv1X += rotDX1X;
|
|
6252
|
+
xv1Y += rotDX1Y;
|
|
6253
|
+
xv1Z += rotDX1Z;
|
|
6254
|
+
xv2X += rotDX2X;
|
|
6255
|
+
xv2Y += rotDX2Y;
|
|
6256
|
+
xv2Z += rotDX2Z;
|
|
6257
|
+
}
|
|
6258
|
+
fy += invSize;
|
|
6259
|
+
}
|
|
6260
|
+
};
|
|
6261
|
+
HDRDecoder._readStringLine = function _readStringLine(uint8array, startIndex) {
|
|
6262
|
+
var line = "";
|
|
6263
|
+
for(var i = startIndex, n = uint8array.length; i < n; i++){
|
|
6264
|
+
var character = String.fromCharCode(uint8array[i]);
|
|
6265
|
+
if (character === "\n") break;
|
|
6266
|
+
line += character;
|
|
6267
|
+
}
|
|
6268
|
+
return line;
|
|
6269
|
+
};
|
|
6270
|
+
HDRDecoder._readPixels = function _readPixels(buffer, width, height) {
|
|
6271
|
+
var byteLength = buffer.byteLength;
|
|
6272
|
+
var dataRGBA = new Uint8Array(4 * width * height);
|
|
6273
|
+
var offset = 0;
|
|
6274
|
+
var pos = 0;
|
|
6275
|
+
var ptrEnd = 4 * width;
|
|
6276
|
+
var scanLineBuffer = new Uint8Array(ptrEnd);
|
|
6277
|
+
var numScanLines = height;
|
|
6278
|
+
while(numScanLines > 0 && pos < byteLength){
|
|
6279
|
+
var a = buffer[pos++];
|
|
6280
|
+
var b = buffer[pos++];
|
|
6281
|
+
var c = buffer[pos++];
|
|
6282
|
+
var d = buffer[pos++];
|
|
6283
|
+
if (a !== 2 || b !== 2 || c & 0x80 || width < 8 || width > 32767) return buffer;
|
|
6284
|
+
if ((c << 8 | d) !== width) throw "HDRDecoder: wrong scanline width";
|
|
6285
|
+
var ptr = 0;
|
|
6286
|
+
while(ptr < ptrEnd && pos < byteLength){
|
|
6287
|
+
var count = buffer[pos++];
|
|
6288
|
+
var isEncodedRun = count > 128;
|
|
6289
|
+
if (isEncodedRun) count -= 128;
|
|
6290
|
+
if (count === 0 || ptr + count > ptrEnd) throw "HDRDecoder: bad scanline data";
|
|
6291
|
+
if (isEncodedRun) {
|
|
6292
|
+
var byteValue = buffer[pos++];
|
|
6293
|
+
for(var i = 0; i < count; i++)scanLineBuffer[ptr++] = byteValue;
|
|
6294
|
+
} else {
|
|
6295
|
+
scanLineBuffer.set(buffer.subarray(pos, pos + count), ptr);
|
|
6296
|
+
ptr += count;
|
|
6297
|
+
pos += count;
|
|
6298
|
+
}
|
|
6299
|
+
}
|
|
6300
|
+
for(var i1 = 0; i1 < width; i1++, offset += 4){
|
|
6301
|
+
dataRGBA[offset] = scanLineBuffer[i1];
|
|
6302
|
+
dataRGBA[offset + 1] = scanLineBuffer[i1 + width];
|
|
6303
|
+
dataRGBA[offset + 2] = scanLineBuffer[i1 + width * 2];
|
|
6304
|
+
dataRGBA[offset + 3] = scanLineBuffer[i1 + width * 3];
|
|
6305
|
+
}
|
|
6306
|
+
numScanLines--;
|
|
6307
|
+
}
|
|
6308
|
+
return dataRGBA;
|
|
6309
|
+
};
|
|
6310
|
+
return HDRDecoder;
|
|
6311
|
+
}();
|
|
6312
|
+
// Float32 to Float16 lookup tables (http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf)
|
|
6313
|
+
HDRDecoder._float2HalfTables = HDRDecoder._generateFloat2HalfTables();
|
|
6314
|
+
HDRDecoder._floatView = new Float32Array(1);
|
|
6315
|
+
HDRDecoder._uint32View = new Uint32Array(HDRDecoder._floatView.buffer);
|
|
6316
|
+
HDRDecoder._one = 0x3c00 // Half float for 1.0
|
|
6317
|
+
;
|
|
6318
|
+
// prettier-ignore
|
|
6319
|
+
HDRDecoder._faces = [
|
|
6320
|
+
/* +X */ [
|
|
6321
|
+
1,
|
|
6322
|
+
-1,
|
|
6323
|
+
-1,
|
|
6324
|
+
1,
|
|
6325
|
+
-1,
|
|
6326
|
+
1,
|
|
6327
|
+
1,
|
|
6328
|
+
1,
|
|
6329
|
+
-1,
|
|
6330
|
+
1,
|
|
6331
|
+
1,
|
|
6332
|
+
1
|
|
6333
|
+
],
|
|
6334
|
+
/* -X */ [
|
|
6335
|
+
-1,
|
|
6336
|
+
-1,
|
|
6337
|
+
1,
|
|
6338
|
+
-1,
|
|
6339
|
+
-1,
|
|
6340
|
+
-1,
|
|
6341
|
+
-1,
|
|
6342
|
+
1,
|
|
6343
|
+
1,
|
|
6344
|
+
-1,
|
|
6345
|
+
1,
|
|
6346
|
+
-1
|
|
6347
|
+
],
|
|
6348
|
+
/* +Y */ [
|
|
6349
|
+
-1,
|
|
6350
|
+
-1,
|
|
6351
|
+
1,
|
|
6352
|
+
1,
|
|
6353
|
+
-1,
|
|
6354
|
+
1,
|
|
6355
|
+
-1,
|
|
6356
|
+
-1,
|
|
6357
|
+
-1,
|
|
6358
|
+
1,
|
|
6359
|
+
-1,
|
|
6360
|
+
-1
|
|
6361
|
+
],
|
|
6362
|
+
/* -Y */ [
|
|
6363
|
+
-1,
|
|
6364
|
+
1,
|
|
6365
|
+
-1,
|
|
6366
|
+
1,
|
|
6367
|
+
1,
|
|
6368
|
+
-1,
|
|
6369
|
+
-1,
|
|
6370
|
+
1,
|
|
6371
|
+
1,
|
|
6372
|
+
1,
|
|
6373
|
+
1,
|
|
6374
|
+
1
|
|
6375
|
+
],
|
|
6376
|
+
/* +Z */ [
|
|
6377
|
+
-1,
|
|
6378
|
+
-1,
|
|
6379
|
+
-1,
|
|
6380
|
+
1,
|
|
6381
|
+
-1,
|
|
6382
|
+
-1,
|
|
6383
|
+
-1,
|
|
6384
|
+
1,
|
|
6385
|
+
-1,
|
|
6386
|
+
1,
|
|
6387
|
+
1,
|
|
6388
|
+
-1
|
|
6389
|
+
],
|
|
6390
|
+
/* -Z */ [
|
|
6391
|
+
1,
|
|
6392
|
+
-1,
|
|
6393
|
+
1,
|
|
6394
|
+
-1,
|
|
6395
|
+
-1,
|
|
6396
|
+
1,
|
|
6397
|
+
1,
|
|
6398
|
+
1,
|
|
6399
|
+
1,
|
|
6400
|
+
-1,
|
|
6401
|
+
1,
|
|
6402
|
+
1
|
|
6403
|
+
]
|
|
6404
|
+
];
|
|
6405
|
+
|
|
6470
6406
|
var TextureCubeLoader = /*#__PURE__*/ function(Loader) {
|
|
6471
6407
|
_inherits(TextureCubeLoader, Loader);
|
|
6472
6408
|
function TextureCubeLoader() {
|
|
@@ -6474,6 +6410,44 @@ var TextureCubeLoader = /*#__PURE__*/ function(Loader) {
|
|
|
6474
6410
|
}
|
|
6475
6411
|
var _proto = TextureCubeLoader.prototype;
|
|
6476
6412
|
_proto.load = function load(item, resourceManager) {
|
|
6413
|
+
if (item.urls) {
|
|
6414
|
+
return this._loadCubeFaces(item, resourceManager);
|
|
6415
|
+
} else {
|
|
6416
|
+
return this._loadHDR(item, resourceManager);
|
|
6417
|
+
}
|
|
6418
|
+
};
|
|
6419
|
+
_proto._loadHDR = function _loadHDR(item, resourceManager) {
|
|
6420
|
+
return new engineCore.AssetPromise(function(resolve, reject) {
|
|
6421
|
+
var engine = resourceManager.engine;
|
|
6422
|
+
var url = item.url;
|
|
6423
|
+
var requestConfig = _extends({}, item, {
|
|
6424
|
+
type: "arraybuffer"
|
|
6425
|
+
});
|
|
6426
|
+
resourceManager// @ts-ignore
|
|
6427
|
+
._request(url, requestConfig).then(function(buffer) {
|
|
6428
|
+
if (!engineCore.SystemInfo.supportsTextureFormat(engine, engineCore.TextureFormat.R16G16B16A16)) {
|
|
6429
|
+
reject(new Error("TextureCubeLoader: HDR texture requires half float support."));
|
|
6430
|
+
return;
|
|
6431
|
+
}
|
|
6432
|
+
var _item_params;
|
|
6433
|
+
var _ref = (_item_params = item.params) != null ? _item_params : {}, _ref_mipmap = _ref.mipmap, mipmap = _ref_mipmap === void 0 ? true : _ref_mipmap, anisoLevel = _ref.anisoLevel, wrapModeU = _ref.wrapModeU, wrapModeV = _ref.wrapModeV, filterMode = _ref.filterMode;
|
|
6434
|
+
var bufferArray = new Uint8Array(buffer);
|
|
6435
|
+
var header = HDRDecoder.parseHeader(bufferArray);
|
|
6436
|
+
var texture = new engineCore.TextureCube(engine, header.height >> 1, engineCore.TextureFormat.R16G16B16A16, mipmap, false);
|
|
6437
|
+
HDRDecoder.decodeFaces(bufferArray, header, function(faceIndex, data) {
|
|
6438
|
+
texture.setPixelBuffer(engineCore.TextureCubeFace.PositiveX + faceIndex, data, 0);
|
|
6439
|
+
});
|
|
6440
|
+
texture.generateMipmaps();
|
|
6441
|
+
texture.anisoLevel = anisoLevel != null ? anisoLevel : texture.anisoLevel;
|
|
6442
|
+
texture.filterMode = filterMode != null ? filterMode : texture.filterMode;
|
|
6443
|
+
texture.wrapModeU = wrapModeU != null ? wrapModeU : texture.wrapModeU;
|
|
6444
|
+
texture.wrapModeV = wrapModeV != null ? wrapModeV : texture.wrapModeV;
|
|
6445
|
+
resourceManager.addContentRestorer(new HDRContentRestorer(texture, url, requestConfig));
|
|
6446
|
+
resolve(texture);
|
|
6447
|
+
}).catch(reject);
|
|
6448
|
+
});
|
|
6449
|
+
};
|
|
6450
|
+
_proto._loadCubeFaces = function _loadCubeFaces(item, resourceManager) {
|
|
6477
6451
|
return new engineCore.AssetPromise(function(resolve, reject) {
|
|
6478
6452
|
var urls = item.urls;
|
|
6479
6453
|
var requestConfig = _extends({}, item, {
|
|
@@ -6487,7 +6461,7 @@ var TextureCubeLoader = /*#__PURE__*/ function(Loader) {
|
|
|
6487
6461
|
var _ref = (_item_params = item.params) != null ? _item_params : {}, _ref_format = _ref.format, format = _ref_format === void 0 ? engineCore.TextureFormat.R8G8B8A8 : _ref_format, anisoLevel = _ref.anisoLevel, wrapModeU = _ref.wrapModeU, wrapModeV = _ref.wrapModeV, filterMode = _ref.filterMode, _ref_isSRGBColorSpace = _ref.isSRGBColorSpace, isSRGBColorSpace = _ref_isSRGBColorSpace === void 0 ? true : _ref_isSRGBColorSpace, _ref_mipmap = _ref.mipmap, mipmap = _ref_mipmap === void 0 ? true : _ref_mipmap;
|
|
6488
6462
|
var _images_ = images[0], width = _images_.width, height = _images_.height;
|
|
6489
6463
|
if (width !== height) {
|
|
6490
|
-
|
|
6464
|
+
reject(new Error("The cube texture must have the same width and height"));
|
|
6491
6465
|
return;
|
|
6492
6466
|
}
|
|
6493
6467
|
var engine = resourceManager.engine;
|
|
@@ -6500,21 +6474,70 @@ var TextureCubeLoader = /*#__PURE__*/ function(Loader) {
|
|
|
6500
6474
|
for(var faceIndex = 0; faceIndex < 6; faceIndex++){
|
|
6501
6475
|
texture.setImageSource(engineCore.TextureCubeFace.PositiveX + faceIndex, images[faceIndex], 0);
|
|
6502
6476
|
}
|
|
6503
|
-
|
|
6504
|
-
resourceManager.addContentRestorer(new
|
|
6477
|
+
texture.generateMipmaps();
|
|
6478
|
+
resourceManager.addContentRestorer(new CubeFaceContentRestorer(texture, urls, requestConfig));
|
|
6505
6479
|
resolve(texture);
|
|
6506
|
-
}).catch(
|
|
6507
|
-
reject(e);
|
|
6508
|
-
});
|
|
6480
|
+
}).catch(reject);
|
|
6509
6481
|
});
|
|
6510
6482
|
};
|
|
6511
6483
|
return TextureCubeLoader;
|
|
6512
6484
|
}(engineCore.Loader);
|
|
6513
6485
|
TextureCubeLoader = __decorate([
|
|
6514
6486
|
engineCore.resourceLoader(engineCore.AssetType.TextureCube, [
|
|
6515
|
-
""
|
|
6487
|
+
"texCube",
|
|
6488
|
+
"hdr"
|
|
6516
6489
|
])
|
|
6517
6490
|
], TextureCubeLoader);
|
|
6491
|
+
var HDRContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
|
|
6492
|
+
_inherits(HDRContentRestorer, ContentRestorer);
|
|
6493
|
+
function HDRContentRestorer(resource, url, requestConfig) {
|
|
6494
|
+
var _this;
|
|
6495
|
+
_this = ContentRestorer.call(this, resource) || this, _this.url = url, _this.requestConfig = requestConfig;
|
|
6496
|
+
return _this;
|
|
6497
|
+
}
|
|
6498
|
+
var _proto = HDRContentRestorer.prototype;
|
|
6499
|
+
_proto.restoreContent = function restoreContent() {
|
|
6500
|
+
var _this = this;
|
|
6501
|
+
return new engineCore.AssetPromise(function(resolve, reject) {
|
|
6502
|
+
var resource = _this.resource;
|
|
6503
|
+
resource.engine.resourceManager// @ts-ignore
|
|
6504
|
+
._request(_this.url, _this.requestConfig).then(function(buffer) {
|
|
6505
|
+
var bufferArray = new Uint8Array(buffer);
|
|
6506
|
+
HDRDecoder.decodeFaces(bufferArray, HDRDecoder.parseHeader(bufferArray), function(faceIndex, data) {
|
|
6507
|
+
resource.setPixelBuffer(engineCore.TextureCubeFace.PositiveX + faceIndex, data, 0);
|
|
6508
|
+
});
|
|
6509
|
+
resource.generateMipmaps();
|
|
6510
|
+
resolve(resource);
|
|
6511
|
+
}).catch(reject);
|
|
6512
|
+
});
|
|
6513
|
+
};
|
|
6514
|
+
return HDRContentRestorer;
|
|
6515
|
+
}(engineCore.ContentRestorer);
|
|
6516
|
+
var CubeFaceContentRestorer = /*#__PURE__*/ function(ContentRestorer) {
|
|
6517
|
+
_inherits(CubeFaceContentRestorer, ContentRestorer);
|
|
6518
|
+
function CubeFaceContentRestorer(resource, urls, requestConfig) {
|
|
6519
|
+
var _this;
|
|
6520
|
+
_this = ContentRestorer.call(this, resource) || this, _this.urls = urls, _this.requestConfig = requestConfig;
|
|
6521
|
+
return _this;
|
|
6522
|
+
}
|
|
6523
|
+
var _proto = CubeFaceContentRestorer.prototype;
|
|
6524
|
+
_proto.restoreContent = function restoreContent() {
|
|
6525
|
+
var _this = this;
|
|
6526
|
+
return new engineCore.AssetPromise(function(resolve, reject) {
|
|
6527
|
+
Promise.all(_this.urls.map(function(url) {
|
|
6528
|
+
return engineCore.request(url, _this.requestConfig);
|
|
6529
|
+
})).then(function(images) {
|
|
6530
|
+
var resource = _this.resource;
|
|
6531
|
+
for(var faceIndex = 0; faceIndex < 6; faceIndex++){
|
|
6532
|
+
resource.setImageSource(engineCore.TextureCubeFace.PositiveX + faceIndex, images[faceIndex], 0);
|
|
6533
|
+
}
|
|
6534
|
+
resource.generateMipmaps();
|
|
6535
|
+
resolve(resource);
|
|
6536
|
+
}).catch(reject);
|
|
6537
|
+
});
|
|
6538
|
+
};
|
|
6539
|
+
return CubeFaceContentRestorer;
|
|
6540
|
+
}(engineCore.ContentRestorer);
|
|
6518
6541
|
|
|
6519
6542
|
var AudioLoader = /*#__PURE__*/ function(Loader) {
|
|
6520
6543
|
_inherits(AudioLoader, Loader);
|
|
@@ -6587,6 +6610,7 @@ var ShaderChunkLoader = /*#__PURE__*/ function(Loader) {
|
|
|
6587
6610
|
}
|
|
6588
6611
|
}
|
|
6589
6612
|
return Promise.all(shaderChunkPaths.map(function(chunkPath) {
|
|
6613
|
+
// @ts-ignore
|
|
6590
6614
|
return resourceManager.load({
|
|
6591
6615
|
type: "ShaderChunk",
|
|
6592
6616
|
url: chunkPath
|
|
@@ -6663,7 +6687,7 @@ var PhysicsMaterialLoader = /*#__PURE__*/ function(Loader) {
|
|
|
6663
6687
|
}(engineCore.Loader);
|
|
6664
6688
|
PhysicsMaterialLoader = __decorate([
|
|
6665
6689
|
engineCore.resourceLoader(engineCore.AssetType.PhysicsMaterial, [
|
|
6666
|
-
"
|
|
6690
|
+
"physMat"
|
|
6667
6691
|
])
|
|
6668
6692
|
], PhysicsMaterialLoader);
|
|
6669
6693
|
|
|
@@ -6698,7 +6722,6 @@ var SceneLoader = /*#__PURE__*/ function(Loader) {
|
|
|
6698
6722
|
scene.ambientLight.specularIntensity = ambient.specularIntensity;
|
|
6699
6723
|
scene.ambientLight.diffuseMode = ambient.diffuseMode;
|
|
6700
6724
|
scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
|
|
6701
|
-
scene.ambientLight.specularTextureDecodeRGBM = true;
|
|
6702
6725
|
if (useCustomAmbient && ambient.customAmbientLight) {
|
|
6703
6726
|
promises.push(// @ts-ignore
|
|
6704
6727
|
resourceManager.getResourceByRef(ambient.customAmbientLight).then(function(ambientLight) {
|
|
@@ -7346,6 +7369,7 @@ exports.GLTFParserContext = GLTFParserContext;
|
|
|
7346
7369
|
exports.GLTFParserType = GLTFParserType;
|
|
7347
7370
|
exports.GLTFResource = GLTFResource;
|
|
7348
7371
|
exports.GLTFUtils = GLTFUtils;
|
|
7372
|
+
exports.HDRDecoder = HDRDecoder;
|
|
7349
7373
|
exports.HierarchyParser = HierarchyParser;
|
|
7350
7374
|
exports.InterpolableValueType = InterpolableValueType;
|
|
7351
7375
|
exports.KTX2TargetFormat = KTX2TargetFormat;
|