MCPcopy
hub / github.com/sparkjsdev/spark / unpackSplats

Function unpackSplats

src/SplatLoader.ts:637–758  ·  view source on GitHub ↗
({
  input,
  extraFiles,
  fileType,
  pathOrUrl,
  splatEncoding,
}: {
  input: Uint8Array | ArrayBuffer;
  extraFiles?: Record<string, ArrayBuffer>;
  fileType?: SplatFileType;
  pathOrUrl?: string;
  splatEncoding?: SplatEncoding;
})

Source from the content-addressed store, hash-verified

635}
636
637export async function unpackSplats({
638 input,
639 extraFiles,
640 fileType,
641 pathOrUrl,
642 splatEncoding,
643}: {
644 input: Uint8Array | ArrayBuffer;
645 extraFiles?: Record<string, ArrayBuffer>;
646 fileType?: SplatFileType;
647 pathOrUrl?: string;
648 splatEncoding?: SplatEncoding;
649}): Promise<{
650 packedArray: Uint32Array;
651 numSplats: number;
652 extra?: Record<string, unknown>;
653}> {
654 const fileBytes =
655 input instanceof ArrayBuffer ? new Uint8Array(input) : input;
656 let splatFileType = fileType;
657 if (!fileType) {
658 splatFileType = getSplatFileType(fileBytes);
659 if (!splatFileType && pathOrUrl) {
660 splatFileType = getSplatFileTypeFromPath(pathOrUrl);
661 }
662 }
663
664 switch (splatFileType) {
665 case SplatFileType.PLY: {
666 const ply = new PlyReader({ fileBytes });
667 await ply.parseHeader();
668 const numSplats = ply.numSplats;
669 const maxSplats = getTextureSize(numSplats).maxSplats;
670 const args = {
671 fileBytes,
672 packedArray: new Uint32Array(maxSplats * 4),
673 splatEncoding,
674 };
675 return await withWorker(async (worker) => {
676 const { packedArray, numSplats, extra } = (await worker.call(
677 "unpackPly",
678 args,
679 )) as {
680 packedArray: Uint32Array;
681 numSplats: number;
682 extra: Record<string, unknown>;
683 };
684 return { packedArray, numSplats, extra };
685 });
686 }
687 case SplatFileType.SPZ: {
688 return await withWorker(async (worker) => {
689 const { packedArray, numSplats, extra } = (await worker.call(
690 "decodeSpz",
691 {
692 fileBytes,
693 splatEncoding,
694 },

Callers

nothing calls this directly

Calls 6

parseHeaderMethod · 0.95
getTextureSizeFunction · 0.90
withWorkerFunction · 0.90
getSplatFileTypeFunction · 0.85
getSplatFileTypeFromPathFunction · 0.85
callMethod · 0.45

Tested by

no test coverage detected