@galacean/engine-loader 0.0.0-experimental-animator-additive.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -0
  3. package/dist/main.js +4511 -0
  4. package/dist/main.js.map +1 -0
  5. package/dist/miniprogram.js +4511 -0
  6. package/dist/module.js +4501 -0
  7. package/dist/module.js.map +1 -0
  8. package/package.json +26 -0
  9. package/types/AnimationClipLoader.d.ts +0 -0
  10. package/types/AnimatorControllerLoader.d.ts +1 -0
  11. package/types/BufferLoader.d.ts +1 -0
  12. package/types/EnvLoader.d.ts +1 -0
  13. package/types/FontLoader.d.ts +1 -0
  14. package/types/GLTFContentRestorer.d.ts +85 -0
  15. package/types/GLTFLoader.d.ts +15 -0
  16. package/types/HDRLoader.d.ts +1 -0
  17. package/types/JSONLoader.d.ts +1 -0
  18. package/types/KTXCubeLoader.d.ts +1 -0
  19. package/types/KTXLoader.d.ts +4 -0
  20. package/types/MaterialLoader.d.ts +1 -0
  21. package/types/MeshLoader.d.ts +1 -0
  22. package/types/SceneLoader.d.ts +1 -0
  23. package/types/SourceFontLoader.d.ts +1 -0
  24. package/types/SpriteAtlasLoader.d.ts +1 -0
  25. package/types/SpriteLoader.d.ts +1 -0
  26. package/types/TextLoader.d.ts +1 -0
  27. package/types/Texture2DContentRestorer.d.ts +14 -0
  28. package/types/Texture2DLoader.d.ts +10 -0
  29. package/types/TextureCubeContentRestorer.d.ts +14 -0
  30. package/types/TextureCubeLoader.d.ts +1 -0
  31. package/types/compressed-texture/KhronosTextureContainer.d.ts +20 -0
  32. package/types/compressed-texture/index.d.ts +3 -0
  33. package/types/compressed-texture/type.d.ts +87 -0
  34. package/types/gltf/GLTFParser.d.ts +9 -0
  35. package/types/gltf/GLTFPipeline.d.ts +23 -0
  36. package/types/gltf/GLTFResource.d.ts +39 -0
  37. package/types/gltf/GLTFSchema.d.ts +816 -0
  38. package/types/gltf/GLTFUtil.d.ts +53 -0
  39. package/types/gltf/Schema.d.ts +814 -0
  40. package/types/gltf/extensions/ExtensionParser.d.ts +8 -0
  41. package/types/gltf/extensions/GALACEAN_materials_remap.d.ts +1 -0
  42. package/types/gltf/extensions/GLTFExtensionParser.d.ts +52 -0
  43. package/types/gltf/extensions/GLTFExtensionSchema.d.ts +149 -0
  44. package/types/gltf/extensions/KHR_draco_mesh_compression.d.ts +1 -0
  45. package/types/gltf/extensions/KHR_lights_punctual.d.ts +1 -0
  46. package/types/gltf/extensions/KHR_materials_clearcoat.d.ts +1 -0
  47. package/types/gltf/extensions/KHR_materials_ior.d.ts +0 -0
  48. package/types/gltf/extensions/KHR_materials_pbrSpecularGlossiness.d.ts +1 -0
  49. package/types/gltf/extensions/KHR_materials_sheen.d.ts +0 -0
  50. package/types/gltf/extensions/KHR_materials_transmission.d.ts +0 -0
  51. package/types/gltf/extensions/KHR_materials_unlit.d.ts +1 -0
  52. package/types/gltf/extensions/KHR_materials_variants.d.ts +1 -0
  53. package/types/gltf/extensions/KHR_materials_volume.d.ts +0 -0
  54. package/types/gltf/extensions/KHR_mesh_quantization.d.ts +1 -0
  55. package/types/gltf/extensions/KHR_texture_basisu.d.ts +0 -0
  56. package/types/gltf/extensions/KHR_texture_transform.d.ts +1 -0
  57. package/types/gltf/extensions/OASIS_animation.d.ts +1 -0
  58. package/types/gltf/extensions/OASIS_materials_remap.d.ts +1 -0
  59. package/types/gltf/extensions/Schema.d.ts +142 -0
  60. package/types/gltf/extensions/index.d.ts +14 -0
  61. package/types/gltf/index.d.ts +6 -0
  62. package/types/gltf/parser/AnimationParser.d.ts +7 -0
  63. package/types/gltf/parser/BufferParser.d.ts +7 -0
  64. package/types/gltf/parser/EntityParser.d.ts +9 -0
  65. package/types/gltf/parser/GLTFAnimationParser.d.ts +12 -0
  66. package/types/gltf/parser/GLTFBufferParser.d.ts +7 -0
  67. package/types/gltf/parser/GLTFEntityParser.d.ts +9 -0
  68. package/types/gltf/parser/GLTFMaterialParser.d.ts +15 -0
  69. package/types/gltf/parser/GLTFMeshParser.d.ts +19 -0
  70. package/types/gltf/parser/GLTFParser.d.ts +63 -0
  71. package/types/gltf/parser/GLTFParserContext.d.ts +48 -0
  72. package/types/gltf/parser/GLTFSceneParser.d.ts +11 -0
  73. package/types/gltf/parser/GLTFSkinParser.d.ts +6 -0
  74. package/types/gltf/parser/GLTFTextureParser.d.ts +8 -0
  75. package/types/gltf/parser/GLTFValidator.d.ts +6 -0
  76. package/types/gltf/parser/MaterialParser.d.ts +8 -0
  77. package/types/gltf/parser/MeshParser.d.ts +13 -0
  78. package/types/gltf/parser/Parser.d.ts +21 -0
  79. package/types/gltf/parser/ParserContext.d.ts +46 -0
  80. package/types/gltf/parser/SceneParser.d.ts +11 -0
  81. package/types/gltf/parser/SkinParser.d.ts +6 -0
  82. package/types/gltf/parser/TextureParser.d.ts +8 -0
  83. package/types/gltf/parser/Validator.d.ts +5 -0
  84. package/types/gltf/parser/index.d.ts +11 -0
  85. package/types/index.d.ts +23 -0
  86. package/types/resource-deserialize/index.d.ts +18 -0
  87. package/types/resource-deserialize/resources/animationClip/AnimationClipDecoder.d.ts +17 -0
  88. package/types/resource-deserialize/resources/animationClip/ComponentMap.d.ts +2 -0
  89. package/types/resource-deserialize/resources/animationClip/type.d.ts +30 -0
  90. package/types/resource-deserialize/resources/animatorController/AnimatorControllerDecoder.d.ts +6 -0
  91. package/types/resource-deserialize/resources/animatorController/type.d.ts +0 -0
  92. package/types/resource-deserialize/resources/mesh/MeshDecoder.d.ts +9 -0
  93. package/types/resource-deserialize/resources/mesh/type.d.ts +31 -0
  94. package/types/resource-deserialize/resources/prefab/PrefabDesign.d.ts +70 -0
  95. package/types/resource-deserialize/resources/prefab/PrefabParser.d.ts +5 -0
  96. package/types/resource-deserialize/resources/prefab/ReflectionParser.d.ts +14 -0
  97. package/types/resource-deserialize/resources/scene/EditorTextureLoader.d.ts +4 -0
  98. package/types/resource-deserialize/resources/scene/MeshLoader.d.ts +4 -0
  99. package/types/resource-deserialize/resources/scene/SceneParser.d.ts +28 -0
  100. package/types/resource-deserialize/resources/scene/SceneParserContext.d.ts +13 -0
  101. package/types/resource-deserialize/resources/texture2D/TextureDecoder.d.ts +5 -0
  102. package/types/resource-deserialize/utils/BufferReader.d.ts +32 -0
  103. package/types/resource-deserialize/utils/Decorator.d.ts +11 -0
  104. package/types/resource-deserialize/utils/FileHeader.d.ts +9 -0
  105. package/types/resource-deserialize/utils/Utils.d.ts +5 -0
package/dist/main.js ADDED
@@ -0,0 +1,4511 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var engineCore = require('@galacean/engine-core');
6
+ var engineMath = require('@galacean/engine-math');
7
+ var engineDraco = require('@galacean/engine-draco');
8
+ var engineRhiWebgl = require('@galacean/engine-rhi-webgl');
9
+
10
+ function _extends() {
11
+ _extends = Object.assign || function assign(target) {
12
+ for (var i = 1; i < arguments.length; i++) {
13
+ var source = arguments[i];
14
+ for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
15
+ }
16
+
17
+ return target;
18
+ };
19
+
20
+ return _extends.apply(this, arguments);
21
+ }
22
+
23
+ function _set_prototype_of(o, p) {
24
+ _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {
25
+ o.__proto__ = p;
26
+
27
+ return o;
28
+ };
29
+
30
+ return _set_prototype_of(o, p);
31
+ }
32
+
33
+ function _inherits(subClass, superClass) {
34
+ if (typeof superClass !== "function" && superClass !== null) {
35
+ throw new TypeError("Super expression must either be null or a function");
36
+ }
37
+
38
+ subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });
39
+
40
+ if (superClass) _set_prototype_of(subClass, superClass);
41
+ }
42
+
43
+ /******************************************************************************
44
+ Copyright (c) Microsoft Corporation.
45
+
46
+ Permission to use, copy, modify, and/or distribute this software for any
47
+ purpose with or without fee is hereby granted.
48
+
49
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
50
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
51
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
52
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
53
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
54
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
55
+ PERFORMANCE OF THIS SOFTWARE.
56
+ ***************************************************************************** */
57
+
58
+ function __decorate(decorators, target, key, desc) {
59
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
60
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
61
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
62
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
63
+ }
64
+
65
+ function __generator(thisArg, body) {
66
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
67
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
68
+ function verb(n) { return function (v) { return step([n, v]); }; }
69
+ function step(op) {
70
+ if (f) throw new TypeError("Generator is already executing.");
71
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
72
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
73
+ if (y = 0, t) op = [op[0] & 2, t.value];
74
+ switch (op[0]) {
75
+ case 0: case 1: t = op; break;
76
+ case 4: _.label++; return { value: op[1], done: false };
77
+ case 5: _.label++; y = op[1]; op = [0]; continue;
78
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
79
+ default:
80
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
81
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
82
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
83
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
84
+ if (t[2]) _.ops.pop();
85
+ _.trys.pop(); continue;
86
+ }
87
+ op = body.call(thisArg, _);
88
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
89
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
90
+ }
91
+ }
92
+
93
+ var AnimatorControllerLoader = /*#__PURE__*/ function(Loader) {
94
+ _inherits(AnimatorControllerLoader, Loader);
95
+ function AnimatorControllerLoader() {
96
+ return Loader.apply(this, arguments);
97
+ }
98
+ var _proto = AnimatorControllerLoader.prototype;
99
+ _proto.load = function load(item, resourceManager) {
100
+ var _this = this;
101
+ return new engineCore.AssetPromise(function(resolve, reject) {
102
+ _this.request(item.url, _extends({}, item, {
103
+ type: "json"
104
+ })).then(function(data) {
105
+ var animatorController = new engineCore.AnimatorController();
106
+ var layers = data.layers;
107
+ var promises = [];
108
+ layers.forEach(function(layerData, layerIndex) {
109
+ var name = layerData.name, blendingMode = layerData.blendingMode, weight = layerData.weight, stateMachineData = layerData.stateMachine;
110
+ var layer = new engineCore.AnimatorControllerLayer(name);
111
+ layer.blendingMode = blendingMode;
112
+ layer.weight = weight;
113
+ if (stateMachineData) {
114
+ var states = stateMachineData.states;
115
+ var stateMachine = layer.stateMachine = new engineCore.AnimatorStateMachine();
116
+ states.forEach(function(stateData, stateIndex) {
117
+ var name = stateData.name, speed = stateData.speed, wrapMode = stateData.wrapMode, clipStartNormalizedTime = stateData.clipStartNormalizedTime, clipEndNormalizedTime = stateData.clipEndNormalizedTime, isDefaultState = stateData.isDefaultState, clipData = stateData.clip;
118
+ var state = stateMachine.addState(name);
119
+ isDefaultState && (stateMachine.defaultState = state);
120
+ state.speed = speed;
121
+ state.wrapMode = wrapMode;
122
+ state.clipStartTime = clipStartNormalizedTime;
123
+ state.clipEndTime = clipEndNormalizedTime;
124
+ if (clipData) {
125
+ promises.push(new Promise(function(resolve) {
126
+ //@ts-ignore
127
+ resourceManager.getResourceByRef(clipData).then(function(clip) {
128
+ resolve({
129
+ layerIndex: layerIndex,
130
+ stateIndex: stateIndex,
131
+ clip: clip
132
+ });
133
+ });
134
+ }));
135
+ }
136
+ });
137
+ states.forEach(function(stateData) {
138
+ var name = stateData.name, transitions = stateData.transitions;
139
+ transitions.forEach(function(transitionData) {
140
+ var targetStateName = transitionData.targetStateName, duration = transitionData.duration, offset = transitionData.offset, exitTime = transitionData.exitTime;
141
+ var sourceState = stateMachine.findStateByName(name);
142
+ var destState = stateMachine.findStateByName(targetStateName);
143
+ var transition = new engineCore.AnimatorStateTransition();
144
+ transition.destinationState = destState;
145
+ transition.duration = duration;
146
+ transition.exitTime = exitTime;
147
+ transition.offset = offset;
148
+ sourceState.addTransition(transition);
149
+ });
150
+ });
151
+ }
152
+ animatorController.addLayer(layer);
153
+ });
154
+ Promise.all(promises).then(function(clipData) {
155
+ clipData.forEach(function(data) {
156
+ var layerIndex = data.layerIndex, stateIndex = data.stateIndex, clip = data.clip;
157
+ animatorController.layers[layerIndex].stateMachine.states[stateIndex].clip = clip;
158
+ });
159
+ resolve(animatorController);
160
+ });
161
+ }).catch(reject);
162
+ });
163
+ };
164
+ return AnimatorControllerLoader;
165
+ }(engineCore.Loader);
166
+ AnimatorControllerLoader = __decorate([
167
+ engineCore.resourceLoader(engineCore.AssetType.AnimatorController, [
168
+ "json"
169
+ ], false)
170
+ ], AnimatorControllerLoader);
171
+
172
+ function isBase64(url) {
173
+ return /^data:(.+?);base64,/.test(url);
174
+ }
175
+ var BufferLoader = /*#__PURE__*/ function(Loader) {
176
+ _inherits(BufferLoader, Loader);
177
+ function BufferLoader() {
178
+ return Loader.apply(this, arguments);
179
+ }
180
+ var _proto = BufferLoader.prototype;
181
+ _proto.load = function load(item) {
182
+ var url = item.url;
183
+ if (isBase64(url)) {
184
+ return new engineCore.AssetPromise(function(resolve) {
185
+ var base64Str = url.slice(13 + RegExp.$1.length);
186
+ var result = Uint8Array.from(atob(base64Str), function(c) {
187
+ return c.charCodeAt(0);
188
+ });
189
+ resolve(result.buffer);
190
+ });
191
+ }
192
+ return this.request(url, _extends({}, item, {
193
+ type: "arraybuffer"
194
+ }));
195
+ };
196
+ return BufferLoader;
197
+ }(engineCore.Loader);
198
+ BufferLoader = __decorate([
199
+ engineCore.resourceLoader(engineCore.AssetType.Buffer, [
200
+ "bin",
201
+ "r3bin"
202
+ ], false)
203
+ ], BufferLoader);
204
+
205
+ var EnvLoader = /*#__PURE__*/ function(Loader) {
206
+ _inherits(EnvLoader, Loader);
207
+ function EnvLoader() {
208
+ return Loader.apply(this, arguments);
209
+ }
210
+ var _proto = EnvLoader.prototype;
211
+ _proto.load = function load(item, resourceManager) {
212
+ var _this = this;
213
+ return new engineCore.AssetPromise(function(resolve, reject) {
214
+ _this.request(item.url, {
215
+ type: "arraybuffer"
216
+ }).then(function(arraybuffer) {
217
+ var _ref;
218
+ var shArray = new Float32Array(arraybuffer, 0, 27);
219
+ var shByteLength = 27 * 4;
220
+ var size = (_ref = new Uint16Array(arraybuffer, shByteLength, 1)) == null ? void 0 : _ref[0];
221
+ var texture = new engineCore.TextureCube(resourceManager.engine, size);
222
+ texture.filterMode = engineCore.TextureFilterMode.Trilinear;
223
+ var mipmapCount = texture.mipmapCount;
224
+ var offset = shByteLength + 2;
225
+ for(var mipLevel = 0; mipLevel < mipmapCount; mipLevel++){
226
+ var mipSize = size >> mipLevel;
227
+ for(var face = 0; face < 6; face++){
228
+ var dataSize = mipSize * mipSize * 4;
229
+ var data = new Uint8Array(arraybuffer, offset, dataSize);
230
+ offset += dataSize;
231
+ texture.setPixelBuffer(engineCore.TextureCubeFace.PositiveX + face, data, mipLevel);
232
+ }
233
+ }
234
+ var ambientLight = new engineCore.AmbientLight();
235
+ var sh = new engineMath.SphericalHarmonics3();
236
+ ambientLight.diffuseMode = engineCore.DiffuseMode.SphericalHarmonics;
237
+ sh.copyFromArray(shArray);
238
+ ambientLight.diffuseSphericalHarmonics = sh;
239
+ ambientLight.specularTexture = texture;
240
+ ambientLight.specularTextureDecodeRGBM = true;
241
+ resolve(ambientLight);
242
+ }).catch(function(e) {
243
+ reject(e);
244
+ });
245
+ });
246
+ };
247
+ return EnvLoader;
248
+ }(engineCore.Loader);
249
+ EnvLoader = __decorate([
250
+ engineCore.resourceLoader(engineCore.AssetType.Env, [
251
+ "env"
252
+ ])
253
+ ], EnvLoader);
254
+
255
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
256
+ try {
257
+ var info = gen[key](arg);
258
+ var value = info.value;
259
+ } catch (error) {
260
+ reject(error);
261
+ return;
262
+ }
263
+ if (info.done) resolve(value);
264
+ else Promise.resolve(value).then(_next, _throw);
265
+ }
266
+ function _async_to_generator(fn) {
267
+ return function() {
268
+ var self = this, args = arguments;
269
+
270
+ return new Promise(function(resolve, reject) {
271
+ var gen = fn.apply(self, args);
272
+
273
+ function _next(value) {
274
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
275
+ }
276
+
277
+ function _throw(err) {
278
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
279
+ }
280
+
281
+ _next(undefined);
282
+ });
283
+ };
284
+ }
285
+
286
+ var FontLoader = /*#__PURE__*/ function(Loader) {
287
+ _inherits(FontLoader, Loader);
288
+ function FontLoader() {
289
+ return Loader.apply(this, arguments);
290
+ }
291
+ var _proto = FontLoader.prototype;
292
+ _proto.load = function load(item, resourceManager) {
293
+ var _this = this;
294
+ return new engineCore.AssetPromise(function(resolve, reject) {
295
+ _this.request(item.url, {
296
+ type: "json"
297
+ }).then(function(data) {
298
+ var fontName = data.fontName, fontUrl = data.fontUrl;
299
+ if (fontUrl) {
300
+ _this._registerFont(fontName, fontUrl).then(function() {
301
+ var font = new engineCore.Font(resourceManager.engine, fontName);
302
+ resolve(font);
303
+ }).catch(function(e) {
304
+ reject("load font " + fontUrl + " fail");
305
+ });
306
+ } else {
307
+ var font = new engineCore.Font(resourceManager.engine, fontName);
308
+ resolve(font);
309
+ }
310
+ }).catch(function(e) {
311
+ reject(e);
312
+ });
313
+ });
314
+ };
315
+ _proto._registerFont = function _registerFont(fontName, fontUrl) {
316
+ return _async_to_generator(function() {
317
+ var fontFace;
318
+ return __generator(this, function(_state) {
319
+ switch(_state.label){
320
+ case 0:
321
+ fontFace = new FontFace(fontName, "url(" + fontUrl + ")");
322
+ return [
323
+ 4,
324
+ fontFace.load()
325
+ ];
326
+ case 1:
327
+ _state.sent();
328
+ document.fonts.add(fontFace);
329
+ return [
330
+ 2
331
+ ];
332
+ }
333
+ });
334
+ })();
335
+ };
336
+ return FontLoader;
337
+ }(engineCore.Loader);
338
+ FontLoader = __decorate([
339
+ engineCore.resourceLoader(engineCore.AssetType.Font, [
340
+ "font"
341
+ ], false)
342
+ ], FontLoader);
343
+
344
+ /**
345
+ * @internal
346
+ */ var ParserContext = /*#__PURE__*/ function() {
347
+ function ParserContext(url) {
348
+ this.hasSkinned = false;
349
+ /** chain asset promise */ this.chainPromises = [];
350
+ this.accessorBufferCache = {};
351
+ this.texturesPromiseInfo = new PromiseInfo();
352
+ this.materialsPromiseInfo = new PromiseInfo();
353
+ this.meshesPromiseInfo = new PromiseInfo();
354
+ this.animationClipsPromiseInfo = new PromiseInfo();
355
+ this.defaultSceneRootPromiseInfo = new PromiseInfo();
356
+ this.masterPromiseInfo = new PromiseInfo();
357
+ this.promiseMap = {};
358
+ var promiseMap = this.promiseMap;
359
+ promiseMap["" + url + "?q=textures"] = this._initPromiseInfo(this.texturesPromiseInfo);
360
+ promiseMap["" + url + "?q=materials"] = this._initPromiseInfo(this.materialsPromiseInfo);
361
+ promiseMap["" + url + "?q=meshes"] = this._initPromiseInfo(this.meshesPromiseInfo);
362
+ promiseMap["" + url + "?q=animations"] = this._initPromiseInfo(this.animationClipsPromiseInfo);
363
+ promiseMap["" + url + "?q=defaultSceneRoot"] = this._initPromiseInfo(this.defaultSceneRootPromiseInfo);
364
+ promiseMap["" + url] = this._initPromiseInfo(this.masterPromiseInfo);
365
+ }
366
+ var _proto = ParserContext.prototype;
367
+ _proto._initPromiseInfo = function _initPromiseInfo(promiseInfo) {
368
+ var promise = new engineCore.AssetPromise(function(resolve, reject, setProgress, onCancel) {
369
+ promiseInfo.resolve = resolve;
370
+ promiseInfo.reject = reject;
371
+ promiseInfo.setProgress = setProgress;
372
+ promiseInfo.onCancel = onCancel;
373
+ });
374
+ promiseInfo.promise = promise;
375
+ return promise;
376
+ };
377
+ return ParserContext;
378
+ }();
379
+ /**
380
+ * @internal
381
+ */ var BufferInfo = function BufferInfo(data, interleaved, stride) {
382
+ this.data = data;
383
+ this.interleaved = interleaved;
384
+ this.stride = stride;
385
+ this.vertexBindingInfos = {};
386
+ };
387
+ /**
388
+ * @internal
389
+ */ var PromiseInfo = function PromiseInfo() {
390
+ };
391
+
392
+ /**
393
+ * Module for glTF 2.0 Interface
394
+ */ var AccessorComponentType;
395
+ (function(AccessorComponentType) {
396
+ AccessorComponentType[AccessorComponentType[/**
397
+ * Byte
398
+ */ "BYTE"] = 5120] = "BYTE";
399
+ AccessorComponentType[AccessorComponentType[/**
400
+ * Unsigned Byte
401
+ */ "UNSIGNED_BYTE"] = 5121] = "UNSIGNED_BYTE";
402
+ AccessorComponentType[AccessorComponentType[/**
403
+ * Short
404
+ */ "SHORT"] = 5122] = "SHORT";
405
+ AccessorComponentType[AccessorComponentType[/**
406
+ * Unsigned Short
407
+ */ "UNSIGNED_SHORT"] = 5123] = "UNSIGNED_SHORT";
408
+ AccessorComponentType[AccessorComponentType[/**
409
+ * Unsigned Int
410
+ */ "UNSIGNED_INT"] = 5125] = "UNSIGNED_INT";
411
+ AccessorComponentType[AccessorComponentType[/**
412
+ * Float
413
+ */ "FLOAT"] = 5126] = "FLOAT";
414
+ })(AccessorComponentType || (AccessorComponentType = {}));
415
+ var AccessorType;
416
+ (function(AccessorType) {
417
+ AccessorType[/**
418
+ * Scalar
419
+ */ "SCALAR"] = "SCALAR";
420
+ AccessorType[/**
421
+ * Vector2
422
+ */ "VEC2"] = "VEC2";
423
+ AccessorType[/**
424
+ * Vector3
425
+ */ "VEC3"] = "VEC3";
426
+ AccessorType[/**
427
+ * Vector4
428
+ */ "VEC4"] = "VEC4";
429
+ AccessorType[/**
430
+ * Matrix2x2
431
+ */ "MAT2"] = "MAT2";
432
+ AccessorType[/**
433
+ * Matrix3x3
434
+ */ "MAT3"] = "MAT3";
435
+ AccessorType[/**
436
+ * Matrix4x4
437
+ */ "MAT4"] = "MAT4";
438
+ })(AccessorType || (AccessorType = {}));
439
+ var AnimationChannelTargetPath;
440
+ (function(AnimationChannelTargetPath) {
441
+ AnimationChannelTargetPath[/**
442
+ * Translation
443
+ */ "TRANSLATION"] = "translation";
444
+ AnimationChannelTargetPath[/**
445
+ * Rotation
446
+ */ "ROTATION"] = "rotation";
447
+ AnimationChannelTargetPath[/**
448
+ * Scale
449
+ */ "SCALE"] = "scale";
450
+ AnimationChannelTargetPath[/**
451
+ * Weights
452
+ */ "WEIGHTS"] = "weights";
453
+ })(AnimationChannelTargetPath || (AnimationChannelTargetPath = {}));
454
+ var AnimationSamplerInterpolation;
455
+ (function(AnimationSamplerInterpolation) {
456
+ AnimationSamplerInterpolation[/**
457
+ * The animated values are linearly interpolated between keyframes
458
+ */ "Linear"] = "LINEAR";
459
+ AnimationSamplerInterpolation[/**
460
+ * The animated values remain constant to the output of the first keyframe, until the next keyframe
461
+ */ "Step"] = "STEP";
462
+ AnimationSamplerInterpolation[/**
463
+ * The animation's interpolation is computed using a cubic spline with specified tangents
464
+ */ "CubicSpine"] = "CUBICSPLINE";
465
+ })(AnimationSamplerInterpolation || (AnimationSamplerInterpolation = {}));
466
+ var CameraType;
467
+ (function(CameraType) {
468
+ CameraType[/**
469
+ * A perspective camera containing properties to create a perspective projection matrix
470
+ */ "PERSPECTIVE"] = "perspective";
471
+ CameraType[/**
472
+ * An orthographic camera containing properties to create an orthographic projection matrix
473
+ */ "ORTHOGRAPHIC"] = "orthographic";
474
+ })(CameraType || (CameraType = {}));
475
+ var ImageMimeType;
476
+ (function(ImageMimeType) {
477
+ ImageMimeType[/**
478
+ * JPEG Mime-type
479
+ */ "JPEG"] = "image/jpeg";
480
+ ImageMimeType[/**
481
+ * PNG Mime-type
482
+ */ "PNG"] = "image/png";
483
+ })(ImageMimeType || (ImageMimeType = {}));
484
+ var MaterialAlphaMode;
485
+ (function(MaterialAlphaMode) {
486
+ MaterialAlphaMode[/**
487
+ * The alpha value is ignored and the rendered output is fully opaque
488
+ */ "OPAQUE"] = "OPAQUE";
489
+ MaterialAlphaMode[/**
490
+ * The rendered output is either fully opaque or fully transparent depending on the alpha value and the specified alpha cutoff value
491
+ */ "MASK"] = "MASK";
492
+ MaterialAlphaMode[/**
493
+ * The alpha value is used to composite the source and destination areas. The rendered output is combined with the background using the normal painting operation (i.e. the Porter and Duff over operator)
494
+ */ "BLEND"] = "BLEND";
495
+ })(MaterialAlphaMode || (MaterialAlphaMode = {}));
496
+ var TextureMagFilter;
497
+ (function(TextureMagFilter) {
498
+ TextureMagFilter[TextureMagFilter[/**
499
+ * Nearest
500
+ */ "NEAREST"] = 9728] = "NEAREST";
501
+ TextureMagFilter[TextureMagFilter[/**
502
+ * Linear
503
+ */ "LINEAR"] = 9729] = "LINEAR";
504
+ })(TextureMagFilter || (TextureMagFilter = {}));
505
+ var TextureMinFilter;
506
+ (function(TextureMinFilter) {
507
+ TextureMinFilter[TextureMinFilter[/**
508
+ * Nearest
509
+ */ "NEAREST"] = 9728] = "NEAREST";
510
+ TextureMinFilter[TextureMinFilter[/**
511
+ * Linear
512
+ */ "LINEAR"] = 9729] = "LINEAR";
513
+ TextureMinFilter[TextureMinFilter[/**
514
+ * Nearest Mip-Map Nearest
515
+ */ "NEAREST_MIPMAP_NEAREST"] = 9984] = "NEAREST_MIPMAP_NEAREST";
516
+ TextureMinFilter[TextureMinFilter[/**
517
+ * Linear Mipmap Nearest
518
+ */ "LINEAR_MIPMAP_NEAREST"] = 9985] = "LINEAR_MIPMAP_NEAREST";
519
+ TextureMinFilter[TextureMinFilter[/**
520
+ * Nearest Mipmap Linear
521
+ */ "NEAREST_MIPMAP_LINEAR"] = 9986] = "NEAREST_MIPMAP_LINEAR";
522
+ TextureMinFilter[TextureMinFilter[/**
523
+ * Linear Mipmap Linear
524
+ */ "LINEAR_MIPMAP_LINEAR"] = 9987] = "LINEAR_MIPMAP_LINEAR";
525
+ })(TextureMinFilter || (TextureMinFilter = {}));
526
+ var TextureWrapMode;
527
+ (function(TextureWrapMode) {
528
+ TextureWrapMode[TextureWrapMode[/**
529
+ * Clamp to Edge
530
+ */ "CLAMP_TO_EDGE"] = 33071] = "CLAMP_TO_EDGE";
531
+ TextureWrapMode[TextureWrapMode[/**
532
+ * Mirrored Repeat
533
+ */ "MIRRORED_REPEAT"] = 33648] = "MIRRORED_REPEAT";
534
+ TextureWrapMode[TextureWrapMode[/**
535
+ * Repeat
536
+ */ "REPEAT"] = 10497] = "REPEAT";
537
+ })(TextureWrapMode || (TextureWrapMode = {}));
538
+
539
+ /**
540
+ * @internal
541
+ */ var GLTFUtil = /*#__PURE__*/ function() {
542
+ function GLTFUtil() {}
543
+ GLTFUtil.floatBufferToVector2Array = function floatBufferToVector2Array(buffer) {
544
+ var bufferLen = buffer.length;
545
+ var array = new Array(bufferLen / 2);
546
+ for(var i = 0; i < bufferLen; i += 2){
547
+ array[i / 2] = new engineMath.Vector2(buffer[i], buffer[i + 1]);
548
+ }
549
+ return array;
550
+ };
551
+ GLTFUtil.floatBufferToVector3Array = function floatBufferToVector3Array(buffer) {
552
+ var bufferLen = buffer.length;
553
+ var array = new Array(bufferLen / 3);
554
+ for(var i = 0; i < bufferLen; i += 3){
555
+ array[i / 3] = new engineMath.Vector3(buffer[i], buffer[i + 1], buffer[i + 2]);
556
+ }
557
+ return array;
558
+ };
559
+ GLTFUtil.floatBufferToVector4Array = function floatBufferToVector4Array(buffer) {
560
+ var bufferLen = buffer.length;
561
+ var array = new Array(bufferLen / 4);
562
+ for(var i = 0; i < bufferLen; i += 4){
563
+ array[i / 4] = new engineMath.Vector4(buffer[i], buffer[i + 1], buffer[i + 2], buffer[i + 3]);
564
+ }
565
+ return array;
566
+ };
567
+ GLTFUtil.floatBufferToColorArray = function floatBufferToColorArray(buffer, isColor3) {
568
+ var bufferLen = buffer.length;
569
+ var colors = new Array(bufferLen / (isColor3 ? 3 : 4));
570
+ if (isColor3) {
571
+ for(var i = 0; i < bufferLen; i += 3){
572
+ colors[i / 3] = new engineMath.Color(buffer[i], buffer[i + 1], buffer[i + 2], 1.0);
573
+ }
574
+ } else {
575
+ for(var i1 = 0; i1 < bufferLen; i1 += 4){
576
+ colors[i1 / 4] = new engineMath.Color(buffer[i1], buffer[i1 + 1], buffer[i1 + 2], buffer[i1 + 3]);
577
+ }
578
+ }
579
+ return colors;
580
+ };
581
+ /**
582
+ * Parse binary text for glb loader.
583
+ */ GLTFUtil.decodeText = function decodeText(array) {
584
+ if (typeof TextDecoder !== "undefined") {
585
+ return new TextDecoder().decode(array);
586
+ }
587
+ // TextDecoder polyfill
588
+ var s = "";
589
+ for(var i = 0, il = array.length; i < il; i++){
590
+ s += String.fromCharCode(array[i]);
591
+ }
592
+ return decodeURIComponent(encodeURIComponent(s));
593
+ };
594
+ /**
595
+ * Get the number of bytes occupied by accessor type.
596
+ */ GLTFUtil.getAccessorTypeSize = function getAccessorTypeSize(accessorType) {
597
+ switch(accessorType){
598
+ case AccessorType.SCALAR:
599
+ return 1;
600
+ case AccessorType.VEC2:
601
+ return 2;
602
+ case AccessorType.VEC3:
603
+ return 3;
604
+ case AccessorType.VEC4:
605
+ return 4;
606
+ case AccessorType.MAT2:
607
+ return 4;
608
+ case AccessorType.MAT3:
609
+ return 9;
610
+ case AccessorType.MAT4:
611
+ return 16;
612
+ }
613
+ };
614
+ /**
615
+ * Get the TypedArray corresponding to the component type.
616
+ */ GLTFUtil.getComponentType = function getComponentType(componentType) {
617
+ switch(componentType){
618
+ case AccessorComponentType.BYTE:
619
+ return Int8Array;
620
+ case AccessorComponentType.UNSIGNED_BYTE:
621
+ return Uint8Array;
622
+ case AccessorComponentType.SHORT:
623
+ return Int16Array;
624
+ case AccessorComponentType.UNSIGNED_SHORT:
625
+ return Uint16Array;
626
+ case AccessorComponentType.UNSIGNED_INT:
627
+ return Uint32Array;
628
+ case AccessorComponentType.FLOAT:
629
+ return Float32Array;
630
+ }
631
+ };
632
+ GLTFUtil.getNormalizedComponentScale = function getNormalizedComponentScale(componentType) {
633
+ // Reference: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization#encoding-quantized-data
634
+ switch(componentType){
635
+ case AccessorComponentType.BYTE:
636
+ return 1 / 127;
637
+ case AccessorComponentType.UNSIGNED_BYTE:
638
+ return 1 / 255;
639
+ case AccessorComponentType.SHORT:
640
+ return 1 / 32767;
641
+ case AccessorComponentType.UNSIGNED_SHORT:
642
+ return 1 / 65535;
643
+ default:
644
+ throw new Error("Galacean.GLTFLoader: Unsupported normalized accessor component type.");
645
+ }
646
+ };
647
+ GLTFUtil.getAccessorBuffer = function getAccessorBuffer(context, gltf, accessor) {
648
+ var buffers = context.buffers;
649
+ var bufferViews = gltf.bufferViews;
650
+ var componentType = accessor.componentType;
651
+ var bufferView = bufferViews[accessor.bufferView];
652
+ var buffer = buffers[bufferView.buffer];
653
+ var bufferByteOffset = bufferView.byteOffset || 0;
654
+ var byteOffset = accessor.byteOffset || 0;
655
+ var TypedArray = GLTFUtil.getComponentType(componentType);
656
+ var dataElmentSize = GLTFUtil.getAccessorTypeSize(accessor.type);
657
+ var dataElementBytes = TypedArray.BYTES_PER_ELEMENT;
658
+ var elementStride = dataElmentSize * dataElementBytes;
659
+ var accessorCount = accessor.count;
660
+ var bufferStride = bufferView.byteStride;
661
+ var bufferInfo;
662
+ // According to the glTF official documentation only byteStride not undefined is allowed
663
+ if (bufferStride !== undefined && bufferStride !== elementStride) {
664
+ var bufferSlice = Math.floor(byteOffset / bufferStride);
665
+ var bufferCacheKey = accessor.bufferView + ":" + componentType + ":" + bufferSlice + ":" + accessorCount;
666
+ var accessorBufferCache = context.accessorBufferCache;
667
+ bufferInfo = accessorBufferCache[bufferCacheKey];
668
+ if (!bufferInfo) {
669
+ var offset = bufferByteOffset + bufferSlice * bufferStride;
670
+ var count = accessorCount * (bufferStride / dataElementBytes);
671
+ var data = new TypedArray(buffer, offset, count);
672
+ accessorBufferCache[bufferCacheKey] = bufferInfo = new BufferInfo(data, true, bufferStride);
673
+ }
674
+ } else {
675
+ var offset1 = bufferByteOffset + byteOffset;
676
+ var count1 = accessorCount * dataElmentSize;
677
+ var data1 = new TypedArray(buffer, offset1, count1);
678
+ bufferInfo = new BufferInfo(data1, false, elementStride);
679
+ }
680
+ if (accessor.sparse) {
681
+ var data2 = GLTFUtil.processingSparseData(gltf, accessor, buffers, bufferInfo.data);
682
+ bufferInfo = new BufferInfo(data2, false, bufferInfo.stride);
683
+ }
684
+ return bufferInfo;
685
+ };
686
+ /**
687
+ * @deprecated
688
+ * Get accessor data.
689
+ */ GLTFUtil.getAccessorData = function getAccessorData(gltf, accessor, buffers) {
690
+ var bufferViews = gltf.bufferViews;
691
+ var bufferView = bufferViews[accessor.bufferView];
692
+ var arrayBuffer = buffers[bufferView.buffer];
693
+ var accessorByteOffset = accessor.hasOwnProperty("byteOffset") ? accessor.byteOffset : 0;
694
+ var bufferViewByteOffset = bufferView.hasOwnProperty("byteOffset") ? bufferView.byteOffset : 0;
695
+ var byteOffset = accessorByteOffset + bufferViewByteOffset;
696
+ var accessorTypeSize = GLTFUtil.getAccessorTypeSize(accessor.type);
697
+ var length = accessorTypeSize * accessor.count;
698
+ var _bufferView_byteStride;
699
+ var byteStride = (_bufferView_byteStride = bufferView.byteStride) != null ? _bufferView_byteStride : 0;
700
+ var arrayType = GLTFUtil.getComponentType(accessor.componentType);
701
+ var uint8Array;
702
+ if (byteStride) {
703
+ var accessorByteSize = accessorTypeSize * arrayType.BYTES_PER_ELEMENT;
704
+ uint8Array = new Uint8Array(accessor.count * accessorByteSize);
705
+ var originalBufferView = new Uint8Array(arrayBuffer, bufferViewByteOffset, bufferView.byteLength);
706
+ for(var i = 0; i < accessor.count; i++){
707
+ for(var j = 0; j < accessorByteSize; j++){
708
+ uint8Array[i * accessorByteSize + j] = originalBufferView[i * byteStride + accessorByteOffset + j];
709
+ }
710
+ }
711
+ } else {
712
+ uint8Array = new Uint8Array(arrayBuffer.slice(byteOffset, byteOffset + length * arrayType.BYTES_PER_ELEMENT));
713
+ }
714
+ var typedArray = new arrayType(uint8Array.buffer);
715
+ if (accessor.sparse) {
716
+ var _accessor_sparse = accessor.sparse, count = _accessor_sparse.count, indices = _accessor_sparse.indices, values = _accessor_sparse.values;
717
+ var indicesBufferView = bufferViews[indices.bufferView];
718
+ var valuesBufferView = bufferViews[values.bufferView];
719
+ var indicesArrayBuffer = buffers[indicesBufferView.buffer];
720
+ var valuesArrayBuffer = buffers[valuesBufferView.buffer];
721
+ var _indices_byteOffset, _indicesBufferView_byteOffset;
722
+ var indicesByteOffset = ((_indices_byteOffset = indices.byteOffset) != null ? _indices_byteOffset : 0) + ((_indicesBufferView_byteOffset = indicesBufferView.byteOffset) != null ? _indicesBufferView_byteOffset : 0);
723
+ var indicesByteLength = indicesBufferView.byteLength;
724
+ var _values_byteOffset, _valuesBufferView_byteOffset;
725
+ var valuesByteOffset = ((_values_byteOffset = values.byteOffset) != null ? _values_byteOffset : 0) + ((_valuesBufferView_byteOffset = valuesBufferView.byteOffset) != null ? _valuesBufferView_byteOffset : 0);
726
+ var valuesByteLength = valuesBufferView.byteLength;
727
+ var indicesType = GLTFUtil.getComponentType(indices.componentType);
728
+ var indicesArray = new indicesType(indicesArrayBuffer, indicesByteOffset, indicesByteLength / indicesType.BYTES_PER_ELEMENT);
729
+ var valuesArray = new arrayType(valuesArrayBuffer, valuesByteOffset, valuesByteLength / arrayType.BYTES_PER_ELEMENT);
730
+ for(var i1 = 0; i1 < count; i1++){
731
+ var replaceIndex = indicesArray[i1];
732
+ for(var j1 = 0; j1 < accessorTypeSize; j1++){
733
+ typedArray[replaceIndex * accessorTypeSize + j1] = valuesArray[i1 * accessorTypeSize + j1];
734
+ }
735
+ }
736
+ }
737
+ return typedArray;
738
+ };
739
+ GLTFUtil.getBufferViewData = function getBufferViewData(bufferView, buffers) {
740
+ var buffer = bufferView.buffer, _bufferView_byteOffset = bufferView.byteOffset, byteOffset = _bufferView_byteOffset === void 0 ? 0 : _bufferView_byteOffset, byteLength = bufferView.byteLength;
741
+ var arrayBuffer = buffers[buffer];
742
+ return arrayBuffer.slice(byteOffset, byteOffset + byteLength);
743
+ };
744
+ /**
745
+ * Get accessor data.
746
+ */ GLTFUtil.processingSparseData = function processingSparseData(gltf, accessor, buffers, originData) {
747
+ var bufferViews = gltf.bufferViews;
748
+ var accessorTypeSize = GLTFUtil.getAccessorTypeSize(accessor.type);
749
+ var TypedArray = GLTFUtil.getComponentType(accessor.componentType);
750
+ var data = originData.slice();
751
+ var _accessor_sparse = accessor.sparse, count = _accessor_sparse.count, indices = _accessor_sparse.indices, values = _accessor_sparse.values;
752
+ var indicesBufferView = bufferViews[indices.bufferView];
753
+ var valuesBufferView = bufferViews[values.bufferView];
754
+ var indicesArrayBuffer = buffers[indicesBufferView.buffer];
755
+ var valuesArrayBuffer = buffers[valuesBufferView.buffer];
756
+ var _indices_byteOffset, _indicesBufferView_byteOffset;
757
+ var indicesByteOffset = ((_indices_byteOffset = indices.byteOffset) != null ? _indices_byteOffset : 0) + ((_indicesBufferView_byteOffset = indicesBufferView.byteOffset) != null ? _indicesBufferView_byteOffset : 0);
758
+ var indicesByteLength = indicesBufferView.byteLength;
759
+ var _values_byteOffset, _valuesBufferView_byteOffset;
760
+ var valuesByteOffset = ((_values_byteOffset = values.byteOffset) != null ? _values_byteOffset : 0) + ((_valuesBufferView_byteOffset = valuesBufferView.byteOffset) != null ? _valuesBufferView_byteOffset : 0);
761
+ var valuesByteLength = valuesBufferView.byteLength;
762
+ var IndexTypeArray = GLTFUtil.getComponentType(indices.componentType);
763
+ var indicesArray = new IndexTypeArray(indicesArrayBuffer, indicesByteOffset, indicesByteLength / IndexTypeArray.BYTES_PER_ELEMENT);
764
+ var valuesArray = new TypedArray(valuesArrayBuffer, valuesByteOffset, valuesByteLength / TypedArray.BYTES_PER_ELEMENT);
765
+ for(var i = 0; i < count; i++){
766
+ var replaceIndex = indicesArray[i];
767
+ for(var j = 0; j < accessorTypeSize; j++){
768
+ data[replaceIndex * accessorTypeSize + j] = valuesArray[i * accessorTypeSize + j];
769
+ }
770
+ }
771
+ return data;
772
+ };
773
+ GLTFUtil.getIndexFormat = function getIndexFormat(type) {
774
+ switch(type){
775
+ case AccessorComponentType.UNSIGNED_BYTE:
776
+ return engineCore.IndexFormat.UInt8;
777
+ case AccessorComponentType.UNSIGNED_SHORT:
778
+ return engineCore.IndexFormat.UInt16;
779
+ case AccessorComponentType.UNSIGNED_INT:
780
+ return engineCore.IndexFormat.UInt32;
781
+ }
782
+ };
783
+ GLTFUtil.getElementFormat = function getElementFormat(type, size, normalized) {
784
+ if (normalized === void 0) normalized = false;
785
+ if (type == AccessorComponentType.FLOAT) {
786
+ switch(size){
787
+ case 1:
788
+ return engineCore.VertexElementFormat.Float;
789
+ case 2:
790
+ return engineCore.VertexElementFormat.Vector2;
791
+ case 3:
792
+ return engineCore.VertexElementFormat.Vector3;
793
+ case 4:
794
+ return engineCore.VertexElementFormat.Vector4;
795
+ }
796
+ }
797
+ if (type == AccessorComponentType.SHORT) {
798
+ switch(size){
799
+ case 2:
800
+ return normalized ? engineCore.VertexElementFormat.NormalizedShort2 : engineCore.VertexElementFormat.Short2;
801
+ case 3:
802
+ case 4:
803
+ return normalized ? engineCore.VertexElementFormat.NormalizedShort4 : engineCore.VertexElementFormat.Short4;
804
+ }
805
+ }
806
+ if (type == AccessorComponentType.UNSIGNED_SHORT) {
807
+ switch(size){
808
+ case 2:
809
+ return normalized ? engineCore.VertexElementFormat.NormalizedUShort2 : engineCore.VertexElementFormat.UShort2;
810
+ case 3:
811
+ case 4:
812
+ return normalized ? engineCore.VertexElementFormat.NormalizedUShort4 : engineCore.VertexElementFormat.UShort4;
813
+ }
814
+ }
815
+ if (type == AccessorComponentType.BYTE) {
816
+ switch(size){
817
+ case 2:
818
+ case 3:
819
+ case 4:
820
+ return normalized ? engineCore.VertexElementFormat.NormalizedByte4 : engineCore.VertexElementFormat.Byte4;
821
+ }
822
+ }
823
+ if (type == AccessorComponentType.UNSIGNED_BYTE) {
824
+ switch(size){
825
+ case 2:
826
+ case 3:
827
+ case 4:
828
+ return normalized ? engineCore.VertexElementFormat.NormalizedUByte4 : engineCore.VertexElementFormat.UByte4;
829
+ }
830
+ }
831
+ };
832
+ /**
833
+ * Load image buffer
834
+ */ GLTFUtil.loadImageBuffer = function loadImageBuffer(imageBuffer, type) {
835
+ return new Promise(function(resolve, reject) {
836
+ var blob = new window.Blob([
837
+ imageBuffer
838
+ ], {
839
+ type: type
840
+ });
841
+ var img = new Image();
842
+ img.onerror = function() {
843
+ reject(new Error("Failed to load image buffer"));
844
+ };
845
+ img.onload = function() {
846
+ // Call requestAnimationFrame to avoid iOS's bug.
847
+ requestAnimationFrame(function() {
848
+ resolve(img);
849
+ img.onload = null;
850
+ img.onerror = null;
851
+ img.onabort = null;
852
+ });
853
+ };
854
+ img.crossOrigin = "anonymous";
855
+ img.src = URL.createObjectURL(blob);
856
+ });
857
+ };
858
+ GLTFUtil.isAbsoluteUrl = function isAbsoluteUrl(url) {
859
+ return /^(?:http|blob|data:|\/)/.test(url);
860
+ };
861
+ GLTFUtil.parseRelativeUrl = function parseRelativeUrl(baseUrl, relativeUrl) {
862
+ if (GLTFUtil.isAbsoluteUrl(relativeUrl)) {
863
+ return relativeUrl;
864
+ }
865
+ return baseUrl.substring(0, baseUrl.lastIndexOf("/") + 1) + GLTFUtil._formatRelativePath(relativeUrl);
866
+ };
867
+ /**
868
+ * Parse the glb format.
869
+ */ GLTFUtil.parseGLB = function parseGLB(glb) {
870
+ var UINT32_LENGTH = 4;
871
+ var GLB_HEADER_MAGIC = 0x46546c67; // 'glTF'
872
+ var GLB_HEADER_LENGTH = 12;
873
+ var GLB_CHUNK_TYPES = {
874
+ JSON: 0x4e4f534a,
875
+ BIN: 0x004e4942
876
+ };
877
+ var dataView = new DataView(glb);
878
+ // read header
879
+ var header = {
880
+ magic: dataView.getUint32(0, true),
881
+ version: dataView.getUint32(UINT32_LENGTH, true),
882
+ length: dataView.getUint32(2 * UINT32_LENGTH, true)
883
+ };
884
+ if (header.magic !== GLB_HEADER_MAGIC) {
885
+ console.error("Invalid glb magic number. Expected 0x46546C67, found 0x" + header.magic.toString(16));
886
+ return null;
887
+ }
888
+ // read main data
889
+ var chunkLength = dataView.getUint32(GLB_HEADER_LENGTH, true);
890
+ var chunkType = dataView.getUint32(GLB_HEADER_LENGTH + UINT32_LENGTH, true);
891
+ // read glTF json
892
+ if (chunkType !== GLB_CHUNK_TYPES.JSON) {
893
+ console.error("Invalid glb chunk type. Expected 0x4E4F534A, found 0x" + chunkType.toString(16));
894
+ return null;
895
+ }
896
+ var glTFData = new Uint8Array(glb, GLB_HEADER_LENGTH + 2 * UINT32_LENGTH, chunkLength);
897
+ var gltf = JSON.parse(GLTFUtil.decodeText(glTFData));
898
+ // read all buffers
899
+ var buffers = [];
900
+ var byteOffset = GLB_HEADER_LENGTH + 2 * UINT32_LENGTH + chunkLength;
901
+ while(byteOffset < header.length){
902
+ chunkLength = dataView.getUint32(byteOffset, true);
903
+ chunkType = dataView.getUint32(byteOffset + UINT32_LENGTH, true);
904
+ if (chunkType !== GLB_CHUNK_TYPES.BIN) {
905
+ console.error("Invalid glb chunk type. Expected 0x004E4942, found 0x" + chunkType.toString(16));
906
+ return null;
907
+ }
908
+ var currentOffset = byteOffset + 2 * UINT32_LENGTH;
909
+ var buffer = glb.slice(currentOffset, currentOffset + chunkLength);
910
+ buffers.push(buffer);
911
+ byteOffset += chunkLength + 2 * UINT32_LENGTH;
912
+ }
913
+ return {
914
+ gltf: gltf,
915
+ buffers: buffers
916
+ };
917
+ };
918
+ GLTFUtil._formatRelativePath = function _formatRelativePath(path) {
919
+ // For example input is "a/b", "/a/b", "./a/b", "./a/./b", "./a/../a/b", output is "a/b"
920
+ return path.split("/").filter(Boolean).reduce(function(acc, cur) {
921
+ if (cur === "..") acc.pop();
922
+ else if (cur !== ".") acc.push(cur);
923
+ return acc;
924
+ }, []).join("/");
925
+ };
926
+ return GLTFUtil;
927
+ }();
928
+
929
+ function _array_like_to_array(arr, len) {
930
+ if (len == null || len > arr.length) len = arr.length;
931
+
932
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
933
+
934
+ return arr2;
935
+ }
936
+
937
+ function _array_without_holes(arr) {
938
+ if (Array.isArray(arr)) return _array_like_to_array(arr);
939
+ }
940
+
941
+ function _iterable_to_array(iter) {
942
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) {
943
+ return Array.from(iter);
944
+ }
945
+ }
946
+
947
+ function _non_iterable_spread() {
948
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
949
+ }
950
+
951
+ function _unsupported_iterable_to_array(o, minLen) {
952
+ if (!o) return;
953
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
954
+
955
+ var n = Object.prototype.toString.call(o).slice(8, -1);
956
+
957
+ if (n === "Object" && o.constructor) n = o.constructor.name;
958
+ if (n === "Map" || n === "Set") return Array.from(n);
959
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
960
+ }
961
+
962
+ function _to_consumable_array(arr) {
963
+ return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
964
+ }
965
+
966
+ var Parser = /*#__PURE__*/ function() {
967
+ function Parser() {}
968
+ Parser.parseEngineResource = function parseEngineResource(extensionName, extensionSchema, parseResource, context) {
969
+ for(var _len = arguments.length, extra = new Array(_len > 4 ? _len - 4 : 0), _key = 4; _key < _len; _key++){
970
+ extra[_key - 4] = arguments[_key];
971
+ }
972
+ var parsers = Parser._extensionParsers[extensionName];
973
+ if (parsers == null ? void 0 : parsers.length) {
974
+ for(var i = 0; i < parsers.length; i++){
975
+ var _parsers_i;
976
+ (_parsers_i = parsers[i]).parseEngineResource.apply(_parsers_i, [
977
+ extensionSchema,
978
+ parseResource,
979
+ context
980
+ ].concat(_to_consumable_array(extra)));
981
+ }
982
+ }
983
+ };
984
+ Parser.createEngineResource = function createEngineResource(extensionName, extensionSchema, context) {
985
+ for(var _len = arguments.length, extra = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++){
986
+ extra[_key - 3] = arguments[_key];
987
+ }
988
+ var parsers = Parser._extensionParsers[extensionName];
989
+ if (parsers == null ? void 0 : parsers.length) {
990
+ var _parsers_;
991
+ return (_parsers_ = parsers[0]).createEngineResource.apply(_parsers_, [
992
+ extensionSchema,
993
+ context
994
+ ].concat(_to_consumable_array(extra)));
995
+ }
996
+ };
997
+ Parser.hasExtensionParser = function hasExtensionParser(extensionName) {
998
+ var parsers = Parser._extensionParsers[extensionName];
999
+ return !!(parsers == null ? void 0 : parsers.length);
1000
+ };
1001
+ Parser.initialize = function initialize(extensionName) {
1002
+ var parsers = Parser._extensionParsers[extensionName];
1003
+ if (parsers == null ? void 0 : parsers.length) {
1004
+ for(var i = 0; i < parsers.length; i++){
1005
+ parsers[i].initialize();
1006
+ }
1007
+ }
1008
+ };
1009
+ /**
1010
+ * @internal
1011
+ */ Parser._addExtensionParser = function _addExtensionParser(extensionName, extensionParser) {
1012
+ if (!Parser._extensionParsers[extensionName]) {
1013
+ Parser._extensionParsers[extensionName] = [];
1014
+ }
1015
+ Parser._extensionParsers[extensionName].push(extensionParser);
1016
+ };
1017
+ return Parser;
1018
+ }();
1019
+ (function() {
1020
+ Parser._extensionParsers = {};
1021
+ })();
1022
+ /**
1023
+ * Declare ExtensionParser's decorator.
1024
+ * @param extensionName - Extension name
1025
+ */ function registerExtension(extensionName) {
1026
+ return function(parser) {
1027
+ var extensionParser = new parser();
1028
+ Parser._addExtensionParser(extensionName, extensionParser);
1029
+ };
1030
+ }
1031
+
1032
+ var ExtensionParser = /*#__PURE__*/ function() {
1033
+ function ExtensionParser() {}
1034
+ var _proto = ExtensionParser.prototype;
1035
+ _proto.initialize = function initialize() {};
1036
+ _proto.parseEngineResource = function parseEngineResource(schema, parseResource, context) {
1037
+ for(var _len = arguments.length, extra = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++){
1038
+ extra[_key - 3] = arguments[_key];
1039
+ }
1040
+ };
1041
+ _proto.createEngineResource = function createEngineResource(schema, context) {
1042
+ for(var _len = arguments.length, extra = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++){
1043
+ extra[_key - 2] = arguments[_key];
1044
+ }
1045
+ return null;
1046
+ };
1047
+ return ExtensionParser;
1048
+ }();
1049
+
1050
+ var KHR_draco_mesh_compression = /*#__PURE__*/ function(ExtensionParser) {
1051
+ _inherits(KHR_draco_mesh_compression1, ExtensionParser);
1052
+ function KHR_draco_mesh_compression1() {
1053
+ return ExtensionParser.apply(this, arguments);
1054
+ }
1055
+ var _proto = KHR_draco_mesh_compression1.prototype;
1056
+ _proto.initialize = function initialize() {
1057
+ if (!KHR_draco_mesh_compression._decoder) {
1058
+ KHR_draco_mesh_compression._decoder = new engineDraco.DRACODecoder();
1059
+ }
1060
+ };
1061
+ _proto.createEngineResource = function createEngineResource(schema, context, gltfPrimitive) {
1062
+ var gltf = context.gltf, buffers = context.buffers;
1063
+ var bufferViews = gltf.bufferViews, accessors = gltf.accessors;
1064
+ var bufferViewIndex = schema.bufferView, gltfAttributeMap = schema.attributes;
1065
+ var attributeMap = {};
1066
+ var attributeTypeMap = {};
1067
+ for(var attributeName in gltfAttributeMap){
1068
+ attributeMap[attributeName] = gltfAttributeMap[attributeName];
1069
+ }
1070
+ for(var attributeName1 in gltfPrimitive.attributes){
1071
+ if (gltfAttributeMap[attributeName1] !== undefined) {
1072
+ var accessorDef = accessors[gltfPrimitive.attributes[attributeName1]];
1073
+ attributeTypeMap[attributeName1] = GLTFUtil.getComponentType(accessorDef.componentType).name;
1074
+ }
1075
+ }
1076
+ var indexAccessor = accessors[gltfPrimitive.indices];
1077
+ var indexType = GLTFUtil.getComponentType(indexAccessor.componentType).name;
1078
+ var taskConfig = {
1079
+ attributeIDs: attributeMap,
1080
+ attributeTypes: attributeTypeMap,
1081
+ useUniqueIDs: true,
1082
+ indexType: indexType
1083
+ };
1084
+ var buffer = GLTFUtil.getBufferViewData(bufferViews[bufferViewIndex], buffers);
1085
+ return KHR_draco_mesh_compression._decoder.decode(buffer, taskConfig).then(function(parsedGeometry) {
1086
+ return parsedGeometry;
1087
+ });
1088
+ };
1089
+ return KHR_draco_mesh_compression1;
1090
+ }(ExtensionParser);
1091
+ KHR_draco_mesh_compression = __decorate([
1092
+ registerExtension("KHR_draco_mesh_compression")
1093
+ ], KHR_draco_mesh_compression);
1094
+
1095
+ function _instanceof(left, right) {
1096
+ if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
1097
+ return !!right[Symbol.hasInstance](left);
1098
+ } else return left instanceof right;
1099
+ }
1100
+
1101
+ var KHR_lights_punctual = /*#__PURE__*/ function(ExtensionParser) {
1102
+ _inherits(KHR_lights_punctual, ExtensionParser);
1103
+ function KHR_lights_punctual() {
1104
+ return ExtensionParser.apply(this, arguments);
1105
+ }
1106
+ var _proto = KHR_lights_punctual.prototype;
1107
+ _proto.parseEngineResource = function parseEngineResource(schema, entity, context) {
1108
+ var color = schema.color, _schema_intensity = schema.intensity, intensity = _schema_intensity === void 0 ? 1 : _schema_intensity, type = schema.type, range = schema.range, spot = schema.spot;
1109
+ var glTFResource = context.glTFResource;
1110
+ var light;
1111
+ if (type === "directional") {
1112
+ light = entity.addComponent(engineCore.DirectLight);
1113
+ } else if (type === "point") {
1114
+ light = entity.addComponent(engineCore.PointLight);
1115
+ } else if (type === "spot") {
1116
+ light = entity.addComponent(engineCore.SpotLight);
1117
+ }
1118
+ if (color) {
1119
+ light.color.set(color[0], color[1], color[2], 1);
1120
+ }
1121
+ light.intensity = intensity;
1122
+ if (range && !_instanceof(light, engineCore.DirectLight)) {
1123
+ light.distance = range;
1124
+ }
1125
+ if (spot && _instanceof(light, engineCore.SpotLight)) {
1126
+ var _spot_innerConeAngle = spot.innerConeAngle, innerConeAngle = _spot_innerConeAngle === void 0 ? 0 : _spot_innerConeAngle, _spot_outerConeAngle = spot.outerConeAngle, outerConeAngle = _spot_outerConeAngle === void 0 ? Math.PI / 4 : _spot_outerConeAngle;
1127
+ light.angle = innerConeAngle;
1128
+ light.penumbra = outerConeAngle - innerConeAngle;
1129
+ }
1130
+ if (!glTFResource.lights) glTFResource.lights = [];
1131
+ glTFResource.lights.push(light);
1132
+ };
1133
+ return KHR_lights_punctual;
1134
+ }(ExtensionParser);
1135
+ KHR_lights_punctual = __decorate([
1136
+ registerExtension("KHR_lights_punctual")
1137
+ ], KHR_lights_punctual);
1138
+
1139
+ var MaterialParser = /*#__PURE__*/ function(Parser1) {
1140
+ _inherits(MaterialParser, Parser1);
1141
+ function MaterialParser() {
1142
+ return Parser1.apply(this, arguments);
1143
+ }
1144
+ var _proto = MaterialParser.prototype;
1145
+ _proto.parse = function parse(context) {
1146
+ var gltf = context.gltf, glTFResource = context.glTFResource;
1147
+ var engine = glTFResource.engine, textures = glTFResource.textures;
1148
+ if (!gltf.materials) return;
1149
+ var materialsPromiseInfo = context.materialsPromiseInfo;
1150
+ var materials = [];
1151
+ for(var i = 0; i < gltf.materials.length; i++){
1152
+ var _gltf_materials_i = gltf.materials[i], _gltf_materials_i_extensions = _gltf_materials_i.extensions, extensions = _gltf_materials_i_extensions === void 0 ? {} : _gltf_materials_i_extensions, pbrMetallicRoughness = _gltf_materials_i.pbrMetallicRoughness, normalTexture = _gltf_materials_i.normalTexture, occlusionTexture = _gltf_materials_i.occlusionTexture, emissiveTexture = _gltf_materials_i.emissiveTexture, emissiveFactor = _gltf_materials_i.emissiveFactor, alphaMode = _gltf_materials_i.alphaMode, alphaCutoff = _gltf_materials_i.alphaCutoff, doubleSided = _gltf_materials_i.doubleSided, _gltf_materials_i_name = _gltf_materials_i.name, name = _gltf_materials_i_name === void 0 ? "" : _gltf_materials_i_name;
1153
+ var KHR_materials_unlit = extensions.KHR_materials_unlit, KHR_materials_pbrSpecularGlossiness = extensions.KHR_materials_pbrSpecularGlossiness, KHR_materials_clearcoat = extensions.KHR_materials_clearcoat, OASIS_materials_remap = extensions.OASIS_materials_remap;
1154
+ var material = null;
1155
+ if (KHR_materials_unlit) {
1156
+ material = Parser.createEngineResource("KHR_materials_unlit", KHR_materials_unlit, context);
1157
+ } else if (KHR_materials_pbrSpecularGlossiness) {
1158
+ material = Parser.createEngineResource("KHR_materials_pbrSpecularGlossiness", KHR_materials_pbrSpecularGlossiness, context);
1159
+ } else {
1160
+ material = new engineCore.PBRMaterial(engine);
1161
+ }
1162
+ material.name = name;
1163
+ if (KHR_materials_clearcoat) {
1164
+ Parser.parseEngineResource("KHR_materials_clearcoat", KHR_materials_clearcoat, material, context);
1165
+ }
1166
+ if (pbrMetallicRoughness) {
1167
+ var baseColorFactor = pbrMetallicRoughness.baseColorFactor, baseColorTexture = pbrMetallicRoughness.baseColorTexture, metallicFactor = pbrMetallicRoughness.metallicFactor, roughnessFactor = pbrMetallicRoughness.roughnessFactor, metallicRoughnessTexture = pbrMetallicRoughness.metallicRoughnessTexture;
1168
+ if (baseColorFactor) {
1169
+ material.baseColor = new engineMath.Color(engineMath.Color.linearToGammaSpace(baseColorFactor[0]), engineMath.Color.linearToGammaSpace(baseColorFactor[1]), engineMath.Color.linearToGammaSpace(baseColorFactor[2]), baseColorFactor[3]);
1170
+ }
1171
+ if (baseColorTexture) {
1172
+ material.baseTexture = textures[baseColorTexture.index];
1173
+ MaterialParser._parseTextureTransform(material, baseColorTexture.extensions, context);
1174
+ }
1175
+ if (!KHR_materials_unlit && !KHR_materials_pbrSpecularGlossiness) {
1176
+ var m = material;
1177
+ m.metallic = metallicFactor != null ? metallicFactor : 1;
1178
+ m.roughness = roughnessFactor != null ? roughnessFactor : 1;
1179
+ if (metallicRoughnessTexture) {
1180
+ m.roughnessMetallicTexture = textures[metallicRoughnessTexture.index];
1181
+ MaterialParser._parseTextureTransform(material, metallicRoughnessTexture.extensions, context);
1182
+ }
1183
+ }
1184
+ }
1185
+ if (!KHR_materials_unlit) {
1186
+ var m1 = material;
1187
+ if (emissiveTexture) {
1188
+ m1.emissiveTexture = textures[emissiveTexture.index];
1189
+ MaterialParser._parseTextureTransform(material, emissiveTexture.extensions, context);
1190
+ }
1191
+ if (emissiveFactor) {
1192
+ m1.emissiveColor = new engineMath.Color(engineMath.Color.linearToGammaSpace(emissiveFactor[0]), engineMath.Color.linearToGammaSpace(emissiveFactor[1]), engineMath.Color.linearToGammaSpace(emissiveFactor[2]));
1193
+ }
1194
+ if (normalTexture) {
1195
+ var index = normalTexture.index, scale = normalTexture.scale;
1196
+ m1.normalTexture = textures[index];
1197
+ MaterialParser._parseTextureTransform(material, normalTexture.extensions, context);
1198
+ if (scale !== undefined) {
1199
+ m1.normalTextureIntensity = scale;
1200
+ }
1201
+ }
1202
+ if (occlusionTexture) {
1203
+ var index1 = occlusionTexture.index, strength = occlusionTexture.strength, texCoord = occlusionTexture.texCoord;
1204
+ m1.occlusionTexture = textures[index1];
1205
+ MaterialParser._parseTextureTransform(material, occlusionTexture.extensions, context);
1206
+ if (strength !== undefined) {
1207
+ m1.occlusionTextureIntensity = strength;
1208
+ }
1209
+ if (texCoord === engineCore.TextureCoordinate.UV1) {
1210
+ m1.occlusionTextureCoord = engineCore.TextureCoordinate.UV1;
1211
+ } else if (texCoord > engineCore.TextureCoordinate.UV1) {
1212
+ engineCore.Logger.warn("Occlusion texture uv coordinate must be UV0 or UV1.");
1213
+ }
1214
+ }
1215
+ }
1216
+ if (OASIS_materials_remap) {
1217
+ var _gltf_extensions;
1218
+ gltf.extensions = (_gltf_extensions = gltf.extensions) != null ? _gltf_extensions : {};
1219
+ var _gltf_extensions_OASIS_materials_remap;
1220
+ gltf.extensions["OASIS_materials_remap"] = (_gltf_extensions_OASIS_materials_remap = gltf.extensions["OASIS_materials_remap"]) != null ? _gltf_extensions_OASIS_materials_remap : {};
1221
+ gltf.extensions["OASIS_materials_remap"][i] = Parser.createEngineResource("OASIS_materials_remap", OASIS_materials_remap, context);
1222
+ }
1223
+ if (doubleSided) {
1224
+ material.renderFace = engineCore.RenderFace.Double;
1225
+ } else {
1226
+ material.renderFace = engineCore.RenderFace.Front;
1227
+ }
1228
+ switch(alphaMode){
1229
+ case MaterialAlphaMode.OPAQUE:
1230
+ material.isTransparent = false;
1231
+ break;
1232
+ case MaterialAlphaMode.BLEND:
1233
+ material.isTransparent = true;
1234
+ break;
1235
+ case MaterialAlphaMode.MASK:
1236
+ material.alphaCutoff = alphaCutoff != null ? alphaCutoff : 0.5;
1237
+ break;
1238
+ }
1239
+ materials[i] = material;
1240
+ }
1241
+ glTFResource.materials = materials;
1242
+ materialsPromiseInfo.resolve(materials);
1243
+ return materialsPromiseInfo.promise;
1244
+ };
1245
+ /** @internal */ MaterialParser._parseTextureTransform = function _parseTextureTransform(material, extensions, context) {
1246
+ if (extensions === void 0) extensions = {};
1247
+ var schema = extensions.KHR_texture_transform;
1248
+ if (schema) {
1249
+ Parser.parseEngineResource("KHR_texture_transform", schema, material, context);
1250
+ }
1251
+ };
1252
+ return MaterialParser;
1253
+ }(Parser);
1254
+
1255
+ var KHR_materials_clearcoat = /*#__PURE__*/ function(ExtensionParser) {
1256
+ _inherits(KHR_materials_clearcoat, ExtensionParser);
1257
+ function KHR_materials_clearcoat() {
1258
+ return ExtensionParser.apply(this, arguments);
1259
+ }
1260
+ var _proto = KHR_materials_clearcoat.prototype;
1261
+ _proto.parseEngineResource = function parseEngineResource(schema, material, context) {
1262
+ var textures = context.glTFResource.textures;
1263
+ var _schema_clearcoatFactor = schema.clearcoatFactor, clearcoatFactor = _schema_clearcoatFactor === void 0 ? 0 : _schema_clearcoatFactor, clearcoatTexture = schema.clearcoatTexture, _schema_clearcoatRoughnessFactor = schema.clearcoatRoughnessFactor, clearcoatRoughnessFactor = _schema_clearcoatRoughnessFactor === void 0 ? 0 : _schema_clearcoatRoughnessFactor, clearcoatRoughnessTexture = schema.clearcoatRoughnessTexture, clearcoatNormalTexture = schema.clearcoatNormalTexture;
1264
+ material.clearCoat = clearcoatFactor;
1265
+ material.clearCoatRoughness = clearcoatRoughnessFactor;
1266
+ if (clearcoatTexture) {
1267
+ material.clearCoatTexture = textures[clearcoatTexture.index];
1268
+ MaterialParser._parseTextureTransform(material, clearcoatTexture.extensions, context);
1269
+ }
1270
+ if (clearcoatRoughnessTexture) {
1271
+ material.clearCoatRoughnessTexture = textures[clearcoatRoughnessTexture.index];
1272
+ MaterialParser._parseTextureTransform(material, clearcoatRoughnessTexture.extensions, context);
1273
+ }
1274
+ if (clearcoatNormalTexture) {
1275
+ material.clearCoatNormalTexture = textures[clearcoatNormalTexture.index];
1276
+ MaterialParser._parseTextureTransform(material, clearcoatNormalTexture.extensions, context);
1277
+ }
1278
+ };
1279
+ return KHR_materials_clearcoat;
1280
+ }(ExtensionParser);
1281
+ KHR_materials_clearcoat = __decorate([
1282
+ registerExtension("KHR_materials_clearcoat")
1283
+ ], KHR_materials_clearcoat);
1284
+
1285
+ var KHR_materials_pbrSpecularGlossiness = /*#__PURE__*/ function(ExtensionParser) {
1286
+ _inherits(KHR_materials_pbrSpecularGlossiness, ExtensionParser);
1287
+ function KHR_materials_pbrSpecularGlossiness() {
1288
+ return ExtensionParser.apply(this, arguments);
1289
+ }
1290
+ var _proto = KHR_materials_pbrSpecularGlossiness.prototype;
1291
+ _proto.createEngineResource = function createEngineResource(schema, context) {
1292
+ var _context_glTFResource = context.glTFResource, engine = _context_glTFResource.engine, textures = _context_glTFResource.textures;
1293
+ var material = new engineCore.PBRSpecularMaterial(engine);
1294
+ var diffuseFactor = schema.diffuseFactor, diffuseTexture = schema.diffuseTexture, specularFactor = schema.specularFactor, glossinessFactor = schema.glossinessFactor, specularGlossinessTexture = schema.specularGlossinessTexture;
1295
+ if (diffuseFactor) {
1296
+ material.baseColor = new engineMath.Color(engineMath.Color.linearToGammaSpace(diffuseFactor[0]), engineMath.Color.linearToGammaSpace(diffuseFactor[1]), engineMath.Color.linearToGammaSpace(diffuseFactor[2]), diffuseFactor[3]);
1297
+ }
1298
+ if (diffuseTexture) {
1299
+ material.baseTexture = textures[diffuseTexture.index];
1300
+ MaterialParser._parseTextureTransform(material, diffuseTexture.extensions, context);
1301
+ }
1302
+ if (specularFactor) {
1303
+ material.specularColor = new engineMath.Color(engineMath.Color.linearToGammaSpace(specularFactor[0]), engineMath.Color.linearToGammaSpace(specularFactor[1]), engineMath.Color.linearToGammaSpace(specularFactor[2]));
1304
+ }
1305
+ if (glossinessFactor !== undefined) {
1306
+ material.glossiness = glossinessFactor;
1307
+ }
1308
+ if (specularGlossinessTexture) {
1309
+ material.specularGlossinessTexture = textures[specularGlossinessTexture.index];
1310
+ MaterialParser._parseTextureTransform(material, specularGlossinessTexture.extensions, context);
1311
+ }
1312
+ return material;
1313
+ };
1314
+ return KHR_materials_pbrSpecularGlossiness;
1315
+ }(ExtensionParser);
1316
+ KHR_materials_pbrSpecularGlossiness = __decorate([
1317
+ registerExtension("KHR_materials_pbrSpecularGlossiness")
1318
+ ], KHR_materials_pbrSpecularGlossiness);
1319
+
1320
+ var KHR_materials_unlit = /*#__PURE__*/ function(ExtensionParser) {
1321
+ _inherits(KHR_materials_unlit, ExtensionParser);
1322
+ function KHR_materials_unlit() {
1323
+ return ExtensionParser.apply(this, arguments);
1324
+ }
1325
+ var _proto = KHR_materials_unlit.prototype;
1326
+ _proto.createEngineResource = function createEngineResource(schema, context) {
1327
+ var engine = context.glTFResource.engine;
1328
+ var material = new engineCore.UnlitMaterial(engine);
1329
+ return material;
1330
+ };
1331
+ return KHR_materials_unlit;
1332
+ }(ExtensionParser);
1333
+ KHR_materials_unlit = __decorate([
1334
+ registerExtension("KHR_materials_unlit")
1335
+ ], KHR_materials_unlit);
1336
+
1337
+ var KHR_materials_variants = /*#__PURE__*/ function(ExtensionParser) {
1338
+ _inherits(KHR_materials_variants, ExtensionParser);
1339
+ function KHR_materials_variants() {
1340
+ return ExtensionParser.apply(this, arguments);
1341
+ }
1342
+ var _proto = KHR_materials_variants.prototype;
1343
+ _proto.parseEngineResource = function parseEngineResource(schema, renderer, context) {
1344
+ var _context_gltf = context.gltf, _context_gltf_extensions = _context_gltf.extensions, _context_gltf_extensions_KHR_materials_variants = _context_gltf_extensions.KHR_materials_variants, variantNames = _context_gltf_extensions_KHR_materials_variants.variants, glTFResource = context.glTFResource;
1345
+ var mappings = schema.mappings;
1346
+ for(var i = 0; i < mappings.length; i++){
1347
+ var _mappings_i = mappings[i], material = _mappings_i.material, variants = _mappings_i.variants;
1348
+ if (!glTFResource.variants) glTFResource.variants = [];
1349
+ glTFResource.variants.push({
1350
+ renderer: renderer,
1351
+ material: glTFResource.materials[material],
1352
+ variants: variants.map(function(index) {
1353
+ return variantNames[index].name;
1354
+ })
1355
+ });
1356
+ }
1357
+ };
1358
+ return KHR_materials_variants;
1359
+ }(ExtensionParser);
1360
+ KHR_materials_variants = __decorate([
1361
+ registerExtension("KHR_materials_variants")
1362
+ ], KHR_materials_variants);
1363
+
1364
+ var KHR_mesh_quantization = /*#__PURE__*/ function(ExtensionParser) {
1365
+ _inherits(KHR_mesh_quantization, ExtensionParser);
1366
+ function KHR_mesh_quantization() {
1367
+ return ExtensionParser.apply(this, arguments);
1368
+ }
1369
+ return KHR_mesh_quantization;
1370
+ }(ExtensionParser);
1371
+ KHR_mesh_quantization = __decorate([
1372
+ registerExtension("KHR_mesh_quantization")
1373
+ ], KHR_mesh_quantization);
1374
+
1375
+ var KHR_texture_transform = /*#__PURE__*/ function(ExtensionParser) {
1376
+ _inherits(KHR_texture_transform, ExtensionParser);
1377
+ function KHR_texture_transform() {
1378
+ return ExtensionParser.apply(this, arguments);
1379
+ }
1380
+ var _proto = KHR_texture_transform.prototype;
1381
+ _proto.parseEngineResource = function parseEngineResource(schema, material, context) {
1382
+ var offset = schema.offset, rotation = schema.rotation, scale = schema.scale, texCoord = schema.texCoord;
1383
+ if (offset) {
1384
+ material.tilingOffset.z = offset[0];
1385
+ material.tilingOffset.w = offset[1];
1386
+ }
1387
+ if (scale) {
1388
+ material.tilingOffset.x = scale[0];
1389
+ material.tilingOffset.y = scale[1];
1390
+ }
1391
+ if (rotation) {
1392
+ engineCore.Logger.warn("rotation in KHR_texture_transform is not supported now");
1393
+ }
1394
+ if (texCoord) {
1395
+ engineCore.Logger.warn("texCoord in KHR_texture_transform is not supported now");
1396
+ }
1397
+ };
1398
+ return KHR_texture_transform;
1399
+ }(ExtensionParser);
1400
+ KHR_texture_transform = __decorate([
1401
+ registerExtension("KHR_texture_transform")
1402
+ ], KHR_texture_transform);
1403
+
1404
+ var GalaceanMaterialsRemap = /*#__PURE__*/ function(ExtensionParser) {
1405
+ _inherits(GalaceanMaterialsRemap, ExtensionParser);
1406
+ function GalaceanMaterialsRemap() {
1407
+ return ExtensionParser.apply(this, arguments);
1408
+ }
1409
+ var _proto = GalaceanMaterialsRemap.prototype;
1410
+ _proto.createEngineResource = function createEngineResource(schema, context) {
1411
+ var engine = context.glTFResource.engine;
1412
+ // @ts-ignore
1413
+ return engine.resourceManager.getResourceByRef(schema);
1414
+ };
1415
+ return GalaceanMaterialsRemap;
1416
+ }(ExtensionParser);
1417
+ GalaceanMaterialsRemap = __decorate([
1418
+ registerExtension("OASIS_materials_remap")
1419
+ ], GalaceanMaterialsRemap);
1420
+
1421
+ function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
1422
+ var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
1423
+
1424
+ if (it) return (it = it.call(o)).next.bind(it);
1425
+ // Fallback for engines without symbol support
1426
+ if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike && o && typeof o.length === "number") {
1427
+ if (it) o = it;
1428
+
1429
+ var i = 0;
1430
+
1431
+ return function() {
1432
+ if (i >= o.length) return { done: true };
1433
+
1434
+ return { done: false, value: o[i++] };
1435
+ };
1436
+ }
1437
+
1438
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
1439
+ }
1440
+
1441
+ var AnimationParser = /*#__PURE__*/ function(Parser) {
1442
+ _inherits(AnimationParser, Parser);
1443
+ function AnimationParser() {
1444
+ return Parser.apply(this, arguments);
1445
+ }
1446
+ var _proto = AnimationParser.prototype;
1447
+ _proto.parse = function parse(context) {
1448
+ var gltf = context.gltf; context.buffers; var glTFResource = context.glTFResource;
1449
+ var entities = glTFResource.entities;
1450
+ var animations = gltf.animations, accessors = gltf.accessors;
1451
+ if (!animations) {
1452
+ return;
1453
+ }
1454
+ var animationClipsPromiseInfo = context.animationClipsPromiseInfo;
1455
+ var animationClipCount = animations.length;
1456
+ var animationClips = new Array(animationClipCount);
1457
+ var animationsIndices = new Array(animationClipCount);
1458
+ for(var i = 0; i < animationClipCount; i++){
1459
+ var gltfAnimation = animations[i];
1460
+ var channels = gltfAnimation.channels, samplers = gltfAnimation.samplers, _gltfAnimation_name = gltfAnimation.name, name = _gltfAnimation_name === void 0 ? "AnimationClip" + i : _gltfAnimation_name;
1461
+ var animationClip = new engineCore.AnimationClip(name);
1462
+ var sampleDataCollection = new Array();
1463
+ // parse samplers
1464
+ for(var j = 0, m = samplers.length; j < m; j++){
1465
+ var gltfSampler = samplers[j];
1466
+ var inputAccessor = accessors[gltfSampler.input];
1467
+ var outputAccessor = accessors[gltfSampler.output];
1468
+ var input = GLTFUtil.getAccessorBuffer(context, gltf, inputAccessor).data;
1469
+ var output = GLTFUtil.getAccessorBuffer(context, gltf, outputAccessor).data;
1470
+ if (outputAccessor.normalized) {
1471
+ var scale = GLTFUtil.getNormalizedComponentScale(outputAccessor.componentType);
1472
+ var scaled = new Float32Array(output.length);
1473
+ for(var k = 0, v = output.length; k < v; k++){
1474
+ scaled[k] = output[k] * scale;
1475
+ }
1476
+ output = scaled;
1477
+ }
1478
+ var outputStride = output.length / input.length;
1479
+ var _gltfSampler_interpolation;
1480
+ var interpolation = (_gltfSampler_interpolation = gltfSampler.interpolation) != null ? _gltfSampler_interpolation : AnimationSamplerInterpolation.Linear;
1481
+ var samplerInterpolation = void 0;
1482
+ switch(interpolation){
1483
+ case AnimationSamplerInterpolation.CubicSpine:
1484
+ samplerInterpolation = engineCore.InterpolationType.CubicSpine;
1485
+ break;
1486
+ case AnimationSamplerInterpolation.Step:
1487
+ samplerInterpolation = engineCore.InterpolationType.Step;
1488
+ break;
1489
+ case AnimationSamplerInterpolation.Linear:
1490
+ samplerInterpolation = engineCore.InterpolationType.Linear;
1491
+ break;
1492
+ }
1493
+ input[input.length - 1];
1494
+ sampleDataCollection.push({
1495
+ type: outputAccessor.type,
1496
+ interpolation: samplerInterpolation,
1497
+ input: input,
1498
+ output: output,
1499
+ outputSize: outputStride
1500
+ });
1501
+ }
1502
+ for(var j1 = 0, m1 = channels.length; j1 < m1; j1++){
1503
+ var gltfChannel = channels[j1];
1504
+ var target = gltfChannel.target;
1505
+ var channelTargetEntity = entities[target.node];
1506
+ var relativePath = "";
1507
+ var entity = channelTargetEntity;
1508
+ while(entity.parent){
1509
+ relativePath = relativePath === "" ? "" + entity.name : entity.name + "/" + relativePath;
1510
+ entity = entity.parent;
1511
+ }
1512
+ var ComponentType = void 0;
1513
+ var propertyName = void 0;
1514
+ switch(target.path){
1515
+ case AnimationChannelTargetPath.TRANSLATION:
1516
+ ComponentType = engineCore.Transform;
1517
+ propertyName = "position";
1518
+ break;
1519
+ case AnimationChannelTargetPath.ROTATION:
1520
+ ComponentType = engineCore.Transform;
1521
+ propertyName = "rotationQuaternion";
1522
+ break;
1523
+ case AnimationChannelTargetPath.SCALE:
1524
+ ComponentType = engineCore.Transform;
1525
+ propertyName = "scale";
1526
+ break;
1527
+ case AnimationChannelTargetPath.WEIGHTS:
1528
+ ComponentType = engineCore.SkinnedMeshRenderer;
1529
+ propertyName = "blendShapeWeights";
1530
+ break;
1531
+ }
1532
+ var curve = this._addCurve(target.path, gltfChannel, sampleDataCollection);
1533
+ animationClip.addCurveBinding(relativePath, ComponentType, propertyName, curve);
1534
+ }
1535
+ animationClips[i] = animationClip;
1536
+ animationsIndices[i] = {
1537
+ name: name,
1538
+ index: i
1539
+ };
1540
+ }
1541
+ glTFResource.animations = animationClips;
1542
+ // @ts-ignore for editor
1543
+ glTFResource._animationsIndices = animationsIndices;
1544
+ animationClipsPromiseInfo.resolve(animationClips);
1545
+ return animationClipsPromiseInfo.promise;
1546
+ };
1547
+ _proto._addCurve = function _addCurve(animationchannelTargetPath, gltfChannel, sampleDataCollection) {
1548
+ var sampleData = sampleDataCollection[gltfChannel.sampler];
1549
+ var input = sampleData.input, output = sampleData.output, outputSize = sampleData.outputSize;
1550
+ switch(animationchannelTargetPath){
1551
+ case AnimationChannelTargetPath.TRANSLATION:
1552
+ case AnimationChannelTargetPath.SCALE:
1553
+ {
1554
+ var curve = new engineCore.AnimationVector3Curve();
1555
+ var interpolation = curve.interpolation = sampleData.interpolation;
1556
+ var offset = 0;
1557
+ for(var i = 0, n = input.length; i < n; i++){
1558
+ var keyframe = new engineCore.Keyframe();
1559
+ keyframe.time = input[i];
1560
+ if (interpolation === engineCore.InterpolationType.CubicSpine) {
1561
+ keyframe.inTangent = new engineMath.Vector3(output[offset++], output[offset++], output[offset++]);
1562
+ keyframe.value = new engineMath.Vector3(output[offset++], output[offset++], output[offset++]);
1563
+ keyframe.outTangent = new engineMath.Vector3(output[offset++], output[offset++], output[offset++]);
1564
+ } else {
1565
+ keyframe.value = new engineMath.Vector3(output[offset++], output[offset++], output[offset++]);
1566
+ }
1567
+ curve.addKey(keyframe);
1568
+ }
1569
+ return curve;
1570
+ }
1571
+ case AnimationChannelTargetPath.ROTATION:
1572
+ {
1573
+ var curve1 = new engineCore.AnimationQuaternionCurve();
1574
+ var interpolation1 = curve1.interpolation = sampleData.interpolation;
1575
+ var offset1 = 0;
1576
+ for(var i1 = 0, n1 = input.length; i1 < n1; i1++){
1577
+ var keyframe1 = new engineCore.Keyframe();
1578
+ keyframe1.time = input[i1];
1579
+ if (interpolation1 === engineCore.InterpolationType.CubicSpine) {
1580
+ keyframe1.inTangent = new engineMath.Vector4(output[offset1++], output[offset1++], output[offset1++], output[offset1++]);
1581
+ keyframe1.value = new engineMath.Quaternion(output[offset1++], output[offset1++], output[offset1++], output[offset1++]);
1582
+ keyframe1.outTangent = new engineMath.Vector4(output[offset1++], output[offset1++], output[offset1++], output[offset1++]);
1583
+ } else {
1584
+ keyframe1.value = new engineMath.Quaternion(output[offset1++], output[offset1++], output[offset1++], output[offset1++]);
1585
+ }
1586
+ curve1.addKey(keyframe1);
1587
+ }
1588
+ return curve1;
1589
+ }
1590
+ case AnimationChannelTargetPath.WEIGHTS:
1591
+ {
1592
+ var curve2 = new engineCore.AnimationFloatArrayCurve();
1593
+ curve2.interpolation = sampleData.interpolation;
1594
+ var offset2 = 0;
1595
+ for(var i2 = 0, n2 = input.length; i2 < n2; i2++){
1596
+ var keyframe2 = new engineCore.Keyframe();
1597
+ keyframe2.time = input[i2];
1598
+ if (curve2.interpolation === engineCore.InterpolationType.CubicSpine) {
1599
+ keyframe2.inTangent = Array.from(output.subarray(offset2, offset2 + outputSize));
1600
+ offset2 += outputSize;
1601
+ keyframe2.value = output.subarray(offset2, offset2 + outputSize);
1602
+ offset2 += outputSize;
1603
+ keyframe2.outTangent = Array.from(output.subarray(offset2, offset2 + outputSize));
1604
+ offset2 += outputSize;
1605
+ } else {
1606
+ keyframe2.value = output.subarray(offset2, offset2 + outputSize);
1607
+ offset2 += outputSize;
1608
+ }
1609
+ curve2.addKey(keyframe2);
1610
+ }
1611
+ return curve2;
1612
+ }
1613
+ }
1614
+ };
1615
+ return AnimationParser;
1616
+ }(Parser);
1617
+
1618
+ var BufferParser = /*#__PURE__*/ function(Parser) {
1619
+ _inherits(BufferParser, Parser);
1620
+ function BufferParser() {
1621
+ return Parser.apply(this, arguments);
1622
+ }
1623
+ var _proto = BufferParser.prototype;
1624
+ _proto.parse = function parse(context) {
1625
+ var glTFResource = context.glTFResource;
1626
+ var url = glTFResource.url;
1627
+ if (this._isGLB(url)) {
1628
+ return engineCore.request(url, {
1629
+ type: "arraybuffer"
1630
+ }).then(GLTFUtil.parseGLB).then(function(param) {
1631
+ var gltf = param.gltf, buffers = param.buffers;
1632
+ context.gltf = gltf;
1633
+ context.buffers = buffers;
1634
+ });
1635
+ } else {
1636
+ return engineCore.request(url, {
1637
+ type: "json"
1638
+ }).then(function(gltf) {
1639
+ context.gltf = gltf;
1640
+ return Promise.all(gltf.buffers.map(function(buffer) {
1641
+ return engineCore.request(GLTFUtil.parseRelativeUrl(url, buffer.uri), {
1642
+ type: "arraybuffer"
1643
+ });
1644
+ })).then(function(buffers) {
1645
+ context.buffers = buffers;
1646
+ });
1647
+ });
1648
+ }
1649
+ };
1650
+ _proto._isGLB = function _isGLB(url) {
1651
+ var index = url.lastIndexOf(".");
1652
+ return url.substring(index + 1, index + 4) === "glb";
1653
+ };
1654
+ return BufferParser;
1655
+ }(Parser);
1656
+
1657
+ var EntityParser = /*#__PURE__*/ function(Parser) {
1658
+ _inherits(EntityParser, Parser);
1659
+ function EntityParser() {
1660
+ return Parser.apply(this, arguments);
1661
+ }
1662
+ var _proto = EntityParser.prototype;
1663
+ _proto.parse = function parse(context) {
1664
+ var glTFResource = context.glTFResource, nodes = context.gltf.nodes;
1665
+ var engine = glTFResource.engine;
1666
+ if (!nodes) return;
1667
+ var entities = [];
1668
+ for(var i = 0; i < nodes.length; i++){
1669
+ var gltfNode = nodes[i];
1670
+ var matrix = gltfNode.matrix, translation = gltfNode.translation, rotation = gltfNode.rotation, scale = gltfNode.scale;
1671
+ var entity = new engineCore.Entity(engine, gltfNode.name || "" + EntityParser._defaultName + i);
1672
+ var transform = entity.transform;
1673
+ if (matrix) {
1674
+ var localMatrix = transform.localMatrix;
1675
+ localMatrix.copyFromArray(matrix);
1676
+ transform.localMatrix = localMatrix;
1677
+ } else {
1678
+ if (translation) {
1679
+ transform.setPosition(translation[0], translation[1], translation[2]);
1680
+ }
1681
+ if (rotation) {
1682
+ transform.setRotationQuaternion(rotation[0], rotation[1], rotation[2], rotation[3]);
1683
+ }
1684
+ if (scale) {
1685
+ transform.setScale(scale[0], scale[1], scale[2]);
1686
+ }
1687
+ }
1688
+ entities[i] = entity;
1689
+ }
1690
+ glTFResource.entities = entities;
1691
+ this._buildEntityTree(context, glTFResource);
1692
+ this._createSceneRoots(context, glTFResource);
1693
+ };
1694
+ _proto._buildEntityTree = function _buildEntityTree(context, glTFResource) {
1695
+ var nodes = context.gltf.nodes;
1696
+ var entities = glTFResource.entities;
1697
+ for(var i = 0; i < nodes.length; i++){
1698
+ var children = nodes[i].children;
1699
+ var entity = entities[i];
1700
+ if (children) {
1701
+ for(var j = 0; j < children.length; j++){
1702
+ var childEntity = entities[children[j]];
1703
+ entity.addChild(childEntity);
1704
+ }
1705
+ }
1706
+ }
1707
+ };
1708
+ _proto._createSceneRoots = function _createSceneRoots(context, glTFResource) {
1709
+ var _context_gltf = context.gltf, tmp = _context_gltf.scene, sceneID = tmp === void 0 ? 0 : tmp, scenes = _context_gltf.scenes;
1710
+ var engine = glTFResource.engine, entities = glTFResource.entities;
1711
+ if (!scenes) return;
1712
+ var sceneRoots = [];
1713
+ for(var i = 0; i < scenes.length; i++){
1714
+ var nodes = scenes[i].nodes;
1715
+ if (!nodes) continue;
1716
+ if (nodes.length === 1) {
1717
+ sceneRoots[i] = entities[nodes[0]];
1718
+ } else {
1719
+ var rootEntity = new engineCore.Entity(engine, "GLTF_ROOT");
1720
+ for(var j = 0; j < nodes.length; j++){
1721
+ rootEntity.addChild(entities[nodes[j]]);
1722
+ }
1723
+ sceneRoots[i] = rootEntity;
1724
+ }
1725
+ }
1726
+ glTFResource.sceneRoots = sceneRoots;
1727
+ glTFResource.defaultSceneRoot = sceneRoots[sceneID];
1728
+ };
1729
+ return EntityParser;
1730
+ }(Parser);
1731
+ (function() {
1732
+ /** @internal */ EntityParser._defaultName = "_GLTF_ENTITY_";
1733
+ })();
1734
+
1735
+ var MeshParser = /*#__PURE__*/ function(Parser1) {
1736
+ _inherits(MeshParser, Parser1);
1737
+ function MeshParser() {
1738
+ return Parser1.apply(this, arguments);
1739
+ }
1740
+ var _proto = MeshParser.prototype;
1741
+ _proto.parse = function parse(context) {
1742
+ var _loop = function(i) {
1743
+ var _loop = function(j) {
1744
+ var gltfPrimitive = gltfMesh.primitives[j];
1745
+ var _gltfPrimitive_extensions = gltfPrimitive.extensions, extensions = _gltfPrimitive_extensions === void 0 ? {} : _gltfPrimitive_extensions;
1746
+ var KHR_draco_mesh_compression = extensions.KHR_draco_mesh_compression;
1747
+ primitivePromises[j] = new Promise(function(resolve) {
1748
+ var mesh = new engineCore.ModelMesh(engine, gltfMesh.name || j + "");
1749
+ if (KHR_draco_mesh_compression) {
1750
+ Parser.createEngineResource("KHR_draco_mesh_compression", KHR_draco_mesh_compression, context, gltfPrimitive).then(function(decodedGeometry) {
1751
+ return _this._parseMeshFromGLTFPrimitiveDraco(mesh, gltfMesh, gltfPrimitive, gltf, function(attributeSemantic) {
1752
+ for(var j = 0; j < decodedGeometry.attributes.length; j++){
1753
+ if (decodedGeometry.attributes[j].name === attributeSemantic) {
1754
+ return decodedGeometry.attributes[j].array;
1755
+ }
1756
+ }
1757
+ return null;
1758
+ }, function(attributeSemantic, shapeIndex) {
1759
+ throw "BlendShape animation is not supported when using draco.";
1760
+ }, function() {
1761
+ return decodedGeometry.index.array;
1762
+ }, context.keepMeshData);
1763
+ }).then(resolve);
1764
+ } else {
1765
+ _this._parseMeshFromGLTFPrimitive(context, mesh, gltfMesh, gltfPrimitive, gltf, function(attributeSemantic) {
1766
+ return null;
1767
+ }, function(attributeName, shapeIndex) {
1768
+ var shapeAccessorIdx = gltfPrimitive.targets[shapeIndex];
1769
+ var attributeAccessorIdx = shapeAccessorIdx[attributeName];
1770
+ if (attributeAccessorIdx) {
1771
+ var accessor = gltf.accessors[attributeAccessorIdx];
1772
+ return GLTFUtil.getAccessorData(gltf, accessor, buffers);
1773
+ } else {
1774
+ return null;
1775
+ }
1776
+ }, function() {
1777
+ var indexAccessor = gltf.accessors[gltfPrimitive.indices];
1778
+ return GLTFUtil.getAccessorData(gltf, indexAccessor, buffers);
1779
+ }, context.keepMeshData).then(resolve);
1780
+ }
1781
+ });
1782
+ };
1783
+ var gltfMesh = gltf.meshes[i];
1784
+ var primitivePromises = [];
1785
+ for(var j = 0; j < gltfMesh.primitives.length; j++)_loop(j);
1786
+ meshPromises[i] = Promise.all(primitivePromises);
1787
+ };
1788
+ var _this = this;
1789
+ var gltf = context.gltf, buffers = context.buffers, glTFResource = context.glTFResource;
1790
+ var engine = glTFResource.engine;
1791
+ if (!gltf.meshes) return;
1792
+ var meshesPromiseInfo = context.meshesPromiseInfo;
1793
+ var meshPromises = [];
1794
+ for(var i = 0; i < gltf.meshes.length; i++)_loop(i);
1795
+ engineCore.AssetPromise.all(meshPromises).then(function(meshes) {
1796
+ glTFResource.meshes = meshes;
1797
+ meshesPromiseInfo.resolve(meshes);
1798
+ }).catch(meshesPromiseInfo.reject);
1799
+ return meshesPromiseInfo.promise;
1800
+ };
1801
+ _proto._parseMeshFromGLTFPrimitive = function _parseMeshFromGLTFPrimitive(context, mesh, gltfMesh, gltfPrimitive, gltf, getVertexBufferData, getBlendShapeData, getIndexBufferData, keepMeshData) {
1802
+ var accessors = gltf.accessors;
1803
+ context.buffers;
1804
+ var attributes = gltfPrimitive.attributes, targets = gltfPrimitive.targets, indices = gltfPrimitive.indices, mode = gltfPrimitive.mode;
1805
+ var engine = mesh.engine;
1806
+ var vertexElements = new Array();
1807
+ var vertexCount;
1808
+ var bufferBindIndex = 0;
1809
+ var positions;
1810
+ var boneIndices;
1811
+ var boneWeights;
1812
+ if (keepMeshData) {
1813
+ positions = new Array(vertexCount);
1814
+ boneIndices = new Array(vertexCount);
1815
+ boneWeights = new Array(vertexCount);
1816
+ }
1817
+ for(var attribute in attributes){
1818
+ var accessor = accessors[attributes[attribute]];
1819
+ var accessorBuffer = GLTFUtil.getAccessorBuffer(context, gltf, accessor);
1820
+ var dataElementSize = GLTFUtil.getAccessorTypeSize(accessor.type);
1821
+ var accessorCount = accessor.count;
1822
+ var vertices = accessorBuffer.data;
1823
+ var vertexElement = void 0;
1824
+ var meshId = mesh.instanceId;
1825
+ var vertexBindingInfos = accessorBuffer.vertexBindingInfos;
1826
+ var elementNormalized = accessor.normalized;
1827
+ var elementFormat = GLTFUtil.getElementFormat(accessor.componentType, dataElementSize, elementNormalized);
1828
+ var scaleFactor = void 0;
1829
+ elementNormalized && (scaleFactor = GLTFUtil.getNormalizedComponentScale(accessor.componentType));
1830
+ var elementOffset = void 0;
1831
+ if (accessorBuffer.interleaved) {
1832
+ var byteOffset = accessor.byteOffset || 0;
1833
+ var stride = accessorBuffer.stride;
1834
+ elementOffset = byteOffset % stride;
1835
+ if (vertexBindingInfos[meshId] === undefined) {
1836
+ vertexElement = new engineCore.VertexElement(attribute, elementOffset, elementFormat, bufferBindIndex);
1837
+ var vertexBuffer = accessorBuffer.vertexBuffer;
1838
+ if (!vertexBuffer) {
1839
+ vertexBuffer = new engineCore.Buffer(engine, engineCore.BufferBindFlag.VertexBuffer, vertices.byteLength, engineCore.BufferUsage.Static);
1840
+ vertexBuffer.setData(vertices);
1841
+ accessorBuffer.vertexBuffer = vertexBuffer;
1842
+ }
1843
+ mesh.setVertexBufferBinding(vertexBuffer, stride, bufferBindIndex);
1844
+ vertexBindingInfos[meshId] = bufferBindIndex++;
1845
+ } else {
1846
+ vertexElement = new engineCore.VertexElement(attribute, elementOffset, elementFormat, vertexBindingInfos[meshId]);
1847
+ }
1848
+ } else {
1849
+ elementOffset = 0;
1850
+ vertexElement = new engineCore.VertexElement(attribute, elementOffset, elementFormat, bufferBindIndex);
1851
+ var vertexBuffer1 = new engineCore.Buffer(engine, engineCore.BufferBindFlag.VertexBuffer, vertices.byteLength, engineCore.BufferUsage.Static);
1852
+ vertexBuffer1.setData(vertices);
1853
+ mesh.setVertexBufferBinding(vertexBuffer1, accessorBuffer.stride, bufferBindIndex);
1854
+ vertexBindingInfos[meshId] = bufferBindIndex++;
1855
+ }
1856
+ vertexElements.push(vertexElement);
1857
+ if (attribute === "POSITION") {
1858
+ vertexCount = accessorCount;
1859
+ var _mesh_bounds = mesh.bounds, min = _mesh_bounds.min, max = _mesh_bounds.max;
1860
+ if (accessor.min && accessor.max) {
1861
+ min.copyFromArray(accessor.min);
1862
+ max.copyFromArray(accessor.max);
1863
+ if (keepMeshData) {
1864
+ var baseOffset = elementOffset / vertices.BYTES_PER_ELEMENT;
1865
+ var stride1 = vertices.length / accessorCount;
1866
+ for(var j = 0; j < accessorCount; j++){
1867
+ var offset = baseOffset + j * stride1;
1868
+ var position = new engineMath.Vector3(vertices[offset], vertices[offset + 1], vertices[offset + 2]);
1869
+ elementNormalized && position.scale(scaleFactor);
1870
+ positions[j] = position;
1871
+ }
1872
+ }
1873
+ } else {
1874
+ var position1 = MeshParser._tempVector3;
1875
+ min.set(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);
1876
+ max.set(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);
1877
+ var baseOffset1 = elementOffset / vertices.BYTES_PER_ELEMENT;
1878
+ var stride2 = vertices.length / accessorCount;
1879
+ for(var j1 = 0; j1 < accessorCount; j1++){
1880
+ var offset1 = baseOffset1 + j1 * stride2;
1881
+ position1.copyFromArray(vertices, offset1);
1882
+ engineMath.Vector3.min(min, position1, min);
1883
+ engineMath.Vector3.max(max, position1, max);
1884
+ if (keepMeshData) {
1885
+ var clonePosition = position1.clone();
1886
+ elementNormalized && clonePosition.scale(scaleFactor);
1887
+ positions[j1] = clonePosition;
1888
+ }
1889
+ }
1890
+ }
1891
+ if (elementNormalized) {
1892
+ min.scale(scaleFactor);
1893
+ max.scale(scaleFactor);
1894
+ }
1895
+ } else if (attribute === "JOINTS_0" && keepMeshData) {
1896
+ var baseOffset2 = elementOffset / vertices.BYTES_PER_ELEMENT;
1897
+ var stride3 = vertices.length / accessorCount;
1898
+ for(var j2 = 0; j2 < accessorCount; j2++){
1899
+ var offset2 = baseOffset2 + j2 * stride3;
1900
+ var boneIndex = new engineMath.Vector4(vertices[offset2], vertices[offset2 + 1], vertices[offset2 + 2], vertices[offset2 + 3]);
1901
+ elementNormalized && boneIndex.scale(scaleFactor);
1902
+ boneIndices[j2] = boneIndex;
1903
+ }
1904
+ } else if (attribute === "WEIGHTS_0" && keepMeshData) {
1905
+ var baseOffset3 = elementOffset / vertices.BYTES_PER_ELEMENT;
1906
+ var stride4 = vertices.length / accessorCount;
1907
+ for(var j3 = 0; j3 < accessorCount; j3++){
1908
+ var offset3 = baseOffset3 + j3 * stride4;
1909
+ var boneWeight = new engineMath.Vector4(vertices[offset3], vertices[offset3 + 1], vertices[offset3 + 2], vertices[offset3 + 3]);
1910
+ elementNormalized && boneWeight.scale(scaleFactor);
1911
+ boneWeights[j3] = boneWeight;
1912
+ }
1913
+ }
1914
+ }
1915
+ mesh.setVertexElements(vertexElements);
1916
+ // Indices
1917
+ if (indices !== undefined) {
1918
+ var indexAccessor = gltf.accessors[indices];
1919
+ var indexData = getIndexBufferData();
1920
+ mesh.setIndices(indexData);
1921
+ mesh.addSubMesh(0, indexAccessor.count, mode);
1922
+ } else {
1923
+ mesh.addSubMesh(0, vertexCount, mode);
1924
+ }
1925
+ // BlendShapes
1926
+ targets && this._createBlendShape(mesh, gltfMesh, targets, getBlendShapeData);
1927
+ mesh.uploadData(!keepMeshData);
1928
+ //@ts-ignore
1929
+ mesh._positions = positions;
1930
+ //@ts-ignore
1931
+ mesh._boneIndices = boneIndices;
1932
+ //@ts-ignore
1933
+ mesh._boneWeights = boneWeights;
1934
+ return Promise.resolve(mesh);
1935
+ };
1936
+ _proto._createBlendShape = function _createBlendShape(mesh, glTFMesh, glTFTargets, getBlendShapeData) {
1937
+ var blendShapeNames = glTFMesh.extras ? glTFMesh.extras.targetNames : null;
1938
+ for(var i = 0, n = glTFTargets.length; i < n; i++){
1939
+ var name = blendShapeNames ? blendShapeNames[i] : "blendShape" + i;
1940
+ var deltaPosBuffer = getBlendShapeData("POSITION", i);
1941
+ var deltaNorBuffer = getBlendShapeData("NORMAL", i);
1942
+ var deltaTanBuffer = getBlendShapeData("TANGENT", i);
1943
+ var deltaPositions = deltaPosBuffer ? GLTFUtil.floatBufferToVector3Array(deltaPosBuffer) : null;
1944
+ var deltaNormals = deltaNorBuffer ? GLTFUtil.floatBufferToVector3Array(deltaNorBuffer) : null;
1945
+ var deltaTangents = deltaTanBuffer ? GLTFUtil.floatBufferToVector3Array(deltaTanBuffer) : null;
1946
+ var blendShape = new engineCore.BlendShape(name);
1947
+ blendShape.addFrame(1.0, deltaPositions, deltaNormals, deltaTangents);
1948
+ mesh.addBlendShape(blendShape);
1949
+ }
1950
+ };
1951
+ /**
1952
+ * @deprecated
1953
+ */ _proto._parseMeshFromGLTFPrimitiveDraco = function _parseMeshFromGLTFPrimitiveDraco(mesh, gltfMesh, gltfPrimitive, gltf, getVertexBufferData, getBlendShapeData, getIndexBufferData, keepMeshData) {
1954
+ var attributes = gltfPrimitive.attributes, targets = gltfPrimitive.targets, indices = gltfPrimitive.indices, mode = gltfPrimitive.mode;
1955
+ var vertexCount;
1956
+ var accessors = gltf.accessors;
1957
+ var accessor = accessors[attributes["POSITION"]];
1958
+ var positionBuffer = getVertexBufferData("POSITION");
1959
+ var positions = GLTFUtil.floatBufferToVector3Array(positionBuffer);
1960
+ mesh.setPositions(positions);
1961
+ var bounds = mesh.bounds;
1962
+ vertexCount = accessor.count;
1963
+ if (accessor.min && accessor.max) {
1964
+ bounds.min.copyFromArray(accessor.min);
1965
+ bounds.max.copyFromArray(accessor.max);
1966
+ } else {
1967
+ var position = MeshParser._tempVector3;
1968
+ var min = bounds.min, max = bounds.max;
1969
+ min.set(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);
1970
+ max.set(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);
1971
+ var stride = positionBuffer.length / vertexCount;
1972
+ for(var j = 0; j < vertexCount; j++){
1973
+ var offset = j * stride;
1974
+ position.copyFromArray(positionBuffer, offset);
1975
+ engineMath.Vector3.min(min, position, min);
1976
+ engineMath.Vector3.max(max, position, max);
1977
+ }
1978
+ }
1979
+ for(var attributeSemantic in attributes){
1980
+ if (attributeSemantic === "POSITION") {
1981
+ continue;
1982
+ }
1983
+ var bufferData = getVertexBufferData(attributeSemantic);
1984
+ switch(attributeSemantic){
1985
+ case "NORMAL":
1986
+ var normals = GLTFUtil.floatBufferToVector3Array(bufferData);
1987
+ mesh.setNormals(normals);
1988
+ break;
1989
+ case "TEXCOORD_0":
1990
+ var texturecoords = GLTFUtil.floatBufferToVector2Array(bufferData);
1991
+ mesh.setUVs(texturecoords, 0);
1992
+ break;
1993
+ case "TEXCOORD_1":
1994
+ var texturecoords1 = GLTFUtil.floatBufferToVector2Array(bufferData);
1995
+ mesh.setUVs(texturecoords1, 1);
1996
+ break;
1997
+ case "TEXCOORD_2":
1998
+ var texturecoords2 = GLTFUtil.floatBufferToVector2Array(bufferData);
1999
+ mesh.setUVs(texturecoords2, 2);
2000
+ break;
2001
+ case "TEXCOORD_3":
2002
+ var texturecoords3 = GLTFUtil.floatBufferToVector2Array(bufferData);
2003
+ mesh.setUVs(texturecoords3, 3);
2004
+ break;
2005
+ case "TEXCOORD_4":
2006
+ var texturecoords4 = GLTFUtil.floatBufferToVector2Array(bufferData);
2007
+ mesh.setUVs(texturecoords4, 4);
2008
+ break;
2009
+ case "TEXCOORD_5":
2010
+ var texturecoords5 = GLTFUtil.floatBufferToVector2Array(bufferData);
2011
+ mesh.setUVs(texturecoords5, 5);
2012
+ break;
2013
+ case "TEXCOORD_6":
2014
+ var texturecoords6 = GLTFUtil.floatBufferToVector2Array(bufferData);
2015
+ mesh.setUVs(texturecoords6, 6);
2016
+ break;
2017
+ case "TEXCOORD_7":
2018
+ var texturecoords7 = GLTFUtil.floatBufferToVector2Array(bufferData);
2019
+ mesh.setUVs(texturecoords7, 7);
2020
+ break;
2021
+ case "COLOR_0":
2022
+ var colors = GLTFUtil.floatBufferToColorArray(bufferData, accessors[attributes["COLOR_0"]].type === AccessorType.VEC3);
2023
+ mesh.setColors(colors);
2024
+ break;
2025
+ case "TANGENT":
2026
+ var tangents = GLTFUtil.floatBufferToVector4Array(bufferData);
2027
+ mesh.setTangents(tangents);
2028
+ break;
2029
+ case "JOINTS_0":
2030
+ var joints = GLTFUtil.floatBufferToVector4Array(bufferData);
2031
+ mesh.setBoneIndices(joints);
2032
+ break;
2033
+ case "WEIGHTS_0":
2034
+ var weights = GLTFUtil.floatBufferToVector4Array(bufferData);
2035
+ mesh.setBoneWeights(weights);
2036
+ break;
2037
+ }
2038
+ }
2039
+ // Indices
2040
+ if (indices !== undefined) {
2041
+ var indexAccessor = gltf.accessors[indices];
2042
+ var indexData = getIndexBufferData();
2043
+ mesh.setIndices(indexData);
2044
+ mesh.addSubMesh(0, indexAccessor.count, mode);
2045
+ } else {
2046
+ mesh.addSubMesh(0, vertexCount, mode);
2047
+ }
2048
+ // BlendShapes
2049
+ targets && this._createBlendShape(mesh, gltfMesh, targets, getBlendShapeData);
2050
+ mesh.uploadData(!keepMeshData);
2051
+ return Promise.resolve(mesh);
2052
+ };
2053
+ return MeshParser;
2054
+ }(Parser);
2055
+ (function() {
2056
+ MeshParser._tempVector3 = new engineMath.Vector3();
2057
+ })();
2058
+
2059
+ var SceneParser$1 = /*#__PURE__*/ function(Parser1) {
2060
+ _inherits(SceneParser, Parser1);
2061
+ function SceneParser() {
2062
+ return Parser1.apply(this, arguments);
2063
+ }
2064
+ var _proto = SceneParser.prototype;
2065
+ _proto.parse = function parse(context) {
2066
+ var glTFResource = context.glTFResource, gltf = context.gltf;
2067
+ var entities = glTFResource.entities;
2068
+ var nodes = gltf.nodes, gltfCameras = gltf.cameras;
2069
+ if (!nodes) return;
2070
+ var defaultSceneRootPromiseInfo = context.defaultSceneRootPromiseInfo;
2071
+ var promises = [];
2072
+ for(var i = 0; i < nodes.length; i++){
2073
+ var gltfNode = nodes[i];
2074
+ var cameraID = gltfNode.camera, meshID = gltfNode.mesh, _gltfNode_extensions = gltfNode.extensions, extensions = _gltfNode_extensions === void 0 ? {} : _gltfNode_extensions;
2075
+ var KHR_lights_punctual = extensions.KHR_lights_punctual;
2076
+ var entity = entities[i];
2077
+ if (cameraID !== undefined) {
2078
+ this._createCamera(glTFResource, gltfCameras[cameraID], entity);
2079
+ }
2080
+ if (meshID !== undefined) {
2081
+ promises.push(this._createRenderer(context, gltfNode, entity));
2082
+ }
2083
+ if (KHR_lights_punctual) {
2084
+ var lightIndex = KHR_lights_punctual.light;
2085
+ var lights = gltf.extensions.KHR_lights_punctual.lights;
2086
+ Parser.parseEngineResource("KHR_lights_punctual", lights[lightIndex], entity, context);
2087
+ }
2088
+ }
2089
+ if (glTFResource.defaultSceneRoot) {
2090
+ this._createAnimator(context);
2091
+ }
2092
+ gltf.extensions && delete gltf.extensions["OASIS_materials_remap"];
2093
+ engineCore.AssetPromise.all(promises).then(function() {
2094
+ return defaultSceneRootPromiseInfo.resolve(glTFResource.defaultSceneRoot);
2095
+ }).catch(defaultSceneRootPromiseInfo.reject);
2096
+ return defaultSceneRootPromiseInfo.promise;
2097
+ };
2098
+ _proto._createCamera = function _createCamera(context, cameraSchema, entity) {
2099
+ var orthographic = cameraSchema.orthographic, perspective = cameraSchema.perspective, type = cameraSchema.type;
2100
+ var camera = entity.addComponent(engineCore.Camera);
2101
+ if (type === CameraType.ORTHOGRAPHIC) {
2102
+ var xmag = orthographic.xmag, ymag = orthographic.ymag, zfar = orthographic.zfar, znear = orthographic.znear;
2103
+ camera.isOrthographic = true;
2104
+ if (znear !== undefined) {
2105
+ camera.nearClipPlane = znear;
2106
+ }
2107
+ if (zfar !== undefined) {
2108
+ camera.farClipPlane = zfar;
2109
+ }
2110
+ camera.orthographicSize = Math.max(ymag != null ? ymag : 0, xmag != null ? xmag : 0) / 2;
2111
+ } else if (type === CameraType.PERSPECTIVE) {
2112
+ var aspectRatio = perspective.aspectRatio, yfov = perspective.yfov, zfar1 = perspective.zfar, znear1 = perspective.znear;
2113
+ if (aspectRatio !== undefined) {
2114
+ camera.aspectRatio = aspectRatio;
2115
+ }
2116
+ if (yfov !== undefined) {
2117
+ camera.fieldOfView = yfov * 180 / Math.PI;
2118
+ }
2119
+ if (zfar1 !== undefined) {
2120
+ camera.farClipPlane = zfar1;
2121
+ }
2122
+ if (znear1 !== undefined) {
2123
+ camera.nearClipPlane = znear1;
2124
+ }
2125
+ }
2126
+ if (!context.cameras) context.cameras = [];
2127
+ context.cameras.push(camera);
2128
+ // @todo: use engine camera by default
2129
+ camera.enabled = false;
2130
+ };
2131
+ _proto._createRenderer = function _createRenderer(context, gltfNode, entity) {
2132
+ var _loop = function(i) {
2133
+ var mesh = meshes[meshID][i];
2134
+ var renderer = void 0;
2135
+ if (skinID !== undefined || blendShapeWeights) {
2136
+ context.hasSkinned = true;
2137
+ var skinRenderer = entity.addComponent(engineCore.SkinnedMeshRenderer);
2138
+ skinRenderer.mesh = mesh;
2139
+ if (skinID !== undefined) {
2140
+ skinRenderer.skin = skins[skinID];
2141
+ }
2142
+ if (blendShapeWeights) {
2143
+ skinRenderer.blendShapeWeights = new Float32Array(blendShapeWeights);
2144
+ }
2145
+ renderer = skinRenderer;
2146
+ } else {
2147
+ renderer = entity.addComponent(engineCore.MeshRenderer);
2148
+ renderer.mesh = mesh;
2149
+ }
2150
+ var materialIndex = gltfMeshPrimitives[i].material;
2151
+ var remapMaterials = gltf.extensions && gltf.extensions["OASIS_materials_remap"];
2152
+ if (remapMaterials && remapMaterials[materialIndex]) {
2153
+ promises.push(remapMaterials[materialIndex].then(function(mtl) {
2154
+ renderer.setMaterial(mtl);
2155
+ }));
2156
+ } else {
2157
+ var material = (materials == null ? void 0 : materials[materialIndex]) || SceneParser._getDefaultMaterial(engine);
2158
+ renderer.setMaterial(material);
2159
+ }
2160
+ var _gltfMeshPrimitives_i = gltfMeshPrimitives[i], _gltfMeshPrimitives_i_extensions = _gltfMeshPrimitives_i.extensions, extensions = _gltfMeshPrimitives_i_extensions === void 0 ? {} : _gltfMeshPrimitives_i_extensions;
2161
+ var KHR_materials_variants = extensions.KHR_materials_variants;
2162
+ if (KHR_materials_variants) {
2163
+ Parser.parseEngineResource("KHR_materials_variants", KHR_materials_variants, renderer, context);
2164
+ }
2165
+ };
2166
+ var glTFResource = context.glTFResource, gltf = context.gltf;
2167
+ var gltfMeshes = gltf.meshes;
2168
+ var engine = glTFResource.engine, meshes = glTFResource.meshes, materials = glTFResource.materials, skins = glTFResource.skins;
2169
+ var meshID = gltfNode.mesh, skinID = gltfNode.skin;
2170
+ var glTFMesh = gltfMeshes[meshID];
2171
+ var gltfMeshPrimitives = glTFMesh.primitives;
2172
+ var blendShapeWeights = gltfNode.weights || glTFMesh.weights;
2173
+ var promises = [];
2174
+ for(var i = 0; i < gltfMeshPrimitives.length; i++)_loop(i);
2175
+ return Promise.all(promises);
2176
+ };
2177
+ _proto._createAnimator = function _createAnimator(context) {
2178
+ if (!context.hasSkinned && !context.glTFResource.animations) {
2179
+ return;
2180
+ }
2181
+ var _context_glTFResource = context.glTFResource, defaultSceneRoot = _context_glTFResource.defaultSceneRoot, animations = _context_glTFResource.animations;
2182
+ var animator = defaultSceneRoot.addComponent(engineCore.Animator);
2183
+ var animatorController = new engineCore.AnimatorController();
2184
+ var layer = new engineCore.AnimatorControllerLayer("layer");
2185
+ var animatorStateMachine = new engineCore.AnimatorStateMachine();
2186
+ animatorController.addLayer(layer);
2187
+ animator.animatorController = animatorController;
2188
+ layer.stateMachine = animatorStateMachine;
2189
+ if (animations) {
2190
+ for(var i = 0; i < animations.length; i++){
2191
+ var animationClip = animations[i];
2192
+ var name = animationClip.name;
2193
+ var uniqueName = animatorStateMachine.makeUniqueStateName(name);
2194
+ if (uniqueName !== name) {
2195
+ console.warn("AnimatorState name is existed, name: " + name + " reset to " + uniqueName);
2196
+ }
2197
+ var animatorState = animatorStateMachine.addState(uniqueName);
2198
+ animatorState.clip = animationClip;
2199
+ }
2200
+ }
2201
+ };
2202
+ SceneParser._getDefaultMaterial = function _getDefaultMaterial(engine) {
2203
+ if (!SceneParser._defaultMaterial) {
2204
+ SceneParser._defaultMaterial = new engineCore.BlinnPhongMaterial(engine);
2205
+ }
2206
+ return SceneParser._defaultMaterial;
2207
+ };
2208
+ return SceneParser;
2209
+ }(Parser);
2210
+
2211
+ var SkinParser = /*#__PURE__*/ function(Parser) {
2212
+ _inherits(SkinParser, Parser);
2213
+ function SkinParser() {
2214
+ return Parser.apply(this, arguments);
2215
+ }
2216
+ var _proto = SkinParser.prototype;
2217
+ _proto.parse = function parse(context) {
2218
+ var glTFResource = context.glTFResource, gltf = context.gltf; context.buffers;
2219
+ var entities = glTFResource.entities;
2220
+ var gltfSkins = gltf.skins;
2221
+ if (!gltfSkins) return;
2222
+ var count = gltfSkins.length;
2223
+ var skins = new Array(count);
2224
+ for(var i = 0; i < count; i++){
2225
+ var _gltfSkins_i = gltfSkins[i], inverseBindMatrices = _gltfSkins_i.inverseBindMatrices, skeleton = _gltfSkins_i.skeleton, joints = _gltfSkins_i.joints, _gltfSkins_i_name = _gltfSkins_i.name, name = _gltfSkins_i_name === void 0 ? "SKIN_" + i : _gltfSkins_i_name;
2226
+ var jointCount = joints.length;
2227
+ var skin = new engineCore.Skin(name);
2228
+ skin.inverseBindMatrices.length = jointCount;
2229
+ // parse IBM
2230
+ var accessor = gltf.accessors[inverseBindMatrices];
2231
+ var buffer = GLTFUtil.getAccessorBuffer(context, gltf, accessor).data;
2232
+ for(var i1 = 0; i1 < jointCount; i1++){
2233
+ var inverseBindMatrix = new engineMath.Matrix();
2234
+ inverseBindMatrix.copyFromArray(buffer, i1 * 16);
2235
+ skin.inverseBindMatrices[i1] = inverseBindMatrix;
2236
+ }
2237
+ // get joints
2238
+ for(var i2 = 0; i2 < jointCount; i2++){
2239
+ var jointIndex = joints[i2];
2240
+ var jointName = entities[jointIndex].name;
2241
+ skin.joints[i2] = jointName;
2242
+ // @todo Temporary solution, but it can alleviate the current BUG, and the skinning data mechanism of SkinnedMeshRenderer will be completely refactored in the future
2243
+ for(var j = entities.length - 1; j >= 0; j--){
2244
+ if (jointIndex !== j && entities[j].name === jointName) {
2245
+ entities[j].name = jointName + "_" + j;
2246
+ }
2247
+ }
2248
+ }
2249
+ // get skeleton
2250
+ if (skeleton !== undefined) {
2251
+ skin.skeleton = entities[skeleton].name;
2252
+ } else {
2253
+ var rootBone = this._findSkeletonRootBone(joints, entities);
2254
+ if (rootBone) {
2255
+ skin.skeleton = rootBone.name;
2256
+ } else {
2257
+ throw "Failed to find skeleton root bone.";
2258
+ }
2259
+ }
2260
+ skins[i] = skin;
2261
+ }
2262
+ glTFResource.skins = skins;
2263
+ };
2264
+ _proto._findSkeletonRootBone = function _findSkeletonRootBone(joints, entities) {
2265
+ var paths = {};
2266
+ for(var _iterator = _create_for_of_iterator_helper_loose(joints), _step; !(_step = _iterator()).done;){
2267
+ var index = _step.value;
2268
+ var path = new Array();
2269
+ var entity = entities[index];
2270
+ while(entity){
2271
+ path.unshift(entity);
2272
+ entity = entity.parent;
2273
+ }
2274
+ paths[index] = path;
2275
+ }
2276
+ var rootNode = null;
2277
+ for(var i = 0;; i++){
2278
+ var path1 = paths[joints[0]];
2279
+ if (i >= path1.length) {
2280
+ return rootNode;
2281
+ }
2282
+ var entity1 = path1[i];
2283
+ for(var j = 1, m = joints.length; j < m; j++){
2284
+ path1 = paths[joints[j]];
2285
+ if (i >= path1.length || entity1 !== path1[i]) {
2286
+ return rootNode;
2287
+ }
2288
+ }
2289
+ rootNode = entity1;
2290
+ }
2291
+ };
2292
+ return SkinParser;
2293
+ }(Parser);
2294
+
2295
+ var TextureParser = /*#__PURE__*/ function(Parser) {
2296
+ _inherits(TextureParser, Parser);
2297
+ function TextureParser() {
2298
+ return Parser.apply(this, arguments);
2299
+ }
2300
+ var _proto = TextureParser.prototype;
2301
+ _proto.parse = function parse(context) {
2302
+ var _this = this;
2303
+ var glTFResource = context.glTFResource, gltf = context.gltf, buffers = context.buffers;
2304
+ var engine = glTFResource.engine, url = glTFResource.url;
2305
+ if (gltf.textures) {
2306
+ var texturesPromiseInfo = context.texturesPromiseInfo;
2307
+ engineCore.AssetPromise.all(gltf.textures.map(function(param, index) {
2308
+ var sampler = param.sampler, _param_source = param.source, source = _param_source === void 0 ? 0 : _param_source, textureName = param.name;
2309
+ var _gltf_images_source = gltf.images[source], uri = _gltf_images_source.uri, bufferViewIndex = _gltf_images_source.bufferView, mimeType = _gltf_images_source.mimeType, imageName = _gltf_images_source.name;
2310
+ if (uri) {
2311
+ // TODO: support ktx extension https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_texture_basisu/README.md
2312
+ var index1 = uri.lastIndexOf(".");
2313
+ var ext = uri.substring(index1 + 1);
2314
+ var type = ext.startsWith("ktx") ? engineCore.AssetType.KTX : engineCore.AssetType.Texture2D;
2315
+ return engine.resourceManager.load({
2316
+ url: GLTFUtil.parseRelativeUrl(url, uri),
2317
+ type: type
2318
+ }).then(function(texture) {
2319
+ if (!texture.name) {
2320
+ texture.name = textureName || imageName || "texture_" + index1;
2321
+ }
2322
+ if (sampler !== undefined) {
2323
+ _this._parseSampler(texture, gltf.samplers[sampler]);
2324
+ }
2325
+ return texture;
2326
+ });
2327
+ } else {
2328
+ var bufferView = gltf.bufferViews[bufferViewIndex];
2329
+ var bufferViewData = GLTFUtil.getBufferViewData(bufferView, buffers);
2330
+ return GLTFUtil.loadImageBuffer(bufferViewData, mimeType).then(function(image) {
2331
+ var texture = new engineCore.Texture2D(engine, image.width, image.height);
2332
+ texture.setImageSource(image);
2333
+ texture.generateMipmaps();
2334
+ texture.name = textureName || imageName || "texture_" + index;
2335
+ if (sampler !== undefined) {
2336
+ _this._parseSampler(texture, gltf.samplers[sampler]);
2337
+ }
2338
+ return texture;
2339
+ });
2340
+ }
2341
+ })).then(function(textures) {
2342
+ glTFResource.textures = textures;
2343
+ texturesPromiseInfo.resolve(textures);
2344
+ }).catch(texturesPromiseInfo.reject);
2345
+ return texturesPromiseInfo.promise;
2346
+ }
2347
+ };
2348
+ _proto._parseSampler = function _parseSampler(texture, sampler) {
2349
+ var magFilter = sampler.magFilter, minFilter = sampler.minFilter, wrapS = sampler.wrapS, wrapT = sampler.wrapT;
2350
+ if (magFilter || minFilter) {
2351
+ if (magFilter === TextureMagFilter.NEAREST) {
2352
+ texture.filterMode = engineCore.TextureFilterMode.Point;
2353
+ } else if (minFilter <= TextureMinFilter.LINEAR_MIPMAP_NEAREST) {
2354
+ texture.filterMode = engineCore.TextureFilterMode.Bilinear;
2355
+ } else {
2356
+ texture.filterMode = engineCore.TextureFilterMode.Trilinear;
2357
+ }
2358
+ }
2359
+ if (wrapS) {
2360
+ texture.wrapModeU = TextureParser._wrapMap[wrapS];
2361
+ }
2362
+ if (wrapT) {
2363
+ texture.wrapModeV = TextureParser._wrapMap[wrapT];
2364
+ }
2365
+ };
2366
+ return TextureParser;
2367
+ }(Parser);
2368
+ (function() {
2369
+ var _obj;
2370
+ TextureParser._wrapMap = (_obj = {}, _obj[TextureWrapMode.CLAMP_TO_EDGE] = engineCore.TextureWrapMode.Clamp, _obj[TextureWrapMode.MIRRORED_REPEAT] = engineCore.TextureWrapMode.Mirror, _obj[TextureWrapMode.REPEAT] = engineCore.TextureWrapMode.Repeat, _obj);
2371
+ })();
2372
+
2373
+ var Validator = /*#__PURE__*/ function(Parser1) {
2374
+ _inherits(Validator, Parser1);
2375
+ function Validator() {
2376
+ return Parser1.apply(this, arguments);
2377
+ }
2378
+ var _proto = Validator.prototype;
2379
+ _proto.parse = function parse(context) {
2380
+ var _context_gltf = context.gltf, version = _context_gltf.asset.version, extensionsUsed = _context_gltf.extensionsUsed, extensionsRequired = _context_gltf.extensionsRequired;
2381
+ var gltfVersion = Number(version);
2382
+ if (!(gltfVersion >= 2 && gltfVersion < 3)) {
2383
+ throw "Only support gltf 2.x.";
2384
+ }
2385
+ if (extensionsUsed) {
2386
+ engineCore.Logger.info("extensionsUsed: ", extensionsUsed);
2387
+ for(var i = 0; i < extensionsUsed.length; i++){
2388
+ if (!Parser.hasExtensionParser(extensionsUsed[i])) {
2389
+ engineCore.Logger.warn("Extension " + extensionsUsed[i] + " is not implemented, you can customize this extension in gltf.");
2390
+ }
2391
+ }
2392
+ }
2393
+ if (extensionsRequired) {
2394
+ engineCore.Logger.info("extensionsRequired: " + extensionsRequired);
2395
+ for(var i1 = 0; i1 < extensionsRequired.length; i1++){
2396
+ var extensionRequired = extensionsRequired[i1];
2397
+ if (!Parser.hasExtensionParser(extensionRequired)) {
2398
+ engineCore.Logger.error("GLTF parser has not supported required extension " + extensionRequired + ".");
2399
+ } else {
2400
+ Parser.initialize(extensionRequired);
2401
+ }
2402
+ }
2403
+ }
2404
+ };
2405
+ return Validator;
2406
+ }(Parser);
2407
+
2408
+ var GLTFParser = /*#__PURE__*/ function() {
2409
+ function GLTFParser(pipes) {
2410
+ var _this = this;
2411
+ this._pipes = [];
2412
+ pipes.forEach(function(pipe, index) {
2413
+ _this._pipes[index] = new pipe();
2414
+ });
2415
+ }
2416
+ var _proto = GLTFParser.prototype;
2417
+ _proto.parse = function parse(context) {
2418
+ var _this = this;
2419
+ var glTFResource = context.glTFResource;
2420
+ var lastPipe;
2421
+ return new engineCore.AssetPromise(function(resolve, reject) {
2422
+ _this._pipes.forEach(function(parser) {
2423
+ if (lastPipe) {
2424
+ lastPipe = lastPipe.then(function() {
2425
+ return parser.parse(context);
2426
+ });
2427
+ if (lastPipe.cancel) {
2428
+ context.chainPromises.push(lastPipe);
2429
+ }
2430
+ } else {
2431
+ lastPipe = parser.parse(context);
2432
+ }
2433
+ });
2434
+ if (lastPipe) {
2435
+ lastPipe.then(function() {
2436
+ resolve(glTFResource);
2437
+ }).catch(reject);
2438
+ }
2439
+ });
2440
+ };
2441
+ return GLTFParser;
2442
+ }();
2443
+ (function() {
2444
+ GLTFParser.defaultPipeline = new GLTFParser([
2445
+ BufferParser,
2446
+ Validator,
2447
+ TextureParser,
2448
+ MaterialParser,
2449
+ MeshParser,
2450
+ EntityParser,
2451
+ SkinParser,
2452
+ AnimationParser,
2453
+ SceneParser$1
2454
+ ]);
2455
+ })();
2456
+
2457
+ /**
2458
+ * Product after GLTF parser, usually, `defaultSceneRoot` is only needed to use.
2459
+ */ var GLTFResource = /*#__PURE__*/ function(EngineObject) {
2460
+ _inherits(GLTFResource, EngineObject);
2461
+ function GLTFResource(engine, url) {
2462
+ var _this;
2463
+ _this = EngineObject.call(this, engine) || this;
2464
+ _this.url = url;
2465
+ return _this;
2466
+ }
2467
+ var _proto = GLTFResource.prototype;
2468
+ /**
2469
+ * @override
2470
+ */ _proto.destroy = function destroy() {
2471
+ if (this._destroyed) {
2472
+ return;
2473
+ }
2474
+ EngineObject.prototype.destroy.call(this);
2475
+ this.defaultSceneRoot.destroy();
2476
+ this.textures = null;
2477
+ this.materials = null;
2478
+ this.meshes = null;
2479
+ this.skins = null;
2480
+ this.animations = null;
2481
+ this.entities = null;
2482
+ this.cameras = null;
2483
+ this.lights = null;
2484
+ this.sceneRoots = null;
2485
+ this.variants = null;
2486
+ };
2487
+ return GLTFResource;
2488
+ }(engineCore.EngineObject);
2489
+
2490
+ var GLTFLoader = /*#__PURE__*/ function(Loader) {
2491
+ _inherits(GLTFLoader, Loader);
2492
+ function GLTFLoader() {
2493
+ return Loader.apply(this, arguments);
2494
+ }
2495
+ var _proto = GLTFLoader.prototype;
2496
+ _proto.load = function load(item, resourceManager) {
2497
+ var _item_params;
2498
+ var url = item.url;
2499
+ var context = new ParserContext(url);
2500
+ var glTFResource = new GLTFResource(resourceManager.engine, url);
2501
+ var masterPromiseInfo = context.masterPromiseInfo;
2502
+ context.glTFResource = glTFResource;
2503
+ var _item_params_keepMeshData;
2504
+ context.keepMeshData = (_item_params_keepMeshData = (_item_params = item.params) == null ? void 0 : _item_params.keepMeshData) != null ? _item_params_keepMeshData : false;
2505
+ masterPromiseInfo.onCancel(function() {
2506
+ var chainPromises = context.chainPromises;
2507
+ for(var _iterator = _create_for_of_iterator_helper_loose(chainPromises), _step; !(_step = _iterator()).done;){
2508
+ var promise = _step.value;
2509
+ promise.cancel();
2510
+ }
2511
+ });
2512
+ GLTFParser.defaultPipeline.parse(context).then(masterPromiseInfo.resolve).catch(function(e) {
2513
+ console.error(e);
2514
+ masterPromiseInfo.reject("Error loading glTF model from " + url + " .");
2515
+ });
2516
+ return context.promiseMap;
2517
+ };
2518
+ return GLTFLoader;
2519
+ }(engineCore.Loader);
2520
+ GLTFLoader = __decorate([
2521
+ engineCore.resourceLoader(engineCore.AssetType.Prefab, [
2522
+ "gltf",
2523
+ "glb"
2524
+ ])
2525
+ ], GLTFLoader);
2526
+
2527
+ var _HDRLoader;
2528
+ var PI = Math.PI;
2529
+ var HDRLoader = (_HDRLoader = /*#__PURE__*/ function(Loader) {
2530
+ _inherits(HDRLoader1, Loader);
2531
+ function HDRLoader1() {
2532
+ return Loader.apply(this, arguments);
2533
+ }
2534
+ var _proto = HDRLoader1.prototype;
2535
+ _proto.load = function load(item, resourceManager) {
2536
+ var _this = this;
2537
+ return new engineCore.AssetPromise(function(resolve, reject) {
2538
+ var engine = resourceManager.engine;
2539
+ _this.request(item.url, {
2540
+ type: "arraybuffer"
2541
+ }).then(function(buffer) {
2542
+ var uint8Array = new Uint8Array(buffer);
2543
+ var _HDRLoader__parseHeader = HDRLoader._parseHeader(uint8Array), width = _HDRLoader__parseHeader.width, height = _HDRLoader__parseHeader.height, dataPosition = _HDRLoader__parseHeader.dataPosition;
2544
+ var pixels = HDRLoader._readPixels(uint8Array.subarray(dataPosition), width, height);
2545
+ var cubeSize = height >> 1;
2546
+ var cubeMapData = HDRLoader._convertToCubemap(pixels, width, height, cubeSize);
2547
+ var texture = new engineCore.TextureCube(engine, cubeSize);
2548
+ for(var faceIndex = 0; faceIndex < 6; faceIndex++){
2549
+ texture.setPixelBuffer(engineCore.TextureCubeFace.PositiveX + faceIndex, cubeMapData[faceIndex], 0);
2550
+ }
2551
+ texture.generateMipmaps();
2552
+ resolve(texture);
2553
+ }).catch(reject);
2554
+ });
2555
+ };
2556
+ HDRLoader1._convertToCubemap = function _convertToCubemap(pixels, inputWidth, inputHeight, size) {
2557
+ if (!pixels) {
2558
+ throw "ConvertPanoramaToCubemap: input cannot be null";
2559
+ }
2560
+ if (pixels.length != inputWidth * inputHeight * 4) {
2561
+ throw "ConvertPanoramaToCubemap: input size is wrong";
2562
+ }
2563
+ var textureRight = this._createCubemapData(size, this._faceRight, pixels, inputWidth, inputHeight);
2564
+ var textureLeft = this._createCubemapData(size, this._faceLeft, pixels, inputWidth, inputHeight);
2565
+ var textureUp = this._createCubemapData(size, this._faceUp, pixels, inputWidth, inputHeight);
2566
+ var textureDown = this._createCubemapData(size, this._faceBottom, pixels, inputWidth, inputHeight);
2567
+ var textureFront = this._createCubemapData(size, this._faceFront, pixels, inputWidth, inputHeight);
2568
+ var textureBack = this._createCubemapData(size, this._faceBack, pixels, inputWidth, inputHeight);
2569
+ return [
2570
+ textureRight,
2571
+ textureLeft,
2572
+ textureUp,
2573
+ textureDown,
2574
+ textureFront,
2575
+ textureBack
2576
+ ];
2577
+ };
2578
+ HDRLoader1._createCubemapData = function _createCubemapData(texSize, faceData, pixels, inputWidth, inputHeight) {
2579
+ var textureArray = new Uint8ClampedArray(texSize * texSize * 4);
2580
+ var rotDX1 = this._tempVector3.set(0, 0, 0).add(faceData[1]).subtract(faceData[0]).scale(1 / texSize);
2581
+ var rotDX2 = this._temp2Vector3.set(0, 0, 0).add(faceData[3]).subtract(faceData[2]).scale(1 / texSize);
2582
+ var dy = 1 / texSize;
2583
+ var fy = 0;
2584
+ for(var y = 0; y < texSize; y++){
2585
+ var xv1 = this._temp3Vector3.set(0, 0, 0).add(faceData[0]);
2586
+ var xv2 = this._temp4Vector3.set(0, 0, 0).add(faceData[2]);
2587
+ for(var x = 0; x < texSize; x++){
2588
+ var v = this._temp5Vector3.set(0, 0, 0).add(xv2).subtract(xv1).scale(fy).add(xv1);
2589
+ v.normalize();
2590
+ var color = this._calcProjectionSpherical(v, pixels, inputWidth, inputHeight);
2591
+ this._RGBEToLinear(color);
2592
+ this._linearToRGBM(color, 5);
2593
+ // 4 channels per pixels
2594
+ var index = y * texSize * 4 + x * 4;
2595
+ textureArray[index] = color.r;
2596
+ textureArray[index + 1] = color.g;
2597
+ textureArray[index + 2] = color.b;
2598
+ textureArray[index + 3] = color.a;
2599
+ xv1.add(rotDX1);
2600
+ xv2.add(rotDX2);
2601
+ }
2602
+ fy += dy;
2603
+ }
2604
+ return textureArray;
2605
+ };
2606
+ HDRLoader1._calcProjectionSpherical = function _calcProjectionSpherical(vDir, pixels, inputWidth, inputHeight) {
2607
+ var theta = Math.atan2(vDir.z, -vDir.x);
2608
+ var phi = Math.acos(vDir.y);
2609
+ while(theta < -PI){
2610
+ theta += 2 * PI;
2611
+ }
2612
+ while(theta > PI){
2613
+ theta -= 2 * PI;
2614
+ }
2615
+ var dx = theta / PI;
2616
+ var dy = phi / PI;
2617
+ // recenter.
2618
+ dx = dx * 0.5 + 0.5;
2619
+ var px = Math.round(dx * inputWidth);
2620
+ if (px < 0) {
2621
+ px = 0;
2622
+ } else if (px >= inputWidth) {
2623
+ px = inputWidth - 1;
2624
+ }
2625
+ var py = Math.round(dy * inputHeight);
2626
+ if (py < 0) {
2627
+ py = 0;
2628
+ } else if (py >= inputHeight) {
2629
+ py = inputHeight - 1;
2630
+ }
2631
+ var inputY = inputHeight - py - 1;
2632
+ var index = inputY * inputWidth * 4 + px * 4;
2633
+ var r = pixels[index];
2634
+ var g = pixels[index + 1];
2635
+ var b = pixels[index + 2];
2636
+ var a = pixels[index + 3];
2637
+ return new engineMath.Color(r, g, b, a);
2638
+ };
2639
+ HDRLoader1._readStringLine = function _readStringLine(uint8array, startIndex) {
2640
+ var line = "";
2641
+ var character = "";
2642
+ for(var i = startIndex; i < uint8array.length - startIndex; i++){
2643
+ character = String.fromCharCode(uint8array[i]);
2644
+ if (character == "\n") {
2645
+ break;
2646
+ }
2647
+ line += character;
2648
+ }
2649
+ return line;
2650
+ };
2651
+ HDRLoader1._parseHeader = function _parseHeader(uint8array) {
2652
+ var height = 0;
2653
+ var width = 0;
2654
+ var line = this._readStringLine(uint8array, 0);
2655
+ if (line[0] != "#" || line[1] != "?") {
2656
+ throw "Bad HDR Format.";
2657
+ }
2658
+ var endOfHeader = false;
2659
+ var findFormat = false;
2660
+ var lineIndex = 0;
2661
+ do {
2662
+ lineIndex += line.length + 1;
2663
+ line = this._readStringLine(uint8array, lineIndex);
2664
+ if (line == "FORMAT=32-bit_rle_rgbe") {
2665
+ findFormat = true;
2666
+ } else if (line.length == 0) {
2667
+ endOfHeader = true;
2668
+ }
2669
+ }while (!endOfHeader);
2670
+ if (!findFormat) {
2671
+ throw "HDR Bad header format, unsupported FORMAT";
2672
+ }
2673
+ lineIndex += line.length + 1;
2674
+ line = this._readStringLine(uint8array, lineIndex);
2675
+ var sizeRegexp = /^\-Y (.*) \+X (.*)$/g;
2676
+ var match = sizeRegexp.exec(line);
2677
+ // TODO. Support +Y and -X if needed.
2678
+ if (!match || match.length < 3) {
2679
+ throw "HDR Bad header format, no size";
2680
+ }
2681
+ width = parseInt(match[2]);
2682
+ height = parseInt(match[1]);
2683
+ if (width < 8 || width > 0x7fff) {
2684
+ throw "HDR Bad header format, unsupported size";
2685
+ }
2686
+ lineIndex += line.length + 1;
2687
+ return {
2688
+ height: height,
2689
+ width: width,
2690
+ dataPosition: lineIndex
2691
+ };
2692
+ };
2693
+ HDRLoader1._readPixels = function _readPixels(buffer, width, height) {
2694
+ var scanLineWidth = width;
2695
+ var byteLength = buffer.byteLength;
2696
+ var dataRGBA = new Uint8Array(4 * width * height);
2697
+ var offset = 0, pos = 0;
2698
+ var ptrEnd = 4 * scanLineWidth;
2699
+ var rgbeStart = new Uint8Array(4);
2700
+ var scanLineBuffer = new Uint8Array(ptrEnd);
2701
+ var numScanLines = height; // read in each successive scanLine
2702
+ while(numScanLines > 0 && pos < byteLength){
2703
+ rgbeStart[0] = buffer[pos++];
2704
+ rgbeStart[1] = buffer[pos++];
2705
+ rgbeStart[2] = buffer[pos++];
2706
+ rgbeStart[3] = buffer[pos++];
2707
+ if (2 != rgbeStart[0] || 2 != rgbeStart[1] || (rgbeStart[2] << 8 | rgbeStart[3]) != scanLineWidth) {
2708
+ throw "HDR Bad header format, wrong scan line width";
2709
+ }
2710
+ // read each of the four channels for the scanline into the buffer
2711
+ // first red, then green, then blue, then exponent
2712
+ var ptr = 0, count = void 0;
2713
+ while(ptr < ptrEnd && pos < byteLength){
2714
+ count = buffer[pos++];
2715
+ var isEncodedRun = count > 128;
2716
+ if (isEncodedRun) count -= 128;
2717
+ if (0 === count || ptr + count > ptrEnd) {
2718
+ throw "HDR Bad Format, bad scanline data (run)";
2719
+ }
2720
+ if (isEncodedRun) {
2721
+ // a (encoded) run of the same value
2722
+ var byteValue = buffer[pos++];
2723
+ for(var i = 0; i < count; i++){
2724
+ scanLineBuffer[ptr++] = byteValue;
2725
+ } //ptr += count;
2726
+ } else {
2727
+ // a literal-run
2728
+ scanLineBuffer.set(buffer.subarray(pos, pos + count), ptr);
2729
+ ptr += count;
2730
+ pos += count;
2731
+ }
2732
+ } // now convert data from buffer into rgba
2733
+ // first red, then green, then blue, then exponent (alpha)
2734
+ var l = scanLineWidth; //scanLine_buffer.byteLength;
2735
+ for(var i1 = 0; i1 < l; i1++){
2736
+ var off = 0;
2737
+ dataRGBA[offset] = scanLineBuffer[i1 + off];
2738
+ off += scanLineWidth;
2739
+ dataRGBA[offset + 1] = scanLineBuffer[i1 + off];
2740
+ off += scanLineWidth;
2741
+ dataRGBA[offset + 2] = scanLineBuffer[i1 + off];
2742
+ off += scanLineWidth;
2743
+ dataRGBA[offset + 3] = scanLineBuffer[i1 + off];
2744
+ offset += 4;
2745
+ }
2746
+ numScanLines--;
2747
+ }
2748
+ return dataRGBA;
2749
+ };
2750
+ HDRLoader1._RGBEToLinear = function _RGBEToLinear(color) {
2751
+ var scaleFactor = Math.pow(2, color.a - 128) / 255;
2752
+ color.r *= scaleFactor;
2753
+ color.g *= scaleFactor;
2754
+ color.b *= scaleFactor;
2755
+ color.a = 1;
2756
+ };
2757
+ HDRLoader1._linearToRGBM = function _linearToRGBM(color, maxRange) {
2758
+ var maxRGB = Math.max(color.r, Math.max(color.g, color.b));
2759
+ var M = Math.min(maxRGB / maxRange, 1);
2760
+ M = Math.ceil(M * 255);
2761
+ var scaleFactor = 65025 / (M * maxRange); // 255 * (255 / (M * maxRange) )
2762
+ color.r *= scaleFactor;
2763
+ color.g *= scaleFactor;
2764
+ color.b *= scaleFactor;
2765
+ color.a *= M;
2766
+ };
2767
+ return HDRLoader1;
2768
+ }(engineCore.Loader), function() {
2769
+ _HDRLoader._rightBottomBack = new engineMath.Vector3(1.0, -1.0, -1.0);
2770
+ }(), function() {
2771
+ _HDRLoader._rightBottomFront = new engineMath.Vector3(1.0, -1.0, 1.0);
2772
+ }(), function() {
2773
+ _HDRLoader._rightUpBack = new engineMath.Vector3(1.0, 1.0, -1.0);
2774
+ }(), function() {
2775
+ _HDRLoader._rightUpFront = new engineMath.Vector3(1.0, 1.0, 1.0);
2776
+ }(), function() {
2777
+ _HDRLoader._leftBottomBack = new engineMath.Vector3(-1.0, -1.0, -1.0);
2778
+ }(), function() {
2779
+ _HDRLoader._leftBottomFront = new engineMath.Vector3(-1.0, -1.0, 1.0);
2780
+ }(), function() {
2781
+ _HDRLoader._leftUpBack = new engineMath.Vector3(-1.0, 1.0, -1.0);
2782
+ }(), function() {
2783
+ _HDRLoader._leftUpFront = new engineMath.Vector3(-1.0, 1.0, 1.0);
2784
+ }(), function() {
2785
+ _HDRLoader._faceRight = [
2786
+ _HDRLoader._rightBottomBack,
2787
+ _HDRLoader._rightBottomFront,
2788
+ _HDRLoader._rightUpBack,
2789
+ _HDRLoader._rightUpFront
2790
+ ];
2791
+ }(), function() {
2792
+ _HDRLoader._faceLeft = [
2793
+ _HDRLoader._leftBottomFront,
2794
+ _HDRLoader._leftBottomBack,
2795
+ _HDRLoader._leftUpFront,
2796
+ _HDRLoader._leftUpBack
2797
+ ];
2798
+ }(), function() {
2799
+ _HDRLoader._faceUp = [
2800
+ _HDRLoader._leftBottomFront,
2801
+ _HDRLoader._rightBottomFront,
2802
+ _HDRLoader._leftBottomBack,
2803
+ _HDRLoader._rightBottomBack
2804
+ ];
2805
+ }(), function() {
2806
+ _HDRLoader._faceBottom = [
2807
+ _HDRLoader._leftUpBack,
2808
+ _HDRLoader._rightUpBack,
2809
+ _HDRLoader._leftUpFront,
2810
+ _HDRLoader._rightUpFront
2811
+ ];
2812
+ }(), function() {
2813
+ _HDRLoader._faceFront = [
2814
+ _HDRLoader._leftBottomBack,
2815
+ _HDRLoader._rightBottomBack,
2816
+ _HDRLoader._leftUpBack,
2817
+ _HDRLoader._rightUpBack
2818
+ ];
2819
+ }(), function() {
2820
+ _HDRLoader._faceBack = [
2821
+ _HDRLoader._rightBottomFront,
2822
+ _HDRLoader._leftBottomFront,
2823
+ _HDRLoader._rightUpFront,
2824
+ _HDRLoader._leftUpFront
2825
+ ];
2826
+ }(), function() {
2827
+ _HDRLoader._tempVector3 = new engineMath.Vector3();
2828
+ }(), function() {
2829
+ _HDRLoader._temp2Vector3 = new engineMath.Vector3();
2830
+ }(), function() {
2831
+ _HDRLoader._temp3Vector3 = new engineMath.Vector3();
2832
+ }(), function() {
2833
+ _HDRLoader._temp4Vector3 = new engineMath.Vector3();
2834
+ }(), function() {
2835
+ _HDRLoader._temp5Vector3 = new engineMath.Vector3();
2836
+ }(), _HDRLoader);
2837
+ HDRLoader = __decorate([
2838
+ engineCore.resourceLoader(engineCore.AssetType.HDR, [
2839
+ "hdr"
2840
+ ])
2841
+ ], HDRLoader);
2842
+
2843
+ var JSONLoader = /*#__PURE__*/ function(Loader) {
2844
+ _inherits(JSONLoader, Loader);
2845
+ function JSONLoader() {
2846
+ return Loader.apply(this, arguments);
2847
+ }
2848
+ var _proto = JSONLoader.prototype;
2849
+ _proto.load = function load(item) {
2850
+ return this.request(item.url, _extends({}, item, {
2851
+ type: "json"
2852
+ }));
2853
+ };
2854
+ return JSONLoader;
2855
+ }(engineCore.Loader);
2856
+ JSONLoader = __decorate([
2857
+ engineCore.resourceLoader(engineCore.AssetType.JSON, [
2858
+ "json"
2859
+ ], false)
2860
+ ], JSONLoader);
2861
+
2862
+ var HEADER_LEN = 12 + 13 * 4; // identifier + header elements (not including key value meta-data pairs)
2863
+ // load types
2864
+ var COMPRESSED_2D = 0; // uses a gl.compressedTexImage2D()
2865
+ function getMipmaps(ktxContainer, loadMipmaps) {
2866
+ var mipmaps = [];
2867
+ // initialize width & height for level 1
2868
+ var dataOffset = HEADER_LEN + ktxContainer.bytesOfKeyValueData;
2869
+ var width = ktxContainer.pixelWidth;
2870
+ var height = ktxContainer.pixelHeight;
2871
+ var mipmapCount = loadMipmaps ? ktxContainer.numberOfMipmapLevels : 1;
2872
+ for(var level = 0; level < mipmapCount; level++){
2873
+ var imageSize = new Int32Array(ktxContainer.buffer, dataOffset, 1)[0]; // size per face, since not supporting array cubemaps
2874
+ dataOffset += 4; // size of the image + 4 for the imageSize field
2875
+ for(var face = 0; face < ktxContainer.numberOfFaces; face++){
2876
+ var byteArray = new Uint8Array(ktxContainer.buffer, dataOffset, imageSize);
2877
+ mipmaps.push({
2878
+ data: byteArray,
2879
+ width: width,
2880
+ height: height
2881
+ });
2882
+ dataOffset += imageSize;
2883
+ dataOffset += 3 - (imageSize + 3) % 4; // add padding for odd sized image
2884
+ }
2885
+ width = Math.max(1.0, width * 0.5);
2886
+ height = Math.max(1.0, height * 0.5);
2887
+ }
2888
+ return mipmaps;
2889
+ }
2890
+ /**
2891
+ * Checks if the given data starts with a KTX file identifier.
2892
+ * @param data the data to check
2893
+ * @returns true if the data is a KTX file or false otherwise
2894
+ */ function isValid(data) {
2895
+ if (data.byteLength >= 12) {
2896
+ // '«', 'K', 'T', 'X', ' ', '1', '1', '»', '\r', '\n', '\x1A', '\n'
2897
+ var identifier = new Uint8Array(data, 0, 12);
2898
+ if (identifier[0] === 0xab && identifier[1] === 0x4b && identifier[2] === 0x54 && identifier[3] === 0x58 && identifier[4] === 0x20 && identifier[5] === 0x31 && identifier[6] === 0x31 && identifier[7] === 0xbb && identifier[8] === 0x0d && identifier[9] === 0x0a && identifier[10] === 0x1a && identifier[11] === 0x0a) {
2899
+ return true;
2900
+ }
2901
+ }
2902
+ return false;
2903
+ }
2904
+ function getEngineFormat(internalFormat) {
2905
+ switch(internalFormat){
2906
+ // case GLCompressedTextureInternalFormat.RGBA_S3TC_DXT3_EXT:
2907
+ // case GLCompressedTextureInternalFormat.RGBA_S3TC_DXT5_EXT:
2908
+ // break;
2909
+ case engineRhiWebgl.GLCompressedTextureInternalFormat.RGB_S3TC_DXT1_EXT:
2910
+ return engineCore.TextureFormat.DXT1;
2911
+ case engineRhiWebgl.GLCompressedTextureInternalFormat.RGBA_S3TC_DXT5_EXT:
2912
+ return engineCore.TextureFormat.DXT5;
2913
+ case engineRhiWebgl.GLCompressedTextureInternalFormat.RGB_ETC1_WEBGL:
2914
+ return engineCore.TextureFormat.ETC1_RGB;
2915
+ case engineRhiWebgl.GLCompressedTextureInternalFormat.RGB8_ETC2:
2916
+ return engineCore.TextureFormat.ETC2_RGB;
2917
+ case engineRhiWebgl.GLCompressedTextureInternalFormat.RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
2918
+ return engineCore.TextureFormat.ETC2_RGBA5;
2919
+ case engineRhiWebgl.GLCompressedTextureInternalFormat.RGBA8_ETC2_EAC:
2920
+ return engineCore.TextureFormat.ETC2_RGBA8;
2921
+ case engineRhiWebgl.GLCompressedTextureInternalFormat.RGB_PVRTC_2BPPV1_IMG:
2922
+ return engineCore.TextureFormat.PVRTC_RGB2;
2923
+ case engineRhiWebgl.GLCompressedTextureInternalFormat.RGBA_PVRTC_2BPPV1_IMG:
2924
+ return engineCore.TextureFormat.PVRTC_RGBA2;
2925
+ case engineRhiWebgl.GLCompressedTextureInternalFormat.RGB_PVRTC_4BPPV1_IMG:
2926
+ return engineCore.TextureFormat.PVRTC_RGB4;
2927
+ case engineRhiWebgl.GLCompressedTextureInternalFormat.RGBA_PVRTC_4BPPV1_IMG:
2928
+ return engineCore.TextureFormat.PVRTC_RGBA4;
2929
+ case engineRhiWebgl.GLCompressedTextureInternalFormat.RGBA_ASTC_4X4_KHR:
2930
+ return engineCore.TextureFormat.ASTC_4x4;
2931
+ case engineRhiWebgl.GLCompressedTextureInternalFormat.RGBA_ASTC_5X5_KHR:
2932
+ return engineCore.TextureFormat.ASTC_5x5;
2933
+ case engineRhiWebgl.GLCompressedTextureInternalFormat.RGBA_ASTC_6X6_KHR:
2934
+ return engineCore.TextureFormat.ASTC_6x6;
2935
+ case engineRhiWebgl.GLCompressedTextureInternalFormat.RGBA_ASTC_8X8_KHR:
2936
+ return engineCore.TextureFormat.ASTC_8x8;
2937
+ case engineRhiWebgl.GLCompressedTextureInternalFormat.RGBA_ASTC_10X10_KHR:
2938
+ return engineCore.TextureFormat.ASTC_10x10;
2939
+ case engineRhiWebgl.GLCompressedTextureInternalFormat.RGBA_ASTC_12X12_KHR:
2940
+ return engineCore.TextureFormat.ASTC_12x12;
2941
+ default:
2942
+ var formatName = engineRhiWebgl.GLCompressedTextureInternalFormat[internalFormat];
2943
+ throw new Error("this format is not supported in Galacean Engine: " + formatName);
2944
+ }
2945
+ }
2946
+ /**
2947
+ * for description see https://www.khronos.org/opengles/sdk/tools/KTX/
2948
+ * for file layout see https://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/
2949
+ */ var khronosTextureContainerParser = {
2950
+ /**
2951
+ *
2952
+ * @param buffer contents of the KTX container file
2953
+ * @param facesExpected should be either 1 or 6, based whether a cube texture or or
2954
+ * @param threeDExpected provision for indicating that data should be a 3D texture, not implemented
2955
+ * @param textureArrayExpected provision for indicating that data should be a texture array, not implemented
2956
+ * @param mapEngineFormat get Galacean Engine native TextureFormat?
2957
+ */ parse: function parse(buffer, facesExpected, withMipmaps, mapEngineFormat) {
2958
+ if (mapEngineFormat === void 0) mapEngineFormat = false;
2959
+ if (!isValid(buffer)) {
2960
+ throw new Error("khronosTextureContainerParser: invalid KTX file, texture missing KTX identifier");
2961
+ }
2962
+ // load the reset of the header in native 32 bit uint
2963
+ var dataSize = Uint32Array.BYTES_PER_ELEMENT;
2964
+ var headerDataView = new DataView(buffer, 12, 13 * dataSize);
2965
+ var endianness = headerDataView.getUint32(0, true);
2966
+ var littleEndian = endianness === 0x04030201;
2967
+ var parsedResult = {
2968
+ buffer: buffer,
2969
+ glType: headerDataView.getUint32(1 * dataSize, littleEndian),
2970
+ glTypeSize: headerDataView.getUint32(2 * dataSize, littleEndian),
2971
+ glFormat: headerDataView.getUint32(3 * dataSize, littleEndian),
2972
+ glInternalFormat: headerDataView.getUint32(4 * dataSize, littleEndian),
2973
+ glBaseInternalFormat: headerDataView.getUint32(5 * dataSize, littleEndian),
2974
+ pixelWidth: headerDataView.getUint32(6 * dataSize, littleEndian),
2975
+ pixelHeight: headerDataView.getUint32(7 * dataSize, littleEndian),
2976
+ pixelDepth: headerDataView.getUint32(8 * dataSize, littleEndian),
2977
+ numberOfArrayElements: headerDataView.getUint32(9 * dataSize, littleEndian),
2978
+ numberOfFaces: headerDataView.getUint32(10 * dataSize, littleEndian),
2979
+ numberOfMipmapLevels: headerDataView.getUint32(11 * dataSize, littleEndian),
2980
+ bytesOfKeyValueData: headerDataView.getUint32(12 * dataSize, littleEndian),
2981
+ // would need to make this more elaborate & adjust checks above to support more than one load type
2982
+ loadType: COMPRESSED_2D
2983
+ };
2984
+ // Make sure we have a compressed type. Not only reduces work, but probably better to let dev know they are not compressing.
2985
+ if (parsedResult.glType !== 0) {
2986
+ throw new Error("only compressed formats currently supported");
2987
+ } else {
2988
+ // value of zero is an indication to generate mipmaps @ runtime. Not usually allowed for compressed, so disregard.
2989
+ parsedResult.numberOfMipmapLevels = Math.max(1, parsedResult.numberOfMipmapLevels);
2990
+ }
2991
+ if (parsedResult.pixelHeight === 0 || parsedResult.pixelDepth !== 0) {
2992
+ throw new Error("only 2D textures currently supported");
2993
+ }
2994
+ if (parsedResult.numberOfArrayElements !== 0) {
2995
+ throw new Error("texture arrays not currently supported");
2996
+ }
2997
+ if (parsedResult.numberOfFaces !== facesExpected) {
2998
+ throw new Error("number of faces expected" + facesExpected + ", but found " + parsedResult.numberOfFaces);
2999
+ }
3000
+ if (withMipmaps) {
3001
+ parsedResult.mipmaps = getMipmaps(parsedResult, true);
3002
+ }
3003
+ if (mapEngineFormat) {
3004
+ parsedResult.engineFormat = getEngineFormat(parsedResult.glInternalFormat);
3005
+ }
3006
+ return parsedResult;
3007
+ }
3008
+ };
3009
+
3010
+ function parseSingleKTX(data) {
3011
+ var ktx = khronosTextureContainerParser.parse(data, 1, true, true);
3012
+ return {
3013
+ mipmaps: ktx.mipmaps,
3014
+ engineFormat: ktx.engineFormat,
3015
+ internalFormat: ktx.glInternalFormat,
3016
+ width: ktx.pixelWidth,
3017
+ height: ktx.pixelHeight
3018
+ };
3019
+ }
3020
+ function parseCubeKTX(dataArray) {
3021
+ var mipmapsFaces = [];
3022
+ var internalFormat;
3023
+ var engineFormat;
3024
+ var width;
3025
+ var height;
3026
+ for(var i = 0; i < dataArray.length; i++){
3027
+ var ktx = khronosTextureContainerParser.parse(dataArray[i], 1, true, true);
3028
+ mipmapsFaces.push(ktx.mipmaps);
3029
+ if (i === 0) {
3030
+ width = ktx.pixelWidth;
3031
+ height = ktx.pixelHeight;
3032
+ internalFormat = ktx.glInternalFormat;
3033
+ engineFormat = ktx.engineFormat;
3034
+ }
3035
+ }
3036
+ return {
3037
+ mipmapsFaces: mipmapsFaces,
3038
+ engineFormat: engineFormat,
3039
+ internalFormat: internalFormat,
3040
+ width: width,
3041
+ height: height
3042
+ };
3043
+ }
3044
+
3045
+ var KTXCubeLoader = /*#__PURE__*/ function(Loader) {
3046
+ _inherits(KTXCubeLoader, Loader);
3047
+ function KTXCubeLoader() {
3048
+ return Loader.apply(this, arguments);
3049
+ }
3050
+ var _proto = KTXCubeLoader.prototype;
3051
+ _proto.load = function load(item, resourceManager) {
3052
+ var _this = this;
3053
+ return new engineCore.AssetPromise(function(resolve, reject) {
3054
+ Promise.all(item.urls.map(function(url) {
3055
+ return _this.request(url, _extends({}, item, {
3056
+ type: "arraybuffer"
3057
+ }));
3058
+ })).then(function(data) {
3059
+ var parsedData = parseCubeKTX(data);
3060
+ var width = parsedData.width, mipmapsFaces = parsedData.mipmapsFaces, engineFormat = parsedData.engineFormat;
3061
+ var mipmap = mipmapsFaces[0].length > 1;
3062
+ var texture = new engineCore.TextureCube(resourceManager.engine, width, engineFormat, mipmap);
3063
+ for(var face = 0; face < 6; face++){
3064
+ var length = mipmapsFaces[face].length;
3065
+ for(var miplevel = 0; miplevel < length; miplevel++){
3066
+ var _mipmapsFaces_face_miplevel = mipmapsFaces[face][miplevel], _$data = _mipmapsFaces_face_miplevel.data, width1 = _mipmapsFaces_face_miplevel.width, height = _mipmapsFaces_face_miplevel.height;
3067
+ texture.setPixelBuffer(engineCore.TextureCubeFace.PositiveX + face, _$data, miplevel, 0, 0, width1, height);
3068
+ }
3069
+ }
3070
+ resolve(texture);
3071
+ }).catch(function(e) {
3072
+ reject(e);
3073
+ });
3074
+ });
3075
+ };
3076
+ return KTXCubeLoader;
3077
+ }(engineCore.Loader);
3078
+ KTXCubeLoader = __decorate([
3079
+ engineCore.resourceLoader(engineCore.AssetType.KTXCube, [])
3080
+ ], KTXCubeLoader);
3081
+
3082
+ var KTXLoader = /*#__PURE__*/ function(Loader) {
3083
+ _inherits(KTXLoader, Loader);
3084
+ function KTXLoader() {
3085
+ return Loader.apply(this, arguments);
3086
+ }
3087
+ var _proto = KTXLoader.prototype;
3088
+ _proto.load = function load(item, resourceManager) {
3089
+ var _this = this;
3090
+ return new engineCore.AssetPromise(function(resolve, reject) {
3091
+ _this.request(item.url, _extends({}, item, {
3092
+ type: "arraybuffer"
3093
+ })).then(function(bin) {
3094
+ var parsedData = parseSingleKTX(bin);
3095
+ var width = parsedData.width, height = parsedData.height, mipmaps = parsedData.mipmaps, engineFormat = parsedData.engineFormat;
3096
+ var mipmap = mipmaps.length > 1;
3097
+ var texture = new engineCore.Texture2D(resourceManager.engine, width, height, engineFormat, mipmap);
3098
+ for(var miplevel = 0; miplevel < mipmaps.length; miplevel++){
3099
+ var _mipmaps_miplevel = mipmaps[miplevel], width1 = _mipmaps_miplevel.width, height1 = _mipmaps_miplevel.height, data = _mipmaps_miplevel.data;
3100
+ texture.setPixelBuffer(data, miplevel, 0, 0, width1, height1);
3101
+ }
3102
+ resolve(texture);
3103
+ }).catch(function(e) {
3104
+ reject(e);
3105
+ });
3106
+ });
3107
+ };
3108
+ return KTXLoader;
3109
+ }(engineCore.Loader);
3110
+ KTXLoader = __decorate([
3111
+ engineCore.resourceLoader(engineCore.AssetType.KTX, [
3112
+ "ktx"
3113
+ ])
3114
+ ], KTXLoader);
3115
+
3116
+ var MaterialLoader = /*#__PURE__*/ function(Loader) {
3117
+ _inherits(MaterialLoader, Loader);
3118
+ function MaterialLoader() {
3119
+ return Loader.apply(this, arguments);
3120
+ }
3121
+ var _proto = MaterialLoader.prototype;
3122
+ _proto.load = function load(item, resourceManager) {
3123
+ var _this = this;
3124
+ return new engineCore.AssetPromise(function(resolve, reject) {
3125
+ _this.request(item.url, _extends({}, item, {
3126
+ type: "json"
3127
+ })).then(function(json) {
3128
+ var _loop = function(key) {
3129
+ var _shaderData_key = shaderData[key], type = _shaderData_key.type, value = _shaderData_key.value;
3130
+ switch(type){
3131
+ case "Vector2":
3132
+ materialShaderData.setVector2(key, new engineMath.Vector2(value.x, value.y));
3133
+ break;
3134
+ case "Vector3":
3135
+ materialShaderData.setVector3(key, new engineMath.Vector3(value.x, value.y, value.z));
3136
+ break;
3137
+ case "Vector4":
3138
+ materialShaderData.setVector4(key, new engineMath.Vector4(value.x, value.y, value.z, value.w));
3139
+ break;
3140
+ case "Color":
3141
+ materialShaderData.setColor(key, new engineMath.Color(value.r, value.g, value.b, value.a));
3142
+ break;
3143
+ case "Float":
3144
+ materialShaderData.setFloat(key, value);
3145
+ break;
3146
+ case "Texture":
3147
+ texturePromises.push(// @ts-ignore
3148
+ resourceManager.getResourceByRef(value).then(function(texture) {
3149
+ materialShaderData.setTexture(key, texture);
3150
+ }));
3151
+ break;
3152
+ }
3153
+ };
3154
+ var engine = resourceManager.engine;
3155
+ var name = json.name, shader = json.shader, shaderData = json.shaderData, macros = json.macros, renderState = json.renderState;
3156
+ var material;
3157
+ switch(shader){
3158
+ case "pbr":
3159
+ material = new engineCore.PBRMaterial(engine);
3160
+ break;
3161
+ case "pbr-specular":
3162
+ material = new engineCore.PBRSpecularMaterial(engine);
3163
+ break;
3164
+ case "unlit":
3165
+ material = new engineCore.UnlitMaterial(engine);
3166
+ break;
3167
+ case "blinn-phong":
3168
+ material = new engineCore.BlinnPhongMaterial(engine);
3169
+ break;
3170
+ case "bake-pbr":
3171
+ // @todo refactor custom shader later
3172
+ // @ts-ignore
3173
+ material = new engineCore.PBRBaseMaterial(engine, engineCore.Shader.find("bake-pbr"));
3174
+ break;
3175
+ }
3176
+ material.name = name;
3177
+ var texturePromises = new Array();
3178
+ var materialShaderData = material.shaderData;
3179
+ for(var key in shaderData)_loop(key);
3180
+ for(var i = 0, length = macros.length; i < length; i++){
3181
+ var _macros_i = macros[i], name1 = _macros_i.name, value = _macros_i.value;
3182
+ if (value == undefined) {
3183
+ materialShaderData.enableMacro(name1);
3184
+ } else {
3185
+ materialShaderData.enableMacro(name1, value);
3186
+ }
3187
+ }
3188
+ for(var key1 in renderState){
3189
+ material[key1] = renderState[key1];
3190
+ }
3191
+ return Promise.all(texturePromises).then(function() {
3192
+ resolve(material);
3193
+ });
3194
+ }).catch(reject);
3195
+ });
3196
+ };
3197
+ return MaterialLoader;
3198
+ }(engineCore.Loader);
3199
+ MaterialLoader = __decorate([
3200
+ engineCore.resourceLoader(engineCore.AssetType.Material, [
3201
+ "json"
3202
+ ])
3203
+ ], MaterialLoader);
3204
+
3205
+ function _defineProperties(target, props) {
3206
+ for (var i = 0; i < props.length; i++) {
3207
+ var descriptor = props[i];
3208
+ descriptor.enumerable = descriptor.enumerable || false;
3209
+ descriptor.configurable = true;
3210
+
3211
+ if ("value" in descriptor) descriptor.writable = true;
3212
+
3213
+ Object.defineProperty(target, descriptor.key, descriptor);
3214
+ }
3215
+ }
3216
+ function _create_class(Constructor, protoProps, staticProps) {
3217
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
3218
+ if (staticProps) _defineProperties(Constructor, staticProps);
3219
+
3220
+ return Constructor;
3221
+ }
3222
+
3223
+ var BufferReader = /*#__PURE__*/ function() {
3224
+ function BufferReader(buffer, byteOffset, byteLength, littleEndian) {
3225
+ if (byteOffset === void 0) byteOffset = 0;
3226
+ if (littleEndian === void 0) littleEndian = true;
3227
+ this.buffer = buffer;
3228
+ // byteLength = byteLength ?? _buffer.byteLength;
3229
+ this._dataView = new DataView(buffer);
3230
+ this._littleEndian = littleEndian;
3231
+ this._offset = byteOffset;
3232
+ }
3233
+ var _proto = BufferReader.prototype;
3234
+ _proto.nextUint8 = function nextUint8() {
3235
+ var value = this._dataView.getUint8(this._offset);
3236
+ this._offset += 1;
3237
+ return value;
3238
+ };
3239
+ _proto.nextUint16 = function nextUint16() {
3240
+ var value = this._dataView.getUint16(this._offset, this._littleEndian);
3241
+ this._offset += 2;
3242
+ return value;
3243
+ };
3244
+ _proto.nextUint32 = function nextUint32() {
3245
+ var value = this._dataView.getUint32(this._offset, this._littleEndian);
3246
+ this._offset += 4;
3247
+ return value;
3248
+ };
3249
+ _proto.nextInt32 = function nextInt32() {
3250
+ var value = this._dataView.getInt32(this._offset, this._littleEndian);
3251
+ this._offset += 4;
3252
+ return value;
3253
+ };
3254
+ _proto.nextInt32Array = function nextInt32Array(len) {
3255
+ var value = new Int32Array(this.buffer, this._offset, len);
3256
+ this._offset += 4 * len;
3257
+ return value;
3258
+ };
3259
+ _proto.nextFloat32 = function nextFloat32() {
3260
+ var value = this._dataView.getFloat32(this._offset, this._littleEndian);
3261
+ this._offset += 4;
3262
+ return value;
3263
+ };
3264
+ _proto.nextFloat32Array = function nextFloat32Array(len) {
3265
+ var value = new Float32Array(this.buffer, this._offset, len);
3266
+ this._offset += 4 * len;
3267
+ return value;
3268
+ };
3269
+ _proto.nextUint32Array = function nextUint32Array(len) {
3270
+ var value = new Uint32Array(this.buffer, this._offset, len);
3271
+ this._offset += 4 * len;
3272
+ return value;
3273
+ };
3274
+ _proto.nextUint8Array = function nextUint8Array(len) {
3275
+ var value = new Uint8Array(this.buffer, this._offset, len);
3276
+ this._offset += len;
3277
+ return value;
3278
+ };
3279
+ _proto.nextUint64 = function nextUint64() {
3280
+ var left = this._dataView.getUint32(this._offset, this._littleEndian);
3281
+ var right = this._dataView.getUint32(this._offset + 4, this._littleEndian);
3282
+ var value = left + Math.pow(2, 32) * right;
3283
+ this._offset += 8;
3284
+ return value;
3285
+ };
3286
+ _proto.nextStr = function nextStr() {
3287
+ var strByteLength = this.nextUint16();
3288
+ var uint8Array = new Uint8Array(this.buffer, this._offset, strByteLength);
3289
+ this._offset += strByteLength;
3290
+ return GLTFUtil.decodeText(uint8Array);
3291
+ };
3292
+ /**
3293
+ * image data 放在最后
3294
+ */ _proto.nextImageData = function nextImageData(count) {
3295
+ return this.buffer.slice(this._offset);
3296
+ };
3297
+ _proto.nextImagesData = function nextImagesData(count) {
3298
+ var imagesLen = new Array(count);
3299
+ // Start offset of Uint32Array should be a multiple of 4. ref: https://stackoverflow.com/questions/15417310/why-typed-array-constructors-require-offset-to-be-multiple-of-underlying-type-si
3300
+ for(var i = 0; i < count; i++){
3301
+ var len = this._dataView.getUint32(this._offset, this._littleEndian);
3302
+ imagesLen[i] = len;
3303
+ this._offset += 4;
3304
+ }
3305
+ var imagesData = [];
3306
+ for(var i1 = 0; i1 < count; i1++){
3307
+ var len1 = imagesLen[i1];
3308
+ var buffer = this.buffer.slice(this._offset, this._offset + len1);
3309
+ this._offset += len1;
3310
+ imagesData.push(buffer);
3311
+ }
3312
+ return imagesData;
3313
+ };
3314
+ _proto.skip = function skip(bytes) {
3315
+ this._offset += bytes;
3316
+ return this;
3317
+ };
3318
+ _proto.scan = function scan(maxByteLength, term) {
3319
+ if (term === void 0) term = 0x00;
3320
+ var byteOffset = this._offset;
3321
+ var byteLength = 0;
3322
+ while(this._dataView.getUint8(this._offset) !== term && byteLength < maxByteLength){
3323
+ byteLength++;
3324
+ this._offset++;
3325
+ }
3326
+ if (byteLength < maxByteLength) this._offset++;
3327
+ return new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + byteOffset, byteLength);
3328
+ };
3329
+ _create_class(BufferReader, [
3330
+ {
3331
+ key: "offset",
3332
+ get: function get() {
3333
+ return this._offset;
3334
+ }
3335
+ }
3336
+ ]);
3337
+ return BufferReader;
3338
+ }();
3339
+ (function() {
3340
+ BufferReader.imageMapping = {
3341
+ 0: "image/png",
3342
+ 1: "image/jpg",
3343
+ 2: "image/webp",
3344
+ 3: "ktx"
3345
+ };
3346
+ })();
3347
+
3348
+ var decoderMap = {};
3349
+ /**
3350
+ * Decoder decorator generator.
3351
+ * @param type - resource file type.
3352
+ * @returns Decoder decorator
3353
+ */ function decoder(type) {
3354
+ return function(target) {
3355
+ decoderMap[type] = target;
3356
+ };
3357
+ }
3358
+
3359
+ var FileHeader = /*#__PURE__*/ function() {
3360
+ function FileHeader() {
3361
+ this.totalLength = 0;
3362
+ this.version = 0;
3363
+ this.type = "";
3364
+ this.name = "";
3365
+ this.headerLength = 0;
3366
+ }
3367
+ FileHeader.decode = function decode(arrayBuffer) {
3368
+ var dataView = new DataView(arrayBuffer);
3369
+ var totalLen = dataView.getUint32(0, true);
3370
+ var fileVersion = dataView.getUint8(4);
3371
+ var typeLen = dataView.getUint16(5, true);
3372
+ var typeUint8Array = new Uint8Array(arrayBuffer, 7, typeLen);
3373
+ var nameLen = dataView.getUint16(7 + typeLen, true);
3374
+ var nameUint8Array = new Uint8Array(arrayBuffer, 9 + typeLen, nameLen);
3375
+ var name = GLTFUtil.decodeText(nameUint8Array);
3376
+ var type = GLTFUtil.decodeText(typeUint8Array);
3377
+ var header = new FileHeader();
3378
+ header.totalLength = totalLen;
3379
+ header.name = name;
3380
+ header.type = type;
3381
+ header.version = fileVersion;
3382
+ header.headerLength = nameUint8Array.byteLength + typeUint8Array.byteLength + 9;
3383
+ return header;
3384
+ };
3385
+ _create_class(FileHeader, [
3386
+ {
3387
+ key: "dataLength",
3388
+ get: function get() {
3389
+ return this.totalLength - this.headerLength;
3390
+ }
3391
+ }
3392
+ ]);
3393
+ return FileHeader;
3394
+ }();
3395
+
3396
+ exports.MeshDecoder = /*#__PURE__*/ function() {
3397
+ function MeshDecoder() {}
3398
+ MeshDecoder.decode = function decode(engine, bufferReader) {
3399
+ return new Promise(function(resolve) {
3400
+ var modelMesh = new engineCore.ModelMesh(engine);
3401
+ var jsonDataString = bufferReader.nextStr();
3402
+ var encodedMeshData = JSON.parse(jsonDataString);
3403
+ // @ts-ignore Vector3 is not compatible with {x: number, y: number, z: number}.
3404
+ encodedMeshData.bounds && modelMesh.bounds.copyFrom(encodedMeshData.bounds);
3405
+ var offset = Math.ceil(bufferReader.offset / 4) * 4;
3406
+ var float32Array = new Float32Array(bufferReader.buffer, encodedMeshData.positions.start + offset, (encodedMeshData.positions.end - encodedMeshData.positions.start) / 4);
3407
+ var vertexCount = float32Array.length / 3;
3408
+ var positions = float32ArrayToVector3(float32Array, vertexCount);
3409
+ modelMesh.setPositions(positions);
3410
+ if (encodedMeshData.normals) {
3411
+ var float32Array1 = new Float32Array(bufferReader.buffer, encodedMeshData.normals.start + offset, (encodedMeshData.normals.end - encodedMeshData.normals.start) / 4);
3412
+ var normals = float32ArrayToVector3(float32Array1, vertexCount);
3413
+ modelMesh.setNormals(normals);
3414
+ }
3415
+ if (encodedMeshData.uvs) {
3416
+ var float32Array2 = new Float32Array(bufferReader.buffer, encodedMeshData.uvs.start + offset, (encodedMeshData.uvs.end - encodedMeshData.uvs.start) / 4);
3417
+ modelMesh.setUVs(float32ArrayToVector2(float32Array2, vertexCount));
3418
+ }
3419
+ if (encodedMeshData.uv1) {
3420
+ var float32Array3 = new Float32Array(bufferReader.buffer, encodedMeshData.uv1.start + offset, (encodedMeshData.uv1.end - encodedMeshData.uv1.start) / 4);
3421
+ modelMesh.setUVs(float32ArrayToVector2(float32Array3, vertexCount), 1);
3422
+ }
3423
+ if (encodedMeshData.uv2) {
3424
+ var float32Array4 = new Float32Array(bufferReader.buffer, encodedMeshData.uv2.start + offset, (encodedMeshData.uv2.end - encodedMeshData.uv2.start) / 4);
3425
+ modelMesh.setUVs(float32ArrayToVector2(float32Array4, vertexCount), 2);
3426
+ }
3427
+ if (encodedMeshData.uv3) {
3428
+ var float32Array5 = new Float32Array(bufferReader.buffer, encodedMeshData.uv3.start + offset, (encodedMeshData.uv3.end - encodedMeshData.uv3.start) / 4);
3429
+ modelMesh.setUVs(float32ArrayToVector2(float32Array5, vertexCount), 3);
3430
+ }
3431
+ if (encodedMeshData.uv4) {
3432
+ var float32Array6 = new Float32Array(bufferReader.buffer, encodedMeshData.uv4.start + offset, (encodedMeshData.uv4.end - encodedMeshData.uv4.start) / 4);
3433
+ modelMesh.setUVs(float32ArrayToVector2(float32Array6, vertexCount), 4);
3434
+ }
3435
+ if (encodedMeshData.uv5) {
3436
+ var float32Array7 = new Float32Array(bufferReader.buffer, encodedMeshData.uv5.start + offset, (encodedMeshData.uv5.end - encodedMeshData.uv5.start) / 4);
3437
+ modelMesh.setUVs(float32ArrayToVector2(float32Array7, vertexCount), 5);
3438
+ }
3439
+ if (encodedMeshData.uv6) {
3440
+ var float32Array8 = new Float32Array(bufferReader.buffer, encodedMeshData.uv6.start + offset, (encodedMeshData.uv6.end - encodedMeshData.uv6.start) / 4);
3441
+ modelMesh.setUVs(float32ArrayToVector2(float32Array8, vertexCount), 6);
3442
+ }
3443
+ if (encodedMeshData.uv7) {
3444
+ var float32Array9 = new Float32Array(bufferReader.buffer, encodedMeshData.uv7.start + offset, (encodedMeshData.uv7.end - encodedMeshData.uv7.start) / 4);
3445
+ modelMesh.setUVs(float32ArrayToVector2(float32Array9, vertexCount), 7);
3446
+ }
3447
+ if (encodedMeshData.colors) {
3448
+ var float32Array10 = new Float32Array(bufferReader.buffer, encodedMeshData.colors.start + offset, (encodedMeshData.colors.end - encodedMeshData.colors.start) / 4);
3449
+ modelMesh.setColors(float32ArrayToVColor(float32Array10, vertexCount));
3450
+ }
3451
+ if (encodedMeshData.boneWeights) {
3452
+ var float32Array11 = new Float32Array(bufferReader.buffer, encodedMeshData.boneWeights.start + offset, (encodedMeshData.boneWeights.end - encodedMeshData.boneWeights.start) / 4);
3453
+ modelMesh.setBoneWeights(float32ArrayToVector4(float32Array11, vertexCount));
3454
+ }
3455
+ if (encodedMeshData.boneIndices) {
3456
+ var float32Array12 = new Float32Array(bufferReader.buffer, encodedMeshData.boneIndices.start + offset, (encodedMeshData.boneIndices.end - encodedMeshData.boneIndices.start) / 4);
3457
+ modelMesh.setBoneIndices(float32ArrayToVector4(float32Array12, vertexCount));
3458
+ }
3459
+ if (encodedMeshData.blendShapes) {
3460
+ encodedMeshData.blendShapes.forEach(function(blendShapeData) {
3461
+ var blendShape = new engineCore.BlendShape(blendShapeData.name);
3462
+ blendShapeData.frames.forEach(function(frameData) {
3463
+ var positionArray = new Float32Array(bufferReader.buffer, frameData.deltaPosition.start + offset, (frameData.deltaPosition.end - frameData.deltaPosition.start) / 4);
3464
+ var count = positionArray.length / 3;
3465
+ var deltaPosition = float32ArrayToVector3(positionArray, count);
3466
+ if (frameData.deltaNormals) {
3467
+ var normalsArray = new Float32Array(bufferReader.buffer, frameData.deltaNormals.start + offset, (frameData.deltaNormals.end - frameData.deltaNormals.start) / 4);
3468
+ float32ArrayToVector3(normalsArray, count);
3469
+ }
3470
+ if (frameData.deltaTangents) {
3471
+ var tangentsArray = new Float32Array(bufferReader.buffer, frameData.deltaTangents.start + offset, (frameData.deltaTangents.end - frameData.deltaTangents.start) / 4);
3472
+ float32ArrayToVector4(tangentsArray, count);
3473
+ }
3474
+ blendShape.addFrame(frameData.weight, deltaPosition);
3475
+ });
3476
+ modelMesh.addBlendShape(blendShape);
3477
+ });
3478
+ }
3479
+ if (encodedMeshData.indices) {
3480
+ var indices = null;
3481
+ if (encodedMeshData.indices.type === 0) {
3482
+ indices = new Uint16Array(bufferReader.buffer, encodedMeshData.indices.start + offset, (encodedMeshData.indices.end - encodedMeshData.indices.start) / 2);
3483
+ } else {
3484
+ indices = new Uint32Array(bufferReader.buffer, encodedMeshData.indices.start + offset, (encodedMeshData.indices.end - encodedMeshData.indices.start) / 4);
3485
+ }
3486
+ modelMesh.setIndices(indices);
3487
+ }
3488
+ encodedMeshData.subMeshes.forEach(function(subMesh) {
3489
+ return modelMesh.addSubMesh(subMesh);
3490
+ });
3491
+ modelMesh.uploadData(false);
3492
+ resolve(modelMesh);
3493
+ });
3494
+ };
3495
+ return MeshDecoder;
3496
+ }();
3497
+ exports.MeshDecoder = __decorate([
3498
+ decoder("Mesh")
3499
+ ], exports.MeshDecoder);
3500
+ function float32ArrayToVColor(float32Array, vertexCount) {
3501
+ var array = new Array(vertexCount);
3502
+ for(var i = 0; i < vertexCount; i++){
3503
+ array[i] = new engineMath.Color(float32Array[i * 4], float32Array[i * 4 + 1], float32Array[i * 4 + 2], float32Array[i * 4 + 3]);
3504
+ }
3505
+ return array;
3506
+ }
3507
+ function float32ArrayToVector4(float32Array, vertexCount) {
3508
+ var array = new Array(vertexCount);
3509
+ for(var i = 0; i < vertexCount; i++){
3510
+ array[i] = new engineMath.Vector4(float32Array[i * 4], float32Array[i * 4 + 1], float32Array[i * 4 + 2], float32Array[i * 4 + 3]);
3511
+ }
3512
+ return array;
3513
+ }
3514
+ function float32ArrayToVector3(float32Array, vertexCount) {
3515
+ var array = new Array(vertexCount);
3516
+ for(var i = 0; i < vertexCount; i++){
3517
+ array[i] = new engineMath.Vector3(float32Array[i * 3], float32Array[i * 3 + 1], float32Array[i * 3 + 2]);
3518
+ }
3519
+ return array;
3520
+ }
3521
+ function float32ArrayToVector2(float32Array, vertexCount) {
3522
+ var array = new Array(vertexCount);
3523
+ for(var i = 0; i < vertexCount; i++){
3524
+ array[i] = new engineMath.Vector2(float32Array[i * 2], float32Array[i * 2 + 1]);
3525
+ }
3526
+ return array;
3527
+ }
3528
+
3529
+ exports.Texture2DDecoder = /*#__PURE__*/ function() {
3530
+ function Texture2DDecoder() {}
3531
+ Texture2DDecoder.decode = function decode(engine, bufferReader) {
3532
+ return new Promise(function(resolve, reject) {
3533
+ var objectId = bufferReader.nextStr();
3534
+ var mipmap = !!bufferReader.nextUint8();
3535
+ var filterMode = bufferReader.nextUint8();
3536
+ var anisoLevel = bufferReader.nextUint8();
3537
+ var wrapModeU = bufferReader.nextUint8();
3538
+ var wrapModeV = bufferReader.nextUint8();
3539
+ var format = bufferReader.nextUint8();
3540
+ var width = bufferReader.nextUint16();
3541
+ var height = bufferReader.nextUint16();
3542
+ var isPixelBuffer = bufferReader.nextUint8();
3543
+ var mipCount = bufferReader.nextUint8();
3544
+ var imagesData = bufferReader.nextImagesData(mipCount);
3545
+ var texture2D = new engineCore.Texture2D(engine, width, height, format, mipmap);
3546
+ texture2D.filterMode = filterMode;
3547
+ texture2D.anisoLevel = anisoLevel;
3548
+ texture2D.wrapModeU = wrapModeU;
3549
+ texture2D.wrapModeV = wrapModeV;
3550
+ if (isPixelBuffer) {
3551
+ var pixelBuffer = new Uint8Array(imagesData[0]);
3552
+ texture2D.setPixelBuffer(pixelBuffer);
3553
+ if (mipmap) {
3554
+ texture2D.generateMipmaps();
3555
+ for(var i = 1; i < mipCount; i++){
3556
+ var pixelBuffer1 = new Uint8Array(imagesData[i]);
3557
+ texture2D.setPixelBuffer(pixelBuffer1, i);
3558
+ }
3559
+ }
3560
+ // @ts-ignore
3561
+ engine.resourceManager._objectPool[objectId] = texture2D;
3562
+ resolve(texture2D);
3563
+ } else {
3564
+ var blob = new window.Blob([
3565
+ imagesData[0]
3566
+ ]);
3567
+ var img = new Image();
3568
+ img.onload = function() {
3569
+ texture2D.setImageSource(img);
3570
+ var completedCount = 0;
3571
+ var onComplete = function() {
3572
+ completedCount++;
3573
+ if (completedCount >= mipCount) {
3574
+ resolve(texture2D);
3575
+ }
3576
+ };
3577
+ onComplete();
3578
+ if (mipmap) {
3579
+ var _loop = function(i) {
3580
+ var blob = new window.Blob([
3581
+ imagesData[i]
3582
+ ]);
3583
+ var img = new Image();
3584
+ img.onload = function() {
3585
+ texture2D.setImageSource(img, i);
3586
+ onComplete();
3587
+ };
3588
+ img.src = URL.createObjectURL(blob);
3589
+ };
3590
+ texture2D.generateMipmaps();
3591
+ for(var i = 1; i < mipCount; i++)_loop(i);
3592
+ }
3593
+ };
3594
+ img.src = URL.createObjectURL(blob);
3595
+ }
3596
+ });
3597
+ };
3598
+ return Texture2DDecoder;
3599
+ }();
3600
+ exports.Texture2DDecoder = __decorate([
3601
+ decoder("Texture2D")
3602
+ ], exports.Texture2DDecoder);
3603
+
3604
+ function _is_native_reflect_construct() {
3605
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
3606
+ if (Reflect.construct.sham) return false;
3607
+ if (typeof Proxy === "function") return true;
3608
+
3609
+ try {
3610
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));
3611
+
3612
+ return true;
3613
+ } catch (e) {
3614
+ return false;
3615
+ }
3616
+ }
3617
+
3618
+ function _construct(Parent, args, Class) {
3619
+ if (_is_native_reflect_construct()) _construct = Reflect.construct;
3620
+ else {
3621
+ _construct = function construct(Parent, args, Class) {
3622
+ var a = [null];
3623
+ a.push.apply(a, args);
3624
+ var Constructor = Function.bind.apply(Parent, a);
3625
+ var instance = new Constructor();
3626
+
3627
+ if (Class) _set_prototype_of(instance, Class.prototype);
3628
+
3629
+ return instance;
3630
+ };
3631
+ }
3632
+
3633
+ return _construct.apply(null, arguments);
3634
+ }
3635
+
3636
+ var ReflectionParser = /*#__PURE__*/ function() {
3637
+ function ReflectionParser() {}
3638
+ ReflectionParser.registerCustomParseComponent = function registerCustomParseComponent(componentType, handle) {
3639
+ this.customParseComponentHandles[componentType] = handle;
3640
+ };
3641
+ ReflectionParser.parseEntity = function parseEntity(entityConfig, engine) {
3642
+ return ReflectionParser.getEntityByConfig(entityConfig, engine).then(function(entity) {
3643
+ var _entityConfig_isActive;
3644
+ entity.isActive = (_entityConfig_isActive = entityConfig.isActive) != null ? _entityConfig_isActive : true;
3645
+ var position = entityConfig.position, rotation = entityConfig.rotation, scale = entityConfig.scale;
3646
+ if (position) entity.transform.position.copyFrom(position);
3647
+ if (rotation) entity.transform.rotation.copyFrom(rotation);
3648
+ if (scale) entity.transform.scale.copyFrom(scale);
3649
+ return entity;
3650
+ });
3651
+ };
3652
+ ReflectionParser.getEntityByConfig = function getEntityByConfig(entityConfig, engine) {
3653
+ // @ts-ignore
3654
+ var assetRefId = entityConfig.assetRefId;
3655
+ if (assetRefId) {
3656
+ return engine.resourceManager// @ts-ignore
3657
+ .getResourceByRef({
3658
+ refId: assetRefId,
3659
+ key: entityConfig.key,
3660
+ isClone: entityConfig.isClone
3661
+ }).then(function(entity) {
3662
+ entity.name = entityConfig.name;
3663
+ return entity;
3664
+ });
3665
+ } else {
3666
+ var entity = new engineCore.Entity(engine, entityConfig.name);
3667
+ return Promise.resolve(entity);
3668
+ }
3669
+ };
3670
+ ReflectionParser.parseClassObject = function parseClassObject(item, engine, resourceManager) {
3671
+ if (resourceManager === void 0) resourceManager = engine.resourceManager;
3672
+ var Class = engineCore.Loader.getClass(item.class);
3673
+ var _item_constructParams;
3674
+ var params = (_item_constructParams = item.constructParams) != null ? _item_constructParams : [];
3675
+ var instance = _construct(Class, [].concat(params));
3676
+ return this.parsePropsAndMethods(instance, item, engine, resourceManager);
3677
+ };
3678
+ ReflectionParser.parseBasicType = function parseBasicType(value, engine, resourceManager) {
3679
+ if (resourceManager === void 0) resourceManager = engine.resourceManager;
3680
+ var _this = this;
3681
+ if (Array.isArray(value)) {
3682
+ return Promise.all(value.map(function(item) {
3683
+ return _this.parseBasicType(item, engine, resourceManager);
3684
+ }));
3685
+ } else if (typeof value === "object" && value != null) {
3686
+ if (this._isClass(value)) {
3687
+ // class object
3688
+ return this.parseClassObject(value, engine, resourceManager);
3689
+ } else if (this._isRef(value)) {
3690
+ // reference object
3691
+ return resourceManager.getResourceByRef(value);
3692
+ } else {
3693
+ // basic type
3694
+ return Promise.resolve(value);
3695
+ }
3696
+ } else {
3697
+ return Promise.resolve(value);
3698
+ }
3699
+ };
3700
+ ReflectionParser.parsePropsAndMethods = function parsePropsAndMethods(instance, item, engine, resourceManager) {
3701
+ if (resourceManager === void 0) resourceManager = engine.resourceManager;
3702
+ var _this = this;
3703
+ var promises = [];
3704
+ if (item.methods) {
3705
+ for(var methodName in item.methods){
3706
+ var methodParams = item.methods[methodName];
3707
+ for(var i = 0, count = methodParams.length; i < count; i++){
3708
+ var params = methodParams[i];
3709
+ var promise = this.parseMethod(instance, methodName, params, engine, resourceManager);
3710
+ promises.push(promise);
3711
+ }
3712
+ }
3713
+ }
3714
+ if (item.props) {
3715
+ var _this1 = this, _loop = function(key) {
3716
+ var value = item.props[key];
3717
+ var promise = _this1.parseBasicType(value, engine).then(function(v) {
3718
+ return instance[key] = v;
3719
+ });
3720
+ promises.push(promise);
3721
+ };
3722
+ for(var key in item.props)_loop(key);
3723
+ }
3724
+ return Promise.all(promises).then(function() {
3725
+ var handle = _this.customParseComponentHandles[instance.constructor.name];
3726
+ if (handle) return handle(instance, item, engine);
3727
+ else return instance;
3728
+ });
3729
+ };
3730
+ ReflectionParser.parseMethod = function parseMethod(instance, methodName, methodParams, engine, resourceManager) {
3731
+ if (resourceManager === void 0) resourceManager = engine.resourceManager;
3732
+ var _this = this;
3733
+ return Promise.all(methodParams.map(function(param) {
3734
+ return _this.parseBasicType(param, engine, resourceManager);
3735
+ })).then(function(result) {
3736
+ var _instance;
3737
+ return (_instance = instance)[methodName].apply(_instance, result);
3738
+ });
3739
+ };
3740
+ ReflectionParser._isClass = function _isClass(value) {
3741
+ return value["class"] != undefined;
3742
+ };
3743
+ ReflectionParser._isRef = function _isRef(value) {
3744
+ return value["refId"] != undefined;
3745
+ };
3746
+ return ReflectionParser;
3747
+ }();
3748
+ (function() {
3749
+ ReflectionParser.customParseComponentHandles = new Map();
3750
+ })();
3751
+
3752
+ var PrefabParser = /*#__PURE__*/ function() {
3753
+ function PrefabParser() {}
3754
+ PrefabParser.parseChildren = function parseChildren(entitiesConfig, entities, parentId) {
3755
+ var children = entitiesConfig.get(parentId).children;
3756
+ if (children && children.length > 0) {
3757
+ var parent = entities.get(parentId);
3758
+ for(var i = 0; i < children.length; i++){
3759
+ var childId = children[i];
3760
+ var entity = entities.get(childId);
3761
+ parent.addChild(entity);
3762
+ this.parseChildren(entitiesConfig, entities, childId);
3763
+ }
3764
+ }
3765
+ };
3766
+ return PrefabParser;
3767
+ }();
3768
+
3769
+ var ComponentMap = {
3770
+ Transform: engineCore.Transform,
3771
+ Animator: engineCore.Animator,
3772
+ DirectLight: engineCore.DirectLight,
3773
+ Camera: engineCore.Camera,
3774
+ MeshRenderer: engineCore.MeshRenderer,
3775
+ ParticleRenderer: engineCore.ParticleRenderer,
3776
+ PointLight: engineCore.PointLight,
3777
+ SpotLight: engineCore.SpotLight,
3778
+ Script: engineCore.Script,
3779
+ SpriteMask: engineCore.SpriteMask,
3780
+ SpriteRenderer: engineCore.SpriteRenderer,
3781
+ TextRenderer: engineCore.TextRenderer
3782
+ };
3783
+
3784
+ exports.InterpolableValueType = void 0;
3785
+ (function(InterpolableValueType) {
3786
+ InterpolableValueType[InterpolableValueType["Float"] = 0] = "Float";
3787
+ InterpolableValueType[InterpolableValueType["FloatArray"] = 1] = "FloatArray";
3788
+ InterpolableValueType[InterpolableValueType["Vector2"] = 2] = "Vector2";
3789
+ InterpolableValueType[InterpolableValueType["Vector3"] = 3] = "Vector3";
3790
+ InterpolableValueType[InterpolableValueType["Vector4"] = 4] = "Vector4";
3791
+ InterpolableValueType[InterpolableValueType["Quaternion"] = 5] = "Quaternion";
3792
+ InterpolableValueType[InterpolableValueType["Color"] = 6] = "Color";
3793
+ InterpolableValueType[InterpolableValueType["Array"] = 7] = "Array";
3794
+ InterpolableValueType[InterpolableValueType["Boolean"] = 8] = "Boolean";
3795
+ })(exports.InterpolableValueType || (exports.InterpolableValueType = {}));
3796
+ exports.AnimationClipDecoder = /*#__PURE__*/ function() {
3797
+ function AnimationClipDecoder() {}
3798
+ AnimationClipDecoder.decode = function decode(engine, bufferReader) {
3799
+ return new Promise(function(resolve) {
3800
+ var name = bufferReader.nextStr();
3801
+ var clip = new engineCore.AnimationClip(name);
3802
+ var eventsLen = bufferReader.nextUint16();
3803
+ for(var i = 0; i < eventsLen; ++i){
3804
+ var event = new engineCore.AnimationEvent();
3805
+ event.time = bufferReader.nextFloat32();
3806
+ event.functionName = bufferReader.nextStr();
3807
+ event.parameter = JSON.parse(bufferReader.nextStr()).val;
3808
+ clip.addEvent(event);
3809
+ }
3810
+ var curveBindingsLen = bufferReader.nextUint16();
3811
+ for(var i1 = 0; i1 < curveBindingsLen; ++i1){
3812
+ var relativePath = bufferReader.nextStr();
3813
+ var componentStr = bufferReader.nextStr();
3814
+ var componentType = ComponentMap[componentStr];
3815
+ var property = bufferReader.nextStr();
3816
+ var curve = void 0;
3817
+ var interpolation = bufferReader.nextUint8();
3818
+ var keysLen = bufferReader.nextUint16();
3819
+ var curveType = bufferReader.nextStr();
3820
+ switch(curveType){
3821
+ case "AnimationFloatCurve":
3822
+ {
3823
+ curve = curve || new engineCore.AnimationFloatCurve();
3824
+ curve.interpolation = interpolation;
3825
+ for(var j = 0; j < keysLen; ++j){
3826
+ var keyframe = new engineCore.Keyframe();
3827
+ keyframe.time = bufferReader.nextFloat32();
3828
+ keyframe.value = bufferReader.nextFloat32();
3829
+ keyframe.inTangent = bufferReader.nextFloat32();
3830
+ keyframe.outTangent = bufferReader.nextFloat32();
3831
+ curve.addKey(keyframe);
3832
+ }
3833
+ break;
3834
+ }
3835
+ case "AnimationArrayCurve":
3836
+ {
3837
+ curve = curve || new engineCore.AnimationArrayCurve();
3838
+ curve.interpolation = interpolation;
3839
+ for(var j1 = 0; j1 < keysLen; ++j1){
3840
+ var keyframe1 = new engineCore.Keyframe();
3841
+ keyframe1.time = bufferReader.nextFloat32();
3842
+ var len = bufferReader.nextUint16();
3843
+ keyframe1.value = Array.from(bufferReader.nextFloat32Array(len));
3844
+ keyframe1.inTangent = Array.from(bufferReader.nextFloat32Array(len));
3845
+ keyframe1.outTangent = Array.from(bufferReader.nextFloat32Array(len));
3846
+ curve.addKey(keyframe1);
3847
+ }
3848
+ break;
3849
+ }
3850
+ case "AnimationFloatArrayCurve":
3851
+ {
3852
+ curve = curve || new engineCore.AnimationFloatArrayCurve();
3853
+ curve.interpolation = interpolation;
3854
+ for(var j2 = 0; j2 < keysLen; ++j2){
3855
+ var keyframe2 = new engineCore.Keyframe();
3856
+ keyframe2.time = bufferReader.nextFloat32();
3857
+ var len1 = bufferReader.nextUint16();
3858
+ keyframe2.value = bufferReader.nextFloat32Array(len1);
3859
+ keyframe2.inTangent = Array.from(bufferReader.nextFloat32Array(len1));
3860
+ keyframe2.outTangent = Array.from(bufferReader.nextFloat32Array(len1));
3861
+ curve.addKey(keyframe2);
3862
+ }
3863
+ break;
3864
+ }
3865
+ case "AnimationVector2Curve":
3866
+ {
3867
+ curve = curve || new engineCore.AnimationVector2Curve();
3868
+ curve.interpolation = interpolation;
3869
+ for(var j3 = 0; j3 < keysLen; ++j3){
3870
+ var keyframe3 = new engineCore.Keyframe();
3871
+ keyframe3.time = bufferReader.nextFloat32();
3872
+ keyframe3.value = new engineMath.Vector2(bufferReader.nextFloat32(), bufferReader.nextFloat32());
3873
+ keyframe3.inTangent = new engineMath.Vector2(bufferReader.nextFloat32(), bufferReader.nextFloat32());
3874
+ keyframe3.outTangent = new engineMath.Vector2(bufferReader.nextFloat32(), bufferReader.nextFloat32());
3875
+ curve.addKey(keyframe3);
3876
+ }
3877
+ break;
3878
+ }
3879
+ case "AnimationVector3Curve":
3880
+ {
3881
+ curve = curve || new engineCore.AnimationVector3Curve();
3882
+ curve.interpolation = interpolation;
3883
+ for(var j4 = 0; j4 < keysLen; ++j4){
3884
+ var keyframe4 = new engineCore.Keyframe();
3885
+ keyframe4.time = bufferReader.nextFloat32();
3886
+ keyframe4.value = new engineMath.Vector3(bufferReader.nextFloat32(), bufferReader.nextFloat32(), bufferReader.nextFloat32());
3887
+ keyframe4.inTangent = new engineMath.Vector3(bufferReader.nextFloat32(), bufferReader.nextFloat32(), bufferReader.nextFloat32());
3888
+ keyframe4.outTangent = new engineMath.Vector3(bufferReader.nextFloat32(), bufferReader.nextFloat32(), bufferReader.nextFloat32());
3889
+ curve.addKey(keyframe4);
3890
+ }
3891
+ break;
3892
+ }
3893
+ case "AnimationVector4Curve":
3894
+ {
3895
+ curve = curve || new engineCore.AnimationVector4Curve();
3896
+ curve.interpolation = interpolation;
3897
+ var keyframe5 = new engineCore.Keyframe();
3898
+ keyframe5.time = bufferReader.nextFloat32();
3899
+ keyframe5.value = new engineMath.Vector4(bufferReader.nextFloat32(), bufferReader.nextFloat32(), bufferReader.nextFloat32(), bufferReader.nextFloat32());
3900
+ keyframe5.inTangent = new engineMath.Vector4(bufferReader.nextFloat32(), bufferReader.nextFloat32(), bufferReader.nextFloat32(), bufferReader.nextFloat32());
3901
+ keyframe5.outTangent = new engineMath.Vector4(bufferReader.nextFloat32(), bufferReader.nextFloat32(), bufferReader.nextFloat32(), bufferReader.nextFloat32());
3902
+ curve.addKey(keyframe5);
3903
+ break;
3904
+ }
3905
+ case "AnimationColorCurve":
3906
+ {
3907
+ curve = curve || new engineCore.AnimationColorCurve();
3908
+ curve.interpolation = interpolation;
3909
+ for(var j5 = 0; j5 < keysLen; ++j5){
3910
+ var keyframe6 = new engineCore.Keyframe();
3911
+ keyframe6.time = bufferReader.nextFloat32();
3912
+ keyframe6.value = new engineMath.Color(bufferReader.nextFloat32(), bufferReader.nextFloat32(), bufferReader.nextFloat32(), bufferReader.nextFloat32());
3913
+ keyframe6.inTangent = new engineMath.Vector4(bufferReader.nextFloat32(), bufferReader.nextFloat32(), bufferReader.nextFloat32(), bufferReader.nextFloat32());
3914
+ keyframe6.outTangent = new engineMath.Vector4(bufferReader.nextFloat32(), bufferReader.nextFloat32(), bufferReader.nextFloat32(), bufferReader.nextFloat32());
3915
+ curve.addKey(keyframe6);
3916
+ }
3917
+ break;
3918
+ }
3919
+ case "AnimationQuaternionCurve":
3920
+ {
3921
+ curve = curve || new engineCore.AnimationQuaternionCurve();
3922
+ curve.interpolation = interpolation;
3923
+ for(var j6 = 0; j6 < keysLen; ++j6){
3924
+ var keyframe7 = new engineCore.Keyframe();
3925
+ keyframe7.time = bufferReader.nextFloat32();
3926
+ keyframe7.value = new engineMath.Quaternion(bufferReader.nextFloat32(), bufferReader.nextFloat32(), bufferReader.nextFloat32(), bufferReader.nextFloat32());
3927
+ keyframe7.inTangent = new engineMath.Vector4(bufferReader.nextFloat32(), bufferReader.nextFloat32(), bufferReader.nextFloat32(), bufferReader.nextFloat32());
3928
+ keyframe7.outTangent = new engineMath.Vector4(bufferReader.nextFloat32(), bufferReader.nextFloat32(), bufferReader.nextFloat32(), bufferReader.nextFloat32());
3929
+ curve.addKey(keyframe7);
3930
+ }
3931
+ break;
3932
+ }
3933
+ }
3934
+ clip.addCurveBinding(relativePath, componentType, property, curve);
3935
+ }
3936
+ resolve(clip);
3937
+ });
3938
+ };
3939
+ return AnimationClipDecoder;
3940
+ }();
3941
+ exports.AnimationClipDecoder = __decorate([
3942
+ decoder("AnimationClip")
3943
+ ], exports.AnimationClipDecoder);
3944
+
3945
+ var SceneParserContext = /*#__PURE__*/ function() {
3946
+ function SceneParserContext(originalData, scene) {
3947
+ this.originalData = originalData;
3948
+ this.scene = scene;
3949
+ this.entityMap = new Map();
3950
+ this.components = new Map();
3951
+ this.assets = new Map();
3952
+ this.entityConfigMap = new Map();
3953
+ this.rootIds = [];
3954
+ }
3955
+ var _proto = SceneParserContext.prototype;
3956
+ _proto.destroy = function destroy() {
3957
+ this.entityMap.clear();
3958
+ this.components.clear();
3959
+ this.assets.clear();
3960
+ this.entityConfigMap.clear();
3961
+ this.rootIds.length = 0;
3962
+ };
3963
+ return SceneParserContext;
3964
+ }();
3965
+
3966
+ /** @Internal */ var SceneParser = /*#__PURE__*/ function() {
3967
+ function SceneParser(context) {
3968
+ var _this = this;
3969
+ this.context = context;
3970
+ this._engine = this.context.scene.engine;
3971
+ this._organizeEntities = this._organizeEntities.bind(this);
3972
+ this._parseComponents = this._parseComponents.bind(this);
3973
+ this._clearAndResolveScene = this._clearAndResolveScene.bind(this);
3974
+ this.promise = new Promise(function(resolve, reject) {
3975
+ _this._reject = reject;
3976
+ _this._resolve = resolve;
3977
+ });
3978
+ }
3979
+ var _proto = SceneParser.prototype;
3980
+ /** start parse the scene */ _proto.start = function start() {
3981
+ this._parseEntities().then(this._organizeEntities).then(this._parseComponents).then(this._clearAndResolveScene).then(this._resolve).catch(this._reject);
3982
+ };
3983
+ _proto._parseEntities = function _parseEntities() {
3984
+ var entitiesConfig = this.context.originalData.entities;
3985
+ var entityConfigMap = this.context.entityConfigMap;
3986
+ var entitiesMap = this.context.entityMap;
3987
+ var rootIds = this.context.rootIds;
3988
+ var engine = this._engine;
3989
+ var promises = entitiesConfig.map(function(entityConfig) {
3990
+ entityConfigMap.set(entityConfig.id, entityConfig);
3991
+ // record root entities
3992
+ if (!entityConfig.parent) rootIds.push(entityConfig.id);
3993
+ return ReflectionParser.parseEntity(entityConfig, engine);
3994
+ });
3995
+ return Promise.all(promises).then(function(entities) {
3996
+ for(var i = 0, l = entities.length; i < l; i++){
3997
+ entitiesMap.set(entitiesConfig[i].id, entities[i]);
3998
+ }
3999
+ return entities;
4000
+ });
4001
+ };
4002
+ _proto._organizeEntities = function _organizeEntities() {
4003
+ var _this_context = this.context, entityConfigMap = _this_context.entityConfigMap, entityMap = _this_context.entityMap, scene = _this_context.scene, rootIds = _this_context.rootIds;
4004
+ for(var _iterator = _create_for_of_iterator_helper_loose(rootIds), _step; !(_step = _iterator()).done;){
4005
+ var rootId = _step.value;
4006
+ PrefabParser.parseChildren(entityConfigMap, entityMap, rootId);
4007
+ }
4008
+ var rootEntities = rootIds.map(function(id) {
4009
+ return entityMap.get(id);
4010
+ });
4011
+ for(var i = 0; i < rootEntities.length; i++){
4012
+ scene.addRootEntity(rootEntities[i]);
4013
+ }
4014
+ };
4015
+ _proto._parseComponents = function _parseComponents() {
4016
+ var entitiesConfig = this.context.originalData.entities;
4017
+ var entityMap = this.context.entityMap;
4018
+ var promises = [];
4019
+ for(var i = 0, l = entitiesConfig.length; i < l; i++){
4020
+ var entityConfig = entitiesConfig[i];
4021
+ var entity = entityMap.get(entityConfig.id);
4022
+ for(var i1 = 0; i1 < entityConfig.components.length; i1++){
4023
+ var componentConfig = entityConfig.components[i1];
4024
+ var key = !componentConfig.refId ? componentConfig.class : componentConfig.refId;
4025
+ var component = void 0;
4026
+ // TODO: remove hack code when support additional edit
4027
+ if (key === "Animator") {
4028
+ component = entity.getComponent(engineCore.Loader.getClass(key));
4029
+ }
4030
+ component = component || entity.addComponent(engineCore.Loader.getClass(key));
4031
+ var promise = ReflectionParser.parsePropsAndMethods(component, componentConfig, entity.engine);
4032
+ promises.push(promise);
4033
+ }
4034
+ }
4035
+ return Promise.all(promises);
4036
+ };
4037
+ _proto._clearAndResolveScene = function _clearAndResolveScene() {
4038
+ var scene = this.context.scene;
4039
+ this.context.destroy();
4040
+ return scene;
4041
+ };
4042
+ /**
4043
+ * Parse scene data.
4044
+ * @param engine - the engine of the parser context
4045
+ * @param sceneData - scene data which is exported by editor
4046
+ * @returns a promise of scene
4047
+ */ SceneParser.parse = function parse(engine, sceneData) {
4048
+ var scene = new engineCore.Scene(engine);
4049
+ var context = new SceneParserContext(sceneData, scene);
4050
+ var parser = new SceneParser(context);
4051
+ parser.start();
4052
+ return parser.promise;
4053
+ };
4054
+ return SceneParser;
4055
+ }();
4056
+
4057
+ exports.MeshLoader = /*#__PURE__*/ function(Loader) {
4058
+ _inherits(MeshLoader, Loader);
4059
+ function MeshLoader() {
4060
+ return Loader.apply(this, arguments);
4061
+ }
4062
+ var _proto = MeshLoader.prototype;
4063
+ _proto.load = function load(item, resourceManager) {
4064
+ var _this = this;
4065
+ return new engineCore.AssetPromise(function(resolve, reject) {
4066
+ _this.request(item.url, {
4067
+ type: "arraybuffer"
4068
+ }).then(function(data) {
4069
+ decode(data, resourceManager.engine).then(function(mesh) {
4070
+ resolve(mesh);
4071
+ });
4072
+ });
4073
+ });
4074
+ };
4075
+ return MeshLoader;
4076
+ }(engineCore.Loader);
4077
+ exports.MeshLoader = __decorate([
4078
+ engineCore.resourceLoader("Mesh", [
4079
+ "prefab"
4080
+ ], true)
4081
+ ], exports.MeshLoader);
4082
+
4083
+ exports.EditorTextureLoader = /*#__PURE__*/ function(Loader) {
4084
+ _inherits(EditorTextureLoader, Loader);
4085
+ function EditorTextureLoader() {
4086
+ return Loader.apply(this, arguments);
4087
+ }
4088
+ var _proto = EditorTextureLoader.prototype;
4089
+ _proto.load = function load(item, resourceManager) {
4090
+ var _this = this;
4091
+ return new engineCore.AssetPromise(function(resolve) {
4092
+ _this.request(item.url, {
4093
+ type: "arraybuffer"
4094
+ }).then(function(data) {
4095
+ decode(data, resourceManager.engine).then(function(texture) {
4096
+ resolve(texture);
4097
+ });
4098
+ });
4099
+ });
4100
+ };
4101
+ return EditorTextureLoader;
4102
+ }(engineCore.Loader);
4103
+ exports.EditorTextureLoader = __decorate([
4104
+ engineCore.resourceLoader("EditorTexture2D", [
4105
+ "prefab"
4106
+ ], true)
4107
+ ], exports.EditorTextureLoader);
4108
+
4109
+ /**
4110
+ * Decode engine binary resource.
4111
+ * @param arrayBuffer - array buffer of decode binary file
4112
+ * @param engine - engine
4113
+ * @returns
4114
+ */ function decode(arrayBuffer, engine) {
4115
+ var header = FileHeader.decode(arrayBuffer);
4116
+ var bufferReader = new BufferReader(arrayBuffer, header.headerLength, header.dataLength);
4117
+ return decoderMap[header.type].decode(engine, bufferReader).then(function(object) {
4118
+ object.name = header.name;
4119
+ return object;
4120
+ });
4121
+ }
4122
+
4123
+ var MeshLoader = /*#__PURE__*/ function(Loader) {
4124
+ _inherits(MeshLoader, Loader);
4125
+ function MeshLoader() {
4126
+ return Loader.apply(this, arguments);
4127
+ }
4128
+ var _proto = MeshLoader.prototype;
4129
+ _proto.load = function load(item, resourceManager) {
4130
+ var _this = this;
4131
+ return new engineCore.AssetPromise(function(resolve, reject) {
4132
+ _this.request(item.url, _extends({}, item, {
4133
+ type: "arraybuffer"
4134
+ })).then(function(data) {
4135
+ return decode(data, resourceManager.engine);
4136
+ }).then(function(mesh) {
4137
+ resolve(mesh);
4138
+ }).catch(reject);
4139
+ });
4140
+ };
4141
+ return MeshLoader;
4142
+ }(engineCore.Loader);
4143
+ MeshLoader = __decorate([
4144
+ engineCore.resourceLoader(engineCore.AssetType.Mesh, [
4145
+ "mesh"
4146
+ ])
4147
+ ], MeshLoader);
4148
+
4149
+ var SourceFontLoader = /*#__PURE__*/ function(Loader) {
4150
+ _inherits(SourceFontLoader, Loader);
4151
+ function SourceFontLoader() {
4152
+ return Loader.apply(this, arguments);
4153
+ }
4154
+ var _proto = SourceFontLoader.prototype;
4155
+ _proto.load = function load(item, resourceManager) {
4156
+ var _this = this;
4157
+ return new engineCore.AssetPromise(function(resolve, reject) {
4158
+ var url = item.url;
4159
+ _this._registerFont(url, url).then(function() {
4160
+ var font = new engineCore.Font(resourceManager.engine, url);
4161
+ resolve(font);
4162
+ }).catch(function(e) {
4163
+ reject("load font " + url + " fail");
4164
+ });
4165
+ });
4166
+ };
4167
+ _proto._registerFont = function _registerFont(fontName, fontUrl) {
4168
+ return _async_to_generator(function() {
4169
+ var fontFace;
4170
+ return __generator(this, function(_state) {
4171
+ switch(_state.label){
4172
+ case 0:
4173
+ fontFace = new FontFace(fontName, "url(" + fontUrl + ")");
4174
+ return [
4175
+ 4,
4176
+ fontFace.load()
4177
+ ];
4178
+ case 1:
4179
+ _state.sent();
4180
+ document.fonts.add(fontFace);
4181
+ return [
4182
+ 2
4183
+ ];
4184
+ }
4185
+ });
4186
+ })();
4187
+ };
4188
+ return SourceFontLoader;
4189
+ }(engineCore.Loader);
4190
+ SourceFontLoader = __decorate([
4191
+ engineCore.resourceLoader(engineCore.AssetType.SourceFont, [
4192
+ "ttf",
4193
+ "otf",
4194
+ "woff"
4195
+ ], false)
4196
+ ], SourceFontLoader);
4197
+
4198
+ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader) {
4199
+ _inherits(SpriteAtlasLoader, Loader);
4200
+ function SpriteAtlasLoader() {
4201
+ var _this;
4202
+ _this = Loader.apply(this, arguments) || this;
4203
+ _this._tempRect = new engineMath.Rect();
4204
+ _this._tempVec2 = new engineMath.Vector2();
4205
+ _this._tempVec4 = new engineMath.Vector4();
4206
+ return _this;
4207
+ }
4208
+ var _proto = SpriteAtlasLoader.prototype;
4209
+ _proto.load = function load(item, resourceManager) {
4210
+ var _this = this;
4211
+ return new engineCore.AssetPromise(function(resolve, reject, _, onCancel) {
4212
+ var chainPromises = [];
4213
+ onCancel(function() {
4214
+ for(var i = 0; i < chainPromises.length; i++){
4215
+ chainPromises[i].cancel();
4216
+ }
4217
+ });
4218
+ var configPromise = _this.request(item.url, _extends({}, item, {
4219
+ type: "json"
4220
+ }));
4221
+ chainPromises.push(configPromise);
4222
+ configPromise.then(function(atlasData) {
4223
+ var _loop = function(i) {
4224
+ var atlasItem = atlasItems[i];
4225
+ if (atlasItem.img) {
4226
+ chainPromises.push(resourceManager.load({
4227
+ url: atlasItem.img,
4228
+ type: engineCore.AssetType.Texture2D,
4229
+ params: {
4230
+ format: format,
4231
+ mipmap: mipmap
4232
+ }
4233
+ }).then(function(texture) {
4234
+ anisoLevel && (texture.anisoLevel = anisoLevel);
4235
+ filterMode !== undefined && (texture.filterMode = filterMode);
4236
+ wrapModeU !== undefined && (texture.wrapModeU = wrapModeU);
4237
+ wrapModeV !== undefined && (texture.wrapModeV = wrapModeV);
4238
+ for(var i = 0; i < atlasItem.sprites.length; i++){
4239
+ // @ts-ignore
4240
+ spriteAtlas._addSprite(_this._makeSprite(engine, atlasItem.sprites[i], texture));
4241
+ }
4242
+ }).catch(reject));
4243
+ } else {
4244
+ for(var i1 = 0; i1 < atlasItem.sprites.length; i1++){
4245
+ // @ts-ignore
4246
+ spriteAtlas._addSprite(_this._makeSprite(engine, atlasItem.sprites[i1]));
4247
+ }
4248
+ }
4249
+ };
4250
+ var atlasItems = atlasData.atlasItems, mipmap = atlasData.mipmap, anisoLevel = atlasData.anisoLevel, filterMode = atlasData.filterMode, wrapModeU = atlasData.wrapModeU, wrapModeV = atlasData.wrapModeV, format = atlasData.format;
4251
+ var atlasItemsLen = atlasItems ? atlasItems.length : 0;
4252
+ var engine = resourceManager.engine;
4253
+ var spriteAtlas = new engineCore.SpriteAtlas(engine);
4254
+ if (atlasItemsLen < 0) {
4255
+ resolve(spriteAtlas);
4256
+ return;
4257
+ }
4258
+ chainPromises.length = 0;
4259
+ for(var i = 0; i < atlasItems.length; i++)_loop(i);
4260
+ engineCore.AssetPromise.all(chainPromises).then(function() {
4261
+ resolve(spriteAtlas);
4262
+ }).catch(reject);
4263
+ }).catch(reject);
4264
+ });
4265
+ };
4266
+ _proto._makeSprite = function _makeSprite(engine, config, texture) {
4267
+ // Generate a SpriteAtlas object.
4268
+ var region = config.region, atlasRegionOffset = config.atlasRegionOffset, atlasRegion = config.atlasRegion, pivot = config.pivot, border = config.border;
4269
+ var sprite = new engineCore.Sprite(engine, texture, region ? this._tempRect.set(region.x, region.y, region.w, region.h) : undefined, pivot ? this._tempVec2.set(pivot.x, pivot.y) : undefined, border ? this._tempVec4.set(border.x, border.y, border.z, border.w) : undefined, config.name);
4270
+ if (texture) {
4271
+ var invW = 1 / texture.width;
4272
+ var invH = 1 / texture.height;
4273
+ sprite.atlasRegion.set(atlasRegion.x * invW, atlasRegion.y * invH, atlasRegion.w * invW, atlasRegion.h * invH);
4274
+ if (atlasRegionOffset) {
4275
+ var offsetLeft = atlasRegionOffset.x, offsetTop = atlasRegionOffset.y, offsetRight = atlasRegionOffset.z, offsetBottom = atlasRegionOffset.w;
4276
+ sprite.atlasRegionOffset.set(offsetLeft * invW, offsetTop * invH, offsetRight * invW, offsetBottom * invH);
4277
+ }
4278
+ config.atlasRotated && (sprite.atlasRotated = true);
4279
+ }
4280
+ return sprite;
4281
+ };
4282
+ return SpriteAtlasLoader;
4283
+ }(engineCore.Loader);
4284
+ SpriteAtlasLoader = __decorate([
4285
+ engineCore.resourceLoader(engineCore.AssetType.SpriteAtlas, [
4286
+ "atlas"
4287
+ ], false)
4288
+ ], SpriteAtlasLoader);
4289
+
4290
+ var SpriteLoader = /*#__PURE__*/ function(Loader) {
4291
+ _inherits(SpriteLoader, Loader);
4292
+ function SpriteLoader() {
4293
+ return Loader.apply(this, arguments);
4294
+ }
4295
+ var _proto = SpriteLoader.prototype;
4296
+ _proto.load = function load(item, resourceManager) {
4297
+ var _this = this;
4298
+ return new engineCore.AssetPromise(function(resolve, reject) {
4299
+ _this.request(item.url, _extends({}, item, {
4300
+ type: "json"
4301
+ })).then(function(data) {
4302
+ if (data.belongToAtlas) {
4303
+ resourceManager// @ts-ignore
4304
+ .getResourceByRef(data.belongToAtlas).then(function(atlas) {
4305
+ resolve(atlas.getSprite(data.fullPath));
4306
+ }).catch(reject);
4307
+ } else if (data.texture) {
4308
+ resourceManager// @ts-ignore
4309
+ .getResourceByRef(data.texture).then(function(texture) {
4310
+ resolve(new engineCore.Sprite(resourceManager.engine, texture, data.region, data.pivot, data.border));
4311
+ }).catch(reject);
4312
+ } else {
4313
+ resolve(new engineCore.Sprite(resourceManager.engine, null, data.region, data.pivot, data.border));
4314
+ }
4315
+ }).catch(reject);
4316
+ });
4317
+ };
4318
+ return SpriteLoader;
4319
+ }(engineCore.Loader);
4320
+ SpriteLoader = __decorate([
4321
+ engineCore.resourceLoader(engineCore.AssetType.Sprite, [
4322
+ "sprite"
4323
+ ], false)
4324
+ ], SpriteLoader);
4325
+
4326
+ var Texture2DLoader = /*#__PURE__*/ function(Loader) {
4327
+ _inherits(Texture2DLoader, Loader);
4328
+ function Texture2DLoader() {
4329
+ return Loader.apply(this, arguments);
4330
+ }
4331
+ var _proto = Texture2DLoader.prototype;
4332
+ _proto.load = function load(item, resourceManager) {
4333
+ var _this = this;
4334
+ return new engineCore.AssetPromise(function(resolve, reject) {
4335
+ _this.request(item.url, _extends({}, item, {
4336
+ type: "image"
4337
+ })).then(function(image) {
4338
+ var _item_params;
4339
+ var params = (_item_params = item.params) != null ? _item_params : {};
4340
+ var texture = new engineCore.Texture2D(resourceManager.engine, image.width, image.height, params.format, params.mipmap);
4341
+ /** @ts-ignore */ if (!texture._platformTexture) return;
4342
+ texture.setImageSource(image);
4343
+ texture.generateMipmaps();
4344
+ if (item.url.indexOf("data:") !== 0) {
4345
+ var splitPath = item.url.split("/");
4346
+ texture.name = splitPath[splitPath.length - 1];
4347
+ }
4348
+ resolve(texture);
4349
+ }).catch(function(e) {
4350
+ reject(e);
4351
+ });
4352
+ });
4353
+ };
4354
+ return Texture2DLoader;
4355
+ }(engineCore.Loader);
4356
+ Texture2DLoader = __decorate([
4357
+ engineCore.resourceLoader(engineCore.AssetType.Texture2D, [
4358
+ "png",
4359
+ "jpg",
4360
+ "webp",
4361
+ "jpeg"
4362
+ ])
4363
+ ], Texture2DLoader);
4364
+
4365
+ var TextureCubeLoader = /*#__PURE__*/ function(Loader) {
4366
+ _inherits(TextureCubeLoader, Loader);
4367
+ function TextureCubeLoader() {
4368
+ return Loader.apply(this, arguments);
4369
+ }
4370
+ var _proto = TextureCubeLoader.prototype;
4371
+ _proto.load = function load(item, resourceManager) {
4372
+ var _this = this;
4373
+ return new engineCore.AssetPromise(function(resolve, reject) {
4374
+ Promise.all(item.urls.map(function(url) {
4375
+ return _this.request(url, _extends({}, item, {
4376
+ type: "image"
4377
+ }));
4378
+ })).then(function(images) {
4379
+ var _images_ = images[0], width = _images_.width, height = _images_.height;
4380
+ if (width !== height) {
4381
+ console.error("The cube texture must have the same width and height");
4382
+ return;
4383
+ }
4384
+ var tex = new engineCore.TextureCube(resourceManager.engine, width);
4385
+ /** @ts-ignore */ if (!tex._platformTexture) return;
4386
+ for(var faceIndex = 0; faceIndex < 6; faceIndex++){
4387
+ tex.setImageSource(engineCore.TextureCubeFace.PositiveX + faceIndex, images[faceIndex], 0);
4388
+ }
4389
+ tex.generateMipmaps();
4390
+ resolve(tex);
4391
+ }).catch(function(e) {
4392
+ reject(e);
4393
+ });
4394
+ });
4395
+ };
4396
+ return TextureCubeLoader;
4397
+ }(engineCore.Loader);
4398
+ TextureCubeLoader = __decorate([
4399
+ engineCore.resourceLoader(engineCore.AssetType.TextureCube, [
4400
+ ""
4401
+ ])
4402
+ ], TextureCubeLoader);
4403
+
4404
+ var SceneLoader = /*#__PURE__*/ function(Loader) {
4405
+ _inherits(SceneLoader, Loader);
4406
+ function SceneLoader() {
4407
+ return Loader.apply(this, arguments);
4408
+ }
4409
+ var _proto = SceneLoader.prototype;
4410
+ _proto.load = function load(item, resourceManager) {
4411
+ var _this = this;
4412
+ var engine = resourceManager.engine;
4413
+ return new engineCore.AssetPromise(function(resolve, reject) {
4414
+ _this.request(item.url, {
4415
+ type: "json"
4416
+ }).then(function(data) {
4417
+ // @ts-ignore
4418
+ engine.resourceManager.initVirtualResources(data.files);
4419
+ return SceneParser.parse(engine, data).then(function(scene) {
4420
+ // parse ambient light
4421
+ var ambient = data.scene.ambient;
4422
+ var ambientLightPromise = Promise.resolve();
4423
+ if (ambient.ambientLight) {
4424
+ ambientLightPromise = resourceManager// @ts-ignore
4425
+ .getResourceByRef(data.scene.ambient.ambientLight).then(function(light) {
4426
+ scene.ambientLight = light;
4427
+ scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
4428
+ scene.ambientLight.specularIntensity = ambient.specularIntensity;
4429
+ });
4430
+ } else {
4431
+ scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
4432
+ scene.ambientLight.specularIntensity = ambient.specularIntensity;
4433
+ scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
4434
+ }
4435
+ var background = data.scene.background;
4436
+ scene.background.mode = background.mode;
4437
+ var backgroundPromise = Promise.resolve();
4438
+ switch(scene.background.mode){
4439
+ case engineCore.BackgroundMode.SolidColor:
4440
+ scene.background.solidColor.copyFrom(background.color);
4441
+ break;
4442
+ case engineCore.BackgroundMode.Sky:
4443
+ if (background.sky) {
4444
+ // @ts-ignore
4445
+ backgroundPromise = resourceManager.getResourceByRef(background.sky).then(function(light) {
4446
+ var sky = scene.background.sky;
4447
+ var skyMaterial = new engineCore.SkyBoxMaterial(engine);
4448
+ skyMaterial.textureCubeMap = light.specularTexture;
4449
+ skyMaterial.textureDecodeRGBM = true;
4450
+ sky.material = skyMaterial;
4451
+ sky.mesh = engineCore.PrimitiveMesh.createCuboid(engine, 1, 1, 1);
4452
+ });
4453
+ }
4454
+ break;
4455
+ case engineCore.BackgroundMode.Texture:
4456
+ if (background.texture) {
4457
+ // @ts-ignore
4458
+ backgroundPromise = resourceManager.getResourceByRef(background.texture).then(function(texture) {
4459
+ scene.background.texture = texture;
4460
+ });
4461
+ }
4462
+ break;
4463
+ }
4464
+ // parse shadow
4465
+ var shadow = data.scene.shadow;
4466
+ if (shadow) {
4467
+ if (shadow.castShadows != undefined) scene.castShadows = shadow.castShadows;
4468
+ if (shadow.shadowResolution != undefined) scene.shadowResolution = shadow.shadowResolution;
4469
+ if (shadow.shadowDistance != undefined) scene.shadowDistance = shadow.shadowDistance;
4470
+ if (shadow.shadowCascades != undefined) scene.shadowCascades = shadow.shadowCascades;
4471
+ }
4472
+ return Promise.all([
4473
+ ambientLightPromise,
4474
+ backgroundPromise
4475
+ ]).then(function() {
4476
+ resolve(scene);
4477
+ });
4478
+ });
4479
+ }).catch(reject);
4480
+ });
4481
+ };
4482
+ return SceneLoader;
4483
+ }(engineCore.Loader);
4484
+ SceneLoader = __decorate([
4485
+ engineCore.resourceLoader(engineCore.AssetType.Scene, [
4486
+ "prefab"
4487
+ ], true)
4488
+ ], SceneLoader);
4489
+ ReflectionParser.registerCustomParseComponent("TextRenderer", /*#__PURE__*/ _async_to_generator(function(instance, item, engine) {
4490
+ var props;
4491
+ return __generator(this, function(_state) {
4492
+ props = item.props;
4493
+ if (!props.font) {
4494
+ // @ts-ignore
4495
+ instance.font = engineCore.Font.createFromOS(engine, props.fontFamily || "Arial");
4496
+ }
4497
+ return [
4498
+ 2,
4499
+ instance
4500
+ ];
4501
+ });
4502
+ }));
4503
+
4504
+ exports.ComponentMap = ComponentMap;
4505
+ exports.GLTFResource = GLTFResource;
4506
+ exports.PrefabParser = PrefabParser;
4507
+ exports.ReflectionParser = ReflectionParser;
4508
+ exports.SceneParser = SceneParser;
4509
+ exports.decode = decode;
4510
+ exports.parseSingleKTX = parseSingleKTX;
4511
+ //# sourceMappingURL=main.js.map