@loaders.gl/gltf 3.1.3 → 4.0.0-alpha.5

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 (211) hide show
  1. package/dist/bundle.js +2 -2
  2. package/dist/bundle.js.map +1 -0
  3. package/dist/dist.min.js +13 -13
  4. package/dist/glb-loader.js +28 -33
  5. package/dist/glb-loader.js.map +1 -0
  6. package/dist/glb-writer.js +26 -34
  7. package/dist/glb-writer.js.map +1 -0
  8. package/dist/gltf-loader.js +43 -46
  9. package/dist/gltf-loader.js.map +1 -0
  10. package/dist/gltf-writer.js +26 -29
  11. package/dist/gltf-writer.js.map +1 -0
  12. package/dist/index.js +7 -21
  13. package/dist/index.js.map +1 -0
  14. package/dist/lib/api/gltf-extensions.js +31 -71
  15. package/dist/lib/api/gltf-extensions.js.map +1 -0
  16. package/dist/lib/api/gltf-scenegraph.js +512 -550
  17. package/dist/lib/api/gltf-scenegraph.js.map +1 -0
  18. package/dist/lib/api/normalize-gltf-v1.js +229 -274
  19. package/dist/lib/api/normalize-gltf-v1.js.map +1 -0
  20. package/dist/lib/api/post-process-gltf.js +376 -324
  21. package/dist/lib/api/post-process-gltf.js.map +1 -0
  22. package/dist/lib/encoders/encode-glb.js +58 -56
  23. package/dist/lib/encoders/encode-glb.js.map +1 -0
  24. package/dist/lib/encoders/encode-gltf.js +12 -25
  25. package/dist/lib/encoders/encode-gltf.js.map +1 -0
  26. package/dist/lib/extensions/EXT_meshopt_compression.js +49 -47
  27. package/dist/lib/extensions/EXT_meshopt_compression.js.map +1 -0
  28. package/dist/lib/extensions/EXT_texture_webp.js +28 -34
  29. package/dist/lib/extensions/EXT_texture_webp.js.map +1 -0
  30. package/dist/lib/extensions/KHR_binary_gltf.js +23 -39
  31. package/dist/lib/extensions/KHR_binary_gltf.js.map +1 -0
  32. package/dist/lib/extensions/KHR_draco_mesh_compression.js +111 -126
  33. package/dist/lib/extensions/KHR_draco_mesh_compression.js.map +1 -0
  34. package/dist/lib/extensions/KHR_texture_basisu.js +19 -28
  35. package/dist/lib/extensions/KHR_texture_basisu.js.map +1 -0
  36. package/dist/lib/extensions/deprecated/KHR_lights_punctual.js +44 -57
  37. package/dist/lib/extensions/deprecated/KHR_lights_punctual.js.map +1 -0
  38. package/dist/lib/extensions/deprecated/KHR_materials_unlit.js +32 -42
  39. package/dist/lib/extensions/deprecated/KHR_materials_unlit.js.map +1 -0
  40. package/dist/lib/extensions/deprecated/KHR_techniques_webgl.js +62 -75
  41. package/dist/lib/extensions/deprecated/KHR_techniques_webgl.js.map +1 -0
  42. package/dist/lib/gltf-utils/get-typed-array.js +14 -39
  43. package/dist/lib/gltf-utils/get-typed-array.js.map +1 -0
  44. package/dist/lib/gltf-utils/gltf-attribute-utils.js +65 -65
  45. package/dist/lib/gltf-utils/gltf-attribute-utils.js.map +1 -0
  46. package/dist/lib/gltf-utils/gltf-constants.js +30 -36
  47. package/dist/lib/gltf-utils/gltf-constants.js.map +1 -0
  48. package/dist/lib/gltf-utils/gltf-utils.js +45 -52
  49. package/dist/lib/gltf-utils/gltf-utils.js.map +1 -0
  50. package/dist/lib/gltf-utils/resolve-url.js +15 -17
  51. package/dist/lib/gltf-utils/resolve-url.js.map +1 -0
  52. package/dist/lib/parsers/parse-glb.js +107 -120
  53. package/dist/lib/parsers/parse-glb.js.map +1 -0
  54. package/dist/lib/parsers/parse-gltf.js +154 -173
  55. package/dist/lib/parsers/parse-gltf.js.map +1 -0
  56. package/dist/lib/types/glb-types.js +2 -2
  57. package/dist/{es5/lib → lib}/types/glb-types.js.map +0 -0
  58. package/dist/lib/types/gltf-json-schema.js +2 -4
  59. package/dist/{es5/lib → lib}/types/gltf-json-schema.js.map +0 -0
  60. package/dist/lib/types/gltf-postprocessed-schema.js +2 -4
  61. package/dist/{es5/lib → lib}/types/gltf-postprocessed-schema.js.map +0 -0
  62. package/dist/lib/types/gltf-types.js +2 -3
  63. package/dist/{es5/lib → lib}/types/gltf-types.js.map +0 -0
  64. package/dist/lib/utils/assert.js +5 -11
  65. package/dist/lib/utils/assert.js.map +1 -0
  66. package/dist/lib/utils/version.js +2 -7
  67. package/dist/lib/utils/version.js.map +1 -0
  68. package/dist/meshopt/meshopt-decoder.js +82 -97
  69. package/dist/meshopt/meshopt-decoder.js.map +1 -0
  70. package/dist/{es5/meshopt → meshopt}/meshopt-encoder.ts.disabled +0 -0
  71. package/dist/webp/webp.js +23 -32
  72. package/dist/webp/webp.js.map +1 -0
  73. package/package.json +8 -11
  74. package/src/lib/parsers/parse-gltf.ts +1 -1
  75. package/dist/es5/bundle.js +0 -7
  76. package/dist/es5/bundle.js.map +0 -1
  77. package/dist/es5/glb-loader.js +0 -70
  78. package/dist/es5/glb-loader.js.map +0 -1
  79. package/dist/es5/glb-writer.js +0 -41
  80. package/dist/es5/glb-writer.js.map +0 -1
  81. package/dist/es5/gltf-loader.js +0 -97
  82. package/dist/es5/gltf-loader.js.map +0 -1
  83. package/dist/es5/gltf-writer.js +0 -40
  84. package/dist/es5/gltf-writer.js.map +0 -1
  85. package/dist/es5/index.js +0 -56
  86. package/dist/es5/index.js.map +0 -1
  87. package/dist/es5/lib/api/gltf-extensions.js +0 -146
  88. package/dist/es5/lib/api/gltf-extensions.js.map +0 -1
  89. package/dist/es5/lib/api/gltf-scenegraph.js +0 -623
  90. package/dist/es5/lib/api/gltf-scenegraph.js.map +0 -1
  91. package/dist/es5/lib/api/normalize-gltf-v1.js +0 -392
  92. package/dist/es5/lib/api/normalize-gltf-v1.js.map +0 -1
  93. package/dist/es5/lib/api/post-process-gltf.js +0 -502
  94. package/dist/es5/lib/api/post-process-gltf.js.map +0 -1
  95. package/dist/es5/lib/encoders/encode-glb.js +0 -75
  96. package/dist/es5/lib/encoders/encode-glb.js.map +0 -1
  97. package/dist/es5/lib/encoders/encode-gltf.js +0 -26
  98. package/dist/es5/lib/encoders/encode-gltf.js.map +0 -1
  99. package/dist/es5/lib/extensions/EXT_meshopt_compression.js +0 -137
  100. package/dist/es5/lib/extensions/EXT_meshopt_compression.js.map +0 -1
  101. package/dist/es5/lib/extensions/EXT_texture_webp.js +0 -60
  102. package/dist/es5/lib/extensions/EXT_texture_webp.js.map +0 -1
  103. package/dist/es5/lib/extensions/KHR_binary_gltf.js +0 -53
  104. package/dist/es5/lib/extensions/KHR_binary_gltf.js.map +0 -1
  105. package/dist/es5/lib/extensions/KHR_draco_mesh_compression.js +0 -331
  106. package/dist/es5/lib/extensions/KHR_draco_mesh_compression.js.map +0 -1
  107. package/dist/es5/lib/extensions/KHR_texture_basisu.js +0 -49
  108. package/dist/es5/lib/extensions/KHR_texture_basisu.js.map +0 -1
  109. package/dist/es5/lib/extensions/deprecated/KHR_lights_punctual.js +0 -129
  110. package/dist/es5/lib/extensions/deprecated/KHR_lights_punctual.js.map +0 -1
  111. package/dist/es5/lib/extensions/deprecated/KHR_materials_unlit.js +0 -97
  112. package/dist/es5/lib/extensions/deprecated/KHR_materials_unlit.js.map +0 -1
  113. package/dist/es5/lib/extensions/deprecated/KHR_techniques_webgl.js +0 -139
  114. package/dist/es5/lib/extensions/deprecated/KHR_techniques_webgl.js.map +0 -1
  115. package/dist/es5/lib/gltf-utils/get-typed-array.js +0 -26
  116. package/dist/es5/lib/gltf-utils/get-typed-array.js.map +0 -1
  117. package/dist/es5/lib/gltf-utils/gltf-attribute-utils.js +0 -85
  118. package/dist/es5/lib/gltf-utils/gltf-attribute-utils.js.map +0 -1
  119. package/dist/es5/lib/gltf-utils/gltf-constants.js +0 -48
  120. package/dist/es5/lib/gltf-utils/gltf-constants.js.map +0 -1
  121. package/dist/es5/lib/gltf-utils/gltf-utils.js +0 -69
  122. package/dist/es5/lib/gltf-utils/gltf-utils.js.map +0 -1
  123. package/dist/es5/lib/gltf-utils/resolve-url.js +0 -23
  124. package/dist/es5/lib/gltf-utils/resolve-url.js.map +0 -1
  125. package/dist/es5/lib/parsers/parse-glb.js +0 -142
  126. package/dist/es5/lib/parsers/parse-glb.js.map +0 -1
  127. package/dist/es5/lib/parsers/parse-gltf.js +0 -353
  128. package/dist/es5/lib/parsers/parse-gltf.js.map +0 -1
  129. package/dist/es5/lib/types/glb-types.js +0 -2
  130. package/dist/es5/lib/types/gltf-json-schema.js +0 -2
  131. package/dist/es5/lib/types/gltf-postprocessed-schema.js +0 -2
  132. package/dist/es5/lib/types/gltf-types.js +0 -2
  133. package/dist/es5/lib/utils/assert.js +0 -13
  134. package/dist/es5/lib/utils/assert.js.map +0 -1
  135. package/dist/es5/lib/utils/version.js +0 -9
  136. package/dist/es5/lib/utils/version.js.map +0 -1
  137. package/dist/es5/meshopt/meshopt-decoder.js +0 -270
  138. package/dist/es5/meshopt/meshopt-decoder.js.map +0 -1
  139. package/dist/es5/webp/webp.js +0 -104
  140. package/dist/es5/webp/webp.js.map +0 -1
  141. package/dist/esm/bundle.js +0 -5
  142. package/dist/esm/bundle.js.map +0 -1
  143. package/dist/esm/glb-loader.js +0 -34
  144. package/dist/esm/glb-loader.js.map +0 -1
  145. package/dist/esm/glb-writer.js +0 -29
  146. package/dist/esm/glb-writer.js.map +0 -1
  147. package/dist/esm/gltf-loader.js +0 -47
  148. package/dist/esm/gltf-loader.js.map +0 -1
  149. package/dist/esm/gltf-writer.js +0 -29
  150. package/dist/esm/gltf-writer.js.map +0 -1
  151. package/dist/esm/index.js +0 -7
  152. package/dist/esm/index.js.map +0 -1
  153. package/dist/esm/lib/api/gltf-extensions.js +0 -35
  154. package/dist/esm/lib/api/gltf-extensions.js.map +0 -1
  155. package/dist/esm/lib/api/gltf-scenegraph.js +0 -515
  156. package/dist/esm/lib/api/gltf-scenegraph.js.map +0 -1
  157. package/dist/esm/lib/api/normalize-gltf-v1.js +0 -250
  158. package/dist/esm/lib/api/normalize-gltf-v1.js.map +0 -1
  159. package/dist/esm/lib/api/post-process-gltf.js +0 -422
  160. package/dist/esm/lib/api/post-process-gltf.js.map +0 -1
  161. package/dist/esm/lib/encoders/encode-glb.js +0 -63
  162. package/dist/esm/lib/encoders/encode-glb.js.map +0 -1
  163. package/dist/esm/lib/encoders/encode-gltf.js +0 -14
  164. package/dist/esm/lib/encoders/encode-gltf.js.map +0 -1
  165. package/dist/esm/lib/extensions/EXT_meshopt_compression.js +0 -56
  166. package/dist/esm/lib/extensions/EXT_meshopt_compression.js.map +0 -1
  167. package/dist/esm/lib/extensions/EXT_texture_webp.js +0 -32
  168. package/dist/esm/lib/extensions/EXT_texture_webp.js.map +0 -1
  169. package/dist/esm/lib/extensions/KHR_binary_gltf.js +0 -26
  170. package/dist/esm/lib/extensions/KHR_binary_gltf.js.map +0 -1
  171. package/dist/esm/lib/extensions/KHR_draco_mesh_compression.js +0 -126
  172. package/dist/esm/lib/extensions/KHR_draco_mesh_compression.js.map +0 -1
  173. package/dist/esm/lib/extensions/KHR_texture_basisu.js +0 -22
  174. package/dist/esm/lib/extensions/KHR_texture_basisu.js.map +0 -1
  175. package/dist/esm/lib/extensions/deprecated/KHR_lights_punctual.js +0 -49
  176. package/dist/esm/lib/extensions/deprecated/KHR_lights_punctual.js.map +0 -1
  177. package/dist/esm/lib/extensions/deprecated/KHR_materials_unlit.js +0 -37
  178. package/dist/esm/lib/extensions/deprecated/KHR_materials_unlit.js.map +0 -1
  179. package/dist/esm/lib/extensions/deprecated/KHR_techniques_webgl.js +0 -68
  180. package/dist/esm/lib/extensions/deprecated/KHR_techniques_webgl.js.map +0 -1
  181. package/dist/esm/lib/gltf-utils/get-typed-array.js +0 -16
  182. package/dist/esm/lib/gltf-utils/get-typed-array.js.map +0 -1
  183. package/dist/esm/lib/gltf-utils/gltf-attribute-utils.js +0 -73
  184. package/dist/esm/lib/gltf-utils/gltf-attribute-utils.js.map +0 -1
  185. package/dist/esm/lib/gltf-utils/gltf-constants.js +0 -37
  186. package/dist/esm/lib/gltf-utils/gltf-constants.js.map +0 -1
  187. package/dist/esm/lib/gltf-utils/gltf-utils.js +0 -56
  188. package/dist/esm/lib/gltf-utils/gltf-utils.js.map +0 -1
  189. package/dist/esm/lib/gltf-utils/resolve-url.js +0 -16
  190. package/dist/esm/lib/gltf-utils/resolve-url.js.map +0 -1
  191. package/dist/esm/lib/parsers/parse-glb.js +0 -128
  192. package/dist/esm/lib/parsers/parse-glb.js.map +0 -1
  193. package/dist/esm/lib/parsers/parse-gltf.js +0 -170
  194. package/dist/esm/lib/parsers/parse-gltf.js.map +0 -1
  195. package/dist/esm/lib/types/glb-types.js +0 -2
  196. package/dist/esm/lib/types/glb-types.js.map +0 -1
  197. package/dist/esm/lib/types/gltf-json-schema.js +0 -2
  198. package/dist/esm/lib/types/gltf-json-schema.js.map +0 -1
  199. package/dist/esm/lib/types/gltf-postprocessed-schema.js +0 -2
  200. package/dist/esm/lib/types/gltf-postprocessed-schema.js.map +0 -1
  201. package/dist/esm/lib/types/gltf-types.js +0 -2
  202. package/dist/esm/lib/types/gltf-types.js.map +0 -1
  203. package/dist/esm/lib/utils/assert.js +0 -6
  204. package/dist/esm/lib/utils/assert.js.map +0 -1
  205. package/dist/esm/lib/utils/version.js +0 -2
  206. package/dist/esm/lib/utils/version.js.map +0 -1
  207. package/dist/esm/meshopt/meshopt-decoder.js +0 -103
  208. package/dist/esm/meshopt/meshopt-decoder.js.map +0 -1
  209. package/dist/esm/meshopt/meshopt-encoder.ts.disabled +0 -409
  210. package/dist/esm/webp/webp.js +0 -29
  211. package/dist/esm/webp/webp.js.map +0 -1
@@ -1,422 +0,0 @@
1
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
- import { assert } from '../utils/assert';
3
- import { getAccessorArrayTypeAndLength } from '../gltf-utils/gltf-utils';
4
- const COMPONENTS = {
5
- SCALAR: 1,
6
- VEC2: 2,
7
- VEC3: 3,
8
- VEC4: 4,
9
- MAT2: 4,
10
- MAT3: 9,
11
- MAT4: 16
12
- };
13
- const BYTES = {
14
- 5120: 1,
15
- 5121: 1,
16
- 5122: 2,
17
- 5123: 2,
18
- 5125: 4,
19
- 5126: 4
20
- };
21
- const GL_SAMPLER = {
22
- TEXTURE_MAG_FILTER: 0x2800,
23
- TEXTURE_MIN_FILTER: 0x2801,
24
- TEXTURE_WRAP_S: 0x2802,
25
- TEXTURE_WRAP_T: 0x2803,
26
- REPEAT: 0x2901,
27
- LINEAR: 0x2601,
28
- NEAREST_MIPMAP_LINEAR: 0x2702
29
- };
30
- const SAMPLER_PARAMETER_GLTF_TO_GL = {
31
- magFilter: GL_SAMPLER.TEXTURE_MAG_FILTER,
32
- minFilter: GL_SAMPLER.TEXTURE_MIN_FILTER,
33
- wrapS: GL_SAMPLER.TEXTURE_WRAP_S,
34
- wrapT: GL_SAMPLER.TEXTURE_WRAP_T
35
- };
36
- const DEFAULT_SAMPLER = {
37
- [GL_SAMPLER.TEXTURE_MAG_FILTER]: GL_SAMPLER.LINEAR,
38
- [GL_SAMPLER.TEXTURE_MIN_FILTER]: GL_SAMPLER.NEAREST_MIPMAP_LINEAR,
39
- [GL_SAMPLER.TEXTURE_WRAP_S]: GL_SAMPLER.REPEAT,
40
- [GL_SAMPLER.TEXTURE_WRAP_T]: GL_SAMPLER.REPEAT
41
- };
42
-
43
- function getBytesFromComponentType(componentType) {
44
- return BYTES[componentType];
45
- }
46
-
47
- function getSizeFromAccessorType(type) {
48
- return COMPONENTS[type];
49
- }
50
-
51
- class GLTFPostProcessor {
52
- constructor() {
53
- _defineProperty(this, "baseUri", '');
54
-
55
- _defineProperty(this, "json", {});
56
-
57
- _defineProperty(this, "buffers", []);
58
-
59
- _defineProperty(this, "images", []);
60
- }
61
-
62
- postProcess(gltf, options = {}) {
63
- const {
64
- json,
65
- buffers = [],
66
- images = [],
67
- baseUri = ''
68
- } = gltf;
69
- assert(json);
70
- this.baseUri = baseUri;
71
- this.json = json;
72
- this.buffers = buffers;
73
- this.images = images;
74
-
75
- this._resolveTree(this.json, options);
76
-
77
- return this.json;
78
- }
79
-
80
- _resolveTree(json, options = {}) {
81
- if (json.bufferViews) {
82
- json.bufferViews = json.bufferViews.map((bufView, i) => this._resolveBufferView(bufView, i));
83
- }
84
-
85
- if (json.images) {
86
- json.images = json.images.map((image, i) => this._resolveImage(image, i));
87
- }
88
-
89
- if (json.samplers) {
90
- json.samplers = json.samplers.map((sampler, i) => this._resolveSampler(sampler, i));
91
- }
92
-
93
- if (json.textures) {
94
- json.textures = json.textures.map((texture, i) => this._resolveTexture(texture, i));
95
- }
96
-
97
- if (json.accessors) {
98
- json.accessors = json.accessors.map((accessor, i) => this._resolveAccessor(accessor, i));
99
- }
100
-
101
- if (json.materials) {
102
- json.materials = json.materials.map((material, i) => this._resolveMaterial(material, i));
103
- }
104
-
105
- if (json.meshes) {
106
- json.meshes = json.meshes.map((mesh, i) => this._resolveMesh(mesh, i));
107
- }
108
-
109
- if (json.nodes) {
110
- json.nodes = json.nodes.map((node, i) => this._resolveNode(node, i));
111
- }
112
-
113
- if (json.skins) {
114
- json.skins = json.skins.map((skin, i) => this._resolveSkin(skin, i));
115
- }
116
-
117
- if (json.scenes) {
118
- json.scenes = json.scenes.map((scene, i) => this._resolveScene(scene, i));
119
- }
120
-
121
- if (json.scene !== undefined) {
122
- json.scene = json.scenes[this.json.scene];
123
- }
124
- }
125
-
126
- getScene(index) {
127
- return this._get('scenes', index);
128
- }
129
-
130
- getNode(index) {
131
- return this._get('nodes', index);
132
- }
133
-
134
- getSkin(index) {
135
- return this._get('skins', index);
136
- }
137
-
138
- getMesh(index) {
139
- return this._get('meshes', index);
140
- }
141
-
142
- getMaterial(index) {
143
- return this._get('materials', index);
144
- }
145
-
146
- getAccessor(index) {
147
- return this._get('accessors', index);
148
- }
149
-
150
- getCamera(index) {
151
- return null;
152
- }
153
-
154
- getTexture(index) {
155
- return this._get('textures', index);
156
- }
157
-
158
- getSampler(index) {
159
- return this._get('samplers', index);
160
- }
161
-
162
- getImage(index) {
163
- return this._get('images', index);
164
- }
165
-
166
- getBufferView(index) {
167
- return this._get('bufferViews', index);
168
- }
169
-
170
- getBuffer(index) {
171
- return this._get('buffers', index);
172
- }
173
-
174
- _get(array, index) {
175
- if (typeof index === 'object') {
176
- return index;
177
- }
178
-
179
- const object = this.json[array] && this.json[array][index];
180
-
181
- if (!object) {
182
- console.warn("glTF file error: Could not find ".concat(array, "[").concat(index, "]"));
183
- }
184
-
185
- return object;
186
- }
187
-
188
- _resolveScene(scene, index) {
189
- scene.id = scene.id || "scene-".concat(index);
190
- scene.nodes = (scene.nodes || []).map(node => this.getNode(node));
191
- return scene;
192
- }
193
-
194
- _resolveNode(node, index) {
195
- node.id = node.id || "node-".concat(index);
196
-
197
- if (node.children) {
198
- node.children = node.children.map(child => this.getNode(child));
199
- }
200
-
201
- if (node.mesh !== undefined) {
202
- node.mesh = this.getMesh(node.mesh);
203
- } else if (node.meshes !== undefined && node.meshes.length) {
204
- node.mesh = node.meshes.reduce((accum, meshIndex) => {
205
- const mesh = this.getMesh(meshIndex);
206
- accum.id = mesh.id;
207
- accum.primitives = accum.primitives.concat(mesh.primitives);
208
- return accum;
209
- }, {
210
- primitives: []
211
- });
212
- }
213
-
214
- if (node.camera !== undefined) {
215
- node.camera = this.getCamera(node.camera);
216
- }
217
-
218
- if (node.skin !== undefined) {
219
- node.skin = this.getSkin(node.skin);
220
- }
221
-
222
- return node;
223
- }
224
-
225
- _resolveSkin(skin, index) {
226
- skin.id = skin.id || "skin-".concat(index);
227
- skin.inverseBindMatrices = this.getAccessor(skin.inverseBindMatrices);
228
- return skin;
229
- }
230
-
231
- _resolveMesh(mesh, index) {
232
- mesh.id = mesh.id || "mesh-".concat(index);
233
-
234
- if (mesh.primitives) {
235
- mesh.primitives = mesh.primitives.map(primitive => {
236
- primitive = { ...primitive
237
- };
238
- const attributes = primitive.attributes;
239
- primitive.attributes = {};
240
-
241
- for (const attribute in attributes) {
242
- primitive.attributes[attribute] = this.getAccessor(attributes[attribute]);
243
- }
244
-
245
- if (primitive.indices !== undefined) {
246
- primitive.indices = this.getAccessor(primitive.indices);
247
- }
248
-
249
- if (primitive.material !== undefined) {
250
- primitive.material = this.getMaterial(primitive.material);
251
- }
252
-
253
- return primitive;
254
- });
255
- }
256
-
257
- return mesh;
258
- }
259
-
260
- _resolveMaterial(material, index) {
261
- material.id = material.id || "material-".concat(index);
262
-
263
- if (material.normalTexture) {
264
- material.normalTexture = { ...material.normalTexture
265
- };
266
- material.normalTexture.texture = this.getTexture(material.normalTexture.index);
267
- }
268
-
269
- if (material.occlusionTexture) {
270
- material.occlustionTexture = { ...material.occlustionTexture
271
- };
272
- material.occlusionTexture.texture = this.getTexture(material.occlusionTexture.index);
273
- }
274
-
275
- if (material.emissiveTexture) {
276
- material.emmisiveTexture = { ...material.emmisiveTexture
277
- };
278
- material.emissiveTexture.texture = this.getTexture(material.emissiveTexture.index);
279
- }
280
-
281
- if (!material.emissiveFactor) {
282
- material.emissiveFactor = material.emmisiveTexture ? [1, 1, 1] : [0, 0, 0];
283
- }
284
-
285
- if (material.pbrMetallicRoughness) {
286
- material.pbrMetallicRoughness = { ...material.pbrMetallicRoughness
287
- };
288
- const mr = material.pbrMetallicRoughness;
289
-
290
- if (mr.baseColorTexture) {
291
- mr.baseColorTexture = { ...mr.baseColorTexture
292
- };
293
- mr.baseColorTexture.texture = this.getTexture(mr.baseColorTexture.index);
294
- }
295
-
296
- if (mr.metallicRoughnessTexture) {
297
- mr.metallicRoughnessTexture = { ...mr.metallicRoughnessTexture
298
- };
299
- mr.metallicRoughnessTexture.texture = this.getTexture(mr.metallicRoughnessTexture.index);
300
- }
301
- }
302
-
303
- return material;
304
- }
305
-
306
- _resolveAccessor(accessor, index) {
307
- accessor.id = accessor.id || "accessor-".concat(index);
308
-
309
- if (accessor.bufferView !== undefined) {
310
- accessor.bufferView = this.getBufferView(accessor.bufferView);
311
- }
312
-
313
- accessor.bytesPerComponent = getBytesFromComponentType(accessor.componentType);
314
- accessor.components = getSizeFromAccessorType(accessor.type);
315
- accessor.bytesPerElement = accessor.bytesPerComponent * accessor.components;
316
-
317
- if (accessor.bufferView) {
318
- const buffer = accessor.bufferView.buffer;
319
- const {
320
- ArrayType,
321
- byteLength
322
- } = getAccessorArrayTypeAndLength(accessor, accessor.bufferView);
323
- const byteOffset = (accessor.bufferView.byteOffset || 0) + (accessor.byteOffset || 0) + buffer.byteOffset;
324
- let cutBuffer = buffer.arrayBuffer.slice(byteOffset, byteOffset + byteLength);
325
-
326
- if (accessor.bufferView.byteStride) {
327
- cutBuffer = this._getValueFromInterleavedBuffer(buffer, byteOffset, accessor.bufferView.byteStride, accessor.bytesPerElement, accessor.count);
328
- }
329
-
330
- accessor.value = new ArrayType(cutBuffer);
331
- }
332
-
333
- return accessor;
334
- }
335
-
336
- _getValueFromInterleavedBuffer(buffer, byteOffset, byteStride, bytesPerElement, count) {
337
- const result = new Uint8Array(count * bytesPerElement);
338
-
339
- for (let i = 0; i < count; i++) {
340
- const elementOffset = byteOffset + i * byteStride;
341
- result.set(new Uint8Array(buffer.arrayBuffer.slice(elementOffset, elementOffset + bytesPerElement)), i * bytesPerElement);
342
- }
343
-
344
- return result.buffer;
345
- }
346
-
347
- _resolveTexture(texture, index) {
348
- texture.id = texture.id || "texture-".concat(index);
349
- texture.sampler = 'sampler' in texture ? this.getSampler(texture.sampler) : DEFAULT_SAMPLER;
350
- texture.source = this.getImage(texture.source);
351
- return texture;
352
- }
353
-
354
- _resolveSampler(sampler, index) {
355
- sampler.id = sampler.id || "sampler-".concat(index);
356
- sampler.parameters = {};
357
-
358
- for (const key in sampler) {
359
- const glEnum = this._enumSamplerParameter(key);
360
-
361
- if (glEnum !== undefined) {
362
- sampler.parameters[glEnum] = sampler[key];
363
- }
364
- }
365
-
366
- return sampler;
367
- }
368
-
369
- _enumSamplerParameter(key) {
370
- return SAMPLER_PARAMETER_GLTF_TO_GL[key];
371
- }
372
-
373
- _resolveImage(image, index) {
374
- image.id = image.id || "image-".concat(index);
375
-
376
- if (image.bufferView !== undefined) {
377
- image.bufferView = this.getBufferView(image.bufferView);
378
- }
379
-
380
- const preloadedImage = this.images[index];
381
-
382
- if (preloadedImage) {
383
- image.image = preloadedImage;
384
- }
385
-
386
- return image;
387
- }
388
-
389
- _resolveBufferView(bufferView, index) {
390
- const bufferIndex = bufferView.buffer;
391
- const result = {
392
- id: "bufferView-".concat(index),
393
- ...bufferView,
394
- buffer: this.buffers[bufferIndex]
395
- };
396
- const arrayBuffer = this.buffers[bufferIndex].arrayBuffer;
397
- let byteOffset = this.buffers[bufferIndex].byteOffset || 0;
398
-
399
- if ('byteOffset' in bufferView) {
400
- byteOffset += bufferView.byteOffset;
401
- }
402
-
403
- result.data = new Uint8Array(arrayBuffer, byteOffset, bufferView.byteLength);
404
- return result;
405
- }
406
-
407
- _resolveCamera(camera, index) {
408
- camera.id = camera.id || "camera-".concat(index);
409
-
410
- if (camera.perspective) {}
411
-
412
- if (camera.orthographic) {}
413
-
414
- return camera;
415
- }
416
-
417
- }
418
-
419
- export function postProcessGLTF(gltf, options) {
420
- return new GLTFPostProcessor().postProcess(gltf, options);
421
- }
422
- //# sourceMappingURL=post-process-gltf.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/lib/api/post-process-gltf.ts"],"names":["assert","getAccessorArrayTypeAndLength","COMPONENTS","SCALAR","VEC2","VEC3","VEC4","MAT2","MAT3","MAT4","BYTES","GL_SAMPLER","TEXTURE_MAG_FILTER","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","TEXTURE_WRAP_T","REPEAT","LINEAR","NEAREST_MIPMAP_LINEAR","SAMPLER_PARAMETER_GLTF_TO_GL","magFilter","minFilter","wrapS","wrapT","DEFAULT_SAMPLER","getBytesFromComponentType","componentType","getSizeFromAccessorType","type","GLTFPostProcessor","postProcess","gltf","options","json","buffers","images","baseUri","_resolveTree","bufferViews","map","bufView","i","_resolveBufferView","image","_resolveImage","samplers","sampler","_resolveSampler","textures","texture","_resolveTexture","accessors","accessor","_resolveAccessor","materials","material","_resolveMaterial","meshes","mesh","_resolveMesh","nodes","node","_resolveNode","skins","skin","_resolveSkin","scenes","scene","_resolveScene","undefined","getScene","index","_get","getNode","getSkin","getMesh","getMaterial","getAccessor","getCamera","getTexture","getSampler","getImage","getBufferView","getBuffer","array","object","console","warn","id","children","child","length","reduce","accum","meshIndex","primitives","concat","camera","inverseBindMatrices","primitive","attributes","attribute","indices","normalTexture","occlusionTexture","occlustionTexture","emissiveTexture","emmisiveTexture","emissiveFactor","pbrMetallicRoughness","mr","baseColorTexture","metallicRoughnessTexture","bufferView","bytesPerComponent","components","bytesPerElement","buffer","ArrayType","byteLength","byteOffset","cutBuffer","arrayBuffer","slice","byteStride","_getValueFromInterleavedBuffer","count","value","result","Uint8Array","elementOffset","set","source","parameters","key","glEnum","_enumSamplerParameter","preloadedImage","bufferIndex","data","_resolveCamera","perspective","orthographic","postProcessGLTF"],"mappings":"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","sourcesContent":["import {assert} from '../utils/assert';\nimport {getAccessorArrayTypeAndLength} from '../gltf-utils/gltf-utils';\nimport {BufferView} from '../types/gltf-json-schema';\nimport {BufferView as BufferViewPostprocessed} from '../types/gltf-postprocessed-schema';\n\n// This is a post processor for loaded glTF files\n// The goal is to make the loaded data easier to use in WebGL applications\n//\n// Functions:\n// * Resolve indexed arrays structure of glTF into a linked tree.\n// * Translate stringified enum keys and values into WebGL constants.\n// * Load images (optional)\n\n// ENUM LOOKUP\n\nconst COMPONENTS = {\n SCALAR: 1,\n VEC2: 2,\n VEC3: 3,\n VEC4: 4,\n MAT2: 4,\n MAT3: 9,\n MAT4: 16\n};\n\nconst BYTES = {\n 5120: 1, // BYTE\n 5121: 1, // UNSIGNED_BYTE\n 5122: 2, // SHORT\n 5123: 2, // UNSIGNED_SHORT\n 5125: 4, // UNSIGNED_INT\n 5126: 4 // FLOAT\n};\n\nconst GL_SAMPLER = {\n // Sampler parameters\n TEXTURE_MAG_FILTER: 0x2800,\n TEXTURE_MIN_FILTER: 0x2801,\n TEXTURE_WRAP_S: 0x2802,\n TEXTURE_WRAP_T: 0x2803,\n\n // Sampler default values\n REPEAT: 0x2901,\n LINEAR: 0x2601,\n NEAREST_MIPMAP_LINEAR: 0x2702\n};\n\nconst SAMPLER_PARAMETER_GLTF_TO_GL = {\n magFilter: GL_SAMPLER.TEXTURE_MAG_FILTER,\n minFilter: GL_SAMPLER.TEXTURE_MIN_FILTER,\n wrapS: GL_SAMPLER.TEXTURE_WRAP_S,\n wrapT: GL_SAMPLER.TEXTURE_WRAP_T\n};\n\n// When undefined, a sampler with repeat wrapping and auto filtering should be used.\n// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#texture\nconst DEFAULT_SAMPLER = {\n [GL_SAMPLER.TEXTURE_MAG_FILTER]: GL_SAMPLER.LINEAR,\n [GL_SAMPLER.TEXTURE_MIN_FILTER]: GL_SAMPLER.NEAREST_MIPMAP_LINEAR,\n [GL_SAMPLER.TEXTURE_WRAP_S]: GL_SAMPLER.REPEAT,\n [GL_SAMPLER.TEXTURE_WRAP_T]: GL_SAMPLER.REPEAT\n};\n\nfunction getBytesFromComponentType(componentType) {\n return BYTES[componentType];\n}\n\nfunction getSizeFromAccessorType(type) {\n return COMPONENTS[type];\n}\n\nclass GLTFPostProcessor {\n baseUri: string = '';\n json: Record<string, any> = {};\n buffers: [] = [];\n images: [] = [];\n\n postProcess(gltf, options = {}) {\n const {json, buffers = [], images = [], baseUri = ''} = gltf;\n assert(json);\n\n this.baseUri = baseUri;\n this.json = json;\n this.buffers = buffers;\n this.images = images;\n\n this._resolveTree(this.json, options);\n\n return this.json;\n }\n\n // Convert indexed glTF structure into tree structure\n // cross-link index resolution, enum lookup, convenience calculations\n // eslint-disable-next-line complexity\n _resolveTree(json, options = {}) {\n if (json.bufferViews) {\n json.bufferViews = json.bufferViews.map((bufView, i) => this._resolveBufferView(bufView, i));\n }\n if (json.images) {\n json.images = json.images.map((image, i) => this._resolveImage(image, i));\n }\n if (json.samplers) {\n json.samplers = json.samplers.map((sampler, i) => this._resolveSampler(sampler, i));\n }\n if (json.textures) {\n json.textures = json.textures.map((texture, i) => this._resolveTexture(texture, i));\n }\n if (json.accessors) {\n json.accessors = json.accessors.map((accessor, i) => this._resolveAccessor(accessor, i));\n }\n if (json.materials) {\n json.materials = json.materials.map((material, i) => this._resolveMaterial(material, i));\n }\n if (json.meshes) {\n json.meshes = json.meshes.map((mesh, i) => this._resolveMesh(mesh, i));\n }\n if (json.nodes) {\n json.nodes = json.nodes.map((node, i) => this._resolveNode(node, i));\n }\n if (json.skins) {\n json.skins = json.skins.map((skin, i) => this._resolveSkin(skin, i));\n }\n if (json.scenes) {\n json.scenes = json.scenes.map((scene, i) => this._resolveScene(scene, i));\n }\n if (json.scene !== undefined) {\n json.scene = json.scenes[this.json.scene];\n }\n }\n\n getScene(index) {\n return this._get('scenes', index);\n }\n\n getNode(index) {\n return this._get('nodes', index);\n }\n\n getSkin(index) {\n return this._get('skins', index);\n }\n\n getMesh(index) {\n return this._get('meshes', index);\n }\n\n getMaterial(index) {\n return this._get('materials', index);\n }\n\n getAccessor(index) {\n return this._get('accessors', index);\n }\n\n getCamera(index) {\n return null; // TODO: fix this\n }\n\n getTexture(index) {\n return this._get('textures', index);\n }\n\n getSampler(index) {\n return this._get('samplers', index);\n }\n\n getImage(index) {\n return this._get('images', index);\n }\n\n getBufferView(index) {\n return this._get('bufferViews', index);\n }\n\n getBuffer(index) {\n return this._get('buffers', index);\n }\n\n _get(array, index) {\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 console.warn(`glTF file error: Could not find ${array}[${index}]`); // eslint-disable-line\n }\n return object;\n }\n\n // PARSING HELPERS\n\n _resolveScene(scene, index) {\n // scene = {...scene};\n scene.id = scene.id || `scene-${index}`;\n scene.nodes = (scene.nodes || []).map((node) => this.getNode(node));\n return scene;\n }\n\n _resolveNode(node, index) {\n // node = {...node};\n node.id = node.id || `node-${index}`;\n if (node.children) {\n node.children = node.children.map((child) => this.getNode(child));\n }\n if (node.mesh !== undefined) {\n node.mesh = this.getMesh(node.mesh);\n } else if (node.meshes !== undefined && node.meshes.length) {\n node.mesh = node.meshes.reduce(\n (accum, meshIndex) => {\n const mesh = this.getMesh(meshIndex);\n accum.id = mesh.id;\n accum.primitives = accum.primitives.concat(mesh.primitives);\n return accum;\n },\n {primitives: []}\n );\n }\n if (node.camera !== undefined) {\n node.camera = this.getCamera(node.camera);\n }\n if (node.skin !== undefined) {\n node.skin = this.getSkin(node.skin);\n }\n return node;\n }\n\n _resolveSkin(skin, index) {\n // skin = {...skin};\n skin.id = skin.id || `skin-${index}`;\n skin.inverseBindMatrices = this.getAccessor(skin.inverseBindMatrices);\n return skin;\n }\n\n _resolveMesh(mesh, index) {\n // mesh = {...mesh};\n mesh.id = mesh.id || `mesh-${index}`;\n if (mesh.primitives) {\n mesh.primitives = mesh.primitives.map((primitive) => {\n primitive = {...primitive};\n const attributes = primitive.attributes;\n primitive.attributes = {};\n for (const attribute in attributes) {\n primitive.attributes[attribute] = this.getAccessor(attributes[attribute]);\n }\n if (primitive.indices !== undefined) {\n primitive.indices = this.getAccessor(primitive.indices);\n }\n if (primitive.material !== undefined) {\n primitive.material = this.getMaterial(primitive.material);\n }\n return primitive;\n });\n }\n return mesh;\n }\n\n _resolveMaterial(material, index) {\n // material = {...material};\n material.id = material.id || `material-${index}`;\n if (material.normalTexture) {\n material.normalTexture = {...material.normalTexture};\n material.normalTexture.texture = this.getTexture(material.normalTexture.index);\n }\n if (material.occlusionTexture) {\n material.occlustionTexture = {...material.occlustionTexture};\n material.occlusionTexture.texture = this.getTexture(material.occlusionTexture.index);\n }\n if (material.emissiveTexture) {\n material.emmisiveTexture = {...material.emmisiveTexture};\n material.emissiveTexture.texture = this.getTexture(material.emissiveTexture.index);\n }\n if (!material.emissiveFactor) {\n material.emissiveFactor = material.emmisiveTexture ? [1, 1, 1] : [0, 0, 0];\n }\n\n if (material.pbrMetallicRoughness) {\n material.pbrMetallicRoughness = {...material.pbrMetallicRoughness};\n const mr = material.pbrMetallicRoughness;\n if (mr.baseColorTexture) {\n mr.baseColorTexture = {...mr.baseColorTexture};\n mr.baseColorTexture.texture = this.getTexture(mr.baseColorTexture.index);\n }\n if (mr.metallicRoughnessTexture) {\n mr.metallicRoughnessTexture = {...mr.metallicRoughnessTexture};\n mr.metallicRoughnessTexture.texture = this.getTexture(mr.metallicRoughnessTexture.index);\n }\n }\n return material;\n }\n\n _resolveAccessor(accessor, index) {\n // accessor = {...accessor};\n accessor.id = accessor.id || `accessor-${index}`;\n if (accessor.bufferView !== undefined) {\n // Draco encoded meshes don't have bufferView\n accessor.bufferView = this.getBufferView(accessor.bufferView);\n }\n\n // Look up enums\n accessor.bytesPerComponent = getBytesFromComponentType(accessor.componentType);\n accessor.components = getSizeFromAccessorType(accessor.type);\n accessor.bytesPerElement = accessor.bytesPerComponent * accessor.components;\n\n // Create TypedArray for the accessor\n // Note: The canonical way to instantiate is to ignore this array and create\n // WebGLBuffer's using the bufferViews.\n if (accessor.bufferView) {\n const buffer = accessor.bufferView.buffer;\n const {ArrayType, byteLength} = getAccessorArrayTypeAndLength(accessor, accessor.bufferView);\n const byteOffset =\n (accessor.bufferView.byteOffset || 0) + (accessor.byteOffset || 0) + buffer.byteOffset;\n let cutBuffer = buffer.arrayBuffer.slice(byteOffset, byteOffset + byteLength);\n if (accessor.bufferView.byteStride) {\n cutBuffer = this._getValueFromInterleavedBuffer(\n buffer,\n byteOffset,\n accessor.bufferView.byteStride,\n accessor.bytesPerElement,\n accessor.count\n );\n }\n accessor.value = new ArrayType(cutBuffer);\n }\n\n return accessor;\n }\n\n /**\n * Take values of particular accessor from interleaved buffer\n * various parts of the buffer\n * @param buffer\n * @param byteOffset\n * @param byteStride\n * @param bytesPerElement\n * @param count\n * @returns\n */\n _getValueFromInterleavedBuffer(buffer, byteOffset, byteStride, bytesPerElement, count) {\n const result = new Uint8Array(count * bytesPerElement);\n for (let i = 0; i < count; i++) {\n const elementOffset = byteOffset + i * byteStride;\n result.set(\n new Uint8Array(buffer.arrayBuffer.slice(elementOffset, elementOffset + bytesPerElement)),\n i * bytesPerElement\n );\n }\n return result.buffer;\n }\n\n _resolveTexture(texture, index) {\n // texture = {...texture};\n texture.id = texture.id || `texture-${index}`;\n texture.sampler = 'sampler' in texture ? this.getSampler(texture.sampler) : DEFAULT_SAMPLER;\n texture.source = this.getImage(texture.source);\n return texture;\n }\n\n _resolveSampler(sampler, index) {\n // sampler = {...sampler};\n sampler.id = sampler.id || `sampler-${index}`;\n // Map textual parameters to GL parameter values\n sampler.parameters = {};\n for (const key in sampler) {\n const glEnum = this._enumSamplerParameter(key);\n if (glEnum !== undefined) {\n sampler.parameters[glEnum] = sampler[key];\n }\n }\n return sampler;\n }\n\n _enumSamplerParameter(key) {\n return SAMPLER_PARAMETER_GLTF_TO_GL[key];\n }\n\n _resolveImage(image, index) {\n // image = {...image};\n image.id = image.id || `image-${index}`;\n if (image.bufferView !== undefined) {\n image.bufferView = this.getBufferView(image.bufferView);\n }\n\n // Check if image has been preloaded by the GLTFLoader\n // If so, link it into the JSON and drop the URI\n const preloadedImage = this.images[index];\n if (preloadedImage) {\n image.image = preloadedImage;\n }\n\n return image;\n }\n\n _resolveBufferView(bufferView: BufferView, index: number): BufferViewPostprocessed {\n // bufferView = {...bufferView};\n const bufferIndex = bufferView.buffer;\n const result: BufferViewPostprocessed = {\n id: `bufferView-${index}`,\n ...bufferView,\n buffer: this.buffers[bufferIndex]\n };\n\n // @ts-expect-error\n const arrayBuffer = this.buffers[bufferIndex].arrayBuffer;\n // @ts-expect-error\n let byteOffset = this.buffers[bufferIndex].byteOffset || 0;\n\n if ('byteOffset' in bufferView) {\n byteOffset += bufferView.byteOffset;\n }\n\n result.data = new Uint8Array(arrayBuffer, byteOffset, bufferView.byteLength);\n return result;\n }\n\n _resolveCamera(camera, index) {\n camera.id = camera.id || `camera-${index}`;\n // TODO - create 4x4 matrices\n if (camera.perspective) {\n // camera.matrix = createPerspectiveMatrix(camera.perspective);\n }\n if (camera.orthographic) {\n // camera.matrix = createOrthographicMatrix(camera.orthographic);\n }\n return camera;\n }\n}\n\nexport function postProcessGLTF(gltf, options?) {\n return new GLTFPostProcessor().postProcess(gltf, options);\n}\n"],"file":"post-process-gltf.js"}
@@ -1,63 +0,0 @@
1
- import { copyPaddedStringToDataView, copyPaddedArrayBufferToDataView } from '@loaders.gl/loader-utils';
2
- const MAGIC_glTF = 0x46546c67;
3
- const MAGIC_JSON = 0x4e4f534a;
4
- const MAGIC_BIN = 0x004e4942;
5
- const LE = true;
6
- export default function encodeGLBSync(glb, dataView, byteOffset = 0, options = {}) {
7
- const {
8
- magic = MAGIC_glTF,
9
- version = 2,
10
- json = {},
11
- binary
12
- } = glb;
13
- const byteOffsetStart = byteOffset;
14
-
15
- if (dataView) {
16
- dataView.setUint32(byteOffset + 0, magic, LE);
17
- dataView.setUint32(byteOffset + 4, version, LE);
18
- dataView.setUint32(byteOffset + 8, 0, LE);
19
- }
20
-
21
- const byteOffsetFileLength = byteOffset + 8;
22
- byteOffset += 12;
23
- const byteOffsetJsonHeader = byteOffset;
24
-
25
- if (dataView) {
26
- dataView.setUint32(byteOffset + 0, 0, LE);
27
- dataView.setUint32(byteOffset + 4, MAGIC_JSON, LE);
28
- }
29
-
30
- byteOffset += 8;
31
- const jsonString = JSON.stringify(json);
32
- byteOffset = copyPaddedStringToDataView(dataView, byteOffset, jsonString, 4);
33
-
34
- if (dataView) {
35
- const jsonByteLength = byteOffset - byteOffsetJsonHeader - 8;
36
- dataView.setUint32(byteOffsetJsonHeader + 0, jsonByteLength, LE);
37
- }
38
-
39
- if (binary) {
40
- const byteOffsetBinHeader = byteOffset;
41
-
42
- if (dataView) {
43
- dataView.setUint32(byteOffset + 0, 0, LE);
44
- dataView.setUint32(byteOffset + 4, MAGIC_BIN, LE);
45
- }
46
-
47
- byteOffset += 8;
48
- byteOffset = copyPaddedArrayBufferToDataView(dataView, byteOffset, binary, 4);
49
-
50
- if (dataView) {
51
- const binByteLength = byteOffset - byteOffsetBinHeader - 8;
52
- dataView.setUint32(byteOffsetBinHeader + 0, binByteLength, LE);
53
- }
54
- }
55
-
56
- if (dataView) {
57
- const fileByteLength = byteOffset - byteOffsetStart;
58
- dataView.setUint32(byteOffsetFileLength, fileByteLength, LE);
59
- }
60
-
61
- return byteOffset;
62
- }
63
- //# sourceMappingURL=encode-glb.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/lib/encoders/encode-glb.ts"],"names":["copyPaddedStringToDataView","copyPaddedArrayBufferToDataView","MAGIC_glTF","MAGIC_JSON","MAGIC_BIN","LE","encodeGLBSync","glb","dataView","byteOffset","options","magic","version","json","binary","byteOffsetStart","setUint32","byteOffsetFileLength","byteOffsetJsonHeader","jsonString","JSON","stringify","jsonByteLength","byteOffsetBinHeader","binByteLength","fileByteLength"],"mappings":"AACA,SACEA,0BADF,EAEEC,+BAFF,QAGO,0BAHP;AAKA,MAAMC,UAAU,GAAG,UAAnB;AACA,MAAMC,UAAU,GAAG,UAAnB;AACA,MAAMC,SAAS,GAAG,UAAlB;AAEA,MAAMC,EAAE,GAAG,IAAX;AAKA,eAAe,SAASC,aAAT,CAAuBC,GAAvB,EAA4BC,QAA5B,EAAsCC,UAAU,GAAG,CAAnD,EAAsDC,OAAO,GAAG,EAAhE,EAAoE;AACjF,QAAM;AAACC,IAAAA,KAAK,GAAGT,UAAT;AAAqBU,IAAAA,OAAO,GAAG,CAA/B;AAAkCC,IAAAA,IAAI,GAAG,EAAzC;AAA6CC,IAAAA;AAA7C,MAAuDP,GAA7D;AAEA,QAAMQ,eAAe,GAAGN,UAAxB;;AAGA,MAAID,QAAJ,EAAc;AACZA,IAAAA,QAAQ,CAACQ,SAAT,CAAmBP,UAAU,GAAG,CAAhC,EAAmCE,KAAnC,EAA0CN,EAA1C;AACAG,IAAAA,QAAQ,CAACQ,SAAT,CAAmBP,UAAU,GAAG,CAAhC,EAAmCG,OAAnC,EAA4CP,EAA5C;AACAG,IAAAA,QAAQ,CAACQ,SAAT,CAAmBP,UAAU,GAAG,CAAhC,EAAmC,CAAnC,EAAsCJ,EAAtC;AACD;;AACD,QAAMY,oBAAoB,GAAGR,UAAU,GAAG,CAA1C;AACAA,EAAAA,UAAU,IAAI,EAAd;AAGA,QAAMS,oBAAoB,GAAGT,UAA7B;;AACA,MAAID,QAAJ,EAAc;AACZA,IAAAA,QAAQ,CAACQ,SAAT,CAAmBP,UAAU,GAAG,CAAhC,EAAmC,CAAnC,EAAsCJ,EAAtC;AACAG,IAAAA,QAAQ,CAACQ,SAAT,CAAmBP,UAAU,GAAG,CAAhC,EAAmCN,UAAnC,EAA+CE,EAA/C;AACD;;AACDI,EAAAA,UAAU,IAAI,CAAd;AAGA,QAAMU,UAAU,GAAGC,IAAI,CAACC,SAAL,CAAeR,IAAf,CAAnB;AACAJ,EAAAA,UAAU,GAAGT,0BAA0B,CAACQ,QAAD,EAAWC,UAAX,EAAuBU,UAAvB,EAAmC,CAAnC,CAAvC;;AAGA,MAAIX,QAAJ,EAAc;AACZ,UAAMc,cAAc,GAAGb,UAAU,GAAGS,oBAAb,GAAoC,CAA3D;AACAV,IAAAA,QAAQ,CAACQ,SAAT,CAAmBE,oBAAoB,GAAG,CAA1C,EAA6CI,cAA7C,EAA6DjB,EAA7D;AACD;;AAGD,MAAIS,MAAJ,EAAY;AACV,UAAMS,mBAAmB,GAAGd,UAA5B;;AAGA,QAAID,QAAJ,EAAc;AACZA,MAAAA,QAAQ,CAACQ,SAAT,CAAmBP,UAAU,GAAG,CAAhC,EAAmC,CAAnC,EAAsCJ,EAAtC;AACAG,MAAAA,QAAQ,CAACQ,SAAT,CAAmBP,UAAU,GAAG,CAAhC,EAAmCL,SAAnC,EAA8CC,EAA9C;AACD;;AACDI,IAAAA,UAAU,IAAI,CAAd;AAEAA,IAAAA,UAAU,GAAGR,+BAA+B,CAACO,QAAD,EAAWC,UAAX,EAAuBK,MAAvB,EAA+B,CAA/B,CAA5C;;AAGA,QAAIN,QAAJ,EAAc;AACZ,YAAMgB,aAAa,GAAGf,UAAU,GAAGc,mBAAb,GAAmC,CAAzD;AACAf,MAAAA,QAAQ,CAACQ,SAAT,CAAmBO,mBAAmB,GAAG,CAAzC,EAA4CC,aAA5C,EAA2DnB,EAA3D;AACD;AACF;;AAGD,MAAIG,QAAJ,EAAc;AACZ,UAAMiB,cAAc,GAAGhB,UAAU,GAAGM,eAApC;AACAP,IAAAA,QAAQ,CAACQ,SAAT,CAAmBC,oBAAnB,EAAyCQ,cAAzC,EAAyDpB,EAAzD;AACD;;AAED,SAAOI,UAAP;AACD","sourcesContent":["/* eslint-disable camelcase, max-statements */\nimport {\n copyPaddedStringToDataView,\n copyPaddedArrayBufferToDataView\n} from '@loaders.gl/loader-utils';\n\nconst MAGIC_glTF = 0x46546c67; // glTF in ASCII\nconst MAGIC_JSON = 0x4e4f534a; // JSON in ASCII\nconst MAGIC_BIN = 0x004e4942; // BIN\\0 in ASCII\n\nconst LE = true; // Binary GLTF is little endian.\n\n// Encode the full GLB buffer with header etc\n// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#\n// glb-file-format-specification\nexport default function encodeGLBSync(glb, dataView, byteOffset = 0, options = {}) {\n const {magic = MAGIC_glTF, version = 2, json = {}, binary} = glb;\n\n const byteOffsetStart = byteOffset;\n\n // Write GLB Header\n if (dataView) {\n dataView.setUint32(byteOffset + 0, magic, LE); // Magic number (the ASCII string 'glTF').\n dataView.setUint32(byteOffset + 4, version, LE); // Version 2 of binary glTF container format uint32\n dataView.setUint32(byteOffset + 8, 0, LE); // Total byte length of generated file (uint32), will be set last\n }\n const byteOffsetFileLength = byteOffset + 8;\n byteOffset += 12; // GLB_FILE_HEADER_SIZE\n\n // Write the JSON chunk header\n const byteOffsetJsonHeader = byteOffset;\n if (dataView) {\n dataView.setUint32(byteOffset + 0, 0, LE); // Byte length of json chunk (will be written later)\n dataView.setUint32(byteOffset + 4, MAGIC_JSON, LE); // Chunk type\n }\n byteOffset += 8; // GLB_CHUNK_HEADER_SIZE\n\n // Write the JSON chunk\n const jsonString = JSON.stringify(json);\n byteOffset = copyPaddedStringToDataView(dataView, byteOffset, jsonString, 4);\n\n // Now we know the JSON chunk length so we can write it.\n if (dataView) {\n const jsonByteLength = byteOffset - byteOffsetJsonHeader - 8; // GLB_CHUNK_HEADER_SIZE\n dataView.setUint32(byteOffsetJsonHeader + 0, jsonByteLength, LE); // Byte length of json chunk (uint32)\n }\n\n // Write the BIN chunk if present. The BIN chunk is optional.\n if (binary) {\n const byteOffsetBinHeader = byteOffset;\n\n // Write the BIN chunk header\n if (dataView) {\n dataView.setUint32(byteOffset + 0, 0, LE); // Byte length BIN (uint32)\n dataView.setUint32(byteOffset + 4, MAGIC_BIN, LE); // Chunk type\n }\n byteOffset += 8; // GLB_CHUNK_HEADER_SIZE\n\n byteOffset = copyPaddedArrayBufferToDataView(dataView, byteOffset, binary, 4);\n\n // Now we know the BIN chunk length so we can write it.\n if (dataView) {\n const binByteLength = byteOffset - byteOffsetBinHeader - 8; // GLB_CHUNK_HEADER_SIZE\n dataView.setUint32(byteOffsetBinHeader + 0, binByteLength, LE); // Byte length BIN (uint32)\n }\n }\n\n // Now we know the glb file length so we can write it.\n if (dataView) {\n const fileByteLength = byteOffset - byteOffsetStart;\n dataView.setUint32(byteOffsetFileLength, fileByteLength, LE); // Total byte length of generated file (uint32)\n }\n\n return byteOffset;\n}\n"],"file":"encode-glb.js"}
@@ -1,14 +0,0 @@
1
- import encodeGLBSync from './encode-glb';
2
- export function encodeGLTFSync(gltf, arrayBuffer, byteOffset, options) {
3
- convertBuffersToBase64(gltf);
4
- return encodeGLBSync(gltf, arrayBuffer, byteOffset, options);
5
- }
6
-
7
- function convertBuffersToBase64(gltf, {
8
- firstBuffer = 0
9
- } = {}) {
10
- if (gltf.buffers && gltf.buffers.length > firstBuffer) {
11
- throw new Error('encodeGLTF: multiple buffers not yet implemented');
12
- }
13
- }
14
- //# sourceMappingURL=encode-gltf.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/lib/encoders/encode-gltf.ts"],"names":["encodeGLBSync","encodeGLTFSync","gltf","arrayBuffer","byteOffset","options","convertBuffersToBase64","firstBuffer","buffers","length","Error"],"mappings":"AAAA,OAAOA,aAAP,MAA0B,cAA1B;AAYA,OAAO,SAASC,cAAT,CAAwBC,IAAxB,EAA8BC,WAA9B,EAA2CC,UAA3C,EAAuDC,OAAvD,EAAgE;AACrEC,EAAAA,sBAAsB,CAACJ,IAAD,CAAtB;AAIA,SAAOF,aAAa,CAACE,IAAD,EAAOC,WAAP,EAAoBC,UAApB,EAAgCC,OAAhC,CAApB;AACD;;AAED,SAASC,sBAAT,CAAgCJ,IAAhC,EAAsC;AAACK,EAAAA,WAAW,GAAG;AAAf,IAAoB,EAA1D,EAA8D;AAC5D,MAAIL,IAAI,CAACM,OAAL,IAAgBN,IAAI,CAACM,OAAL,CAAaC,MAAb,GAAsBF,WAA1C,EAAuD;AACrD,UAAM,IAAIG,KAAJ,CAAU,kDAAV,CAAN;AACD;AACF","sourcesContent":["import encodeGLBSync from './encode-glb';\n\n// Encode the full glTF file as a binary GLB file\n// Returns an ArrayBuffer that represents the complete GLB image that can be saved to file\n//\n// TODO - Does not support encoding to non-GLB versions of glTF format\n// - Encode as a textual JSON file with binary data in base64 data URLs.\n// - Encode as a JSON with all images (and buffers?) in separate binary files\n//\n// glb-file-format-specification\n// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#\n\nexport function encodeGLTFSync(gltf, arrayBuffer, byteOffset, options) {\n convertBuffersToBase64(gltf);\n\n // TODO: Copy buffers to binary\n\n return encodeGLBSync(gltf, arrayBuffer, byteOffset, options);\n}\n\nfunction convertBuffersToBase64(gltf, {firstBuffer = 0} = {}) {\n if (gltf.buffers && gltf.buffers.length > firstBuffer) {\n throw new Error('encodeGLTF: multiple buffers not yet implemented');\n }\n}\n"],"file":"encode-gltf.js"}
@@ -1,56 +0,0 @@
1
- import GLTFScenegraph from '../api/gltf-scenegraph';
2
- import { isMeshoptSupported, meshoptDecodeGltfBuffer } from '../../meshopt/meshopt-decoder';
3
- const DEFAULT_MESHOPT_OPTIONS = {
4
- byteOffset: 0,
5
- filter: 'NONE'
6
- };
7
- const EXT_MESHOPT_COMPRESSION = 'EXT_meshopt_compression';
8
- export const name = EXT_MESHOPT_COMPRESSION;
9
- export function preprocess(gltfData) {
10
- const scenegraph = new GLTFScenegraph(gltfData);
11
-
12
- if (scenegraph.getRequiredExtensions().includes(EXT_MESHOPT_COMPRESSION) && !isMeshoptSupported()) {
13
- throw new Error("gltf: Required extension ".concat(EXT_MESHOPT_COMPRESSION, " not supported by browser"));
14
- }
15
- }
16
- export async function decode(gltfData, options) {
17
- var _options$gltf;
18
-
19
- const scenegraph = new GLTFScenegraph(gltfData);
20
-
21
- if (!(options !== null && options !== void 0 && (_options$gltf = options.gltf) !== null && _options$gltf !== void 0 && _options$gltf.decompressMeshes)) {
22
- return;
23
- }
24
-
25
- const promises = [];
26
-
27
- for (const bufferViewIndex of gltfData.json.bufferViews || []) {
28
- promises.push(decodeMeshoptBufferView(scenegraph, bufferViewIndex));
29
- }
30
-
31
- await Promise.all(promises);
32
- scenegraph.removeExtension(EXT_MESHOPT_COMPRESSION);
33
- }
34
-
35
- async function decodeMeshoptBufferView(scenegraph, bufferView) {
36
- const meshoptExtension = scenegraph.getObjectExtension(bufferView, EXT_MESHOPT_COMPRESSION);
37
-
38
- if (meshoptExtension) {
39
- const buffer = bufferView.buffer;
40
- const {
41
- byteOffset = 0,
42
- byteLength = 0,
43
- byteStride,
44
- count,
45
- mode,
46
- filter = 'NONE'
47
- } = meshoptExtension;
48
- const source = new Uint8Array(buffer, byteOffset, byteLength);
49
- const result = new ArrayBuffer(count * byteStride);
50
- await meshoptDecodeGltfBuffer(new Uint8Array(result), count, byteStride, source, mode, filter);
51
- return result;
52
- }
53
-
54
- return null;
55
- }
56
- //# sourceMappingURL=EXT_meshopt_compression.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/lib/extensions/EXT_meshopt_compression.ts"],"names":["GLTFScenegraph","isMeshoptSupported","meshoptDecodeGltfBuffer","DEFAULT_MESHOPT_OPTIONS","byteOffset","filter","EXT_MESHOPT_COMPRESSION","name","preprocess","gltfData","scenegraph","getRequiredExtensions","includes","Error","decode","options","gltf","decompressMeshes","promises","bufferViewIndex","json","bufferViews","push","decodeMeshoptBufferView","Promise","all","removeExtension","bufferView","meshoptExtension","getObjectExtension","buffer","byteLength","byteStride","count","mode","source","Uint8Array","result","ArrayBuffer"],"mappings":"AAGA,OAAOA,cAAP,MAA2B,wBAA3B;AACA,SAAQC,kBAAR,EAA4BC,uBAA5B,QAA0D,+BAA1D;AAIA,MAAMC,uBAAuB,GAAG;AAC9BC,EAAAA,UAAU,EAAE,CADkB;AAE9BC,EAAAA,MAAM,EAAE;AAFsB,CAAhC;AAMA,MAAMC,uBAAuB,GAAG,yBAAhC;AAEA,OAAO,MAAMC,IAAI,GAAGD,uBAAb;AAEP,OAAO,SAASE,UAAT,CAAoBC,QAApB,EAA4C;AACjD,QAAMC,UAAU,GAAG,IAAIV,cAAJ,CAAmBS,QAAnB,CAAnB;;AACA,MACEC,UAAU,CAACC,qBAAX,GAAmCC,QAAnC,CAA4CN,uBAA5C,KACA,CAACL,kBAAkB,EAFrB,EAGE;AACA,UAAM,IAAIY,KAAJ,oCAAsCP,uBAAtC,+BAAN;AACD;AACF;AAED,OAAO,eAAeQ,MAAf,CAAsBL,QAAtB,EAA8CM,OAA9C,EAA0E;AAAA;;AAC/E,QAAML,UAAU,GAAG,IAAIV,cAAJ,CAAmBS,QAAnB,CAAnB;;AAEA,MAAI,EAACM,OAAD,aAACA,OAAD,gCAACA,OAAO,CAAEC,IAAV,0CAAC,cAAeC,gBAAhB,CAAJ,EAAsC;AACpC;AACD;;AAED,QAAMC,QAAwB,GAAG,EAAjC;;AACA,OAAK,MAAMC,eAAX,IAA8BV,QAAQ,CAACW,IAAT,CAAcC,WAAd,IAA6B,EAA3D,EAA+D;AAC7DH,IAAAA,QAAQ,CAACI,IAAT,CAAcC,uBAAuB,CAACb,UAAD,EAAaS,eAAb,CAArC;AACD;;AAGD,QAAMK,OAAO,CAACC,GAAR,CAAYP,QAAZ,CAAN;AAGAR,EAAAA,UAAU,CAACgB,eAAX,CAA2BpB,uBAA3B;AACD;;AAGD,eAAeiB,uBAAf,CACEb,UADF,EAEEiB,UAFF,EAG+B;AAC7B,QAAMC,gBAAgB,GAAGlB,UAAU,CAACmB,kBAAX,CACvBF,UADuB,EAEvBrB,uBAFuB,CAAzB;;AAIA,MAAIsB,gBAAJ,EAAsB;AACpB,UAAME,MAAM,GAAGH,UAAU,CAACG,MAA1B;AAEA,UAAM;AACJ1B,MAAAA,UAAU,GAAG,CADT;AAEJ2B,MAAAA,UAAU,GAAG,CAFT;AAGJC,MAAAA,UAHI;AAIJC,MAAAA,KAJI;AAKJC,MAAAA,IALI;AAMJ7B,MAAAA,MAAM,GAAG;AANL,QAOFuB,gBAPJ;AAUA,UAAMO,MAAM,GAAG,IAAIC,UAAJ,CAAeN,MAAf,EAAuB1B,UAAvB,EAAmC2B,UAAnC,CAAf;AACA,UAAMM,MAAM,GAAG,IAAIC,WAAJ,CAAgBL,KAAK,GAAGD,UAAxB,CAAf;AACA,UAAM9B,uBAAuB,CAAC,IAAIkC,UAAJ,CAAeC,MAAf,CAAD,EAAyBJ,KAAzB,EAAgCD,UAAhC,EAA4CG,MAA5C,EAAoDD,IAApD,EAA0D7B,MAA1D,CAA7B;AACA,WAAOgC,MAAP;AACD;;AAED,SAAO,IAAP;AACD","sourcesContent":["/* eslint-disable camelcase */\nimport type {GLTF, GLTFBufferView, GLTF_EXT_meshopt_compression} from '../types/gltf-types';\nimport type {GLTFLoaderOptions} from '../../gltf-loader';\nimport GLTFScenegraph from '../api/gltf-scenegraph';\nimport {isMeshoptSupported, meshoptDecodeGltfBuffer} from '../../meshopt/meshopt-decoder';\n\n// @ts-ignore\n// eslint-disable-next-line\nconst DEFAULT_MESHOPT_OPTIONS = {\n byteOffset: 0,\n filter: 'NONE'\n};\n\n/** Extension name */\nconst EXT_MESHOPT_COMPRESSION = 'EXT_meshopt_compression';\n\nexport const name = EXT_MESHOPT_COMPRESSION;\n\nexport function preprocess(gltfData: {json: GLTF}) {\n const scenegraph = new GLTFScenegraph(gltfData);\n if (\n scenegraph.getRequiredExtensions().includes(EXT_MESHOPT_COMPRESSION) &&\n !isMeshoptSupported()\n ) {\n throw new Error(`gltf: Required extension ${EXT_MESHOPT_COMPRESSION} not supported by browser`);\n }\n}\n\nexport async function decode(gltfData: {json: GLTF}, options: GLTFLoaderOptions) {\n const scenegraph = new GLTFScenegraph(gltfData);\n\n if (!options?.gltf?.decompressMeshes) {\n return;\n }\n\n const promises: Promise<any>[] = [];\n for (const bufferViewIndex of gltfData.json.bufferViews || []) {\n promises.push(decodeMeshoptBufferView(scenegraph, bufferViewIndex));\n }\n\n // Decompress meshes in parallel\n await Promise.all(promises);\n\n // We have now decompressed all primitives, so remove the top-level extensions\n scenegraph.removeExtension(EXT_MESHOPT_COMPRESSION);\n}\n\n/** Decode one meshopt buffer view */\nasync function decodeMeshoptBufferView(\n scenegraph: GLTFScenegraph,\n bufferView: GLTFBufferView\n): Promise<ArrayBuffer | null> {\n const meshoptExtension = scenegraph.getObjectExtension<GLTF_EXT_meshopt_compression>(\n bufferView,\n EXT_MESHOPT_COMPRESSION\n );\n if (meshoptExtension) {\n const buffer = bufferView.buffer;\n\n const {\n byteOffset = 0,\n byteLength = 0,\n byteStride,\n count,\n mode,\n filter = 'NONE'\n } = meshoptExtension;\n\n // @ts-expect-error TODO - fix buffer handling\n const source = new Uint8Array(buffer, byteOffset, byteLength);\n const result = new ArrayBuffer(count * byteStride);\n await meshoptDecodeGltfBuffer(new Uint8Array(result), count, byteStride, source, mode, filter);\n return result;\n }\n\n return null;\n}\n"],"file":"EXT_meshopt_compression.js"}