|
@@ -1,3 +1,4 @@
|
|
|
+"use strict";
|
|
|
/// <reference path="../../../dist/preview release/babylon.d.ts"/>
|
|
|
var BABYLON;
|
|
|
(function (BABYLON) {
|
|
@@ -475,6 +476,7 @@ var BABYLON;
|
|
|
|
|
|
//# sourceMappingURL=babylon.glTFFileLoader.js.map
|
|
|
|
|
|
+"use strict";
|
|
|
/// <reference path="../../../../dist/preview release/babylon.d.ts"/>
|
|
|
var BABYLON;
|
|
|
(function (BABYLON) {
|
|
@@ -572,6 +574,7 @@ var BABYLON;
|
|
|
|
|
|
//# sourceMappingURL=babylon.glTFLoaderInterfaces.js.map
|
|
|
|
|
|
+"use strict";
|
|
|
/// <reference path="../../../../dist/preview release/babylon.d.ts"/>
|
|
|
var BABYLON;
|
|
|
(function (BABYLON) {
|
|
@@ -590,6 +593,9 @@ var BABYLON;
|
|
|
var Tokenizer = /** @class */ (function () {
|
|
|
function Tokenizer(toParse) {
|
|
|
this._pos = 0;
|
|
|
+ this.currentToken = ETokenType.UNKNOWN;
|
|
|
+ this.currentIdentifier = "";
|
|
|
+ this.currentString = "";
|
|
|
this.isLetterOrDigitPattern = /^[a-zA-Z0-9]+$/;
|
|
|
this._toParse = toParse;
|
|
|
this._maxPos = toParse.length;
|
|
@@ -1702,11 +1708,13 @@ var BABYLON;
|
|
|
var shader = gltfRuntime.shaders[id];
|
|
|
if (BABYLON.Tools.IsBase64(shader.uri)) {
|
|
|
var shaderString = atob(shader.uri.split(",")[1]);
|
|
|
- onSuccess(shaderString);
|
|
|
+ if (onSuccess) {
|
|
|
+ onSuccess(shaderString);
|
|
|
+ }
|
|
|
}
|
|
|
else {
|
|
|
BABYLON.Tools.LoadFile(gltfRuntime.rootUrl + shader.uri, onSuccess, undefined, undefined, false, function (request) {
|
|
|
- if (request) {
|
|
|
+ if (request && onError) {
|
|
|
onError(request.status + " " + request.statusText);
|
|
|
}
|
|
|
});
|
|
@@ -1980,6 +1988,9 @@ var BABYLON;
|
|
|
var hasShaders = false;
|
|
|
var processShader = function (sha, shader) {
|
|
|
GLTF1.GLTFLoaderExtension.LoadShaderStringAsync(gltfRuntime, sha, function (shaderString) {
|
|
|
+ if (shaderString instanceof ArrayBuffer) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
gltfRuntime.loadedShaderCount++;
|
|
|
if (shaderString) {
|
|
|
BABYLON.Effect.ShadersStore[sha + (shader.type === GLTF1.EShaderType.VERTEX ? "VertexShader" : "PixelShader")] = shaderString;
|
|
@@ -2067,6 +2078,7 @@ var BABYLON;
|
|
|
|
|
|
//# sourceMappingURL=babylon.glTFLoader.js.map
|
|
|
|
|
|
+"use strict";
|
|
|
/// <reference path="../../../../dist/preview release/babylon.d.ts"/>
|
|
|
var BABYLON;
|
|
|
(function (BABYLON) {
|
|
@@ -2302,6 +2314,7 @@ var BABYLON;
|
|
|
|
|
|
//# sourceMappingURL=babylon.glTFLoaderUtils.js.map
|
|
|
|
|
|
+"use strict";
|
|
|
/// <reference path="../../../../dist/preview release/babylon.d.ts"/>
|
|
|
var BABYLON;
|
|
|
(function (BABYLON) {
|
|
@@ -2375,6 +2388,9 @@ var BABYLON;
|
|
|
return loaderExtension.loadRuntimeAsync(scene, data, rootUrl, onSuccess, onError);
|
|
|
}, function () {
|
|
|
setTimeout(function () {
|
|
|
+ if (!onSuccess) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
onSuccess(GLTF1.GLTFLoaderBase.CreateRuntime(data.json, scene, rootUrl));
|
|
|
});
|
|
|
});
|
|
@@ -2396,7 +2412,11 @@ var BABYLON;
|
|
|
});
|
|
|
};
|
|
|
GLTFLoaderExtension.LoadTextureAsync = function (gltfRuntime, id, onSuccess, onError) {
|
|
|
- GLTFLoaderExtension.LoadTextureBufferAsync(gltfRuntime, id, function (buffer) { return GLTFLoaderExtension.CreateTextureAsync(gltfRuntime, id, buffer, onSuccess, onError); }, onError);
|
|
|
+ GLTFLoaderExtension.LoadTextureBufferAsync(gltfRuntime, id, function (buffer) {
|
|
|
+ if (buffer) {
|
|
|
+ GLTFLoaderExtension.CreateTextureAsync(gltfRuntime, id, buffer, onSuccess, onError);
|
|
|
+ }
|
|
|
+ }, onError);
|
|
|
};
|
|
|
GLTFLoaderExtension.LoadShaderStringAsync = function (gltfRuntime, id, onSuccess, onError) {
|
|
|
GLTFLoaderExtension.ApplyExtensions(function (loaderExtension) {
|
|
@@ -2443,6 +2463,7 @@ var BABYLON;
|
|
|
|
|
|
//# sourceMappingURL=babylon.glTFLoaderExtension.js.map
|
|
|
|
|
|
+"use strict";
|
|
|
/// <reference path="../../../../dist/preview release/babylon.d.ts"/>
|
|
|
var __extends = (this && this.__extends) || (function () {
|
|
|
var extendStatics = Object.setPrototypeOf ||
|
|
@@ -2520,6 +2541,7 @@ var BABYLON;
|
|
|
|
|
|
//# sourceMappingURL=babylon.glTFBinaryExtension.js.map
|
|
|
|
|
|
+"use strict";
|
|
|
/// <reference path="../../../../dist/preview release/babylon.d.ts"/>
|
|
|
var __extends = (this && this.__extends) || (function () {
|
|
|
var extendStatics = Object.setPrototypeOf ||
|
|
@@ -2652,6 +2674,7 @@ var BABYLON;
|
|
|
|
|
|
//# sourceMappingURL=babylon.glTFMaterialsCommonExtension.js.map
|
|
|
|
|
|
+"use strict";
|
|
|
/// <reference path="../../../../dist/preview release/babylon.d.ts"/>
|
|
|
var BABYLON;
|
|
|
(function (BABYLON) {
|
|
@@ -2675,11 +2698,13 @@ var BABYLON;
|
|
|
|
|
|
//# sourceMappingURL=babylon.glTFLoaderUtilities.js.map
|
|
|
|
|
|
+"use strict";
|
|
|
/// <reference path="../../../../dist/preview release/babylon.d.ts"/>
|
|
|
/// <reference path="../../../../dist/babylon.glTF2Interface.d.ts"/>
|
|
|
|
|
|
//# sourceMappingURL=babylon.glTFLoaderInterfaces.js.map
|
|
|
|
|
|
+"use strict";
|
|
|
/// <reference path="../../../../dist/preview release/babylon.d.ts"/>
|
|
|
var BABYLON;
|
|
|
(function (BABYLON) {
|
|
@@ -2692,6 +2717,7 @@ var BABYLON;
|
|
|
this._state = null;
|
|
|
this._extensions = {};
|
|
|
this._defaultSampler = {};
|
|
|
+ this._defaultBabylonMaterials = {};
|
|
|
this._requests = new Array();
|
|
|
this.coordinateSystemMode = BABYLON.GLTFLoaderCoordinateSystemMode.AUTO;
|
|
|
this.animationStartMode = BABYLON.GLTFLoaderAnimationStartMode.FIRST;
|
|
@@ -2934,16 +2960,16 @@ var BABYLON;
|
|
|
promises.push(this._loadAnimationsAsync());
|
|
|
return Promise.all(promises).then(function () { });
|
|
|
};
|
|
|
- GLTFLoader.prototype._forEachNodeMesh = function (node, callback) {
|
|
|
- if (node._babylonMesh) {
|
|
|
- callback(node._babylonMesh);
|
|
|
- }
|
|
|
+ GLTFLoader.prototype._forEachPrimitive = function (node, callback) {
|
|
|
if (node._primitiveBabylonMeshes) {
|
|
|
for (var _i = 0, _a = node._primitiveBabylonMeshes; _i < _a.length; _i++) {
|
|
|
var babylonMesh = _a[_i];
|
|
|
callback(babylonMesh);
|
|
|
}
|
|
|
}
|
|
|
+ else {
|
|
|
+ callback(node._babylonMesh);
|
|
|
+ }
|
|
|
};
|
|
|
GLTFLoader.prototype._getMeshes = function () {
|
|
|
var meshes = new Array();
|
|
@@ -2953,9 +2979,15 @@ var BABYLON;
|
|
|
if (nodes) {
|
|
|
for (var _i = 0, nodes_2 = nodes; _i < nodes_2.length; _i++) {
|
|
|
var node = nodes_2[_i];
|
|
|
- this._forEachNodeMesh(node, function (mesh) {
|
|
|
- meshes.push(mesh);
|
|
|
- });
|
|
|
+ if (node._babylonMesh) {
|
|
|
+ meshes.push(node._babylonMesh);
|
|
|
+ }
|
|
|
+ if (node._primitiveBabylonMeshes) {
|
|
|
+ for (var _a = 0, _b = node._primitiveBabylonMeshes; _a < _b.length; _a++) {
|
|
|
+ var babylonMesh = _b[_a];
|
|
|
+ meshes.push(babylonMesh);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
return meshes;
|
|
@@ -3047,7 +3079,7 @@ var BABYLON;
|
|
|
for (var _i = 0, primitives_1 = primitives; _i < primitives_1.length; _i++) {
|
|
|
var primitive = primitives_1[_i];
|
|
|
var primitiveBabylonMesh = new BABYLON.Mesh((mesh.name || babylonMesh.name) + "_" + primitive._index, this._babylonScene, babylonMesh);
|
|
|
- node._primitiveBabylonMeshes.push(babylonMesh);
|
|
|
+ node._primitiveBabylonMeshes.push(primitiveBabylonMesh);
|
|
|
promises.push(this._loadPrimitiveAsync(context + "/primitives/" + primitive._index, node, mesh, primitive, primitiveBabylonMesh));
|
|
|
this.onMeshLoadedObservable.notifyObservers(babylonMesh);
|
|
|
}
|
|
@@ -3057,7 +3089,7 @@ var BABYLON;
|
|
|
promises.push(this._loadSkinAsync("#/skins/" + skin._index, node, mesh, skin));
|
|
|
}
|
|
|
return Promise.all(promises).then(function () {
|
|
|
- _this._forEachNodeMesh(node, function (babylonMesh) {
|
|
|
+ _this._forEachPrimitive(node, function (babylonMesh) {
|
|
|
babylonMesh._refreshBoundingInfo(true);
|
|
|
});
|
|
|
});
|
|
@@ -3070,12 +3102,13 @@ var BABYLON;
|
|
|
new BABYLON.Geometry(babylonMesh.name, _this._babylonScene, babylonVertexData, false, babylonMesh);
|
|
|
return _this._loadMorphTargetsAsync(context, primitive, babylonMesh, babylonVertexData);
|
|
|
}));
|
|
|
+ var babylonDrawMode = GLTFLoader._GetDrawMode(context, primitive.mode);
|
|
|
if (primitive.material == undefined) {
|
|
|
- babylonMesh.material = this._getDefaultMaterial();
|
|
|
+ babylonMesh.material = this._getDefaultMaterial(babylonDrawMode);
|
|
|
}
|
|
|
else {
|
|
|
var material = GLTFLoader._GetProperty(context + "/material}", this._gltf.materials, primitive.material);
|
|
|
- promises.push(this._loadMaterialAsync("#/materials/" + material._index, material, babylonMesh, function (babylonMaterial) {
|
|
|
+ promises.push(this._loadMaterialAsync("#/materials/" + material._index, material, babylonMesh, babylonDrawMode, function (babylonMaterial) {
|
|
|
babylonMesh.material = babylonMaterial;
|
|
|
}));
|
|
|
}
|
|
@@ -3091,10 +3124,6 @@ var BABYLON;
|
|
|
if (!attributes) {
|
|
|
throw new Error(context + ": Attributes are missing");
|
|
|
}
|
|
|
- if (primitive.mode != undefined && primitive.mode !== 4 /* TRIANGLES */) {
|
|
|
- // TODO: handle other primitive modes
|
|
|
- throw new Error(context + ": Mode (" + primitive.mode + ") is not currently supported");
|
|
|
- }
|
|
|
var promises = new Array();
|
|
|
var babylonVertexData = new BABYLON.VertexData();
|
|
|
if (primitive.indices == undefined) {
|
|
@@ -3281,7 +3310,7 @@ var BABYLON;
|
|
|
GLTFLoader.prototype._loadSkinAsync = function (context, node, mesh, skin) {
|
|
|
var _this = this;
|
|
|
var assignSkeleton = function () {
|
|
|
- _this._forEachNodeMesh(node, function (babylonMesh) {
|
|
|
+ _this._forEachPrimitive(node, function (babylonMesh) {
|
|
|
babylonMesh.skeleton = skin._babylonSkeleton;
|
|
|
});
|
|
|
node._babylonMesh.parent = _this._rootBabylonMesh;
|
|
@@ -3478,19 +3507,9 @@ var BABYLON;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
- var keys;
|
|
|
- if (data.input.length === 1) {
|
|
|
- var key = getNextKey(0);
|
|
|
- keys = [
|
|
|
- { frame: key.frame, value: key.value },
|
|
|
- { frame: key.frame + 1, value: key.value }
|
|
|
- ];
|
|
|
- }
|
|
|
- else {
|
|
|
- keys = new Array(data.input.length);
|
|
|
- for (var frameIndex = 0; frameIndex < data.input.length; frameIndex++) {
|
|
|
- keys[frameIndex] = getNextKey(frameIndex);
|
|
|
- }
|
|
|
+ var keys = new Array(data.input.length);
|
|
|
+ for (var frameIndex = 0; frameIndex < data.input.length; frameIndex++) {
|
|
|
+ keys[frameIndex] = getNextKey(frameIndex);
|
|
|
}
|
|
|
if (targetPath === "influence") {
|
|
|
var _loop_1 = function (targetIndex) {
|
|
@@ -3502,7 +3521,7 @@ var BABYLON;
|
|
|
value: key.value[targetIndex],
|
|
|
outTangent: key.outTangent ? key.outTangent[targetIndex] : undefined
|
|
|
}); }));
|
|
|
- _this._forEachNodeMesh(targetNode, function (babylonMesh) {
|
|
|
+ _this._forEachPrimitive(targetNode, function (babylonMesh) {
|
|
|
var morphTarget = babylonMesh.morphTargetManager.getTarget(targetIndex);
|
|
|
babylonAnimationGroup.addTargetedAnimation(babylonAnimation, morphTarget);
|
|
|
});
|
|
@@ -3651,22 +3670,19 @@ var BABYLON;
|
|
|
}
|
|
|
return targetBuffer;
|
|
|
};
|
|
|
- GLTFLoader.prototype._getDefaultMaterial = function () {
|
|
|
- var id = "__gltf_default";
|
|
|
- var babylonMaterial = this._babylonScene.getMaterialByName(id);
|
|
|
+ GLTFLoader.prototype._getDefaultMaterial = function (drawMode) {
|
|
|
+ var babylonMaterial = this._defaultBabylonMaterials[drawMode];
|
|
|
if (!babylonMaterial) {
|
|
|
- babylonMaterial = new BABYLON.PBRMaterial(id, this._babylonScene);
|
|
|
+ babylonMaterial = this._createMaterial(BABYLON.PBRMaterial, "__gltf_default", drawMode);
|
|
|
babylonMaterial.transparencyMode = BABYLON.PBRMaterial.PBRMATERIAL_OPAQUE;
|
|
|
- babylonMaterial.sideOrientation = this._babylonScene.useRightHandedSystem ? BABYLON.Material.CounterClockWiseSideOrientation : BABYLON.Material.ClockWiseSideOrientation;
|
|
|
babylonMaterial.metallic = 1;
|
|
|
babylonMaterial.roughness = 1;
|
|
|
this.onMaterialLoadedObservable.notifyObservers(babylonMaterial);
|
|
|
}
|
|
|
return babylonMaterial;
|
|
|
};
|
|
|
- GLTFLoader.prototype._loadMaterialMetallicRoughnessPropertiesAsync = function (context, material) {
|
|
|
+ GLTFLoader.prototype._loadMaterialMetallicRoughnessPropertiesAsync = function (context, material, babylonMaterial) {
|
|
|
var promises = new Array();
|
|
|
- var babylonMaterial = material._babylonMaterial;
|
|
|
// Ensure metallic workflow
|
|
|
babylonMaterial.metallic = 1;
|
|
|
babylonMaterial.roughness = 1;
|
|
@@ -3695,36 +3711,42 @@ var BABYLON;
|
|
|
babylonMaterial.useRoughnessFromMetallicTextureAlpha = false;
|
|
|
}
|
|
|
}
|
|
|
- this._loadMaterialAlphaProperties(context, material);
|
|
|
+ this._loadMaterialAlphaProperties(context, material, babylonMaterial);
|
|
|
return Promise.all(promises).then(function () { });
|
|
|
};
|
|
|
- GLTFLoader.prototype._loadMaterialAsync = function (context, material, babylonMesh, assign) {
|
|
|
- var promise = GLTF2.GLTFLoaderExtension._LoadMaterialAsync(this, context, material, babylonMesh, assign);
|
|
|
+ GLTFLoader.prototype._loadMaterialAsync = function (context, material, babylonMesh, babylonDrawMode, assign) {
|
|
|
+ var promise = GLTF2.GLTFLoaderExtension._LoadMaterialAsync(this, context, material, babylonMesh, babylonDrawMode, assign);
|
|
|
if (promise) {
|
|
|
return promise;
|
|
|
}
|
|
|
- material._babylonMeshes = material._babylonMeshes || [];
|
|
|
- material._babylonMeshes.push(babylonMesh);
|
|
|
- if (!material._loaded) {
|
|
|
+ material._babylonData = material._babylonData || {};
|
|
|
+ var babylonData = material._babylonData[babylonDrawMode];
|
|
|
+ if (!babylonData) {
|
|
|
var promises = new Array();
|
|
|
- var babylonMaterial = this._createMaterial(material);
|
|
|
- material._babylonMaterial = babylonMaterial;
|
|
|
- promises.push(this._loadMaterialBasePropertiesAsync(context, material));
|
|
|
- promises.push(this._loadMaterialMetallicRoughnessPropertiesAsync(context, material));
|
|
|
+ var name_3 = material.name || "materialSG_" + material._index;
|
|
|
+ var babylonMaterial = this._createMaterial(BABYLON.PBRMaterial, name_3, babylonDrawMode);
|
|
|
+ promises.push(this._loadMaterialBasePropertiesAsync(context, material, babylonMaterial));
|
|
|
+ promises.push(this._loadMaterialMetallicRoughnessPropertiesAsync(context, material, babylonMaterial));
|
|
|
this.onMaterialLoadedObservable.notifyObservers(babylonMaterial);
|
|
|
- material._loaded = Promise.all(promises).then(function () { });
|
|
|
+ babylonData = {
|
|
|
+ material: babylonMaterial,
|
|
|
+ meshes: [],
|
|
|
+ loaded: Promise.all(promises).then(function () { })
|
|
|
+ };
|
|
|
+ material._babylonData[babylonDrawMode] = babylonData;
|
|
|
}
|
|
|
- assign(material._babylonMaterial);
|
|
|
- return material._loaded;
|
|
|
+ babylonData.meshes.push(babylonMesh);
|
|
|
+ assign(babylonData.material);
|
|
|
+ return babylonData.loaded;
|
|
|
};
|
|
|
- GLTFLoader.prototype._createMaterial = function (material) {
|
|
|
- var babylonMaterial = new BABYLON.PBRMaterial(material.name || "material" + material._index, this._babylonScene);
|
|
|
+ GLTFLoader.prototype._createMaterial = function (type, name, drawMode) {
|
|
|
+ var babylonMaterial = new type(name, this._babylonScene);
|
|
|
babylonMaterial.sideOrientation = this._babylonScene.useRightHandedSystem ? BABYLON.Material.CounterClockWiseSideOrientation : BABYLON.Material.ClockWiseSideOrientation;
|
|
|
+ babylonMaterial.fillMode = drawMode;
|
|
|
return babylonMaterial;
|
|
|
};
|
|
|
- GLTFLoader.prototype._loadMaterialBasePropertiesAsync = function (context, material) {
|
|
|
+ GLTFLoader.prototype._loadMaterialBasePropertiesAsync = function (context, material, babylonMaterial) {
|
|
|
var promises = new Array();
|
|
|
- var babylonMaterial = material._babylonMaterial;
|
|
|
babylonMaterial.emissiveColor = material.emissiveFactor ? BABYLON.Color3.FromArray(material.emissiveFactor) : new BABYLON.Color3(0, 0, 0);
|
|
|
if (material.doubleSided) {
|
|
|
babylonMaterial.backFaceCulling = false;
|
|
@@ -3756,8 +3778,7 @@ var BABYLON;
|
|
|
}
|
|
|
return Promise.all(promises).then(function () { });
|
|
|
};
|
|
|
- GLTFLoader.prototype._loadMaterialAlphaProperties = function (context, material) {
|
|
|
- var babylonMaterial = material._babylonMaterial;
|
|
|
+ GLTFLoader.prototype._loadMaterialAlphaProperties = function (context, material, babylonMaterial) {
|
|
|
var alphaMode = material.alphaMode || "OPAQUE" /* OPAQUE */;
|
|
|
switch (alphaMode) {
|
|
|
case "OPAQUE" /* OPAQUE */: {
|
|
@@ -3767,15 +3788,6 @@ var BABYLON;
|
|
|
case "MASK" /* MASK */: {
|
|
|
babylonMaterial.transparencyMode = BABYLON.PBRMaterial.PBRMATERIAL_ALPHATEST;
|
|
|
babylonMaterial.alphaCutOff = (material.alphaCutoff == undefined ? 0.5 : material.alphaCutoff);
|
|
|
- if (babylonMaterial.alpha) {
|
|
|
- if (babylonMaterial.alpha === 0) {
|
|
|
- babylonMaterial.alphaCutOff = 1;
|
|
|
- }
|
|
|
- else {
|
|
|
- babylonMaterial.alphaCutOff /= babylonMaterial.alpha;
|
|
|
- }
|
|
|
- babylonMaterial.alpha = 1;
|
|
|
- }
|
|
|
if (babylonMaterial.albedoTexture) {
|
|
|
babylonMaterial.albedoTexture.hasAlpha = true;
|
|
|
}
|
|
@@ -3977,21 +3989,36 @@ var BABYLON;
|
|
|
GLTFLoader._ValidateUri = function (uri) {
|
|
|
return (BABYLON.Tools.IsBase64(uri) || uri.indexOf("..") === -1);
|
|
|
};
|
|
|
+ GLTFLoader._GetDrawMode = function (context, mode) {
|
|
|
+ mode = mode || 4 /* TRIANGLES */;
|
|
|
+ switch (mode) {
|
|
|
+ case 0 /* POINTS */: return BABYLON.Material.PointListDrawMode;
|
|
|
+ case 1 /* LINES */: return BABYLON.Material.LineListDrawMode;
|
|
|
+ case 2 /* LINE_LOOP */: return BABYLON.Material.LineLoopDrawMode;
|
|
|
+ case 3 /* LINE_STRIP */: return BABYLON.Material.LineStripDrawMode;
|
|
|
+ case 4 /* TRIANGLES */: return BABYLON.Material.TriangleFillMode;
|
|
|
+ case 5 /* TRIANGLE_STRIP */: return BABYLON.Material.TriangleStripDrawMode;
|
|
|
+ case 6 /* TRIANGLE_FAN */: return BABYLON.Material.TriangleFanDrawMode;
|
|
|
+ }
|
|
|
+ throw new Error(context + ": Invalid mesh primitive mode (" + mode + ")");
|
|
|
+ };
|
|
|
GLTFLoader.prototype._compileMaterialsAsync = function () {
|
|
|
var promises = new Array();
|
|
|
if (this._gltf.materials) {
|
|
|
for (var _i = 0, _a = this._gltf.materials; _i < _a.length; _i++) {
|
|
|
var material = _a[_i];
|
|
|
- var babylonMaterial = material._babylonMaterial;
|
|
|
- var babylonMeshes = material._babylonMeshes;
|
|
|
- if (babylonMaterial && babylonMeshes) {
|
|
|
- for (var _b = 0, babylonMeshes_1 = babylonMeshes; _b < babylonMeshes_1.length; _b++) {
|
|
|
- var babylonMesh = babylonMeshes_1[_b];
|
|
|
- // Ensure nonUniformScaling is set if necessary.
|
|
|
- babylonMesh.computeWorldMatrix(true);
|
|
|
- promises.push(babylonMaterial.forceCompilationAsync(babylonMesh));
|
|
|
- if (this.useClipPlane) {
|
|
|
- promises.push(babylonMaterial.forceCompilationAsync(babylonMesh, { clipPlane: true }));
|
|
|
+ if (material._babylonData) {
|
|
|
+ for (var babylonDrawMode in material._babylonData) {
|
|
|
+ var babylonData = material._babylonData[babylonDrawMode];
|
|
|
+ for (var _b = 0, _c = babylonData.meshes; _b < _c.length; _b++) {
|
|
|
+ var babylonMesh = _c[_b];
|
|
|
+ // Ensure nonUniformScaling is set if necessary.
|
|
|
+ babylonMesh.computeWorldMatrix(true);
|
|
|
+ var babylonMaterial = babylonData.material;
|
|
|
+ promises.push(babylonMaterial.forceCompilationAsync(babylonMesh));
|
|
|
+ if (this.useClipPlane) {
|
|
|
+ promises.push(babylonMaterial.forceCompilationAsync(babylonMesh, { clipPlane: true }));
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -4031,8 +4058,8 @@ var BABYLON;
|
|
|
delete this._gltf;
|
|
|
delete this._babylonScene;
|
|
|
this._completePromises.length = 0;
|
|
|
- for (var name_3 in this._extensions) {
|
|
|
- this._extensions[name_3].dispose();
|
|
|
+ for (var name_4 in this._extensions) {
|
|
|
+ this._extensions[name_4].dispose();
|
|
|
}
|
|
|
this._extensions = {};
|
|
|
delete this._rootBabylonMesh;
|
|
@@ -4043,8 +4070,8 @@ var BABYLON;
|
|
|
};
|
|
|
GLTFLoader.prototype._applyExtensions = function (actionAsync) {
|
|
|
for (var _i = 0, _a = GLTFLoader._Names; _i < _a.length; _i++) {
|
|
|
- var name_4 = _a[_i];
|
|
|
- var extension = this._extensions[name_4];
|
|
|
+ var name_5 = _a[_i];
|
|
|
+ var extension = this._extensions[name_5];
|
|
|
if (extension.enabled) {
|
|
|
var promise = actionAsync(extension);
|
|
|
if (promise) {
|
|
@@ -4065,6 +4092,7 @@ var BABYLON;
|
|
|
|
|
|
//# sourceMappingURL=babylon.glTFLoader.js.map
|
|
|
|
|
|
+"use strict";
|
|
|
/// <reference path="../../../../dist/preview release/babylon.d.ts"/>
|
|
|
var BABYLON;
|
|
|
(function (BABYLON) {
|
|
@@ -4086,7 +4114,7 @@ var BABYLON;
|
|
|
/** Override this method to modify the default behavior for loading mesh primitive vertex data. */
|
|
|
GLTFLoaderExtension.prototype._loadVertexDataAsync = function (context, primitive, babylonMesh) { return null; };
|
|
|
/** Override this method to modify the default behavior for loading materials. */
|
|
|
- GLTFLoaderExtension.prototype._loadMaterialAsync = function (context, material, babylonMesh, assign) { return null; };
|
|
|
+ GLTFLoaderExtension.prototype._loadMaterialAsync = function (context, material, babylonMesh, babylonDrawMode, assign) { return null; };
|
|
|
/** Override this method to modify the default behavior for loading uris. */
|
|
|
GLTFLoaderExtension.prototype._loadUriAsync = function (context, uri) { return null; };
|
|
|
// #endregion
|
|
@@ -4123,8 +4151,8 @@ var BABYLON;
|
|
|
return loader._applyExtensions(function (extension) { return extension._loadVertexDataAsync(context, primitive, babylonMesh); });
|
|
|
};
|
|
|
/** Helper method called by the loader to allow extensions to override loading materials. */
|
|
|
- GLTFLoaderExtension._LoadMaterialAsync = function (loader, context, material, babylonMesh, assign) {
|
|
|
- return loader._applyExtensions(function (extension) { return extension._loadMaterialAsync(context, material, babylonMesh, assign); });
|
|
|
+ GLTFLoaderExtension._LoadMaterialAsync = function (loader, context, material, babylonMesh, babylonDrawMode, assign) {
|
|
|
+ return loader._applyExtensions(function (extension) { return extension._loadMaterialAsync(context, material, babylonMesh, babylonDrawMode, assign); });
|
|
|
};
|
|
|
/** Helper method called by the loader to allow extensions to override loading uris. */
|
|
|
GLTFLoaderExtension._LoadUriAsync = function (loader, context, uri) {
|
|
@@ -4138,6 +4166,7 @@ var BABYLON;
|
|
|
|
|
|
//# sourceMappingURL=babylon.glTFLoaderExtension.js.map
|
|
|
|
|
|
+"use strict";
|
|
|
/// <reference path="../../../../../dist/preview release/babylon.d.ts"/>
|
|
|
var __extends = (this && this.__extends) || (function () {
|
|
|
var extendStatics = Object.setPrototypeOf ||
|
|
@@ -4215,7 +4244,7 @@ var BABYLON;
|
|
|
return firstPromise;
|
|
|
});
|
|
|
};
|
|
|
- MSFT_lod.prototype._loadMaterialAsync = function (context, material, babylonMesh, assign) {
|
|
|
+ MSFT_lod.prototype._loadMaterialAsync = function (context, material, babylonMesh, babylonDrawMode, assign) {
|
|
|
var _this = this;
|
|
|
// Don't load material LODs if already loading a node LOD.
|
|
|
if (this._loadingNodeLOD) {
|
|
@@ -4232,13 +4261,14 @@ var BABYLON;
|
|
|
_this._loadMaterialSignals[materialLOD._index] = new BABYLON.Deferred();
|
|
|
}
|
|
|
}
|
|
|
- var promise = _this._loader._loadMaterialAsync("#/materials/" + materialLOD._index, materialLOD, babylonMesh, indexLOD === 0 ? assign : function () { }).then(function () {
|
|
|
+ var promise = _this._loader._loadMaterialAsync("#/materials/" + materialLOD._index, materialLOD, babylonMesh, babylonDrawMode, indexLOD === 0 ? assign : function () { }).then(function () {
|
|
|
if (indexLOD !== 0) {
|
|
|
- assign(materialLOD._babylonMaterial);
|
|
|
- var previousMaterialLOD = materialLODs[indexLOD - 1];
|
|
|
- if (previousMaterialLOD._babylonMaterial) {
|
|
|
- previousMaterialLOD._babylonMaterial.dispose();
|
|
|
- delete previousMaterialLOD._babylonMaterial;
|
|
|
+ var babylonDataLOD = materialLOD._babylonData;
|
|
|
+ assign(babylonDataLOD[babylonDrawMode].material);
|
|
|
+ var previousBabylonDataLOD = materialLODs[indexLOD - 1]._babylonData;
|
|
|
+ if (previousBabylonDataLOD[babylonDrawMode]) {
|
|
|
+ previousBabylonDataLOD[babylonDrawMode].material.dispose();
|
|
|
+ delete previousBabylonDataLOD[babylonDrawMode];
|
|
|
}
|
|
|
}
|
|
|
if (indexLOD !== materialLODs.length - 1) {
|
|
@@ -4307,6 +4337,7 @@ var BABYLON;
|
|
|
|
|
|
//# sourceMappingURL=MSFT_lod.js.map
|
|
|
|
|
|
+"use strict";
|
|
|
/// <reference path="../../../../../dist/preview release/babylon.d.ts"/>
|
|
|
var __extends = (this && this.__extends) || (function () {
|
|
|
var extendStatics = Object.setPrototypeOf ||
|
|
@@ -4401,6 +4432,7 @@ var BABYLON;
|
|
|
|
|
|
//# sourceMappingURL=KHR_draco_mesh_compression.js.map
|
|
|
|
|
|
+"use strict";
|
|
|
/// <reference path="../../../../../dist/preview release/babylon.d.ts"/>
|
|
|
var __extends = (this && this.__extends) || (function () {
|
|
|
var extendStatics = Object.setPrototypeOf ||
|
|
@@ -4427,27 +4459,32 @@ var BABYLON;
|
|
|
_this.name = NAME;
|
|
|
return _this;
|
|
|
}
|
|
|
- KHR_materials_pbrSpecularGlossiness.prototype._loadMaterialAsync = function (context, material, babylonMesh, assign) {
|
|
|
+ KHR_materials_pbrSpecularGlossiness.prototype._loadMaterialAsync = function (context, material, babylonMesh, babylonDrawMode, assign) {
|
|
|
var _this = this;
|
|
|
return this._loadExtensionAsync(context, material, function (context, extension) {
|
|
|
- material._babylonMeshes = material._babylonMeshes || [];
|
|
|
- material._babylonMeshes.push(babylonMesh);
|
|
|
- if (!material._loaded) {
|
|
|
+ material._babylonData = material._babylonData || {};
|
|
|
+ var babylonData = material._babylonData[babylonDrawMode];
|
|
|
+ if (!babylonData) {
|
|
|
var promises = new Array();
|
|
|
- var babylonMaterial = _this._loader._createMaterial(material);
|
|
|
- material._babylonMaterial = babylonMaterial;
|
|
|
- promises.push(_this._loader._loadMaterialBasePropertiesAsync(context, material));
|
|
|
- promises.push(_this._loadSpecularGlossinessPropertiesAsync(context, material, extension));
|
|
|
+ var name_1 = material.name || "materialSG_" + material._index;
|
|
|
+ var babylonMaterial = _this._loader._createMaterial(BABYLON.PBRMaterial, name_1, babylonDrawMode);
|
|
|
+ promises.push(_this._loader._loadMaterialBasePropertiesAsync(context, material, babylonMaterial));
|
|
|
+ promises.push(_this._loadSpecularGlossinessPropertiesAsync(context, material, extension, babylonMaterial));
|
|
|
_this._loader.onMaterialLoadedObservable.notifyObservers(babylonMaterial);
|
|
|
- material._loaded = Promise.all(promises).then(function () { });
|
|
|
+ babylonData = {
|
|
|
+ material: babylonMaterial,
|
|
|
+ meshes: [],
|
|
|
+ loaded: Promise.all(promises).then(function () { })
|
|
|
+ };
|
|
|
+ material._babylonData[babylonDrawMode] = babylonData;
|
|
|
}
|
|
|
- assign(material._babylonMaterial);
|
|
|
- return material._loaded;
|
|
|
+ babylonData.meshes.push(babylonMesh);
|
|
|
+ assign(babylonData.material);
|
|
|
+ return babylonData.loaded;
|
|
|
});
|
|
|
};
|
|
|
- KHR_materials_pbrSpecularGlossiness.prototype._loadSpecularGlossinessPropertiesAsync = function (context, material, properties) {
|
|
|
+ KHR_materials_pbrSpecularGlossiness.prototype._loadSpecularGlossinessPropertiesAsync = function (context, material, properties, babylonMaterial) {
|
|
|
var promises = new Array();
|
|
|
- var babylonMaterial = material._babylonMaterial;
|
|
|
if (properties.diffuseFactor) {
|
|
|
babylonMaterial.albedoColor = BABYLON.Color3.FromArray(properties.diffuseFactor);
|
|
|
babylonMaterial.alpha = properties.diffuseFactor[3];
|
|
@@ -4469,7 +4506,7 @@ var BABYLON;
|
|
|
babylonMaterial.reflectivityTexture.hasAlpha = true;
|
|
|
babylonMaterial.useMicroSurfaceFromReflectivityMapAlpha = true;
|
|
|
}
|
|
|
- this._loader._loadMaterialAlphaProperties(context, material);
|
|
|
+ this._loader._loadMaterialAlphaProperties(context, material, babylonMaterial);
|
|
|
return Promise.all(promises).then(function () { });
|
|
|
};
|
|
|
return KHR_materials_pbrSpecularGlossiness;
|
|
@@ -4482,6 +4519,7 @@ var BABYLON;
|
|
|
|
|
|
//# sourceMappingURL=KHR_materials_pbrSpecularGlossiness.js.map
|
|
|
|
|
|
+"use strict";
|
|
|
/// <reference path="../../../../../dist/preview release/babylon.d.ts"/>
|
|
|
var __extends = (this && this.__extends) || (function () {
|
|
|
var extendStatics = Object.setPrototypeOf ||
|