MCPcopy
hub / github.com/donmccurdy/glTF-Transform / getSparseArray

Function getSparseArray

packages/core/src/io/reader.ts:667–695  ·  view source on GitHub ↗

* Returns the contents of a sparse accessor, as a typed array. * @internal

(accessorDef: GLTF.IAccessor, context: ReaderContext)

Source from the content-addressed store, hash-verified

665 * @internal
666 */
667function getSparseArray(accessorDef: GLTF.IAccessor, context: ReaderContext): TypedArray {
668 const TypedArray = ComponentTypeToTypedArray[accessorDef.componentType];
669 const elementSize = Accessor.getElementSize(accessorDef.type);
670
671 let array: TypedArray;
672 if (accessorDef.bufferView !== undefined) {
673 array = getAccessorArray(accessorDef, context);
674 } else {
675 array = new TypedArray(accessorDef.count * elementSize);
676 }
677
678 const sparseDef = accessorDef.sparse;
679 if (!sparseDef) return array; // Zero-filled accessor.
680
681 const count = sparseDef.count;
682 const indicesDef = { ...accessorDef, ...sparseDef.indices, count, type: 'SCALAR' };
683 const valuesDef = { ...accessorDef, ...sparseDef.values, count };
684 const indices = getAccessorArray(indicesDef as GLTF.IAccessor, context);
685 const values = getAccessorArray(valuesDef, context);
686
687 // Override indices given in the sparse data.
688 for (let i = 0; i < indicesDef.count; i++) {
689 for (let j = 0; j < elementSize; j++) {
690 array[indices[i] * elementSize + j] = values[i * elementSize + j];
691 }
692 }
693
694 return array;
695}

Callers 1

readMethod · 0.85

Calls 2

getAccessorArrayFunction · 0.85
getElementSizeMethod · 0.80

Tested by

no test coverage detected