@babylonjs/loaders 5.0.0-beta.8 → 5.0.0-beta.8-snapshot

Sign up to get free protection for your applications and to get access to all the features.
Files changed (172) hide show
  1. package/package.json +20 -198
  2. package/OBJ/index.d.ts +0 -4
  3. package/OBJ/index.js +0 -5
  4. package/OBJ/index.js.map +0 -1
  5. package/OBJ/mtlFileLoader.d.ts +0 -40
  6. package/OBJ/mtlFileLoader.js +0 -222
  7. package/OBJ/mtlFileLoader.js.map +0 -1
  8. package/OBJ/objFileLoader.d.ts +0 -133
  9. package/OBJ/objFileLoader.js +0 -301
  10. package/OBJ/objFileLoader.js.map +0 -1
  11. package/OBJ/objLoadingOptions.d.ts +0 -43
  12. package/OBJ/objLoadingOptions.js +0 -2
  13. package/OBJ/objLoadingOptions.js.map +0 -1
  14. package/OBJ/solidParser.d.ts +0 -153
  15. package/OBJ/solidParser.js +0 -700
  16. package/OBJ/solidParser.js.map +0 -1
  17. package/STL/index.d.ts +0 -1
  18. package/STL/index.js +0 -2
  19. package/STL/index.js.map +0 -1
  20. package/STL/stlFileLoader.d.ts +0 -71
  21. package/STL/stlFileLoader.js +0 -240
  22. package/STL/stlFileLoader.js.map +0 -1
  23. package/glTF/1.0/glTFBinaryExtension.d.ts +0 -13
  24. package/glTF/1.0/glTFBinaryExtension.js +0 -62
  25. package/glTF/1.0/glTFBinaryExtension.js.map +0 -1
  26. package/glTF/1.0/glTFLoader.d.ts +0 -106
  27. package/glTF/1.0/glTFLoader.js +0 -1697
  28. package/glTF/1.0/glTFLoader.js.map +0 -1
  29. package/glTF/1.0/glTFLoaderInterfaces.d.ts +0 -412
  30. package/glTF/1.0/glTFLoaderInterfaces.js +0 -96
  31. package/glTF/1.0/glTFLoaderInterfaces.js.map +0 -1
  32. package/glTF/1.0/glTFLoaderUtils.d.ts +0 -62
  33. package/glTF/1.0/glTFLoaderUtils.js +0 -233
  34. package/glTF/1.0/glTFLoaderUtils.js.map +0 -1
  35. package/glTF/1.0/glTFMaterialsCommonExtension.d.ts +0 -10
  36. package/glTF/1.0/glTFMaterialsCommonExtension.js +0 -128
  37. package/glTF/1.0/glTFMaterialsCommonExtension.js.map +0 -1
  38. package/glTF/1.0/index.d.ts +0 -5
  39. package/glTF/1.0/index.js +0 -6
  40. package/glTF/1.0/index.js.map +0 -1
  41. package/glTF/2.0/Extensions/EXT_lights_image_based.d.ts +0 -36
  42. package/glTF/2.0/Extensions/EXT_lights_image_based.js +0 -111
  43. package/glTF/2.0/Extensions/EXT_lights_image_based.js.map +0 -1
  44. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.d.ts +0 -27
  45. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.js +0 -80
  46. package/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.js.map +0 -1
  47. package/glTF/2.0/Extensions/EXT_meshopt_compression.d.ts +0 -27
  48. package/glTF/2.0/Extensions/EXT_meshopt_compression.js +0 -43
  49. package/glTF/2.0/Extensions/EXT_meshopt_compression.js.map +0 -1
  50. package/glTF/2.0/Extensions/EXT_texture_webp.d.ts +0 -21
  51. package/glTF/2.0/Extensions/EXT_texture_webp.js +0 -33
  52. package/glTF/2.0/Extensions/EXT_texture_webp.js.map +0 -1
  53. package/glTF/2.0/Extensions/ExtrasAsMetadata.d.ts +0 -32
  54. package/glTF/2.0/Extensions/ExtrasAsMetadata.js +0 -56
  55. package/glTF/2.0/Extensions/ExtrasAsMetadata.js.map +0 -1
  56. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.d.ts +0 -31
  57. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.js +0 -102
  58. package/glTF/2.0/Extensions/KHR_draco_mesh_compression.js.map +0 -1
  59. package/glTF/2.0/Extensions/KHR_lights_punctual.d.ts +0 -28
  60. package/glTF/2.0/Extensions/KHR_lights_punctual.js +0 -82
  61. package/glTF/2.0/Extensions/KHR_lights_punctual.js.map +0 -1
  62. package/glTF/2.0/Extensions/KHR_materials_clearcoat.d.ts +0 -31
  63. package/glTF/2.0/Extensions/KHR_materials_clearcoat.js +0 -87
  64. package/glTF/2.0/Extensions/KHR_materials_clearcoat.js.map +0 -1
  65. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.d.ts +0 -30
  66. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.js +0 -46
  67. package/glTF/2.0/Extensions/KHR_materials_emissive_strength.js.map +0 -1
  68. package/glTF/2.0/Extensions/KHR_materials_ior.d.ts +0 -34
  69. package/glTF/2.0/Extensions/KHR_materials_ior.js +0 -55
  70. package/glTF/2.0/Extensions/KHR_materials_ior.js.map +0 -1
  71. package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.d.ts +0 -30
  72. package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.js +0 -73
  73. package/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.js.map +0 -1
  74. package/glTF/2.0/Extensions/KHR_materials_sheen.d.ts +0 -31
  75. package/glTF/2.0/Extensions/KHR_materials_sheen.js +0 -77
  76. package/glTF/2.0/Extensions/KHR_materials_sheen.js.map +0 -1
  77. package/glTF/2.0/Extensions/KHR_materials_specular.d.ts +0 -30
  78. package/glTF/2.0/Extensions/KHR_materials_specular.js +0 -67
  79. package/glTF/2.0/Extensions/KHR_materials_specular.js.map +0 -1
  80. package/glTF/2.0/Extensions/KHR_materials_translucency.d.ts +0 -31
  81. package/glTF/2.0/Extensions/KHR_materials_translucency.js +0 -77
  82. package/glTF/2.0/Extensions/KHR_materials_translucency.js.map +0 -1
  83. package/glTF/2.0/Extensions/KHR_materials_transmission.d.ts +0 -30
  84. package/glTF/2.0/Extensions/KHR_materials_transmission.js +0 -278
  85. package/glTF/2.0/Extensions/KHR_materials_transmission.js.map +0 -1
  86. package/glTF/2.0/Extensions/KHR_materials_unlit.d.ts +0 -30
  87. package/glTF/2.0/Extensions/KHR_materials_unlit.js +0 -66
  88. package/glTF/2.0/Extensions/KHR_materials_unlit.js.map +0 -1
  89. package/glTF/2.0/Extensions/KHR_materials_variants.d.ts +0 -76
  90. package/glTF/2.0/Extensions/KHR_materials_variants.js +0 -244
  91. package/glTF/2.0/Extensions/KHR_materials_variants.js.map +0 -1
  92. package/glTF/2.0/Extensions/KHR_materials_volume.d.ts +0 -31
  93. package/glTF/2.0/Extensions/KHR_materials_volume.js +0 -79
  94. package/glTF/2.0/Extensions/KHR_materials_volume.js.map +0 -1
  95. package/glTF/2.0/Extensions/KHR_mesh_quantization.d.ts +0 -19
  96. package/glTF/2.0/Extensions/KHR_mesh_quantization.js +0 -22
  97. package/glTF/2.0/Extensions/KHR_mesh_quantization.js.map +0 -1
  98. package/glTF/2.0/Extensions/KHR_texture_basisu.d.ts +0 -21
  99. package/glTF/2.0/Extensions/KHR_texture_basisu.js +0 -33
  100. package/glTF/2.0/Extensions/KHR_texture_basisu.js.map +0 -1
  101. package/glTF/2.0/Extensions/KHR_texture_transform.d.ts +0 -25
  102. package/glTF/2.0/Extensions/KHR_texture_transform.js +0 -54
  103. package/glTF/2.0/Extensions/KHR_texture_transform.js.map +0 -1
  104. package/glTF/2.0/Extensions/KHR_xmp_json_ld.d.ts +0 -29
  105. package/glTF/2.0/Extensions/KHR_xmp_json_ld.js +0 -47
  106. package/glTF/2.0/Extensions/KHR_xmp_json_ld.js.map +0 -1
  107. package/glTF/2.0/Extensions/MSFT_audio_emitter.d.ts +0 -38
  108. package/glTF/2.0/Extensions/MSFT_audio_emitter.js +0 -217
  109. package/glTF/2.0/Extensions/MSFT_audio_emitter.js.map +0 -1
  110. package/glTF/2.0/Extensions/MSFT_lod.d.ts +0 -75
  111. package/glTF/2.0/Extensions/MSFT_lod.js +0 -334
  112. package/glTF/2.0/Extensions/MSFT_lod.js.map +0 -1
  113. package/glTF/2.0/Extensions/MSFT_minecraftMesh.d.ts +0 -14
  114. package/glTF/2.0/Extensions/MSFT_minecraftMesh.js +0 -37
  115. package/glTF/2.0/Extensions/MSFT_minecraftMesh.js.map +0 -1
  116. package/glTF/2.0/Extensions/MSFT_sRGBFactors.d.ts +0 -14
  117. package/glTF/2.0/Extensions/MSFT_sRGBFactors.js +0 -37
  118. package/glTF/2.0/Extensions/MSFT_sRGBFactors.js.map +0 -1
  119. package/glTF/2.0/Extensions/index.d.ts +0 -26
  120. package/glTF/2.0/Extensions/index.js +0 -27
  121. package/glTF/2.0/Extensions/index.js.map +0 -1
  122. package/glTF/2.0/glTFLoader.d.ts +0 -357
  123. package/glTF/2.0/glTFLoader.js +0 -2249
  124. package/glTF/2.0/glTFLoader.js.map +0 -1
  125. package/glTF/2.0/glTFLoaderExtension.d.ts +0 -152
  126. package/glTF/2.0/glTFLoaderExtension.js +0 -2
  127. package/glTF/2.0/glTFLoaderExtension.js.map +0 -1
  128. package/glTF/2.0/glTFLoaderInterfaces.d.ts +0 -209
  129. package/glTF/2.0/glTFLoaderInterfaces.js +0 -2
  130. package/glTF/2.0/glTFLoaderInterfaces.js.map +0 -1
  131. package/glTF/2.0/index.d.ts +0 -4
  132. package/glTF/2.0/index.js +0 -5
  133. package/glTF/2.0/index.js.map +0 -1
  134. package/glTF/glTFFileLoader.d.ts +0 -368
  135. package/glTF/glTFFileLoader.js +0 -869
  136. package/glTF/glTFFileLoader.js.map +0 -1
  137. package/glTF/glTFValidation.d.ts +0 -29
  138. package/glTF/glTFValidation.js +0 -122
  139. package/glTF/glTFValidation.js.map +0 -1
  140. package/glTF/index.d.ts +0 -5
  141. package/glTF/index.js +0 -6
  142. package/glTF/index.js.map +0 -1
  143. package/index.d.ts +0 -3
  144. package/index.js.map +0 -1
  145. package/legacy/legacy-glTF.d.ts +0 -2
  146. package/legacy/legacy-glTF.js +0 -19
  147. package/legacy/legacy-glTF.js.map +0 -1
  148. package/legacy/legacy-glTF1.d.ts +0 -2
  149. package/legacy/legacy-glTF1.js +0 -15
  150. package/legacy/legacy-glTF1.js.map +0 -1
  151. package/legacy/legacy-glTF1FileLoader.d.ts +0 -2
  152. package/legacy/legacy-glTF1FileLoader.js +0 -3
  153. package/legacy/legacy-glTF1FileLoader.js.map +0 -1
  154. package/legacy/legacy-glTF2.d.ts +0 -2
  155. package/legacy/legacy-glTF2.js +0 -33
  156. package/legacy/legacy-glTF2.js.map +0 -1
  157. package/legacy/legacy-glTF2FileLoader.d.ts +0 -2
  158. package/legacy/legacy-glTF2FileLoader.js +0 -3
  159. package/legacy/legacy-glTF2FileLoader.js.map +0 -1
  160. package/legacy/legacy-glTFFileLoader.d.ts +0 -3
  161. package/legacy/legacy-glTFFileLoader.js +0 -4
  162. package/legacy/legacy-glTFFileLoader.js.map +0 -1
  163. package/legacy/legacy-objFileLoader.d.ts +0 -1
  164. package/legacy/legacy-objFileLoader.js +0 -13
  165. package/legacy/legacy-objFileLoader.js.map +0 -1
  166. package/legacy/legacy-stlFileLoader.d.ts +0 -1
  167. package/legacy/legacy-stlFileLoader.js +0 -13
  168. package/legacy/legacy-stlFileLoader.js.map +0 -1
  169. package/legacy/legacy.d.ts +0 -6
  170. package/legacy/legacy.js +0 -7
  171. package/legacy/legacy.js.map +0 -1
  172. package/readme.md +0 -24
@@ -1,2249 +0,0 @@
1
- import { Deferred } from "@babylonjs/core/Misc/deferred.js";
2
- import { Quaternion, Vector3, Matrix } from "@babylonjs/core/Maths/math.vector.js";
3
- import { Color3 } from '@babylonjs/core/Maths/math.color.js';
4
- import { Tools } from "@babylonjs/core/Misc/tools.js";
5
- import { Camera } from "@babylonjs/core/Cameras/camera.js";
6
- import { FreeCamera } from "@babylonjs/core/Cameras/freeCamera.js";
7
- import { AnimationGroup } from "@babylonjs/core/Animations/animationGroup.js";
8
- import { Animation } from "@babylonjs/core/Animations/animation.js";
9
- import { Bone } from "@babylonjs/core/Bones/bone.js";
10
- import { Skeleton } from "@babylonjs/core/Bones/skeleton.js";
11
- import { Material } from "@babylonjs/core/Materials/material.js";
12
- import { PBRMaterial } from "@babylonjs/core/Materials/PBR/pbrMaterial.js";
13
- import { Texture } from "@babylonjs/core/Materials/Textures/texture.js";
14
- import { TransformNode } from "@babylonjs/core/Meshes/transformNode.js";
15
- import { Buffer, VertexBuffer } from "@babylonjs/core/Buffers/buffer.js";
16
- import { Geometry } from "@babylonjs/core/Meshes/geometry.js";
17
- import { Mesh } from "@babylonjs/core/Meshes/mesh.js";
18
- import { MorphTarget } from "@babylonjs/core/Morph/morphTarget.js";
19
- import { MorphTargetManager } from "@babylonjs/core/Morph/morphTargetManager.js";
20
- import { GLTFFileLoader, GLTFLoaderState, GLTFLoaderCoordinateSystemMode, GLTFLoaderAnimationStartMode } from "../glTFFileLoader.js";
21
- import { AnimationKeyInterpolation } from '@babylonjs/core/Animations/animationKey.js';
22
- import { DecodeBase64UrlToBinary, IsBase64DataUrl, LoadFileError } from '@babylonjs/core/Misc/fileTools.js';
23
- import { Logger } from '@babylonjs/core/Misc/logger.js';
24
- import { TmpVectors } from '@babylonjs/core/Maths/math.vector.js';
25
- import { BoundingInfo } from '@babylonjs/core/Culling/boundingInfo.js';
26
- import { StringTools } from '@babylonjs/core/Misc/stringTools.js';
27
- /**
28
- * Helper class for working with arrays when loading the glTF asset
29
- */
30
- var ArrayItem = /** @class */ (function () {
31
- function ArrayItem() {
32
- }
33
- /**
34
- * Gets an item from the given array.
35
- * @param context The context when loading the asset
36
- * @param array The array to get the item from
37
- * @param index The index to the array
38
- * @returns The array item
39
- */
40
- ArrayItem.Get = function (context, array, index) {
41
- if (!array || index == undefined || !array[index]) {
42
- throw new Error("".concat(context, ": Failed to find index (").concat(index, ")"));
43
- }
44
- return array[index];
45
- };
46
- /**
47
- * Assign an `index` field to each item of the given array.
48
- * @param array The array of items
49
- */
50
- ArrayItem.Assign = function (array) {
51
- if (array) {
52
- for (var index = 0; index < array.length; index++) {
53
- array[index].index = index;
54
- }
55
- }
56
- };
57
- return ArrayItem;
58
- }());
59
- export { ArrayItem };
60
- /**
61
- * The glTF 2.0 loader
62
- */
63
- var GLTFLoader = /** @class */ (function () {
64
- /** @hidden */
65
- function GLTFLoader(parent) {
66
- /** @hidden */
67
- this._completePromises = new Array();
68
- /** @hidden */
69
- this._assetContainer = null;
70
- /** Storage */
71
- this._babylonLights = [];
72
- /** @hidden */
73
- this._disableInstancedMesh = 0;
74
- this._extensions = new Array();
75
- this._disposed = false;
76
- this._rootUrl = null;
77
- this._fileName = null;
78
- this._uniqueRootUrl = null;
79
- this._bin = null;
80
- this._rootBabylonMesh = null;
81
- this._defaultBabylonMaterialData = {};
82
- this._postSceneLoadActions = new Array();
83
- this._parent = parent;
84
- }
85
- /**
86
- * Registers a loader extension.
87
- * @param name The name of the loader extension.
88
- * @param factory The factory function that creates the loader extension.
89
- */
90
- GLTFLoader.RegisterExtension = function (name, factory) {
91
- if (GLTFLoader.UnregisterExtension(name)) {
92
- Logger.Warn("Extension with the name '".concat(name, "' already exists"));
93
- }
94
- GLTFLoader._RegisteredExtensions[name] = {
95
- factory: factory
96
- };
97
- };
98
- /**
99
- * Unregisters a loader extension.
100
- * @param name The name of the loader extension.
101
- * @returns A boolean indicating whether the extension has been unregistered
102
- */
103
- GLTFLoader.UnregisterExtension = function (name) {
104
- if (!GLTFLoader._RegisteredExtensions[name]) {
105
- return false;
106
- }
107
- delete GLTFLoader._RegisteredExtensions[name];
108
- return true;
109
- };
110
- Object.defineProperty(GLTFLoader.prototype, "gltf", {
111
- /**
112
- * The object that represents the glTF JSON.
113
- */
114
- get: function () {
115
- if (!this._gltf) {
116
- throw new Error("glTF JSON is not available");
117
- }
118
- return this._gltf;
119
- },
120
- enumerable: false,
121
- configurable: true
122
- });
123
- Object.defineProperty(GLTFLoader.prototype, "bin", {
124
- /**
125
- * The BIN chunk of a binary glTF.
126
- */
127
- get: function () {
128
- return this._bin;
129
- },
130
- enumerable: false,
131
- configurable: true
132
- });
133
- Object.defineProperty(GLTFLoader.prototype, "parent", {
134
- /**
135
- * The parent file loader.
136
- */
137
- get: function () {
138
- return this._parent;
139
- },
140
- enumerable: false,
141
- configurable: true
142
- });
143
- Object.defineProperty(GLTFLoader.prototype, "babylonScene", {
144
- /**
145
- * The Babylon scene when loading the asset.
146
- */
147
- get: function () {
148
- if (!this._babylonScene) {
149
- throw new Error("Scene is not available");
150
- }
151
- return this._babylonScene;
152
- },
153
- enumerable: false,
154
- configurable: true
155
- });
156
- Object.defineProperty(GLTFLoader.prototype, "rootBabylonMesh", {
157
- /**
158
- * The root Babylon mesh when loading the asset.
159
- */
160
- get: function () {
161
- return this._rootBabylonMesh;
162
- },
163
- enumerable: false,
164
- configurable: true
165
- });
166
- /** @hidden */
167
- GLTFLoader.prototype.dispose = function () {
168
- if (this._disposed) {
169
- return;
170
- }
171
- this._disposed = true;
172
- this._completePromises.length = 0;
173
- this._extensions.forEach(function (extension) { return extension.dispose && extension.dispose(); });
174
- this._extensions.length = 0;
175
- this._gltf = null; // TODO
176
- this._bin = null;
177
- this._babylonScene = null; // TODO
178
- this._rootBabylonMesh = null;
179
- this._defaultBabylonMaterialData = {};
180
- this._postSceneLoadActions.length = 0;
181
- this._parent.dispose();
182
- };
183
- /** @hidden */
184
- GLTFLoader.prototype.importMeshAsync = function (meshesNames, scene, container, data, rootUrl, onProgress, fileName) {
185
- var _this = this;
186
- if (fileName === void 0) { fileName = ""; }
187
- return Promise.resolve().then(function () {
188
- _this._babylonScene = scene;
189
- _this._assetContainer = container;
190
- _this._loadData(data);
191
- var nodes = null;
192
- if (meshesNames) {
193
- var nodeMap_1 = {};
194
- if (_this._gltf.nodes) {
195
- for (var _i = 0, _a = _this._gltf.nodes; _i < _a.length; _i++) {
196
- var node = _a[_i];
197
- if (node.name) {
198
- nodeMap_1[node.name] = node.index;
199
- }
200
- }
201
- }
202
- var names = (meshesNames instanceof Array) ? meshesNames : [meshesNames];
203
- nodes = names.map(function (name) {
204
- var node = nodeMap_1[name];
205
- if (node === undefined) {
206
- throw new Error("Failed to find node '".concat(name, "'"));
207
- }
208
- return node;
209
- });
210
- }
211
- return _this._loadAsync(rootUrl, fileName, nodes, function () {
212
- return {
213
- meshes: _this._getMeshes(),
214
- particleSystems: [],
215
- skeletons: _this._getSkeletons(),
216
- animationGroups: _this._getAnimationGroups(),
217
- lights: _this._babylonLights,
218
- transformNodes: _this._getTransformNodes(),
219
- geometries: _this._getGeometries()
220
- };
221
- });
222
- });
223
- };
224
- /** @hidden */
225
- GLTFLoader.prototype.loadAsync = function (scene, data, rootUrl, onProgress, fileName) {
226
- var _this = this;
227
- if (fileName === void 0) { fileName = ""; }
228
- return Promise.resolve().then(function () {
229
- _this._babylonScene = scene;
230
- _this._loadData(data);
231
- return _this._loadAsync(rootUrl, fileName, null, function () { return undefined; });
232
- });
233
- };
234
- GLTFLoader.prototype._loadAsync = function (rootUrl, fileName, nodes, resultFunc) {
235
- var _this = this;
236
- return Promise.resolve().then(function () {
237
- _this._rootUrl = rootUrl;
238
- _this._uniqueRootUrl = (!StringTools.StartsWith(rootUrl, "file:") && fileName) ? rootUrl : "".concat(rootUrl).concat(Date.now(), "/");
239
- _this._fileName = fileName;
240
- _this._loadExtensions();
241
- _this._checkExtensions();
242
- var loadingToReadyCounterName = "".concat(GLTFLoaderState[GLTFLoaderState.LOADING], " => ").concat(GLTFLoaderState[GLTFLoaderState.READY]);
243
- var loadingToCompleteCounterName = "".concat(GLTFLoaderState[GLTFLoaderState.LOADING], " => ").concat(GLTFLoaderState[GLTFLoaderState.COMPLETE]);
244
- _this._parent._startPerformanceCounter(loadingToReadyCounterName);
245
- _this._parent._startPerformanceCounter(loadingToCompleteCounterName);
246
- _this._parent._setState(GLTFLoaderState.LOADING);
247
- _this._extensionsOnLoading();
248
- var promises = new Array();
249
- // Block the marking of materials dirty until the scene is loaded.
250
- var oldBlockMaterialDirtyMechanism = _this._babylonScene.blockMaterialDirtyMechanism;
251
- _this._babylonScene.blockMaterialDirtyMechanism = true;
252
- if (nodes) {
253
- promises.push(_this.loadSceneAsync("/nodes", { nodes: nodes, index: -1 }));
254
- }
255
- else if (_this._gltf.scene != undefined || (_this._gltf.scenes && _this._gltf.scenes[0])) {
256
- var scene = ArrayItem.Get("/scene", _this._gltf.scenes, _this._gltf.scene || 0);
257
- promises.push(_this.loadSceneAsync("/scenes/".concat(scene.index), scene));
258
- }
259
- if (_this.parent.loadAllMaterials && _this._gltf.materials) {
260
- for (var m = 0; m < _this._gltf.materials.length; ++m) {
261
- var material = _this._gltf.materials[m];
262
- var context_1 = "/materials/" + m;
263
- var babylonDrawMode = Material.TriangleFillMode;
264
- promises.push(_this._loadMaterialAsync(context_1, material, null, babylonDrawMode, function (material) { }));
265
- }
266
- }
267
- // Restore the blocking of material dirty.
268
- _this._babylonScene.blockMaterialDirtyMechanism = oldBlockMaterialDirtyMechanism;
269
- if (_this._parent.compileMaterials) {
270
- promises.push(_this._compileMaterialsAsync());
271
- }
272
- if (_this._parent.compileShadowGenerators) {
273
- promises.push(_this._compileShadowGeneratorsAsync());
274
- }
275
- var resultPromise = Promise.all(promises).then(function () {
276
- if (_this._rootBabylonMesh) {
277
- _this._rootBabylonMesh.setEnabled(true);
278
- }
279
- _this._extensionsOnReady();
280
- _this._parent._setState(GLTFLoaderState.READY);
281
- _this._startAnimations();
282
- return resultFunc();
283
- });
284
- return resultPromise.then(function (result) {
285
- _this._parent._endPerformanceCounter(loadingToReadyCounterName);
286
- Tools.SetImmediate(function () {
287
- if (!_this._disposed) {
288
- Promise.all(_this._completePromises).then(function () {
289
- _this._parent._endPerformanceCounter(loadingToCompleteCounterName);
290
- _this._parent._setState(GLTFLoaderState.COMPLETE);
291
- _this._parent.onCompleteObservable.notifyObservers(undefined);
292
- _this._parent.onCompleteObservable.clear();
293
- _this.dispose();
294
- }, function (error) {
295
- _this._parent.onErrorObservable.notifyObservers(error);
296
- _this._parent.onErrorObservable.clear();
297
- _this.dispose();
298
- });
299
- }
300
- });
301
- return result;
302
- });
303
- }).catch(function (error) {
304
- if (!_this._disposed) {
305
- _this._parent.onErrorObservable.notifyObservers(error);
306
- _this._parent.onErrorObservable.clear();
307
- _this.dispose();
308
- }
309
- throw error;
310
- });
311
- };
312
- GLTFLoader.prototype._loadData = function (data) {
313
- this._gltf = data.json;
314
- this._setupData();
315
- if (data.bin) {
316
- var buffers = this._gltf.buffers;
317
- if (buffers && buffers[0] && !buffers[0].uri) {
318
- var binaryBuffer = buffers[0];
319
- if (binaryBuffer.byteLength < data.bin.byteLength - 3 || binaryBuffer.byteLength > data.bin.byteLength) {
320
- Logger.Warn("Binary buffer length (".concat(binaryBuffer.byteLength, ") from JSON does not match chunk length (").concat(data.bin.byteLength, ")"));
321
- }
322
- this._bin = data.bin;
323
- }
324
- else {
325
- Logger.Warn("Unexpected BIN chunk");
326
- }
327
- }
328
- };
329
- GLTFLoader.prototype._setupData = function () {
330
- ArrayItem.Assign(this._gltf.accessors);
331
- ArrayItem.Assign(this._gltf.animations);
332
- ArrayItem.Assign(this._gltf.buffers);
333
- ArrayItem.Assign(this._gltf.bufferViews);
334
- ArrayItem.Assign(this._gltf.cameras);
335
- ArrayItem.Assign(this._gltf.images);
336
- ArrayItem.Assign(this._gltf.materials);
337
- ArrayItem.Assign(this._gltf.meshes);
338
- ArrayItem.Assign(this._gltf.nodes);
339
- ArrayItem.Assign(this._gltf.samplers);
340
- ArrayItem.Assign(this._gltf.scenes);
341
- ArrayItem.Assign(this._gltf.skins);
342
- ArrayItem.Assign(this._gltf.textures);
343
- if (this._gltf.nodes) {
344
- var nodeParents = {};
345
- for (var _i = 0, _a = this._gltf.nodes; _i < _a.length; _i++) {
346
- var node = _a[_i];
347
- if (node.children) {
348
- for (var _b = 0, _c = node.children; _b < _c.length; _b++) {
349
- var index = _c[_b];
350
- nodeParents[index] = node.index;
351
- }
352
- }
353
- }
354
- var rootNode = this._createRootNode();
355
- for (var _d = 0, _e = this._gltf.nodes; _d < _e.length; _d++) {
356
- var node = _e[_d];
357
- var parentIndex = nodeParents[node.index];
358
- node.parent = parentIndex === undefined ? rootNode : this._gltf.nodes[parentIndex];
359
- }
360
- }
361
- };
362
- GLTFLoader.prototype._loadExtensions = function () {
363
- for (var name_1 in GLTFLoader._RegisteredExtensions) {
364
- var extension = GLTFLoader._RegisteredExtensions[name_1].factory(this);
365
- if (extension.name !== name_1) {
366
- Logger.Warn("The name of the glTF loader extension instance does not match the registered name: ".concat(extension.name, " !== ").concat(name_1));
367
- }
368
- this._extensions.push(extension);
369
- this._parent.onExtensionLoadedObservable.notifyObservers(extension);
370
- }
371
- this._extensions.sort(function (a, b) { return (a.order || Number.MAX_VALUE) - (b.order || Number.MAX_VALUE); });
372
- this._parent.onExtensionLoadedObservable.clear();
373
- };
374
- GLTFLoader.prototype._checkExtensions = function () {
375
- if (this._gltf.extensionsRequired) {
376
- var _loop_1 = function (name_2) {
377
- var available = this_1._extensions.some(function (extension) { return extension.name === name_2 && extension.enabled; });
378
- if (!available) {
379
- throw new Error("Require extension ".concat(name_2, " is not available"));
380
- }
381
- };
382
- var this_1 = this;
383
- for (var _i = 0, _a = this._gltf.extensionsRequired; _i < _a.length; _i++) {
384
- var name_2 = _a[_i];
385
- _loop_1(name_2);
386
- }
387
- }
388
- };
389
- GLTFLoader.prototype._createRootNode = function () {
390
- this._babylonScene._blockEntityCollection = !!this._assetContainer;
391
- this._rootBabylonMesh = new Mesh("__root__", this._babylonScene);
392
- this._rootBabylonMesh._parentContainer = this._assetContainer;
393
- this._babylonScene._blockEntityCollection = false;
394
- this._rootBabylonMesh.setEnabled(false);
395
- var rootNode = {
396
- _babylonTransformNode: this._rootBabylonMesh,
397
- index: -1
398
- };
399
- switch (this._parent.coordinateSystemMode) {
400
- case GLTFLoaderCoordinateSystemMode.AUTO: {
401
- if (!this._babylonScene.useRightHandedSystem) {
402
- rootNode.rotation = [0, 1, 0, 0];
403
- rootNode.scale = [1, 1, -1];
404
- GLTFLoader._LoadTransform(rootNode, this._rootBabylonMesh);
405
- }
406
- break;
407
- }
408
- case GLTFLoaderCoordinateSystemMode.FORCE_RIGHT_HANDED: {
409
- this._babylonScene.useRightHandedSystem = true;
410
- break;
411
- }
412
- default: {
413
- throw new Error("Invalid coordinate system mode (".concat(this._parent.coordinateSystemMode, ")"));
414
- }
415
- }
416
- this._parent.onMeshLoadedObservable.notifyObservers(this._rootBabylonMesh);
417
- return rootNode;
418
- };
419
- /**
420
- * Loads a glTF scene.
421
- * @param context The context when loading the asset
422
- * @param scene The glTF scene property
423
- * @returns A promise that resolves when the load is complete
424
- */
425
- GLTFLoader.prototype.loadSceneAsync = function (context, scene) {
426
- var _this = this;
427
- var extensionPromise = this._extensionsLoadSceneAsync(context, scene);
428
- if (extensionPromise) {
429
- return extensionPromise;
430
- }
431
- var promises = new Array();
432
- this.logOpen("".concat(context, " ").concat(scene.name || ""));
433
- if (scene.nodes) {
434
- for (var _i = 0, _a = scene.nodes; _i < _a.length; _i++) {
435
- var index = _a[_i];
436
- var node = ArrayItem.Get("".concat(context, "/nodes/").concat(index), this._gltf.nodes, index);
437
- promises.push(this.loadNodeAsync("/nodes/".concat(node.index), node, function (babylonMesh) {
438
- babylonMesh.parent = _this._rootBabylonMesh;
439
- }));
440
- }
441
- }
442
- for (var _b = 0, _c = this._postSceneLoadActions; _b < _c.length; _b++) {
443
- var action = _c[_b];
444
- action();
445
- }
446
- promises.push(this._loadAnimationsAsync());
447
- this.logClose();
448
- return Promise.all(promises).then(function () { });
449
- };
450
- GLTFLoader.prototype._forEachPrimitive = function (node, callback) {
451
- if (node._primitiveBabylonMeshes) {
452
- for (var _i = 0, _a = node._primitiveBabylonMeshes; _i < _a.length; _i++) {
453
- var babylonMesh = _a[_i];
454
- callback(babylonMesh);
455
- }
456
- }
457
- };
458
- GLTFLoader.prototype._getGeometries = function () {
459
- var geometries = new Array();
460
- var nodes = this._gltf.nodes;
461
- if (nodes) {
462
- for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {
463
- var node = nodes_1[_i];
464
- this._forEachPrimitive(node, function (babylonMesh) {
465
- var geometry = babylonMesh.geometry;
466
- if (geometry && geometries.indexOf(geometry) === -1) {
467
- geometries.push(geometry);
468
- }
469
- });
470
- }
471
- }
472
- return geometries;
473
- };
474
- GLTFLoader.prototype._getMeshes = function () {
475
- var meshes = new Array();
476
- // Root mesh is always first, if available.
477
- if (this._rootBabylonMesh) {
478
- meshes.push(this._rootBabylonMesh);
479
- }
480
- var nodes = this._gltf.nodes;
481
- if (nodes) {
482
- for (var _i = 0, nodes_2 = nodes; _i < nodes_2.length; _i++) {
483
- var node = nodes_2[_i];
484
- this._forEachPrimitive(node, function (babylonMesh) {
485
- meshes.push(babylonMesh);
486
- });
487
- }
488
- }
489
- return meshes;
490
- };
491
- GLTFLoader.prototype._getTransformNodes = function () {
492
- var transformNodes = new Array();
493
- var nodes = this._gltf.nodes;
494
- if (nodes) {
495
- for (var _i = 0, nodes_3 = nodes; _i < nodes_3.length; _i++) {
496
- var node = nodes_3[_i];
497
- if (node._babylonTransformNode && node._babylonTransformNode.getClassName() === "TransformNode") {
498
- transformNodes.push(node._babylonTransformNode);
499
- }
500
- }
501
- }
502
- return transformNodes;
503
- };
504
- GLTFLoader.prototype._getSkeletons = function () {
505
- var skeletons = new Array();
506
- var skins = this._gltf.skins;
507
- if (skins) {
508
- for (var _i = 0, skins_1 = skins; _i < skins_1.length; _i++) {
509
- var skin = skins_1[_i];
510
- if (skin._data) {
511
- skeletons.push(skin._data.babylonSkeleton);
512
- }
513
- }
514
- }
515
- return skeletons;
516
- };
517
- GLTFLoader.prototype._getAnimationGroups = function () {
518
- var animationGroups = new Array();
519
- var animations = this._gltf.animations;
520
- if (animations) {
521
- for (var _i = 0, animations_1 = animations; _i < animations_1.length; _i++) {
522
- var animation = animations_1[_i];
523
- if (animation._babylonAnimationGroup) {
524
- animationGroups.push(animation._babylonAnimationGroup);
525
- }
526
- }
527
- }
528
- return animationGroups;
529
- };
530
- GLTFLoader.prototype._startAnimations = function () {
531
- switch (this._parent.animationStartMode) {
532
- case GLTFLoaderAnimationStartMode.NONE: {
533
- // do nothing
534
- break;
535
- }
536
- case GLTFLoaderAnimationStartMode.FIRST: {
537
- var babylonAnimationGroups = this._getAnimationGroups();
538
- if (babylonAnimationGroups.length !== 0) {
539
- babylonAnimationGroups[0].start(true);
540
- }
541
- break;
542
- }
543
- case GLTFLoaderAnimationStartMode.ALL: {
544
- var babylonAnimationGroups = this._getAnimationGroups();
545
- for (var _i = 0, babylonAnimationGroups_1 = babylonAnimationGroups; _i < babylonAnimationGroups_1.length; _i++) {
546
- var babylonAnimationGroup = babylonAnimationGroups_1[_i];
547
- babylonAnimationGroup.start(true);
548
- }
549
- break;
550
- }
551
- default: {
552
- Logger.Error("Invalid animation start mode (".concat(this._parent.animationStartMode, ")"));
553
- return;
554
- }
555
- }
556
- };
557
- /**
558
- * Loads a glTF node.
559
- * @param context The context when loading the asset
560
- * @param node The glTF node property
561
- * @param assign A function called synchronously after parsing the glTF properties
562
- * @returns A promise that resolves with the loaded Babylon mesh when the load is complete
563
- */
564
- GLTFLoader.prototype.loadNodeAsync = function (context, node, assign) {
565
- var _this = this;
566
- if (assign === void 0) { assign = function () { }; }
567
- var extensionPromise = this._extensionsLoadNodeAsync(context, node, assign);
568
- if (extensionPromise) {
569
- return extensionPromise;
570
- }
571
- if (node._babylonTransformNode) {
572
- throw new Error("".concat(context, ": Invalid recursive node hierarchy"));
573
- }
574
- var promises = new Array();
575
- this.logOpen("".concat(context, " ").concat(node.name || ""));
576
- var loadNode = function (babylonTransformNode) {
577
- GLTFLoader.AddPointerMetadata(babylonTransformNode, context);
578
- GLTFLoader._LoadTransform(node, babylonTransformNode);
579
- if (node.camera != undefined) {
580
- var camera = ArrayItem.Get("".concat(context, "/camera"), _this._gltf.cameras, node.camera);
581
- promises.push(_this.loadCameraAsync("/cameras/".concat(camera.index), camera, function (babylonCamera) {
582
- babylonCamera.parent = babylonTransformNode;
583
- }));
584
- }
585
- if (node.children) {
586
- for (var _i = 0, _a = node.children; _i < _a.length; _i++) {
587
- var index = _a[_i];
588
- var childNode = ArrayItem.Get("".concat(context, "/children/").concat(index), _this._gltf.nodes, index);
589
- promises.push(_this.loadNodeAsync("/nodes/".concat(childNode.index), childNode, function (childBabylonMesh) {
590
- childBabylonMesh.parent = babylonTransformNode;
591
- }));
592
- }
593
- }
594
- assign(babylonTransformNode);
595
- };
596
- if (node.mesh == undefined || node.skin != undefined) {
597
- var nodeName = node.name || "node".concat(node.index);
598
- this._babylonScene._blockEntityCollection = !!this._assetContainer;
599
- node._babylonTransformNode = new TransformNode(nodeName, this._babylonScene);
600
- node._babylonTransformNode._parentContainer = this._assetContainer;
601
- this._babylonScene._blockEntityCollection = false;
602
- loadNode(node._babylonTransformNode);
603
- }
604
- if (node.mesh != undefined) {
605
- if (node.skin == undefined) {
606
- var mesh = ArrayItem.Get("".concat(context, "/mesh"), this._gltf.meshes, node.mesh);
607
- promises.push(this._loadMeshAsync("/meshes/".concat(mesh.index), node, mesh, loadNode));
608
- }
609
- else {
610
- // See https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins (second implementation note)
611
- // This code path will place the skinned mesh as a sibling of the skeleton root node without loading the
612
- // transform, which effectively ignores the transform of the skinned mesh, as per spec.
613
- var mesh = ArrayItem.Get("".concat(context, "/mesh"), this._gltf.meshes, node.mesh);
614
- promises.push(this._loadMeshAsync("/meshes/".concat(mesh.index), node, mesh, function (babylonTransformNode) {
615
- GLTFLoader.AddPointerMetadata(babylonTransformNode, context);
616
- var skin = ArrayItem.Get("".concat(context, "/skin"), _this._gltf.skins, node.skin);
617
- promises.push(_this._loadSkinAsync("/skins/".concat(skin.index), node, skin, function (babylonSkeleton) {
618
- _this._forEachPrimitive(node, function (babylonMesh) {
619
- babylonMesh.skeleton = babylonSkeleton;
620
- });
621
- // Wait until the scene is loaded to ensure the skeleton root node has been loaded.
622
- _this._postSceneLoadActions.push(function () {
623
- if (skin.skeleton != undefined) {
624
- // Place the skinned mesh node as a sibling of the skeleton root node.
625
- var skeletonRootNode = ArrayItem.Get("/skins/".concat(skin.index, "/skeleton"), _this._gltf.nodes, skin.skeleton);
626
- babylonTransformNode.parent = skeletonRootNode.parent._babylonTransformNode;
627
- }
628
- else {
629
- babylonTransformNode.parent = _this._rootBabylonMesh;
630
- }
631
- });
632
- }));
633
- }));
634
- }
635
- }
636
- this.logClose();
637
- return Promise.all(promises).then(function () {
638
- _this._forEachPrimitive(node, function (babylonMesh) {
639
- if (babylonMesh.geometry && babylonMesh.geometry.useBoundingInfoFromGeometry) {
640
- // simply apply the world matrices to the bounding info - the extends are already ok
641
- babylonMesh._updateBoundingInfo();
642
- }
643
- else {
644
- babylonMesh.refreshBoundingInfo(true);
645
- }
646
- });
647
- return node._babylonTransformNode;
648
- });
649
- };
650
- GLTFLoader.prototype._loadMeshAsync = function (context, node, mesh, assign) {
651
- var primitives = mesh.primitives;
652
- if (!primitives || !primitives.length) {
653
- throw new Error("".concat(context, ": Primitives are missing"));
654
- }
655
- if (primitives[0].index == undefined) {
656
- ArrayItem.Assign(primitives);
657
- }
658
- var promises = new Array();
659
- this.logOpen("".concat(context, " ").concat(mesh.name || ""));
660
- var name = node.name || "node".concat(node.index);
661
- if (primitives.length === 1) {
662
- var primitive = mesh.primitives[0];
663
- promises.push(this._loadMeshPrimitiveAsync("".concat(context, "/primitives/").concat(primitive.index), name, node, mesh, primitive, function (babylonMesh) {
664
- node._babylonTransformNode = babylonMesh;
665
- node._primitiveBabylonMeshes = [babylonMesh];
666
- }));
667
- }
668
- else {
669
- this._babylonScene._blockEntityCollection = !!this._assetContainer;
670
- node._babylonTransformNode = new TransformNode(name, this._babylonScene);
671
- node._babylonTransformNode._parentContainer = this._assetContainer;
672
- this._babylonScene._blockEntityCollection = false;
673
- node._primitiveBabylonMeshes = [];
674
- for (var _i = 0, primitives_1 = primitives; _i < primitives_1.length; _i++) {
675
- var primitive = primitives_1[_i];
676
- promises.push(this._loadMeshPrimitiveAsync("".concat(context, "/primitives/").concat(primitive.index), "".concat(name, "_primitive").concat(primitive.index), node, mesh, primitive, function (babylonMesh) {
677
- babylonMesh.parent = node._babylonTransformNode;
678
- node._primitiveBabylonMeshes.push(babylonMesh);
679
- }));
680
- }
681
- }
682
- assign(node._babylonTransformNode);
683
- this.logClose();
684
- return Promise.all(promises).then(function () {
685
- return node._babylonTransformNode;
686
- });
687
- };
688
- /**
689
- * @hidden Define this method to modify the default behavior when loading data for mesh primitives.
690
- * @param context The context when loading the asset
691
- * @param name The mesh name when loading the asset
692
- * @param node The glTF node when loading the asset
693
- * @param mesh The glTF mesh when loading the asset
694
- * @param primitive The glTF mesh primitive property
695
- * @param assign A function called synchronously after parsing the glTF properties
696
- * @returns A promise that resolves with the loaded mesh when the load is complete or null if not handled
697
- */
698
- GLTFLoader.prototype._loadMeshPrimitiveAsync = function (context, name, node, mesh, primitive, assign) {
699
- var _this = this;
700
- var extensionPromise = this._extensionsLoadMeshPrimitiveAsync(context, name, node, mesh, primitive, assign);
701
- if (extensionPromise) {
702
- return extensionPromise;
703
- }
704
- this.logOpen("".concat(context));
705
- var shouldInstance = (this._disableInstancedMesh === 0) && this._parent.createInstances && (node.skin == undefined && !mesh.primitives[0].targets);
706
- var babylonAbstractMesh;
707
- var promise;
708
- if (shouldInstance && primitive._instanceData) {
709
- this._babylonScene._blockEntityCollection = !!this._assetContainer;
710
- babylonAbstractMesh = primitive._instanceData.babylonSourceMesh.createInstance(name);
711
- babylonAbstractMesh._parentContainer = this._assetContainer;
712
- this._babylonScene._blockEntityCollection = false;
713
- promise = primitive._instanceData.promise;
714
- }
715
- else {
716
- var promises = new Array();
717
- this._babylonScene._blockEntityCollection = !!this._assetContainer;
718
- var babylonMesh_1 = new Mesh(name, this._babylonScene);
719
- babylonMesh_1._parentContainer = this._assetContainer;
720
- this._babylonScene._blockEntityCollection = false;
721
- babylonMesh_1.overrideMaterialSideOrientation = this._babylonScene.useRightHandedSystem ? Material.CounterClockWiseSideOrientation : Material.ClockWiseSideOrientation;
722
- this._createMorphTargets(context, node, mesh, primitive, babylonMesh_1);
723
- promises.push(this._loadVertexDataAsync(context, primitive, babylonMesh_1).then(function (babylonGeometry) {
724
- return _this._loadMorphTargetsAsync(context, primitive, babylonMesh_1, babylonGeometry).then(function () {
725
- _this._babylonScene._blockEntityCollection = !!_this._assetContainer;
726
- babylonGeometry.applyToMesh(babylonMesh_1);
727
- babylonGeometry._parentContainer = _this._assetContainer;
728
- _this._babylonScene._blockEntityCollection = false;
729
- });
730
- }));
731
- var babylonDrawMode = GLTFLoader._GetDrawMode(context, primitive.mode);
732
- if (primitive.material == undefined) {
733
- var babylonMaterial = this._defaultBabylonMaterialData[babylonDrawMode];
734
- if (!babylonMaterial) {
735
- babylonMaterial = this._createDefaultMaterial("__GLTFLoader._default", babylonDrawMode);
736
- this._parent.onMaterialLoadedObservable.notifyObservers(babylonMaterial);
737
- this._defaultBabylonMaterialData[babylonDrawMode] = babylonMaterial;
738
- }
739
- babylonMesh_1.material = babylonMaterial;
740
- }
741
- else {
742
- var material = ArrayItem.Get("".concat(context, "/material"), this._gltf.materials, primitive.material);
743
- promises.push(this._loadMaterialAsync("/materials/".concat(material.index), material, babylonMesh_1, babylonDrawMode, function (babylonMaterial) {
744
- babylonMesh_1.material = babylonMaterial;
745
- }));
746
- }
747
- promise = Promise.all(promises);
748
- if (shouldInstance) {
749
- primitive._instanceData = {
750
- babylonSourceMesh: babylonMesh_1,
751
- promise: promise
752
- };
753
- }
754
- babylonAbstractMesh = babylonMesh_1;
755
- }
756
- GLTFLoader.AddPointerMetadata(babylonAbstractMesh, context);
757
- this._parent.onMeshLoadedObservable.notifyObservers(babylonAbstractMesh);
758
- assign(babylonAbstractMesh);
759
- this.logClose();
760
- return promise.then(function () {
761
- return babylonAbstractMesh;
762
- });
763
- };
764
- GLTFLoader.prototype._loadVertexDataAsync = function (context, primitive, babylonMesh) {
765
- var _this = this;
766
- var extensionPromise = this._extensionsLoadVertexDataAsync(context, primitive, babylonMesh);
767
- if (extensionPromise) {
768
- return extensionPromise;
769
- }
770
- var attributes = primitive.attributes;
771
- if (!attributes) {
772
- throw new Error("".concat(context, ": Attributes are missing"));
773
- }
774
- var promises = new Array();
775
- var babylonGeometry = new Geometry(babylonMesh.name, this._babylonScene);
776
- if (primitive.indices == undefined) {
777
- babylonMesh.isUnIndexed = true;
778
- }
779
- else {
780
- var accessor = ArrayItem.Get("".concat(context, "/indices"), this._gltf.accessors, primitive.indices);
781
- promises.push(this._loadIndicesAccessorAsync("/accessors/".concat(accessor.index), accessor).then(function (data) {
782
- babylonGeometry.setIndices(data);
783
- }));
784
- }
785
- var loadAttribute = function (attribute, kind, callback) {
786
- if (attributes[attribute] == undefined) {
787
- return;
788
- }
789
- babylonMesh._delayInfo = babylonMesh._delayInfo || [];
790
- if (babylonMesh._delayInfo.indexOf(kind) === -1) {
791
- babylonMesh._delayInfo.push(kind);
792
- }
793
- var accessor = ArrayItem.Get("".concat(context, "/attributes/").concat(attribute), _this._gltf.accessors, attributes[attribute]);
794
- promises.push(_this._loadVertexAccessorAsync("/accessors/".concat(accessor.index), accessor, kind).then(function (babylonVertexBuffer) {
795
- if (babylonVertexBuffer.getKind() === VertexBuffer.PositionKind && !_this.parent.alwaysComputeBoundingBox && !babylonMesh.skeleton) {
796
- var mmin = accessor.min, mmax = accessor.max;
797
- if (mmin !== undefined && mmax !== undefined) {
798
- if (accessor.normalized && accessor.componentType !== 5126 /* FLOAT */) {
799
- var divider = 1;
800
- switch (accessor.componentType) {
801
- case 5120 /* BYTE */:
802
- divider = 127.0;
803
- break;
804
- case 5121 /* UNSIGNED_BYTE */:
805
- divider = 255.0;
806
- break;
807
- case 5122 /* SHORT */:
808
- divider = 32767.0;
809
- break;
810
- case 5123 /* UNSIGNED_SHORT */:
811
- divider = 65535.0;
812
- break;
813
- }
814
- for (var i = 0; i < 3; ++i) {
815
- mmin[i] = Math.max(mmin[i] / divider, -1.0);
816
- mmax[i] = Math.max(mmax[i] / divider, -1.0);
817
- }
818
- }
819
- var min = TmpVectors.Vector3[0], max = TmpVectors.Vector3[1];
820
- min.copyFromFloats.apply(min, mmin);
821
- max.copyFromFloats.apply(max, mmax);
822
- babylonGeometry._boundingInfo = new BoundingInfo(min, max);
823
- babylonGeometry.useBoundingInfoFromGeometry = true;
824
- }
825
- }
826
- babylonGeometry.setVerticesBuffer(babylonVertexBuffer, accessor.count);
827
- }));
828
- if (kind == VertexBuffer.MatricesIndicesExtraKind) {
829
- babylonMesh.numBoneInfluencers = 8;
830
- }
831
- if (callback) {
832
- callback(accessor);
833
- }
834
- };
835
- loadAttribute("POSITION", VertexBuffer.PositionKind);
836
- loadAttribute("NORMAL", VertexBuffer.NormalKind);
837
- loadAttribute("TANGENT", VertexBuffer.TangentKind);
838
- loadAttribute("TEXCOORD_0", VertexBuffer.UVKind);
839
- loadAttribute("TEXCOORD_1", VertexBuffer.UV2Kind);
840
- loadAttribute("TEXCOORD_2", VertexBuffer.UV3Kind);
841
- loadAttribute("TEXCOORD_3", VertexBuffer.UV4Kind);
842
- loadAttribute("TEXCOORD_4", VertexBuffer.UV5Kind);
843
- loadAttribute("TEXCOORD_5", VertexBuffer.UV6Kind);
844
- loadAttribute("JOINTS_0", VertexBuffer.MatricesIndicesKind);
845
- loadAttribute("WEIGHTS_0", VertexBuffer.MatricesWeightsKind);
846
- loadAttribute("JOINTS_1", VertexBuffer.MatricesIndicesExtraKind);
847
- loadAttribute("WEIGHTS_1", VertexBuffer.MatricesWeightsExtraKind);
848
- loadAttribute("COLOR_0", VertexBuffer.ColorKind, function (accessor) {
849
- if (accessor.type === "VEC4" /* VEC4 */) {
850
- babylonMesh.hasVertexAlpha = true;
851
- }
852
- });
853
- return Promise.all(promises).then(function () {
854
- return babylonGeometry;
855
- });
856
- };
857
- GLTFLoader.prototype._createMorphTargets = function (context, node, mesh, primitive, babylonMesh) {
858
- if (!primitive.targets) {
859
- return;
860
- }
861
- if (node._numMorphTargets == undefined) {
862
- node._numMorphTargets = primitive.targets.length;
863
- }
864
- else if (primitive.targets.length !== node._numMorphTargets) {
865
- throw new Error("".concat(context, ": Primitives do not have the same number of targets"));
866
- }
867
- var targetNames = mesh.extras ? mesh.extras.targetNames : null;
868
- babylonMesh.morphTargetManager = new MorphTargetManager(babylonMesh.getScene());
869
- babylonMesh.morphTargetManager.areUpdatesFrozen = true;
870
- for (var index = 0; index < primitive.targets.length; index++) {
871
- var weight = node.weights ? node.weights[index] : mesh.weights ? mesh.weights[index] : 0;
872
- var name_3 = targetNames ? targetNames[index] : "morphTarget".concat(index);
873
- babylonMesh.morphTargetManager.addTarget(new MorphTarget(name_3, weight, babylonMesh.getScene()));
874
- // TODO: tell the target whether it has positions, normals, tangents
875
- }
876
- };
877
- GLTFLoader.prototype._loadMorphTargetsAsync = function (context, primitive, babylonMesh, babylonGeometry) {
878
- if (!primitive.targets) {
879
- return Promise.resolve();
880
- }
881
- var promises = new Array();
882
- var morphTargetManager = babylonMesh.morphTargetManager;
883
- for (var index = 0; index < morphTargetManager.numTargets; index++) {
884
- var babylonMorphTarget = morphTargetManager.getTarget(index);
885
- promises.push(this._loadMorphTargetVertexDataAsync("".concat(context, "/targets/").concat(index), babylonGeometry, primitive.targets[index], babylonMorphTarget));
886
- }
887
- return Promise.all(promises).then(function () {
888
- morphTargetManager.areUpdatesFrozen = false;
889
- });
890
- };
891
- GLTFLoader.prototype._loadMorphTargetVertexDataAsync = function (context, babylonGeometry, attributes, babylonMorphTarget) {
892
- var _this = this;
893
- var promises = new Array();
894
- var loadAttribute = function (attribute, kind, setData) {
895
- if (attributes[attribute] == undefined) {
896
- return;
897
- }
898
- var babylonVertexBuffer = babylonGeometry.getVertexBuffer(kind);
899
- if (!babylonVertexBuffer) {
900
- return;
901
- }
902
- var accessor = ArrayItem.Get("".concat(context, "/").concat(attribute), _this._gltf.accessors, attributes[attribute]);
903
- promises.push(_this._loadFloatAccessorAsync("/accessors/".concat(accessor.index), accessor).then(function (data) {
904
- setData(babylonVertexBuffer, data);
905
- }));
906
- };
907
- loadAttribute("POSITION", VertexBuffer.PositionKind, function (babylonVertexBuffer, data) {
908
- var positions = new Float32Array(data.length);
909
- babylonVertexBuffer.forEach(data.length, function (value, index) {
910
- positions[index] = data[index] + value;
911
- });
912
- babylonMorphTarget.setPositions(positions);
913
- });
914
- loadAttribute("NORMAL", VertexBuffer.NormalKind, function (babylonVertexBuffer, data) {
915
- var normals = new Float32Array(data.length);
916
- babylonVertexBuffer.forEach(normals.length, function (value, index) {
917
- normals[index] = data[index] + value;
918
- });
919
- babylonMorphTarget.setNormals(normals);
920
- });
921
- loadAttribute("TANGENT", VertexBuffer.TangentKind, function (babylonVertexBuffer, data) {
922
- var tangents = new Float32Array(data.length / 3 * 4);
923
- var dataIndex = 0;
924
- babylonVertexBuffer.forEach(data.length / 3 * 4, function (value, index) {
925
- // Tangent data for morph targets is stored as xyz delta.
926
- // The vertexData.tangent is stored as xyzw.
927
- // So we need to skip every fourth vertexData.tangent.
928
- if (((index + 1) % 4) !== 0) {
929
- tangents[dataIndex] = data[dataIndex] + value;
930
- dataIndex++;
931
- }
932
- });
933
- babylonMorphTarget.setTangents(tangents);
934
- });
935
- return Promise.all(promises).then(function () { });
936
- };
937
- GLTFLoader._LoadTransform = function (node, babylonNode) {
938
- // Ignore the TRS of skinned nodes.
939
- // See https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins (second implementation note)
940
- if (node.skin != undefined) {
941
- return;
942
- }
943
- var position = Vector3.Zero();
944
- var rotation = Quaternion.Identity();
945
- var scaling = Vector3.One();
946
- if (node.matrix) {
947
- var matrix = Matrix.FromArray(node.matrix);
948
- matrix.decompose(scaling, rotation, position);
949
- }
950
- else {
951
- if (node.translation) {
952
- position = Vector3.FromArray(node.translation);
953
- }
954
- if (node.rotation) {
955
- rotation = Quaternion.FromArray(node.rotation);
956
- }
957
- if (node.scale) {
958
- scaling = Vector3.FromArray(node.scale);
959
- }
960
- }
961
- babylonNode.position = position;
962
- babylonNode.rotationQuaternion = rotation;
963
- babylonNode.scaling = scaling;
964
- };
965
- GLTFLoader.prototype._loadSkinAsync = function (context, node, skin, assign) {
966
- var _this = this;
967
- var extensionPromise = this._extensionsLoadSkinAsync(context, node, skin);
968
- if (extensionPromise) {
969
- return extensionPromise;
970
- }
971
- if (skin._data) {
972
- assign(skin._data.babylonSkeleton);
973
- return skin._data.promise;
974
- }
975
- var skeletonId = "skeleton".concat(skin.index);
976
- this._babylonScene._blockEntityCollection = !!this._assetContainer;
977
- var babylonSkeleton = new Skeleton(skin.name || skeletonId, skeletonId, this._babylonScene);
978
- babylonSkeleton._parentContainer = this._assetContainer;
979
- this._babylonScene._blockEntityCollection = false;
980
- this._loadBones(context, skin, babylonSkeleton);
981
- var promise = this._loadSkinInverseBindMatricesDataAsync(context, skin).then(function (inverseBindMatricesData) {
982
- _this._updateBoneMatrices(babylonSkeleton, inverseBindMatricesData);
983
- });
984
- skin._data = {
985
- babylonSkeleton: babylonSkeleton,
986
- promise: promise
987
- };
988
- assign(babylonSkeleton);
989
- return promise;
990
- };
991
- GLTFLoader.prototype._loadBones = function (context, skin, babylonSkeleton) {
992
- if (skin.skeleton == undefined) {
993
- var rootNode = this._findSkeletonRootNode("".concat(context, "/joints"), skin.joints);
994
- if (rootNode) {
995
- skin.skeleton = rootNode.index;
996
- }
997
- else {
998
- Logger.Warn("".concat(context, ": Failed to find common root"));
999
- }
1000
- }
1001
- var babylonBones = {};
1002
- for (var _i = 0, _a = skin.joints; _i < _a.length; _i++) {
1003
- var index = _a[_i];
1004
- var node = ArrayItem.Get("".concat(context, "/joints/").concat(index), this._gltf.nodes, index);
1005
- this._loadBone(node, skin, babylonSkeleton, babylonBones);
1006
- }
1007
- };
1008
- GLTFLoader.prototype._findSkeletonRootNode = function (context, joints) {
1009
- var paths = {};
1010
- for (var _i = 0, joints_1 = joints; _i < joints_1.length; _i++) {
1011
- var index = joints_1[_i];
1012
- var path = new Array();
1013
- var node = ArrayItem.Get("".concat(context, "/").concat(index), this._gltf.nodes, index);
1014
- while (node.index !== -1) {
1015
- path.unshift(node);
1016
- node = node.parent;
1017
- }
1018
- paths[index] = path;
1019
- }
1020
- var rootNode = null;
1021
- for (var i = 0;; ++i) {
1022
- var path = paths[joints[0]];
1023
- if (i >= path.length) {
1024
- return rootNode;
1025
- }
1026
- var node = path[i];
1027
- for (var j = 1; j < joints.length; ++j) {
1028
- path = paths[joints[j]];
1029
- if (i >= path.length || node !== path[i]) {
1030
- return rootNode;
1031
- }
1032
- }
1033
- rootNode = node;
1034
- }
1035
- };
1036
- GLTFLoader.prototype._loadBone = function (node, skin, babylonSkeleton, babylonBones) {
1037
- var babylonBone = babylonBones[node.index];
1038
- if (babylonBone) {
1039
- return babylonBone;
1040
- }
1041
- var parentBabylonBone = null;
1042
- if (node.index !== skin.skeleton) {
1043
- if (node.parent && node.parent.index !== -1) {
1044
- parentBabylonBone = this._loadBone(node.parent, skin, babylonSkeleton, babylonBones);
1045
- }
1046
- else if (skin.skeleton !== undefined) {
1047
- Logger.Warn("/skins/".concat(skin.index, "/skeleton: Skeleton node is not a common root"));
1048
- }
1049
- }
1050
- var boneIndex = skin.joints.indexOf(node.index);
1051
- babylonBone = new Bone(node.name || "joint".concat(node.index), babylonSkeleton, parentBabylonBone, this._getNodeMatrix(node), null, null, boneIndex);
1052
- babylonBones[node.index] = babylonBone;
1053
- // Wait until the scene is loaded to ensure the transform nodes are loaded.
1054
- this._postSceneLoadActions.push(function () {
1055
- // Link the Babylon bone with the corresponding Babylon transform node.
1056
- // A glTF joint is a pointer to a glTF node in the glTF node hierarchy similar to Unity3D.
1057
- babylonBone.linkTransformNode(node._babylonTransformNode);
1058
- });
1059
- return babylonBone;
1060
- };
1061
- GLTFLoader.prototype._loadSkinInverseBindMatricesDataAsync = function (context, skin) {
1062
- if (skin.inverseBindMatrices == undefined) {
1063
- return Promise.resolve(null);
1064
- }
1065
- var accessor = ArrayItem.Get("".concat(context, "/inverseBindMatrices"), this._gltf.accessors, skin.inverseBindMatrices);
1066
- return this._loadFloatAccessorAsync("/accessors/".concat(accessor.index), accessor);
1067
- };
1068
- GLTFLoader.prototype._updateBoneMatrices = function (babylonSkeleton, inverseBindMatricesData) {
1069
- for (var _i = 0, _a = babylonSkeleton.bones; _i < _a.length; _i++) {
1070
- var babylonBone = _a[_i];
1071
- var baseMatrix = Matrix.Identity();
1072
- var boneIndex = babylonBone._index;
1073
- if (inverseBindMatricesData && boneIndex !== -1) {
1074
- Matrix.FromArrayToRef(inverseBindMatricesData, boneIndex * 16, baseMatrix);
1075
- baseMatrix.invertToRef(baseMatrix);
1076
- }
1077
- var babylonParentBone = babylonBone.getParent();
1078
- if (babylonParentBone) {
1079
- baseMatrix.multiplyToRef(babylonParentBone.getInvertedAbsoluteTransform(), baseMatrix);
1080
- }
1081
- babylonBone.updateMatrix(baseMatrix, false, false);
1082
- babylonBone._updateDifferenceMatrix(undefined, false);
1083
- }
1084
- };
1085
- GLTFLoader.prototype._getNodeMatrix = function (node) {
1086
- return node.matrix ?
1087
- Matrix.FromArray(node.matrix) :
1088
- Matrix.Compose(node.scale ? Vector3.FromArray(node.scale) : Vector3.One(), node.rotation ? Quaternion.FromArray(node.rotation) : Quaternion.Identity(), node.translation ? Vector3.FromArray(node.translation) : Vector3.Zero());
1089
- };
1090
- /**
1091
- * Loads a glTF camera.
1092
- * @param context The context when loading the asset
1093
- * @param camera The glTF camera property
1094
- * @param assign A function called synchronously after parsing the glTF properties
1095
- * @returns A promise that resolves with the loaded Babylon camera when the load is complete
1096
- */
1097
- GLTFLoader.prototype.loadCameraAsync = function (context, camera, assign) {
1098
- if (assign === void 0) { assign = function () { }; }
1099
- var extensionPromise = this._extensionsLoadCameraAsync(context, camera, assign);
1100
- if (extensionPromise) {
1101
- return extensionPromise;
1102
- }
1103
- var promises = new Array();
1104
- this.logOpen("".concat(context, " ").concat(camera.name || ""));
1105
- this._babylonScene._blockEntityCollection = !!this._assetContainer;
1106
- var babylonCamera = new FreeCamera(camera.name || "camera".concat(camera.index), Vector3.Zero(), this._babylonScene, false);
1107
- babylonCamera._parentContainer = this._assetContainer;
1108
- this._babylonScene._blockEntityCollection = false;
1109
- babylonCamera.ignoreParentScaling = true;
1110
- babylonCamera.rotation = new Vector3(0, Math.PI, 0);
1111
- switch (camera.type) {
1112
- case "perspective" /* PERSPECTIVE */: {
1113
- var perspective = camera.perspective;
1114
- if (!perspective) {
1115
- throw new Error("".concat(context, ": Camera perspective properties are missing"));
1116
- }
1117
- babylonCamera.fov = perspective.yfov;
1118
- babylonCamera.minZ = perspective.znear;
1119
- babylonCamera.maxZ = perspective.zfar || 0;
1120
- break;
1121
- }
1122
- case "orthographic" /* ORTHOGRAPHIC */: {
1123
- if (!camera.orthographic) {
1124
- throw new Error("".concat(context, ": Camera orthographic properties are missing"));
1125
- }
1126
- babylonCamera.mode = Camera.ORTHOGRAPHIC_CAMERA;
1127
- babylonCamera.orthoLeft = -camera.orthographic.xmag;
1128
- babylonCamera.orthoRight = camera.orthographic.xmag;
1129
- babylonCamera.orthoBottom = -camera.orthographic.ymag;
1130
- babylonCamera.orthoTop = camera.orthographic.ymag;
1131
- babylonCamera.minZ = camera.orthographic.znear;
1132
- babylonCamera.maxZ = camera.orthographic.zfar;
1133
- break;
1134
- }
1135
- default: {
1136
- throw new Error("".concat(context, ": Invalid camera type (").concat(camera.type, ")"));
1137
- }
1138
- }
1139
- GLTFLoader.AddPointerMetadata(babylonCamera, context);
1140
- this._parent.onCameraLoadedObservable.notifyObservers(babylonCamera);
1141
- assign(babylonCamera);
1142
- this.logClose();
1143
- return Promise.all(promises).then(function () {
1144
- return babylonCamera;
1145
- });
1146
- };
1147
- GLTFLoader.prototype._loadAnimationsAsync = function () {
1148
- var animations = this._gltf.animations;
1149
- if (!animations) {
1150
- return Promise.resolve();
1151
- }
1152
- var promises = new Array();
1153
- for (var index = 0; index < animations.length; index++) {
1154
- var animation = animations[index];
1155
- promises.push(this.loadAnimationAsync("/animations/".concat(animation.index), animation).then(function (animationGroup) {
1156
- // Delete the animation group if it ended up not having any animations in it.
1157
- if (animationGroup.targetedAnimations.length === 0) {
1158
- animationGroup.dispose();
1159
- }
1160
- }));
1161
- }
1162
- return Promise.all(promises).then(function () { });
1163
- };
1164
- /**
1165
- * Loads a glTF animation.
1166
- * @param context The context when loading the asset
1167
- * @param animation The glTF animation property
1168
- * @returns A promise that resolves with the loaded Babylon animation group when the load is complete
1169
- */
1170
- GLTFLoader.prototype.loadAnimationAsync = function (context, animation) {
1171
- var promise = this._extensionsLoadAnimationAsync(context, animation);
1172
- if (promise) {
1173
- return promise;
1174
- }
1175
- this._babylonScene._blockEntityCollection = !!this._assetContainer;
1176
- var babylonAnimationGroup = new AnimationGroup(animation.name || "animation".concat(animation.index), this._babylonScene);
1177
- babylonAnimationGroup._parentContainer = this._assetContainer;
1178
- this._babylonScene._blockEntityCollection = false;
1179
- animation._babylonAnimationGroup = babylonAnimationGroup;
1180
- var promises = new Array();
1181
- ArrayItem.Assign(animation.channels);
1182
- ArrayItem.Assign(animation.samplers);
1183
- for (var _i = 0, _a = animation.channels; _i < _a.length; _i++) {
1184
- var channel = _a[_i];
1185
- promises.push(this._loadAnimationChannelAsync("".concat(context, "/channels/").concat(channel.index), context, animation, channel, babylonAnimationGroup));
1186
- }
1187
- return Promise.all(promises).then(function () {
1188
- babylonAnimationGroup.normalize(0);
1189
- return babylonAnimationGroup;
1190
- });
1191
- };
1192
- /**
1193
- * @hidden Loads a glTF animation channel.
1194
- * @param context The context when loading the asset
1195
- * @param animationContext The context of the animation when loading the asset
1196
- * @param animation The glTF animation property
1197
- * @param channel The glTF animation channel property
1198
- * @param babylonAnimationGroup The babylon animation group property
1199
- * @param animationTargetOverride The babylon animation channel target override property. My be null.
1200
- * @returns A void promise when the channel load is complete
1201
- */
1202
- GLTFLoader.prototype._loadAnimationChannelAsync = function (context, animationContext, animation, channel, babylonAnimationGroup, animationTargetOverride) {
1203
- var _this = this;
1204
- if (animationTargetOverride === void 0) { animationTargetOverride = null; }
1205
- if (channel.target.node == undefined) {
1206
- return Promise.resolve();
1207
- }
1208
- var targetNode = ArrayItem.Get("".concat(context, "/target/node"), this._gltf.nodes, channel.target.node);
1209
- // Ignore animations that have no animation targets.
1210
- if ((channel.target.path === "weights" /* WEIGHTS */ && !targetNode._numMorphTargets) ||
1211
- (channel.target.path !== "weights" /* WEIGHTS */ && !targetNode._babylonTransformNode)) {
1212
- return Promise.resolve();
1213
- }
1214
- var sampler = ArrayItem.Get("".concat(context, "/sampler"), animation.samplers, channel.sampler);
1215
- return this._loadAnimationSamplerAsync("".concat(animationContext, "/samplers/").concat(channel.sampler), sampler).then(function (data) {
1216
- var targetPath;
1217
- var animationType;
1218
- switch (channel.target.path) {
1219
- case "translation" /* TRANSLATION */: {
1220
- targetPath = "position";
1221
- animationType = Animation.ANIMATIONTYPE_VECTOR3;
1222
- break;
1223
- }
1224
- case "rotation" /* ROTATION */: {
1225
- targetPath = "rotationQuaternion";
1226
- animationType = Animation.ANIMATIONTYPE_QUATERNION;
1227
- break;
1228
- }
1229
- case "scale" /* SCALE */: {
1230
- targetPath = "scaling";
1231
- animationType = Animation.ANIMATIONTYPE_VECTOR3;
1232
- break;
1233
- }
1234
- case "weights" /* WEIGHTS */: {
1235
- targetPath = "influence";
1236
- animationType = Animation.ANIMATIONTYPE_FLOAT;
1237
- break;
1238
- }
1239
- default: {
1240
- throw new Error("".concat(context, "/target/path: Invalid value (").concat(channel.target.path, ")"));
1241
- }
1242
- }
1243
- var outputBufferOffset = 0;
1244
- var getNextOutputValue;
1245
- switch (targetPath) {
1246
- case "position": {
1247
- getNextOutputValue = function () {
1248
- var value = Vector3.FromArray(data.output, outputBufferOffset);
1249
- outputBufferOffset += 3;
1250
- return value;
1251
- };
1252
- break;
1253
- }
1254
- case "rotationQuaternion": {
1255
- getNextOutputValue = function () {
1256
- var value = Quaternion.FromArray(data.output, outputBufferOffset);
1257
- outputBufferOffset += 4;
1258
- return value;
1259
- };
1260
- break;
1261
- }
1262
- case "scaling": {
1263
- getNextOutputValue = function () {
1264
- var value = Vector3.FromArray(data.output, outputBufferOffset);
1265
- outputBufferOffset += 3;
1266
- return value;
1267
- };
1268
- break;
1269
- }
1270
- case "influence": {
1271
- getNextOutputValue = function () {
1272
- var value = new Array(targetNode._numMorphTargets);
1273
- for (var i = 0; i < targetNode._numMorphTargets; i++) {
1274
- value[i] = data.output[outputBufferOffset++];
1275
- }
1276
- return value;
1277
- };
1278
- break;
1279
- }
1280
- }
1281
- var getNextKey;
1282
- switch (data.interpolation) {
1283
- case "STEP" /* STEP */: {
1284
- getNextKey = function (frameIndex) { return ({
1285
- frame: data.input[frameIndex] * _this.parent.targetFps,
1286
- value: getNextOutputValue(),
1287
- interpolation: AnimationKeyInterpolation.STEP
1288
- }); };
1289
- break;
1290
- }
1291
- case "LINEAR" /* LINEAR */: {
1292
- getNextKey = function (frameIndex) { return ({
1293
- frame: data.input[frameIndex] * _this.parent.targetFps,
1294
- value: getNextOutputValue()
1295
- }); };
1296
- break;
1297
- }
1298
- case "CUBICSPLINE" /* CUBICSPLINE */: {
1299
- getNextKey = function (frameIndex) { return ({
1300
- frame: data.input[frameIndex] * _this.parent.targetFps,
1301
- inTangent: getNextOutputValue(),
1302
- value: getNextOutputValue(),
1303
- outTangent: getNextOutputValue()
1304
- }); };
1305
- break;
1306
- }
1307
- }
1308
- var keys = new Array(data.input.length);
1309
- for (var frameIndex = 0; frameIndex < data.input.length; frameIndex++) {
1310
- keys[frameIndex] = getNextKey(frameIndex);
1311
- }
1312
- if (targetPath === "influence") {
1313
- var _loop_2 = function (targetIndex) {
1314
- var animationName = "".concat(babylonAnimationGroup.name, "_channel").concat(babylonAnimationGroup.targetedAnimations.length);
1315
- var babylonAnimation = new Animation(animationName, targetPath, _this.parent.targetFps, animationType);
1316
- babylonAnimation.setKeys(keys.map(function (key) { return ({
1317
- frame: key.frame,
1318
- inTangent: key.inTangent ? key.inTangent[targetIndex] : undefined,
1319
- value: key.value[targetIndex],
1320
- outTangent: key.outTangent ? key.outTangent[targetIndex] : undefined
1321
- }); }));
1322
- _this._forEachPrimitive(targetNode, function (babylonAbstractMesh) {
1323
- var babylonMesh = babylonAbstractMesh;
1324
- var morphTarget = babylonMesh.morphTargetManager.getTarget(targetIndex);
1325
- var babylonAnimationClone = babylonAnimation.clone();
1326
- morphTarget.animations.push(babylonAnimationClone);
1327
- babylonAnimationGroup.addTargetedAnimation(babylonAnimationClone, morphTarget);
1328
- });
1329
- };
1330
- for (var targetIndex = 0; targetIndex < targetNode._numMorphTargets; targetIndex++) {
1331
- _loop_2(targetIndex);
1332
- }
1333
- }
1334
- else {
1335
- var animationName = "".concat(babylonAnimationGroup.name, "_channel").concat(babylonAnimationGroup.targetedAnimations.length);
1336
- var babylonAnimation = new Animation(animationName, targetPath, _this.parent.targetFps, animationType);
1337
- babylonAnimation.setKeys(keys);
1338
- if (animationTargetOverride != null && animationTargetOverride.animations != null) {
1339
- animationTargetOverride.animations.push(babylonAnimation);
1340
- babylonAnimationGroup.addTargetedAnimation(babylonAnimation, animationTargetOverride);
1341
- }
1342
- else {
1343
- targetNode._babylonTransformNode.animations.push(babylonAnimation);
1344
- babylonAnimationGroup.addTargetedAnimation(babylonAnimation, targetNode._babylonTransformNode);
1345
- }
1346
- }
1347
- });
1348
- };
1349
- GLTFLoader.prototype._loadAnimationSamplerAsync = function (context, sampler) {
1350
- if (sampler._data) {
1351
- return sampler._data;
1352
- }
1353
- var interpolation = sampler.interpolation || "LINEAR" /* LINEAR */;
1354
- switch (interpolation) {
1355
- case "STEP" /* STEP */:
1356
- case "LINEAR" /* LINEAR */:
1357
- case "CUBICSPLINE" /* CUBICSPLINE */: {
1358
- break;
1359
- }
1360
- default: {
1361
- throw new Error("".concat(context, "/interpolation: Invalid value (").concat(sampler.interpolation, ")"));
1362
- }
1363
- }
1364
- var inputAccessor = ArrayItem.Get("".concat(context, "/input"), this._gltf.accessors, sampler.input);
1365
- var outputAccessor = ArrayItem.Get("".concat(context, "/output"), this._gltf.accessors, sampler.output);
1366
- sampler._data = Promise.all([
1367
- this._loadFloatAccessorAsync("/accessors/".concat(inputAccessor.index), inputAccessor),
1368
- this._loadFloatAccessorAsync("/accessors/".concat(outputAccessor.index), outputAccessor)
1369
- ]).then(function (_a) {
1370
- var inputData = _a[0], outputData = _a[1];
1371
- return {
1372
- input: inputData,
1373
- interpolation: interpolation,
1374
- output: outputData,
1375
- };
1376
- });
1377
- return sampler._data;
1378
- };
1379
- /**
1380
- * Loads a glTF buffer.
1381
- * @param context The context when loading the asset
1382
- * @param buffer The glTF buffer property
1383
- * @param byteOffset The byte offset to use
1384
- * @param byteLength The byte length to use
1385
- * @returns A promise that resolves with the loaded data when the load is complete
1386
- */
1387
- GLTFLoader.prototype.loadBufferAsync = function (context, buffer, byteOffset, byteLength) {
1388
- var extensionPromise = this._extensionsLoadBufferAsync(context, buffer, byteOffset, byteLength);
1389
- if (extensionPromise) {
1390
- return extensionPromise;
1391
- }
1392
- if (!buffer._data) {
1393
- if (buffer.uri) {
1394
- buffer._data = this.loadUriAsync("".concat(context, "/uri"), buffer, buffer.uri);
1395
- }
1396
- else {
1397
- if (!this._bin) {
1398
- throw new Error("".concat(context, ": Uri is missing or the binary glTF is missing its binary chunk"));
1399
- }
1400
- buffer._data = this._bin.readAsync(0, buffer.byteLength);
1401
- }
1402
- }
1403
- return buffer._data.then(function (data) {
1404
- try {
1405
- return new Uint8Array(data.buffer, data.byteOffset + byteOffset, byteLength);
1406
- }
1407
- catch (e) {
1408
- throw new Error("".concat(context, ": ").concat(e.message));
1409
- }
1410
- });
1411
- };
1412
- /**
1413
- * Loads a glTF buffer view.
1414
- * @param context The context when loading the asset
1415
- * @param bufferView The glTF buffer view property
1416
- * @returns A promise that resolves with the loaded data when the load is complete
1417
- */
1418
- GLTFLoader.prototype.loadBufferViewAsync = function (context, bufferView) {
1419
- var extensionPromise = this._extensionsLoadBufferViewAsync(context, bufferView);
1420
- if (extensionPromise) {
1421
- return extensionPromise;
1422
- }
1423
- if (bufferView._data) {
1424
- return bufferView._data;
1425
- }
1426
- var buffer = ArrayItem.Get("".concat(context, "/buffer"), this._gltf.buffers, bufferView.buffer);
1427
- bufferView._data = this.loadBufferAsync("/buffers/".concat(buffer.index), buffer, (bufferView.byteOffset || 0), bufferView.byteLength);
1428
- return bufferView._data;
1429
- };
1430
- GLTFLoader.prototype._loadAccessorAsync = function (context, accessor, constructor) {
1431
- var _this = this;
1432
- if (accessor._data) {
1433
- return accessor._data;
1434
- }
1435
- var numComponents = GLTFLoader._GetNumComponents(context, accessor.type);
1436
- var byteStride = numComponents * VertexBuffer.GetTypeByteLength(accessor.componentType);
1437
- var length = numComponents * accessor.count;
1438
- if (accessor.bufferView == undefined) {
1439
- accessor._data = Promise.resolve(new constructor(length));
1440
- }
1441
- else {
1442
- var bufferView_1 = ArrayItem.Get("".concat(context, "/bufferView"), this._gltf.bufferViews, accessor.bufferView);
1443
- accessor._data = this.loadBufferViewAsync("/bufferViews/".concat(bufferView_1.index), bufferView_1).then(function (data) {
1444
- if (accessor.componentType === 5126 /* FLOAT */ && !accessor.normalized && (!bufferView_1.byteStride || bufferView_1.byteStride === byteStride)) {
1445
- return GLTFLoader._GetTypedArray(context, accessor.componentType, data, accessor.byteOffset, length);
1446
- }
1447
- else {
1448
- var typedArray_1 = new constructor(length);
1449
- VertexBuffer.ForEach(data, accessor.byteOffset || 0, bufferView_1.byteStride || byteStride, numComponents, accessor.componentType, typedArray_1.length, accessor.normalized || false, function (value, index) {
1450
- typedArray_1[index] = value;
1451
- });
1452
- return typedArray_1;
1453
- }
1454
- });
1455
- }
1456
- if (accessor.sparse) {
1457
- var sparse_1 = accessor.sparse;
1458
- accessor._data = accessor._data.then(function (data) {
1459
- var typedArray = data;
1460
- var indicesBufferView = ArrayItem.Get("".concat(context, "/sparse/indices/bufferView"), _this._gltf.bufferViews, sparse_1.indices.bufferView);
1461
- var valuesBufferView = ArrayItem.Get("".concat(context, "/sparse/values/bufferView"), _this._gltf.bufferViews, sparse_1.values.bufferView);
1462
- return Promise.all([
1463
- _this.loadBufferViewAsync("/bufferViews/".concat(indicesBufferView.index), indicesBufferView),
1464
- _this.loadBufferViewAsync("/bufferViews/".concat(valuesBufferView.index), valuesBufferView)
1465
- ]).then(function (_a) {
1466
- var indicesData = _a[0], valuesData = _a[1];
1467
- var indices = GLTFLoader._GetTypedArray("".concat(context, "/sparse/indices"), sparse_1.indices.componentType, indicesData, sparse_1.indices.byteOffset, sparse_1.count);
1468
- var sparseLength = numComponents * sparse_1.count;
1469
- var values;
1470
- if (accessor.componentType === 5126 /* FLOAT */ && !accessor.normalized) {
1471
- values = GLTFLoader._GetTypedArray("".concat(context, "/sparse/values"), accessor.componentType, valuesData, sparse_1.values.byteOffset, sparseLength);
1472
- }
1473
- else {
1474
- var sparseData = GLTFLoader._GetTypedArray("".concat(context, "/sparse/values"), accessor.componentType, valuesData, sparse_1.values.byteOffset, sparseLength);
1475
- values = new constructor(sparseLength);
1476
- VertexBuffer.ForEach(sparseData, 0, byteStride, numComponents, accessor.componentType, values.length, accessor.normalized || false, function (value, index) {
1477
- values[index] = value;
1478
- });
1479
- }
1480
- var valuesIndex = 0;
1481
- for (var indicesIndex = 0; indicesIndex < indices.length; indicesIndex++) {
1482
- var dataIndex = indices[indicesIndex] * numComponents;
1483
- for (var componentIndex = 0; componentIndex < numComponents; componentIndex++) {
1484
- typedArray[dataIndex++] = values[valuesIndex++];
1485
- }
1486
- }
1487
- return typedArray;
1488
- });
1489
- });
1490
- }
1491
- return accessor._data;
1492
- };
1493
- /** @hidden */
1494
- GLTFLoader.prototype._loadFloatAccessorAsync = function (context, accessor) {
1495
- return this._loadAccessorAsync(context, accessor, Float32Array);
1496
- };
1497
- GLTFLoader.prototype._loadIndicesAccessorAsync = function (context, accessor) {
1498
- if (accessor.type !== "SCALAR" /* SCALAR */) {
1499
- throw new Error("".concat(context, "/type: Invalid value ").concat(accessor.type));
1500
- }
1501
- if (accessor.componentType !== 5121 /* UNSIGNED_BYTE */ &&
1502
- accessor.componentType !== 5123 /* UNSIGNED_SHORT */ &&
1503
- accessor.componentType !== 5125 /* UNSIGNED_INT */) {
1504
- throw new Error("".concat(context, "/componentType: Invalid value ").concat(accessor.componentType));
1505
- }
1506
- if (accessor._data) {
1507
- return accessor._data;
1508
- }
1509
- if (accessor.sparse) {
1510
- var constructor = GLTFLoader._GetTypedArrayConstructor("".concat(context, "/componentType"), accessor.componentType);
1511
- accessor._data = this._loadAccessorAsync(context, accessor, constructor);
1512
- }
1513
- else {
1514
- var bufferView = ArrayItem.Get("".concat(context, "/bufferView"), this._gltf.bufferViews, accessor.bufferView);
1515
- accessor._data = this.loadBufferViewAsync("/bufferViews/".concat(bufferView.index), bufferView).then(function (data) {
1516
- return GLTFLoader._GetTypedArray(context, accessor.componentType, data, accessor.byteOffset, accessor.count);
1517
- });
1518
- }
1519
- return accessor._data;
1520
- };
1521
- GLTFLoader.prototype._loadVertexBufferViewAsync = function (bufferView, kind) {
1522
- var _this = this;
1523
- if (bufferView._babylonBuffer) {
1524
- return bufferView._babylonBuffer;
1525
- }
1526
- bufferView._babylonBuffer = this.loadBufferViewAsync("/bufferViews/".concat(bufferView.index), bufferView).then(function (data) {
1527
- return new Buffer(_this._babylonScene.getEngine(), data, false);
1528
- });
1529
- return bufferView._babylonBuffer;
1530
- };
1531
- GLTFLoader.prototype._loadVertexAccessorAsync = function (context, accessor, kind) {
1532
- var _this = this;
1533
- var _a;
1534
- if ((_a = accessor._babylonVertexBuffer) === null || _a === void 0 ? void 0 : _a[kind]) {
1535
- return accessor._babylonVertexBuffer[kind];
1536
- }
1537
- if (!accessor._babylonVertexBuffer) {
1538
- accessor._babylonVertexBuffer = {};
1539
- }
1540
- if (accessor.sparse) {
1541
- accessor._babylonVertexBuffer[kind] = this._loadFloatAccessorAsync(context, accessor).then(function (data) {
1542
- return new VertexBuffer(_this._babylonScene.getEngine(), data, kind, false);
1543
- });
1544
- }
1545
- // Load joint indices as a float array since the shaders expect float data but glTF uses unsigned byte/short.
1546
- // This prevents certain platforms (e.g. D3D) from having to convert the data to float on the fly.
1547
- else if (kind === VertexBuffer.MatricesIndicesKind || kind === VertexBuffer.MatricesIndicesExtraKind) {
1548
- accessor._babylonVertexBuffer[kind] = this._loadFloatAccessorAsync(context, accessor).then(function (data) {
1549
- return new VertexBuffer(_this._babylonScene.getEngine(), data, kind, false);
1550
- });
1551
- }
1552
- else {
1553
- var bufferView_2 = ArrayItem.Get("".concat(context, "/bufferView"), this._gltf.bufferViews, accessor.bufferView);
1554
- accessor._babylonVertexBuffer[kind] = this._loadVertexBufferViewAsync(bufferView_2, kind).then(function (babylonBuffer) {
1555
- var size = GLTFLoader._GetNumComponents(context, accessor.type);
1556
- return new VertexBuffer(_this._babylonScene.getEngine(), babylonBuffer, kind, false, false, bufferView_2.byteStride, false, accessor.byteOffset, size, accessor.componentType, accessor.normalized, true, 1, true);
1557
- });
1558
- }
1559
- return accessor._babylonVertexBuffer[kind];
1560
- };
1561
- GLTFLoader.prototype._loadMaterialMetallicRoughnessPropertiesAsync = function (context, properties, babylonMaterial) {
1562
- if (!(babylonMaterial instanceof PBRMaterial)) {
1563
- throw new Error("".concat(context, ": Material type not supported"));
1564
- }
1565
- var promises = new Array();
1566
- if (properties) {
1567
- if (properties.baseColorFactor) {
1568
- babylonMaterial.albedoColor = Color3.FromArray(properties.baseColorFactor);
1569
- babylonMaterial.alpha = properties.baseColorFactor[3];
1570
- }
1571
- else {
1572
- babylonMaterial.albedoColor = Color3.White();
1573
- }
1574
- babylonMaterial.metallic = properties.metallicFactor == undefined ? 1 : properties.metallicFactor;
1575
- babylonMaterial.roughness = properties.roughnessFactor == undefined ? 1 : properties.roughnessFactor;
1576
- if (properties.baseColorTexture) {
1577
- promises.push(this.loadTextureInfoAsync("".concat(context, "/baseColorTexture"), properties.baseColorTexture, function (texture) {
1578
- texture.name = "".concat(babylonMaterial.name, " (Base Color)");
1579
- babylonMaterial.albedoTexture = texture;
1580
- }));
1581
- }
1582
- if (properties.metallicRoughnessTexture) {
1583
- properties.metallicRoughnessTexture.nonColorData = true;
1584
- promises.push(this.loadTextureInfoAsync("".concat(context, "/metallicRoughnessTexture"), properties.metallicRoughnessTexture, function (texture) {
1585
- texture.name = "".concat(babylonMaterial.name, " (Metallic Roughness)");
1586
- babylonMaterial.metallicTexture = texture;
1587
- }));
1588
- babylonMaterial.useMetallnessFromMetallicTextureBlue = true;
1589
- babylonMaterial.useRoughnessFromMetallicTextureGreen = true;
1590
- babylonMaterial.useRoughnessFromMetallicTextureAlpha = false;
1591
- }
1592
- }
1593
- return Promise.all(promises).then(function () { });
1594
- };
1595
- /** @hidden */
1596
- GLTFLoader.prototype._loadMaterialAsync = function (context, material, babylonMesh, babylonDrawMode, assign) {
1597
- if (assign === void 0) { assign = function () { }; }
1598
- var extensionPromise = this._extensionsLoadMaterialAsync(context, material, babylonMesh, babylonDrawMode, assign);
1599
- if (extensionPromise) {
1600
- return extensionPromise;
1601
- }
1602
- material._data = material._data || {};
1603
- var babylonData = material._data[babylonDrawMode];
1604
- if (!babylonData) {
1605
- this.logOpen("".concat(context, " ").concat(material.name || ""));
1606
- var babylonMaterial = this.createMaterial(context, material, babylonDrawMode);
1607
- babylonData = {
1608
- babylonMaterial: babylonMaterial,
1609
- babylonMeshes: [],
1610
- promise: this.loadMaterialPropertiesAsync(context, material, babylonMaterial)
1611
- };
1612
- material._data[babylonDrawMode] = babylonData;
1613
- GLTFLoader.AddPointerMetadata(babylonMaterial, context);
1614
- this._parent.onMaterialLoadedObservable.notifyObservers(babylonMaterial);
1615
- this.logClose();
1616
- }
1617
- if (babylonMesh) {
1618
- babylonData.babylonMeshes.push(babylonMesh);
1619
- babylonMesh.onDisposeObservable.addOnce(function () {
1620
- var index = babylonData.babylonMeshes.indexOf(babylonMesh);
1621
- if (index !== -1) {
1622
- babylonData.babylonMeshes.splice(index, 1);
1623
- }
1624
- });
1625
- }
1626
- assign(babylonData.babylonMaterial);
1627
- return babylonData.promise.then(function () {
1628
- return babylonData.babylonMaterial;
1629
- });
1630
- };
1631
- GLTFLoader.prototype._createDefaultMaterial = function (name, babylonDrawMode) {
1632
- this._babylonScene._blockEntityCollection = !!this._assetContainer;
1633
- var babylonMaterial = new PBRMaterial(name, this._babylonScene);
1634
- babylonMaterial._parentContainer = this._assetContainer;
1635
- this._babylonScene._blockEntityCollection = false;
1636
- // Moved to mesh so user can change materials on gltf meshes: babylonMaterial.sideOrientation = this._babylonScene.useRightHandedSystem ? Material.CounterClockWiseSideOrientation : Material.ClockWiseSideOrientation;
1637
- babylonMaterial.fillMode = babylonDrawMode;
1638
- babylonMaterial.enableSpecularAntiAliasing = true;
1639
- babylonMaterial.useRadianceOverAlpha = !this._parent.transparencyAsCoverage;
1640
- babylonMaterial.useSpecularOverAlpha = !this._parent.transparencyAsCoverage;
1641
- babylonMaterial.transparencyMode = PBRMaterial.PBRMATERIAL_OPAQUE;
1642
- babylonMaterial.metallic = 1;
1643
- babylonMaterial.roughness = 1;
1644
- return babylonMaterial;
1645
- };
1646
- /**
1647
- * Creates a Babylon material from a glTF material.
1648
- * @param context The context when loading the asset
1649
- * @param material The glTF material property
1650
- * @param babylonDrawMode The draw mode for the Babylon material
1651
- * @returns The Babylon material
1652
- */
1653
- GLTFLoader.prototype.createMaterial = function (context, material, babylonDrawMode) {
1654
- var extensionPromise = this._extensionsCreateMaterial(context, material, babylonDrawMode);
1655
- if (extensionPromise) {
1656
- return extensionPromise;
1657
- }
1658
- var name = material.name || "material".concat(material.index);
1659
- var babylonMaterial = this._createDefaultMaterial(name, babylonDrawMode);
1660
- return babylonMaterial;
1661
- };
1662
- /**
1663
- * Loads properties from a glTF material into a Babylon material.
1664
- * @param context The context when loading the asset
1665
- * @param material The glTF material property
1666
- * @param babylonMaterial The Babylon material
1667
- * @returns A promise that resolves when the load is complete
1668
- */
1669
- GLTFLoader.prototype.loadMaterialPropertiesAsync = function (context, material, babylonMaterial) {
1670
- var extensionPromise = this._extensionsLoadMaterialPropertiesAsync(context, material, babylonMaterial);
1671
- if (extensionPromise) {
1672
- return extensionPromise;
1673
- }
1674
- var promises = new Array();
1675
- promises.push(this.loadMaterialBasePropertiesAsync(context, material, babylonMaterial));
1676
- if (material.pbrMetallicRoughness) {
1677
- promises.push(this._loadMaterialMetallicRoughnessPropertiesAsync("".concat(context, "/pbrMetallicRoughness"), material.pbrMetallicRoughness, babylonMaterial));
1678
- }
1679
- this.loadMaterialAlphaProperties(context, material, babylonMaterial);
1680
- return Promise.all(promises).then(function () { });
1681
- };
1682
- /**
1683
- * Loads the normal, occlusion, and emissive properties from a glTF material into a Babylon material.
1684
- * @param context The context when loading the asset
1685
- * @param material The glTF material property
1686
- * @param babylonMaterial The Babylon material
1687
- * @returns A promise that resolves when the load is complete
1688
- */
1689
- GLTFLoader.prototype.loadMaterialBasePropertiesAsync = function (context, material, babylonMaterial) {
1690
- if (!(babylonMaterial instanceof PBRMaterial)) {
1691
- throw new Error("".concat(context, ": Material type not supported"));
1692
- }
1693
- var promises = new Array();
1694
- babylonMaterial.emissiveColor = material.emissiveFactor ? Color3.FromArray(material.emissiveFactor) : new Color3(0, 0, 0);
1695
- if (material.doubleSided) {
1696
- babylonMaterial.backFaceCulling = false;
1697
- babylonMaterial.twoSidedLighting = true;
1698
- }
1699
- if (material.normalTexture) {
1700
- material.normalTexture.nonColorData = true;
1701
- promises.push(this.loadTextureInfoAsync("".concat(context, "/normalTexture"), material.normalTexture, function (texture) {
1702
- texture.name = "".concat(babylonMaterial.name, " (Normal)");
1703
- babylonMaterial.bumpTexture = texture;
1704
- }));
1705
- babylonMaterial.invertNormalMapX = !this._babylonScene.useRightHandedSystem;
1706
- babylonMaterial.invertNormalMapY = this._babylonScene.useRightHandedSystem;
1707
- if (material.normalTexture.scale != undefined) {
1708
- babylonMaterial.bumpTexture.level = material.normalTexture.scale;
1709
- }
1710
- babylonMaterial.forceIrradianceInFragment = true;
1711
- }
1712
- if (material.occlusionTexture) {
1713
- material.occlusionTexture.nonColorData = true;
1714
- promises.push(this.loadTextureInfoAsync("".concat(context, "/occlusionTexture"), material.occlusionTexture, function (texture) {
1715
- texture.name = "".concat(babylonMaterial.name, " (Occlusion)");
1716
- babylonMaterial.ambientTexture = texture;
1717
- }));
1718
- babylonMaterial.useAmbientInGrayScale = true;
1719
- if (material.occlusionTexture.strength != undefined) {
1720
- babylonMaterial.ambientTextureStrength = material.occlusionTexture.strength;
1721
- }
1722
- }
1723
- if (material.emissiveTexture) {
1724
- promises.push(this.loadTextureInfoAsync("".concat(context, "/emissiveTexture"), material.emissiveTexture, function (texture) {
1725
- texture.name = "".concat(babylonMaterial.name, " (Emissive)");
1726
- babylonMaterial.emissiveTexture = texture;
1727
- }));
1728
- }
1729
- return Promise.all(promises).then(function () { });
1730
- };
1731
- /**
1732
- * Loads the alpha properties from a glTF material into a Babylon material.
1733
- * Must be called after the setting the albedo texture of the Babylon material when the material has an albedo texture.
1734
- * @param context The context when loading the asset
1735
- * @param material The glTF material property
1736
- * @param babylonMaterial The Babylon material
1737
- */
1738
- GLTFLoader.prototype.loadMaterialAlphaProperties = function (context, material, babylonMaterial) {
1739
- if (!(babylonMaterial instanceof PBRMaterial)) {
1740
- throw new Error("".concat(context, ": Material type not supported"));
1741
- }
1742
- var alphaMode = material.alphaMode || "OPAQUE" /* OPAQUE */;
1743
- switch (alphaMode) {
1744
- case "OPAQUE" /* OPAQUE */: {
1745
- babylonMaterial.transparencyMode = PBRMaterial.PBRMATERIAL_OPAQUE;
1746
- break;
1747
- }
1748
- case "MASK" /* MASK */: {
1749
- babylonMaterial.transparencyMode = PBRMaterial.PBRMATERIAL_ALPHATEST;
1750
- babylonMaterial.alphaCutOff = (material.alphaCutoff == undefined ? 0.5 : material.alphaCutoff);
1751
- if (babylonMaterial.albedoTexture) {
1752
- babylonMaterial.albedoTexture.hasAlpha = true;
1753
- }
1754
- break;
1755
- }
1756
- case "BLEND" /* BLEND */: {
1757
- babylonMaterial.transparencyMode = PBRMaterial.PBRMATERIAL_ALPHABLEND;
1758
- if (babylonMaterial.albedoTexture) {
1759
- babylonMaterial.albedoTexture.hasAlpha = true;
1760
- babylonMaterial.useAlphaFromAlbedoTexture = true;
1761
- }
1762
- break;
1763
- }
1764
- default: {
1765
- throw new Error("".concat(context, "/alphaMode: Invalid value (").concat(material.alphaMode, ")"));
1766
- }
1767
- }
1768
- };
1769
- /**
1770
- * Loads a glTF texture info.
1771
- * @param context The context when loading the asset
1772
- * @param textureInfo The glTF texture info property
1773
- * @param assign A function called synchronously after parsing the glTF properties
1774
- * @returns A promise that resolves with the loaded Babylon texture when the load is complete
1775
- */
1776
- GLTFLoader.prototype.loadTextureInfoAsync = function (context, textureInfo, assign) {
1777
- var _this = this;
1778
- if (assign === void 0) { assign = function () { }; }
1779
- var extensionPromise = this._extensionsLoadTextureInfoAsync(context, textureInfo, assign);
1780
- if (extensionPromise) {
1781
- return extensionPromise;
1782
- }
1783
- this.logOpen("".concat(context));
1784
- if (textureInfo.texCoord >= 6) {
1785
- throw new Error("".concat(context, "/texCoord: Invalid value (").concat(textureInfo.texCoord, ")"));
1786
- }
1787
- var texture = ArrayItem.Get("".concat(context, "/index"), this._gltf.textures, textureInfo.index);
1788
- texture._textureInfo = textureInfo;
1789
- var promise = this._loadTextureAsync("/textures/".concat(textureInfo.index), texture, function (babylonTexture) {
1790
- babylonTexture.coordinatesIndex = textureInfo.texCoord || 0;
1791
- GLTFLoader.AddPointerMetadata(babylonTexture, context);
1792
- _this._parent.onTextureLoadedObservable.notifyObservers(babylonTexture);
1793
- assign(babylonTexture);
1794
- });
1795
- this.logClose();
1796
- return promise;
1797
- };
1798
- /** @hidden */
1799
- GLTFLoader.prototype._loadTextureAsync = function (context, texture, assign) {
1800
- if (assign === void 0) { assign = function () { }; }
1801
- var extensionPromise = this._extensionsLoadTextureAsync(context, texture, assign);
1802
- if (extensionPromise) {
1803
- return extensionPromise;
1804
- }
1805
- this.logOpen("".concat(context, " ").concat(texture.name || ""));
1806
- var sampler = (texture.sampler == undefined ? GLTFLoader.DefaultSampler : ArrayItem.Get("".concat(context, "/sampler"), this._gltf.samplers, texture.sampler));
1807
- var image = ArrayItem.Get("".concat(context, "/source"), this._gltf.images, texture.source);
1808
- var promise = this._createTextureAsync(context, sampler, image, assign, undefined, !texture._textureInfo.nonColorData);
1809
- this.logClose();
1810
- return promise;
1811
- };
1812
- /** @hidden */
1813
- GLTFLoader.prototype._createTextureAsync = function (context, sampler, image, assign, textureLoaderOptions, useSRGBBuffer) {
1814
- var _this = this;
1815
- if (assign === void 0) { assign = function () { }; }
1816
- var samplerData = this._loadSampler("/samplers/".concat(sampler.index), sampler);
1817
- var promises = new Array();
1818
- var deferred = new Deferred();
1819
- this._babylonScene._blockEntityCollection = !!this._assetContainer;
1820
- var textureCreationOptions = {
1821
- noMipmap: samplerData.noMipMaps,
1822
- invertY: false,
1823
- samplingMode: samplerData.samplingMode,
1824
- onLoad: function () {
1825
- if (!_this._disposed) {
1826
- deferred.resolve();
1827
- }
1828
- },
1829
- onError: function (message, exception) {
1830
- if (!_this._disposed) {
1831
- deferred.reject(new Error("".concat(context, ": ").concat((exception && exception.message) ? exception.message : message || "Failed to load texture")));
1832
- }
1833
- },
1834
- mimeType: image.mimeType,
1835
- loaderOptions: textureLoaderOptions,
1836
- useSRGBBuffer: !!useSRGBBuffer && this._parent.useSRGBBuffers,
1837
- };
1838
- var babylonTexture = new Texture(null, this._babylonScene, textureCreationOptions);
1839
- babylonTexture._parentContainer = this._assetContainer;
1840
- this._babylonScene._blockEntityCollection = false;
1841
- promises.push(deferred.promise);
1842
- promises.push(this.loadImageAsync("/images/".concat(image.index), image).then(function (data) {
1843
- var name = image.uri || "".concat(_this._fileName, "#image").concat(image.index);
1844
- var dataUrl = "data:".concat(_this._uniqueRootUrl).concat(name);
1845
- babylonTexture.updateURL(dataUrl, data);
1846
- }));
1847
- babylonTexture.wrapU = samplerData.wrapU;
1848
- babylonTexture.wrapV = samplerData.wrapV;
1849
- assign(babylonTexture);
1850
- return Promise.all(promises).then(function () {
1851
- return babylonTexture;
1852
- });
1853
- };
1854
- GLTFLoader.prototype._loadSampler = function (context, sampler) {
1855
- if (!sampler._data) {
1856
- sampler._data = {
1857
- noMipMaps: (sampler.minFilter === 9728 /* NEAREST */ || sampler.minFilter === 9729 /* LINEAR */),
1858
- samplingMode: GLTFLoader._GetTextureSamplingMode(context, sampler),
1859
- wrapU: GLTFLoader._GetTextureWrapMode("".concat(context, "/wrapS"), sampler.wrapS),
1860
- wrapV: GLTFLoader._GetTextureWrapMode("".concat(context, "/wrapT"), sampler.wrapT)
1861
- };
1862
- }
1863
- return sampler._data;
1864
- };
1865
- /**
1866
- * Loads a glTF image.
1867
- * @param context The context when loading the asset
1868
- * @param image The glTF image property
1869
- * @returns A promise that resolves with the loaded data when the load is complete
1870
- */
1871
- GLTFLoader.prototype.loadImageAsync = function (context, image) {
1872
- if (!image._data) {
1873
- this.logOpen("".concat(context, " ").concat(image.name || ""));
1874
- if (image.uri) {
1875
- image._data = this.loadUriAsync("".concat(context, "/uri"), image, image.uri);
1876
- }
1877
- else {
1878
- var bufferView = ArrayItem.Get("".concat(context, "/bufferView"), this._gltf.bufferViews, image.bufferView);
1879
- image._data = this.loadBufferViewAsync("/bufferViews/".concat(bufferView.index), bufferView);
1880
- }
1881
- this.logClose();
1882
- }
1883
- return image._data;
1884
- };
1885
- /**
1886
- * Loads a glTF uri.
1887
- * @param context The context when loading the asset
1888
- * @param property The glTF property associated with the uri
1889
- * @param uri The base64 or relative uri
1890
- * @returns A promise that resolves with the loaded data when the load is complete
1891
- */
1892
- GLTFLoader.prototype.loadUriAsync = function (context, property, uri) {
1893
- var _this = this;
1894
- var extensionPromise = this._extensionsLoadUriAsync(context, property, uri);
1895
- if (extensionPromise) {
1896
- return extensionPromise;
1897
- }
1898
- if (!GLTFLoader._ValidateUri(uri)) {
1899
- throw new Error("".concat(context, ": '").concat(uri, "' is invalid"));
1900
- }
1901
- if (IsBase64DataUrl(uri)) {
1902
- var data = new Uint8Array(DecodeBase64UrlToBinary(uri));
1903
- this.log("".concat(context, ": Decoded ").concat(uri.substr(0, 64), "... (").concat(data.length, " bytes)"));
1904
- return Promise.resolve(data);
1905
- }
1906
- this.log("".concat(context, ": Loading ").concat(uri));
1907
- return this._parent.preprocessUrlAsync(this._rootUrl + uri).then(function (url) {
1908
- return new Promise(function (resolve, reject) {
1909
- _this._parent._loadFile(_this._babylonScene, url, function (data) {
1910
- if (!_this._disposed) {
1911
- _this.log("".concat(context, ": Loaded ").concat(uri, " (").concat(data.byteLength, " bytes)"));
1912
- resolve(new Uint8Array(data));
1913
- }
1914
- }, true, function (request) {
1915
- reject(new LoadFileError("".concat(context, ": Failed to load '").concat(uri, "'").concat(request ? ": " + request.status + " " + request.statusText : ""), request));
1916
- });
1917
- });
1918
- });
1919
- };
1920
- /**
1921
- * Adds a JSON pointer to the metadata of the Babylon object at `<object>.metadata.gltf.pointers`.
1922
- * @param babylonObject the Babylon object with metadata
1923
- * @param pointer the JSON pointer
1924
- */
1925
- GLTFLoader.AddPointerMetadata = function (babylonObject, pointer) {
1926
- var metadata = (babylonObject.metadata = babylonObject.metadata || {});
1927
- var gltf = (metadata.gltf = metadata.gltf || {});
1928
- var pointers = (gltf.pointers = gltf.pointers || []);
1929
- pointers.push(pointer);
1930
- };
1931
- GLTFLoader._GetTextureWrapMode = function (context, mode) {
1932
- // Set defaults if undefined
1933
- mode = mode == undefined ? 10497 /* REPEAT */ : mode;
1934
- switch (mode) {
1935
- case 33071 /* CLAMP_TO_EDGE */: return Texture.CLAMP_ADDRESSMODE;
1936
- case 33648 /* MIRRORED_REPEAT */: return Texture.MIRROR_ADDRESSMODE;
1937
- case 10497 /* REPEAT */: return Texture.WRAP_ADDRESSMODE;
1938
- default:
1939
- Logger.Warn("".concat(context, ": Invalid value (").concat(mode, ")"));
1940
- return Texture.WRAP_ADDRESSMODE;
1941
- }
1942
- };
1943
- GLTFLoader._GetTextureSamplingMode = function (context, sampler) {
1944
- // Set defaults if undefined
1945
- var magFilter = sampler.magFilter == undefined ? 9729 /* LINEAR */ : sampler.magFilter;
1946
- var minFilter = sampler.minFilter == undefined ? 9987 /* LINEAR_MIPMAP_LINEAR */ : sampler.minFilter;
1947
- if (magFilter === 9729 /* LINEAR */) {
1948
- switch (minFilter) {
1949
- case 9728 /* NEAREST */: return Texture.LINEAR_NEAREST;
1950
- case 9729 /* LINEAR */: return Texture.LINEAR_LINEAR;
1951
- case 9984 /* NEAREST_MIPMAP_NEAREST */: return Texture.LINEAR_NEAREST_MIPNEAREST;
1952
- case 9985 /* LINEAR_MIPMAP_NEAREST */: return Texture.LINEAR_LINEAR_MIPNEAREST;
1953
- case 9986 /* NEAREST_MIPMAP_LINEAR */: return Texture.LINEAR_NEAREST_MIPLINEAR;
1954
- case 9987 /* LINEAR_MIPMAP_LINEAR */: return Texture.LINEAR_LINEAR_MIPLINEAR;
1955
- default:
1956
- Logger.Warn("".concat(context, "/minFilter: Invalid value (").concat(minFilter, ")"));
1957
- return Texture.LINEAR_LINEAR_MIPLINEAR;
1958
- }
1959
- }
1960
- else {
1961
- if (magFilter !== 9728 /* NEAREST */) {
1962
- Logger.Warn("".concat(context, "/magFilter: Invalid value (").concat(magFilter, ")"));
1963
- }
1964
- switch (minFilter) {
1965
- case 9728 /* NEAREST */: return Texture.NEAREST_NEAREST;
1966
- case 9729 /* LINEAR */: return Texture.NEAREST_LINEAR;
1967
- case 9984 /* NEAREST_MIPMAP_NEAREST */: return Texture.NEAREST_NEAREST_MIPNEAREST;
1968
- case 9985 /* LINEAR_MIPMAP_NEAREST */: return Texture.NEAREST_LINEAR_MIPNEAREST;
1969
- case 9986 /* NEAREST_MIPMAP_LINEAR */: return Texture.NEAREST_NEAREST_MIPLINEAR;
1970
- case 9987 /* LINEAR_MIPMAP_LINEAR */: return Texture.NEAREST_LINEAR_MIPLINEAR;
1971
- default:
1972
- Logger.Warn("".concat(context, "/minFilter: Invalid value (").concat(minFilter, ")"));
1973
- return Texture.NEAREST_NEAREST_MIPNEAREST;
1974
- }
1975
- }
1976
- };
1977
- GLTFLoader._GetTypedArrayConstructor = function (context, componentType) {
1978
- switch (componentType) {
1979
- case 5120 /* BYTE */: return Int8Array;
1980
- case 5121 /* UNSIGNED_BYTE */: return Uint8Array;
1981
- case 5122 /* SHORT */: return Int16Array;
1982
- case 5123 /* UNSIGNED_SHORT */: return Uint16Array;
1983
- case 5125 /* UNSIGNED_INT */: return Uint32Array;
1984
- case 5126 /* FLOAT */: return Float32Array;
1985
- default: throw new Error("".concat(context, ": Invalid component type ").concat(componentType));
1986
- }
1987
- };
1988
- GLTFLoader._GetTypedArray = function (context, componentType, bufferView, byteOffset, length) {
1989
- var buffer = bufferView.buffer;
1990
- byteOffset = bufferView.byteOffset + (byteOffset || 0);
1991
- var constructor = GLTFLoader._GetTypedArrayConstructor("".concat(context, "/componentType"), componentType);
1992
- var componentTypeLength = VertexBuffer.GetTypeByteLength(componentType);
1993
- if (byteOffset % componentTypeLength !== 0) {
1994
- // HACK: Copy the buffer if byte offset is not a multiple of component type byte length.
1995
- Logger.Warn("".concat(context, ": Copying buffer as byte offset (").concat(byteOffset, ") is not a multiple of component type byte length (").concat(componentTypeLength, ")"));
1996
- return new constructor(buffer.slice(byteOffset, byteOffset + length * componentTypeLength), 0);
1997
- }
1998
- return new constructor(buffer, byteOffset, length);
1999
- };
2000
- GLTFLoader._GetNumComponents = function (context, type) {
2001
- switch (type) {
2002
- case "SCALAR": return 1;
2003
- case "VEC2": return 2;
2004
- case "VEC3": return 3;
2005
- case "VEC4": return 4;
2006
- case "MAT2": return 4;
2007
- case "MAT3": return 9;
2008
- case "MAT4": return 16;
2009
- }
2010
- throw new Error("".concat(context, ": Invalid type (").concat(type, ")"));
2011
- };
2012
- GLTFLoader._ValidateUri = function (uri) {
2013
- return (Tools.IsBase64(uri) || uri.indexOf("..") === -1);
2014
- };
2015
- /** @hidden */
2016
- GLTFLoader._GetDrawMode = function (context, mode) {
2017
- if (mode == undefined) {
2018
- mode = 4 /* TRIANGLES */;
2019
- }
2020
- switch (mode) {
2021
- case 0 /* POINTS */: return Material.PointListDrawMode;
2022
- case 1 /* LINES */: return Material.LineListDrawMode;
2023
- case 2 /* LINE_LOOP */: return Material.LineLoopDrawMode;
2024
- case 3 /* LINE_STRIP */: return Material.LineStripDrawMode;
2025
- case 4 /* TRIANGLES */: return Material.TriangleFillMode;
2026
- case 5 /* TRIANGLE_STRIP */: return Material.TriangleStripDrawMode;
2027
- case 6 /* TRIANGLE_FAN */: return Material.TriangleFanDrawMode;
2028
- }
2029
- throw new Error("".concat(context, ": Invalid mesh primitive mode (").concat(mode, ")"));
2030
- };
2031
- GLTFLoader.prototype._compileMaterialsAsync = function () {
2032
- var _this = this;
2033
- this._parent._startPerformanceCounter("Compile materials");
2034
- var promises = new Array();
2035
- if (this._gltf.materials) {
2036
- for (var _i = 0, _a = this._gltf.materials; _i < _a.length; _i++) {
2037
- var material = _a[_i];
2038
- if (material._data) {
2039
- for (var babylonDrawMode in material._data) {
2040
- var babylonData = material._data[babylonDrawMode];
2041
- for (var _b = 0, _c = babylonData.babylonMeshes; _b < _c.length; _b++) {
2042
- var babylonMesh = _c[_b];
2043
- // Ensure nonUniformScaling is set if necessary.
2044
- babylonMesh.computeWorldMatrix(true);
2045
- var babylonMaterial = babylonData.babylonMaterial;
2046
- promises.push(babylonMaterial.forceCompilationAsync(babylonMesh));
2047
- promises.push(babylonMaterial.forceCompilationAsync(babylonMesh, { useInstances: true }));
2048
- if (this._parent.useClipPlane) {
2049
- promises.push(babylonMaterial.forceCompilationAsync(babylonMesh, { clipPlane: true }));
2050
- promises.push(babylonMaterial.forceCompilationAsync(babylonMesh, { clipPlane: true, useInstances: true }));
2051
- }
2052
- }
2053
- }
2054
- }
2055
- }
2056
- }
2057
- return Promise.all(promises).then(function () {
2058
- _this._parent._endPerformanceCounter("Compile materials");
2059
- });
2060
- };
2061
- GLTFLoader.prototype._compileShadowGeneratorsAsync = function () {
2062
- var _this = this;
2063
- this._parent._startPerformanceCounter("Compile shadow generators");
2064
- var promises = new Array();
2065
- var lights = this._babylonScene.lights;
2066
- for (var _i = 0, lights_1 = lights; _i < lights_1.length; _i++) {
2067
- var light = lights_1[_i];
2068
- var generator = light.getShadowGenerator();
2069
- if (generator) {
2070
- promises.push(generator.forceCompilationAsync());
2071
- }
2072
- }
2073
- return Promise.all(promises).then(function () {
2074
- _this._parent._endPerformanceCounter("Compile shadow generators");
2075
- });
2076
- };
2077
- GLTFLoader.prototype._forEachExtensions = function (action) {
2078
- for (var _i = 0, _a = this._extensions; _i < _a.length; _i++) {
2079
- var extension = _a[_i];
2080
- if (extension.enabled) {
2081
- action(extension);
2082
- }
2083
- }
2084
- };
2085
- GLTFLoader.prototype._applyExtensions = function (property, functionName, actionAsync) {
2086
- for (var _i = 0, _a = this._extensions; _i < _a.length; _i++) {
2087
- var extension = _a[_i];
2088
- if (extension.enabled) {
2089
- var id = "".concat(extension.name, ".").concat(functionName);
2090
- var loaderProperty = property;
2091
- loaderProperty._activeLoaderExtensionFunctions = loaderProperty._activeLoaderExtensionFunctions || {};
2092
- var activeLoaderExtensionFunctions = loaderProperty._activeLoaderExtensionFunctions;
2093
- if (!activeLoaderExtensionFunctions[id]) {
2094
- activeLoaderExtensionFunctions[id] = true;
2095
- try {
2096
- var result = actionAsync(extension);
2097
- if (result) {
2098
- return result;
2099
- }
2100
- }
2101
- finally {
2102
- delete activeLoaderExtensionFunctions[id];
2103
- }
2104
- }
2105
- }
2106
- }
2107
- return null;
2108
- };
2109
- GLTFLoader.prototype._extensionsOnLoading = function () {
2110
- this._forEachExtensions(function (extension) { return extension.onLoading && extension.onLoading(); });
2111
- };
2112
- GLTFLoader.prototype._extensionsOnReady = function () {
2113
- this._forEachExtensions(function (extension) { return extension.onReady && extension.onReady(); });
2114
- };
2115
- GLTFLoader.prototype._extensionsLoadSceneAsync = function (context, scene) {
2116
- return this._applyExtensions(scene, "loadScene", function (extension) { return extension.loadSceneAsync && extension.loadSceneAsync(context, scene); });
2117
- };
2118
- GLTFLoader.prototype._extensionsLoadNodeAsync = function (context, node, assign) {
2119
- return this._applyExtensions(node, "loadNode", function (extension) { return extension.loadNodeAsync && extension.loadNodeAsync(context, node, assign); });
2120
- };
2121
- GLTFLoader.prototype._extensionsLoadCameraAsync = function (context, camera, assign) {
2122
- return this._applyExtensions(camera, "loadCamera", function (extension) { return extension.loadCameraAsync && extension.loadCameraAsync(context, camera, assign); });
2123
- };
2124
- GLTFLoader.prototype._extensionsLoadVertexDataAsync = function (context, primitive, babylonMesh) {
2125
- return this._applyExtensions(primitive, "loadVertexData", function (extension) { return extension._loadVertexDataAsync && extension._loadVertexDataAsync(context, primitive, babylonMesh); });
2126
- };
2127
- GLTFLoader.prototype._extensionsLoadMeshPrimitiveAsync = function (context, name, node, mesh, primitive, assign) {
2128
- return this._applyExtensions(primitive, "loadMeshPrimitive", function (extension) { return extension._loadMeshPrimitiveAsync && extension._loadMeshPrimitiveAsync(context, name, node, mesh, primitive, assign); });
2129
- };
2130
- GLTFLoader.prototype._extensionsLoadMaterialAsync = function (context, material, babylonMesh, babylonDrawMode, assign) {
2131
- return this._applyExtensions(material, "loadMaterial", function (extension) { return extension._loadMaterialAsync && extension._loadMaterialAsync(context, material, babylonMesh, babylonDrawMode, assign); });
2132
- };
2133
- GLTFLoader.prototype._extensionsCreateMaterial = function (context, material, babylonDrawMode) {
2134
- return this._applyExtensions(material, "createMaterial", function (extension) { return extension.createMaterial && extension.createMaterial(context, material, babylonDrawMode); });
2135
- };
2136
- GLTFLoader.prototype._extensionsLoadMaterialPropertiesAsync = function (context, material, babylonMaterial) {
2137
- return this._applyExtensions(material, "loadMaterialProperties", function (extension) { return extension.loadMaterialPropertiesAsync && extension.loadMaterialPropertiesAsync(context, material, babylonMaterial); });
2138
- };
2139
- GLTFLoader.prototype._extensionsLoadTextureInfoAsync = function (context, textureInfo, assign) {
2140
- return this._applyExtensions(textureInfo, "loadTextureInfo", function (extension) { return extension.loadTextureInfoAsync && extension.loadTextureInfoAsync(context, textureInfo, assign); });
2141
- };
2142
- GLTFLoader.prototype._extensionsLoadTextureAsync = function (context, texture, assign) {
2143
- return this._applyExtensions(texture, "loadTexture", function (extension) { return extension._loadTextureAsync && extension._loadTextureAsync(context, texture, assign); });
2144
- };
2145
- GLTFLoader.prototype._extensionsLoadAnimationAsync = function (context, animation) {
2146
- return this._applyExtensions(animation, "loadAnimation", function (extension) { return extension.loadAnimationAsync && extension.loadAnimationAsync(context, animation); });
2147
- };
2148
- GLTFLoader.prototype._extensionsLoadSkinAsync = function (context, node, skin) {
2149
- return this._applyExtensions(skin, "loadSkin", function (extension) { return extension._loadSkinAsync && extension._loadSkinAsync(context, node, skin); });
2150
- };
2151
- GLTFLoader.prototype._extensionsLoadUriAsync = function (context, property, uri) {
2152
- return this._applyExtensions(property, "loadUri", function (extension) { return extension._loadUriAsync && extension._loadUriAsync(context, property, uri); });
2153
- };
2154
- GLTFLoader.prototype._extensionsLoadBufferViewAsync = function (context, bufferView) {
2155
- return this._applyExtensions(bufferView, "loadBufferView", function (extension) { return extension.loadBufferViewAsync && extension.loadBufferViewAsync(context, bufferView); });
2156
- };
2157
- GLTFLoader.prototype._extensionsLoadBufferAsync = function (context, buffer, byteOffset, byteLength) {
2158
- return this._applyExtensions(buffer, "loadBuffer", function (extension) { return extension.loadBufferAsync && extension.loadBufferAsync(context, buffer, byteOffset, byteLength); });
2159
- };
2160
- /**
2161
- * Helper method called by a loader extension to load an glTF extension.
2162
- * @param context The context when loading the asset
2163
- * @param property The glTF property to load the extension from
2164
- * @param extensionName The name of the extension to load
2165
- * @param actionAsync The action to run
2166
- * @returns The promise returned by actionAsync or null if the extension does not exist
2167
- */
2168
- GLTFLoader.LoadExtensionAsync = function (context, property, extensionName, actionAsync) {
2169
- if (!property.extensions) {
2170
- return null;
2171
- }
2172
- var extensions = property.extensions;
2173
- var extension = extensions[extensionName];
2174
- if (!extension) {
2175
- return null;
2176
- }
2177
- return actionAsync("".concat(context, "/extensions/").concat(extensionName), extension);
2178
- };
2179
- /**
2180
- * Helper method called by a loader extension to load a glTF extra.
2181
- * @param context The context when loading the asset
2182
- * @param property The glTF property to load the extra from
2183
- * @param extensionName The name of the extension to load
2184
- * @param actionAsync The action to run
2185
- * @returns The promise returned by actionAsync or null if the extra does not exist
2186
- */
2187
- GLTFLoader.LoadExtraAsync = function (context, property, extensionName, actionAsync) {
2188
- if (!property.extras) {
2189
- return null;
2190
- }
2191
- var extras = property.extras;
2192
- var extra = extras[extensionName];
2193
- if (!extra) {
2194
- return null;
2195
- }
2196
- return actionAsync("".concat(context, "/extras/").concat(extensionName), extra);
2197
- };
2198
- /**
2199
- * Checks for presence of an extension.
2200
- * @param name The name of the extension to check
2201
- * @returns A boolean indicating the presence of the given extension name in `extensionsUsed`
2202
- */
2203
- GLTFLoader.prototype.isExtensionUsed = function (name) {
2204
- return !!this._gltf.extensionsUsed && this._gltf.extensionsUsed.indexOf(name) !== -1;
2205
- };
2206
- /**
2207
- * Increments the indentation level and logs a message.
2208
- * @param message The message to log
2209
- */
2210
- GLTFLoader.prototype.logOpen = function (message) {
2211
- this._parent._logOpen(message);
2212
- };
2213
- /**
2214
- * Decrements the indentation level.
2215
- */
2216
- GLTFLoader.prototype.logClose = function () {
2217
- this._parent._logClose();
2218
- };
2219
- /**
2220
- * Logs a message
2221
- * @param message The message to log
2222
- */
2223
- GLTFLoader.prototype.log = function (message) {
2224
- this._parent._log(message);
2225
- };
2226
- /**
2227
- * Starts a performance counter.
2228
- * @param counterName The name of the performance counter
2229
- */
2230
- GLTFLoader.prototype.startPerformanceCounter = function (counterName) {
2231
- this._parent._startPerformanceCounter(counterName);
2232
- };
2233
- /**
2234
- * Ends a performance counter.
2235
- * @param counterName The name of the performance counter
2236
- */
2237
- GLTFLoader.prototype.endPerformanceCounter = function (counterName) {
2238
- this._parent._endPerformanceCounter(counterName);
2239
- };
2240
- GLTFLoader._RegisteredExtensions = {};
2241
- /**
2242
- * The default glTF sampler.
2243
- */
2244
- GLTFLoader.DefaultSampler = { index: -1 };
2245
- return GLTFLoader;
2246
- }());
2247
- export { GLTFLoader };
2248
- GLTFFileLoader._CreateGLTF2Loader = function (parent) { return new GLTFLoader(parent); };
2249
- //# sourceMappingURL=glTFLoader.js.map