@babylonjs/core 7.19.1 → 7.20.0
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/Buffers/buffer.nonFloatVertexBuffers.js +1 -1
- package/Buffers/buffer.nonFloatVertexBuffers.js.map +1 -1
- package/Collisions/gpuPicker.d.ts +8 -2
- package/Collisions/gpuPicker.js +41 -20
- package/Collisions/gpuPicker.js.map +1 -1
- package/Engines/Processors/shaderProcessor.d.ts +1 -0
- package/Engines/Processors/shaderProcessor.js +1 -0
- package/Engines/Processors/shaderProcessor.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.rawTexture.js +1 -0
- package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessingContext.d.ts +1 -1
- package/Engines/WebGPU/webgpuShaderProcessingContext.js +4 -2
- package/Engines/WebGPU/webgpuShaderProcessingContext.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.d.ts +2 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +12 -5
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureManager.d.ts +1 -4
- package/Engines/WebGPU/webgpuTextureManager.js +90 -75
- package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
- package/Engines/abstractEngine.d.ts +2 -2
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/nativeEngine.d.ts +1 -1
- package/Engines/nativeEngine.js +2 -1
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/thinEngine.d.ts +1 -1
- package/Engines/thinEngine.functions.d.ts +1 -1
- package/Engines/thinEngine.functions.js +2 -1
- package/Engines/thinEngine.functions.js.map +1 -1
- package/Engines/thinEngine.js +2 -2
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +9 -5
- package/Engines/webgpuEngine.js +35 -22
- package/Engines/webgpuEngine.js.map +1 -1
- package/Layers/effectLayer.d.ts +16 -1
- package/Layers/effectLayer.js +32 -2
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/glowLayer.d.ts +1 -2
- package/Layers/glowLayer.js +16 -3
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/highlightLayer.d.ts +5 -4
- package/Layers/highlightLayer.js +36 -11
- package/Layers/highlightLayer.js.map +1 -1
- package/Layers/index.d.ts +10 -0
- package/Layers/index.js +12 -0
- package/Layers/index.js.map +1 -1
- package/Lights/Shadows/index.d.ts +8 -0
- package/Lights/Shadows/index.js +9 -0
- package/Lights/Shadows/index.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.d.ts +18 -5
- package/Lights/Shadows/shadowGenerator.js +44 -5
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Loading/sceneLoader.d.ts +155 -16
- package/Loading/sceneLoader.js +197 -99
- package/Loading/sceneLoader.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +8 -1
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.js +1 -1
- package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
- package/Materials/effect.functions.d.ts +1 -1
- package/Materials/effect.functions.js +6 -3
- package/Materials/effect.functions.js.map +1 -1
- package/Materials/effect.js +1 -1
- package/Materials/effect.js.map +1 -1
- package/Materials/standardMaterial.d.ts +1 -1
- package/Materials/standardMaterial.js +1 -1
- package/Materials/standardMaterial.js.map +1 -1
- package/Maths/math.constants.d.ts +1 -2
- package/Maths/math.constants.js +1 -2
- package/Maths/math.constants.js.map +1 -1
- package/Maths/math.like.d.ts +9 -0
- package/Maths/math.like.js.map +1 -1
- package/Maths/math.vector.d.ts +23 -23
- package/Maths/math.vector.js +43 -11
- package/Maths/math.vector.js.map +1 -1
- package/Misc/index.d.ts +4 -0
- package/Misc/index.js +5 -0
- package/Misc/index.js.map +1 -1
- package/Misc/rgbdTextureTools.d.ts +1 -0
- package/Misc/rgbdTextureTools.js +15 -2
- package/Misc/rgbdTextureTools.js.map +1 -1
- package/PostProcesses/blurPostProcess.d.ts +6 -0
- package/PostProcesses/blurPostProcess.js +21 -2
- package/PostProcesses/blurPostProcess.js.map +1 -1
- package/PostProcesses/index.d.ts +8 -0
- package/PostProcesses/index.js +10 -0
- package/PostProcesses/index.js.map +1 -1
- package/PostProcesses/passPostProcess.d.ts +2 -0
- package/PostProcesses/passPostProcess.js +26 -2
- package/PostProcesses/passPostProcess.js.map +1 -1
- package/PostProcesses/postProcess.d.ts +11 -2
- package/PostProcesses/postProcess.js +17 -1
- package/PostProcesses/postProcess.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/bayerDitherFunctions.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/bayerDitherFunctions.js +17 -0
- package/ShadersWGSL/ShadersInclude/bayerDitherFunctions.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/imageProcessingFunctions.js +1 -1
- package/ShadersWGSL/ShadersInclude/imageProcessingFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/kernelBlurFragment.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/kernelBlurFragment.js +20 -0
- package/ShadersWGSL/ShadersInclude/kernelBlurFragment.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/kernelBlurFragment2.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/kernelBlurFragment2.js +19 -0
- package/ShadersWGSL/ShadersInclude/kernelBlurFragment2.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/kernelBlurVaryingDeclaration.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/kernelBlurVaryingDeclaration.js +9 -0
- package/ShadersWGSL/ShadersInclude/kernelBlurVaryingDeclaration.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/kernelBlurVertex.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/kernelBlurVertex.js +9 -0
- package/ShadersWGSL/ShadersInclude/kernelBlurVertex.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js +4 -4
- package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/shadowMapFragment.js +5 -5
- package/ShadersWGSL/ShadersInclude/shadowMapFragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/shadowMapFragmentExtraDeclaration.d.ts +7 -0
- package/ShadersWGSL/ShadersInclude/shadowMapFragmentExtraDeclaration.js +26 -0
- package/ShadersWGSL/ShadersInclude/shadowMapFragmentExtraDeclaration.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/shadowMapFragmentSoftTransparentShadow.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/shadowMapFragmentSoftTransparentShadow.js +12 -0
- package/ShadersWGSL/ShadersInclude/shadowMapFragmentSoftTransparentShadow.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/shadowMapVertexExtraDeclaration.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/shadowMapVertexExtraDeclaration.js +19 -0
- package/ShadersWGSL/ShadersInclude/shadowMapVertexExtraDeclaration.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/shadowMapVertexMetric.js +4 -4
- package/ShadersWGSL/ShadersInclude/shadowMapVertexMetric.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/shadowMapVertexNormalBias.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/shadowMapVertexNormalBias.js +17 -0
- package/ShadersWGSL/ShadersInclude/shadowMapVertexNormalBias.js.map +1 -0
- package/ShadersWGSL/default.fragment.js +2 -2
- package/ShadersWGSL/default.fragment.js.map +1 -1
- package/ShadersWGSL/depthBoxBlur.fragment.d.ts +5 -0
- package/ShadersWGSL/depthBoxBlur.fragment.js +14 -0
- package/ShadersWGSL/depthBoxBlur.fragment.js.map +1 -0
- package/ShadersWGSL/glowBlurPostProcess.fragment.d.ts +5 -0
- package/ShadersWGSL/glowBlurPostProcess.fragment.js +15 -0
- package/ShadersWGSL/glowBlurPostProcess.fragment.js.map +1 -0
- package/ShadersWGSL/glowMapGeneration.fragment.d.ts +8 -0
- package/ShadersWGSL/glowMapGeneration.fragment.js +74 -0
- package/ShadersWGSL/glowMapGeneration.fragment.js.map +1 -0
- package/ShadersWGSL/glowMapGeneration.vertex.d.ts +17 -0
- package/ShadersWGSL/glowMapGeneration.vertex.js +92 -0
- package/ShadersWGSL/glowMapGeneration.vertex.js.map +1 -0
- package/ShadersWGSL/glowMapMerge.fragment.d.ts +5 -0
- package/ShadersWGSL/glowMapMerge.fragment.js +32 -0
- package/ShadersWGSL/glowMapMerge.fragment.js.map +1 -0
- package/ShadersWGSL/glowMapMerge.vertex.d.ts +5 -0
- package/ShadersWGSL/glowMapMerge.vertex.js +16 -0
- package/ShadersWGSL/glowMapMerge.vertex.js.map +1 -0
- package/ShadersWGSL/kernelBlur.fragment.d.ts +9 -0
- package/ShadersWGSL/kernelBlur.fragment.js +48 -0
- package/ShadersWGSL/kernelBlur.fragment.js.map +1 -0
- package/ShadersWGSL/kernelBlur.vertex.d.ts +7 -0
- package/ShadersWGSL/kernelBlur.vertex.js +21 -0
- package/ShadersWGSL/kernelBlur.vertex.js.map +1 -0
- package/ShadersWGSL/pass.fragment.d.ts +5 -0
- package/ShadersWGSL/pass.fragment.js +12 -0
- package/ShadersWGSL/pass.fragment.js.map +1 -0
- package/ShadersWGSL/passCube.fragment.d.ts +5 -0
- package/ShadersWGSL/passCube.fragment.js +31 -0
- package/ShadersWGSL/passCube.fragment.js.map +1 -0
- package/ShadersWGSL/rgbdDecode.fragment.d.ts +6 -0
- package/ShadersWGSL/rgbdDecode.fragment.js +14 -0
- package/ShadersWGSL/rgbdDecode.fragment.js.map +1 -0
- package/ShadersWGSL/rgbdEncode.fragment.d.ts +6 -0
- package/ShadersWGSL/rgbdEncode.fragment.js +14 -0
- package/ShadersWGSL/rgbdEncode.fragment.js.map +1 -0
- package/ShadersWGSL/shadowMap.fragment.d.ts +9 -0
- package/ShadersWGSL/shadowMap.fragment.js +39 -0
- package/ShadersWGSL/shadowMap.fragment.js.map +1 -0
- package/ShadersWGSL/shadowMap.vertex.d.ts +22 -0
- package/ShadersWGSL/shadowMap.vertex.js +89 -0
- package/ShadersWGSL/shadowMap.vertex.js.map +1 -0
- package/package.json +1 -1
package/Loading/sceneLoader.js
CHANGED
|
@@ -9,6 +9,7 @@ import { IsBase64DataUrl } from "../Misc/fileTools.js";
|
|
|
9
9
|
import { RuntimeError, ErrorCodes } from "../Misc/error.js";
|
|
10
10
|
import { RandomGUID } from "../Misc/guid.js";
|
|
11
11
|
import { Engine } from "../Engines/engine.js";
|
|
12
|
+
import { AbstractEngine } from "../Engines/abstractEngine.js";
|
|
12
13
|
/**
|
|
13
14
|
* Mode that determines how to handle old animation groups before loading new ones.
|
|
14
15
|
*/
|
|
@@ -31,6 +32,9 @@ export var SceneLoaderAnimationGroupLoadingMode;
|
|
|
31
32
|
*/
|
|
32
33
|
SceneLoaderAnimationGroupLoadingMode[SceneLoaderAnimationGroupLoadingMode["NoSync"] = 3] = "NoSync";
|
|
33
34
|
})(SceneLoaderAnimationGroupLoadingMode || (SceneLoaderAnimationGroupLoadingMode = {}));
|
|
35
|
+
function isFile(value) {
|
|
36
|
+
return !!value.name;
|
|
37
|
+
}
|
|
34
38
|
/**
|
|
35
39
|
* Class used to load scene from various file formats using registered plugins
|
|
36
40
|
* @see https://doc.babylonjs.com/features/featuresDeepDive/importers/loadingFileTypes
|
|
@@ -127,7 +131,7 @@ export class SceneLoader {
|
|
|
127
131
|
}
|
|
128
132
|
return errorMessage;
|
|
129
133
|
}
|
|
130
|
-
static _LoadData(fileInfo, scene, onSuccess, onProgress, onError, onDispose, pluginExtension, name) {
|
|
134
|
+
static _LoadData(fileInfo, scene, onSuccess, onProgress, onError, onDispose, pluginExtension, name, pluginOptions) {
|
|
131
135
|
const directLoad = SceneLoader._GetDirectLoad(fileInfo.url);
|
|
132
136
|
if (fileInfo.rawData && !pluginExtension) {
|
|
133
137
|
// eslint-disable-next-line no-throw-literal
|
|
@@ -138,14 +142,20 @@ export class SceneLoader {
|
|
|
138
142
|
: directLoad
|
|
139
143
|
? SceneLoader._GetPluginForDirectLoad(fileInfo.url)
|
|
140
144
|
: SceneLoader._GetPluginForFilename(fileInfo.url);
|
|
145
|
+
if (pluginOptions?.[registeredPlugin.plugin.name]?.enabled === false) {
|
|
146
|
+
throw new Error(`The '${registeredPlugin.plugin.name}' plugin is disabled via the loader options passed to the loading operation.`);
|
|
147
|
+
}
|
|
141
148
|
if (fileInfo.rawData && !registeredPlugin.isBinary) {
|
|
142
149
|
// eslint-disable-next-line no-throw-literal
|
|
143
150
|
throw "Loading from ArrayBufferView can not be used with plugins that don't support binary loading.";
|
|
144
151
|
}
|
|
145
|
-
|
|
152
|
+
// For plugin factories, the plugin is instantiated on each SceneLoader operation. This makes options handling
|
|
153
|
+
// much simpler as we can just pass the options to the factory, rather than passing options through to every possible
|
|
154
|
+
// plugin call. Given this, options are only supported for plugins that provide a factory function.
|
|
155
|
+
const plugin = registeredPlugin.plugin.createPlugin?.(pluginOptions ?? {}) ?? registeredPlugin.plugin;
|
|
146
156
|
if (!plugin) {
|
|
147
157
|
// eslint-disable-next-line no-throw-literal
|
|
148
|
-
throw
|
|
158
|
+
throw `The loader plugin corresponding to the '${pluginExtension}' file type has not been found. If using es6, please import the plugin you wish to use before.`;
|
|
149
159
|
}
|
|
150
160
|
SceneLoader.OnPluginActivatedObservable.notifyObservers(plugin);
|
|
151
161
|
// Check if we have a direct load url. If the plugin is registered to handle
|
|
@@ -226,33 +236,32 @@ export class SceneLoader {
|
|
|
226
236
|
}
|
|
227
237
|
return plugin;
|
|
228
238
|
}
|
|
229
|
-
static _GetFileInfo(rootUrl,
|
|
239
|
+
static _GetFileInfo(rootUrl, sceneSource) {
|
|
230
240
|
let url;
|
|
231
241
|
let name;
|
|
232
242
|
let file = null;
|
|
233
243
|
let rawData = null;
|
|
234
|
-
if (!
|
|
244
|
+
if (!sceneSource) {
|
|
235
245
|
url = rootUrl;
|
|
236
246
|
name = Tools.GetFilename(rootUrl);
|
|
237
247
|
rootUrl = Tools.GetFolderPath(rootUrl);
|
|
238
248
|
}
|
|
239
|
-
else if (
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
file = sceneFile;
|
|
249
|
+
else if (isFile(sceneSource)) {
|
|
250
|
+
url = `file:${sceneSource.name}`;
|
|
251
|
+
name = sceneSource.name;
|
|
252
|
+
file = sceneSource;
|
|
244
253
|
}
|
|
245
|
-
else if (ArrayBuffer.isView(
|
|
254
|
+
else if (ArrayBuffer.isView(sceneSource)) {
|
|
246
255
|
url = "";
|
|
247
256
|
name = RandomGUID();
|
|
248
|
-
rawData =
|
|
257
|
+
rawData = sceneSource;
|
|
249
258
|
}
|
|
250
|
-
else if (
|
|
251
|
-
url =
|
|
259
|
+
else if (sceneSource.startsWith("data:")) {
|
|
260
|
+
url = sceneSource;
|
|
252
261
|
name = "";
|
|
253
262
|
}
|
|
254
|
-
else {
|
|
255
|
-
const filename =
|
|
263
|
+
else if (rootUrl) {
|
|
264
|
+
const filename = sceneSource;
|
|
256
265
|
if (filename.substr(0, 1) === "/") {
|
|
257
266
|
Tools.Error("Wrong sceneFilename parameter");
|
|
258
267
|
return null;
|
|
@@ -260,6 +269,11 @@ export class SceneLoader {
|
|
|
260
269
|
url = rootUrl + filename;
|
|
261
270
|
name = filename;
|
|
262
271
|
}
|
|
272
|
+
else {
|
|
273
|
+
url = sceneSource;
|
|
274
|
+
name = Tools.GetFilename(sceneSource);
|
|
275
|
+
rootUrl = Tools.GetFolderPath(sceneSource);
|
|
276
|
+
}
|
|
263
277
|
return {
|
|
264
278
|
url: url,
|
|
265
279
|
rootUrl: rootUrl,
|
|
@@ -320,7 +334,10 @@ export class SceneLoader {
|
|
|
320
334
|
* @param name defines the name of the file, if the data is binary
|
|
321
335
|
* @returns The loaded plugin
|
|
322
336
|
*/
|
|
323
|
-
static ImportMesh(meshNames, rootUrl, sceneFilename
|
|
337
|
+
static ImportMesh(meshNames, rootUrl, sceneFilename, scene, onSuccess, onProgress, onError, pluginExtension, name) {
|
|
338
|
+
return SceneLoader._ImportMesh(meshNames, rootUrl, sceneFilename, scene, onSuccess, onProgress, onError, pluginExtension, name);
|
|
339
|
+
}
|
|
340
|
+
static _ImportMesh(meshNames, rootUrl, sceneFilename = "", scene = EngineStore.LastCreatedScene, onSuccess = null, onProgress = null, onError = null, pluginExtension = null, name = "", pluginOptions = {}) {
|
|
324
341
|
if (!scene) {
|
|
325
342
|
Logger.Error("No scene available to import mesh to");
|
|
326
343
|
return null;
|
|
@@ -394,22 +411,36 @@ export class SceneLoader {
|
|
|
394
411
|
errorHandler(error.message, error);
|
|
395
412
|
});
|
|
396
413
|
}
|
|
397
|
-
}, progressHandler, errorHandler, disposeHandler, pluginExtension, name);
|
|
414
|
+
}, progressHandler, errorHandler, disposeHandler, pluginExtension, name, pluginOptions);
|
|
398
415
|
}
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
416
|
+
static ImportMeshAsync(...args) {
|
|
417
|
+
let meshNames;
|
|
418
|
+
let rootUrl;
|
|
419
|
+
let sceneFilename;
|
|
420
|
+
let scene;
|
|
421
|
+
let onProgress;
|
|
422
|
+
let pluginExtension;
|
|
423
|
+
let name;
|
|
424
|
+
let pluginOptions;
|
|
425
|
+
// This is a user-defined type guard: https://www.typescriptlang.org/docs/handbook/advanced-types.html#user-defined-type-guards
|
|
426
|
+
// This is the most type safe way to distinguish between the two possible argument arrays.
|
|
427
|
+
const isOptionsArgs = (maybeOptionsArgs) => {
|
|
428
|
+
// If the second argument is an object, then it must be the options overload.
|
|
429
|
+
return typeof maybeOptionsArgs[1] === "object";
|
|
430
|
+
};
|
|
431
|
+
if (isOptionsArgs(args)) {
|
|
432
|
+
// Source is mapped to sceneFileName
|
|
433
|
+
sceneFilename = args[0];
|
|
434
|
+
scene = args[1];
|
|
435
|
+
// Options determine the rest of the arguments
|
|
436
|
+
({ meshNames, rootUrl = "", onProgress, pluginExtension, name, pluginOptions } = args[2] ?? {});
|
|
437
|
+
}
|
|
438
|
+
else {
|
|
439
|
+
// For the legacy signature, we just directly map each argument
|
|
440
|
+
[meshNames, rootUrl, sceneFilename, scene, onProgress, pluginExtension, name] = args;
|
|
441
|
+
}
|
|
411
442
|
return new Promise((resolve, reject) => {
|
|
412
|
-
SceneLoader.
|
|
443
|
+
SceneLoader._ImportMesh(meshNames, rootUrl, sceneFilename, scene, (meshes, particleSystems, skeletons, animationGroups, transformNodes, geometries, lights, spriteManagers) => {
|
|
413
444
|
resolve({
|
|
414
445
|
meshes: meshes,
|
|
415
446
|
particleSystems: particleSystems,
|
|
@@ -422,7 +453,7 @@ export class SceneLoader {
|
|
|
422
453
|
});
|
|
423
454
|
}, onProgress, (scene, message, exception) => {
|
|
424
455
|
reject(exception || new Error(message));
|
|
425
|
-
}, pluginExtension, name);
|
|
456
|
+
}, pluginExtension, name, pluginOptions);
|
|
426
457
|
});
|
|
427
458
|
}
|
|
428
459
|
/**
|
|
@@ -437,30 +468,47 @@ export class SceneLoader {
|
|
|
437
468
|
* @param name defines the filename, if the data is binary
|
|
438
469
|
* @returns The loaded plugin
|
|
439
470
|
*/
|
|
440
|
-
static Load(rootUrl, sceneFilename
|
|
471
|
+
static Load(rootUrl, sceneFilename, engine, onSuccess, onProgress, onError, pluginExtension, name) {
|
|
472
|
+
return SceneLoader._Load(rootUrl, sceneFilename, engine, onSuccess, onProgress, onError, pluginExtension, name);
|
|
473
|
+
}
|
|
474
|
+
static _Load(rootUrl, sceneFilename = "", engine = EngineStore.LastCreatedEngine, onSuccess = null, onProgress = null, onError = null, pluginExtension = null, name = "", pluginOptions = {}) {
|
|
441
475
|
if (!engine) {
|
|
442
476
|
Tools.Error("No engine available");
|
|
443
477
|
return null;
|
|
444
478
|
}
|
|
445
|
-
return SceneLoader.
|
|
479
|
+
return SceneLoader._Append(rootUrl, sceneFilename, new Scene(engine), onSuccess, onProgress, onError, pluginExtension, name, pluginOptions);
|
|
446
480
|
}
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
481
|
+
static LoadAsync(...args) {
|
|
482
|
+
let rootUrl;
|
|
483
|
+
let sceneFilename;
|
|
484
|
+
let engine;
|
|
485
|
+
let onProgress;
|
|
486
|
+
let pluginExtension;
|
|
487
|
+
let name;
|
|
488
|
+
let pluginOptions;
|
|
489
|
+
// This is a user-defined type guard: https://www.typescriptlang.org/docs/handbook/advanced-types.html#user-defined-type-guards
|
|
490
|
+
// This is the most type safe way to distinguish between the two possible argument arrays.
|
|
491
|
+
const isOptionsArgs = (maybeOptionsArgs) => {
|
|
492
|
+
// If the second argument is an engine, then it must be the options overload.
|
|
493
|
+
return maybeOptionsArgs[1] instanceof AbstractEngine;
|
|
494
|
+
};
|
|
495
|
+
if (isOptionsArgs(args)) {
|
|
496
|
+
// Source is mapped to sceneFileName
|
|
497
|
+
sceneFilename = args[0];
|
|
498
|
+
engine = args[1];
|
|
499
|
+
// Options determine the rest of the arguments
|
|
500
|
+
({ rootUrl = "", onProgress, pluginExtension, name, pluginOptions } = args[2] ?? {});
|
|
501
|
+
}
|
|
502
|
+
else {
|
|
503
|
+
// For the legacy signature, we just directly map each argument
|
|
504
|
+
[rootUrl, sceneFilename, engine, onProgress, pluginExtension, name] = args;
|
|
505
|
+
}
|
|
458
506
|
return new Promise((resolve, reject) => {
|
|
459
|
-
SceneLoader.
|
|
507
|
+
SceneLoader._Load(rootUrl, sceneFilename, engine, (scene) => {
|
|
460
508
|
resolve(scene);
|
|
461
509
|
}, onProgress, (scene, message, exception) => {
|
|
462
510
|
reject(exception || new Error(message));
|
|
463
|
-
}, pluginExtension, name);
|
|
511
|
+
}, pluginExtension, name, pluginOptions);
|
|
464
512
|
});
|
|
465
513
|
}
|
|
466
514
|
/**
|
|
@@ -475,7 +523,10 @@ export class SceneLoader {
|
|
|
475
523
|
* @param name defines the name of the file, if the data is binary
|
|
476
524
|
* @returns The loaded plugin
|
|
477
525
|
*/
|
|
478
|
-
static Append(rootUrl, sceneFilename
|
|
526
|
+
static Append(rootUrl, sceneFilename, scene, onSuccess, onProgress, onError, pluginExtension, name) {
|
|
527
|
+
return SceneLoader._Append(rootUrl, sceneFilename, scene, onSuccess, onProgress, onError, pluginExtension, name);
|
|
528
|
+
}
|
|
529
|
+
static _Append(rootUrl, sceneFilename = "", scene = EngineStore.LastCreatedScene, onSuccess = null, onProgress = null, onError = null, pluginExtension = null, name = "", pluginOptions = {}) {
|
|
479
530
|
if (!scene) {
|
|
480
531
|
Logger.Error("No scene available to append to");
|
|
481
532
|
return null;
|
|
@@ -550,25 +601,39 @@ export class SceneLoader {
|
|
|
550
601
|
errorHandler(error.message, error);
|
|
551
602
|
});
|
|
552
603
|
}
|
|
553
|
-
}, progressHandler, errorHandler, disposeHandler, pluginExtension, name);
|
|
604
|
+
}, progressHandler, errorHandler, disposeHandler, pluginExtension, name, pluginOptions);
|
|
554
605
|
}
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
606
|
+
static AppendAsync(...args) {
|
|
607
|
+
let rootUrl;
|
|
608
|
+
let sceneFilename;
|
|
609
|
+
let scene;
|
|
610
|
+
let onProgress;
|
|
611
|
+
let pluginExtension;
|
|
612
|
+
let name;
|
|
613
|
+
let pluginOptions;
|
|
614
|
+
// This is a user-defined type guard: https://www.typescriptlang.org/docs/handbook/advanced-types.html#user-defined-type-guards
|
|
615
|
+
// This is the most type safe way to distinguish between the two possible argument arrays.
|
|
616
|
+
const isOptionsArgs = (maybeOptionsArgs) => {
|
|
617
|
+
// If the second argument is a Scene, then it must be the options overload.
|
|
618
|
+
return maybeOptionsArgs[1] instanceof Scene;
|
|
619
|
+
};
|
|
620
|
+
if (isOptionsArgs(args)) {
|
|
621
|
+
// Source is mapped to sceneFileName
|
|
622
|
+
sceneFilename = args[0];
|
|
623
|
+
scene = args[1];
|
|
624
|
+
// Options determine the rest of the arguments
|
|
625
|
+
({ rootUrl = "", onProgress, pluginExtension, name, pluginOptions } = args[2] ?? {});
|
|
626
|
+
}
|
|
627
|
+
else {
|
|
628
|
+
// For the legacy signature, we just directly map each argument
|
|
629
|
+
[rootUrl, sceneFilename, scene, onProgress, pluginExtension, name] = args;
|
|
630
|
+
}
|
|
566
631
|
return new Promise((resolve, reject) => {
|
|
567
|
-
SceneLoader.
|
|
632
|
+
SceneLoader._Append(rootUrl, sceneFilename, scene, (scene) => {
|
|
568
633
|
resolve(scene);
|
|
569
634
|
}, onProgress, (scene, message, exception) => {
|
|
570
635
|
reject(exception || new Error(message));
|
|
571
|
-
}, pluginExtension, name);
|
|
636
|
+
}, pluginExtension, name, pluginOptions);
|
|
572
637
|
});
|
|
573
638
|
}
|
|
574
639
|
/**
|
|
@@ -583,7 +648,10 @@ export class SceneLoader {
|
|
|
583
648
|
* @param name defines the filename, if the data is binary
|
|
584
649
|
* @returns The loaded plugin
|
|
585
650
|
*/
|
|
586
|
-
static LoadAssetContainer(rootUrl, sceneFilename
|
|
651
|
+
static LoadAssetContainer(rootUrl, sceneFilename, scene, onSuccess, onProgress, onError, pluginExtension, name) {
|
|
652
|
+
return SceneLoader._LoadAssetContainer(rootUrl, sceneFilename, scene, onSuccess, onProgress, onError, pluginExtension, name);
|
|
653
|
+
}
|
|
654
|
+
static _LoadAssetContainer(rootUrl, sceneFilename = "", scene = EngineStore.LastCreatedScene, onSuccess = null, onProgress = null, onError = null, pluginExtension = null, name = "", pluginOptions = {}) {
|
|
587
655
|
if (!scene) {
|
|
588
656
|
Logger.Error("No scene available to load asset container to");
|
|
589
657
|
return null;
|
|
@@ -656,24 +724,41 @@ export class SceneLoader {
|
|
|
656
724
|
else {
|
|
657
725
|
errorHandler("LoadAssetContainer is not supported by this plugin. Plugin did not provide a loadAssetContainer or loadAssetContainerAsync method.");
|
|
658
726
|
}
|
|
659
|
-
}, progressHandler, errorHandler, disposeHandler, pluginExtension, name);
|
|
727
|
+
}, progressHandler, errorHandler, disposeHandler, pluginExtension, name, pluginOptions);
|
|
660
728
|
}
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
729
|
+
// This is the single implementation that handles both the legacy many-parameters overload and the
|
|
730
|
+
// new source + config overload. Using a parameters array union is the most type safe way to handle this.
|
|
731
|
+
static LoadAssetContainerAsync(...args) {
|
|
732
|
+
let rootUrl;
|
|
733
|
+
let sceneFilename;
|
|
734
|
+
let scene;
|
|
735
|
+
let onProgress;
|
|
736
|
+
let pluginExtension;
|
|
737
|
+
let name;
|
|
738
|
+
let pluginOptions;
|
|
739
|
+
// This is a user-defined type guard: https://www.typescriptlang.org/docs/handbook/advanced-types.html#user-defined-type-guards
|
|
740
|
+
// This is the most type safe way to distinguish between the two possible argument arrays.
|
|
741
|
+
const isOptionsArgs = (maybeOptionsArgs) => {
|
|
742
|
+
// If the second argument is a Scene, then it must be the options overload.
|
|
743
|
+
return maybeOptionsArgs[1] instanceof Scene;
|
|
744
|
+
};
|
|
745
|
+
if (isOptionsArgs(args)) {
|
|
746
|
+
// Source is mapped to sceneFileName
|
|
747
|
+
sceneFilename = args[0];
|
|
748
|
+
scene = args[1];
|
|
749
|
+
// Options determine the rest of the arguments
|
|
750
|
+
({ rootUrl = "", onProgress, pluginExtension, name, pluginOptions } = args[2] ?? {});
|
|
751
|
+
}
|
|
752
|
+
else {
|
|
753
|
+
// For the legacy signature, we just directly map each argument
|
|
754
|
+
[rootUrl, sceneFilename, scene, onProgress, pluginExtension, name] = args;
|
|
755
|
+
}
|
|
671
756
|
return new Promise((resolve, reject) => {
|
|
672
|
-
SceneLoader.
|
|
757
|
+
SceneLoader._LoadAssetContainer(rootUrl, sceneFilename, scene, (assetContainer) => {
|
|
673
758
|
resolve(assetContainer);
|
|
674
759
|
}, onProgress, (scene, message, exception) => {
|
|
675
760
|
reject(exception || new Error(message));
|
|
676
|
-
}, pluginExtension);
|
|
761
|
+
}, pluginExtension, name, pluginOptions);
|
|
677
762
|
});
|
|
678
763
|
}
|
|
679
764
|
/**
|
|
@@ -688,8 +773,12 @@ export class SceneLoader {
|
|
|
688
773
|
* @param onProgress a callback with a progress event for each file being loaded
|
|
689
774
|
* @param onError a callback with the scene, a message, and possibly an exception when import fails
|
|
690
775
|
* @param pluginExtension the extension used to determine the plugin
|
|
776
|
+
* @param name defines the filename, if the data is binary
|
|
691
777
|
*/
|
|
692
|
-
static ImportAnimations(rootUrl, sceneFilename
|
|
778
|
+
static ImportAnimations(rootUrl, sceneFilename, scene, overwriteAnimations, animationGroupLoadingMode, targetConverter, onSuccess, onProgress, onError, pluginExtension, name) {
|
|
779
|
+
SceneLoader._ImportAnimations(rootUrl, sceneFilename, scene, overwriteAnimations, animationGroupLoadingMode, targetConverter, onSuccess, onProgress, onError, pluginExtension, name);
|
|
780
|
+
}
|
|
781
|
+
static _ImportAnimations(rootUrl, sceneFilename = "", scene = EngineStore.LastCreatedScene, overwriteAnimations = true, animationGroupLoadingMode = 0 /* SceneLoaderAnimationGroupLoadingMode.Clean */, targetConverter = null, onSuccess = null, onProgress = null, onError = null, pluginExtension = null, name = "", pluginOptions = {}) {
|
|
693
782
|
if (!scene) {
|
|
694
783
|
Logger.Error("No scene available to load animations to");
|
|
695
784
|
return;
|
|
@@ -745,33 +834,42 @@ export class SceneLoader {
|
|
|
745
834
|
onSuccess(scene);
|
|
746
835
|
}
|
|
747
836
|
};
|
|
748
|
-
this.
|
|
837
|
+
this._LoadAssetContainer(rootUrl, sceneFilename, scene, onAssetContainerLoaded, onProgress, onError, pluginExtension, name, pluginOptions);
|
|
749
838
|
}
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
839
|
+
static ImportAnimationsAsync(...args) {
|
|
840
|
+
let rootUrl;
|
|
841
|
+
let sceneFilename;
|
|
842
|
+
let scene;
|
|
843
|
+
let overwriteAnimations;
|
|
844
|
+
let animationGroupLoadingMode;
|
|
845
|
+
let targetConverter;
|
|
846
|
+
let onProgress;
|
|
847
|
+
let pluginExtension;
|
|
848
|
+
let name;
|
|
849
|
+
let pluginOptions;
|
|
850
|
+
// This is a user-defined type guard: https://www.typescriptlang.org/docs/handbook/advanced-types.html#user-defined-type-guards
|
|
851
|
+
// This is the most type safe way to distinguish between the two possible argument arrays.
|
|
852
|
+
const isOptionsArgs = (maybeOptionsArgs) => {
|
|
853
|
+
// If the second argument is a Scene, then it must be the options overload.
|
|
854
|
+
return maybeOptionsArgs[1] instanceof Scene;
|
|
855
|
+
};
|
|
856
|
+
if (isOptionsArgs(args)) {
|
|
857
|
+
// Source is mapped to sceneFileName
|
|
858
|
+
sceneFilename = args[0];
|
|
859
|
+
scene = args[1];
|
|
860
|
+
// Options determine the rest of the arguments
|
|
861
|
+
({ rootUrl = "", overwriteAnimations, animationGroupLoadingMode, targetConverter, onProgress, pluginExtension, name, pluginOptions } = args[2] ?? {});
|
|
862
|
+
}
|
|
863
|
+
else {
|
|
864
|
+
// For the legacy signature, we just directly map each argument
|
|
865
|
+
[rootUrl, sceneFilename, scene, overwriteAnimations, animationGroupLoadingMode, targetConverter, , onProgress, , pluginExtension, name] = args;
|
|
866
|
+
}
|
|
769
867
|
return new Promise((resolve, reject) => {
|
|
770
|
-
SceneLoader.
|
|
868
|
+
SceneLoader._ImportAnimations(rootUrl, sceneFilename, scene, overwriteAnimations, animationGroupLoadingMode, targetConverter, (_scene) => {
|
|
771
869
|
resolve(_scene);
|
|
772
870
|
}, onProgress, (_scene, message, exception) => {
|
|
773
871
|
reject(exception || new Error(message));
|
|
774
|
-
}, pluginExtension);
|
|
872
|
+
}, pluginExtension, name, pluginOptions);
|
|
775
873
|
});
|
|
776
874
|
}
|
|
777
875
|
}
|