@loaders.gl/gltf 3.4.0-alpha.2 → 3.4.0-alpha.4
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/es5/glb-loader.js +6 -9
- package/dist/es5/glb-loader.js.map +1 -1
- package/dist/es5/glb-writer.js +0 -3
- package/dist/es5/glb-writer.js.map +1 -1
- package/dist/es5/gltf-loader.js +15 -19
- package/dist/es5/gltf-loader.js.map +1 -1
- package/dist/es5/gltf-writer.js +0 -2
- package/dist/es5/gltf-writer.js.map +1 -1
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/api/gltf-extensions.js +36 -43
- package/dist/es5/lib/api/gltf-extensions.js.map +1 -1
- package/dist/es5/lib/api/gltf-scenegraph.js +31 -108
- package/dist/es5/lib/api/gltf-scenegraph.js.map +1 -1
- package/dist/es5/lib/api/normalize-gltf-v1.js +8 -33
- package/dist/es5/lib/api/normalize-gltf-v1.js.map +1 -1
- package/dist/es5/lib/api/post-process-gltf.js +5 -22
- package/dist/es5/lib/api/post-process-gltf.js.map +1 -1
- package/dist/es5/lib/encoders/encode-glb.js +0 -16
- package/dist/es5/lib/encoders/encode-glb.js.map +1 -1
- package/dist/es5/lib/encoders/encode-gltf.js +0 -2
- package/dist/es5/lib/encoders/encode-gltf.js.map +1 -1
- package/dist/es5/lib/extensions/EXT_meshopt_compression.js +48 -54
- package/dist/es5/lib/extensions/EXT_meshopt_compression.js.map +1 -1
- package/dist/es5/lib/extensions/EXT_texture_webp.js +1 -4
- package/dist/es5/lib/extensions/EXT_texture_webp.js.map +1 -1
- package/dist/es5/lib/extensions/KHR_binary_gltf.js +1 -7
- package/dist/es5/lib/extensions/KHR_binary_gltf.js.map +1 -1
- package/dist/es5/lib/extensions/KHR_draco_mesh_compression.js +117 -134
- package/dist/es5/lib/extensions/KHR_draco_mesh_compression.js.map +1 -1
- package/dist/es5/lib/extensions/KHR_texture_basisu.js +1 -4
- package/dist/es5/lib/extensions/KHR_texture_basisu.js.map +1 -1
- package/dist/es5/lib/extensions/KHR_texture_transform.js +18 -27
- package/dist/es5/lib/extensions/KHR_texture_transform.js.map +1 -1
- package/dist/es5/lib/extensions/deprecated/EXT_feature_metadata.js +7 -14
- package/dist/es5/lib/extensions/deprecated/EXT_feature_metadata.js.map +1 -1
- package/dist/es5/lib/extensions/deprecated/KHR_lights_punctual.js +52 -58
- package/dist/es5/lib/extensions/deprecated/KHR_lights_punctual.js.map +1 -1
- package/dist/es5/lib/extensions/deprecated/KHR_materials_unlit.js +22 -26
- package/dist/es5/lib/extensions/deprecated/KHR_materials_unlit.js.map +1 -1
- package/dist/es5/lib/extensions/deprecated/KHR_techniques_webgl.js +31 -40
- package/dist/es5/lib/extensions/deprecated/KHR_techniques_webgl.js.map +1 -1
- package/dist/es5/lib/gltf-utils/get-typed-array.js +0 -3
- package/dist/es5/lib/gltf-utils/get-typed-array.js.map +1 -1
- package/dist/es5/lib/gltf-utils/gltf-attribute-utils.js +0 -5
- package/dist/es5/lib/gltf-utils/gltf-attribute-utils.js.map +1 -1
- package/dist/es5/lib/gltf-utils/gltf-constants.js +0 -2
- package/dist/es5/lib/gltf-utils/gltf-constants.js.map +1 -1
- package/dist/es5/lib/gltf-utils/gltf-utils.js.map +1 -1
- package/dist/es5/lib/gltf-utils/resolve-url.js.map +1 -1
- package/dist/es5/lib/parsers/parse-glb.js +0 -16
- package/dist/es5/lib/parsers/parse-glb.js.map +1 -1
- package/dist/es5/lib/parsers/parse-gltf.js +145 -164
- 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 +69 -87
- package/dist/es5/meshopt/meshopt-decoder.js.map +1 -1
- package/dist/es5/webp/webp.js +40 -45
- package/dist/es5/webp/webp.js.map +1 -1
- package/dist/esm/bundle.js +0 -1
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/glb-loader.js +0 -2
- package/dist/esm/glb-loader.js.map +1 -1
- package/dist/esm/glb-writer.js +0 -4
- package/dist/esm/glb-writer.js.map +1 -1
- package/dist/esm/gltf-loader.js +0 -2
- package/dist/esm/gltf-loader.js.map +1 -1
- package/dist/esm/gltf-writer.js +0 -2
- package/dist/esm/gltf-writer.js.map +1 -1
- package/dist/esm/index.js +0 -4
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/api/gltf-extensions.js +1 -10
- package/dist/esm/lib/api/gltf-extensions.js.map +1 -1
- package/dist/esm/lib/api/gltf-scenegraph.js +2 -48
- package/dist/esm/lib/api/gltf-scenegraph.js.map +1 -1
- package/dist/esm/lib/api/normalize-gltf-v1.js +0 -17
- package/dist/esm/lib/api/normalize-gltf-v1.js.map +1 -1
- package/dist/esm/lib/api/post-process-gltf.js +2 -16
- package/dist/esm/lib/api/post-process-gltf.js.map +1 -1
- package/dist/esm/lib/encoders/encode-glb.js +0 -16
- package/dist/esm/lib/encoders/encode-glb.js.map +1 -1
- package/dist/esm/lib/encoders/encode-gltf.js +0 -2
- package/dist/esm/lib/encoders/encode-gltf.js.map +1 -1
- package/dist/esm/lib/extensions/EXT_meshopt_compression.js +0 -7
- package/dist/esm/lib/extensions/EXT_meshopt_compression.js.map +1 -1
- package/dist/esm/lib/extensions/EXT_texture_webp.js +0 -5
- package/dist/esm/lib/extensions/EXT_texture_webp.js.map +1 -1
- package/dist/esm/lib/extensions/KHR_binary_gltf.js +0 -6
- package/dist/esm/lib/extensions/KHR_binary_gltf.js.map +1 -1
- package/dist/esm/lib/extensions/KHR_draco_mesh_compression.js +1 -18
- package/dist/esm/lib/extensions/KHR_draco_mesh_compression.js.map +1 -1
- package/dist/esm/lib/extensions/KHR_texture_basisu.js +0 -5
- package/dist/esm/lib/extensions/KHR_texture_basisu.js.map +1 -1
- package/dist/esm/lib/extensions/KHR_texture_transform.js +0 -11
- package/dist/esm/lib/extensions/KHR_texture_transform.js.map +1 -1
- package/dist/esm/lib/extensions/deprecated/EXT_feature_metadata.js +0 -7
- package/dist/esm/lib/extensions/deprecated/EXT_feature_metadata.js.map +1 -1
- package/dist/esm/lib/extensions/deprecated/KHR_lights_punctual.js +0 -7
- package/dist/esm/lib/extensions/deprecated/KHR_lights_punctual.js.map +1 -1
- package/dist/esm/lib/extensions/deprecated/KHR_materials_unlit.js +0 -5
- package/dist/esm/lib/extensions/deprecated/KHR_materials_unlit.js.map +1 -1
- package/dist/esm/lib/extensions/deprecated/KHR_techniques_webgl.js +3 -11
- package/dist/esm/lib/extensions/deprecated/KHR_techniques_webgl.js.map +1 -1
- package/dist/esm/lib/gltf-utils/get-typed-array.js +0 -4
- package/dist/esm/lib/gltf-utils/get-typed-array.js.map +1 -1
- package/dist/esm/lib/gltf-utils/gltf-attribute-utils.js +0 -7
- package/dist/esm/lib/gltf-utils/gltf-attribute-utils.js.map +1 -1
- package/dist/esm/lib/gltf-utils/gltf-constants.js +0 -1
- package/dist/esm/lib/gltf-utils/gltf-constants.js.map +1 -1
- package/dist/esm/lib/gltf-utils/gltf-utils.js.map +1 -1
- package/dist/esm/lib/gltf-utils/resolve-url.js +0 -1
- package/dist/esm/lib/gltf-utils/resolve-url.js.map +1 -1
- package/dist/esm/lib/parsers/parse-glb.js +0 -17
- package/dist/esm/lib/parsers/parse-glb.js.map +1 -1
- package/dist/esm/lib/parsers/parse-gltf.js +0 -18
- package/dist/esm/lib/parsers/parse-gltf.js.map +1 -1
- package/dist/esm/lib/utils/assert.js +0 -1
- package/dist/esm/lib/utils/assert.js.map +1 -1
- package/dist/esm/lib/utils/version.js +1 -2
- package/dist/esm/lib/utils/version.js.map +1 -1
- package/dist/esm/meshopt/meshopt-decoder.js +0 -8
- package/dist/esm/meshopt/meshopt-decoder.js.map +1 -1
- package/dist/esm/webp/webp.js +0 -2
- package/dist/esm/webp/webp.js.map +1 -1
- package/dist/gltf-loader.d.ts +2 -1
- package/dist/gltf-loader.d.ts.map +1 -1
- package/dist/lib/api/gltf-extensions.js +1 -1
- package/dist/lib/parsers/parse-gltf.d.ts +1 -1
- package/dist/lib/parsers/parse-gltf.d.ts.map +1 -1
- package/package.json +6 -6
|
@@ -23,8 +23,7 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
|
|
|
23
23
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
24
24
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
25
25
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
26
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++)
|
|
27
|
-
|
|
26
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
28
27
|
function isGLTF(arrayBuffer, options) {
|
|
29
28
|
var byteOffset = 0;
|
|
30
29
|
return (0, _parseGlb.isGLB)(arrayBuffer, byteOffset, options);
|
|
@@ -43,40 +42,37 @@ function _parseGLTF() {
|
|
|
43
42
|
promise,
|
|
44
43
|
_args = arguments;
|
|
45
44
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
46
|
-
while (1) {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
if (!(options !== null && options !== void 0 && (_options$gltf2 = options.gltf) !== null && _options$gltf2 !== void 0 && _options$gltf2.loadBuffers && gltf.json.buffers)) {
|
|
59
|
-
_context.next = 10;
|
|
60
|
-
break;
|
|
61
|
-
}
|
|
45
|
+
while (1) switch (_context.prev = _context.next) {
|
|
46
|
+
case 0:
|
|
47
|
+
byteOffset = _args.length > 2 && _args[2] !== undefined ? _args[2] : 0;
|
|
48
|
+
options = _args.length > 3 ? _args[3] : undefined;
|
|
49
|
+
context = _args.length > 4 ? _args[4] : undefined;
|
|
50
|
+
parseGLTFContainerSync(gltf, arrayBufferOrString, byteOffset, options);
|
|
51
|
+
(0, _normalizeGltfV.normalizeGLTFV1)(gltf, {
|
|
52
|
+
normalize: options === null || options === void 0 ? void 0 : (_options$gltf = options.gltf) === null || _options$gltf === void 0 ? void 0 : _options$gltf.normalize
|
|
53
|
+
});
|
|
54
|
+
(0, _gltfExtensions.preprocessExtensions)(gltf, options, context);
|
|
55
|
+
promises = [];
|
|
56
|
+
if (!(options !== null && options !== void 0 && (_options$gltf2 = options.gltf) !== null && _options$gltf2 !== void 0 && _options$gltf2.loadBuffers && gltf.json.buffers)) {
|
|
62
57
|
_context.next = 10;
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
promises.push(
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
_context.next = 10;
|
|
61
|
+
return loadBuffers(gltf, options, context);
|
|
62
|
+
case 10:
|
|
63
|
+
if (options !== null && options !== void 0 && (_options$gltf3 = options.gltf) !== null && _options$gltf3 !== void 0 && _options$gltf3.loadImages) {
|
|
64
|
+
_promise = loadImages(gltf, options, context);
|
|
65
|
+
promises.push(_promise);
|
|
66
|
+
}
|
|
67
|
+
promise = (0, _gltfExtensions.decodeExtensions)(gltf, options, context);
|
|
68
|
+
promises.push(promise);
|
|
69
|
+
_context.next = 15;
|
|
70
|
+
return Promise.all(promises);
|
|
71
|
+
case 15:
|
|
72
|
+
return _context.abrupt("return", options !== null && options !== void 0 && (_options$gltf4 = options.gltf) !== null && _options$gltf4 !== void 0 && _options$gltf4.postProcess ? (0, _postProcessGltf.postProcessGLTF)(gltf, options) : gltf);
|
|
73
|
+
case 16:
|
|
74
|
+
case "end":
|
|
75
|
+
return _context.stop();
|
|
80
76
|
}
|
|
81
77
|
}, _callee);
|
|
82
78
|
}));
|
|
@@ -86,7 +82,6 @@ function parseGLTFContainerSync(gltf, data, byteOffset, options) {
|
|
|
86
82
|
if (options.uri) {
|
|
87
83
|
gltf.baseUri = options.uri;
|
|
88
84
|
}
|
|
89
|
-
|
|
90
85
|
if (data instanceof ArrayBuffer && !(0, _parseGlb.isGLB)(data, byteOffset, options)) {
|
|
91
86
|
var textDecoder = new TextDecoder();
|
|
92
87
|
data = textDecoder.decode(data);
|
|
@@ -102,10 +97,8 @@ function parseGLTFContainerSync(gltf, data, byteOffset, options) {
|
|
|
102
97
|
} else {
|
|
103
98
|
(0, _assert.assert)(false, 'GLTF: must be ArrayBuffer or string');
|
|
104
99
|
}
|
|
105
|
-
|
|
106
100
|
var buffers = gltf.json.buffers || [];
|
|
107
101
|
gltf.buffers = new Array(buffers.length).fill(null);
|
|
108
|
-
|
|
109
102
|
if (gltf._glb && gltf._glb.header.hasBinChunk) {
|
|
110
103
|
var binChunks = gltf._glb.binChunks;
|
|
111
104
|
gltf.buffers[0] = {
|
|
@@ -113,70 +106,65 @@ function parseGLTFContainerSync(gltf, data, byteOffset, options) {
|
|
|
113
106
|
byteOffset: binChunks[0].byteOffset,
|
|
114
107
|
byteLength: binChunks[0].byteLength
|
|
115
108
|
};
|
|
116
|
-
|
|
117
109
|
}
|
|
118
|
-
|
|
119
110
|
var images = gltf.json.images || [];
|
|
120
111
|
gltf.images = new Array(images.length).fill({});
|
|
121
112
|
}
|
|
122
|
-
|
|
123
113
|
function loadBuffers(_x3, _x4, _x5) {
|
|
124
114
|
return _loadBuffers.apply(this, arguments);
|
|
125
115
|
}
|
|
126
116
|
function _loadBuffers() {
|
|
127
117
|
_loadBuffers = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(gltf, options, context) {
|
|
128
|
-
var buffers, i, buffer, _context$fetch, _response
|
|
118
|
+
var buffers, i, buffer, _context$fetch, _response$arrayBuffer, fetch, uri, response, arrayBuffer;
|
|
129
119
|
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
130
|
-
while (1) {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
120
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
121
|
+
case 0:
|
|
122
|
+
buffers = gltf.json.buffers || [];
|
|
123
|
+
i = 0;
|
|
124
|
+
case 2:
|
|
125
|
+
if (!(i < buffers.length)) {
|
|
126
|
+
_context2.next = 22;
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
buffer = buffers[i];
|
|
130
|
+
if (!buffer.uri) {
|
|
131
|
+
_context2.next = 18;
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
fetch = context.fetch;
|
|
135
|
+
(0, _assert.assert)(fetch);
|
|
136
|
+
uri = (0, _resolveUrl.resolveUrl)(buffer.uri, options);
|
|
137
|
+
_context2.next = 10;
|
|
138
|
+
return context === null || context === void 0 ? void 0 : (_context$fetch = context.fetch) === null || _context$fetch === void 0 ? void 0 : _context$fetch.call(context, uri);
|
|
139
|
+
case 10:
|
|
140
|
+
response = _context2.sent;
|
|
141
|
+
_context2.next = 13;
|
|
142
|
+
return response === null || response === void 0 ? void 0 : (_response$arrayBuffer = response.arrayBuffer) === null || _response$arrayBuffer === void 0 ? void 0 : _response$arrayBuffer.call(response);
|
|
143
|
+
case 13:
|
|
144
|
+
arrayBuffer = _context2.sent;
|
|
145
|
+
gltf.buffers[i] = {
|
|
146
|
+
arrayBuffer: arrayBuffer,
|
|
147
|
+
byteOffset: 0,
|
|
148
|
+
byteLength: arrayBuffer.byteLength
|
|
149
|
+
};
|
|
150
|
+
delete buffer.uri;
|
|
151
|
+
_context2.next = 19;
|
|
152
|
+
break;
|
|
153
|
+
case 18:
|
|
154
|
+
if (gltf.buffers[i] === null) {
|
|
156
155
|
gltf.buffers[i] = {
|
|
157
|
-
arrayBuffer:
|
|
156
|
+
arrayBuffer: new ArrayBuffer(buffer.byteLength),
|
|
158
157
|
byteOffset: 0,
|
|
159
|
-
byteLength:
|
|
158
|
+
byteLength: buffer.byteLength
|
|
160
159
|
};
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
byteLength: buffer.byteLength
|
|
170
|
-
};
|
|
171
|
-
}
|
|
172
|
-
case 19:
|
|
173
|
-
++i;
|
|
174
|
-
_context2.next = 2;
|
|
175
|
-
break;
|
|
176
|
-
case 22:
|
|
177
|
-
case "end":
|
|
178
|
-
return _context2.stop();
|
|
179
|
-
}
|
|
160
|
+
}
|
|
161
|
+
case 19:
|
|
162
|
+
++i;
|
|
163
|
+
_context2.next = 2;
|
|
164
|
+
break;
|
|
165
|
+
case 22:
|
|
166
|
+
case "end":
|
|
167
|
+
return _context2.stop();
|
|
180
168
|
}
|
|
181
169
|
}, _callee2);
|
|
182
170
|
}));
|
|
@@ -189,31 +177,29 @@ function _loadImages() {
|
|
|
189
177
|
_loadImages = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee3(gltf, options, context) {
|
|
190
178
|
var imageIndices, images, promises, _iterator2, _step2, imageIndex;
|
|
191
179
|
return _regenerator.default.wrap(function _callee3$(_context3) {
|
|
192
|
-
while (1) {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
promises.push(loadImage(gltf, images[imageIndex], imageIndex, options, context));
|
|
203
|
-
}
|
|
204
|
-
} catch (err) {
|
|
205
|
-
_iterator2.e(err);
|
|
206
|
-
} finally {
|
|
207
|
-
_iterator2.f();
|
|
180
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
181
|
+
case 0:
|
|
182
|
+
imageIndices = getReferencesImageIndices(gltf);
|
|
183
|
+
images = gltf.json.images || [];
|
|
184
|
+
promises = [];
|
|
185
|
+
_iterator2 = _createForOfIteratorHelper(imageIndices);
|
|
186
|
+
try {
|
|
187
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
188
|
+
imageIndex = _step2.value;
|
|
189
|
+
promises.push(loadImage(gltf, images[imageIndex], imageIndex, options, context));
|
|
208
190
|
}
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
191
|
+
} catch (err) {
|
|
192
|
+
_iterator2.e(err);
|
|
193
|
+
} finally {
|
|
194
|
+
_iterator2.f();
|
|
195
|
+
}
|
|
196
|
+
_context3.next = 7;
|
|
197
|
+
return Promise.all(promises);
|
|
198
|
+
case 7:
|
|
199
|
+
return _context3.abrupt("return", _context3.sent);
|
|
200
|
+
case 8:
|
|
201
|
+
case "end":
|
|
202
|
+
return _context3.stop();
|
|
217
203
|
}
|
|
218
204
|
}, _callee3);
|
|
219
205
|
}));
|
|
@@ -238,7 +224,6 @@ function getReferencesImageIndices(gltf) {
|
|
|
238
224
|
}
|
|
239
225
|
return Array.from(imageIndices).sort();
|
|
240
226
|
}
|
|
241
|
-
|
|
242
227
|
function loadImage(_x9, _x10, _x11, _x12, _x13) {
|
|
243
228
|
return _loadImage.apply(this, arguments);
|
|
244
229
|
}
|
|
@@ -246,58 +231,54 @@ function _loadImage() {
|
|
|
246
231
|
_loadImage = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee4(gltf, image, index, options, context) {
|
|
247
232
|
var fetch, parse, arrayBuffer, uri, response, array, parsedImage;
|
|
248
233
|
return _regenerator.default.wrap(function _callee4$(_context4) {
|
|
249
|
-
while (1) {
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
234
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
235
|
+
case 0:
|
|
236
|
+
fetch = context.fetch, parse = context.parse;
|
|
237
|
+
if (!(image.uri && !image.hasOwnProperty('bufferView'))) {
|
|
238
|
+
_context4.next = 10;
|
|
239
|
+
break;
|
|
240
|
+
}
|
|
241
|
+
uri = (0, _resolveUrl.resolveUrl)(image.uri, options);
|
|
242
|
+
_context4.next = 5;
|
|
243
|
+
return fetch(uri);
|
|
244
|
+
case 5:
|
|
245
|
+
response = _context4.sent;
|
|
246
|
+
_context4.next = 8;
|
|
247
|
+
return response.arrayBuffer();
|
|
248
|
+
case 8:
|
|
249
|
+
arrayBuffer = _context4.sent;
|
|
250
|
+
image.bufferView = {
|
|
251
|
+
data: arrayBuffer
|
|
252
|
+
};
|
|
253
|
+
case 10:
|
|
254
|
+
if (Number.isFinite(image.bufferView)) {
|
|
255
|
+
array = (0, _getTypedArray.getTypedArrayForBufferView)(gltf.json, gltf.buffers, image.bufferView);
|
|
256
|
+
arrayBuffer = (0, _loaderUtils.sliceArrayBuffer)(array.buffer, array.byteOffset, array.byteLength);
|
|
257
|
+
}
|
|
258
|
+
(0, _assert.assert)(arrayBuffer, 'glTF image has no data');
|
|
259
|
+
_context4.next = 14;
|
|
260
|
+
return parse(arrayBuffer, [_images.ImageLoader, _textures.BasisLoader], {
|
|
261
|
+
mimeType: image.mimeType,
|
|
262
|
+
basis: options.basis || {
|
|
263
|
+
format: (0, _textures.selectSupportedBasisFormat)()
|
|
256
264
|
}
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
data: arrayBuffer
|
|
265
|
+
}, context);
|
|
266
|
+
case 14:
|
|
267
|
+
parsedImage = _context4.sent;
|
|
268
|
+
if (parsedImage && parsedImage[0]) {
|
|
269
|
+
parsedImage = {
|
|
270
|
+
compressed: true,
|
|
271
|
+
mipmaps: false,
|
|
272
|
+
width: parsedImage[0].width,
|
|
273
|
+
height: parsedImage[0].height,
|
|
274
|
+
data: parsedImage[0]
|
|
268
275
|
};
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
_context4.next = 14;
|
|
277
|
-
return parse(arrayBuffer, [_images.ImageLoader, _textures.BasisLoader], {
|
|
278
|
-
mimeType: image.mimeType,
|
|
279
|
-
basis: options.basis || {
|
|
280
|
-
format: (0, _textures.selectSupportedBasisFormat)()
|
|
281
|
-
}
|
|
282
|
-
}, context);
|
|
283
|
-
case 14:
|
|
284
|
-
parsedImage = _context4.sent;
|
|
285
|
-
if (parsedImage && parsedImage[0]) {
|
|
286
|
-
parsedImage = {
|
|
287
|
-
compressed: true,
|
|
288
|
-
mipmaps: false,
|
|
289
|
-
width: parsedImage[0].width,
|
|
290
|
-
height: parsedImage[0].height,
|
|
291
|
-
data: parsedImage[0]
|
|
292
|
-
};
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
gltf.images = gltf.images || [];
|
|
296
|
-
gltf.images[index] = parsedImage;
|
|
297
|
-
case 18:
|
|
298
|
-
case "end":
|
|
299
|
-
return _context4.stop();
|
|
300
|
-
}
|
|
276
|
+
}
|
|
277
|
+
gltf.images = gltf.images || [];
|
|
278
|
+
gltf.images[index] = parsedImage;
|
|
279
|
+
case 18:
|
|
280
|
+
case "end":
|
|
281
|
+
return _context4.stop();
|
|
301
282
|
}
|
|
302
283
|
}, _callee4);
|
|
303
284
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-gltf.js","names":["isGLTF","arrayBuffer","options","byteOffset","isGLB","parseGLTF","gltf","arrayBufferOrString","context","parseGLTFContainerSync","normalizeGLTFV1","normalize","preprocessExtensions","promises","loadBuffers","json","buffers","loadImages","promise","push","decodeExtensions","Promise","all","postProcess","postProcessGLTF","data","uri","baseUri","ArrayBuffer","textDecoder","TextDecoder","decode","parseJSON","glb","parseGLBSync","assert","type","_glb","Array","length","fill","header","hasBinChunk","binChunks","byteLength","images","i","buffer","fetch","resolveUrl","response","imageIndices","getReferencesImageIndices","imageIndex","loadImage","Set","textures","texture","source","undefined","add","from","sort","image","index","parse","hasOwnProperty","bufferView","Number","isFinite","array","getTypedArrayForBufferView","sliceArrayBuffer","ImageLoader","BasisLoader","mimeType","basis","format","selectSupportedBasisFormat","parsedImage","compressed","mipmaps","width","height"],"sources":["../../../../src/lib/parsers/parse-gltf.ts"],"sourcesContent":["/* eslint-disable camelcase, max-statements, no-restricted-globals */\nimport type {LoaderContext} from '@loaders.gl/loader-utils';\nimport {BasisLoader, selectSupportedBasisFormat} from '@loaders.gl/textures';\nimport type {GLTFLoaderOptions} from '../../gltf-loader';\nimport type {GLB} from '../types/glb-types';\nimport type {GLTFWithBuffers} from '../types/gltf-types';\n\nimport {ImageLoader} from '@loaders.gl/images';\nimport {parseJSON, sliceArrayBuffer} from '@loaders.gl/loader-utils';\nimport {assert} from '../utils/assert';\nimport {resolveUrl} from '../gltf-utils/resolve-url';\nimport {getTypedArrayForBufferView} from '../gltf-utils/get-typed-array';\nimport {preprocessExtensions, decodeExtensions} from '../api/gltf-extensions';\nimport {normalizeGLTFV1} from '../api/normalize-gltf-v1';\nimport {postProcessGLTF} from '../api/post-process-gltf';\nimport parseGLBSync, {isGLB} from './parse-glb';\n\nexport type GLTFParseOptions = {\n normalize?: boolean;\n loadImages?: boolean;\n loadBuffers?: boolean;\n decompressMeshes?: boolean;\n postProcess?: boolean;\n excludeExtensions?: string[];\n};\n\n// export type GLTFOptions = {\n// gltf?: GLTFParseOptions;\n// };\n\nexport function isGLTF(arrayBuffer, options?): boolean {\n const byteOffset = 0;\n return isGLB(arrayBuffer, byteOffset, options);\n}\n\nexport async function parseGLTF(\n gltf: GLTFWithBuffers,\n arrayBufferOrString,\n byteOffset = 0,\n options: GLTFLoaderOptions,\n context: LoaderContext\n) {\n parseGLTFContainerSync(gltf, arrayBufferOrString, byteOffset, options);\n\n normalizeGLTFV1(gltf, {normalize: options?.gltf?.normalize});\n\n preprocessExtensions(gltf, options, context);\n\n const promises: Promise<any>[] = [];\n\n // Load linked buffers asynchronously and decodes base64 buffers in parallel\n if (options?.gltf?.loadBuffers && gltf.json.buffers) {\n await loadBuffers(gltf, options, context);\n }\n\n if (options?.gltf?.loadImages) {\n const promise = loadImages(gltf, options, context);\n promises.push(promise);\n }\n\n const promise = decodeExtensions(gltf, options, context);\n promises.push(promise);\n\n // Parallelize image loading and buffer loading/extension decoding\n await Promise.all(promises);\n\n // Post processing resolves indices to objects, buffers\n return options?.gltf?.postProcess ? postProcessGLTF(gltf, options) : gltf;\n}\n\n// `data` - can be ArrayBuffer (GLB), ArrayBuffer (Binary JSON), String (JSON), or Object (parsed JSON)\nfunction parseGLTFContainerSync(gltf, data, byteOffset, options) {\n // Initialize gltf container\n if (options.uri) {\n gltf.baseUri = options.uri;\n }\n\n // If data is binary and starting with magic bytes, assume binary JSON text, convert to string\n if (data instanceof ArrayBuffer && !isGLB(data, byteOffset, options)) {\n const textDecoder = new TextDecoder();\n data = textDecoder.decode(data);\n }\n\n if (typeof data === 'string') {\n // If string, try to parse as JSON\n gltf.json = parseJSON(data);\n } else if (data instanceof ArrayBuffer) {\n // If still ArrayBuffer, parse as GLB container\n const glb: GLB = {} as GLB;\n byteOffset = parseGLBSync(glb, data, byteOffset, options.glb);\n\n assert(glb.type === 'glTF', `Invalid GLB magic string ${glb.type}`);\n\n gltf._glb = glb;\n gltf.json = glb.json;\n } else {\n assert(false, 'GLTF: must be ArrayBuffer or string');\n }\n\n // Populate buffers\n // Create an external buffers array to hold binary data\n const buffers = gltf.json.buffers || [];\n gltf.buffers = new Array(buffers.length).fill(null);\n\n // Populates JSON and some bin chunk info\n if (gltf._glb && gltf._glb.header.hasBinChunk) {\n const {binChunks} = gltf._glb;\n gltf.buffers[0] = {\n arrayBuffer: binChunks[0].arrayBuffer,\n byteOffset: binChunks[0].byteOffset,\n byteLength: binChunks[0].byteLength\n };\n\n // TODO - this modifies JSON and is a post processing thing\n // gltf.json.buffers[0].data = gltf.buffers[0].arrayBuffer;\n // gltf.json.buffers[0].byteOffset = gltf.buffers[0].byteOffset;\n }\n\n // Populate images\n const images = gltf.json.images || [];\n gltf.images = new Array(images.length).fill({});\n}\n\n/** Asynchronously fetch and parse buffers, store in buffers array outside of json\n * TODO - traverse gltf and determine which buffers are actually needed\n */\nasync function loadBuffers(gltf: GLTFWithBuffers, options, context: LoaderContext) {\n // TODO\n const buffers = gltf.json.buffers || [];\n for (let i = 0; i < buffers.length; ++i) {\n const buffer = buffers[i];\n if (buffer.uri) {\n const {fetch} = context;\n assert(fetch);\n\n const uri = resolveUrl(buffer.uri, options);\n const response = await context?.fetch?.(uri);\n const arrayBuffer = await response?.arrayBuffer?.();\n\n gltf.buffers[i] = {\n arrayBuffer,\n byteOffset: 0,\n byteLength: arrayBuffer.byteLength\n };\n\n delete buffer.uri;\n } else if (gltf.buffers[i] === null) {\n gltf.buffers[i] = {\n arrayBuffer: new ArrayBuffer(buffer.byteLength),\n byteOffset: 0,\n byteLength: buffer.byteLength\n };\n }\n }\n}\n\n/**\n * Loads all images\n * TODO - traverse gltf and determine which images are actually needed\n * @param gltf\n * @param options\n * @param context\n * @returns\n */\nasync function loadImages(gltf: GLTFWithBuffers, options, context: LoaderContext) {\n const imageIndices = getReferencesImageIndices(gltf);\n\n const images = gltf.json.images || [];\n\n const promises: Promise<any>[] = [];\n for (const imageIndex of imageIndices) {\n promises.push(loadImage(gltf, images[imageIndex], imageIndex, options, context));\n }\n\n return await Promise.all(promises);\n}\n\n/** Make sure we only load images that are actually referenced by textures */\nfunction getReferencesImageIndices(gltf: GLTFWithBuffers): number[] {\n const imageIndices = new Set<number>();\n\n const textures = gltf.json.textures || [];\n for (const texture of textures) {\n if (texture.source !== undefined) {\n imageIndices.add(texture.source);\n }\n }\n\n return Array.from(imageIndices).sort();\n}\n\n/** Asynchronously fetches and parses one image, store in images array outside of json */\nasync function loadImage(\n gltf: GLTFWithBuffers,\n image,\n index: number,\n options,\n context: LoaderContext\n) {\n const {fetch, parse} = context;\n\n let arrayBuffer;\n\n if (image.uri && !image.hasOwnProperty('bufferView')) {\n const uri = resolveUrl(image.uri, options);\n const response = await fetch(uri);\n arrayBuffer = await response.arrayBuffer();\n image.bufferView = {\n data: arrayBuffer\n };\n }\n\n if (Number.isFinite(image.bufferView)) {\n const array = getTypedArrayForBufferView(gltf.json, gltf.buffers, image.bufferView);\n arrayBuffer = sliceArrayBuffer(array.buffer, array.byteOffset, array.byteLength);\n }\n\n assert(arrayBuffer, 'glTF image has no data');\n\n // Call `parse`\n let parsedImage = await parse(\n arrayBuffer,\n [ImageLoader, BasisLoader],\n {mimeType: image.mimeType, basis: options.basis || {format: selectSupportedBasisFormat()}},\n context\n );\n\n if (parsedImage && parsedImage[0]) {\n parsedImage = {\n compressed: true,\n mipmaps: false,\n width: parsedImage[0].width,\n height: parsedImage[0].height,\n data: parsedImage[0]\n };\n }\n // TODO making sure ImageLoader is overridable by using array of loaders\n // const parsedImage = await parse(arrayBuffer, [ImageLoader]);\n\n // Store the loaded image\n gltf.images = gltf.images || [];\n gltf.images[index] = parsedImage;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parse-gltf.js","names":["_textures","require","_images","_loaderUtils","_assert","_resolveUrl","_getTypedArray","_gltfExtensions","_normalizeGltfV","_postProcessGltf","_parseGlb","_interopRequireWildcard","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","step","next","_e2","return","minLen","_arrayLikeToArray","toString","slice","constructor","name","from","test","arr","len","arr2","isGLTF","arrayBuffer","options","byteOffset","isGLB","parseGLTF","_x","_x2","_parseGLTF","apply","arguments","_asyncToGenerator2","_regenerator","mark","_callee","gltf","arrayBufferOrString","_options$gltf","_options$gltf2","_options$gltf3","_options$gltf4","context","promises","_promise","promise","_args","wrap","_callee$","_context","prev","undefined","parseGLTFContainerSync","normalizeGLTFV1","normalize","preprocessExtensions","loadBuffers","json","buffers","loadImages","push","decodeExtensions","Promise","all","abrupt","postProcess","postProcessGLTF","stop","data","uri","baseUri","ArrayBuffer","textDecoder","TextDecoder","decode","parseJSON","glb","parseGLBSync","assert","type","concat","_glb","fill","header","hasBinChunk","binChunks","byteLength","images","_x3","_x4","_x5","_loadBuffers","_callee2","buffer","_context$fetch","_response$arrayBuffer","fetch","response","_callee2$","_context2","resolveUrl","sent","_x6","_x7","_x8","_loadImages","_callee3","imageIndices","_iterator2","_step2","imageIndex","_callee3$","_context3","getReferencesImageIndices","loadImage","Set","textures","_iterator","_step","texture","source","add","sort","_x9","_x10","_x11","_x12","_x13","_loadImage","_callee4","image","index","parse","array","parsedImage","_callee4$","_context4","bufferView","Number","isFinite","getTypedArrayForBufferView","sliceArrayBuffer","ImageLoader","BasisLoader","mimeType","basis","format","selectSupportedBasisFormat","compressed","mipmaps","width","height"],"sources":["../../../../src/lib/parsers/parse-gltf.ts"],"sourcesContent":["/* eslint-disable camelcase, max-statements, no-restricted-globals */\nimport type {LoaderContext} from '@loaders.gl/loader-utils';\nimport {BasisLoader, selectSupportedBasisFormat} from '@loaders.gl/textures';\nimport type {GLTFLoaderOptions} from '../../gltf-loader';\nimport type {GLB} from '../types/glb-types';\nimport type {GLTFWithBuffers} from '../types/gltf-types';\n\nimport {ImageLoader} from '@loaders.gl/images';\nimport {parseJSON, sliceArrayBuffer} from '@loaders.gl/loader-utils';\nimport {assert} from '../utils/assert';\nimport {resolveUrl} from '../gltf-utils/resolve-url';\nimport {getTypedArrayForBufferView} from '../gltf-utils/get-typed-array';\nimport {preprocessExtensions, decodeExtensions} from '../api/gltf-extensions';\nimport {normalizeGLTFV1} from '../api/normalize-gltf-v1';\nimport {postProcessGLTF} from '../api/post-process-gltf';\nimport parseGLBSync, {isGLB} from './parse-glb';\n\nexport type GLTFParseOptions = {\n normalize?: boolean;\n loadImages?: boolean;\n loadBuffers?: boolean;\n decompressMeshes?: boolean;\n postProcess?: boolean;\n excludeExtensions?: string[];\n};\n\n// export type GLTFOptions = {\n// gltf?: GLTFParseOptions;\n// };\n\nexport function isGLTF(arrayBuffer, options?): boolean {\n const byteOffset = 0;\n return isGLB(arrayBuffer, byteOffset, options);\n}\n\nexport async function parseGLTF(\n gltf: GLTFWithBuffers,\n arrayBufferOrString,\n byteOffset = 0,\n options: GLTFLoaderOptions,\n context: LoaderContext\n) {\n parseGLTFContainerSync(gltf, arrayBufferOrString, byteOffset, options);\n\n normalizeGLTFV1(gltf, {normalize: options?.gltf?.normalize});\n\n preprocessExtensions(gltf, options, context);\n\n const promises: Promise<any>[] = [];\n\n // Load linked buffers asynchronously and decodes base64 buffers in parallel\n if (options?.gltf?.loadBuffers && gltf.json.buffers) {\n await loadBuffers(gltf, options, context);\n }\n\n if (options?.gltf?.loadImages) {\n const promise = loadImages(gltf, options, context);\n promises.push(promise);\n }\n\n const promise = decodeExtensions(gltf, options, context);\n promises.push(promise);\n\n // Parallelize image loading and buffer loading/extension decoding\n await Promise.all(promises);\n\n // Post processing resolves indices to objects, buffers\n return options?.gltf?.postProcess ? postProcessGLTF(gltf, options) : gltf;\n}\n\n// `data` - can be ArrayBuffer (GLB), ArrayBuffer (Binary JSON), String (JSON), or Object (parsed JSON)\nfunction parseGLTFContainerSync(gltf, data, byteOffset, options) {\n // Initialize gltf container\n if (options.uri) {\n gltf.baseUri = options.uri;\n }\n\n // If data is binary and starting with magic bytes, assume binary JSON text, convert to string\n if (data instanceof ArrayBuffer && !isGLB(data, byteOffset, options)) {\n const textDecoder = new TextDecoder();\n data = textDecoder.decode(data);\n }\n\n if (typeof data === 'string') {\n // If string, try to parse as JSON\n gltf.json = parseJSON(data);\n } else if (data instanceof ArrayBuffer) {\n // If still ArrayBuffer, parse as GLB container\n const glb: GLB = {} as GLB;\n byteOffset = parseGLBSync(glb, data, byteOffset, options.glb);\n\n assert(glb.type === 'glTF', `Invalid GLB magic string ${glb.type}`);\n\n gltf._glb = glb;\n gltf.json = glb.json;\n } else {\n assert(false, 'GLTF: must be ArrayBuffer or string');\n }\n\n // Populate buffers\n // Create an external buffers array to hold binary data\n const buffers = gltf.json.buffers || [];\n gltf.buffers = new Array(buffers.length).fill(null);\n\n // Populates JSON and some bin chunk info\n if (gltf._glb && gltf._glb.header.hasBinChunk) {\n const {binChunks} = gltf._glb;\n gltf.buffers[0] = {\n arrayBuffer: binChunks[0].arrayBuffer,\n byteOffset: binChunks[0].byteOffset,\n byteLength: binChunks[0].byteLength\n };\n\n // TODO - this modifies JSON and is a post processing thing\n // gltf.json.buffers[0].data = gltf.buffers[0].arrayBuffer;\n // gltf.json.buffers[0].byteOffset = gltf.buffers[0].byteOffset;\n }\n\n // Populate images\n const images = gltf.json.images || [];\n gltf.images = new Array(images.length).fill({});\n}\n\n/** Asynchronously fetch and parse buffers, store in buffers array outside of json\n * TODO - traverse gltf and determine which buffers are actually needed\n */\nasync function loadBuffers(gltf: GLTFWithBuffers, options, context: LoaderContext) {\n // TODO\n const buffers = gltf.json.buffers || [];\n for (let i = 0; i < buffers.length; ++i) {\n const buffer = buffers[i];\n if (buffer.uri) {\n const {fetch} = context;\n assert(fetch);\n\n const uri = resolveUrl(buffer.uri, options);\n const response = await context?.fetch?.(uri);\n const arrayBuffer = await response?.arrayBuffer?.();\n\n gltf.buffers[i] = {\n arrayBuffer,\n byteOffset: 0,\n byteLength: arrayBuffer.byteLength\n };\n\n delete buffer.uri;\n } else if (gltf.buffers[i] === null) {\n gltf.buffers[i] = {\n arrayBuffer: new ArrayBuffer(buffer.byteLength),\n byteOffset: 0,\n byteLength: buffer.byteLength\n };\n }\n }\n}\n\n/**\n * Loads all images\n * TODO - traverse gltf and determine which images are actually needed\n * @param gltf\n * @param options\n * @param context\n * @returns\n */\nasync function loadImages(gltf: GLTFWithBuffers, options, context: LoaderContext) {\n const imageIndices = getReferencesImageIndices(gltf);\n\n const images = gltf.json.images || [];\n\n const promises: Promise<any>[] = [];\n for (const imageIndex of imageIndices) {\n promises.push(loadImage(gltf, images[imageIndex], imageIndex, options, context));\n }\n\n return await Promise.all(promises);\n}\n\n/** Make sure we only load images that are actually referenced by textures */\nfunction getReferencesImageIndices(gltf: GLTFWithBuffers): number[] {\n const imageIndices = new Set<number>();\n\n const textures = gltf.json.textures || [];\n for (const texture of textures) {\n if (texture.source !== undefined) {\n imageIndices.add(texture.source);\n }\n }\n\n return Array.from(imageIndices).sort();\n}\n\n/** Asynchronously fetches and parses one image, store in images array outside of json */\nasync function loadImage(\n gltf: GLTFWithBuffers,\n image,\n index: number,\n options,\n context: LoaderContext\n) {\n const {fetch, parse} = context;\n\n let arrayBuffer;\n\n if (image.uri && !image.hasOwnProperty('bufferView')) {\n const uri = resolveUrl(image.uri, options);\n const response = await fetch(uri);\n arrayBuffer = await response.arrayBuffer();\n image.bufferView = {\n data: arrayBuffer\n };\n }\n\n if (Number.isFinite(image.bufferView)) {\n const array = getTypedArrayForBufferView(gltf.json, gltf.buffers, image.bufferView);\n arrayBuffer = sliceArrayBuffer(array.buffer, array.byteOffset, array.byteLength);\n }\n\n assert(arrayBuffer, 'glTF image has no data');\n\n // Call `parse`\n let parsedImage = await parse(\n arrayBuffer,\n [ImageLoader, BasisLoader],\n {mimeType: image.mimeType, basis: options.basis || {format: selectSupportedBasisFormat()}},\n context\n );\n\n if (parsedImage && parsedImage[0]) {\n parsedImage = {\n compressed: true,\n mipmaps: false,\n width: parsedImage[0].width,\n height: parsedImage[0].height,\n data: parsedImage[0]\n };\n }\n // TODO making sure ImageLoader is overridable by using array of loaders\n // const parsedImage = await parse(arrayBuffer, [ImageLoader]);\n\n // Store the loaded image\n gltf.images = gltf.images || [];\n gltf.images[index] = parsedImage;\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assert.js","names":["assert","condition","message","Error"],"sources":["../../../../src/lib/utils/assert.ts"],"sourcesContent":["// Replacement for the external assert method to reduce bundle size\n// Note: We don't use the second \"message\" argument in calling code,\n// so no need to support it here\nexport function assert(condition: unknown, message?: string): void {\n if (!condition) {\n throw new Error(message || 'assert failed: gltf');\n }\n}\n"],"mappings":";;;;;;AAGO,SAASA,
|
|
1
|
+
{"version":3,"file":"assert.js","names":["assert","condition","message","Error"],"sources":["../../../../src/lib/utils/assert.ts"],"sourcesContent":["// Replacement for the external assert method to reduce bundle size\n// Note: We don't use the second \"message\" argument in calling code,\n// so no need to support it here\nexport function assert(condition: unknown, message?: string): void {\n if (!condition) {\n throw new Error(message || 'assert failed: gltf');\n }\n}\n"],"mappings":";;;;;;AAGO,SAASA,MAAMA,CAACC,SAAkB,EAAEC,OAAgB,EAAQ;EACjE,IAAI,CAACD,SAAS,EAAE;IACd,MAAM,IAAIE,KAAK,CAACD,OAAO,IAAI,qBAAqB,CAAC;EACnD;AACF"}
|
|
@@ -4,6 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.VERSION = void 0;
|
|
7
|
-
var VERSION = typeof "3.4.0-alpha.
|
|
7
|
+
var VERSION = typeof "3.4.0-alpha.4" !== 'undefined' ? "3.4.0-alpha.4" : 'latest';
|
|
8
8
|
exports.VERSION = VERSION;
|
|
9
9
|
//# sourceMappingURL=version.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","names":["VERSION"],"sources":["../../../../src/lib/utils/version.ts"],"sourcesContent":["// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n"],"mappings":";;;;;;AAGO,IAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;
|
|
1
|
+
{"version":3,"file":"version.js","names":["VERSION","exports"],"sources":["../../../../src/lib/utils/version.ts"],"sourcesContent":["// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n"],"mappings":";;;;;;AAGO,IAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;AAACC,OAAA,CAAAD,OAAA,GAAAA,OAAA"}
|