@galacean/engine-loader 1.1.0-beta.9 → 1.1.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 (28) hide show
  1. package/dist/main.js +314 -222
  2. package/dist/main.js.map +1 -1
  3. package/dist/miniprogram.js +314 -222
  4. package/dist/module.js +315 -223
  5. package/dist/module.js.map +1 -1
  6. package/package.json +5 -5
  7. package/types/GLTFLoader.d.ts +1 -0
  8. package/types/PrimitiveMeshLoader.d.ts +1 -0
  9. package/types/Texture2DLoader.d.ts +9 -1
  10. package/types/gltf/GLTFUtils.d.ts +4 -3
  11. package/types/gltf/extensions/EXT_meshopt_compression.d.ts +13 -0
  12. package/types/gltf/extensions/KHR_materials_anisotropy.d.ts +1 -0
  13. package/types/gltf/extensions/MeshoptDecoder.d.ts +8 -0
  14. package/types/gltf/parser/GLTFBufferViewParser.d.ts +5 -0
  15. package/types/gltf/parser/GLTFParserContext.d.ts +4 -2
  16. package/types/gltf/parser/GLTFSceneParser.d.ts +0 -1
  17. package/types/gltf/parser/GLTFSchemaParser.d.ts +0 -1
  18. package/types/index.d.ts +1 -1
  19. package/types/ktx2/KTX2Loader.d.ts +16 -5
  20. package/types/resource-deserialize/resources/parser/HierarchyParser.d.ts +36 -0
  21. package/types/resource-deserialize/resources/parser/ParserContext.d.ts +29 -0
  22. package/types/resource-deserialize/resources/parser/ReflectionParser.d.ts +1 -1
  23. package/types/resource-deserialize/resources/prefab/PrefabParser.d.ts +13 -4
  24. package/types/resource-deserialize/resources/prefab/PrefabParserContext.d.ts +5 -0
  25. package/types/resource-deserialize/resources/schema/BasicSchema.d.ts +2 -0
  26. package/types/resource-deserialize/resources/schema/MaterialSchema.d.ts +1 -1
  27. package/types/resource-deserialize/resources/schema/SceneSchema.d.ts +3 -1
  28. package/types/resource-deserialize/utils/BufferReader.d.ts +1 -1
package/dist/module.js CHANGED
@@ -116,116 +116,116 @@ var BufferReader = /*#__PURE__*/ function() {
116
116
  this.data = data;
117
117
  this._dataView = new DataView(data.buffer, data.byteOffset + byteOffset, byteLength != null ? byteLength : data.byteLength - byteOffset);
118
118
  this._littleEndian = littleEndian;
119
- this._offset = 0;
119
+ this._position = 0;
120
120
  this._baseOffset = byteOffset;
121
121
  }
122
122
  var _proto = BufferReader.prototype;
123
123
  _proto.nextUint8 = function nextUint8() {
124
- var value = this._dataView.getUint8(this._offset);
125
- this._offset += 1;
124
+ var value = this._dataView.getUint8(this._position);
125
+ this._position += 1;
126
126
  return value;
127
127
  };
128
128
  _proto.nextUint16 = function nextUint16() {
129
- var value = this._dataView.getUint16(this._offset, this._littleEndian);
130
- this._offset += 2;
129
+ var value = this._dataView.getUint16(this._position, this._littleEndian);
130
+ this._position += 2;
131
131
  return value;
132
132
  };
133
133
  _proto.nextUint32 = function nextUint32() {
134
- var value = this._dataView.getUint32(this._offset, this._littleEndian);
135
- this._offset += 4;
134
+ var value = this._dataView.getUint32(this._position, this._littleEndian);
135
+ this._position += 4;
136
136
  return value;
137
137
  };
138
138
  _proto.nextInt32 = function nextInt32() {
139
- var value = this._dataView.getInt32(this._offset, this._littleEndian);
140
- this._offset += 4;
139
+ var value = this._dataView.getInt32(this._position, this._littleEndian);
140
+ this._position += 4;
141
141
  return value;
142
142
  };
143
143
  _proto.nextInt32Array = function nextInt32Array(len) {
144
- var value = new Int32Array(this.data.buffer, this._offset + this._dataView.byteOffset, len);
145
- this._offset += 4 * len;
144
+ var value = new Int32Array(this.data.buffer, this._position + this._dataView.byteOffset, len);
145
+ this._position += 4 * len;
146
146
  return value;
147
147
  };
148
148
  _proto.nextFloat32 = function nextFloat32() {
149
- var value = this._dataView.getFloat32(this._offset, this._littleEndian);
150
- this._offset += 4;
149
+ var value = this._dataView.getFloat32(this._position, this._littleEndian);
150
+ this._position += 4;
151
151
  return value;
152
152
  };
153
153
  _proto.nextFloat32Array = function nextFloat32Array(len) {
154
- var value = new Float32Array(this.data.buffer, this._offset + this._dataView.byteOffset, len);
155
- this._offset += 4 * len;
154
+ var value = new Float32Array(this.data.buffer, this._position + this._dataView.byteOffset, len);
155
+ this._position += 4 * len;
156
156
  return value;
157
157
  };
158
158
  _proto.nextUint32Array = function nextUint32Array(len) {
159
- var value = new Uint32Array(this.data.buffer, this._offset + this._dataView.byteOffset, len);
160
- this._offset += 4 * len;
159
+ var value = new Uint32Array(this.data.buffer, this._position + this._dataView.byteOffset, len);
160
+ this._position += 4 * len;
161
161
  return value;
162
162
  };
163
163
  _proto.nextUint8Array = function nextUint8Array(len) {
164
- var value = new Uint8Array(this.data.buffer, this._offset + this._dataView.byteOffset, len);
165
- this._offset += len;
164
+ var value = new Uint8Array(this.data.buffer, this._position + this._dataView.byteOffset, len);
165
+ this._position += len;
166
166
  return value;
167
167
  };
168
168
  _proto.nextUint64 = function nextUint64() {
169
- var left = this._dataView.getUint32(this._offset, this._littleEndian);
170
- var right = this._dataView.getUint32(this._offset + 4, this._littleEndian);
169
+ var left = this._dataView.getUint32(this._position, this._littleEndian);
170
+ var right = this._dataView.getUint32(this._position + 4, this._littleEndian);
171
171
  var value = left + Math.pow(2, 32) * right;
172
- this._offset += 8;
172
+ this._position += 8;
173
173
  return value;
174
174
  };
175
175
  _proto.nextStr = function nextStr() {
176
176
  var strByteLength = this.nextUint16();
177
- var uint8Array = new Uint8Array(this.data.buffer, this._offset + this._dataView.byteOffset, strByteLength);
178
- this._offset += strByteLength;
177
+ var uint8Array = new Uint8Array(this.data.buffer, this._position + this._dataView.byteOffset, strByteLength);
178
+ this._position += strByteLength;
179
179
  return Utils.decodeText(uint8Array);
180
180
  };
181
181
  /**
182
182
  * image data 放在最后
183
183
  */ _proto.nextImageData = function nextImageData(count) {
184
- return new Uint8Array(this.data.buffer, this.data.byteOffset + this._offset);
184
+ return new Uint8Array(this.data.buffer, this.data.byteOffset + this._position);
185
185
  };
186
186
  _proto.nextImagesData = function nextImagesData(count) {
187
187
  var imagesLen = new Array(count);
188
188
  // 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
189
189
  for(var i = 0; i < count; i++){
190
- var len = this._dataView.getUint32(this._offset, this._littleEndian);
190
+ var len = this._dataView.getUint32(this._position, this._littleEndian);
191
191
  imagesLen[i] = len;
192
- this._offset += 4;
192
+ this._position += 4;
193
193
  }
194
194
  var imagesData = [];
195
195
  for(var i1 = 0; i1 < count; i1++){
196
196
  var len1 = imagesLen[i1];
197
- var buffer = new Uint8Array(this.data.buffer, this._dataView.byteOffset + this._offset, len1);
198
- this._offset += len1;
197
+ var buffer = new Uint8Array(this.data.buffer, this._dataView.byteOffset + this._position, len1);
198
+ this._position += len1;
199
199
  imagesData.push(buffer);
200
200
  }
201
201
  return imagesData;
202
202
  };
203
203
  _proto.skip = function skip(bytes) {
204
- this._offset += bytes;
204
+ this._position += bytes;
205
205
  return this;
206
206
  };
207
207
  _proto.scan = function scan(maxByteLength, term) {
208
208
  if (term === void 0) term = 0x00;
209
- var byteOffset = this._offset;
209
+ var byteOffset = this._position;
210
210
  var byteLength = 0;
211
- while(this._dataView.getUint8(this._offset) !== term && byteLength < maxByteLength){
211
+ while(this._dataView.getUint8(this._position) !== term && byteLength < maxByteLength){
212
212
  byteLength++;
213
- this._offset++;
213
+ this._position++;
214
214
  }
215
- if (byteLength < maxByteLength) this._offset++;
215
+ if (byteLength < maxByteLength) this._position++;
216
216
  return new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + byteOffset, byteLength);
217
217
  };
218
218
  _create_class(BufferReader, [
219
219
  {
220
220
  key: "position",
221
221
  get: function get() {
222
- return this._offset;
222
+ return this._position;
223
223
  }
224
224
  },
225
225
  {
226
226
  key: "offset",
227
227
  get: function get() {
228
- return this._offset + this._baseOffset;
228
+ return this._position + this._baseOffset;
229
229
  }
230
230
  }
231
231
  ]);
@@ -289,75 +289,74 @@ var MeshDecoder = /*#__PURE__*/ function() {
289
289
  var encodedMeshData = JSON.parse(jsonDataString);
290
290
  // @ts-ignore Vector3 is not compatible with {x: number, y: number, z: number}.
291
291
  encodedMeshData.bounds && modelMesh.bounds.copyFrom(encodedMeshData.bounds);
292
- var offset = Math.ceil(bufferReader.offset / 4) * 4;
292
+ var offset = Math.ceil(bufferReader.offset / 4) * 4 + bufferReader.data.byteOffset;
293
293
  var buffer = bufferReader.data.buffer;
294
- var byteOffset = bufferReader.data.byteOffset;
295
- var float32Array = new Float32Array(buffer, encodedMeshData.positions.start + offset + byteOffset, (encodedMeshData.positions.end - encodedMeshData.positions.start) / 4);
294
+ var float32Array = new Float32Array(buffer, encodedMeshData.positions.start + offset, (encodedMeshData.positions.end - encodedMeshData.positions.start) / 4);
296
295
  var vertexCount = float32Array.length / 3;
297
296
  var positions = float32ArrayToVector3(float32Array, vertexCount);
298
297
  modelMesh.setPositions(positions);
299
298
  if (encodedMeshData.normals) {
300
- var float32Array1 = new Float32Array(buffer, encodedMeshData.normals.start + offset + byteOffset, (encodedMeshData.normals.end - encodedMeshData.normals.start) / 4);
299
+ var float32Array1 = new Float32Array(buffer, encodedMeshData.normals.start + offset, (encodedMeshData.normals.end - encodedMeshData.normals.start) / 4);
301
300
  var normals = float32ArrayToVector3(float32Array1, vertexCount);
302
301
  modelMesh.setNormals(normals);
303
302
  }
304
303
  if (encodedMeshData.uvs) {
305
- var float32Array2 = new Float32Array(buffer, encodedMeshData.uvs.start + offset + byteOffset, (encodedMeshData.uvs.end - encodedMeshData.uvs.start) / 4);
304
+ var float32Array2 = new Float32Array(buffer, encodedMeshData.uvs.start + offset, (encodedMeshData.uvs.end - encodedMeshData.uvs.start) / 4);
306
305
  modelMesh.setUVs(float32ArrayToVector2(float32Array2, vertexCount));
307
306
  }
308
307
  if (encodedMeshData.uv1) {
309
- var float32Array3 = new Float32Array(buffer, encodedMeshData.uv1.start + offset + byteOffset, (encodedMeshData.uv1.end - encodedMeshData.uv1.start) / 4);
308
+ var float32Array3 = new Float32Array(buffer, encodedMeshData.uv1.start + offset, (encodedMeshData.uv1.end - encodedMeshData.uv1.start) / 4);
310
309
  modelMesh.setUVs(float32ArrayToVector2(float32Array3, vertexCount), 1);
311
310
  }
312
311
  if (encodedMeshData.uv2) {
313
- var float32Array4 = new Float32Array(buffer, encodedMeshData.uv2.start + offset + byteOffset, (encodedMeshData.uv2.end - encodedMeshData.uv2.start) / 4);
312
+ var float32Array4 = new Float32Array(buffer, encodedMeshData.uv2.start + offset, (encodedMeshData.uv2.end - encodedMeshData.uv2.start) / 4);
314
313
  modelMesh.setUVs(float32ArrayToVector2(float32Array4, vertexCount), 2);
315
314
  }
316
315
  if (encodedMeshData.uv3) {
317
- var float32Array5 = new Float32Array(buffer, encodedMeshData.uv3.start + offset + byteOffset, (encodedMeshData.uv3.end - encodedMeshData.uv3.start) / 4);
316
+ var float32Array5 = new Float32Array(buffer, encodedMeshData.uv3.start + offset, (encodedMeshData.uv3.end - encodedMeshData.uv3.start) / 4);
318
317
  modelMesh.setUVs(float32ArrayToVector2(float32Array5, vertexCount), 3);
319
318
  }
320
319
  if (encodedMeshData.uv4) {
321
- var float32Array6 = new Float32Array(buffer, encodedMeshData.uv4.start + offset + byteOffset, (encodedMeshData.uv4.end - encodedMeshData.uv4.start) / 4);
320
+ var float32Array6 = new Float32Array(buffer, encodedMeshData.uv4.start + offset, (encodedMeshData.uv4.end - encodedMeshData.uv4.start) / 4);
322
321
  modelMesh.setUVs(float32ArrayToVector2(float32Array6, vertexCount), 4);
323
322
  }
324
323
  if (encodedMeshData.uv5) {
325
- var float32Array7 = new Float32Array(buffer, encodedMeshData.uv5.start + offset + byteOffset, (encodedMeshData.uv5.end - encodedMeshData.uv5.start) / 4);
324
+ var float32Array7 = new Float32Array(buffer, encodedMeshData.uv5.start + offset, (encodedMeshData.uv5.end - encodedMeshData.uv5.start) / 4);
326
325
  modelMesh.setUVs(float32ArrayToVector2(float32Array7, vertexCount), 5);
327
326
  }
328
327
  if (encodedMeshData.uv6) {
329
- var float32Array8 = new Float32Array(buffer, encodedMeshData.uv6.start + offset + byteOffset, (encodedMeshData.uv6.end - encodedMeshData.uv6.start) / 4);
328
+ var float32Array8 = new Float32Array(buffer, encodedMeshData.uv6.start + offset, (encodedMeshData.uv6.end - encodedMeshData.uv6.start) / 4);
330
329
  modelMesh.setUVs(float32ArrayToVector2(float32Array8, vertexCount), 6);
331
330
  }
332
331
  if (encodedMeshData.uv7) {
333
- var float32Array9 = new Float32Array(buffer, encodedMeshData.uv7.start + offset + byteOffset, (encodedMeshData.uv7.end - encodedMeshData.uv7.start) / 4);
332
+ var float32Array9 = new Float32Array(buffer, encodedMeshData.uv7.start + offset, (encodedMeshData.uv7.end - encodedMeshData.uv7.start) / 4);
334
333
  modelMesh.setUVs(float32ArrayToVector2(float32Array9, vertexCount), 7);
335
334
  }
336
335
  if (encodedMeshData.colors) {
337
- var float32Array10 = new Float32Array(buffer, encodedMeshData.colors.start + offset + byteOffset, (encodedMeshData.colors.end - encodedMeshData.colors.start) / 4);
336
+ var float32Array10 = new Float32Array(buffer, encodedMeshData.colors.start + offset, (encodedMeshData.colors.end - encodedMeshData.colors.start) / 4);
338
337
  modelMesh.setColors(float32ArrayToVColor(float32Array10, vertexCount));
339
338
  }
340
339
  if (encodedMeshData.boneWeights) {
341
- var float32Array11 = new Float32Array(buffer, encodedMeshData.boneWeights.start + offset + byteOffset, (encodedMeshData.boneWeights.end - encodedMeshData.boneWeights.start) / 4);
340
+ var float32Array11 = new Float32Array(buffer, encodedMeshData.boneWeights.start + offset, (encodedMeshData.boneWeights.end - encodedMeshData.boneWeights.start) / 4);
342
341
  modelMesh.setBoneWeights(float32ArrayToVector4(float32Array11, vertexCount));
343
342
  }
344
343
  if (encodedMeshData.boneIndices) {
345
- var float32Array12 = new Float32Array(buffer, encodedMeshData.boneIndices.start + offset + byteOffset, (encodedMeshData.boneIndices.end - encodedMeshData.boneIndices.start) / 4);
344
+ var float32Array12 = new Float32Array(buffer, encodedMeshData.boneIndices.start + offset, (encodedMeshData.boneIndices.end - encodedMeshData.boneIndices.start) / 4);
346
345
  modelMesh.setBoneIndices(float32ArrayToVector4(float32Array12, vertexCount));
347
346
  }
348
347
  if (encodedMeshData.blendShapes) {
349
348
  encodedMeshData.blendShapes.forEach(function(blendShapeData) {
350
349
  var blendShape = new BlendShape(blendShapeData.name);
351
350
  blendShapeData.frames.forEach(function(frameData) {
352
- var positionArray = new Float32Array(buffer, frameData.deltaPosition.start + offset + byteOffset, (frameData.deltaPosition.end - frameData.deltaPosition.start) / 4);
351
+ var positionArray = new Float32Array(buffer, frameData.deltaPosition.start + offset, (frameData.deltaPosition.end - frameData.deltaPosition.start) / 4);
353
352
  var count = positionArray.length / 3;
354
353
  var deltaPosition = float32ArrayToVector3(positionArray, count);
355
354
  if (frameData.deltaNormals) {
356
- var normalsArray = new Float32Array(buffer, frameData.deltaNormals.start + offset + byteOffset, (frameData.deltaNormals.end - frameData.deltaNormals.start) / 4);
355
+ var normalsArray = new Float32Array(buffer, frameData.deltaNormals.start + offset, (frameData.deltaNormals.end - frameData.deltaNormals.start) / 4);
357
356
  float32ArrayToVector3(normalsArray, count);
358
357
  }
359
358
  if (frameData.deltaTangents) {
360
- var tangentsArray = new Float32Array(buffer, frameData.deltaTangents.start + offset + byteOffset, (frameData.deltaTangents.end - frameData.deltaTangents.start) / 4);
359
+ var tangentsArray = new Float32Array(buffer, frameData.deltaTangents.start + offset, (frameData.deltaTangents.end - frameData.deltaTangents.start) / 4);
361
360
  float32ArrayToVector4(tangentsArray, count);
362
361
  }
363
362
  blendShape.addFrame(frameData.weight, deltaPosition);
@@ -368,9 +367,9 @@ var MeshDecoder = /*#__PURE__*/ function() {
368
367
  if (encodedMeshData.indices) {
369
368
  var indices = null;
370
369
  if (encodedMeshData.indices.type === 0) {
371
- indices = new Uint16Array(buffer, encodedMeshData.indices.start + offset + byteOffset, (encodedMeshData.indices.end - encodedMeshData.indices.start) / 2);
370
+ indices = new Uint16Array(buffer, encodedMeshData.indices.start + offset, (encodedMeshData.indices.end - encodedMeshData.indices.start) / 2);
372
371
  } else {
373
- indices = new Uint32Array(buffer, encodedMeshData.indices.start + offset + byteOffset, (encodedMeshData.indices.end - encodedMeshData.indices.start) / 4);
372
+ indices = new Uint32Array(buffer, encodedMeshData.indices.start + offset, (encodedMeshData.indices.end - encodedMeshData.indices.start) / 4);
374
373
  }
375
374
  modelMesh.setIndices(indices);
376
375
  }
@@ -535,15 +534,23 @@ var ReflectionParser = /*#__PURE__*/ function() {
535
534
  if (position) entity.transform.position.copyFrom(position);
536
535
  if (rotation) entity.transform.rotation.copyFrom(rotation);
537
536
  if (scale) entity.transform.scale.copyFrom(scale);
537
+ var _entityConfig_layer;
538
+ entity.layer = (_entityConfig_layer = entityConfig.layer) != null ? _entityConfig_layer : entity.layer;
538
539
  return entity;
539
540
  });
540
541
  };
541
542
  _proto.parseClassObject = function parseClassObject(item) {
543
+ var _this = this;
542
544
  var Class = Loader.getClass(item.class);
543
545
  var _item_constructParams;
544
546
  var params = (_item_constructParams = item.constructParams) != null ? _item_constructParams : [];
545
- var instance = _construct(Class, [].concat(params));
546
- return this.parsePropsAndMethods(instance, item);
547
+ return Promise.all(params.map(function(param) {
548
+ return _this.parseBasicType(param);
549
+ })).then(function(resultParams) {
550
+ return _construct(Class, [].concat(resultParams));
551
+ }).then(function(instance) {
552
+ return _this.parsePropsAndMethods(instance, item);
553
+ });
547
554
  };
548
555
  _proto.parsePropsAndMethods = function parsePropsAndMethods(instance, item) {
549
556
  var promises = [];
@@ -551,16 +558,14 @@ var ReflectionParser = /*#__PURE__*/ function() {
551
558
  for(var methodName in item.methods){
552
559
  var methodParams = item.methods[methodName];
553
560
  for(var i = 0, count = methodParams.length; i < count; i++){
554
- var params = methodParams[i];
555
- var promise = this.parseMethod(instance, methodName, params);
556
- promises.push(promise);
561
+ promises.push(this.parseMethod(instance, methodName, methodParams[i]));
557
562
  }
558
563
  }
559
564
  }
560
565
  if (item.props) {
561
566
  var _this = this, _loop = function(key) {
562
567
  var value = item.props[key];
563
- var promise = _this.parseBasicType(value).then(function(v) {
568
+ var promise = _this.parseBasicType(value, instance[key]).then(function(v) {
564
569
  return instance[key] = v;
565
570
  });
566
571
  promises.push(promise);
@@ -582,7 +587,7 @@ var ReflectionParser = /*#__PURE__*/ function() {
582
587
  return (_instance = instance)[methodName].apply(_instance, [].concat(result));
583
588
  });
584
589
  };
585
- _proto.parseBasicType = function parseBasicType(value) {
590
+ _proto.parseBasicType = function parseBasicType(value, originValue) {
586
591
  var _this = this;
587
592
  if (Array.isArray(value)) {
588
593
  return Promise.all(value.map(function(item) {
@@ -599,13 +604,33 @@ var ReflectionParser = /*#__PURE__*/ function() {
599
604
  } else if (ReflectionParser._isEntityRef(value)) {
600
605
  // entity reference
601
606
  return Promise.resolve(this._context.entityMap.get(value.entityId));
602
- } else {
603
- // basic type
604
- return Promise.resolve(value);
607
+ } else if (originValue) {
608
+ var _this1 = this, _loop = function(key) {
609
+ if (key === "methods") {
610
+ var methods = value[key];
611
+ for(var methodName in methods){
612
+ var methodParams = methods[methodName];
613
+ for(var i = 0, count = methodParams.length; i < count; i++){
614
+ var params = methodParams[i];
615
+ var promise = _this1.parseMethod(originValue, methodName, params);
616
+ promises.push(promise);
617
+ }
618
+ }
619
+ } else {
620
+ promises.push(_this1.parseBasicType(value[key], originValue[key]).then(function(v) {
621
+ return originValue[key] = v;
622
+ }));
623
+ }
624
+ };
625
+ var promises = [];
626
+ for(var key in value)_loop(key);
627
+ return Promise.all(promises).then(function() {
628
+ return originValue;
629
+ });
605
630
  }
606
- } else {
607
- return Promise.resolve(value);
608
631
  }
632
+ // primitive type
633
+ return Promise.resolve(value);
609
634
  };
610
635
  _proto._getEntityByConfig = function _getEntityByConfig(entityConfig) {
611
636
  // @ts-ignore
@@ -1542,10 +1567,10 @@ var TextureWrapMode;
1542
1567
  /**
1543
1568
  * @internal
1544
1569
  */ var GLTFParserContext = /*#__PURE__*/ function() {
1545
- function GLTFParserContext(glTFResource, resourceManager, keepMeshData) {
1570
+ function GLTFParserContext(glTFResource, resourceManager, params) {
1546
1571
  this.glTFResource = glTFResource;
1547
1572
  this.resourceManager = resourceManager;
1548
- this.keepMeshData = keepMeshData;
1573
+ this.params = params;
1549
1574
  this.accessorBufferCache = {};
1550
1575
  this._resourceCache = new Map();
1551
1576
  this.contentRestorer = new GLTFContentRestorer(glTFResource);
@@ -1599,11 +1624,37 @@ var TextureWrapMode;
1599
1624
  _this.get(9),
1600
1625
  _this.get(2)
1601
1626
  ]).then(function() {
1627
+ var glTFResource = _this.glTFResource;
1628
+ if (glTFResource.skins || glTFResource.animations) {
1629
+ _this._createAnimator(_this, glTFResource.animations);
1630
+ }
1602
1631
  _this.resourceManager.addContentRestorer(_this.contentRestorer);
1603
- return _this.glTFResource;
1632
+ return glTFResource;
1604
1633
  });
1605
1634
  });
1606
1635
  };
1636
+ _proto._createAnimator = function _createAnimator(context, animations) {
1637
+ var defaultSceneRoot = context.glTFResource.defaultSceneRoot;
1638
+ var animator = defaultSceneRoot.addComponent(Animator);
1639
+ var animatorController = new AnimatorController();
1640
+ var layer = new AnimatorControllerLayer("layer");
1641
+ var animatorStateMachine = new AnimatorStateMachine();
1642
+ animatorController.addLayer(layer);
1643
+ animator.animatorController = animatorController;
1644
+ layer.stateMachine = animatorStateMachine;
1645
+ if (animations) {
1646
+ for(var i = 0; i < animations.length; i++){
1647
+ var animationClip = animations[i];
1648
+ var name = animationClip.name;
1649
+ var uniqueName = animatorStateMachine.makeUniqueStateName(name);
1650
+ if (uniqueName !== name) {
1651
+ console.warn("AnimatorState name is existed, name: " + name + " reset to " + uniqueName);
1652
+ }
1653
+ var animatorState = animatorStateMachine.addState(uniqueName);
1654
+ animatorState.clip = animationClip;
1655
+ }
1656
+ }
1657
+ };
1607
1658
  _proto._handleSubAsset = function _handleSubAsset(resource, type, index) {
1608
1659
  var _this = this;
1609
1660
  var glTFResourceKey = glTFResourceMap[type];
@@ -1771,7 +1822,9 @@ function registerGLTFParser(pipeline) {
1771
1822
  };
1772
1823
  GLTFUtils.getAccessorBuffer = function getAccessorBuffer(context, bufferViews, accessor) {
1773
1824
  var componentType = accessor.componentType;
1774
- var bufferView = bufferViews[accessor.bufferView];
1825
+ var _accessor_bufferView;
1826
+ var bufferViewIndex = (_accessor_bufferView = accessor.bufferView) != null ? _accessor_bufferView : 0;
1827
+ var bufferView = bufferViews[bufferViewIndex];
1775
1828
  return context.get(GLTFParserType.Buffer).then(function(buffers) {
1776
1829
  var bufferIndex = bufferView.buffer;
1777
1830
  var buffer = buffers[bufferIndex];
@@ -1789,7 +1842,7 @@ function registerGLTFParser(pipeline) {
1789
1842
  // According to the glTF official documentation only byteStride not undefined is allowed
1790
1843
  if (bufferStride !== undefined && bufferStride !== elementStride) {
1791
1844
  var bufferSlice = Math.floor(byteOffset / bufferStride);
1792
- var bufferCacheKey = accessor.bufferView + ":" + componentType + ":" + bufferSlice + ":" + accessorCount;
1845
+ var bufferCacheKey = bufferViewIndex + ":" + componentType + ":" + bufferSlice + ":" + accessorCount;
1793
1846
  var accessorBufferCache = context.accessorBufferCache;
1794
1847
  bufferInfo = accessorBufferCache[bufferCacheKey];
1795
1848
  if (!bufferInfo) {
@@ -1828,7 +1881,8 @@ function registerGLTFParser(pipeline) {
1828
1881
  * Get accessor data.
1829
1882
  */ GLTFUtils.getAccessorData = function getAccessorData(glTF, accessor, buffers) {
1830
1883
  var bufferViews = glTF.bufferViews;
1831
- var bufferView = bufferViews[accessor.bufferView];
1884
+ var _accessor_bufferView;
1885
+ var bufferView = bufferViews[(_accessor_bufferView = accessor.bufferView) != null ? _accessor_bufferView : 0];
1832
1886
  var arrayBuffer = buffers[bufferView.buffer];
1833
1887
  var accessorByteOffset = accessor.hasOwnProperty("byteOffset") ? accessor.byteOffset : 0;
1834
1888
  var bufferViewByteOffset = bufferView.hasOwnProperty("byteOffset") ? bufferView.byteOffset : 0;
@@ -2005,7 +2059,7 @@ function registerGLTFParser(pipeline) {
2005
2059
  };
2006
2060
  /**
2007
2061
  * Parse the glb format.
2008
- */ GLTFUtils.parseGLB = function parseGLB(context, glb) {
2062
+ */ GLTFUtils.parseGLB = function parseGLB(context, originBuffer) {
2009
2063
  var UINT32_LENGTH = 4;
2010
2064
  var GLB_HEADER_MAGIC = 0x46546c67; // 'glTF'
2011
2065
  var GLB_HEADER_LENGTH = 12;
@@ -2013,7 +2067,7 @@ function registerGLTFParser(pipeline) {
2013
2067
  JSON: 0x4e4f534a,
2014
2068
  BIN: 0x004e4942
2015
2069
  };
2016
- var dataView = new DataView(glb);
2070
+ var dataView = new DataView(originBuffer);
2017
2071
  // read header
2018
2072
  var header = {
2019
2073
  magic: dataView.getUint32(0, true),
@@ -2021,8 +2075,9 @@ function registerGLTFParser(pipeline) {
2021
2075
  length: dataView.getUint32(2 * UINT32_LENGTH, true)
2022
2076
  };
2023
2077
  if (header.magic !== GLB_HEADER_MAGIC) {
2024
- console.error("Invalid glb magic number. Expected 0x46546C67, found 0x" + header.magic.toString(16));
2025
- return null;
2078
+ return {
2079
+ originBuffer: originBuffer
2080
+ };
2026
2081
  }
2027
2082
  // read main data
2028
2083
  var chunkLength = dataView.getUint32(GLB_HEADER_LENGTH, true);
@@ -2032,7 +2087,7 @@ function registerGLTFParser(pipeline) {
2032
2087
  console.error("Invalid glb chunk type. Expected 0x4E4F534A, found 0x" + chunkType.toString(16));
2033
2088
  return null;
2034
2089
  }
2035
- var glTFData = new Uint8Array(glb, GLB_HEADER_LENGTH + 2 * UINT32_LENGTH, chunkLength);
2090
+ var glTFData = new Uint8Array(originBuffer, GLB_HEADER_LENGTH + 2 * UINT32_LENGTH, chunkLength);
2036
2091
  var glTF = JSON.parse(Utils.decodeText(glTFData));
2037
2092
  // read all buffers
2038
2093
  var buffers = [];
@@ -2046,7 +2101,7 @@ function registerGLTFParser(pipeline) {
2046
2101
  return null;
2047
2102
  }
2048
2103
  var currentOffset = byteOffset + 2 * UINT32_LENGTH;
2049
- var buffer = glb.slice(currentOffset, currentOffset + chunkLength);
2104
+ var buffer = originBuffer.slice(currentOffset, currentOffset + chunkLength);
2050
2105
  buffers.push(buffer);
2051
2106
  restoreGLBBufferSlice.push(new Vector2(currentOffset, chunkLength));
2052
2107
  byteOffset += chunkLength + 2 * UINT32_LENGTH;
@@ -2243,7 +2298,7 @@ var SupercompressionScheme;
2243
2298
  alphaSliceByteLength: sgdReader.nextUint32()
2244
2299
  };
2245
2300
  }
2246
- var endpointsByteOffset = sgdByteOffset + sgdReader.offset;
2301
+ var endpointsByteOffset = sgdByteOffset + sgdReader.position;
2247
2302
  var selectorsByteOffset = endpointsByteOffset + endpointsByteLength;
2248
2303
  var tablesByteOffset = selectorsByteOffset + selectorsByteLength;
2249
2304
  var extendedByteOffset = tablesByteOffset + tablesByteLength;
@@ -2435,6 +2490,25 @@ var AbstractTranscoder = /*#__PURE__*/ function() {
2435
2490
  }();
2436
2491
 
2437
2492
  /** @internal */ function TranscodeWorkerCode$1() {
2493
+ var initPromise;
2494
+ var init = function init(wasmBinary) {
2495
+ if (!initPromise) {
2496
+ initPromise = new Promise(function(resolve, reject) {
2497
+ var BasisModule = {
2498
+ wasmBinary: wasmBinary,
2499
+ onRuntimeInitialized: function() {
2500
+ return resolve(BasisModule);
2501
+ },
2502
+ onAbort: reject
2503
+ };
2504
+ self["BASIS"](BasisModule);
2505
+ }).then(function(BasisModule) {
2506
+ BasisModule.initializeBasis();
2507
+ return BasisModule.KTX2File;
2508
+ });
2509
+ }
2510
+ return initPromise;
2511
+ };
2438
2512
  self.onmessage = function onmessage(event) {
2439
2513
  var message = event.data;
2440
2514
  switch(message.type){
@@ -2561,6 +2635,7 @@ function transcode(buffer, targetFormat, KTX2File) {
2561
2635
  var faceCount = ktx2File.getFaces();
2562
2636
  var format = getTranscodeFormatFromTarget(targetFormat, hasAlpha);
2563
2637
  var faces = new Array(faceCount);
2638
+ var isBC = format === 2 || format === 3 || format === 7;
2564
2639
  for(var face = 0; face < faceCount; face++){
2565
2640
  var mipmaps = new Array(levelCount);
2566
2641
  for(var mip = 0; mip < levelCount; mip++){
@@ -2568,8 +2643,15 @@ function transcode(buffer, targetFormat, KTX2File) {
2568
2643
  var mipWidth = void 0, mipHeight = void 0;
2569
2644
  for(var layer = 0; layer < layerCount; layer++){
2570
2645
  var levelInfo = ktx2File.getImageLevelInfo(mip, layer, face);
2571
- mipWidth = levelInfo.origWidth;
2572
- mipHeight = levelInfo.origHeight;
2646
+ // see: https://github.com/KhronosGroup/KTX-Software/issues/254
2647
+ if (isBC && mip === 0 && (width !== levelInfo.width || height !== levelInfo.height)) {
2648
+ width = mipWidth = levelInfo.width;
2649
+ height = mipHeight = levelInfo.height;
2650
+ console.warn("KTX2 transcode to BC will resize to width: " + width + ", height: " + height + ". You'd better use an image whose size if multiple of 4.");
2651
+ } else {
2652
+ mipWidth = levelInfo.origWidth;
2653
+ mipHeight = levelInfo.origHeight;
2654
+ }
2573
2655
  var dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, format));
2574
2656
  var status = ktx2File.transcodeImage(dst, mip, layer, face, format, 0, -1, -1);
2575
2657
  if (!status) {
@@ -2635,7 +2717,7 @@ function transcode(buffer, targetFormat, KTX2File) {
2635
2717
  } else {
2636
2718
  var funcCode = TranscodeWorkerCode$1.toString();
2637
2719
  var transcodeString = funcCode.substring(funcCode.indexOf("{"), funcCode.lastIndexOf("}") + 1);
2638
- var workerCode = "\n " + jsCode + "\n var init = (" + _init.toString() + ")();\n " + transcode.toString() + "\n " + transcodeString + "\n ";
2720
+ var workerCode = "\n " + jsCode + "\n " + transcode.toString() + "\n " + transcodeString + "\n ";
2639
2721
  var workerURL = URL.createObjectURL(new Blob([
2640
2722
  workerCode
2641
2723
  ], {
@@ -2881,10 +2963,14 @@ var KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2881
2963
  return Loader1.apply(this, arguments);
2882
2964
  }
2883
2965
  var _proto = KTX2Loader1.prototype;
2884
- _proto.initialize = function initialize(engine, configuration) {
2966
+ _proto.initialize = function initialize(_, configuration) {
2885
2967
  if (configuration.ktx2Loader) {
2886
2968
  var options = configuration.ktx2Loader;
2887
- if (this._isKhronosSupported(options.priorityFormats, engine) && options.workerCount !== 0) {
2969
+ if (options.priorityFormats) {
2970
+ KTX2Loader._priorityFormats["etc1s"] = options.priorityFormats;
2971
+ KTX2Loader._priorityFormats["uastc"] = options.priorityFormats;
2972
+ }
2973
+ if (options.transcoder === /** Khronos transcoder. */ 1) {
2888
2974
  return KTX2Loader._getKhronosTranscoder(options.workerCount).init();
2889
2975
  } else {
2890
2976
  return KTX2Loader._getBinomialLLCTranscoder(options.workerCount).init();
@@ -2903,27 +2989,6 @@ var KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2903
2989
  });
2904
2990
  });
2905
2991
  };
2906
- _proto._isKhronosSupported = function _isKhronosSupported(priorityFormats, engine) {
2907
- if (priorityFormats === void 0) priorityFormats = [
2908
- KTX2TargetFormat.ASTC,
2909
- KTX2TargetFormat.ETC,
2910
- KTX2TargetFormat.BC7,
2911
- KTX2TargetFormat.BC1_BC3,
2912
- KTX2TargetFormat.PVRTC,
2913
- KTX2TargetFormat.R8G8B8A8
2914
- ];
2915
- var supportedList = new Array();
2916
- if (Array.isArray(priorityFormats[0])) {
2917
- for(var i = 0; i < priorityFormats.length; i++){
2918
- supportedList.push(KTX2Loader._detectSupportedFormat(engine._hardwareRenderer, priorityFormats[i]));
2919
- }
2920
- } else {
2921
- supportedList.push(KTX2Loader._detectSupportedFormat(engine._hardwareRenderer, priorityFormats));
2922
- }
2923
- return supportedList.every(function(format) {
2924
- return KhronosTranscoder.transcoderMap[format];
2925
- });
2926
- };
2927
2992
  /**
2928
2993
  * Destroy ktx2 transcoder worker.
2929
2994
  */ KTX2Loader1.destroy = function destroy() {
@@ -2936,7 +3001,8 @@ var KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2936
3001
  /** @internal */ KTX2Loader1._parseBuffer = function _parseBuffer(buffer, engine, params) {
2937
3002
  var _params;
2938
3003
  var ktx2Container = new KTX2Container(buffer);
2939
- var formatPriorities = (_params = params) == null ? void 0 : _params.priorityFormats;
3004
+ var _params_priorityFormats;
3005
+ var formatPriorities = (_params_priorityFormats = (_params = params) == null ? void 0 : _params.priorityFormats) != null ? _params_priorityFormats : KTX2Loader._priorityFormats[ktx2Container.isUASTC ? "uastc" : "etc1s"];
2940
3006
  var targetFormat = KTX2Loader._decideTargetFormat(engine, ktx2Container, formatPriorities);
2941
3007
  var transcodeResultPromise;
2942
3008
  if (KTX2Loader._isBinomialInit || !KhronosTranscoder.transcoderMap[targetFormat] || !ktx2Container.isUASTC) {
@@ -3003,18 +3069,22 @@ var KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
3003
3069
  return targetFormat;
3004
3070
  };
3005
3071
  KTX2Loader1._detectSupportedFormat = function _detectSupportedFormat(renderer, priorityFormats) {
3006
- if (priorityFormats === void 0) priorityFormats = [
3007
- KTX2TargetFormat.ASTC,
3008
- KTX2TargetFormat.ETC,
3009
- KTX2TargetFormat.BC7,
3010
- KTX2TargetFormat.BC1_BC3,
3011
- KTX2TargetFormat.PVRTC
3012
- ];
3013
3072
  for(var i = 0; i < priorityFormats.length; i++){
3014
- var capabilities = this._supportedMap[priorityFormats[i]];
3015
- for(var j = 0; j < capabilities.length; j++){
3016
- if (renderer.canIUse(capabilities[j])) {
3017
- return priorityFormats[i];
3073
+ var format = priorityFormats[i];
3074
+ var capabilities = this._supportedMap[format];
3075
+ if (capabilities) {
3076
+ for(var j = 0; j < capabilities.length; j++){
3077
+ if (renderer.canIUse(capabilities[j])) {
3078
+ return format;
3079
+ }
3080
+ }
3081
+ } else {
3082
+ switch(priorityFormats[i]){
3083
+ case KTX2TargetFormat.R8G8B8A8:
3084
+ return format;
3085
+ case KTX2TargetFormat.R8:
3086
+ case KTX2TargetFormat.R8G8:
3087
+ if (renderer.isWebGL2) return format;
3018
3088
  }
3019
3089
  }
3020
3090
  }
@@ -3051,6 +3121,23 @@ var KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
3051
3121
  return KTX2Loader1;
3052
3122
  }(Loader), function() {
3053
3123
  _KTX2Loader._isBinomialInit = false;
3124
+ }(), function() {
3125
+ _KTX2Loader._priorityFormats = {
3126
+ etc1s: [
3127
+ KTX2TargetFormat.ETC,
3128
+ KTX2TargetFormat.BC7,
3129
+ KTX2TargetFormat.ASTC,
3130
+ KTX2TargetFormat.BC1_BC3,
3131
+ KTX2TargetFormat.PVRTC
3132
+ ],
3133
+ uastc: [
3134
+ KTX2TargetFormat.ASTC,
3135
+ KTX2TargetFormat.BC7,
3136
+ KTX2TargetFormat.ETC,
3137
+ KTX2TargetFormat.BC1_BC3,
3138
+ KTX2TargetFormat.PVRTC
3139
+ ]
3140
+ };
3054
3141
  }(), function() {
3055
3142
  var _obj;
3056
3143
  _KTX2Loader._supportedMap = (_obj = {}, _obj[KTX2TargetFormat.ASTC] = [
@@ -3071,6 +3158,11 @@ KTX2Loader = __decorate([
3071
3158
  "ktx2"
3072
3159
  ])
3073
3160
  ], KTX2Loader);
3161
+ var KTX2Transcoder;
3162
+ (function(KTX2Transcoder) {
3163
+ KTX2Transcoder[KTX2Transcoder[/** BinomialLLC transcoder. */ "BinomialLLC"] = 0] = "BinomialLLC";
3164
+ KTX2Transcoder[KTX2Transcoder["Khronos"] = 1] = "Khronos";
3165
+ })(KTX2Transcoder || (KTX2Transcoder = {}));
3074
3166
 
3075
3167
  /**
3076
3168
  * @internal
@@ -3419,23 +3511,20 @@ var GLTFSchemaParser = /*#__PURE__*/ function(GLTFParser1) {
3419
3511
  var requestConfig = {
3420
3512
  type: "arraybuffer"
3421
3513
  };
3422
- var isGLB = this._isGLB(url);
3423
- contentRestorer.isGLB = isGLB;
3424
- var promise = isGLB ? request(url, requestConfig).then(function(glb) {
3514
+ return request(url, requestConfig).then(function(buffer) {
3425
3515
  restoreBufferRequests.push(new BufferRequestInfo(url, requestConfig));
3426
- return GLTFUtils.parseGLB(context, glb);
3427
- }).then(function(param) {
3428
- var glTF = param.glTF, buffers = param.buffers;
3429
- context.buffers = buffers;
3430
- return glTF;
3431
- }) : request(url, {
3432
- type: "json"
3516
+ return GLTFUtils.parseGLB(context, buffer);
3517
+ }).then(function(result) {
3518
+ var _result;
3519
+ if ((_result = result) == null ? void 0 : _result.glTF) {
3520
+ contentRestorer.isGLB = true;
3521
+ context.buffers = result.buffers;
3522
+ return result.glTF;
3523
+ } else {
3524
+ contentRestorer.isGLB = false;
3525
+ return JSON.parse(Utils.decodeText(new Uint8Array(result.originBuffer)));
3526
+ }
3433
3527
  });
3434
- return promise;
3435
- };
3436
- _proto._isGLB = function _isGLB(url) {
3437
- var index = url.lastIndexOf(".");
3438
- return url.substring(index + 1, index + 4) === "glb";
3439
3528
  };
3440
3529
  return GLTFSchemaParser;
3441
3530
  }(GLTFParser);
@@ -3514,6 +3603,7 @@ var GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3514
3603
  var promises = new Array();
3515
3604
  // parse samplers
3516
3605
  for(var j = 0, m = samplers.length; j < m; j++)_loop(j);
3606
+ promises.push(context.get(GLTFParserType.Scene));
3517
3607
  return Promise.all(promises).then(function() {
3518
3608
  for(var j = 0, m = channels.length; j < m; j++){
3519
3609
  var gltfChannel = channels[j];
@@ -3525,6 +3615,10 @@ var GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3525
3615
  relativePath = relativePath === "" ? "" + entity.name : entity.name + "/" + relativePath;
3526
3616
  entity = entity.parent;
3527
3617
  }
3618
+ // If the target node is in the default scene, relativePath will be empty
3619
+ if (context.glTFResource.sceneRoots.indexOf(entity) === -1) {
3620
+ continue;
3621
+ }
3528
3622
  var ComponentType = void 0;
3529
3623
  var propertyName = void 0;
3530
3624
  switch(target.path){
@@ -3861,7 +3955,7 @@ var GLTFMeshParser = (_GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
3861
3955
  return context.get(GLTFParserType.Buffer).then(function(buffers) {
3862
3956
  return GLTFUtils.getAccessorData(glTF, indexAccessor, buffers);
3863
3957
  });
3864
- }, context.keepMeshData).then(resolve);
3958
+ }, context.params.keepMeshData).then(resolve);
3865
3959
  }
3866
3960
  });
3867
3961
  };
@@ -4039,9 +4133,9 @@ var GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4039
4133
  }
4040
4134
  var _proto = GLTFSceneParser.prototype;
4041
4135
  _proto.parse = function parse(context, index) {
4042
- var _this = this;
4043
4136
  var _context_glTF = context.glTF, scenes = _context_glTF.scenes, _context_glTF_scene = _context_glTF.scene, scene = _context_glTF_scene === void 0 ? 0 : _context_glTF_scene, glTFResource = context.glTFResource;
4044
4137
  var sceneInfo = scenes[index];
4138
+ var sceneExtensions = sceneInfo.extensions;
4045
4139
  var engine = glTFResource.engine;
4046
4140
  var isDefaultScene = scene === index;
4047
4141
  var sceneNodes = sceneInfo.nodes;
@@ -4067,18 +4161,7 @@ var GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4067
4161
  promises.push(this._parseEntityComponent(context, sceneNodes[i1]));
4068
4162
  }
4069
4163
  return Promise.all(promises).then(function() {
4070
- if (isDefaultScene) {
4071
- return Promise.all([
4072
- context.get(GLTFParserType.Skin),
4073
- context.get(GLTFParserType.Animation)
4074
- ]).then(function(param) {
4075
- var skins = param[0], animations = param[1];
4076
- if (skins || animations) {
4077
- _this._createAnimator(context, animations);
4078
- }
4079
- return sceneRoot;
4080
- });
4081
- }
4164
+ GLTFParser.executeExtensionsAdditiveAndParse(sceneExtensions, context, sceneRoot, sceneInfo);
4082
4165
  return sceneRoot;
4083
4166
  });
4084
4167
  };
@@ -4190,28 +4273,6 @@ var GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4190
4273
  for(var i = 0; i < glTFMeshPrimitives.length; i++)_loop(i);
4191
4274
  return Promise.all(promises);
4192
4275
  };
4193
- _proto._createAnimator = function _createAnimator(context, animations) {
4194
- var defaultSceneRoot = context.glTFResource.defaultSceneRoot;
4195
- var animator = defaultSceneRoot.addComponent(Animator);
4196
- var animatorController = new AnimatorController();
4197
- var layer = new AnimatorControllerLayer("layer");
4198
- var animatorStateMachine = new AnimatorStateMachine();
4199
- animatorController.addLayer(layer);
4200
- animator.animatorController = animatorController;
4201
- layer.stateMachine = animatorStateMachine;
4202
- if (animations) {
4203
- for(var i = 0; i < animations.length; i++){
4204
- var animationClip = animations[i];
4205
- var name = animationClip.name;
4206
- var uniqueName = animatorStateMachine.makeUniqueStateName(name);
4207
- if (uniqueName !== name) {
4208
- console.warn("AnimatorState name is existed, name: " + name + " reset to " + uniqueName);
4209
- }
4210
- var animatorState = animatorStateMachine.addState(uniqueName);
4211
- animatorState.clip = animationClip;
4212
- }
4213
- }
4214
- };
4215
4276
  _proto._computeLocalBounds = function _computeLocalBounds(skinnedMeshRenderer, mesh, bones, rootBone, inverseBindMatrices) {
4216
4277
  var rootBoneIndex = bones.indexOf(rootBone);
4217
4278
  if (rootBoneIndex !== -1) {
@@ -4443,11 +4504,12 @@ var GLTFLoader = /*#__PURE__*/ function(Loader1) {
4443
4504
  }
4444
4505
  var _proto = GLTFLoader.prototype;
4445
4506
  _proto.load = function load(item, resourceManager) {
4446
- var _params;
4447
4507
  var url = item.url;
4448
4508
  var params = item.params;
4449
4509
  var glTFResource = new GLTFResource(resourceManager.engine, url);
4450
- var context = new GLTFParserContext(glTFResource, resourceManager, !!((_params = params) == null ? void 0 : _params.keepMeshData));
4510
+ var context = new GLTFParserContext(glTFResource, resourceManager, _extends({
4511
+ keepMeshData: false
4512
+ }, params));
4451
4513
  return context.parse();
4452
4514
  };
4453
4515
  return GLTFLoader;
@@ -5095,6 +5157,12 @@ var MaterialLoader = /*#__PURE__*/ function(Loader1) {
5095
5157
  materialShaderData.setTexture(key, texture);
5096
5158
  }));
5097
5159
  break;
5160
+ case "Boolean":
5161
+ materialShaderData.setInt(key, value ? 1 : 0);
5162
+ break;
5163
+ case "Integer":
5164
+ materialShaderData.setInt(key, Number(value));
5165
+ break;
5098
5166
  }
5099
5167
  };
5100
5168
  var engine = resourceManager.engine;
@@ -5230,9 +5298,10 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader1) {
5230
5298
  var _loop = function(i) {
5231
5299
  var atlasItem = atlasItems[i];
5232
5300
  if (atlasItem.img) {
5301
+ var _atlasItem_type;
5233
5302
  chainPromises.push(resourceManager.load({
5234
5303
  url: Utils.resolveAbsoluteUrl(item.url, atlasItem.img),
5235
- type: AssetType.Texture2D,
5304
+ type: (_atlasItem_type = atlasItem.type) != null ? _atlasItem_type : AssetType.Texture2D,
5236
5305
  params: {
5237
5306
  format: format,
5238
5307
  mipmap: mipmap
@@ -5272,7 +5341,7 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader1) {
5272
5341
  };
5273
5342
  _proto._makeSprite = function _makeSprite(engine, config, texture) {
5274
5343
  // Generate a SpriteAtlas object.
5275
- var region = config.region, atlasRegionOffset = config.atlasRegionOffset, atlasRegion = config.atlasRegion, pivot = config.pivot, border = config.border;
5344
+ var region = config.region, atlasRegionOffset = config.atlasRegionOffset, atlasRegion = config.atlasRegion, pivot = config.pivot, border = config.border, width = config.width, height = config.height;
5276
5345
  var sprite = new 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);
5277
5346
  if (texture) {
5278
5347
  var invW = 1 / texture.width;
@@ -5284,6 +5353,8 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader1) {
5284
5353
  }
5285
5354
  config.atlasRotated && (sprite.atlasRotated = true);
5286
5355
  }
5356
+ isNaN(width) || (sprite.width = width);
5357
+ isNaN(height) || (sprite.height = height);
5287
5358
  return sprite;
5288
5359
  };
5289
5360
  return SpriteAtlasLoader;
@@ -5302,26 +5373,39 @@ var SpriteLoader = /*#__PURE__*/ function(Loader1) {
5302
5373
  var _proto = SpriteLoader.prototype;
5303
5374
  _proto.load = function load(item, resourceManager) {
5304
5375
  var _this = this;
5305
- return new AssetPromise(function(resolve, reject) {
5306
- _this.request(item.url, _extends({}, item, {
5307
- type: "json"
5308
- })).then(function(data) {
5309
- if (data.belongToAtlas) {
5310
- resourceManager// @ts-ignore
5311
- .getResourceByRef(data.belongToAtlas).then(function(atlas) {
5312
- resolve(atlas.getSprite(data.fullPath));
5313
- }).catch(reject);
5314
- } else if (data.texture) {
5315
- resourceManager// @ts-ignore
5316
- .getResourceByRef(data.texture).then(function(texture) {
5317
- resolve(new Sprite(resourceManager.engine, texture, data.region, data.pivot, data.border));
5318
- }).catch(reject);
5319
- } else {
5320
- resolve(new Sprite(resourceManager.engine, null, data.region, data.pivot, data.border));
5321
- }
5322
- }).catch(reject);
5376
+ return this.request(item.url, _extends({}, item, {
5377
+ type: "json"
5378
+ })).then(function(data) {
5379
+ return data.belongToAtlas ? _this._loadFromAtlas(resourceManager, data) : _this._loadFromTexture(resourceManager, data);
5380
+ });
5381
+ };
5382
+ _proto._loadFromAtlas = function _loadFromAtlas(resourceManager, data) {
5383
+ var _this = this;
5384
+ return resourceManager// @ts-ignore
5385
+ .getResourceByRef(data.belongToAtlas).then(function(atlas) {
5386
+ return atlas.getSprite(data.fullPath) || _this._loadFromTexture(resourceManager, data);
5323
5387
  });
5324
5388
  };
5389
+ _proto._loadFromTexture = function _loadFromTexture(resourceManager, data) {
5390
+ if (data.texture) {
5391
+ return resourceManager// @ts-ignore
5392
+ .getResourceByRef(data.texture).then(function(texture) {
5393
+ var sprite = new Sprite(resourceManager.engine, texture, data.region, data.pivot, data.border);
5394
+ var width = data.width, height = data.height;
5395
+ isNaN(width) || (sprite.width = width);
5396
+ isNaN(height) || (sprite.height = height);
5397
+ return sprite;
5398
+ });
5399
+ } else {
5400
+ return new AssetPromise(function(resolve) {
5401
+ var sprite = new Sprite(resourceManager.engine, null, data.region, data.pivot, data.border);
5402
+ var width = data.width, height = data.height;
5403
+ isNaN(width) || (sprite.width = width);
5404
+ isNaN(height) || (sprite.height = height);
5405
+ resolve(sprite);
5406
+ });
5407
+ }
5408
+ };
5325
5409
  return SpriteLoader;
5326
5410
  }(Loader);
5327
5411
  SpriteLoader = __decorate([
@@ -5368,9 +5452,13 @@ var Texture2DLoader = /*#__PURE__*/ function(Loader1) {
5368
5452
  type: "image"
5369
5453
  });
5370
5454
  _this.request(url, requestConfig).then(function(image) {
5371
- var _params, _params1;
5372
- var params = item.params;
5373
- var texture = new Texture2D(resourceManager.engine, image.width, image.height, (_params = params) == null ? void 0 : _params.format, (_params1 = params) == null ? void 0 : _params1.mipmap);
5455
+ var _item_params;
5456
+ var _ref = (_item_params = item.params) != null ? _item_params : {}, format = _ref.format, mipmap = _ref.mipmap, anisoLevel = _ref.anisoLevel, wrapModeU = _ref.wrapModeU, wrapModeV = _ref.wrapModeV, filterMode = _ref.filterMode;
5457
+ var texture = new Texture2D(resourceManager.engine, image.width, image.height, format, mipmap);
5458
+ texture.anisoLevel = anisoLevel != null ? anisoLevel : texture.anisoLevel;
5459
+ texture.filterMode = filterMode != null ? filterMode : texture.filterMode;
5460
+ texture.wrapModeU = wrapModeU != null ? wrapModeU : texture.wrapModeU;
5461
+ texture.wrapModeV = wrapModeV != null ? wrapModeV : texture.wrapModeV;
5374
5462
  texture.setImageSource(image);
5375
5463
  texture.generateMipmaps();
5376
5464
  if (url.indexOf("data:") !== 0) {
@@ -5518,33 +5606,34 @@ var SceneLoader = /*#__PURE__*/ function(Loader1) {
5518
5606
  var promises = [];
5519
5607
  // parse ambient light
5520
5608
  var ambient = data.scene.ambient;
5521
- var useCustomAmbient = ambient.specularMode === "Custom";
5522
- if (useCustomAmbient && ambient.customAmbientLight) {
5523
- // @ts-ignore
5524
- // prettier-ignore
5525
- var customAmbientPromise = resourceManager.getResourceByRef(ambient.customAmbientLight).then(function(ambientLight) {
5526
- scene.ambientLight = ambientLight;
5527
- scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5528
- scene.ambientLight.specularIntensity = ambient.specularIntensity;
5529
- scene.ambientLight.diffuseMode = ambient.diffuseMode;
5530
- scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5531
- });
5532
- promises.push(customAmbientPromise);
5533
- } else if (!useCustomAmbient && ambient.ambientLight) {
5534
- // @ts-ignore
5535
- // prettier-ignore
5536
- var ambientLightPromise = resourceManager.getResourceByRef(ambient.ambientLight).then(function(ambientLight) {
5537
- scene.ambientLight = ambientLight;
5538
- scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5539
- scene.ambientLight.specularIntensity = ambient.specularIntensity;
5540
- scene.ambientLight.diffuseMode = ambient.diffuseMode;
5541
- scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5542
- });
5543
- promises.push(ambientLightPromise);
5544
- } else {
5609
+ if (ambient) {
5610
+ var useCustomAmbient = ambient.specularMode === "Custom";
5611
+ var useSH = ambient.diffuseMode === DiffuseMode.SphericalHarmonics;
5545
5612
  scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5546
5613
  scene.ambientLight.specularIntensity = ambient.specularIntensity;
5614
+ scene.ambientLight.diffuseMode = ambient.diffuseMode;
5547
5615
  scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5616
+ scene.ambientLight.specularTextureDecodeRGBM = true;
5617
+ if (useCustomAmbient && ambient.customAmbientLight) {
5618
+ promises.push(// @ts-ignore
5619
+ resourceManager.getResourceByRef(ambient.customAmbientLight).then(function(ambientLight) {
5620
+ var _ambientLight;
5621
+ scene.ambientLight.specularTexture = (_ambientLight = ambientLight) == null ? void 0 : _ambientLight.specularTexture;
5622
+ }));
5623
+ }
5624
+ if (ambient.ambientLight && (!useCustomAmbient || useSH)) {
5625
+ promises.push(// @ts-ignore
5626
+ resourceManager.getResourceByRef(ambient.ambientLight).then(function(ambientLight) {
5627
+ if (!useCustomAmbient) {
5628
+ var _ambientLight;
5629
+ scene.ambientLight.specularTexture = (_ambientLight = ambientLight) == null ? void 0 : _ambientLight.specularTexture;
5630
+ }
5631
+ if (useSH) {
5632
+ var _ambientLight1;
5633
+ scene.ambientLight.diffuseSphericalHarmonics = (_ambientLight1 = ambientLight) == null ? void 0 : _ambientLight1.diffuseSphericalHarmonics;
5634
+ }
5635
+ }));
5636
+ }
5548
5637
  }
5549
5638
  var background = data.scene.background;
5550
5639
  scene.background.mode = background.mode;
@@ -5586,6 +5675,9 @@ var SceneLoader = /*#__PURE__*/ function(Loader1) {
5586
5675
  if (shadow.shadowResolution != undefined) scene.shadowResolution = shadow.shadowResolution;
5587
5676
  if (shadow.shadowDistance != undefined) scene.shadowDistance = shadow.shadowDistance;
5588
5677
  if (shadow.shadowCascades != undefined) scene.shadowCascades = shadow.shadowCascades;
5678
+ var _shadow_shadowTwoCascadeSplits;
5679
+ scene.shadowTwoCascadeSplits = (_shadow_shadowTwoCascadeSplits = shadow.shadowTwoCascadeSplits) != null ? _shadow_shadowTwoCascadeSplits : scene.shadowTwoCascadeSplits;
5680
+ shadow.shadowFourCascadeSplits && scene.shadowFourCascadeSplits.copyFrom(shadow.shadowFourCascadeSplits);
5589
5681
  }
5590
5682
  return Promise.all(promises).then(function() {
5591
5683
  resolve(scene);
@@ -5601,13 +5693,13 @@ SceneLoader = __decorate([
5601
5693
  "scene"
5602
5694
  ], true)
5603
5695
  ], SceneLoader);
5604
- ReflectionParser.registerCustomParseComponent("TextRenderer", /*#__PURE__*/ _async_to_generator(function(instance, item, engine) {
5696
+ ReflectionParser.registerCustomParseComponent("TextRenderer", /*#__PURE__*/ _async_to_generator(function(instance, item) {
5605
5697
  var props;
5606
5698
  return __generator(this, function(_state) {
5607
5699
  props = item.props;
5608
5700
  if (!props.font) {
5609
5701
  // @ts-ignore
5610
- instance.font = Font.createFromOS(engine, props.fontFamily || "Arial");
5702
+ instance.font = Font.createFromOS(instance.engine, props.fontFamily || "Arial");
5611
5703
  }
5612
5704
  return [
5613
5705
  2,
@@ -5663,7 +5755,7 @@ var KHR_draco_mesh_compression = (_KHR_draco_mesh_compression = /*#__PURE__*/ fu
5663
5755
  throw "BlendShape animation is not supported when using draco.";
5664
5756
  }, function() {
5665
5757
  return decodedGeometry.index.array;
5666
- }, context.keepMeshData);
5758
+ }, context.params.keepMeshData);
5667
5759
  });
5668
5760
  });
5669
5761
  };
@@ -6108,5 +6200,5 @@ GALACEAN_animation_event = __decorate([
6108
6200
  registerGLTFExtension("GALACEAN_animation_event", GLTFExtensionMode.AdditiveParse)
6109
6201
  ], GALACEAN_animation_event);
6110
6202
 
6111
- export { AnimationClipDecoder, ComponentMap, EditorTextureLoader, GLTFAnimationParser, GLTFBufferParser, GLTFEntityParser, GLTFExtensionMode, GLTFExtensionParser, GLTFMaterialParser, GLTFMeshParser, GLTFParser, GLTFParserContext, GLTFParserType, GLTFResource, GLTFSceneParser, GLTFSchemaParser, GLTFSkinParser, GLTFTextureParser, GLTFUtils, GLTFValidator, InterpolableValueType, KTX2Loader, KTX2TargetFormat, MeshDecoder, MeshLoader$1 as MeshLoader, PrefabParser, ReflectionParser, SceneParser, SpecularMode, Texture2DDecoder, decode, parseSingleKTX, registerGLTFExtension, registerGLTFParser };
6203
+ export { AnimationClipDecoder, ComponentMap, EditorTextureLoader, GLTFAnimationParser, GLTFBufferParser, GLTFEntityParser, GLTFExtensionMode, GLTFExtensionParser, GLTFMaterialParser, GLTFMeshParser, GLTFParser, GLTFParserContext, GLTFParserType, GLTFResource, GLTFSceneParser, GLTFSchemaParser, GLTFSkinParser, GLTFTextureParser, GLTFUtils, GLTFValidator, InterpolableValueType, KTX2Loader, KTX2TargetFormat, KTX2Transcoder, MeshDecoder, MeshLoader$1 as MeshLoader, PrefabParser, ReflectionParser, SceneParser, SpecularMode, Texture2DDecoder, decode, parseSingleKTX, registerGLTFExtension, registerGLTFParser };
6112
6204
  //# sourceMappingURL=module.js.map