@shapediver/viewer.data-engine.geometry-engine 1.13.10 → 1.14.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/GeometryEngine.d.ts.map +1 -1
  2. package/dist/GeometryEngine.js +1 -4
  3. package/dist/GeometryEngine.js.map +1 -1
  4. package/dist/gltfv1/GLTFLoader.js +1 -1
  5. package/dist/gltfv1/GLTFLoader.js.map +1 -1
  6. package/dist/gltfv2/GLTFLoader.d.ts +30 -20
  7. package/dist/gltfv2/GLTFLoader.d.ts.map +1 -1
  8. package/dist/gltfv2/GLTFLoader.js +300 -443
  9. package/dist/gltfv2/GLTFLoader.js.map +1 -1
  10. package/dist/gltfv2/draco/draco_decoder.d.ts +6 -0
  11. package/dist/gltfv2/draco/draco_decoder.d.ts.map +1 -0
  12. package/dist/gltfv2/draco/draco_decoder.js +54436 -0
  13. package/dist/gltfv2/draco/draco_decoder.js.map +1 -0
  14. package/dist/gltfv2/loaders/AccessorLoader.d.ts +14 -0
  15. package/dist/gltfv2/loaders/AccessorLoader.d.ts.map +1 -0
  16. package/dist/gltfv2/loaders/AccessorLoader.js +111 -0
  17. package/dist/gltfv2/loaders/AccessorLoader.js.map +1 -0
  18. package/dist/gltfv2/loaders/BufferLoader.d.ts +12 -0
  19. package/dist/gltfv2/loaders/BufferLoader.d.ts.map +1 -0
  20. package/dist/gltfv2/loaders/BufferLoader.js +82 -0
  21. package/dist/gltfv2/loaders/BufferLoader.js.map +1 -0
  22. package/dist/gltfv2/loaders/BufferViewLoader.d.ts +11 -0
  23. package/dist/gltfv2/loaders/BufferViewLoader.d.ts.map +1 -0
  24. package/dist/gltfv2/loaders/BufferViewLoader.js +43 -0
  25. package/dist/gltfv2/loaders/BufferViewLoader.js.map +1 -0
  26. package/dist/gltfv2/loaders/GeometryLoader.d.ts +19 -0
  27. package/dist/gltfv2/loaders/GeometryLoader.d.ts.map +1 -0
  28. package/dist/gltfv2/loaders/GeometryLoader.js +172 -0
  29. package/dist/gltfv2/loaders/GeometryLoader.js.map +1 -0
  30. package/dist/gltfv2/loaders/MaterialLoader.d.ts +15 -0
  31. package/dist/gltfv2/loaders/MaterialLoader.d.ts.map +1 -0
  32. package/dist/gltfv2/loaders/MaterialLoader.js +286 -0
  33. package/dist/gltfv2/loaders/MaterialLoader.js.map +1 -0
  34. package/dist/gltfv2/loaders/TextureLoader.d.ts +15 -0
  35. package/dist/gltfv2/loaders/TextureLoader.d.ts.map +1 -0
  36. package/dist/gltfv2/loaders/TextureLoader.js +88 -0
  37. package/dist/gltfv2/loaders/TextureLoader.js.map +1 -0
  38. package/package.json +16 -9
@@ -0,0 +1,14 @@
1
+ import { AttributeData } from '@shapediver/viewer.shared.types';
2
+ import { IGLTF_v2 } from '@shapediver/viewer.data-engine.shared-types';
3
+ import { BufferViewLoader } from './BufferViewLoader';
4
+ export declare class AccessorLoader {
5
+ private readonly _content;
6
+ private readonly _bufferViewLoader;
7
+ private readonly _logger;
8
+ private _loaded;
9
+ constructor(_content: IGLTF_v2, _bufferViewLoader: BufferViewLoader);
10
+ getAccessor(accessorId: number): AttributeData | null;
11
+ load(): void;
12
+ private getNormalizedComponentScale;
13
+ }
14
+ //# sourceMappingURL=AccessorLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccessorLoader.d.ts","sourceRoot":"","sources":["../../../src/gltfv2/loaders/AccessorLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AAC/D,OAAO,EAGL,QAAQ,EAKT,MAAM,6CAA6C,CAAA;AAKpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAErD,qBAAa,cAAc;IAab,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAAY,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAVnF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6C;IAErE,OAAO,CAAC,OAAO,CAEN;gBAMoB,QAAQ,EAAE,QAAQ,EAAmB,iBAAiB,EAAE,gBAAgB;IAM9F,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAOrD,IAAI,IAAI,IAAI;IAyEnB,OAAO,CAAC,2BAA2B;CAuBpC"}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AccessorLoader = void 0;
4
+ const viewer_shared_types_1 = require("@shapediver/viewer.shared.types");
5
+ const viewer_data_engine_shared_types_1 = require("@shapediver/viewer.data-engine.shared-types");
6
+ const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
7
+ const tsyringe_1 = require("tsyringe");
8
+ class AccessorLoader {
9
+ // #endregion Properties (2)
10
+ // #region Constructors (1)
11
+ constructor(_content, _bufferViewLoader) {
12
+ this._content = _content;
13
+ this._bufferViewLoader = _bufferViewLoader;
14
+ // #region Properties (2)
15
+ this._logger = tsyringe_1.container.resolve(viewer_shared_services_1.Logger);
16
+ this._loaded = {};
17
+ }
18
+ // #endregion Constructors (1)
19
+ // #region Public Methods (2)
20
+ getAccessor(accessorId) {
21
+ if (!this._content.accessors)
22
+ throw new Error('AccessorLoader.getAccessor: Accessors not available.');
23
+ if (!this._content.accessors[accessorId])
24
+ throw new Error('AccessorLoader.getAccessor: Accessor not available.');
25
+ if (!this._loaded[accessorId])
26
+ throw new Error('AccessorLoader.getAccessor: Accessor not loaded.');
27
+ return this._loaded[accessorId];
28
+ }
29
+ load() {
30
+ if (!this._content.accessors)
31
+ return;
32
+ for (let i = 0; i < this._content.accessors.length; i++) {
33
+ const accessorId = i;
34
+ if (!this._content.accessors[accessorId])
35
+ throw new Error('AccessorLoader.load: BufferView not available.');
36
+ const accessor = this._content.accessors[accessorId];
37
+ if (accessor.bufferView === undefined) {
38
+ // Ignore empty accessors, which may be used to declare runtime
39
+ // information about attributes coming from another source (e.g. Draco
40
+ // compression extension).
41
+ this._loaded[accessorId] = null;
42
+ continue;
43
+ }
44
+ const arrayBuffer = this._bufferViewLoader.getBufferView(accessor.bufferView);
45
+ const itemSize = viewer_data_engine_shared_types_1.ACCESSORTYPE_V2[accessor.type];
46
+ if (accessor.componentType === 5124)
47
+ this._logger.warn(viewer_shared_services_1.LOGGINGTOPIC.DATA_PROCESSING, 'GLTFLoader.loadAccessor: The componentType for this accessor is 5124, which is not allowed. Trying to load it anyway.');
48
+ const ArrayType = viewer_data_engine_shared_types_1.ACCESSORCOMPONENTTYPE_V2[accessor.componentType];
49
+ const elementBytes = ArrayType.BYTES_PER_ELEMENT;
50
+ const itemBytes = elementBytes * itemSize;
51
+ const byteOffset = accessor.byteOffset || 0;
52
+ const byteStride = accessor.bufferView !== undefined ? this._content.bufferViews ? this._content.bufferViews[accessor.bufferView].byteStride : undefined : undefined;
53
+ const normalized = accessor.normalized === true;
54
+ let array;
55
+ if (byteStride && byteStride !== itemBytes) {
56
+ // Each "slice" of the buffer, as defined by 'count' elements of 'byteStride' bytes, gets its own InterleavedBuffer
57
+ // This makes sure that IBA.count reflects accessor.count properly
58
+ const ibSlice = Math.floor(byteOffset / byteStride);
59
+ array = new ArrayType(arrayBuffer, ibSlice * byteStride, accessor.count * byteStride / elementBytes);
60
+ }
61
+ else {
62
+ if (arrayBuffer === null) {
63
+ array = new ArrayType(accessor.count * itemSize);
64
+ }
65
+ else {
66
+ array = new ArrayType(arrayBuffer, byteOffset, accessor.count * itemSize);
67
+ }
68
+ }
69
+ if (normalized) {
70
+ const scale = this.getNormalizedComponentScale(ArrayType);
71
+ const scaled = new Float32Array(array.length);
72
+ for (let j = 0, jl = array.length; j < jl; j++)
73
+ scaled[j] = array[j] * scale;
74
+ array = scaled;
75
+ }
76
+ if (accessor.sparse !== undefined) {
77
+ const itemSizeIndices = viewer_data_engine_shared_types_1.ACCESSORTYPE_V2.SCALAR;
78
+ const IndicesArrayType = viewer_data_engine_shared_types_1.ACCESSORCOMPONENTTYPE_V2[accessor.sparse.indices.componentType];
79
+ const byteOffsetIndices = accessor.sparse.indices.byteOffset || 0;
80
+ const byteOffsetValues = accessor.sparse.values.byteOffset || 0;
81
+ if (!accessor.sparse.indices.bufferView || !accessor.sparse.values.bufferView)
82
+ throw new Error('Sparse Mesh not properly defined.');
83
+ const sparseIndices = new IndicesArrayType(this._bufferViewLoader.getBufferView(accessor.sparse.indices.bufferView), byteOffsetIndices, accessor.sparse.count * itemSizeIndices);
84
+ const sparseValues = new ArrayType(this._bufferViewLoader.getBufferView(accessor.sparse.values.bufferView), byteOffsetValues, accessor.sparse.count * itemSize);
85
+ this._loaded[accessorId] = new viewer_shared_types_1.AttributeData(array, itemSize, itemBytes, byteOffset, elementBytes, normalized, accessor.count, accessor.min, accessor.max, byteStride, true, sparseIndices, sparseValues);
86
+ continue;
87
+ }
88
+ this._loaded[accessorId] = new viewer_shared_types_1.AttributeData(array, itemSize, itemBytes, byteOffset, elementBytes, normalized, accessor.count, accessor.min, accessor.max, byteStride);
89
+ }
90
+ }
91
+ // #endregion Public Methods (2)
92
+ // #region Private Methods (1)
93
+ getNormalizedComponentScale(constructor) {
94
+ // Reference:
95
+ // https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization#encoding-quantized-data
96
+ switch (constructor) {
97
+ case Int8Array:
98
+ return 1 / 127;
99
+ case Uint8Array:
100
+ return 1 / 255;
101
+ case Int16Array:
102
+ return 1 / 32767;
103
+ case Uint16Array:
104
+ return 1 / 65535;
105
+ default:
106
+ throw new Error('THREE.GLTFLoader: Unsupported normalized accessor component type.');
107
+ }
108
+ }
109
+ }
110
+ exports.AccessorLoader = AccessorLoader;
111
+ //# sourceMappingURL=AccessorLoader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccessorLoader.js","sourceRoot":"","sources":["../../../src/gltfv2/loaders/AccessorLoader.ts"],"names":[],"mappings":";;;AAAA,yEAA+D;AAC/D,iGAQoD;AACpD,+EAAyE;AACzE,uCAAoC;AAKpC,MAAa,cAAc;IASzB,4BAA4B;IAE5B,2BAA2B;IAE3B,YAA6B,QAAkB,EAAmB,iBAAmC;QAAxE,aAAQ,GAAR,QAAQ,CAAU;QAAmB,sBAAiB,GAAjB,iBAAiB,CAAkB;QAZrG,yBAAyB;QAER,YAAO,GAAmB,oBAAS,CAAC,OAAO,CAAC,+BAAM,CAAC,CAAC;QAE7D,YAAO,GAET,EAAE,CAAC;IAMgG,CAAC;IAE1G,8BAA8B;IAE9B,6BAA6B;IAEtB,WAAW,CAAC,UAAkB;QAC/B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;QACrG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;QAChH,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;QAClG,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IAEI,IAAI;QACL,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS;YAAE,OAAO;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrD,MAAM,UAAU,GAAG,CAAC,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAA;YAC3G,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAErD,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE;gBACnC,+DAA+D;gBAC/D,sEAAsE;gBACtE,0BAA0B;gBAC1B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;gBAChC,SAAS;aACZ;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAW,CAAC,CAAC;YAE/E,MAAM,QAAQ,GAAG,iDAAY,CAA4B,QAAQ,CAAC,IAAI,CAAC,CAAC;YACxE,IAAI,QAAQ,CAAC,aAAa,KAAK,IAAI;gBAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,qCAAY,CAAC,eAAe,EAAE,uHAAuH,CAAC,CAAC;YAC9M,MAAM,SAAS,GAAG,0DAAsB,CAAsC,QAAQ,CAAC,aAAa,CAAC,CAAC;YAEtG,MAAM,YAAY,GAAG,SAAS,CAAC,iBAAiB,CAAC;YACjD,MAAM,SAAS,GAAG,YAAY,GAAG,QAAQ,CAAC;YAC1C,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,CAAC,CAAC;YAC5C,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YACrK,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,KAAK,IAAI,CAAC;YAChD,IAAI,KAAK,CAAC;YAEV,IAAI,UAAU,IAAI,UAAU,KAAK,SAAS,EAAE;gBACxC,mHAAmH;gBACnH,kEAAkE;gBAClE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC;gBACpD,KAAK,GAAG,IAAI,SAAS,CAAC,WAAW,EAAE,OAAO,GAAG,UAAU,EAAE,QAAQ,CAAC,KAAK,GAAG,UAAU,GAAG,YAAY,CAAC,CAAC;aACxG;iBAAM;gBACH,IAAI,WAAW,KAAK,IAAI,EAAE;oBACtB,KAAK,GAAG,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC;iBACpD;qBAAM;oBACH,KAAK,GAAG,IAAI,SAAS,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC;iBAC7E;aACJ;YAED,IAAI,UAAU,EAAE;gBACZ,MAAM,KAAK,GAAG,IAAI,CAAC,2BAA2B,CAAC,SAAS,CAAC,CAAC;gBAC1D,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;oBAC1C,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;gBACjC,KAAK,GAAG,MAAM,CAAC;aAClB;YAED,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE;gBAC/B,MAAM,eAAe,GAAG,iDAAY,CAAC,MAAM,CAAC;gBAC5C,MAAM,gBAAgB,GAAG,0DAAsB,CAAsC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;gBAE5H,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;gBAClE,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;gBAEhE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU;oBAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;gBAEnI,MAAM,aAAa,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,UAAW,CAAC,EAAE,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC;gBAClL,MAAM,YAAY,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,UAAW,CAAC,EAAE,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC;gBAEjK,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,mCAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;gBAC1M,SAAS;aACZ;YAED,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,mCAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;SAC1K;IACL,CAAC;IAEH,gCAAgC;IAEhC,8BAA8B;IAEtB,2BAA2B,CAAC,WAA6J;QAC3L,aAAa;QACb,wHAAwH;QAExH,QAAQ,WAAW,EAAE;YACjB,KAAK,SAAS;gBACV,OAAO,CAAC,GAAG,GAAG,CAAC;YAEnB,KAAK,UAAU;gBACX,OAAO,CAAC,GAAG,GAAG,CAAC;YAEnB,KAAK,UAAU;gBACX,OAAO,CAAC,GAAG,KAAK,CAAC;YAErB,KAAK,WAAW;gBACZ,OAAO,CAAC,GAAG,KAAK,CAAC;YAErB;gBACI,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;SAC5F;IACL,CAAC;CAGJ;AA1HD,wCA0HC"}
@@ -0,0 +1,12 @@
1
+ import { IGLTF_v2 } from '@shapediver/viewer.data-engine.shared-types';
2
+ export declare class BufferLoader {
3
+ private readonly _content;
4
+ private _body?;
5
+ private _baseUri?;
6
+ private readonly _httpClient;
7
+ private _loaded;
8
+ constructor(_content: IGLTF_v2, _body?: ArrayBuffer | undefined, _baseUri?: string | undefined);
9
+ getBuffer(bufferId: number): ArrayBuffer;
10
+ load(): Promise<void>;
11
+ }
12
+ //# sourceMappingURL=BufferLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BufferLoader.d.ts","sourceRoot":"","sources":["../../../src/gltfv2/loaders/BufferLoader.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,6CAA6C,CAAA;AAGtE,qBAAa,YAAY;IAaT,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAAY,OAAO,CAAC,KAAK,CAAC;IAAe,OAAO,CAAC,QAAQ,CAAC;IAV/F,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyD;IAErF,OAAO,CAAC,OAAO,CAER;gBAMsB,QAAQ,EAAE,QAAQ,EAAU,KAAK,CAAC,yBAAa,EAAU,QAAQ,CAAC,oBAAQ;IAMhG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW;IAOlC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CA8CrC"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.BufferLoader = void 0;
13
+ const tsyringe_1 = require("tsyringe");
14
+ const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
15
+ class BufferLoader {
16
+ // #endregion Properties (2)
17
+ // #region Constructors (1)
18
+ constructor(_content, _body, _baseUri) {
19
+ this._content = _content;
20
+ this._body = _body;
21
+ this._baseUri = _baseUri;
22
+ // #region Properties (2)
23
+ this._httpClient = tsyringe_1.container.resolve(viewer_shared_services_1.HttpClient);
24
+ this._loaded = {};
25
+ }
26
+ // #endregion Constructors (1)
27
+ // #region Public Methods (2)
28
+ getBuffer(bufferId) {
29
+ if (!this._content.buffers)
30
+ throw new Error('BufferLoader.getBuffer: Buffers not available.');
31
+ if (!this._content.buffers[bufferId])
32
+ throw new Error('BufferLoader.getBuffer: Buffer not available.');
33
+ if (!this._loaded[bufferId])
34
+ throw new Error('BufferLoader.getBuffer: Buffer not loaded.');
35
+ return this._loaded[bufferId];
36
+ }
37
+ load() {
38
+ return __awaiter(this, void 0, void 0, function* () {
39
+ if (!this._content.buffers)
40
+ return;
41
+ let promises = [];
42
+ for (let i = 0; i < this._content.buffers.length; i++) {
43
+ const bufferId = i;
44
+ const buffer = this._content.buffers[bufferId];
45
+ if (buffer.type && buffer.type !== 'arraybuffer') {
46
+ throw new Error(`BufferLoader.load: ${buffer.type} is not supported.`);
47
+ }
48
+ // If present, GLB container is required to be the first buffer.
49
+ if (buffer.uri === undefined && bufferId === 0) {
50
+ if (!this._body)
51
+ throw new Error(`BufferLoader.load: Buffer not available.`);
52
+ this._loaded[bufferId] = this._body;
53
+ return;
54
+ }
55
+ const dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;
56
+ const dataUriRegexResult = buffer.uri.match(dataUriRegex);
57
+ // Safari can not handle Data URIs through XMLHttpRequest so process manually
58
+ if (dataUriRegexResult) {
59
+ const isBase64 = !!dataUriRegexResult[2];
60
+ let data = dataUriRegexResult[3];
61
+ data = decodeURIComponent(data);
62
+ if (isBase64)
63
+ data = atob(data);
64
+ const view = new Uint8Array(data.length);
65
+ for (let i = 0; i < data.length; i++) {
66
+ view[i] = data.charCodeAt(i);
67
+ }
68
+ this._loaded[bufferId] = view.buffer;
69
+ }
70
+ else {
71
+ let httpResultPromise = this._httpClient.get(this._baseUri + '/' + buffer.uri, {
72
+ responseType: 'arraybuffer'
73
+ }).then(response => { this._loaded[bufferId] = response.data; });
74
+ promises.push(httpResultPromise);
75
+ }
76
+ }
77
+ yield Promise.all(promises);
78
+ });
79
+ }
80
+ }
81
+ exports.BufferLoader = BufferLoader;
82
+ //# sourceMappingURL=BufferLoader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BufferLoader.js","sourceRoot":"","sources":["../../../src/gltfv2/loaders/BufferLoader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { IGLTF_v2 } from '@shapediver/viewer.data-engine.shared-types';
2
+ import { BufferLoader } from './BufferLoader';
3
+ export declare class BufferViewLoader {
4
+ private readonly _content;
5
+ private readonly _bufferLoader;
6
+ private _loaded;
7
+ constructor(_content: IGLTF_v2, _bufferLoader: BufferLoader);
8
+ getBufferView(bufferViewId: number): ArrayBuffer;
9
+ load(): void;
10
+ }
11
+ //# sourceMappingURL=BufferViewLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BufferViewLoader.d.ts","sourceRoot":"","sources":["../../../src/gltfv2/loaders/BufferViewLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,6CAA6C,CAAA;AAEtE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,qBAAa,gBAAgB;IAWb,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAAY,OAAO,CAAC,QAAQ,CAAC,aAAa;IAR/E,OAAO,CAAC,OAAO,CAER;gBAMsB,QAAQ,EAAE,QAAQ,EAAmB,aAAa,EAAE,YAAY;IAMtF,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,WAAW;IAOhD,IAAI,IAAI,IAAI;CAmBtB"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BufferViewLoader = void 0;
4
+ class BufferViewLoader {
5
+ // #endregion Properties (1)
6
+ // #region Constructors (1)
7
+ constructor(_content, _bufferLoader) {
8
+ this._content = _content;
9
+ this._bufferLoader = _bufferLoader;
10
+ // #region Properties (1)
11
+ this._loaded = {};
12
+ }
13
+ // #endregion Constructors (1)
14
+ // #region Public Methods (2)
15
+ getBufferView(bufferViewId) {
16
+ if (!this._content.bufferViews)
17
+ throw new Error('BufferViewLoader.load: BufferViews not available.');
18
+ if (!this._content.bufferViews[bufferViewId])
19
+ throw new Error('BufferViewLoader.load: BufferView not available.');
20
+ if (!this._loaded[bufferViewId])
21
+ throw new Error('BufferViewLoader.load: BufferView not loaded.');
22
+ return this._loaded[bufferViewId];
23
+ }
24
+ load() {
25
+ if (!this._content.bufferViews)
26
+ return;
27
+ for (let i = 0; i < this._content.bufferViews.length; i++) {
28
+ const bufferViewId = i;
29
+ if (!this._content.bufferViews[bufferViewId])
30
+ throw new Error('BufferViewLoader.load: BufferView not available.');
31
+ const bufferView = this._content.bufferViews[bufferViewId];
32
+ const byteLength = bufferView.byteLength || 0;
33
+ const byteOffset = bufferView.byteOffset || 0;
34
+ if (bufferView.buffer === undefined)
35
+ throw new Error('BufferViewLoader.load: BufferView has no buffer defined.');
36
+ const buffer = this._bufferLoader.getBuffer(bufferView.buffer);
37
+ const result = buffer.slice(byteOffset, byteOffset + byteLength);
38
+ this._loaded[bufferViewId] = result;
39
+ }
40
+ }
41
+ }
42
+ exports.BufferViewLoader = BufferViewLoader;
43
+ //# sourceMappingURL=BufferViewLoader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BufferViewLoader.js","sourceRoot":"","sources":["../../../src/gltfv2/loaders/BufferViewLoader.ts"],"names":[],"mappings":";;;AAIA,MAAa,gBAAgB;IAOzB,4BAA4B;IAE5B,2BAA2B;IAE3B,YAA6B,QAAkB,EAAmB,aAA2B;QAAhE,aAAQ,GAAR,QAAQ,CAAU;QAAmB,kBAAa,GAAb,aAAa,CAAc;QAV7F,yBAAyB;QAEjB,YAAO,GAEX,EAAE,CAAC;IAM0F,CAAC;IAElG,8BAA8B;IAE9B,6BAA6B;IAEtB,aAAa,CAAC,YAAoB;QACrC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;QACpG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;QACjH,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;QACjG,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACtC,CAAC;IAEM,IAAI;QACP,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW;YAAE,OAAO;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACvD,MAAM,YAAY,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;YACjH,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YAE3D,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,IAAI,CAAC,CAAC;YAC9C,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,IAAI,CAAC,CAAC;YAE9C,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;YAChH,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,MAAO,CAAC,CAAC;YAChE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,CAAC,CAAC;YAEjE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC;SACvC;IACL,CAAC;CAGJ;AA3CD,4CA2CC"}
@@ -0,0 +1,19 @@
1
+ import { IGLTF_v2 } from '@shapediver/viewer.data-engine.shared-types';
2
+ import { TreeNode } from '@shapediver/viewer.shared.node-tree';
3
+ import { MaterialVariantsData } from '@shapediver/viewer.shared.types';
4
+ import { AccessorLoader } from './AccessorLoader';
5
+ import { BufferViewLoader } from './BufferViewLoader';
6
+ import { MaterialLoader } from './MaterialLoader';
7
+ export declare class GeometryLoader {
8
+ private readonly _content;
9
+ private readonly _accessorLoader;
10
+ private readonly _bufferViewLoader;
11
+ private readonly _materialLoader;
12
+ private readonly _dracoModule;
13
+ private _materialVariantsData;
14
+ constructor(_content: IGLTF_v2, _accessorLoader: AccessorLoader, _bufferViewLoader: BufferViewLoader, _materialLoader: MaterialLoader, _dracoModule: any);
15
+ get materialVariantsData(): MaterialVariantsData;
16
+ loadMesh(meshId: number, weights?: number[]): TreeNode;
17
+ private loadPrimitive;
18
+ }
19
+ //# sourceMappingURL=GeometryLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GeometryLoader.d.ts","sourceRoot":"","sources":["../../../src/gltfv2/loaders/GeometryLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAsB,MAAM,6CAA6C,CAAA;AAC1F,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAA;AAC9D,OAAO,EAA+B,oBAAoB,EAAiB,MAAM,iCAAiC,CAAA;AAGlH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,qBAAa,cAAc;IAUnB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAXjC,OAAO,CAAC,qBAAqB,CAA8B;gBAOtC,QAAQ,EAAE,QAAQ,EAClB,eAAe,EAAE,cAAc,EAC/B,iBAAiB,EAAE,gBAAgB,EACnC,eAAe,EAAE,cAAc,EAC/B,YAAY,EAAE,GAAG;IAOtC,IAAW,oBAAoB,IAAI,oBAAoB,CAEtD;IAMM,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,QAAQ;IAiB7D,OAAO,CAAC,aAAa;CA+JxB"}
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GeometryLoader = void 0;
4
+ const viewer_shared_node_tree_1 = require("@shapediver/viewer.shared.node-tree");
5
+ const viewer_shared_types_1 = require("@shapediver/viewer.shared.types");
6
+ const GLTFLoader_1 = require("../GLTFLoader");
7
+ class GeometryLoader {
8
+ // #endregion Properties (1)
9
+ // #region Constructors (1)
10
+ constructor(_content, _accessorLoader, _bufferViewLoader, _materialLoader, _dracoModule) {
11
+ this._content = _content;
12
+ this._accessorLoader = _accessorLoader;
13
+ this._bufferViewLoader = _bufferViewLoader;
14
+ this._materialLoader = _materialLoader;
15
+ this._dracoModule = _dracoModule;
16
+ // #region Properties (1)
17
+ this._materialVariantsData = new viewer_shared_types_1.MaterialVariantsData();
18
+ }
19
+ // #endregion Constructors (1)
20
+ // #region Public Accessors (1)
21
+ get materialVariantsData() {
22
+ return this._materialVariantsData;
23
+ }
24
+ // #endregion Public Accessors (1)
25
+ // #region Public Methods (1)
26
+ loadMesh(meshId, weights) {
27
+ if (!this._content.meshes)
28
+ throw new Error('GeometryLoader.loadMesh: Meshes not available.');
29
+ if (!this._content.meshes[meshId])
30
+ throw new Error('GeometryLoader.loadMesh: Mesh not available.');
31
+ const mesh = this._content.meshes[meshId];
32
+ const meshNode = new viewer_shared_node_tree_1.TreeNode(mesh.name || 'mesh_' + meshId);
33
+ if (mesh.primitives)
34
+ for (let i = 0, len = mesh.primitives.length; i < len; i++)
35
+ meshNode.addChild(this.loadPrimitive(mesh.primitives, i, mesh.weights || weights));
36
+ return meshNode;
37
+ }
38
+ // #endregion Public Methods (1)
39
+ // #region Private Methods (1)
40
+ loadPrimitive(primitives, index, weights = []) {
41
+ const primitive = primitives[index];
42
+ const primitiveNode = new viewer_shared_node_tree_1.TreeNode('primitive_' + index);
43
+ const attributes = {};
44
+ let indices = null;
45
+ const convertedNames = {};
46
+ if (primitive.extensions && primitive.extensions[GLTFLoader_1.GLTF_EXTENSIONS.KHR_DRACO_MESH_COMPRESSION]) {
47
+ const dracoDef = primitive.extensions[GLTFLoader_1.GLTF_EXTENSIONS.KHR_DRACO_MESH_COMPRESSION];
48
+ const arrayBuffer = this._bufferViewLoader.getBufferView(dracoDef.bufferView);
49
+ const decoder = new this._dracoModule.Decoder();
50
+ const buffer = new this._dracoModule.DecoderBuffer();
51
+ buffer.Init(new Int8Array(arrayBuffer), arrayBuffer.byteLength);
52
+ const geometryType = decoder.GetEncodedGeometryType(buffer);
53
+ let dracoGeometry;
54
+ if (geometryType === this._dracoModule.TRIANGULAR_MESH) {
55
+ dracoGeometry = new this._dracoModule.Mesh();
56
+ decoder.DecodeBufferToMesh(buffer, dracoGeometry);
57
+ }
58
+ else if (geometryType === this._dracoModule.POINT_CLOUD) {
59
+ dracoGeometry = new this._dracoModule.PointCloud();
60
+ decoder.DecodeBufferToPointCloud(buffer, dracoGeometry);
61
+ }
62
+ this._dracoModule.destroy(buffer);
63
+ if (dracoDef.attributes['POSITION'] === undefined) {
64
+ const errorMsg = "No position attribute found in the mesh.";
65
+ this._dracoModule.destroy(decoder);
66
+ this._dracoModule.destroy(dracoGeometry);
67
+ throw new Error(errorMsg);
68
+ }
69
+ for (let a in dracoDef.attributes) {
70
+ const attribute = decoder.GetAttributeByUniqueId(dracoGeometry, dracoDef.attributes[a]);
71
+ const attributeData = new this._dracoModule.DracoFloat32Array();
72
+ decoder.GetAttributeFloatForAllPoints(dracoGeometry, attribute, attributeData);
73
+ const byteOffset = attribute.byte_offset();
74
+ const normalized = attribute.normalized();
75
+ const num_components = attribute.num_components();
76
+ const count = attributeData.size();
77
+ const array = new Float32Array(count);
78
+ for (let i = 0; i < count; i++) {
79
+ for (let a = 0; a < num_components; a++) {
80
+ const temp = i * num_components;
81
+ const value = attributeData.GetValue(temp + a);
82
+ array[temp + a] = value;
83
+ }
84
+ }
85
+ this._dracoModule.destroy(attributeData);
86
+ attributes[a] = new viewer_shared_types_1.AttributeData(array, num_components, // itemSize
87
+ array.BYTES_PER_ELEMENT * num_components, // itemBytes = elementBytes * itemSize
88
+ byteOffset, // byteOffset
89
+ array.BYTES_PER_ELEMENT, // elementBytes
90
+ normalized, // normalized
91
+ array.length / num_components);
92
+ }
93
+ const numFaces = geometryType == this._dracoModule.TRIANGULAR_MESH ? dracoGeometry.num_faces() : 0;
94
+ const numIndices = numFaces * 3;
95
+ const indexArray = new Uint32Array(numIndices);
96
+ // For mesh, we need to generate the faces.
97
+ if (geometryType == this._dracoModule.TRIANGULAR_MESH) {
98
+ const ia = new this._dracoModule.DracoInt32Array();
99
+ for (let i = 0; i < numFaces; ++i) {
100
+ decoder.GetFaceFromMesh(dracoGeometry, i, ia);
101
+ const index = i * 3;
102
+ indexArray[index] = ia.GetValue(0);
103
+ indexArray[index + 1] = ia.GetValue(1);
104
+ indexArray[index + 2] = ia.GetValue(2);
105
+ }
106
+ this._dracoModule.destroy(ia);
107
+ }
108
+ this._dracoModule.destroy(decoder);
109
+ this._dracoModule.destroy(dracoGeometry);
110
+ if (geometryType == this._dracoModule.TRIANGULAR_MESH)
111
+ indices = new viewer_shared_types_1.AttributeData(indexArray, 1, // itemSize
112
+ indexArray.BYTES_PER_ELEMENT * 1, // itemBytes = elementBytes * itemSize
113
+ 0, // byteOffset
114
+ indexArray.BYTES_PER_ELEMENT, // elementBytes
115
+ false, // normalized
116
+ indexArray.length // count
117
+ );
118
+ }
119
+ for (let attribute in primitive.attributes) {
120
+ if (attributes[attribute]) {
121
+ convertedNames[attribute] = attribute;
122
+ continue;
123
+ }
124
+ let attributeName = attribute;
125
+ // attribute name conversion to be consistent with gltf
126
+ if (/\d/.test(attributeName) && !attributeName.includes('_')) {
127
+ const index = attributeName.search(/\d/);
128
+ attributeName = attributeName.substring(0, index) + '_' + attributeName.substring(index, attributeName.length);
129
+ }
130
+ else if (attributeName === 'TEXCOORD' || attributeName === 'COLOR' || attributeName === 'JOINTS' || attributeName === 'WEIGHTS') {
131
+ attributeName += '_0';
132
+ }
133
+ else if (attributeName === 'UV') {
134
+ attributeName = 'TEXCOORD_0';
135
+ }
136
+ convertedNames[attribute] = attributeName;
137
+ attributes[attributeName] = (this._accessorLoader.getAccessor(primitive.attributes[attribute]));
138
+ }
139
+ if ((primitive.indices || primitive.indices === 0) && !indices)
140
+ indices = this._accessorLoader.getAccessor(primitive.indices);
141
+ // reading and assigning morph targets
142
+ if (primitive.targets) {
143
+ for (let i = 0; i < primitive.targets.length; i++) {
144
+ for (let target in primitive.targets[i]) {
145
+ if (!attributes[target])
146
+ continue;
147
+ attributes[convertedNames[target]].morphAttributeData.push((this._accessorLoader.getAccessor(primitive.targets[i][target])));
148
+ }
149
+ }
150
+ }
151
+ let material = null;
152
+ if (primitive.material || primitive.material === 0)
153
+ material = this._materialLoader.getMaterial(primitive.material);
154
+ const primitiveData = new viewer_shared_types_1.PrimitiveData(attributes, primitive.mode, indices, material);
155
+ if (primitive.extensions && primitive.extensions[GLTFLoader_1.GLTF_EXTENSIONS.KHR_MATERIALS_VARIANTS]) {
156
+ this._materialVariantsData.primitiveData.push(primitiveData);
157
+ const variantsExtension = primitive.extensions[GLTFLoader_1.GLTF_EXTENSIONS.KHR_MATERIALS_VARIANTS];
158
+ for (let i = 0; i < variantsExtension.mappings.length; i++) {
159
+ const mapping = variantsExtension.mappings[i];
160
+ const material = this._materialLoader.getMaterial(mapping.material);
161
+ for (let j = 0; j < mapping.variants.length; j++)
162
+ primitiveData.materialVariants.push({ variant: mapping.variants[j], material });
163
+ }
164
+ }
165
+ const geometryData = new viewer_shared_types_1.GeometryData(primitiveData);
166
+ geometryData.morphWeights = weights;
167
+ primitiveNode.data.push(geometryData);
168
+ return primitiveNode;
169
+ }
170
+ }
171
+ exports.GeometryLoader = GeometryLoader;
172
+ //# sourceMappingURL=GeometryLoader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GeometryLoader.js","sourceRoot":"","sources":["../../../src/gltfv2/loaders/GeometryLoader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { IGLTF_v2 } from '@shapediver/viewer.data-engine.shared-types';
2
+ import { AbstractMaterialData } from '@shapediver/viewer.shared.types';
3
+ import { TextureLoader } from './TextureLoader';
4
+ export declare class MaterialLoader {
5
+ private readonly _content;
6
+ private readonly _textureLoader;
7
+ private readonly _converter;
8
+ private readonly _materialEngine;
9
+ private _loaded;
10
+ constructor(_content: IGLTF_v2, _textureLoader: TextureLoader);
11
+ getMaterial(materialId: number): AbstractMaterialData;
12
+ load(): Promise<void>;
13
+ private loadMap;
14
+ }
15
+ //# sourceMappingURL=MaterialLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MaterialLoader.d.ts","sourceRoot":"","sources":["../../../src/gltfv2/loaders/MaterialLoader.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,QAAQ,EAIT,MAAM,6CAA6C,CAAA;AAEpD,OAAO,EACL,oBAAoB,EAWrB,MAAM,iCAAiC,CAAA;AAMxC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,qBAAa,cAAc;IAcX,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAAY,OAAO,CAAC,QAAQ,CAAC,cAAc;IAXhF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsD;IACjF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqE;IAErG,OAAO,CAAC,OAAO,CAER;gBAMsB,QAAQ,EAAE,QAAQ,EAAmB,cAAc,EAAE,aAAa;IAMxF,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,oBAAoB;IAO/C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA2QlC,OAAO,CAAC,OAAO;CAuBlB"}