readAccessorPacked.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import getAccessorByteStride from './getAccessorByteStride.js'
  2. import getComponentReader from './getComponentReader.js'
  3. import numberOfComponentsForType from './numberOfComponentsForType.js'
  4. import arrayFill from '../../Core/arrayFill.js'
  5. import ComponentDatatype from '../../Core/ComponentDatatype.js'
  6. import defined from '../../Core/defined.js'
  7. /**
  8. * Returns the accessor data in a contiguous array.
  9. *
  10. * @param {Object} gltf A javascript object containing a glTF asset.
  11. * @param {Object} accessor The accessor.
  12. * @returns {Array} The accessor values in a contiguous array.
  13. *
  14. * @private
  15. */
  16. function readAccessorPacked(gltf, accessor) {
  17. var byteStride = getAccessorByteStride(gltf, accessor);
  18. var componentTypeByteLength = ComponentDatatype.getSizeInBytes(accessor.componentType);
  19. var numberOfComponents = numberOfComponentsForType(accessor.type);
  20. var count = accessor.count;
  21. var values = new Array(numberOfComponents * count);
  22. if (!defined(accessor.bufferView)) {
  23. arrayFill(values, 0);
  24. return values;
  25. }
  26. var bufferView = gltf.bufferViews[accessor.bufferView];
  27. var source = gltf.buffers[bufferView.buffer].extras._pipeline.source;
  28. var byteOffset = accessor.byteOffset + bufferView.byteOffset + source.byteOffset;
  29. var dataView = new DataView(source.buffer);
  30. var components = new Array(numberOfComponents);
  31. var componentReader = getComponentReader(accessor.componentType);
  32. for (var i = 0; i < count; ++i) {
  33. componentReader(dataView, byteOffset, numberOfComponents, componentTypeByteLength, components);
  34. for (var j = 0; j < numberOfComponents; ++j) {
  35. values[i * numberOfComponents + j] = components[j];
  36. }
  37. byteOffset += byteStride;
  38. }
  39. return values;
  40. }
  41. export default readAccessorPacked;