@loaders.gl/gltf 4.4.0-alpha.2 → 4.4.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 (110) hide show
  1. package/dist/dist.dev.js +491 -211
  2. package/dist/dist.min.js +1 -1
  3. package/dist/glb-loader.d.ts +9 -6
  4. package/dist/glb-loader.d.ts.map +1 -1
  5. package/dist/glb-loader.js +2 -2
  6. package/dist/glb-loader.js.map +1 -0
  7. package/dist/glb-writer.js +1 -0
  8. package/dist/glb-writer.js.map +1 -0
  9. package/dist/gltf-loader.d.ts +2 -3
  10. package/dist/gltf-loader.d.ts.map +1 -1
  11. package/dist/gltf-loader.js +6 -8
  12. package/dist/gltf-loader.js.map +1 -0
  13. package/dist/gltf-writer.js +1 -0
  14. package/dist/gltf-writer.js.map +1 -0
  15. package/dist/index.cjs +92 -56
  16. package/dist/index.cjs.map +4 -4
  17. package/dist/index.js +1 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/lib/api/gltf-extensions.js +1 -0
  20. package/dist/lib/api/gltf-extensions.js.map +1 -0
  21. package/dist/lib/api/gltf-scenegraph.js +1 -0
  22. package/dist/lib/api/gltf-scenegraph.js.map +1 -0
  23. package/dist/lib/api/normalize-gltf-v1.js +1 -0
  24. package/dist/lib/api/normalize-gltf-v1.js.map +1 -0
  25. package/dist/lib/api/post-process-gltf.d.ts.map +1 -1
  26. package/dist/lib/api/post-process-gltf.js +3 -1
  27. package/dist/lib/api/post-process-gltf.js.map +1 -0
  28. package/dist/lib/encoders/encode-glb.js +1 -0
  29. package/dist/lib/encoders/encode-glb.js.map +1 -0
  30. package/dist/lib/encoders/encode-gltf.js +1 -0
  31. package/dist/lib/encoders/encode-gltf.js.map +1 -0
  32. package/dist/lib/extensions/EXT_mesh_features.js +1 -0
  33. package/dist/lib/extensions/EXT_mesh_features.js.map +1 -0
  34. package/dist/lib/extensions/EXT_meshopt_compression.js +1 -0
  35. package/dist/lib/extensions/EXT_meshopt_compression.js.map +1 -0
  36. package/dist/lib/extensions/EXT_structural_metadata.d.ts.map +1 -1
  37. package/dist/lib/extensions/EXT_structural_metadata.js +3 -1
  38. package/dist/lib/extensions/EXT_structural_metadata.js.map +1 -0
  39. package/dist/lib/extensions/EXT_texture_webp.js +1 -0
  40. package/dist/lib/extensions/EXT_texture_webp.js.map +1 -0
  41. package/dist/lib/extensions/KHR_binary_gltf.js +1 -0
  42. package/dist/lib/extensions/KHR_binary_gltf.js.map +1 -0
  43. package/dist/lib/extensions/KHR_draco_mesh_compression.js +1 -0
  44. package/dist/lib/extensions/KHR_draco_mesh_compression.js.map +1 -0
  45. package/dist/lib/extensions/KHR_texture_basisu.js +1 -0
  46. package/dist/lib/extensions/KHR_texture_basisu.js.map +1 -0
  47. package/dist/lib/extensions/KHR_texture_transform.d.ts.map +1 -1
  48. package/dist/lib/extensions/KHR_texture_transform.js +36 -14
  49. package/dist/lib/extensions/KHR_texture_transform.js.map +1 -0
  50. package/dist/lib/extensions/deprecated/EXT_feature_metadata.js +1 -0
  51. package/dist/lib/extensions/deprecated/EXT_feature_metadata.js.map +1 -0
  52. package/dist/lib/extensions/deprecated/KHR_lights_punctual.js +1 -0
  53. package/dist/lib/extensions/deprecated/KHR_lights_punctual.js.map +1 -0
  54. package/dist/lib/extensions/deprecated/KHR_materials_unlit.js +1 -0
  55. package/dist/lib/extensions/deprecated/KHR_materials_unlit.js.map +1 -0
  56. package/dist/lib/extensions/deprecated/KHR_techniques_webgl.js +1 -0
  57. package/dist/lib/extensions/deprecated/KHR_techniques_webgl.js.map +1 -0
  58. package/dist/lib/extensions/utils/3d-tiles-utils.d.ts.map +1 -1
  59. package/dist/lib/extensions/utils/3d-tiles-utils.js +3 -1
  60. package/dist/lib/extensions/utils/3d-tiles-utils.js.map +1 -0
  61. package/dist/lib/gltf-utils/get-typed-array.d.ts +2 -2
  62. package/dist/lib/gltf-utils/get-typed-array.d.ts.map +1 -1
  63. package/dist/lib/gltf-utils/get-typed-array.js +1 -0
  64. package/dist/lib/gltf-utils/get-typed-array.js.map +1 -0
  65. package/dist/lib/gltf-utils/gltf-attribute-utils.js +1 -0
  66. package/dist/lib/gltf-utils/gltf-attribute-utils.js.map +1 -0
  67. package/dist/lib/gltf-utils/gltf-constants.js +1 -0
  68. package/dist/lib/gltf-utils/gltf-constants.js.map +1 -0
  69. package/dist/lib/gltf-utils/gltf-utils.js +1 -0
  70. package/dist/lib/gltf-utils/gltf-utils.js.map +1 -0
  71. package/dist/lib/gltf-utils/resolve-url.d.ts +2 -1
  72. package/dist/lib/gltf-utils/resolve-url.d.ts.map +1 -1
  73. package/dist/lib/gltf-utils/resolve-url.js +15 -4
  74. package/dist/lib/gltf-utils/resolve-url.js.map +1 -0
  75. package/dist/lib/parsers/parse-glb.js +1 -0
  76. package/dist/lib/parsers/parse-glb.js.map +1 -0
  77. package/dist/lib/parsers/parse-gltf.d.ts.map +1 -1
  78. package/dist/lib/parsers/parse-gltf.js +13 -11
  79. package/dist/lib/parsers/parse-gltf.js.map +1 -0
  80. package/dist/lib/types/glb-types.js +1 -0
  81. package/dist/lib/types/glb-types.js.map +1 -0
  82. package/dist/lib/types/gltf-ext-feature-metadata-schema.js +1 -0
  83. package/dist/lib/types/gltf-ext-feature-metadata-schema.js.map +1 -0
  84. package/dist/lib/types/gltf-ext-mesh-features-schema.js +1 -0
  85. package/dist/lib/types/gltf-ext-mesh-features-schema.js.map +1 -0
  86. package/dist/lib/types/gltf-ext-structural-metadata-schema.js +1 -0
  87. package/dist/lib/types/gltf-ext-structural-metadata-schema.js.map +1 -0
  88. package/dist/lib/types/gltf-json-schema.js +1 -0
  89. package/dist/lib/types/gltf-json-schema.js.map +1 -0
  90. package/dist/lib/types/gltf-postprocessed-schema.js +1 -0
  91. package/dist/lib/types/gltf-postprocessed-schema.js.map +1 -0
  92. package/dist/lib/types/gltf-types.js +1 -0
  93. package/dist/lib/types/gltf-types.js.map +1 -0
  94. package/dist/lib/utils/assert.js +1 -0
  95. package/dist/lib/utils/assert.js.map +1 -0
  96. package/dist/lib/utils/version.js +2 -1
  97. package/dist/lib/utils/version.js.map +1 -0
  98. package/dist/meshopt/meshopt-decoder.js +1 -0
  99. package/dist/meshopt/meshopt-decoder.js.map +1 -0
  100. package/dist/webp/webp.js +1 -0
  101. package/dist/webp/webp.js.map +1 -0
  102. package/package.json +7 -7
  103. package/src/glb-loader.ts +10 -8
  104. package/src/gltf-loader.ts +8 -12
  105. package/src/lib/api/post-process-gltf.ts +3 -2
  106. package/src/lib/extensions/EXT_structural_metadata.ts +2 -1
  107. package/src/lib/extensions/KHR_texture_transform.ts +41 -17
  108. package/src/lib/extensions/utils/3d-tiles-utils.ts +2 -1
  109. package/src/lib/gltf-utils/resolve-url.ts +19 -4
  110. package/src/lib/parsers/parse-gltf.ts +16 -13
@@ -14,6 +14,7 @@ import type {ImageType} from '@loaders.gl/images';
14
14
  import {GLTFScenegraph} from '../../api/gltf-scenegraph';
15
15
  import {getComponentTypeFromArray} from '../../gltf-utils/gltf-utils';
16
16
  import {getImageData} from '@loaders.gl/images';
17
+ import {ensureArrayBuffer} from '@loaders.gl/loader-utils';
17
18
 
18
19
  function emod(n: number): number {
19
20
  return ((n % 1) + 1) % 1;
@@ -140,7 +141,7 @@ export function convertRawBufferToMetadataArray(
140
141
  buffer = bufferArray.slice(offset, offset + byteLength).buffer;
141
142
  offset = 0;
142
143
  }
143
- return new ArrayType(buffer, offset, length);
144
+ return new ArrayType(ensureArrayBuffer(buffer), offset, length);
144
145
  }
145
146
 
146
147
  /**
@@ -1,14 +1,29 @@
1
+ import type {LoaderContext, StrictLoaderOptions} from '@loaders.gl/loader-utils';
2
+
1
3
  // Resolves a relative url against a baseUrl
2
4
  // If url is absolute, return it unchanged
3
- export function resolveUrl(url, options) {
5
+ export function resolveUrl(url: string, options?: StrictLoaderOptions, context?: LoaderContext) {
4
6
  // TODO: Use better logic to handle all protocols plus not delay on data
5
7
  const absolute = url.startsWith('data:') || url.startsWith('http:') || url.startsWith('https:');
6
8
  if (absolute) {
7
9
  return url;
8
10
  }
9
- const baseUrl = options.baseUri || options.uri;
11
+ const baseUrl = context?.baseUrl || getResolveBaseUrl(options?.core?.baseUrl);
10
12
  if (!baseUrl) {
11
- throw new Error(`'baseUri' must be provided to resolve relative url ${url}`);
13
+ throw new Error(`'baseUrl' must be provided to resolve relative url ${url}`);
12
14
  }
13
- return baseUrl.substr(0, baseUrl.lastIndexOf('/') + 1) + url;
15
+ return baseUrl.endsWith('/') ? `${baseUrl}${url}` : `${baseUrl}/${url}`;
16
+ }
17
+
18
+ function getResolveBaseUrl(baseUrl?: string): string | undefined {
19
+ if (!baseUrl) {
20
+ return undefined;
21
+ }
22
+
23
+ if (baseUrl.endsWith('/')) {
24
+ return baseUrl;
25
+ }
26
+
27
+ const slashIndex = baseUrl.lastIndexOf('/');
28
+ return slashIndex >= 0 ? baseUrl.slice(0, slashIndex + 1) : '';
14
29
  }
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable camelcase, max-statements, no-restricted-globals */
2
- import type {LoaderContext} from '@loaders.gl/loader-utils';
2
+ import type {LoaderContext, StrictLoaderOptions} from '@loaders.gl/loader-utils';
3
3
  import type {GLTFLoaderOptions} from '../../gltf-loader';
4
4
  import type {GLTFWithBuffers} from '../types/gltf-types';
5
5
  import type {GLB} from '../types/glb-types';
@@ -8,7 +8,7 @@ import type {ParseGLBOptions} from './parse-glb';
8
8
  import type {ImageType, TextureLevel} from '@loaders.gl/schema';
9
9
  import {parseJSON, sliceArrayBuffer, parseFromContext} from '@loaders.gl/loader-utils';
10
10
  import {ImageLoader} from '@loaders.gl/images';
11
- import {BasisLoader, selectSupportedBasisFormat} from '@loaders.gl/textures';
11
+ import {BasisLoader} from '@loaders.gl/textures';
12
12
 
13
13
  import {assert} from '../utils/assert';
14
14
  import {isGLB, parseGLBSync} from './parse-glb';
@@ -70,14 +70,14 @@ export async function parseGLTF(
70
70
  * @param byteOffset
71
71
  * @param options
72
72
  */
73
- function parseGLTFContainerSync(gltf, data, byteOffset, options) {
73
+ function parseGLTFContainerSync(gltf, data, byteOffset, options: GLTFLoaderOptions) {
74
74
  // Initialize gltf container
75
- if (options.uri) {
76
- gltf.baseUri = options.uri;
75
+ if (options.core?.baseUrl) {
76
+ gltf.baseUri = options.core?.baseUrl;
77
77
  }
78
78
 
79
79
  // If data is binary and starting with magic bytes, assume binary JSON text, convert to string
80
- if (data instanceof ArrayBuffer && !isGLB(data, byteOffset, options)) {
80
+ if (data instanceof ArrayBuffer && !isGLB(data, byteOffset, options.glb)) {
81
81
  const textDecoder = new TextDecoder();
82
82
  data = textDecoder.decode(data);
83
83
  }
@@ -134,7 +134,7 @@ async function loadBuffers(gltf: GLTFWithBuffers, options, context: LoaderContex
134
134
  const {fetch} = context;
135
135
  assert(fetch);
136
136
 
137
- const uri = resolveUrl(buffer.uri, options);
137
+ const uri = resolveUrl(buffer.uri, options, context);
138
138
  const response = await context?.fetch?.(uri);
139
139
  const arrayBuffer = await response?.arrayBuffer?.();
140
140
 
@@ -201,7 +201,7 @@ async function loadImage(
201
201
  let arrayBuffer;
202
202
 
203
203
  if (image.uri && !image.hasOwnProperty('bufferView')) {
204
- const uri = resolveUrl(image.uri, options);
204
+ const uri = resolveUrl(image.uri, options, context);
205
205
 
206
206
  const {fetch} = context;
207
207
  const response = await fetch(uri);
@@ -219,15 +219,18 @@ async function loadImage(
219
219
 
220
220
  assert(arrayBuffer, 'glTF image has no data');
221
221
 
222
+ const strictOptions = options;
223
+
224
+ const gltfOptions = {
225
+ ...strictOptions,
226
+ core: {...strictOptions?.core, mimeType: image.mimeType}
227
+ } satisfies StrictLoaderOptions;
228
+
222
229
  // Call `parse`
223
230
  let parsedImage = (await parseFromContext(
224
231
  arrayBuffer,
225
232
  [ImageLoader, BasisLoader],
226
- {
227
- ...options,
228
- mimeType: image.mimeType,
229
- basis: options.basis || {format: selectSupportedBasisFormat()}
230
- },
233
+ gltfOptions,
231
234
  context
232
235
  )) as ImageType | TextureLevel[][];
233
236