@loaders.gl/splats 4.5.0-alpha.1
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/LICENSE +41 -0
- package/README.md +3 -0
- package/dist/bundled.d.ts +2 -0
- package/dist/bundled.d.ts.map +1 -0
- package/dist/bundled.js +5 -0
- package/dist/bundled.js.map +1 -0
- package/dist/dist.dev.js +33741 -0
- package/dist/dist.min.js +82 -0
- package/dist/index.cjs +1786 -0
- package/dist/index.cjs.map +7 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/ksplat-loader-types.d.ts +19 -0
- package/dist/ksplat-loader-types.d.ts.map +1 -0
- package/dist/ksplat-loader-types.js +20 -0
- package/dist/ksplat-loader-types.js.map +1 -0
- package/dist/ksplat-loader.d.ts +21 -0
- package/dist/ksplat-loader.d.ts.map +1 -0
- package/dist/ksplat-loader.js +12 -0
- package/dist/ksplat-loader.js.map +1 -0
- package/dist/lib/parse-ksplat.d.ts +7 -0
- package/dist/lib/parse-ksplat.d.ts.map +1 -0
- package/dist/lib/parse-ksplat.js +312 -0
- package/dist/lib/parse-ksplat.js.map +1 -0
- package/dist/lib/parse-rad-chunk.d.ts +19 -0
- package/dist/lib/parse-rad-chunk.d.ts.map +1 -0
- package/dist/lib/parse-rad-chunk.js +514 -0
- package/dist/lib/parse-rad-chunk.js.map +1 -0
- package/dist/lib/parse-rad.d.ts +136 -0
- package/dist/lib/parse-rad.d.ts.map +1 -0
- package/dist/lib/parse-rad.js +110 -0
- package/dist/lib/parse-rad.js.map +1 -0
- package/dist/lib/parse-splat.d.ts +7 -0
- package/dist/lib/parse-splat.d.ts.map +1 -0
- package/dist/lib/parse-splat.js +58 -0
- package/dist/lib/parse-splat.js.map +1 -0
- package/dist/lib/parse-spz.d.ts +7 -0
- package/dist/lib/parse-spz.d.ts.map +1 -0
- package/dist/lib/parse-spz.js +268 -0
- package/dist/lib/parse-spz.js.map +1 -0
- package/dist/lib/splat-utils.d.ts +12 -0
- package/dist/lib/splat-utils.d.ts.map +1 -0
- package/dist/lib/splat-utils.js +38 -0
- package/dist/lib/splat-utils.js.map +1 -0
- package/dist/lib/splats-arrow-table.d.ts +5 -0
- package/dist/lib/splats-arrow-table.d.ts.map +1 -0
- package/dist/lib/splats-arrow-table.js +133 -0
- package/dist/lib/splats-arrow-table.js.map +1 -0
- package/dist/rad-loader-types.d.ts +16 -0
- package/dist/rad-loader-types.d.ts.map +1 -0
- package/dist/rad-loader-types.js +16 -0
- package/dist/rad-loader-types.js.map +1 -0
- package/dist/rad-loader.d.ts +20 -0
- package/dist/rad-loader.d.ts.map +1 -0
- package/dist/rad-loader.js +14 -0
- package/dist/rad-loader.js.map +1 -0
- package/dist/rad-metadata.schema.json +133 -0
- package/dist/rad-source-loader.d.ts +112 -0
- package/dist/rad-source-loader.d.ts.map +1 -0
- package/dist/rad-source-loader.js +329 -0
- package/dist/rad-source-loader.js.map +1 -0
- package/dist/rad-zod-schema.cjs +81 -0
- package/dist/rad-zod-schema.cjs.map +7 -0
- package/dist/rad-zod-schema.d.ts +88 -0
- package/dist/rad-zod-schema.d.ts.map +1 -0
- package/dist/rad-zod-schema.js +70 -0
- package/dist/rad-zod-schema.js.map +1 -0
- package/dist/radc-metadata.schema.json +112 -0
- package/dist/splat-loader-types.d.ts +19 -0
- package/dist/splat-loader-types.d.ts.map +1 -0
- package/dist/splat-loader-types.js +20 -0
- package/dist/splat-loader-types.js.map +1 -0
- package/dist/splat-loader.d.ts +21 -0
- package/dist/splat-loader.d.ts.map +1 -0
- package/dist/splat-loader.js +12 -0
- package/dist/splat-loader.js.map +1 -0
- package/dist/splats-format.d.ts +39 -0
- package/dist/splats-format.d.ts.map +1 -0
- package/dist/splats-format.js +42 -0
- package/dist/splats-format.js.map +1 -0
- package/dist/spz-loader-types.d.ts +20 -0
- package/dist/spz-loader-types.d.ts.map +1 -0
- package/dist/spz-loader-types.js +20 -0
- package/dist/spz-loader-types.js.map +1 -0
- package/dist/spz-loader.d.ts +22 -0
- package/dist/spz-loader.d.ts.map +1 -0
- package/dist/spz-loader.js +11 -0
- package/dist/spz-loader.js.map +1 -0
- package/dist/types.d.ts +34 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/unbundled.d.ts +2 -0
- package/dist/unbundled.d.ts.map +1 -0
- package/dist/unbundled.js +5 -0
- package/dist/unbundled.js.map +1 -0
- package/package.json +94 -0
- package/src/bundled.ts +5 -0
- package/src/index.ts +28 -0
- package/src/ksplat-loader-types.ts +25 -0
- package/src/ksplat-loader.ts +16 -0
- package/src/lib/parse-ksplat.ts +540 -0
- package/src/lib/parse-rad-chunk.ts +721 -0
- package/src/lib/parse-rad.ts +318 -0
- package/src/lib/parse-splat.ts +77 -0
- package/src/lib/parse-spz.ts +368 -0
- package/src/lib/splat-utils.ts +49 -0
- package/src/lib/splats-arrow-table.ts +190 -0
- package/src/rad-loader-types.ts +20 -0
- package/src/rad-loader.ts +22 -0
- package/src/rad-source-loader.ts +491 -0
- package/src/rad-zod-schema.ts +83 -0
- package/src/splat-loader-types.ts +25 -0
- package/src/splat-loader.ts +16 -0
- package/src/splats-format.ts +47 -0
- package/src/spz-loader-types.ts +25 -0
- package/src/spz-loader.ts +16 -0
- package/src/types.ts +39 -0
- package/src/unbundled.ts +5 -0
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
import { DataSource } from '@loaders.gl/loader-utils';
|
|
5
|
+
import { RADFormat } from "./splats-format.js";
|
|
6
|
+
import { parseRADChunkHeader, tryParseRADHeader } from "./lib/parse-rad.js";
|
|
7
|
+
import { parseRADChunk, parseRADChunkToGaussianSplats } from "./lib/parse-rad-chunk.js";
|
|
8
|
+
import { makeGaussianSplatsArrowTable } from "./lib/splats-arrow-table.js";
|
|
9
|
+
const DEFAULT_RAD_HEADER_BYTE_LENGTHS = [64 * 1024, 256 * 1024, 1024 * 1024];
|
|
10
|
+
const DEFAULT_RAD_MAX_CONCURRENT_CHUNK_REQUESTS = 4;
|
|
11
|
+
// __VERSION__ is injected by babel-plugin-version-inline
|
|
12
|
+
// @ts-ignore TS2304: Cannot find name '__VERSION__'.
|
|
13
|
+
const VERSION = typeof "4.5.0-alpha.1" !== 'undefined' ? "4.5.0-alpha.1" : 'latest';
|
|
14
|
+
/** Source factory for Spark `.rad` paged LoD Gaussian splat containers. */
|
|
15
|
+
export const RADSourceLoader = {
|
|
16
|
+
dataType: null,
|
|
17
|
+
batchType: null,
|
|
18
|
+
...RADFormat,
|
|
19
|
+
name: 'RADSourceLoader',
|
|
20
|
+
version: VERSION,
|
|
21
|
+
type: 'rad',
|
|
22
|
+
fromUrl: true,
|
|
23
|
+
fromBlob: true,
|
|
24
|
+
options: {
|
|
25
|
+
rad: {
|
|
26
|
+
headers: undefined,
|
|
27
|
+
withCredentials: false,
|
|
28
|
+
headerByteLengths: undefined
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
defaultOptions: {
|
|
32
|
+
rad: {
|
|
33
|
+
headers: undefined,
|
|
34
|
+
withCredentials: false,
|
|
35
|
+
headerByteLengths: undefined
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
testURL: (url) => /\.rad(?:$|[?#])/i.test(url),
|
|
39
|
+
createDataSource: (data, options) => new RADSource(data, options)
|
|
40
|
+
};
|
|
41
|
+
/** Runtime source for RAD metadata and chunk-byte access. */
|
|
42
|
+
export class RADSource extends DataSource {
|
|
43
|
+
/** Shared metadata promise exposed for source-style integrations. */
|
|
44
|
+
metadata;
|
|
45
|
+
/** Lazily initialized RAD header promise. */
|
|
46
|
+
_metadataPromise = null;
|
|
47
|
+
/** Lazily initialized per-chunk metadata promises. */
|
|
48
|
+
_chunkMetadataPromises = new Map();
|
|
49
|
+
constructor(data, options) {
|
|
50
|
+
super(data, options, RADSourceLoader.defaultOptions);
|
|
51
|
+
this.metadata = this.getMetadata();
|
|
52
|
+
}
|
|
53
|
+
/** Ensures the RAD header metadata has been loaded. */
|
|
54
|
+
async initialize() {
|
|
55
|
+
await this.getMetadata();
|
|
56
|
+
}
|
|
57
|
+
/** Returns parsed Spark RAD top-level metadata. */
|
|
58
|
+
async getMetadata() {
|
|
59
|
+
if (!this._metadataPromise) {
|
|
60
|
+
this._metadataPromise = this._loadMetadata();
|
|
61
|
+
}
|
|
62
|
+
return await this._metadataPromise;
|
|
63
|
+
}
|
|
64
|
+
/** Returns the number of chunks declared by the RAD metadata. */
|
|
65
|
+
async getChunkCount() {
|
|
66
|
+
const metadata = await this.getMetadata();
|
|
67
|
+
return metadata.chunks.length;
|
|
68
|
+
}
|
|
69
|
+
/** Returns the URL used for a chunk, or `null` for Blob-backed inline chunks. */
|
|
70
|
+
async getChunkUrl(chunkIndex) {
|
|
71
|
+
const metadata = await this.getMetadata();
|
|
72
|
+
const chunk = this._getChunkRange(metadata, chunkIndex);
|
|
73
|
+
if (chunk.filename) {
|
|
74
|
+
return resolveRADChunkUrl(this.url, chunk.filename);
|
|
75
|
+
}
|
|
76
|
+
return typeof this.data === 'string' ? this.url : null;
|
|
77
|
+
}
|
|
78
|
+
/** Fetches one raw RADC chunk by index. */
|
|
79
|
+
async getChunk(chunkIndex, options = {}) {
|
|
80
|
+
const metadata = await this.getMetadata();
|
|
81
|
+
const chunk = this._getChunkRange(metadata, chunkIndex);
|
|
82
|
+
if (chunk.filename) {
|
|
83
|
+
if (typeof this.data !== 'string') {
|
|
84
|
+
throw new Error('RADSource: sidecar RADC chunks require a URL-backed RAD source.');
|
|
85
|
+
}
|
|
86
|
+
return await this._fetchArrayBuffer(resolveRADChunkUrl(this.url, chunk.filename), undefined, {
|
|
87
|
+
signal: options.signal
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
if (chunk.bytes === 0) {
|
|
91
|
+
return new ArrayBuffer(0);
|
|
92
|
+
}
|
|
93
|
+
const byteOffset = metadata.chunksByteOffset + chunk.offset;
|
|
94
|
+
if (typeof this.data !== 'string') {
|
|
95
|
+
return await this.data.slice(byteOffset, byteOffset + chunk.bytes).arrayBuffer();
|
|
96
|
+
}
|
|
97
|
+
return await this._fetchArrayBuffer(this.url, { offset: byteOffset, bytes: chunk.bytes }, { signal: options.signal });
|
|
98
|
+
}
|
|
99
|
+
/** Fetches and parses metadata for one RADC chunk. */
|
|
100
|
+
async getChunkMetadata(chunkIndex, options = {}) {
|
|
101
|
+
let chunkMetadataPromise = this._chunkMetadataPromises.get(chunkIndex);
|
|
102
|
+
if (!chunkMetadataPromise) {
|
|
103
|
+
chunkMetadataPromise = this.getChunk(chunkIndex, options).then((chunk) => parseRADChunkHeader(chunk));
|
|
104
|
+
this._chunkMetadataPromises.set(chunkIndex, chunkMetadataPromise);
|
|
105
|
+
}
|
|
106
|
+
return await chunkMetadataPromise;
|
|
107
|
+
}
|
|
108
|
+
/** Fetches and decodes one RADC chunk into raw Gaussian splat arrays. */
|
|
109
|
+
async getChunkSplats(chunkIndex, options = {}) {
|
|
110
|
+
const metadata = await this.getMetadata();
|
|
111
|
+
return parseRADChunkToGaussianSplats(await this.getChunk(chunkIndex, options), this._getChunkDecodeOptions(metadata, options));
|
|
112
|
+
}
|
|
113
|
+
/** Fetches and decodes one RADC chunk into a Mesh Arrow table. */
|
|
114
|
+
async getChunkTable(chunkIndex, options = {}) {
|
|
115
|
+
const metadata = await this.getMetadata();
|
|
116
|
+
return parseRADChunk(await this.getChunk(chunkIndex, options), this._getChunkDecodeOptions(metadata, options));
|
|
117
|
+
}
|
|
118
|
+
/** Iterates decoded RADC chunks as Mesh Arrow tables. */
|
|
119
|
+
async *getChunkTables(options = {}) {
|
|
120
|
+
const metadata = await this.getMetadata();
|
|
121
|
+
const startChunkIndex = options.startChunkIndex ?? 0;
|
|
122
|
+
const maxChunks = options.maxChunks ?? Number.POSITIVE_INFINITY;
|
|
123
|
+
const maxSplats = options.maxSplats ?? Number.POSITIVE_INFINITY;
|
|
124
|
+
let chunkCount = 0;
|
|
125
|
+
let splatCount = 0;
|
|
126
|
+
if (options.pruneLoadedLoDParents) {
|
|
127
|
+
const chunkIndices = getRADChunkTableIteratorIndices(metadata, startChunkIndex, maxChunks, maxSplats);
|
|
128
|
+
const splatChunks = await this._getChunkSplatsConcurrently(chunkIndices, options);
|
|
129
|
+
let loadedGlobalSplatEnd = 0;
|
|
130
|
+
for (const splats of splatChunks) {
|
|
131
|
+
chunkCount++;
|
|
132
|
+
splatCount += splats.splatCount;
|
|
133
|
+
const base = getRADChunkSplatBase(splats);
|
|
134
|
+
loadedGlobalSplatEnd = Math.max(loadedGlobalSplatEnd, base + splats.splatCount);
|
|
135
|
+
}
|
|
136
|
+
for (const splats of splatChunks) {
|
|
137
|
+
yield makeGaussianSplatsArrowTable(pruneLoadedLoDParents(splats, loadedGlobalSplatEnd));
|
|
138
|
+
}
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
for (let chunkIndex = startChunkIndex; chunkIndex < metadata.chunks.length && chunkCount < maxChunks && splatCount < maxSplats; chunkIndex++) {
|
|
142
|
+
const table = await this.getChunkTable(chunkIndex, options);
|
|
143
|
+
chunkCount++;
|
|
144
|
+
splatCount += table.data.numRows;
|
|
145
|
+
yield table;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/** Fetches and decodes RAD chunks with bounded concurrency while preserving chunk order. */
|
|
149
|
+
async _getChunkSplatsConcurrently(chunkIndices, options) {
|
|
150
|
+
const splatChunks = new Array(chunkIndices.length);
|
|
151
|
+
const maxConcurrentChunkRequests = getRADMaxConcurrentChunkRequests(options.maxConcurrentChunkRequests);
|
|
152
|
+
let nextResultIndex = 0;
|
|
153
|
+
async function loadNextChunk(source) {
|
|
154
|
+
while (nextResultIndex < chunkIndices.length) {
|
|
155
|
+
const resultIndex = nextResultIndex++;
|
|
156
|
+
const chunkIndex = chunkIndices[resultIndex];
|
|
157
|
+
splatChunks[resultIndex] = await source.getChunkSplats(chunkIndex, options);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
const workerCount = Math.min(maxConcurrentChunkRequests, chunkIndices.length);
|
|
161
|
+
await Promise.all(Array.from({ length: workerCount }, () => loadNextChunk(this)));
|
|
162
|
+
return splatChunks;
|
|
163
|
+
}
|
|
164
|
+
/** Adds source-level RAD decode metadata to chunk decode options. */
|
|
165
|
+
_getChunkDecodeOptions(metadata, options) {
|
|
166
|
+
return {
|
|
167
|
+
...options,
|
|
168
|
+
radChunk: {
|
|
169
|
+
splatEncoding: metadata.splatEncoding,
|
|
170
|
+
...options.radChunk
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
/** Loads and parses the top-level RAD metadata. */
|
|
175
|
+
async _loadMetadata() {
|
|
176
|
+
const headerByteLengths = this.options.rad?.headerByteLengths?.length
|
|
177
|
+
? this.options.rad.headerByteLengths
|
|
178
|
+
: DEFAULT_RAD_HEADER_BYTE_LENGTHS;
|
|
179
|
+
if (typeof this.data !== 'string') {
|
|
180
|
+
const byteLength = Math.min(this.data.size, Math.max(...headerByteLengths));
|
|
181
|
+
const metadata = tryParseRADHeader(await this.data.slice(0, byteLength).arrayBuffer());
|
|
182
|
+
if (metadata) {
|
|
183
|
+
return metadata;
|
|
184
|
+
}
|
|
185
|
+
throw new Error('RADSource: Blob does not contain a complete RAD metadata header.');
|
|
186
|
+
}
|
|
187
|
+
for (const byteLength of headerByteLengths) {
|
|
188
|
+
const metadata = tryParseRADHeader(await this._fetchArrayBuffer(this.url, { offset: 0, bytes: byteLength }));
|
|
189
|
+
if (metadata) {
|
|
190
|
+
return metadata;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
throw new Error('RADSource: failed to load a complete RAD metadata header.');
|
|
194
|
+
}
|
|
195
|
+
/** Returns a validated chunk table entry. */
|
|
196
|
+
_getChunkRange(metadata, chunkIndex) {
|
|
197
|
+
if (!Number.isInteger(chunkIndex) || chunkIndex < 0 || chunkIndex >= metadata.chunks.length) {
|
|
198
|
+
throw new Error(`RADSource: chunk index ${chunkIndex} is outside 0-${metadata.chunks.length - 1}.`);
|
|
199
|
+
}
|
|
200
|
+
return metadata.chunks[chunkIndex];
|
|
201
|
+
}
|
|
202
|
+
/** Fetches a full or ranged ArrayBuffer while tolerating non-206 range fallbacks. */
|
|
203
|
+
async _fetchArrayBuffer(url, range, options = {}) {
|
|
204
|
+
const response = await this._fetchResponse(url, this._getRequestInit(range, options));
|
|
205
|
+
if (!response.ok) {
|
|
206
|
+
throw new Error(`RADSource: failed to fetch ${url}: ${response.status} ${response.statusText}`);
|
|
207
|
+
}
|
|
208
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
209
|
+
if (range && response.status !== 206 && arrayBuffer.byteLength >= range.offset + range.bytes) {
|
|
210
|
+
return arrayBuffer.slice(range.offset, range.offset + range.bytes);
|
|
211
|
+
}
|
|
212
|
+
if (range && arrayBuffer.byteLength > range.bytes) {
|
|
213
|
+
return arrayBuffer.slice(0, range.bytes);
|
|
214
|
+
}
|
|
215
|
+
return arrayBuffer;
|
|
216
|
+
}
|
|
217
|
+
/** Fetches through custom source fetch hooks or the injected core fetchFile helper. */
|
|
218
|
+
async _fetchResponse(url, requestInit) {
|
|
219
|
+
return await this.fetch(url, requestInit);
|
|
220
|
+
}
|
|
221
|
+
/** Builds request options for RAD fetches. */
|
|
222
|
+
_getRequestInit(range, options = {}) {
|
|
223
|
+
const headers = new Headers(this.options.rad?.headers);
|
|
224
|
+
if (range && range.bytes > 0) {
|
|
225
|
+
headers.set('Range', `bytes=${range.offset}-${range.offset + range.bytes - 1}`);
|
|
226
|
+
}
|
|
227
|
+
return {
|
|
228
|
+
headers,
|
|
229
|
+
credentials: this.options.rad?.withCredentials ? 'include' : 'same-origin',
|
|
230
|
+
signal: options.signal
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/** Returns the RAD chunk indices requested by a chunk-table iterator. */
|
|
235
|
+
function getRADChunkTableIteratorIndices(metadata, startChunkIndex, maxChunks, maxSplats) {
|
|
236
|
+
const chunkIndices = [];
|
|
237
|
+
let estimatedSplatCount = 0;
|
|
238
|
+
for (let chunkIndex = startChunkIndex; chunkIndex < metadata.chunks.length &&
|
|
239
|
+
chunkIndices.length < maxChunks &&
|
|
240
|
+
estimatedSplatCount < maxSplats; chunkIndex++) {
|
|
241
|
+
const chunk = metadata.chunks[chunkIndex];
|
|
242
|
+
chunkIndices.push(chunkIndex);
|
|
243
|
+
estimatedSplatCount += chunk?.count ?? metadata.chunkSize ?? 0;
|
|
244
|
+
}
|
|
245
|
+
return chunkIndices;
|
|
246
|
+
}
|
|
247
|
+
/** Returns a positive integer chunk request concurrency limit. */
|
|
248
|
+
function getRADMaxConcurrentChunkRequests(maxConcurrentChunkRequests) {
|
|
249
|
+
return Number.isFinite(maxConcurrentChunkRequests) && maxConcurrentChunkRequests > 0
|
|
250
|
+
? Math.floor(maxConcurrentChunkRequests)
|
|
251
|
+
: DEFAULT_RAD_MAX_CONCURRENT_CHUNK_REQUESTS;
|
|
252
|
+
}
|
|
253
|
+
/** Returns the first global splat index represented by decoded RAD chunk data. */
|
|
254
|
+
function getRADChunkSplatBase(splats) {
|
|
255
|
+
return typeof splats.loaderData?.base === 'number' ? splats.loaderData.base : 0;
|
|
256
|
+
}
|
|
257
|
+
/** Remove parent LoD rows when their children are present in the loaded chunk range. */
|
|
258
|
+
function pruneLoadedLoDParents(splats, loadedGlobalSplatEnd) {
|
|
259
|
+
const childCounts = splats.loaderData?.childCounts;
|
|
260
|
+
const childStarts = splats.loaderData?.childStarts;
|
|
261
|
+
if (!(childCounts instanceof Uint16Array) || !(childStarts instanceof Uint32Array)) {
|
|
262
|
+
return splats;
|
|
263
|
+
}
|
|
264
|
+
const keepRows = new Uint32Array(splats.splatCount);
|
|
265
|
+
let keepCount = 0;
|
|
266
|
+
for (let rowIndex = 0; rowIndex < splats.splatCount; rowIndex++) {
|
|
267
|
+
const childCount = childCounts[rowIndex];
|
|
268
|
+
const childStart = childStarts[rowIndex];
|
|
269
|
+
if (childCount > 0 && childStart < loadedGlobalSplatEnd) {
|
|
270
|
+
continue;
|
|
271
|
+
}
|
|
272
|
+
keepRows[keepCount++] = rowIndex;
|
|
273
|
+
}
|
|
274
|
+
if (keepCount === splats.splatCount) {
|
|
275
|
+
return splats;
|
|
276
|
+
}
|
|
277
|
+
const keptRows = keepRows.subarray(0, keepCount);
|
|
278
|
+
const sphericalHarmonicsComponentCount = splats.sphericalHarmonicsComponentCount ?? 0;
|
|
279
|
+
return {
|
|
280
|
+
...splats,
|
|
281
|
+
splatCount: keepCount,
|
|
282
|
+
positions: copyInterleavedRows(splats.positions, 3, keptRows),
|
|
283
|
+
scales: copyInterleavedRows(splats.scales, 3, keptRows),
|
|
284
|
+
rotations: copyInterleavedRows(splats.rotations, 4, keptRows),
|
|
285
|
+
colors: copyInterleavedRows(splats.colors, 3, keptRows),
|
|
286
|
+
sphericalHarmonicDcs: splats.sphericalHarmonicDcs
|
|
287
|
+
? copyInterleavedRows(splats.sphericalHarmonicDcs, 3, keptRows)
|
|
288
|
+
: undefined,
|
|
289
|
+
opacities: copyInterleavedRows(splats.opacities, 1, keptRows),
|
|
290
|
+
sphericalHarmonics: splats.sphericalHarmonics && sphericalHarmonicsComponentCount
|
|
291
|
+
? copyInterleavedRows(splats.sphericalHarmonics, sphericalHarmonicsComponentCount, keptRows)
|
|
292
|
+
: undefined,
|
|
293
|
+
loaderData: {
|
|
294
|
+
...splats.loaderData,
|
|
295
|
+
count: keepCount,
|
|
296
|
+
childCounts: copyInterleavedRows(childCounts, 1, keptRows),
|
|
297
|
+
childStarts: copyInterleavedRows(childStarts, 1, keptRows)
|
|
298
|
+
}
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
/** Copy selected rows from an interleaved typed array. */
|
|
302
|
+
function copyInterleavedRows(values, itemSize, rows) {
|
|
303
|
+
const copiedValues = new values.constructor(rows.length * itemSize);
|
|
304
|
+
for (let outputRowIndex = 0; outputRowIndex < rows.length; outputRowIndex++) {
|
|
305
|
+
const inputOffset = rows[outputRowIndex] * itemSize;
|
|
306
|
+
const outputOffset = outputRowIndex * itemSize;
|
|
307
|
+
copiedValues.set(values.subarray(inputOffset, inputOffset + itemSize), outputOffset);
|
|
308
|
+
}
|
|
309
|
+
return copiedValues;
|
|
310
|
+
}
|
|
311
|
+
/** Resolves a sidecar RADC chunk filename relative to its parent RAD URL. */
|
|
312
|
+
export function resolveRADChunkUrl(rootUrl, chunkFilename) {
|
|
313
|
+
if (/^[a-z][a-z0-9+.-]*:/i.test(chunkFilename) || chunkFilename.startsWith('/')) {
|
|
314
|
+
return chunkFilename;
|
|
315
|
+
}
|
|
316
|
+
if (!rootUrl) {
|
|
317
|
+
throw new Error('RADSource: cannot resolve a sidecar RADC chunk without a RAD URL.');
|
|
318
|
+
}
|
|
319
|
+
try {
|
|
320
|
+
return new URL(chunkFilename, rootUrl).toString();
|
|
321
|
+
}
|
|
322
|
+
catch {
|
|
323
|
+
const [rootPath, suffix = ''] = rootUrl.split(/([?#].*)/, 2);
|
|
324
|
+
const lastSlashIndex = Math.max(rootPath.lastIndexOf('/'), rootPath.lastIndexOf('\\'));
|
|
325
|
+
const rootDirectory = lastSlashIndex >= 0 ? rootPath.slice(0, lastSlashIndex + 1) : '';
|
|
326
|
+
return `${rootDirectory}${chunkFilename}${suffix}`;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
//# sourceMappingURL=rad-source-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rad-source-loader.js","sourceRoot":"","sources":["../src/rad-source-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// dist/rad-zod-schema.js
|
|
21
|
+
var rad_zod_schema_exports = {};
|
|
22
|
+
__export(rad_zod_schema_exports, {
|
|
23
|
+
RADChunkMetadataJSONSchema: () => RADChunkMetadataJSONSchema,
|
|
24
|
+
RADChunkPropertySchema: () => RADChunkPropertySchema,
|
|
25
|
+
RADChunkRangeSchema: () => RADChunkRangeSchema,
|
|
26
|
+
RADMetadataJSONSchema: () => RADMetadataJSONSchema,
|
|
27
|
+
RADSplatEncodingSchema: () => RADSplatEncodingSchema
|
|
28
|
+
});
|
|
29
|
+
module.exports = __toCommonJS(rad_zod_schema_exports);
|
|
30
|
+
var import_zod = require("zod");
|
|
31
|
+
var nonNegativeSafeIntegerSchema = import_zod.z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER);
|
|
32
|
+
var RADSplatEncodingSchema = import_zod.z.object({
|
|
33
|
+
rgbMin: import_zod.z.number().finite().optional(),
|
|
34
|
+
rgbMax: import_zod.z.number().finite().optional(),
|
|
35
|
+
lnScaleMin: import_zod.z.number().finite().optional(),
|
|
36
|
+
lnScaleMax: import_zod.z.number().finite().optional(),
|
|
37
|
+
sh1Max: import_zod.z.number().finite().optional(),
|
|
38
|
+
sh2Max: import_zod.z.number().finite().optional(),
|
|
39
|
+
sh3Max: import_zod.z.number().finite().optional(),
|
|
40
|
+
lodOpacity: import_zod.z.boolean().optional()
|
|
41
|
+
}).passthrough();
|
|
42
|
+
var RADChunkRangeSchema = import_zod.z.object({
|
|
43
|
+
offset: nonNegativeSafeIntegerSchema,
|
|
44
|
+
bytes: nonNegativeSafeIntegerSchema,
|
|
45
|
+
base: nonNegativeSafeIntegerSchema.optional(),
|
|
46
|
+
count: nonNegativeSafeIntegerSchema.optional(),
|
|
47
|
+
filename: import_zod.z.string().optional()
|
|
48
|
+
}).passthrough();
|
|
49
|
+
var RADMetadataJSONSchema = import_zod.z.object({
|
|
50
|
+
version: import_zod.z.literal(1),
|
|
51
|
+
type: import_zod.z.literal("gsplat"),
|
|
52
|
+
count: nonNegativeSafeIntegerSchema,
|
|
53
|
+
maxSh: nonNegativeSafeIntegerSchema.optional(),
|
|
54
|
+
lodTree: import_zod.z.boolean().optional(),
|
|
55
|
+
chunkSize: nonNegativeSafeIntegerSchema.optional(),
|
|
56
|
+
allChunkBytes: nonNegativeSafeIntegerSchema.optional(),
|
|
57
|
+
chunks: import_zod.z.array(RADChunkRangeSchema),
|
|
58
|
+
splatEncoding: RADSplatEncodingSchema.optional(),
|
|
59
|
+
shCodeCount: nonNegativeSafeIntegerSchema.optional(),
|
|
60
|
+
comment: import_zod.z.string().optional()
|
|
61
|
+
}).passthrough();
|
|
62
|
+
var RADChunkPropertySchema = import_zod.z.object({
|
|
63
|
+
offset: nonNegativeSafeIntegerSchema,
|
|
64
|
+
bytes: nonNegativeSafeIntegerSchema,
|
|
65
|
+
property: import_zod.z.string(),
|
|
66
|
+
encoding: import_zod.z.string(),
|
|
67
|
+
compression: import_zod.z.string().optional(),
|
|
68
|
+
min: import_zod.z.number().finite().optional(),
|
|
69
|
+
max: import_zod.z.number().finite().optional()
|
|
70
|
+
}).passthrough();
|
|
71
|
+
var RADChunkMetadataJSONSchema = import_zod.z.object({
|
|
72
|
+
version: import_zod.z.literal(1),
|
|
73
|
+
base: nonNegativeSafeIntegerSchema,
|
|
74
|
+
count: nonNegativeSafeIntegerSchema,
|
|
75
|
+
payloadBytes: nonNegativeSafeIntegerSchema,
|
|
76
|
+
maxSh: nonNegativeSafeIntegerSchema.optional(),
|
|
77
|
+
lodTree: import_zod.z.boolean().optional(),
|
|
78
|
+
splatEncoding: RADSplatEncodingSchema.optional(),
|
|
79
|
+
properties: import_zod.z.array(RADChunkPropertySchema)
|
|
80
|
+
}).passthrough();
|
|
81
|
+
//# sourceMappingURL=rad-zod-schema.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/rad-zod-schema.ts"],
|
|
4
|
+
"sourcesContent": ["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {z} from 'zod';\nimport type {\n RADChunkMetadataJSON,\n RADChunkProperty,\n RADChunkRange,\n RADMetadataJSON,\n RADSplatEncoding\n} from './lib/parse-rad';\n\nconst nonNegativeSafeIntegerSchema = z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER);\n\n/** Zod schema for Spark RAD splat quantization and shader decode ranges. */\nexport const RADSplatEncodingSchema = z\n .object({\n rgbMin: z.number().finite().optional(),\n rgbMax: z.number().finite().optional(),\n lnScaleMin: z.number().finite().optional(),\n lnScaleMax: z.number().finite().optional(),\n sh1Max: z.number().finite().optional(),\n sh2Max: z.number().finite().optional(),\n sh3Max: z.number().finite().optional(),\n lodOpacity: z.boolean().optional()\n })\n .passthrough() satisfies z.ZodType<RADSplatEncoding>;\n\n/** Zod schema for one chunk-table entry in top-level RAD metadata. */\nexport const RADChunkRangeSchema = z\n .object({\n offset: nonNegativeSafeIntegerSchema,\n bytes: nonNegativeSafeIntegerSchema,\n base: nonNegativeSafeIntegerSchema.optional(),\n count: nonNegativeSafeIntegerSchema.optional(),\n filename: z.string().optional()\n })\n .passthrough() satisfies z.ZodType<RADChunkRange>;\n\n/** Zod schema for raw JSON metadata stored in a Spark RAD header. */\nexport const RADMetadataJSONSchema = z\n .object({\n version: z.literal(1),\n type: z.literal('gsplat'),\n count: nonNegativeSafeIntegerSchema,\n maxSh: nonNegativeSafeIntegerSchema.optional(),\n lodTree: z.boolean().optional(),\n chunkSize: nonNegativeSafeIntegerSchema.optional(),\n allChunkBytes: nonNegativeSafeIntegerSchema.optional(),\n chunks: z.array(RADChunkRangeSchema),\n splatEncoding: RADSplatEncodingSchema.optional(),\n shCodeCount: nonNegativeSafeIntegerSchema.optional(),\n comment: z.string().optional()\n })\n .passthrough() satisfies z.ZodType<RADMetadataJSON>;\n\n/** Zod schema for one property-table entry in RADC metadata. */\nexport const RADChunkPropertySchema = z\n .object({\n offset: nonNegativeSafeIntegerSchema,\n bytes: nonNegativeSafeIntegerSchema,\n property: z.string(),\n encoding: z.string(),\n compression: z.string().optional(),\n min: z.number().finite().optional(),\n max: z.number().finite().optional()\n })\n .passthrough() satisfies z.ZodType<RADChunkProperty>;\n\n/** Zod schema for raw JSON metadata stored in a Spark RADC chunk header. */\nexport const RADChunkMetadataJSONSchema = z\n .object({\n version: z.literal(1),\n base: nonNegativeSafeIntegerSchema,\n count: nonNegativeSafeIntegerSchema,\n payloadBytes: nonNegativeSafeIntegerSchema,\n maxSh: nonNegativeSafeIntegerSchema.optional(),\n lodTree: z.boolean().optional(),\n splatEncoding: RADSplatEncodingSchema.optional(),\n properties: z.array(RADChunkPropertySchema)\n })\n .passthrough() satisfies z.ZodType<RADChunkMetadataJSON>;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;AAIA,iBAAgB;AAShB,IAAM,+BAA+B,aAAE,OAAM,EAAG,IAAG,EAAG,YAAW,EAAG,IAAI,OAAO,gBAAgB;AAGxF,IAAM,yBAAyB,aACnC,OAAO;EACN,QAAQ,aAAE,OAAM,EAAG,OAAM,EAAG,SAAQ;EACpC,QAAQ,aAAE,OAAM,EAAG,OAAM,EAAG,SAAQ;EACpC,YAAY,aAAE,OAAM,EAAG,OAAM,EAAG,SAAQ;EACxC,YAAY,aAAE,OAAM,EAAG,OAAM,EAAG,SAAQ;EACxC,QAAQ,aAAE,OAAM,EAAG,OAAM,EAAG,SAAQ;EACpC,QAAQ,aAAE,OAAM,EAAG,OAAM,EAAG,SAAQ;EACpC,QAAQ,aAAE,OAAM,EAAG,OAAM,EAAG,SAAQ;EACpC,YAAY,aAAE,QAAO,EAAG,SAAQ;CACjC,EACA,YAAW;AAGP,IAAM,sBAAsB,aAChC,OAAO;EACN,QAAQ;EACR,OAAO;EACP,MAAM,6BAA6B,SAAQ;EAC3C,OAAO,6BAA6B,SAAQ;EAC5C,UAAU,aAAE,OAAM,EAAG,SAAQ;CAC9B,EACA,YAAW;AAGP,IAAM,wBAAwB,aAClC,OAAO;EACN,SAAS,aAAE,QAAQ,CAAC;EACpB,MAAM,aAAE,QAAQ,QAAQ;EACxB,OAAO;EACP,OAAO,6BAA6B,SAAQ;EAC5C,SAAS,aAAE,QAAO,EAAG,SAAQ;EAC7B,WAAW,6BAA6B,SAAQ;EAChD,eAAe,6BAA6B,SAAQ;EACpD,QAAQ,aAAE,MAAM,mBAAmB;EACnC,eAAe,uBAAuB,SAAQ;EAC9C,aAAa,6BAA6B,SAAQ;EAClD,SAAS,aAAE,OAAM,EAAG,SAAQ;CAC7B,EACA,YAAW;AAGP,IAAM,yBAAyB,aACnC,OAAO;EACN,QAAQ;EACR,OAAO;EACP,UAAU,aAAE,OAAM;EAClB,UAAU,aAAE,OAAM;EAClB,aAAa,aAAE,OAAM,EAAG,SAAQ;EAChC,KAAK,aAAE,OAAM,EAAG,OAAM,EAAG,SAAQ;EACjC,KAAK,aAAE,OAAM,EAAG,OAAM,EAAG,SAAQ;CAClC,EACA,YAAW;AAGP,IAAM,6BAA6B,aACvC,OAAO;EACN,SAAS,aAAE,QAAQ,CAAC;EACpB,MAAM;EACN,OAAO;EACP,cAAc;EACd,OAAO,6BAA6B,SAAQ;EAC5C,SAAS,aAAE,QAAO,EAAG,SAAQ;EAC7B,eAAe,uBAAuB,SAAQ;EAC9C,YAAY,aAAE,MAAM,sBAAsB;CAC3C,EACA,YAAW;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/** Zod schema for Spark RAD splat quantization and shader decode ranges. */
|
|
3
|
+
export declare const RADSplatEncodingSchema: z.ZodObject<{
|
|
4
|
+
rgbMin: z.ZodOptional<z.ZodNumber>;
|
|
5
|
+
rgbMax: z.ZodOptional<z.ZodNumber>;
|
|
6
|
+
lnScaleMin: z.ZodOptional<z.ZodNumber>;
|
|
7
|
+
lnScaleMax: z.ZodOptional<z.ZodNumber>;
|
|
8
|
+
sh1Max: z.ZodOptional<z.ZodNumber>;
|
|
9
|
+
sh2Max: z.ZodOptional<z.ZodNumber>;
|
|
10
|
+
sh3Max: z.ZodOptional<z.ZodNumber>;
|
|
11
|
+
lodOpacity: z.ZodOptional<z.ZodBoolean>;
|
|
12
|
+
}, z.core.$loose>;
|
|
13
|
+
/** Zod schema for one chunk-table entry in top-level RAD metadata. */
|
|
14
|
+
export declare const RADChunkRangeSchema: z.ZodObject<{
|
|
15
|
+
offset: z.ZodNumber;
|
|
16
|
+
bytes: z.ZodNumber;
|
|
17
|
+
base: z.ZodOptional<z.ZodNumber>;
|
|
18
|
+
count: z.ZodOptional<z.ZodNumber>;
|
|
19
|
+
filename: z.ZodOptional<z.ZodString>;
|
|
20
|
+
}, z.core.$loose>;
|
|
21
|
+
/** Zod schema for raw JSON metadata stored in a Spark RAD header. */
|
|
22
|
+
export declare const RADMetadataJSONSchema: z.ZodObject<{
|
|
23
|
+
version: z.ZodLiteral<1>;
|
|
24
|
+
type: z.ZodLiteral<"gsplat">;
|
|
25
|
+
count: z.ZodNumber;
|
|
26
|
+
maxSh: z.ZodOptional<z.ZodNumber>;
|
|
27
|
+
lodTree: z.ZodOptional<z.ZodBoolean>;
|
|
28
|
+
chunkSize: z.ZodOptional<z.ZodNumber>;
|
|
29
|
+
allChunkBytes: z.ZodOptional<z.ZodNumber>;
|
|
30
|
+
chunks: z.ZodArray<z.ZodObject<{
|
|
31
|
+
offset: z.ZodNumber;
|
|
32
|
+
bytes: z.ZodNumber;
|
|
33
|
+
base: z.ZodOptional<z.ZodNumber>;
|
|
34
|
+
count: z.ZodOptional<z.ZodNumber>;
|
|
35
|
+
filename: z.ZodOptional<z.ZodString>;
|
|
36
|
+
}, z.core.$loose>>;
|
|
37
|
+
splatEncoding: z.ZodOptional<z.ZodObject<{
|
|
38
|
+
rgbMin: z.ZodOptional<z.ZodNumber>;
|
|
39
|
+
rgbMax: z.ZodOptional<z.ZodNumber>;
|
|
40
|
+
lnScaleMin: z.ZodOptional<z.ZodNumber>;
|
|
41
|
+
lnScaleMax: z.ZodOptional<z.ZodNumber>;
|
|
42
|
+
sh1Max: z.ZodOptional<z.ZodNumber>;
|
|
43
|
+
sh2Max: z.ZodOptional<z.ZodNumber>;
|
|
44
|
+
sh3Max: z.ZodOptional<z.ZodNumber>;
|
|
45
|
+
lodOpacity: z.ZodOptional<z.ZodBoolean>;
|
|
46
|
+
}, z.core.$loose>>;
|
|
47
|
+
shCodeCount: z.ZodOptional<z.ZodNumber>;
|
|
48
|
+
comment: z.ZodOptional<z.ZodString>;
|
|
49
|
+
}, z.core.$loose>;
|
|
50
|
+
/** Zod schema for one property-table entry in RADC metadata. */
|
|
51
|
+
export declare const RADChunkPropertySchema: z.ZodObject<{
|
|
52
|
+
offset: z.ZodNumber;
|
|
53
|
+
bytes: z.ZodNumber;
|
|
54
|
+
property: z.ZodString;
|
|
55
|
+
encoding: z.ZodString;
|
|
56
|
+
compression: z.ZodOptional<z.ZodString>;
|
|
57
|
+
min: z.ZodOptional<z.ZodNumber>;
|
|
58
|
+
max: z.ZodOptional<z.ZodNumber>;
|
|
59
|
+
}, z.core.$loose>;
|
|
60
|
+
/** Zod schema for raw JSON metadata stored in a Spark RADC chunk header. */
|
|
61
|
+
export declare const RADChunkMetadataJSONSchema: z.ZodObject<{
|
|
62
|
+
version: z.ZodLiteral<1>;
|
|
63
|
+
base: z.ZodNumber;
|
|
64
|
+
count: z.ZodNumber;
|
|
65
|
+
payloadBytes: z.ZodNumber;
|
|
66
|
+
maxSh: z.ZodOptional<z.ZodNumber>;
|
|
67
|
+
lodTree: z.ZodOptional<z.ZodBoolean>;
|
|
68
|
+
splatEncoding: z.ZodOptional<z.ZodObject<{
|
|
69
|
+
rgbMin: z.ZodOptional<z.ZodNumber>;
|
|
70
|
+
rgbMax: z.ZodOptional<z.ZodNumber>;
|
|
71
|
+
lnScaleMin: z.ZodOptional<z.ZodNumber>;
|
|
72
|
+
lnScaleMax: z.ZodOptional<z.ZodNumber>;
|
|
73
|
+
sh1Max: z.ZodOptional<z.ZodNumber>;
|
|
74
|
+
sh2Max: z.ZodOptional<z.ZodNumber>;
|
|
75
|
+
sh3Max: z.ZodOptional<z.ZodNumber>;
|
|
76
|
+
lodOpacity: z.ZodOptional<z.ZodBoolean>;
|
|
77
|
+
}, z.core.$loose>>;
|
|
78
|
+
properties: z.ZodArray<z.ZodObject<{
|
|
79
|
+
offset: z.ZodNumber;
|
|
80
|
+
bytes: z.ZodNumber;
|
|
81
|
+
property: z.ZodString;
|
|
82
|
+
encoding: z.ZodString;
|
|
83
|
+
compression: z.ZodOptional<z.ZodString>;
|
|
84
|
+
min: z.ZodOptional<z.ZodNumber>;
|
|
85
|
+
max: z.ZodOptional<z.ZodNumber>;
|
|
86
|
+
}, z.core.$loose>>;
|
|
87
|
+
}, z.core.$loose>;
|
|
88
|
+
//# sourceMappingURL=rad-zod-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rad-zod-schema.d.ts","sourceRoot":"","sources":["../src/rad-zod-schema.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAWtB,4EAA4E;AAC5E,eAAO,MAAM,sBAAsB;;;;;;;;;iBAWmB,CAAC;AAEvD,sEAAsE;AACtE,eAAO,MAAM,mBAAmB;;;;;;iBAQmB,CAAC;AAEpD,qEAAqE;AACrE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAcmB,CAAC;AAEtD,gEAAgE;AAChE,eAAO,MAAM,sBAAsB;;;;;;;;iBAUmB,CAAC;AAEvD,4EAA4E;AAC5E,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;iBAWmB,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
const nonNegativeSafeIntegerSchema = z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER);
|
|
6
|
+
/** Zod schema for Spark RAD splat quantization and shader decode ranges. */
|
|
7
|
+
export const RADSplatEncodingSchema = z
|
|
8
|
+
.object({
|
|
9
|
+
rgbMin: z.number().finite().optional(),
|
|
10
|
+
rgbMax: z.number().finite().optional(),
|
|
11
|
+
lnScaleMin: z.number().finite().optional(),
|
|
12
|
+
lnScaleMax: z.number().finite().optional(),
|
|
13
|
+
sh1Max: z.number().finite().optional(),
|
|
14
|
+
sh2Max: z.number().finite().optional(),
|
|
15
|
+
sh3Max: z.number().finite().optional(),
|
|
16
|
+
lodOpacity: z.boolean().optional()
|
|
17
|
+
})
|
|
18
|
+
.passthrough();
|
|
19
|
+
/** Zod schema for one chunk-table entry in top-level RAD metadata. */
|
|
20
|
+
export const RADChunkRangeSchema = z
|
|
21
|
+
.object({
|
|
22
|
+
offset: nonNegativeSafeIntegerSchema,
|
|
23
|
+
bytes: nonNegativeSafeIntegerSchema,
|
|
24
|
+
base: nonNegativeSafeIntegerSchema.optional(),
|
|
25
|
+
count: nonNegativeSafeIntegerSchema.optional(),
|
|
26
|
+
filename: z.string().optional()
|
|
27
|
+
})
|
|
28
|
+
.passthrough();
|
|
29
|
+
/** Zod schema for raw JSON metadata stored in a Spark RAD header. */
|
|
30
|
+
export const RADMetadataJSONSchema = z
|
|
31
|
+
.object({
|
|
32
|
+
version: z.literal(1),
|
|
33
|
+
type: z.literal('gsplat'),
|
|
34
|
+
count: nonNegativeSafeIntegerSchema,
|
|
35
|
+
maxSh: nonNegativeSafeIntegerSchema.optional(),
|
|
36
|
+
lodTree: z.boolean().optional(),
|
|
37
|
+
chunkSize: nonNegativeSafeIntegerSchema.optional(),
|
|
38
|
+
allChunkBytes: nonNegativeSafeIntegerSchema.optional(),
|
|
39
|
+
chunks: z.array(RADChunkRangeSchema),
|
|
40
|
+
splatEncoding: RADSplatEncodingSchema.optional(),
|
|
41
|
+
shCodeCount: nonNegativeSafeIntegerSchema.optional(),
|
|
42
|
+
comment: z.string().optional()
|
|
43
|
+
})
|
|
44
|
+
.passthrough();
|
|
45
|
+
/** Zod schema for one property-table entry in RADC metadata. */
|
|
46
|
+
export const RADChunkPropertySchema = z
|
|
47
|
+
.object({
|
|
48
|
+
offset: nonNegativeSafeIntegerSchema,
|
|
49
|
+
bytes: nonNegativeSafeIntegerSchema,
|
|
50
|
+
property: z.string(),
|
|
51
|
+
encoding: z.string(),
|
|
52
|
+
compression: z.string().optional(),
|
|
53
|
+
min: z.number().finite().optional(),
|
|
54
|
+
max: z.number().finite().optional()
|
|
55
|
+
})
|
|
56
|
+
.passthrough();
|
|
57
|
+
/** Zod schema for raw JSON metadata stored in a Spark RADC chunk header. */
|
|
58
|
+
export const RADChunkMetadataJSONSchema = z
|
|
59
|
+
.object({
|
|
60
|
+
version: z.literal(1),
|
|
61
|
+
base: nonNegativeSafeIntegerSchema,
|
|
62
|
+
count: nonNegativeSafeIntegerSchema,
|
|
63
|
+
payloadBytes: nonNegativeSafeIntegerSchema,
|
|
64
|
+
maxSh: nonNegativeSafeIntegerSchema.optional(),
|
|
65
|
+
lodTree: z.boolean().optional(),
|
|
66
|
+
splatEncoding: RADSplatEncodingSchema.optional(),
|
|
67
|
+
properties: z.array(RADChunkPropertySchema)
|
|
68
|
+
})
|
|
69
|
+
.passthrough();
|
|
70
|
+
//# sourceMappingURL=rad-zod-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rad-zod-schema.js","sourceRoot":"","sources":["../src/rad-zod-schema.ts"],"names":[],"mappings":"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"}
|