@galacean/engine-loader 0.0.0-experimental-double11.13 → 0.0.0-experimental-shaderlab.0

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.
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.position / 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
@@ -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];
@@ -2580,6 +2631,7 @@ function transcode(buffer, targetFormat, KTX2File) {
2580
2631
  var faceCount = ktx2File.getFaces();
2581
2632
  var format = getTranscodeFormatFromTarget(targetFormat, hasAlpha);
2582
2633
  var faces = new Array(faceCount);
2634
+ var isBC = format === 2 || format === 3 || format === 7;
2583
2635
  for(var face = 0; face < faceCount; face++){
2584
2636
  var mipmaps = new Array(levelCount);
2585
2637
  for(var mip = 0; mip < levelCount; mip++){
@@ -2587,8 +2639,15 @@ function transcode(buffer, targetFormat, KTX2File) {
2587
2639
  var mipWidth = void 0, mipHeight = void 0;
2588
2640
  for(var layer = 0; layer < layerCount; layer++){
2589
2641
  var levelInfo = ktx2File.getImageLevelInfo(mip, layer, face);
2590
- mipWidth = levelInfo.origWidth;
2591
- mipHeight = levelInfo.origHeight;
2642
+ // see: https://github.com/KhronosGroup/KTX-Software/issues/254
2643
+ if (isBC && mip === 0 && (width !== levelInfo.width || height !== levelInfo.height)) {
2644
+ width = mipWidth = levelInfo.width;
2645
+ height = mipHeight = levelInfo.height;
2646
+ 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.");
2647
+ } else {
2648
+ mipWidth = levelInfo.origWidth;
2649
+ mipHeight = levelInfo.origHeight;
2650
+ }
2592
2651
  var dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, format));
2593
2652
  var status = ktx2File.transcodeImage(dst, mip, layer, face, format, 0, -1, -1);
2594
2653
  if (!status) {
@@ -2900,11 +2959,14 @@ var KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2900
2959
  return Loader1.apply(this, arguments);
2901
2960
  }
2902
2961
  var _proto = KTX2Loader1.prototype;
2903
- _proto.initialize = function initialize(engine, configuration) {
2962
+ _proto.initialize = function initialize(_, configuration) {
2904
2963
  if (configuration.ktx2Loader) {
2905
2964
  var options = configuration.ktx2Loader;
2906
- if (options.priorityFormats) KTX2Loader._priorityFormats = options.priorityFormats;
2907
- if (this._isKhronosSupported(options.priorityFormats, engine) && options.workerCount !== 0) {
2965
+ if (options.priorityFormats) {
2966
+ KTX2Loader._priorityFormats["etc1s"] = options.priorityFormats;
2967
+ KTX2Loader._priorityFormats["uastc"] = options.priorityFormats;
2968
+ }
2969
+ if (options.transcoder === /** Khronos transcoder. */ 1) {
2908
2970
  return KTX2Loader._getKhronosTranscoder(options.workerCount).init();
2909
2971
  } else {
2910
2972
  return KTX2Loader._getBinomialLLCTranscoder(options.workerCount).init();
@@ -2923,17 +2985,6 @@ var KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2923
2985
  });
2924
2986
  });
2925
2987
  };
2926
- _proto._isKhronosSupported = function _isKhronosSupported(priorityFormats, engine) {
2927
- if (priorityFormats === void 0) priorityFormats = [
2928
- KTX2TargetFormat.ASTC,
2929
- KTX2TargetFormat.ETC,
2930
- KTX2TargetFormat.BC7,
2931
- KTX2TargetFormat.BC1_BC3,
2932
- KTX2TargetFormat.PVRTC,
2933
- KTX2TargetFormat.R8G8B8A8
2934
- ];
2935
- return !!KhronosTranscoder.transcoderMap[KTX2Loader._detectSupportedFormat(engine._hardwareRenderer, priorityFormats)];
2936
- };
2937
2988
  /**
2938
2989
  * Destroy ktx2 transcoder worker.
2939
2990
  */ KTX2Loader1.destroy = function destroy() {
@@ -2947,7 +2998,7 @@ var KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2947
2998
  var _params;
2948
2999
  var ktx2Container = new KTX2Container(buffer);
2949
3000
  var _params_priorityFormats;
2950
- var formatPriorities = (_params_priorityFormats = (_params = params) == null ? void 0 : _params.priorityFormats) != null ? _params_priorityFormats : KTX2Loader._priorityFormats;
3001
+ var formatPriorities = (_params_priorityFormats = (_params = params) == null ? void 0 : _params.priorityFormats) != null ? _params_priorityFormats : KTX2Loader._priorityFormats[ktx2Container.isUASTC ? "uastc" : "etc1s"];
2951
3002
  var targetFormat = KTX2Loader._decideTargetFormat(engine, ktx2Container, formatPriorities);
2952
3003
  var transcodeResultPromise;
2953
3004
  if (KTX2Loader._isBinomialInit || !KhronosTranscoder.transcoderMap[targetFormat] || !ktx2Container.isUASTC) {
@@ -3015,11 +3066,21 @@ var KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
3015
3066
  };
3016
3067
  KTX2Loader1._detectSupportedFormat = function _detectSupportedFormat(renderer, priorityFormats) {
3017
3068
  for(var i = 0; i < priorityFormats.length; i++){
3018
- var capabilities = this._supportedMap[priorityFormats[i]];
3019
- if (!capabilities) return null;
3020
- for(var j = 0; j < capabilities.length; j++){
3021
- if (renderer.canIUse(capabilities[j])) {
3022
- return priorityFormats[i];
3069
+ var format = priorityFormats[i];
3070
+ var capabilities = this._supportedMap[format];
3071
+ if (capabilities) {
3072
+ for(var j = 0; j < capabilities.length; j++){
3073
+ if (renderer.canIUse(capabilities[j])) {
3074
+ return format;
3075
+ }
3076
+ }
3077
+ } else {
3078
+ switch(priorityFormats[i]){
3079
+ case KTX2TargetFormat.R8G8B8A8:
3080
+ return format;
3081
+ case KTX2TargetFormat.R8:
3082
+ case KTX2TargetFormat.R8G8:
3083
+ if (renderer.isWebGL2) return format;
3023
3084
  }
3024
3085
  }
3025
3086
  }
@@ -3057,13 +3118,22 @@ var KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
3057
3118
  }(Loader), function() {
3058
3119
  _KTX2Loader._isBinomialInit = false;
3059
3120
  }(), function() {
3060
- _KTX2Loader._priorityFormats = [
3061
- KTX2TargetFormat.BC7,
3062
- KTX2TargetFormat.ASTC,
3063
- KTX2TargetFormat.BC1_BC3,
3064
- KTX2TargetFormat.ETC,
3065
- KTX2TargetFormat.PVRTC
3066
- ];
3121
+ _KTX2Loader._priorityFormats = {
3122
+ etc1s: [
3123
+ KTX2TargetFormat.ETC,
3124
+ KTX2TargetFormat.BC7,
3125
+ KTX2TargetFormat.ASTC,
3126
+ KTX2TargetFormat.BC1_BC3,
3127
+ KTX2TargetFormat.PVRTC
3128
+ ],
3129
+ uastc: [
3130
+ KTX2TargetFormat.ASTC,
3131
+ KTX2TargetFormat.BC7,
3132
+ KTX2TargetFormat.ETC,
3133
+ KTX2TargetFormat.BC1_BC3,
3134
+ KTX2TargetFormat.PVRTC
3135
+ ]
3136
+ };
3067
3137
  }(), function() {
3068
3138
  var _obj;
3069
3139
  _KTX2Loader._supportedMap = (_obj = {}, _obj[KTX2TargetFormat.ASTC] = [
@@ -3084,6 +3154,11 @@ KTX2Loader = __decorate([
3084
3154
  "ktx2"
3085
3155
  ])
3086
3156
  ], KTX2Loader);
3157
+ var KTX2Transcoder;
3158
+ (function(KTX2Transcoder) {
3159
+ KTX2Transcoder[KTX2Transcoder[/** BinomialLLC transcoder. */ "BinomialLLC"] = 0] = "BinomialLLC";
3160
+ KTX2Transcoder[KTX2Transcoder["Khronos"] = 1] = "Khronos";
3161
+ })(KTX2Transcoder || (KTX2Transcoder = {}));
3087
3162
 
3088
3163
  /**
3089
3164
  * @internal
@@ -3527,6 +3602,7 @@ var GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3527
3602
  var promises = new Array();
3528
3603
  // parse samplers
3529
3604
  for(var j = 0, m = samplers.length; j < m; j++)_loop(j);
3605
+ promises.push(context.get(GLTFParserType.Scene));
3530
3606
  return Promise.all(promises).then(function() {
3531
3607
  for(var j = 0, m = channels.length; j < m; j++){
3532
3608
  var gltfChannel = channels[j];
@@ -3538,6 +3614,10 @@ var GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3538
3614
  relativePath = relativePath === "" ? "" + entity.name : entity.name + "/" + relativePath;
3539
3615
  entity = entity.parent;
3540
3616
  }
3617
+ // If the target node is in the default scene, relativePath will be empty
3618
+ if (context.glTFResource.sceneRoots.indexOf(entity) === -1) {
3619
+ continue;
3620
+ }
3541
3621
  var ComponentType = void 0;
3542
3622
  var propertyName = void 0;
3543
3623
  switch(target.path){
@@ -4052,7 +4132,6 @@ var GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4052
4132
  }
4053
4133
  var _proto = GLTFSceneParser.prototype;
4054
4134
  _proto.parse = function parse(context, index) {
4055
- var _this = this;
4056
4135
  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;
4057
4136
  var sceneInfo = scenes[index];
4058
4137
  var sceneExtensions = sceneInfo.extensions;
@@ -4082,18 +4161,6 @@ var GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4082
4161
  }
4083
4162
  return Promise.all(promises).then(function() {
4084
4163
  GLTFParser.executeExtensionsAdditiveAndParse(sceneExtensions, context, sceneRoot, sceneInfo);
4085
- if (isDefaultScene) {
4086
- return Promise.all([
4087
- context.get(GLTFParserType.Skin),
4088
- context.get(GLTFParserType.Animation)
4089
- ]).then(function(param) {
4090
- var skins = param[0], animations = param[1];
4091
- if (skins || animations) {
4092
- _this._createAnimator(context, animations);
4093
- }
4094
- return sceneRoot;
4095
- });
4096
- }
4097
4164
  return sceneRoot;
4098
4165
  });
4099
4166
  };
@@ -4205,28 +4272,6 @@ var GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4205
4272
  for(var i = 0; i < glTFMeshPrimitives.length; i++)_loop(i);
4206
4273
  return Promise.all(promises);
4207
4274
  };
4208
- _proto._createAnimator = function _createAnimator(context, animations) {
4209
- var defaultSceneRoot = context.glTFResource.defaultSceneRoot;
4210
- var animator = defaultSceneRoot.addComponent(Animator);
4211
- var animatorController = new AnimatorController();
4212
- var layer = new AnimatorControllerLayer("layer");
4213
- var animatorStateMachine = new AnimatorStateMachine();
4214
- animatorController.addLayer(layer);
4215
- animator.animatorController = animatorController;
4216
- layer.stateMachine = animatorStateMachine;
4217
- if (animations) {
4218
- for(var i = 0; i < animations.length; i++){
4219
- var animationClip = animations[i];
4220
- var name = animationClip.name;
4221
- var uniqueName = animatorStateMachine.makeUniqueStateName(name);
4222
- if (uniqueName !== name) {
4223
- console.warn("AnimatorState name is existed, name: " + name + " reset to " + uniqueName);
4224
- }
4225
- var animatorState = animatorStateMachine.addState(uniqueName);
4226
- animatorState.clip = animationClip;
4227
- }
4228
- }
4229
- };
4230
4275
  _proto._computeLocalBounds = function _computeLocalBounds(skinnedMeshRenderer, mesh, bones, rootBone, inverseBindMatrices) {
4231
4276
  var rootBoneIndex = bones.indexOf(rootBone);
4232
4277
  if (rootBoneIndex !== -1) {
@@ -5111,6 +5156,12 @@ var MaterialLoader = /*#__PURE__*/ function(Loader1) {
5111
5156
  materialShaderData.setTexture(key, texture);
5112
5157
  }));
5113
5158
  break;
5159
+ case "Boolean":
5160
+ materialShaderData.setInt(key, value ? 1 : 0);
5161
+ break;
5162
+ case "Integer":
5163
+ materialShaderData.setInt(key, Number(value));
5164
+ break;
5114
5165
  }
5115
5166
  };
5116
5167
  var engine = resourceManager.engine;
@@ -5246,9 +5297,10 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader1) {
5246
5297
  var _loop = function(i) {
5247
5298
  var atlasItem = atlasItems[i];
5248
5299
  if (atlasItem.img) {
5300
+ var _atlasItem_type;
5249
5301
  chainPromises.push(resourceManager.load({
5250
5302
  url: Utils.resolveAbsoluteUrl(item.url, atlasItem.img),
5251
- type: AssetType.Texture2D,
5303
+ type: (_atlasItem_type = atlasItem.type) != null ? _atlasItem_type : AssetType.Texture2D,
5252
5304
  params: {
5253
5305
  format: format,
5254
5306
  mipmap: mipmap
@@ -5384,9 +5436,13 @@ var Texture2DLoader = /*#__PURE__*/ function(Loader1) {
5384
5436
  type: "image"
5385
5437
  });
5386
5438
  _this.request(url, requestConfig).then(function(image) {
5387
- var _params, _params1;
5388
- var params = item.params;
5389
- var texture = new Texture2D(resourceManager.engine, image.width, image.height, (_params = params) == null ? void 0 : _params.format, (_params1 = params) == null ? void 0 : _params1.mipmap);
5439
+ var _item_params;
5440
+ 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;
5441
+ var texture = new Texture2D(resourceManager.engine, image.width, image.height, format, mipmap);
5442
+ texture.anisoLevel = anisoLevel != null ? anisoLevel : texture.anisoLevel;
5443
+ texture.filterMode = filterMode != null ? filterMode : texture.filterMode;
5444
+ texture.wrapModeU = wrapModeU != null ? wrapModeU : texture.wrapModeU;
5445
+ texture.wrapModeV = wrapModeV != null ? wrapModeV : texture.wrapModeV;
5390
5446
  texture.setImageSource(image);
5391
5447
  texture.generateMipmaps();
5392
5448
  if (url.indexOf("data:") !== 0) {
@@ -5534,29 +5590,34 @@ var SceneLoader = /*#__PURE__*/ function(Loader1) {
5534
5590
  var promises = [];
5535
5591
  // parse ambient light
5536
5592
  var ambient = data.scene.ambient;
5537
- var useCustomAmbient = ambient.specularMode === "Custom";
5538
- var useSH = ambient.diffuseMode === DiffuseMode.SphericalHarmonics;
5539
- scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5540
- scene.ambientLight.specularIntensity = ambient.specularIntensity;
5541
- scene.ambientLight.diffuseMode = ambient.diffuseMode;
5542
- scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5543
- scene.ambientLight.specularTextureDecodeRGBM = true;
5544
- if (useCustomAmbient && ambient.customAmbientLight) {
5545
- promises.push(// @ts-ignore
5546
- resourceManager.getResourceByRef(ambient.customAmbientLight).then(function(ambientLight) {
5547
- scene.ambientLight.specularTexture = ambientLight.specularTexture;
5548
- }));
5549
- }
5550
- if (ambient.ambientLight && (!useCustomAmbient || useSH)) {
5551
- promises.push(// @ts-ignore
5552
- resourceManager.getResourceByRef(ambient.ambientLight).then(function(ambientLight) {
5553
- if (!useCustomAmbient) {
5554
- scene.ambientLight.specularTexture = ambientLight.specularTexture;
5555
- }
5556
- if (useSH) {
5557
- scene.ambientLight.diffuseSphericalHarmonics = ambientLight.diffuseSphericalHarmonics;
5558
- }
5559
- }));
5593
+ if (ambient) {
5594
+ var useCustomAmbient = ambient.specularMode === "Custom";
5595
+ var useSH = ambient.diffuseMode === DiffuseMode.SphericalHarmonics;
5596
+ scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5597
+ scene.ambientLight.specularIntensity = ambient.specularIntensity;
5598
+ scene.ambientLight.diffuseMode = ambient.diffuseMode;
5599
+ scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5600
+ scene.ambientLight.specularTextureDecodeRGBM = true;
5601
+ if (useCustomAmbient && ambient.customAmbientLight) {
5602
+ promises.push(// @ts-ignore
5603
+ resourceManager.getResourceByRef(ambient.customAmbientLight).then(function(ambientLight) {
5604
+ var _ambientLight;
5605
+ scene.ambientLight.specularTexture = (_ambientLight = ambientLight) == null ? void 0 : _ambientLight.specularTexture;
5606
+ }));
5607
+ }
5608
+ if (ambient.ambientLight && (!useCustomAmbient || useSH)) {
5609
+ promises.push(// @ts-ignore
5610
+ resourceManager.getResourceByRef(ambient.ambientLight).then(function(ambientLight) {
5611
+ if (!useCustomAmbient) {
5612
+ var _ambientLight;
5613
+ scene.ambientLight.specularTexture = (_ambientLight = ambientLight) == null ? void 0 : _ambientLight.specularTexture;
5614
+ }
5615
+ if (useSH) {
5616
+ var _ambientLight1;
5617
+ scene.ambientLight.diffuseSphericalHarmonics = (_ambientLight1 = ambientLight) == null ? void 0 : _ambientLight1.diffuseSphericalHarmonics;
5618
+ }
5619
+ }));
5620
+ }
5560
5621
  }
5561
5622
  var background = data.scene.background;
5562
5623
  scene.background.mode = background.mode;
@@ -5598,6 +5659,9 @@ var SceneLoader = /*#__PURE__*/ function(Loader1) {
5598
5659
  if (shadow.shadowResolution != undefined) scene.shadowResolution = shadow.shadowResolution;
5599
5660
  if (shadow.shadowDistance != undefined) scene.shadowDistance = shadow.shadowDistance;
5600
5661
  if (shadow.shadowCascades != undefined) scene.shadowCascades = shadow.shadowCascades;
5662
+ var _shadow_shadowTwoCascadeSplits;
5663
+ scene.shadowTwoCascadeSplits = (_shadow_shadowTwoCascadeSplits = shadow.shadowTwoCascadeSplits) != null ? _shadow_shadowTwoCascadeSplits : scene.shadowTwoCascadeSplits;
5664
+ shadow.shadowFourCascadeSplits && scene.shadowFourCascadeSplits.copyFrom(shadow.shadowFourCascadeSplits);
5601
5665
  }
5602
5666
  return Promise.all(promises).then(function() {
5603
5667
  resolve(scene);
@@ -6120,5 +6184,5 @@ GALACEAN_animation_event = __decorate([
6120
6184
  registerGLTFExtension("GALACEAN_animation_event", GLTFExtensionMode.AdditiveParse)
6121
6185
  ], GALACEAN_animation_event);
6122
6186
 
6123
- 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 };
6187
+ 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 };
6124
6188
  //# sourceMappingURL=module.js.map