@galacean/engine-loader 1.1.0-beta.4 → 1.1.0-beta.45

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 (31) hide show
  1. package/dist/main.js +393 -256
  2. package/dist/main.js.map +1 -1
  3. package/dist/miniprogram.js +393 -256
  4. package/dist/module.js +395 -258
  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/extensions/EXT_meshopt_compression.d.ts +13 -0
  11. package/types/gltf/extensions/KHR_materials_anisotropy.d.ts +1 -0
  12. package/types/gltf/extensions/MeshoptDecoder.d.ts +8 -0
  13. package/types/gltf/parser/GLTFBufferViewParser.d.ts +5 -0
  14. package/types/gltf/parser/GLTFParserContext.d.ts +4 -2
  15. package/types/gltf/parser/GLTFSceneParser.d.ts +0 -1
  16. package/types/index.d.ts +2 -1
  17. package/types/ktx2/KTX2Loader.d.ts +16 -5
  18. package/types/ktx2/transcoder/AbstractTranscoder.d.ts +1 -1
  19. package/types/ktx2/transcoder/BinomialLLCTranscoder.d.ts +1 -1
  20. package/types/ktx2/transcoder/BinomialLLCWorkerCode.d.ts +1 -1
  21. package/types/resource-deserialize/resources/parser/HierarchyParser.d.ts +36 -0
  22. package/types/resource-deserialize/resources/parser/ParserContext.d.ts +29 -0
  23. package/types/resource-deserialize/resources/parser/ReflectionParser.d.ts +12 -8
  24. package/types/resource-deserialize/resources/prefab/PrefabParser.d.ts +13 -4
  25. package/types/resource-deserialize/resources/prefab/PrefabParserContext.d.ts +5 -0
  26. package/types/resource-deserialize/resources/scene/SceneParser.d.ts +1 -0
  27. package/types/resource-deserialize/resources/scene/SceneParserContext.d.ts +3 -1
  28. package/types/resource-deserialize/resources/schema/BasicSchema.d.ts +20 -15
  29. package/types/resource-deserialize/resources/schema/MaterialSchema.d.ts +1 -1
  30. package/types/resource-deserialize/resources/schema/SceneSchema.d.ts +3 -1
  31. package/types/resource-deserialize/utils/BufferReader.d.ts +1 -1
package/dist/module.js CHANGED
@@ -1,4 +1,4 @@
1
- import { Utils, ModelMesh, BlendShape, Texture2D, Entity, Loader, Transform, Animator, DirectLight, Camera, MeshRenderer, ParticleRenderer, PointLight, SpotLight, Script, SpriteMask, SpriteRenderer, TextRenderer, AnimationClip, AnimationEvent, AnimationRefCurve, Keyframe, AnimationQuaternionCurve, AnimationColorCurve, AnimationVector4Curve, AnimationVector3Curve, AnimationVector2Curve, AnimationFloatArrayCurve, AnimationArrayCurve, AnimationFloatCurve, Scene, resourceLoader, AssetPromise, AssetType, AnimatorController, AnimatorControllerLayer, AnimatorStateMachine, AnimatorStateTransition, TextureCube, TextureFilterMode, TextureCubeFace, AmbientLight, DiffuseMode, Font, ReferResource, IndexFormat, VertexElementFormat, GLCapabilityType, Logger, TextureFormat, request, ContentRestorer, InterpolationType, SkinnedMeshRenderer, PBRMaterial, BlinnPhongMaterial, PBRSpecularMaterial, TextureCoordinate, RenderFace, VertexElement, Buffer, BufferBindFlag, BufferUsage, Skin, TextureWrapMode as TextureWrapMode$1, Material, Shader, SpriteAtlas, Sprite, BackgroundMode, UnlitMaterial } from '@galacean/engine-core';
1
+ import { Utils, ModelMesh, BlendShape, Texture2D, Loader, Entity, Transform, Animator, DirectLight, Camera, MeshRenderer, ParticleRenderer, PointLight, SpotLight, Script, SpriteMask, SpriteRenderer, TextRenderer, AnimationClip, AnimationEvent, AnimationRefCurve, Keyframe, AnimationQuaternionCurve, AnimationColorCurve, AnimationVector4Curve, AnimationVector3Curve, AnimationVector2Curve, AnimationFloatArrayCurve, AnimationArrayCurve, AnimationFloatCurve, Scene, resourceLoader, AssetPromise, AssetType, AnimatorController, AnimatorControllerLayer, AnimatorStateMachine, AnimatorStateTransition, TextureCube, TextureFilterMode, TextureCubeFace, AmbientLight, DiffuseMode, Font, ReferResource, IndexFormat, VertexElementFormat, GLCapabilityType, Logger, TextureFormat, request, ContentRestorer, InterpolationType, SkinnedMeshRenderer, PBRMaterial, BlinnPhongMaterial, PBRSpecularMaterial, TextureCoordinate, RenderFace, VertexElement, Buffer, BufferBindFlag, BufferUsage, Skin, TextureWrapMode as TextureWrapMode$1, Material, Shader, SpriteAtlas, Sprite, BackgroundMode, UnlitMaterial } from '@galacean/engine-core';
2
2
  import { Color, Vector4, Vector3, Vector2, Quaternion, SphericalHarmonics3, MathUtil, BoundingBox, Matrix, Rect } from '@galacean/engine-math';
3
3
  import { GLCompressedTextureInternalFormat } from '@galacean/engine-rhi-webgl';
4
4
  import { DRACODecoder } from '@galacean/engine-draco';
@@ -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
  }
@@ -523,87 +522,50 @@ function _construct(Parent, args, Class) {
523
522
  }
524
523
 
525
524
  var ReflectionParser = /*#__PURE__*/ function() {
526
- function ReflectionParser() {}
527
- ReflectionParser.registerCustomParseComponent = function registerCustomParseComponent(componentType, handle) {
528
- this.customParseComponentHandles[componentType] = handle;
529
- };
530
- ReflectionParser.parseEntity = function parseEntity(entityConfig, engine) {
531
- return ReflectionParser.getEntityByConfig(entityConfig, engine).then(function(entity) {
525
+ function ReflectionParser(_context) {
526
+ this._context = _context;
527
+ }
528
+ var _proto = ReflectionParser.prototype;
529
+ _proto.parseEntity = function parseEntity(entityConfig) {
530
+ return this._getEntityByConfig(entityConfig).then(function(entity) {
532
531
  var _entityConfig_isActive;
533
532
  entity.isActive = (_entityConfig_isActive = entityConfig.isActive) != null ? _entityConfig_isActive : true;
534
533
  var position = entityConfig.position, rotation = entityConfig.rotation, scale = entityConfig.scale;
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
- ReflectionParser.getEntityByConfig = function getEntityByConfig(entityConfig, engine) {
542
- // @ts-ignore
543
- var assetRefId = entityConfig.assetRefId;
544
- if (assetRefId) {
545
- return engine.resourceManager// @ts-ignore
546
- .getResourceByRef({
547
- refId: assetRefId,
548
- key: entityConfig.key,
549
- isClone: entityConfig.isClone
550
- }).then(function(entity) {
551
- entity.name = entityConfig.name;
552
- return entity;
553
- });
554
- } else {
555
- var entity = new Entity(engine, entityConfig.name);
556
- return Promise.resolve(entity);
557
- }
558
- };
559
- ReflectionParser.parseClassObject = function parseClassObject(item, engine, resourceManager) {
560
- if (resourceManager === void 0) resourceManager = engine.resourceManager;
542
+ _proto.parseClassObject = function parseClassObject(item) {
543
+ var _this = this;
561
544
  var Class = Loader.getClass(item.class);
562
545
  var _item_constructParams;
563
546
  var params = (_item_constructParams = item.constructParams) != null ? _item_constructParams : [];
564
- var instance = _construct(Class, [].concat(params));
565
- return this.parsePropsAndMethods(instance, item, engine, resourceManager);
566
- };
567
- ReflectionParser.parseBasicType = function parseBasicType(value, engine, resourceManager) {
568
- if (resourceManager === void 0) resourceManager = engine.resourceManager;
569
- var _this = this;
570
- if (Array.isArray(value)) {
571
- return Promise.all(value.map(function(item) {
572
- return _this.parseBasicType(item, engine, resourceManager);
573
- }));
574
- } else if (typeof value === "object" && value != null) {
575
- if (this._isClass(value)) {
576
- // class object
577
- return this.parseClassObject(value, engine, resourceManager);
578
- } else if (this._isRef(value)) {
579
- // reference object
580
- return resourceManager.getResourceByRef(value);
581
- } else {
582
- // basic type
583
- return Promise.resolve(value);
584
- }
585
- } else {
586
- return Promise.resolve(value);
587
- }
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
+ });
588
554
  };
589
- ReflectionParser.parsePropsAndMethods = function parsePropsAndMethods(instance, item, engine, resourceManager) {
590
- if (resourceManager === void 0) resourceManager = engine.resourceManager;
591
- var _this = this;
555
+ _proto.parsePropsAndMethods = function parsePropsAndMethods(instance, item) {
592
556
  var promises = [];
593
557
  if (item.methods) {
594
558
  for(var methodName in item.methods){
595
559
  var methodParams = item.methods[methodName];
596
560
  for(var i = 0, count = methodParams.length; i < count; i++){
597
- var params = methodParams[i];
598
- var promise = this.parseMethod(instance, methodName, params, engine, resourceManager);
599
- promises.push(promise);
561
+ promises.push(this.parseMethod(instance, methodName, methodParams[i]));
600
562
  }
601
563
  }
602
564
  }
603
565
  if (item.props) {
604
- var _this1 = this, _loop = function(key) {
566
+ var _this = this, _loop = function(key) {
605
567
  var value = item.props[key];
606
- var promise = _this1.parseBasicType(value, engine).then(function(v) {
568
+ var promise = _this.parseBasicType(value, instance[key]).then(function(v) {
607
569
  return instance[key] = v;
608
570
  });
609
571
  promises.push(promise);
@@ -611,27 +573,96 @@ var ReflectionParser = /*#__PURE__*/ function() {
611
573
  for(var key in item.props)_loop(key);
612
574
  }
613
575
  return Promise.all(promises).then(function() {
614
- var handle = _this.customParseComponentHandles[instance.constructor.name];
615
- if (handle) return handle(instance, item, engine);
576
+ var handle = ReflectionParser.customParseComponentHandles[instance.constructor.name];
577
+ if (handle) return handle(instance, item);
616
578
  else return instance;
617
579
  });
618
580
  };
619
- ReflectionParser.parseMethod = function parseMethod(instance, methodName, methodParams, engine, resourceManager) {
620
- if (resourceManager === void 0) resourceManager = engine.resourceManager;
581
+ _proto.parseMethod = function parseMethod(instance, methodName, methodParams) {
621
582
  var _this = this;
622
583
  return Promise.all(methodParams.map(function(param) {
623
- return _this.parseBasicType(param, engine, resourceManager);
584
+ return _this.parseBasicType(param);
624
585
  })).then(function(result) {
625
586
  var _instance;
626
587
  return (_instance = instance)[methodName].apply(_instance, [].concat(result));
627
588
  });
628
589
  };
590
+ _proto.parseBasicType = function parseBasicType(value, originValue) {
591
+ var _this = this;
592
+ if (Array.isArray(value)) {
593
+ return Promise.all(value.map(function(item) {
594
+ return _this.parseBasicType(item);
595
+ }));
596
+ } else if (typeof value === "object" && value != null) {
597
+ if (ReflectionParser._isClass(value)) {
598
+ // class object
599
+ return this.parseClassObject(value);
600
+ } else if (ReflectionParser._isAssetRef(value)) {
601
+ // reference object
602
+ // @ts-ignore
603
+ return this._context.resourceManager.getResourceByRef(value);
604
+ } else if (ReflectionParser._isEntityRef(value)) {
605
+ // entity reference
606
+ return Promise.resolve(this._context.entityMap.get(value.entityId));
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
+ });
630
+ }
631
+ }
632
+ // primitive type
633
+ return Promise.resolve(value);
634
+ };
635
+ _proto._getEntityByConfig = function _getEntityByConfig(entityConfig) {
636
+ // @ts-ignore
637
+ var assetRefId = entityConfig.assetRefId;
638
+ var engine = this._context.engine;
639
+ if (assetRefId) {
640
+ return engine.resourceManager// @ts-ignore
641
+ .getResourceByRef({
642
+ refId: assetRefId,
643
+ key: entityConfig.key,
644
+ isClone: entityConfig.isClone
645
+ }).then(function(entity) {
646
+ entity.name = entityConfig.name;
647
+ return entity;
648
+ });
649
+ } else {
650
+ var entity = new Entity(engine, entityConfig.name);
651
+ return Promise.resolve(entity);
652
+ }
653
+ };
654
+ ReflectionParser.registerCustomParseComponent = function registerCustomParseComponent(componentType, handle) {
655
+ this.customParseComponentHandles[componentType] = handle;
656
+ };
629
657
  ReflectionParser._isClass = function _isClass(value) {
630
658
  return value["class"] != undefined;
631
659
  };
632
- ReflectionParser._isRef = function _isRef(value) {
660
+ ReflectionParser._isAssetRef = function _isAssetRef(value) {
633
661
  return value["refId"] != undefined;
634
662
  };
663
+ ReflectionParser._isEntityRef = function _isEntityRef(value) {
664
+ return value["entityId"] != undefined;
665
+ };
635
666
  return ReflectionParser;
636
667
  }();
637
668
  (function() {
@@ -899,6 +930,8 @@ var SceneParserContext = /*#__PURE__*/ function() {
899
930
  this.assets = new Map();
900
931
  this.entityConfigMap = new Map();
901
932
  this.rootIds = [];
933
+ this.engine = scene.engine;
934
+ this.resourceManager = scene.engine.resourceManager;
902
935
  }
903
936
  var _proto = SceneParserContext.prototype;
904
937
  _proto.destroy = function destroy() {
@@ -915,7 +948,7 @@ var SceneParserContext = /*#__PURE__*/ function() {
915
948
  function SceneParser(context) {
916
949
  var _this = this;
917
950
  this.context = context;
918
- this._engine = this.context.scene.engine;
951
+ this._engine = context.scene.engine;
919
952
  this._organizeEntities = this._organizeEntities.bind(this);
920
953
  this._parseComponents = this._parseComponents.bind(this);
921
954
  this._clearAndResolveScene = this._clearAndResolveScene.bind(this);
@@ -923,22 +956,24 @@ var SceneParserContext = /*#__PURE__*/ function() {
923
956
  _this._reject = reject;
924
957
  _this._resolve = resolve;
925
958
  });
959
+ this._reflectionParser = new ReflectionParser(context);
926
960
  }
927
961
  var _proto = SceneParser.prototype;
928
962
  /** start parse the scene */ _proto.start = function start() {
929
963
  this._parseEntities().then(this._organizeEntities).then(this._parseComponents).then(this._clearAndResolveScene).then(this._resolve).catch(this._reject);
930
964
  };
931
965
  _proto._parseEntities = function _parseEntities() {
966
+ var _this = this;
932
967
  var entitiesConfig = this.context.originalData.entities;
933
968
  var entityConfigMap = this.context.entityConfigMap;
934
969
  var entitiesMap = this.context.entityMap;
935
970
  var rootIds = this.context.rootIds;
936
- var engine = this._engine;
971
+ this._engine;
937
972
  var promises = entitiesConfig.map(function(entityConfig) {
938
973
  entityConfigMap.set(entityConfig.id, entityConfig);
939
974
  // record root entities
940
975
  if (!entityConfig.parent) rootIds.push(entityConfig.id);
941
- return ReflectionParser.parseEntity(entityConfig, engine);
976
+ return _this._reflectionParser.parseEntity(entityConfig);
942
977
  });
943
978
  return Promise.all(promises).then(function(entities) {
944
979
  for(var i = 0, l = entities.length; i < l; i++){
@@ -976,7 +1011,7 @@ var SceneParserContext = /*#__PURE__*/ function() {
976
1011
  component = entity.getComponent(Loader.getClass(key));
977
1012
  }
978
1013
  component = component || entity.addComponent(Loader.getClass(key));
979
- var promise = ReflectionParser.parsePropsAndMethods(component, componentConfig, entity.engine);
1014
+ var promise = this._reflectionParser.parsePropsAndMethods(component, componentConfig);
980
1015
  promises.push(promise);
981
1016
  }
982
1017
  }
@@ -1532,10 +1567,10 @@ var TextureWrapMode;
1532
1567
  /**
1533
1568
  * @internal
1534
1569
  */ var GLTFParserContext = /*#__PURE__*/ function() {
1535
- function GLTFParserContext(glTFResource, resourceManager, keepMeshData) {
1570
+ function GLTFParserContext(glTFResource, resourceManager, params) {
1536
1571
  this.glTFResource = glTFResource;
1537
1572
  this.resourceManager = resourceManager;
1538
- this.keepMeshData = keepMeshData;
1573
+ this.params = params;
1539
1574
  this.accessorBufferCache = {};
1540
1575
  this._resourceCache = new Map();
1541
1576
  this.contentRestorer = new GLTFContentRestorer(glTFResource);
@@ -1589,11 +1624,37 @@ var TextureWrapMode;
1589
1624
  _this.get(9),
1590
1625
  _this.get(2)
1591
1626
  ]).then(function() {
1627
+ var glTFResource = _this.glTFResource;
1628
+ if (glTFResource.skins || glTFResource.animations) {
1629
+ _this._createAnimator(_this, glTFResource.animations);
1630
+ }
1592
1631
  _this.resourceManager.addContentRestorer(_this.contentRestorer);
1593
- return _this.glTFResource;
1632
+ return glTFResource;
1594
1633
  });
1595
1634
  });
1596
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
+ };
1597
1658
  _proto._handleSubAsset = function _handleSubAsset(resource, type, index) {
1598
1659
  var _this = this;
1599
1660
  var glTFResourceKey = glTFResourceMap[type];
@@ -2233,7 +2294,7 @@ var SupercompressionScheme;
2233
2294
  alphaSliceByteLength: sgdReader.nextUint32()
2234
2295
  };
2235
2296
  }
2236
- var endpointsByteOffset = sgdByteOffset + sgdReader.offset;
2297
+ var endpointsByteOffset = sgdByteOffset + sgdReader.position;
2237
2298
  var selectorsByteOffset = endpointsByteOffset + endpointsByteLength;
2238
2299
  var tablesByteOffset = selectorsByteOffset + selectorsByteLength;
2239
2300
  var extendedByteOffset = tablesByteOffset + tablesByteLength;
@@ -2425,6 +2486,25 @@ var AbstractTranscoder = /*#__PURE__*/ function() {
2425
2486
  }();
2426
2487
 
2427
2488
  /** @internal */ function TranscodeWorkerCode$1() {
2489
+ var initPromise;
2490
+ var init = function init(wasmBinary) {
2491
+ if (!initPromise) {
2492
+ initPromise = new Promise(function(resolve, reject) {
2493
+ var BasisModule = {
2494
+ wasmBinary: wasmBinary,
2495
+ onRuntimeInitialized: function() {
2496
+ return resolve(BasisModule);
2497
+ },
2498
+ onAbort: reject
2499
+ };
2500
+ self["BASIS"](BasisModule);
2501
+ }).then(function(BasisModule) {
2502
+ BasisModule.initializeBasis();
2503
+ return BasisModule.KTX2File;
2504
+ });
2505
+ }
2506
+ return initPromise;
2507
+ };
2428
2508
  self.onmessage = function onmessage(event) {
2429
2509
  var message = event.data;
2430
2510
  switch(message.type){
@@ -2539,6 +2619,10 @@ function transcode(buffer, targetFormat, KTX2File) {
2539
2619
  cleanup();
2540
2620
  throw new Error("Invalid or unsupported .ktx2 file");
2541
2621
  }
2622
+ if (!ktx2File.startTranscoding()) {
2623
+ cleanup();
2624
+ throw new Error("KTX2 startTranscoding failed");
2625
+ }
2542
2626
  var width = ktx2File.getWidth();
2543
2627
  var height = ktx2File.getHeight();
2544
2628
  var layerCount = ktx2File.getLayers() || 1;
@@ -2547,6 +2631,7 @@ function transcode(buffer, targetFormat, KTX2File) {
2547
2631
  var faceCount = ktx2File.getFaces();
2548
2632
  var format = getTranscodeFormatFromTarget(targetFormat, hasAlpha);
2549
2633
  var faces = new Array(faceCount);
2634
+ var isBC = format === 2 || format === 3 || format === 7;
2550
2635
  for(var face = 0; face < faceCount; face++){
2551
2636
  var mipmaps = new Array(levelCount);
2552
2637
  for(var mip = 0; mip < levelCount; mip++){
@@ -2554,8 +2639,15 @@ function transcode(buffer, targetFormat, KTX2File) {
2554
2639
  var mipWidth = void 0, mipHeight = void 0;
2555
2640
  for(var layer = 0; layer < layerCount; layer++){
2556
2641
  var levelInfo = ktx2File.getImageLevelInfo(mip, layer, face);
2557
- mipWidth = levelInfo.origWidth;
2558
- 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
+ }
2559
2651
  var dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, format));
2560
2652
  var status = ktx2File.transcodeImage(dst, mip, layer, face, format, 0, -1, -1);
2561
2653
  if (!status) {
@@ -2621,7 +2713,7 @@ function transcode(buffer, targetFormat, KTX2File) {
2621
2713
  } else {
2622
2714
  var funcCode = TranscodeWorkerCode$1.toString();
2623
2715
  var transcodeString = funcCode.substring(funcCode.indexOf("{"), funcCode.lastIndexOf("}") + 1);
2624
- var workerCode = "\n " + jsCode + "\n var init = (" + _init.toString() + ")();\n " + transcode.toString() + "\n " + transcodeString + "\n ";
2716
+ var workerCode = "\n " + jsCode + "\n " + transcode.toString() + "\n " + transcodeString + "\n ";
2625
2717
  var workerURL = URL.createObjectURL(new Blob([
2626
2718
  workerCode
2627
2719
  ], {
@@ -2867,10 +2959,14 @@ var KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2867
2959
  return Loader1.apply(this, arguments);
2868
2960
  }
2869
2961
  var _proto = KTX2Loader1.prototype;
2870
- _proto.initialize = function initialize(engine, configuration) {
2962
+ _proto.initialize = function initialize(_, configuration) {
2871
2963
  if (configuration.ktx2Loader) {
2872
2964
  var options = configuration.ktx2Loader;
2873
- 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) {
2874
2970
  return KTX2Loader._getKhronosTranscoder(options.workerCount).init();
2875
2971
  } else {
2876
2972
  return KTX2Loader._getBinomialLLCTranscoder(options.workerCount).init();
@@ -2889,27 +2985,6 @@ var KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2889
2985
  });
2890
2986
  });
2891
2987
  };
2892
- _proto._isKhronosSupported = function _isKhronosSupported(priorityFormats, engine) {
2893
- if (priorityFormats === void 0) priorityFormats = [
2894
- KTX2TargetFormat.ASTC,
2895
- KTX2TargetFormat.ETC,
2896
- KTX2TargetFormat.BC7,
2897
- KTX2TargetFormat.BC1_BC3,
2898
- KTX2TargetFormat.PVRTC,
2899
- KTX2TargetFormat.R8G8B8A8
2900
- ];
2901
- var supportedList = new Array();
2902
- if (Array.isArray(priorityFormats[0])) {
2903
- for(var i = 0; i < priorityFormats.length; i++){
2904
- supportedList.push(KTX2Loader._detectSupportedFormat(engine._hardwareRenderer, priorityFormats[i]));
2905
- }
2906
- } else {
2907
- supportedList.push(KTX2Loader._detectSupportedFormat(engine._hardwareRenderer, priorityFormats));
2908
- }
2909
- return supportedList.every(function(format) {
2910
- return KhronosTranscoder.transcoderMap[format];
2911
- });
2912
- };
2913
2988
  /**
2914
2989
  * Destroy ktx2 transcoder worker.
2915
2990
  */ KTX2Loader1.destroy = function destroy() {
@@ -2922,7 +2997,8 @@ var KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2922
2997
  /** @internal */ KTX2Loader1._parseBuffer = function _parseBuffer(buffer, engine, params) {
2923
2998
  var _params;
2924
2999
  var ktx2Container = new KTX2Container(buffer);
2925
- var formatPriorities = (_params = params) == null ? void 0 : _params.priorityFormats;
3000
+ var _params_priorityFormats;
3001
+ var formatPriorities = (_params_priorityFormats = (_params = params) == null ? void 0 : _params.priorityFormats) != null ? _params_priorityFormats : KTX2Loader._priorityFormats[ktx2Container.isUASTC ? "uastc" : "etc1s"];
2926
3002
  var targetFormat = KTX2Loader._decideTargetFormat(engine, ktx2Container, formatPriorities);
2927
3003
  var transcodeResultPromise;
2928
3004
  if (KTX2Loader._isBinomialInit || !KhronosTranscoder.transcoderMap[targetFormat] || !ktx2Container.isUASTC) {
@@ -2989,18 +3065,22 @@ var KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
2989
3065
  return targetFormat;
2990
3066
  };
2991
3067
  KTX2Loader1._detectSupportedFormat = function _detectSupportedFormat(renderer, priorityFormats) {
2992
- if (priorityFormats === void 0) priorityFormats = [
2993
- KTX2TargetFormat.ASTC,
2994
- KTX2TargetFormat.ETC,
2995
- KTX2TargetFormat.BC7,
2996
- KTX2TargetFormat.BC1_BC3,
2997
- KTX2TargetFormat.PVRTC
2998
- ];
2999
3068
  for(var i = 0; i < priorityFormats.length; i++){
3000
- var capabilities = this._supportedMap[priorityFormats[i]];
3001
- for(var j = 0; j < capabilities.length; j++){
3002
- if (renderer.canIUse(capabilities[j])) {
3003
- 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;
3004
3084
  }
3005
3085
  }
3006
3086
  }
@@ -3037,6 +3117,23 @@ var KTX2Loader = (_KTX2Loader = /*#__PURE__*/ function(Loader1) {
3037
3117
  return KTX2Loader1;
3038
3118
  }(Loader), function() {
3039
3119
  _KTX2Loader._isBinomialInit = false;
3120
+ }(), function() {
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
+ };
3040
3137
  }(), function() {
3041
3138
  var _obj;
3042
3139
  _KTX2Loader._supportedMap = (_obj = {}, _obj[KTX2TargetFormat.ASTC] = [
@@ -3057,6 +3154,11 @@ KTX2Loader = __decorate([
3057
3154
  "ktx2"
3058
3155
  ])
3059
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 = {}));
3060
3162
 
3061
3163
  /**
3062
3164
  * @internal
@@ -3500,6 +3602,7 @@ var GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3500
3602
  var promises = new Array();
3501
3603
  // parse samplers
3502
3604
  for(var j = 0, m = samplers.length; j < m; j++)_loop(j);
3605
+ promises.push(context.get(GLTFParserType.Scene));
3503
3606
  return Promise.all(promises).then(function() {
3504
3607
  for(var j = 0, m = channels.length; j < m; j++){
3505
3608
  var gltfChannel = channels[j];
@@ -3511,6 +3614,10 @@ var GLTFAnimationParser = /*#__PURE__*/ function(GLTFParser1) {
3511
3614
  relativePath = relativePath === "" ? "" + entity.name : entity.name + "/" + relativePath;
3512
3615
  entity = entity.parent;
3513
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
+ }
3514
3621
  var ComponentType = void 0;
3515
3622
  var propertyName = void 0;
3516
3623
  switch(target.path){
@@ -3847,7 +3954,7 @@ var GLTFMeshParser = (_GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
3847
3954
  return context.get(GLTFParserType.Buffer).then(function(buffers) {
3848
3955
  return GLTFUtils.getAccessorData(glTF, indexAccessor, buffers);
3849
3956
  });
3850
- }, context.keepMeshData).then(resolve);
3957
+ }, context.params.keepMeshData).then(resolve);
3851
3958
  }
3852
3959
  });
3853
3960
  };
@@ -4025,9 +4132,9 @@ var GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4025
4132
  }
4026
4133
  var _proto = GLTFSceneParser.prototype;
4027
4134
  _proto.parse = function parse(context, index) {
4028
- var _this = this;
4029
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;
4030
4136
  var sceneInfo = scenes[index];
4137
+ var sceneExtensions = sceneInfo.extensions;
4031
4138
  var engine = glTFResource.engine;
4032
4139
  var isDefaultScene = scene === index;
4033
4140
  var sceneNodes = sceneInfo.nodes;
@@ -4053,18 +4160,7 @@ var GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4053
4160
  promises.push(this._parseEntityComponent(context, sceneNodes[i1]));
4054
4161
  }
4055
4162
  return Promise.all(promises).then(function() {
4056
- if (isDefaultScene) {
4057
- return Promise.all([
4058
- context.get(GLTFParserType.Skin),
4059
- context.get(GLTFParserType.Animation)
4060
- ]).then(function(param) {
4061
- var skins = param[0], animations = param[1];
4062
- if (skins || animations) {
4063
- _this._createAnimator(context, animations);
4064
- }
4065
- return sceneRoot;
4066
- });
4067
- }
4163
+ GLTFParser.executeExtensionsAdditiveAndParse(sceneExtensions, context, sceneRoot, sceneInfo);
4068
4164
  return sceneRoot;
4069
4165
  });
4070
4166
  };
@@ -4176,28 +4272,6 @@ var GLTFSceneParser = /*#__PURE__*/ function(GLTFParser1) {
4176
4272
  for(var i = 0; i < glTFMeshPrimitives.length; i++)_loop(i);
4177
4273
  return Promise.all(promises);
4178
4274
  };
4179
- _proto._createAnimator = function _createAnimator(context, animations) {
4180
- var defaultSceneRoot = context.glTFResource.defaultSceneRoot;
4181
- var animator = defaultSceneRoot.addComponent(Animator);
4182
- var animatorController = new AnimatorController();
4183
- var layer = new AnimatorControllerLayer("layer");
4184
- var animatorStateMachine = new AnimatorStateMachine();
4185
- animatorController.addLayer(layer);
4186
- animator.animatorController = animatorController;
4187
- layer.stateMachine = animatorStateMachine;
4188
- if (animations) {
4189
- for(var i = 0; i < animations.length; i++){
4190
- var animationClip = animations[i];
4191
- var name = animationClip.name;
4192
- var uniqueName = animatorStateMachine.makeUniqueStateName(name);
4193
- if (uniqueName !== name) {
4194
- console.warn("AnimatorState name is existed, name: " + name + " reset to " + uniqueName);
4195
- }
4196
- var animatorState = animatorStateMachine.addState(uniqueName);
4197
- animatorState.clip = animationClip;
4198
- }
4199
- }
4200
- };
4201
4275
  _proto._computeLocalBounds = function _computeLocalBounds(skinnedMeshRenderer, mesh, bones, rootBone, inverseBindMatrices) {
4202
4276
  var rootBoneIndex = bones.indexOf(rootBone);
4203
4277
  if (rootBoneIndex !== -1) {
@@ -4347,8 +4421,7 @@ var GLTFTextureParser = (_GLTFTextureParser = /*#__PURE__*/ function(GLTFParser1
4347
4421
  mipmap: (_samplerInfo = samplerInfo) == null ? void 0 : _samplerInfo.mipmap
4348
4422
  }
4349
4423
  }).then(function(texture) {
4350
- var _texture;
4351
- (_texture = texture).name || (_texture.name = textureName || imageName || "texture_" + index);
4424
+ texture.name = textureName || imageName || texture.name || "texture_" + index;
4352
4425
  useSampler && GLTFUtils.parseSampler(texture, samplerInfo);
4353
4426
  return texture;
4354
4427
  });
@@ -4430,11 +4503,12 @@ var GLTFLoader = /*#__PURE__*/ function(Loader1) {
4430
4503
  }
4431
4504
  var _proto = GLTFLoader.prototype;
4432
4505
  _proto.load = function load(item, resourceManager) {
4433
- var _params;
4434
4506
  var url = item.url;
4435
4507
  var params = item.params;
4436
4508
  var glTFResource = new GLTFResource(resourceManager.engine, url);
4437
- var context = new GLTFParserContext(glTFResource, resourceManager, !!((_params = params) == null ? void 0 : _params.keepMeshData));
4509
+ var context = new GLTFParserContext(glTFResource, resourceManager, _extends({
4510
+ keepMeshData: false
4511
+ }, params));
4438
4512
  return context.parse();
4439
4513
  };
4440
4514
  return GLTFLoader;
@@ -5082,6 +5156,12 @@ var MaterialLoader = /*#__PURE__*/ function(Loader1) {
5082
5156
  materialShaderData.setTexture(key, texture);
5083
5157
  }));
5084
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;
5085
5165
  }
5086
5166
  };
5087
5167
  var engine = resourceManager.engine;
@@ -5217,9 +5297,10 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader1) {
5217
5297
  var _loop = function(i) {
5218
5298
  var atlasItem = atlasItems[i];
5219
5299
  if (atlasItem.img) {
5300
+ var _atlasItem_type;
5220
5301
  chainPromises.push(resourceManager.load({
5221
5302
  url: Utils.resolveAbsoluteUrl(item.url, atlasItem.img),
5222
- type: AssetType.Texture2D,
5303
+ type: (_atlasItem_type = atlasItem.type) != null ? _atlasItem_type : AssetType.Texture2D,
5223
5304
  params: {
5224
5305
  format: format,
5225
5306
  mipmap: mipmap
@@ -5259,7 +5340,7 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader1) {
5259
5340
  };
5260
5341
  _proto._makeSprite = function _makeSprite(engine, config, texture) {
5261
5342
  // Generate a SpriteAtlas object.
5262
- var region = config.region, atlasRegionOffset = config.atlasRegionOffset, atlasRegion = config.atlasRegion, pivot = config.pivot, border = config.border;
5343
+ var region = config.region, atlasRegionOffset = config.atlasRegionOffset, atlasRegion = config.atlasRegion, pivot = config.pivot, border = config.border, width = config.width, height = config.height;
5263
5344
  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);
5264
5345
  if (texture) {
5265
5346
  var invW = 1 / texture.width;
@@ -5271,6 +5352,8 @@ var SpriteAtlasLoader = /*#__PURE__*/ function(Loader1) {
5271
5352
  }
5272
5353
  config.atlasRotated && (sprite.atlasRotated = true);
5273
5354
  }
5355
+ isNaN(width) || (sprite.width = width);
5356
+ isNaN(height) || (sprite.height = height);
5274
5357
  return sprite;
5275
5358
  };
5276
5359
  return SpriteAtlasLoader;
@@ -5289,26 +5372,39 @@ var SpriteLoader = /*#__PURE__*/ function(Loader1) {
5289
5372
  var _proto = SpriteLoader.prototype;
5290
5373
  _proto.load = function load(item, resourceManager) {
5291
5374
  var _this = this;
5292
- return new AssetPromise(function(resolve, reject) {
5293
- _this.request(item.url, _extends({}, item, {
5294
- type: "json"
5295
- })).then(function(data) {
5296
- if (data.belongToAtlas) {
5297
- resourceManager// @ts-ignore
5298
- .getResourceByRef(data.belongToAtlas).then(function(atlas) {
5299
- resolve(atlas.getSprite(data.fullPath));
5300
- }).catch(reject);
5301
- } else if (data.texture) {
5302
- resourceManager// @ts-ignore
5303
- .getResourceByRef(data.texture).then(function(texture) {
5304
- resolve(new Sprite(resourceManager.engine, texture, data.region, data.pivot, data.border));
5305
- }).catch(reject);
5306
- } else {
5307
- resolve(new Sprite(resourceManager.engine, null, data.region, data.pivot, data.border));
5308
- }
5309
- }).catch(reject);
5375
+ return this.request(item.url, _extends({}, item, {
5376
+ type: "json"
5377
+ })).then(function(data) {
5378
+ return data.belongToAtlas ? _this._loadFromAtlas(resourceManager, data) : _this._loadFromTexture(resourceManager, data);
5379
+ });
5380
+ };
5381
+ _proto._loadFromAtlas = function _loadFromAtlas(resourceManager, data) {
5382
+ var _this = this;
5383
+ return resourceManager// @ts-ignore
5384
+ .getResourceByRef(data.belongToAtlas).then(function(atlas) {
5385
+ return atlas.getSprite(data.fullPath) || _this._loadFromTexture(resourceManager, data);
5310
5386
  });
5311
5387
  };
5388
+ _proto._loadFromTexture = function _loadFromTexture(resourceManager, data) {
5389
+ if (data.texture) {
5390
+ return resourceManager// @ts-ignore
5391
+ .getResourceByRef(data.texture).then(function(texture) {
5392
+ var sprite = new Sprite(resourceManager.engine, texture, data.region, data.pivot, data.border);
5393
+ var width = data.width, height = data.height;
5394
+ isNaN(width) || (sprite.width = width);
5395
+ isNaN(height) || (sprite.height = height);
5396
+ return sprite;
5397
+ });
5398
+ } else {
5399
+ return new AssetPromise(function(resolve) {
5400
+ var sprite = new Sprite(resourceManager.engine, null, data.region, data.pivot, data.border);
5401
+ var width = data.width, height = data.height;
5402
+ isNaN(width) || (sprite.width = width);
5403
+ isNaN(height) || (sprite.height = height);
5404
+ resolve(sprite);
5405
+ });
5406
+ }
5407
+ };
5312
5408
  return SpriteLoader;
5313
5409
  }(Loader);
5314
5410
  SpriteLoader = __decorate([
@@ -5355,9 +5451,13 @@ var Texture2DLoader = /*#__PURE__*/ function(Loader1) {
5355
5451
  type: "image"
5356
5452
  });
5357
5453
  _this.request(url, requestConfig).then(function(image) {
5358
- var _params, _params1;
5359
- var params = item.params;
5360
- var texture = new Texture2D(resourceManager.engine, image.width, image.height, (_params = params) == null ? void 0 : _params.format, (_params1 = params) == null ? void 0 : _params1.mipmap);
5454
+ var _item_params;
5455
+ 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;
5456
+ var texture = new Texture2D(resourceManager.engine, image.width, image.height, format, mipmap);
5457
+ texture.anisoLevel = anisoLevel != null ? anisoLevel : texture.anisoLevel;
5458
+ texture.filterMode = filterMode != null ? filterMode : texture.filterMode;
5459
+ texture.wrapModeU = wrapModeU != null ? wrapModeU : texture.wrapModeU;
5460
+ texture.wrapModeV = wrapModeV != null ? wrapModeV : texture.wrapModeV;
5361
5461
  texture.setImageSource(image);
5362
5462
  texture.generateMipmaps();
5363
5463
  if (url.indexOf("data:") !== 0) {
@@ -5455,6 +5555,39 @@ TextureCubeLoader = __decorate([
5455
5555
  ])
5456
5556
  ], TextureCubeLoader);
5457
5557
 
5558
+ var ProjectLoader = /*#__PURE__*/ function(Loader1) {
5559
+ _inherits(ProjectLoader, Loader1);
5560
+ function ProjectLoader() {
5561
+ return Loader1.apply(this, arguments);
5562
+ }
5563
+ var _proto = ProjectLoader.prototype;
5564
+ _proto.load = function load(item, resourceManager) {
5565
+ var _this = this;
5566
+ var engine = resourceManager.engine;
5567
+ return new AssetPromise(function(resolve, reject) {
5568
+ _this.request(item.url, {
5569
+ type: "json"
5570
+ }).then(function(data) {
5571
+ // @ts-ignore
5572
+ engine.resourceManager.initVirtualResources(data.files);
5573
+ return resourceManager.load({
5574
+ type: AssetType.Scene,
5575
+ url: data.scene
5576
+ }).then(function(scene) {
5577
+ engine.sceneManager.activeScene = scene;
5578
+ resolve();
5579
+ });
5580
+ }).catch(reject);
5581
+ });
5582
+ };
5583
+ return ProjectLoader;
5584
+ }(Loader);
5585
+ ProjectLoader = __decorate([
5586
+ resourceLoader(AssetType.Project, [
5587
+ "proj"
5588
+ ], false)
5589
+ ], ProjectLoader);
5590
+
5458
5591
  var SceneLoader = /*#__PURE__*/ function(Loader1) {
5459
5592
  _inherits(SceneLoader, Loader1);
5460
5593
  function SceneLoader() {
@@ -5472,33 +5605,34 @@ var SceneLoader = /*#__PURE__*/ function(Loader1) {
5472
5605
  var promises = [];
5473
5606
  // parse ambient light
5474
5607
  var ambient = data.scene.ambient;
5475
- var useCustomAmbient = ambient.specularMode === "Custom";
5476
- if (useCustomAmbient && ambient.customAmbientLight) {
5477
- // @ts-ignore
5478
- // prettier-ignore
5479
- var customAmbientPromise = resourceManager.getResourceByRef(ambient.customAmbientLight).then(function(ambientLight) {
5480
- scene.ambientLight = ambientLight;
5481
- scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5482
- scene.ambientLight.specularIntensity = ambient.specularIntensity;
5483
- scene.ambientLight.diffuseMode = ambient.diffuseMode;
5484
- scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5485
- });
5486
- promises.push(customAmbientPromise);
5487
- } else if (!useCustomAmbient && ambient.ambientLight) {
5488
- // @ts-ignore
5489
- // prettier-ignore
5490
- var ambientLightPromise = resourceManager.getResourceByRef(ambient.ambientLight).then(function(ambientLight) {
5491
- scene.ambientLight = ambientLight;
5492
- scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5493
- scene.ambientLight.specularIntensity = ambient.specularIntensity;
5494
- scene.ambientLight.diffuseMode = ambient.diffuseMode;
5495
- scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5496
- });
5497
- promises.push(ambientLightPromise);
5498
- } else {
5608
+ if (ambient) {
5609
+ var useCustomAmbient = ambient.specularMode === "Custom";
5610
+ var useSH = ambient.diffuseMode === DiffuseMode.SphericalHarmonics;
5499
5611
  scene.ambientLight.diffuseIntensity = ambient.diffuseIntensity;
5500
5612
  scene.ambientLight.specularIntensity = ambient.specularIntensity;
5613
+ scene.ambientLight.diffuseMode = ambient.diffuseMode;
5501
5614
  scene.ambientLight.diffuseSolidColor.copyFrom(ambient.diffuseSolidColor);
5615
+ scene.ambientLight.specularTextureDecodeRGBM = true;
5616
+ if (useCustomAmbient && ambient.customAmbientLight) {
5617
+ promises.push(// @ts-ignore
5618
+ resourceManager.getResourceByRef(ambient.customAmbientLight).then(function(ambientLight) {
5619
+ var _ambientLight;
5620
+ scene.ambientLight.specularTexture = (_ambientLight = ambientLight) == null ? void 0 : _ambientLight.specularTexture;
5621
+ }));
5622
+ }
5623
+ if (ambient.ambientLight && (!useCustomAmbient || useSH)) {
5624
+ promises.push(// @ts-ignore
5625
+ resourceManager.getResourceByRef(ambient.ambientLight).then(function(ambientLight) {
5626
+ if (!useCustomAmbient) {
5627
+ var _ambientLight;
5628
+ scene.ambientLight.specularTexture = (_ambientLight = ambientLight) == null ? void 0 : _ambientLight.specularTexture;
5629
+ }
5630
+ if (useSH) {
5631
+ var _ambientLight1;
5632
+ scene.ambientLight.diffuseSphericalHarmonics = (_ambientLight1 = ambientLight) == null ? void 0 : _ambientLight1.diffuseSphericalHarmonics;
5633
+ }
5634
+ }));
5635
+ }
5502
5636
  }
5503
5637
  var background = data.scene.background;
5504
5638
  scene.background.mode = background.mode;
@@ -5540,6 +5674,9 @@ var SceneLoader = /*#__PURE__*/ function(Loader1) {
5540
5674
  if (shadow.shadowResolution != undefined) scene.shadowResolution = shadow.shadowResolution;
5541
5675
  if (shadow.shadowDistance != undefined) scene.shadowDistance = shadow.shadowDistance;
5542
5676
  if (shadow.shadowCascades != undefined) scene.shadowCascades = shadow.shadowCascades;
5677
+ var _shadow_shadowTwoCascadeSplits;
5678
+ scene.shadowTwoCascadeSplits = (_shadow_shadowTwoCascadeSplits = shadow.shadowTwoCascadeSplits) != null ? _shadow_shadowTwoCascadeSplits : scene.shadowTwoCascadeSplits;
5679
+ shadow.shadowFourCascadeSplits && scene.shadowFourCascadeSplits.copyFrom(shadow.shadowFourCascadeSplits);
5543
5680
  }
5544
5681
  return Promise.all(promises).then(function() {
5545
5682
  resolve(scene);
@@ -5555,13 +5692,13 @@ SceneLoader = __decorate([
5555
5692
  "scene"
5556
5693
  ], true)
5557
5694
  ], SceneLoader);
5558
- ReflectionParser.registerCustomParseComponent("TextRenderer", /*#__PURE__*/ _async_to_generator(function(instance, item, engine) {
5695
+ ReflectionParser.registerCustomParseComponent("TextRenderer", /*#__PURE__*/ _async_to_generator(function(instance, item) {
5559
5696
  var props;
5560
5697
  return __generator(this, function(_state) {
5561
5698
  props = item.props;
5562
5699
  if (!props.font) {
5563
5700
  // @ts-ignore
5564
- instance.font = Font.createFromOS(engine, props.fontFamily || "Arial");
5701
+ instance.font = Font.createFromOS(instance.engine, props.fontFamily || "Arial");
5565
5702
  }
5566
5703
  return [
5567
5704
  2,
@@ -5617,7 +5754,7 @@ var KHR_draco_mesh_compression = (_KHR_draco_mesh_compression = /*#__PURE__*/ fu
5617
5754
  throw "BlendShape animation is not supported when using draco.";
5618
5755
  }, function() {
5619
5756
  return decodedGeometry.index.array;
5620
- }, context.keepMeshData);
5757
+ }, context.params.keepMeshData);
5621
5758
  });
5622
5759
  });
5623
5760
  };
@@ -6062,5 +6199,5 @@ GALACEAN_animation_event = __decorate([
6062
6199
  registerGLTFExtension("GALACEAN_animation_event", GLTFExtensionMode.AdditiveParse)
6063
6200
  ], GALACEAN_animation_event);
6064
6201
 
6065
- 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 };
6202
+ 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 };
6066
6203
  //# sourceMappingURL=module.js.map