@loaders.gl/gltf 3.1.0-alpha.4 → 3.1.0-beta.3
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/bundle.d.ts +2 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/bundle.js +4518 -0
- package/dist/es5/bundle.js +1 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/glb-loader.js +10 -33
- package/dist/es5/glb-loader.js.map +1 -1
- package/dist/es5/glb-writer.js +9 -8
- package/dist/es5/glb-writer.js.map +1 -1
- package/dist/es5/gltf-loader.js +14 -52
- package/dist/es5/gltf-loader.js.map +1 -1
- package/dist/es5/gltf-writer.js +10 -10
- package/dist/es5/gltf-writer.js.map +1 -1
- package/dist/es5/index.js +6 -6
- package/dist/es5/lib/api/gltf-extensions.js +18 -106
- package/dist/es5/lib/api/gltf-extensions.js.map +1 -1
- package/dist/es5/lib/api/gltf-scenegraph.js +447 -541
- package/dist/es5/lib/api/gltf-scenegraph.js.map +1 -1
- package/dist/es5/lib/api/normalize-gltf-v1.js +154 -279
- package/dist/es5/lib/api/normalize-gltf-v1.js.map +1 -1
- package/dist/es5/lib/api/post-process-gltf.js +301 -349
- package/dist/es5/lib/api/post-process-gltf.js.map +1 -1
- package/dist/es5/lib/encoders/encode-glb.js +19 -22
- package/dist/es5/lib/encoders/encode-glb.js.map +1 -1
- package/dist/es5/lib/encoders/encode-gltf.js +3 -5
- package/dist/es5/lib/encoders/encode-gltf.js.map +1 -1
- package/dist/es5/lib/extensions/EXT_meshopt_compression.js +39 -104
- package/dist/es5/lib/extensions/EXT_meshopt_compression.js.map +1 -1
- package/dist/es5/lib/extensions/EXT_texture_webp.js +12 -26
- package/dist/es5/lib/extensions/EXT_texture_webp.js.map +1 -1
- package/dist/es5/lib/extensions/KHR_binary_gltf.js +12 -26
- package/dist/es5/lib/extensions/KHR_binary_gltf.js.map +1 -1
- package/dist/es5/lib/extensions/KHR_draco_mesh_compression.js +76 -261
- package/dist/es5/lib/extensions/KHR_draco_mesh_compression.js.map +1 -1
- package/dist/es5/lib/extensions/KHR_texture_basisu.js +12 -26
- package/dist/es5/lib/extensions/KHR_texture_basisu.js.map +1 -1
- package/dist/es5/lib/extensions/deprecated/KHR_lights_punctual.js +40 -104
- package/dist/es5/lib/extensions/deprecated/KHR_lights_punctual.js.map +1 -1
- package/dist/es5/lib/extensions/deprecated/KHR_materials_unlit.js +24 -69
- package/dist/es5/lib/extensions/deprecated/KHR_materials_unlit.js.map +1 -1
- package/dist/es5/lib/extensions/deprecated/KHR_techniques_webgl.js +34 -90
- package/dist/es5/lib/extensions/deprecated/KHR_techniques_webgl.js.map +1 -1
- package/dist/es5/lib/gltf-utils/get-typed-array.js +6 -6
- package/dist/es5/lib/gltf-utils/get-typed-array.js.map +1 -1
- package/dist/es5/lib/gltf-utils/gltf-attribute-utils.js +19 -21
- package/dist/es5/lib/gltf-utils/gltf-attribute-utils.js.map +1 -1
- package/dist/es5/lib/gltf-utils/gltf-constants.js +7 -7
- package/dist/es5/lib/gltf-utils/gltf-constants.js.map +1 -1
- package/dist/es5/lib/gltf-utils/gltf-utils.js +16 -16
- package/dist/es5/lib/gltf-utils/gltf-utils.js.map +1 -1
- package/dist/es5/lib/gltf-utils/resolve-url.js +2 -2
- package/dist/es5/lib/gltf-utils/resolve-url.js.map +1 -1
- package/dist/es5/lib/parsers/parse-glb.js +34 -38
- package/dist/es5/lib/parsers/parse-glb.js.map +1 -1
- package/dist/es5/lib/parsers/parse-gltf.js +107 -249
- package/dist/es5/lib/parsers/parse-gltf.js.map +1 -1
- package/dist/es5/lib/utils/assert.js.map +1 -1
- package/dist/es5/lib/utils/version.js +1 -1
- package/dist/es5/lib/utils/version.js.map +1 -1
- package/dist/es5/meshopt/meshopt-decoder.js +46 -197
- package/dist/es5/meshopt/meshopt-decoder.js.map +1 -1
- package/dist/es5/webp/webp.js +16 -84
- package/dist/es5/webp/webp.js.map +1 -1
- package/dist/esm/lib/api/gltf-scenegraph.js +1 -1
- package/dist/esm/lib/api/gltf-scenegraph.js.map +1 -1
- package/dist/esm/lib/api/normalize-gltf-v1.js +9 -6
- package/dist/esm/lib/api/normalize-gltf-v1.js.map +1 -1
- package/dist/esm/lib/api/post-process-gltf.js +42 -15
- package/dist/esm/lib/api/post-process-gltf.js.map +1 -1
- package/dist/esm/lib/encoders/encode-glb.js.map +1 -1
- package/dist/esm/lib/encoders/encode-gltf.js.map +1 -1
- package/dist/esm/lib/extensions/EXT_meshopt_compression.js +1 -1
- package/dist/esm/lib/extensions/EXT_meshopt_compression.js.map +1 -1
- package/dist/esm/lib/extensions/EXT_texture_webp.js +1 -1
- package/dist/esm/lib/extensions/EXT_texture_webp.js.map +1 -1
- package/dist/esm/lib/extensions/KHR_texture_basisu.js.map +1 -1
- package/dist/esm/lib/gltf-utils/resolve-url.js +1 -1
- package/dist/esm/lib/gltf-utils/resolve-url.js.map +1 -1
- package/dist/esm/lib/parsers/parse-glb.js +2 -6
- package/dist/esm/lib/parsers/parse-glb.js.map +1 -1
- package/dist/esm/lib/parsers/parse-gltf.js +19 -2
- package/dist/esm/lib/parsers/parse-gltf.js.map +1 -1
- package/dist/esm/lib/utils/assert.js.map +1 -1
- package/dist/esm/lib/utils/version.js +1 -1
- package/dist/esm/lib/utils/version.js.map +1 -1
- package/dist/esm/meshopt/meshopt-decoder.js +1 -1
- package/dist/esm/meshopt/meshopt-decoder.js.map +1 -1
- package/dist/esm/webp/webp.js +1 -1
- package/dist/esm/webp/webp.js.map +1 -1
- package/dist/glb-loader.d.ts +13 -0
- package/dist/glb-loader.d.ts.map +1 -0
- package/dist/glb-loader.js +39 -0
- package/dist/glb-writer.d.ts +22 -0
- package/dist/glb-writer.d.ts.map +1 -0
- package/dist/glb-writer.js +37 -0
- package/dist/gltf-loader.d.ts +18 -0
- package/dist/gltf-loader.d.ts.map +1 -0
- package/dist/gltf-loader.js +50 -0
- package/dist/gltf-writer.d.ts +25 -0
- package/dist/gltf-writer.d.ts.map +1 -0
- package/dist/gltf-writer.js +32 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/lib/api/gltf-extensions.d.ts +26 -0
- package/dist/lib/api/gltf-extensions.d.ts.map +1 -0
- package/dist/lib/api/gltf-extensions.js +75 -0
- package/dist/lib/api/gltf-scenegraph.d.ts +183 -0
- package/dist/lib/api/gltf-scenegraph.d.ts.map +1 -0
- package/dist/lib/api/gltf-scenegraph.js +553 -0
- package/dist/lib/api/normalize-gltf-v1.d.ts +2 -0
- package/dist/lib/api/normalize-gltf-v1.d.ts.map +1 -0
- package/dist/lib/api/normalize-gltf-v1.js +295 -0
- package/dist/lib/api/post-process-gltf.d.ts +2 -0
- package/dist/lib/api/post-process-gltf.d.ts.map +1 -0
- package/dist/lib/api/post-process-gltf.js +367 -0
- package/dist/lib/encoders/encode-glb.d.ts +2 -0
- package/dist/lib/encoders/encode-glb.d.ts.map +1 -0
- package/dist/lib/encoders/encode-glb.js +61 -0
- package/dist/lib/encoders/encode-gltf.d.ts +2 -0
- package/dist/lib/encoders/encode-gltf.d.ts.map +1 -0
- package/dist/lib/encoders/encode-gltf.js +27 -0
- package/dist/lib/extensions/EXT_meshopt_compression.d.ts +10 -0
- package/dist/lib/extensions/EXT_meshopt_compression.d.ts.map +1 -0
- package/dist/lib/extensions/EXT_meshopt_compression.js +54 -0
- package/dist/lib/extensions/EXT_texture_webp.d.ts +12 -0
- package/dist/lib/extensions/EXT_texture_webp.d.ts.map +1 -0
- package/dist/lib/extensions/EXT_texture_webp.js +38 -0
- package/dist/lib/extensions/KHR_binary_gltf.d.ts +7 -0
- package/dist/lib/extensions/KHR_binary_gltf.d.ts.map +1 -0
- package/dist/lib/extensions/KHR_binary_gltf.js +42 -0
- package/dist/lib/extensions/KHR_draco_mesh_compression.d.ts +13 -0
- package/dist/lib/extensions/KHR_draco_mesh_compression.d.ts.map +1 -0
- package/dist/lib/extensions/KHR_draco_mesh_compression.js +141 -0
- package/dist/lib/extensions/KHR_texture_basisu.d.ts +12 -0
- package/dist/lib/extensions/KHR_texture_basisu.d.ts.map +1 -0
- package/dist/lib/extensions/KHR_texture_basisu.js +31 -0
- package/dist/lib/extensions/deprecated/KHR_lights_punctual.d.ts +7 -0
- package/dist/lib/extensions/deprecated/KHR_lights_punctual.d.ts.map +1 -0
- package/dist/lib/extensions/deprecated/KHR_lights_punctual.js +62 -0
- package/dist/lib/extensions/deprecated/KHR_materials_unlit.d.ts +7 -0
- package/dist/lib/extensions/deprecated/KHR_materials_unlit.d.ts.map +1 -0
- package/dist/lib/extensions/deprecated/KHR_materials_unlit.js +47 -0
- package/dist/lib/extensions/deprecated/KHR_techniques_webgl.d.ts +7 -0
- package/dist/lib/extensions/deprecated/KHR_techniques_webgl.d.ts.map +1 -0
- package/dist/lib/extensions/deprecated/KHR_techniques_webgl.js +81 -0
- package/dist/lib/gltf-utils/get-typed-array.d.ts +3 -0
- package/dist/lib/gltf-utils/get-typed-array.d.ts.map +1 -0
- package/dist/lib/gltf-utils/get-typed-array.js +41 -0
- package/dist/lib/gltf-utils/gltf-attribute-utils.d.ts +6 -0
- package/dist/lib/gltf-utils/gltf-attribute-utils.d.ts.map +1 -0
- package/dist/lib/gltf-utils/gltf-attribute-utils.js +73 -0
- package/dist/lib/gltf-utils/gltf-constants.d.ts +4 -0
- package/dist/lib/gltf-utils/gltf-constants.d.ts.map +1 -0
- package/dist/lib/gltf-utils/gltf-constants.js +43 -0
- package/dist/lib/gltf-utils/gltf-utils.d.ts +8 -0
- package/dist/lib/gltf-utils/gltf-utils.d.ts.map +1 -0
- package/dist/lib/gltf-utils/gltf-utils.js +63 -0
- package/dist/lib/gltf-utils/resolve-url.d.ts +2 -0
- package/dist/lib/gltf-utils/resolve-url.d.ts.map +1 -0
- package/dist/lib/gltf-utils/resolve-url.js +18 -0
- package/dist/lib/parsers/parse-glb.d.ts +8 -0
- package/dist/lib/parsers/parse-glb.d.ts.map +1 -0
- package/dist/lib/parsers/parse-glb.js +141 -0
- package/dist/lib/parsers/parse-gltf.d.ts +14 -0
- package/dist/lib/parsers/parse-gltf.d.ts.map +1 -0
- package/dist/lib/parsers/parse-gltf.js +189 -0
- package/dist/lib/types/glb-types.d.ts +17 -0
- package/dist/lib/types/glb-types.d.ts.map +1 -0
- package/dist/lib/types/glb-types.js +2 -0
- package/dist/lib/types/gltf-json-schema.d.ts +720 -0
- package/dist/lib/types/gltf-json-schema.d.ts.map +1 -0
- package/dist/lib/types/gltf-json-schema.js +4 -0
- package/dist/lib/types/gltf-postprocessed-schema.d.ts +685 -0
- package/dist/lib/types/gltf-postprocessed-schema.d.ts.map +1 -0
- package/dist/lib/types/gltf-postprocessed-schema.js +4 -0
- package/dist/lib/types/gltf-types.d.ts +10 -0
- package/dist/lib/types/gltf-types.d.ts.map +1 -0
- package/dist/lib/types/gltf-types.js +3 -0
- package/dist/lib/utils/assert.d.ts +2 -0
- package/dist/lib/utils/assert.d.ts.map +1 -0
- package/dist/lib/utils/assert.js +12 -0
- package/dist/lib/utils/version.d.ts +2 -0
- package/dist/lib/utils/version.d.ts.map +1 -0
- package/dist/lib/utils/version.js +7 -0
- package/dist/meshopt/meshopt-decoder.d.ts +6 -0
- package/dist/meshopt/meshopt-decoder.d.ts.map +1 -0
- package/dist/meshopt/meshopt-decoder.js +118 -0
- package/dist/webp/webp.d.ts +7 -0
- package/dist/webp/webp.d.ts.map +1 -0
- package/dist/webp/webp.js +38 -0
- package/package.json +11 -8
- package/src/lib/api/{normalize-gltf-v1.js → normalize-gltf-v1.ts} +18 -16
- package/src/lib/api/{post-process-gltf.js → post-process-gltf.ts} +41 -3
- package/src/lib/encoders/{encode-glb.js → encode-glb.ts} +0 -0
- package/src/lib/encoders/{encode-gltf.js → encode-gltf.ts} +0 -0
- package/src/lib/extensions/KHR_texture_basisu.ts +2 -2
- package/src/lib/parsers/parse-gltf.ts +17 -1
- package/src/lib/utils/{assert.js → assert.ts} +1 -1
- package/src/lib/utils/{version.js → version.ts} +0 -0
- package/dist/dist.min.js +0 -2
- package/dist/dist.min.js.map +0 -1
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.parseGLTF = exports.isGLTF = void 0;
|
|
23
|
+
const textures_1 = require("@loaders.gl/textures");
|
|
24
|
+
const images_1 = require("@loaders.gl/images");
|
|
25
|
+
const loader_utils_1 = require("@loaders.gl/loader-utils");
|
|
26
|
+
const assert_1 = require("../utils/assert");
|
|
27
|
+
const resolve_url_1 = require("../gltf-utils/resolve-url");
|
|
28
|
+
const get_typed_array_1 = require("../gltf-utils/get-typed-array");
|
|
29
|
+
const gltf_extensions_1 = require("../api/gltf-extensions");
|
|
30
|
+
const normalize_gltf_v1_1 = require("../api/normalize-gltf-v1");
|
|
31
|
+
const post_process_gltf_1 = require("../api/post-process-gltf");
|
|
32
|
+
const parse_glb_1 = __importStar(require("./parse-glb"));
|
|
33
|
+
// export type GLTFOptions = {
|
|
34
|
+
// gltf?: GLTFParseOptions;
|
|
35
|
+
// };
|
|
36
|
+
function isGLTF(arrayBuffer, options) {
|
|
37
|
+
const byteOffset = 0;
|
|
38
|
+
return (0, parse_glb_1.isGLB)(arrayBuffer, byteOffset, options);
|
|
39
|
+
}
|
|
40
|
+
exports.isGLTF = isGLTF;
|
|
41
|
+
async function parseGLTF(gltf, arrayBufferOrString, byteOffset = 0, options, context) {
|
|
42
|
+
parseGLTFContainerSync(gltf, arrayBufferOrString, byteOffset, options);
|
|
43
|
+
(0, normalize_gltf_v1_1.normalizeGLTFV1)(gltf, { normalize: options?.gltf?.normalize });
|
|
44
|
+
(0, gltf_extensions_1.preprocessExtensions)(gltf, options, context);
|
|
45
|
+
const promises = [];
|
|
46
|
+
// Load linked buffers asynchronously and decodes base64 buffers in parallel
|
|
47
|
+
if (options?.gltf?.loadBuffers && gltf.json.buffers) {
|
|
48
|
+
await loadBuffers(gltf, options, context);
|
|
49
|
+
}
|
|
50
|
+
if (options?.gltf?.loadImages) {
|
|
51
|
+
const promise = loadImages(gltf, options, context);
|
|
52
|
+
promises.push(promise);
|
|
53
|
+
}
|
|
54
|
+
const promise = (0, gltf_extensions_1.decodeExtensions)(gltf, options, context);
|
|
55
|
+
promises.push(promise);
|
|
56
|
+
// Parallelize image loading and buffer loading/extension decoding
|
|
57
|
+
await Promise.all(promises);
|
|
58
|
+
// Post processing resolves indices to objects, buffers
|
|
59
|
+
return options?.gltf?.postProcess ? (0, post_process_gltf_1.postProcessGLTF)(gltf, options) : gltf;
|
|
60
|
+
}
|
|
61
|
+
exports.parseGLTF = parseGLTF;
|
|
62
|
+
// `data` - can be ArrayBuffer (GLB), ArrayBuffer (Binary JSON), String (JSON), or Object (parsed JSON)
|
|
63
|
+
function parseGLTFContainerSync(gltf, data, byteOffset, options) {
|
|
64
|
+
// Initialize gltf container
|
|
65
|
+
if (options.uri) {
|
|
66
|
+
gltf.baseUri = options.uri;
|
|
67
|
+
}
|
|
68
|
+
// If data is binary and starting with magic bytes, assume binary JSON text, convert to string
|
|
69
|
+
if (data instanceof ArrayBuffer && !(0, parse_glb_1.isGLB)(data, byteOffset, options)) {
|
|
70
|
+
const textDecoder = new TextDecoder();
|
|
71
|
+
data = textDecoder.decode(data);
|
|
72
|
+
}
|
|
73
|
+
if (typeof data === 'string') {
|
|
74
|
+
// If string, try to parse as JSON
|
|
75
|
+
gltf.json = (0, loader_utils_1.parseJSON)(data);
|
|
76
|
+
}
|
|
77
|
+
else if (data instanceof ArrayBuffer) {
|
|
78
|
+
// If still ArrayBuffer, parse as GLB container
|
|
79
|
+
const glb = {};
|
|
80
|
+
byteOffset = (0, parse_glb_1.default)(glb, data, byteOffset, options.glb);
|
|
81
|
+
(0, assert_1.assert)(glb.type === 'glTF', `Invalid GLB magic string ${glb.type}`);
|
|
82
|
+
gltf._glb = glb;
|
|
83
|
+
gltf.json = glb.json;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
(0, assert_1.assert)(false, 'GLTF: must be ArrayBuffer or string');
|
|
87
|
+
}
|
|
88
|
+
// Populate buffers
|
|
89
|
+
// Create an external buffers array to hold binary data
|
|
90
|
+
const buffers = gltf.json.buffers || [];
|
|
91
|
+
gltf.buffers = new Array(buffers.length).fill(null);
|
|
92
|
+
// Populates JSON and some bin chunk info
|
|
93
|
+
if (gltf._glb && gltf._glb.header.hasBinChunk) {
|
|
94
|
+
const { binChunks } = gltf._glb;
|
|
95
|
+
gltf.buffers[0] = {
|
|
96
|
+
arrayBuffer: binChunks[0].arrayBuffer,
|
|
97
|
+
byteOffset: binChunks[0].byteOffset,
|
|
98
|
+
byteLength: binChunks[0].byteLength
|
|
99
|
+
};
|
|
100
|
+
// TODO - this modifies JSON and is a post processing thing
|
|
101
|
+
// gltf.json.buffers[0].data = gltf.buffers[0].arrayBuffer;
|
|
102
|
+
// gltf.json.buffers[0].byteOffset = gltf.buffers[0].byteOffset;
|
|
103
|
+
}
|
|
104
|
+
// Populate images
|
|
105
|
+
const images = gltf.json.images || [];
|
|
106
|
+
gltf.images = new Array(images.length).fill({});
|
|
107
|
+
}
|
|
108
|
+
/** Asynchronously fetch and parse buffers, store in buffers array outside of json
|
|
109
|
+
* TODO - traverse gltf and determine which buffers are actually needed
|
|
110
|
+
*/
|
|
111
|
+
async function loadBuffers(gltf, options, context) {
|
|
112
|
+
// TODO
|
|
113
|
+
const buffers = gltf.json.buffers || [];
|
|
114
|
+
for (let i = 0; i < buffers.length; ++i) {
|
|
115
|
+
const buffer = buffers[i];
|
|
116
|
+
if (buffer.uri) {
|
|
117
|
+
const { fetch } = context;
|
|
118
|
+
(0, assert_1.assert)(fetch);
|
|
119
|
+
const uri = (0, resolve_url_1.resolveUrl)(buffer.uri, options);
|
|
120
|
+
const response = await context?.fetch?.(uri);
|
|
121
|
+
const arrayBuffer = await response?.arrayBuffer?.();
|
|
122
|
+
gltf.buffers[i] = {
|
|
123
|
+
arrayBuffer,
|
|
124
|
+
byteOffset: 0,
|
|
125
|
+
byteLength: arrayBuffer.byteLength
|
|
126
|
+
};
|
|
127
|
+
delete buffer.uri;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Loads all images
|
|
133
|
+
* TODO - traverse gltf and determine which images are actually needed
|
|
134
|
+
* @param gltf
|
|
135
|
+
* @param options
|
|
136
|
+
* @param context
|
|
137
|
+
* @returns
|
|
138
|
+
*/
|
|
139
|
+
async function loadImages(gltf, options, context) {
|
|
140
|
+
const imageIndices = getReferencesImageIndices(gltf);
|
|
141
|
+
const images = gltf.json.images || [];
|
|
142
|
+
const promises = [];
|
|
143
|
+
for (const imageIndex of imageIndices) {
|
|
144
|
+
promises.push(loadImage(gltf, images[imageIndex], imageIndex, options, context));
|
|
145
|
+
}
|
|
146
|
+
return await Promise.all(promises);
|
|
147
|
+
}
|
|
148
|
+
/** Make sure we only load images that are actually referenced by textures */
|
|
149
|
+
function getReferencesImageIndices(gltf) {
|
|
150
|
+
const imageIndices = new Set();
|
|
151
|
+
const textures = gltf.json.textures || [];
|
|
152
|
+
for (const texture of textures) {
|
|
153
|
+
if (texture.source !== undefined) {
|
|
154
|
+
imageIndices.add(texture.source);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return Array.from(imageIndices).sort();
|
|
158
|
+
}
|
|
159
|
+
/** Asynchronously fetches and parses one image, store in images array outside of json */
|
|
160
|
+
async function loadImage(gltf, image, index, options, context) {
|
|
161
|
+
const { fetch, parse } = context;
|
|
162
|
+
let arrayBuffer;
|
|
163
|
+
if (image.uri) {
|
|
164
|
+
const uri = (0, resolve_url_1.resolveUrl)(image.uri, options);
|
|
165
|
+
const response = await fetch(uri);
|
|
166
|
+
arrayBuffer = await response.arrayBuffer();
|
|
167
|
+
}
|
|
168
|
+
if (Number.isFinite(image.bufferView)) {
|
|
169
|
+
const array = (0, get_typed_array_1.getTypedArrayForBufferView)(gltf.json, gltf.buffers, image.bufferView);
|
|
170
|
+
arrayBuffer = (0, loader_utils_1.sliceArrayBuffer)(array.buffer, array.byteOffset, array.byteLength);
|
|
171
|
+
}
|
|
172
|
+
(0, assert_1.assert)(arrayBuffer, 'glTF image has no data');
|
|
173
|
+
// Call `parse`
|
|
174
|
+
let parsedImage = await parse(arrayBuffer, [images_1.ImageLoader, textures_1.BasisLoader], { mimeType: image.mimeType, basis: { format: (0, textures_1.selectSupportedBasisFormat)() } }, context);
|
|
175
|
+
if (parsedImage && parsedImage[0]) {
|
|
176
|
+
parsedImage = {
|
|
177
|
+
compressed: true,
|
|
178
|
+
mipmaps: false,
|
|
179
|
+
width: parsedImage[0].width,
|
|
180
|
+
height: parsedImage[0].height,
|
|
181
|
+
data: parsedImage
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
// TODO making sure ImageLoader is overridable by using array of loaders
|
|
185
|
+
// const parsedImage = await parse(arrayBuffer, [ImageLoader]);
|
|
186
|
+
// Store the loaded image
|
|
187
|
+
gltf.images = gltf.images || [];
|
|
188
|
+
gltf.images[index] = parsedImage;
|
|
189
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare type GLBBinChunk = {
|
|
2
|
+
byteOffset: number;
|
|
3
|
+
byteLength: number;
|
|
4
|
+
arrayBuffer: ArrayBuffer;
|
|
5
|
+
};
|
|
6
|
+
export declare type GLB = {
|
|
7
|
+
type: string;
|
|
8
|
+
version: number;
|
|
9
|
+
header: {
|
|
10
|
+
byteOffset: number;
|
|
11
|
+
byteLength: number;
|
|
12
|
+
hasBinChunk: boolean;
|
|
13
|
+
};
|
|
14
|
+
json: {};
|
|
15
|
+
binChunks: GLBBinChunk[];
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=glb-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glb-types.d.ts","sourceRoot":"","sources":["../../../src/lib/types/glb-types.ts"],"names":[],"mappings":"AAAA,oBAAY,WAAW,GAAG;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;CAC1B,CAAC;AAEF,oBAAY,GAAG,GAAG;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAGhB,MAAM,EAAE;QACN,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;IAGF,IAAI,EAAE,EAAE,CAAC;IACT,SAAS,EAAE,WAAW,EAAE,CAAC;CAC1B,CAAC"}
|