@galacean/engine 1.2.0-beta.0 → 1.2.0-beta.2

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/browser.js CHANGED
@@ -5599,7 +5599,7 @@
5599
5599
  if (Utils.isBase64Url(relativeUrl)) {
5600
5600
  return relativeUrl;
5601
5601
  }
5602
- return relativeUrl ? baseUrl.replace(/\/+$/, "") + "/" + relativeUrl.replace(/^\/+/, "") : baseUrl;
5602
+ return relativeUrl ? new URL(relativeUrl, baseUrl).href : baseUrl;
5603
5603
  };
5604
5604
  /**
5605
5605
  * @internal
@@ -5742,14 +5742,6 @@
5742
5742
  });
5743
5743
  return result;
5744
5744
  };
5745
- Utils._formatRelativePath = function _formatRelativePath(path) {
5746
- // For example input is "a/b", "/a/b", "./a/b", "./a/./b", "./a/../a/b", output is "a/b"
5747
- return path.split("/").filter(Boolean).reduce(function(acc, cur) {
5748
- if (cur === "..") acc.pop();
5749
- else if (cur !== ".") acc.push(cur);
5750
- return acc;
5751
- }, []).join("/");
5752
- };
5753
5745
  Utils._insertionSort = function _insertionSort(a, from, to, compareFunc) {
5754
5746
  for(var i = from + 1; i < to; i++){
5755
5747
  var j = void 0;
@@ -6630,6 +6622,7 @@
6630
6622
  GLCapabilityType["colorBufferHalfFloat"] = "EXT_color_buffer_half_float";
6631
6623
  GLCapabilityType["textureFilterAnisotropic"] = "EXT_texture_filter_anisotropic";
6632
6624
  GLCapabilityType["blendMinMax"] = "EXT_blend_minmax";
6625
+ GLCapabilityType["fragDepth"] = "EXT_frag_depth";
6633
6626
  GLCapabilityType["astc"] = "WEBGL_compressed_texture_astc";
6634
6627
  GLCapabilityType["astc_webkit"] = "WEBKIT_WEBGL_compressed_texture_astc";
6635
6628
  GLCapabilityType["etc"] = "WEBGL_compressed_texture_etc";
@@ -8300,23 +8293,34 @@
8300
8293
  * @param shader - code
8301
8294
  * @param isFrag - Whether it is a fragment shader.
8302
8295
  * */ ShaderFactory.convertTo300 = function convertTo300(shader, isFrag) {
8303
- /** replace attribute and in */ shader = shader.replace(/\battribute\b/g, "in");
8304
8296
  shader = shader.replace(/\bvarying\b/g, isFrag ? "in" : "out");
8305
- /** replace api */ shader = shader.replace(/\btexture(2D|Cube)\b/g, "texture");
8306
- shader = shader.replace(/\btexture(2D|Cube)LodEXT\b/g, "textureLod");
8297
+ shader = shader.replace(/\btexture(2D|Cube)\b/g, "texture");
8298
+ shader = shader.replace(/\btexture2DProj\b/g, "textureProj");
8307
8299
  if (isFrag) {
8308
- var isMRT = /\bgl_FragData\[.+?\]/g.test(shader);
8309
- if (isMRT) {
8310
- shader = shader.replace(/\bgl_FragColor\b/g, "gl_FragData[0]");
8311
- var result = shader.match(/\bgl_FragData\[.+?\]/g);
8312
- shader = this._replaceMRTShader(shader, result);
8313
- } else {
8314
- shader = shader.replace(/void\s+?main\s*\(/g, "out vec4 glFragColor;\nvoid main(");
8315
- shader = shader.replace(/\bgl_FragColor\b/g, "glFragColor");
8300
+ shader = shader.replace(/\btexture(2D|Cube)LodEXT\b/g, "textureLod");
8301
+ shader = shader.replace(/\btexture(2D|Cube)GradEXT\b/g, "textureGrad");
8302
+ shader = shader.replace(/\btexture2DProjLodEXT\b/g, "textureProjLod");
8303
+ shader = shader.replace(/\btexture2DProjGradEXT\b/g, "textureProjGrad");
8304
+ shader = shader.replace(/\bgl_FragDepthEXT\b/g, "gl_FragDepth");
8305
+ if (!ShaderFactory._has300Output(shader)) {
8306
+ var isMRT = /\bgl_FragData\[.+?\]/g.test(shader);
8307
+ if (isMRT) {
8308
+ shader = shader.replace(/\bgl_FragColor\b/g, "gl_FragData[0]");
8309
+ var result = shader.match(/\bgl_FragData\[.+?\]/g);
8310
+ shader = this._replaceMRTShader(shader, result);
8311
+ } else {
8312
+ shader = shader.replace(/void\s+?main\s*\(/g, "out vec4 glFragColor;\nvoid main(");
8313
+ shader = shader.replace(/\bgl_FragColor\b/g, "glFragColor");
8314
+ }
8316
8315
  }
8316
+ } else {
8317
+ shader = shader.replace(/\battribute\b/g, "in");
8317
8318
  }
8318
8319
  return shader;
8319
8320
  };
8321
+ ShaderFactory._has300Output = function _has300Output(fragmentShader) {
8322
+ return ShaderFactory._has300OutInFragReg.test(fragmentShader);
8323
+ };
8320
8324
  ShaderFactory._replaceMRTShader = function _replaceMRTShader(shader, result) {
8321
8325
  var declaration = "";
8322
8326
  var mrtIndexSet = new Set();
@@ -8338,11 +8342,16 @@
8338
8342
  /** @internal */ ShaderFactory._shaderExtension = [
8339
8343
  "GL_EXT_shader_texture_lod",
8340
8344
  "GL_OES_standard_derivatives",
8341
- "GL_EXT_draw_buffers"
8345
+ "GL_EXT_draw_buffers",
8346
+ "GL_EXT_frag_depth"
8342
8347
  ].map(function(e) {
8343
8348
  return "#extension " + e + " : enable\n";
8344
8349
  }).join("");
8345
8350
  })();
8351
+ (function() {
8352
+ ShaderFactory._has300OutInFragReg = /\bout\s+(?:\w+\s+)?(?:vec4)\s+(?:\w+)\s*;/ // [layout(location = 0)] out [highp] vec4 [color];
8353
+ ;
8354
+ })();
8346
8355
  /**
8347
8356
  * Shader tag key.
8348
8357
  */ var ShaderTagKey = /*#__PURE__*/ function() {
@@ -8626,6 +8635,10 @@
8626
8635
  this.materialUniformBlock = new ShaderUniformBlock();
8627
8636
  this.otherUniformBlock = new ShaderUniformBlock();
8628
8637
  /** @internal */ this._uploadRenderCount = -1;
8638
+ /** @internal */ this._uploadSceneId = -1;
8639
+ /** @internal */ this._uploadCameraId = -1;
8640
+ /** @internal */ this._uploadRendererId = -1;
8641
+ /** @internal */ this._uploadMaterialId = -1;
8629
8642
  this.attributeLocation = Object.create(null);
8630
8643
  this._activeTextureUint = 0;
8631
8644
  this._engine = engine;
@@ -11760,6 +11773,7 @@
11760
11773
  this._isContentLost = false;
11761
11774
  };
11762
11775
  _proto._onDestroy = function _onDestroy() {
11776
+ GraphicsResource1.prototype._onDestroy.call(this);
11763
11777
  this._platformPrimitive.destroy();
11764
11778
  this._vertexElementMap = null;
11765
11779
  };
@@ -16244,10 +16258,8 @@
16244
16258
  var vertexStride = this.createVertexElements(vertexElements);
16245
16259
  // vertices
16246
16260
  var vertexBuffer = this._vertexBuffers[index] = new Buffer(engine, exports.BufferBindFlag.VertexBuffer, MAX_VERTEX_COUNT * vertexStride, exports.BufferUsage.Dynamic);
16247
- vertexBuffer.isGCIgnored = true;
16248
16261
  // indices
16249
16262
  var indiceBuffer = this._indiceBuffers[index] = new Buffer(engine, exports.BufferBindFlag.IndexBuffer, MAX_VERTEX_COUNT * 6, exports.BufferUsage.Dynamic);
16250
- indiceBuffer.isGCIgnored = true;
16251
16263
  mesh.setVertexBufferBinding(vertexBuffer, vertexStride);
16252
16264
  mesh.setIndexBufferBinding(indiceBuffer, exports.IndexFormat.UInt16);
16253
16265
  mesh.setVertexElements(vertexElements);
@@ -19871,6 +19883,7 @@
19871
19883
  1
19872
19884
  ]); // left-top
19873
19885
  var blitMaterial = new Material(engine, Shader.find("blit"));
19886
+ blitMaterial._addReferCount(1);
19874
19887
  blitMaterial.renderState.depthState.enabled = false;
19875
19888
  blitMaterial.renderState.depthState.writeEnabled = false;
19876
19889
  this.blitMesh = this._createBlitMesh(engine, vertices);
@@ -20566,6 +20579,9 @@
20566
20579
  projectionParams.set(flipProjection ? -1 : 1, virtualCamera.nearClipPlane, virtualCamera.farClipPlane, 0);
20567
20580
  shaderData.setVector4(RenderContext._cameraProjectionProperty, projectionParams);
20568
20581
  };
20582
+ _proto.garbageCollection = function garbageCollection() {
20583
+ this.camera = null;
20584
+ };
20569
20585
  return RenderContext;
20570
20586
  }();
20571
20587
  (function() {
@@ -24646,66 +24662,84 @@
24646
24662
  })(ParticleInstanceVertexAttribute || (ParticleInstanceVertexAttribute = {}));
24647
24663
  /**
24648
24664
  * @internal
24649
- */ var ParticleBufferUtils = /*#__PURE__*/ function() {
24650
- var ParticleBufferUtils = function ParticleBufferUtils(engine) {
24651
- this.billboardVertexElement = new VertexElement(ParticleBillboardVertexAttribute.cornerTextureCoordinate, 0, exports.VertexElementFormat.Vector4, 0);
24652
- this.instanceVertexElements = [
24653
- new VertexElement(ParticleInstanceVertexAttribute.ShapePositionStartLifeTime, 0, exports.VertexElementFormat.Vector4, 1, 1),
24654
- new VertexElement(ParticleInstanceVertexAttribute.DirectionTime, 16, exports.VertexElementFormat.Vector4, 1, 1),
24655
- new VertexElement(ParticleInstanceVertexAttribute.StartColor, 32, exports.VertexElementFormat.Vector4, 1, 1),
24656
- new VertexElement(ParticleInstanceVertexAttribute.StartSize, 48, exports.VertexElementFormat.Vector3, 1, 1),
24657
- new VertexElement(ParticleInstanceVertexAttribute.StartRotation0, 60, exports.VertexElementFormat.Vector3, 1, 1),
24658
- new VertexElement(ParticleInstanceVertexAttribute.StartSpeed, 72, exports.VertexElementFormat.Float, 1, 1),
24659
- new VertexElement(ParticleInstanceVertexAttribute.Random0, 76, exports.VertexElementFormat.Vector4, 1, 1),
24660
- new VertexElement(ParticleInstanceVertexAttribute.Random1, 92, exports.VertexElementFormat.Vector4, 1, 1),
24661
- new VertexElement(ParticleInstanceVertexAttribute.SimulationWorldPosition, 108, exports.VertexElementFormat.Vector3, 1, 1),
24662
- new VertexElement(ParticleInstanceVertexAttribute.SimulationWorldRotation, 120, exports.VertexElementFormat.Vector4, 1, 1),
24663
- new VertexElement(ParticleInstanceVertexAttribute.SimulationUV, 136, exports.VertexElementFormat.Vector4, 1, 1)
24664
- ];
24665
- this.instanceVertexStride = 152;
24666
- this.instanceVertexFloatStride = this.instanceVertexStride / 4;
24667
- this.startLifeTimeOffset = 3;
24668
- this.timeOffset = 7;
24669
- this.simulationUVOffset = 34;
24670
- this.billboardIndexCount = 6;
24671
- var stride = 16;
24672
- var billboardGeometryBuffer = new Buffer(engine, exports.BufferBindFlag.VertexBuffer, stride * 4, exports.BufferUsage.Static, false);
24673
- this.billboardVertexBufferBinding = new VertexBufferBinding(billboardGeometryBuffer, stride);
24674
- var indexBuffer = new Buffer(engine, exports.BufferBindFlag.IndexBuffer, this.billboardIndexCount, exports.BufferUsage.Static, false);
24675
- this.billboardIndexBufferBinding = new IndexBufferBinding(indexBuffer, exports.IndexFormat.UInt8);
24676
- this.setBufferData();
24677
- };
24678
- var _proto = ParticleBufferUtils.prototype;
24679
- _proto.setBufferData = function setBufferData() {
24680
- this.billboardVertexBufferBinding.buffer.setData(new Float32Array([
24681
- -0.5,
24682
- -0.5,
24683
- 0,
24684
- 1,
24685
- 0.5,
24686
- -0.5,
24687
- 1,
24688
- 1,
24689
- 0.5,
24690
- 0.5,
24691
- 1,
24692
- 0,
24693
- -0.5,
24694
- 0.5,
24695
- 0,
24696
- 0
24697
- ]));
24698
- this.billboardIndexBufferBinding.buffer.setData(new Uint8Array([
24699
- 0,
24700
- 2,
24701
- 3,
24702
- 0,
24703
- 1,
24704
- 2
24705
- ]));
24706
- };
24707
- return ParticleBufferUtils;
24708
- }();
24665
+ */ var ParticleBufferUtils = function ParticleBufferUtils(engine) {
24666
+ this.billboardVertexElement = new VertexElement(ParticleBillboardVertexAttribute.cornerTextureCoordinate, 0, exports.VertexElementFormat.Vector4, 0);
24667
+ this.instanceVertexElements = [
24668
+ new VertexElement(ParticleInstanceVertexAttribute.ShapePositionStartLifeTime, 0, exports.VertexElementFormat.Vector4, 1, 1),
24669
+ new VertexElement(ParticleInstanceVertexAttribute.DirectionTime, 16, exports.VertexElementFormat.Vector4, 1, 1),
24670
+ new VertexElement(ParticleInstanceVertexAttribute.StartColor, 32, exports.VertexElementFormat.Vector4, 1, 1),
24671
+ new VertexElement(ParticleInstanceVertexAttribute.StartSize, 48, exports.VertexElementFormat.Vector3, 1, 1),
24672
+ new VertexElement(ParticleInstanceVertexAttribute.StartRotation0, 60, exports.VertexElementFormat.Vector3, 1, 1),
24673
+ new VertexElement(ParticleInstanceVertexAttribute.StartSpeed, 72, exports.VertexElementFormat.Float, 1, 1),
24674
+ new VertexElement(ParticleInstanceVertexAttribute.Random0, 76, exports.VertexElementFormat.Vector4, 1, 1),
24675
+ new VertexElement(ParticleInstanceVertexAttribute.Random1, 92, exports.VertexElementFormat.Vector4, 1, 1),
24676
+ new VertexElement(ParticleInstanceVertexAttribute.SimulationWorldPosition, 108, exports.VertexElementFormat.Vector3, 1, 1),
24677
+ new VertexElement(ParticleInstanceVertexAttribute.SimulationWorldRotation, 120, exports.VertexElementFormat.Vector4, 1, 1),
24678
+ new VertexElement(ParticleInstanceVertexAttribute.SimulationUV, 136, exports.VertexElementFormat.Vector4, 1, 1)
24679
+ ];
24680
+ this.instanceVertexStride = 152;
24681
+ this.instanceVertexFloatStride = this.instanceVertexStride / 4;
24682
+ this.startLifeTimeOffset = 3;
24683
+ this.timeOffset = 7;
24684
+ this.simulationUVOffset = 34;
24685
+ this.billboardIndexCount = 6;
24686
+ var stride = 16;
24687
+ var billboardGeometryBuffer = new Buffer(engine, exports.BufferBindFlag.VertexBuffer, stride * 4, exports.BufferUsage.Static, false);
24688
+ billboardGeometryBuffer.isGCIgnored = true;
24689
+ this.billboardVertexBufferBinding = new VertexBufferBinding(billboardGeometryBuffer, stride);
24690
+ var indexBuffer = new Buffer(engine, exports.BufferBindFlag.IndexBuffer, this.billboardIndexCount, exports.BufferUsage.Static, false);
24691
+ indexBuffer.isGCIgnored = true;
24692
+ this.billboardIndexBufferBinding = new IndexBufferBinding(indexBuffer, exports.IndexFormat.UInt8);
24693
+ var billboardGeometryData = new Float32Array([
24694
+ -0.5,
24695
+ -0.5,
24696
+ 0,
24697
+ 1,
24698
+ 0.5,
24699
+ -0.5,
24700
+ 1,
24701
+ 1,
24702
+ 0.5,
24703
+ 0.5,
24704
+ 1,
24705
+ 0,
24706
+ -0.5,
24707
+ 0.5,
24708
+ 0,
24709
+ 0
24710
+ ]);
24711
+ var indexData = new Uint8Array([
24712
+ 0,
24713
+ 2,
24714
+ 3,
24715
+ 0,
24716
+ 1,
24717
+ 2
24718
+ ]);
24719
+ billboardGeometryBuffer.setData(billboardGeometryData);
24720
+ indexBuffer.setData(indexData);
24721
+ // Register content restorer
24722
+ engine.resourceManager.addContentRestorer(new /*#__PURE__*/ (function(ContentRestorer) {
24723
+ var _class = function _class() {
24724
+ return ContentRestorer.call(this, billboardGeometryBuffer);
24725
+ };
24726
+ _inherits$2(_class, ContentRestorer);
24727
+ var _proto = _class.prototype;
24728
+ _proto.restoreContent = function restoreContent() {
24729
+ billboardGeometryBuffer.setData(billboardGeometryData);
24730
+ };
24731
+ return _class;
24732
+ }(ContentRestorer))());
24733
+ engine.resourceManager.addContentRestorer(new /*#__PURE__*/ (function(ContentRestorer) {
24734
+ var _class = function _class() {
24735
+ return ContentRestorer.call(this, indexBuffer);
24736
+ };
24737
+ _inherits$2(_class, ContentRestorer);
24738
+ var _proto = _class.prototype;
24739
+ _proto.restoreContent = function restoreContent() {};
24740
+ return _class;
24741
+ }(ContentRestorer))());
24742
+ };
24709
24743
  var blitFs = "#define GLSLIFY 1\nuniform mediump sampler2D renderer_BlitTexture;\n#ifdef HAS_TEX_LOD\nuniform float renderer_BlitMipLevel;\n#endif\nvarying vec2 v_uv;void main(){\n#ifdef HAS_TEX_LOD\ngl_FragColor=texture2DLodEXT(renderer_BlitTexture,v_uv,renderer_BlitMipLevel);\n#else\ngl_FragColor=texture2D(renderer_BlitTexture,v_uv);\n#endif\n}"; // eslint-disable-line
24710
24744
  var blitVs = "#define GLSLIFY 1\nattribute vec4 POSITION_UV;varying vec2 v_uv;void main(){gl_Position=vec4(POSITION_UV.xy,0.0,1.0);v_uv=POSITION_UV.zw;}"; // eslint-disable-line
24711
24745
  var skyProceduralFs = "#define GLSLIFY 1\n#include <common>\nconst float MIE_G=-0.990;const float MIE_G2=0.9801;const float SKY_GROUND_THRESHOLD=0.02;uniform float material_SunSize;uniform float material_SunSizeConvergence;uniform vec4 scene_SunlightColor;uniform vec3 scene_SunlightDirection;varying vec3 v_GroundColor;varying vec3 v_SkyColor;\n#ifdef MATERIAL_SUN_HIGH_QUALITY\nvarying vec3 v_Vertex;\n#elif defined(MATERIAL_SUN_SIMPLE)\nvarying vec3 v_RayDir;\n#else\nvarying float v_SkyGroundFactor;\n#endif\n#if defined(MATERIAL_SUN_HIGH_QUALITY)||defined(MATERIAL_SUN_SIMPLE)\nvarying vec3 v_SunColor;\n#endif\n#if defined(ENGINE_IS_COLORSPACE_GAMMA)\n#define LINEAR_2_OUTPUT(color) sqrt(color)\n#endif\nfloat getMiePhase(float eyeCos,float eyeCos2){float temp=1.0+MIE_G2-2.0*MIE_G*eyeCos;temp=pow(temp,pow(material_SunSize,0.65)*10.0);temp=max(temp,1.0e-4);temp=1.5*((1.0-MIE_G2)/(2.0+MIE_G2))*(1.0+eyeCos2)/temp;return temp;}float calcSunAttenuation(vec3 lightPos,vec3 ray){\n#ifdef MATERIAL_SUN_HIGH_QUALITY\nfloat focusedEyeCos=pow(clamp(dot(lightPos,ray),0.0,1.0),material_SunSizeConvergence);return getMiePhase(-focusedEyeCos,focusedEyeCos*focusedEyeCos);\n#else\nvec3 delta=lightPos-ray;float dist=length(delta);float spot=1.0-smoothstep(0.0,material_SunSize,dist);return spot*spot;\n#endif\n}void main(){vec3 col=vec3(0.0,0.0,0.0);\n#ifdef MATERIAL_SUN_HIGH_QUALITY\nvec3 ray=normalize(v_Vertex);float y=ray.y/SKY_GROUND_THRESHOLD;\n#elif defined(MATERIAL_SUN_SIMPLE)\nvec3 ray=v_RayDir;float y=ray.y/SKY_GROUND_THRESHOLD;\n#else\nfloat y=v_SkyGroundFactor;\n#endif\ncol=mix(v_SkyColor,v_GroundColor,clamp(y,0.0,1.0));\n#if defined(MATERIAL_SUN_HIGH_QUALITY)||defined(MATERIAL_SUN_SIMPLE)\nif(y<0.0)col+=v_SunColor*calcSunAttenuation(-scene_SunlightDirection,-ray);\n#endif\n#ifdef ENGINE_IS_COLORSPACE_GAMMA\ncol=LINEAR_2_OUTPUT(col);\n#endif\ngl_FragColor=vec4(col,1.0);\n#ifndef ENGINE_IS_COLORSPACE_GAMMA\ngl_FragColor=linearToGamma(gl_FragColor);\n#endif\n}"; // eslint-disable-line
@@ -25378,7 +25412,6 @@
25378
25412
  resourceManager._restoreGraphicResources();
25379
25413
  console.log("Graphic resource restored.");
25380
25414
  // Restore resources content
25381
- this._particleBufferUtils.setBufferData();
25382
25415
  resourceManager._restoreResourcesContent().then(function() {
25383
25416
  console.log("Graphic resource content restored.\n\n" + "Device restored.");
25384
25417
  _this.dispatch("devicerestored", _this);
@@ -25393,6 +25426,7 @@
25393
25426
  this._spriteRenderDataPool.garbageCollection();
25394
25427
  this._spriteMaskRenderDataPool.garbageCollection();
25395
25428
  this._textRenderDataPool.garbageCollection();
25429
+ this._renderContext.garbageCollection();
25396
25430
  };
25397
25431
  _create_class$2(Engine, [
25398
25432
  {
@@ -25745,7 +25779,6 @@
25745
25779
  };
25746
25780
  _proto._createPlane = function _createPlane(engine) {
25747
25781
  var mesh = new ModelMesh(engine);
25748
- mesh.isGCIgnored = true;
25749
25782
  var indices = new Uint8Array([
25750
25783
  1,
25751
25784
  2,
@@ -27712,22 +27745,6 @@
27712
27745
  maskManager.postRender(renderer);
27713
27746
  }
27714
27747
  };
27715
- _proto.destroy = function destroy() {
27716
- this._batchedQueue = null;
27717
- var _this = this, meshes = _this._meshes, vertexBuffers = _this._vertexBuffers, indiceBuffers = _this._indiceBuffers;
27718
- for(var i = 0, n = meshes.length; i < n; ++i){
27719
- meshes[i].destroy();
27720
- }
27721
- this._meshes = null;
27722
- for(var i1 = 0, n1 = vertexBuffers.length; i1 < n1; ++i1){
27723
- vertexBuffers[i1].destroy();
27724
- }
27725
- this._vertexBuffers = null;
27726
- for(var i2 = 0, n2 = indiceBuffers.length; i2 < n2; ++i2){
27727
- indiceBuffers[i2].destroy();
27728
- }
27729
- this._indiceBuffers = null;
27730
- };
27731
27748
  return SpriteBatcher;
27732
27749
  }(Basic2DBatcher);
27733
27750
  (function() {
@@ -27752,11 +27769,10 @@
27752
27769
  if (elements.length === 0) {
27753
27770
  return;
27754
27771
  }
27755
- var engine = camera.engine, scene = camera.scene;
27772
+ var engine = camera.engine, cameraId = camera.instanceId, cameraData = camera.shaderData;
27773
+ var _camera_scene = camera.scene, sceneData = _camera_scene.shaderData, sceneId = _camera_scene.instanceId;
27756
27774
  var renderCount = engine._renderCount;
27757
27775
  var rhi = engine._hardwareRenderer;
27758
- var sceneData = scene.shaderData;
27759
- var cameraData = camera.shaderData;
27760
27776
  var pipelineStageKey = RenderContext.pipelineStageKey;
27761
27777
  var renderQueueType = this._renderQueueType;
27762
27778
  for(var i = 0, n = elements.length; i < n; i++){
@@ -27768,9 +27784,8 @@
27768
27784
  var primitive = data.primitive;
27769
27785
  var renderer = data.component;
27770
27786
  var material = data.material;
27771
- var rendererData = renderer.shaderData;
27772
- var materialData = material.shaderData;
27773
- var renderStates = material.renderStates;
27787
+ var rendererData = renderer.shaderData, rendererId = renderer.instanceId;
27788
+ var materialData = material.shaderData, materialId = material.instanceId, renderStates = material.renderStates;
27774
27789
  // union render global macro and material self macro.
27775
27790
  ShaderMacroCollection.unionCollection(renderer._globalShaderMacro, materialData._macroCollection, compileMacros);
27776
27791
  for(var j = 0, m = shaderPasses.length; j < m; j++){
@@ -27796,33 +27811,33 @@
27796
27811
  program.uploadAll(program.materialUniformBlock, materialData);
27797
27812
  // UnGroup textures should upload default value, texture uint maybe change by logic of texture bind.
27798
27813
  program.uploadUnGroupTextures();
27799
- program._uploadScene = scene;
27800
- program._uploadCamera = camera;
27801
- program._uploadRenderer = renderer;
27802
- program._uploadMaterial = material;
27814
+ program._uploadSceneId = sceneId;
27815
+ program._uploadCameraId = cameraId;
27816
+ program._uploadRendererId = rendererId;
27817
+ program._uploadMaterialId = materialId;
27803
27818
  program._uploadRenderCount = renderCount;
27804
27819
  } else {
27805
- if (program._uploadScene !== scene) {
27820
+ if (program._uploadSceneId !== sceneId) {
27806
27821
  program.uploadAll(program.sceneUniformBlock, sceneData);
27807
- program._uploadScene = scene;
27822
+ program._uploadSceneId = sceneId;
27808
27823
  } else if (switchProgram) {
27809
27824
  program.uploadTextures(program.sceneUniformBlock, sceneData);
27810
27825
  }
27811
- if (program._uploadCamera !== camera) {
27826
+ if (program._uploadCameraId !== cameraId) {
27812
27827
  program.uploadAll(program.cameraUniformBlock, cameraData);
27813
- program._uploadCamera = camera;
27828
+ program._uploadCameraId = cameraId;
27814
27829
  } else if (switchProgram) {
27815
27830
  program.uploadTextures(program.cameraUniformBlock, cameraData);
27816
27831
  }
27817
- if (program._uploadRenderer !== renderer) {
27832
+ if (program._uploadRendererId !== rendererId) {
27818
27833
  program.uploadAll(program.rendererUniformBlock, rendererData);
27819
- program._uploadRenderer = renderer;
27834
+ program._uploadRendererId = rendererId;
27820
27835
  } else if (switchProgram) {
27821
27836
  program.uploadTextures(program.rendererUniformBlock, rendererData);
27822
27837
  }
27823
- if (program._uploadMaterial !== material) {
27838
+ if (program._uploadMaterialId !== materialId) {
27824
27839
  program.uploadAll(program.materialUniformBlock, materialData);
27825
- program._uploadMaterial = material;
27840
+ program._uploadMaterialId = materialId;
27826
27841
  } else if (switchProgram) {
27827
27842
  program.uploadTextures(program.materialUniformBlock, materialData);
27828
27843
  }
@@ -36604,7 +36619,7 @@
36604
36619
  var cap = this.capabilityList;
36605
36620
  var isWebGL2 = this.rhi.isWebGL2;
36606
36621
  var requireExtension = this.rhi.requireExtension.bind(this.rhi);
36607
- var shaderVertexID = exports.GLCapabilityType.shaderVertexID, standardDerivatives = exports.GLCapabilityType.standardDerivatives, shaderTextureLod = exports.GLCapabilityType.shaderTextureLod, elementIndexUint = exports.GLCapabilityType.elementIndexUint, depthTexture = exports.GLCapabilityType.depthTexture, vertexArrayObject = exports.GLCapabilityType.vertexArrayObject, instancedArrays = exports.GLCapabilityType.instancedArrays, multipleSample = exports.GLCapabilityType.multipleSample, drawBuffers = exports.GLCapabilityType.drawBuffers, blendMinMax = exports.GLCapabilityType.blendMinMax, astc = exports.GLCapabilityType.astc, astc_webkit = exports.GLCapabilityType.astc_webkit, etc = exports.GLCapabilityType.etc, etc_webkit = exports.GLCapabilityType.etc_webkit, etc1 = exports.GLCapabilityType.etc1, etc1_webkit = exports.GLCapabilityType.etc1_webkit, pvrtc = exports.GLCapabilityType.pvrtc, pvrtc_webkit = exports.GLCapabilityType.pvrtc_webkit, s3tc = exports.GLCapabilityType.s3tc, s3tc_webkit = exports.GLCapabilityType.s3tc_webkit, bptc = exports.GLCapabilityType.bptc, textureFloat = exports.GLCapabilityType.textureFloat, textureHalfFloat = exports.GLCapabilityType.textureHalfFloat, textureFloatLinear = exports.GLCapabilityType.textureFloatLinear, textureHalfFloatLinear = exports.GLCapabilityType.textureHalfFloatLinear, WEBGL_colorBufferFloat = exports.GLCapabilityType.WEBGL_colorBufferFloat, colorBufferFloat = exports.GLCapabilityType.colorBufferFloat, colorBufferHalfFloat = exports.GLCapabilityType.colorBufferHalfFloat, textureFilterAnisotropic = exports.GLCapabilityType.textureFilterAnisotropic;
36622
+ var shaderVertexID = exports.GLCapabilityType.shaderVertexID, standardDerivatives = exports.GLCapabilityType.standardDerivatives, shaderTextureLod = exports.GLCapabilityType.shaderTextureLod, elementIndexUint = exports.GLCapabilityType.elementIndexUint, depthTexture = exports.GLCapabilityType.depthTexture, vertexArrayObject = exports.GLCapabilityType.vertexArrayObject, instancedArrays = exports.GLCapabilityType.instancedArrays, multipleSample = exports.GLCapabilityType.multipleSample, drawBuffers = exports.GLCapabilityType.drawBuffers, blendMinMax = exports.GLCapabilityType.blendMinMax, astc = exports.GLCapabilityType.astc, astc_webkit = exports.GLCapabilityType.astc_webkit, etc = exports.GLCapabilityType.etc, etc_webkit = exports.GLCapabilityType.etc_webkit, etc1 = exports.GLCapabilityType.etc1, etc1_webkit = exports.GLCapabilityType.etc1_webkit, pvrtc = exports.GLCapabilityType.pvrtc, pvrtc_webkit = exports.GLCapabilityType.pvrtc_webkit, s3tc = exports.GLCapabilityType.s3tc, s3tc_webkit = exports.GLCapabilityType.s3tc_webkit, bptc = exports.GLCapabilityType.bptc, textureFloat = exports.GLCapabilityType.textureFloat, textureHalfFloat = exports.GLCapabilityType.textureHalfFloat, textureFloatLinear = exports.GLCapabilityType.textureFloatLinear, textureHalfFloatLinear = exports.GLCapabilityType.textureHalfFloatLinear, WEBGL_colorBufferFloat = exports.GLCapabilityType.WEBGL_colorBufferFloat, colorBufferFloat = exports.GLCapabilityType.colorBufferFloat, colorBufferHalfFloat = exports.GLCapabilityType.colorBufferHalfFloat, textureFilterAnisotropic = exports.GLCapabilityType.textureFilterAnisotropic, fragDepth = exports.GLCapabilityType.fragDepth;
36608
36623
  cap.set(shaderVertexID, isWebGL2);
36609
36624
  cap.set(standardDerivatives, isWebGL2 || !!requireExtension(standardDerivatives));
36610
36625
  cap.set(shaderTextureLod, isWebGL2 || !!requireExtension(shaderTextureLod));
@@ -36622,6 +36637,7 @@
36622
36637
  cap.set(colorBufferFloat, isWebGL2 && !!requireExtension(colorBufferFloat) || !!requireExtension(WEBGL_colorBufferFloat));
36623
36638
  cap.set(colorBufferHalfFloat, isWebGL2 && !!requireExtension(colorBufferFloat) || !!requireExtension(colorBufferHalfFloat));
36624
36639
  cap.set(textureFilterAnisotropic, !!requireExtension(textureFilterAnisotropic));
36640
+ cap.set(fragDepth, isWebGL2 || !!requireExtension(fragDepth));
36625
36641
  cap.set(astc, !!(requireExtension(astc) || requireExtension(astc_webkit)));
36626
36642
  cap.set(etc, !!(requireExtension(etc) || requireExtension(etc_webkit)));
36627
36643
  cap.set(etc1, !!(requireExtension(etc1) || requireExtension(etc1_webkit)));
@@ -39315,10 +39331,11 @@
39315
39331
  entity.isActive = (_entityConfig_isActive = entityConfig.isActive) != null ? _entityConfig_isActive : entity.isActive;
39316
39332
  var _entityConfig_name;
39317
39333
  entity.name = (_entityConfig_name = entityConfig.name) != null ? _entityConfig_name : entity.name;
39318
- var position = entityConfig.position, rotation = entityConfig.rotation, scale = entityConfig.scale;
39334
+ var position = entityConfig.position, rotation = entityConfig.rotation, scale = entityConfig.scale, layer = entityConfig.layer;
39319
39335
  if (position) entity.transform.position.copyFrom(position);
39320
39336
  if (rotation) entity.transform.rotation.copyFrom(rotation);
39321
39337
  if (scale) entity.transform.scale.copyFrom(scale);
39338
+ if (layer) entity.layer = layer;
39322
39339
  return entity;
39323
39340
  };
39324
39341
  _proto._traverseAddEntityToMap = function _traverseAddEntityToMap(entity, context, path) {
@@ -40472,114 +40489,68 @@
40472
40489
  };
40473
40490
  GLTFUtils.getAccessorBuffer = function getAccessorBuffer(context, bufferViews, accessor) {
40474
40491
  var componentType = accessor.componentType;
40475
- var _accessor_bufferView;
40476
- var bufferViewIndex = (_accessor_bufferView = accessor.bufferView) != null ? _accessor_bufferView : 0;
40477
- var bufferView = bufferViews[bufferViewIndex];
40478
- return context.get(exports.GLTFParserType.BufferView, accessor.bufferView).then(function(bufferViewData) {
40479
- var bufferIndex = bufferView.buffer;
40480
- var _bufferViewData_byteOffset;
40481
- var bufferByteOffset = (_bufferViewData_byteOffset = bufferViewData.byteOffset) != null ? _bufferViewData_byteOffset : 0;
40482
- var _accessor_byteOffset;
40483
- var byteOffset = (_accessor_byteOffset = accessor.byteOffset) != null ? _accessor_byteOffset : 0;
40484
- var TypedArray = GLTFUtils.getComponentType(componentType);
40485
- var dataElementSize = GLTFUtils.getAccessorTypeSize(accessor.type);
40486
- var dataElementBytes = TypedArray.BYTES_PER_ELEMENT;
40487
- var elementStride = dataElementSize * dataElementBytes;
40488
- var accessorCount = accessor.count;
40489
- var bufferStride = bufferView.byteStride;
40490
- var bufferInfo;
40491
- // According to the glTF official documentation only byteStride not undefined is allowed
40492
- if (bufferStride !== undefined && bufferStride !== elementStride) {
40493
- var bufferSlice = Math.floor(byteOffset / bufferStride);
40494
- var bufferCacheKey = bufferViewIndex + ":" + componentType + ":" + bufferSlice + ":" + accessorCount;
40495
- var accessorBufferCache = context.accessorBufferCache;
40496
- bufferInfo = accessorBufferCache[bufferCacheKey];
40497
- if (!bufferInfo) {
40498
- var offset = bufferByteOffset + bufferSlice * bufferStride;
40499
- var count = accessorCount * (bufferStride / dataElementBytes);
40500
- var data = new TypedArray(bufferViewData.buffer, offset, count);
40501
- accessorBufferCache[bufferCacheKey] = bufferInfo = new BufferInfo(data, true, bufferStride);
40502
- bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(bufferIndex, TypedArray, offset, count));
40492
+ var TypedArray = GLTFUtils.getComponentType(componentType);
40493
+ var dataElementSize = GLTFUtils.getAccessorTypeSize(accessor.type);
40494
+ var dataElementBytes = TypedArray.BYTES_PER_ELEMENT;
40495
+ var elementStride = dataElementSize * dataElementBytes;
40496
+ var accessorCount = accessor.count;
40497
+ var promise;
40498
+ if (accessor.bufferView !== undefined) {
40499
+ var bufferViewIndex = accessor.bufferView;
40500
+ var bufferView = bufferViews[bufferViewIndex];
40501
+ promise = context.get(exports.GLTFParserType.BufferView, accessor.bufferView).then(function(bufferViewData) {
40502
+ var bufferIndex = bufferView.buffer;
40503
+ var _bufferViewData_byteOffset;
40504
+ var bufferByteOffset = (_bufferViewData_byteOffset = bufferViewData.byteOffset) != null ? _bufferViewData_byteOffset : 0;
40505
+ var _accessor_byteOffset;
40506
+ var byteOffset = (_accessor_byteOffset = accessor.byteOffset) != null ? _accessor_byteOffset : 0;
40507
+ var bufferStride = bufferView.byteStride;
40508
+ var bufferInfo;
40509
+ // According to the glTF official documentation only byteStride not undefined is allowed
40510
+ if (bufferStride !== undefined && bufferStride !== elementStride) {
40511
+ var bufferSlice = Math.floor(byteOffset / bufferStride);
40512
+ var bufferCacheKey = bufferViewIndex + ":" + componentType + ":" + bufferSlice + ":" + accessorCount;
40513
+ var accessorBufferCache = context.accessorBufferCache;
40514
+ bufferInfo = accessorBufferCache[bufferCacheKey];
40515
+ if (!bufferInfo) {
40516
+ var offset = bufferByteOffset + bufferSlice * bufferStride;
40517
+ var count = accessorCount * (bufferStride / dataElementBytes);
40518
+ var data = new TypedArray(bufferViewData.buffer, offset, count);
40519
+ accessorBufferCache[bufferCacheKey] = bufferInfo = new BufferInfo(data, true, bufferStride);
40520
+ bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(bufferIndex, TypedArray, offset, count));
40521
+ }
40522
+ } else {
40523
+ var offset1 = bufferByteOffset + byteOffset;
40524
+ var count1 = accessorCount * dataElementSize;
40525
+ var data1 = new TypedArray(bufferViewData.buffer, offset1, count1);
40526
+ bufferInfo = new BufferInfo(data1, false, elementStride);
40527
+ bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(bufferIndex, TypedArray, offset1, count1));
40503
40528
  }
40504
- } else {
40505
- var offset1 = bufferByteOffset + byteOffset;
40506
- var count1 = accessorCount * dataElementSize;
40507
- var data1 = new TypedArray(bufferViewData.buffer, offset1, count1);
40508
- bufferInfo = new BufferInfo(data1, false, elementStride);
40509
- bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(bufferIndex, TypedArray, offset1, count1));
40510
- }
40511
- if (accessor.sparse) {
40512
- return GLTFUtils.processingSparseData(context, accessor, bufferInfo).then(function() {
40513
- return bufferInfo;
40514
- });
40515
- }
40516
- return bufferInfo;
40517
- });
40529
+ return bufferInfo;
40530
+ });
40531
+ } else {
40532
+ var count = accessorCount * dataElementSize;
40533
+ var data = new TypedArray(count);
40534
+ var bufferInfo = new BufferInfo(data, false, elementStride);
40535
+ bufferInfo.restoreInfo = new BufferDataRestoreInfo(new RestoreDataAccessor(undefined, TypedArray, undefined, count));
40536
+ promise = Promise.resolve(bufferInfo);
40537
+ }
40538
+ return accessor.sparse ? promise.then(function(bufferInfo) {
40539
+ return GLTFUtils.processingSparseData(context, accessor, bufferInfo).then(function() {
40540
+ return bufferInfo;
40541
+ });
40542
+ }) : promise;
40518
40543
  };
40519
- GLTFUtils.bufferToVector3Array = function bufferToVector3Array(data, byteStride, accessorByteOffset, count) {
40520
- var bytesPerElement = data.BYTES_PER_ELEMENT;
40521
- var offset = accessorByteOffset % byteStride / bytesPerElement;
40522
- var stride = byteStride / bytesPerElement;
40523
- var vector3s = new Array(count);
40544
+ GLTFUtils.bufferToVector3Array = function bufferToVector3Array(buffer, byteOffset, count, normalized, componentType) {
40545
+ var baseOffset = byteOffset / buffer.BYTES_PER_ELEMENT;
40546
+ var stride = buffer.length / count;
40547
+ var vertices = new Array(count);
40548
+ var factor = normalized ? GLTFUtils.getNormalizedComponentScale(componentType) : 1;
40524
40549
  for(var i = 0; i < count; i++){
40525
- var index = offset + i * stride;
40526
- vector3s[i] = new Vector3(data[index], data[index + 1], data[index + 2]);
40550
+ var index = baseOffset + i * stride;
40551
+ vertices[i] = new Vector3(buffer[index] * factor, buffer[index + 1] * factor, buffer[index + 2] * factor);
40527
40552
  }
40528
- return vector3s;
40529
- };
40530
- /**
40531
- * @deprecated
40532
- * Get accessor data.
40533
- */ GLTFUtils.getAccessorData = function getAccessorData(glTF, accessor, buffers) {
40534
- var bufferViews = glTF.bufferViews;
40535
- var _accessor_bufferView;
40536
- var bufferView = bufferViews[(_accessor_bufferView = accessor.bufferView) != null ? _accessor_bufferView : 0];
40537
- var arrayBuffer = buffers[bufferView.buffer];
40538
- var accessorByteOffset = accessor.hasOwnProperty("byteOffset") ? accessor.byteOffset : 0;
40539
- var bufferViewByteOffset = bufferView.hasOwnProperty("byteOffset") ? bufferView.byteOffset : 0;
40540
- var byteOffset = accessorByteOffset + bufferViewByteOffset;
40541
- var accessorTypeSize = GLTFUtils.getAccessorTypeSize(accessor.type);
40542
- var length = accessorTypeSize * accessor.count;
40543
- var _bufferView_byteStride;
40544
- var byteStride = (_bufferView_byteStride = bufferView.byteStride) != null ? _bufferView_byteStride : 0;
40545
- var arrayType = GLTFUtils.getComponentType(accessor.componentType);
40546
- var uint8Array;
40547
- if (byteStride) {
40548
- var accessorByteSize = accessorTypeSize * arrayType.BYTES_PER_ELEMENT;
40549
- uint8Array = new Uint8Array(accessor.count * accessorByteSize);
40550
- var originalBufferView = new Uint8Array(arrayBuffer, bufferViewByteOffset, bufferView.byteLength);
40551
- for(var i = 0; i < accessor.count; i++){
40552
- for(var j = 0; j < accessorByteSize; j++){
40553
- uint8Array[i * accessorByteSize + j] = originalBufferView[i * byteStride + accessorByteOffset + j];
40554
- }
40555
- }
40556
- } else {
40557
- uint8Array = new Uint8Array(arrayBuffer.slice(byteOffset, byteOffset + length * arrayType.BYTES_PER_ELEMENT));
40558
- }
40559
- var typedArray = new arrayType(uint8Array.buffer);
40560
- if (accessor.sparse) {
40561
- var _accessor_sparse = accessor.sparse, count = _accessor_sparse.count, indices = _accessor_sparse.indices, values = _accessor_sparse.values;
40562
- var indicesBufferView = bufferViews[indices.bufferView];
40563
- var valuesBufferView = bufferViews[values.bufferView];
40564
- var indicesArrayBuffer = buffers[indicesBufferView.buffer];
40565
- var valuesArrayBuffer = buffers[valuesBufferView.buffer];
40566
- var _indices_byteOffset, _indicesBufferView_byteOffset;
40567
- var indicesByteOffset = ((_indices_byteOffset = indices.byteOffset) != null ? _indices_byteOffset : 0) + ((_indicesBufferView_byteOffset = indicesBufferView.byteOffset) != null ? _indicesBufferView_byteOffset : 0);
40568
- var indicesByteLength = indicesBufferView.byteLength;
40569
- var _values_byteOffset, _valuesBufferView_byteOffset;
40570
- var valuesByteOffset = ((_values_byteOffset = values.byteOffset) != null ? _values_byteOffset : 0) + ((_valuesBufferView_byteOffset = valuesBufferView.byteOffset) != null ? _valuesBufferView_byteOffset : 0);
40571
- var valuesByteLength = valuesBufferView.byteLength;
40572
- var indicesType = GLTFUtils.getComponentType(indices.componentType);
40573
- var indicesArray = new indicesType(indicesArrayBuffer, indicesByteOffset, indicesByteLength / indicesType.BYTES_PER_ELEMENT);
40574
- var valuesArray = new arrayType(valuesArrayBuffer, valuesByteOffset, valuesByteLength / arrayType.BYTES_PER_ELEMENT);
40575
- for(var i1 = 0; i1 < count; i1++){
40576
- var replaceIndex = indicesArray[i1];
40577
- for(var j1 = 0; j1 < accessorTypeSize; j1++){
40578
- typedArray[replaceIndex * accessorTypeSize + j1] = valuesArray[i1 * accessorTypeSize + j1];
40579
- }
40580
- }
40581
- }
40582
- return typedArray;
40553
+ return vertices;
40583
40554
  };
40584
40555
  GLTFUtils.getBufferViewData = function getBufferViewData(bufferView, buffers) {
40585
40556
  var _bufferView_byteOffset = bufferView.byteOffset, byteOffset = _bufferView_byteOffset === void 0 ? 0 : _bufferView_byteOffset;
@@ -41883,16 +41854,16 @@
41883
41854
  var frame = restoreInfo.blendShape.frames[0];
41884
41855
  var position = restoreInfo.position;
41885
41856
  var positionData = _this._getBufferData(buffers, position.buffer);
41886
- frame.deltaPositions = GLTFUtils.bufferToVector3Array(positionData, position.stride, position.byteOffset, position.count);
41857
+ frame.deltaPositions = GLTFUtils.bufferToVector3Array(positionData, position.byteOffset, position.count, position.normalized, position.componentType);
41887
41858
  if (restoreInfo.normal) {
41888
41859
  var normal = restoreInfo.normal;
41889
41860
  var normalData = _this._getBufferData(buffers, normal.buffer);
41890
- frame.deltaNormals = GLTFUtils.bufferToVector3Array(normalData, normal.stride, normal.byteOffset, normal.count);
41861
+ frame.deltaNormals = GLTFUtils.bufferToVector3Array(normalData, normal.byteOffset, normal.count, normal.normalized, normal.componentType);
41891
41862
  }
41892
41863
  if (restoreInfo.tangent) {
41893
41864
  var tangent = restoreInfo.tangent;
41894
41865
  var tangentData = _this._getBufferData(buffers, tangent.buffer);
41895
- frame.deltaTangents = GLTFUtils.bufferToVector3Array(tangentData, tangent.stride, tangent.byteOffset, tangent.count);
41866
+ frame.deltaTangents = GLTFUtils.bufferToVector3Array(tangentData, tangent.byteOffset, tangent.count, tangent.normalized, tangent.componentType);
41896
41867
  }
41897
41868
  }
41898
41869
  mesh.uploadData(true);
@@ -41904,8 +41875,13 @@
41904
41875
  };
41905
41876
  _proto._getBufferData = function _getBufferData(buffers, restoreInfo) {
41906
41877
  var main = restoreInfo.main;
41907
- var buffer = buffers[main.bufferIndex];
41908
- var data = new main.TypedArray(buffer, main.byteOffset, main.length);
41878
+ var data;
41879
+ if (main) {
41880
+ var buffer = buffers[main.bufferIndex];
41881
+ data = new main.TypedArray(buffer, main.byteOffset, main.length);
41882
+ } else {
41883
+ data = new main.TypedArray(main.length);
41884
+ }
41909
41885
  var sparseCount = restoreInfo.sparseCount;
41910
41886
  if (sparseCount) {
41911
41887
  var sparseIndex = restoreInfo.sparseIndices;
@@ -41978,11 +41954,12 @@
41978
41954
  };
41979
41955
  /**
41980
41956
  * @internal
41981
- */ var BlendShapeDataRestoreInfo = function BlendShapeDataRestoreInfo(buffer, stride, byteOffset, count) {
41957
+ */ var BlendShapeDataRestoreInfo = function BlendShapeDataRestoreInfo(buffer, byteOffset, count, normalized, componentType) {
41982
41958
  this.buffer = buffer;
41983
- this.stride = stride;
41984
41959
  this.byteOffset = byteOffset;
41985
41960
  this.count = count;
41961
+ this.normalized = normalized;
41962
+ this.componentType = componentType;
41986
41963
  };
41987
41964
  /**
41988
41965
  * Base class of glTF extension parser.
@@ -42599,23 +42576,7 @@
42599
42576
  var meshRestoreInfo = new ModelMeshRestoreInfo();
42600
42577
  meshRestoreInfo.mesh = mesh1;
42601
42578
  context.contentRestorer.meshes.push(meshRestoreInfo);
42602
- exports.GLTFMeshParser._parseMeshFromGLTFPrimitive(context, mesh1, meshRestoreInfo, meshInfo, gltfPrimitive, glTF, function(attributeSemantic) {
42603
- return null;
42604
- }, function(attributeName, shapeIndex) {
42605
- var shapeAccessorIdx = gltfPrimitive.targets[shapeIndex];
42606
- var attributeAccessorIdx = shapeAccessorIdx[attributeName];
42607
- if (attributeAccessorIdx) {
42608
- var accessor = glTF.accessors[attributeAccessorIdx];
42609
- return GLTFUtils.getAccessorBuffer(context, context.glTF.bufferViews, accessor);
42610
- } else {
42611
- return null;
42612
- }
42613
- }, function() {
42614
- var indexAccessor = glTF.accessors[gltfPrimitive.indices];
42615
- return context.get(exports.GLTFParserType.Buffer).then(function(buffers) {
42616
- return GLTFUtils.getAccessorData(glTF, indexAccessor, buffers);
42617
- });
42618
- }, context.params.keepMeshData).then(resolve);
42579
+ exports.GLTFMeshParser._parseMeshFromGLTFPrimitive(context, mesh1, meshRestoreInfo, meshInfo, gltfPrimitive, glTF, context.params.keepMeshData).then(resolve);
42619
42580
  }
42620
42581
  });
42621
42582
  };
@@ -42628,7 +42589,7 @@
42628
42589
  };
42629
42590
  /**
42630
42591
  * @internal
42631
- */ GLTFMeshParser1._parseMeshFromGLTFPrimitive = function _parseMeshFromGLTFPrimitive(context, mesh, meshRestoreInfo, gltfMesh, gltfPrimitive, gltf, getVertexBufferData, getBlendShapeData, getIndexBufferData, keepMeshData) {
42592
+ */ GLTFMeshParser1._parseMeshFromGLTFPrimitive = function _parseMeshFromGLTFPrimitive(context, mesh, meshRestoreInfo, gltfMesh, gltfPrimitive, gltf, keepMeshData) {
42632
42593
  var _loop = function _loop(attribute) {
42633
42594
  var accessor = accessors[attributes[attribute]];
42634
42595
  var promise = GLTFUtils.getAccessorBuffer(context, gltf.bufferViews, accessor).then(function(accessorBuffer) {
@@ -42723,61 +42684,68 @@
42723
42684
  }
42724
42685
  // BlendShapes
42725
42686
  if (targets) {
42726
- promises.push(exports.GLTFMeshParser._createBlendShape(mesh, meshRestoreInfo, gltfMesh, accessors, targets, getBlendShapeData));
42687
+ promises.push(exports.GLTFMeshParser._createBlendShape(context, mesh, meshRestoreInfo, gltfMesh, gltfPrimitive, targets));
42727
42688
  }
42728
42689
  return Promise.all(promises).then(function() {
42729
42690
  mesh.uploadData(!keepMeshData);
42730
- return Promise.resolve(mesh);
42691
+ return mesh;
42731
42692
  });
42732
42693
  });
42733
42694
  };
42695
+ GLTFMeshParser1._getBlendShapeData = function _getBlendShapeData(context, glTF, accessor) {
42696
+ return GLTFUtils.getAccessorBuffer(context, glTF.bufferViews, accessor).then(function(bufferInfo) {
42697
+ var buffer = bufferInfo.data;
42698
+ var _accessor_byteOffset;
42699
+ var byteOffset = bufferInfo.interleaved ? ((_accessor_byteOffset = accessor.byteOffset) != null ? _accessor_byteOffset : 0) % bufferInfo.stride : 0;
42700
+ var count = accessor.count, normalized = accessor.normalized, componentType = accessor.componentType;
42701
+ var vertices = GLTFUtils.bufferToVector3Array(buffer, byteOffset, count, normalized, componentType);
42702
+ var restoreInfo = new BlendShapeDataRestoreInfo(bufferInfo.restoreInfo, byteOffset, count, normalized, componentType);
42703
+ return {
42704
+ vertices: vertices,
42705
+ restoreInfo: restoreInfo
42706
+ };
42707
+ });
42708
+ };
42734
42709
  /**
42735
42710
  * @internal
42736
- */ GLTFMeshParser1._createBlendShape = function _createBlendShape(mesh, meshRestoreInfo, glTFMesh, accessors, glTFTargets, getBlendShapeData) {
42737
- var _loop = function _loop(i, n) {
42711
+ */ GLTFMeshParser1._createBlendShape = function _createBlendShape(context, mesh, meshRestoreInfo, glTFMesh, gltfPrimitive, glTFTargets) {
42712
+ var _this = this, _loop = function _loop(i) {
42713
+ var blendShapeData = {};
42714
+ blendShapeCollection[i] = blendShapeData;
42738
42715
  var name = blendShapeNames ? blendShapeNames[i] : "blendShape" + i;
42716
+ var targets = gltfPrimitive.targets[i];
42717
+ var normalTarget = targets["NORMAL"];
42718
+ var tangentTarget = targets["TANGENT"];
42719
+ var hasNormal = normalTarget !== undefined;
42720
+ var hasTangent = tangentTarget !== undefined;
42739
42721
  var promise = Promise.all([
42740
- getBlendShapeData("POSITION", i),
42741
- getBlendShapeData("NORMAL", i),
42742
- getBlendShapeData("TANGENT", i)
42743
- ]).then(function(infos) {
42744
- var posBufferInfo = infos[0];
42745
- var norBufferInfo = infos[1];
42746
- var tanBufferInfo = infos[2];
42747
- var target = glTFTargets[i];
42748
- var posAccessor;
42749
- var norAccessor;
42750
- var tanAccessor;
42751
- var positions = null;
42752
- if (posBufferInfo) {
42753
- posAccessor = accessors[target["POSITION"]];
42754
- var _posAccessor_byteOffset;
42755
- positions = GLTFUtils.bufferToVector3Array(posBufferInfo.data, posBufferInfo.stride, (_posAccessor_byteOffset = posAccessor.byteOffset) != null ? _posAccessor_byteOffset : 0, posAccessor.count);
42756
- }
42757
- var normals = null;
42758
- if (norBufferInfo) {
42759
- norAccessor = accessors[target["NORMAL"]];
42760
- var _norAccessor_byteOffset;
42761
- normals = GLTFUtils.bufferToVector3Array(norBufferInfo.data, norBufferInfo.stride, (_norAccessor_byteOffset = norAccessor.byteOffset) != null ? _norAccessor_byteOffset : 0, norAccessor.count);
42762
- }
42763
- var tangents = null;
42764
- if (tanBufferInfo) {
42765
- tanAccessor = accessors[target["NORMAL"]];
42766
- var _tanAccessor_byteOffset;
42767
- tangents = GLTFUtils.bufferToVector3Array(tanBufferInfo.data, tanBufferInfo.stride, (_tanAccessor_byteOffset = tanAccessor.byteOffset) != null ? _tanAccessor_byteOffset : 0, tanAccessor.count);
42768
- }
42722
+ _this._getBlendShapeData(context, glTF, accessors[targets["POSITION"]]),
42723
+ hasNormal ? _this._getBlendShapeData(context, glTF, accessors[normalTarget]) : null,
42724
+ hasTangent ? _this._getBlendShapeData(context, glTF, accessors[tangentTarget]) : null
42725
+ ]).then(function(vertices) {
42726
+ var _tangentData;
42727
+ var positionData = vertices[0], normalData = vertices[1], tangentData = vertices[2];
42769
42728
  var blendShape = new BlendShape(name);
42770
- blendShape.addFrame(1.0, positions, normals, tangents);
42771
- mesh.addBlendShape(blendShape);
42772
- var _posAccessor_byteOffset1, _norAccessor_byteOffset1, _tanAccessor_byteOffset1;
42773
- meshRestoreInfo.blendShapes.push(new BlendShapeRestoreInfo(blendShape, new BlendShapeDataRestoreInfo(posBufferInfo.restoreInfo, posBufferInfo.stride, (_posAccessor_byteOffset1 = posAccessor.byteOffset) != null ? _posAccessor_byteOffset1 : 0, posAccessor.count), norBufferInfo ? new BlendShapeDataRestoreInfo(norBufferInfo.restoreInfo, norBufferInfo.stride, (_norAccessor_byteOffset1 = norAccessor.byteOffset) != null ? _norAccessor_byteOffset1 : 0, norAccessor.count) : null, tanBufferInfo ? new BlendShapeDataRestoreInfo(tanBufferInfo.restoreInfo, tanBufferInfo.stride, (_tanAccessor_byteOffset1 = tanAccessor.byteOffset) != null ? _tanAccessor_byteOffset1 : 0, tanAccessor.count) : null));
42729
+ blendShape.addFrame(1.0, positionData.vertices, hasNormal ? normalData.vertices : null, hasTangent ? tangentData.vertices : null);
42730
+ blendShapeData.blendShape = blendShape;
42731
+ blendShapeData.restoreInfo = new BlendShapeRestoreInfo(blendShape, positionData.restoreInfo, hasNormal ? normalData.restoreInfo : null, hasTangent ? (_tangentData = tangentData) == null ? void 0 : _tangentData.restoreInfo : null);
42774
42732
  });
42775
42733
  promises.push(promise);
42776
42734
  };
42735
+ var glTF = context.glTF;
42736
+ var accessors = glTF.accessors;
42777
42737
  var blendShapeNames = glTFMesh.extras ? glTFMesh.extras.targetNames : null;
42778
42738
  var promises = new Array();
42779
- for(var i = 0, n = glTFTargets.length; i < n; i++)_loop(i);
42780
- return Promise.all(promises);
42739
+ var blendShapeCount = glTFTargets.length;
42740
+ var blendShapeCollection = new Array(blendShapeCount);
42741
+ for(var i = 0; i < blendShapeCount; i++)_loop(i);
42742
+ return Promise.all(promises).then(function() {
42743
+ for(var _iterator = _create_for_of_iterator_helper_loose(blendShapeCollection), _step; !(_step = _iterator()).done;){
42744
+ var blendShape = _step.value;
42745
+ mesh.addBlendShape(blendShape.blendShape);
42746
+ meshRestoreInfo.blendShapes.push(blendShape.restoreInfo);
42747
+ }
42748
+ });
42781
42749
  };
42782
42750
  return GLTFMeshParser1;
42783
42751
  }(GLTFParser), function() {
@@ -44989,7 +44957,7 @@
44989
44957
  ], KHR_materials_anisotropy);
44990
44958
 
44991
44959
  //@ts-ignore
44992
- var version = "1.2.0-beta.0";
44960
+ var version = "1.2.0-beta.2";
44993
44961
  console.log("Galacean engine version: " + version);
44994
44962
  for(var key in CoreObjects){
44995
44963
  Loader.registerClass(key, CoreObjects[key]);