@galacean/engine-loader 1.0.0-beta.5 → 1.0.0-beta.7

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/main.js CHANGED
@@ -502,12 +502,6 @@ function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
502
502
  this.vertexBuffers = [];
503
503
  this.blendShapes = [];
504
504
  };
505
- /**
506
- * @internal
507
- */ var BufferRestoreInfo = function BufferRestoreInfo(buffer, data) {
508
- this.buffer = buffer;
509
- this.data = data;
510
- };
511
505
  /**
512
506
  * @internal
513
507
  */ var BufferDataRestoreInfo = function BufferDataRestoreInfo(main, typeSize, sparseCount, sparseIndices, sparseValues) {
@@ -1823,21 +1817,31 @@ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
1823
1817
  var vertexCount;
1824
1818
  var bufferBindIndex = 0;
1825
1819
  var positions;
1826
- keepMeshData && (positions = new Array(vertexCount));
1820
+ var boneIndices;
1821
+ var boneWeights;
1822
+ if (keepMeshData) {
1823
+ positions = new Array(vertexCount);
1824
+ boneIndices = new Array(vertexCount);
1825
+ boneWeights = new Array(vertexCount);
1826
+ }
1827
1827
  for(var attribute in attributes){
1828
1828
  var accessor = accessors[attributes[attribute]];
1829
1829
  var accessorBuffer = GLTFUtils.getAccessorBuffer(context, gltf.bufferViews, accessor);
1830
1830
  var dataElementSize = GLTFUtils.getAccessorTypeSize(accessor.type);
1831
- var attributeCount = accessor.count;
1831
+ var accessorCount = accessor.count;
1832
1832
  var vertices = accessorBuffer.data;
1833
1833
  var vertexElement = void 0;
1834
1834
  var meshId = mesh.instanceId;
1835
1835
  var vertexBindingInfos = accessorBuffer.vertexBindingInfos;
1836
- var elementFormat = GLTFUtils.getElementFormat(accessor.componentType, dataElementSize, accessor.normalized);
1836
+ var elementNormalized = accessor.normalized;
1837
+ var elementFormat = GLTFUtils.getElementFormat(accessor.componentType, dataElementSize, elementNormalized);
1838
+ var scaleFactor = void 0;
1839
+ elementNormalized && (scaleFactor = GLTFUtils.getNormalizedComponentScale(accessor.componentType));
1840
+ var elementOffset = void 0;
1837
1841
  if (accessorBuffer.interleaved) {
1838
1842
  var byteOffset = accessor.byteOffset || 0;
1839
1843
  var stride = accessorBuffer.stride;
1840
- var elementOffset = byteOffset % stride;
1844
+ elementOffset = byteOffset % stride;
1841
1845
  if (vertexBindingInfos[meshId] === undefined) {
1842
1846
  vertexElement = new engineCore.VertexElement(attribute, elementOffset, elementFormat, bufferBindIndex);
1843
1847
  var vertexBuffer = accessorBuffer.vertexBuffer;
@@ -1845,7 +1849,6 @@ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
1845
1849
  vertexBuffer = new engineCore.Buffer(engine, engineCore.BufferBindFlag.VertexBuffer, vertices.byteLength, engineCore.BufferUsage.Static);
1846
1850
  vertexBuffer.setData(vertices);
1847
1851
  accessorBuffer.vertexBuffer = vertexBuffer;
1848
- meshRestoreInfo.vertexBuffers.push(new BufferRestoreInfo(vertexBuffer, accessorBuffer.restoreInfo));
1849
1852
  }
1850
1853
  mesh.setVertexBufferBinding(vertexBuffer, stride, bufferBindIndex);
1851
1854
  vertexBindingInfos[meshId] = bufferBindIndex++;
@@ -1853,44 +1856,70 @@ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
1853
1856
  vertexElement = new engineCore.VertexElement(attribute, elementOffset, elementFormat, vertexBindingInfos[meshId]);
1854
1857
  }
1855
1858
  } else {
1856
- vertexElement = new engineCore.VertexElement(attribute, 0, elementFormat, bufferBindIndex);
1859
+ elementOffset = 0;
1860
+ vertexElement = new engineCore.VertexElement(attribute, elementOffset, elementFormat, bufferBindIndex);
1857
1861
  var vertexBuffer1 = new engineCore.Buffer(engine, engineCore.BufferBindFlag.VertexBuffer, vertices.byteLength, engineCore.BufferUsage.Static);
1858
1862
  vertexBuffer1.setData(vertices);
1859
- meshRestoreInfo.vertexBuffers.push(new BufferRestoreInfo(vertexBuffer1, accessorBuffer.restoreInfo));
1860
1863
  mesh.setVertexBufferBinding(vertexBuffer1, accessorBuffer.stride, bufferBindIndex);
1861
1864
  vertexBindingInfos[meshId] = bufferBindIndex++;
1862
1865
  }
1863
1866
  vertexElements.push(vertexElement);
1864
1867
  if (attribute === "POSITION") {
1865
- vertexCount = attributeCount;
1868
+ vertexCount = accessorCount;
1866
1869
  var _mesh_bounds = mesh.bounds, min = _mesh_bounds.min, max = _mesh_bounds.max;
1867
1870
  if (accessor.min && accessor.max) {
1868
1871
  min.copyFromArray(accessor.min);
1869
1872
  max.copyFromArray(accessor.max);
1870
1873
  if (keepMeshData) {
1871
- var stride1 = vertices.length / attributeCount;
1872
- for(var j = 0; j < attributeCount; j++){
1873
- var offset = j * stride1;
1874
- positions[j] = new engineMath.Vector3(vertices[offset], vertices[offset + 1], vertices[offset + 2]);
1874
+ var baseOffset = elementOffset / vertices.BYTES_PER_ELEMENT;
1875
+ var stride1 = vertices.length / accessorCount;
1876
+ for(var j = 0; j < accessorCount; j++){
1877
+ var offset = baseOffset + j * stride1;
1878
+ var position = new engineMath.Vector3(vertices[offset], vertices[offset + 1], vertices[offset + 2]);
1879
+ elementNormalized && position.scale(scaleFactor);
1880
+ positions[j] = position;
1875
1881
  }
1876
1882
  }
1877
1883
  } else {
1878
- var position = GLTFMeshParser._tempVector3;
1884
+ var position1 = GLTFMeshParser._tempVector3;
1879
1885
  min.set(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);
1880
1886
  max.set(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);
1881
- var stride2 = vertices.length / attributeCount;
1882
- for(var j1 = 0; j1 < attributeCount; j1++){
1883
- var offset1 = j1 * stride2;
1884
- position.copyFromArray(vertices, offset1);
1885
- engineMath.Vector3.min(min, position, min);
1886
- engineMath.Vector3.max(max, position, max);
1887
+ var baseOffset1 = elementOffset / vertices.BYTES_PER_ELEMENT;
1888
+ var stride2 = vertices.length / accessorCount;
1889
+ for(var j1 = 0; j1 < accessorCount; j1++){
1890
+ var offset1 = baseOffset1 + j1 * stride2;
1891
+ position1.copyFromArray(vertices, offset1);
1892
+ engineMath.Vector3.min(min, position1, min);
1893
+ engineMath.Vector3.max(max, position1, max);
1894
+ if (keepMeshData) {
1895
+ var clonePosition = position1.clone();
1896
+ elementNormalized && clonePosition.scale(scaleFactor);
1897
+ positions[j1] = clonePosition;
1898
+ }
1887
1899
  }
1888
1900
  }
1889
- if (accessor.normalized) {
1890
- var scaleFactor = GLTFUtils.getNormalizedComponentScale(accessor.componentType);
1901
+ if (elementNormalized) {
1891
1902
  min.scale(scaleFactor);
1892
1903
  max.scale(scaleFactor);
1893
1904
  }
1905
+ } else if (attribute === "JOINTS_0" && keepMeshData) {
1906
+ var baseOffset2 = elementOffset / vertices.BYTES_PER_ELEMENT;
1907
+ var stride3 = vertices.length / accessorCount;
1908
+ for(var j2 = 0; j2 < accessorCount; j2++){
1909
+ var offset2 = baseOffset2 + j2 * stride3;
1910
+ var boneIndex = new engineMath.Vector4(vertices[offset2], vertices[offset2 + 1], vertices[offset2 + 2], vertices[offset2 + 3]);
1911
+ elementNormalized && boneIndex.scale(scaleFactor);
1912
+ boneIndices[j2] = boneIndex;
1913
+ }
1914
+ } else if (attribute === "WEIGHTS_0" && keepMeshData) {
1915
+ var baseOffset3 = elementOffset / vertices.BYTES_PER_ELEMENT;
1916
+ var stride4 = vertices.length / accessorCount;
1917
+ for(var j3 = 0; j3 < accessorCount; j3++){
1918
+ var offset3 = baseOffset3 + j3 * stride4;
1919
+ var boneWeight = new engineMath.Vector4(vertices[offset3], vertices[offset3 + 1], vertices[offset3 + 2], vertices[offset3 + 3]);
1920
+ elementNormalized && boneWeight.scale(scaleFactor);
1921
+ boneWeights[j3] = boneWeight;
1922
+ }
1894
1923
  }
1895
1924
  }
1896
1925
  mesh.setVertexElements(vertexElements);
@@ -1909,6 +1938,10 @@ var GLTFMeshParser = /*#__PURE__*/ function(GLTFParser1) {
1909
1938
  mesh.uploadData(!keepMeshData);
1910
1939
  //@ts-ignore
1911
1940
  mesh._positions = positions;
1941
+ //@ts-ignore
1942
+ mesh._boneIndices = boneIndices;
1943
+ //@ts-ignore
1944
+ mesh._boneWeights = boneWeights;
1912
1945
  return Promise.resolve(mesh);
1913
1946
  };
1914
1947
  /**