@loaders.gl/gltf 4.0.0-alpha.21 → 4.0.0-alpha.22
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/dist.min.js +14 -5
- package/dist/es5/lib/extensions/KHR_draco_mesh_compression.js +6 -7
- package/dist/es5/lib/extensions/KHR_draco_mesh_compression.js.map +1 -1
- package/dist/es5/lib/parsers/parse-gltf.js +3 -3
- package/dist/es5/lib/parsers/parse-gltf.js.map +1 -1
- package/dist/es5/lib/utils/version.js +1 -1
- package/dist/esm/lib/extensions/KHR_draco_mesh_compression.js +2 -5
- package/dist/esm/lib/extensions/KHR_draco_mesh_compression.js.map +1 -1
- package/dist/esm/lib/parsers/parse-gltf.js +5 -6
- package/dist/esm/lib/parsers/parse-gltf.js.map +1 -1
- package/dist/esm/lib/utils/version.js +1 -1
- package/dist/lib/extensions/KHR_draco_mesh_compression.d.ts +1 -1
- package/dist/lib/extensions/KHR_draco_mesh_compression.d.ts.map +1 -1
- package/dist/lib/extensions/KHR_draco_mesh_compression.js +2 -3
- package/dist/lib/parsers/parse-gltf.d.ts.map +1 -1
- package/dist/lib/parsers/parse-gltf.js +5 -3
- package/package.json +6 -6
- package/src/lib/extensions/KHR_draco_mesh_compression.ts +7 -7
- package/src/lib/parsers/parse-gltf.ts +9 -5
package/dist/dist.min.js
CHANGED
|
@@ -37,6 +37,15 @@
|
|
|
37
37
|
}
|
|
38
38
|
});
|
|
39
39
|
|
|
40
|
+
// ../loader-utils/src/loader-types.ts
|
|
41
|
+
async function parseFromContext(data, loaders, options, context) {
|
|
42
|
+
return context._parse(data, loaders, options, context);
|
|
43
|
+
}
|
|
44
|
+
var init_loader_types = __esm({
|
|
45
|
+
"../loader-utils/src/loader-types.ts"() {
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
|
|
40
49
|
// ../loader-utils/src/lib/env-utils/assert.ts
|
|
41
50
|
function assert(condition, message) {
|
|
42
51
|
if (!condition) {
|
|
@@ -324,6 +333,7 @@
|
|
|
324
333
|
// ../loader-utils/src/index.ts
|
|
325
334
|
var init_src2 = __esm({
|
|
326
335
|
"../loader-utils/src/index.ts"() {
|
|
336
|
+
init_loader_types();
|
|
327
337
|
init_assert();
|
|
328
338
|
init_globals();
|
|
329
339
|
init_parse_json();
|
|
@@ -2985,10 +2995,9 @@
|
|
|
2985
2995
|
}
|
|
2986
2996
|
const buffer = scenegraph.getTypedArrayForBufferView(dracoExtension.bufferView);
|
|
2987
2997
|
const bufferCopy = sliceArrayBuffer(buffer.buffer, buffer.byteOffset);
|
|
2988
|
-
const { parse: parse4 } = context;
|
|
2989
2998
|
const dracoOptions = { ...options };
|
|
2990
2999
|
delete dracoOptions["3d-tiles"];
|
|
2991
|
-
const decodedData = await
|
|
3000
|
+
const decodedData = await parseFromContext(bufferCopy, DracoLoader2, dracoOptions, context);
|
|
2992
3001
|
const decodedAttributes = getGLTFAccessors(decodedData.attributes);
|
|
2993
3002
|
for (const [attributeName, decodedAttribute] of Object.entries(decodedAttributes)) {
|
|
2994
3003
|
if (attributeName in primitive.attributes) {
|
|
@@ -3046,8 +3055,8 @@
|
|
|
3046
3055
|
var KHR_DRACO_MESH_COMPRESSION, name4;
|
|
3047
3056
|
var init_KHR_draco_mesh_compression = __esm({
|
|
3048
3057
|
"src/lib/extensions/KHR_draco_mesh_compression.ts"() {
|
|
3049
|
-
init_src6();
|
|
3050
3058
|
init_src2();
|
|
3059
|
+
init_src6();
|
|
3051
3060
|
init_gltf_scenegraph();
|
|
3052
3061
|
init_gltf_attribute_utils();
|
|
3053
3062
|
KHR_DRACO_MESH_COMPRESSION = "KHR_draco_mesh_compression";
|
|
@@ -5130,10 +5139,10 @@
|
|
|
5130
5139
|
return Array.from(imageIndices).sort();
|
|
5131
5140
|
}
|
|
5132
5141
|
async function loadImage(gltf, image, index, options, context) {
|
|
5133
|
-
const { fetch: fetch2, parse: parse4 } = context;
|
|
5134
5142
|
let arrayBuffer;
|
|
5135
5143
|
if (image.uri && !image.hasOwnProperty("bufferView")) {
|
|
5136
5144
|
const uri = resolveUrl(image.uri, options);
|
|
5145
|
+
const { fetch: fetch2 } = context;
|
|
5137
5146
|
const response = await fetch2(uri);
|
|
5138
5147
|
arrayBuffer = await response.arrayBuffer();
|
|
5139
5148
|
image.bufferView = {
|
|
@@ -5145,7 +5154,7 @@
|
|
|
5145
5154
|
arrayBuffer = sliceArrayBuffer(array.buffer, array.byteOffset, array.byteLength);
|
|
5146
5155
|
}
|
|
5147
5156
|
assert3(arrayBuffer, "glTF image has no data");
|
|
5148
|
-
let parsedImage = await
|
|
5157
|
+
let parsedImage = await parseFromContext(arrayBuffer, [ImageLoader, BasisLoader], {
|
|
5149
5158
|
...options,
|
|
5150
5159
|
mimeType: image.mimeType,
|
|
5151
5160
|
basis: options.basis || { format: selectSupportedBasisFormat() }
|
|
@@ -13,8 +13,8 @@ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"))
|
|
|
13
13
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
14
14
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
15
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
16
|
-
var _draco = require("@loaders.gl/draco");
|
|
17
16
|
var _loaderUtils = require("@loaders.gl/loader-utils");
|
|
17
|
+
var _draco = require("@loaders.gl/draco");
|
|
18
18
|
var _gltfScenegraph = require("../api/gltf-scenegraph");
|
|
19
19
|
var _gltfAttributeUtils = require("../gltf-utils/gltf-attribute-utils");
|
|
20
20
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
@@ -106,7 +106,7 @@ function decompressPrimitive(_x4, _x5, _x6, _x7) {
|
|
|
106
106
|
}
|
|
107
107
|
function _decompressPrimitive() {
|
|
108
108
|
_decompressPrimitive = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(scenegraph, primitive, options, context) {
|
|
109
|
-
var dracoExtension, buffer, bufferCopy,
|
|
109
|
+
var dracoExtension, buffer, bufferCopy, dracoOptions, decodedData, decodedAttributes, _i, _Object$entries, _Object$entries$_i, attributeName, decodedAttribute, accessorIndex, accessor;
|
|
110
110
|
return _regenerator.default.wrap(function _callee2$(_context3) {
|
|
111
111
|
while (1) switch (_context3.prev = _context3.next) {
|
|
112
112
|
case 0:
|
|
@@ -119,12 +119,11 @@ function _decompressPrimitive() {
|
|
|
119
119
|
case 3:
|
|
120
120
|
buffer = scenegraph.getTypedArrayForBufferView(dracoExtension.bufferView);
|
|
121
121
|
bufferCopy = (0, _loaderUtils.sliceArrayBuffer)(buffer.buffer, buffer.byteOffset);
|
|
122
|
-
parse = context.parse;
|
|
123
122
|
dracoOptions = _objectSpread({}, options);
|
|
124
123
|
delete dracoOptions['3d-tiles'];
|
|
125
|
-
_context3.next =
|
|
126
|
-
return
|
|
127
|
-
case
|
|
124
|
+
_context3.next = 9;
|
|
125
|
+
return (0, _loaderUtils.parseFromContext)(bufferCopy, _draco.DracoLoader, dracoOptions, context);
|
|
126
|
+
case 9:
|
|
128
127
|
decodedData = _context3.sent;
|
|
129
128
|
decodedAttributes = (0, _gltfAttributeUtils.getGLTFAccessors)(decodedData.attributes);
|
|
130
129
|
for (_i = 0, _Object$entries = Object.entries(decodedAttributes); _i < _Object$entries.length; _i++) {
|
|
@@ -144,7 +143,7 @@ function _decompressPrimitive() {
|
|
|
144
143
|
}
|
|
145
144
|
scenegraph.removeObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION);
|
|
146
145
|
checkPrimitive(primitive);
|
|
147
|
-
case
|
|
146
|
+
case 16:
|
|
148
147
|
case "end":
|
|
149
148
|
return _context3.stop();
|
|
150
149
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KHR_draco_mesh_compression.js","names":["_draco","require","_loaderUtils","_gltfScenegraph","_gltfAttributeUtils","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","_marked","_regeneratorRuntime2","mark","makeMeshPrimitiveIterator","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","KHR_DRACO_MESH_COMPRESSION","exports","preprocess","gltfData","options","context","scenegraph","GLTFScenegraph","_iterator","_step","primitive","getObjectExtension","decode","_x","_x2","_x3","_decode","_asyncToGenerator2","_regenerator","_callee","_options$gltf","promises","_iterator5","_step5","wrap","_callee$","_context2","prev","gltf","decompressMeshes","abrupt","decompressPrimitive","Promise","all","removeExtension","stop","encode","undefined","_iterator2","json","meshes","_step2","mesh","compressMesh","addRequiredExtension","_x4","_x5","_x6","_x7","_decompressPrimitive","_callee2","dracoExtension","buffer","bufferCopy","parse","dracoOptions","decodedData","decodedAttributes","_i","_Object$entries","_Object$entries$_i","attributeName","decodedAttribute","accessorIndex","accessor","_callee2$","_context3","getTypedArrayForBufferView","bufferView","sliceArrayBuffer","byteOffset","DracoLoader","sent","getGLTFAccessors","attributes","entries","_slicedToArray2","getAccessor","min","max","indices","getGLTFAccessor","removeObjectExtension","checkPrimitive","_context$parseSync","mode","DracoWriter","Error","compressedData","encodeSync","parseSync","fauxAccessors","_addFauxAttributes","bufferViewIndex","addBufferView","glTFMesh","primitives","extensions","_iterator3","_step3","_iterator4","_step4","makeMeshPrimitiveIterator$","_context","t0","finish","t1"],"sources":["../../../../src/lib/extensions/KHR_draco_mesh_compression.ts"],"sourcesContent":["// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression\n// Only TRIANGLES: 0x0004 and TRIANGLE_STRIP: 0x0005 are supported\n/* eslint-disable camelcase */\n\n/* eslint-disable camelcase */\nimport type {\n GLTF,\n GLTFAccessor,\n GLTFMeshPrimitive,\n GLTF_KHR_draco_mesh_compression\n} from '../types/gltf-json-schema';\nimport type {GLTFLoaderOptions} from '../../gltf-loader';\n\nimport type {LoaderContext} from '@loaders.gl/loader-utils';\nimport {DracoLoader} from '@loaders.gl/draco';\nimport {DracoLoaderOptions, DracoMesh} from '@loaders.gl/draco';\nimport {sliceArrayBuffer} from '@loaders.gl/loader-utils';\nimport {GLTFScenegraph} from '../api/gltf-scenegraph';\nimport {getGLTFAccessors, getGLTFAccessor} from '../gltf-utils/gltf-attribute-utils';\n\nconst KHR_DRACO_MESH_COMPRESSION = 'KHR_draco_mesh_compression';\n\n/** Extension name */\nexport const name = KHR_DRACO_MESH_COMPRESSION;\n\nexport function preprocess(\n gltfData: {json: GLTF},\n options: GLTFLoaderOptions,\n context: LoaderContext\n): void {\n const scenegraph = new GLTFScenegraph(gltfData);\n for (const primitive of makeMeshPrimitiveIterator(scenegraph)) {\n if (scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION)) {\n // TODO - Remove fallback accessors to make sure we don't load unnecessary buffers\n }\n }\n}\n\nexport async function decode(\n gltfData: {json: GLTF},\n options: GLTFLoaderOptions,\n context: LoaderContext\n): Promise<void> {\n if (!options?.gltf?.decompressMeshes) {\n return;\n }\n\n const scenegraph = new GLTFScenegraph(gltfData);\n const promises: Promise<void>[] = [];\n for (const primitive of makeMeshPrimitiveIterator(scenegraph)) {\n if (scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION)) {\n promises.push(decompressPrimitive(scenegraph, primitive, options, context));\n }\n }\n\n // Decompress meshes in parallel\n await Promise.all(promises);\n\n // We have now decompressed all primitives, so remove the top-level extension\n scenegraph.removeExtension(KHR_DRACO_MESH_COMPRESSION);\n}\n\nexport function encode(gltfData, options: GLTFLoaderOptions = {}): void {\n const scenegraph = new GLTFScenegraph(gltfData);\n\n for (const mesh of scenegraph.json.meshes || []) {\n // eslint-disable-next-line camelcase\n // @ts-ignore\n compressMesh(mesh, options);\n // NOTE: Only add the extension if something was actually compressed\n scenegraph.addRequiredExtension(KHR_DRACO_MESH_COMPRESSION);\n }\n}\n\n// DECODE\n\n// Unpacks one mesh primitive and removes the extension from the primitive\n// DracoDecoder needs to be imported and registered by app\n// Returns: Promise that resolves when all pending draco decoder jobs for this mesh complete\n\n// TODO - Implement fallback behavior per KHR_DRACO_MESH_COMPRESSION spec\n\nasync function decompressPrimitive(\n scenegraph: GLTFScenegraph,\n primitive: GLTFMeshPrimitive,\n options: GLTFLoaderOptions,\n context: LoaderContext\n): Promise<void> {\n const dracoExtension = scenegraph.getObjectExtension<GLTF_KHR_draco_mesh_compression>(\n primitive,\n KHR_DRACO_MESH_COMPRESSION\n );\n if (!dracoExtension) {\n return;\n }\n\n const buffer = scenegraph.getTypedArrayForBufferView(dracoExtension.bufferView);\n // TODO - parse does not yet deal well with byte offsets embedded in typed arrays. Copy buffer\n // TODO - remove when `parse` is fixed to handle `byteOffset`s\n const bufferCopy = sliceArrayBuffer(buffer.buffer, buffer.byteOffset); // , buffer.byteLength);\n\n const {parse} = context;\n const dracoOptions: DracoLoaderOptions = {...options};\n\n // TODO - remove hack: The entire tileset might be included, too expensive to serialize\n delete dracoOptions['3d-tiles'];\n const decodedData = (await parse(bufferCopy, DracoLoader, dracoOptions, context)) as DracoMesh;\n\n const decodedAttributes: {[key: string]: GLTFAccessor} = getGLTFAccessors(decodedData.attributes);\n\n // Restore min/max values\n for (const [attributeName, decodedAttribute] of Object.entries(decodedAttributes)) {\n if (attributeName in primitive.attributes) {\n const accessorIndex: number = primitive.attributes[attributeName];\n const accessor = scenegraph.getAccessor(accessorIndex);\n if (accessor?.min && accessor?.max) {\n decodedAttribute.min = accessor.min;\n decodedAttribute.max = accessor.max;\n }\n }\n }\n\n // @ts-ignore\n primitive.attributes = decodedAttributes;\n if (decodedData.indices) {\n // @ts-ignore\n primitive.indices = getGLTFAccessor(decodedData.indices);\n }\n\n // Extension has been processed, delete it\n scenegraph.removeObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION);\n\n checkPrimitive(primitive);\n}\n\n// ENCODE\n\n// eslint-disable-next-line max-len\n// Only TRIANGLES: 0x0004 and TRIANGLE_STRIP: 0x0005 are supported\nfunction compressMesh(attributes, indices, mode: number = 4, options, context: LoaderContext) {\n if (!options.DracoWriter) {\n throw new Error('options.gltf.DracoWriter not provided');\n }\n\n // TODO - use DracoWriter using encode w/ registered DracoWriter...\n const compressedData = options.DracoWriter.encodeSync({attributes});\n\n // Draco compression may change the order and number of vertices in a mesh.\n // To satisfy the requirement that accessors properties be correct for both\n // compressed and uncompressed data, generators should create uncompressed\n // attributes and indices using data that has been decompressed from the Draco buffer,\n // rather than the original source data.\n // @ts-ignore TODO this needs to be fixed\n const decodedData = context?.parseSync?.({attributes});\n const fauxAccessors = options._addFauxAttributes(decodedData.attributes);\n\n const bufferViewIndex = options.addBufferView(compressedData);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: fauxAccessors, // TODO - verify with spec\n mode, // GL.POINTS\n extensions: {\n [KHR_DRACO_MESH_COMPRESSION]: {\n bufferView: bufferViewIndex,\n attributes: fauxAccessors // TODO - verify with spec\n }\n }\n }\n ]\n };\n\n return glTFMesh;\n}\n\n// UTILS\n\nfunction checkPrimitive(primitive: GLTFMeshPrimitive) {\n if (!primitive.attributes && Object.keys(primitive.attributes).length > 0) {\n throw new Error('glTF: Empty primitive detected: Draco decompression failure?');\n }\n}\n\nfunction* makeMeshPrimitiveIterator(scenegraph) {\n for (const mesh of scenegraph.json.meshes || []) {\n for (const primitive of mesh.primitives) {\n yield primitive;\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"KHR_draco_mesh_compression.js","names":["_loaderUtils","require","_draco","_gltfScenegraph","_gltfAttributeUtils","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","_marked","_regeneratorRuntime2","mark","makeMeshPrimitiveIterator","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","KHR_DRACO_MESH_COMPRESSION","exports","preprocess","gltfData","options","context","scenegraph","GLTFScenegraph","_iterator","_step","primitive","getObjectExtension","decode","_x","_x2","_x3","_decode","_asyncToGenerator2","_regenerator","_callee","_options$gltf","promises","_iterator5","_step5","wrap","_callee$","_context2","prev","gltf","decompressMeshes","abrupt","decompressPrimitive","Promise","all","removeExtension","stop","encode","undefined","_iterator2","json","meshes","_step2","mesh","compressMesh","addRequiredExtension","_x4","_x5","_x6","_x7","_decompressPrimitive","_callee2","dracoExtension","buffer","bufferCopy","dracoOptions","decodedData","decodedAttributes","_i","_Object$entries","_Object$entries$_i","attributeName","decodedAttribute","accessorIndex","accessor","_callee2$","_context3","getTypedArrayForBufferView","bufferView","sliceArrayBuffer","byteOffset","parseFromContext","DracoLoader","sent","getGLTFAccessors","attributes","entries","_slicedToArray2","getAccessor","min","max","indices","getGLTFAccessor","removeObjectExtension","checkPrimitive","_context$parseSync","mode","DracoWriter","Error","compressedData","encodeSync","parseSync","fauxAccessors","_addFauxAttributes","bufferViewIndex","addBufferView","glTFMesh","primitives","extensions","_iterator3","_step3","_iterator4","_step4","makeMeshPrimitiveIterator$","_context","t0","finish","t1"],"sources":["../../../../src/lib/extensions/KHR_draco_mesh_compression.ts"],"sourcesContent":["// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression\n// Only TRIANGLES: 0x0004 and TRIANGLE_STRIP: 0x0005 are supported\n/* eslint-disable camelcase */\n\nimport type {LoaderContext} from '@loaders.gl/loader-utils';\nimport {sliceArrayBuffer, parseFromContext} from '@loaders.gl/loader-utils';\n\nimport {DracoLoader} from '@loaders.gl/draco';\nimport {DracoLoaderOptions} from '@loaders.gl/draco';\n\nimport type {\n GLTF,\n GLTFAccessor,\n GLTFMeshPrimitive,\n GLTF_KHR_draco_mesh_compression\n} from '../types/gltf-json-schema';\nimport type {GLTFLoaderOptions} from '../../gltf-loader';\n\nimport {GLTFScenegraph} from '../api/gltf-scenegraph';\nimport {getGLTFAccessors, getGLTFAccessor} from '../gltf-utils/gltf-attribute-utils';\n\nconst KHR_DRACO_MESH_COMPRESSION = 'KHR_draco_mesh_compression';\n\n/** Extension name */\nexport const name = KHR_DRACO_MESH_COMPRESSION;\n\nexport function preprocess(\n gltfData: {json: GLTF},\n options: GLTFLoaderOptions,\n context: LoaderContext\n): void {\n const scenegraph = new GLTFScenegraph(gltfData);\n for (const primitive of makeMeshPrimitiveIterator(scenegraph)) {\n if (scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION)) {\n // TODO - Remove fallback accessors to make sure we don't load unnecessary buffers\n }\n }\n}\n\nexport async function decode(\n gltfData: {json: GLTF},\n options: GLTFLoaderOptions,\n context: LoaderContext\n): Promise<void> {\n if (!options?.gltf?.decompressMeshes) {\n return;\n }\n\n const scenegraph = new GLTFScenegraph(gltfData);\n const promises: Promise<void>[] = [];\n for (const primitive of makeMeshPrimitiveIterator(scenegraph)) {\n if (scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION)) {\n promises.push(decompressPrimitive(scenegraph, primitive, options, context));\n }\n }\n\n // Decompress meshes in parallel\n await Promise.all(promises);\n\n // We have now decompressed all primitives, so remove the top-level extension\n scenegraph.removeExtension(KHR_DRACO_MESH_COMPRESSION);\n}\n\nexport function encode(gltfData, options: GLTFLoaderOptions = {}): void {\n const scenegraph = new GLTFScenegraph(gltfData);\n\n for (const mesh of scenegraph.json.meshes || []) {\n // eslint-disable-next-line camelcase\n // @ts-ignore\n compressMesh(mesh, options);\n // NOTE: Only add the extension if something was actually compressed\n scenegraph.addRequiredExtension(KHR_DRACO_MESH_COMPRESSION);\n }\n}\n\n// DECODE\n\n// Unpacks one mesh primitive and removes the extension from the primitive\n// DracoDecoder needs to be imported and registered by app\n// Returns: Promise that resolves when all pending draco decoder jobs for this mesh complete\n\n// TODO - Implement fallback behavior per KHR_DRACO_MESH_COMPRESSION spec\n\nasync function decompressPrimitive(\n scenegraph: GLTFScenegraph,\n primitive: GLTFMeshPrimitive,\n options: GLTFLoaderOptions,\n context: LoaderContext\n): Promise<void> {\n const dracoExtension = scenegraph.getObjectExtension<GLTF_KHR_draco_mesh_compression>(\n primitive,\n KHR_DRACO_MESH_COMPRESSION\n );\n if (!dracoExtension) {\n return;\n }\n\n const buffer = scenegraph.getTypedArrayForBufferView(dracoExtension.bufferView);\n // TODO - parse does not yet deal well with byte offsets embedded in typed arrays. Copy buffer\n // TODO - remove when `parse` is fixed to handle `byteOffset`s\n const bufferCopy = sliceArrayBuffer(buffer.buffer, buffer.byteOffset); // , buffer.byteLength);\n\n const dracoOptions: DracoLoaderOptions = {...options};\n\n // TODO - remove hack: The entire tileset might be included, too expensive to serialize\n delete dracoOptions['3d-tiles'];\n const decodedData = await parseFromContext(bufferCopy, DracoLoader, dracoOptions, context);\n\n const decodedAttributes: {[key: string]: GLTFAccessor} = getGLTFAccessors(decodedData.attributes);\n\n // Restore min/max values\n for (const [attributeName, decodedAttribute] of Object.entries(decodedAttributes)) {\n if (attributeName in primitive.attributes) {\n const accessorIndex: number = primitive.attributes[attributeName];\n const accessor = scenegraph.getAccessor(accessorIndex);\n if (accessor?.min && accessor?.max) {\n decodedAttribute.min = accessor.min;\n decodedAttribute.max = accessor.max;\n }\n }\n }\n\n // @ts-ignore\n primitive.attributes = decodedAttributes;\n if (decodedData.indices) {\n // @ts-ignore\n primitive.indices = getGLTFAccessor(decodedData.indices);\n }\n\n // Extension has been processed, delete it\n scenegraph.removeObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION);\n\n checkPrimitive(primitive);\n}\n\n// ENCODE\n\n// eslint-disable-next-line max-len\n// Only TRIANGLES: 0x0004 and TRIANGLE_STRIP: 0x0005 are supported\nfunction compressMesh(attributes, indices, mode: number = 4, options, context: LoaderContext) {\n if (!options.DracoWriter) {\n throw new Error('options.gltf.DracoWriter not provided');\n }\n\n // TODO - use DracoWriter using encode w/ registered DracoWriter...\n const compressedData = options.DracoWriter.encodeSync({attributes});\n\n // Draco compression may change the order and number of vertices in a mesh.\n // To satisfy the requirement that accessors properties be correct for both\n // compressed and uncompressed data, generators should create uncompressed\n // attributes and indices using data that has been decompressed from the Draco buffer,\n // rather than the original source data.\n // @ts-ignore TODO this needs to be fixed\n const decodedData = context?.parseSync?.({attributes});\n const fauxAccessors = options._addFauxAttributes(decodedData.attributes);\n\n const bufferViewIndex = options.addBufferView(compressedData);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: fauxAccessors, // TODO - verify with spec\n mode, // GL.POINTS\n extensions: {\n [KHR_DRACO_MESH_COMPRESSION]: {\n bufferView: bufferViewIndex,\n attributes: fauxAccessors // TODO - verify with spec\n }\n }\n }\n ]\n };\n\n return glTFMesh;\n}\n\n// UTILS\n\nfunction checkPrimitive(primitive: GLTFMeshPrimitive) {\n if (!primitive.attributes && Object.keys(primitive.attributes).length > 0) {\n throw new Error('glTF: Empty primitive detected: Draco decompression failure?');\n }\n}\n\nfunction* makeMeshPrimitiveIterator(scenegraph) {\n for (const mesh of scenegraph.json.meshes || []) {\n for (const primitive of mesh.primitives) {\n yield primitive;\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -225,16 +225,16 @@ function loadImage(_x9, _x10, _x11, _x12, _x13) {
|
|
|
225
225
|
}
|
|
226
226
|
function _loadImage() {
|
|
227
227
|
_loadImage = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee4(gltf, image, index, options, context) {
|
|
228
|
-
var
|
|
228
|
+
var arrayBuffer, uri, fetch, response, array, parsedImage;
|
|
229
229
|
return _regenerator.default.wrap(function _callee4$(_context4) {
|
|
230
230
|
while (1) switch (_context4.prev = _context4.next) {
|
|
231
231
|
case 0:
|
|
232
|
-
fetch = context.fetch, parse = context.parse;
|
|
233
232
|
if (!(image.uri && !image.hasOwnProperty('bufferView'))) {
|
|
234
233
|
_context4.next = 10;
|
|
235
234
|
break;
|
|
236
235
|
}
|
|
237
236
|
uri = (0, _resolveUrl.resolveUrl)(image.uri, options);
|
|
237
|
+
fetch = context.fetch;
|
|
238
238
|
_context4.next = 5;
|
|
239
239
|
return fetch(uri);
|
|
240
240
|
case 5:
|
|
@@ -253,7 +253,7 @@ function _loadImage() {
|
|
|
253
253
|
}
|
|
254
254
|
(0, _assert.assert)(arrayBuffer, 'glTF image has no data');
|
|
255
255
|
_context4.next = 14;
|
|
256
|
-
return
|
|
256
|
+
return (0, _loaderUtils.parseFromContext)(arrayBuffer, [_images.ImageLoader, _textures.BasisLoader], _objectSpread(_objectSpread({}, options), {}, {
|
|
257
257
|
mimeType: image.mimeType,
|
|
258
258
|
basis: options.basis || {
|
|
259
259
|
format: (0, _textures.selectSupportedBasisFormat)()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-gltf.js","names":["_loaderUtils","require","_images","_textures","_assert","_parseGlb","_resolveUrl","_getTypedArray","_gltfExtensions","_normalizeGltfV","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","isGLTF","arrayBuffer","options","byteOffset","isGLB","parseGLTF","_x","_x2","_parseGLTF","_asyncToGenerator2","_regenerator","mark","_callee","gltf","arrayBufferOrString","_options$gltf","_options$gltf2","_options$gltf3","context","_args","wrap","_callee$","_context","prev","undefined","parseGLTFContainerSync","normalizeGLTFV1","normalize","preprocessExtensions","loadBuffers","json","buffers","loadImages","decodeExtensions","abrupt","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","promises","_iterator2","_step2","imageIndex","_callee3$","_context3","getReferencesImageIndices","loadImage","Promise","all","Set","textures","_iterator","_step","texture","add","sort","_x9","_x10","_x11","_x12","_x13","_loadImage","_callee4","image","index","parse","array","parsedImage","_callee4$","_context4","hasOwnProperty","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 type {GLTFLoaderOptions} from '../../gltf-loader';\nimport type {GLTFWithBuffers} from '../types/gltf-types';\nimport type {GLB} from '../types/glb-types';\nimport type {ParseGLBOptions} from './parse-glb';\n\nimport {parseJSON, sliceArrayBuffer} from '@loaders.gl/loader-utils';\nimport {ImageLoader} from '@loaders.gl/images';\nimport {BasisLoader, selectSupportedBasisFormat} from '@loaders.gl/textures';\n\nimport {assert} from '../utils/assert';\nimport {isGLB, parseGLBSync} from './parse-glb';\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';\n\n/** */\nexport type ParseGLTFOptions = ParseGLBOptions & {\n normalize?: boolean;\n loadImages?: boolean;\n loadBuffers?: boolean;\n decompressMeshes?: boolean;\n excludeExtensions?: string[];\n\n /** @deprecated not supported in v4. `postProcessGLTF()` must be called by the application */\n postProcess?: false;\n};\n\n/** Check if an array buffer appears to contain GLTF data */\nexport function isGLTF(arrayBuffer: ArrayBuffer, options?: ParseGLTFOptions): 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): Promise<GLTFWithBuffers> {\n parseGLTFContainerSync(gltf, arrayBufferOrString, byteOffset, options);\n\n normalizeGLTFV1(gltf, {normalize: options?.gltf?.normalize});\n\n preprocessExtensions(gltf, options, context);\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 // loadImages and decodeExtensions should not be running in parallel, because\n // decodeExtensions uses data from images taken during the loadImages call.\n if (options?.gltf?.loadImages) {\n await loadImages(gltf, options, context);\n }\n\n await decodeExtensions(gltf, options, context);\n\n return gltf;\n}\n\n/**\n *\n * @param gltf\n * @param data - can be ArrayBuffer (GLB), ArrayBuffer (Binary JSON), String (JSON), or Object (parsed JSON)\n * @param byteOffset\n * @param options\n */\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 {\n ...options,\n mimeType: image.mimeType,\n basis: options.basis || {format: selectSupportedBasisFormat()}\n },\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":";;;;;;;;;;;AAOA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,SAAA,GAAAF,OAAA;AAEA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,SAAA,GAAAJ,OAAA;AACA,IAAAK,WAAA,GAAAL,OAAA;AACA,IAAAM,cAAA,GAAAN,OAAA;AACA,IAAAO,eAAA,GAAAP,OAAA;AACA,IAAAQ,eAAA,GAAAR,OAAA;AAAyD,SAAAS,QAAAC,MAAA,EAAAC,cAAA,QAAAC,IAAA,GAAAC,MAAA,CAAAD,IAAA,CAAAF,MAAA,OAAAG,MAAA,CAAAC,qBAAA,QAAAC,OAAA,GAAAF,MAAA,CAAAC,qBAAA,CAAAJ,MAAA,GAAAC,cAAA,KAAAI,OAAA,GAAAA,OAAA,CAAAC,MAAA,WAAAC,GAAA,WAAAJ,MAAA,CAAAK,wBAAA,CAAAR,MAAA,EAAAO,GAAA,EAAAE,UAAA,OAAAP,IAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,IAAA,EAAAG,OAAA,YAAAH,IAAA;AAAA,SAAAU,cAAAC,MAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAC,SAAA,CAAAC,MAAA,EAAAF,CAAA,UAAAG,MAAA,WAAAF,SAAA,CAAAD,CAAA,IAAAC,SAAA,CAAAD,CAAA,QAAAA,CAAA,OAAAf,OAAA,CAAAI,MAAA,CAAAc,MAAA,OAAAC,OAAA,WAAAC,GAAA,QAAAC,gBAAA,CAAAC,OAAA,EAAAR,MAAA,EAAAM,GAAA,EAAAF,MAAA,CAAAE,GAAA,SAAAhB,MAAA,CAAAmB,yBAAA,GAAAnB,MAAA,CAAAoB,gBAAA,CAAAV,MAAA,EAAAV,MAAA,CAAAmB,yBAAA,CAAAL,MAAA,KAAAlB,OAAA,CAAAI,MAAA,CAAAc,MAAA,GAAAC,OAAA,WAAAC,GAAA,IAAAhB,MAAA,CAAAqB,cAAA,CAAAX,MAAA,EAAAM,GAAA,EAAAhB,MAAA,CAAAK,wBAAA,CAAAS,MAAA,EAAAE,GAAA,iBAAAN,MAAA;AAAA,SAAAY,2BAAAC,CAAA,EAAAC,cAAA,QAAAC,EAAA,UAAAC,MAAA,oBAAAH,CAAA,CAAAG,MAAA,CAAAC,QAAA,KAAAJ,CAAA,qBAAAE,EAAA,QAAAG,KAAA,CAAAC,OAAA,CAAAN,CAAA,MAAAE,EAAA,GAAAK,2BAAA,CAAAP,CAAA,MAAAC,cAAA,IAAAD,CAAA,WAAAA,CAAA,CAAAV,MAAA,qBAAAY,EAAA,EAAAF,CAAA,GAAAE,EAAA,MAAAd,CAAA,UAAAoB,CAAA,YAAAA,EAAA,eAAAC,CAAA,EAAAD,CAAA,EAAAE,CAAA,WAAAA,EAAA,QAAAtB,CAAA,IAAAY,CAAA,CAAAV,MAAA,WAAAqB,IAAA,mBAAAA,IAAA,SAAAC,KAAA,EAAAZ,CAAA,CAAAZ,CAAA,UAAAyB,CAAA,WAAAA,EAAAC,EAAA,UAAAA,EAAA,KAAAC,CAAA,EAAAP,CAAA,gBAAAQ,SAAA,iJAAAC,gBAAA,SAAAC,MAAA,UAAAC,GAAA,WAAAV,CAAA,WAAAA,EAAA,IAAAP,EAAA,GAAAA,EAAA,CAAAkB,IAAA,CAAApB,CAAA,MAAAU,CAAA,WAAAA,EAAA,QAAAW,IAAA,GAAAnB,EAAA,CAAAoB,IAAA,IAAAL,gBAAA,GAAAI,IAAA,CAAAV,IAAA,SAAAU,IAAA,KAAAR,CAAA,WAAAA,EAAAU,GAAA,IAAAL,MAAA,SAAAC,GAAA,GAAAI,GAAA,KAAAR,CAAA,WAAAA,EAAA,eAAAE,gBAAA,IAAAf,EAAA,CAAAsB,MAAA,UAAAtB,EAAA,CAAAsB,MAAA,oBAAAN,MAAA,QAAAC,GAAA;AAAA,SAAAZ,4BAAAP,CAAA,EAAAyB,MAAA,SAAAzB,CAAA,qBAAAA,CAAA,sBAAA0B,iBAAA,CAAA1B,CAAA,EAAAyB,MAAA,OAAAf,CAAA,GAAAjC,MAAA,CAAAkD,SAAA,CAAAC,QAAA,CAAAR,IAAA,CAAApB,CAAA,EAAA6B,KAAA,aAAAnB,CAAA,iBAAAV,CAAA,CAAA8B,WAAA,EAAApB,CAAA,GAAAV,CAAA,CAAA8B,WAAA,CAAAC,IAAA,MAAArB,CAAA,cAAAA,CAAA,mBAAAL,KAAA,CAAA2B,IAAA,CAAAhC,CAAA,OAAAU,CAAA,+DAAAuB,IAAA,CAAAvB,CAAA,UAAAgB,iBAAA,CAAA1B,CAAA,EAAAyB,MAAA;AAAA,SAAAC,kBAAAQ,GAAA,EAAAC,GAAA,QAAAA,GAAA,YAAAA,GAAA,GAAAD,GAAA,CAAA5C,MAAA,EAAA6C,GAAA,GAAAD,GAAA,CAAA5C,MAAA,WAAAF,CAAA,MAAAgD,IAAA,OAAA/B,KAAA,CAAA8B,GAAA,GAAA/C,CAAA,GAAA+C,GAAA,EAAA/C,CAAA,IAAAgD,IAAA,CAAAhD,CAAA,IAAA8C,GAAA,CAAA9C,CAAA,UAAAgD,IAAA;AAelD,SAASC,MAAMA,CAACC,WAAwB,EAAEC,OAA0B,EAAW;EACpF,IAAMC,UAAU,GAAG,CAAC;EACpB,OAAO,IAAAC,eAAK,EAACH,WAAW,EAAEE,UAAU,EAAED,OAAO,CAAC;AAChD;AAAC,SAEqBG,SAASA,CAAAC,EAAA,EAAAC,GAAA;EAAA,OAAAC,UAAA,CAAA5D,KAAA,OAAAI,SAAA;AAAA;AAAA,SAAAwD,WAAA;EAAAA,UAAA,OAAAC,kBAAA,CAAAnD,OAAA,EAAAoD,YAAA,CAAApD,OAAA,CAAAqD,IAAA,CAAxB,SAAAC,QACLC,IAAqB,EACrBC,mBAAmB;IAAA,IAAAC,aAAA,EAAAC,cAAA,EAAAC,cAAA;IAAA,IAAAd,UAAA;MAAAD,OAAA;MAAAgB,OAAA;MAAAC,KAAA,GAAAnE,SAAA;IAAA,OAAA0D,YAAA,CAAApD,OAAA,CAAA8D,IAAA,UAAAC,SAAAC,QAAA;MAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAArC,IAAA;QAAA;UACnBkB,UAAU,GAAAgB,KAAA,CAAAlE,MAAA,QAAAkE,KAAA,QAAAK,SAAA,GAAAL,KAAA,MAAG,CAAC;UACdjB,OAA0B,GAAAiB,KAAA,CAAAlE,MAAA,OAAAkE,KAAA,MAAAK,SAAA;UAC1BN,OAAsB,GAAAC,KAAA,CAAAlE,MAAA,OAAAkE,KAAA,MAAAK,SAAA;UAEtBC,sBAAsB,CAACZ,IAAI,EAAEC,mBAAmB,EAAEX,UAAU,EAAED,OAAO,CAAC;UAEtE,IAAAwB,+BAAe,EAACb,IAAI,EAAE;YAACc,SAAS,EAAEzB,OAAO,aAAPA,OAAO,wBAAAa,aAAA,GAAPb,OAAO,CAAEW,IAAI,cAAAE,aAAA,uBAAbA,aAAA,CAAeY;UAAS,CAAC,CAAC;UAE5D,IAAAC,oCAAoB,EAACf,IAAI,EAAEX,OAAO,EAAEgB,OAAO,CAAC;UAAC,MAGzChB,OAAO,aAAPA,OAAO,gBAAAc,cAAA,GAAPd,OAAO,CAAEW,IAAI,cAAAG,cAAA,eAAbA,cAAA,CAAea,WAAW,IAAIhB,IAAI,CAACiB,IAAI,CAACC,OAAO;YAAAT,QAAA,CAAArC,IAAA;YAAA;UAAA;UAAAqC,QAAA,CAAArC,IAAA;UAAA,OAC3C4C,WAAW,CAAChB,IAAI,EAAEX,OAAO,EAAEgB,OAAO,CAAC;QAAA;UAAA,MAKvChB,OAAO,aAAPA,OAAO,gBAAAe,cAAA,GAAPf,OAAO,CAAEW,IAAI,cAAAI,cAAA,eAAbA,cAAA,CAAee,UAAU;YAAAV,QAAA,CAAArC,IAAA;YAAA;UAAA;UAAAqC,QAAA,CAAArC,IAAA;UAAA,OACrB+C,UAAU,CAACnB,IAAI,EAAEX,OAAO,EAAEgB,OAAO,CAAC;QAAA;UAAAI,QAAA,CAAArC,IAAA;UAAA,OAGpC,IAAAgD,gCAAgB,EAACpB,IAAI,EAAEX,OAAO,EAAEgB,OAAO,CAAC;QAAA;UAAA,OAAAI,QAAA,CAAAY,MAAA,WAEvCrB,IAAI;QAAA;QAAA;UAAA,OAAAS,QAAA,CAAAa,IAAA;MAAA;IAAA,GAAAvB,OAAA;EAAA,CACZ;EAAA,OAAAJ,UAAA,CAAA5D,KAAA,OAAAI,SAAA;AAAA;AASD,SAASyE,sBAAsBA,CAACZ,IAAI,EAAEuB,IAAI,EAAEjC,UAAU,EAAED,OAAO,EAAE;EAE/D,IAAIA,OAAO,CAACmC,GAAG,EAAE;IACfxB,IAAI,CAACyB,OAAO,GAAGpC,OAAO,CAACmC,GAAG;EAC5B;EAGA,IAAID,IAAI,YAAYG,WAAW,IAAI,CAAC,IAAAnC,eAAK,EAACgC,IAAI,EAAEjC,UAAU,EAAED,OAAO,CAAC,EAAE;IACpE,IAAMsC,WAAW,GAAG,IAAIC,WAAW,CAAC,CAAC;IACrCL,IAAI,GAAGI,WAAW,CAACE,MAAM,CAACN,IAAI,CAAC;EACjC;EAEA,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;IAE5BvB,IAAI,CAACiB,IAAI,GAAG,IAAAa,sBAAS,EAACP,IAAI,CAAC;EAC7B,CAAC,MAAM,IAAIA,IAAI,YAAYG,WAAW,EAAE;IAEtC,IAAMK,GAAQ,GAAG,CAAC,CAAQ;IAC1BzC,UAAU,GAAG,IAAA0C,sBAAY,EAACD,GAAG,EAAER,IAAI,EAAEjC,UAAU,EAAED,OAAO,CAAC0C,GAAG,CAAC;IAE7D,IAAAE,cAAM,EAACF,GAAG,CAACG,IAAI,KAAK,MAAM,8BAAAC,MAAA,CAA8BJ,GAAG,CAACG,IAAI,CAAE,CAAC;IAEnElC,IAAI,CAACoC,IAAI,GAAGL,GAAG;IACf/B,IAAI,CAACiB,IAAI,GAAGc,GAAG,CAACd,IAAI;EACtB,CAAC,MAAM;IACL,IAAAgB,cAAM,EAAC,KAAK,EAAE,qCAAqC,CAAC;EACtD;EAIA,IAAMf,OAAO,GAAGlB,IAAI,CAACiB,IAAI,CAACC,OAAO,IAAI,EAAE;EACvClB,IAAI,CAACkB,OAAO,GAAG,IAAI/D,KAAK,CAAC+D,OAAO,CAAC9E,MAAM,CAAC,CAACiG,IAAI,CAAC,IAAI,CAAC;EAGnD,IAAIrC,IAAI,CAACoC,IAAI,IAAIpC,IAAI,CAACoC,IAAI,CAACE,MAAM,CAACC,WAAW,EAAE;IAC7C,IAAOC,SAAS,GAAIxC,IAAI,CAACoC,IAAI,CAAtBI,SAAS;IAChBxC,IAAI,CAACkB,OAAO,CAAC,CAAC,CAAC,GAAG;MAChB9B,WAAW,EAAEoD,SAAS,CAAC,CAAC,CAAC,CAACpD,WAAW;MACrCE,UAAU,EAAEkD,SAAS,CAAC,CAAC,CAAC,CAAClD,UAAU;MACnCmD,UAAU,EAAED,SAAS,CAAC,CAAC,CAAC,CAACC;IAC3B,CAAC;EAKH;EAGA,IAAMC,MAAM,GAAG1C,IAAI,CAACiB,IAAI,CAACyB,MAAM,IAAI,EAAE;EACrC1C,IAAI,CAAC0C,MAAM,GAAG,IAAIvF,KAAK,CAACuF,MAAM,CAACtG,MAAM,CAAC,CAACiG,IAAI,CAAC,CAAC,CAAC,CAAC;AACjD;AAAC,SAKcrB,WAAWA,CAAA2B,GAAA,EAAAC,GAAA,EAAAC,GAAA;EAAA,OAAAC,YAAA,CAAA/G,KAAA,OAAAI,SAAA;AAAA;AAAA,SAAA2G,aAAA;EAAAA,YAAA,OAAAlD,kBAAA,CAAAnD,OAAA,EAAAoD,YAAA,CAAApD,OAAA,CAAAqD,IAAA,CAA1B,SAAAiD,SAA2B/C,IAAqB,EAAEX,OAAO,EAAEgB,OAAsB;IAAA,IAAAa,OAAA,EAAAhF,CAAA,EAAA8G,MAAA,EAAAC,cAAA,EAAAC,qBAAA,EAAAC,KAAA,EAAA3B,GAAA,EAAA4B,QAAA,EAAAhE,WAAA;IAAA,OAAAS,YAAA,CAAApD,OAAA,CAAA8D,IAAA,UAAA8C,UAAAC,SAAA;MAAA,kBAAAA,SAAA,CAAA5C,IAAA,GAAA4C,SAAA,CAAAlF,IAAA;QAAA;UAEzE8C,OAAO,GAAGlB,IAAI,CAACiB,IAAI,CAACC,OAAO,IAAI,EAAE;UAC9BhF,CAAC,GAAG,CAAC;QAAA;UAAA,MAAEA,CAAC,GAAGgF,OAAO,CAAC9E,MAAM;YAAAkH,SAAA,CAAAlF,IAAA;YAAA;UAAA;UAC1B4E,MAAM,GAAG9B,OAAO,CAAChF,CAAC,CAAC;UAAA,KACrB8G,MAAM,CAACxB,GAAG;YAAA8B,SAAA,CAAAlF,IAAA;YAAA;UAAA;UACL+E,KAAK,GAAI9C,OAAO,CAAhB8C,KAAK;UACZ,IAAAlB,cAAM,EAACkB,KAAK,CAAC;UAEP3B,GAAG,GAAG,IAAA+B,sBAAU,EAACP,MAAM,CAACxB,GAAG,EAAEnC,OAAO,CAAC;UAAAiE,SAAA,CAAAlF,IAAA;UAAA,OACpBiC,OAAO,aAAPA,OAAO,wBAAA4C,cAAA,GAAP5C,OAAO,CAAE8C,KAAK,cAAAF,cAAA,uBAAdA,cAAA,CAAA/E,IAAA,CAAAmC,OAAO,EAAUmB,GAAG,CAAC;QAAA;UAAtC4B,QAAQ,GAAAE,SAAA,CAAAE,IAAA;UAAAF,SAAA,CAAAlF,IAAA;UAAA,OACYgF,QAAQ,aAARA,QAAQ,wBAAAF,qBAAA,GAARE,QAAQ,CAAEhE,WAAW,cAAA8D,qBAAA,uBAArBA,qBAAA,CAAAhF,IAAA,CAAAkF,QAAwB,CAAC;QAAA;UAA7ChE,WAAW,GAAAkE,SAAA,CAAAE,IAAA;UAEjBxD,IAAI,CAACkB,OAAO,CAAChF,CAAC,CAAC,GAAG;YAChBkD,WAAW,EAAXA,WAAW;YACXE,UAAU,EAAE,CAAC;YACbmD,UAAU,EAAErD,WAAW,CAACqD;UAC1B,CAAC;UAED,OAAOO,MAAM,CAACxB,GAAG;UAAC8B,SAAA,CAAAlF,IAAA;UAAA;QAAA;UACb,IAAI4B,IAAI,CAACkB,OAAO,CAAChF,CAAC,CAAC,KAAK,IAAI,EAAE;YACnC8D,IAAI,CAACkB,OAAO,CAAChF,CAAC,CAAC,GAAG;cAChBkD,WAAW,EAAE,IAAIsC,WAAW,CAACsB,MAAM,CAACP,UAAU,CAAC;cAC/CnD,UAAU,EAAE,CAAC;cACbmD,UAAU,EAAEO,MAAM,CAACP;YACrB,CAAC;UACH;QAAC;UAvBiC,EAAEvG,CAAC;UAAAoH,SAAA,CAAAlF,IAAA;UAAA;QAAA;QAAA;UAAA,OAAAkF,SAAA,CAAAhC,IAAA;MAAA;IAAA,GAAAyB,QAAA;EAAA,CAyBxC;EAAA,OAAAD,YAAA,CAAA/G,KAAA,OAAAI,SAAA;AAAA;AAAA,SAUcgF,UAAUA,CAAAsC,GAAA,EAAAC,GAAA,EAAAC,GAAA;EAAA,OAAAC,WAAA,CAAA7H,KAAA,OAAAI,SAAA;AAAA;AAAA,SAAAyH,YAAA;EAAAA,WAAA,OAAAhE,kBAAA,CAAAnD,OAAA,EAAAoD,YAAA,CAAApD,OAAA,CAAAqD,IAAA,CAAzB,SAAA+D,SAA0B7D,IAAqB,EAAEX,OAAO,EAAEgB,OAAsB;IAAA,IAAAyD,YAAA,EAAApB,MAAA,EAAAqB,QAAA,EAAAC,UAAA,EAAAC,MAAA,EAAAC,UAAA;IAAA,OAAArE,YAAA,CAAApD,OAAA,CAAA8D,IAAA,UAAA4D,UAAAC,SAAA;MAAA,kBAAAA,SAAA,CAAA1D,IAAA,GAAA0D,SAAA,CAAAhG,IAAA;QAAA;UACxE0F,YAAY,GAAGO,yBAAyB,CAACrE,IAAI,CAAC;UAE9C0C,MAAM,GAAG1C,IAAI,CAACiB,IAAI,CAACyB,MAAM,IAAI,EAAE;UAE/BqB,QAAwB,GAAG,EAAE;UAAAC,UAAA,GAAAnH,0BAAA,CACViH,YAAY;UAAA;YAArC,KAAAE,UAAA,CAAAzG,CAAA,MAAA0G,MAAA,GAAAD,UAAA,CAAAxG,CAAA,IAAAC,IAAA,GAAuC;cAA5ByG,UAAU,GAAAD,MAAA,CAAAvG,KAAA;cACnBqG,QAAQ,CAACjI,IAAI,CAACwI,SAAS,CAACtE,IAAI,EAAE0C,MAAM,CAACwB,UAAU,CAAC,EAAEA,UAAU,EAAE7E,OAAO,EAAEgB,OAAO,CAAC,CAAC;YAClF;UAAC,SAAApC,GAAA;YAAA+F,UAAA,CAAArG,CAAA,CAAAM,GAAA;UAAA;YAAA+F,UAAA,CAAAnG,CAAA;UAAA;UAAAuG,SAAA,CAAAhG,IAAA;UAAA,OAEYmG,OAAO,CAACC,GAAG,CAACT,QAAQ,CAAC;QAAA;UAAA,OAAAK,SAAA,CAAA/C,MAAA,WAAA+C,SAAA,CAAAZ,IAAA;QAAA;QAAA;UAAA,OAAAY,SAAA,CAAA9C,IAAA;MAAA;IAAA,GAAAuC,QAAA;EAAA,CACnC;EAAA,OAAAD,WAAA,CAAA7H,KAAA,OAAAI,SAAA;AAAA;AAGD,SAASkI,yBAAyBA,CAACrE,IAAqB,EAAY;EAClE,IAAM8D,YAAY,GAAG,IAAIW,GAAG,CAAS,CAAC;EAEtC,IAAMC,QAAQ,GAAG1E,IAAI,CAACiB,IAAI,CAACyD,QAAQ,IAAI,EAAE;EAAC,IAAAC,SAAA,GAAA9H,0BAAA,CACpB6H,QAAQ;IAAAE,KAAA;EAAA;IAA9B,KAAAD,SAAA,CAAApH,CAAA,MAAAqH,KAAA,GAAAD,SAAA,CAAAnH,CAAA,IAAAC,IAAA,GAAgC;MAAA,IAArBoH,OAAO,GAAAD,KAAA,CAAAlH,KAAA;MAChB,IAAImH,OAAO,CAACxI,MAAM,KAAKsE,SAAS,EAAE;QAChCmD,YAAY,CAACgB,GAAG,CAACD,OAAO,CAACxI,MAAM,CAAC;MAClC;IACF;EAAC,SAAA4B,GAAA;IAAA0G,SAAA,CAAAhH,CAAA,CAAAM,GAAA;EAAA;IAAA0G,SAAA,CAAA9G,CAAA;EAAA;EAED,OAAOV,KAAK,CAAC2B,IAAI,CAACgF,YAAY,CAAC,CAACiB,IAAI,CAAC,CAAC;AACxC;AAAC,SAGcT,SAASA,CAAAU,GAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA;EAAA,OAAAC,UAAA,CAAAtJ,KAAA,OAAAI,SAAA;AAAA;AAAA,SAAAkJ,WAAA;EAAAA,UAAA,OAAAzF,kBAAA,CAAAnD,OAAA,EAAAoD,YAAA,CAAApD,OAAA,CAAAqD,IAAA,CAAxB,SAAAwF,SACEtF,IAAqB,EACrBuF,KAAK,EACLC,KAAa,EACbnG,OAAO,EACPgB,OAAsB;IAAA,IAAA8C,KAAA,EAAAsC,KAAA,EAAArG,WAAA,EAAAoC,GAAA,EAAA4B,QAAA,EAAAsC,KAAA,EAAAC,WAAA;IAAA,OAAA9F,YAAA,CAAApD,OAAA,CAAA8D,IAAA,UAAAqF,UAAAC,SAAA;MAAA,kBAAAA,SAAA,CAAAnF,IAAA,GAAAmF,SAAA,CAAAzH,IAAA;QAAA;UAEf+E,KAAK,GAAW9C,OAAO,CAAvB8C,KAAK,EAAEsC,KAAK,GAAIpF,OAAO,CAAhBoF,KAAK;UAAA,MAIfF,KAAK,CAAC/D,GAAG,IAAI,CAAC+D,KAAK,CAACO,cAAc,CAAC,YAAY,CAAC;YAAAD,SAAA,CAAAzH,IAAA;YAAA;UAAA;UAC5CoD,GAAG,GAAG,IAAA+B,sBAAU,EAACgC,KAAK,CAAC/D,GAAG,EAAEnC,OAAO,CAAC;UAAAwG,SAAA,CAAAzH,IAAA;UAAA,OACnB+E,KAAK,CAAC3B,GAAG,CAAC;QAAA;UAA3B4B,QAAQ,GAAAyC,SAAA,CAAArC,IAAA;UAAAqC,SAAA,CAAAzH,IAAA;UAAA,OACMgF,QAAQ,CAAChE,WAAW,CAAC,CAAC;QAAA;UAA1CA,WAAW,GAAAyG,SAAA,CAAArC,IAAA;UACX+B,KAAK,CAACQ,UAAU,GAAG;YACjBxE,IAAI,EAAEnC;UACR,CAAC;QAAC;UAGJ,IAAI4G,MAAM,CAACC,QAAQ,CAACV,KAAK,CAACQ,UAAU,CAAC,EAAE;YAC/BL,KAAK,GAAG,IAAAQ,yCAA0B,EAAClG,IAAI,CAACiB,IAAI,EAAEjB,IAAI,CAACkB,OAAO,EAAEqE,KAAK,CAACQ,UAAU,CAAC;YACnF3G,WAAW,GAAG,IAAA+G,6BAAgB,EAACT,KAAK,CAAC1C,MAAM,EAAE0C,KAAK,CAACpG,UAAU,EAAEoG,KAAK,CAACjD,UAAU,CAAC;UAClF;UAEA,IAAAR,cAAM,EAAC7C,WAAW,EAAE,wBAAwB,CAAC;UAACyG,SAAA,CAAAzH,IAAA;UAAA,OAGtBqH,KAAK,CAC3BrG,WAAW,EACX,CAACgH,mBAAW,EAAEC,qBAAW,CAAC,EAAArK,aAAA,CAAAA,aAAA,KAErBqD,OAAO;YACViH,QAAQ,EAAEf,KAAK,CAACe,QAAQ;YACxBC,KAAK,EAAElH,OAAO,CAACkH,KAAK,IAAI;cAACC,MAAM,EAAE,IAAAC,oCAA0B,EAAC;YAAC;UAAC,IAEhEpG,OACF,CAAC;QAAA;UATGsF,WAAW,GAAAE,SAAA,CAAArC,IAAA;UAWf,IAAImC,WAAW,IAAIA,WAAW,CAAC,CAAC,CAAC,EAAE;YACjCA,WAAW,GAAG;cACZe,UAAU,EAAE,IAAI;cAChBC,OAAO,EAAE,KAAK;cACdC,KAAK,EAAEjB,WAAW,CAAC,CAAC,CAAC,CAACiB,KAAK;cAC3BC,MAAM,EAAElB,WAAW,CAAC,CAAC,CAAC,CAACkB,MAAM;cAC7BtF,IAAI,EAAEoE,WAAW,CAAC,CAAC;YACrB,CAAC;UACH;UAKA3F,IAAI,CAAC0C,MAAM,GAAG1C,IAAI,CAAC0C,MAAM,IAAI,EAAE;UAC/B1C,IAAI,CAAC0C,MAAM,CAAC8C,KAAK,CAAC,GAAGG,WAAW;QAAC;QAAA;UAAA,OAAAE,SAAA,CAAAvE,IAAA;MAAA;IAAA,GAAAgE,QAAA;EAAA,CAClC;EAAA,OAAAD,UAAA,CAAAtJ,KAAA,OAAAI,SAAA;AAAA"}
|
|
1
|
+
{"version":3,"file":"parse-gltf.js","names":["_loaderUtils","require","_images","_textures","_assert","_parseGlb","_resolveUrl","_getTypedArray","_gltfExtensions","_normalizeGltfV","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","isGLTF","arrayBuffer","options","byteOffset","isGLB","parseGLTF","_x","_x2","_parseGLTF","_asyncToGenerator2","_regenerator","mark","_callee","gltf","arrayBufferOrString","_options$gltf","_options$gltf2","_options$gltf3","context","_args","wrap","_callee$","_context","prev","undefined","parseGLTFContainerSync","normalizeGLTFV1","normalize","preprocessExtensions","loadBuffers","json","buffers","loadImages","decodeExtensions","abrupt","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","promises","_iterator2","_step2","imageIndex","_callee3$","_context3","getReferencesImageIndices","loadImage","Promise","all","Set","textures","_iterator","_step","texture","add","sort","_x9","_x10","_x11","_x12","_x13","_loadImage","_callee4","image","index","array","parsedImage","_callee4$","_context4","hasOwnProperty","bufferView","Number","isFinite","getTypedArrayForBufferView","sliceArrayBuffer","parseFromContext","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 type {GLTFLoaderOptions} from '../../gltf-loader';\nimport type {GLTFWithBuffers} from '../types/gltf-types';\nimport type {GLB} from '../types/glb-types';\nimport type {ParseGLBOptions} from './parse-glb';\n\nimport type {ImageType, TextureLevel} from '@loaders.gl/schema';\nimport {parseJSON, sliceArrayBuffer, parseFromContext} from '@loaders.gl/loader-utils';\nimport {ImageLoader} from '@loaders.gl/images';\nimport {BasisLoader, selectSupportedBasisFormat} from '@loaders.gl/textures';\n\nimport {assert} from '../utils/assert';\nimport {isGLB, parseGLBSync} from './parse-glb';\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';\n\n/** */\nexport type ParseGLTFOptions = ParseGLBOptions & {\n normalize?: boolean;\n loadImages?: boolean;\n loadBuffers?: boolean;\n decompressMeshes?: boolean;\n excludeExtensions?: string[];\n\n /** @deprecated not supported in v4. `postProcessGLTF()` must be called by the application */\n postProcess?: false;\n};\n\n/** Check if an array buffer appears to contain GLTF data */\nexport function isGLTF(arrayBuffer: ArrayBuffer, options?: ParseGLTFOptions): 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): Promise<GLTFWithBuffers> {\n parseGLTFContainerSync(gltf, arrayBufferOrString, byteOffset, options);\n\n normalizeGLTFV1(gltf, {normalize: options?.gltf?.normalize});\n\n preprocessExtensions(gltf, options, context);\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 // loadImages and decodeExtensions should not be running in parallel, because\n // decodeExtensions uses data from images taken during the loadImages call.\n if (options?.gltf?.loadImages) {\n await loadImages(gltf, options, context);\n }\n\n await decodeExtensions(gltf, options, context);\n\n return gltf;\n}\n\n/**\n *\n * @param gltf\n * @param data - can be ArrayBuffer (GLB), ArrayBuffer (Binary JSON), String (JSON), or Object (parsed JSON)\n * @param byteOffset\n * @param options\n */\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 let arrayBuffer;\n\n if (image.uri && !image.hasOwnProperty('bufferView')) {\n const uri = resolveUrl(image.uri, options);\n\n const {fetch} = context;\n const response = await fetch(uri);\n\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 parseFromContext(\n arrayBuffer,\n [ImageLoader, BasisLoader],\n {\n ...options,\n mimeType: image.mimeType,\n basis: options.basis || {format: selectSupportedBasisFormat()}\n },\n context\n )) as ImageType | TextureLevel[][];\n\n if (parsedImage && parsedImage[0]) {\n parsedImage = {\n compressed: true,\n // @ts-expect-error\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 // @ts-expect-error TODO - sort out image typing asap\n gltf.images[index] = parsedImage;\n}\n"],"mappings":"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"}
|
|
@@ -4,6 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.VERSION = void 0;
|
|
7
|
-
var VERSION = typeof "4.0.0-alpha.
|
|
7
|
+
var VERSION = typeof "4.0.0-alpha.22" !== 'undefined' ? "4.0.0-alpha.22" : 'latest';
|
|
8
8
|
exports.VERSION = VERSION;
|
|
9
9
|
//# sourceMappingURL=version.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { sliceArrayBuffer, parseFromContext } from '@loaders.gl/loader-utils';
|
|
1
2
|
import { DracoLoader } from '@loaders.gl/draco';
|
|
2
|
-
import { sliceArrayBuffer } from '@loaders.gl/loader-utils';
|
|
3
3
|
import { GLTFScenegraph } from '../api/gltf-scenegraph';
|
|
4
4
|
import { getGLTFAccessors, getGLTFAccessor } from '../gltf-utils/gltf-attribute-utils';
|
|
5
5
|
const KHR_DRACO_MESH_COMPRESSION = 'KHR_draco_mesh_compression';
|
|
@@ -40,14 +40,11 @@ async function decompressPrimitive(scenegraph, primitive, options, context) {
|
|
|
40
40
|
}
|
|
41
41
|
const buffer = scenegraph.getTypedArrayForBufferView(dracoExtension.bufferView);
|
|
42
42
|
const bufferCopy = sliceArrayBuffer(buffer.buffer, buffer.byteOffset);
|
|
43
|
-
const {
|
|
44
|
-
parse
|
|
45
|
-
} = context;
|
|
46
43
|
const dracoOptions = {
|
|
47
44
|
...options
|
|
48
45
|
};
|
|
49
46
|
delete dracoOptions['3d-tiles'];
|
|
50
|
-
const decodedData = await
|
|
47
|
+
const decodedData = await parseFromContext(bufferCopy, DracoLoader, dracoOptions, context);
|
|
51
48
|
const decodedAttributes = getGLTFAccessors(decodedData.attributes);
|
|
52
49
|
for (const [attributeName, decodedAttribute] of Object.entries(decodedAttributes)) {
|
|
53
50
|
if (attributeName in primitive.attributes) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KHR_draco_mesh_compression.js","names":["DracoLoader","sliceArrayBuffer","GLTFScenegraph","getGLTFAccessors","getGLTFAccessor","KHR_DRACO_MESH_COMPRESSION","name","preprocess","gltfData","options","context","scenegraph","primitive","makeMeshPrimitiveIterator","getObjectExtension","decode","_options$gltf","gltf","decompressMeshes","promises","push","decompressPrimitive","Promise","all","removeExtension","encode","arguments","length","undefined","mesh","json","meshes","compressMesh","addRequiredExtension","dracoExtension","buffer","getTypedArrayForBufferView","bufferView","bufferCopy","byteOffset","parse","dracoOptions","decodedData","decodedAttributes","attributes","attributeName","decodedAttribute","Object","entries","accessorIndex","accessor","getAccessor","min","max","indices","removeObjectExtension","checkPrimitive","_context$parseSync","mode","DracoWriter","Error","compressedData","encodeSync","parseSync","call","fauxAccessors","_addFauxAttributes","bufferViewIndex","addBufferView","glTFMesh","primitives","extensions","keys"],"sources":["../../../../src/lib/extensions/KHR_draco_mesh_compression.ts"],"sourcesContent":["// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression\n// Only TRIANGLES: 0x0004 and TRIANGLE_STRIP: 0x0005 are supported\n/* eslint-disable camelcase */\n\n/* eslint-disable camelcase */\nimport type {\n GLTF,\n GLTFAccessor,\n GLTFMeshPrimitive,\n GLTF_KHR_draco_mesh_compression\n} from '../types/gltf-json-schema';\nimport type {GLTFLoaderOptions} from '../../gltf-loader';\n\nimport type {LoaderContext} from '@loaders.gl/loader-utils';\nimport {DracoLoader} from '@loaders.gl/draco';\nimport {DracoLoaderOptions, DracoMesh} from '@loaders.gl/draco';\nimport {sliceArrayBuffer} from '@loaders.gl/loader-utils';\nimport {GLTFScenegraph} from '../api/gltf-scenegraph';\nimport {getGLTFAccessors, getGLTFAccessor} from '../gltf-utils/gltf-attribute-utils';\n\nconst KHR_DRACO_MESH_COMPRESSION = 'KHR_draco_mesh_compression';\n\n/** Extension name */\nexport const name = KHR_DRACO_MESH_COMPRESSION;\n\nexport function preprocess(\n gltfData: {json: GLTF},\n options: GLTFLoaderOptions,\n context: LoaderContext\n): void {\n const scenegraph = new GLTFScenegraph(gltfData);\n for (const primitive of makeMeshPrimitiveIterator(scenegraph)) {\n if (scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION)) {\n // TODO - Remove fallback accessors to make sure we don't load unnecessary buffers\n }\n }\n}\n\nexport async function decode(\n gltfData: {json: GLTF},\n options: GLTFLoaderOptions,\n context: LoaderContext\n): Promise<void> {\n if (!options?.gltf?.decompressMeshes) {\n return;\n }\n\n const scenegraph = new GLTFScenegraph(gltfData);\n const promises: Promise<void>[] = [];\n for (const primitive of makeMeshPrimitiveIterator(scenegraph)) {\n if (scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION)) {\n promises.push(decompressPrimitive(scenegraph, primitive, options, context));\n }\n }\n\n // Decompress meshes in parallel\n await Promise.all(promises);\n\n // We have now decompressed all primitives, so remove the top-level extension\n scenegraph.removeExtension(KHR_DRACO_MESH_COMPRESSION);\n}\n\nexport function encode(gltfData, options: GLTFLoaderOptions = {}): void {\n const scenegraph = new GLTFScenegraph(gltfData);\n\n for (const mesh of scenegraph.json.meshes || []) {\n // eslint-disable-next-line camelcase\n // @ts-ignore\n compressMesh(mesh, options);\n // NOTE: Only add the extension if something was actually compressed\n scenegraph.addRequiredExtension(KHR_DRACO_MESH_COMPRESSION);\n }\n}\n\n// DECODE\n\n// Unpacks one mesh primitive and removes the extension from the primitive\n// DracoDecoder needs to be imported and registered by app\n// Returns: Promise that resolves when all pending draco decoder jobs for this mesh complete\n\n// TODO - Implement fallback behavior per KHR_DRACO_MESH_COMPRESSION spec\n\nasync function decompressPrimitive(\n scenegraph: GLTFScenegraph,\n primitive: GLTFMeshPrimitive,\n options: GLTFLoaderOptions,\n context: LoaderContext\n): Promise<void> {\n const dracoExtension = scenegraph.getObjectExtension<GLTF_KHR_draco_mesh_compression>(\n primitive,\n KHR_DRACO_MESH_COMPRESSION\n );\n if (!dracoExtension) {\n return;\n }\n\n const buffer = scenegraph.getTypedArrayForBufferView(dracoExtension.bufferView);\n // TODO - parse does not yet deal well with byte offsets embedded in typed arrays. Copy buffer\n // TODO - remove when `parse` is fixed to handle `byteOffset`s\n const bufferCopy = sliceArrayBuffer(buffer.buffer, buffer.byteOffset); // , buffer.byteLength);\n\n const {parse} = context;\n const dracoOptions: DracoLoaderOptions = {...options};\n\n // TODO - remove hack: The entire tileset might be included, too expensive to serialize\n delete dracoOptions['3d-tiles'];\n const decodedData = (await parse(bufferCopy, DracoLoader, dracoOptions, context)) as DracoMesh;\n\n const decodedAttributes: {[key: string]: GLTFAccessor} = getGLTFAccessors(decodedData.attributes);\n\n // Restore min/max values\n for (const [attributeName, decodedAttribute] of Object.entries(decodedAttributes)) {\n if (attributeName in primitive.attributes) {\n const accessorIndex: number = primitive.attributes[attributeName];\n const accessor = scenegraph.getAccessor(accessorIndex);\n if (accessor?.min && accessor?.max) {\n decodedAttribute.min = accessor.min;\n decodedAttribute.max = accessor.max;\n }\n }\n }\n\n // @ts-ignore\n primitive.attributes = decodedAttributes;\n if (decodedData.indices) {\n // @ts-ignore\n primitive.indices = getGLTFAccessor(decodedData.indices);\n }\n\n // Extension has been processed, delete it\n scenegraph.removeObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION);\n\n checkPrimitive(primitive);\n}\n\n// ENCODE\n\n// eslint-disable-next-line max-len\n// Only TRIANGLES: 0x0004 and TRIANGLE_STRIP: 0x0005 are supported\nfunction compressMesh(attributes, indices, mode: number = 4, options, context: LoaderContext) {\n if (!options.DracoWriter) {\n throw new Error('options.gltf.DracoWriter not provided');\n }\n\n // TODO - use DracoWriter using encode w/ registered DracoWriter...\n const compressedData = options.DracoWriter.encodeSync({attributes});\n\n // Draco compression may change the order and number of vertices in a mesh.\n // To satisfy the requirement that accessors properties be correct for both\n // compressed and uncompressed data, generators should create uncompressed\n // attributes and indices using data that has been decompressed from the Draco buffer,\n // rather than the original source data.\n // @ts-ignore TODO this needs to be fixed\n const decodedData = context?.parseSync?.({attributes});\n const fauxAccessors = options._addFauxAttributes(decodedData.attributes);\n\n const bufferViewIndex = options.addBufferView(compressedData);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: fauxAccessors, // TODO - verify with spec\n mode, // GL.POINTS\n extensions: {\n [KHR_DRACO_MESH_COMPRESSION]: {\n bufferView: bufferViewIndex,\n attributes: fauxAccessors // TODO - verify with spec\n }\n }\n }\n ]\n };\n\n return glTFMesh;\n}\n\n// UTILS\n\nfunction checkPrimitive(primitive: GLTFMeshPrimitive) {\n if (!primitive.attributes && Object.keys(primitive.attributes).length > 0) {\n throw new Error('glTF: Empty primitive detected: Draco decompression failure?');\n }\n}\n\nfunction* makeMeshPrimitiveIterator(scenegraph) {\n for (const mesh of scenegraph.json.meshes || []) {\n for (const primitive of mesh.primitives) {\n yield primitive;\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"KHR_draco_mesh_compression.js","names":["sliceArrayBuffer","parseFromContext","DracoLoader","GLTFScenegraph","getGLTFAccessors","getGLTFAccessor","KHR_DRACO_MESH_COMPRESSION","name","preprocess","gltfData","options","context","scenegraph","primitive","makeMeshPrimitiveIterator","getObjectExtension","decode","_options$gltf","gltf","decompressMeshes","promises","push","decompressPrimitive","Promise","all","removeExtension","encode","arguments","length","undefined","mesh","json","meshes","compressMesh","addRequiredExtension","dracoExtension","buffer","getTypedArrayForBufferView","bufferView","bufferCopy","byteOffset","dracoOptions","decodedData","decodedAttributes","attributes","attributeName","decodedAttribute","Object","entries","accessorIndex","accessor","getAccessor","min","max","indices","removeObjectExtension","checkPrimitive","_context$parseSync","mode","DracoWriter","Error","compressedData","encodeSync","parseSync","call","fauxAccessors","_addFauxAttributes","bufferViewIndex","addBufferView","glTFMesh","primitives","extensions","keys"],"sources":["../../../../src/lib/extensions/KHR_draco_mesh_compression.ts"],"sourcesContent":["// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression\n// Only TRIANGLES: 0x0004 and TRIANGLE_STRIP: 0x0005 are supported\n/* eslint-disable camelcase */\n\nimport type {LoaderContext} from '@loaders.gl/loader-utils';\nimport {sliceArrayBuffer, parseFromContext} from '@loaders.gl/loader-utils';\n\nimport {DracoLoader} from '@loaders.gl/draco';\nimport {DracoLoaderOptions} from '@loaders.gl/draco';\n\nimport type {\n GLTF,\n GLTFAccessor,\n GLTFMeshPrimitive,\n GLTF_KHR_draco_mesh_compression\n} from '../types/gltf-json-schema';\nimport type {GLTFLoaderOptions} from '../../gltf-loader';\n\nimport {GLTFScenegraph} from '../api/gltf-scenegraph';\nimport {getGLTFAccessors, getGLTFAccessor} from '../gltf-utils/gltf-attribute-utils';\n\nconst KHR_DRACO_MESH_COMPRESSION = 'KHR_draco_mesh_compression';\n\n/** Extension name */\nexport const name = KHR_DRACO_MESH_COMPRESSION;\n\nexport function preprocess(\n gltfData: {json: GLTF},\n options: GLTFLoaderOptions,\n context: LoaderContext\n): void {\n const scenegraph = new GLTFScenegraph(gltfData);\n for (const primitive of makeMeshPrimitiveIterator(scenegraph)) {\n if (scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION)) {\n // TODO - Remove fallback accessors to make sure we don't load unnecessary buffers\n }\n }\n}\n\nexport async function decode(\n gltfData: {json: GLTF},\n options: GLTFLoaderOptions,\n context: LoaderContext\n): Promise<void> {\n if (!options?.gltf?.decompressMeshes) {\n return;\n }\n\n const scenegraph = new GLTFScenegraph(gltfData);\n const promises: Promise<void>[] = [];\n for (const primitive of makeMeshPrimitiveIterator(scenegraph)) {\n if (scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION)) {\n promises.push(decompressPrimitive(scenegraph, primitive, options, context));\n }\n }\n\n // Decompress meshes in parallel\n await Promise.all(promises);\n\n // We have now decompressed all primitives, so remove the top-level extension\n scenegraph.removeExtension(KHR_DRACO_MESH_COMPRESSION);\n}\n\nexport function encode(gltfData, options: GLTFLoaderOptions = {}): void {\n const scenegraph = new GLTFScenegraph(gltfData);\n\n for (const mesh of scenegraph.json.meshes || []) {\n // eslint-disable-next-line camelcase\n // @ts-ignore\n compressMesh(mesh, options);\n // NOTE: Only add the extension if something was actually compressed\n scenegraph.addRequiredExtension(KHR_DRACO_MESH_COMPRESSION);\n }\n}\n\n// DECODE\n\n// Unpacks one mesh primitive and removes the extension from the primitive\n// DracoDecoder needs to be imported and registered by app\n// Returns: Promise that resolves when all pending draco decoder jobs for this mesh complete\n\n// TODO - Implement fallback behavior per KHR_DRACO_MESH_COMPRESSION spec\n\nasync function decompressPrimitive(\n scenegraph: GLTFScenegraph,\n primitive: GLTFMeshPrimitive,\n options: GLTFLoaderOptions,\n context: LoaderContext\n): Promise<void> {\n const dracoExtension = scenegraph.getObjectExtension<GLTF_KHR_draco_mesh_compression>(\n primitive,\n KHR_DRACO_MESH_COMPRESSION\n );\n if (!dracoExtension) {\n return;\n }\n\n const buffer = scenegraph.getTypedArrayForBufferView(dracoExtension.bufferView);\n // TODO - parse does not yet deal well with byte offsets embedded in typed arrays. Copy buffer\n // TODO - remove when `parse` is fixed to handle `byteOffset`s\n const bufferCopy = sliceArrayBuffer(buffer.buffer, buffer.byteOffset); // , buffer.byteLength);\n\n const dracoOptions: DracoLoaderOptions = {...options};\n\n // TODO - remove hack: The entire tileset might be included, too expensive to serialize\n delete dracoOptions['3d-tiles'];\n const decodedData = await parseFromContext(bufferCopy, DracoLoader, dracoOptions, context);\n\n const decodedAttributes: {[key: string]: GLTFAccessor} = getGLTFAccessors(decodedData.attributes);\n\n // Restore min/max values\n for (const [attributeName, decodedAttribute] of Object.entries(decodedAttributes)) {\n if (attributeName in primitive.attributes) {\n const accessorIndex: number = primitive.attributes[attributeName];\n const accessor = scenegraph.getAccessor(accessorIndex);\n if (accessor?.min && accessor?.max) {\n decodedAttribute.min = accessor.min;\n decodedAttribute.max = accessor.max;\n }\n }\n }\n\n // @ts-ignore\n primitive.attributes = decodedAttributes;\n if (decodedData.indices) {\n // @ts-ignore\n primitive.indices = getGLTFAccessor(decodedData.indices);\n }\n\n // Extension has been processed, delete it\n scenegraph.removeObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION);\n\n checkPrimitive(primitive);\n}\n\n// ENCODE\n\n// eslint-disable-next-line max-len\n// Only TRIANGLES: 0x0004 and TRIANGLE_STRIP: 0x0005 are supported\nfunction compressMesh(attributes, indices, mode: number = 4, options, context: LoaderContext) {\n if (!options.DracoWriter) {\n throw new Error('options.gltf.DracoWriter not provided');\n }\n\n // TODO - use DracoWriter using encode w/ registered DracoWriter...\n const compressedData = options.DracoWriter.encodeSync({attributes});\n\n // Draco compression may change the order and number of vertices in a mesh.\n // To satisfy the requirement that accessors properties be correct for both\n // compressed and uncompressed data, generators should create uncompressed\n // attributes and indices using data that has been decompressed from the Draco buffer,\n // rather than the original source data.\n // @ts-ignore TODO this needs to be fixed\n const decodedData = context?.parseSync?.({attributes});\n const fauxAccessors = options._addFauxAttributes(decodedData.attributes);\n\n const bufferViewIndex = options.addBufferView(compressedData);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: fauxAccessors, // TODO - verify with spec\n mode, // GL.POINTS\n extensions: {\n [KHR_DRACO_MESH_COMPRESSION]: {\n bufferView: bufferViewIndex,\n attributes: fauxAccessors // TODO - verify with spec\n }\n }\n }\n ]\n };\n\n return glTFMesh;\n}\n\n// UTILS\n\nfunction checkPrimitive(primitive: GLTFMeshPrimitive) {\n if (!primitive.attributes && Object.keys(primitive.attributes).length > 0) {\n throw new Error('glTF: Empty primitive detected: Draco decompression failure?');\n }\n}\n\nfunction* makeMeshPrimitiveIterator(scenegraph) {\n for (const mesh of scenegraph.json.meshes || []) {\n for (const primitive of mesh.primitives) {\n yield primitive;\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { parseJSON, sliceArrayBuffer } from '@loaders.gl/loader-utils';
|
|
1
|
+
import { parseJSON, sliceArrayBuffer, parseFromContext } from '@loaders.gl/loader-utils';
|
|
2
2
|
import { ImageLoader } from '@loaders.gl/images';
|
|
3
3
|
import { BasisLoader, selectSupportedBasisFormat } from '@loaders.gl/textures';
|
|
4
4
|
import { assert } from '../utils/assert';
|
|
@@ -112,13 +112,12 @@ function getReferencesImageIndices(gltf) {
|
|
|
112
112
|
return Array.from(imageIndices).sort();
|
|
113
113
|
}
|
|
114
114
|
async function loadImage(gltf, image, index, options, context) {
|
|
115
|
-
const {
|
|
116
|
-
fetch,
|
|
117
|
-
parse
|
|
118
|
-
} = context;
|
|
119
115
|
let arrayBuffer;
|
|
120
116
|
if (image.uri && !image.hasOwnProperty('bufferView')) {
|
|
121
117
|
const uri = resolveUrl(image.uri, options);
|
|
118
|
+
const {
|
|
119
|
+
fetch
|
|
120
|
+
} = context;
|
|
122
121
|
const response = await fetch(uri);
|
|
123
122
|
arrayBuffer = await response.arrayBuffer();
|
|
124
123
|
image.bufferView = {
|
|
@@ -130,7 +129,7 @@ async function loadImage(gltf, image, index, options, context) {
|
|
|
130
129
|
arrayBuffer = sliceArrayBuffer(array.buffer, array.byteOffset, array.byteLength);
|
|
131
130
|
}
|
|
132
131
|
assert(arrayBuffer, 'glTF image has no data');
|
|
133
|
-
let parsedImage = await
|
|
132
|
+
let parsedImage = await parseFromContext(arrayBuffer, [ImageLoader, BasisLoader], {
|
|
134
133
|
...options,
|
|
135
134
|
mimeType: image.mimeType,
|
|
136
135
|
basis: options.basis || {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-gltf.js","names":["parseJSON","sliceArrayBuffer","ImageLoader","BasisLoader","selectSupportedBasisFormat","assert","isGLB","parseGLBSync","resolveUrl","getTypedArrayForBufferView","preprocessExtensions","decodeExtensions","normalizeGLTFV1","isGLTF","arrayBuffer","options","byteOffset","parseGLTF","gltf","arrayBufferOrString","_options$gltf","_options$gltf2","_options$gltf3","arguments","length","undefined","context","parseGLTFContainerSync","normalize","loadBuffers","json","buffers","loadImages","data","uri","baseUri","ArrayBuffer","textDecoder","TextDecoder","decode","glb","type","concat","_glb","Array","fill","header","hasBinChunk","binChunks","byteLength","images","i","buffer","_context$fetch","_response$arrayBuffer","fetch","response","call","imageIndices","getReferencesImageIndices","promises","imageIndex","push","loadImage","Promise","all","Set","textures","texture","source","add","from","sort","image","index","parse","hasOwnProperty","bufferView","Number","isFinite","array","parsedImage","mimeType","basis","format","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 type {GLTFLoaderOptions} from '../../gltf-loader';\nimport type {GLTFWithBuffers} from '../types/gltf-types';\nimport type {GLB} from '../types/glb-types';\nimport type {ParseGLBOptions} from './parse-glb';\n\nimport {parseJSON, sliceArrayBuffer} from '@loaders.gl/loader-utils';\nimport {ImageLoader} from '@loaders.gl/images';\nimport {BasisLoader, selectSupportedBasisFormat} from '@loaders.gl/textures';\n\nimport {assert} from '../utils/assert';\nimport {isGLB, parseGLBSync} from './parse-glb';\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';\n\n/** */\nexport type ParseGLTFOptions = ParseGLBOptions & {\n normalize?: boolean;\n loadImages?: boolean;\n loadBuffers?: boolean;\n decompressMeshes?: boolean;\n excludeExtensions?: string[];\n\n /** @deprecated not supported in v4. `postProcessGLTF()` must be called by the application */\n postProcess?: false;\n};\n\n/** Check if an array buffer appears to contain GLTF data */\nexport function isGLTF(arrayBuffer: ArrayBuffer, options?: ParseGLTFOptions): 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): Promise<GLTFWithBuffers> {\n parseGLTFContainerSync(gltf, arrayBufferOrString, byteOffset, options);\n\n normalizeGLTFV1(gltf, {normalize: options?.gltf?.normalize});\n\n preprocessExtensions(gltf, options, context);\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 // loadImages and decodeExtensions should not be running in parallel, because\n // decodeExtensions uses data from images taken during the loadImages call.\n if (options?.gltf?.loadImages) {\n await loadImages(gltf, options, context);\n }\n\n await decodeExtensions(gltf, options, context);\n\n return gltf;\n}\n\n/**\n *\n * @param gltf\n * @param data - can be ArrayBuffer (GLB), ArrayBuffer (Binary JSON), String (JSON), or Object (parsed JSON)\n * @param byteOffset\n * @param options\n */\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 {\n ...options,\n mimeType: image.mimeType,\n basis: options.basis || {format: selectSupportedBasisFormat()}\n },\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":["parseJSON","sliceArrayBuffer","parseFromContext","ImageLoader","BasisLoader","selectSupportedBasisFormat","assert","isGLB","parseGLBSync","resolveUrl","getTypedArrayForBufferView","preprocessExtensions","decodeExtensions","normalizeGLTFV1","isGLTF","arrayBuffer","options","byteOffset","parseGLTF","gltf","arrayBufferOrString","_options$gltf","_options$gltf2","_options$gltf3","arguments","length","undefined","context","parseGLTFContainerSync","normalize","loadBuffers","json","buffers","loadImages","data","uri","baseUri","ArrayBuffer","textDecoder","TextDecoder","decode","glb","type","concat","_glb","Array","fill","header","hasBinChunk","binChunks","byteLength","images","i","buffer","_context$fetch","_response$arrayBuffer","fetch","response","call","imageIndices","getReferencesImageIndices","promises","imageIndex","push","loadImage","Promise","all","Set","textures","texture","source","add","from","sort","image","index","hasOwnProperty","bufferView","Number","isFinite","array","parsedImage","mimeType","basis","format","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 type {GLTFLoaderOptions} from '../../gltf-loader';\nimport type {GLTFWithBuffers} from '../types/gltf-types';\nimport type {GLB} from '../types/glb-types';\nimport type {ParseGLBOptions} from './parse-glb';\n\nimport type {ImageType, TextureLevel} from '@loaders.gl/schema';\nimport {parseJSON, sliceArrayBuffer, parseFromContext} from '@loaders.gl/loader-utils';\nimport {ImageLoader} from '@loaders.gl/images';\nimport {BasisLoader, selectSupportedBasisFormat} from '@loaders.gl/textures';\n\nimport {assert} from '../utils/assert';\nimport {isGLB, parseGLBSync} from './parse-glb';\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';\n\n/** */\nexport type ParseGLTFOptions = ParseGLBOptions & {\n normalize?: boolean;\n loadImages?: boolean;\n loadBuffers?: boolean;\n decompressMeshes?: boolean;\n excludeExtensions?: string[];\n\n /** @deprecated not supported in v4. `postProcessGLTF()` must be called by the application */\n postProcess?: false;\n};\n\n/** Check if an array buffer appears to contain GLTF data */\nexport function isGLTF(arrayBuffer: ArrayBuffer, options?: ParseGLTFOptions): 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): Promise<GLTFWithBuffers> {\n parseGLTFContainerSync(gltf, arrayBufferOrString, byteOffset, options);\n\n normalizeGLTFV1(gltf, {normalize: options?.gltf?.normalize});\n\n preprocessExtensions(gltf, options, context);\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 // loadImages and decodeExtensions should not be running in parallel, because\n // decodeExtensions uses data from images taken during the loadImages call.\n if (options?.gltf?.loadImages) {\n await loadImages(gltf, options, context);\n }\n\n await decodeExtensions(gltf, options, context);\n\n return gltf;\n}\n\n/**\n *\n * @param gltf\n * @param data - can be ArrayBuffer (GLB), ArrayBuffer (Binary JSON), String (JSON), or Object (parsed JSON)\n * @param byteOffset\n * @param options\n */\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 let arrayBuffer;\n\n if (image.uri && !image.hasOwnProperty('bufferView')) {\n const uri = resolveUrl(image.uri, options);\n\n const {fetch} = context;\n const response = await fetch(uri);\n\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 parseFromContext(\n arrayBuffer,\n [ImageLoader, BasisLoader],\n {\n ...options,\n mimeType: image.mimeType,\n basis: options.basis || {format: selectSupportedBasisFormat()}\n },\n context\n )) as ImageType | TextureLevel[][];\n\n if (parsedImage && parsedImage[0]) {\n parsedImage = {\n compressed: true,\n // @ts-expect-error\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 // @ts-expect-error TODO - sort out image typing asap\n gltf.images[index] = parsedImage;\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const VERSION = typeof "4.0.0-alpha.
|
|
1
|
+
export const VERSION = typeof "4.0.0-alpha.22" !== 'undefined' ? "4.0.0-alpha.22" : 'latest';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import type { LoaderContext } from '@loaders.gl/loader-utils';
|
|
1
2
|
import type { GLTF } from '../types/gltf-json-schema';
|
|
2
3
|
import type { GLTFLoaderOptions } from '../../gltf-loader';
|
|
3
|
-
import type { LoaderContext } from '@loaders.gl/loader-utils';
|
|
4
4
|
/** Extension name */
|
|
5
5
|
export declare const name = "KHR_draco_mesh_compression";
|
|
6
6
|
export declare function preprocess(gltfData: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KHR_draco_mesh_compression.d.ts","sourceRoot":"","sources":["../../../src/lib/extensions/KHR_draco_mesh_compression.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"KHR_draco_mesh_compression.d.ts","sourceRoot":"","sources":["../../../src/lib/extensions/KHR_draco_mesh_compression.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAM5D,OAAO,KAAK,EACV,IAAI,EAIL,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AAOzD,qBAAqB;AACrB,eAAO,MAAM,IAAI,+BAA6B,CAAC;AAE/C,wBAAgB,UAAU,CACxB,QAAQ,EAAE;IAAC,IAAI,EAAE,IAAI,CAAA;CAAC,EACtB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,aAAa,GACrB,IAAI,CAON;AAED,wBAAsB,MAAM,CAC1B,QAAQ,EAAE;IAAC,IAAI,EAAE,IAAI,CAAA;CAAC,EACtB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,wBAAgB,MAAM,CAAC,QAAQ,KAAA,EAAE,OAAO,GAAE,iBAAsB,GAAG,IAAI,CAUtE"}
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
/* eslint-disable camelcase */
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.encode = exports.decode = exports.preprocess = exports.name = void 0;
|
|
7
|
-
const draco_1 = require("@loaders.gl/draco");
|
|
8
7
|
const loader_utils_1 = require("@loaders.gl/loader-utils");
|
|
8
|
+
const draco_1 = require("@loaders.gl/draco");
|
|
9
9
|
const gltf_scenegraph_1 = require("../api/gltf-scenegraph");
|
|
10
10
|
const gltf_attribute_utils_1 = require("../gltf-utils/gltf-attribute-utils");
|
|
11
11
|
const KHR_DRACO_MESH_COMPRESSION = 'KHR_draco_mesh_compression';
|
|
@@ -62,11 +62,10 @@ async function decompressPrimitive(scenegraph, primitive, options, context) {
|
|
|
62
62
|
// TODO - parse does not yet deal well with byte offsets embedded in typed arrays. Copy buffer
|
|
63
63
|
// TODO - remove when `parse` is fixed to handle `byteOffset`s
|
|
64
64
|
const bufferCopy = (0, loader_utils_1.sliceArrayBuffer)(buffer.buffer, buffer.byteOffset); // , buffer.byteLength);
|
|
65
|
-
const { parse } = context;
|
|
66
65
|
const dracoOptions = { ...options };
|
|
67
66
|
// TODO - remove hack: The entire tileset might be included, too expensive to serialize
|
|
68
67
|
delete dracoOptions['3d-tiles'];
|
|
69
|
-
const decodedData =
|
|
68
|
+
const decodedData = await (0, loader_utils_1.parseFromContext)(bufferCopy, draco_1.DracoLoader, dracoOptions, context);
|
|
70
69
|
const decodedAttributes = (0, gltf_attribute_utils_1.getGLTFAccessors)(decodedData.attributes);
|
|
71
70
|
// Restore min/max values
|
|
72
71
|
for (const [attributeName, decodedAttribute] of Object.entries(decodedAttributes)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-gltf.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-gltf.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"parse-gltf.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-gltf.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,aAAa,CAAC;AAcjD,OAAO;AACP,MAAM,MAAM,gBAAgB,GAAG,eAAe,GAAG;IAC/C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE7B,6FAA6F;IAC7F,WAAW,CAAC,EAAE,KAAK,CAAC;CACrB,CAAC;AAEF,4DAA4D;AAC5D,wBAAgB,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAGpF;AAED,wBAAsB,SAAS,CAC7B,IAAI,EAAE,eAAe,EACrB,mBAAmB,KAAA,EACnB,UAAU,oBAAI,EACd,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,eAAe,CAAC,CAqB1B"}
|
|
@@ -145,10 +145,10 @@ function getReferencesImageIndices(gltf) {
|
|
|
145
145
|
}
|
|
146
146
|
/** Asynchronously fetches and parses one image, store in images array outside of json */
|
|
147
147
|
async function loadImage(gltf, image, index, options, context) {
|
|
148
|
-
const { fetch, parse } = context;
|
|
149
148
|
let arrayBuffer;
|
|
150
149
|
if (image.uri && !image.hasOwnProperty('bufferView')) {
|
|
151
150
|
const uri = (0, resolve_url_1.resolveUrl)(image.uri, options);
|
|
151
|
+
const { fetch } = context;
|
|
152
152
|
const response = await fetch(uri);
|
|
153
153
|
arrayBuffer = await response.arrayBuffer();
|
|
154
154
|
image.bufferView = {
|
|
@@ -161,14 +161,15 @@ async function loadImage(gltf, image, index, options, context) {
|
|
|
161
161
|
}
|
|
162
162
|
(0, assert_1.assert)(arrayBuffer, 'glTF image has no data');
|
|
163
163
|
// Call `parse`
|
|
164
|
-
let parsedImage = await
|
|
164
|
+
let parsedImage = (await (0, loader_utils_1.parseFromContext)(arrayBuffer, [images_1.ImageLoader, textures_1.BasisLoader], {
|
|
165
165
|
...options,
|
|
166
166
|
mimeType: image.mimeType,
|
|
167
167
|
basis: options.basis || { format: (0, textures_1.selectSupportedBasisFormat)() }
|
|
168
|
-
}, context);
|
|
168
|
+
}, context));
|
|
169
169
|
if (parsedImage && parsedImage[0]) {
|
|
170
170
|
parsedImage = {
|
|
171
171
|
compressed: true,
|
|
172
|
+
// @ts-expect-error
|
|
172
173
|
mipmaps: false,
|
|
173
174
|
width: parsedImage[0].width,
|
|
174
175
|
height: parsedImage[0].height,
|
|
@@ -179,5 +180,6 @@ async function loadImage(gltf, image, index, options, context) {
|
|
|
179
180
|
// const parsedImage = await parse(arrayBuffer, [ImageLoader]);
|
|
180
181
|
// Store the loaded image
|
|
181
182
|
gltf.images = gltf.images || [];
|
|
183
|
+
// @ts-expect-error TODO - sort out image typing asap
|
|
182
184
|
gltf.images[index] = parsedImage;
|
|
183
185
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loaders.gl/gltf",
|
|
3
|
-
"version": "4.0.0-alpha.
|
|
3
|
+
"version": "4.0.0-alpha.22",
|
|
4
4
|
"description": "Framework-independent loader for the glTF format",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -34,11 +34,11 @@
|
|
|
34
34
|
"build-bundle": "esbuild src/bundle.ts --bundle --outfile=dist/dist.min.js"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@loaders.gl/draco": "4.0.0-alpha.
|
|
38
|
-
"@loaders.gl/images": "4.0.0-alpha.
|
|
39
|
-
"@loaders.gl/loader-utils": "4.0.0-alpha.
|
|
40
|
-
"@loaders.gl/textures": "4.0.0-alpha.
|
|
37
|
+
"@loaders.gl/draco": "4.0.0-alpha.22",
|
|
38
|
+
"@loaders.gl/images": "4.0.0-alpha.22",
|
|
39
|
+
"@loaders.gl/loader-utils": "4.0.0-alpha.22",
|
|
40
|
+
"@loaders.gl/textures": "4.0.0-alpha.22",
|
|
41
41
|
"@math.gl/core": "^3.5.1"
|
|
42
42
|
},
|
|
43
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "0da838c506d1275383f2fd3d244d9c72b25397d2"
|
|
44
44
|
}
|
|
@@ -2,7 +2,12 @@
|
|
|
2
2
|
// Only TRIANGLES: 0x0004 and TRIANGLE_STRIP: 0x0005 are supported
|
|
3
3
|
/* eslint-disable camelcase */
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
import type {LoaderContext} from '@loaders.gl/loader-utils';
|
|
6
|
+
import {sliceArrayBuffer, parseFromContext} from '@loaders.gl/loader-utils';
|
|
7
|
+
|
|
8
|
+
import {DracoLoader} from '@loaders.gl/draco';
|
|
9
|
+
import {DracoLoaderOptions} from '@loaders.gl/draco';
|
|
10
|
+
|
|
6
11
|
import type {
|
|
7
12
|
GLTF,
|
|
8
13
|
GLTFAccessor,
|
|
@@ -11,10 +16,6 @@ import type {
|
|
|
11
16
|
} from '../types/gltf-json-schema';
|
|
12
17
|
import type {GLTFLoaderOptions} from '../../gltf-loader';
|
|
13
18
|
|
|
14
|
-
import type {LoaderContext} from '@loaders.gl/loader-utils';
|
|
15
|
-
import {DracoLoader} from '@loaders.gl/draco';
|
|
16
|
-
import {DracoLoaderOptions, DracoMesh} from '@loaders.gl/draco';
|
|
17
|
-
import {sliceArrayBuffer} from '@loaders.gl/loader-utils';
|
|
18
19
|
import {GLTFScenegraph} from '../api/gltf-scenegraph';
|
|
19
20
|
import {getGLTFAccessors, getGLTFAccessor} from '../gltf-utils/gltf-attribute-utils';
|
|
20
21
|
|
|
@@ -99,12 +100,11 @@ async function decompressPrimitive(
|
|
|
99
100
|
// TODO - remove when `parse` is fixed to handle `byteOffset`s
|
|
100
101
|
const bufferCopy = sliceArrayBuffer(buffer.buffer, buffer.byteOffset); // , buffer.byteLength);
|
|
101
102
|
|
|
102
|
-
const {parse} = context;
|
|
103
103
|
const dracoOptions: DracoLoaderOptions = {...options};
|
|
104
104
|
|
|
105
105
|
// TODO - remove hack: The entire tileset might be included, too expensive to serialize
|
|
106
106
|
delete dracoOptions['3d-tiles'];
|
|
107
|
-
const decodedData =
|
|
107
|
+
const decodedData = await parseFromContext(bufferCopy, DracoLoader, dracoOptions, context);
|
|
108
108
|
|
|
109
109
|
const decodedAttributes: {[key: string]: GLTFAccessor} = getGLTFAccessors(decodedData.attributes);
|
|
110
110
|
|
|
@@ -5,7 +5,8 @@ import type {GLTFWithBuffers} from '../types/gltf-types';
|
|
|
5
5
|
import type {GLB} from '../types/glb-types';
|
|
6
6
|
import type {ParseGLBOptions} from './parse-glb';
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import type {ImageType, TextureLevel} from '@loaders.gl/schema';
|
|
9
|
+
import {parseJSON, sliceArrayBuffer, parseFromContext} from '@loaders.gl/loader-utils';
|
|
9
10
|
import {ImageLoader} from '@loaders.gl/images';
|
|
10
11
|
import {BasisLoader, selectSupportedBasisFormat} from '@loaders.gl/textures';
|
|
11
12
|
|
|
@@ -198,13 +199,14 @@ async function loadImage(
|
|
|
198
199
|
options,
|
|
199
200
|
context: LoaderContext
|
|
200
201
|
) {
|
|
201
|
-
const {fetch, parse} = context;
|
|
202
|
-
|
|
203
202
|
let arrayBuffer;
|
|
204
203
|
|
|
205
204
|
if (image.uri && !image.hasOwnProperty('bufferView')) {
|
|
206
205
|
const uri = resolveUrl(image.uri, options);
|
|
206
|
+
|
|
207
|
+
const {fetch} = context;
|
|
207
208
|
const response = await fetch(uri);
|
|
209
|
+
|
|
208
210
|
arrayBuffer = await response.arrayBuffer();
|
|
209
211
|
image.bufferView = {
|
|
210
212
|
data: arrayBuffer
|
|
@@ -219,7 +221,7 @@ async function loadImage(
|
|
|
219
221
|
assert(arrayBuffer, 'glTF image has no data');
|
|
220
222
|
|
|
221
223
|
// Call `parse`
|
|
222
|
-
let parsedImage = await
|
|
224
|
+
let parsedImage = (await parseFromContext(
|
|
223
225
|
arrayBuffer,
|
|
224
226
|
[ImageLoader, BasisLoader],
|
|
225
227
|
{
|
|
@@ -228,11 +230,12 @@ async function loadImage(
|
|
|
228
230
|
basis: options.basis || {format: selectSupportedBasisFormat()}
|
|
229
231
|
},
|
|
230
232
|
context
|
|
231
|
-
);
|
|
233
|
+
)) as ImageType | TextureLevel[][];
|
|
232
234
|
|
|
233
235
|
if (parsedImage && parsedImage[0]) {
|
|
234
236
|
parsedImage = {
|
|
235
237
|
compressed: true,
|
|
238
|
+
// @ts-expect-error
|
|
236
239
|
mipmaps: false,
|
|
237
240
|
width: parsedImage[0].width,
|
|
238
241
|
height: parsedImage[0].height,
|
|
@@ -244,5 +247,6 @@ async function loadImage(
|
|
|
244
247
|
|
|
245
248
|
// Store the loaded image
|
|
246
249
|
gltf.images = gltf.images || [];
|
|
250
|
+
// @ts-expect-error TODO - sort out image typing asap
|
|
247
251
|
gltf.images[index] = parsedImage;
|
|
248
252
|
}
|