@loaders.gl/gltf 3.3.0-alpha.1 → 3.3.0-alpha.11

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 (201) hide show
  1. package/dist/dist.min.js +236 -148
  2. package/dist/es5/bundle.js +0 -1
  3. package/dist/es5/bundle.js.map +1 -1
  4. package/dist/es5/glb-loader.js +2 -13
  5. package/dist/es5/glb-loader.js.map +1 -1
  6. package/dist/es5/glb-writer.js +3 -6
  7. package/dist/es5/glb-writer.js.map +1 -1
  8. package/dist/es5/gltf-loader.js +11 -23
  9. package/dist/es5/gltf-loader.js.map +1 -1
  10. package/dist/es5/gltf-writer.js +2 -5
  11. package/dist/es5/gltf-writer.js.map +1 -1
  12. package/dist/es5/index.js +10 -17
  13. package/dist/es5/index.js.map +1 -1
  14. package/dist/es5/lib/api/gltf-extensions.js +15 -47
  15. package/dist/es5/lib/api/gltf-extensions.js.map +1 -1
  16. package/dist/es5/lib/api/gltf-scenegraph.js +128 -96
  17. package/dist/es5/lib/api/gltf-scenegraph.js.map +1 -1
  18. package/dist/es5/lib/api/normalize-gltf-v1.js +34 -72
  19. package/dist/es5/lib/api/normalize-gltf-v1.js.map +1 -1
  20. package/dist/es5/lib/api/post-process-gltf.js +26 -89
  21. package/dist/es5/lib/api/post-process-gltf.js.map +1 -1
  22. package/dist/es5/lib/encoders/encode-glb.js +10 -8
  23. package/dist/es5/lib/encoders/encode-glb.js.map +1 -1
  24. package/dist/es5/lib/encoders/encode-gltf.js +3 -6
  25. package/dist/es5/lib/encoders/encode-gltf.js.map +1 -1
  26. package/dist/es5/lib/extensions/EXT_meshopt_compression.js +2 -28
  27. package/dist/es5/lib/extensions/EXT_meshopt_compression.js.map +1 -1
  28. package/dist/es5/lib/extensions/EXT_texture_webp.js +5 -18
  29. package/dist/es5/lib/extensions/EXT_texture_webp.js.map +1 -1
  30. package/dist/es5/lib/extensions/KHR_binary_gltf.js +5 -12
  31. package/dist/es5/lib/extensions/KHR_binary_gltf.js.map +1 -1
  32. package/dist/es5/lib/extensions/KHR_draco_mesh_compression.js +11 -79
  33. package/dist/es5/lib/extensions/KHR_draco_mesh_compression.js.map +1 -1
  34. package/dist/es5/lib/extensions/KHR_texture_basisu.js +5 -14
  35. package/dist/es5/lib/extensions/KHR_texture_basisu.js.map +1 -1
  36. package/dist/es5/lib/extensions/KHR_texture_transform.js +17 -72
  37. package/dist/es5/lib/extensions/KHR_texture_transform.js.map +1 -1
  38. package/dist/es5/lib/extensions/deprecated/EXT_feature_metadata.js +110 -0
  39. package/dist/es5/lib/extensions/deprecated/EXT_feature_metadata.js.map +1 -0
  40. package/dist/es5/lib/extensions/deprecated/KHR_lights_punctual.js +0 -24
  41. package/dist/es5/lib/extensions/deprecated/KHR_lights_punctual.js.map +1 -1
  42. package/dist/es5/lib/extensions/deprecated/KHR_materials_unlit.js +3 -20
  43. package/dist/es5/lib/extensions/deprecated/KHR_materials_unlit.js.map +1 -1
  44. package/dist/es5/lib/extensions/deprecated/KHR_techniques_webgl.js +12 -29
  45. package/dist/es5/lib/extensions/deprecated/KHR_techniques_webgl.js.map +1 -1
  46. package/dist/es5/lib/gltf-utils/get-typed-array.js +1 -1
  47. package/dist/es5/lib/gltf-utils/get-typed-array.js.map +1 -1
  48. package/dist/es5/lib/gltf-utils/gltf-attribute-utils.js +5 -17
  49. package/dist/es5/lib/gltf-utils/gltf-attribute-utils.js.map +1 -1
  50. package/dist/es5/lib/gltf-utils/gltf-constants.js +3 -4
  51. package/dist/es5/lib/gltf-utils/gltf-constants.js.map +1 -1
  52. package/dist/es5/lib/gltf-utils/gltf-utils.js +1 -8
  53. package/dist/es5/lib/gltf-utils/gltf-utils.js.map +1 -1
  54. package/dist/es5/lib/gltf-utils/resolve-url.js +0 -5
  55. package/dist/es5/lib/gltf-utils/resolve-url.js.map +1 -1
  56. package/dist/es5/lib/parsers/parse-glb.js +11 -17
  57. package/dist/es5/lib/parsers/parse-glb.js.map +1 -1
  58. package/dist/es5/lib/parsers/parse-gltf.js +21 -79
  59. package/dist/es5/lib/parsers/parse-gltf.js.map +1 -1
  60. package/dist/es5/lib/types/glb-types.js.map +1 -1
  61. package/dist/es5/lib/types/gltf-json-schema.js.map +1 -1
  62. package/dist/es5/lib/types/gltf-postprocessed-schema.js.map +1 -1
  63. package/dist/es5/lib/types/gltf-types.js.map +1 -1
  64. package/dist/es5/lib/utils/assert.js +0 -1
  65. package/dist/es5/lib/utils/assert.js.map +1 -1
  66. package/dist/es5/lib/utils/version.js +1 -1
  67. package/dist/es5/lib/utils/version.js.map +1 -1
  68. package/dist/es5/meshopt/meshopt-decoder.js +10 -47
  69. package/dist/es5/meshopt/meshopt-decoder.js.map +1 -1
  70. package/dist/es5/webp/webp.js +3 -19
  71. package/dist/es5/webp/webp.js.map +1 -1
  72. package/dist/esm/bundle.js +1 -1
  73. package/dist/esm/bundle.js.map +1 -1
  74. package/dist/esm/glb-loader.js +0 -1
  75. package/dist/esm/glb-loader.js.map +1 -1
  76. package/dist/esm/glb-writer.js +3 -1
  77. package/dist/esm/glb-writer.js.map +1 -1
  78. package/dist/esm/gltf-loader.js +9 -3
  79. package/dist/esm/gltf-loader.js.map +1 -1
  80. package/dist/esm/gltf-writer.js +3 -2
  81. package/dist/esm/gltf-writer.js.map +1 -1
  82. package/dist/esm/index.js +4 -0
  83. package/dist/esm/index.js.map +1 -1
  84. package/dist/esm/lib/api/gltf-extensions.js +17 -9
  85. package/dist/esm/lib/api/gltf-extensions.js.map +1 -1
  86. package/dist/esm/lib/api/gltf-scenegraph.js +40 -68
  87. package/dist/esm/lib/api/gltf-scenegraph.js.map +1 -1
  88. package/dist/esm/lib/api/normalize-gltf-v1.js +5 -36
  89. package/dist/esm/lib/api/normalize-gltf-v1.js.map +1 -1
  90. package/dist/esm/lib/api/post-process-gltf.js +26 -93
  91. package/dist/esm/lib/api/post-process-gltf.js.map +1 -1
  92. package/dist/esm/lib/encoders/encode-glb.js +9 -2
  93. package/dist/esm/lib/encoders/encode-glb.js.map +1 -1
  94. package/dist/esm/lib/encoders/encode-gltf.js +6 -4
  95. package/dist/esm/lib/encoders/encode-gltf.js.map +1 -1
  96. package/dist/esm/lib/extensions/EXT_meshopt_compression.js +5 -6
  97. package/dist/esm/lib/extensions/EXT_meshopt_compression.js.map +1 -1
  98. package/dist/esm/lib/extensions/EXT_texture_webp.js +4 -6
  99. package/dist/esm/lib/extensions/EXT_texture_webp.js.map +1 -1
  100. package/dist/esm/lib/extensions/KHR_binary_gltf.js +3 -2
  101. package/dist/esm/lib/extensions/KHR_binary_gltf.js.map +1 -1
  102. package/dist/esm/lib/extensions/KHR_draco_mesh_compression.js +18 -17
  103. package/dist/esm/lib/extensions/KHR_draco_mesh_compression.js.map +1 -1
  104. package/dist/esm/lib/extensions/KHR_texture_basisu.js +4 -3
  105. package/dist/esm/lib/extensions/KHR_texture_basisu.js.map +1 -1
  106. package/dist/esm/lib/extensions/KHR_texture_transform.js +8 -34
  107. package/dist/esm/lib/extensions/KHR_texture_transform.js.map +1 -1
  108. package/dist/esm/lib/extensions/deprecated/EXT_feature_metadata.js +84 -0
  109. package/dist/esm/lib/extensions/deprecated/EXT_feature_metadata.js.map +1 -0
  110. package/dist/esm/lib/extensions/deprecated/KHR_lights_punctual.js +4 -4
  111. package/dist/esm/lib/extensions/deprecated/KHR_lights_punctual.js.map +1 -1
  112. package/dist/esm/lib/extensions/deprecated/KHR_materials_unlit.js +4 -3
  113. package/dist/esm/lib/extensions/deprecated/KHR_materials_unlit.js.map +1 -1
  114. package/dist/esm/lib/extensions/deprecated/KHR_techniques_webgl.js +10 -9
  115. package/dist/esm/lib/extensions/deprecated/KHR_techniques_webgl.js.map +1 -1
  116. package/dist/esm/lib/gltf-utils/get-typed-array.js +4 -0
  117. package/dist/esm/lib/gltf-utils/get-typed-array.js.map +1 -1
  118. package/dist/esm/lib/gltf-utils/gltf-attribute-utils.js +7 -11
  119. package/dist/esm/lib/gltf-utils/gltf-attribute-utils.js.map +1 -1
  120. package/dist/esm/lib/gltf-utils/gltf-constants.js +1 -0
  121. package/dist/esm/lib/gltf-utils/gltf-constants.js.map +1 -1
  122. package/dist/esm/lib/gltf-utils/gltf-utils.js +0 -2
  123. package/dist/esm/lib/gltf-utils/gltf-utils.js.map +1 -1
  124. package/dist/esm/lib/gltf-utils/resolve-url.js +1 -4
  125. package/dist/esm/lib/gltf-utils/resolve-url.js.map +1 -1
  126. package/dist/esm/lib/parsers/parse-glb.js +19 -16
  127. package/dist/esm/lib/parsers/parse-glb.js.map +1 -1
  128. package/dist/esm/lib/parsers/parse-gltf.js +15 -17
  129. package/dist/esm/lib/parsers/parse-gltf.js.map +1 -1
  130. package/dist/esm/lib/types/glb-types.js.map +1 -1
  131. package/dist/esm/lib/types/gltf-json-schema.js.map +1 -1
  132. package/dist/esm/lib/types/gltf-postprocessed-schema.js.map +1 -1
  133. package/dist/esm/lib/types/gltf-types.js.map +1 -1
  134. package/dist/esm/lib/utils/assert.js +1 -0
  135. package/dist/esm/lib/utils/assert.js.map +1 -1
  136. package/dist/esm/lib/utils/version.js +2 -1
  137. package/dist/esm/lib/utils/version.js.map +1 -1
  138. package/dist/esm/meshopt/meshopt-decoder.js +11 -15
  139. package/dist/esm/meshopt/meshopt-decoder.js.map +1 -1
  140. package/dist/esm/webp/webp.js +3 -5
  141. package/dist/esm/webp/webp.js.map +1 -1
  142. package/dist/glb-loader.d.ts +1 -1
  143. package/dist/glb-loader.d.ts.map +1 -1
  144. package/dist/gltf-loader.d.ts +1 -1
  145. package/dist/gltf-loader.d.ts.map +1 -1
  146. package/dist/gltf-writer.d.ts +1 -1
  147. package/dist/gltf-writer.d.ts.map +1 -1
  148. package/dist/index.d.ts +2 -1
  149. package/dist/index.d.ts.map +1 -1
  150. package/dist/lib/api/gltf-extensions.d.ts +1 -1
  151. package/dist/lib/api/gltf-extensions.d.ts.map +1 -1
  152. package/dist/lib/api/gltf-extensions.js +9 -3
  153. package/dist/lib/api/gltf-scenegraph.d.ts +5 -11
  154. package/dist/lib/api/gltf-scenegraph.d.ts.map +1 -1
  155. package/dist/lib/api/gltf-scenegraph.js +13 -0
  156. package/dist/lib/api/normalize-gltf-v1.d.ts.map +1 -1
  157. package/dist/lib/api/normalize-gltf-v1.js +6 -2
  158. package/dist/lib/extensions/EXT_meshopt_compression.js +1 -1
  159. package/dist/lib/extensions/EXT_texture_webp.d.ts.map +1 -1
  160. package/dist/lib/extensions/EXT_texture_webp.js +1 -0
  161. package/dist/lib/extensions/KHR_binary_gltf.js +1 -1
  162. package/dist/lib/extensions/KHR_draco_mesh_compression.js +1 -1
  163. package/dist/lib/extensions/KHR_texture_basisu.d.ts.map +1 -1
  164. package/dist/lib/extensions/KHR_texture_basisu.js +1 -0
  165. package/dist/lib/extensions/deprecated/EXT_feature_metadata.d.ts +6 -0
  166. package/dist/lib/extensions/deprecated/EXT_feature_metadata.d.ts.map +1 -0
  167. package/dist/lib/extensions/deprecated/EXT_feature_metadata.js +118 -0
  168. package/dist/lib/extensions/deprecated/KHR_materials_unlit.js +2 -2
  169. package/dist/lib/extensions/deprecated/KHR_techniques_webgl.d.ts.map +1 -1
  170. package/dist/lib/extensions/deprecated/KHR_techniques_webgl.js +1 -0
  171. package/dist/lib/parsers/parse-glb.d.ts +1 -1
  172. package/dist/lib/parsers/parse-glb.d.ts.map +1 -1
  173. package/dist/lib/parsers/parse-gltf.d.ts +1 -1
  174. package/dist/lib/parsers/parse-gltf.d.ts.map +1 -1
  175. package/dist/lib/parsers/parse-gltf.js +9 -2
  176. package/dist/lib/types/glb-types.d.ts +2 -2
  177. package/dist/lib/types/glb-types.d.ts.map +1 -1
  178. package/dist/lib/types/gltf-json-schema.d.ts +394 -9
  179. package/dist/lib/types/gltf-json-schema.d.ts.map +1 -1
  180. package/dist/lib/types/gltf-postprocessed-schema.d.ts +1 -1
  181. package/dist/lib/types/gltf-postprocessed-schema.d.ts.map +1 -1
  182. package/dist/lib/types/gltf-types.d.ts +8 -5
  183. package/dist/lib/types/gltf-types.d.ts.map +1 -1
  184. package/dist/webp/webp.d.ts +1 -1
  185. package/dist/webp/webp.d.ts.map +1 -1
  186. package/package.json +6 -6
  187. package/src/index.ts +7 -1
  188. package/src/lib/api/gltf-extensions.ts +3 -1
  189. package/src/lib/api/gltf-scenegraph.ts +21 -12
  190. package/src/lib/api/normalize-gltf-v1.ts +2 -1
  191. package/src/lib/extensions/EXT_meshopt_compression.ts +1 -1
  192. package/src/lib/extensions/EXT_texture_webp.ts +1 -0
  193. package/src/lib/extensions/KHR_binary_gltf.ts +1 -1
  194. package/src/lib/extensions/KHR_draco_mesh_compression.ts +1 -1
  195. package/src/lib/extensions/KHR_texture_basisu.ts +1 -0
  196. package/src/lib/extensions/deprecated/EXT_feature_metadata.ts +163 -0
  197. package/src/lib/extensions/deprecated/KHR_materials_unlit.ts +3 -3
  198. package/src/lib/extensions/deprecated/KHR_techniques_webgl.ts +1 -0
  199. package/src/lib/parsers/parse-gltf.ts +4 -1
  200. package/src/lib/types/gltf-json-schema.ts +432 -3
  201. package/src/lib/types/gltf-types.ts +9 -2
@@ -11,15 +11,14 @@ const DEFAULT_GLTF_JSON = {
11
11
  buffers: []
12
12
  };
13
13
  export default class GLTFScenegraph {
14
+
14
15
  constructor(gltf) {
15
16
  _defineProperty(this, "gltf", void 0);
16
-
17
17
  _defineProperty(this, "sourceBuffers", void 0);
18
-
19
18
  _defineProperty(this, "byteLength", void 0);
20
-
21
19
  this.gltf = gltf || {
22
- json: { ...DEFAULT_GLTF_JSON
20
+ json: {
21
+ ...DEFAULT_GLTF_JSON
23
22
  },
24
23
  buffers: []
25
24
  };
@@ -35,61 +34,51 @@ export default class GLTFScenegraph {
35
34
  get json() {
36
35
  return this.gltf.json;
37
36
  }
38
-
39
37
  getApplicationData(key) {
40
38
  const data = this.json[key];
41
39
  return data;
42
40
  }
43
-
44
41
  getExtraData(key) {
45
42
  const extras = this.json.extras || {};
46
43
  return extras[key];
47
44
  }
48
-
49
45
  getExtension(extensionName) {
50
46
  const isExtension = this.getUsedExtensions().find(name => name === extensionName);
51
47
  const extensions = this.json.extensions || {};
52
48
  return isExtension ? extensions[extensionName] || true : null;
53
49
  }
54
-
55
50
  getRequiredExtension(extensionName) {
56
51
  const isRequired = this.getRequiredExtensions().find(name => name === extensionName);
57
52
  return isRequired ? this.getExtension(extensionName) : null;
58
53
  }
59
-
60
54
  getRequiredExtensions() {
61
55
  return this.json.extensionsRequired || [];
62
56
  }
63
-
64
57
  getUsedExtensions() {
65
58
  return this.json.extensionsUsed || [];
66
59
  }
67
-
60
+ getRemovedExtensions() {
61
+ return this.json.extensionsRemoved || [];
62
+ }
68
63
  getObjectExtension(object, extensionName) {
69
64
  const extensions = object.extensions || {};
70
65
  return extensions[extensionName];
71
66
  }
72
-
73
67
  getScene(index) {
74
68
  return this.getObject('scenes', index);
75
69
  }
76
-
77
70
  getNode(index) {
78
71
  return this.getObject('nodes', index);
79
72
  }
80
-
81
73
  getSkin(index) {
82
74
  return this.getObject('skins', index);
83
75
  }
84
-
85
76
  getMesh(index) {
86
77
  return this.getObject('meshes', index);
87
78
  }
88
-
89
79
  getMaterial(index) {
90
80
  return this.getObject('materials', index);
91
81
  }
92
-
93
82
  getAccessor(index) {
94
83
  return this.getObject('accessors', index);
95
84
  }
@@ -97,30 +86,23 @@ export default class GLTFScenegraph {
97
86
  getTexture(index) {
98
87
  return this.getObject('textures', index);
99
88
  }
100
-
101
89
  getSampler(index) {
102
90
  return this.getObject('samplers', index);
103
91
  }
104
-
105
92
  getImage(index) {
106
93
  return this.getObject('images', index);
107
94
  }
108
-
109
95
  getBufferView(index) {
110
96
  return this.getObject('bufferViews', index);
111
97
  }
112
-
113
98
  getBuffer(index) {
114
99
  return this.getObject('buffers', index);
115
100
  }
116
-
117
101
  getObject(array, index) {
118
102
  if (typeof index === 'object') {
119
103
  return index;
120
104
  }
121
-
122
105
  const object = this.json[array] && this.json[array][index];
123
-
124
106
  if (!object) {
125
107
  throw new Error("glTF file error: Could not find ".concat(array, "[").concat(index, "]"));
126
108
  }
@@ -131,8 +113,10 @@ export default class GLTFScenegraph {
131
113
  getTypedArrayForBufferView(bufferView) {
132
114
  bufferView = this.getBufferView(bufferView);
133
115
  const bufferIndex = bufferView.buffer;
116
+
134
117
  const binChunk = this.gltf.buffers[bufferIndex];
135
118
  assert(binChunk);
119
+
136
120
  const byteOffset = (bufferView.byteOffset || 0) + binChunk.byteOffset;
137
121
  return new Uint8Array(binChunk.arrayBuffer, byteOffset, bufferView.byteLength);
138
122
  }
@@ -142,6 +126,7 @@ export default class GLTFScenegraph {
142
126
  const bufferView = this.getBufferView(accessor.bufferView);
143
127
  const buffer = this.getBuffer(bufferView.buffer);
144
128
  const arrayBuffer = buffer.data;
129
+
145
130
  const {
146
131
  ArrayType,
147
132
  length
@@ -169,14 +154,12 @@ export default class GLTFScenegraph {
169
154
  this.json.extras[key] = data;
170
155
  return this;
171
156
  }
172
-
173
157
  addObjectExtension(object, extensionName, data) {
174
158
  object.extensions = object.extensions || {};
175
159
  object.extensions[extensionName] = data;
176
160
  this.registerUsedExtension(extensionName);
177
161
  return this;
178
162
  }
179
-
180
163
  setObjectExtension(object, extensionName, data) {
181
164
  const extensions = object.extensions || {};
182
165
  extensions[extensionName] = data;
@@ -189,7 +172,8 @@ export default class GLTFScenegraph {
189
172
  return extension;
190
173
  }
191
174
 
192
- addExtension(extensionName, extensionData = {}) {
175
+ addExtension(extensionName) {
176
+ let extensionData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
193
177
  assert(extensionData);
194
178
  this.json.extensions = this.json.extensions || {};
195
179
  this.json.extensions[extensionName] = extensionData;
@@ -197,7 +181,8 @@ export default class GLTFScenegraph {
197
181
  return extensionData;
198
182
  }
199
183
 
200
- addRequiredExtension(extensionName, extensionData = {}) {
184
+ addRequiredExtension(extensionName) {
185
+ let extensionData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
201
186
  assert(extensionData);
202
187
  this.addExtension(extensionName, extensionData);
203
188
  this.registerRequiredExtension(extensionName);
@@ -206,7 +191,6 @@ export default class GLTFScenegraph {
206
191
 
207
192
  registerUsedExtension(extensionName) {
208
193
  this.json.extensionsUsed = this.json.extensionsUsed || [];
209
-
210
194
  if (!this.json.extensionsUsed.find(ext => ext === extensionName)) {
211
195
  this.json.extensionsUsed.push(extensionName);
212
196
  }
@@ -215,24 +199,31 @@ export default class GLTFScenegraph {
215
199
  registerRequiredExtension(extensionName) {
216
200
  this.registerUsedExtension(extensionName);
217
201
  this.json.extensionsRequired = this.json.extensionsRequired || [];
218
-
219
202
  if (!this.json.extensionsRequired.find(ext => ext === extensionName)) {
220
203
  this.json.extensionsRequired.push(extensionName);
221
204
  }
222
205
  }
223
206
 
224
207
  removeExtension(extensionName) {
208
+ if (!this.getExtension(extensionName)) {
209
+ return;
210
+ }
225
211
  if (this.json.extensionsRequired) {
226
212
  this._removeStringFromArray(this.json.extensionsRequired, extensionName);
227
213
  }
228
-
229
214
  if (this.json.extensionsUsed) {
230
215
  this._removeStringFromArray(this.json.extensionsUsed, extensionName);
231
216
  }
232
-
233
217
  if (this.json.extensions) {
234
218
  delete this.json.extensions[extensionName];
235
219
  }
220
+ if (!Array.isArray(this.json.extensionsRemoved)) {
221
+ this.json.extensionsRemoved = [];
222
+ }
223
+ const extensionsRemoved = this.json.extensionsRemoved;
224
+ if (!extensionsRemoved.includes(extensionName)) {
225
+ extensionsRemoved.push(extensionName);
226
+ }
236
227
  }
237
228
 
238
229
  setDefaultScene(sceneIndex) {
@@ -259,11 +250,9 @@ export default class GLTFScenegraph {
259
250
  const nodeData = {
260
251
  mesh: meshIndex
261
252
  };
262
-
263
253
  if (matrix) {
264
254
  nodeData.matrix = matrix;
265
255
  }
266
-
267
256
  this.json.nodes.push(nodeData);
268
257
  return this.json.nodes.length - 1;
269
258
  }
@@ -275,40 +264,33 @@ export default class GLTFScenegraph {
275
264
  material,
276
265
  mode = 4
277
266
  } = mesh;
278
-
279
267
  const accessors = this._addAttributes(attributes);
280
-
281
268
  const glTFMesh = {
282
269
  primitives: [{
283
270
  attributes: accessors,
284
271
  mode
285
272
  }]
286
273
  };
287
-
288
274
  if (indices) {
289
275
  const indicesAccessor = this._addIndices(indices);
290
-
291
276
  glTFMesh.primitives[0].indices = indicesAccessor;
292
277
  }
293
-
294
278
  if (Number.isFinite(material)) {
295
279
  glTFMesh.primitives[0].material = material;
296
280
  }
297
-
298
281
  this.json.meshes = this.json.meshes || [];
299
282
  this.json.meshes.push(glTFMesh);
300
283
  return this.json.meshes.length - 1;
301
284
  }
302
-
303
285
  addPointCloud(attributes) {
304
286
  const accessorIndices = this._addAttributes(attributes);
305
-
306
287
  const glTFMesh = {
307
288
  primitives: [{
308
289
  attributes: accessorIndices,
309
290
  mode: 0
310
291
  }]
311
292
  };
293
+
312
294
  this.json.meshes = this.json.meshes || [];
313
295
  this.json.meshes.push(glTFMesh);
314
296
  return this.json.meshes.length - 1;
@@ -330,6 +312,7 @@ export default class GLTFScenegraph {
330
312
  addBufferView(buffer) {
331
313
  const byteLength = buffer.byteLength;
332
314
  assert(Number.isFinite(byteLength));
315
+
333
316
  this.sourceBuffers = this.sourceBuffers || [];
334
317
  this.sourceBuffers.push(buffer);
335
318
  const glTFBufferView = {
@@ -337,7 +320,9 @@ export default class GLTFScenegraph {
337
320
  byteOffset: this.byteLength,
338
321
  byteLength
339
322
  };
323
+
340
324
  this.byteLength += padToNBytes(byteLength, 4);
325
+
341
326
  this.json.bufferViews = this.json.bufferViews || [];
342
327
  this.json.bufferViews.push(glTFBufferView);
343
328
  return this.json.bufferViews.length - 1;
@@ -357,19 +342,18 @@ export default class GLTFScenegraph {
357
342
  return this.json.accessors.length - 1;
358
343
  }
359
344
 
360
- addBinaryBuffer(sourceBuffer, accessor = {
361
- size: 3
362
- }) {
345
+ addBinaryBuffer(sourceBuffer) {
346
+ let accessor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
347
+ size: 3
348
+ };
363
349
  const bufferViewIndex = this.addBufferView(sourceBuffer);
364
350
  let minMax = {
365
351
  min: accessor.min,
366
352
  max: accessor.max
367
353
  };
368
-
369
354
  if (!minMax.min || !minMax.max) {
370
355
  minMax = this._getAccessorMinMax(sourceBuffer, accessor.size);
371
356
  }
372
-
373
357
  const accessorDefaults = {
374
358
  size: accessor.size,
375
359
  componentType: getComponentTypeFromArray(sourceBuffer),
@@ -400,13 +384,13 @@ export default class GLTFScenegraph {
400
384
 
401
385
  createBinaryChunk() {
402
386
  var _this$json, _this$json$buffers;
403
-
404
387
  this.gltf.buffers = [];
388
+
405
389
  const totalByteLength = this.byteLength;
406
390
  const arrayBuffer = new ArrayBuffer(totalByteLength);
407
391
  const targetArray = new Uint8Array(arrayBuffer);
408
- let dstByteOffset = 0;
409
392
 
393
+ let dstByteOffset = 0;
410
394
  for (const sourceBuffer of this.sourceBuffers || []) {
411
395
  dstByteOffset = copyToArray(sourceBuffer, targetArray, dstByteOffset);
412
396
  }
@@ -420,15 +404,14 @@ export default class GLTFScenegraph {
420
404
  }
421
405
 
422
406
  this.gltf.binary = arrayBuffer;
407
+
423
408
  this.sourceBuffers = [arrayBuffer];
424
409
  }
425
410
 
426
411
  _removeStringFromArray(array, string) {
427
412
  let found = true;
428
-
429
413
  while (found) {
430
414
  const index = array.indexOf(string);
431
-
432
415
  if (index > -1) {
433
416
  array.splice(index, 1);
434
417
  } else {
@@ -437,18 +420,15 @@ export default class GLTFScenegraph {
437
420
  }
438
421
  }
439
422
 
440
- _addAttributes(attributes = {}) {
423
+ _addAttributes() {
424
+ let attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
441
425
  const result = {};
442
-
443
426
  for (const attributeKey in attributes) {
444
427
  const attributeData = attributes[attributeKey];
445
-
446
428
  const attrName = this._getGltfAttributeName(attributeKey);
447
-
448
429
  const accessor = this.addBinaryBuffer(attributeData.value, attributeData);
449
430
  result[attrName] = accessor;
450
431
  }
451
-
452
432
  return result;
453
433
  }
454
434
 
@@ -464,19 +444,15 @@ export default class GLTFScenegraph {
464
444
  case 'positions':
465
445
  case 'vertices':
466
446
  return 'POSITION';
467
-
468
447
  case 'normal':
469
448
  case 'normals':
470
449
  return 'NORMAL';
471
-
472
450
  case 'color':
473
451
  case 'colors':
474
452
  return 'COLOR_0';
475
-
476
453
  case 'texcoord':
477
454
  case 'texcoords':
478
455
  return 'TEXCOORD_0';
479
-
480
456
  default:
481
457
  return attributeName;
482
458
  }
@@ -487,29 +463,25 @@ export default class GLTFScenegraph {
487
463
  min: null,
488
464
  max: null
489
465
  };
490
-
491
466
  if (buffer.length < size) {
492
467
  return result;
493
468
  }
494
-
495
469
  result.min = [];
496
470
  result.max = [];
497
471
  const initValues = buffer.subarray(0, size);
498
-
499
472
  for (const value of initValues) {
500
473
  result.min.push(value);
501
474
  result.max.push(value);
502
475
  }
503
-
504
476
  for (let index = size; index < buffer.length; index += size) {
505
477
  for (let componentIndex = 0; componentIndex < size; componentIndex++) {
506
- result.min[0 + componentIndex] = Math.min(result.min[0 + componentIndex], buffer[index + componentIndex]);
507
- result.max[0 + componentIndex] = Math.max(result.max[0 + componentIndex], buffer[index + componentIndex]);
478
+ result.min[0 + componentIndex] = Math.min(
479
+ result.min[0 + componentIndex], buffer[index + componentIndex]);
480
+ result.max[0 + componentIndex] = Math.max(
481
+ result.max[0 + componentIndex], buffer[index + componentIndex]);
508
482
  }
509
483
  }
510
-
511
484
  return result;
512
485
  }
513
-
514
486
  }
515
487
  //# sourceMappingURL=gltf-scenegraph.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/api/gltf-scenegraph.ts"],"names":["getBinaryImageMetadata","padToNBytes","copyToArray","assert","getAccessorArrayTypeAndLength","getAccessorTypeFromSize","getComponentTypeFromArray","DEFAULT_GLTF_JSON","asset","version","generator","buffers","GLTFScenegraph","constructor","gltf","json","sourceBuffers","byteLength","getApplicationData","key","data","getExtraData","extras","getExtension","extensionName","isExtension","getUsedExtensions","find","name","extensions","getRequiredExtension","isRequired","getRequiredExtensions","extensionsRequired","extensionsUsed","getObjectExtension","object","getScene","index","getObject","getNode","getSkin","getMesh","getMaterial","getAccessor","getTexture","getSampler","getImage","getBufferView","getBuffer","array","Error","getTypedArrayForBufferView","bufferView","bufferIndex","buffer","binChunk","byteOffset","Uint8Array","arrayBuffer","getTypedArrayForAccessor","accessor","ArrayType","length","getTypedArrayForImageData","image","addApplicationData","addExtraData","addObjectExtension","registerUsedExtension","setObjectExtension","removeObjectExtension","extension","addExtension","extensionData","addRequiredExtension","registerRequiredExtension","ext","push","removeExtension","_removeStringFromArray","setDefaultScene","sceneIndex","scene","addScene","nodeIndices","scenes","nodes","addNode","node","meshIndex","matrix","nodeData","mesh","addMesh","attributes","indices","material","mode","accessors","_addAttributes","glTFMesh","primitives","indicesAccessor","_addIndices","Number","isFinite","meshes","addPointCloud","accessorIndices","addImage","imageData","mimeTypeOpt","metadata","mimeType","bufferViewIndex","addBufferView","glTFImage","images","glTFBufferView","bufferViews","addAccessor","glTFAccessor","type","size","componentType","count","max","min","addBinaryBuffer","sourceBuffer","minMax","_getAccessorMinMax","accessorDefaults","Math","round","Object","assign","addTexture","texture","imageIndex","glTFTexture","source","textures","addMaterial","pbrMaterialInfo","materials","createBinaryChunk","totalByteLength","ArrayBuffer","targetArray","dstByteOffset","binary","string","found","indexOf","splice","result","attributeKey","attributeData","attrName","_getGltfAttributeName","value","attributeName","toLowerCase","initValues","subarray","componentIndex"],"mappings":"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","sourcesContent":["import type {\n GLTF,\n GLTFScene,\n GLTFNode,\n GLTFMesh,\n GLTFSkin,\n GLTFMaterial,\n GLTFAccessor,\n GLTFSampler,\n GLTFTexture,\n GLTFImage,\n GLTFBuffer,\n GLTFBufferView\n} from '../types/gltf-types';\n\nimport {getBinaryImageMetadata} from '@loaders.gl/images';\nimport {padToNBytes, copyToArray} from '@loaders.gl/loader-utils';\nimport {assert} from '../utils/assert';\nimport {\n getAccessorArrayTypeAndLength,\n getAccessorTypeFromSize,\n getComponentTypeFromArray\n} from '../gltf-utils/gltf-utils';\n\ntype GLTFWithBuffers = {\n json: GLTF;\n buffers: any[];\n binary?: ArrayBuffer;\n};\n\nconst DEFAULT_GLTF_JSON: GLTF = {\n asset: {\n version: '2.0',\n generator: 'loaders.gl'\n },\n buffers: []\n};\n\ntype Extension = {[key: string]: any};\n/**\n * Class for structured access to GLTF data\n */\nexport default class GLTFScenegraph {\n // internal\n gltf: GLTFWithBuffers;\n sourceBuffers: any[];\n byteLength: number;\n\n constructor(gltf?: {json: GLTF; buffers?: any[]}) {\n // @ts-ignore\n this.gltf = gltf || {\n json: {...DEFAULT_GLTF_JSON},\n buffers: []\n };\n this.sourceBuffers = [];\n this.byteLength = 0;\n\n // Initialize buffers\n if (this.gltf.buffers && this.gltf.buffers[0]) {\n this.byteLength = this.gltf.buffers[0].byteLength;\n this.sourceBuffers = [this.gltf.buffers[0]];\n }\n }\n\n // Accessors\n\n get json(): GLTF {\n return this.gltf.json;\n }\n\n getApplicationData(key: string): {[key: string]: any} {\n // TODO - Data is already unpacked by GLBParser\n const data = this.json[key];\n return data;\n }\n\n getExtraData(key: string): {[key: string]: any} {\n // TODO - Data is already unpacked by GLBParser\n const extras = this.json.extras || {};\n return extras[key];\n }\n\n getExtension<T = Extension>(extensionName: string): T | null {\n const isExtension = this.getUsedExtensions().find((name) => name === extensionName);\n const extensions = this.json.extensions || {};\n return isExtension ? extensions[extensionName] || true : null;\n }\n\n getRequiredExtension<T = Extension>(extensionName: string): T | null {\n const isRequired = this.getRequiredExtensions().find((name) => name === extensionName);\n return isRequired ? this.getExtension(extensionName) : null;\n }\n\n getRequiredExtensions(): string[] {\n return this.json.extensionsRequired || [];\n }\n\n getUsedExtensions(): string[] {\n return this.json.extensionsUsed || [];\n }\n\n getObjectExtension<T = Extension>(object: {[key: string]: any}, extensionName: string): T | null {\n const extensions = object.extensions || {};\n return extensions[extensionName];\n }\n\n getScene(index: number): GLTFScene {\n return this.getObject('scenes', index) as GLTFScene;\n }\n\n getNode(index: number): GLTFNode {\n return this.getObject('nodes', index) as GLTFNode;\n }\n\n getSkin(index: number): GLTFSkin {\n return this.getObject('skins', index) as GLTFSkin;\n }\n\n getMesh(index: number): GLTFMesh {\n return this.getObject('meshes', index) as GLTFMesh;\n }\n\n getMaterial(index: number): GLTFMaterial {\n return this.getObject('materials', index) as GLTFMaterial;\n }\n\n getAccessor(index: number): GLTFAccessor {\n return this.getObject('accessors', index) as GLTFAccessor;\n }\n\n // getCamera(index: number): object | null {\n // return null; // TODO: fix thi: object as null;\n // }\n\n getTexture(index: number): GLTFTexture {\n return this.getObject('textures', index) as GLTFTexture;\n }\n\n getSampler(index: number): GLTFSampler {\n return this.getObject('samplers', index) as GLTFSampler;\n }\n\n getImage(index: number): GLTFImage {\n return this.getObject('images', index) as GLTFImage;\n }\n\n getBufferView(index: number | object): GLTFBufferView {\n return this.getObject('bufferViews', index) as GLTFBufferView;\n }\n\n getBuffer(index: number): GLTFBuffer {\n return this.getObject('buffers', index) as GLTFBuffer;\n }\n\n getObject(array: string, index: number | object): object {\n // check if already resolved\n if (typeof index === 'object') {\n return index;\n }\n const object = this.json[array] && this.json[array][index];\n if (!object) {\n throw new Error(`glTF file error: Could not find ${array}[${index}]`); // eslint-disable-line\n }\n return object;\n }\n\n /**\n * Accepts buffer view index or buffer view object\n * @returns a `Uint8Array`\n */\n getTypedArrayForBufferView(bufferView: number | object): Uint8Array {\n bufferView = this.getBufferView(bufferView);\n // @ts-ignore\n const bufferIndex = bufferView.buffer;\n\n // Get hold of the arrayBuffer\n // const buffer = this.getBuffer(bufferIndex);\n const binChunk = this.gltf.buffers[bufferIndex];\n assert(binChunk);\n\n // @ts-ignore\n const byteOffset = (bufferView.byteOffset || 0) + binChunk.byteOffset;\n // @ts-ignore\n return new Uint8Array(binChunk.arrayBuffer, byteOffset, bufferView.byteLength);\n }\n\n /** Accepts accessor index or accessor object\n * @returns a typed array with type that matches the types\n */\n getTypedArrayForAccessor(accessor: number | object): any {\n // @ts-ignore\n accessor = this.getAccessor(accessor);\n // @ts-ignore\n const bufferView = this.getBufferView(accessor.bufferView);\n const buffer = this.getBuffer(bufferView.buffer);\n // @ts-ignore\n const arrayBuffer = buffer.data;\n\n // Create a new typed array as a view into the combined buffer\n const {ArrayType, length} = getAccessorArrayTypeAndLength(accessor, bufferView);\n // @ts-ignore\n const byteOffset = bufferView.byteOffset + accessor.byteOffset;\n return new ArrayType(arrayBuffer, byteOffset, length);\n }\n\n /** accepts accessor index or accessor object\n * returns a `Uint8Array`\n */\n getTypedArrayForImageData(image: number | object): Uint8Array {\n // @ts-ignore\n image = this.getAccessor(image);\n // @ts-ignore\n const bufferView = this.getBufferView(image.bufferView);\n const buffer = this.getBuffer(bufferView.buffer);\n // @ts-ignore\n const arrayBuffer = buffer.data;\n\n const byteOffset = bufferView.byteOffset || 0;\n return new Uint8Array(arrayBuffer, byteOffset, bufferView.byteLength);\n }\n\n // MODIFERS\n\n /**\n * Add an extra application-defined key to the top-level data structure\n */\n addApplicationData(key: string, data: object): GLTFScenegraph {\n this.json[key] = data;\n return this;\n }\n\n /**\n * `extras` - Standard GLTF field for storing application specific data\n */\n addExtraData(key: string, data: object): GLTFScenegraph {\n this.json.extras = this.json.extras || {};\n this.json.extras[key] = data;\n return this;\n }\n\n addObjectExtension(object: object, extensionName: string, data: object): GLTFScenegraph {\n // @ts-ignore\n object.extensions = object.extensions || {};\n // TODO - clobber or merge?\n // @ts-ignore\n object.extensions[extensionName] = data;\n this.registerUsedExtension(extensionName);\n return this;\n }\n\n setObjectExtension(object: object, extensionName: string, data: object): void {\n // @ts-ignore\n const extensions = object.extensions || {};\n extensions[extensionName] = data;\n // TODO - add to usedExtensions...\n }\n\n removeObjectExtension(object: object, extensionName: string): object {\n // @ts-ignore\n const extensions = object.extensions || {};\n const extension = extensions[extensionName];\n delete extensions[extensionName];\n return extension;\n }\n\n /**\n * Add to standard GLTF top level extension object, mark as used\n */\n addExtension(extensionName: string, extensionData: object = {}): object {\n assert(extensionData);\n this.json.extensions = this.json.extensions || {};\n this.json.extensions[extensionName] = extensionData;\n this.registerUsedExtension(extensionName);\n return extensionData;\n }\n\n /**\n * Standard GLTF top level extension object, mark as used and required\n */\n addRequiredExtension(extensionName, extensionData: object = {}): object {\n assert(extensionData);\n this.addExtension(extensionName, extensionData);\n this.registerRequiredExtension(extensionName);\n return extensionData;\n }\n\n /**\n * Add extensionName to list of used extensions\n */\n registerUsedExtension(extensionName: string): void {\n this.json.extensionsUsed = this.json.extensionsUsed || [];\n if (!this.json.extensionsUsed.find((ext) => ext === extensionName)) {\n this.json.extensionsUsed.push(extensionName);\n }\n }\n\n /**\n * Add extensionName to list of required extensions\n */\n registerRequiredExtension(extensionName: string): void {\n this.registerUsedExtension(extensionName);\n this.json.extensionsRequired = this.json.extensionsRequired || [];\n if (!this.json.extensionsRequired.find((ext) => ext === extensionName)) {\n this.json.extensionsRequired.push(extensionName);\n }\n }\n\n /**\n * Removes an extension from the top-level list\n */\n removeExtension(extensionName: string): void {\n if (this.json.extensionsRequired) {\n this._removeStringFromArray(this.json.extensionsRequired, extensionName);\n }\n if (this.json.extensionsUsed) {\n this._removeStringFromArray(this.json.extensionsUsed, extensionName);\n }\n if (this.json.extensions) {\n delete this.json.extensions[extensionName];\n }\n }\n\n /**\n * Set default scene which is to be displayed at load time\n */\n setDefaultScene(sceneIndex: number): void {\n this.json.scene = sceneIndex;\n }\n\n /**\n * @todo: add more properties for scene initialization:\n * name`, `extensions`, `extras`\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#reference-scene\n */\n addScene(scene: {nodeIndices: number[]}): number {\n const {nodeIndices} = scene;\n this.json.scenes = this.json.scenes || [];\n this.json.scenes.push({nodes: nodeIndices});\n return this.json.scenes.length - 1;\n }\n\n /**\n * @todo: add more properties for node initialization:\n * `name`, `extensions`, `extras`, `camera`, `children`, `skin`, `rotation`, `scale`, `translation`, `weights`\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#node\n */\n addNode(node: {meshIndex: number; matrix?: number[]}): number {\n const {meshIndex, matrix} = node;\n this.json.nodes = this.json.nodes || [];\n const nodeData = {mesh: meshIndex};\n if (matrix) {\n // @ts-ignore\n nodeData.matrix = matrix;\n }\n this.json.nodes.push(nodeData);\n return this.json.nodes.length - 1;\n }\n\n /** Adds a mesh to the json part */\n addMesh(mesh: {attributes: object; indices?: object; material?: number; mode?: number}): number {\n const {attributes, indices, material, mode = 4} = mesh;\n const accessors = this._addAttributes(attributes);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: accessors,\n mode\n }\n ]\n };\n\n if (indices) {\n const indicesAccessor = this._addIndices(indices);\n // @ts-ignore\n glTFMesh.primitives[0].indices = indicesAccessor;\n }\n\n if (Number.isFinite(material)) {\n // @ts-ignore\n glTFMesh.primitives[0].material = material;\n }\n\n this.json.meshes = this.json.meshes || [];\n this.json.meshes.push(glTFMesh);\n return this.json.meshes.length - 1;\n }\n\n addPointCloud(attributes: object): number {\n // @ts-ignore\n const accessorIndices = this._addAttributes(attributes);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: accessorIndices,\n mode: 0 // GL.POINTS\n }\n ]\n };\n\n this.json.meshes = this.json.meshes || [];\n this.json.meshes.push(glTFMesh);\n return this.json.meshes.length - 1;\n }\n\n /**\n * Adds a binary image. Builds glTF \"JSON metadata\" and saves buffer reference\n * Buffer will be copied into BIN chunk during \"pack\"\n * Currently encodes as glTF image\n * @param imageData\n * @param mimeType\n */\n addImage(imageData: any, mimeTypeOpt?: string): number {\n // If image is referencing a bufferView instead of URI, mimeType must be defined:\n // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#images\n // \"a reference to a bufferView; in that case mimeType must be defined.\"\n const metadata = getBinaryImageMetadata(imageData);\n const mimeType = mimeTypeOpt || metadata?.mimeType;\n\n const bufferViewIndex = this.addBufferView(imageData);\n\n const glTFImage = {\n bufferView: bufferViewIndex,\n mimeType\n };\n\n this.json.images = this.json.images || [];\n this.json.images.push(glTFImage);\n return this.json.images.length - 1;\n }\n\n /**\n * Add one untyped source buffer, create a matching glTF `bufferView`, and return its index\n * @param buffer\n */\n addBufferView(buffer: any): number {\n const byteLength = buffer.byteLength;\n assert(Number.isFinite(byteLength));\n\n // Add this buffer to the list of buffers to be written to the body.\n this.sourceBuffers = this.sourceBuffers || [];\n this.sourceBuffers.push(buffer);\n\n const glTFBufferView = {\n buffer: 0,\n // Write offset from the start of the binary body\n byteOffset: this.byteLength,\n byteLength\n };\n\n // We've now added the contents to the body, so update the total length\n // Every sub-chunk needs to be 4-byte align ed\n this.byteLength += padToNBytes(byteLength, 4);\n\n // Add a bufferView indicating start and length of this binary sub-chunk\n this.json.bufferViews = this.json.bufferViews || [];\n this.json.bufferViews.push(glTFBufferView);\n return this.json.bufferViews.length - 1;\n }\n\n /**\n * Adds an accessor to a bufferView\n * @param bufferViewIndex\n * @param accessor\n */\n addAccessor(bufferViewIndex: number, accessor: object): number {\n const glTFAccessor = {\n bufferView: bufferViewIndex,\n // @ts-ignore\n type: getAccessorTypeFromSize(accessor.size),\n // @ts-ignore\n componentType: accessor.componentType,\n // @ts-ignore\n count: accessor.count,\n // @ts-ignore\n max: accessor.max,\n // @ts-ignore\n min: accessor.min\n };\n\n this.json.accessors = this.json.accessors || [];\n this.json.accessors.push(glTFAccessor);\n return this.json.accessors.length - 1;\n }\n\n /**\n * Add a binary buffer. Builds glTF \"JSON metadata\" and saves buffer reference\n * Buffer will be copied into BIN chunk during \"pack\"\n * Currently encodes buffers as glTF accessors, but this could be optimized\n * @param sourceBuffer\n * @param accessor\n */\n addBinaryBuffer(sourceBuffer: any, accessor: object = {size: 3}): number {\n const bufferViewIndex = this.addBufferView(sourceBuffer);\n // @ts-ignore\n let minMax = {min: accessor.min, max: accessor.max};\n if (!minMax.min || !minMax.max) {\n // @ts-ignore\n minMax = this._getAccessorMinMax(sourceBuffer, accessor.size);\n }\n\n const accessorDefaults = {\n // @ts-ignore\n size: accessor.size,\n componentType: getComponentTypeFromArray(sourceBuffer),\n // @ts-ignore\n count: Math.round(sourceBuffer.length / accessor.size),\n min: minMax.min,\n max: minMax.max\n };\n\n return this.addAccessor(bufferViewIndex, Object.assign(accessorDefaults, accessor));\n }\n\n /**\n * Adds a texture to the json part\n * @todo: add more properties for texture initialization\n * `sampler`, `name`, `extensions`, `extras`\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#texture\n */\n addTexture(texture: {imageIndex: number}): number {\n const {imageIndex} = texture;\n const glTFTexture = {\n source: imageIndex\n };\n\n this.json.textures = this.json.textures || [];\n this.json.textures.push(glTFTexture);\n return this.json.textures.length - 1;\n }\n\n /** Adds a material to the json part */\n addMaterial(pbrMaterialInfo: Object): number {\n this.json.materials = this.json.materials || [];\n this.json.materials.push(pbrMaterialInfo);\n return this.json.materials.length - 1;\n }\n\n /** Pack the binary chunk */\n createBinaryChunk(): void {\n // Encoder expects this array undefined or empty\n this.gltf.buffers = [];\n\n // Allocate total array\n const totalByteLength = this.byteLength;\n const arrayBuffer = new ArrayBuffer(totalByteLength);\n const targetArray = new Uint8Array(arrayBuffer);\n\n // Copy each array into\n let dstByteOffset = 0;\n for (const sourceBuffer of this.sourceBuffers || []) {\n dstByteOffset = copyToArray(sourceBuffer, targetArray, dstByteOffset);\n }\n\n // Update the glTF BIN CHUNK byte length\n if (this.json?.buffers?.[0]) {\n this.json.buffers[0].byteLength = totalByteLength;\n } else {\n this.json.buffers = [{byteLength: totalByteLength}];\n }\n\n // Save generated arrayBuffer\n this.gltf.binary = arrayBuffer;\n\n // Put arrayBuffer to sourceBuffers for possible additional writing data in the chunk\n this.sourceBuffers = [arrayBuffer];\n }\n\n // PRIVATE\n\n _removeStringFromArray(array, string) {\n let found = true;\n while (found) {\n const index = array.indexOf(string);\n if (index > -1) {\n array.splice(index, 1);\n } else {\n found = false;\n }\n }\n }\n\n /**\n * Add attributes to buffers and create `attributes` object which is part of `mesh`\n */\n _addAttributes(attributes = {}) {\n const result = {};\n for (const attributeKey in attributes) {\n const attributeData = attributes[attributeKey];\n const attrName = this._getGltfAttributeName(attributeKey);\n const accessor = this.addBinaryBuffer(attributeData.value, attributeData);\n result[attrName] = accessor;\n }\n return result;\n }\n\n /**\n * Add indices to buffers\n */\n _addIndices(indices) {\n return this.addBinaryBuffer(indices, {size: 1});\n }\n\n /**\n * Deduce gltf specific attribue name from input attribute name\n */\n _getGltfAttributeName(attributeName) {\n switch (attributeName.toLowerCase()) {\n case 'position':\n case 'positions':\n case 'vertices':\n return 'POSITION';\n case 'normal':\n case 'normals':\n return 'NORMAL';\n case 'color':\n case 'colors':\n return 'COLOR_0';\n case 'texcoord':\n case 'texcoords':\n return 'TEXCOORD_0';\n default:\n return attributeName;\n }\n }\n\n /**\n * Calculate `min` and `max` arrays of accessor according to spec:\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#reference-accessor\n */\n _getAccessorMinMax(buffer, size) {\n const result = {min: null, max: null};\n if (buffer.length < size) {\n return result;\n }\n // @ts-ignore\n result.min = [];\n // @ts-ignore\n result.max = [];\n const initValues = buffer.subarray(0, size);\n for (const value of initValues) {\n // @ts-ignore\n result.min.push(value);\n // @ts-ignore\n result.max.push(value);\n }\n\n for (let index = size; index < buffer.length; index += size) {\n for (let componentIndex = 0; componentIndex < size; componentIndex++) {\n // @ts-ignore\n result.min[0 + componentIndex] = Math.min(\n // @ts-ignore\n result.min[0 + componentIndex],\n buffer[index + componentIndex]\n );\n // @ts-ignore\n result.max[0 + componentIndex] = Math.max(\n // @ts-ignore\n result.max[0 + componentIndex],\n buffer[index + componentIndex]\n );\n }\n }\n return result;\n }\n}\n"],"file":"gltf-scenegraph.js"}
1
+ {"version":3,"file":"gltf-scenegraph.js","names":["getBinaryImageMetadata","padToNBytes","copyToArray","assert","getAccessorArrayTypeAndLength","getAccessorTypeFromSize","getComponentTypeFromArray","DEFAULT_GLTF_JSON","asset","version","generator","buffers","GLTFScenegraph","constructor","gltf","json","sourceBuffers","byteLength","getApplicationData","key","data","getExtraData","extras","getExtension","extensionName","isExtension","getUsedExtensions","find","name","extensions","getRequiredExtension","isRequired","getRequiredExtensions","extensionsRequired","extensionsUsed","getRemovedExtensions","extensionsRemoved","getObjectExtension","object","getScene","index","getObject","getNode","getSkin","getMesh","getMaterial","getAccessor","getTexture","getSampler","getImage","getBufferView","getBuffer","array","Error","getTypedArrayForBufferView","bufferView","bufferIndex","buffer","binChunk","byteOffset","Uint8Array","arrayBuffer","getTypedArrayForAccessor","accessor","ArrayType","length","getTypedArrayForImageData","image","addApplicationData","addExtraData","addObjectExtension","registerUsedExtension","setObjectExtension","removeObjectExtension","extension","addExtension","extensionData","addRequiredExtension","registerRequiredExtension","ext","push","removeExtension","_removeStringFromArray","Array","isArray","includes","setDefaultScene","sceneIndex","scene","addScene","nodeIndices","scenes","nodes","addNode","node","meshIndex","matrix","nodeData","mesh","addMesh","attributes","indices","material","mode","accessors","_addAttributes","glTFMesh","primitives","indicesAccessor","_addIndices","Number","isFinite","meshes","addPointCloud","accessorIndices","addImage","imageData","mimeTypeOpt","metadata","mimeType","bufferViewIndex","addBufferView","glTFImage","images","glTFBufferView","bufferViews","addAccessor","glTFAccessor","type","size","componentType","count","max","min","addBinaryBuffer","sourceBuffer","minMax","_getAccessorMinMax","accessorDefaults","Math","round","Object","assign","addTexture","texture","imageIndex","glTFTexture","source","textures","addMaterial","pbrMaterialInfo","materials","createBinaryChunk","totalByteLength","ArrayBuffer","targetArray","dstByteOffset","binary","string","found","indexOf","splice","result","attributeKey","attributeData","attrName","_getGltfAttributeName","value","attributeName","toLowerCase","initValues","subarray","componentIndex"],"sources":["../../../../src/lib/api/gltf-scenegraph.ts"],"sourcesContent":["import type {\n GLTF,\n GLTFScene,\n GLTFNode,\n GLTFMesh,\n GLTFSkin,\n GLTFMaterial,\n GLTFAccessor,\n GLTFSampler,\n GLTFTexture,\n GLTFImage,\n GLTFBuffer,\n GLTFBufferView,\n GLTFWithBuffers\n} from '../types/gltf-types';\n\nimport {getBinaryImageMetadata} from '@loaders.gl/images';\nimport {padToNBytes, copyToArray} from '@loaders.gl/loader-utils';\nimport {assert} from '../utils/assert';\nimport {\n getAccessorArrayTypeAndLength,\n getAccessorTypeFromSize,\n getComponentTypeFromArray\n} from '../gltf-utils/gltf-utils';\n\nconst DEFAULT_GLTF_JSON: GLTF = {\n asset: {\n version: '2.0',\n generator: 'loaders.gl'\n },\n buffers: []\n};\n\ntype Extension = {[key: string]: any};\n/**\n * Class for structured access to GLTF data\n */\nexport default class GLTFScenegraph {\n // internal\n gltf: GLTFWithBuffers;\n sourceBuffers: any[];\n byteLength: number;\n\n constructor(gltf?: {json: GLTF; buffers?: any[]}) {\n // @ts-ignore\n this.gltf = gltf || {\n json: {...DEFAULT_GLTF_JSON},\n buffers: []\n };\n this.sourceBuffers = [];\n this.byteLength = 0;\n\n // Initialize buffers\n if (this.gltf.buffers && this.gltf.buffers[0]) {\n this.byteLength = this.gltf.buffers[0].byteLength;\n this.sourceBuffers = [this.gltf.buffers[0]];\n }\n }\n\n // Accessors\n\n get json(): GLTF {\n return this.gltf.json;\n }\n\n getApplicationData(key: string): unknown {\n // TODO - Data is already unpacked by GLBParser\n const data = this.json[key];\n return data;\n }\n\n getExtraData(key: string): {[key: string]: unknown} {\n // TODO - Data is already unpacked by GLBParser\n const extras = this.json.extras || {};\n return extras[key];\n }\n\n getExtension<T = Extension>(extensionName: string): T | null {\n const isExtension = this.getUsedExtensions().find((name) => name === extensionName);\n const extensions = this.json.extensions || {};\n return isExtension ? extensions[extensionName] || true : null;\n }\n\n getRequiredExtension<T = Extension>(extensionName: string): T | null {\n const isRequired = this.getRequiredExtensions().find((name) => name === extensionName);\n return isRequired ? this.getExtension(extensionName) : null;\n }\n\n getRequiredExtensions(): string[] {\n return this.json.extensionsRequired || [];\n }\n\n getUsedExtensions(): string[] {\n return this.json.extensionsUsed || [];\n }\n\n getRemovedExtensions(): string[] {\n return (this.json.extensionsRemoved || []) as string[];\n }\n\n getObjectExtension<T = Extension>(object: {[key: string]: any}, extensionName: string): T | null {\n const extensions = object.extensions || {};\n return extensions[extensionName];\n }\n\n getScene(index: number): GLTFScene {\n return this.getObject('scenes', index) as GLTFScene;\n }\n\n getNode(index: number): GLTFNode {\n return this.getObject('nodes', index) as GLTFNode;\n }\n\n getSkin(index: number): GLTFSkin {\n return this.getObject('skins', index) as GLTFSkin;\n }\n\n getMesh(index: number): GLTFMesh {\n return this.getObject('meshes', index) as GLTFMesh;\n }\n\n getMaterial(index: number): GLTFMaterial {\n return this.getObject('materials', index) as GLTFMaterial;\n }\n\n getAccessor(index: number): GLTFAccessor {\n return this.getObject('accessors', index) as GLTFAccessor;\n }\n\n // getCamera(index: number): object | null {\n // return null; // TODO: fix thi: object as null;\n // }\n\n getTexture(index: number): GLTFTexture {\n return this.getObject('textures', index) as GLTFTexture;\n }\n\n getSampler(index: number): GLTFSampler {\n return this.getObject('samplers', index) as GLTFSampler;\n }\n\n getImage(index: number): GLTFImage {\n return this.getObject('images', index) as GLTFImage;\n }\n\n getBufferView(index: number | object): GLTFBufferView {\n return this.getObject('bufferViews', index) as GLTFBufferView;\n }\n\n getBuffer(index: number): GLTFBuffer {\n return this.getObject('buffers', index) as GLTFBuffer;\n }\n\n getObject(array: string, index: number | object): object {\n // check if already resolved\n if (typeof index === 'object') {\n return index;\n }\n const object = this.json[array] && (this.json[array] as {}[])[index];\n if (!object) {\n throw new Error(`glTF file error: Could not find ${array}[${index}]`); // eslint-disable-line\n }\n return object;\n }\n\n /**\n * Accepts buffer view index or buffer view object\n * @returns a `Uint8Array`\n */\n getTypedArrayForBufferView(bufferView: number | object): Uint8Array {\n bufferView = this.getBufferView(bufferView);\n // @ts-ignore\n const bufferIndex = bufferView.buffer;\n\n // Get hold of the arrayBuffer\n // const buffer = this.getBuffer(bufferIndex);\n const binChunk = this.gltf.buffers[bufferIndex];\n assert(binChunk);\n\n // @ts-ignore\n const byteOffset = (bufferView.byteOffset || 0) + binChunk.byteOffset;\n // @ts-ignore\n return new Uint8Array(binChunk.arrayBuffer, byteOffset, bufferView.byteLength);\n }\n\n /** Accepts accessor index or accessor object\n * @returns a typed array with type that matches the types\n */\n getTypedArrayForAccessor(accessor: number | object): any {\n // @ts-ignore\n accessor = this.getAccessor(accessor);\n // @ts-ignore\n const bufferView = this.getBufferView(accessor.bufferView);\n const buffer = this.getBuffer(bufferView.buffer);\n // @ts-ignore\n const arrayBuffer = buffer.data;\n\n // Create a new typed array as a view into the combined buffer\n const {ArrayType, length} = getAccessorArrayTypeAndLength(accessor, bufferView);\n // @ts-ignore\n const byteOffset = bufferView.byteOffset + accessor.byteOffset;\n return new ArrayType(arrayBuffer, byteOffset, length);\n }\n\n /** accepts accessor index or accessor object\n * returns a `Uint8Array`\n */\n getTypedArrayForImageData(image: number | object): Uint8Array {\n // @ts-ignore\n image = this.getAccessor(image);\n // @ts-ignore\n const bufferView = this.getBufferView(image.bufferView);\n const buffer = this.getBuffer(bufferView.buffer);\n // @ts-ignore\n const arrayBuffer = buffer.data;\n\n const byteOffset = bufferView.byteOffset || 0;\n return new Uint8Array(arrayBuffer, byteOffset, bufferView.byteLength);\n }\n\n // MODIFERS\n\n /**\n * Add an extra application-defined key to the top-level data structure\n */\n addApplicationData(key: string, data: object): GLTFScenegraph {\n this.json[key] = data;\n return this;\n }\n\n /**\n * `extras` - Standard GLTF field for storing application specific data\n */\n addExtraData(key: string, data: object): GLTFScenegraph {\n this.json.extras = this.json.extras || {};\n (this.json.extras as Record<string, unknown>)[key] = data;\n return this;\n }\n\n addObjectExtension(object: object, extensionName: string, data: object): GLTFScenegraph {\n // @ts-ignore\n object.extensions = object.extensions || {};\n // TODO - clobber or merge?\n // @ts-ignore\n object.extensions[extensionName] = data;\n this.registerUsedExtension(extensionName);\n return this;\n }\n\n setObjectExtension(object: object, extensionName: string, data: object): void {\n // @ts-ignore\n const extensions = object.extensions || {};\n extensions[extensionName] = data;\n // TODO - add to usedExtensions...\n }\n\n removeObjectExtension(object: object, extensionName: string): object {\n // @ts-ignore\n const extensions = object.extensions || {};\n const extension = extensions[extensionName];\n delete extensions[extensionName];\n return extension;\n }\n\n /**\n * Add to standard GLTF top level extension object, mark as used\n */\n addExtension(extensionName: string, extensionData: object = {}): object {\n assert(extensionData);\n this.json.extensions = this.json.extensions || {};\n (this.json.extensions as Record<string, unknown>)[extensionName] = extensionData;\n this.registerUsedExtension(extensionName);\n return extensionData;\n }\n\n /**\n * Standard GLTF top level extension object, mark as used and required\n */\n addRequiredExtension(extensionName, extensionData: object = {}): object {\n assert(extensionData);\n this.addExtension(extensionName, extensionData);\n this.registerRequiredExtension(extensionName);\n return extensionData;\n }\n\n /**\n * Add extensionName to list of used extensions\n */\n registerUsedExtension(extensionName: string): void {\n this.json.extensionsUsed = this.json.extensionsUsed || [];\n if (!this.json.extensionsUsed.find((ext) => ext === extensionName)) {\n this.json.extensionsUsed.push(extensionName);\n }\n }\n\n /**\n * Add extensionName to list of required extensions\n */\n registerRequiredExtension(extensionName: string): void {\n this.registerUsedExtension(extensionName);\n this.json.extensionsRequired = this.json.extensionsRequired || [];\n if (!this.json.extensionsRequired.find((ext) => ext === extensionName)) {\n this.json.extensionsRequired.push(extensionName);\n }\n }\n\n /**\n * Removes an extension from the top-level list\n */\n removeExtension(extensionName: string): void {\n if (!this.getExtension(extensionName)) {\n return;\n }\n if (this.json.extensionsRequired) {\n this._removeStringFromArray(this.json.extensionsRequired, extensionName);\n }\n if (this.json.extensionsUsed) {\n this._removeStringFromArray(this.json.extensionsUsed, extensionName);\n }\n if (this.json.extensions) {\n delete this.json.extensions[extensionName];\n }\n if (!Array.isArray(this.json.extensionsRemoved)) {\n this.json.extensionsRemoved = [];\n }\n const extensionsRemoved = this.json.extensionsRemoved as string[];\n if (!extensionsRemoved.includes(extensionName)) {\n extensionsRemoved.push(extensionName);\n }\n }\n\n /**\n * Set default scene which is to be displayed at load time\n */\n setDefaultScene(sceneIndex: number): void {\n this.json.scene = sceneIndex;\n }\n\n /**\n * @todo: add more properties for scene initialization:\n * name`, `extensions`, `extras`\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#reference-scene\n */\n addScene(scene: {nodeIndices: number[]}): number {\n const {nodeIndices} = scene;\n this.json.scenes = this.json.scenes || [];\n this.json.scenes.push({nodes: nodeIndices});\n return this.json.scenes.length - 1;\n }\n\n /**\n * @todo: add more properties for node initialization:\n * `name`, `extensions`, `extras`, `camera`, `children`, `skin`, `rotation`, `scale`, `translation`, `weights`\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#node\n */\n addNode(node: {meshIndex: number; matrix?: number[]}): number {\n const {meshIndex, matrix} = node;\n this.json.nodes = this.json.nodes || [];\n const nodeData = {mesh: meshIndex};\n if (matrix) {\n // @ts-ignore\n nodeData.matrix = matrix;\n }\n this.json.nodes.push(nodeData);\n return this.json.nodes.length - 1;\n }\n\n /** Adds a mesh to the json part */\n addMesh(mesh: {attributes: object; indices?: object; material?: number; mode?: number}): number {\n const {attributes, indices, material, mode = 4} = mesh;\n const accessors = this._addAttributes(attributes);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: accessors,\n mode\n }\n ]\n };\n\n if (indices) {\n const indicesAccessor = this._addIndices(indices);\n // @ts-ignore\n glTFMesh.primitives[0].indices = indicesAccessor;\n }\n\n if (Number.isFinite(material)) {\n // @ts-ignore\n glTFMesh.primitives[0].material = material;\n }\n\n this.json.meshes = this.json.meshes || [];\n this.json.meshes.push(glTFMesh);\n return this.json.meshes.length - 1;\n }\n\n addPointCloud(attributes: object): number {\n // @ts-ignore\n const accessorIndices = this._addAttributes(attributes);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: accessorIndices,\n mode: 0 // GL.POINTS\n }\n ]\n };\n\n this.json.meshes = this.json.meshes || [];\n this.json.meshes.push(glTFMesh);\n return this.json.meshes.length - 1;\n }\n\n /**\n * Adds a binary image. Builds glTF \"JSON metadata\" and saves buffer reference\n * Buffer will be copied into BIN chunk during \"pack\"\n * Currently encodes as glTF image\n * @param imageData\n * @param mimeType\n */\n addImage(imageData: any, mimeTypeOpt?: string): number {\n // If image is referencing a bufferView instead of URI, mimeType must be defined:\n // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#images\n // \"a reference to a bufferView; in that case mimeType must be defined.\"\n const metadata = getBinaryImageMetadata(imageData);\n const mimeType = mimeTypeOpt || metadata?.mimeType;\n\n const bufferViewIndex = this.addBufferView(imageData);\n\n const glTFImage = {\n bufferView: bufferViewIndex,\n mimeType\n };\n\n this.json.images = this.json.images || [];\n this.json.images.push(glTFImage);\n return this.json.images.length - 1;\n }\n\n /**\n * Add one untyped source buffer, create a matching glTF `bufferView`, and return its index\n * @param buffer\n */\n addBufferView(buffer: any): number {\n const byteLength = buffer.byteLength;\n assert(Number.isFinite(byteLength));\n\n // Add this buffer to the list of buffers to be written to the body.\n this.sourceBuffers = this.sourceBuffers || [];\n this.sourceBuffers.push(buffer);\n\n const glTFBufferView = {\n buffer: 0,\n // Write offset from the start of the binary body\n byteOffset: this.byteLength,\n byteLength\n };\n\n // We've now added the contents to the body, so update the total length\n // Every sub-chunk needs to be 4-byte align ed\n this.byteLength += padToNBytes(byteLength, 4);\n\n // Add a bufferView indicating start and length of this binary sub-chunk\n this.json.bufferViews = this.json.bufferViews || [];\n this.json.bufferViews.push(glTFBufferView);\n return this.json.bufferViews.length - 1;\n }\n\n /**\n * Adds an accessor to a bufferView\n * @param bufferViewIndex\n * @param accessor\n */\n addAccessor(bufferViewIndex: number, accessor: object): number {\n const glTFAccessor = {\n bufferView: bufferViewIndex,\n // @ts-ignore\n type: getAccessorTypeFromSize(accessor.size),\n // @ts-ignore\n componentType: accessor.componentType,\n // @ts-ignore\n count: accessor.count,\n // @ts-ignore\n max: accessor.max,\n // @ts-ignore\n min: accessor.min\n };\n\n this.json.accessors = this.json.accessors || [];\n this.json.accessors.push(glTFAccessor);\n return this.json.accessors.length - 1;\n }\n\n /**\n * Add a binary buffer. Builds glTF \"JSON metadata\" and saves buffer reference\n * Buffer will be copied into BIN chunk during \"pack\"\n * Currently encodes buffers as glTF accessors, but this could be optimized\n * @param sourceBuffer\n * @param accessor\n */\n addBinaryBuffer(sourceBuffer: any, accessor: object = {size: 3}): number {\n const bufferViewIndex = this.addBufferView(sourceBuffer);\n // @ts-ignore\n let minMax = {min: accessor.min, max: accessor.max};\n if (!minMax.min || !minMax.max) {\n // @ts-ignore\n minMax = this._getAccessorMinMax(sourceBuffer, accessor.size);\n }\n\n const accessorDefaults = {\n // @ts-ignore\n size: accessor.size,\n componentType: getComponentTypeFromArray(sourceBuffer),\n // @ts-ignore\n count: Math.round(sourceBuffer.length / accessor.size),\n min: minMax.min,\n max: minMax.max\n };\n\n return this.addAccessor(bufferViewIndex, Object.assign(accessorDefaults, accessor));\n }\n\n /**\n * Adds a texture to the json part\n * @todo: add more properties for texture initialization\n * `sampler`, `name`, `extensions`, `extras`\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#texture\n */\n addTexture(texture: {imageIndex: number}): number {\n const {imageIndex} = texture;\n const glTFTexture = {\n source: imageIndex\n };\n\n this.json.textures = this.json.textures || [];\n this.json.textures.push(glTFTexture);\n return this.json.textures.length - 1;\n }\n\n /** Adds a material to the json part */\n addMaterial(pbrMaterialInfo: Object): number {\n this.json.materials = this.json.materials || [];\n this.json.materials.push(pbrMaterialInfo);\n return this.json.materials.length - 1;\n }\n\n /** Pack the binary chunk */\n createBinaryChunk(): void {\n // Encoder expects this array undefined or empty\n this.gltf.buffers = [];\n\n // Allocate total array\n const totalByteLength = this.byteLength;\n const arrayBuffer = new ArrayBuffer(totalByteLength);\n const targetArray = new Uint8Array(arrayBuffer);\n\n // Copy each array into\n let dstByteOffset = 0;\n for (const sourceBuffer of this.sourceBuffers || []) {\n dstByteOffset = copyToArray(sourceBuffer, targetArray, dstByteOffset);\n }\n\n // Update the glTF BIN CHUNK byte length\n if (this.json?.buffers?.[0]) {\n this.json.buffers[0].byteLength = totalByteLength;\n } else {\n this.json.buffers = [{byteLength: totalByteLength}];\n }\n\n // Save generated arrayBuffer\n this.gltf.binary = arrayBuffer;\n\n // Put arrayBuffer to sourceBuffers for possible additional writing data in the chunk\n this.sourceBuffers = [arrayBuffer];\n }\n\n // PRIVATE\n\n _removeStringFromArray(array, string) {\n let found = true;\n while (found) {\n const index = array.indexOf(string);\n if (index > -1) {\n array.splice(index, 1);\n } else {\n found = false;\n }\n }\n }\n\n /**\n * Add attributes to buffers and create `attributes` object which is part of `mesh`\n */\n _addAttributes(attributes = {}) {\n const result = {};\n for (const attributeKey in attributes) {\n const attributeData = attributes[attributeKey];\n const attrName = this._getGltfAttributeName(attributeKey);\n const accessor = this.addBinaryBuffer(attributeData.value, attributeData);\n result[attrName] = accessor;\n }\n return result;\n }\n\n /**\n * Add indices to buffers\n */\n _addIndices(indices) {\n return this.addBinaryBuffer(indices, {size: 1});\n }\n\n /**\n * Deduce gltf specific attribue name from input attribute name\n */\n _getGltfAttributeName(attributeName) {\n switch (attributeName.toLowerCase()) {\n case 'position':\n case 'positions':\n case 'vertices':\n return 'POSITION';\n case 'normal':\n case 'normals':\n return 'NORMAL';\n case 'color':\n case 'colors':\n return 'COLOR_0';\n case 'texcoord':\n case 'texcoords':\n return 'TEXCOORD_0';\n default:\n return attributeName;\n }\n }\n\n /**\n * Calculate `min` and `max` arrays of accessor according to spec:\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#reference-accessor\n */\n _getAccessorMinMax(buffer, size) {\n const result = {min: null, max: null};\n if (buffer.length < size) {\n return result;\n }\n // @ts-ignore\n result.min = [];\n // @ts-ignore\n result.max = [];\n const initValues = buffer.subarray(0, size);\n for (const value of initValues) {\n // @ts-ignore\n result.min.push(value);\n // @ts-ignore\n result.max.push(value);\n }\n\n for (let index = size; index < buffer.length; index += size) {\n for (let componentIndex = 0; componentIndex < size; componentIndex++) {\n // @ts-ignore\n result.min[0 + componentIndex] = Math.min(\n // @ts-ignore\n result.min[0 + componentIndex],\n buffer[index + componentIndex]\n );\n // @ts-ignore\n result.max[0 + componentIndex] = Math.max(\n // @ts-ignore\n result.max[0 + componentIndex],\n buffer[index + componentIndex]\n );\n }\n }\n return result;\n }\n}\n"],"mappings":"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"}