@babylonjs/loaders 9.26.1 → 9.27.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.
Files changed (69) hide show
  1. package/SPLAT/gaussianSplattingStream.d.ts +79 -25
  2. package/SPLAT/gaussianSplattingStream.js +320 -95
  3. package/SPLAT/gaussianSplattingStream.js.map +1 -1
  4. package/glTF/2.0/Extensions/EXT_texture_avif.pure.js +1 -1
  5. package/glTF/2.0/Extensions/EXT_texture_avif.pure.js.map +1 -1
  6. package/glTF/2.0/Extensions/EXT_texture_webp.pure.js +1 -1
  7. package/glTF/2.0/Extensions/EXT_texture_webp.pure.js.map +1 -1
  8. package/glTF/2.0/Extensions/KHR_interactivity/declarationMapper.d.ts +143 -3
  9. package/glTF/2.0/Extensions/KHR_interactivity/declarationMapper.js +622 -99
  10. package/glTF/2.0/Extensions/KHR_interactivity/declarationMapper.js.map +1 -1
  11. package/glTF/2.0/Extensions/KHR_interactivity/flowGraphEventReferenceBlock.d.ts +47 -0
  12. package/glTF/2.0/Extensions/KHR_interactivity/flowGraphEventReferenceBlock.js +68 -0
  13. package/glTF/2.0/Extensions/KHR_interactivity/flowGraphEventReferenceBlock.js.map +1 -0
  14. package/glTF/2.0/Extensions/KHR_interactivity/flowGraphGLTFDataProvider.d.ts +2 -2
  15. package/glTF/2.0/Extensions/KHR_interactivity/flowGraphGLTFDataProvider.js +1 -1
  16. package/glTF/2.0/Extensions/KHR_interactivity/flowGraphGLTFDataProvider.js.map +1 -1
  17. package/glTF/2.0/Extensions/KHR_interactivity/flowGraphObjectReferenceBlock.d.ts +24 -0
  18. package/glTF/2.0/Extensions/KHR_interactivity/flowGraphObjectReferenceBlock.js +38 -0
  19. package/glTF/2.0/Extensions/KHR_interactivity/flowGraphObjectReferenceBlock.js.map +1 -0
  20. package/glTF/2.0/Extensions/KHR_interactivity/flowGraphUnsupportedInteractivityBlock.d.ts +41 -0
  21. package/glTF/2.0/Extensions/KHR_interactivity/flowGraphUnsupportedInteractivityBlock.js +63 -0
  22. package/glTF/2.0/Extensions/KHR_interactivity/flowGraphUnsupportedInteractivityBlock.js.map +1 -0
  23. package/glTF/2.0/Extensions/KHR_interactivity/index.d.ts +6 -0
  24. package/glTF/2.0/Extensions/KHR_interactivity/index.js +6 -0
  25. package/glTF/2.0/Extensions/KHR_interactivity/index.js.map +1 -1
  26. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphExporter.d.ts +243 -0
  27. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphExporter.js +2335 -0
  28. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphExporter.js.map +1 -0
  29. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphModel.d.ts +193 -0
  30. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphModel.js +919 -0
  31. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphModel.js.map +1 -0
  32. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphParser.d.ts +30 -10
  33. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphParser.js +485 -54
  34. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphParser.js.map +1 -1
  35. package/glTF/2.0/Extensions/KHR_interactivity/interactivityHostResolver.d.ts +2 -1
  36. package/glTF/2.0/Extensions/KHR_interactivity/interactivityHostResolver.js +7 -2
  37. package/glTF/2.0/Extensions/KHR_interactivity/interactivityHostResolver.js.map +1 -1
  38. package/glTF/2.0/Extensions/KHR_interactivity/interactivityNodeState.d.ts +24 -0
  39. package/glTF/2.0/Extensions/KHR_interactivity/interactivityNodeState.js +89 -0
  40. package/glTF/2.0/Extensions/KHR_interactivity/interactivityNodeState.js.map +1 -0
  41. package/glTF/2.0/Extensions/KHR_interactivity/pure.d.ts +6 -0
  42. package/glTF/2.0/Extensions/KHR_interactivity/pure.js +6 -0
  43. package/glTF/2.0/Extensions/KHR_interactivity/pure.js.map +1 -1
  44. package/glTF/2.0/Extensions/KHR_interactivity.pure.d.ts +59 -1
  45. package/glTF/2.0/Extensions/KHR_interactivity.pure.js +129 -77
  46. package/glTF/2.0/Extensions/KHR_interactivity.pure.js.map +1 -1
  47. package/glTF/2.0/Extensions/KHR_interactivity.types.d.ts +18 -1
  48. package/glTF/2.0/Extensions/KHR_interactivity.types.js.map +1 -1
  49. package/glTF/2.0/Extensions/KHR_node_hoverability.pure.d.ts +2 -0
  50. package/glTF/2.0/Extensions/KHR_node_hoverability.pure.js +114 -56
  51. package/glTF/2.0/Extensions/KHR_node_hoverability.pure.js.map +1 -1
  52. package/glTF/2.0/Extensions/KHR_node_selectability.pure.d.ts +2 -0
  53. package/glTF/2.0/Extensions/KHR_node_selectability.pure.js +80 -35
  54. package/glTF/2.0/Extensions/KHR_node_selectability.pure.js.map +1 -1
  55. package/glTF/2.0/Extensions/KHR_texture_basisu.pure.js +1 -1
  56. package/glTF/2.0/Extensions/KHR_texture_basisu.pure.js.map +1 -1
  57. package/glTF/2.0/Extensions/interactivityRefPathToObjectConverter.js +3 -2
  58. package/glTF/2.0/Extensions/interactivityRefPathToObjectConverter.js.map +1 -1
  59. package/glTF/2.0/Extensions/objectModelMapping.d.ts +4 -2
  60. package/glTF/2.0/Extensions/objectModelMapping.js +33 -4
  61. package/glTF/2.0/Extensions/objectModelMapping.js.map +1 -1
  62. package/glTF/2.0/glTFLoader.pure.d.ts +3 -2
  63. package/glTF/2.0/glTFLoader.pure.js +50 -8
  64. package/glTF/2.0/glTFLoader.pure.js.map +1 -1
  65. package/glTF/2.0/glTFLoaderExtension.d.ts +2 -1
  66. package/glTF/2.0/glTFLoaderExtension.js.map +1 -1
  67. package/glTF/2.0/glTFLoaderInterfaces.d.ts +9 -0
  68. package/glTF/2.0/glTFLoaderInterfaces.js.map +1 -1
  69. package/package.json +3 -3
@@ -362,10 +362,11 @@ export declare class GLTFLoader implements IGLTFLoader {
362
362
  * @internal
363
363
  */
364
364
  _loadTextureAsync(context: string, texture: ITexture, assign?: (babylonTexture: BaseTexture) => void): Promise<BaseTexture>;
365
+ private _trackTexture;
365
366
  /**
366
367
  * @internal
367
368
  */
368
- _createTextureAsync(context: string, sampler: ISampler, image: IImage, assign?: (babylonTexture: BaseTexture) => void, textureLoaderOptions?: unknown, useSRGBBuffer?: boolean): Promise<BaseTexture>;
369
+ _createTextureAsync(context: string, sampler: ISampler, image: IImage, assign?: (babylonTexture: BaseTexture) => void, textureLoaderOptions?: unknown, useSRGBBuffer?: boolean, sourceTexture?: ITexture): Promise<BaseTexture>;
369
370
  private _loadSampler;
370
371
  /**
371
372
  * Loads a glTF image.
@@ -403,7 +404,7 @@ export declare class GLTFLoader implements IGLTFLoader {
403
404
  private _forEachExtensions;
404
405
  private _applyExtensions;
405
406
  private _extensionsOnLoading;
406
- private _extensionsOnReady;
407
+ private _extensionsOnReadyAsync;
407
408
  private _extensionsLoadSceneAsync;
408
409
  private _extensionsLoadNodeAsync;
409
410
  private _extensionsLoadCameraAsync;
@@ -405,7 +405,7 @@ export class GLTFLoader {
405
405
  if (this._parent.compileShadowGenerators) {
406
406
  promises.push(this._compileShadowGeneratorsAsync());
407
407
  }
408
- const resultPromise = Promise.all(promises).then(() => {
408
+ const resultPromise = Promise.all(promises).then(async () => {
409
409
  if (this._rootBabylonMesh && this._rootBabylonMesh !== this._parent.customRootNode) {
410
410
  this._rootBabylonMesh.setEnabled(true);
411
411
  }
@@ -422,7 +422,7 @@ export class GLTFLoader {
422
422
  for (const adapter of Array.from(this._materialAdapters)) {
423
423
  this._completePromises.push(adapter.finalizeAsync(this));
424
424
  }
425
- this._extensionsOnReady();
425
+ await this._extensionsOnReadyAsync();
426
426
  this._parent._setState(GLTFLoaderState.READY);
427
427
  if (!this._skipStartAnimationStep) {
428
428
  this._startAnimations();
@@ -2061,7 +2061,13 @@ export class GLTFLoader {
2061
2061
  loadTextureInfoAsync(context, textureInfo, assign = () => { }) {
2062
2062
  const extensionPromise = this._extensionsLoadTextureInfoAsync(context, textureInfo, assign);
2063
2063
  if (extensionPromise) {
2064
- return extensionPromise;
2064
+ return extensionPromise.then((babylonTexture) => {
2065
+ const texture = this._gltf.textures?.[textureInfo.index];
2066
+ if (texture) {
2067
+ this._trackTexture(texture, babylonTexture);
2068
+ }
2069
+ return babylonTexture;
2070
+ });
2065
2071
  }
2066
2072
  this.logOpen(`${context}`);
2067
2073
  if (textureInfo.texCoord >= 6) {
@@ -2082,21 +2088,49 @@ export class GLTFLoader {
2082
2088
  * @internal
2083
2089
  */
2084
2090
  _loadTextureAsync(context, texture, assign = () => { }) {
2085
- const extensionPromise = this._extensionsLoadTextureAsync(context, texture, assign);
2091
+ const trackAndAssign = (babylonTexture) => {
2092
+ this._trackTexture(texture, babylonTexture);
2093
+ assign(babylonTexture);
2094
+ };
2095
+ const extensionPromise = this._extensionsLoadTextureAsync(context, texture, trackAndAssign);
2086
2096
  if (extensionPromise) {
2087
2097
  return extensionPromise;
2088
2098
  }
2089
2099
  this.logOpen(`${context} ${texture.name || ""}`);
2090
2100
  const sampler = texture.sampler == undefined ? GLTFLoader.DefaultSampler : ArrayItem.Get(`${context}/sampler`, this._gltf.samplers, texture.sampler);
2091
2101
  const image = ArrayItem.Get(`${context}/source`, this._gltf.images, texture.source);
2092
- const promise = this._createTextureAsync(context, sampler, image, assign, undefined, !texture._textureInfo.nonColorData);
2102
+ const promise = this._createTextureAsync(context, sampler, image, trackAndAssign, undefined, !texture._textureInfo.nonColorData, texture);
2093
2103
  this.logClose();
2094
2104
  return promise;
2095
2105
  }
2106
+ _trackTexture(texture, babylonTexture, imageIndex, samplerIndex) {
2107
+ texture._babylonTextures || (texture._babylonTextures = []);
2108
+ if (!texture._babylonTextures.includes(babylonTexture)) {
2109
+ texture._babylonTextures.push(babylonTexture);
2110
+ }
2111
+ texture._babylonTextureSources || (texture._babylonTextureSources = []);
2112
+ const existing = texture._babylonTextureSources.find((source) => source.babylonTexture === babylonTexture);
2113
+ const fallback = texture._babylonTextureSources[texture._babylonTextureSources.length - 1];
2114
+ const resolvedImageIndex = imageIndex ?? existing?.imageIndex ?? fallback?.imageIndex;
2115
+ if (resolvedImageIndex === undefined) {
2116
+ return;
2117
+ }
2118
+ if (existing) {
2119
+ existing.imageIndex = resolvedImageIndex;
2120
+ existing.samplerIndex = samplerIndex ?? existing.samplerIndex ?? fallback?.samplerIndex;
2121
+ }
2122
+ else {
2123
+ texture._babylonTextureSources.push({
2124
+ babylonTexture,
2125
+ imageIndex: resolvedImageIndex,
2126
+ samplerIndex: samplerIndex ?? fallback?.samplerIndex,
2127
+ });
2128
+ }
2129
+ }
2096
2130
  /**
2097
2131
  * @internal
2098
2132
  */
2099
- _createTextureAsync(context, sampler, image, assign = () => { }, textureLoaderOptions, useSRGBBuffer) {
2133
+ _createTextureAsync(context, sampler, image, assign = () => { }, textureLoaderOptions, useSRGBBuffer, sourceTexture) {
2100
2134
  const samplerData = this._loadSampler(`/samplers/${sampler.index}`, sampler);
2101
2135
  const promises = new Array();
2102
2136
  const deferred = new Deferred();
@@ -2120,6 +2154,9 @@ export class GLTFLoader {
2120
2154
  useSRGBBuffer: !!useSRGBBuffer && this._parent.useSRGBBuffers,
2121
2155
  };
2122
2156
  const babylonTexture = new Texture(null, this._babylonScene, textureCreationOptions);
2157
+ if (sourceTexture) {
2158
+ this._trackTexture(sourceTexture, babylonTexture, image.index, sampler.index >= 0 ? sampler.index : undefined);
2159
+ }
2123
2160
  babylonTexture._parentContainer = this._assetContainer;
2124
2161
  this._babylonScene._blockEntityCollection = false;
2125
2162
  promises.push(deferred.promise);
@@ -2424,8 +2461,13 @@ export class GLTFLoader {
2424
2461
  _extensionsOnLoading() {
2425
2462
  this._forEachExtensions((extension) => extension.onLoading && extension.onLoading());
2426
2463
  }
2427
- _extensionsOnReady() {
2428
- this._forEachExtensions((extension) => extension.onReady && extension.onReady());
2464
+ async _extensionsOnReadyAsync() {
2465
+ for (const extension of this._extensions) {
2466
+ if (extension.enabled && extension.onReady) {
2467
+ // eslint-disable-next-line no-await-in-loop -- extension order can define readiness dependencies
2468
+ await extension.onReady();
2469
+ }
2470
+ }
2429
2471
  }
2430
2472
  _extensionsLoadSceneAsync(context, scene) {
2431
2473
  return this._applyExtensions(scene, "loadScene", (extension) => extension.loadSceneAsync && extension.loadSceneAsync(context, scene));