@luma.gl/core 9.0.0-beta.6 → 9.0.0-beta.8
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/adapter/device.d.ts +22 -12
- package/dist/adapter/device.d.ts.map +1 -1
- package/dist/adapter/device.js +18 -7
- package/dist/adapter/resources/buffer.d.ts +3 -1
- package/dist/adapter/resources/buffer.d.ts.map +1 -1
- package/dist/adapter/resources/buffer.js +4 -0
- package/dist/adapter/resources/compute-pipeline.d.ts +14 -5
- package/dist/adapter/resources/compute-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/compute-pipeline.js +4 -4
- package/dist/adapter/resources/framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/framebuffer.js +4 -1
- package/dist/adapter/resources/render-pipeline.d.ts +8 -8
- package/dist/adapter/resources/render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/render-pipeline.js +2 -2
- package/dist/adapter/resources/shader.d.ts +3 -3
- package/dist/adapter/resources/shader.d.ts.map +1 -1
- package/dist/adapter/resources/shader.js +1 -1
- package/dist/adapter/resources/texture.d.ts +5 -0
- package/dist/adapter/resources/texture.d.ts.map +1 -1
- package/dist/adapter/resources/texture.js +5 -0
- package/dist/adapter/types/shader-layout.d.ts +8 -4
- package/dist/adapter/types/shader-layout.d.ts.map +1 -1
- package/dist/adapter/types/texture-formats.d.ts.map +1 -1
- package/dist/dist.dev.js +41 -25
- package/dist/dist.min.js +18 -0
- package/dist/index.cjs +38 -19
- package/dist/index.cjs.map +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/init.js +1 -1
- package/dist/lib/luma.d.ts +6 -2
- package/dist/lib/luma.d.ts.map +1 -1
- package/dist/lib/uniforms/uniform-store.js +1 -1
- package/package.json +8 -4
- package/src/adapter/device.ts +45 -23
- package/src/adapter/resources/buffer.ts +5 -1
- package/src/adapter/resources/compute-pipeline.ts +19 -9
- package/src/adapter/resources/framebuffer.ts +5 -1
- package/src/adapter/resources/render-pipeline.ts +10 -10
- package/src/adapter/resources/shader.ts +3 -3
- package/src/adapter/resources/texture.ts +10 -0
- package/src/adapter/types/shader-layout.ts +9 -4
- package/src/adapter/types/texture-formats.ts +3 -4
- package/src/index.ts +1 -0
- package/src/lib/luma.ts +7 -2
- package/src/lib/uniforms/uniform-store.ts +1 -1
- package/dist.min.js +0 -18
package/dist/dist.dev.js
CHANGED
|
@@ -29,9 +29,9 @@ var __exports__ = (() => {
|
|
|
29
29
|
return value;
|
|
30
30
|
};
|
|
31
31
|
|
|
32
|
-
//
|
|
33
|
-
var
|
|
34
|
-
__export(
|
|
32
|
+
// bundle.ts
|
|
33
|
+
var bundle_exports = {};
|
|
34
|
+
__export(bundle_exports, {
|
|
35
35
|
Buffer: () => Buffer2,
|
|
36
36
|
CanvasContext: () => CanvasContext,
|
|
37
37
|
CommandBuffer: () => CommandBuffer,
|
|
@@ -620,9 +620,6 @@ var __exports__ = (() => {
|
|
|
620
620
|
return "empty";
|
|
621
621
|
}
|
|
622
622
|
|
|
623
|
-
// ../../node_modules/@probe.gl/log/dist/init.js
|
|
624
|
-
globalThis.probe = {};
|
|
625
|
-
|
|
626
623
|
// ../../node_modules/@probe.gl/log/dist/index.js
|
|
627
624
|
var dist_default = new Log({
|
|
628
625
|
id: "@probe.gl/log"
|
|
@@ -1029,6 +1026,8 @@ var __exports__ = (() => {
|
|
|
1029
1026
|
usage;
|
|
1030
1027
|
/** For index buffers, whether indices are 16 or 32 bit */
|
|
1031
1028
|
indexType;
|
|
1029
|
+
/** "Time" of last update */
|
|
1030
|
+
updateTimestamp;
|
|
1032
1031
|
constructor(device, props) {
|
|
1033
1032
|
const deducedProps = { ...props };
|
|
1034
1033
|
if ((props.usage || 0) & _Buffer.INDEX && !props.indexType) {
|
|
@@ -1041,6 +1040,7 @@ var __exports__ = (() => {
|
|
|
1041
1040
|
super(device, deducedProps, _Buffer.defaultProps);
|
|
1042
1041
|
this.usage = props.usage || 0;
|
|
1043
1042
|
this.indexType = deducedProps.indexType;
|
|
1043
|
+
this.updateTimestamp = device.incrementTimestamp();
|
|
1044
1044
|
}
|
|
1045
1045
|
/** Read data synchronously. @note WebGL2 only */
|
|
1046
1046
|
readSyncWebGL(byteOffset, byteLength) {
|
|
@@ -1218,14 +1218,16 @@ var __exports__ = (() => {
|
|
|
1218
1218
|
};
|
|
1219
1219
|
var DeviceFeatures = class {
|
|
1220
1220
|
features;
|
|
1221
|
-
|
|
1221
|
+
disabledFeatures;
|
|
1222
|
+
constructor(features = [], disabledFeatures) {
|
|
1222
1223
|
this.features = new Set(features);
|
|
1224
|
+
this.disabledFeatures = disabledFeatures || {};
|
|
1223
1225
|
}
|
|
1224
1226
|
*[Symbol.iterator]() {
|
|
1225
1227
|
yield* this.features;
|
|
1226
1228
|
}
|
|
1227
1229
|
has(feature) {
|
|
1228
|
-
return this.features.has(feature);
|
|
1230
|
+
return !this.disabledFeatures[feature] && this.features.has(feature);
|
|
1229
1231
|
}
|
|
1230
1232
|
};
|
|
1231
1233
|
var _Device = class {
|
|
@@ -1238,12 +1240,12 @@ var __exports__ = (() => {
|
|
|
1238
1240
|
}
|
|
1239
1241
|
/** id of this device, primarily for debugging */
|
|
1240
1242
|
id;
|
|
1241
|
-
/** stats */
|
|
1242
|
-
statsManager = lumaStats;
|
|
1243
1243
|
/** A copy of the device props */
|
|
1244
1244
|
props;
|
|
1245
1245
|
/** Available for the application to store data on the device */
|
|
1246
1246
|
userData = {};
|
|
1247
|
+
/** stats */
|
|
1248
|
+
statsManager = lumaStats;
|
|
1247
1249
|
/** Used by other luma.gl modules to store data on the device */
|
|
1248
1250
|
_lumaData = {};
|
|
1249
1251
|
/** Check if a specific texture format is GPU compressed */
|
|
@@ -1300,12 +1302,17 @@ var __exports__ = (() => {
|
|
|
1300
1302
|
clearWebGL(options) {
|
|
1301
1303
|
throw new Error("not implemented");
|
|
1302
1304
|
}
|
|
1303
|
-
|
|
1305
|
+
timestamp = 0;
|
|
1306
|
+
/** A monotonic counter for tracking buffer and texture updates */
|
|
1307
|
+
incrementTimestamp() {
|
|
1308
|
+
return this.timestamp++;
|
|
1309
|
+
}
|
|
1304
1310
|
// Error Handling
|
|
1305
1311
|
/** Report unhandled device errors */
|
|
1306
1312
|
onError(error) {
|
|
1307
1313
|
this.props.onError(error);
|
|
1308
1314
|
}
|
|
1315
|
+
// IMPLEMENTATION
|
|
1309
1316
|
_getBufferProps(props) {
|
|
1310
1317
|
if (props instanceof ArrayBuffer || ArrayBuffer.isView(props)) {
|
|
1311
1318
|
props = { data: props };
|
|
@@ -1326,19 +1333,23 @@ var __exports__ = (() => {
|
|
|
1326
1333
|
var Device = _Device;
|
|
1327
1334
|
__publicField(Device, "defaultProps", {
|
|
1328
1335
|
id: null,
|
|
1329
|
-
type: "best-available",
|
|
1330
1336
|
canvas: null,
|
|
1331
1337
|
container: null,
|
|
1332
1338
|
manageState: true,
|
|
1333
1339
|
width: 800,
|
|
1334
1340
|
// width are height are only used by headless gl
|
|
1335
1341
|
height: 600,
|
|
1336
|
-
|
|
1342
|
+
requestMaxLimits: true,
|
|
1337
1343
|
debug: Boolean(log.get("debug")),
|
|
1338
1344
|
// Instrument context (at the expense of performance)
|
|
1339
1345
|
spector: Boolean(log.get("spector")),
|
|
1340
1346
|
// Initialize the SpectorJS WebGL debugger
|
|
1341
1347
|
break: [],
|
|
1348
|
+
// TODO - Change these after confirming things work as expected
|
|
1349
|
+
initalizeFeatures: true,
|
|
1350
|
+
disabledFeatures: {
|
|
1351
|
+
"compilation-status-async-webgl": true
|
|
1352
|
+
},
|
|
1342
1353
|
// alpha: undefined,
|
|
1343
1354
|
// depth: undefined,
|
|
1344
1355
|
// stencil: undefined,
|
|
@@ -1708,6 +1719,9 @@ var __exports__ = (() => {
|
|
|
1708
1719
|
height;
|
|
1709
1720
|
/** depth of this texture */
|
|
1710
1721
|
depth;
|
|
1722
|
+
/** "Time" of last update. Monotonically increasing timestamp */
|
|
1723
|
+
updateTimestamp;
|
|
1724
|
+
/** Do not use directly. Create with device.createTexture() */
|
|
1711
1725
|
constructor(device, props, defaultProps = _Texture.defaultProps) {
|
|
1712
1726
|
super(device, props, defaultProps);
|
|
1713
1727
|
this.dimension = this.props.dimension;
|
|
@@ -1715,6 +1729,7 @@ var __exports__ = (() => {
|
|
|
1715
1729
|
this.width = this.props.width;
|
|
1716
1730
|
this.height = this.props.height;
|
|
1717
1731
|
this.depth = this.props.depth;
|
|
1732
|
+
this.updateTimestamp = device.incrementTimestamp();
|
|
1718
1733
|
}
|
|
1719
1734
|
};
|
|
1720
1735
|
var Texture = _Texture;
|
|
@@ -1959,7 +1974,7 @@ ${htmlLog}
|
|
|
1959
1974
|
__publicField(Shader, "defaultProps", {
|
|
1960
1975
|
...Resource.defaultProps,
|
|
1961
1976
|
language: "auto",
|
|
1962
|
-
stage:
|
|
1977
|
+
stage: void 0,
|
|
1963
1978
|
source: "",
|
|
1964
1979
|
sourceMap: null,
|
|
1965
1980
|
entryPoint: "main",
|
|
@@ -2028,6 +2043,9 @@ ${htmlLog}
|
|
|
2028
2043
|
}
|
|
2029
2044
|
/** Auto creates any textures */
|
|
2030
2045
|
autoCreateAttachmentTextures() {
|
|
2046
|
+
if (this.props.colorAttachments.length === 0 && !this.props.depthStencilAttachment) {
|
|
2047
|
+
throw new Error("Framebuffer has noattachments");
|
|
2048
|
+
}
|
|
2031
2049
|
this.colorAttachments = this.props.colorAttachments.map((attachment2) => {
|
|
2032
2050
|
if (typeof attachment2 === "string") {
|
|
2033
2051
|
const texture = this.createColorTexture(attachment2);
|
|
@@ -2108,7 +2126,7 @@ ${htmlLog}
|
|
|
2108
2126
|
width: 1,
|
|
2109
2127
|
height: 1,
|
|
2110
2128
|
colorAttachments: [],
|
|
2111
|
-
// ['rgba8unorm
|
|
2129
|
+
// ['rgba8unorm'],
|
|
2112
2130
|
depthStencilAttachment: null
|
|
2113
2131
|
// 'depth24plus-stencil8'
|
|
2114
2132
|
});
|
|
@@ -2146,12 +2164,10 @@ ${htmlLog}
|
|
|
2146
2164
|
__publicField(RenderPipeline, "defaultProps", {
|
|
2147
2165
|
...Resource.defaultProps,
|
|
2148
2166
|
vs: null,
|
|
2149
|
-
|
|
2150
|
-
// main
|
|
2167
|
+
vertexEntryPoint: "vertexMain",
|
|
2151
2168
|
vsConstants: {},
|
|
2152
2169
|
fs: null,
|
|
2153
|
-
|
|
2154
|
-
// main
|
|
2170
|
+
fragmentEntryPoint: "fragmentMain",
|
|
2155
2171
|
fsConstants: {},
|
|
2156
2172
|
shaderLayout: null,
|
|
2157
2173
|
bufferLayout: [],
|
|
@@ -2214,10 +2230,10 @@ ${htmlLog}
|
|
|
2214
2230
|
var ComputePipeline = _ComputePipeline;
|
|
2215
2231
|
__publicField(ComputePipeline, "defaultProps", {
|
|
2216
2232
|
...Resource.defaultProps,
|
|
2217
|
-
|
|
2218
|
-
|
|
2219
|
-
|
|
2220
|
-
shaderLayout:
|
|
2233
|
+
shader: void 0,
|
|
2234
|
+
entryPoint: void 0,
|
|
2235
|
+
constants: {},
|
|
2236
|
+
shaderLayout: void 0
|
|
2221
2237
|
});
|
|
2222
2238
|
|
|
2223
2239
|
// src/adapter/resources/compute-pass.ts
|
|
@@ -2802,7 +2818,7 @@ ${htmlLog}
|
|
|
2802
2818
|
}
|
|
2803
2819
|
/** Destroy any managed uniform buffers */
|
|
2804
2820
|
destroy() {
|
|
2805
|
-
for (const uniformBuffer of
|
|
2821
|
+
for (const uniformBuffer of this.uniformBuffers.values()) {
|
|
2806
2822
|
uniformBuffer.destroy();
|
|
2807
2823
|
}
|
|
2808
2824
|
}
|
|
@@ -3181,7 +3197,7 @@ ${htmlLog}
|
|
|
3181
3197
|
|
|
3182
3198
|
// src/index.ts
|
|
3183
3199
|
var glsl = (x) => `${x}`;
|
|
3184
|
-
return __toCommonJS(
|
|
3200
|
+
return __toCommonJS(bundle_exports);
|
|
3185
3201
|
})();
|
|
3186
3202
|
return __exports__;
|
|
3187
3203
|
});
|
package/dist/dist.min.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
(function webpackUniversalModuleDefinition(root, factory) {
|
|
2
|
+
if (typeof exports === 'object' && typeof module === 'object')
|
|
3
|
+
module.exports = factory();
|
|
4
|
+
else if (typeof define === 'function' && define.amd) define([], factory);
|
|
5
|
+
else if (typeof exports === 'object') exports['luma'] = factory();
|
|
6
|
+
else root['luma'] = factory();})(globalThis, function () {
|
|
7
|
+
"use strict";var __exports__=(()=>{var et=Object.defineProperty;var Ie=Object.getOwnPropertyDescriptor;var Le=Object.getOwnPropertyNames;var Re=Object.prototype.hasOwnProperty;var Me=(r,t,e)=>t in r?et(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e;var $e=(r,t)=>{for(var e in t)et(r,e,{get:t[e],enumerable:!0})},Ne=(r,t,e,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Le(t))!Re.call(r,n)&&n!==e&&et(r,n,{get:()=>t[n],enumerable:!(o=Ie(t,n))||o.enumerable});return r};var Fe=r=>Ne(et({},"__esModule",{value:!0}),r);var u=(r,t,e)=>(Me(r,typeof t!="symbol"?t+"":t,e),e);var Pr={};$e(Pr,{Buffer:()=>m,CanvasContext:()=>D,CommandBuffer:()=>q,CommandEncoder:()=>X,ComputePass:()=>Y,ComputePipeline:()=>j,Device:()=>x,DeviceFeatures:()=>ct,DeviceLimits:()=>ut,ExternalTexture:()=>H,Framebuffer:()=>V,QuerySet:()=>J,RenderPass:()=>W,RenderPipeline:()=>O,Resource:()=>c,Sampler:()=>G,Shader:()=>k,StatsManager:()=>F,Texture:()=>h,TextureView:()=>z,TransformFeedback:()=>Z,UniformBlock:()=>$,UniformBufferLayout:()=>M,UniformStore:()=>pt,VERSION:()=>it,VertexArray:()=>Q,assert:()=>L,cancelAnimationFrame:()=>Ce,cast:()=>be,checkProps:()=>Se,decodeShaderAttributeType:()=>mt,decodeShaderUniformType:()=>dt,decodeTextureFormat:()=>oe,decodeVertexFormat:()=>K,deepEqual:()=>yt,fillArray:()=>me,formatCompilerLog:()=>lt,formatValue:()=>kt,getAttributeInfosFromLayouts:()=>Nt,getDataTypeFromTypedArray:()=>zt,getScratchArray:()=>le,getScratchArrayBuffer:()=>tt,getTypedArrayFromDataType:()=>ge,getVertexFormatFromAttribute:()=>ye,glsl:()=>_r,isNumberArray:()=>y,isObjectEmpty:()=>te,isTypedArray:()=>xt,isUniformValue:()=>Ht,loadFile:()=>Ae,loadImage:()=>Ee,loadImageBitmap:()=>ve,loadScript:()=>_e,log:()=>l,luma:()=>R,makeRandomNumberGenerator:()=>Gt,mergeShaderLayout:()=>ce,random:()=>Pe,requestAnimationFrame:()=>Be,setPathPrefix:()=>Te,splitUniformsAndBindings:()=>xe,stubRemovedMethods:()=>we,uid:()=>S});function bt(r){if(typeof window<"u"&&typeof window.process=="object"&&window.process.type==="renderer"||typeof process<"u"&&typeof process.versions=="object"&&Boolean(process.versions.electron))return!0;let t=typeof navigator=="object"&&typeof navigator.userAgent=="string"&&navigator.userAgent,e=r||t;return!!(e&&e.indexOf("Electron")>=0)}function d(){return!(typeof process=="object"&&String(process)==="[object process]"&&!process.browser)||bt()}var Ue=globalThis.self||globalThis.window||globalThis.global,_=globalThis.window||globalThis.self||globalThis.global,De=globalThis.document||{},T=globalThis.process||{},ze=globalThis.console,Rr=globalThis.navigator||{};var rt=typeof __VERSION__<"u"?__VERSION__:"untranspiled source",Nr=d();function He(r){try{let t=window[r],e="__storage_test__";return t.setItem(e,e),t.removeItem(e),t}catch{return null}}var ot=class{constructor(t,e){let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"sessionStorage";this.storage=void 0,this.id=void 0,this.config=void 0,this.storage=He(o),this.id=t,this.config=e,this._loadConfiguration()}getConfiguration(){return this.config}setConfiguration(t){if(Object.assign(this.config,t),this.storage){let e=JSON.stringify(this.config);this.storage.setItem(this.id,e)}}_loadConfiguration(){let t={};if(this.storage){let e=this.storage.getItem(this.id);t=e?JSON.parse(e):{}}return Object.assign(this.config,t),this}};function Wt(r){let t;return r<10?t=`${r.toFixed(2)}ms`:r<100?t=`${r.toFixed(1)}ms`:r<1e3?t=`${r.toFixed(0)}ms`:t=`${(r/1e3).toFixed(2)}s`,t}function jt(r){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:8,e=Math.max(t-r.length,0);return`${" ".repeat(e)}${r}`}function nt(r,t,e){let o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:600,n=r.src.replace(/\(/g,"%28").replace(/\)/g,"%29");r.width>o&&(e=Math.min(e,o/r.width));let s=r.width*e,i=r.height*e,a=["font-size:1px;",`padding:${Math.floor(i/2)}px ${Math.floor(s/2)}px;`,`line-height:${i}px;`,`background:url(${n});`,`background-size:${s}px ${i}px;`,"color:transparent;"].join("");return[`${t} %c+`,a]}var st;(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"})(st||(st={}));var ke=10;function Yt(r){return typeof r!="string"?r:(r=r.toUpperCase(),st[r]||st.WHITE)}function Xt(r,t,e){return!d&&typeof r=="string"&&(t&&(r=`\x1B[${Yt(t)}m${r}\x1B[39m`),e&&(r=`\x1B[${Yt(e)+ke}m${r}\x1B[49m`)),r}function qt(r){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:["constructor"],e=Object.getPrototypeOf(r),o=Object.getOwnPropertyNames(e),n=r;for(let s of o){let i=n[s];typeof i=="function"&&(t.find(a=>s===a)||(n[s]=i.bind(r)))}}function P(r,t){if(!r)throw new Error(t||"Assertion failed")}function A(){let r;if(d()&&_.performance){var t,e;r=_===null||_===void 0||(t=_.performance)===null||t===void 0||(e=t.now)===null||e===void 0?void 0:e.call(t)}else if("hrtime"in T){var o;let n=T===null||T===void 0||(o=T.hrtime)===null||o===void 0?void 0:o.call(T);r=n[0]*1e3+n[1]/1e6}else r=Date.now();return r}var B={debug:d()&&console.debug||console.log,log:console.log,info:console.info,warn:console.warn,error:console.error},Ge={enabled:!0,level:0};function p(){}var Kt={},Qt={once:!0},w=class{constructor(){let{id:t}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{id:""};this.id=void 0,this.VERSION=rt,this._startTs=A(),this._deltaTs=A(),this._storage=void 0,this.userData={},this.LOG_THROTTLE_TIMEOUT=0,this.id=t,this.userData={},this._storage=new ot(`__probe-${this.id}__`,Ge),this.timeStamp(`${this.id} started`),qt(this),Object.seal(this)}set level(t){this.setLevel(t)}get level(){return this.getLevel()}isEnabled(){return this._storage.config.enabled}getLevel(){return this._storage.config.level}getTotal(){return Number((A()-this._startTs).toPrecision(10))}getDelta(){return Number((A()-this._deltaTs).toPrecision(10))}set priority(t){this.level=t}get priority(){return this.level}getPriority(){return this.level}enable(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;return this._storage.setConfiguration({enabled:t}),this}setLevel(t){return this._storage.setConfiguration({level:t}),this}get(t){return this._storage.config[t]}set(t,e){this._storage.setConfiguration({[t]:e})}settings(){console.table?console.table(this._storage.config):console.log(this._storage.config)}assert(t,e){P(t,e)}warn(t){return this._getLogFunction(0,t,B.warn,arguments,Qt)}error(t){return this._getLogFunction(0,t,B.error,arguments)}deprecated(t,e){return this.warn(`\`${t}\` is deprecated and will be removed in a later version. Use \`${e}\` instead`)}removed(t,e){return this.error(`\`${t}\` has been removed. Use \`${e}\` instead`)}probe(t,e){return this._getLogFunction(t,e,B.log,arguments,{time:!0,once:!0})}log(t,e){return this._getLogFunction(t,e,B.debug,arguments)}info(t,e){return this._getLogFunction(t,e,console.info,arguments)}once(t,e){return this._getLogFunction(t,e,B.debug||B.info,arguments,Qt)}table(t,e,o){return e?this._getLogFunction(t,e,console.table||p,o&&[o],{tag:je(e)}):p}image(t){let{logLevel:e,priority:o,image:n,message:s="",scale:i=1}=t;return this._shouldLog(e||o)?d()?We({image:n,message:s,scale:i}):Oe({image:n,message:s,scale:i}):p}time(t,e){return this._getLogFunction(t,e,console.time?console.time:console.info)}timeEnd(t,e){return this._getLogFunction(t,e,console.timeEnd?console.timeEnd:console.info)}timeStamp(t,e){return this._getLogFunction(t,e,console.timeStamp||p)}group(t,e){let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{collapsed:!1},n=Zt({logLevel:t,message:e,opts:o}),{collapsed:s}=o;return n.method=(s?console.groupCollapsed:console.group)||console.info,this._getLogFunction(n)}groupCollapsed(t,e){let o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return this.group(t,e,Object.assign({},o,{collapsed:!0}))}groupEnd(t){return this._getLogFunction(t,"",console.groupEnd||p)}withGroup(t,e,o){this.group(t,e)();try{o()}finally{this.groupEnd(t)()}}trace(){console.trace&&console.trace()}_shouldLog(t){return this.isEnabled()&&this.getLevel()>=Jt(t)}_getLogFunction(t,e,o,n,s){if(this._shouldLog(t)){s=Zt({logLevel:t,message:e,args:n,opts:s}),o=o||s.method,P(o),s.total=this.getTotal(),s.delta=this.getDelta(),this._deltaTs=A();let i=s.tag||s.message;if(s.once&&i)if(!Kt[i])Kt[i]=A();else return p;return e=Ve(this.id,s.message,s),o.bind(console,e,...s.args)}return p}};w.VERSION=rt;function Jt(r){if(!r)return 0;let t;switch(typeof r){case"number":t=r;break;case"object":t=r.logLevel||r.priority||0;break;default:return 0}return P(Number.isFinite(t)&&t>=0),t}function Zt(r){let{logLevel:t,message:e}=r;r.logLevel=Jt(t);let o=r.args?Array.from(r.args):[];for(;o.length&&o.shift()!==e;);switch(typeof t){case"string":case"function":e!==void 0&&o.unshift(e),r.message=t;break;case"object":Object.assign(r,t);break;default:}typeof r.message=="function"&&(r.message=r.message());let n=typeof r.message;return P(n==="string"||n==="object"),Object.assign(r,{args:o},r.opts)}function Ve(r,t,e){if(typeof t=="string"){let o=e.time?jt(Wt(e.total)):"";t=e.time?`${r}: ${o} ${t}`:`${r}: ${t}`,t=Xt(t,e.color,e.background)}return t}function Oe(r){let{image:t,message:e="",scale:o=1}=r;return console.warn("removed"),p}function We(r){let{image:t,message:e="",scale:o=1}=r;if(typeof t=="string"){let s=new Image;return s.onload=()=>{let i=nt(s,e,o);console.log(...i)},s.src=t,p}let n=t.nodeName||"";if(n.toLowerCase()==="img")return console.log(...nt(t,e,o)),p;if(n.toLowerCase()==="canvas"){let s=new Image;return s.onload=()=>console.log(...nt(s,e,o)),s.src=t.toDataURL(),p}return p}function je(r){for(let t in r)for(let e in r[t])return e||"untitled";return"empty"}var io=new w({id:"@probe.gl/log"});var l=new w({id:"luma.gl"});function N(){let r;if(typeof window<"u"&&window.performance)r=window.performance.now();else if(typeof process<"u"&&process.hrtime){let t=process.hrtime();r=t[0]*1e3+t[1]/1e6}else r=Date.now();return r}var v=class{constructor(t,e){this.name=void 0,this.type=void 0,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=t,this.type=e,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(t){return this.sampleSize=t,this}incrementCount(){return this.addCount(1),this}decrementCount(){return this.subtractCount(1),this}addCount(t){return this._count+=t,this._samples++,this._checkSampling(),this}subtractCount(t){return this._count-=t,this._samples++,this._checkSampling(),this}addTime(t){return this._time+=t,this.lastTiming=t,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 C=class{constructor(t){this.id=void 0,this.stats={},this.id=t.id,this.stats={},this._initializeStats(t.stats),Object.seal(this)}get(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"count";return this._getOrCreate({name:t,type:e})}get size(){return Object.keys(this.stats).length}reset(){for(let t of Object.values(this.stats))t.reset();return this}forEach(t){for(let e of Object.values(this.stats))t(e)}getTable(){let t={};return this.forEach(e=>{t[e.name]={time:e.time||0,count:e.count||0,average:e.getAverageTime()||0,hz:e.getHz()||0}}),t}_initializeStats(){(arguments.length>0&&arguments[0]!==void 0?arguments[0]:[]).forEach(e=>this._getOrCreate(e))}_getOrCreate(t){let{name:e,type:o}=t,n=this.stats[e];return n||(t instanceof v?n=t:n=new v(e,o),this.stats[e]=n),n}};var F=class{stats=new Map;getStats(t){return this.get(t)}get(t){return this.stats.has(t)||this.stats.set(t,new C({id:t})),this.stats.get(t)}},I=new F;function Ye(){let r="9.0.0-beta.7",t="set luma.log.level=1 (or higher) to trace rendering";if(globalThis.luma&&globalThis.luma.VERSION!==r)throw new Error(`luma.gl - multiple VERSIONs detected: ${globalThis.luma.VERSION} vs ${r}`);return globalThis.luma||(d()&&l.log(1,`${r} - ${t}`)(),globalThis.luma=globalThis.luma||{VERSION:r,version:r,log:l,stats:I}),r}var it=Ye();function xt(r){return ArrayBuffer.isView(r)&&!(r instanceof DataView)?r:null}function y(r){return Array.isArray(r)?r.length===0||typeof r[0]=="number"?r:null:xt(r)}var wt={};function S(r="id"){wt[r]=wt[r]||1;let t=wt[r]++;return`${r}-${t}`}function te(r){let t=!0;for(let e in r){t=!1;break}return t}var c=class{id;props;userData={};_device;destroyed=!1;allocatedBytes=0;_attachedResources=new Set;constructor(t,e,o){if(!t)throw new Error("no device");this._device=t,this.props=Xe(e,o);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}toString(){return`${this[Symbol.toStringTag]||this.constructor.name}(${this.id})`}getProps(){return this.props}attachResource(t){this._attachedResources.add(t)}detachResource(t){this._attachedResources.delete(t)}destroyAttachedResource(t){this._attachedResources.delete(t)&&t.destroy()}destroyAttachedResources(){for(let t of Object.values(this._attachedResources))t.destroy();this._attachedResources=new Set}destroyResource(){this.destroyAttachedResources(),this.removeStats(),this.destroyed=!0}removeStats(){let t=this._device.statsManager.getStats("Resource Counts"),e=this[Symbol.toStringTag];t.get(`${e}s Active`).decrementCount()}trackAllocatedMemory(t,e=this[Symbol.toStringTag]){let o=this._device.statsManager.getStats("Resource Counts");o.get("GPU Memory").addCount(t),o.get(`${e} Memory`).addCount(t),this.allocatedBytes=t}trackDeallocatedMemory(t=this[Symbol.toStringTag]){let e=this._device.statsManager.getStats("Resource Counts");e.get("GPU Memory").subtractCount(this.allocatedBytes),e.get(`${t} Memory`).subtractCount(this.allocatedBytes),this.allocatedBytes=0}addStats(){let t=this._device.statsManager.getStats("Resource Counts"),e=this[Symbol.toStringTag];t.get("Resources Created").incrementCount(),t.get(`${e}s Created`).incrementCount(),t.get(`${e}s Active`).incrementCount()}};u(c,"defaultProps",{id:"undefined",handle:void 0,userData:void 0});function Xe(r,t){let e={...t};for(let o in r)r[o]!==void 0&&(e[o]=r[o]);return e}var U=class extends c{get[Symbol.toStringTag](){return"Buffer"}usage;indexType;updateTimestamp;constructor(t,e){let o={...e};(e.usage||0)&U.INDEX&&!e.indexType&&(e.data instanceof Uint32Array?o.indexType="uint32":e.data instanceof Uint16Array&&(o.indexType="uint16")),super(t,o,U.defaultProps),this.usage=e.usage||0,this.indexType=o.indexType,this.updateTimestamp=t.incrementTimestamp()}readSyncWebGL(t,e){throw new Error("not implemented")}debugData=new ArrayBuffer(0);_setDebugData(t,e,o){let n=ArrayBuffer.isView(t)?t.buffer:t,s=Math.min(t?t.byteLength:o,U.DEBUG_DATA_MAX_LENGTH);t===null?this.debugData=new ArrayBuffer(s):e===0&&o===t.byteLength?this.debugData=n.slice(0,s):this.debugData=n.slice(e,e+s)}},m=U;u(m,"defaultProps",{...c.defaultProps,usage:0,byteLength:0,byteOffset:0,data:null,indexType:"uint16",mappedAtCreation:!1}),u(m,"MAP_READ",1),u(m,"MAP_WRITE",2),u(m,"COPY_SRC",4),u(m,"COPY_DST",8),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,"DEBUG_DATA_MAX_LENGTH",32);function at(r){let t=ee[r],e=qe(t),o=r.includes("norm"),n=!o&&!r.startsWith("float"),s=r.startsWith("s");return{dataType:ee[r],byteLength:e,integer:n,signed:s,normalized:o}}function qe(r){return Ke[r]}var ee={uint8:"uint8",sint8:"sint8",unorm8:"uint8",snorm8:"sint8",uint16:"uint16",sint16:"sint16",unorm16:"uint16",snorm16:"sint16",float16:"float16",float32:"float32",uint32:"uint32",sint32:"sint32"},Ke={uint8:1,sint8:1,uint16:2,sint16:2,float16:2,float32:4,uint32:4,sint32:4};var Qe=["bc1","bc2","bc3","bc4","bc5","bc6","bc7","etc1","etc2","eac","atc","astc","pvrtc"],Ze=/^(rg?b?a?)([0-9]*)([a-z]*)(-srgb)?(-webgl|-unsized)?$/;function re(r){return Qe.some(t=>r.startsWith(t))}function oe(r){let t=Ze.exec(r);if(t){let[,e,o,n,s,i]=t;if(e){let a=`${n}${o}`,f=at(a);return{format:e,components:e.length,srgb:s==="-srgb",unsized:i==="-unsized",webgl:i==="-webgl",...f}}}return tr(r)}var Je={"rgba4unorm-webgl":{format:"rgba",bpp:2},"rgb565unorm-webgl":{format:"rgb",bpp:2},"rgb5a1unorm-webgl":{format:"rgba",bbp:2},rgb9e5ufloat:{format:"rgb",bbp:4},rg11b10ufloat:{format:"rgb",bbp:4},rgb10a2unorm:{format:"rgba",bbp:4},"rgb10a2uint-webgl":{format:"rgba",bbp:4},stencil8:{components:1,bpp:1,a:"stencil"},depth16unorm:{components:1,bpp:2,a:"depth"},depth24plus:{components:1,bpp:3,a:"depth"},depth32float:{components:1,bpp:4,a:"depth"},"depth24plus-stencil8":{components:2,bpp:4,a:"depth-stencil"},"depth24unorm-stencil8":{components:2,bpp:4,a:"depth-stencil"},"depth32float-stencil8":{components:2,bpp:4,a:"depth-stencil"}};function tr(r){let t=Je[r];if(!t)throw new Error(`Unknown format ${r}`);return{format:t.format||"",components:t.components||t.format?.length||1,byteLength:t.bpp||1,srgb:!1,unsized:!1}}var ut=class{},ct=class{features;disabledFeatures;constructor(t=[],e){this.features=new Set(t),this.disabledFeatures=e||{}}*[Symbol.iterator](){yield*this.features}has(t){return!this.disabledFeatures[t]&&this.features.has(t)}},St=class{get[Symbol.toStringTag](){return"Device"}constructor(t){this.props={...St.defaultProps,...t},this.id=this.props.id||S(this[Symbol.toStringTag].toLowerCase())}id;props;userData={};statsManager=I;_lumaData={};isTextureFormatCompressed(t){return re(t)}loseDevice(){return!1}getCanvasContext(){if(!this.canvasContext)throw new Error("Device has no CanvasContext");return this.canvasContext}createTexture(t){return(t instanceof Promise||typeof t=="string")&&(t={data:t}),this._createTexture(t)}createCommandEncoder(t={}){throw new Error("not implemented")}readPixelsToArrayWebGL(t,e){throw new Error("not implemented")}readPixelsToBufferWebGL(t,e){throw new Error("not implemented")}setParametersWebGL(t){throw new Error("not implemented")}getParametersWebGL(t){throw new Error("not implemented")}withParametersWebGL(t,e){throw new Error("not implemented")}clearWebGL(t){throw new Error("not implemented")}timestamp=0;incrementTimestamp(){return this.timestamp++}onError(t){this.props.onError(t)}_getBufferProps(t){(t instanceof ArrayBuffer||ArrayBuffer.isView(t))&&(t={data:t});let e={...t};return(t.usage||0)&m.INDEX&&!t.indexType&&(t.data instanceof Uint32Array?e.indexType="uint32":t.data instanceof Uint16Array?e.indexType="uint16":l.warn("indices buffer content must be of integer type")()),e}},x=St;u(x,"defaultProps",{id:null,canvas:null,container:null,manageState:!0,width:800,height:600,requestMaxLimits:!0,debug:Boolean(l.get("debug")),spector:Boolean(l.get("spector")),break:[],initalizeFeatures:!0,disabledFeatures:{"compilation-status-async-webgl":!0},gl:null,onError:t=>l.error(t.message)}),u(x,"VERSION",it);function L(r,t){if(!r)throw new Error(t||"luma.gl: assertion failed.")}var E=new Map,R=class{static registerDevices(t){for(let e of t)L(e.type&&e.isSupported&&e.create),E.set(e.type,e)}static getAvailableDevices(){return Array.from(E).map(t=>t.type)}static getSupportedDevices(){return Array.from(E).filter(t=>t.isSupported()).map(t=>t.type)}static setDefaultDeviceProps(t){Object.assign(x.defaultProps,t)}static async createDevice(t={}){t={...x.defaultProps,...t},t.gl&&(t.type="webgl");let e;switch(t.type){case"webgpu":if(e=E.get("webgpu"),e)return await e.create(t);break;case"webgl":if(e=E.get("webgl"),e)return await e.create(t);break;case"best-available":if(e=E.get("webgpu"),e&&e.isSupported())return await e.create(t);if(e=E.get("webgl"),e&&e.isSupported())return await e.create(t);break}throw new Error("No matching device found. Ensure `@luma.gl/webgl` and/or `@luma.gl/webgpu` modules are imported.")}};u(R,"stats",I),u(R,"log",l);var er=d()&&typeof document<"u",ft=()=>er&&document.readyState==="complete",rr={canvas:null,width:800,height:600,useDevicePixels:!0,autoResize:!0,container:null,visible:!0,colorSpace:"srgb",alphaMode:"opaque"},D=class{id;props;canvas;htmlCanvas;offscreenCanvas;type;width=1;height=1;resizeObserver;_canvasSizeInfo={clientWidth:0,clientHeight:0,devicePixelRatio:1};static get isPageLoaded(){return ft()}constructor(t){if(this.props={...rr,...t},t=this.props,!d()){this.id="node-canvas-context",this.type="node",this.width=this.props.width,this.height=this.props.height,this.canvas=null;return}if(t.canvas)typeof t.canvas=="string"?this.canvas=sr(t.canvas):this.canvas=t.canvas;else{let e=ir(t),o=nr(t?.container||null);o.insertBefore(e,o.firstChild),this.canvas=e,t?.visible||(this.canvas.style.visibility="hidden")}this.canvas instanceof HTMLCanvasElement?(this.id=this.canvas.id,this.type="html-canvas",this.htmlCanvas=this.canvas):(this.id="offscreen-canvas",this.type="offscreen-canvas",this.offscreenCanvas=this.canvas),this.canvas instanceof HTMLCanvasElement&&t.autoResize&&(this.resizeObserver=new ResizeObserver(e=>{for(let o of e)o.target===this.canvas&&this.update()}),this.resizeObserver.observe(this.canvas))}getDevicePixelRatio(t){return typeof OffscreenCanvas<"u"&&this.canvas instanceof OffscreenCanvas||(t=t===void 0?this.props.useDevicePixels:t,!t||t<=0)?1:t===!0?typeof window<"u"&&window.devicePixelRatio||1:t}getPixelSize(){switch(this.type){case"node":return[this.width,this.height];case"offscreen-canvas":return[this.canvas.width,this.canvas.height];case"html-canvas":let t=this.getDevicePixelRatio(),e=this.canvas;return e.parentElement?[e.clientWidth*t,e.clientHeight*t]:[this.canvas.width,this.canvas.height];default:throw new Error(this.type)}}getAspect(){let[t,e]=this.getPixelSize();return t/e}cssToDeviceRatio(){try{let[t]=this.getDrawingBufferSize(),{clientWidth:e}=this._canvasSizeInfo;return e?t/e:1}catch{return 1}}cssToDevicePixels(t,e=!0){let o=this.cssToDeviceRatio(),[n,s]=this.getDrawingBufferSize();return ar(t,o,n,s,e)}setDevicePixelRatio(t,e={}){if(!this.htmlCanvas)return;let o="width"in e?e.width:this.htmlCanvas.clientWidth,n="height"in e?e.height:this.htmlCanvas.clientHeight;(!o||!n)&&(l.log(1,"Canvas clientWidth/clientHeight is 0")(),t=1,o=this.htmlCanvas.width||1,n=this.htmlCanvas.height||1);let s=this._canvasSizeInfo;if(s.clientWidth!==o||s.clientHeight!==n||s.devicePixelRatio!==t){let i=t,a=Math.floor(o*i),f=Math.floor(n*i);this.htmlCanvas.width=a,this.htmlCanvas.height=f;let[g,b]=this.getDrawingBufferSize();(g!==a||b!==f)&&(i=Math.min(g/o,b/n),this.htmlCanvas.width=Math.floor(o*i),this.htmlCanvas.height=Math.floor(n*i),l.warn("Device pixel ratio clamped")()),this._canvasSizeInfo.clientWidth=o,this._canvasSizeInfo.clientHeight=n,this._canvasSizeInfo.devicePixelRatio=t}}getDrawingBufferSize(){let t=this.device.gl;if(!t)throw new Error("canvas size");return[t.drawingBufferWidth,t.drawingBufferHeight]}_setAutoCreatedCanvasId(t){this.htmlCanvas?.id==="lumagl-auto-created-canvas"&&(this.htmlCanvas.id=t)}};u(D,"pageLoaded",or());function or(){return ft()||typeof window>"u"?Promise.resolve():new Promise(r=>{window.addEventListener("load",()=>r())})}function nr(r){if(typeof r=="string"){let t=document.getElementById(r);if(!t&&!ft())throw new Error(`Accessing '${r}' before page was loaded`);if(!t)throw new Error(`${r} is not an HTML element`);return t}else if(r)return r;return document.body}function sr(r){let t=document.getElementById(r);if(!t&&!ft())throw new Error(`Accessing '${r}' before page was loaded`);if(!(t instanceof HTMLCanvasElement))throw new Error("Object is not a canvas element");return t}function ir(r){let{width:t,height:e}=r,o=document.createElement("canvas");return o.id="lumagl-auto-created-canvas",o.width=t||1,o.height=e||1,o.style.width=Number.isFinite(t)?`${t}px`:"100%",o.style.height=Number.isFinite(e)?`${e}px`:"100%",o}function ar(r,t,e,o,n){let s=r,i=ne(s[0],t,e),a=se(s[1],t,o,n),f=ne(s[0]+1,t,e),g=f===e-1?f:f-1;f=se(s[1]+1,t,o,n);let b;return n?(f=f===0?f:f+1,b=a,a=f):b=f===o-1?f:f-1,{x:i,y:a,width:Math.max(g-i+1,1),height:Math.max(b-a+1,1)}}function ne(r,t,e){return Math.min(Math.round(r*t),e-1)}function se(r,t,e,o){return o?Math.max(0,e-1-Math.round(r*t)):Math.min(Math.round(r*t),e-1)}var Tt=class extends c{get[Symbol.toStringTag](){return"Texture"}dimension;format;width;height;depth;updateTimestamp;constructor(t,e,o=Tt.defaultProps){super(t,e,o),this.dimension=this.props.dimension,this.format=this.props.format,this.width=this.props.width,this.height=this.props.height,this.depth=this.props.depth,this.updateTimestamp=t.incrementTimestamp()}},h=Tt;u(h,"defaultProps",{...c.defaultProps,data:null,dimension:"2d",format:"rgba8unorm",width:void 0,height:void 0,depth:1,mipmaps:!0,compressed:!1,usage:0,mipLevels:void 0,samples:void 0,type:void 0,sampler:{},view:void 0}),u(h,"COPY_SRC",1),u(h,"COPY_DST",2),u(h,"TEXTURE_BINDING",4),u(h,"STORAGE_BINDING",8),u(h,"RENDER_ATTACHMENT",16);var At=class extends c{get[Symbol.toStringTag](){return"TextureView"}constructor(t,e){super(t,e,At.defaultProps)}},z=At;u(z,"defaultProps",{...c.defaultProps,format:void 0,dimension:void 0,aspect:"all",baseMipLevel:0,mipLevelCount:void 0,baseArrayLayer:0,arrayLayerCount:void 0});var vt=class extends c{get[Symbol.toStringTag](){return"ExternalTexture"}constructor(t,e){super(t,e,vt.defaultProps)}},H=vt;u(H,"defaultProps",{...c.defaultProps,source:null,colorSpace:"srgb"});function lt(r,t,e){let o="",n=t.split(/\r?\n/),s=r.slice().sort((i,a)=>i.lineNum-a.lineNum);switch(e?.showSourceCode||"no"){case"all":let i=0;for(let a=1;a<=n.length;a++)for(o+=ae(n[a-1],a,e);s.length>i&&s[i].lineNum===a;){let f=s[i++];o+=ie(f,n,f.lineNum,{...e,inlineSource:!1})}return o;case"issues":case"no":for(let a of r)o+=ie(a,n,a.lineNum,{inlineSource:e?.showSourceCode!=="no"});return o}}function ie(r,t,e,o){if(o?.inlineSource){let n=ur(t,e),s=r.linePos>0?`${" ".repeat(r.linePos+5)}^^^
|
|
8
|
+
`:"";return`
|
|
9
|
+
${n}${s}${r.type.toUpperCase()}: ${r.message}
|
|
10
|
+
|
|
11
|
+
`}return o?.html?`<div class='luma-compiler-log-error' style="color:red;"><b> ${r.type.toUpperCase()}: ${r.message}</b></div>`:`${r.type.toUpperCase()}: ${r.message}`}function ur(r,t,e){let o="";for(let n=t-2;n<=t;n++){let s=r[n-1];s!==void 0&&(o+=ae(s,t,e))}return o}function ae(r,t,e){let o=e?.html?fr(r):r;return`${cr(String(t),4)}: ${o}${e?.html?"<br/>":`
|
|
12
|
+
`}`}function cr(r,t){let e="";for(let o=r.length;o<t;++o)e+=" ";return e+r}function fr(r){return r.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function Et(r,t){return{name:lr(r,t),language:"glsl",version:mr(r)}}function lr(r,t="unnamed"){let o=/#define[\s*]SHADER_NAME[\s*]([A-Za-z0-9_-]+)[\s*]/.exec(r);return o?o[1]:t}function mr(r){let t=100,e=r.match(/[^\s]+/g);if(e&&e.length>=2&&e[0]==="#version"){let o=parseInt(e[1],10);Number.isFinite(o)&&(t=o)}return t}var _t=class extends c{get[Symbol.toStringTag](){return"Shader"}stage;source;compilationStatus="pending";constructor(t,e){super(t,{id:dr(e),...e},_t.defaultProps),this.stage=this.props.stage,this.source=this.props.source}getCompilationInfoSync(){return null}getTranslatedSource(){return null}async debugShader(t=this.props.debug){switch(t){case"never":return;case"errors":if(this.compilationStatus==="success")return;break;case"warnings":case"always":break}let e=await this.getCompilationInfo();this.props.debug==="warnings"&&e?.length===0||this._displayShaderLog(e)}_displayShaderLog(t){if(typeof document>"u"||!document?.createElement)return;let e=Et(this.source).name,o=`${this.stage} ${e}`,n=lt(t,this.source,{showSourceCode:"all",html:!0}),s=this.getTranslatedSource();s&&(n+=`<br /><br /><h1>Translated Source</h1><br /><br /><code style="user-select:text;"><pre>${s}</pre></code>`);let i=document.createElement("Button");i.innerHTML=`
|
|
13
|
+
<h1>Shader Compilation Error in ${o}</h1><br /><br />
|
|
14
|
+
<code style="user-select:text;"><pre>
|
|
15
|
+
${n}
|
|
16
|
+
</pre></code>`,i.style.top="10px",i.style.left="10px",i.style.position="absolute",i.style.zIndex="9999",i.style.width="100%",i.style.textAlign="left",document.body.appendChild(i);let a=document.getElementsByClassName("luma-compiler-log-error");a[0]?.scrollIntoView&&a[0].scrollIntoView(),i.onclick=()=>{let f=`data:text/plain,${encodeURIComponent(this.source)}`;navigator.clipboard.writeText(f)}}},k=_t;u(k,"defaultProps",{...c.defaultProps,language:"auto",stage:void 0,source:"",sourceMap:null,entryPoint:"main",debug:"errors"});function dr(r){return Et(r.source).name||r.id||S(`unnamed ${r.stage}-shader`)}var Pt=class extends c{get[Symbol.toStringTag](){return"Sampler"}constructor(t,e){super(t,e,Pt.defaultProps)}},G=Pt;u(G,"defaultProps",{...c.defaultProps,type:"color-sampler",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",addressModeW:"clamp-to-edge",magFilter:"nearest",minFilter:"nearest",mipmapFilter:"nearest",lodMinClamp:0,lodMaxClamp:32,compare:"less-equal",maxAnisotropy:1});var Bt=class extends c{get[Symbol.toStringTag](){return"Framebuffer"}width;height;colorAttachments=[];depthStencilAttachment=null;constructor(t,e={}){super(t,e,Bt.defaultProps),this.width=this.props.width,this.height=this.props.height}resize(t){let e=!t;if(t){let[o,n]=Array.isArray(t)?t:[t.width,t.height];e=e||n!==this.height||o!==this.width,this.width=o,this.height=n}e&&(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(e=>{if(typeof e=="string"){let o=this.createColorTexture(e);return this.attachResource(o),o.view}return e instanceof h?e.view:e});let t=this.props.depthStencilAttachment;if(t)if(typeof t=="string"){let e=this.createDepthStencilTexture(t);this.attachResource(e),this.depthStencilAttachment=e.view}else t instanceof h?this.depthStencilAttachment=t.view:this.depthStencilAttachment=t}createColorTexture(t){return this.device.createTexture({id:"color-attachment",usage:h.RENDER_ATTACHMENT,format:t,width:this.width,height:this.height})}createDepthStencilTexture(t){return this.device.createTexture({id:"depth-stencil-attachment",usage:h.RENDER_ATTACHMENT,format:t,width:this.width,height:this.height})}resizeAttachments(t,e){for(let o=0;o<this.colorAttachments.length;++o)if(this.colorAttachments[o]){let n=this.device._createTexture({...this.colorAttachments[o].props,width:t,height:e});this.destroyAttachedResource(this.colorAttachments[o]),this.colorAttachments[o]=n.view,this.attachResource(n.view)}if(this.depthStencilAttachment){let o=this.device._createTexture({...this.depthStencilAttachment.props,width:t,height:e});this.destroyAttachedResource(this.depthStencilAttachment),this.depthStencilAttachment=o.view,this.attachResource(o)}}},V=Bt;u(V,"defaultProps",{...c.defaultProps,width:1,height:1,colorAttachments:[],depthStencilAttachment:null});var Ct=class extends c{get[Symbol.toStringTag](){return"RenderPipeline"}shaderLayout;bufferLayout;linkStatus="pending";hash="";constructor(t,e){super(t,e,Ct.defaultProps),this.shaderLayout=this.props.shaderLayout,this.bufferLayout=this.props.bufferLayout||[]}setUniformsWebGL(t){throw new Error("Use uniform blocks")}},O=Ct;u(O,"defaultProps",{...c.defaultProps,vs:null,vertexEntryPoint:"vertexMain",vsConstants:{},fs:null,fragmentEntryPoint:"fragmentMain",fsConstants:{},shaderLayout:null,bufferLayout:[],topology:"triangle-list",parameters:{},vertexCount:0,instanceCount:0,bindings:{},uniforms:{}});var It=class extends c{get[Symbol.toStringTag](){return"RenderPass"}constructor(t,e){super(t,e,It.defaultProps)}},W=It;u(W,"defaultProps",{...c.defaultProps,framebuffer:null,parameters:void 0,clearColor:[0,0,0,0],clearDepth:1,clearStencil:0,depthReadOnly:!1,stencilReadOnly:!1,discard:!1,occlusionQuerySet:void 0,timestampQuerySet:void 0,beginTimestampIndex:void 0,endTimestampIndex:void 0});var Lt=class extends c{get[Symbol.toStringTag](){return"ComputePipeline"}hash="";constructor(t,e){super(t,e,Lt.defaultProps)}},j=Lt;u(j,"defaultProps",{...c.defaultProps,shader:void 0,entryPoint:void 0,constants:{},shaderLayout:void 0});var Rt=class extends c{get[Symbol.toStringTag](){return"ComputePass"}constructor(t,e){super(t,e,Rt.defaultProps)}},Y=Rt;u(Y,"defaultProps",{...c.defaultProps,timestampQuerySet:void 0,beginTimestampIndex:void 0,endTimestampIndex:void 0});var Mt=class extends c{get[Symbol.toStringTag](){return"CommandEncoder"}constructor(t,e){super(t,e,Mt.defaultProps)}},X=Mt;u(X,"defaultProps",{...c.defaultProps,measureExecutionTime:void 0});var $t=class extends c{get[Symbol.toStringTag](){return"CommandBuffer"}constructor(t,e){super(t,e,$t.defaultProps)}},q=$t;u(q,"defaultProps",{...c.defaultProps});function mt(r){let[t,e]=pr[r],o=t==="i32"||t==="u32",n=t!=="u32",s=gr[t]*e,i=hr(t,e);return{dataType:t,components:e,defaultVertexFormat:i,byteLength:s,integer:o,signed:n}}function hr(r,t){let e;switch(r){case"f32":e="float32";break;case"i32":e="sint32";break;case"u32":e="uint32";break;case"f16":return t<=2?"float16x2":"float16x4"}return t===1?e:`${e}x${t}`}var pr={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]},gr={f32:4,f16:2,i32:4,u32:4};function K(r){let t;r.endsWith("-webgl")&&(r.replace("-webgl",""),t=!0);let[e,o]=r.split("x"),n=e,s=o?parseInt(o):1,i=at(n),a={type:n,components:s,byteLength:i.byteLength*s,integer:i.integer,signed:i.signed,normalized:i.normalized};return t&&(a.webglOnly=!0),a}function Nt(r,t){let e={};for(let o of r.attributes)e[o.name]=yr(r,t,o.name);return e}function ue(r,t,e=16){let o=Nt(r,t),n=new Array(e).fill(null);for(let s of Object.values(o))n[s.location]=s;return n}function yr(r,t,e){let o=br(r,e),n=xr(t,e);if(!o)return null;let s=mt(o.type),i=n?.vertexFormat||s.defaultVertexFormat,a=K(i);return{attributeName:n?.attributeName||o.name,bufferName:n?.bufferName||o.name,location:o.location,shaderType:o.type,shaderDataType:s.dataType,shaderComponents:s.components,vertexFormat:i,bufferDataType:a.type,bufferComponents:a.components,normalized:a.normalized,integer:s.integer,stepMode:n?.stepMode||o.stepMode,byteOffset:n?.byteOffset||0,byteStride:n?.byteStride||0}}function br(r,t){let e=r.attributes.find(o=>o.name===t);return e||l.warn(`shader layout attribute "${t}" not present in shader`),e||null}function xr(r,t){wr(r);let e=Sr(r,t);return e||(e=Tr(r,t),e)?e:(l.warn(`layout for attribute "${t}" not present in buffer layout`),null)}function wr(r){for(let t of r)(t.attributes&&t.format||!t.attributes&&!t.format)&&l.warn(`BufferLayout ${name} must have either 'attributes' or 'format' field`)}function Sr(r,t){for(let e of r)if(e.format&&e.name===t)return{attributeName:e.name,bufferName:t,stepMode:e.stepMode,vertexFormat:e.format,byteOffset:0,byteStride:e.byteStride||0};return null}function Tr(r,t){for(let e of r){let o=e.byteStride;if(typeof e.byteStride!="number")for(let s of e.attributes||[]){let i=K(s.format);o+=i.byteLength}let n=e.attributes?.find(s=>s.attribute===t);if(n)return{attributeName:n.attribute,bufferName:e.name,stepMode:e.stepMode,vertexFormat:n.format,byteOffset:n.byteOffset,byteStride:o}}return null}function ce(r,t){let e={...r,attributes:r.attributes.map(o=>({...o}))};for(let o of t?.attributes||[]){let n=e.attributes.find(s=>s.name===o.name);n?(n.type=o.type||n.type,n.stepMode=o.stepMode||n.stepMode):l.warn(`shader layout attribute ${o.name} not present in shader`)}return e}var Ft=class extends c{get[Symbol.toStringTag](){return"VertexArray"}maxVertexAttributes;attributeInfos;indexBuffer=null;attributes;constructor(t,e){super(t,e,Ft.defaultProps),this.maxVertexAttributes=t.limits.maxVertexAttributes,this.attributes=new Array(this.maxVertexAttributes).fill(null),this.attributeInfos=ue(e.renderPipeline.shaderLayout,e.renderPipeline.bufferLayout,this.maxVertexAttributes)}setConstantWebGL(t,e){throw new Error("constant attributes not supported")}},Q=Ft;u(Q,"defaultProps",{...c.defaultProps,renderPipeline:null});var Ut=class extends c{get[Symbol.toStringTag](){return"TransformFeedback"}constructor(t,e){super(t,e,Ut.defaultProps)}},Z=Ut;u(Z,"defaultProps",{...c.defaultProps,layout:void 0,buffers:{}});var Dt=class extends c{get[Symbol.toStringTag](){return"QuerySet"}constructor(t,e){super(t,e,Dt.defaultProps)}},J=Dt;u(J,"defaultProps",{...c.defaultProps,type:void 0,count:void 0});var Ar={f32:{type:"f32",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<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}};function dt(r){let t=Ar[r];return L(r),t}function fe(r,t){switch(t){case 1:return r;case 2:return r+r%2;default:return r+(4-r%4)%4}}var ht;function tt(r){return(!ht||ht.byteLength<r)&&(ht=new ArrayBuffer(r)),ht}function le(r,t){let e=tt(r.BYTES_PER_ELEMENT*t);return new r(e,0,t)}function me(r){let{target:t,source:e,start:o=0,count:n=1}=r,s=e.length,i=n*s,a=0;for(let f=o;a<s;a++)t[f++]=e[a];for(;a<i;)a<i-a?(t.copyWithin(o+a,o,o+a),a*=2):(t.copyWithin(o+a,o,o+i-a),a=i);return r.target}var de=1024,M=class{layout={};byteLength;constructor(t){let e=0;for(let[n,s]of Object.entries(t)){let i=dt(s),{type:a,components:f}=i;e=fe(e,f);let g=e;e+=f,this.layout[n]={type:a,size:f,offset:g}}e+=(4-e%4)%4;let o=e*4;this.byteLength=Math.max(o,de)}getData(t){let e=Math.max(this.byteLength,de),o=tt(e),n={i32:new Int32Array(o),u32:new Uint32Array(o),f32:new Float32Array(o),f16:new Uint16Array(o)};for(let[s,i]of Object.entries(t)){let a=this.layout[s];if(!a){l.warn(`Supplied uniform value ${s} not present in uniform block layout`)();continue}let{type:f,size:g,offset:b}=a,Vt=n[f];if(g===1){if(typeof i!="number"&&typeof i!="boolean"){l.warn(`Supplied value for single component uniform ${s} is not a number: ${i}`)();continue}Vt[b]=Number(i)}else{let Ot=y(i);if(!Ot){l.warn(`Supplied value for multi component / array uniform ${s} is not a numeric array: ${i}`)();continue}Vt.set(Ot,b)}}return new Uint8Array(o)}has(t){return Boolean(this.layout[t])}get(t){return this.layout[t]}};function he(r,t,e=16){if(r!==t)return!1;let o=y(r);if(!o)return!1;let n=y(t);if(n&&o.length===n.length){for(let s=0;s<o.length;++s)if(n[s]!==o[s])return!1}return!0}function pe(r){let t=y(r);return t?t.slice():r}var $=class{name;uniforms={};modifiedUniforms={};modified=!0;bindingLayout={};needsRedraw="initialized";constructor(t){if(this.name=t?.name,t?.name&&t?.shaderLayout){let e=t?.shaderLayout.bindings?.find(n=>n.type==="uniform"&&n.name===t?.name);if(!e)throw new Error(t?.name);let o=e;for(let n of o.uniforms||[])this.bindingLayout[n.name]=n}}setUniforms(t){for(let[e,o]of Object.entries(t))this._setUniform(e,o),this.needsRedraw||this.setNeedsRedraw(`${this.name}.${e}=${o}`)}setNeedsRedraw(t){this.needsRedraw=this.needsRedraw||t}getAllUniforms(){return this.modifiedUniforms={},this.needsRedraw=!1,this.uniforms||{}}_setUniform(t,e){he(this.uniforms[t],e)||(this.uniforms[t]=pe(e),this.modifiedUniforms[t]=!0,this.modified=!0)}};var pt=class{uniformBlocks=new Map;uniformBufferLayouts=new Map;uniformBuffers=new Map;constructor(t){for(let[e,o]of Object.entries(t)){let n=e,s=new M(o.uniformTypes||{});this.uniformBufferLayouts.set(n,s);let i=new $({name:e});i.setUniforms(o.defaultUniforms||{}),this.uniformBlocks.set(n,i)}}destroy(){for(let t of this.uniformBuffers.values())t.destroy()}setUniforms(t){for(let[e,o]of Object.entries(t))this.uniformBlocks.get(e).setUniforms(o);this.updateUniformBuffers()}getUniformBufferByteLength(t){return this.uniformBufferLayouts.get(t).byteLength}getUniformBufferData(t){let e=this.uniformBlocks.get(t).getAllUniforms();return this.uniformBufferLayouts.get(t).getData(e)}createUniformBuffer(t,e,o){o&&this.setUniforms(o);let n=this.getUniformBufferByteLength(e),s=t.createBuffer({usage:m.UNIFORM|m.COPY_DST,byteLength:n}),i=this.getUniformBufferData(e);return s.write(i),s}getManagedUniformBuffer(t,e){if(!this.uniformBuffers.get(e)){let o=this.getUniformBufferByteLength(e),n=t.createBuffer({usage:m.UNIFORM|m.COPY_DST,byteLength:o});this.uniformBuffers.set(e,n)}return this.uniformBuffers.get(e)}updateUniformBuffers(){let t=!1;for(let e of this.uniformBlocks.keys()){let o=this.updateUniformBuffer(e);t||=o}return t&&l.log(3,`UniformStore.updateUniformBuffers(): ${t}`)(),t}updateUniformBuffer(t){let e=this.uniformBlocks.get(t),o=this.uniformBuffers.get(t),n=!1;if(o&&e.needsRedraw){n||=e.needsRedraw;let s=this.getUniformBufferData(t);this.uniformBuffers.get(t).write(s);let a=this.uniformBlocks.get(t).getAllUniforms();l.log(4,`Writing to uniform buffer ${String(t)}`,s,a)()}return n}};function zt(r){let t=ArrayBuffer.isView(r)?r.constructor:r;switch(t){case Float32Array:return"float32";case Uint16Array:return"uint16";case Uint32Array:return"uint32";case Uint8Array:case Uint8ClampedArray:return"uint8";case Int8Array:return"sint8";case Int16Array:return"sint16";case Int32Array:return"sint32";default:throw new Error(t.constructor.name)}}function ge(r){switch(r){case"float32":return Float32Array;case"uint32":return Uint32Array;case"sint32":return Int32Array;case"uint16":case"unorm16":return Uint16Array;case"sint16":case"snorm16":return Int16Array;case"uint8":case"unorm8":return Uint8Array;case"sint8":case"snorm8":return Int8Array;default:throw new Error(r)}}function ye(r,t,e){if(!t||t>4)throw new Error(`size ${t}`);let o=t,n=zt(r);if(n==="uint8"||n==="sint8"){if(o===1||o===3)throw new Error(`size: ${t}`);return e&&(n=n.replace("int","norm")),`${n}x${o}`}if(n==="uint16"||n==="sint16"){if(o===1||o===3)throw new Error(`size: ${t}`);return e&&(n=n.replace("int","norm")),`${n}x${o}`}return o===1?n:`${n}x${o}`}function be(r){return r}function Ht(r){return y(r)!==null||typeof r=="number"||typeof r=="boolean"}function xe(r){let t={bindings:{},uniforms:{}};return Object.keys(r).forEach(e=>{let o=r[e];Ht(o)?t.uniforms[e]=o:t.bindings[e]=o}),t}function vr(r,t={}){let{maxElts:e=16,size:o=1}=t,n="[";for(let i=0;i<r.length&&i<e;++i)i>0&&(n+=`,${i%o===0?" ":""}`),n+=kt(r[i],t);let s=r.length>e?"...":"]";return`${n}${s}`}function kt(r,t={}){let{isInteger:o=!1}=t;if(Array.isArray(r)||ArrayBuffer.isView(r))return vr(r,t);if(typeof r!="number")return String(r);if(Math.abs(r)<1e-16)return o?"0":"0.";if(o||Math.abs(r)>100&&Math.abs(r)<1e4)return r.toFixed(0);let n=r.toPrecision(2);return n.indexOf(".0")===n.length-2?n.slice(0,-1):n}function we(r,t,e,o){let n=`See luma.gl ${e} Upgrade Guide at https://luma.gl/docs/upgrade-guide`,s=Object.getPrototypeOf(r);o.forEach(i=>{s.methodName||(s[i]=()=>{throw l.removed(`Calling removed method ${t}.${i}: `,n)(),new Error(i)})})}function Se(r,t,e){let{removedProps:o={},deprecatedProps:n={},replacedProps:s={}}=e;for(let a in o)if(a in t){let g=o[a]?`${r}.${o[a]}`:"N/A";l.removed(`${r}.${a}`,g)()}for(let a in n)if(a in t){let f=n[a];l.deprecated(`${r}.${a}`,`${r}.${f}`)()}let i=null;for(let[a,f]of Object.entries(s))a in t&&(l.deprecated(`${r}.${a}`,`${r}.${f}`)(),i=i||Object.assign({},t),i[f]=t[a],delete i[a]);return i||t}var gt="";function Te(r){gt=r}async function Ae(r,t){r=r.startsWith("http")?r:gt+r;let e=t?.dataType||"text";return await(await fetch(r,t))[e]()}async function ve(r,t){let e=new Image;return e.crossOrigin=t?.crossOrigin||"anonymous",e.src=r.startsWith("http")?r:gt+r,await e.decode(),await createImageBitmap(e)}async function Ee(r,t){return await new Promise((e,o)=>{try{let n=new Image;n.onload=()=>e(n),n.onerror=()=>o(new Error(`Could not load image ${r}.`)),n.crossOrigin=t?.crossOrigin||"anonymous",n.src=r.startsWith("http")?r:gt+r}catch(n){o(n)}})}async function _e(r,t){let e=document.getElementsByTagName("head")[0];if(!e)throw new Error("loadScript");let o=document.createElement("script");return o.setAttribute("type","text/javascript"),o.setAttribute("src",r),t&&(o.id=t),new Promise((n,s)=>{o.onload=n,o.onerror=i=>s(new Error(`Unable to load script '${r}': ${i}`)),e.appendChild(o)})}function Gt(){let r=1,t=1;return()=>(r=Math.sin(t*17.23),t=Math.cos(r*27.92),Er(Math.abs(r*t)*1432.71))}function Er(r){return r-Math.floor(r)}var Pe=Gt();function yt(r,t,e){if(r===t)return!0;if(!e||!r||!t)return!1;if(Array.isArray(r)){if(!Array.isArray(t)||r.length!==t.length)return!1;for(let o=0;o<r.length;o++)if(!yt(r[o],t[o],e-1))return!1;return!0}if(Array.isArray(t))return!1;if(typeof r=="object"&&typeof t=="object"){let o=Object.keys(r),n=Object.keys(t);if(o.length!==n.length)return!1;for(let s of o)if(!t.hasOwnProperty(s)||!yt(r[s],t[s],e-1))return!1;return!0}return!1}function Be(r){return typeof window<"u"&&window.requestAnimationFrame?window.requestAnimationFrame(r):setTimeout(r,1e3/60)}function Ce(r){return typeof window<"u"&&window.cancelAnimationFrame?window.cancelAnimationFrame(r):clearTimeout(r)}var _r=r=>`${r}`;return Fe(Pr);})();
|
|
17
|
+
return __exports__;
|
|
18
|
+
});
|
package/dist/index.cjs
CHANGED
|
@@ -116,7 +116,7 @@ var lumaStats = new StatsManager();
|
|
|
116
116
|
|
|
117
117
|
// dist/init.js
|
|
118
118
|
function initializeLuma() {
|
|
119
|
-
const VERSION2 = true ? "9.0.0-beta.
|
|
119
|
+
const VERSION2 = true ? "9.0.0-beta.7" : "running from source";
|
|
120
120
|
const STARTUP_MESSAGE = "set luma.log.level=1 (or higher) to trace rendering";
|
|
121
121
|
if (globalThis.luma && globalThis.luma.VERSION !== VERSION2) {
|
|
122
122
|
throw new Error(`luma.gl - multiple VERSIONs detected: ${globalThis.luma.VERSION} vs ${VERSION2}`);
|
|
@@ -304,6 +304,8 @@ var _Buffer = class extends Resource {
|
|
|
304
304
|
usage;
|
|
305
305
|
/** For index buffers, whether indices are 16 or 32 bit */
|
|
306
306
|
indexType;
|
|
307
|
+
/** "Time" of last update */
|
|
308
|
+
updateTimestamp;
|
|
307
309
|
constructor(device, props) {
|
|
308
310
|
const deducedProps = { ...props };
|
|
309
311
|
if ((props.usage || 0) & _Buffer.INDEX && !props.indexType) {
|
|
@@ -316,6 +318,7 @@ var _Buffer = class extends Resource {
|
|
|
316
318
|
super(device, deducedProps, _Buffer.defaultProps);
|
|
317
319
|
this.usage = props.usage || 0;
|
|
318
320
|
this.indexType = deducedProps.indexType;
|
|
321
|
+
this.updateTimestamp = device.incrementTimestamp();
|
|
319
322
|
}
|
|
320
323
|
/** Read data synchronously. @note WebGL2 only */
|
|
321
324
|
readSyncWebGL(byteOffset, byteLength) {
|
|
@@ -491,14 +494,16 @@ var DeviceLimits = class {
|
|
|
491
494
|
};
|
|
492
495
|
var DeviceFeatures = class {
|
|
493
496
|
features;
|
|
494
|
-
|
|
497
|
+
disabledFeatures;
|
|
498
|
+
constructor(features = [], disabledFeatures) {
|
|
495
499
|
this.features = new Set(features);
|
|
500
|
+
this.disabledFeatures = disabledFeatures || {};
|
|
496
501
|
}
|
|
497
502
|
*[Symbol.iterator]() {
|
|
498
503
|
yield* this.features;
|
|
499
504
|
}
|
|
500
505
|
has(feature) {
|
|
501
|
-
return this.features.has(feature);
|
|
506
|
+
return !this.disabledFeatures[feature] && this.features.has(feature);
|
|
502
507
|
}
|
|
503
508
|
};
|
|
504
509
|
var _Device = class {
|
|
@@ -511,12 +516,12 @@ var _Device = class {
|
|
|
511
516
|
}
|
|
512
517
|
/** id of this device, primarily for debugging */
|
|
513
518
|
id;
|
|
514
|
-
/** stats */
|
|
515
|
-
statsManager = lumaStats;
|
|
516
519
|
/** A copy of the device props */
|
|
517
520
|
props;
|
|
518
521
|
/** Available for the application to store data on the device */
|
|
519
522
|
userData = {};
|
|
523
|
+
/** stats */
|
|
524
|
+
statsManager = lumaStats;
|
|
520
525
|
/** Used by other luma.gl modules to store data on the device */
|
|
521
526
|
_lumaData = {};
|
|
522
527
|
/** Check if a specific texture format is GPU compressed */
|
|
@@ -573,12 +578,17 @@ var _Device = class {
|
|
|
573
578
|
clearWebGL(options) {
|
|
574
579
|
throw new Error("not implemented");
|
|
575
580
|
}
|
|
576
|
-
|
|
581
|
+
timestamp = 0;
|
|
582
|
+
/** A monotonic counter for tracking buffer and texture updates */
|
|
583
|
+
incrementTimestamp() {
|
|
584
|
+
return this.timestamp++;
|
|
585
|
+
}
|
|
577
586
|
// Error Handling
|
|
578
587
|
/** Report unhandled device errors */
|
|
579
588
|
onError(error) {
|
|
580
589
|
this.props.onError(error);
|
|
581
590
|
}
|
|
591
|
+
// IMPLEMENTATION
|
|
582
592
|
_getBufferProps(props) {
|
|
583
593
|
if (props instanceof ArrayBuffer || ArrayBuffer.isView(props)) {
|
|
584
594
|
props = { data: props };
|
|
@@ -599,19 +609,23 @@ var _Device = class {
|
|
|
599
609
|
var Device = _Device;
|
|
600
610
|
__publicField(Device, "defaultProps", {
|
|
601
611
|
id: null,
|
|
602
|
-
type: "best-available",
|
|
603
612
|
canvas: null,
|
|
604
613
|
container: null,
|
|
605
614
|
manageState: true,
|
|
606
615
|
width: 800,
|
|
607
616
|
// width are height are only used by headless gl
|
|
608
617
|
height: 600,
|
|
609
|
-
|
|
618
|
+
requestMaxLimits: true,
|
|
610
619
|
debug: Boolean(log.get("debug")),
|
|
611
620
|
// Instrument context (at the expense of performance)
|
|
612
621
|
spector: Boolean(log.get("spector")),
|
|
613
622
|
// Initialize the SpectorJS WebGL debugger
|
|
614
623
|
break: [],
|
|
624
|
+
// TODO - Change these after confirming things work as expected
|
|
625
|
+
initalizeFeatures: true,
|
|
626
|
+
disabledFeatures: {
|
|
627
|
+
"compilation-status-async-webgl": true
|
|
628
|
+
},
|
|
615
629
|
// alpha: undefined,
|
|
616
630
|
// depth: undefined,
|
|
617
631
|
// stencil: undefined,
|
|
@@ -978,6 +992,9 @@ var _Texture = class extends Resource {
|
|
|
978
992
|
height;
|
|
979
993
|
/** depth of this texture */
|
|
980
994
|
depth;
|
|
995
|
+
/** "Time" of last update. Monotonically increasing timestamp */
|
|
996
|
+
updateTimestamp;
|
|
997
|
+
/** Do not use directly. Create with device.createTexture() */
|
|
981
998
|
constructor(device, props, defaultProps = _Texture.defaultProps) {
|
|
982
999
|
super(device, props, defaultProps);
|
|
983
1000
|
this.dimension = this.props.dimension;
|
|
@@ -985,6 +1002,7 @@ var _Texture = class extends Resource {
|
|
|
985
1002
|
this.width = this.props.width;
|
|
986
1003
|
this.height = this.props.height;
|
|
987
1004
|
this.depth = this.props.depth;
|
|
1005
|
+
this.updateTimestamp = device.incrementTimestamp();
|
|
988
1006
|
}
|
|
989
1007
|
};
|
|
990
1008
|
var Texture = _Texture;
|
|
@@ -1230,7 +1248,7 @@ var Shader = _Shader;
|
|
|
1230
1248
|
__publicField(Shader, "defaultProps", {
|
|
1231
1249
|
...Resource.defaultProps,
|
|
1232
1250
|
language: "auto",
|
|
1233
|
-
stage:
|
|
1251
|
+
stage: void 0,
|
|
1234
1252
|
source: "",
|
|
1235
1253
|
sourceMap: null,
|
|
1236
1254
|
entryPoint: "main",
|
|
@@ -1299,6 +1317,9 @@ var _Framebuffer = class extends Resource {
|
|
|
1299
1317
|
}
|
|
1300
1318
|
/** Auto creates any textures */
|
|
1301
1319
|
autoCreateAttachmentTextures() {
|
|
1320
|
+
if (this.props.colorAttachments.length === 0 && !this.props.depthStencilAttachment) {
|
|
1321
|
+
throw new Error("Framebuffer has noattachments");
|
|
1322
|
+
}
|
|
1302
1323
|
this.colorAttachments = this.props.colorAttachments.map((attachment2) => {
|
|
1303
1324
|
if (typeof attachment2 === "string") {
|
|
1304
1325
|
const texture = this.createColorTexture(attachment2);
|
|
@@ -1379,7 +1400,7 @@ __publicField(Framebuffer, "defaultProps", {
|
|
|
1379
1400
|
width: 1,
|
|
1380
1401
|
height: 1,
|
|
1381
1402
|
colorAttachments: [],
|
|
1382
|
-
// ['rgba8unorm
|
|
1403
|
+
// ['rgba8unorm'],
|
|
1383
1404
|
depthStencilAttachment: null
|
|
1384
1405
|
// 'depth24plus-stencil8'
|
|
1385
1406
|
});
|
|
@@ -1417,12 +1438,10 @@ var RenderPipeline = _RenderPipeline;
|
|
|
1417
1438
|
__publicField(RenderPipeline, "defaultProps", {
|
|
1418
1439
|
...Resource.defaultProps,
|
|
1419
1440
|
vs: null,
|
|
1420
|
-
|
|
1421
|
-
// main
|
|
1441
|
+
vertexEntryPoint: "vertexMain",
|
|
1422
1442
|
vsConstants: {},
|
|
1423
1443
|
fs: null,
|
|
1424
|
-
|
|
1425
|
-
// main
|
|
1444
|
+
fragmentEntryPoint: "fragmentMain",
|
|
1426
1445
|
fsConstants: {},
|
|
1427
1446
|
shaderLayout: null,
|
|
1428
1447
|
bufferLayout: [],
|
|
@@ -1474,10 +1493,10 @@ var _ComputePipeline = class extends Resource {
|
|
|
1474
1493
|
var ComputePipeline = _ComputePipeline;
|
|
1475
1494
|
__publicField(ComputePipeline, "defaultProps", {
|
|
1476
1495
|
...Resource.defaultProps,
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
shaderLayout:
|
|
1496
|
+
shader: void 0,
|
|
1497
|
+
entryPoint: void 0,
|
|
1498
|
+
constants: {},
|
|
1499
|
+
shaderLayout: void 0
|
|
1481
1500
|
});
|
|
1482
1501
|
|
|
1483
1502
|
// dist/adapter/resources/compute-pass.js
|
|
@@ -2047,7 +2066,7 @@ var UniformStore = class {
|
|
|
2047
2066
|
}
|
|
2048
2067
|
/** Destroy any managed uniform buffers */
|
|
2049
2068
|
destroy() {
|
|
2050
|
-
for (const uniformBuffer of
|
|
2069
|
+
for (const uniformBuffer of this.uniformBuffers.values()) {
|
|
2051
2070
|
uniformBuffer.destroy();
|
|
2052
2071
|
}
|
|
2053
2072
|
}
|