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