@luma.gl/effects 9.3.0-alpha.2 → 9.3.0-alpha.4
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/dist/dist.dev.js +323 -179
- package/dist/dist.min.js +10 -9
- package/package.json +2 -2
package/dist/dist.dev.js
CHANGED
|
@@ -83,6 +83,8 @@ var __exports__ = (() => {
|
|
|
83
83
|
VertexArray: () => VertexArray,
|
|
84
84
|
_getTextureFormatDefinition: () => getTextureFormatDefinition,
|
|
85
85
|
_getTextureFormatTable: () => getTextureFormatTable,
|
|
86
|
+
assert: () => assert2,
|
|
87
|
+
assertDefined: () => assertDefined,
|
|
86
88
|
getAttributeInfosFromLayouts: () => getAttributeInfosFromLayouts,
|
|
87
89
|
getAttributeShaderTypeInfo: () => getAttributeShaderTypeInfo,
|
|
88
90
|
getDataType: () => getDataType,
|
|
@@ -343,7 +345,139 @@ var __exports__ = (() => {
|
|
|
343
345
|
}
|
|
344
346
|
|
|
345
347
|
// ../../node_modules/@probe.gl/env/dist/index.js
|
|
346
|
-
var VERSION = true ? "4.1.
|
|
348
|
+
var VERSION = true ? "4.1.1" : "untranspiled source";
|
|
349
|
+
|
|
350
|
+
// ../../node_modules/@probe.gl/log/dist/utils/assert.js
|
|
351
|
+
function assert(condition, message) {
|
|
352
|
+
if (!condition) {
|
|
353
|
+
throw new Error(message || "Assertion failed");
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
// ../../node_modules/@probe.gl/log/dist/loggers/log-utils.js
|
|
358
|
+
function normalizeLogLevel(logLevel) {
|
|
359
|
+
if (!logLevel) {
|
|
360
|
+
return 0;
|
|
361
|
+
}
|
|
362
|
+
let resolvedLevel;
|
|
363
|
+
switch (typeof logLevel) {
|
|
364
|
+
case "number":
|
|
365
|
+
resolvedLevel = logLevel;
|
|
366
|
+
break;
|
|
367
|
+
case "object":
|
|
368
|
+
resolvedLevel = logLevel.logLevel || logLevel.priority || 0;
|
|
369
|
+
break;
|
|
370
|
+
default:
|
|
371
|
+
return 0;
|
|
372
|
+
}
|
|
373
|
+
assert(Number.isFinite(resolvedLevel) && resolvedLevel >= 0);
|
|
374
|
+
return resolvedLevel;
|
|
375
|
+
}
|
|
376
|
+
function normalizeArguments(opts) {
|
|
377
|
+
const { logLevel, message } = opts;
|
|
378
|
+
opts.logLevel = normalizeLogLevel(logLevel);
|
|
379
|
+
const args = opts.args ? Array.from(opts.args) : [];
|
|
380
|
+
while (args.length && args.shift() !== message) {
|
|
381
|
+
}
|
|
382
|
+
switch (typeof logLevel) {
|
|
383
|
+
case "string":
|
|
384
|
+
case "function":
|
|
385
|
+
if (message !== void 0) {
|
|
386
|
+
args.unshift(message);
|
|
387
|
+
}
|
|
388
|
+
opts.message = logLevel;
|
|
389
|
+
break;
|
|
390
|
+
case "object":
|
|
391
|
+
Object.assign(opts, logLevel);
|
|
392
|
+
break;
|
|
393
|
+
default:
|
|
394
|
+
}
|
|
395
|
+
if (typeof opts.message === "function") {
|
|
396
|
+
opts.message = opts.message();
|
|
397
|
+
}
|
|
398
|
+
const messageType = typeof opts.message;
|
|
399
|
+
assert(messageType === "string" || messageType === "object");
|
|
400
|
+
return Object.assign(opts, { args }, opts.opts);
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
// ../../node_modules/@probe.gl/log/dist/loggers/base-log.js
|
|
404
|
+
var noop = () => {
|
|
405
|
+
};
|
|
406
|
+
var BaseLog = class {
|
|
407
|
+
constructor({ level = 0 } = {}) {
|
|
408
|
+
this.userData = {};
|
|
409
|
+
this._onceCache = /* @__PURE__ */ new Set();
|
|
410
|
+
this._level = level;
|
|
411
|
+
}
|
|
412
|
+
set level(newLevel) {
|
|
413
|
+
this.setLevel(newLevel);
|
|
414
|
+
}
|
|
415
|
+
get level() {
|
|
416
|
+
return this.getLevel();
|
|
417
|
+
}
|
|
418
|
+
setLevel(level) {
|
|
419
|
+
this._level = level;
|
|
420
|
+
return this;
|
|
421
|
+
}
|
|
422
|
+
getLevel() {
|
|
423
|
+
return this._level;
|
|
424
|
+
}
|
|
425
|
+
// Unconditional logging
|
|
426
|
+
warn(message, ...args) {
|
|
427
|
+
return this._log("warn", 0, message, args, { once: true });
|
|
428
|
+
}
|
|
429
|
+
error(message, ...args) {
|
|
430
|
+
return this._log("error", 0, message, args);
|
|
431
|
+
}
|
|
432
|
+
// Conditional logging
|
|
433
|
+
log(logLevel, message, ...args) {
|
|
434
|
+
return this._log("log", logLevel, message, args);
|
|
435
|
+
}
|
|
436
|
+
info(logLevel, message, ...args) {
|
|
437
|
+
return this._log("info", logLevel, message, args);
|
|
438
|
+
}
|
|
439
|
+
once(logLevel, message, ...args) {
|
|
440
|
+
return this._log("once", logLevel, message, args, { once: true });
|
|
441
|
+
}
|
|
442
|
+
_log(type, logLevel, message, args, options = {}) {
|
|
443
|
+
const normalized = normalizeArguments({
|
|
444
|
+
logLevel,
|
|
445
|
+
message,
|
|
446
|
+
args: this._buildArgs(logLevel, message, args),
|
|
447
|
+
opts: options
|
|
448
|
+
});
|
|
449
|
+
return this._createLogFunction(type, normalized, options);
|
|
450
|
+
}
|
|
451
|
+
_buildArgs(logLevel, message, args) {
|
|
452
|
+
return [logLevel, message, ...args];
|
|
453
|
+
}
|
|
454
|
+
_createLogFunction(type, normalized, options) {
|
|
455
|
+
if (!this._shouldLog(normalized.logLevel)) {
|
|
456
|
+
return noop;
|
|
457
|
+
}
|
|
458
|
+
const tag = this._getOnceTag(options.tag ?? normalized.tag ?? normalized.message);
|
|
459
|
+
if ((options.once || normalized.once) && tag !== void 0) {
|
|
460
|
+
if (this._onceCache.has(tag)) {
|
|
461
|
+
return noop;
|
|
462
|
+
}
|
|
463
|
+
this._onceCache.add(tag);
|
|
464
|
+
}
|
|
465
|
+
return this._emit(type, normalized);
|
|
466
|
+
}
|
|
467
|
+
_shouldLog(logLevel) {
|
|
468
|
+
return this.getLevel() >= normalizeLogLevel(logLevel);
|
|
469
|
+
}
|
|
470
|
+
_getOnceTag(tag) {
|
|
471
|
+
if (tag === void 0) {
|
|
472
|
+
return void 0;
|
|
473
|
+
}
|
|
474
|
+
try {
|
|
475
|
+
return typeof tag === "string" ? tag : String(tag);
|
|
476
|
+
} catch {
|
|
477
|
+
return void 0;
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
};
|
|
347
481
|
|
|
348
482
|
// ../../node_modules/@probe.gl/log/dist/utils/local-storage.js
|
|
349
483
|
function getStorage(type) {
|
|
@@ -462,13 +596,6 @@ var __exports__ = (() => {
|
|
|
462
596
|
}
|
|
463
597
|
}
|
|
464
598
|
|
|
465
|
-
// ../../node_modules/@probe.gl/log/dist/utils/assert.js
|
|
466
|
-
function assert(condition, message) {
|
|
467
|
-
if (!condition) {
|
|
468
|
-
throw new Error(message || "Assertion failed");
|
|
469
|
-
}
|
|
470
|
-
}
|
|
471
|
-
|
|
472
599
|
// ../../node_modules/@probe.gl/log/dist/utils/hi-res-timestamp.js
|
|
473
600
|
function getHiResTimestamp2() {
|
|
474
601
|
let timestamp;
|
|
@@ -483,7 +610,7 @@ var __exports__ = (() => {
|
|
|
483
610
|
return timestamp;
|
|
484
611
|
}
|
|
485
612
|
|
|
486
|
-
// ../../node_modules/@probe.gl/log/dist/log.js
|
|
613
|
+
// ../../node_modules/@probe.gl/log/dist/loggers/probe-log.js
|
|
487
614
|
var originalConsole = {
|
|
488
615
|
debug: isBrowser() ? console.debug || console.log : console.log,
|
|
489
616
|
log: console.log,
|
|
@@ -495,12 +622,9 @@ var __exports__ = (() => {
|
|
|
495
622
|
enabled: true,
|
|
496
623
|
level: 0
|
|
497
624
|
};
|
|
498
|
-
|
|
499
|
-
}
|
|
500
|
-
var cache = {};
|
|
501
|
-
var ONCE = { once: true };
|
|
502
|
-
var Log = class {
|
|
625
|
+
var ProbeLog = class extends BaseLog {
|
|
503
626
|
constructor({ id } = { id: "" }) {
|
|
627
|
+
super({ level: 0 });
|
|
504
628
|
this.VERSION = VERSION;
|
|
505
629
|
this._startTs = getHiResTimestamp2();
|
|
506
630
|
this._deltaTs = getHiResTimestamp2();
|
|
@@ -508,22 +632,16 @@ var __exports__ = (() => {
|
|
|
508
632
|
this.LOG_THROTTLE_TIMEOUT = 0;
|
|
509
633
|
this.id = id;
|
|
510
634
|
this.userData = {};
|
|
511
|
-
this._storage = new LocalStorage(`__probe-${this.id}__`, DEFAULT_LOG_CONFIGURATION);
|
|
635
|
+
this._storage = new LocalStorage(`__probe-${this.id}__`, { [this.id]: DEFAULT_LOG_CONFIGURATION });
|
|
512
636
|
this.timeStamp(`${this.id} started`);
|
|
513
637
|
autobind(this);
|
|
514
638
|
Object.seal(this);
|
|
515
639
|
}
|
|
516
|
-
set level(newLevel) {
|
|
517
|
-
this.setLevel(newLevel);
|
|
518
|
-
}
|
|
519
|
-
get level() {
|
|
520
|
-
return this.getLevel();
|
|
521
|
-
}
|
|
522
640
|
isEnabled() {
|
|
523
|
-
return this.
|
|
641
|
+
return this._getConfiguration().enabled;
|
|
524
642
|
}
|
|
525
643
|
getLevel() {
|
|
526
|
-
return this.
|
|
644
|
+
return this._getConfiguration().level;
|
|
527
645
|
}
|
|
528
646
|
/** @return milliseconds, with fractions */
|
|
529
647
|
getTotal() {
|
|
@@ -547,20 +665,20 @@ var __exports__ = (() => {
|
|
|
547
665
|
}
|
|
548
666
|
// Configure
|
|
549
667
|
enable(enabled = true) {
|
|
550
|
-
this.
|
|
668
|
+
this._updateConfiguration({ enabled });
|
|
551
669
|
return this;
|
|
552
670
|
}
|
|
553
671
|
setLevel(level) {
|
|
554
|
-
this.
|
|
672
|
+
this._updateConfiguration({ level });
|
|
555
673
|
return this;
|
|
556
674
|
}
|
|
557
675
|
/** return the current status of the setting */
|
|
558
676
|
get(setting) {
|
|
559
|
-
return this.
|
|
677
|
+
return this._getConfiguration()[setting];
|
|
560
678
|
}
|
|
561
679
|
// update the status of the setting
|
|
562
680
|
set(setting, value) {
|
|
563
|
-
this.
|
|
681
|
+
this._updateConfiguration({ [setting]: value });
|
|
564
682
|
}
|
|
565
683
|
/** Logs the current settings as a table */
|
|
566
684
|
settings() {
|
|
@@ -576,11 +694,16 @@ var __exports__ = (() => {
|
|
|
576
694
|
throw new Error(message || "Assertion failed");
|
|
577
695
|
}
|
|
578
696
|
}
|
|
579
|
-
warn(message) {
|
|
580
|
-
return this.
|
|
697
|
+
warn(message, ...args) {
|
|
698
|
+
return this._log("warn", 0, message, args, {
|
|
699
|
+
method: originalConsole.warn,
|
|
700
|
+
once: true
|
|
701
|
+
});
|
|
581
702
|
}
|
|
582
|
-
error(message) {
|
|
583
|
-
return this.
|
|
703
|
+
error(message, ...args) {
|
|
704
|
+
return this._log("error", 0, message, args, {
|
|
705
|
+
method: originalConsole.error
|
|
706
|
+
});
|
|
584
707
|
}
|
|
585
708
|
/** Print a deprecation warning */
|
|
586
709
|
deprecated(oldUsage, newUsage) {
|
|
@@ -590,50 +713,63 @@ var __exports__ = (() => {
|
|
|
590
713
|
removed(oldUsage, newUsage) {
|
|
591
714
|
return this.error(`\`${oldUsage}\` has been removed. Use \`${newUsage}\` instead`);
|
|
592
715
|
}
|
|
593
|
-
probe(logLevel, message) {
|
|
594
|
-
return this.
|
|
716
|
+
probe(logLevel, message, ...args) {
|
|
717
|
+
return this._log("log", logLevel, message, args, {
|
|
718
|
+
method: originalConsole.log,
|
|
595
719
|
time: true,
|
|
596
720
|
once: true
|
|
597
721
|
});
|
|
598
722
|
}
|
|
599
|
-
log(logLevel, message) {
|
|
600
|
-
return this.
|
|
723
|
+
log(logLevel, message, ...args) {
|
|
724
|
+
return this._log("log", logLevel, message, args, {
|
|
725
|
+
method: originalConsole.debug
|
|
726
|
+
});
|
|
601
727
|
}
|
|
602
|
-
info(logLevel, message) {
|
|
603
|
-
return this.
|
|
728
|
+
info(logLevel, message, ...args) {
|
|
729
|
+
return this._log("info", logLevel, message, args, { method: console.info });
|
|
604
730
|
}
|
|
605
|
-
once(logLevel, message) {
|
|
606
|
-
return this.
|
|
731
|
+
once(logLevel, message, ...args) {
|
|
732
|
+
return this._log("once", logLevel, message, args, {
|
|
733
|
+
method: originalConsole.debug || originalConsole.info,
|
|
734
|
+
once: true
|
|
735
|
+
});
|
|
607
736
|
}
|
|
608
737
|
/** Logs an object as a table */
|
|
609
738
|
table(logLevel, table, columns) {
|
|
610
739
|
if (table) {
|
|
611
|
-
return this.
|
|
740
|
+
return this._log("table", logLevel, table, columns && [columns] || [], {
|
|
741
|
+
method: console.table || noop,
|
|
612
742
|
tag: getTableHeader(table)
|
|
613
743
|
});
|
|
614
744
|
}
|
|
615
745
|
return noop;
|
|
616
746
|
}
|
|
617
747
|
time(logLevel, message) {
|
|
618
|
-
return this.
|
|
748
|
+
return this._log("time", logLevel, message, [], {
|
|
749
|
+
method: console.time ? console.time : console.info
|
|
750
|
+
});
|
|
619
751
|
}
|
|
620
752
|
timeEnd(logLevel, message) {
|
|
621
|
-
return this.
|
|
753
|
+
return this._log("time", logLevel, message, [], {
|
|
754
|
+
method: console.timeEnd ? console.timeEnd : console.info
|
|
755
|
+
});
|
|
622
756
|
}
|
|
623
757
|
timeStamp(logLevel, message) {
|
|
624
|
-
return this.
|
|
758
|
+
return this._log("time", logLevel, message, [], {
|
|
759
|
+
method: console.timeStamp || noop
|
|
760
|
+
});
|
|
625
761
|
}
|
|
626
762
|
group(logLevel, message, opts = { collapsed: false }) {
|
|
627
|
-
const
|
|
628
|
-
|
|
629
|
-
options.method = (collapsed ? console.groupCollapsed : console.group) || console.info;
|
|
630
|
-
return this._getLogFunction(options);
|
|
763
|
+
const method = (opts.collapsed ? console.groupCollapsed : console.group) || console.info;
|
|
764
|
+
return this._log("group", logLevel, message, [], { method });
|
|
631
765
|
}
|
|
632
766
|
groupCollapsed(logLevel, message, opts = {}) {
|
|
633
767
|
return this.group(logLevel, message, Object.assign({}, opts, { collapsed: true }));
|
|
634
768
|
}
|
|
635
769
|
groupEnd(logLevel) {
|
|
636
|
-
return this.
|
|
770
|
+
return this._log("groupEnd", logLevel, "", [], {
|
|
771
|
+
method: console.groupEnd || noop
|
|
772
|
+
});
|
|
637
773
|
}
|
|
638
774
|
// EXPERIMENTAL
|
|
639
775
|
withGroup(logLevel, message, func) {
|
|
@@ -649,78 +785,34 @@ var __exports__ = (() => {
|
|
|
649
785
|
console.trace();
|
|
650
786
|
}
|
|
651
787
|
}
|
|
652
|
-
// PRIVATE METHODS
|
|
653
|
-
/** Deduces log level from a variety of arguments */
|
|
654
788
|
_shouldLog(logLevel) {
|
|
655
|
-
return this.isEnabled() &&
|
|
656
|
-
}
|
|
657
|
-
_getLogFunction(logLevel, message, method, args, opts) {
|
|
658
|
-
if (this._shouldLog(logLevel)) {
|
|
659
|
-
opts = normalizeArguments({ logLevel, message, args, opts });
|
|
660
|
-
method = method || opts.method;
|
|
661
|
-
assert(method);
|
|
662
|
-
opts.total = this.getTotal();
|
|
663
|
-
opts.delta = this.getDelta();
|
|
664
|
-
this._deltaTs = getHiResTimestamp2();
|
|
665
|
-
const tag = opts.tag || opts.message;
|
|
666
|
-
if (opts.once && tag) {
|
|
667
|
-
if (!cache[tag]) {
|
|
668
|
-
cache[tag] = getHiResTimestamp2();
|
|
669
|
-
} else {
|
|
670
|
-
return noop;
|
|
671
|
-
}
|
|
672
|
-
}
|
|
673
|
-
message = decorateMessage(this.id, opts.message, opts);
|
|
674
|
-
return method.bind(console, message, ...opts.args);
|
|
675
|
-
}
|
|
676
|
-
return noop;
|
|
677
|
-
}
|
|
678
|
-
};
|
|
679
|
-
Log.VERSION = VERSION;
|
|
680
|
-
function normalizeLogLevel(logLevel) {
|
|
681
|
-
if (!logLevel) {
|
|
682
|
-
return 0;
|
|
789
|
+
return this.isEnabled() && super._shouldLog(logLevel);
|
|
683
790
|
}
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
default:
|
|
693
|
-
return 0;
|
|
694
|
-
}
|
|
695
|
-
assert(Number.isFinite(resolvedLevel) && resolvedLevel >= 0);
|
|
696
|
-
return resolvedLevel;
|
|
697
|
-
}
|
|
698
|
-
function normalizeArguments(opts) {
|
|
699
|
-
const { logLevel, message } = opts;
|
|
700
|
-
opts.logLevel = normalizeLogLevel(logLevel);
|
|
701
|
-
const args = opts.args ? Array.from(opts.args) : [];
|
|
702
|
-
while (args.length && args.shift() !== message) {
|
|
791
|
+
_emit(_type, normalized) {
|
|
792
|
+
const method = normalized.method;
|
|
793
|
+
assert(method);
|
|
794
|
+
normalized.total = this.getTotal();
|
|
795
|
+
normalized.delta = this.getDelta();
|
|
796
|
+
this._deltaTs = getHiResTimestamp2();
|
|
797
|
+
const message = decorateMessage(this.id, normalized.message, normalized);
|
|
798
|
+
return method.bind(console, message, ...normalized.args);
|
|
703
799
|
}
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
}
|
|
710
|
-
opts.message = logLevel;
|
|
711
|
-
break;
|
|
712
|
-
case "object":
|
|
713
|
-
Object.assign(opts, logLevel);
|
|
714
|
-
break;
|
|
715
|
-
default:
|
|
800
|
+
_getConfiguration() {
|
|
801
|
+
if (!this._storage.config[this.id]) {
|
|
802
|
+
this._updateConfiguration(DEFAULT_LOG_CONFIGURATION);
|
|
803
|
+
}
|
|
804
|
+
return this._storage.config[this.id];
|
|
716
805
|
}
|
|
717
|
-
|
|
718
|
-
|
|
806
|
+
_updateConfiguration(configuration) {
|
|
807
|
+
const currentConfiguration = this._storage.config[this.id] || {
|
|
808
|
+
...DEFAULT_LOG_CONFIGURATION
|
|
809
|
+
};
|
|
810
|
+
this._storage.setConfiguration({
|
|
811
|
+
[this.id]: { ...currentConfiguration, ...configuration }
|
|
812
|
+
});
|
|
719
813
|
}
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
return Object.assign(opts, { args }, opts.opts);
|
|
723
|
-
}
|
|
814
|
+
};
|
|
815
|
+
ProbeLog.VERSION = VERSION;
|
|
724
816
|
function decorateMessage(id, message, opts) {
|
|
725
817
|
if (typeof message === "string") {
|
|
726
818
|
const time = opts.time ? leftPad(formatTime(opts.total)) : "";
|
|
@@ -742,10 +834,10 @@ var __exports__ = (() => {
|
|
|
742
834
|
globalThis.probe = {};
|
|
743
835
|
|
|
744
836
|
// ../../node_modules/@probe.gl/log/dist/index.js
|
|
745
|
-
var dist_default = new
|
|
837
|
+
var dist_default = new ProbeLog({ id: "@probe.gl/log" });
|
|
746
838
|
|
|
747
839
|
// ../core/src/utils/log.ts
|
|
748
|
-
var log = new
|
|
840
|
+
var log = new ProbeLog({ id: "luma.gl" });
|
|
749
841
|
|
|
750
842
|
// ../core/src/utils/uid.ts
|
|
751
843
|
var uidCounters = {};
|
|
@@ -1398,7 +1490,7 @@ var __exports__ = (() => {
|
|
|
1398
1490
|
const dataType = `${type}${length}`;
|
|
1399
1491
|
const decodedType = getDataTypeInfo(dataType);
|
|
1400
1492
|
const bits = decodedType.byteLength * 8;
|
|
1401
|
-
const components = channels
|
|
1493
|
+
const components = channels?.length ?? 1;
|
|
1402
1494
|
const bitsPerChannel = [
|
|
1403
1495
|
bits,
|
|
1404
1496
|
components >= 2 ? bits : 0,
|
|
@@ -1415,7 +1507,7 @@ var __exports__ = (() => {
|
|
|
1415
1507
|
signed: decodedType.signed,
|
|
1416
1508
|
normalized: decodedType.normalized,
|
|
1417
1509
|
bitsPerChannel,
|
|
1418
|
-
bytesPerPixel: decodedType.byteLength *
|
|
1510
|
+
bytesPerPixel: decodedType.byteLength * components,
|
|
1419
1511
|
packed: formatInfo.packed,
|
|
1420
1512
|
srgb: formatInfo.srgb
|
|
1421
1513
|
};
|
|
@@ -1985,6 +2077,19 @@ or create a device with the 'debug: true' prop.`;
|
|
|
1985
2077
|
return { promise, resolve, reject };
|
|
1986
2078
|
}
|
|
1987
2079
|
|
|
2080
|
+
// ../core/src/utils/assert.ts
|
|
2081
|
+
function assert2(condition, message) {
|
|
2082
|
+
if (!condition) {
|
|
2083
|
+
const error = new Error(message ?? "luma.gl assertion failed.");
|
|
2084
|
+
Error.captureStackTrace?.(error, assert2);
|
|
2085
|
+
throw error;
|
|
2086
|
+
}
|
|
2087
|
+
}
|
|
2088
|
+
function assertDefined(value, message) {
|
|
2089
|
+
assert2(value, message);
|
|
2090
|
+
return value;
|
|
2091
|
+
}
|
|
2092
|
+
|
|
1988
2093
|
// ../core/src/adapter/canvas-context.ts
|
|
1989
2094
|
var _CanvasContext = class {
|
|
1990
2095
|
static isHTMLCanvas(canvas) {
|
|
@@ -2026,6 +2131,7 @@ or create a device with the 'debug: true' prop.`;
|
|
|
2026
2131
|
_resizeObserver;
|
|
2027
2132
|
/** IntersectionObserver to track canvas visibility changes */
|
|
2028
2133
|
_intersectionObserver;
|
|
2134
|
+
_observeDevicePixelRatioTimeout = null;
|
|
2029
2135
|
/** Position of the canvas in the document, updated by a timer */
|
|
2030
2136
|
_position = [0, 0];
|
|
2031
2137
|
/** Whether this canvas context has been destroyed */
|
|
@@ -2079,14 +2185,23 @@ or create a device with the 'debug: true' prop.`;
|
|
|
2079
2185
|
} catch {
|
|
2080
2186
|
this._resizeObserver.observe(this.canvas, { box: "content-box" });
|
|
2081
2187
|
}
|
|
2082
|
-
setTimeout(() => this._observeDevicePixelRatio(), 0);
|
|
2188
|
+
this._observeDevicePixelRatioTimeout = setTimeout(() => this._observeDevicePixelRatio(), 0);
|
|
2083
2189
|
if (this.props.trackPosition) {
|
|
2084
2190
|
this._trackPosition();
|
|
2085
2191
|
}
|
|
2086
2192
|
}
|
|
2087
2193
|
}
|
|
2088
2194
|
destroy() {
|
|
2089
|
-
this.destroyed
|
|
2195
|
+
if (!this.destroyed) {
|
|
2196
|
+
this.destroyed = true;
|
|
2197
|
+
if (this._observeDevicePixelRatioTimeout) {
|
|
2198
|
+
clearTimeout(this._observeDevicePixelRatioTimeout);
|
|
2199
|
+
this._observeDevicePixelRatioTimeout = null;
|
|
2200
|
+
}
|
|
2201
|
+
this.device = null;
|
|
2202
|
+
this._resizeObserver?.disconnect();
|
|
2203
|
+
this._intersectionObserver?.disconnect();
|
|
2204
|
+
}
|
|
2090
2205
|
}
|
|
2091
2206
|
setProps(props) {
|
|
2092
2207
|
if ("useDevicePixels" in props) {
|
|
@@ -2136,8 +2251,13 @@ or create a device with the 'debug: true' prop.`;
|
|
|
2136
2251
|
* (resizing clears the drawing buffer)!
|
|
2137
2252
|
*/
|
|
2138
2253
|
setDrawingBufferSize(width, height) {
|
|
2139
|
-
|
|
2140
|
-
|
|
2254
|
+
width = Math.floor(width);
|
|
2255
|
+
height = Math.floor(height);
|
|
2256
|
+
if (this.drawingBufferWidth === width && this.drawingBufferHeight === height) {
|
|
2257
|
+
return;
|
|
2258
|
+
}
|
|
2259
|
+
this.drawingBufferWidth = width;
|
|
2260
|
+
this.drawingBufferHeight = height;
|
|
2141
2261
|
this._needsDrawingBufferResize = true;
|
|
2142
2262
|
}
|
|
2143
2263
|
/**
|
|
@@ -2193,6 +2313,9 @@ or create a device with the 'debug: true' prop.`;
|
|
|
2193
2313
|
}
|
|
2194
2314
|
/** reacts to an observed intersection */
|
|
2195
2315
|
_handleIntersection(entries) {
|
|
2316
|
+
if (this.destroyed) {
|
|
2317
|
+
return;
|
|
2318
|
+
}
|
|
2196
2319
|
const entry = entries.find((entry_) => entry_.target === this.canvas);
|
|
2197
2320
|
if (!entry) {
|
|
2198
2321
|
return;
|
|
@@ -2209,15 +2332,19 @@ or create a device with the 'debug: true' prop.`;
|
|
|
2209
2332
|
* @see https://webgpufundamentals.org/webgpu/lessons/webgpu-resizing-the-canvas.html
|
|
2210
2333
|
*/
|
|
2211
2334
|
_handleResize(entries) {
|
|
2335
|
+
if (this.destroyed) {
|
|
2336
|
+
return;
|
|
2337
|
+
}
|
|
2212
2338
|
const entry = entries.find((entry_) => entry_.target === this.canvas);
|
|
2213
2339
|
if (!entry) {
|
|
2214
2340
|
return;
|
|
2215
2341
|
}
|
|
2216
|
-
|
|
2217
|
-
this.
|
|
2342
|
+
const contentBoxSize = assertDefined(entry.contentBoxSize?.[0]);
|
|
2343
|
+
this.cssWidth = contentBoxSize.inlineSize;
|
|
2344
|
+
this.cssHeight = contentBoxSize.blockSize;
|
|
2218
2345
|
const oldPixelSize = this.getDevicePixelSize();
|
|
2219
|
-
const devicePixelWidth = entry.devicePixelContentBoxSize?.[0]
|
|
2220
|
-
const devicePixelHeight = entry.devicePixelContentBoxSize?.[0]
|
|
2346
|
+
const devicePixelWidth = entry.devicePixelContentBoxSize?.[0]?.inlineSize || contentBoxSize.inlineSize * devicePixelRatio;
|
|
2347
|
+
const devicePixelHeight = entry.devicePixelContentBoxSize?.[0]?.blockSize || contentBoxSize.blockSize * devicePixelRatio;
|
|
2221
2348
|
const [maxDevicePixelWidth, maxDevicePixelHeight] = this.getMaxDrawingBufferSize();
|
|
2222
2349
|
this.devicePixelWidth = Math.max(1, Math.min(devicePixelWidth, maxDevicePixelWidth));
|
|
2223
2350
|
this.devicePixelHeight = Math.max(1, Math.min(devicePixelHeight, maxDevicePixelHeight));
|
|
@@ -2254,10 +2381,13 @@ or create a device with the 'debug: true' prop.`;
|
|
|
2254
2381
|
}
|
|
2255
2382
|
/** Monitor DPR changes */
|
|
2256
2383
|
_observeDevicePixelRatio() {
|
|
2384
|
+
if (this.destroyed) {
|
|
2385
|
+
return;
|
|
2386
|
+
}
|
|
2257
2387
|
const oldRatio = this.devicePixelRatio;
|
|
2258
2388
|
this.devicePixelRatio = window.devicePixelRatio;
|
|
2259
2389
|
this.updatePosition();
|
|
2260
|
-
this.device.props.onDevicePixelRatioChange(this, { oldRatio });
|
|
2390
|
+
this.device.props.onDevicePixelRatioChange?.(this, { oldRatio });
|
|
2261
2391
|
matchMedia(`(resolution: ${this.devicePixelRatio}dppx)`).addEventListener(
|
|
2262
2392
|
"change",
|
|
2263
2393
|
() => this._observeDevicePixelRatio(),
|
|
@@ -2280,6 +2410,9 @@ or create a device with the 'debug: true' prop.`;
|
|
|
2280
2410
|
* if called before browser has finished a reflow. Should not be the case here.
|
|
2281
2411
|
*/
|
|
2282
2412
|
updatePosition() {
|
|
2413
|
+
if (this.destroyed) {
|
|
2414
|
+
return;
|
|
2415
|
+
}
|
|
2283
2416
|
const newRect = this.htmlCanvas?.getBoundingClientRect();
|
|
2284
2417
|
if (newRect) {
|
|
2285
2418
|
const position = [newRect.left, newRect.top];
|
|
@@ -2744,24 +2877,32 @@ or create a device with the 'debug: true' prop.`;
|
|
|
2744
2877
|
const log2 = shaderLog.slice().sort((a, b) => a.lineNum - b.lineNum);
|
|
2745
2878
|
switch (options?.showSourceCode || "no") {
|
|
2746
2879
|
case "all":
|
|
2747
|
-
let
|
|
2880
|
+
let currentMessageIndex = 0;
|
|
2748
2881
|
for (let lineNum = 1; lineNum <= lines.length; lineNum++) {
|
|
2749
|
-
|
|
2750
|
-
|
|
2751
|
-
|
|
2752
|
-
formattedLog +=
|
|
2882
|
+
const line = lines[lineNum - 1];
|
|
2883
|
+
const currentMessage = log2[currentMessageIndex];
|
|
2884
|
+
if (line && currentMessage) {
|
|
2885
|
+
formattedLog += getNumberedLine(line, lineNum, options);
|
|
2886
|
+
}
|
|
2887
|
+
while (log2.length > currentMessageIndex && currentMessage.lineNum === lineNum) {
|
|
2888
|
+
const message = log2[currentMessageIndex++];
|
|
2889
|
+
if (message) {
|
|
2890
|
+
formattedLog += formatCompilerMessage(message, lines, message.lineNum, {
|
|
2891
|
+
...options,
|
|
2892
|
+
inlineSource: false
|
|
2893
|
+
});
|
|
2894
|
+
}
|
|
2895
|
+
}
|
|
2896
|
+
}
|
|
2897
|
+
while (log2.length > currentMessageIndex) {
|
|
2898
|
+
const message = log2[currentMessageIndex++];
|
|
2899
|
+
if (message) {
|
|
2900
|
+
formattedLog += formatCompilerMessage(message, [], 0, {
|
|
2753
2901
|
...options,
|
|
2754
2902
|
inlineSource: false
|
|
2755
2903
|
});
|
|
2756
2904
|
}
|
|
2757
2905
|
}
|
|
2758
|
-
while (log2.length > currentMessage) {
|
|
2759
|
-
const message = log2[currentMessage++];
|
|
2760
|
-
formattedLog += formatCompilerMessage(message, [], 0, {
|
|
2761
|
-
...options,
|
|
2762
|
-
inlineSource: false
|
|
2763
|
-
});
|
|
2764
|
-
}
|
|
2765
2906
|
return formattedLog;
|
|
2766
2907
|
case "issues":
|
|
2767
2908
|
case "no":
|
|
@@ -2783,8 +2924,8 @@ ${numberedLines}${positionIndicator}${message.type.toUpperCase()}: ${message.mes
|
|
|
2783
2924
|
|
|
2784
2925
|
`;
|
|
2785
2926
|
}
|
|
2786
|
-
const color = message.type === "error" ? "red" : "
|
|
2787
|
-
return options?.html ? `<div class='luma-compiler-log
|
|
2927
|
+
const color = message.type === "error" ? "red" : "orange";
|
|
2928
|
+
return options?.html ? `<div class='luma-compiler-log-${message.type}' style="color:${color};"><b> ${message.type.toUpperCase()}: ${message.message}</b></div>` : `${message.type.toUpperCase()}: ${message.message}`;
|
|
2788
2929
|
}
|
|
2789
2930
|
function getNumberedLines(lines, lineNum, options) {
|
|
2790
2931
|
let numberedLines = "";
|
|
@@ -2870,29 +3011,34 @@ ${numberedLines}${positionIndicator}${message.type.toUpperCase()}: ${message.mes
|
|
|
2870
3011
|
}
|
|
2871
3012
|
const shaderName = shaderId;
|
|
2872
3013
|
const shaderTitle = `${this.stage} shader "${shaderName}"`;
|
|
2873
|
-
|
|
3014
|
+
const htmlLog = formatCompilerLog(messages, this.source, { showSourceCode: "all", html: true });
|
|
2874
3015
|
const translatedSource = this.getTranslatedSource();
|
|
3016
|
+
const container = document.createElement("div");
|
|
3017
|
+
container.innerHTML = `<h1>Compilation error in ${shaderTitle}</h1>
|
|
3018
|
+
<div style="display:flex;position:fixed;top:10px;right:20px;gap:2px;">
|
|
3019
|
+
<button id="copy">Copy source</button><br/>
|
|
3020
|
+
<button id="close">Close</button>
|
|
3021
|
+
</div>
|
|
3022
|
+
<code><pre>${htmlLog}</pre></code>`;
|
|
2875
3023
|
if (translatedSource) {
|
|
2876
|
-
|
|
2877
|
-
}
|
|
2878
|
-
|
|
2879
|
-
|
|
2880
|
-
|
|
2881
|
-
|
|
2882
|
-
|
|
2883
|
-
|
|
2884
|
-
|
|
2885
|
-
|
|
2886
|
-
|
|
2887
|
-
|
|
2888
|
-
|
|
2889
|
-
button.
|
|
2890
|
-
|
|
2891
|
-
|
|
2892
|
-
|
|
2893
|
-
|
|
2894
|
-
const dataURI = `data:text/plain,${encodeURIComponent(this.source)}`;
|
|
2895
|
-
navigator.clipboard.writeText(dataURI);
|
|
3024
|
+
container.innerHTML += `<br /><h1>Translated Source</h1><br /><br /><code><pre>${translatedSource}</pre></code>`;
|
|
3025
|
+
}
|
|
3026
|
+
container.style.top = "0";
|
|
3027
|
+
container.style.left = "0";
|
|
3028
|
+
container.style.background = "white";
|
|
3029
|
+
container.style.position = "fixed";
|
|
3030
|
+
container.style.zIndex = "9999";
|
|
3031
|
+
container.style.maxWidth = "100vw";
|
|
3032
|
+
container.style.maxHeight = "100vh";
|
|
3033
|
+
container.style.overflowY = "auto";
|
|
3034
|
+
document.body.appendChild(container);
|
|
3035
|
+
const error = container.querySelector(".luma-compiler-log-error");
|
|
3036
|
+
error?.scrollIntoView();
|
|
3037
|
+
container.querySelector("button#close").onclick = () => {
|
|
3038
|
+
container.remove();
|
|
3039
|
+
};
|
|
3040
|
+
container.querySelector("button#copy").onclick = () => {
|
|
3041
|
+
navigator.clipboard.writeText(this.source);
|
|
2896
3042
|
};
|
|
2897
3043
|
}
|
|
2898
3044
|
};
|
|
@@ -2912,7 +3058,7 @@ ${htmlLog}
|
|
|
2912
3058
|
function getShaderName(shader, defaultName = "unnamed") {
|
|
2913
3059
|
const SHADER_NAME_REGEXP = /#define[\s*]SHADER_NAME[\s*]([A-Za-z0-9_-]+)[\s*]/;
|
|
2914
3060
|
const match = SHADER_NAME_REGEXP.exec(shader);
|
|
2915
|
-
return match
|
|
3061
|
+
return match?.[1] ?? defaultName;
|
|
2916
3062
|
}
|
|
2917
3063
|
|
|
2918
3064
|
// ../core/src/adapter/resources/framebuffer.ts
|
|
@@ -3018,17 +3164,15 @@ ${htmlLog}
|
|
|
3018
3164
|
* and destroys existing textures if owned
|
|
3019
3165
|
*/
|
|
3020
3166
|
resizeAttachments(width, height) {
|
|
3021
|
-
|
|
3022
|
-
|
|
3023
|
-
|
|
3024
|
-
|
|
3025
|
-
|
|
3026
|
-
|
|
3027
|
-
|
|
3028
|
-
|
|
3029
|
-
|
|
3030
|
-
}
|
|
3031
|
-
}
|
|
3167
|
+
this.colorAttachments.forEach((colorAttachment, i) => {
|
|
3168
|
+
const resizedTexture = colorAttachment.texture.clone({
|
|
3169
|
+
width,
|
|
3170
|
+
height
|
|
3171
|
+
});
|
|
3172
|
+
this.destroyAttachedResource(colorAttachment);
|
|
3173
|
+
this.colorAttachments[i] = resizedTexture.view;
|
|
3174
|
+
this.attachResource(resizedTexture.view);
|
|
3175
|
+
});
|
|
3032
3176
|
if (this.depthStencilAttachment) {
|
|
3033
3177
|
const resizedTexture = this.depthStencilAttachment.texture.clone({
|
|
3034
3178
|
width,
|
|
@@ -3939,7 +4083,7 @@ ${htmlLog}
|
|
|
3939
4083
|
let bitOffsetWithinPixel = 0;
|
|
3940
4084
|
const channels = [];
|
|
3941
4085
|
for (let i = 0; i < 4; i++) {
|
|
3942
|
-
const bits = bitsPerChannel[i];
|
|
4086
|
+
const bits = bitsPerChannel[i] ?? 0;
|
|
3943
4087
|
if (bits <= 0) {
|
|
3944
4088
|
channels.push(0);
|
|
3945
4089
|
} else {
|
|
@@ -3948,14 +4092,14 @@ ${htmlLog}
|
|
|
3948
4092
|
bitOffsetWithinPixel += bits;
|
|
3949
4093
|
}
|
|
3950
4094
|
}
|
|
3951
|
-
return [channels[0], channels[1], channels[2], channels[3]];
|
|
4095
|
+
return [channels[0] ?? 0, channels[1] ?? 0, channels[2] ?? 0, channels[3] ?? 0];
|
|
3952
4096
|
}
|
|
3953
4097
|
function writePixel(dataView, bitOffset, bitsPerChannel, pixel) {
|
|
3954
4098
|
let currentBitOffset = bitOffset;
|
|
3955
4099
|
for (let channel = 0; channel < 4; channel++) {
|
|
3956
|
-
const bits = bitsPerChannel[channel];
|
|
4100
|
+
const bits = bitsPerChannel[channel] ?? 0;
|
|
3957
4101
|
const maxValue = (1 << bits) - 1;
|
|
3958
|
-
const channelValue = pixel[channel] & maxValue;
|
|
4102
|
+
const channelValue = (pixel[channel] ?? 0) & maxValue;
|
|
3959
4103
|
writeBitsToDataView(dataView, currentBitOffset, bits, channelValue);
|
|
3960
4104
|
currentBitOffset += bits;
|
|
3961
4105
|
}
|
package/dist/dist.min.js
CHANGED
|
@@ -4,16 +4,17 @@
|
|
|
4
4
|
else if (typeof define === 'function' && define.amd) define([], factory);
|
|
5
5
|
else if (typeof exports === 'object') exports['luma'] = factory();
|
|
6
6
|
else root['luma'] = factory();})(globalThis, function () {
|
|
7
|
-
"use strict";var __exports__=(()=>{var Gt=Object.create;var H=Object.defineProperty;var Ot=Object.getOwnPropertyDescriptor;var Vt=Object.getOwnPropertyNames;var jt=Object.getPrototypeOf,Yt=Object.prototype.hasOwnProperty;var Xt=(r,e,t)=>e in r?H(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var qt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Kt=(r,e)=>{for(var t in e)H(r,t,{get:e[t],enumerable:!0})},ce=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Vt(e))!Yt.call(r,n)&&n!==t&&H(r,n,{get:()=>e[n],enumerable:!(i=Ot(e,n))||i.enumerable});return r},ue=(r,e,t)=>(ce(r,e,"default"),t&&ce(t,e,"default")),Jt=(r,e,t)=>(t=r!=null?Gt(jt(r)):{},ce(e||!r||!r.__esModule?H(t,"default",{value:r,enumerable:!0}):t,r)),Qt=r=>ce(H({},"__esModule",{value:!0}),r);var c=(r,e,t)=>(Xt(r,typeof e!="symbol"?e+"":e,t),t);var kt=qt(($o,Nt)=>{Nt.exports=globalThis.luma});var oe={};Kt(oe,{Adapter:()=>Ce,Buffer:()=>h,CanvasContext:()=>z,CommandBuffer:()=>ee,CommandEncoder:()=>Z,ComputePass:()=>Q,ComputePipeline:()=>J,Device:()=>C,DeviceFeatures:()=>Pe,DeviceLimits:()=>Se,ExternalTexture:()=>Y,Fence:()=>ne,Framebuffer:()=>q,PipelineLayout:()=>se,QuerySet:()=>ie,RenderPass:()=>P,RenderPipeline:()=>K,Resource:()=>u,Sampler:()=>I,Shader:()=>X,Texture:()=>p,TextureFormatDecoder:()=>V,TextureView:()=>j,TransformFeedback:()=>re,UniformBlock:()=>U,UniformBufferLayout:()=>$,UniformStore:()=>Me,VertexArray:()=>te,_getTextureFormatDefinition:()=>O,_getTextureFormatTable:()=>St,getAttributeInfosFromLayouts:()=>tt,getAttributeShaderTypeInfo:()=>Le,getDataType:()=>be,getDataTypeInfo:()=>M,getExternalImageSize:()=>ve,getNormalizedDataType:()=>pe,getScratchArray:()=>Mt,getTextureImageView:()=>ct,getTypedArrayConstructor:()=>yt,getVariableShaderTypeInfo:()=>Re,getVertexFormatFromAttribute:()=>wt,getVertexFormatInfo:()=>_,isExternalImage:()=>Te,log:()=>l,luma:()=>_t,makeVertexFormat:()=>He,readPixel:()=>Ut,setTextureImageData:()=>$t,textureFormatDecoder:()=>x,writePixel:()=>Ht});function N(){let r;if(typeof window<"u"&&window.performance)r=window.performance.now();else if(typeof process<"u"&&process.hrtime){let e=process.hrtime();r=e[0]*1e3+e[1]/1e6}else r=Date.now();return r}var A=class{constructor(e,t){this.sampleSize=1,this.time=0,this.count=0,this.samples=0,this.lastTiming=0,this.lastSampleTime=0,this.lastSampleCount=0,this._count=0,this._time=0,this._samples=0,this._startTime=0,this._timerPending=!1,this.name=e,this.type=t,this.reset()}reset(){return this.time=0,this.count=0,this.samples=0,this.lastTiming=0,this.lastSampleTime=0,this.lastSampleCount=0,this._count=0,this._time=0,this._samples=0,this._startTime=0,this._timerPending=!1,this}setSampleSize(e){return this.sampleSize=e,this}incrementCount(){return this.addCount(1),this}decrementCount(){return this.subtractCount(1),this}addCount(e){return this._count+=e,this._samples++,this._checkSampling(),this}subtractCount(e){return this._count-=e,this._samples++,this._checkSampling(),this}addTime(e){return this._time+=e,this.lastTiming=e,this._samples++,this._checkSampling(),this}timeStart(){return this._startTime=N(),this._timerPending=!0,this}timeEnd(){return this._timerPending?(this.addTime(N()-this._startTime),this._timerPending=!1,this._checkSampling(),this):this}getSampleAverageCount(){return this.sampleSize>0?this.lastSampleCount/this.sampleSize:0}getSampleAverageTime(){return this.sampleSize>0?this.lastSampleTime/this.sampleSize:0}getSampleHz(){return this.lastSampleTime>0?this.sampleSize/(this.lastSampleTime/1e3):0}getAverageCount(){return this.samples>0?this.count/this.samples:0}getAverageTime(){return this.samples>0?this.time/this.samples:0}getHz(){return this.time>0?this.samples/(this.time/1e3):0}_checkSampling(){this._samples===this.sampleSize&&(this.lastSampleTime=this._time,this.lastSampleCount=this._count,this.count+=this._count,this.time+=this._time,this.samples+=this._samples,this._time=0,this._count=0,this._samples=0)}};var L=class{constructor(e){this.stats={},this.id=e.id,this.stats={},this._initializeStats(e.stats),Object.seal(this)}get(e,t="count"){return this._getOrCreate({name:e,type:t})}get size(){return Object.keys(this.stats).length}reset(){for(let e of Object.values(this.stats))e.reset();return this}forEach(e){for(let t of Object.values(this.stats))e(t)}getTable(){let e={};return this.forEach(t=>{e[t.name]={time:t.time||0,count:t.count||0,average:t.getAverageTime()||0,hz:t.getHz()||0}}),e}_initializeStats(e=[]){e.forEach(t=>this._getOrCreate(t))}_getOrCreate(e){let{name:t,type:i}=e,n=this.stats[t];return n||(e instanceof A?n=e:n=new A(t,i),this.stats[t]=n),n}};var Fe=class{stats=new Map;getStats(e){return this.get(e)}get(e){return this.stats.has(e)||this.stats.set(e,new L({id:e})),this.stats.get(e)}},fe=new Fe;var le=globalThis,Zt=globalThis.document||{},me=globalThis.process||{},er=globalThis.console,oi=globalThis.navigator||{};function ut(r){if(typeof window<"u"&&window.process?.type==="renderer"||typeof process<"u"&&Boolean(process.versions?.electron))return!0;let e=typeof navigator<"u"&&navigator.userAgent,t=r||e;return Boolean(t&&t.indexOf("Electron")>=0)}function y(){return!(typeof process=="object"&&String(process)==="[object process]"&&!process?.browser)||ut()}var ze="4.1.0";function rr(r){try{let e=window[r],t="__storage_test__";return e.setItem(t,t),e.removeItem(t),e}catch{return null}}var he=class{constructor(e,t,i="sessionStorage"){this.storage=rr(i),this.id=e,this.config=t,this._loadConfiguration()}getConfiguration(){return this.config}setConfiguration(e){if(Object.assign(this.config,e),this.storage){let t=JSON.stringify(this.config);this.storage.setItem(this.id,t)}}_loadConfiguration(){let e={};if(this.storage){let t=this.storage.getItem(this.id);e=t?JSON.parse(t):{}}return Object.assign(this.config,e),this}};function ft(r){let e;return r<10?e=`${r.toFixed(2)}ms`:r<100?e=`${r.toFixed(1)}ms`:r<1e3?e=`${r.toFixed(0)}ms`:e=`${(r/1e3).toFixed(2)}s`,e}function lt(r,e=8){let t=Math.max(e-r.length,0);return`${" ".repeat(t)}${r}`}var de;(function(r){r[r.BLACK=30]="BLACK",r[r.RED=31]="RED",r[r.GREEN=32]="GREEN",r[r.YELLOW=33]="YELLOW",r[r.BLUE=34]="BLUE",r[r.MAGENTA=35]="MAGENTA",r[r.CYAN=36]="CYAN",r[r.WHITE=37]="WHITE",r[r.BRIGHT_BLACK=90]="BRIGHT_BLACK",r[r.BRIGHT_RED=91]="BRIGHT_RED",r[r.BRIGHT_GREEN=92]="BRIGHT_GREEN",r[r.BRIGHT_YELLOW=93]="BRIGHT_YELLOW",r[r.BRIGHT_BLUE=94]="BRIGHT_BLUE",r[r.BRIGHT_MAGENTA=95]="BRIGHT_MAGENTA",r[r.BRIGHT_CYAN=96]="BRIGHT_CYAN",r[r.BRIGHT_WHITE=97]="BRIGHT_WHITE"})(de||(de={}));var ir=10;function mt(r){return typeof r!="string"?r:(r=r.toUpperCase(),de[r]||de.WHITE)}function ht(r,e,t){return!y&&typeof r=="string"&&(e&&(r=`\x1B[${mt(e)}m${r}\x1B[39m`),t&&(r=`\x1B[${mt(t)+ir}m${r}\x1B[49m`)),r}function dt(r,e=["constructor"]){let t=Object.getPrototypeOf(r),i=Object.getOwnPropertyNames(t),n=r;for(let s of i){let a=n[s];typeof a=="function"&&(e.find(o=>s===o)||(n[s]=a.bind(r)))}}function k(r,e){if(!r)throw new Error(e||"Assertion failed")}function E(){let r;if(y()&&le.performance)r=le?.performance?.now?.();else if("hrtime"in me){let e=me?.hrtime?.();r=e[0]*1e3+e[1]/1e6}else r=Date.now();return r}var D={debug:y()&&console.debug||console.log,log:console.log,info:console.info,warn:console.warn,error:console.error},nr={enabled:!0,level:0};function B(){}var pt={},gt={once:!0},v=class{constructor({id:e}={id:""}){this.VERSION=ze,this._startTs=E(),this._deltaTs=E(),this.userData={},this.LOG_THROTTLE_TIMEOUT=0,this.id=e,this.userData={},this._storage=new he(`__probe-${this.id}__`,nr),this.timeStamp(`${this.id} started`),dt(this),Object.seal(this)}set level(e){this.setLevel(e)}get level(){return this.getLevel()}isEnabled(){return this._storage.config.enabled}getLevel(){return this._storage.config.level}getTotal(){return Number((E()-this._startTs).toPrecision(10))}getDelta(){return Number((E()-this._deltaTs).toPrecision(10))}set priority(e){this.level=e}get priority(){return this.level}getPriority(){return this.level}enable(e=!0){return this._storage.setConfiguration({enabled:e}),this}setLevel(e){return this._storage.setConfiguration({level:e}),this}get(e){return this._storage.config[e]}set(e,t){this._storage.setConfiguration({[e]:t})}settings(){console.table?console.table(this._storage.config):console.log(this._storage.config)}assert(e,t){if(!e)throw new Error(t||"Assertion failed")}warn(e){return this._getLogFunction(0,e,D.warn,arguments,gt)}error(e){return this._getLogFunction(0,e,D.error,arguments)}deprecated(e,t){return this.warn(`\`${e}\` is deprecated and will be removed in a later version. Use \`${t}\` instead`)}removed(e,t){return this.error(`\`${e}\` has been removed. Use \`${t}\` instead`)}probe(e,t){return this._getLogFunction(e,t,D.log,arguments,{time:!0,once:!0})}log(e,t){return this._getLogFunction(e,t,D.debug,arguments)}info(e,t){return this._getLogFunction(e,t,console.info,arguments)}once(e,t){return this._getLogFunction(e,t,D.debug||D.info,arguments,gt)}table(e,t,i){return t?this._getLogFunction(e,t,console.table||B,i&&[i],{tag:or(t)}):B}time(e,t){return this._getLogFunction(e,t,console.time?console.time:console.info)}timeEnd(e,t){return this._getLogFunction(e,t,console.timeEnd?console.timeEnd:console.info)}timeStamp(e,t){return this._getLogFunction(e,t,console.timeStamp||B)}group(e,t,i={collapsed:!1}){let n=bt({logLevel:e,message:t,opts:i}),{collapsed:s}=i;return n.method=(s?console.groupCollapsed:console.group)||console.info,this._getLogFunction(n)}groupCollapsed(e,t,i={}){return this.group(e,t,Object.assign({},i,{collapsed:!0}))}groupEnd(e){return this._getLogFunction(e,"",console.groupEnd||B)}withGroup(e,t,i){this.group(e,t)();try{i()}finally{this.groupEnd(e)()}}trace(){console.trace&&console.trace()}_shouldLog(e){return this.isEnabled()&&this.getLevel()>=xt(e)}_getLogFunction(e,t,i,n,s){if(this._shouldLog(e)){s=bt({logLevel:e,message:t,args:n,opts:s}),i=i||s.method,k(i),s.total=this.getTotal(),s.delta=this.getDelta(),this._deltaTs=E();let a=s.tag||s.message;if(s.once&&a)if(!pt[a])pt[a]=E();else return B;return t=sr(this.id,s.message,s),i.bind(console,t,...s.args)}return B}};v.VERSION=ze;function xt(r){if(!r)return 0;let e;switch(typeof r){case"number":e=r;break;case"object":e=r.logLevel||r.priority||0;break;default:return 0}return k(Number.isFinite(e)&&e>=0),e}function bt(r){let{logLevel:e,message:t}=r;r.logLevel=xt(e);let i=r.args?Array.from(r.args):[];for(;i.length&&i.shift()!==t;);switch(typeof e){case"string":case"function":t!==void 0&&i.unshift(t),r.message=e;break;case"object":Object.assign(r,e);break;default:}typeof r.message=="function"&&(r.message=r.message());let n=typeof r.message;return k(n==="string"||n==="object"),Object.assign(r,{args:i},r.opts)}function sr(r,e,t){if(typeof e=="string"){let i=t.time?lt(ft(t.total)):"";e=t.time?`${r}: ${i} ${e}`:`${r}: ${e}`,e=ht(e,t.color,t.background)}return e}function or(r){for(let e in r)for(let t in r[e])return t||"untitled";return"empty"}globalThis.probe={};var Li=new v({id:"@probe.gl/log"});var l=new v({id:"luma.gl"});var $e={};function S(r="id"){$e[r]=$e[r]||1;let e=$e[r]++;return`${r}-${e}`}var u=class{toString(){return`${this[Symbol.toStringTag]||this.constructor.name}:"${this.id}"`}id;props;userData={};_device;destroyed=!1;allocatedBytes=0;_attachedResources=new Set;constructor(e,t,i){if(!e)throw new Error("no device");this._device=e,this.props=ar(t,i);let n=this.props.id!=="undefined"?this.props.id:S(this[Symbol.toStringTag]);this.props.id=n,this.id=n,this.userData=this.props.userData||{},this.addStats()}destroy(){this.destroyResource()}delete(){return this.destroy(),this}getProps(){return this.props}attachResource(e){this._attachedResources.add(e)}detachResource(e){this._attachedResources.delete(e)}destroyAttachedResource(e){this._attachedResources.delete(e)&&e.destroy()}destroyAttachedResources(){for(let e of Object.values(this._attachedResources))e.destroy();this._attachedResources=new Set}destroyResource(){this.destroyAttachedResources(),this.removeStats(),this.destroyed=!0}removeStats(){let e=this._device.statsManager.getStats("Resource Counts"),t=this[Symbol.toStringTag];e.get(`${t}s Active`).decrementCount()}trackAllocatedMemory(e,t=this[Symbol.toStringTag]){let i=this._device.statsManager.getStats("Resource Counts");i.get("GPU Memory").addCount(e),i.get(`${t} Memory`).addCount(e),this.allocatedBytes=e}trackDeallocatedMemory(e=this[Symbol.toStringTag]){let t=this._device.statsManager.getStats("Resource Counts");t.get("GPU Memory").subtractCount(this.allocatedBytes),t.get(`${e} Memory`).subtractCount(this.allocatedBytes),this.allocatedBytes=0}addStats(){let e=this._device.statsManager.getStats("Resource Counts"),t=this[Symbol.toStringTag];e.get("Resources Created").incrementCount(),e.get(`${t}s Created`).incrementCount(),e.get(`${t}s Active`).incrementCount()}};c(u,"defaultProps",{id:"undefined",handle:void 0,userData:void 0});function ar(r,e){let t={...e};for(let i in r)r[i]!==void 0&&(t[i]=r[i]);return t}var W=class extends u{get[Symbol.toStringTag](){return"Buffer"}usage;indexType;updateTimestamp;constructor(e,t){let i={...t};(t.usage||0)&W.INDEX&&!t.indexType&&(t.data instanceof Uint32Array?i.indexType="uint32":t.data instanceof Uint16Array?i.indexType="uint16":t.data instanceof Uint8Array&&(i.indexType="uint8")),delete i.data,super(e,i,W.defaultProps),this.usage=i.usage||0,this.indexType=i.indexType,this.updateTimestamp=e.incrementTimestamp()}clone(e){return this.device.createBuffer({...this.props,...e})}debugData=new ArrayBuffer(0);_setDebugData(e,t,i){let n=ArrayBuffer.isView(e)?e.buffer:e,s=Math.min(e?e.byteLength:i,W.DEBUG_DATA_MAX_LENGTH);n===null?this.debugData=new ArrayBuffer(s):t===0&&i===n.byteLength?this.debugData=n.slice(0,s):this.debugData=n.slice(t,t+s)}},h=W;c(h,"INDEX",16),c(h,"VERTEX",32),c(h,"UNIFORM",64),c(h,"STORAGE",128),c(h,"INDIRECT",256),c(h,"QUERY_RESOLVE",512),c(h,"MAP_READ",1),c(h,"MAP_WRITE",2),c(h,"COPY_SRC",4),c(h,"COPY_DST",8),c(h,"DEBUG_DATA_MAX_LENGTH",32),c(h,"defaultProps",{...u.defaultProps,usage:0,byteLength:0,byteOffset:0,data:null,indexType:"uint16",onMapped:void 0});function M(r){let e=r.includes("norm"),t=!e&&!r.startsWith("float"),i=r.startsWith("s"),n=Ue[r],[s,a,o]=n||["uint8 ","i32",1];return{signedType:s,primitiveType:a,byteLength:o,normalized:e,integer:t,signed:i}}function pe(r){let e=r;switch(e){case"uint8":return"unorm8";case"sint8":return"snorm8";case"uint16":return"unorm16";case"sint16":return"snorm16";default:return e}}function ge(r,e){switch(e){case 1:return r;case 2:return r+r%2;default:return r+(4-r%4)%4}}function be(r){let e=ArrayBuffer.isView(r)?r.constructor:r;if(e===Uint8ClampedArray)return"uint8";let t=Object.values(Ue).find(i=>e===i[4]);if(!t)throw new Error(e.name);return t[0]}function yt(r){let[,,,,e]=Ue[r];return e}var Ue={uint8:["uint8","u32",1,!1,Uint8Array],sint8:["sint8","i32",1,!1,Int8Array],unorm8:["uint8","f32",1,!0,Uint8Array],snorm8:["sint8","f32",1,!0,Int8Array],uint16:["uint16","u32",2,!1,Uint16Array],sint16:["sint16","i32",2,!1,Int16Array],unorm16:["uint16","u32",2,!0,Uint16Array],snorm16:["sint16","i32",2,!0,Int16Array],float16:["float16","f16",2,!1,Uint16Array],float32:["float32","f32",4,!1,Float32Array],uint32:["uint32","u32",4,!1,Uint32Array],sint32:["sint32","i32",4,!1,Int32Array]};function _(r){let e;r.endsWith("-webgl")&&(r.replace("-webgl",""),e=!0);let[t,i]=r.split("x"),n=t,s=i?parseInt(i):1,a=M(n),o={type:n,components:s,byteLength:a.byteLength*s,integer:a.integer,signed:a.signed,normalized:a.normalized};return e&&(o.webglOnly=!0),o}function He(r,e,t){let i=t?pe(r):r;switch(i){case"unorm8":return e===1?"unorm8":e===3?"unorm8x3-webgl":`${i}x${e}`;case"snorm8":case"uint8":case"sint8":case"uint16":case"sint16":case"unorm16":case"snorm16":case"float16":if(e===1||e===3)throw new Error(`size: ${e}`);return`${i}x${e}`;default:return e===1?i:`${i}x${e}`}}function wt(r,e,t){if(!e||e>4)throw new Error(`size ${e}`);let i=e,n=be(r);return He(n,i,t)}function Tt(r){let e;switch(r.primitiveType){case"f32":e="float32";break;case"i32":e="sint32";break;case"u32":e="uint32";break;case"f16":return r.components<=2?"float16x2":"float16x4"}return r.components===1?e:`${e}x${r.components}`}var g="texture-compression-bc",m="texture-compression-astc",T="texture-compression-etc2",cr="texture-compression-etc1-webgl",xe="texture-compression-pvrtc-webgl",Ne="texture-compression-atc-webgl",ye="float32-renderable-webgl",ke="float16-renderable-webgl",ur="rgb9e5ufloat-renderable-webgl",We="snorm8-renderable-webgl",G="norm16-renderable-webgl",Ge="snorm16-renderable-webgl",we="float32-filterable",vt="float16-filterable-webgl";function O(r){let e=Pt[r];if(!e)throw new Error(`Unsupported texture format ${r}`);return e}function St(){return Pt}var fr={r8unorm:{},rg8unorm:{},"rgb8unorm-webgl":{},rgba8unorm:{},"rgba8unorm-srgb":{},r8snorm:{render:We},rg8snorm:{render:We},"rgb8snorm-webgl":{},rgba8snorm:{render:We},r8uint:{},rg8uint:{},rgba8uint:{},r8sint:{},rg8sint:{},rgba8sint:{},bgra8unorm:{},"bgra8unorm-srgb":{},r16unorm:{f:G},rg16unorm:{render:G},"rgb16unorm-webgl":{f:G},rgba16unorm:{render:G},r16snorm:{f:Ge},rg16snorm:{render:Ge},"rgb16snorm-webgl":{f:G},rgba16snorm:{render:Ge},r16uint:{},rg16uint:{},rgba16uint:{},r16sint:{},rg16sint:{},rgba16sint:{},r16float:{render:ke,filter:"float16-filterable-webgl"},rg16float:{render:ke,filter:vt},rgba16float:{render:ke,filter:vt},r32uint:{},rg32uint:{},rgba32uint:{},r32sint:{},rg32sint:{},rgba32sint:{},r32float:{render:ye,filter:we},rg32float:{render:!1,filter:we},"rgb32float-webgl":{render:ye,filter:we},rgba32float:{render:ye,filter:we},"rgba4unorm-webgl":{channels:"rgba",bitsPerChannel:[4,4,4,4],packed:!0},"rgb565unorm-webgl":{channels:"rgb",bitsPerChannel:[5,6,5,0],packed:!0},"rgb5a1unorm-webgl":{channels:"rgba",bitsPerChannel:[5,5,5,1],packed:!0},rgb9e5ufloat:{channels:"rgb",packed:!0,render:ur},rg11b10ufloat:{channels:"rgb",bitsPerChannel:[11,11,10,0],packed:!0,p:1,render:ye},rgb10a2unorm:{channels:"rgba",bitsPerChannel:[10,10,10,2],packed:!0,p:1},rgb10a2uint:{channels:"rgba",bitsPerChannel:[10,10,10,2],packed:!0,p:1},stencil8:{attachment:"stencil",bitsPerChannel:[8,0,0,0],dataType:"uint8"},depth16unorm:{attachment:"depth",bitsPerChannel:[16,0,0,0],dataType:"uint16"},depth24plus:{attachment:"depth",bitsPerChannel:[24,0,0,0],dataType:"uint32"},depth32float:{attachment:"depth",bitsPerChannel:[32,0,0,0],dataType:"float32"},"depth24plus-stencil8":{attachment:"depth-stencil",bitsPerChannel:[24,8,0,0],packed:!0},"depth32float-stencil8":{attachment:"depth-stencil",bitsPerChannel:[32,8,0,0],packed:!0}},lr={"bc1-rgb-unorm-webgl":{f:g},"bc1-rgb-unorm-srgb-webgl":{f:g},"bc1-rgba-unorm":{f:g},"bc1-rgba-unorm-srgb":{f:g},"bc2-rgba-unorm":{f:g},"bc2-rgba-unorm-srgb":{f:g},"bc3-rgba-unorm":{f:g},"bc3-rgba-unorm-srgb":{f:g},"bc4-r-unorm":{f:g},"bc4-r-snorm":{f:g},"bc5-rg-unorm":{f:g},"bc5-rg-snorm":{f:g},"bc6h-rgb-ufloat":{f:g},"bc6h-rgb-float":{f:g},"bc7-rgba-unorm":{f:g},"bc7-rgba-unorm-srgb":{f:g},"etc2-rgb8unorm":{f:T},"etc2-rgb8unorm-srgb":{f:T},"etc2-rgb8a1unorm":{f:T},"etc2-rgb8a1unorm-srgb":{f:T},"etc2-rgba8unorm":{f:T},"etc2-rgba8unorm-srgb":{f:T},"eac-r11unorm":{f:T},"eac-r11snorm":{f:T},"eac-rg11unorm":{f:T},"eac-rg11snorm":{f:T},"astc-4x4-unorm":{f:m},"astc-4x4-unorm-srgb":{f:m},"astc-5x4-unorm":{f:m},"astc-5x4-unorm-srgb":{f:m},"astc-5x5-unorm":{f:m},"astc-5x5-unorm-srgb":{f:m},"astc-6x5-unorm":{f:m},"astc-6x5-unorm-srgb":{f:m},"astc-6x6-unorm":{f:m},"astc-6x6-unorm-srgb":{f:m},"astc-8x5-unorm":{f:m},"astc-8x5-unorm-srgb":{f:m},"astc-8x6-unorm":{f:m},"astc-8x6-unorm-srgb":{f:m},"astc-8x8-unorm":{f:m},"astc-8x8-unorm-srgb":{f:m},"astc-10x5-unorm":{f:m},"astc-10x5-unorm-srgb":{f:m},"astc-10x6-unorm":{f:m},"astc-10x6-unorm-srgb":{f:m},"astc-10x8-unorm":{f:m},"astc-10x8-unorm-srgb":{f:m},"astc-10x10-unorm":{f:m},"astc-10x10-unorm-srgb":{f:m},"astc-12x10-unorm":{f:m},"astc-12x10-unorm-srgb":{f:m},"astc-12x12-unorm":{f:m},"astc-12x12-unorm-srgb":{f:m},"pvrtc-rgb4unorm-webgl":{f:xe},"pvrtc-rgba4unorm-webgl":{f:xe},"pvrtc-rbg2unorm-webgl":{f:xe},"pvrtc-rgba2unorm-webgl":{f:xe},"etc1-rbg-unorm-webgl":{f:cr},"atc-rgb-unorm-webgl":{f:Ne},"atc-rgba-unorm-webgl":{f:Ne},"atc-rgbai-unorm-webgl":{f:Ne}},Pt={...fr,...lr};var mr=/^(r|rg|rgb|rgba|bgra)([0-9]*)([a-z]*)(-srgb)?(-webgl)?$/,hr=["rgb","rgba","bgra"],dr=["depth","stencil"],pr=["bc1","bc2","bc3","bc4","bc5","bc6","bc7","etc1","etc2","eac","atc","astc","pvrtc"],V=class{isColor(e){return hr.some(t=>e.startsWith(t))}isDepthStencil(e){return dr.some(t=>e.startsWith(t))}isCompressed(e){return pr.some(t=>e.startsWith(t))}getInfo(e){return At(e)}getCapabilities(e){return br(e)}computeMemoryLayout(e){return gr(e)}},x=new V;function gr({format:r,width:e,height:t,depth:i,byteAlignment:n}){let{bytesPerPixel:s}=x.getInfo(r),a=e*s,o=Math.ceil(a/n)*n,f=t,d=o*f*i;return{bytesPerPixel:s,bytesPerRow:o,rowsPerImage:f,depthOrArrayLayers:i,bytesPerImage:o*f,byteLength:d}}function br(r){let e=O(r),t={format:r,create:e.f??!0,render:e.render??!0,filter:e.filter??!0,blend:e.blend??!0,store:e.store??!0},i=At(r),n=r.startsWith("depth")||r.startsWith("stencil"),s=i?.signed,a=i?.integer,o=i?.webgl;return t.render&&=!s,t.filter&&=!n&&!s&&!a&&!o,t}function At(r){let e=xr(r);if(x.isCompressed(r)){e.channels="rgb",e.components=3,e.bytesPerPixel=1,e.srgb=!1,e.compressed=!0;let i=yr(r);i&&(e.blockWidth=i.blockWidth,e.blockHeight=i.blockHeight)}let t=mr.exec(r);if(t){let[,i,n,s,a,o]=t,f=`${s}${n}`,d=M(f),b=d.byteLength*8,ae=i.length,Wt=[b,ae>=2?b:0,ae>=3?b:0,ae>=4?b:0];e={format:r,attachment:e.attachment,dataType:d.signedType,components:ae,channels:i,integer:d.integer,signed:d.signed,normalized:d.normalized,bitsPerChannel:Wt,bytesPerPixel:d.byteLength*i.length,packed:e.packed,srgb:e.srgb},o==="-webgl"&&(e.webgl=!0),a==="-srgb"&&(e.srgb=!0)}return r.endsWith("-webgl")&&(e.webgl=!0),r.endsWith("-srgb")&&(e.srgb=!0),e}function xr(r){let e=O(r),t=e.bytesPerPixel||1,i=e.bitsPerChannel||[8,8,8,8];return delete e.bitsPerChannel,delete e.bytesPerPixel,delete e.f,delete e.render,delete e.filter,delete e.blend,delete e.store,{...e,format:r,attachment:e.attachment||"color",channels:e.channels||"r",components:e.components||e.channels?.length||1,bytesPerPixel:t,bitsPerChannel:i,dataType:e.dataType||"uint8",srgb:e.srgb??!1,packed:e.packed??!1,webgl:e.webgl??!1,integer:e.integer??!1,signed:e.signed??!1,normalized:e.normalized??!1,compressed:e.compressed??!1}}function yr(r){let t=/.*-(\d+)x(\d+)-.*/.exec(r);if(t){let[,i,n]=t;return{blockWidth:Number(i),blockHeight:Number(n)}}return null}function Te(r){return typeof ImageData<"u"&&r instanceof ImageData||typeof ImageBitmap<"u"&&r instanceof ImageBitmap||typeof HTMLImageElement<"u"&&r instanceof HTMLImageElement||typeof HTMLVideoElement<"u"&&r instanceof HTMLVideoElement||typeof VideoFrame<"u"&&r instanceof VideoFrame||typeof HTMLCanvasElement<"u"&&r instanceof HTMLCanvasElement||typeof OffscreenCanvas<"u"&&r instanceof OffscreenCanvas}function ve(r){if(typeof ImageData<"u"&&r instanceof ImageData||typeof ImageBitmap<"u"&&r instanceof ImageBitmap||typeof HTMLCanvasElement<"u"&&r instanceof HTMLCanvasElement||typeof OffscreenCanvas<"u"&&r instanceof OffscreenCanvas)return{width:r.width,height:r.height};if(typeof HTMLImageElement<"u"&&r instanceof HTMLImageElement)return{width:r.naturalWidth,height:r.naturalHeight};if(typeof HTMLVideoElement<"u"&&r instanceof HTMLVideoElement)return{width:r.videoWidth,height:r.videoHeight};if(typeof VideoFrame<"u"&&r instanceof VideoFrame)return{width:r.displayWidth,height:r.displayHeight};throw new Error("Unknown image type")}var Se=class{},Pe=class{features;disabledFeatures;constructor(e=[],t){this.features=new Set(e),this.disabledFeatures=t||{}}*[Symbol.iterator](){yield*this.features}has(e){return!this.disabledFeatures?.[e]&&this.features.has(e)}},Oe=class{get[Symbol.toStringTag](){return"Device"}toString(){return`Device(${this.id})`}id;props;userData={};statsManager=fe;timestamp=0;_reused=!1;_moduleData={};_textureCaps={};constructor(e){this.props={...Oe.defaultProps,...e},this.id=this.props.id||S(this[Symbol.toStringTag].toLowerCase())}getVertexFormatInfo(e){return _(e)}isVertexFormatSupported(e){return!0}getTextureFormatInfo(e){return x.getInfo(e)}getTextureFormatCapabilities(e){let t=this._textureCaps[e];if(!t){let i=this._getDeviceTextureFormatCapabilities(e);t=this._getDeviceSpecificTextureFormatCapabilities(i),this._textureCaps[e]=t}return t}getMipLevelCount(e,t,i=1){let n=Math.max(e,t,i);return 1+Math.floor(Math.log2(n))}isExternalImage(e){return Te(e)}getExternalImageSize(e){return ve(e)}isTextureFormatSupported(e){return this.getTextureFormatCapabilities(e).create}isTextureFormatFilterable(e){return this.getTextureFormatCapabilities(e).filter}isTextureFormatRenderable(e){return this.getTextureFormatCapabilities(e).render}isTextureFormatCompressed(e){return x.isCompressed(e)}pushDebugGroup(e){this.commandEncoder.pushDebugGroup(e)}popDebugGroup(){this.commandEncoder?.popDebugGroup()}insertDebugMarker(e){this.commandEncoder?.insertDebugMarker(e)}loseDevice(){return!1}incrementTimestamp(){return this.timestamp++}reportError(e,t,...i){return this.props.onError(e,t)?()=>{}:l.error(this.type==="webgl"?"%cWebGL":"%cWebGPU","color: white; background: red; padding: 2px 6px; border-radius: 3px;",e.message,t,...i)}debug(){if(this.props.debug)debugger;else{let e=`'Type luma.log.set({debug: true}) in console to enable debug breakpoints',
|
|
8
|
-
or create a device with the 'debug: true' prop.`;l.once(0,e)()}}getDefaultCanvasContext(){if(!this.canvasContext)throw new Error("Device has no default CanvasContext. See props.createCanvasContext");return this.canvasContext}createFence(){throw new Error("createFence() not implemented")}beginRenderPass(e){return this.commandEncoder.beginRenderPass(e)}beginComputePass(e){return this.commandEncoder.beginComputePass(e)}getCanvasContext(){return this.getDefaultCanvasContext()}readPixelsToArrayWebGL(e,t){throw new Error("not implemented")}readPixelsToBufferWebGL(e,t){throw new Error("not implemented")}setParametersWebGL(e){throw new Error("not implemented")}getParametersWebGL(e){throw new Error("not implemented")}withParametersWebGL(e,t){throw new Error("not implemented")}clearWebGL(e){throw new Error("not implemented")}resetWebGL(){throw new Error("not implemented")}getModuleData(e){return this._moduleData[e]||={},this._moduleData[e]}static _getCanvasContextProps(e){return e.createCanvasContext===!0?{}:e.createCanvasContext}_getDeviceTextureFormatCapabilities(e){let t=x.getCapabilities(e),i=s=>(typeof s=="string"?this.features.has(s):s)??!0,n=i(t.create);return{format:e,create:n,render:n&&i(t.render),filter:n&&i(t.filter),blend:n&&i(t.blend),store:n&&i(t.store)}}_normalizeBufferProps(e){(e instanceof ArrayBuffer||ArrayBuffer.isView(e))&&(e={data:e});let t={...e};if((e.usage||0)&h.INDEX&&(e.indexType||(e.data instanceof Uint32Array?t.indexType="uint32":e.data instanceof Uint16Array?t.indexType="uint16":e.data instanceof Uint8Array&&(t.data=new Uint16Array(e.data),t.indexType="uint16")),!t.indexType))throw new Error("indices buffer content must be of type uint16 or uint32");return t}},C=Oe;c(C,"defaultProps",{id:null,powerPreference:"high-performance",failIfMajorPerformanceCaveat:!1,createCanvasContext:void 0,webgl:{},onError:(e,t)=>{},onResize:(e,t)=>{let[i,n]=e.getDevicePixelSize();l.log(1,`${e} resized => ${i}x${n}px`)()},onPositionChange:(e,t)=>{let[i,n]=e.getPosition();l.log(1,`${e} repositioned => ${i},${n}`)()},onVisibilityChange:e=>l.log(1,`${e} Visibility changed ${e.isVisible}`)(),onDevicePixelRatioChange:(e,t)=>l.log(1,`${e} DPR changed ${t.oldRatio} => ${e.devicePixelRatio}`)(),debug:l.get("debug")||void 0,debugShaders:l.get("debug-shaders")||void 0,debugFramebuffers:Boolean(l.get("debug-framebuffers")),debugFactories:Boolean(l.get("debug-factories")),debugWebGL:Boolean(l.get("debug-webgl")),debugSpectorJS:void 0,debugSpectorJSUrl:void 0,_reuseDevices:!1,_requestMaxLimits:!0,_cacheShaders:!1,_cachePipelines:!1,_cacheDestroyPolicy:"unused",_initializeFeatures:!0,_disabledFeatures:{"compilation-status-async-webgl":!0},_handle:void 0});var wr="set luma.log.level=1 (or higher) to trace rendering",Et="No matching device found. Ensure `@luma.gl/webgl` and/or `@luma.gl/webgpu` modules are imported.",Ee=class{stats=fe;log=l;VERSION="9.3.0-alpha.2";spector;preregisteredAdapters=new Map;constructor(){if(globalThis.luma){if(globalThis.luma.VERSION!==this.VERSION)throw l.error(`Found luma.gl ${globalThis.luma.VERSION} while initialzing ${this.VERSION}`)(),l.error("'yarn why @luma.gl/core' can help identify the source of the conflict")(),new Error("luma.gl - multiple versions detected: see console log");l.error("This version of luma.gl has already been initialized")()}l.log(1,`${this.VERSION} - ${wr}`)(),globalThis.luma=this}async createDevice(e={}){let t={...Ee.defaultProps,...e},i=this.selectAdapter(t.type,t.adapters);if(!i)throw new Error(Et);return t.waitForPageLoad&&await i.pageLoaded,await i.create(t)}async attachDevice(e,t){let i=this._getTypeFromHandle(e,t.adapters),n=i&&this.selectAdapter(i,t.adapters);if(!n)throw new Error(Et);return await n?.attach?.(e,t)}registerAdapters(e){for(let t of e)this.preregisteredAdapters.set(t.type,t)}getSupportedAdapters(e=[]){let t=this._getAdapterMap(e);return Array.from(t).map(([,i])=>i).filter(i=>i.isSupported?.()).map(i=>i.type)}getBestAvailableAdapterType(e=[]){let t=["webgpu","webgl","null"],i=this._getAdapterMap(e);for(let n of t)if(i.get(n)?.isSupported?.())return n;return null}selectAdapter(e,t=[]){let i=e;e==="best-available"&&(i=this.getBestAvailableAdapterType(t));let n=this._getAdapterMap(t);return i&&n.get(i)||null}enforceWebGL2(e=!0,t=[]){let n=this._getAdapterMap(t).get("webgl");n||l.warn("enforceWebGL2: webgl adapter not found")(),n?.enforceWebGL2?.(e)}setDefaultDeviceProps(e){Object.assign(Ee.defaultProps,e)}_getAdapterMap(e=[]){let t=new Map(this.preregisteredAdapters);for(let i of e)t.set(i.type,i);return t}_getTypeFromHandle(e,t=[]){return e instanceof WebGL2RenderingContext?"webgl":typeof GPUDevice<"u"&&e instanceof GPUDevice||e?.queue?"webgpu":e===null?"null":(e instanceof WebGLRenderingContext?l.warn("WebGL1 is not supported",e)():l.warn("Unknown handle type",e)(),null)}},Ae=Ee;c(Ae,"defaultProps",{...C.defaultProps,type:"best-available",adapters:void 0,waitForPageLoad:!0});var _t=new Ae;var Ce=class{get pageLoaded(){return Sr()}},Tr=y()&&typeof document<"u",vr=()=>Tr&&document.readyState==="complete",_e=null;function Sr(){return _e||(vr()||typeof window>"u"?_e=Promise.resolve():_e=new Promise(r=>window.addEventListener("load",()=>r()))),_e}function Ct(){let r,e;return{promise:new Promise((i,n)=>{r=i,e=n}),resolve:r,reject:e}}var F=class{static isHTMLCanvas(e){return typeof HTMLCanvasElement<"u"&&e instanceof HTMLCanvasElement}static isOffscreenCanvas(e){return typeof OffscreenCanvas<"u"&&e instanceof OffscreenCanvas}id;props;canvas;htmlCanvas;offscreenCanvas;type;initialized;isInitialized=!1;isVisible=!0;cssWidth;cssHeight;devicePixelRatio;devicePixelWidth;devicePixelHeight;drawingBufferWidth;drawingBufferHeight;_initializedResolvers=Ct();_resizeObserver;_intersectionObserver;_position=[0,0];destroyed=!1;_needsDrawingBufferResize=!0;toString(){return`${this[Symbol.toStringTag]}(${this.id})`}constructor(e){if(this.props={...F.defaultProps,...e},e=this.props,this.initialized=this._initializedResolvers.promise,y()?e.canvas?typeof e.canvas=="string"?this.canvas=Ar(e.canvas):this.canvas=e.canvas:this.canvas=Er(e):this.canvas={width:e.width||1,height:e.height||1},F.isHTMLCanvas(this.canvas)?(this.id=e.id||this.canvas.id,this.type="html-canvas",this.htmlCanvas=this.canvas):F.isOffscreenCanvas(this.canvas)?(this.id=e.id||"offscreen-canvas",this.type="offscreen-canvas",this.offscreenCanvas=this.canvas):(this.id=e.id||"node-canvas-context",this.type="node"),this.cssWidth=this.htmlCanvas?.clientWidth||this.canvas.width,this.cssHeight=this.htmlCanvas?.clientHeight||this.canvas.height,this.devicePixelWidth=this.canvas.width,this.devicePixelHeight=this.canvas.height,this.drawingBufferWidth=this.canvas.width,this.drawingBufferHeight=this.canvas.height,this.devicePixelRatio=globalThis.devicePixelRatio||1,this._position=[0,0],F.isHTMLCanvas(this.canvas)){this._intersectionObserver=new IntersectionObserver(t=>this._handleIntersection(t)),this._intersectionObserver.observe(this.canvas),this._resizeObserver=new ResizeObserver(t=>this._handleResize(t));try{this._resizeObserver.observe(this.canvas,{box:"device-pixel-content-box"})}catch{this._resizeObserver.observe(this.canvas,{box:"content-box"})}setTimeout(()=>this._observeDevicePixelRatio(),0),this.props.trackPosition&&this._trackPosition()}}destroy(){this.destroyed=!0}setProps(e){return"useDevicePixels"in e&&(this.props.useDevicePixels=e.useDevicePixels||!1,this._updateDrawingBufferSize()),this}getCurrentFramebuffer(e){return this._resizeDrawingBufferIfNeeded(),this._getCurrentFramebuffer(e)}getCSSSize(){return[this.cssWidth,this.cssHeight]}getPosition(){return this._position}getDevicePixelSize(){return[this.devicePixelWidth,this.devicePixelHeight]}getDrawingBufferSize(){return[this.drawingBufferWidth,this.drawingBufferHeight]}getMaxDrawingBufferSize(){let e=this.device.limits.maxTextureDimension2D;return[e,e]}setDrawingBufferSize(e,t){this.drawingBufferWidth=Math.floor(e),this.drawingBufferHeight=Math.floor(t),this._needsDrawingBufferResize=!0}getDevicePixelRatio(){return typeof window<"u"&&window.devicePixelRatio||1}cssToDevicePixels(e,t=!0){let i=this.cssToDeviceRatio(),[n,s]=this.getDrawingBufferSize();return _r(e,i,n,s,t)}getPixelSize(){return this.getDevicePixelSize()}getAspect(){let[e,t]=this.getDevicePixelSize();return e/t}cssToDeviceRatio(){try{let[e]=this.getDrawingBufferSize(),[t]=this.getCSSSize();return t?e/t:1}catch{return 1}}resize(e){this.setDrawingBufferSize(e.width,e.height)}_setAutoCreatedCanvasId(e){this.htmlCanvas?.id==="lumagl-auto-created-canvas"&&(this.htmlCanvas.id=e)}_handleIntersection(e){let t=e.find(n=>n.target===this.canvas);if(!t)return;let i=t.isIntersecting;this.isVisible!==i&&(this.isVisible=i,this.device.props.onVisibilityChange(this))}_handleResize(e){let t=e.find(f=>f.target===this.canvas);if(!t)return;this.cssWidth=t.contentBoxSize[0].inlineSize,this.cssHeight=t.contentBoxSize[0].blockSize;let i=this.getDevicePixelSize(),n=t.devicePixelContentBoxSize?.[0].inlineSize||t.contentBoxSize[0].inlineSize*devicePixelRatio,s=t.devicePixelContentBoxSize?.[0].blockSize||t.contentBoxSize[0].blockSize*devicePixelRatio,[a,o]=this.getMaxDrawingBufferSize();this.devicePixelWidth=Math.max(1,Math.min(n,a)),this.devicePixelHeight=Math.max(1,Math.min(s,o)),this._updateDrawingBufferSize(),this.device.props.onResize(this,{oldPixelSize:i})}_updateDrawingBufferSize(){if(this.props.autoResize)if(typeof this.props.useDevicePixels=="number"){let e=this.props.useDevicePixels;this.setDrawingBufferSize(this.cssWidth*e,this.cssHeight*e)}else this.props.useDevicePixels?this.setDrawingBufferSize(this.devicePixelWidth,this.devicePixelHeight):this.setDrawingBufferSize(this.cssWidth,this.cssHeight);this._initializedResolvers.resolve(),this.isInitialized=!0,this.updatePosition()}_resizeDrawingBufferIfNeeded(){this._needsDrawingBufferResize&&(this._needsDrawingBufferResize=!1,(this.drawingBufferWidth!==this.canvas.width||this.drawingBufferHeight!==this.canvas.height)&&(this.canvas.width=this.drawingBufferWidth,this.canvas.height=this.drawingBufferHeight,this._configureDevice()))}_observeDevicePixelRatio(){let e=this.devicePixelRatio;this.devicePixelRatio=window.devicePixelRatio,this.updatePosition(),this.device.props.onDevicePixelRatioChange(this,{oldRatio:e}),matchMedia(`(resolution: ${this.devicePixelRatio}dppx)`).addEventListener("change",()=>this._observeDevicePixelRatio(),{once:!0})}_trackPosition(e=100){let t=setInterval(()=>{this.destroyed?clearInterval(t):this.updatePosition()},e)}updatePosition(){let e=this.htmlCanvas?.getBoundingClientRect();if(e){let t=[e.left,e.top];if(this._position??=t,t[0]!==this._position[0]||t[1]!==this._position[1]){let n=this._position;this._position=t,this.device.props.onPositionChange?.(this,{oldPosition:n})}}}},z=F;c(z,"defaultProps",{id:void 0,canvas:null,width:800,height:600,useDevicePixels:!0,autoResize:!0,container:null,visible:!0,alphaMode:"opaque",colorSpace:"srgb",trackPosition:!1});function Pr(r){if(typeof r=="string"){let e=document.getElementById(r);if(!e)throw new Error(`${r} is not an HTML element`);return e}return r||document.body}function Ar(r){let e=document.getElementById(r);if(!z.isHTMLCanvas(e))throw new Error("Object is not a canvas element");return e}function Er(r){let{width:e,height:t}=r,i=document.createElement("canvas");i.id=S("lumagl-auto-created-canvas"),i.width=e||1,i.height=t||1,i.style.width=Number.isFinite(e)?`${e}px`:"100%",i.style.height=Number.isFinite(t)?`${t}px`:"100%",r?.visible||(i.style.visibility="hidden");let n=Pr(r?.container||null);return n.insertBefore(i,n.firstChild),i}function _r(r,e,t,i,n){let s=r,a=It(s[0],e,t),o=Rt(s[1],e,i,n),f=It(s[0]+1,e,t),d=f===t-1?f:f-1;f=Rt(s[1]+1,e,i,n);let b;return n?(f=f===0?f:f+1,b=o,o=f):b=f===i-1?f:f-1,{x:a,y:o,width:Math.max(d-a+1,1),height:Math.max(b-o+1,1)}}function It(r,e,t){return Math.min(Math.round(r*e),t-1)}function Rt(r,e,t,i){return i?Math.max(0,t-1-Math.round(r*e)):Math.min(Math.round(r*e),t-1)}var Ie=class extends u{get[Symbol.toStringTag](){return"Sampler"}constructor(e,t){t=Ie.normalizeProps(e,t),super(e,t,Ie.defaultProps)}static normalizeProps(e,t){return t}},I=Ie;c(I,"defaultProps",{...u.defaultProps,type:"color-sampler",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",addressModeW:"clamp-to-edge",magFilter:"nearest",minFilter:"nearest",mipmapFilter:"none",lodMinClamp:0,lodMaxClamp:32,compare:"less-equal",maxAnisotropy:1});var Cr={"1d":"1d","2d":"2d","2d-array":"2d",cube:"2d","cube-array":"2d","3d":"3d"},w=class extends u{dimension;baseDimension;format;width;height;depth;mipLevels;byteAlignment;ready=Promise.resolve(this);isReady=!0;updateTimestamp;get[Symbol.toStringTag](){return"Texture"}toString(){return`Texture(${this.id},${this.format},${this.width}x${this.height})`}constructor(e,t,i){if(t=w.normalizeProps(e,t),super(e,t,w.defaultProps),this.dimension=this.props.dimension,this.baseDimension=Cr[this.dimension],this.format=this.props.format,this.width=this.props.width,this.height=this.props.height,this.depth=this.props.depth,this.mipLevels=this.props.mipLevels,this.dimension==="cube"&&(this.depth=6),this.props.width===void 0||this.props.height===void 0)if(e.isExternalImage(t.data)){let n=e.getExternalImageSize(t.data);this.width=n?.width||1,this.height=n?.height||1}else this.width=1,this.height=1,(this.props.width===void 0||this.props.height===void 0)&&l.warn(`${this} created with undefined width or height. This is deprecated. Use DynamicTexture instead.`)();this.byteAlignment=i?.byteAlignment||1,this.updateTimestamp=e.incrementTimestamp()}clone(e){return this.device.createTexture({...this.props,...e})}setSampler(e){this.sampler=e instanceof I?e:this.device.createSampler(e)}computeMemoryLayout(e={}){let t=this._normalizeTextureReadOptions(e),{width:i=this.width,height:n=this.height,depthOrArrayLayers:s=this.depth}=t,{format:a,byteAlignment:o}=this;return x.computeMemoryLayout({format:a,width:i,height:n,depth:s,byteAlignment:o})}readBuffer(e,t){throw new Error("readBuffer not implemented")}readDataAsync(e){throw new Error("readBuffer not implemented")}writeBuffer(e,t){throw new Error("readBuffer not implemented")}writeData(e,t){throw new Error("readBuffer not implemented")}readDataSyncWebGL(e){throw new Error("readDataSyncWebGL not available")}generateMipmapsWebGL(){throw new Error("generateMipmapsWebGL not available")}static normalizeProps(e,t){let i={...t},{width:n,height:s}=i;return typeof n=="number"&&(i.width=Math.max(1,Math.ceil(n))),typeof s=="number"&&(i.height=Math.max(1,Math.ceil(s))),i}_initializeData(e){this.device.isExternalImage(e)?this.copyExternalImage({image:e,width:this.width,height:this.height,depth:this.depth,mipLevel:0,x:0,y:0,z:0,aspect:"all",colorSpace:"srgb",premultipliedAlpha:!1,flipY:!1}):e&&this.copyImageData({data:e,mipLevel:0,x:0,y:0,z:0,aspect:"all"})}_normalizeCopyImageDataOptions(e){let{width:t,height:i,depth:n}=this,s={...w.defaultCopyDataOptions,width:t,height:i,depth:n,...e},a=this.device.getTextureFormatInfo(this.format);if(!e.bytesPerRow&&!a.bytesPerPixel)throw new Error(`bytesPerRow must be provided for texture format ${this.format}`);return s.bytesPerRow=e.bytesPerRow||t*(a.bytesPerPixel||4),s.rowsPerImage=e.rowsPerImage||i,s}_normalizeCopyExternalImageOptions(e){let t=this.device.getExternalImageSize(e.image),i={...w.defaultCopyExternalImageOptions,...t,...e};return i.width=Math.min(i.width,this.width-i.x),i.height=Math.min(i.height,this.height-i.y),i}_normalizeTextureReadOptions(e){let{width:t,height:i}=this,n={...w.defaultTextureReadOptions,width:t,height:i,...e};return n.width=Math.min(n.width,this.width-n.x),n.height=Math.min(n.height,this.height-n.y),n}_normalizeTextureWriteOptions(e){let{width:t,height:i}=this,n={...w.defaultTextureReadOptions,width:t,height:i,...e};return n.width=Math.min(n.width,this.width-n.x),n.height=Math.min(n.height,this.height-n.y),n}},p=w;c(p,"SAMPLE",4),c(p,"STORAGE",8),c(p,"RENDER",16),c(p,"COPY_SRC",1),c(p,"COPY_DST",2),c(p,"TEXTURE",4),c(p,"RENDER_ATTACHMENT",16),c(p,"defaultProps",{...u.defaultProps,data:null,dimension:"2d",format:"rgba8unorm",usage:w.SAMPLE|w.RENDER|w.COPY_DST,width:void 0,height:void 0,depth:1,mipLevels:1,samples:void 0,sampler:{},view:void 0}),c(p,"defaultCopyDataOptions",{data:void 0,byteOffset:0,bytesPerRow:void 0,rowsPerImage:void 0,mipLevel:0,x:0,y:0,z:0,aspect:"all"}),c(p,"defaultCopyExternalImageOptions",{image:void 0,sourceX:0,sourceY:0,width:void 0,height:void 0,depth:1,mipLevel:0,x:0,y:0,z:0,aspect:"all",colorSpace:"srgb",premultipliedAlpha:!1,flipY:!1}),c(p,"defaultTextureReadOptions",{x:0,y:0,z:0,width:void 0,height:void 0,depthOrArrayLayers:1,mipLevel:0,aspect:"all"});var Ve=class extends u{get[Symbol.toStringTag](){return"TextureView"}constructor(e,t){super(e,t,Ve.defaultProps)}},j=Ve;c(j,"defaultProps",{...u.defaultProps,format:void 0,dimension:void 0,aspect:"all",baseMipLevel:0,mipLevelCount:void 0,baseArrayLayer:0,arrayLayerCount:void 0});var je=class extends u{get[Symbol.toStringTag](){return"ExternalTexture"}constructor(e,t){super(e,t,je.defaultProps)}},Y=je;c(Y,"defaultProps",{...u.defaultProps,source:void 0,colorSpace:"srgb"});function Lt(r,e,t){let i="",n=e.split(/\r?\n/),s=r.slice().sort((a,o)=>a.lineNum-o.lineNum);switch(t?.showSourceCode||"no"){case"all":let a=0;for(let o=1;o<=n.length;o++)for(i+=Dt(n[o-1],o,t);s.length>a&&s[a].lineNum===o;){let f=s[a++];i+=Ye(f,n,f.lineNum,{...t,inlineSource:!1})}for(;s.length>a;){let o=s[a++];i+=Ye(o,[],0,{...t,inlineSource:!1})}return i;case"issues":case"no":for(let o of r)i+=Ye(o,n,o.lineNum,{inlineSource:t?.showSourceCode!=="no"});return i}}function Ye(r,e,t,i){if(i?.inlineSource){let s=Ir(e,t),a=r.linePos>0?`${" ".repeat(r.linePos+5)}^^^
|
|
7
|
+
"use strict";var __exports__=(()=>{var Vt=Object.create;var k=Object.defineProperty;var jt=Object.getOwnPropertyDescriptor;var Yt=Object.getOwnPropertyNames;var Xt=Object.getPrototypeOf,qt=Object.prototype.hasOwnProperty;var Kt=(r,e,t)=>e in r?k(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var Jt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Qt=(r,e)=>{for(var t in e)k(r,t,{get:e[t],enumerable:!0})},ue=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Yt(e))!qt.call(r,s)&&s!==t&&k(r,s,{get:()=>e[s],enumerable:!(i=jt(e,s))||i.enumerable});return r},ce=(r,e,t)=>(ue(r,e,"default"),t&&ue(t,e,"default")),Zt=(r,e,t)=>(t=r!=null?Vt(Xt(r)):{},ue(e||!r||!r.__esModule?k(t,"default",{value:r,enumerable:!0}):t,r)),er=r=>ue(k({},"__esModule",{value:!0}),r);var u=(r,e,t)=>(Kt(r,typeof e!="symbol"?e+"":e,t),t);var Ot=Jt((jo,Wt)=>{Wt.exports=globalThis.luma});var ae={};Qt(ae,{Adapter:()=>Ie,Buffer:()=>m,CanvasContext:()=>F,CommandBuffer:()=>te,CommandEncoder:()=>ee,ComputePass:()=>Z,ComputePipeline:()=>Q,Device:()=>C,DeviceFeatures:()=>_e,DeviceLimits:()=>Pe,ExternalTexture:()=>X,Fence:()=>ne,Framebuffer:()=>K,PipelineLayout:()=>oe,QuerySet:()=>se,RenderPass:()=>P,RenderPipeline:()=>J,Resource:()=>c,Sampler:()=>I,Shader:()=>q,Texture:()=>p,TextureFormatDecoder:()=>j,TextureView:()=>Y,TransformFeedback:()=>ie,UniformBlock:()=>H,UniformBufferLayout:()=>U,UniformStore:()=>Fe,VertexArray:()=>re,_getTextureFormatDefinition:()=>V,_getTextureFormatTable:()=>_t,assert:()=>Re,assertDefined:()=>De,getAttributeInfosFromLayouts:()=>ot,getAttributeShaderTypeInfo:()=>Me,getDataType:()=>xe,getDataTypeInfo:()=>z,getExternalImageSize:()=>Se,getNormalizedDataType:()=>ge,getScratchArray:()=>$t,getTextureImageView:()=>dt,getTypedArrayConstructor:()=>vt,getVariableShaderTypeInfo:()=>Be,getVertexFormatFromAttribute:()=>Tt,getVertexFormatInfo:()=>E,isExternalImage:()=>Te,log:()=>l,luma:()=>It,makeVertexFormat:()=>Ge,readPixel:()=>Nt,setTextureImageData:()=>Ht,textureFormatDecoder:()=>x,writePixel:()=>kt});function W(){let r;if(typeof window<"u"&&window.performance)r=window.performance.now();else if(typeof process<"u"&&process.hrtime){let e=process.hrtime();r=e[0]*1e3+e[1]/1e6}else r=Date.now();return r}var _=class{constructor(e,t){this.sampleSize=1,this.time=0,this.count=0,this.samples=0,this.lastTiming=0,this.lastSampleTime=0,this.lastSampleCount=0,this._count=0,this._time=0,this._samples=0,this._startTime=0,this._timerPending=!1,this.name=e,this.type=t,this.reset()}reset(){return this.time=0,this.count=0,this.samples=0,this.lastTiming=0,this.lastSampleTime=0,this.lastSampleCount=0,this._count=0,this._time=0,this._samples=0,this._startTime=0,this._timerPending=!1,this}setSampleSize(e){return this.sampleSize=e,this}incrementCount(){return this.addCount(1),this}decrementCount(){return this.subtractCount(1),this}addCount(e){return this._count+=e,this._samples++,this._checkSampling(),this}subtractCount(e){return this._count-=e,this._samples++,this._checkSampling(),this}addTime(e){return this._time+=e,this.lastTiming=e,this._samples++,this._checkSampling(),this}timeStart(){return this._startTime=W(),this._timerPending=!0,this}timeEnd(){return this._timerPending?(this.addTime(W()-this._startTime),this._timerPending=!1,this._checkSampling(),this):this}getSampleAverageCount(){return this.sampleSize>0?this.lastSampleCount/this.sampleSize:0}getSampleAverageTime(){return this.sampleSize>0?this.lastSampleTime/this.sampleSize:0}getSampleHz(){return this.lastSampleTime>0?this.sampleSize/(this.lastSampleTime/1e3):0}getAverageCount(){return this.samples>0?this.count/this.samples:0}getAverageTime(){return this.samples>0?this.time/this.samples:0}getHz(){return this.time>0?this.samples/(this.time/1e3):0}_checkSampling(){this._samples===this.sampleSize&&(this.lastSampleTime=this._time,this.lastSampleCount=this._count,this.count+=this._count,this.time+=this._time,this.samples+=this._samples,this._time=0,this._count=0,this._samples=0)}};var D=class{constructor(e){this.stats={},this.id=e.id,this.stats={},this._initializeStats(e.stats),Object.seal(this)}get(e,t="count"){return this._getOrCreate({name:e,type:t})}get size(){return Object.keys(this.stats).length}reset(){for(let e of Object.values(this.stats))e.reset();return this}forEach(e){for(let t of Object.values(this.stats))e(t)}getTable(){let e={};return this.forEach(t=>{e[t.name]={time:t.time||0,count:t.count||0,average:t.getAverageTime()||0,hz:t.getHz()||0}}),e}_initializeStats(e=[]){e.forEach(t=>this._getOrCreate(t))}_getOrCreate(e){let{name:t,type:i}=e,s=this.stats[t];return s||(e instanceof _?s=e:s=new _(t,i),this.stats[t]=s),s}};var Ue=class{stats=new Map;getStats(e){return this.get(e)}get(e){return this.stats.has(e)||this.stats.set(e,new D({id:e})),this.stats.get(e)}},fe=new Ue;var le=globalThis,tr=globalThis.document||{},he=globalThis.process||{},rr=globalThis.console,ai=globalThis.navigator||{};function mt(r){if(typeof window<"u"&&window.process?.type==="renderer"||typeof process<"u"&&Boolean(process.versions?.electron))return!0;let e=typeof navigator<"u"&&navigator.userAgent,t=r||e;return Boolean(t&&t.indexOf("Electron")>=0)}function y(){return!(typeof process=="object"&&String(process)==="[object process]"&&!process?.browser)||mt()}var He="4.1.1";function L(r,e){if(!r)throw new Error(e||"Assertion failed")}function Ne(r){if(!r)return 0;let e;switch(typeof r){case"number":e=r;break;case"object":e=r.logLevel||r.priority||0;break;default:return 0}return L(Number.isFinite(e)&&e>=0),e}function pt(r){let{logLevel:e,message:t}=r;r.logLevel=Ne(e);let i=r.args?Array.from(r.args):[];for(;i.length&&i.shift()!==t;);switch(typeof e){case"string":case"function":t!==void 0&&i.unshift(t),r.message=e;break;case"object":Object.assign(r,e);break;default:}typeof r.message=="function"&&(r.message=r.message());let s=typeof r.message;return L(s==="string"||s==="object"),Object.assign(r,{args:i},r.opts)}var A=()=>{},de=class{constructor({level:e=0}={}){this.userData={},this._onceCache=new Set,this._level=e}set level(e){this.setLevel(e)}get level(){return this.getLevel()}setLevel(e){return this._level=e,this}getLevel(){return this._level}warn(e,...t){return this._log("warn",0,e,t,{once:!0})}error(e,...t){return this._log("error",0,e,t)}log(e,t,...i){return this._log("log",e,t,i)}info(e,t,...i){return this._log("info",e,t,i)}once(e,t,...i){return this._log("once",e,t,i,{once:!0})}_log(e,t,i,s,n={}){let a=pt({logLevel:t,message:i,args:this._buildArgs(t,i,s),opts:n});return this._createLogFunction(e,a,n)}_buildArgs(e,t,i){return[e,t,...i]}_createLogFunction(e,t,i){if(!this._shouldLog(t.logLevel))return A;let s=this._getOnceTag(i.tag??t.tag??t.message);if((i.once||t.once)&&s!==void 0){if(this._onceCache.has(s))return A;this._onceCache.add(s)}return this._emit(e,t)}_shouldLog(e){return this.getLevel()>=Ne(e)}_getOnceTag(e){if(e!==void 0)try{return typeof e=="string"?e:String(e)}catch{return}}};function sr(r){try{let e=window[r],t="__storage_test__";return e.setItem(t,t),e.removeItem(t),e}catch{return null}}var me=class{constructor(e,t,i="sessionStorage"){this.storage=sr(i),this.id=e,this.config=t,this._loadConfiguration()}getConfiguration(){return this.config}setConfiguration(e){if(Object.assign(this.config,e),this.storage){let t=JSON.stringify(this.config);this.storage.setItem(this.id,t)}}_loadConfiguration(){let e={};if(this.storage){let t=this.storage.getItem(this.id);e=t?JSON.parse(t):{}}return Object.assign(this.config,e),this}};function gt(r){let e;return r<10?e=`${r.toFixed(2)}ms`:r<100?e=`${r.toFixed(1)}ms`:r<1e3?e=`${r.toFixed(0)}ms`:e=`${(r/1e3).toFixed(2)}s`,e}function bt(r,e=8){let t=Math.max(e-r.length,0);return`${" ".repeat(t)}${r}`}var pe;(function(r){r[r.BLACK=30]="BLACK",r[r.RED=31]="RED",r[r.GREEN=32]="GREEN",r[r.YELLOW=33]="YELLOW",r[r.BLUE=34]="BLUE",r[r.MAGENTA=35]="MAGENTA",r[r.CYAN=36]="CYAN",r[r.WHITE=37]="WHITE",r[r.BRIGHT_BLACK=90]="BRIGHT_BLACK",r[r.BRIGHT_RED=91]="BRIGHT_RED",r[r.BRIGHT_GREEN=92]="BRIGHT_GREEN",r[r.BRIGHT_YELLOW=93]="BRIGHT_YELLOW",r[r.BRIGHT_BLUE=94]="BRIGHT_BLUE",r[r.BRIGHT_MAGENTA=95]="BRIGHT_MAGENTA",r[r.BRIGHT_CYAN=96]="BRIGHT_CYAN",r[r.BRIGHT_WHITE=97]="BRIGHT_WHITE"})(pe||(pe={}));var nr=10;function xt(r){return typeof r!="string"?r:(r=r.toUpperCase(),pe[r]||pe.WHITE)}function yt(r,e,t){return!y&&typeof r=="string"&&(e&&(r=`\x1B[${xt(e)}m${r}\x1B[39m`),t&&(r=`\x1B[${xt(t)+nr}m${r}\x1B[49m`)),r}function wt(r,e=["constructor"]){let t=Object.getPrototypeOf(r),i=Object.getOwnPropertyNames(t),s=r;for(let n of i){let a=s[n];typeof a=="function"&&(e.find(o=>n===o)||(s[n]=a.bind(r)))}}function B(){let r;if(y()&&le.performance)r=le?.performance?.now?.();else if("hrtime"in he){let e=he?.hrtime?.();r=e[0]*1e3+e[1]/1e6}else r=Date.now();return r}var M={debug:y()&&console.debug||console.log,log:console.log,info:console.info,warn:console.warn,error:console.error},ke={enabled:!0,level:0},T=class extends de{constructor({id:e}={id:""}){super({level:0}),this.VERSION=He,this._startTs=B(),this._deltaTs=B(),this.userData={},this.LOG_THROTTLE_TIMEOUT=0,this.id=e,this.userData={},this._storage=new me(`__probe-${this.id}__`,{[this.id]:ke}),this.timeStamp(`${this.id} started`),wt(this),Object.seal(this)}isEnabled(){return this._getConfiguration().enabled}getLevel(){return this._getConfiguration().level}getTotal(){return Number((B()-this._startTs).toPrecision(10))}getDelta(){return Number((B()-this._deltaTs).toPrecision(10))}set priority(e){this.level=e}get priority(){return this.level}getPriority(){return this.level}enable(e=!0){return this._updateConfiguration({enabled:e}),this}setLevel(e){return this._updateConfiguration({level:e}),this}get(e){return this._getConfiguration()[e]}set(e,t){this._updateConfiguration({[e]:t})}settings(){console.table?console.table(this._storage.config):console.log(this._storage.config)}assert(e,t){if(!e)throw new Error(t||"Assertion failed")}warn(e,...t){return this._log("warn",0,e,t,{method:M.warn,once:!0})}error(e,...t){return this._log("error",0,e,t,{method:M.error})}deprecated(e,t){return this.warn(`\`${e}\` is deprecated and will be removed in a later version. Use \`${t}\` instead`)}removed(e,t){return this.error(`\`${e}\` has been removed. Use \`${t}\` instead`)}probe(e,t,...i){return this._log("log",e,t,i,{method:M.log,time:!0,once:!0})}log(e,t,...i){return this._log("log",e,t,i,{method:M.debug})}info(e,t,...i){return this._log("info",e,t,i,{method:console.info})}once(e,t,...i){return this._log("once",e,t,i,{method:M.debug||M.info,once:!0})}table(e,t,i){return t?this._log("table",e,t,i&&[i]||[],{method:console.table||A,tag:ar(t)}):A}time(e,t){return this._log("time",e,t,[],{method:console.time?console.time:console.info})}timeEnd(e,t){return this._log("time",e,t,[],{method:console.timeEnd?console.timeEnd:console.info})}timeStamp(e,t){return this._log("time",e,t,[],{method:console.timeStamp||A})}group(e,t,i={collapsed:!1}){let s=(i.collapsed?console.groupCollapsed:console.group)||console.info;return this._log("group",e,t,[],{method:s})}groupCollapsed(e,t,i={}){return this.group(e,t,Object.assign({},i,{collapsed:!0}))}groupEnd(e){return this._log("groupEnd",e,"",[],{method:console.groupEnd||A})}withGroup(e,t,i){this.group(e,t)();try{i()}finally{this.groupEnd(e)()}}trace(){console.trace&&console.trace()}_shouldLog(e){return this.isEnabled()&&super._shouldLog(e)}_emit(e,t){let i=t.method;L(i),t.total=this.getTotal(),t.delta=this.getDelta(),this._deltaTs=B();let s=or(this.id,t.message,t);return i.bind(console,s,...t.args)}_getConfiguration(){return this._storage.config[this.id]||this._updateConfiguration(ke),this._storage.config[this.id]}_updateConfiguration(e){let t=this._storage.config[this.id]||{...ke};this._storage.setConfiguration({[this.id]:{...t,...e}})}};T.VERSION=He;function or(r,e,t){if(typeof e=="string"){let i=t.time?bt(gt(t.total)):"";e=t.time?`${r}: ${i} ${e}`:`${r}: ${e}`,e=yt(e,t.color,t.background)}return e}function ar(r){for(let e in r)for(let t in r[e])return t||"untitled";return"empty"}globalThis.probe={};var Fi=new T({id:"@probe.gl/log"});var l=new T({id:"luma.gl"});var We={};function S(r="id"){We[r]=We[r]||1;let e=We[r]++;return`${r}-${e}`}var c=class{toString(){return`${this[Symbol.toStringTag]||this.constructor.name}:"${this.id}"`}id;props;userData={};_device;destroyed=!1;allocatedBytes=0;_attachedResources=new Set;constructor(e,t,i){if(!e)throw new Error("no device");this._device=e,this.props=ur(t,i);let s=this.props.id!=="undefined"?this.props.id:S(this[Symbol.toStringTag]);this.props.id=s,this.id=s,this.userData=this.props.userData||{},this.addStats()}destroy(){this.destroyResource()}delete(){return this.destroy(),this}getProps(){return this.props}attachResource(e){this._attachedResources.add(e)}detachResource(e){this._attachedResources.delete(e)}destroyAttachedResource(e){this._attachedResources.delete(e)&&e.destroy()}destroyAttachedResources(){for(let e of Object.values(this._attachedResources))e.destroy();this._attachedResources=new Set}destroyResource(){this.destroyAttachedResources(),this.removeStats(),this.destroyed=!0}removeStats(){let e=this._device.statsManager.getStats("Resource Counts"),t=this[Symbol.toStringTag];e.get(`${t}s Active`).decrementCount()}trackAllocatedMemory(e,t=this[Symbol.toStringTag]){let i=this._device.statsManager.getStats("Resource Counts");i.get("GPU Memory").addCount(e),i.get(`${t} Memory`).addCount(e),this.allocatedBytes=e}trackDeallocatedMemory(e=this[Symbol.toStringTag]){let t=this._device.statsManager.getStats("Resource Counts");t.get("GPU Memory").subtractCount(this.allocatedBytes),t.get(`${e} Memory`).subtractCount(this.allocatedBytes),this.allocatedBytes=0}addStats(){let e=this._device.statsManager.getStats("Resource Counts"),t=this[Symbol.toStringTag];e.get("Resources Created").incrementCount(),e.get(`${t}s Created`).incrementCount(),e.get(`${t}s Active`).incrementCount()}};u(c,"defaultProps",{id:"undefined",handle:void 0,userData:void 0});function ur(r,e){let t={...e};for(let i in r)r[i]!==void 0&&(t[i]=r[i]);return t}var O=class extends c{get[Symbol.toStringTag](){return"Buffer"}usage;indexType;updateTimestamp;constructor(e,t){let i={...t};(t.usage||0)&O.INDEX&&!t.indexType&&(t.data instanceof Uint32Array?i.indexType="uint32":t.data instanceof Uint16Array?i.indexType="uint16":t.data instanceof Uint8Array&&(i.indexType="uint8")),delete i.data,super(e,i,O.defaultProps),this.usage=i.usage||0,this.indexType=i.indexType,this.updateTimestamp=e.incrementTimestamp()}clone(e){return this.device.createBuffer({...this.props,...e})}debugData=new ArrayBuffer(0);_setDebugData(e,t,i){let s=ArrayBuffer.isView(e)?e.buffer:e,n=Math.min(e?e.byteLength:i,O.DEBUG_DATA_MAX_LENGTH);s===null?this.debugData=new ArrayBuffer(n):t===0&&i===s.byteLength?this.debugData=s.slice(0,n):this.debugData=s.slice(t,t+n)}},m=O;u(m,"INDEX",16),u(m,"VERTEX",32),u(m,"UNIFORM",64),u(m,"STORAGE",128),u(m,"INDIRECT",256),u(m,"QUERY_RESOLVE",512),u(m,"MAP_READ",1),u(m,"MAP_WRITE",2),u(m,"COPY_SRC",4),u(m,"COPY_DST",8),u(m,"DEBUG_DATA_MAX_LENGTH",32),u(m,"defaultProps",{...c.defaultProps,usage:0,byteLength:0,byteOffset:0,data:null,indexType:"uint16",onMapped:void 0});function z(r){let e=r.includes("norm"),t=!e&&!r.startsWith("float"),i=r.startsWith("s"),s=Oe[r],[n,a,o]=s||["uint8 ","i32",1];return{signedType:n,primitiveType:a,byteLength:o,normalized:e,integer:t,signed:i}}function ge(r){let e=r;switch(e){case"uint8":return"unorm8";case"sint8":return"snorm8";case"uint16":return"unorm16";case"sint16":return"snorm16";default:return e}}function be(r,e){switch(e){case 1:return r;case 2:return r+r%2;default:return r+(4-r%4)%4}}function xe(r){let e=ArrayBuffer.isView(r)?r.constructor:r;if(e===Uint8ClampedArray)return"uint8";let t=Object.values(Oe).find(i=>e===i[4]);if(!t)throw new Error(e.name);return t[0]}function vt(r){let[,,,,e]=Oe[r];return e}var Oe={uint8:["uint8","u32",1,!1,Uint8Array],sint8:["sint8","i32",1,!1,Int8Array],unorm8:["uint8","f32",1,!0,Uint8Array],snorm8:["sint8","f32",1,!0,Int8Array],uint16:["uint16","u32",2,!1,Uint16Array],sint16:["sint16","i32",2,!1,Int16Array],unorm16:["uint16","u32",2,!0,Uint16Array],snorm16:["sint16","i32",2,!0,Int16Array],float16:["float16","f16",2,!1,Uint16Array],float32:["float32","f32",4,!1,Float32Array],uint32:["uint32","u32",4,!1,Uint32Array],sint32:["sint32","i32",4,!1,Int32Array]};function E(r){let e;r.endsWith("-webgl")&&(r.replace("-webgl",""),e=!0);let[t,i]=r.split("x"),s=t,n=i?parseInt(i):1,a=z(s),o={type:s,components:n,byteLength:a.byteLength*n,integer:a.integer,signed:a.signed,normalized:a.normalized};return e&&(o.webglOnly=!0),o}function Ge(r,e,t){let i=t?ge(r):r;switch(i){case"unorm8":return e===1?"unorm8":e===3?"unorm8x3-webgl":`${i}x${e}`;case"snorm8":case"uint8":case"sint8":case"uint16":case"sint16":case"unorm16":case"snorm16":case"float16":if(e===1||e===3)throw new Error(`size: ${e}`);return`${i}x${e}`;default:return e===1?i:`${i}x${e}`}}function Tt(r,e,t){if(!e||e>4)throw new Error(`size ${e}`);let i=e,s=xe(r);return Ge(s,i,t)}function St(r){let e;switch(r.primitiveType){case"f32":e="float32";break;case"i32":e="sint32";break;case"u32":e="uint32";break;case"f16":return r.components<=2?"float16x2":"float16x4"}return r.components===1?e:`${e}x${r.components}`}var b="texture-compression-bc",h="texture-compression-astc",v="texture-compression-etc2",cr="texture-compression-etc1-webgl",ye="texture-compression-pvrtc-webgl",Ve="texture-compression-atc-webgl",we="float32-renderable-webgl",je="float16-renderable-webgl",fr="rgb9e5ufloat-renderable-webgl",Ye="snorm8-renderable-webgl",G="norm16-renderable-webgl",Xe="snorm16-renderable-webgl",ve="float32-filterable",Pt="float16-filterable-webgl";function V(r){let e=At[r];if(!e)throw new Error(`Unsupported texture format ${r}`);return e}function _t(){return At}var lr={r8unorm:{},rg8unorm:{},"rgb8unorm-webgl":{},rgba8unorm:{},"rgba8unorm-srgb":{},r8snorm:{render:Ye},rg8snorm:{render:Ye},"rgb8snorm-webgl":{},rgba8snorm:{render:Ye},r8uint:{},rg8uint:{},rgba8uint:{},r8sint:{},rg8sint:{},rgba8sint:{},bgra8unorm:{},"bgra8unorm-srgb":{},r16unorm:{f:G},rg16unorm:{render:G},"rgb16unorm-webgl":{f:G},rgba16unorm:{render:G},r16snorm:{f:Xe},rg16snorm:{render:Xe},"rgb16snorm-webgl":{f:G},rgba16snorm:{render:Xe},r16uint:{},rg16uint:{},rgba16uint:{},r16sint:{},rg16sint:{},rgba16sint:{},r16float:{render:je,filter:"float16-filterable-webgl"},rg16float:{render:je,filter:Pt},rgba16float:{render:je,filter:Pt},r32uint:{},rg32uint:{},rgba32uint:{},r32sint:{},rg32sint:{},rgba32sint:{},r32float:{render:we,filter:ve},rg32float:{render:!1,filter:ve},"rgb32float-webgl":{render:we,filter:ve},rgba32float:{render:we,filter:ve},"rgba4unorm-webgl":{channels:"rgba",bitsPerChannel:[4,4,4,4],packed:!0},"rgb565unorm-webgl":{channels:"rgb",bitsPerChannel:[5,6,5,0],packed:!0},"rgb5a1unorm-webgl":{channels:"rgba",bitsPerChannel:[5,5,5,1],packed:!0},rgb9e5ufloat:{channels:"rgb",packed:!0,render:fr},rg11b10ufloat:{channels:"rgb",bitsPerChannel:[11,11,10,0],packed:!0,p:1,render:we},rgb10a2unorm:{channels:"rgba",bitsPerChannel:[10,10,10,2],packed:!0,p:1},rgb10a2uint:{channels:"rgba",bitsPerChannel:[10,10,10,2],packed:!0,p:1},stencil8:{attachment:"stencil",bitsPerChannel:[8,0,0,0],dataType:"uint8"},depth16unorm:{attachment:"depth",bitsPerChannel:[16,0,0,0],dataType:"uint16"},depth24plus:{attachment:"depth",bitsPerChannel:[24,0,0,0],dataType:"uint32"},depth32float:{attachment:"depth",bitsPerChannel:[32,0,0,0],dataType:"float32"},"depth24plus-stencil8":{attachment:"depth-stencil",bitsPerChannel:[24,8,0,0],packed:!0},"depth32float-stencil8":{attachment:"depth-stencil",bitsPerChannel:[32,8,0,0],packed:!0}},hr={"bc1-rgb-unorm-webgl":{f:b},"bc1-rgb-unorm-srgb-webgl":{f:b},"bc1-rgba-unorm":{f:b},"bc1-rgba-unorm-srgb":{f:b},"bc2-rgba-unorm":{f:b},"bc2-rgba-unorm-srgb":{f:b},"bc3-rgba-unorm":{f:b},"bc3-rgba-unorm-srgb":{f:b},"bc4-r-unorm":{f:b},"bc4-r-snorm":{f:b},"bc5-rg-unorm":{f:b},"bc5-rg-snorm":{f:b},"bc6h-rgb-ufloat":{f:b},"bc6h-rgb-float":{f:b},"bc7-rgba-unorm":{f:b},"bc7-rgba-unorm-srgb":{f:b},"etc2-rgb8unorm":{f:v},"etc2-rgb8unorm-srgb":{f:v},"etc2-rgb8a1unorm":{f:v},"etc2-rgb8a1unorm-srgb":{f:v},"etc2-rgba8unorm":{f:v},"etc2-rgba8unorm-srgb":{f:v},"eac-r11unorm":{f:v},"eac-r11snorm":{f:v},"eac-rg11unorm":{f:v},"eac-rg11snorm":{f:v},"astc-4x4-unorm":{f:h},"astc-4x4-unorm-srgb":{f:h},"astc-5x4-unorm":{f:h},"astc-5x4-unorm-srgb":{f:h},"astc-5x5-unorm":{f:h},"astc-5x5-unorm-srgb":{f:h},"astc-6x5-unorm":{f:h},"astc-6x5-unorm-srgb":{f:h},"astc-6x6-unorm":{f:h},"astc-6x6-unorm-srgb":{f:h},"astc-8x5-unorm":{f:h},"astc-8x5-unorm-srgb":{f:h},"astc-8x6-unorm":{f:h},"astc-8x6-unorm-srgb":{f:h},"astc-8x8-unorm":{f:h},"astc-8x8-unorm-srgb":{f:h},"astc-10x5-unorm":{f:h},"astc-10x5-unorm-srgb":{f:h},"astc-10x6-unorm":{f:h},"astc-10x6-unorm-srgb":{f:h},"astc-10x8-unorm":{f:h},"astc-10x8-unorm-srgb":{f:h},"astc-10x10-unorm":{f:h},"astc-10x10-unorm-srgb":{f:h},"astc-12x10-unorm":{f:h},"astc-12x10-unorm-srgb":{f:h},"astc-12x12-unorm":{f:h},"astc-12x12-unorm-srgb":{f:h},"pvrtc-rgb4unorm-webgl":{f:ye},"pvrtc-rgba4unorm-webgl":{f:ye},"pvrtc-rbg2unorm-webgl":{f:ye},"pvrtc-rgba2unorm-webgl":{f:ye},"etc1-rbg-unorm-webgl":{f:cr},"atc-rgb-unorm-webgl":{f:Ve},"atc-rgba-unorm-webgl":{f:Ve},"atc-rgbai-unorm-webgl":{f:Ve}},At={...lr,...hr};var dr=/^(r|rg|rgb|rgba|bgra)([0-9]*)([a-z]*)(-srgb)?(-webgl)?$/,mr=["rgb","rgba","bgra"],pr=["depth","stencil"],gr=["bc1","bc2","bc3","bc4","bc5","bc6","bc7","etc1","etc2","eac","atc","astc","pvrtc"],j=class{isColor(e){return mr.some(t=>e.startsWith(t))}isDepthStencil(e){return pr.some(t=>e.startsWith(t))}isCompressed(e){return gr.some(t=>e.startsWith(t))}getInfo(e){return Et(e)}getCapabilities(e){return xr(e)}computeMemoryLayout(e){return br(e)}},x=new j;function br({format:r,width:e,height:t,depth:i,byteAlignment:s}){let{bytesPerPixel:n}=x.getInfo(r),a=e*n,o=Math.ceil(a/s)*s,f=t,d=o*f*i;return{bytesPerPixel:n,bytesPerRow:o,rowsPerImage:f,depthOrArrayLayers:i,bytesPerImage:o*f,byteLength:d}}function xr(r){let e=V(r),t={format:r,create:e.f??!0,render:e.render??!0,filter:e.filter??!0,blend:e.blend??!0,store:e.store??!0},i=Et(r),s=r.startsWith("depth")||r.startsWith("stencil"),n=i?.signed,a=i?.integer,o=i?.webgl;return t.render&&=!n,t.filter&&=!s&&!n&&!a&&!o,t}function Et(r){let e=yr(r);if(x.isCompressed(r)){e.channels="rgb",e.components=3,e.bytesPerPixel=1,e.srgb=!1,e.compressed=!0;let i=wr(r);i&&(e.blockWidth=i.blockWidth,e.blockHeight=i.blockHeight)}let t=dr.exec(r);if(t){let[,i,s,n,a,o]=t,f=`${n}${s}`,d=z(f),g=d.byteLength*8,N=i?.length??1,Gt=[g,N>=2?g:0,N>=3?g:0,N>=4?g:0];e={format:r,attachment:e.attachment,dataType:d.signedType,components:N,channels:i,integer:d.integer,signed:d.signed,normalized:d.normalized,bitsPerChannel:Gt,bytesPerPixel:d.byteLength*N,packed:e.packed,srgb:e.srgb},o==="-webgl"&&(e.webgl=!0),a==="-srgb"&&(e.srgb=!0)}return r.endsWith("-webgl")&&(e.webgl=!0),r.endsWith("-srgb")&&(e.srgb=!0),e}function yr(r){let e=V(r),t=e.bytesPerPixel||1,i=e.bitsPerChannel||[8,8,8,8];return delete e.bitsPerChannel,delete e.bytesPerPixel,delete e.f,delete e.render,delete e.filter,delete e.blend,delete e.store,{...e,format:r,attachment:e.attachment||"color",channels:e.channels||"r",components:e.components||e.channels?.length||1,bytesPerPixel:t,bitsPerChannel:i,dataType:e.dataType||"uint8",srgb:e.srgb??!1,packed:e.packed??!1,webgl:e.webgl??!1,integer:e.integer??!1,signed:e.signed??!1,normalized:e.normalized??!1,compressed:e.compressed??!1}}function wr(r){let t=/.*-(\d+)x(\d+)-.*/.exec(r);if(t){let[,i,s]=t;return{blockWidth:Number(i),blockHeight:Number(s)}}return null}function Te(r){return typeof ImageData<"u"&&r instanceof ImageData||typeof ImageBitmap<"u"&&r instanceof ImageBitmap||typeof HTMLImageElement<"u"&&r instanceof HTMLImageElement||typeof HTMLVideoElement<"u"&&r instanceof HTMLVideoElement||typeof VideoFrame<"u"&&r instanceof VideoFrame||typeof HTMLCanvasElement<"u"&&r instanceof HTMLCanvasElement||typeof OffscreenCanvas<"u"&&r instanceof OffscreenCanvas}function Se(r){if(typeof ImageData<"u"&&r instanceof ImageData||typeof ImageBitmap<"u"&&r instanceof ImageBitmap||typeof HTMLCanvasElement<"u"&&r instanceof HTMLCanvasElement||typeof OffscreenCanvas<"u"&&r instanceof OffscreenCanvas)return{width:r.width,height:r.height};if(typeof HTMLImageElement<"u"&&r instanceof HTMLImageElement)return{width:r.naturalWidth,height:r.naturalHeight};if(typeof HTMLVideoElement<"u"&&r instanceof HTMLVideoElement)return{width:r.videoWidth,height:r.videoHeight};if(typeof VideoFrame<"u"&&r instanceof VideoFrame)return{width:r.displayWidth,height:r.displayHeight};throw new Error("Unknown image type")}var Pe=class{},_e=class{features;disabledFeatures;constructor(e=[],t){this.features=new Set(e),this.disabledFeatures=t||{}}*[Symbol.iterator](){yield*this.features}has(e){return!this.disabledFeatures?.[e]&&this.features.has(e)}},qe=class{get[Symbol.toStringTag](){return"Device"}toString(){return`Device(${this.id})`}id;props;userData={};statsManager=fe;timestamp=0;_reused=!1;_moduleData={};_textureCaps={};constructor(e){this.props={...qe.defaultProps,...e},this.id=this.props.id||S(this[Symbol.toStringTag].toLowerCase())}getVertexFormatInfo(e){return E(e)}isVertexFormatSupported(e){return!0}getTextureFormatInfo(e){return x.getInfo(e)}getTextureFormatCapabilities(e){let t=this._textureCaps[e];if(!t){let i=this._getDeviceTextureFormatCapabilities(e);t=this._getDeviceSpecificTextureFormatCapabilities(i),this._textureCaps[e]=t}return t}getMipLevelCount(e,t,i=1){let s=Math.max(e,t,i);return 1+Math.floor(Math.log2(s))}isExternalImage(e){return Te(e)}getExternalImageSize(e){return Se(e)}isTextureFormatSupported(e){return this.getTextureFormatCapabilities(e).create}isTextureFormatFilterable(e){return this.getTextureFormatCapabilities(e).filter}isTextureFormatRenderable(e){return this.getTextureFormatCapabilities(e).render}isTextureFormatCompressed(e){return x.isCompressed(e)}pushDebugGroup(e){this.commandEncoder.pushDebugGroup(e)}popDebugGroup(){this.commandEncoder?.popDebugGroup()}insertDebugMarker(e){this.commandEncoder?.insertDebugMarker(e)}loseDevice(){return!1}incrementTimestamp(){return this.timestamp++}reportError(e,t,...i){return this.props.onError(e,t)?()=>{}:l.error(this.type==="webgl"?"%cWebGL":"%cWebGPU","color: white; background: red; padding: 2px 6px; border-radius: 3px;",e.message,t,...i)}debug(){if(this.props.debug)debugger;else{let e=`'Type luma.log.set({debug: true}) in console to enable debug breakpoints',
|
|
8
|
+
or create a device with the 'debug: true' prop.`;l.once(0,e)()}}getDefaultCanvasContext(){if(!this.canvasContext)throw new Error("Device has no default CanvasContext. See props.createCanvasContext");return this.canvasContext}createFence(){throw new Error("createFence() not implemented")}beginRenderPass(e){return this.commandEncoder.beginRenderPass(e)}beginComputePass(e){return this.commandEncoder.beginComputePass(e)}getCanvasContext(){return this.getDefaultCanvasContext()}readPixelsToArrayWebGL(e,t){throw new Error("not implemented")}readPixelsToBufferWebGL(e,t){throw new Error("not implemented")}setParametersWebGL(e){throw new Error("not implemented")}getParametersWebGL(e){throw new Error("not implemented")}withParametersWebGL(e,t){throw new Error("not implemented")}clearWebGL(e){throw new Error("not implemented")}resetWebGL(){throw new Error("not implemented")}getModuleData(e){return this._moduleData[e]||={},this._moduleData[e]}static _getCanvasContextProps(e){return e.createCanvasContext===!0?{}:e.createCanvasContext}_getDeviceTextureFormatCapabilities(e){let t=x.getCapabilities(e),i=n=>(typeof n=="string"?this.features.has(n):n)??!0,s=i(t.create);return{format:e,create:s,render:s&&i(t.render),filter:s&&i(t.filter),blend:s&&i(t.blend),store:s&&i(t.store)}}_normalizeBufferProps(e){(e instanceof ArrayBuffer||ArrayBuffer.isView(e))&&(e={data:e});let t={...e};if((e.usage||0)&m.INDEX&&(e.indexType||(e.data instanceof Uint32Array?t.indexType="uint32":e.data instanceof Uint16Array?t.indexType="uint16":e.data instanceof Uint8Array&&(t.data=new Uint16Array(e.data),t.indexType="uint16")),!t.indexType))throw new Error("indices buffer content must be of type uint16 or uint32");return t}},C=qe;u(C,"defaultProps",{id:null,powerPreference:"high-performance",failIfMajorPerformanceCaveat:!1,createCanvasContext:void 0,webgl:{},onError:(e,t)=>{},onResize:(e,t)=>{let[i,s]=e.getDevicePixelSize();l.log(1,`${e} resized => ${i}x${s}px`)()},onPositionChange:(e,t)=>{let[i,s]=e.getPosition();l.log(1,`${e} repositioned => ${i},${s}`)()},onVisibilityChange:e=>l.log(1,`${e} Visibility changed ${e.isVisible}`)(),onDevicePixelRatioChange:(e,t)=>l.log(1,`${e} DPR changed ${t.oldRatio} => ${e.devicePixelRatio}`)(),debug:l.get("debug")||void 0,debugShaders:l.get("debug-shaders")||void 0,debugFramebuffers:Boolean(l.get("debug-framebuffers")),debugFactories:Boolean(l.get("debug-factories")),debugWebGL:Boolean(l.get("debug-webgl")),debugSpectorJS:void 0,debugSpectorJSUrl:void 0,_reuseDevices:!1,_requestMaxLimits:!0,_cacheShaders:!1,_cachePipelines:!1,_cacheDestroyPolicy:"unused",_initializeFeatures:!0,_disabledFeatures:{"compilation-status-async-webgl":!0},_handle:void 0});var vr="set luma.log.level=1 (or higher) to trace rendering",Ct="No matching device found. Ensure `@luma.gl/webgl` and/or `@luma.gl/webgpu` modules are imported.",Ee=class{stats=fe;log=l;VERSION="9.3.0-alpha.4";spector;preregisteredAdapters=new Map;constructor(){if(globalThis.luma){if(globalThis.luma.VERSION!==this.VERSION)throw l.error(`Found luma.gl ${globalThis.luma.VERSION} while initialzing ${this.VERSION}`)(),l.error("'yarn why @luma.gl/core' can help identify the source of the conflict")(),new Error("luma.gl - multiple versions detected: see console log");l.error("This version of luma.gl has already been initialized")()}l.log(1,`${this.VERSION} - ${vr}`)(),globalThis.luma=this}async createDevice(e={}){let t={...Ee.defaultProps,...e},i=this.selectAdapter(t.type,t.adapters);if(!i)throw new Error(Ct);return t.waitForPageLoad&&await i.pageLoaded,await i.create(t)}async attachDevice(e,t){let i=this._getTypeFromHandle(e,t.adapters),s=i&&this.selectAdapter(i,t.adapters);if(!s)throw new Error(Ct);return await s?.attach?.(e,t)}registerAdapters(e){for(let t of e)this.preregisteredAdapters.set(t.type,t)}getSupportedAdapters(e=[]){let t=this._getAdapterMap(e);return Array.from(t).map(([,i])=>i).filter(i=>i.isSupported?.()).map(i=>i.type)}getBestAvailableAdapterType(e=[]){let t=["webgpu","webgl","null"],i=this._getAdapterMap(e);for(let s of t)if(i.get(s)?.isSupported?.())return s;return null}selectAdapter(e,t=[]){let i=e;e==="best-available"&&(i=this.getBestAvailableAdapterType(t));let s=this._getAdapterMap(t);return i&&s.get(i)||null}enforceWebGL2(e=!0,t=[]){let s=this._getAdapterMap(t).get("webgl");s||l.warn("enforceWebGL2: webgl adapter not found")(),s?.enforceWebGL2?.(e)}setDefaultDeviceProps(e){Object.assign(Ee.defaultProps,e)}_getAdapterMap(e=[]){let t=new Map(this.preregisteredAdapters);for(let i of e)t.set(i.type,i);return t}_getTypeFromHandle(e,t=[]){return e instanceof WebGL2RenderingContext?"webgl":typeof GPUDevice<"u"&&e instanceof GPUDevice||e?.queue?"webgpu":e===null?"null":(e instanceof WebGLRenderingContext?l.warn("WebGL1 is not supported",e)():l.warn("Unknown handle type",e)(),null)}},Ae=Ee;u(Ae,"defaultProps",{...C.defaultProps,type:"best-available",adapters:void 0,waitForPageLoad:!0});var It=new Ae;var Ie=class{get pageLoaded(){return Pr()}},Tr=y()&&typeof document<"u",Sr=()=>Tr&&document.readyState==="complete",Ce=null;function Pr(){return Ce||(Sr()||typeof window>"u"?Ce=Promise.resolve():Ce=new Promise(r=>window.addEventListener("load",()=>r()))),Ce}function Rt(){let r,e;return{promise:new Promise((i,s)=>{r=i,e=s}),resolve:r,reject:e}}function Re(r,e){if(!r){let t=new Error(e??"luma.gl assertion failed.");throw Error.captureStackTrace?.(t,Re),t}}function De(r,e){return Re(r,e),r}var $=class{static isHTMLCanvas(e){return typeof HTMLCanvasElement<"u"&&e instanceof HTMLCanvasElement}static isOffscreenCanvas(e){return typeof OffscreenCanvas<"u"&&e instanceof OffscreenCanvas}id;props;canvas;htmlCanvas;offscreenCanvas;type;initialized;isInitialized=!1;isVisible=!0;cssWidth;cssHeight;devicePixelRatio;devicePixelWidth;devicePixelHeight;drawingBufferWidth;drawingBufferHeight;_initializedResolvers=Rt();_resizeObserver;_intersectionObserver;_observeDevicePixelRatioTimeout=null;_position=[0,0];destroyed=!1;_needsDrawingBufferResize=!0;toString(){return`${this[Symbol.toStringTag]}(${this.id})`}constructor(e){if(this.props={...$.defaultProps,...e},e=this.props,this.initialized=this._initializedResolvers.promise,y()?e.canvas?typeof e.canvas=="string"?this.canvas=Ar(e.canvas):this.canvas=e.canvas:this.canvas=Er(e):this.canvas={width:e.width||1,height:e.height||1},$.isHTMLCanvas(this.canvas)?(this.id=e.id||this.canvas.id,this.type="html-canvas",this.htmlCanvas=this.canvas):$.isOffscreenCanvas(this.canvas)?(this.id=e.id||"offscreen-canvas",this.type="offscreen-canvas",this.offscreenCanvas=this.canvas):(this.id=e.id||"node-canvas-context",this.type="node"),this.cssWidth=this.htmlCanvas?.clientWidth||this.canvas.width,this.cssHeight=this.htmlCanvas?.clientHeight||this.canvas.height,this.devicePixelWidth=this.canvas.width,this.devicePixelHeight=this.canvas.height,this.drawingBufferWidth=this.canvas.width,this.drawingBufferHeight=this.canvas.height,this.devicePixelRatio=globalThis.devicePixelRatio||1,this._position=[0,0],$.isHTMLCanvas(this.canvas)){this._intersectionObserver=new IntersectionObserver(t=>this._handleIntersection(t)),this._intersectionObserver.observe(this.canvas),this._resizeObserver=new ResizeObserver(t=>this._handleResize(t));try{this._resizeObserver.observe(this.canvas,{box:"device-pixel-content-box"})}catch{this._resizeObserver.observe(this.canvas,{box:"content-box"})}this._observeDevicePixelRatioTimeout=setTimeout(()=>this._observeDevicePixelRatio(),0),this.props.trackPosition&&this._trackPosition()}}destroy(){this.destroyed||(this.destroyed=!0,this._observeDevicePixelRatioTimeout&&(clearTimeout(this._observeDevicePixelRatioTimeout),this._observeDevicePixelRatioTimeout=null),this.device=null,this._resizeObserver?.disconnect(),this._intersectionObserver?.disconnect())}setProps(e){return"useDevicePixels"in e&&(this.props.useDevicePixels=e.useDevicePixels||!1,this._updateDrawingBufferSize()),this}getCurrentFramebuffer(e){return this._resizeDrawingBufferIfNeeded(),this._getCurrentFramebuffer(e)}getCSSSize(){return[this.cssWidth,this.cssHeight]}getPosition(){return this._position}getDevicePixelSize(){return[this.devicePixelWidth,this.devicePixelHeight]}getDrawingBufferSize(){return[this.drawingBufferWidth,this.drawingBufferHeight]}getMaxDrawingBufferSize(){let e=this.device.limits.maxTextureDimension2D;return[e,e]}setDrawingBufferSize(e,t){e=Math.floor(e),t=Math.floor(t),!(this.drawingBufferWidth===e&&this.drawingBufferHeight===t)&&(this.drawingBufferWidth=e,this.drawingBufferHeight=t,this._needsDrawingBufferResize=!0)}getDevicePixelRatio(){return typeof window<"u"&&window.devicePixelRatio||1}cssToDevicePixels(e,t=!0){let i=this.cssToDeviceRatio(),[s,n]=this.getDrawingBufferSize();return Cr(e,i,s,n,t)}getPixelSize(){return this.getDevicePixelSize()}getAspect(){let[e,t]=this.getDevicePixelSize();return e/t}cssToDeviceRatio(){try{let[e]=this.getDrawingBufferSize(),[t]=this.getCSSSize();return t?e/t:1}catch{return 1}}resize(e){this.setDrawingBufferSize(e.width,e.height)}_setAutoCreatedCanvasId(e){this.htmlCanvas?.id==="lumagl-auto-created-canvas"&&(this.htmlCanvas.id=e)}_handleIntersection(e){if(this.destroyed)return;let t=e.find(s=>s.target===this.canvas);if(!t)return;let i=t.isIntersecting;this.isVisible!==i&&(this.isVisible=i,this.device.props.onVisibilityChange(this))}_handleResize(e){if(this.destroyed)return;let t=e.find(d=>d.target===this.canvas);if(!t)return;let i=De(t.contentBoxSize?.[0]);this.cssWidth=i.inlineSize,this.cssHeight=i.blockSize;let s=this.getDevicePixelSize(),n=t.devicePixelContentBoxSize?.[0]?.inlineSize||i.inlineSize*devicePixelRatio,a=t.devicePixelContentBoxSize?.[0]?.blockSize||i.blockSize*devicePixelRatio,[o,f]=this.getMaxDrawingBufferSize();this.devicePixelWidth=Math.max(1,Math.min(n,o)),this.devicePixelHeight=Math.max(1,Math.min(a,f)),this._updateDrawingBufferSize(),this.device.props.onResize(this,{oldPixelSize:s})}_updateDrawingBufferSize(){if(this.props.autoResize)if(typeof this.props.useDevicePixels=="number"){let e=this.props.useDevicePixels;this.setDrawingBufferSize(this.cssWidth*e,this.cssHeight*e)}else this.props.useDevicePixels?this.setDrawingBufferSize(this.devicePixelWidth,this.devicePixelHeight):this.setDrawingBufferSize(this.cssWidth,this.cssHeight);this._initializedResolvers.resolve(),this.isInitialized=!0,this.updatePosition()}_resizeDrawingBufferIfNeeded(){this._needsDrawingBufferResize&&(this._needsDrawingBufferResize=!1,(this.drawingBufferWidth!==this.canvas.width||this.drawingBufferHeight!==this.canvas.height)&&(this.canvas.width=this.drawingBufferWidth,this.canvas.height=this.drawingBufferHeight,this._configureDevice()))}_observeDevicePixelRatio(){if(this.destroyed)return;let e=this.devicePixelRatio;this.devicePixelRatio=window.devicePixelRatio,this.updatePosition(),this.device.props.onDevicePixelRatioChange?.(this,{oldRatio:e}),matchMedia(`(resolution: ${this.devicePixelRatio}dppx)`).addEventListener("change",()=>this._observeDevicePixelRatio(),{once:!0})}_trackPosition(e=100){let t=setInterval(()=>{this.destroyed?clearInterval(t):this.updatePosition()},e)}updatePosition(){if(this.destroyed)return;let e=this.htmlCanvas?.getBoundingClientRect();if(e){let t=[e.left,e.top];if(this._position??=t,t[0]!==this._position[0]||t[1]!==this._position[1]){let s=this._position;this._position=t,this.device.props.onPositionChange?.(this,{oldPosition:s})}}}},F=$;u(F,"defaultProps",{id:void 0,canvas:null,width:800,height:600,useDevicePixels:!0,autoResize:!0,container:null,visible:!0,alphaMode:"opaque",colorSpace:"srgb",trackPosition:!1});function _r(r){if(typeof r=="string"){let e=document.getElementById(r);if(!e)throw new Error(`${r} is not an HTML element`);return e}return r||document.body}function Ar(r){let e=document.getElementById(r);if(!F.isHTMLCanvas(e))throw new Error("Object is not a canvas element");return e}function Er(r){let{width:e,height:t}=r,i=document.createElement("canvas");i.id=S("lumagl-auto-created-canvas"),i.width=e||1,i.height=t||1,i.style.width=Number.isFinite(e)?`${e}px`:"100%",i.style.height=Number.isFinite(t)?`${t}px`:"100%",r?.visible||(i.style.visibility="hidden");let s=_r(r?.container||null);return s.insertBefore(i,s.firstChild),i}function Cr(r,e,t,i,s){let n=r,a=Dt(n[0],e,t),o=Lt(n[1],e,i,s),f=Dt(n[0]+1,e,t),d=f===t-1?f:f-1;f=Lt(n[1]+1,e,i,s);let g;return s?(f=f===0?f:f+1,g=o,o=f):g=f===i-1?f:f-1,{x:a,y:o,width:Math.max(d-a+1,1),height:Math.max(g-o+1,1)}}function Dt(r,e,t){return Math.min(Math.round(r*e),t-1)}function Lt(r,e,t,i){return i?Math.max(0,t-1-Math.round(r*e)):Math.min(Math.round(r*e),t-1)}var Le=class extends c{get[Symbol.toStringTag](){return"Sampler"}constructor(e,t){t=Le.normalizeProps(e,t),super(e,t,Le.defaultProps)}static normalizeProps(e,t){return t}},I=Le;u(I,"defaultProps",{...c.defaultProps,type:"color-sampler",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",addressModeW:"clamp-to-edge",magFilter:"nearest",minFilter:"nearest",mipmapFilter:"none",lodMinClamp:0,lodMaxClamp:32,compare:"less-equal",maxAnisotropy:1});var Ir={"1d":"1d","2d":"2d","2d-array":"2d",cube:"2d","cube-array":"2d","3d":"3d"},w=class extends c{dimension;baseDimension;format;width;height;depth;mipLevels;byteAlignment;ready=Promise.resolve(this);isReady=!0;updateTimestamp;get[Symbol.toStringTag](){return"Texture"}toString(){return`Texture(${this.id},${this.format},${this.width}x${this.height})`}constructor(e,t,i){if(t=w.normalizeProps(e,t),super(e,t,w.defaultProps),this.dimension=this.props.dimension,this.baseDimension=Ir[this.dimension],this.format=this.props.format,this.width=this.props.width,this.height=this.props.height,this.depth=this.props.depth,this.mipLevels=this.props.mipLevels,this.dimension==="cube"&&(this.depth=6),this.props.width===void 0||this.props.height===void 0)if(e.isExternalImage(t.data)){let s=e.getExternalImageSize(t.data);this.width=s?.width||1,this.height=s?.height||1}else this.width=1,this.height=1,(this.props.width===void 0||this.props.height===void 0)&&l.warn(`${this} created with undefined width or height. This is deprecated. Use DynamicTexture instead.`)();this.byteAlignment=i?.byteAlignment||1,this.updateTimestamp=e.incrementTimestamp()}clone(e){return this.device.createTexture({...this.props,...e})}setSampler(e){this.sampler=e instanceof I?e:this.device.createSampler(e)}computeMemoryLayout(e={}){let t=this._normalizeTextureReadOptions(e),{width:i=this.width,height:s=this.height,depthOrArrayLayers:n=this.depth}=t,{format:a,byteAlignment:o}=this;return x.computeMemoryLayout({format:a,width:i,height:s,depth:n,byteAlignment:o})}readBuffer(e,t){throw new Error("readBuffer not implemented")}readDataAsync(e){throw new Error("readBuffer not implemented")}writeBuffer(e,t){throw new Error("readBuffer not implemented")}writeData(e,t){throw new Error("readBuffer not implemented")}readDataSyncWebGL(e){throw new Error("readDataSyncWebGL not available")}generateMipmapsWebGL(){throw new Error("generateMipmapsWebGL not available")}static normalizeProps(e,t){let i={...t},{width:s,height:n}=i;return typeof s=="number"&&(i.width=Math.max(1,Math.ceil(s))),typeof n=="number"&&(i.height=Math.max(1,Math.ceil(n))),i}_initializeData(e){this.device.isExternalImage(e)?this.copyExternalImage({image:e,width:this.width,height:this.height,depth:this.depth,mipLevel:0,x:0,y:0,z:0,aspect:"all",colorSpace:"srgb",premultipliedAlpha:!1,flipY:!1}):e&&this.copyImageData({data:e,mipLevel:0,x:0,y:0,z:0,aspect:"all"})}_normalizeCopyImageDataOptions(e){let{width:t,height:i,depth:s}=this,n={...w.defaultCopyDataOptions,width:t,height:i,depth:s,...e},a=this.device.getTextureFormatInfo(this.format);if(!e.bytesPerRow&&!a.bytesPerPixel)throw new Error(`bytesPerRow must be provided for texture format ${this.format}`);return n.bytesPerRow=e.bytesPerRow||t*(a.bytesPerPixel||4),n.rowsPerImage=e.rowsPerImage||i,n}_normalizeCopyExternalImageOptions(e){let t=this.device.getExternalImageSize(e.image),i={...w.defaultCopyExternalImageOptions,...t,...e};return i.width=Math.min(i.width,this.width-i.x),i.height=Math.min(i.height,this.height-i.y),i}_normalizeTextureReadOptions(e){let{width:t,height:i}=this,s={...w.defaultTextureReadOptions,width:t,height:i,...e};return s.width=Math.min(s.width,this.width-s.x),s.height=Math.min(s.height,this.height-s.y),s}_normalizeTextureWriteOptions(e){let{width:t,height:i}=this,s={...w.defaultTextureReadOptions,width:t,height:i,...e};return s.width=Math.min(s.width,this.width-s.x),s.height=Math.min(s.height,this.height-s.y),s}},p=w;u(p,"SAMPLE",4),u(p,"STORAGE",8),u(p,"RENDER",16),u(p,"COPY_SRC",1),u(p,"COPY_DST",2),u(p,"TEXTURE",4),u(p,"RENDER_ATTACHMENT",16),u(p,"defaultProps",{...c.defaultProps,data:null,dimension:"2d",format:"rgba8unorm",usage:w.SAMPLE|w.RENDER|w.COPY_DST,width:void 0,height:void 0,depth:1,mipLevels:1,samples:void 0,sampler:{},view:void 0}),u(p,"defaultCopyDataOptions",{data:void 0,byteOffset:0,bytesPerRow:void 0,rowsPerImage:void 0,mipLevel:0,x:0,y:0,z:0,aspect:"all"}),u(p,"defaultCopyExternalImageOptions",{image:void 0,sourceX:0,sourceY:0,width:void 0,height:void 0,depth:1,mipLevel:0,x:0,y:0,z:0,aspect:"all",colorSpace:"srgb",premultipliedAlpha:!1,flipY:!1}),u(p,"defaultTextureReadOptions",{x:0,y:0,z:0,width:void 0,height:void 0,depthOrArrayLayers:1,mipLevel:0,aspect:"all"});var Ke=class extends c{get[Symbol.toStringTag](){return"TextureView"}constructor(e,t){super(e,t,Ke.defaultProps)}},Y=Ke;u(Y,"defaultProps",{...c.defaultProps,format:void 0,dimension:void 0,aspect:"all",baseMipLevel:0,mipLevelCount:void 0,baseArrayLayer:0,arrayLayerCount:void 0});var Je=class extends c{get[Symbol.toStringTag](){return"ExternalTexture"}constructor(e,t){super(e,t,Je.defaultProps)}},X=Je;u(X,"defaultProps",{...c.defaultProps,source:void 0,colorSpace:"srgb"});function Bt(r,e,t){let i="",s=e.split(/\r?\n/),n=r.slice().sort((a,o)=>a.lineNum-o.lineNum);switch(t?.showSourceCode||"no"){case"all":let a=0;for(let o=1;o<=s.length;o++){let f=s[o-1],d=n[a];for(f&&d&&(i+=Mt(f,o,t));n.length>a&&d.lineNum===o;){let g=n[a++];g&&(i+=Qe(g,s,g.lineNum,{...t,inlineSource:!1}))}}for(;n.length>a;){let o=n[a++];o&&(i+=Qe(o,[],0,{...t,inlineSource:!1}))}return i;case"issues":case"no":for(let o of r)i+=Qe(o,s,o.lineNum,{inlineSource:t?.showSourceCode!=="no"});return i}}function Qe(r,e,t,i){if(i?.inlineSource){let n=Rr(e,t),a=r.linePos>0?`${" ".repeat(r.linePos+5)}^^^
|
|
9
9
|
`:"";return`
|
|
10
|
-
${
|
|
10
|
+
${n}${a}${r.type.toUpperCase()}: ${r.message}
|
|
11
11
|
|
|
12
|
-
`}let
|
|
13
|
-
`}`}function
|
|
14
|
-
<
|
|
15
|
-
<
|
|
16
|
-
|
|
17
|
-
</pre></code>`,o.style.top="10px",o.style.left="10px",o.style.position="absolute",o.style.zIndex="9999",o.style.width="100%",o.style.textAlign="left",document.body.appendChild(o),document.getElementsByClassName("luma-compiler-log-error")[0]?.scrollIntoView(),o.onclick=()=>{let d=`data:text/plain,${encodeURIComponent(this.source)}`;navigator.clipboard.writeText(d)}}},X=Xe;c(X,"defaultProps",{...u.defaultProps,language:"auto",stage:void 0,source:"",sourceMap:null,entryPoint:"main",debugShaders:void 0});function Dr(r){return Br(r.source)||r.id||S(`unnamed ${r.stage}-shader`)}function Br(r,e="unnamed"){let i=/#define[\s*]SHADER_NAME[\s*]([A-Za-z0-9_-]+)[\s*]/.exec(r);return i?i[1]:e}var qe=class extends u{get[Symbol.toStringTag](){return"Framebuffer"}width;height;constructor(e,t={}){super(e,t,qe.defaultProps),this.width=this.props.width,this.height=this.props.height}clone(e){let t=this.colorAttachments.map(n=>n.texture.clone(e)),i=this.depthStencilAttachment&&this.depthStencilAttachment.texture.clone(e);return this.device.createFramebuffer({...this.props,...e,colorAttachments:t,depthStencilAttachment:i})}resize(e){let t=!e;if(e){let[i,n]=Array.isArray(e)?e:[e.width,e.height];t=t||n!==this.height||i!==this.width,this.width=i,this.height=n}t&&(l.log(2,`Resizing framebuffer ${this.id} to ${this.width}x${this.height}`)(),this.resizeAttachments(this.width,this.height))}autoCreateAttachmentTextures(){if(this.props.colorAttachments.length===0&&!this.props.depthStencilAttachment)throw new Error("Framebuffer has noattachments");this.colorAttachments=this.props.colorAttachments.map((t,i)=>{if(typeof t=="string"){let n=this.createColorTexture(t,i);return this.attachResource(n),n.view}return t instanceof p?t.view:t});let e=this.props.depthStencilAttachment;if(e)if(typeof e=="string"){let t=this.createDepthStencilTexture(e);this.attachResource(t),this.depthStencilAttachment=t.view}else e instanceof p?this.depthStencilAttachment=e.view:this.depthStencilAttachment=e}createColorTexture(e,t){return this.device.createTexture({id:`${this.id}-color-attachment-${t}`,usage:p.RENDER_ATTACHMENT,format:e,width:this.width,height:this.height,sampler:{magFilter:"linear",minFilter:"linear"}})}createDepthStencilTexture(e){return this.device.createTexture({id:`${this.id}-depth-stencil-attachment`,usage:p.RENDER_ATTACHMENT,format:e,width:this.width,height:this.height})}resizeAttachments(e,t){for(let i=0;i<this.colorAttachments.length;++i)if(this.colorAttachments[i]){let n=this.colorAttachments[i].texture.clone({width:e,height:t});this.destroyAttachedResource(this.colorAttachments[i]),this.colorAttachments[i]=n.view,this.attachResource(n.view)}if(this.depthStencilAttachment){let i=this.depthStencilAttachment.texture.clone({width:e,height:t});this.destroyAttachedResource(this.depthStencilAttachment),this.depthStencilAttachment=i.view,this.attachResource(i)}this.updateAttachments()}},q=qe;c(q,"defaultProps",{...u.defaultProps,width:1,height:1,colorAttachments:[],depthStencilAttachment:null});var Ke=class extends u{get[Symbol.toStringTag](){return"RenderPipeline"}shaderLayout;bufferLayout;linkStatus="pending";hash="";constructor(e,t){super(e,t,Ke.defaultProps),this.shaderLayout=this.props.shaderLayout,this.bufferLayout=this.props.bufferLayout||[]}},K=Ke;c(K,"defaultProps",{...u.defaultProps,vs:null,vertexEntryPoint:"vertexMain",vsConstants:{},fs:null,fragmentEntryPoint:"fragmentMain",fsConstants:{},shaderLayout:null,bufferLayout:[],topology:"triangle-list",colorAttachmentFormats:void 0,depthStencilAttachmentFormat:void 0,parameters:{},bindings:{},uniforms:{}});var R=class extends u{get[Symbol.toStringTag](){return"RenderPass"}constructor(e,t){t=R.normalizeProps(e,t),super(e,t,R.defaultProps)}static normalizeProps(e,t){return t}},P=R;c(P,"defaultClearColor",[0,0,0,1]),c(P,"defaultClearDepth",1),c(P,"defaultClearStencil",0),c(P,"defaultProps",{...u.defaultProps,framebuffer:null,parameters:void 0,clearColor:R.defaultClearColor,clearColors:void 0,clearDepth:R.defaultClearDepth,clearStencil:R.defaultClearStencil,depthReadOnly:!1,stencilReadOnly:!1,discard:!1,occlusionQuerySet:void 0,timestampQuerySet:void 0,beginTimestampIndex:void 0,endTimestampIndex:void 0});var Je=class extends u{get[Symbol.toStringTag](){return"ComputePipeline"}hash="";shaderLayout;constructor(e,t){super(e,t,Je.defaultProps),this.shaderLayout=t.shaderLayout}},J=Je;c(J,"defaultProps",{...u.defaultProps,shader:void 0,entryPoint:void 0,constants:{},shaderLayout:void 0});var Qe=class extends u{constructor(e,t){super(e,t,Qe.defaultProps)}get[Symbol.toStringTag](){return"ComputePass"}},Q=Qe;c(Q,"defaultProps",{...u.defaultProps,timestampQuerySet:void 0,beginTimestampIndex:void 0,endTimestampIndex:void 0});var Ze=class extends u{get[Symbol.toStringTag](){return"CommandEncoder"}constructor(e,t){super(e,t,Ze.defaultProps)}},Z=Ze;c(Z,"defaultProps",{...u.defaultProps,measureExecutionTime:void 0});var et=class extends u{get[Symbol.toStringTag](){return"CommandBuffer"}constructor(e,t){super(e,t,et.defaultProps)}},ee=et;c(ee,"defaultProps",{...u.defaultProps});function Re(r){return zr[r]}function Le(r){let[e,t]=Fr[r],i=e==="i32"||e==="u32",n=e!=="u32",s=Mr[e]*t;return{primitiveType:e,components:t,byteLength:s,integer:i,signed:n}}var Mr={f32:4,f16:2,i32:4,u32:4},Fr={f32:["f32",1],"vec2<f32>":["f32",2],"vec3<f32>":["f32",3],"vec4<f32>":["f32",4],f16:["f16",1],"vec2<f16>":["f16",2],"vec3<f16>":["f16",3],"vec4<f16>":["f16",4],i32:["i32",1],"vec2<i32>":["i32",2],"vec3<i32>":["i32",3],"vec4<i32>":["i32",4],u32:["u32",1],"vec2<u32>":["u32",2],"vec3<u32>":["u32",3],"vec4<u32>":["u32",4]},zr={f32:{type:"f32",components:1},f16:{type:"f16",components:1},i32:{type:"i32",components:1},u32:{type:"u32",components:1},"vec2<f32>":{type:"f32",components:2},"vec3<f32>":{type:"f32",components:3},"vec4<f32>":{type:"f32",components:4},"vec2<f16>":{type:"f16",components:2},"vec3<f16>":{type:"f16",components:3},"vec4<f16>":{type:"f16",components:4},"vec2<i32>":{type:"i32",components:2},"vec3<i32>":{type:"i32",components:3},"vec4<i32>":{type:"i32",components:4},"vec2<u32>":{type:"u32",components:2},"vec3<u32>":{type:"u32",components:3},"vec4<u32>":{type:"u32",components:4},"mat2x2<f32>":{type:"f32",components:4},"mat2x3<f32>":{type:"f32",components:6},"mat2x4<f32>":{type:"f32",components:8},"mat3x2<f32>":{type:"f32",components:6},"mat3x3<f32>":{type:"f32",components:9},"mat3x4<f32>":{type:"f32",components:12},"mat4x2<f32>":{type:"f32",components:8},"mat4x3<f32>":{type:"f32",components:12},"mat4x4<f32>":{type:"f32",components:16},"mat2x2<f16>":{type:"f16",components:4},"mat2x3<f16>":{type:"f16",components:6},"mat2x4<f16>":{type:"f16",components:8},"mat3x2<f16>":{type:"f16",components:6},"mat3x3<f16>":{type:"f16",components:9},"mat3x4<f16>":{type:"f16",components:12},"mat4x2<f16>":{type:"f16",components:8},"mat4x3<f16>":{type:"f16",components:12},"mat4x4<f16>":{type:"f16",components:16},"mat2x2<i32>":{type:"i32",components:4},"mat2x3<i32>":{type:"i32",components:6},"mat2x4<i32>":{type:"i32",components:8},"mat3x2<i32>":{type:"i32",components:6},"mat3x3<i32>":{type:"i32",components:9},"mat3x4<i32>":{type:"i32",components:12},"mat4x2<i32>":{type:"i32",components:8},"mat4x3<i32>":{type:"i32",components:12},"mat4x4<i32>":{type:"i32",components:16},"mat2x2<u32>":{type:"u32",components:4},"mat2x3<u32>":{type:"u32",components:6},"mat2x4<u32>":{type:"u32",components:8},"mat3x2<u32>":{type:"u32",components:6},"mat3x3<u32>":{type:"u32",components:9},"mat3x4<u32>":{type:"u32",components:12},"mat4x2<u32>":{type:"u32",components:8},"mat4x3<u32>":{type:"u32",components:12},"mat4x4<u32>":{type:"u32",components:16}},$r={vec2i:"vec2<i32>",vec3i:"vec3<i32>",vec4i:"vec4<i32>",vec2u:"vec2<u32>",vec3u:"vec3<u32>",vec4u:"vec4<u32>",vec2f:"vec2<f32>",vec3f:"vec3<f32>",vec4f:"vec4<f32>",vec2h:"vec2<f16>",vec3h:"vec3<f16>",vec4h:"vec4<f16>"},ls={...$r,mat2x2f:"mat2x2<f32>",mat2x3f:"mat2x3<f32>",mat2x4f:"mat2x4<f32>",mat3x2f:"mat3x2<f32>",mat3x3f:"mat3x3<f32>",mat3x4f:"mat3x4<f32>",mat4x2f:"mat4x2<f32>",mat4x3f:"mat4x3<f32>",mat4x4f:"mat4x4<f32>",mat2x2i:"mat2x2<i32>",mat2x3i:"mat2x3<i32>",mat2x4i:"mat2x4<i32>",mat3x2i:"mat3x2<i32>",mat3x3i:"mat3x3<i32>",mat3x4i:"mat3x4<i32>",mat4x2i:"mat4x2<i32>",mat4x3i:"mat4x3<i32>",mat4x4i:"mat4x4<i32>",mat2x2u:"mat2x2<u32>",mat2x3u:"mat2x3<u32>",mat2x4u:"mat2x4<u32>",mat3x2u:"mat3x2<u32>",mat3x3u:"mat3x3<u32>",mat3x4u:"mat3x4<u32>",mat4x2u:"mat4x2<u32>",mat4x3u:"mat4x3<u32>",mat4x4u:"mat4x4<u32>",mat2x2h:"mat2x2<f16>",mat2x3h:"mat2x3<f16>",mat2x4h:"mat2x4<f16>",mat3x2h:"mat3x2<f16>",mat3x3h:"mat3x3<f16>",mat3x4h:"mat3x4<f16>",mat4x2h:"mat4x2<f16>",mat4x3h:"mat4x3<f16>",mat4x4h:"mat4x4<f16>"};function tt(r,e){let t={};for(let i of r.attributes){let n=Ur(r,e,i.name);n&&(t[i.name]=n)}return t}function Bt(r,e,t=16){let i=tt(r,e),n=new Array(t).fill(null);for(let s of Object.values(i))n[s.location]=s;return n}function Ur(r,e,t){let i=Hr(r,t),n=Nr(e,t);if(!i)return null;let s=Le(i.type),a=Tt(s),o=n?.vertexFormat||a,f=_(o);return{attributeName:n?.attributeName||i.name,bufferName:n?.bufferName||i.name,location:i.location,shaderType:i.type,primitiveType:s.primitiveType,shaderComponents:s.components,vertexFormat:o,bufferDataType:f.type,bufferComponents:f.components,normalized:f.normalized,integer:s.integer,stepMode:n?.stepMode||i.stepMode||"vertex",byteOffset:n?.byteOffset||0,byteStride:n?.byteStride||0}}function Hr(r,e){let t=r.attributes.find(i=>i.name===e);return t||l.warn(`shader layout attribute "${e}" not present in shader`),t||null}function Nr(r,e){kr(r);let t=Wr(r,e);return t||(t=Gr(r,e),t)?t:(l.warn(`layout for attribute "${e}" not present in buffer layout`),null)}function kr(r){for(let e of r)(e.attributes&&e.format||!e.attributes&&!e.format)&&l.warn(`BufferLayout ${name} must have either 'attributes' or 'format' field`)}function Wr(r,e){for(let t of r)if(t.format&&t.name===e)return{attributeName:t.name,bufferName:e,stepMode:t.stepMode,vertexFormat:t.format,byteOffset:0,byteStride:t.byteStride||0};return null}function Gr(r,e){for(let t of r){let i=t.byteStride;if(typeof t.byteStride!="number")for(let s of t.attributes||[]){let a=_(s.format);i+=a.byteLength}let n=t.attributes?.find(s=>s.attribute===e);if(n)return{attributeName:n.attribute,bufferName:t.name,stepMode:t.stepMode,vertexFormat:n.format,byteOffset:n.byteOffset,byteStride:i}}return null}var rt=class extends u{get[Symbol.toStringTag](){return"VertexArray"}maxVertexAttributes;attributeInfos;indexBuffer=null;attributes;constructor(e,t){super(e,t,rt.defaultProps),this.maxVertexAttributes=e.limits.maxVertexAttributes,this.attributes=new Array(this.maxVertexAttributes).fill(null),this.attributeInfos=Bt(t.shaderLayout,t.bufferLayout,this.maxVertexAttributes)}setConstantWebGL(e,t){this.device.reportError(new Error("constant attributes not supported"),this)()}},te=rt;c(te,"defaultProps",{...u.defaultProps,shaderLayout:void 0,bufferLayout:[]});var it=class extends u{get[Symbol.toStringTag](){return"TransformFeedback"}constructor(e,t){super(e,t,it.defaultProps)}},re=it;c(re,"defaultProps",{...u.defaultProps,layout:void 0,buffers:{}});var nt=class extends u{get[Symbol.toStringTag](){return"QuerySet"}constructor(e,t){super(e,t,nt.defaultProps)}},ie=nt;c(ie,"defaultProps",{...u.defaultProps,type:void 0,count:void 0});var st=class extends u{[Symbol.toStringTag]="WEBGLFence";constructor(e,t={}){super(e,t,st.defaultProps)}},ne=st;c(ne,"defaultProps",{...u.defaultProps});var ot=class extends u{get[Symbol.toStringTag](){return"PipelineLayout"}constructor(e,t){super(e,t,ot.defaultProps)}},se=ot;c(se,"defaultProps",{...u.defaultProps,shaderLayout:{attributes:[],bindings:[]}});var De;function at(r){return(!De||De.byteLength<r)&&(De=new ArrayBuffer(r)),De}function Mt(r,e){let t=at(r.BYTES_PER_ELEMENT*e);return new r(t,0,e)}var Or=1024,$=class{layout={};byteLength;constructor(e,t={}){let i=0;for(let[n,s]of Object.entries(e))i=this._addToLayout(n,s,i,t?.[n]);i+=(4-i%4)%4,this.byteLength=Math.max(i*4,Or)}has(e){return Boolean(this.layout[e])}get(e){return this.layout[e]}getData(e){let t=at(this.byteLength),i={i32:new Int32Array(t),u32:new Uint32Array(t),f32:new Float32Array(t),f16:new Uint16Array(t)};for(let[n,s]of Object.entries(e))this._writeCompositeValue(i,n,s);return new Uint8Array(t,0,this.byteLength)}_addToLayout(e,t,i,n=1){if(typeof t=="string"){let s=Re(t),a=s.components*n,o=ge(i,s.components);return this.layout[e]={offset:o,size:a,type:s.type},o+a}if(Array.isArray(t)){let s=t[0],a=n>1?n:t.length>1?t[1]:1,o=ge(i,4);for(let f=0;f<a;f++)o=this._addToLayout(`${e}[${f}]`,s,o);return o}if(typeof t=="object"){let s=ge(i,4);for(let[a,o]of Object.entries(t))s=this._addToLayout(`${e}.${a}`,o,s);return s}throw new Error(`Unsupported CompositeShaderType for ${e}`)}_writeCompositeValue(e,t,i){if(this.layout[t]){this._writeToBuffer(e,t,i);return}if(Array.isArray(i)){for(let n=0;n<i.length;n++){let s=i[n],a=`${t}[${n}]`;this._writeCompositeValue(e,a,s)}return}if(typeof i=="object"&&i!==null){for(let[n,s]of Object.entries(i)){let a=`${t}.${n}`;this._writeCompositeValue(e,a,s)}return}l.warn(`Unsupported uniform value for ${t}:`,i)()}_writeToBuffer(e,t,i){let n=this.layout[t];if(!n){l.warn(`Uniform ${t} not found in layout`)();return}let{type:s,size:a,offset:o}=n,f=e[s];a===1?f[o]=Number(i):f.set(i,o)}};function Vr(r){return ArrayBuffer.isView(r)&&!(r instanceof DataView)}function Be(r){return Array.isArray(r)?r.length===0||typeof r[0]=="number":Vr(r)}function Ft(r,e,t=16){if(r!==e)return!1;let i=r,n=e;if(!Be(i))return!1;if(Be(n)&&i.length===n.length){for(let s=0;s<i.length;++s)if(n[s]!==i[s])return!1}return!0}function zt(r){return Be(r)?r.slice():r}var U=class{name;uniforms={};modifiedUniforms={};modified=!0;bindingLayout={};needsRedraw="initialized";constructor(e){if(this.name=e?.name||"unnamed",e?.name&&e?.shaderLayout){let t=e?.shaderLayout.bindings?.find(n=>n.type==="uniform"&&n.name===e?.name);if(!t)throw new Error(e?.name);let i=t;for(let n of i.uniforms||[])this.bindingLayout[n.name]=n}}setUniforms(e){for(let[t,i]of Object.entries(e))this._setUniform(t,i),this.needsRedraw||this.setNeedsRedraw(`${this.name}.${t}=${i}`)}setNeedsRedraw(e){this.needsRedraw=this.needsRedraw||e}getAllUniforms(){return this.modifiedUniforms={},this.needsRedraw=!1,this.uniforms||{}}_setUniform(e,t){Ft(this.uniforms[e],t)||(this.uniforms[e]=zt(t),this.modifiedUniforms[e]=!0,this.modified=!0)}};var Me=class{uniformBlocks=new Map;uniformBufferLayouts=new Map;uniformBuffers=new Map;constructor(e){for(let[t,i]of Object.entries(e)){let n=t,s=new $(i.uniformTypes??{},i.uniformSizes??{});this.uniformBufferLayouts.set(n,s);let a=new U({name:t});a.setUniforms(i.defaultUniforms||{}),this.uniformBlocks.set(n,a)}}destroy(){for(let e of this.uniformBuffers.values())e.destroy()}setUniforms(e){for(let[t,i]of Object.entries(e))this.uniformBlocks.get(t)?.setUniforms(i);this.updateUniformBuffers()}getUniformBufferByteLength(e){return this.uniformBufferLayouts.get(e)?.byteLength||0}getUniformBufferData(e){let t=this.uniformBlocks.get(e)?.getAllUniforms()||{};return this.uniformBufferLayouts.get(e)?.getData(t)}createUniformBuffer(e,t,i){i&&this.setUniforms(i);let n=this.getUniformBufferByteLength(t),s=e.createBuffer({usage:h.UNIFORM|h.COPY_DST,byteLength:n}),a=this.getUniformBufferData(t);return s.write(a),s}getManagedUniformBuffer(e,t){if(!this.uniformBuffers.get(t)){let i=this.getUniformBufferByteLength(t),n=e.createBuffer({usage:h.UNIFORM|h.COPY_DST,byteLength:i});this.uniformBuffers.set(t,n)}return this.uniformBuffers.get(t)}updateUniformBuffers(){let e=!1;for(let t of this.uniformBlocks.keys()){let i=this.updateUniformBuffer(t);e||=i}return e&&l.log(3,`UniformStore.updateUniformBuffers(): ${e}`)(),e}updateUniformBuffer(e){let t=this.uniformBlocks.get(e),i=this.uniformBuffers.get(e),n=!1;if(i&&t?.needsRedraw){n||=t.needsRedraw;let s=this.getUniformBufferData(e);i=this.uniformBuffers.get(e),i?.write(s);let a=this.uniformBlocks.get(e)?.getAllUniforms();l.log(4,`Writing to uniform buffer ${String(e)}`,s,a)()}return n}};function ct(r,e,t,i=0){let n=x.getInfo(t),s=n.bytesPerPixel/n.components,{bytesPerImage:a}=e,o=a*i,f=e.bytesPerImage/s;switch(t){case"rgba8unorm":case"bgra8unorm":case"rgba8uint":return new Uint8Array(r,o,f);case"r8unorm":return new Uint8Array(r,o,f);case"r16uint":case"rgba16uint":return new Uint16Array(r,o,f);case"r32uint":case"rgba32uint":return new Uint32Array(r,o,f);case"r32float":return new Float32Array(r,o,f);case"rgba16float":return new Uint16Array(r,o,f);case"rgba32float":return new Float32Array(r,o,f);default:throw new Error(`Unsupported format: ${t}`)}}function $t(r,e,t,i,n=0){let a=e.bytesPerImage/e.bytesPerPixel,o=i.subarray(0,a);ct(r,e,t,n).set(o,0)}function Ut(r,e,t,i){if(e<0||e>=r.width||t<0||t>=r.height)throw new Error("Coordinates out of bounds.");let n=t*r.bytesPerRow+e*r.bytesPerPixel,s=new DataView(r.arrayBuffer,n,r.bytesPerPixel),a=0,o=[];for(let f=0;f<4;f++){let d=i[f];if(d<=0)o.push(0);else{let b=jr(s,a,d);o.push(b),a+=d}}return[o[0],o[1],o[2],o[3]]}function Ht(r,e,t,i){let n=e;for(let s=0;s<4;s++){let a=t[s],o=(1<<a)-1,f=i[s]&o;Yr(r,n,a,f),n+=a}}function jr(r,e,t){if(e%8===0){let n=e/8;if(t===8&&n+1<=r.byteLength)return r.getUint8(n);if(t===16&&n+2<=r.byteLength)return r.getUint16(n,!1);if(t===32&&n+4<=r.byteLength)return r.getUint32(n,!1)}let i=0;for(let n=0;n<t;n++){let s=e+n,a=Math.floor(s/8),o=s%8,d=r.getUint8(a)>>7-o&1;i=i<<1|d}return i}function Yr(r,e,t,i){if(e%8===0){let n=e/8;if(t===8&&n+1<=r.byteLength){r.setUint8(n,i&255);return}else if(t===16&&n+2<=r.byteLength){r.setUint16(n,i&65535,!1);return}else if(t===32&&n+4<=r.byteLength){r.setUint32(n,i,!1);return}}for(let n=0;n<t;n++){let s=e+n,a=Math.floor(s/8),f=1<<7-s%8,d=i>>t-1-n&1,b=r.getUint8(a);b&=~f,d&&(b|=f),r.setUint8(a,b)}}ue(oe,Jt(kt(),1));return Qt(oe);})();
|
|
12
|
+
`}let s=r.type==="error"?"red":"orange";return i?.html?`<div class='luma-compiler-log-${r.type}' style="color:${s};"><b> ${r.type.toUpperCase()}: ${r.message}</b></div>`:`${r.type.toUpperCase()}: ${r.message}`}function Rr(r,e,t){let i="";for(let s=e-2;s<=e;s++){let n=r[s-1];n!==void 0&&(i+=Mt(n,e,t))}return i}function Mt(r,e,t){let i=t?.html?Lr(r):r;return`${Dr(String(e),4)}: ${i}${t?.html?"<br/>":`
|
|
13
|
+
`}`}function Dr(r,e){let t="";for(let i=r.length;i<e;++i)t+=" ";return t+r}function Lr(r){return r.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}var Ze=class extends c{get[Symbol.toStringTag](){return"Shader"}stage;source;compilationStatus="pending";constructor(e,t){t={...t,debugShaders:t.debugShaders||e.props.debugShaders||"errors"},super(e,{id:Br(t),...t},Ze.defaultProps),this.stage=this.props.stage,this.source=this.props.source}getCompilationInfoSync(){return null}getTranslatedSource(){return null}async debugShader(){let e=this.props.debugShaders;switch(e){case"never":return;case"errors":if(this.compilationStatus==="success")return;break;case"warnings":case"always":break}let t=await this.getCompilationInfo();e==="warnings"&&t?.length===0||this._displayShaderLog(t,this.id)}_displayShaderLog(e,t){if(typeof document>"u"||!document?.createElement)return;let i=t,s=`${this.stage} shader "${i}"`,n=Bt(e,this.source,{showSourceCode:"all",html:!0}),a=this.getTranslatedSource(),o=document.createElement("div");o.innerHTML=`<h1>Compilation error in ${s}</h1>
|
|
14
|
+
<div style="display:flex;position:fixed;top:10px;right:20px;gap:2px;">
|
|
15
|
+
<button id="copy">Copy source</button><br/>
|
|
16
|
+
<button id="close">Close</button>
|
|
17
|
+
</div>
|
|
18
|
+
<code><pre>${n}</pre></code>`,a&&(o.innerHTML+=`<br /><h1>Translated Source</h1><br /><br /><code><pre>${a}</pre></code>`),o.style.top="0",o.style.left="0",o.style.background="white",o.style.position="fixed",o.style.zIndex="9999",o.style.maxWidth="100vw",o.style.maxHeight="100vh",o.style.overflowY="auto",document.body.appendChild(o),o.querySelector(".luma-compiler-log-error")?.scrollIntoView(),o.querySelector("button#close").onclick=()=>{o.remove()},o.querySelector("button#copy").onclick=()=>{navigator.clipboard.writeText(this.source)}}},q=Ze;u(q,"defaultProps",{...c.defaultProps,language:"auto",stage:void 0,source:"",sourceMap:null,entryPoint:"main",debugShaders:void 0});function Br(r){return Mr(r.source)||r.id||S(`unnamed ${r.stage}-shader`)}function Mr(r,e="unnamed"){return/#define[\s*]SHADER_NAME[\s*]([A-Za-z0-9_-]+)[\s*]/.exec(r)?.[1]??e}var et=class extends c{get[Symbol.toStringTag](){return"Framebuffer"}width;height;constructor(e,t={}){super(e,t,et.defaultProps),this.width=this.props.width,this.height=this.props.height}clone(e){let t=this.colorAttachments.map(s=>s.texture.clone(e)),i=this.depthStencilAttachment&&this.depthStencilAttachment.texture.clone(e);return this.device.createFramebuffer({...this.props,...e,colorAttachments:t,depthStencilAttachment:i})}resize(e){let t=!e;if(e){let[i,s]=Array.isArray(e)?e:[e.width,e.height];t=t||s!==this.height||i!==this.width,this.width=i,this.height=s}t&&(l.log(2,`Resizing framebuffer ${this.id} to ${this.width}x${this.height}`)(),this.resizeAttachments(this.width,this.height))}autoCreateAttachmentTextures(){if(this.props.colorAttachments.length===0&&!this.props.depthStencilAttachment)throw new Error("Framebuffer has noattachments");this.colorAttachments=this.props.colorAttachments.map((t,i)=>{if(typeof t=="string"){let s=this.createColorTexture(t,i);return this.attachResource(s),s.view}return t instanceof p?t.view:t});let e=this.props.depthStencilAttachment;if(e)if(typeof e=="string"){let t=this.createDepthStencilTexture(e);this.attachResource(t),this.depthStencilAttachment=t.view}else e instanceof p?this.depthStencilAttachment=e.view:this.depthStencilAttachment=e}createColorTexture(e,t){return this.device.createTexture({id:`${this.id}-color-attachment-${t}`,usage:p.RENDER_ATTACHMENT,format:e,width:this.width,height:this.height,sampler:{magFilter:"linear",minFilter:"linear"}})}createDepthStencilTexture(e){return this.device.createTexture({id:`${this.id}-depth-stencil-attachment`,usage:p.RENDER_ATTACHMENT,format:e,width:this.width,height:this.height})}resizeAttachments(e,t){if(this.colorAttachments.forEach((i,s)=>{let n=i.texture.clone({width:e,height:t});this.destroyAttachedResource(i),this.colorAttachments[s]=n.view,this.attachResource(n.view)}),this.depthStencilAttachment){let i=this.depthStencilAttachment.texture.clone({width:e,height:t});this.destroyAttachedResource(this.depthStencilAttachment),this.depthStencilAttachment=i.view,this.attachResource(i)}this.updateAttachments()}},K=et;u(K,"defaultProps",{...c.defaultProps,width:1,height:1,colorAttachments:[],depthStencilAttachment:null});var tt=class extends c{get[Symbol.toStringTag](){return"RenderPipeline"}shaderLayout;bufferLayout;linkStatus="pending";hash="";constructor(e,t){super(e,t,tt.defaultProps),this.shaderLayout=this.props.shaderLayout,this.bufferLayout=this.props.bufferLayout||[]}},J=tt;u(J,"defaultProps",{...c.defaultProps,vs:null,vertexEntryPoint:"vertexMain",vsConstants:{},fs:null,fragmentEntryPoint:"fragmentMain",fsConstants:{},shaderLayout:null,bufferLayout:[],topology:"triangle-list",colorAttachmentFormats:void 0,depthStencilAttachmentFormat:void 0,parameters:{},bindings:{},uniforms:{}});var R=class extends c{get[Symbol.toStringTag](){return"RenderPass"}constructor(e,t){t=R.normalizeProps(e,t),super(e,t,R.defaultProps)}static normalizeProps(e,t){return t}},P=R;u(P,"defaultClearColor",[0,0,0,1]),u(P,"defaultClearDepth",1),u(P,"defaultClearStencil",0),u(P,"defaultProps",{...c.defaultProps,framebuffer:null,parameters:void 0,clearColor:R.defaultClearColor,clearColors:void 0,clearDepth:R.defaultClearDepth,clearStencil:R.defaultClearStencil,depthReadOnly:!1,stencilReadOnly:!1,discard:!1,occlusionQuerySet:void 0,timestampQuerySet:void 0,beginTimestampIndex:void 0,endTimestampIndex:void 0});var rt=class extends c{get[Symbol.toStringTag](){return"ComputePipeline"}hash="";shaderLayout;constructor(e,t){super(e,t,rt.defaultProps),this.shaderLayout=t.shaderLayout}},Q=rt;u(Q,"defaultProps",{...c.defaultProps,shader:void 0,entryPoint:void 0,constants:{},shaderLayout:void 0});var it=class extends c{constructor(e,t){super(e,t,it.defaultProps)}get[Symbol.toStringTag](){return"ComputePass"}},Z=it;u(Z,"defaultProps",{...c.defaultProps,timestampQuerySet:void 0,beginTimestampIndex:void 0,endTimestampIndex:void 0});var st=class extends c{get[Symbol.toStringTag](){return"CommandEncoder"}constructor(e,t){super(e,t,st.defaultProps)}},ee=st;u(ee,"defaultProps",{...c.defaultProps,measureExecutionTime:void 0});var nt=class extends c{get[Symbol.toStringTag](){return"CommandBuffer"}constructor(e,t){super(e,t,nt.defaultProps)}},te=nt;u(te,"defaultProps",{...c.defaultProps});function Be(r){return Fr[r]}function Me(r){let[e,t]=$r[r],i=e==="i32"||e==="u32",s=e!=="u32",n=zr[e]*t;return{primitiveType:e,components:t,byteLength:n,integer:i,signed:s}}var zr={f32:4,f16:2,i32:4,u32:4},$r={f32:["f32",1],"vec2<f32>":["f32",2],"vec3<f32>":["f32",3],"vec4<f32>":["f32",4],f16:["f16",1],"vec2<f16>":["f16",2],"vec3<f16>":["f16",3],"vec4<f16>":["f16",4],i32:["i32",1],"vec2<i32>":["i32",2],"vec3<i32>":["i32",3],"vec4<i32>":["i32",4],u32:["u32",1],"vec2<u32>":["u32",2],"vec3<u32>":["u32",3],"vec4<u32>":["u32",4]},Fr={f32:{type:"f32",components:1},f16:{type:"f16",components:1},i32:{type:"i32",components:1},u32:{type:"u32",components:1},"vec2<f32>":{type:"f32",components:2},"vec3<f32>":{type:"f32",components:3},"vec4<f32>":{type:"f32",components:4},"vec2<f16>":{type:"f16",components:2},"vec3<f16>":{type:"f16",components:3},"vec4<f16>":{type:"f16",components:4},"vec2<i32>":{type:"i32",components:2},"vec3<i32>":{type:"i32",components:3},"vec4<i32>":{type:"i32",components:4},"vec2<u32>":{type:"u32",components:2},"vec3<u32>":{type:"u32",components:3},"vec4<u32>":{type:"u32",components:4},"mat2x2<f32>":{type:"f32",components:4},"mat2x3<f32>":{type:"f32",components:6},"mat2x4<f32>":{type:"f32",components:8},"mat3x2<f32>":{type:"f32",components:6},"mat3x3<f32>":{type:"f32",components:9},"mat3x4<f32>":{type:"f32",components:12},"mat4x2<f32>":{type:"f32",components:8},"mat4x3<f32>":{type:"f32",components:12},"mat4x4<f32>":{type:"f32",components:16},"mat2x2<f16>":{type:"f16",components:4},"mat2x3<f16>":{type:"f16",components:6},"mat2x4<f16>":{type:"f16",components:8},"mat3x2<f16>":{type:"f16",components:6},"mat3x3<f16>":{type:"f16",components:9},"mat3x4<f16>":{type:"f16",components:12},"mat4x2<f16>":{type:"f16",components:8},"mat4x3<f16>":{type:"f16",components:12},"mat4x4<f16>":{type:"f16",components:16},"mat2x2<i32>":{type:"i32",components:4},"mat2x3<i32>":{type:"i32",components:6},"mat2x4<i32>":{type:"i32",components:8},"mat3x2<i32>":{type:"i32",components:6},"mat3x3<i32>":{type:"i32",components:9},"mat3x4<i32>":{type:"i32",components:12},"mat4x2<i32>":{type:"i32",components:8},"mat4x3<i32>":{type:"i32",components:12},"mat4x4<i32>":{type:"i32",components:16},"mat2x2<u32>":{type:"u32",components:4},"mat2x3<u32>":{type:"u32",components:6},"mat2x4<u32>":{type:"u32",components:8},"mat3x2<u32>":{type:"u32",components:6},"mat3x3<u32>":{type:"u32",components:9},"mat3x4<u32>":{type:"u32",components:12},"mat4x2<u32>":{type:"u32",components:8},"mat4x3<u32>":{type:"u32",components:12},"mat4x4<u32>":{type:"u32",components:16}},Ur={vec2i:"vec2<i32>",vec3i:"vec3<i32>",vec4i:"vec4<i32>",vec2u:"vec2<u32>",vec3u:"vec3<u32>",vec4u:"vec4<u32>",vec2f:"vec2<f32>",vec3f:"vec3<f32>",vec4f:"vec4<f32>",vec2h:"vec2<f16>",vec3h:"vec3<f16>",vec4h:"vec4<f16>"},yn={...Ur,mat2x2f:"mat2x2<f32>",mat2x3f:"mat2x3<f32>",mat2x4f:"mat2x4<f32>",mat3x2f:"mat3x2<f32>",mat3x3f:"mat3x3<f32>",mat3x4f:"mat3x4<f32>",mat4x2f:"mat4x2<f32>",mat4x3f:"mat4x3<f32>",mat4x4f:"mat4x4<f32>",mat2x2i:"mat2x2<i32>",mat2x3i:"mat2x3<i32>",mat2x4i:"mat2x4<i32>",mat3x2i:"mat3x2<i32>",mat3x3i:"mat3x3<i32>",mat3x4i:"mat3x4<i32>",mat4x2i:"mat4x2<i32>",mat4x3i:"mat4x3<i32>",mat4x4i:"mat4x4<i32>",mat2x2u:"mat2x2<u32>",mat2x3u:"mat2x3<u32>",mat2x4u:"mat2x4<u32>",mat3x2u:"mat3x2<u32>",mat3x3u:"mat3x3<u32>",mat3x4u:"mat3x4<u32>",mat4x2u:"mat4x2<u32>",mat4x3u:"mat4x3<u32>",mat4x4u:"mat4x4<u32>",mat2x2h:"mat2x2<f16>",mat2x3h:"mat2x3<f16>",mat2x4h:"mat2x4<f16>",mat3x2h:"mat3x2<f16>",mat3x3h:"mat3x3<f16>",mat3x4h:"mat3x4<f16>",mat4x2h:"mat4x2<f16>",mat4x3h:"mat4x3<f16>",mat4x4h:"mat4x4<f16>"};function ot(r,e){let t={};for(let i of r.attributes){let s=Hr(r,e,i.name);s&&(t[i.name]=s)}return t}function zt(r,e,t=16){let i=ot(r,e),s=new Array(t).fill(null);for(let n of Object.values(i))s[n.location]=n;return s}function Hr(r,e,t){let i=Nr(r,t),s=kr(e,t);if(!i)return null;let n=Me(i.type),a=St(n),o=s?.vertexFormat||a,f=E(o);return{attributeName:s?.attributeName||i.name,bufferName:s?.bufferName||i.name,location:i.location,shaderType:i.type,primitiveType:n.primitiveType,shaderComponents:n.components,vertexFormat:o,bufferDataType:f.type,bufferComponents:f.components,normalized:f.normalized,integer:n.integer,stepMode:s?.stepMode||i.stepMode||"vertex",byteOffset:s?.byteOffset||0,byteStride:s?.byteStride||0}}function Nr(r,e){let t=r.attributes.find(i=>i.name===e);return t||l.warn(`shader layout attribute "${e}" not present in shader`),t||null}function kr(r,e){Wr(r);let t=Or(r,e);return t||(t=Gr(r,e),t)?t:(l.warn(`layout for attribute "${e}" not present in buffer layout`),null)}function Wr(r){for(let e of r)(e.attributes&&e.format||!e.attributes&&!e.format)&&l.warn(`BufferLayout ${name} must have either 'attributes' or 'format' field`)}function Or(r,e){for(let t of r)if(t.format&&t.name===e)return{attributeName:t.name,bufferName:e,stepMode:t.stepMode,vertexFormat:t.format,byteOffset:0,byteStride:t.byteStride||0};return null}function Gr(r,e){for(let t of r){let i=t.byteStride;if(typeof t.byteStride!="number")for(let n of t.attributes||[]){let a=E(n.format);i+=a.byteLength}let s=t.attributes?.find(n=>n.attribute===e);if(s)return{attributeName:s.attribute,bufferName:t.name,stepMode:t.stepMode,vertexFormat:s.format,byteOffset:s.byteOffset,byteStride:i}}return null}var at=class extends c{get[Symbol.toStringTag](){return"VertexArray"}maxVertexAttributes;attributeInfos;indexBuffer=null;attributes;constructor(e,t){super(e,t,at.defaultProps),this.maxVertexAttributes=e.limits.maxVertexAttributes,this.attributes=new Array(this.maxVertexAttributes).fill(null),this.attributeInfos=zt(t.shaderLayout,t.bufferLayout,this.maxVertexAttributes)}setConstantWebGL(e,t){this.device.reportError(new Error("constant attributes not supported"),this)()}},re=at;u(re,"defaultProps",{...c.defaultProps,shaderLayout:void 0,bufferLayout:[]});var ut=class extends c{get[Symbol.toStringTag](){return"TransformFeedback"}constructor(e,t){super(e,t,ut.defaultProps)}},ie=ut;u(ie,"defaultProps",{...c.defaultProps,layout:void 0,buffers:{}});var ct=class extends c{get[Symbol.toStringTag](){return"QuerySet"}constructor(e,t){super(e,t,ct.defaultProps)}},se=ct;u(se,"defaultProps",{...c.defaultProps,type:void 0,count:void 0});var ft=class extends c{[Symbol.toStringTag]="WEBGLFence";constructor(e,t={}){super(e,t,ft.defaultProps)}},ne=ft;u(ne,"defaultProps",{...c.defaultProps});var lt=class extends c{get[Symbol.toStringTag](){return"PipelineLayout"}constructor(e,t){super(e,t,lt.defaultProps)}},oe=lt;u(oe,"defaultProps",{...c.defaultProps,shaderLayout:{attributes:[],bindings:[]}});var ze;function ht(r){return(!ze||ze.byteLength<r)&&(ze=new ArrayBuffer(r)),ze}function $t(r,e){let t=ht(r.BYTES_PER_ELEMENT*e);return new r(t,0,e)}var Vr=1024,U=class{layout={};byteLength;constructor(e,t={}){let i=0;for(let[s,n]of Object.entries(e))i=this._addToLayout(s,n,i,t?.[s]);i+=(4-i%4)%4,this.byteLength=Math.max(i*4,Vr)}has(e){return Boolean(this.layout[e])}get(e){return this.layout[e]}getData(e){let t=ht(this.byteLength),i={i32:new Int32Array(t),u32:new Uint32Array(t),f32:new Float32Array(t),f16:new Uint16Array(t)};for(let[s,n]of Object.entries(e))this._writeCompositeValue(i,s,n);return new Uint8Array(t,0,this.byteLength)}_addToLayout(e,t,i,s=1){if(typeof t=="string"){let n=Be(t),a=n.components*s,o=be(i,n.components);return this.layout[e]={offset:o,size:a,type:n.type},o+a}if(Array.isArray(t)){let n=t[0],a=s>1?s:t.length>1?t[1]:1,o=be(i,4);for(let f=0;f<a;f++)o=this._addToLayout(`${e}[${f}]`,n,o);return o}if(typeof t=="object"){let n=be(i,4);for(let[a,o]of Object.entries(t))n=this._addToLayout(`${e}.${a}`,o,n);return n}throw new Error(`Unsupported CompositeShaderType for ${e}`)}_writeCompositeValue(e,t,i){if(this.layout[t]){this._writeToBuffer(e,t,i);return}if(Array.isArray(i)){for(let s=0;s<i.length;s++){let n=i[s],a=`${t}[${s}]`;this._writeCompositeValue(e,a,n)}return}if(typeof i=="object"&&i!==null){for(let[s,n]of Object.entries(i)){let a=`${t}.${s}`;this._writeCompositeValue(e,a,n)}return}l.warn(`Unsupported uniform value for ${t}:`,i)()}_writeToBuffer(e,t,i){let s=this.layout[t];if(!s){l.warn(`Uniform ${t} not found in layout`)();return}let{type:n,size:a,offset:o}=s,f=e[n];a===1?f[o]=Number(i):f.set(i,o)}};function jr(r){return ArrayBuffer.isView(r)&&!(r instanceof DataView)}function $e(r){return Array.isArray(r)?r.length===0||typeof r[0]=="number":jr(r)}function Ft(r,e,t=16){if(r!==e)return!1;let i=r,s=e;if(!$e(i))return!1;if($e(s)&&i.length===s.length){for(let n=0;n<i.length;++n)if(s[n]!==i[n])return!1}return!0}function Ut(r){return $e(r)?r.slice():r}var H=class{name;uniforms={};modifiedUniforms={};modified=!0;bindingLayout={};needsRedraw="initialized";constructor(e){if(this.name=e?.name||"unnamed",e?.name&&e?.shaderLayout){let t=e?.shaderLayout.bindings?.find(s=>s.type==="uniform"&&s.name===e?.name);if(!t)throw new Error(e?.name);let i=t;for(let s of i.uniforms||[])this.bindingLayout[s.name]=s}}setUniforms(e){for(let[t,i]of Object.entries(e))this._setUniform(t,i),this.needsRedraw||this.setNeedsRedraw(`${this.name}.${t}=${i}`)}setNeedsRedraw(e){this.needsRedraw=this.needsRedraw||e}getAllUniforms(){return this.modifiedUniforms={},this.needsRedraw=!1,this.uniforms||{}}_setUniform(e,t){Ft(this.uniforms[e],t)||(this.uniforms[e]=Ut(t),this.modifiedUniforms[e]=!0,this.modified=!0)}};var Fe=class{uniformBlocks=new Map;uniformBufferLayouts=new Map;uniformBuffers=new Map;constructor(e){for(let[t,i]of Object.entries(e)){let s=t,n=new U(i.uniformTypes??{},i.uniformSizes??{});this.uniformBufferLayouts.set(s,n);let a=new H({name:t});a.setUniforms(i.defaultUniforms||{}),this.uniformBlocks.set(s,a)}}destroy(){for(let e of this.uniformBuffers.values())e.destroy()}setUniforms(e){for(let[t,i]of Object.entries(e))this.uniformBlocks.get(t)?.setUniforms(i);this.updateUniformBuffers()}getUniformBufferByteLength(e){return this.uniformBufferLayouts.get(e)?.byteLength||0}getUniformBufferData(e){let t=this.uniformBlocks.get(e)?.getAllUniforms()||{};return this.uniformBufferLayouts.get(e)?.getData(t)}createUniformBuffer(e,t,i){i&&this.setUniforms(i);let s=this.getUniformBufferByteLength(t),n=e.createBuffer({usage:m.UNIFORM|m.COPY_DST,byteLength:s}),a=this.getUniformBufferData(t);return n.write(a),n}getManagedUniformBuffer(e,t){if(!this.uniformBuffers.get(t)){let i=this.getUniformBufferByteLength(t),s=e.createBuffer({usage:m.UNIFORM|m.COPY_DST,byteLength:i});this.uniformBuffers.set(t,s)}return this.uniformBuffers.get(t)}updateUniformBuffers(){let e=!1;for(let t of this.uniformBlocks.keys()){let i=this.updateUniformBuffer(t);e||=i}return e&&l.log(3,`UniformStore.updateUniformBuffers(): ${e}`)(),e}updateUniformBuffer(e){let t=this.uniformBlocks.get(e),i=this.uniformBuffers.get(e),s=!1;if(i&&t?.needsRedraw){s||=t.needsRedraw;let n=this.getUniformBufferData(e);i=this.uniformBuffers.get(e),i?.write(n);let a=this.uniformBlocks.get(e)?.getAllUniforms();l.log(4,`Writing to uniform buffer ${String(e)}`,n,a)()}return s}};function dt(r,e,t,i=0){let s=x.getInfo(t),n=s.bytesPerPixel/s.components,{bytesPerImage:a}=e,o=a*i,f=e.bytesPerImage/n;switch(t){case"rgba8unorm":case"bgra8unorm":case"rgba8uint":return new Uint8Array(r,o,f);case"r8unorm":return new Uint8Array(r,o,f);case"r16uint":case"rgba16uint":return new Uint16Array(r,o,f);case"r32uint":case"rgba32uint":return new Uint32Array(r,o,f);case"r32float":return new Float32Array(r,o,f);case"rgba16float":return new Uint16Array(r,o,f);case"rgba32float":return new Float32Array(r,o,f);default:throw new Error(`Unsupported format: ${t}`)}}function Ht(r,e,t,i,s=0){let a=e.bytesPerImage/e.bytesPerPixel,o=i.subarray(0,a);dt(r,e,t,s).set(o,0)}function Nt(r,e,t,i){if(e<0||e>=r.width||t<0||t>=r.height)throw new Error("Coordinates out of bounds.");let s=t*r.bytesPerRow+e*r.bytesPerPixel,n=new DataView(r.arrayBuffer,s,r.bytesPerPixel),a=0,o=[];for(let f=0;f<4;f++){let d=i[f]??0;if(d<=0)o.push(0);else{let g=Yr(n,a,d);o.push(g),a+=d}}return[o[0]??0,o[1]??0,o[2]??0,o[3]??0]}function kt(r,e,t,i){let s=e;for(let n=0;n<4;n++){let a=t[n]??0,o=(1<<a)-1,f=(i[n]??0)&o;Xr(r,s,a,f),s+=a}}function Yr(r,e,t){if(e%8===0){let s=e/8;if(t===8&&s+1<=r.byteLength)return r.getUint8(s);if(t===16&&s+2<=r.byteLength)return r.getUint16(s,!1);if(t===32&&s+4<=r.byteLength)return r.getUint32(s,!1)}let i=0;for(let s=0;s<t;s++){let n=e+s,a=Math.floor(n/8),o=n%8,d=r.getUint8(a)>>7-o&1;i=i<<1|d}return i}function Xr(r,e,t,i){if(e%8===0){let s=e/8;if(t===8&&s+1<=r.byteLength){r.setUint8(s,i&255);return}else if(t===16&&s+2<=r.byteLength){r.setUint16(s,i&65535,!1);return}else if(t===32&&s+4<=r.byteLength){r.setUint32(s,i,!1);return}}for(let s=0;s<t;s++){let n=e+s,a=Math.floor(n/8),f=1<<7-n%8,d=i>>t-1-s&1,g=r.getUint8(a);g&=~f,d&&(g|=f),r.setUint8(a,g)}}ce(ae,Zt(Ot(),1));return er(ae);})();
|
|
18
19
|
return __exports__;
|
|
19
20
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@luma.gl/effects",
|
|
3
|
-
"version": "9.3.0-alpha.
|
|
3
|
+
"version": "9.3.0-alpha.4",
|
|
4
4
|
"description": "Post-processing effects for luma.gl",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -52,5 +52,5 @@
|
|
|
52
52
|
"@math.gl/core": "^4.1.0",
|
|
53
53
|
"@math.gl/types": "^4.1.0"
|
|
54
54
|
},
|
|
55
|
-
"gitHead": "
|
|
55
|
+
"gitHead": "7486e7b0377fb6ab961b4499828681bede60f3b1"
|
|
56
56
|
}
|